diff --git a/.github/workflows/Testing.yml b/.github/workflows/Testing.yml
index c51f5ae..00b6666 100644
--- a/.github/workflows/Testing.yml
+++ b/.github/workflows/Testing.yml
@@ -36,4 +36,3 @@ jobs:
working-directory: ./app/
component: true
build: npm run build
- start: npm start
diff --git a/app/.firebaserc b/app/.firebaserc
new file mode 100644
index 0000000..f33bc5b
--- /dev/null
+++ b/app/.firebaserc
@@ -0,0 +1,5 @@
+{
+ "projects": {
+ "default": "yoda-a67ff"
+ }
+}
diff --git a/app/.gitignore b/app/.gitignore
index a547bf3..2180c33 100644
--- a/app/.gitignore
+++ b/app/.gitignore
@@ -22,3 +22,6 @@ dist-ssr
*.njsproj
*.sln
*.sw?
+
+# .Env protection
+.Env
diff --git a/app/babel.config.js b/app/babel.config.js
new file mode 100644
index 0000000..765230c
--- /dev/null
+++ b/app/babel.config.js
@@ -0,0 +1,6 @@
+export default {
+ presets: [
+ '@babel/preset-env',
+ '@babel/preset-react'
+ ]
+ };
\ No newline at end of file
diff --git a/app/cors.json b/app/cors.json
new file mode 100644
index 0000000..fcda241
--- /dev/null
+++ b/app/cors.json
@@ -0,0 +1,8 @@
+[
+ {
+ "origin": ["http://localhost:5173"],
+ "method": ["GET", "POST", "PUT", "DELETE"],
+ "maxAgeSeconds": 3600,
+ "responseHeader": ["Content-Type", "Authorization"]
+ }
+ ]
\ No newline at end of file
diff --git a/app/cypress.config.js b/app/cypress.config.js
new file mode 100644
index 0000000..e01ceae
--- /dev/null
+++ b/app/cypress.config.js
@@ -0,0 +1,43 @@
+import { defineConfig } from "cypress";
+import webpack from "@cypress/webpack-preprocessor"
+import path, {resolve} from "path";
+import { fileURLToPath } from "url";
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+
+export default defineConfig({
+ e2e: {
+ setupNodeEvents(on, config) {
+
+ const options = webpack.defaultOptions;
+ options.webpackOptions.module.rules.push({
+ test: /.jsx?$/,
+ exclude: /node_modules/,
+ use: {
+ loader: 'babel-loader',
+ options: {
+ presets: [
+ '@babel/preset-env',
+ '@babel/preset-react'
+ ]
+ }
+ }
+ });
+ options.webpackOptions.resolve = {
+ extensions: ['.js','.jsx'],
+ alias: {
+ '@' : resolve (__dirname, "./src"),
+ }
+ };
+ on ("file:preprocessor", webpack(options))
+ // Puoi aggiungere ulteriori configurazioni per gli eventi qui
+ },
+ },
+ component: {
+ devServer: {
+ framework: "react",
+ bundler: "vite",
+ },
+ },
+});
diff --git a/app/cypress/component/ButtonTest.cy.jsx b/app/cypress/component/ButtonTest.cy.jsx
new file mode 100644
index 0000000..bef77fa
--- /dev/null
+++ b/app/cypress/component/ButtonTest.cy.jsx
@@ -0,0 +1,8 @@
+import { Button } from "@/components/ui/button";
+
+describe ('Testing component bottone', () => {
+ it ('Testa la scritta del bottone', () => {
+ cy.mount(Click me! );
+ cy.get('Button').should('contain.text', 'Click me!')
+ })
+});
\ No newline at end of file
diff --git a/app/cypress/e2e/HomeTest.cy.jsx b/app/cypress/e2e/HomeTest.cy.jsx
new file mode 100644
index 0000000..b742818
--- /dev/null
+++ b/app/cypress/e2e/HomeTest.cy.jsx
@@ -0,0 +1,8 @@
+describe ('Primo test', () => {
+ it ('la homepage mostra il titolo e il bottone Registrati Ora', () => {
+ cy.visit('http://localhost:5173/');
+ cy.get('h2').should('contain.text','Benvenuto su Yoda');
+ cy.get('Button').should('contain.text', 'Registrati Ora');
+ });
+
+});
\ No newline at end of file
diff --git a/app/cypress/fixtures/example.json b/app/cypress/fixtures/example.json
new file mode 100644
index 0000000..02e4254
--- /dev/null
+++ b/app/cypress/fixtures/example.json
@@ -0,0 +1,5 @@
+{
+ "name": "Using fixtures to represent data",
+ "email": "hello@cypress.io",
+ "body": "Fixtures are a great way to mock data for responses to routes"
+}
diff --git a/app/cypress/support/commands.js b/app/cypress/support/commands.js
new file mode 100644
index 0000000..66ea16e
--- /dev/null
+++ b/app/cypress/support/commands.js
@@ -0,0 +1,25 @@
+// ***********************************************
+// This example commands.js shows you how to
+// create various custom commands and overwrite
+// existing commands.
+//
+// For more comprehensive examples of custom
+// commands please read more here:
+// https://on.cypress.io/custom-commands
+// ***********************************************
+//
+//
+// -- This is a parent command --
+// Cypress.Commands.add('login', (email, password) => { ... })
+//
+//
+// -- This is a child command --
+// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
+//
+//
+// -- This is a dual command --
+// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
+//
+//
+// -- This will overwrite an existing command --
+// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
\ No newline at end of file
diff --git a/app/cypress/support/component-index.html b/app/cypress/support/component-index.html
new file mode 100644
index 0000000..ac6e79f
--- /dev/null
+++ b/app/cypress/support/component-index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+ Components App
+
+
+
+
+
\ No newline at end of file
diff --git a/app/cypress/support/component.js b/app/cypress/support/component.js
new file mode 100644
index 0000000..666d708
--- /dev/null
+++ b/app/cypress/support/component.js
@@ -0,0 +1,24 @@
+// ***********************************************************
+// This example support/component.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import './commands.js'
+
+import { mount } from 'cypress/react18'
+
+Cypress.Commands.add('mount', mount)
+
+// Example use:
+// cy.mount( )
\ No newline at end of file
diff --git a/app/cypress/support/e2e.js b/app/cypress/support/e2e.js
new file mode 100644
index 0000000..3c80450
--- /dev/null
+++ b/app/cypress/support/e2e.js
@@ -0,0 +1,17 @@
+// ***********************************************************
+// This example support/e2e.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import './commands.js'
\ No newline at end of file
diff --git a/app/dataconnect-generated/js/default-connector/esm/index.esm.js b/app/dataconnect-generated/js/default-connector/esm/index.esm.js
new file mode 100644
index 0000000..f2b2e5f
--- /dev/null
+++ b/app/dataconnect-generated/js/default-connector/esm/index.esm.js
@@ -0,0 +1,8 @@
+import { getDataConnect, validateArgs } from 'firebase/data-connect';
+
+export const connectorConfig = {
+ connector: 'default',
+ service: 'app',
+ location: 'us-central1'
+};
+
diff --git a/app/dataconnect-generated/js/default-connector/esm/package.json b/app/dataconnect-generated/js/default-connector/esm/package.json
new file mode 100644
index 0000000..7c34deb
--- /dev/null
+++ b/app/dataconnect-generated/js/default-connector/esm/package.json
@@ -0,0 +1 @@
+{"type":"module"}
\ No newline at end of file
diff --git a/app/dataconnect-generated/js/default-connector/index.cjs.js b/app/dataconnect-generated/js/default-connector/index.cjs.js
new file mode 100644
index 0000000..032f83c
--- /dev/null
+++ b/app/dataconnect-generated/js/default-connector/index.cjs.js
@@ -0,0 +1,9 @@
+const { getDataConnect, validateArgs } = require('firebase/data-connect');
+
+const connectorConfig = {
+ connector: 'default',
+ service: 'app',
+ location: 'us-central1'
+};
+exports.connectorConfig = connectorConfig;
+
diff --git a/app/dataconnect-generated/js/default-connector/index.d.ts b/app/dataconnect-generated/js/default-connector/index.d.ts
new file mode 100644
index 0000000..15eaf76
--- /dev/null
+++ b/app/dataconnect-generated/js/default-connector/index.d.ts
@@ -0,0 +1,15 @@
+import { ConnectorConfig, DataConnect } from 'firebase/data-connect';
+export const connectorConfig: ConnectorConfig;
+
+export type TimestampString = string;
+
+export type UUIDString = string;
+
+export type Int64String = string;
+
+export type DateString = string;
+
+
+
+
+
diff --git a/app/dataconnect-generated/js/default-connector/package.json b/app/dataconnect-generated/js/default-connector/package.json
new file mode 100644
index 0000000..1319a0e
--- /dev/null
+++ b/app/dataconnect-generated/js/default-connector/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "@firebasegen/default-connector",
+ "version": "1.0.0",
+ "author": "Firebase (https://firebase.google.com/)",
+ "description": "Generated SDK For default",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": " >=18.0"
+ },
+ "typings": "index.d.ts",
+ "module": "esm/index.esm.js",
+ "main": "index.cjs.js",
+ "browser": "esm/index.esm.js",
+ "exports": {
+ ".": {
+ "types": "./index.d.ts",
+ "require": "./index.cjs.js",
+ "default": "./esm/index.esm.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "peerDependencies": {
+ "firebase": "^10.14.0 || ^11.0.0"
+ }
+}
\ No newline at end of file
diff --git a/app/dataconnect/.dataconnect/pgliteData/.s.PGSQL.5432.lock.out b/app/dataconnect/.dataconnect/pgliteData/.s.PGSQL.5432.lock.out
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/PG_VERSION b/app/dataconnect/.dataconnect/pgliteData/PG_VERSION
new file mode 100644
index 0000000..b6a7d89
--- /dev/null
+++ b/app/dataconnect/.dataconnect/pgliteData/PG_VERSION
@@ -0,0 +1 @@
+16
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/112 b/app/dataconnect/.dataconnect/pgliteData/base/1/112
new file mode 100644
index 0000000..146e5f1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/112 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/113 b/app/dataconnect/.dataconnect/pgliteData/base/1/113
new file mode 100644
index 0000000..3399af2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/113 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/1247 b/app/dataconnect/.dataconnect/pgliteData/base/1/1247
new file mode 100644
index 0000000..16a8b91
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/1247 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/1247_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/1247_fsm
new file mode 100644
index 0000000..013faac
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/1247_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/1247_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/1247_vm
new file mode 100644
index 0000000..236334c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/1247_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/1249 b/app/dataconnect/.dataconnect/pgliteData/base/1/1249
new file mode 100644
index 0000000..c3f0d9c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/1249 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/1249_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/1249_fsm
new file mode 100644
index 0000000..a538ac8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/1249_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/1249_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/1249_vm
new file mode 100644
index 0000000..5a9e13a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/1249_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/1255 b/app/dataconnect/.dataconnect/pgliteData/base/1/1255
new file mode 100644
index 0000000..30b10b8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/1255 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/1255_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/1255_fsm
new file mode 100644
index 0000000..c99437e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/1255_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/1255_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/1255_vm
new file mode 100644
index 0000000..9616aa0
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/1255_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/1259 b/app/dataconnect/.dataconnect/pgliteData/base/1/1259
new file mode 100644
index 0000000..2014abe
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/1259 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12590 b/app/dataconnect/.dataconnect/pgliteData/base/1/12590
new file mode 100644
index 0000000..4b3f0ca
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/12590 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12590_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/12590_fsm
new file mode 100644
index 0000000..2a80b9a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/12590_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12590_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/12590_vm
new file mode 100644
index 0000000..c33c5dd
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/12590_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12593 b/app/dataconnect/.dataconnect/pgliteData/base/1/12593
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12594 b/app/dataconnect/.dataconnect/pgliteData/base/1/12594
new file mode 100644
index 0000000..a9d75b5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/12594 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12595 b/app/dataconnect/.dataconnect/pgliteData/base/1/12595
new file mode 100644
index 0000000..d7e0413
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/12595 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12595_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/12595_fsm
new file mode 100644
index 0000000..70d16ce
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/12595_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12595_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/12595_vm
new file mode 100644
index 0000000..dfe6185
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/12595_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12598 b/app/dataconnect/.dataconnect/pgliteData/base/1/12598
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12599 b/app/dataconnect/.dataconnect/pgliteData/base/1/12599
new file mode 100644
index 0000000..3262841
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/12599 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/1259_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/1259_fsm
new file mode 100644
index 0000000..05d8c51
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/1259_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/1259_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/1259_vm
new file mode 100644
index 0000000..22c3723
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/1259_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12600 b/app/dataconnect/.dataconnect/pgliteData/base/1/12600
new file mode 100644
index 0000000..d167bc4
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/12600 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12600_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/12600_fsm
new file mode 100644
index 0000000..0673ada
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/12600_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12600_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/12600_vm
new file mode 100644
index 0000000..4d59d78
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/12600_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12603 b/app/dataconnect/.dataconnect/pgliteData/base/1/12603
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12604 b/app/dataconnect/.dataconnect/pgliteData/base/1/12604
new file mode 100644
index 0000000..ff86d65
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/12604 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12605 b/app/dataconnect/.dataconnect/pgliteData/base/1/12605
new file mode 100644
index 0000000..1b4476c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/12605 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12605_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/12605_fsm
new file mode 100644
index 0000000..a836ddf
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/12605_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12605_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/12605_vm
new file mode 100644
index 0000000..0c21a6b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/12605_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12608 b/app/dataconnect/.dataconnect/pgliteData/base/1/12608
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/12609 b/app/dataconnect/.dataconnect/pgliteData/base/1/12609
new file mode 100644
index 0000000..a0c88e0
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/12609 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/1417 b/app/dataconnect/.dataconnect/pgliteData/base/1/1417
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/1418 b/app/dataconnect/.dataconnect/pgliteData/base/1/1418
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/174 b/app/dataconnect/.dataconnect/pgliteData/base/1/174
new file mode 100644
index 0000000..24f94d9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/174 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/175 b/app/dataconnect/.dataconnect/pgliteData/base/1/175
new file mode 100644
index 0000000..b4ed0da
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/175 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2187 b/app/dataconnect/.dataconnect/pgliteData/base/1/2187
new file mode 100644
index 0000000..09d035d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2187 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2224 b/app/dataconnect/.dataconnect/pgliteData/base/1/2224
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2228 b/app/dataconnect/.dataconnect/pgliteData/base/1/2228
new file mode 100644
index 0000000..0e6fc48
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2228 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2328 b/app/dataconnect/.dataconnect/pgliteData/base/1/2328
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2336 b/app/dataconnect/.dataconnect/pgliteData/base/1/2336
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2337 b/app/dataconnect/.dataconnect/pgliteData/base/1/2337
new file mode 100644
index 0000000..d88881c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2337 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2579 b/app/dataconnect/.dataconnect/pgliteData/base/1/2579
new file mode 100644
index 0000000..099e7df
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2579 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2600 b/app/dataconnect/.dataconnect/pgliteData/base/1/2600
new file mode 100644
index 0000000..d98ee62
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2600 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2600_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2600_fsm
new file mode 100644
index 0000000..0938592
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2600_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2600_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2600_vm
new file mode 100644
index 0000000..6e016d7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2600_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2601 b/app/dataconnect/.dataconnect/pgliteData/base/1/2601
new file mode 100644
index 0000000..d8001c8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2601 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2601_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2601_fsm
new file mode 100644
index 0000000..d388044
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2601_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2601_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2601_vm
new file mode 100644
index 0000000..64ec4a4
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2601_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2602 b/app/dataconnect/.dataconnect/pgliteData/base/1/2602
new file mode 100644
index 0000000..4a27b0a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2602 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2602_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2602_fsm
new file mode 100644
index 0000000..23170d8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2602_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2602_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2602_vm
new file mode 100644
index 0000000..fbb9a72
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2602_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2603 b/app/dataconnect/.dataconnect/pgliteData/base/1/2603
new file mode 100644
index 0000000..d511af5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2603 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2603_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2603_fsm
new file mode 100644
index 0000000..949bd18
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2603_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2603_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2603_vm
new file mode 100644
index 0000000..8940966
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2603_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2604 b/app/dataconnect/.dataconnect/pgliteData/base/1/2604
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2605 b/app/dataconnect/.dataconnect/pgliteData/base/1/2605
new file mode 100644
index 0000000..eeaa7ea
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2605 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2605_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2605_fsm
new file mode 100644
index 0000000..f3b92bf
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2605_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2605_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2605_vm
new file mode 100644
index 0000000..e0676c5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2605_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2606 b/app/dataconnect/.dataconnect/pgliteData/base/1/2606
new file mode 100644
index 0000000..90cebfb
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2606 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2606_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2606_fsm
new file mode 100644
index 0000000..267454e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2606_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2606_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2606_vm
new file mode 100644
index 0000000..63a5ba1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2606_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2607 b/app/dataconnect/.dataconnect/pgliteData/base/1/2607
new file mode 100644
index 0000000..bfad49a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2607 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2607_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2607_fsm
new file mode 100644
index 0000000..80ac8b1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2607_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2607_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2607_vm
new file mode 100644
index 0000000..76f89a6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2607_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2608 b/app/dataconnect/.dataconnect/pgliteData/base/1/2608
new file mode 100644
index 0000000..431a5d2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2608 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2608_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2608_fsm
new file mode 100644
index 0000000..95081cd
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2608_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2608_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2608_vm
new file mode 100644
index 0000000..8c00869
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2608_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2609 b/app/dataconnect/.dataconnect/pgliteData/base/1/2609
new file mode 100644
index 0000000..892366e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2609 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2609_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2609_fsm
new file mode 100644
index 0000000..2592b94
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2609_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2609_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2609_vm
new file mode 100644
index 0000000..05a24e8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2609_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2610 b/app/dataconnect/.dataconnect/pgliteData/base/1/2610
new file mode 100644
index 0000000..d905ec3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2610 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2610_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2610_fsm
new file mode 100644
index 0000000..ecbcb5f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2610_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2610_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2610_vm
new file mode 100644
index 0000000..a2fdd51
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2610_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2611 b/app/dataconnect/.dataconnect/pgliteData/base/1/2611
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2612 b/app/dataconnect/.dataconnect/pgliteData/base/1/2612
new file mode 100644
index 0000000..1aff6e2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2612 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2612_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2612_fsm
new file mode 100644
index 0000000..877976a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2612_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2612_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2612_vm
new file mode 100644
index 0000000..5f719da
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2612_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2613 b/app/dataconnect/.dataconnect/pgliteData/base/1/2613
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2615 b/app/dataconnect/.dataconnect/pgliteData/base/1/2615
new file mode 100644
index 0000000..c62b064
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2615 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2615_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2615_fsm
new file mode 100644
index 0000000..d041693
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2615_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2615_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2615_vm
new file mode 100644
index 0000000..2e4822e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2615_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2616 b/app/dataconnect/.dataconnect/pgliteData/base/1/2616
new file mode 100644
index 0000000..0d60d79
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2616 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2616_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2616_fsm
new file mode 100644
index 0000000..cb924c9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2616_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2616_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2616_vm
new file mode 100644
index 0000000..fb4741f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2616_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2617 b/app/dataconnect/.dataconnect/pgliteData/base/1/2617
new file mode 100644
index 0000000..bcdfc18
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2617 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2617_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2617_fsm
new file mode 100644
index 0000000..29d6066
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2617_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2617_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2617_vm
new file mode 100644
index 0000000..d7fd7b5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2617_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2618 b/app/dataconnect/.dataconnect/pgliteData/base/1/2618
new file mode 100644
index 0000000..fc835b5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2618 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2618_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2618_fsm
new file mode 100644
index 0000000..bcee926
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2618_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2618_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2618_vm
new file mode 100644
index 0000000..e17a5bc
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2618_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2619 b/app/dataconnect/.dataconnect/pgliteData/base/1/2619
new file mode 100644
index 0000000..3cdf05a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2619 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2619_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2619_fsm
new file mode 100644
index 0000000..6f003c4
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2619_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2619_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2619_vm
new file mode 100644
index 0000000..9c3dff0
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2619_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2620 b/app/dataconnect/.dataconnect/pgliteData/base/1/2620
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2650 b/app/dataconnect/.dataconnect/pgliteData/base/1/2650
new file mode 100644
index 0000000..1ca7ea8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2650 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2651 b/app/dataconnect/.dataconnect/pgliteData/base/1/2651
new file mode 100644
index 0000000..435a6e5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2651 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2652 b/app/dataconnect/.dataconnect/pgliteData/base/1/2652
new file mode 100644
index 0000000..f663ba9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2652 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2653 b/app/dataconnect/.dataconnect/pgliteData/base/1/2653
new file mode 100644
index 0000000..632b48f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2653 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2654 b/app/dataconnect/.dataconnect/pgliteData/base/1/2654
new file mode 100644
index 0000000..2a29d4b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2654 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2655 b/app/dataconnect/.dataconnect/pgliteData/base/1/2655
new file mode 100644
index 0000000..8cd8d61
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2655 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2656 b/app/dataconnect/.dataconnect/pgliteData/base/1/2656
new file mode 100644
index 0000000..e88b854
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2656 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2657 b/app/dataconnect/.dataconnect/pgliteData/base/1/2657
new file mode 100644
index 0000000..a52f032
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2657 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2658 b/app/dataconnect/.dataconnect/pgliteData/base/1/2658
new file mode 100644
index 0000000..4166039
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2658 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2659 b/app/dataconnect/.dataconnect/pgliteData/base/1/2659
new file mode 100644
index 0000000..44f735b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2659 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2660 b/app/dataconnect/.dataconnect/pgliteData/base/1/2660
new file mode 100644
index 0000000..91bf35d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2660 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2661 b/app/dataconnect/.dataconnect/pgliteData/base/1/2661
new file mode 100644
index 0000000..8ba15a5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2661 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2662 b/app/dataconnect/.dataconnect/pgliteData/base/1/2662
new file mode 100644
index 0000000..71e2a3f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2662 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2663 b/app/dataconnect/.dataconnect/pgliteData/base/1/2663
new file mode 100644
index 0000000..21e972d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2663 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2664 b/app/dataconnect/.dataconnect/pgliteData/base/1/2664
new file mode 100644
index 0000000..9f13ec9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2664 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2665 b/app/dataconnect/.dataconnect/pgliteData/base/1/2665
new file mode 100644
index 0000000..1ebb155
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2665 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2666 b/app/dataconnect/.dataconnect/pgliteData/base/1/2666
new file mode 100644
index 0000000..f568454
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2666 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2667 b/app/dataconnect/.dataconnect/pgliteData/base/1/2667
new file mode 100644
index 0000000..e0482d2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2667 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2668 b/app/dataconnect/.dataconnect/pgliteData/base/1/2668
new file mode 100644
index 0000000..d4c939a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2668 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2669 b/app/dataconnect/.dataconnect/pgliteData/base/1/2669
new file mode 100644
index 0000000..e076ea0
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2669 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2670 b/app/dataconnect/.dataconnect/pgliteData/base/1/2670
new file mode 100644
index 0000000..79da7ad
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2670 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2673 b/app/dataconnect/.dataconnect/pgliteData/base/1/2673
new file mode 100644
index 0000000..dbff664
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2673 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2674 b/app/dataconnect/.dataconnect/pgliteData/base/1/2674
new file mode 100644
index 0000000..a0a8fb6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2674 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2675 b/app/dataconnect/.dataconnect/pgliteData/base/1/2675
new file mode 100644
index 0000000..cc5b032
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2675 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2678 b/app/dataconnect/.dataconnect/pgliteData/base/1/2678
new file mode 100644
index 0000000..62646d3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2678 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2679 b/app/dataconnect/.dataconnect/pgliteData/base/1/2679
new file mode 100644
index 0000000..345dfd5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2679 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2680 b/app/dataconnect/.dataconnect/pgliteData/base/1/2680
new file mode 100644
index 0000000..17057a7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2680 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2681 b/app/dataconnect/.dataconnect/pgliteData/base/1/2681
new file mode 100644
index 0000000..3c7c934
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2681 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2682 b/app/dataconnect/.dataconnect/pgliteData/base/1/2682
new file mode 100644
index 0000000..cfdeded
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2682 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2683 b/app/dataconnect/.dataconnect/pgliteData/base/1/2683
new file mode 100644
index 0000000..3cb2443
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2683 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2684 b/app/dataconnect/.dataconnect/pgliteData/base/1/2684
new file mode 100644
index 0000000..39c545a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2684 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2685 b/app/dataconnect/.dataconnect/pgliteData/base/1/2685
new file mode 100644
index 0000000..444fa38
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2685 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2686 b/app/dataconnect/.dataconnect/pgliteData/base/1/2686
new file mode 100644
index 0000000..d984f10
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2686 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2687 b/app/dataconnect/.dataconnect/pgliteData/base/1/2687
new file mode 100644
index 0000000..5b293ff
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2687 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2688 b/app/dataconnect/.dataconnect/pgliteData/base/1/2688
new file mode 100644
index 0000000..7767c50
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2688 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2689 b/app/dataconnect/.dataconnect/pgliteData/base/1/2689
new file mode 100644
index 0000000..51d675e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2689 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2690 b/app/dataconnect/.dataconnect/pgliteData/base/1/2690
new file mode 100644
index 0000000..0e8a676
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2690 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2691 b/app/dataconnect/.dataconnect/pgliteData/base/1/2691
new file mode 100644
index 0000000..e292b9b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2691 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2692 b/app/dataconnect/.dataconnect/pgliteData/base/1/2692
new file mode 100644
index 0000000..cc0c4da
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2692 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2693 b/app/dataconnect/.dataconnect/pgliteData/base/1/2693
new file mode 100644
index 0000000..02743a4
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2693 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2696 b/app/dataconnect/.dataconnect/pgliteData/base/1/2696
new file mode 100644
index 0000000..e984d7e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2696 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2699 b/app/dataconnect/.dataconnect/pgliteData/base/1/2699
new file mode 100644
index 0000000..2a296dd
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2699 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2701 b/app/dataconnect/.dataconnect/pgliteData/base/1/2701
new file mode 100644
index 0000000..560de7b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2701 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2702 b/app/dataconnect/.dataconnect/pgliteData/base/1/2702
new file mode 100644
index 0000000..a5b55a6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2702 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2703 b/app/dataconnect/.dataconnect/pgliteData/base/1/2703
new file mode 100644
index 0000000..1bd0595
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2703 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2704 b/app/dataconnect/.dataconnect/pgliteData/base/1/2704
new file mode 100644
index 0000000..0f7ec1b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2704 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2753 b/app/dataconnect/.dataconnect/pgliteData/base/1/2753
new file mode 100644
index 0000000..3c16dff
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2753 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2753_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2753_fsm
new file mode 100644
index 0000000..642bce3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2753_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2753_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2753_vm
new file mode 100644
index 0000000..af2e59b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2753_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2754 b/app/dataconnect/.dataconnect/pgliteData/base/1/2754
new file mode 100644
index 0000000..1612421
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2754 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2755 b/app/dataconnect/.dataconnect/pgliteData/base/1/2755
new file mode 100644
index 0000000..bc50719
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2755 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2756 b/app/dataconnect/.dataconnect/pgliteData/base/1/2756
new file mode 100644
index 0000000..9ccad46
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2756 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2757 b/app/dataconnect/.dataconnect/pgliteData/base/1/2757
new file mode 100644
index 0000000..125fa06
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2757 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2830 b/app/dataconnect/.dataconnect/pgliteData/base/1/2830
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2831 b/app/dataconnect/.dataconnect/pgliteData/base/1/2831
new file mode 100644
index 0000000..6b5e269
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2831 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2832 b/app/dataconnect/.dataconnect/pgliteData/base/1/2832
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2833 b/app/dataconnect/.dataconnect/pgliteData/base/1/2833
new file mode 100644
index 0000000..bc5465b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2833 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2834 b/app/dataconnect/.dataconnect/pgliteData/base/1/2834
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2835 b/app/dataconnect/.dataconnect/pgliteData/base/1/2835
new file mode 100644
index 0000000..0dc9594
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2835 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2836 b/app/dataconnect/.dataconnect/pgliteData/base/1/2836
new file mode 100644
index 0000000..29f86db
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2836 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2836_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2836_fsm
new file mode 100644
index 0000000..aa55b9b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2836_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2836_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2836_vm
new file mode 100644
index 0000000..a4be962
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2836_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2837 b/app/dataconnect/.dataconnect/pgliteData/base/1/2837
new file mode 100644
index 0000000..1b8fca5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2837 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2838 b/app/dataconnect/.dataconnect/pgliteData/base/1/2838
new file mode 100644
index 0000000..e5313aa
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2838 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2838_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2838_fsm
new file mode 100644
index 0000000..f0efced
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2838_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2838_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2838_vm
new file mode 100644
index 0000000..a520907
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2838_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2839 b/app/dataconnect/.dataconnect/pgliteData/base/1/2839
new file mode 100644
index 0000000..520a79b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2839 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2840 b/app/dataconnect/.dataconnect/pgliteData/base/1/2840
new file mode 100644
index 0000000..1b59fbb
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2840 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2840_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/2840_fsm
new file mode 100644
index 0000000..c263bd6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2840_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2840_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/2840_vm
new file mode 100644
index 0000000..cd50bc7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2840_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2841 b/app/dataconnect/.dataconnect/pgliteData/base/1/2841
new file mode 100644
index 0000000..f473e75
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2841 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2995 b/app/dataconnect/.dataconnect/pgliteData/base/1/2995
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/2996 b/app/dataconnect/.dataconnect/pgliteData/base/1/2996
new file mode 100644
index 0000000..3df5c46
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/2996 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3079 b/app/dataconnect/.dataconnect/pgliteData/base/1/3079
new file mode 100644
index 0000000..047aec5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3079 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3079_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/3079_fsm
new file mode 100644
index 0000000..7732d22
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3079_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3079_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/3079_vm
new file mode 100644
index 0000000..75c81d1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3079_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3080 b/app/dataconnect/.dataconnect/pgliteData/base/1/3080
new file mode 100644
index 0000000..8cbc950
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3080 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3081 b/app/dataconnect/.dataconnect/pgliteData/base/1/3081
new file mode 100644
index 0000000..fe0e51a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3081 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3085 b/app/dataconnect/.dataconnect/pgliteData/base/1/3085
new file mode 100644
index 0000000..b1d02c3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3085 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3118 b/app/dataconnect/.dataconnect/pgliteData/base/1/3118
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3119 b/app/dataconnect/.dataconnect/pgliteData/base/1/3119
new file mode 100644
index 0000000..f0a4c8a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3119 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3164 b/app/dataconnect/.dataconnect/pgliteData/base/1/3164
new file mode 100644
index 0000000..23348e3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3164 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3256 b/app/dataconnect/.dataconnect/pgliteData/base/1/3256
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3257 b/app/dataconnect/.dataconnect/pgliteData/base/1/3257
new file mode 100644
index 0000000..8bad7c0
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3257 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3258 b/app/dataconnect/.dataconnect/pgliteData/base/1/3258
new file mode 100644
index 0000000..f5a565e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3258 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3350 b/app/dataconnect/.dataconnect/pgliteData/base/1/3350
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3351 b/app/dataconnect/.dataconnect/pgliteData/base/1/3351
new file mode 100644
index 0000000..4f284a7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3351 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3379 b/app/dataconnect/.dataconnect/pgliteData/base/1/3379
new file mode 100644
index 0000000..14632ca
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3379 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3380 b/app/dataconnect/.dataconnect/pgliteData/base/1/3380
new file mode 100644
index 0000000..1358925
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3380 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3381 b/app/dataconnect/.dataconnect/pgliteData/base/1/3381
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3394 b/app/dataconnect/.dataconnect/pgliteData/base/1/3394
new file mode 100644
index 0000000..ebeeef3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3394 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3394_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/3394_fsm
new file mode 100644
index 0000000..38ac5f8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3394_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3394_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/3394_vm
new file mode 100644
index 0000000..5fe819c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3394_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3395 b/app/dataconnect/.dataconnect/pgliteData/base/1/3395
new file mode 100644
index 0000000..db0fa56
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3395 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3429 b/app/dataconnect/.dataconnect/pgliteData/base/1/3429
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3430 b/app/dataconnect/.dataconnect/pgliteData/base/1/3430
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3431 b/app/dataconnect/.dataconnect/pgliteData/base/1/3431
new file mode 100644
index 0000000..4501ac3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3431 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3433 b/app/dataconnect/.dataconnect/pgliteData/base/1/3433
new file mode 100644
index 0000000..b756132
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3433 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3439 b/app/dataconnect/.dataconnect/pgliteData/base/1/3439
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3440 b/app/dataconnect/.dataconnect/pgliteData/base/1/3440
new file mode 100644
index 0000000..8495b22
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3440 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3455 b/app/dataconnect/.dataconnect/pgliteData/base/1/3455
new file mode 100644
index 0000000..dc45ca8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3455 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3456 b/app/dataconnect/.dataconnect/pgliteData/base/1/3456
new file mode 100644
index 0000000..1a9670c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3456 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3456_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/3456_fsm
new file mode 100644
index 0000000..d659243
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3456_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3456_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/3456_vm
new file mode 100644
index 0000000..9ec377c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3456_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3466 b/app/dataconnect/.dataconnect/pgliteData/base/1/3466
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3467 b/app/dataconnect/.dataconnect/pgliteData/base/1/3467
new file mode 100644
index 0000000..114c9ba
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3467 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3468 b/app/dataconnect/.dataconnect/pgliteData/base/1/3468
new file mode 100644
index 0000000..dec3a4a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3468 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3501 b/app/dataconnect/.dataconnect/pgliteData/base/1/3501
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3502 b/app/dataconnect/.dataconnect/pgliteData/base/1/3502
new file mode 100644
index 0000000..ac3f196
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3502 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3503 b/app/dataconnect/.dataconnect/pgliteData/base/1/3503
new file mode 100644
index 0000000..55bf784
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3503 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3534 b/app/dataconnect/.dataconnect/pgliteData/base/1/3534
new file mode 100644
index 0000000..0210c62
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3534 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3541 b/app/dataconnect/.dataconnect/pgliteData/base/1/3541
new file mode 100644
index 0000000..40869ad
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3541 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3541_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/3541_fsm
new file mode 100644
index 0000000..a3a2de4
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3541_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3541_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/3541_vm
new file mode 100644
index 0000000..bc851c3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3541_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3542 b/app/dataconnect/.dataconnect/pgliteData/base/1/3542
new file mode 100644
index 0000000..0f74b64
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3542 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3574 b/app/dataconnect/.dataconnect/pgliteData/base/1/3574
new file mode 100644
index 0000000..ff9defe
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3574 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3575 b/app/dataconnect/.dataconnect/pgliteData/base/1/3575
new file mode 100644
index 0000000..8148f17
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3575 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3576 b/app/dataconnect/.dataconnect/pgliteData/base/1/3576
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3596 b/app/dataconnect/.dataconnect/pgliteData/base/1/3596
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3597 b/app/dataconnect/.dataconnect/pgliteData/base/1/3597
new file mode 100644
index 0000000..9fc2268
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3597 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3598 b/app/dataconnect/.dataconnect/pgliteData/base/1/3598
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3599 b/app/dataconnect/.dataconnect/pgliteData/base/1/3599
new file mode 100644
index 0000000..f987590
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3599 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3600 b/app/dataconnect/.dataconnect/pgliteData/base/1/3600
new file mode 100644
index 0000000..fe7eb3a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3600 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3600_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/3600_fsm
new file mode 100644
index 0000000..cebec19
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3600_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3600_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/3600_vm
new file mode 100644
index 0000000..65c036d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3600_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3601 b/app/dataconnect/.dataconnect/pgliteData/base/1/3601
new file mode 100644
index 0000000..04c846e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3601 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3601_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/3601_fsm
new file mode 100644
index 0000000..7732d22
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3601_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3601_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/3601_vm
new file mode 100644
index 0000000..18e5c29
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3601_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3602 b/app/dataconnect/.dataconnect/pgliteData/base/1/3602
new file mode 100644
index 0000000..e888897
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3602 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3602_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/3602_fsm
new file mode 100644
index 0000000..d7897de
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3602_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3602_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/3602_vm
new file mode 100644
index 0000000..8c10e72
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3602_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3603 b/app/dataconnect/.dataconnect/pgliteData/base/1/3603
new file mode 100644
index 0000000..f8bad5f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3603 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3603_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/3603_fsm
new file mode 100644
index 0000000..c28dd4f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3603_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3603_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/3603_vm
new file mode 100644
index 0000000..c9a85f7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3603_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3604 b/app/dataconnect/.dataconnect/pgliteData/base/1/3604
new file mode 100644
index 0000000..14e7fb2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3604 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3605 b/app/dataconnect/.dataconnect/pgliteData/base/1/3605
new file mode 100644
index 0000000..4d6f6cb
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3605 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3606 b/app/dataconnect/.dataconnect/pgliteData/base/1/3606
new file mode 100644
index 0000000..9670ce2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3606 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3607 b/app/dataconnect/.dataconnect/pgliteData/base/1/3607
new file mode 100644
index 0000000..b6a47fa
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3607 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3608 b/app/dataconnect/.dataconnect/pgliteData/base/1/3608
new file mode 100644
index 0000000..05df954
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3608 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3609 b/app/dataconnect/.dataconnect/pgliteData/base/1/3609
new file mode 100644
index 0000000..2b1dbd2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3609 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3712 b/app/dataconnect/.dataconnect/pgliteData/base/1/3712
new file mode 100644
index 0000000..8af7bec
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3712 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3764 b/app/dataconnect/.dataconnect/pgliteData/base/1/3764
new file mode 100644
index 0000000..a662e47
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3764 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3764_fsm b/app/dataconnect/.dataconnect/pgliteData/base/1/3764_fsm
new file mode 100644
index 0000000..f64db4d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3764_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3764_vm b/app/dataconnect/.dataconnect/pgliteData/base/1/3764_vm
new file mode 100644
index 0000000..a1b0c26
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3764_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3766 b/app/dataconnect/.dataconnect/pgliteData/base/1/3766
new file mode 100644
index 0000000..8ef7400
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3766 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3767 b/app/dataconnect/.dataconnect/pgliteData/base/1/3767
new file mode 100644
index 0000000..58f9b82
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3767 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/3997 b/app/dataconnect/.dataconnect/pgliteData/base/1/3997
new file mode 100644
index 0000000..9adc33a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/3997 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4143 b/app/dataconnect/.dataconnect/pgliteData/base/1/4143
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4144 b/app/dataconnect/.dataconnect/pgliteData/base/1/4144
new file mode 100644
index 0000000..3f9c40b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/4144 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4145 b/app/dataconnect/.dataconnect/pgliteData/base/1/4145
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4146 b/app/dataconnect/.dataconnect/pgliteData/base/1/4146
new file mode 100644
index 0000000..38cbf59
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/4146 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4147 b/app/dataconnect/.dataconnect/pgliteData/base/1/4147
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4148 b/app/dataconnect/.dataconnect/pgliteData/base/1/4148
new file mode 100644
index 0000000..b6111d1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/4148 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4149 b/app/dataconnect/.dataconnect/pgliteData/base/1/4149
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4150 b/app/dataconnect/.dataconnect/pgliteData/base/1/4150
new file mode 100644
index 0000000..293149c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/4150 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4151 b/app/dataconnect/.dataconnect/pgliteData/base/1/4151
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4152 b/app/dataconnect/.dataconnect/pgliteData/base/1/4152
new file mode 100644
index 0000000..bc755fa
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/4152 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4153 b/app/dataconnect/.dataconnect/pgliteData/base/1/4153
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4154 b/app/dataconnect/.dataconnect/pgliteData/base/1/4154
new file mode 100644
index 0000000..f326816
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/4154 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4155 b/app/dataconnect/.dataconnect/pgliteData/base/1/4155
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4156 b/app/dataconnect/.dataconnect/pgliteData/base/1/4156
new file mode 100644
index 0000000..224d446
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/4156 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4157 b/app/dataconnect/.dataconnect/pgliteData/base/1/4157
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4158 b/app/dataconnect/.dataconnect/pgliteData/base/1/4158
new file mode 100644
index 0000000..19b752a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/4158 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4159 b/app/dataconnect/.dataconnect/pgliteData/base/1/4159
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4160 b/app/dataconnect/.dataconnect/pgliteData/base/1/4160
new file mode 100644
index 0000000..a48ad6d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/4160 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4163 b/app/dataconnect/.dataconnect/pgliteData/base/1/4163
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4164 b/app/dataconnect/.dataconnect/pgliteData/base/1/4164
new file mode 100644
index 0000000..7704ee8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/4164 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4165 b/app/dataconnect/.dataconnect/pgliteData/base/1/4165
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4166 b/app/dataconnect/.dataconnect/pgliteData/base/1/4166
new file mode 100644
index 0000000..edcc07c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/4166 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4167 b/app/dataconnect/.dataconnect/pgliteData/base/1/4167
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4168 b/app/dataconnect/.dataconnect/pgliteData/base/1/4168
new file mode 100644
index 0000000..347b9d5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/4168 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4169 b/app/dataconnect/.dataconnect/pgliteData/base/1/4169
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4170 b/app/dataconnect/.dataconnect/pgliteData/base/1/4170
new file mode 100644
index 0000000..82f77a2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/4170 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4171 b/app/dataconnect/.dataconnect/pgliteData/base/1/4171
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4172 b/app/dataconnect/.dataconnect/pgliteData/base/1/4172
new file mode 100644
index 0000000..8d736da
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/4172 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4173 b/app/dataconnect/.dataconnect/pgliteData/base/1/4173
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/4174 b/app/dataconnect/.dataconnect/pgliteData/base/1/4174
new file mode 100644
index 0000000..b936fa6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/4174 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/5002 b/app/dataconnect/.dataconnect/pgliteData/base/1/5002
new file mode 100644
index 0000000..8cbe938
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/5002 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/548 b/app/dataconnect/.dataconnect/pgliteData/base/1/548
new file mode 100644
index 0000000..d8787f8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/548 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/549 b/app/dataconnect/.dataconnect/pgliteData/base/1/549
new file mode 100644
index 0000000..1d0910b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/549 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/6102 b/app/dataconnect/.dataconnect/pgliteData/base/1/6102
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/6104 b/app/dataconnect/.dataconnect/pgliteData/base/1/6104
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/6106 b/app/dataconnect/.dataconnect/pgliteData/base/1/6106
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/6110 b/app/dataconnect/.dataconnect/pgliteData/base/1/6110
new file mode 100644
index 0000000..8e2aac5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/6110 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/6111 b/app/dataconnect/.dataconnect/pgliteData/base/1/6111
new file mode 100644
index 0000000..ce882c7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/6111 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/6112 b/app/dataconnect/.dataconnect/pgliteData/base/1/6112
new file mode 100644
index 0000000..05861a8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/6112 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/6113 b/app/dataconnect/.dataconnect/pgliteData/base/1/6113
new file mode 100644
index 0000000..9fc4ba5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/6113 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/6116 b/app/dataconnect/.dataconnect/pgliteData/base/1/6116
new file mode 100644
index 0000000..8d7f082
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/6116 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/6117 b/app/dataconnect/.dataconnect/pgliteData/base/1/6117
new file mode 100644
index 0000000..28be024
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/6117 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/6175 b/app/dataconnect/.dataconnect/pgliteData/base/1/6175
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/6176 b/app/dataconnect/.dataconnect/pgliteData/base/1/6176
new file mode 100644
index 0000000..7daffa1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/6176 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/6228 b/app/dataconnect/.dataconnect/pgliteData/base/1/6228
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/6229 b/app/dataconnect/.dataconnect/pgliteData/base/1/6229
new file mode 100644
index 0000000..4a95df9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/6229 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/6237 b/app/dataconnect/.dataconnect/pgliteData/base/1/6237
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/6238 b/app/dataconnect/.dataconnect/pgliteData/base/1/6238
new file mode 100644
index 0000000..596d1d7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/6238 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/6239 b/app/dataconnect/.dataconnect/pgliteData/base/1/6239
new file mode 100644
index 0000000..53f6908
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/6239 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/826 b/app/dataconnect/.dataconnect/pgliteData/base/1/826
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/827 b/app/dataconnect/.dataconnect/pgliteData/base/1/827
new file mode 100644
index 0000000..39a7440
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/827 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/828 b/app/dataconnect/.dataconnect/pgliteData/base/1/828
new file mode 100644
index 0000000..bfc776d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/828 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/PG_VERSION b/app/dataconnect/.dataconnect/pgliteData/base/1/PG_VERSION
new file mode 100644
index 0000000..b6a7d89
--- /dev/null
+++ b/app/dataconnect/.dataconnect/pgliteData/base/1/PG_VERSION
@@ -0,0 +1 @@
+16
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/pg_filenode.map b/app/dataconnect/.dataconnect/pgliteData/base/1/pg_filenode.map
new file mode 100644
index 0000000..4fc801a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/pg_filenode.map differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/1/pg_internal.init b/app/dataconnect/.dataconnect/pgliteData/base/1/pg_internal.init
new file mode 100644
index 0000000..b9daf89
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/1/pg_internal.init differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/112 b/app/dataconnect/.dataconnect/pgliteData/base/4/112
new file mode 100644
index 0000000..146e5f1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/112 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/113 b/app/dataconnect/.dataconnect/pgliteData/base/4/113
new file mode 100644
index 0000000..3399af2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/113 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/1247 b/app/dataconnect/.dataconnect/pgliteData/base/4/1247
new file mode 100644
index 0000000..16a8b91
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/1247 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/1247_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/1247_fsm
new file mode 100644
index 0000000..013faac
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/1247_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/1247_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/1247_vm
new file mode 100644
index 0000000..236334c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/1247_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/1249 b/app/dataconnect/.dataconnect/pgliteData/base/4/1249
new file mode 100644
index 0000000..c3f0d9c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/1249 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/1249_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/1249_fsm
new file mode 100644
index 0000000..a538ac8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/1249_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/1249_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/1249_vm
new file mode 100644
index 0000000..5a9e13a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/1249_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/1255 b/app/dataconnect/.dataconnect/pgliteData/base/4/1255
new file mode 100644
index 0000000..30b10b8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/1255 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/1255_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/1255_fsm
new file mode 100644
index 0000000..c99437e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/1255_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/1255_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/1255_vm
new file mode 100644
index 0000000..9616aa0
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/1255_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/1259 b/app/dataconnect/.dataconnect/pgliteData/base/4/1259
new file mode 100644
index 0000000..7ff6957
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/1259 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12590 b/app/dataconnect/.dataconnect/pgliteData/base/4/12590
new file mode 100644
index 0000000..4b3f0ca
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/12590 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12590_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/12590_fsm
new file mode 100644
index 0000000..2a80b9a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/12590_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12590_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/12590_vm
new file mode 100644
index 0000000..c33c5dd
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/12590_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12593 b/app/dataconnect/.dataconnect/pgliteData/base/4/12593
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12594 b/app/dataconnect/.dataconnect/pgliteData/base/4/12594
new file mode 100644
index 0000000..a9d75b5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/12594 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12595 b/app/dataconnect/.dataconnect/pgliteData/base/4/12595
new file mode 100644
index 0000000..d7e0413
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/12595 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12595_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/12595_fsm
new file mode 100644
index 0000000..70d16ce
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/12595_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12595_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/12595_vm
new file mode 100644
index 0000000..dfe6185
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/12595_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12598 b/app/dataconnect/.dataconnect/pgliteData/base/4/12598
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12599 b/app/dataconnect/.dataconnect/pgliteData/base/4/12599
new file mode 100644
index 0000000..3262841
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/12599 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/1259_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/1259_fsm
new file mode 100644
index 0000000..05d8c51
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/1259_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/1259_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/1259_vm
new file mode 100644
index 0000000..22c3723
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/1259_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12600 b/app/dataconnect/.dataconnect/pgliteData/base/4/12600
new file mode 100644
index 0000000..d167bc4
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/12600 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12600_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/12600_fsm
new file mode 100644
index 0000000..0673ada
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/12600_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12600_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/12600_vm
new file mode 100644
index 0000000..4d59d78
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/12600_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12603 b/app/dataconnect/.dataconnect/pgliteData/base/4/12603
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12604 b/app/dataconnect/.dataconnect/pgliteData/base/4/12604
new file mode 100644
index 0000000..ff86d65
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/12604 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12605 b/app/dataconnect/.dataconnect/pgliteData/base/4/12605
new file mode 100644
index 0000000..1b4476c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/12605 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12605_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/12605_fsm
new file mode 100644
index 0000000..a836ddf
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/12605_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12605_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/12605_vm
new file mode 100644
index 0000000..0c21a6b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/12605_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12608 b/app/dataconnect/.dataconnect/pgliteData/base/4/12608
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/12609 b/app/dataconnect/.dataconnect/pgliteData/base/4/12609
new file mode 100644
index 0000000..a0c88e0
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/12609 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/1417 b/app/dataconnect/.dataconnect/pgliteData/base/4/1417
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/1418 b/app/dataconnect/.dataconnect/pgliteData/base/4/1418
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/174 b/app/dataconnect/.dataconnect/pgliteData/base/4/174
new file mode 100644
index 0000000..24f94d9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/174 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/175 b/app/dataconnect/.dataconnect/pgliteData/base/4/175
new file mode 100644
index 0000000..b4ed0da
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/175 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2187 b/app/dataconnect/.dataconnect/pgliteData/base/4/2187
new file mode 100644
index 0000000..09d035d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2187 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2224 b/app/dataconnect/.dataconnect/pgliteData/base/4/2224
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2228 b/app/dataconnect/.dataconnect/pgliteData/base/4/2228
new file mode 100644
index 0000000..0e6fc48
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2228 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2328 b/app/dataconnect/.dataconnect/pgliteData/base/4/2328
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2336 b/app/dataconnect/.dataconnect/pgliteData/base/4/2336
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2337 b/app/dataconnect/.dataconnect/pgliteData/base/4/2337
new file mode 100644
index 0000000..d88881c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2337 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2579 b/app/dataconnect/.dataconnect/pgliteData/base/4/2579
new file mode 100644
index 0000000..099e7df
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2579 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2600 b/app/dataconnect/.dataconnect/pgliteData/base/4/2600
new file mode 100644
index 0000000..d98ee62
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2600 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2600_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2600_fsm
new file mode 100644
index 0000000..0938592
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2600_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2600_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2600_vm
new file mode 100644
index 0000000..6e016d7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2600_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2601 b/app/dataconnect/.dataconnect/pgliteData/base/4/2601
new file mode 100644
index 0000000..d8001c8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2601 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2601_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2601_fsm
new file mode 100644
index 0000000..d388044
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2601_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2601_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2601_vm
new file mode 100644
index 0000000..64ec4a4
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2601_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2602 b/app/dataconnect/.dataconnect/pgliteData/base/4/2602
new file mode 100644
index 0000000..4a27b0a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2602 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2602_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2602_fsm
new file mode 100644
index 0000000..23170d8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2602_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2602_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2602_vm
new file mode 100644
index 0000000..fbb9a72
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2602_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2603 b/app/dataconnect/.dataconnect/pgliteData/base/4/2603
new file mode 100644
index 0000000..d511af5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2603 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2603_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2603_fsm
new file mode 100644
index 0000000..949bd18
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2603_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2603_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2603_vm
new file mode 100644
index 0000000..8940966
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2603_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2604 b/app/dataconnect/.dataconnect/pgliteData/base/4/2604
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2605 b/app/dataconnect/.dataconnect/pgliteData/base/4/2605
new file mode 100644
index 0000000..eeaa7ea
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2605 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2605_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2605_fsm
new file mode 100644
index 0000000..f3b92bf
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2605_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2605_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2605_vm
new file mode 100644
index 0000000..e0676c5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2605_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2606 b/app/dataconnect/.dataconnect/pgliteData/base/4/2606
new file mode 100644
index 0000000..90cebfb
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2606 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2606_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2606_fsm
new file mode 100644
index 0000000..267454e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2606_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2606_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2606_vm
new file mode 100644
index 0000000..63a5ba1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2606_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2607 b/app/dataconnect/.dataconnect/pgliteData/base/4/2607
new file mode 100644
index 0000000..bfad49a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2607 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2607_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2607_fsm
new file mode 100644
index 0000000..80ac8b1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2607_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2607_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2607_vm
new file mode 100644
index 0000000..76f89a6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2607_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2608 b/app/dataconnect/.dataconnect/pgliteData/base/4/2608
new file mode 100644
index 0000000..431a5d2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2608 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2608_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2608_fsm
new file mode 100644
index 0000000..95081cd
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2608_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2608_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2608_vm
new file mode 100644
index 0000000..8c00869
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2608_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2609 b/app/dataconnect/.dataconnect/pgliteData/base/4/2609
new file mode 100644
index 0000000..892366e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2609 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2609_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2609_fsm
new file mode 100644
index 0000000..2592b94
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2609_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2609_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2609_vm
new file mode 100644
index 0000000..05a24e8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2609_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2610 b/app/dataconnect/.dataconnect/pgliteData/base/4/2610
new file mode 100644
index 0000000..d905ec3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2610 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2610_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2610_fsm
new file mode 100644
index 0000000..ecbcb5f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2610_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2610_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2610_vm
new file mode 100644
index 0000000..a2fdd51
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2610_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2611 b/app/dataconnect/.dataconnect/pgliteData/base/4/2611
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2612 b/app/dataconnect/.dataconnect/pgliteData/base/4/2612
new file mode 100644
index 0000000..1aff6e2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2612 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2612_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2612_fsm
new file mode 100644
index 0000000..877976a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2612_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2612_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2612_vm
new file mode 100644
index 0000000..5f719da
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2612_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2613 b/app/dataconnect/.dataconnect/pgliteData/base/4/2613
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2615 b/app/dataconnect/.dataconnect/pgliteData/base/4/2615
new file mode 100644
index 0000000..c62b064
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2615 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2615_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2615_fsm
new file mode 100644
index 0000000..d041693
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2615_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2615_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2615_vm
new file mode 100644
index 0000000..2e4822e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2615_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2616 b/app/dataconnect/.dataconnect/pgliteData/base/4/2616
new file mode 100644
index 0000000..0d60d79
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2616 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2616_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2616_fsm
new file mode 100644
index 0000000..cb924c9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2616_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2616_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2616_vm
new file mode 100644
index 0000000..fb4741f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2616_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2617 b/app/dataconnect/.dataconnect/pgliteData/base/4/2617
new file mode 100644
index 0000000..bcdfc18
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2617 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2617_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2617_fsm
new file mode 100644
index 0000000..29d6066
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2617_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2617_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2617_vm
new file mode 100644
index 0000000..d7fd7b5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2617_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2618 b/app/dataconnect/.dataconnect/pgliteData/base/4/2618
new file mode 100644
index 0000000..fc835b5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2618 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2618_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2618_fsm
new file mode 100644
index 0000000..bcee926
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2618_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2618_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2618_vm
new file mode 100644
index 0000000..e17a5bc
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2618_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2619 b/app/dataconnect/.dataconnect/pgliteData/base/4/2619
new file mode 100644
index 0000000..3cdf05a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2619 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2619_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2619_fsm
new file mode 100644
index 0000000..6f003c4
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2619_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2619_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2619_vm
new file mode 100644
index 0000000..9c3dff0
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2619_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2620 b/app/dataconnect/.dataconnect/pgliteData/base/4/2620
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2650 b/app/dataconnect/.dataconnect/pgliteData/base/4/2650
new file mode 100644
index 0000000..1ca7ea8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2650 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2651 b/app/dataconnect/.dataconnect/pgliteData/base/4/2651
new file mode 100644
index 0000000..435a6e5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2651 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2652 b/app/dataconnect/.dataconnect/pgliteData/base/4/2652
new file mode 100644
index 0000000..f663ba9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2652 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2653 b/app/dataconnect/.dataconnect/pgliteData/base/4/2653
new file mode 100644
index 0000000..632b48f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2653 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2654 b/app/dataconnect/.dataconnect/pgliteData/base/4/2654
new file mode 100644
index 0000000..2a29d4b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2654 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2655 b/app/dataconnect/.dataconnect/pgliteData/base/4/2655
new file mode 100644
index 0000000..8cd8d61
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2655 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2656 b/app/dataconnect/.dataconnect/pgliteData/base/4/2656
new file mode 100644
index 0000000..e88b854
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2656 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2657 b/app/dataconnect/.dataconnect/pgliteData/base/4/2657
new file mode 100644
index 0000000..a52f032
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2657 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2658 b/app/dataconnect/.dataconnect/pgliteData/base/4/2658
new file mode 100644
index 0000000..4166039
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2658 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2659 b/app/dataconnect/.dataconnect/pgliteData/base/4/2659
new file mode 100644
index 0000000..44f735b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2659 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2660 b/app/dataconnect/.dataconnect/pgliteData/base/4/2660
new file mode 100644
index 0000000..91bf35d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2660 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2661 b/app/dataconnect/.dataconnect/pgliteData/base/4/2661
new file mode 100644
index 0000000..8ba15a5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2661 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2662 b/app/dataconnect/.dataconnect/pgliteData/base/4/2662
new file mode 100644
index 0000000..71e2a3f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2662 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2663 b/app/dataconnect/.dataconnect/pgliteData/base/4/2663
new file mode 100644
index 0000000..21e972d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2663 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2664 b/app/dataconnect/.dataconnect/pgliteData/base/4/2664
new file mode 100644
index 0000000..9f13ec9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2664 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2665 b/app/dataconnect/.dataconnect/pgliteData/base/4/2665
new file mode 100644
index 0000000..1ebb155
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2665 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2666 b/app/dataconnect/.dataconnect/pgliteData/base/4/2666
new file mode 100644
index 0000000..f568454
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2666 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2667 b/app/dataconnect/.dataconnect/pgliteData/base/4/2667
new file mode 100644
index 0000000..e0482d2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2667 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2668 b/app/dataconnect/.dataconnect/pgliteData/base/4/2668
new file mode 100644
index 0000000..d4c939a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2668 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2669 b/app/dataconnect/.dataconnect/pgliteData/base/4/2669
new file mode 100644
index 0000000..e076ea0
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2669 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2670 b/app/dataconnect/.dataconnect/pgliteData/base/4/2670
new file mode 100644
index 0000000..79da7ad
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2670 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2673 b/app/dataconnect/.dataconnect/pgliteData/base/4/2673
new file mode 100644
index 0000000..dbff664
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2673 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2674 b/app/dataconnect/.dataconnect/pgliteData/base/4/2674
new file mode 100644
index 0000000..a0a8fb6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2674 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2675 b/app/dataconnect/.dataconnect/pgliteData/base/4/2675
new file mode 100644
index 0000000..cc5b032
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2675 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2678 b/app/dataconnect/.dataconnect/pgliteData/base/4/2678
new file mode 100644
index 0000000..62646d3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2678 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2679 b/app/dataconnect/.dataconnect/pgliteData/base/4/2679
new file mode 100644
index 0000000..345dfd5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2679 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2680 b/app/dataconnect/.dataconnect/pgliteData/base/4/2680
new file mode 100644
index 0000000..17057a7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2680 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2681 b/app/dataconnect/.dataconnect/pgliteData/base/4/2681
new file mode 100644
index 0000000..3c7c934
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2681 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2682 b/app/dataconnect/.dataconnect/pgliteData/base/4/2682
new file mode 100644
index 0000000..cfdeded
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2682 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2683 b/app/dataconnect/.dataconnect/pgliteData/base/4/2683
new file mode 100644
index 0000000..3cb2443
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2683 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2684 b/app/dataconnect/.dataconnect/pgliteData/base/4/2684
new file mode 100644
index 0000000..39c545a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2684 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2685 b/app/dataconnect/.dataconnect/pgliteData/base/4/2685
new file mode 100644
index 0000000..444fa38
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2685 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2686 b/app/dataconnect/.dataconnect/pgliteData/base/4/2686
new file mode 100644
index 0000000..d984f10
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2686 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2687 b/app/dataconnect/.dataconnect/pgliteData/base/4/2687
new file mode 100644
index 0000000..5b293ff
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2687 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2688 b/app/dataconnect/.dataconnect/pgliteData/base/4/2688
new file mode 100644
index 0000000..7767c50
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2688 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2689 b/app/dataconnect/.dataconnect/pgliteData/base/4/2689
new file mode 100644
index 0000000..51d675e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2689 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2690 b/app/dataconnect/.dataconnect/pgliteData/base/4/2690
new file mode 100644
index 0000000..0e8a676
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2690 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2691 b/app/dataconnect/.dataconnect/pgliteData/base/4/2691
new file mode 100644
index 0000000..e292b9b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2691 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2692 b/app/dataconnect/.dataconnect/pgliteData/base/4/2692
new file mode 100644
index 0000000..cc0c4da
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2692 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2693 b/app/dataconnect/.dataconnect/pgliteData/base/4/2693
new file mode 100644
index 0000000..02743a4
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2693 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2696 b/app/dataconnect/.dataconnect/pgliteData/base/4/2696
new file mode 100644
index 0000000..e984d7e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2696 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2699 b/app/dataconnect/.dataconnect/pgliteData/base/4/2699
new file mode 100644
index 0000000..2a296dd
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2699 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2701 b/app/dataconnect/.dataconnect/pgliteData/base/4/2701
new file mode 100644
index 0000000..560de7b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2701 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2702 b/app/dataconnect/.dataconnect/pgliteData/base/4/2702
new file mode 100644
index 0000000..a5b55a6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2702 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2703 b/app/dataconnect/.dataconnect/pgliteData/base/4/2703
new file mode 100644
index 0000000..1bd0595
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2703 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2704 b/app/dataconnect/.dataconnect/pgliteData/base/4/2704
new file mode 100644
index 0000000..0f7ec1b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2704 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2753 b/app/dataconnect/.dataconnect/pgliteData/base/4/2753
new file mode 100644
index 0000000..3c16dff
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2753 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2753_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2753_fsm
new file mode 100644
index 0000000..642bce3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2753_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2753_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2753_vm
new file mode 100644
index 0000000..af2e59b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2753_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2754 b/app/dataconnect/.dataconnect/pgliteData/base/4/2754
new file mode 100644
index 0000000..1612421
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2754 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2755 b/app/dataconnect/.dataconnect/pgliteData/base/4/2755
new file mode 100644
index 0000000..bc50719
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2755 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2756 b/app/dataconnect/.dataconnect/pgliteData/base/4/2756
new file mode 100644
index 0000000..9ccad46
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2756 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2757 b/app/dataconnect/.dataconnect/pgliteData/base/4/2757
new file mode 100644
index 0000000..125fa06
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2757 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2830 b/app/dataconnect/.dataconnect/pgliteData/base/4/2830
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2831 b/app/dataconnect/.dataconnect/pgliteData/base/4/2831
new file mode 100644
index 0000000..6b5e269
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2831 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2832 b/app/dataconnect/.dataconnect/pgliteData/base/4/2832
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2833 b/app/dataconnect/.dataconnect/pgliteData/base/4/2833
new file mode 100644
index 0000000..bc5465b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2833 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2834 b/app/dataconnect/.dataconnect/pgliteData/base/4/2834
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2835 b/app/dataconnect/.dataconnect/pgliteData/base/4/2835
new file mode 100644
index 0000000..0dc9594
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2835 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2836 b/app/dataconnect/.dataconnect/pgliteData/base/4/2836
new file mode 100644
index 0000000..29f86db
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2836 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2836_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2836_fsm
new file mode 100644
index 0000000..aa55b9b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2836_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2836_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2836_vm
new file mode 100644
index 0000000..a4be962
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2836_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2837 b/app/dataconnect/.dataconnect/pgliteData/base/4/2837
new file mode 100644
index 0000000..1b8fca5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2837 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2838 b/app/dataconnect/.dataconnect/pgliteData/base/4/2838
new file mode 100644
index 0000000..e5313aa
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2838 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2838_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2838_fsm
new file mode 100644
index 0000000..f0efced
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2838_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2838_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2838_vm
new file mode 100644
index 0000000..a520907
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2838_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2839 b/app/dataconnect/.dataconnect/pgliteData/base/4/2839
new file mode 100644
index 0000000..520a79b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2839 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2840 b/app/dataconnect/.dataconnect/pgliteData/base/4/2840
new file mode 100644
index 0000000..1b59fbb
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2840 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2840_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/2840_fsm
new file mode 100644
index 0000000..c263bd6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2840_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2840_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/2840_vm
new file mode 100644
index 0000000..cd50bc7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2840_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2841 b/app/dataconnect/.dataconnect/pgliteData/base/4/2841
new file mode 100644
index 0000000..f473e75
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2841 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2995 b/app/dataconnect/.dataconnect/pgliteData/base/4/2995
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/2996 b/app/dataconnect/.dataconnect/pgliteData/base/4/2996
new file mode 100644
index 0000000..3df5c46
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/2996 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3079 b/app/dataconnect/.dataconnect/pgliteData/base/4/3079
new file mode 100644
index 0000000..047aec5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3079 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3079_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/3079_fsm
new file mode 100644
index 0000000..7732d22
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3079_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3079_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/3079_vm
new file mode 100644
index 0000000..75c81d1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3079_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3080 b/app/dataconnect/.dataconnect/pgliteData/base/4/3080
new file mode 100644
index 0000000..8cbc950
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3080 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3081 b/app/dataconnect/.dataconnect/pgliteData/base/4/3081
new file mode 100644
index 0000000..fe0e51a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3081 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3085 b/app/dataconnect/.dataconnect/pgliteData/base/4/3085
new file mode 100644
index 0000000..b1d02c3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3085 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3118 b/app/dataconnect/.dataconnect/pgliteData/base/4/3118
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3119 b/app/dataconnect/.dataconnect/pgliteData/base/4/3119
new file mode 100644
index 0000000..f0a4c8a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3119 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3164 b/app/dataconnect/.dataconnect/pgliteData/base/4/3164
new file mode 100644
index 0000000..23348e3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3164 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3256 b/app/dataconnect/.dataconnect/pgliteData/base/4/3256
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3257 b/app/dataconnect/.dataconnect/pgliteData/base/4/3257
new file mode 100644
index 0000000..8bad7c0
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3257 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3258 b/app/dataconnect/.dataconnect/pgliteData/base/4/3258
new file mode 100644
index 0000000..f5a565e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3258 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3350 b/app/dataconnect/.dataconnect/pgliteData/base/4/3350
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3351 b/app/dataconnect/.dataconnect/pgliteData/base/4/3351
new file mode 100644
index 0000000..4f284a7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3351 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3379 b/app/dataconnect/.dataconnect/pgliteData/base/4/3379
new file mode 100644
index 0000000..14632ca
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3379 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3380 b/app/dataconnect/.dataconnect/pgliteData/base/4/3380
new file mode 100644
index 0000000..1358925
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3380 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3381 b/app/dataconnect/.dataconnect/pgliteData/base/4/3381
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3394 b/app/dataconnect/.dataconnect/pgliteData/base/4/3394
new file mode 100644
index 0000000..ebeeef3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3394 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3394_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/3394_fsm
new file mode 100644
index 0000000..38ac5f8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3394_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3394_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/3394_vm
new file mode 100644
index 0000000..5fe819c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3394_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3395 b/app/dataconnect/.dataconnect/pgliteData/base/4/3395
new file mode 100644
index 0000000..db0fa56
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3395 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3429 b/app/dataconnect/.dataconnect/pgliteData/base/4/3429
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3430 b/app/dataconnect/.dataconnect/pgliteData/base/4/3430
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3431 b/app/dataconnect/.dataconnect/pgliteData/base/4/3431
new file mode 100644
index 0000000..4501ac3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3431 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3433 b/app/dataconnect/.dataconnect/pgliteData/base/4/3433
new file mode 100644
index 0000000..b756132
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3433 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3439 b/app/dataconnect/.dataconnect/pgliteData/base/4/3439
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3440 b/app/dataconnect/.dataconnect/pgliteData/base/4/3440
new file mode 100644
index 0000000..8495b22
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3440 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3455 b/app/dataconnect/.dataconnect/pgliteData/base/4/3455
new file mode 100644
index 0000000..dc45ca8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3455 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3456 b/app/dataconnect/.dataconnect/pgliteData/base/4/3456
new file mode 100644
index 0000000..1a9670c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3456 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3456_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/3456_fsm
new file mode 100644
index 0000000..d659243
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3456_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3456_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/3456_vm
new file mode 100644
index 0000000..9ec377c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3456_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3466 b/app/dataconnect/.dataconnect/pgliteData/base/4/3466
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3467 b/app/dataconnect/.dataconnect/pgliteData/base/4/3467
new file mode 100644
index 0000000..114c9ba
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3467 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3468 b/app/dataconnect/.dataconnect/pgliteData/base/4/3468
new file mode 100644
index 0000000..dec3a4a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3468 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3501 b/app/dataconnect/.dataconnect/pgliteData/base/4/3501
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3502 b/app/dataconnect/.dataconnect/pgliteData/base/4/3502
new file mode 100644
index 0000000..ac3f196
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3502 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3503 b/app/dataconnect/.dataconnect/pgliteData/base/4/3503
new file mode 100644
index 0000000..55bf784
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3503 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3534 b/app/dataconnect/.dataconnect/pgliteData/base/4/3534
new file mode 100644
index 0000000..0210c62
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3534 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3541 b/app/dataconnect/.dataconnect/pgliteData/base/4/3541
new file mode 100644
index 0000000..40869ad
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3541 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3541_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/3541_fsm
new file mode 100644
index 0000000..a3a2de4
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3541_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3541_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/3541_vm
new file mode 100644
index 0000000..bc851c3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3541_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3542 b/app/dataconnect/.dataconnect/pgliteData/base/4/3542
new file mode 100644
index 0000000..0f74b64
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3542 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3574 b/app/dataconnect/.dataconnect/pgliteData/base/4/3574
new file mode 100644
index 0000000..ff9defe
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3574 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3575 b/app/dataconnect/.dataconnect/pgliteData/base/4/3575
new file mode 100644
index 0000000..8148f17
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3575 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3576 b/app/dataconnect/.dataconnect/pgliteData/base/4/3576
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3596 b/app/dataconnect/.dataconnect/pgliteData/base/4/3596
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3597 b/app/dataconnect/.dataconnect/pgliteData/base/4/3597
new file mode 100644
index 0000000..9fc2268
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3597 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3598 b/app/dataconnect/.dataconnect/pgliteData/base/4/3598
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3599 b/app/dataconnect/.dataconnect/pgliteData/base/4/3599
new file mode 100644
index 0000000..f987590
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3599 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3600 b/app/dataconnect/.dataconnect/pgliteData/base/4/3600
new file mode 100644
index 0000000..fe7eb3a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3600 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3600_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/3600_fsm
new file mode 100644
index 0000000..cebec19
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3600_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3600_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/3600_vm
new file mode 100644
index 0000000..65c036d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3600_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3601 b/app/dataconnect/.dataconnect/pgliteData/base/4/3601
new file mode 100644
index 0000000..04c846e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3601 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3601_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/3601_fsm
new file mode 100644
index 0000000..7732d22
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3601_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3601_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/3601_vm
new file mode 100644
index 0000000..18e5c29
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3601_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3602 b/app/dataconnect/.dataconnect/pgliteData/base/4/3602
new file mode 100644
index 0000000..e888897
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3602 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3602_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/3602_fsm
new file mode 100644
index 0000000..d7897de
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3602_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3602_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/3602_vm
new file mode 100644
index 0000000..8c10e72
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3602_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3603 b/app/dataconnect/.dataconnect/pgliteData/base/4/3603
new file mode 100644
index 0000000..f8bad5f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3603 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3603_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/3603_fsm
new file mode 100644
index 0000000..c28dd4f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3603_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3603_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/3603_vm
new file mode 100644
index 0000000..c9a85f7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3603_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3604 b/app/dataconnect/.dataconnect/pgliteData/base/4/3604
new file mode 100644
index 0000000..14e7fb2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3604 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3605 b/app/dataconnect/.dataconnect/pgliteData/base/4/3605
new file mode 100644
index 0000000..4d6f6cb
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3605 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3606 b/app/dataconnect/.dataconnect/pgliteData/base/4/3606
new file mode 100644
index 0000000..9670ce2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3606 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3607 b/app/dataconnect/.dataconnect/pgliteData/base/4/3607
new file mode 100644
index 0000000..b6a47fa
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3607 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3608 b/app/dataconnect/.dataconnect/pgliteData/base/4/3608
new file mode 100644
index 0000000..05df954
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3608 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3609 b/app/dataconnect/.dataconnect/pgliteData/base/4/3609
new file mode 100644
index 0000000..2b1dbd2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3609 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3712 b/app/dataconnect/.dataconnect/pgliteData/base/4/3712
new file mode 100644
index 0000000..8af7bec
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3712 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3764 b/app/dataconnect/.dataconnect/pgliteData/base/4/3764
new file mode 100644
index 0000000..a662e47
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3764 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3764_fsm b/app/dataconnect/.dataconnect/pgliteData/base/4/3764_fsm
new file mode 100644
index 0000000..f64db4d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3764_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3764_vm b/app/dataconnect/.dataconnect/pgliteData/base/4/3764_vm
new file mode 100644
index 0000000..a1b0c26
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3764_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3766 b/app/dataconnect/.dataconnect/pgliteData/base/4/3766
new file mode 100644
index 0000000..8ef7400
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3766 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3767 b/app/dataconnect/.dataconnect/pgliteData/base/4/3767
new file mode 100644
index 0000000..58f9b82
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3767 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/3997 b/app/dataconnect/.dataconnect/pgliteData/base/4/3997
new file mode 100644
index 0000000..9adc33a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/3997 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4143 b/app/dataconnect/.dataconnect/pgliteData/base/4/4143
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4144 b/app/dataconnect/.dataconnect/pgliteData/base/4/4144
new file mode 100644
index 0000000..3f9c40b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/4144 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4145 b/app/dataconnect/.dataconnect/pgliteData/base/4/4145
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4146 b/app/dataconnect/.dataconnect/pgliteData/base/4/4146
new file mode 100644
index 0000000..38cbf59
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/4146 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4147 b/app/dataconnect/.dataconnect/pgliteData/base/4/4147
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4148 b/app/dataconnect/.dataconnect/pgliteData/base/4/4148
new file mode 100644
index 0000000..b6111d1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/4148 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4149 b/app/dataconnect/.dataconnect/pgliteData/base/4/4149
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4150 b/app/dataconnect/.dataconnect/pgliteData/base/4/4150
new file mode 100644
index 0000000..293149c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/4150 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4151 b/app/dataconnect/.dataconnect/pgliteData/base/4/4151
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4152 b/app/dataconnect/.dataconnect/pgliteData/base/4/4152
new file mode 100644
index 0000000..bc755fa
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/4152 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4153 b/app/dataconnect/.dataconnect/pgliteData/base/4/4153
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4154 b/app/dataconnect/.dataconnect/pgliteData/base/4/4154
new file mode 100644
index 0000000..f326816
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/4154 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4155 b/app/dataconnect/.dataconnect/pgliteData/base/4/4155
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4156 b/app/dataconnect/.dataconnect/pgliteData/base/4/4156
new file mode 100644
index 0000000..224d446
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/4156 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4157 b/app/dataconnect/.dataconnect/pgliteData/base/4/4157
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4158 b/app/dataconnect/.dataconnect/pgliteData/base/4/4158
new file mode 100644
index 0000000..19b752a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/4158 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4159 b/app/dataconnect/.dataconnect/pgliteData/base/4/4159
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4160 b/app/dataconnect/.dataconnect/pgliteData/base/4/4160
new file mode 100644
index 0000000..a48ad6d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/4160 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4163 b/app/dataconnect/.dataconnect/pgliteData/base/4/4163
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4164 b/app/dataconnect/.dataconnect/pgliteData/base/4/4164
new file mode 100644
index 0000000..7704ee8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/4164 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4165 b/app/dataconnect/.dataconnect/pgliteData/base/4/4165
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4166 b/app/dataconnect/.dataconnect/pgliteData/base/4/4166
new file mode 100644
index 0000000..edcc07c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/4166 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4167 b/app/dataconnect/.dataconnect/pgliteData/base/4/4167
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4168 b/app/dataconnect/.dataconnect/pgliteData/base/4/4168
new file mode 100644
index 0000000..347b9d5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/4168 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4169 b/app/dataconnect/.dataconnect/pgliteData/base/4/4169
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4170 b/app/dataconnect/.dataconnect/pgliteData/base/4/4170
new file mode 100644
index 0000000..82f77a2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/4170 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4171 b/app/dataconnect/.dataconnect/pgliteData/base/4/4171
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4172 b/app/dataconnect/.dataconnect/pgliteData/base/4/4172
new file mode 100644
index 0000000..8d736da
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/4172 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4173 b/app/dataconnect/.dataconnect/pgliteData/base/4/4173
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/4174 b/app/dataconnect/.dataconnect/pgliteData/base/4/4174
new file mode 100644
index 0000000..b936fa6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/4174 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/5002 b/app/dataconnect/.dataconnect/pgliteData/base/4/5002
new file mode 100644
index 0000000..8cbe938
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/5002 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/548 b/app/dataconnect/.dataconnect/pgliteData/base/4/548
new file mode 100644
index 0000000..d8787f8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/548 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/549 b/app/dataconnect/.dataconnect/pgliteData/base/4/549
new file mode 100644
index 0000000..1d0910b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/549 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/6102 b/app/dataconnect/.dataconnect/pgliteData/base/4/6102
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/6104 b/app/dataconnect/.dataconnect/pgliteData/base/4/6104
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/6106 b/app/dataconnect/.dataconnect/pgliteData/base/4/6106
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/6110 b/app/dataconnect/.dataconnect/pgliteData/base/4/6110
new file mode 100644
index 0000000..8e2aac5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/6110 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/6111 b/app/dataconnect/.dataconnect/pgliteData/base/4/6111
new file mode 100644
index 0000000..ce882c7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/6111 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/6112 b/app/dataconnect/.dataconnect/pgliteData/base/4/6112
new file mode 100644
index 0000000..05861a8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/6112 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/6113 b/app/dataconnect/.dataconnect/pgliteData/base/4/6113
new file mode 100644
index 0000000..9fc4ba5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/6113 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/6116 b/app/dataconnect/.dataconnect/pgliteData/base/4/6116
new file mode 100644
index 0000000..8d7f082
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/6116 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/6117 b/app/dataconnect/.dataconnect/pgliteData/base/4/6117
new file mode 100644
index 0000000..28be024
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/6117 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/6175 b/app/dataconnect/.dataconnect/pgliteData/base/4/6175
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/6176 b/app/dataconnect/.dataconnect/pgliteData/base/4/6176
new file mode 100644
index 0000000..7daffa1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/6176 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/6228 b/app/dataconnect/.dataconnect/pgliteData/base/4/6228
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/6229 b/app/dataconnect/.dataconnect/pgliteData/base/4/6229
new file mode 100644
index 0000000..4a95df9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/6229 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/6237 b/app/dataconnect/.dataconnect/pgliteData/base/4/6237
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/6238 b/app/dataconnect/.dataconnect/pgliteData/base/4/6238
new file mode 100644
index 0000000..596d1d7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/6238 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/6239 b/app/dataconnect/.dataconnect/pgliteData/base/4/6239
new file mode 100644
index 0000000..53f6908
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/6239 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/826 b/app/dataconnect/.dataconnect/pgliteData/base/4/826
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/827 b/app/dataconnect/.dataconnect/pgliteData/base/4/827
new file mode 100644
index 0000000..39a7440
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/827 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/828 b/app/dataconnect/.dataconnect/pgliteData/base/4/828
new file mode 100644
index 0000000..bfc776d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/828 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/PG_VERSION b/app/dataconnect/.dataconnect/pgliteData/base/4/PG_VERSION
new file mode 100644
index 0000000..b6a7d89
--- /dev/null
+++ b/app/dataconnect/.dataconnect/pgliteData/base/4/PG_VERSION
@@ -0,0 +1 @@
+16
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/4/pg_filenode.map b/app/dataconnect/.dataconnect/pgliteData/base/4/pg_filenode.map
new file mode 100644
index 0000000..4fc801a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/4/pg_filenode.map differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/112 b/app/dataconnect/.dataconnect/pgliteData/base/5/112
new file mode 100644
index 0000000..146e5f1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/112 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/113 b/app/dataconnect/.dataconnect/pgliteData/base/5/113
new file mode 100644
index 0000000..3399af2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/113 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/1247 b/app/dataconnect/.dataconnect/pgliteData/base/5/1247
new file mode 100644
index 0000000..16a8b91
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/1247 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/1247_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/1247_fsm
new file mode 100644
index 0000000..013faac
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/1247_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/1247_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/1247_vm
new file mode 100644
index 0000000..236334c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/1247_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/1249 b/app/dataconnect/.dataconnect/pgliteData/base/5/1249
new file mode 100644
index 0000000..c3f0d9c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/1249 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/1249_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/1249_fsm
new file mode 100644
index 0000000..a538ac8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/1249_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/1249_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/1249_vm
new file mode 100644
index 0000000..5a9e13a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/1249_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/1255 b/app/dataconnect/.dataconnect/pgliteData/base/5/1255
new file mode 100644
index 0000000..30b10b8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/1255 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/1255_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/1255_fsm
new file mode 100644
index 0000000..c99437e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/1255_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/1255_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/1255_vm
new file mode 100644
index 0000000..9616aa0
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/1255_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/1259 b/app/dataconnect/.dataconnect/pgliteData/base/5/1259
new file mode 100644
index 0000000..2014abe
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/1259 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12590 b/app/dataconnect/.dataconnect/pgliteData/base/5/12590
new file mode 100644
index 0000000..4b3f0ca
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/12590 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12590_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/12590_fsm
new file mode 100644
index 0000000..2a80b9a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/12590_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12590_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/12590_vm
new file mode 100644
index 0000000..c33c5dd
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/12590_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12593 b/app/dataconnect/.dataconnect/pgliteData/base/5/12593
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12594 b/app/dataconnect/.dataconnect/pgliteData/base/5/12594
new file mode 100644
index 0000000..a9d75b5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/12594 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12595 b/app/dataconnect/.dataconnect/pgliteData/base/5/12595
new file mode 100644
index 0000000..d7e0413
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/12595 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12595_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/12595_fsm
new file mode 100644
index 0000000..70d16ce
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/12595_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12595_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/12595_vm
new file mode 100644
index 0000000..dfe6185
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/12595_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12598 b/app/dataconnect/.dataconnect/pgliteData/base/5/12598
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12599 b/app/dataconnect/.dataconnect/pgliteData/base/5/12599
new file mode 100644
index 0000000..3262841
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/12599 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/1259_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/1259_fsm
new file mode 100644
index 0000000..05d8c51
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/1259_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/1259_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/1259_vm
new file mode 100644
index 0000000..22c3723
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/1259_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12600 b/app/dataconnect/.dataconnect/pgliteData/base/5/12600
new file mode 100644
index 0000000..d167bc4
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/12600 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12600_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/12600_fsm
new file mode 100644
index 0000000..0673ada
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/12600_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12600_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/12600_vm
new file mode 100644
index 0000000..4d59d78
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/12600_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12603 b/app/dataconnect/.dataconnect/pgliteData/base/5/12603
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12604 b/app/dataconnect/.dataconnect/pgliteData/base/5/12604
new file mode 100644
index 0000000..ff86d65
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/12604 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12605 b/app/dataconnect/.dataconnect/pgliteData/base/5/12605
new file mode 100644
index 0000000..1b4476c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/12605 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12605_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/12605_fsm
new file mode 100644
index 0000000..a836ddf
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/12605_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12605_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/12605_vm
new file mode 100644
index 0000000..0c21a6b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/12605_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12608 b/app/dataconnect/.dataconnect/pgliteData/base/5/12608
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/12609 b/app/dataconnect/.dataconnect/pgliteData/base/5/12609
new file mode 100644
index 0000000..a0c88e0
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/12609 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/1417 b/app/dataconnect/.dataconnect/pgliteData/base/5/1417
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/1418 b/app/dataconnect/.dataconnect/pgliteData/base/5/1418
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/174 b/app/dataconnect/.dataconnect/pgliteData/base/5/174
new file mode 100644
index 0000000..24f94d9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/174 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/175 b/app/dataconnect/.dataconnect/pgliteData/base/5/175
new file mode 100644
index 0000000..b4ed0da
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/175 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2187 b/app/dataconnect/.dataconnect/pgliteData/base/5/2187
new file mode 100644
index 0000000..09d035d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2187 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2224 b/app/dataconnect/.dataconnect/pgliteData/base/5/2224
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2228 b/app/dataconnect/.dataconnect/pgliteData/base/5/2228
new file mode 100644
index 0000000..0e6fc48
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2228 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2328 b/app/dataconnect/.dataconnect/pgliteData/base/5/2328
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2336 b/app/dataconnect/.dataconnect/pgliteData/base/5/2336
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2337 b/app/dataconnect/.dataconnect/pgliteData/base/5/2337
new file mode 100644
index 0000000..d88881c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2337 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2579 b/app/dataconnect/.dataconnect/pgliteData/base/5/2579
new file mode 100644
index 0000000..099e7df
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2579 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2600 b/app/dataconnect/.dataconnect/pgliteData/base/5/2600
new file mode 100644
index 0000000..d98ee62
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2600 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2600_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2600_fsm
new file mode 100644
index 0000000..0938592
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2600_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2600_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2600_vm
new file mode 100644
index 0000000..6e016d7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2600_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2601 b/app/dataconnect/.dataconnect/pgliteData/base/5/2601
new file mode 100644
index 0000000..d8001c8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2601 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2601_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2601_fsm
new file mode 100644
index 0000000..d388044
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2601_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2601_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2601_vm
new file mode 100644
index 0000000..64ec4a4
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2601_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2602 b/app/dataconnect/.dataconnect/pgliteData/base/5/2602
new file mode 100644
index 0000000..4a27b0a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2602 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2602_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2602_fsm
new file mode 100644
index 0000000..23170d8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2602_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2602_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2602_vm
new file mode 100644
index 0000000..fbb9a72
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2602_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2603 b/app/dataconnect/.dataconnect/pgliteData/base/5/2603
new file mode 100644
index 0000000..d511af5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2603 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2603_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2603_fsm
new file mode 100644
index 0000000..949bd18
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2603_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2603_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2603_vm
new file mode 100644
index 0000000..8940966
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2603_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2604 b/app/dataconnect/.dataconnect/pgliteData/base/5/2604
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2605 b/app/dataconnect/.dataconnect/pgliteData/base/5/2605
new file mode 100644
index 0000000..eeaa7ea
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2605 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2605_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2605_fsm
new file mode 100644
index 0000000..f3b92bf
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2605_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2605_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2605_vm
new file mode 100644
index 0000000..e0676c5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2605_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2606 b/app/dataconnect/.dataconnect/pgliteData/base/5/2606
new file mode 100644
index 0000000..90cebfb
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2606 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2606_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2606_fsm
new file mode 100644
index 0000000..267454e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2606_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2606_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2606_vm
new file mode 100644
index 0000000..63a5ba1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2606_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2607 b/app/dataconnect/.dataconnect/pgliteData/base/5/2607
new file mode 100644
index 0000000..bfad49a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2607 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2607_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2607_fsm
new file mode 100644
index 0000000..80ac8b1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2607_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2607_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2607_vm
new file mode 100644
index 0000000..76f89a6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2607_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2608 b/app/dataconnect/.dataconnect/pgliteData/base/5/2608
new file mode 100644
index 0000000..431a5d2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2608 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2608_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2608_fsm
new file mode 100644
index 0000000..95081cd
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2608_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2608_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2608_vm
new file mode 100644
index 0000000..8c00869
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2608_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2609 b/app/dataconnect/.dataconnect/pgliteData/base/5/2609
new file mode 100644
index 0000000..892366e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2609 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2609_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2609_fsm
new file mode 100644
index 0000000..2592b94
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2609_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2609_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2609_vm
new file mode 100644
index 0000000..05a24e8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2609_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2610 b/app/dataconnect/.dataconnect/pgliteData/base/5/2610
new file mode 100644
index 0000000..d905ec3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2610 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2610_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2610_fsm
new file mode 100644
index 0000000..ecbcb5f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2610_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2610_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2610_vm
new file mode 100644
index 0000000..a2fdd51
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2610_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2611 b/app/dataconnect/.dataconnect/pgliteData/base/5/2611
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2612 b/app/dataconnect/.dataconnect/pgliteData/base/5/2612
new file mode 100644
index 0000000..1aff6e2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2612 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2612_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2612_fsm
new file mode 100644
index 0000000..877976a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2612_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2612_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2612_vm
new file mode 100644
index 0000000..5f719da
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2612_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2613 b/app/dataconnect/.dataconnect/pgliteData/base/5/2613
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2615 b/app/dataconnect/.dataconnect/pgliteData/base/5/2615
new file mode 100644
index 0000000..c62b064
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2615 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2615_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2615_fsm
new file mode 100644
index 0000000..d041693
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2615_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2615_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2615_vm
new file mode 100644
index 0000000..2e4822e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2615_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2616 b/app/dataconnect/.dataconnect/pgliteData/base/5/2616
new file mode 100644
index 0000000..0d60d79
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2616 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2616_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2616_fsm
new file mode 100644
index 0000000..cb924c9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2616_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2616_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2616_vm
new file mode 100644
index 0000000..fb4741f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2616_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2617 b/app/dataconnect/.dataconnect/pgliteData/base/5/2617
new file mode 100644
index 0000000..bcdfc18
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2617 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2617_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2617_fsm
new file mode 100644
index 0000000..29d6066
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2617_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2617_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2617_vm
new file mode 100644
index 0000000..d7fd7b5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2617_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2618 b/app/dataconnect/.dataconnect/pgliteData/base/5/2618
new file mode 100644
index 0000000..fc835b5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2618 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2618_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2618_fsm
new file mode 100644
index 0000000..bcee926
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2618_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2618_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2618_vm
new file mode 100644
index 0000000..e17a5bc
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2618_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2619 b/app/dataconnect/.dataconnect/pgliteData/base/5/2619
new file mode 100644
index 0000000..3cdf05a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2619 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2619_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2619_fsm
new file mode 100644
index 0000000..6f003c4
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2619_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2619_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2619_vm
new file mode 100644
index 0000000..9c3dff0
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2619_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2620 b/app/dataconnect/.dataconnect/pgliteData/base/5/2620
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2650 b/app/dataconnect/.dataconnect/pgliteData/base/5/2650
new file mode 100644
index 0000000..1ca7ea8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2650 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2651 b/app/dataconnect/.dataconnect/pgliteData/base/5/2651
new file mode 100644
index 0000000..435a6e5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2651 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2652 b/app/dataconnect/.dataconnect/pgliteData/base/5/2652
new file mode 100644
index 0000000..f663ba9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2652 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2653 b/app/dataconnect/.dataconnect/pgliteData/base/5/2653
new file mode 100644
index 0000000..632b48f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2653 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2654 b/app/dataconnect/.dataconnect/pgliteData/base/5/2654
new file mode 100644
index 0000000..2a29d4b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2654 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2655 b/app/dataconnect/.dataconnect/pgliteData/base/5/2655
new file mode 100644
index 0000000..8cd8d61
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2655 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2656 b/app/dataconnect/.dataconnect/pgliteData/base/5/2656
new file mode 100644
index 0000000..e88b854
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2656 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2657 b/app/dataconnect/.dataconnect/pgliteData/base/5/2657
new file mode 100644
index 0000000..a52f032
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2657 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2658 b/app/dataconnect/.dataconnect/pgliteData/base/5/2658
new file mode 100644
index 0000000..4166039
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2658 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2659 b/app/dataconnect/.dataconnect/pgliteData/base/5/2659
new file mode 100644
index 0000000..44f735b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2659 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2660 b/app/dataconnect/.dataconnect/pgliteData/base/5/2660
new file mode 100644
index 0000000..91bf35d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2660 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2661 b/app/dataconnect/.dataconnect/pgliteData/base/5/2661
new file mode 100644
index 0000000..8ba15a5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2661 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2662 b/app/dataconnect/.dataconnect/pgliteData/base/5/2662
new file mode 100644
index 0000000..71e2a3f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2662 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2663 b/app/dataconnect/.dataconnect/pgliteData/base/5/2663
new file mode 100644
index 0000000..21e972d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2663 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2664 b/app/dataconnect/.dataconnect/pgliteData/base/5/2664
new file mode 100644
index 0000000..9f13ec9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2664 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2665 b/app/dataconnect/.dataconnect/pgliteData/base/5/2665
new file mode 100644
index 0000000..1ebb155
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2665 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2666 b/app/dataconnect/.dataconnect/pgliteData/base/5/2666
new file mode 100644
index 0000000..f568454
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2666 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2667 b/app/dataconnect/.dataconnect/pgliteData/base/5/2667
new file mode 100644
index 0000000..e0482d2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2667 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2668 b/app/dataconnect/.dataconnect/pgliteData/base/5/2668
new file mode 100644
index 0000000..d4c939a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2668 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2669 b/app/dataconnect/.dataconnect/pgliteData/base/5/2669
new file mode 100644
index 0000000..e076ea0
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2669 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2670 b/app/dataconnect/.dataconnect/pgliteData/base/5/2670
new file mode 100644
index 0000000..79da7ad
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2670 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2673 b/app/dataconnect/.dataconnect/pgliteData/base/5/2673
new file mode 100644
index 0000000..dbff664
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2673 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2674 b/app/dataconnect/.dataconnect/pgliteData/base/5/2674
new file mode 100644
index 0000000..a0a8fb6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2674 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2675 b/app/dataconnect/.dataconnect/pgliteData/base/5/2675
new file mode 100644
index 0000000..cc5b032
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2675 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2678 b/app/dataconnect/.dataconnect/pgliteData/base/5/2678
new file mode 100644
index 0000000..62646d3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2678 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2679 b/app/dataconnect/.dataconnect/pgliteData/base/5/2679
new file mode 100644
index 0000000..345dfd5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2679 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2680 b/app/dataconnect/.dataconnect/pgliteData/base/5/2680
new file mode 100644
index 0000000..17057a7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2680 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2681 b/app/dataconnect/.dataconnect/pgliteData/base/5/2681
new file mode 100644
index 0000000..3c7c934
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2681 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2682 b/app/dataconnect/.dataconnect/pgliteData/base/5/2682
new file mode 100644
index 0000000..cfdeded
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2682 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2683 b/app/dataconnect/.dataconnect/pgliteData/base/5/2683
new file mode 100644
index 0000000..3cb2443
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2683 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2684 b/app/dataconnect/.dataconnect/pgliteData/base/5/2684
new file mode 100644
index 0000000..39c545a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2684 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2685 b/app/dataconnect/.dataconnect/pgliteData/base/5/2685
new file mode 100644
index 0000000..444fa38
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2685 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2686 b/app/dataconnect/.dataconnect/pgliteData/base/5/2686
new file mode 100644
index 0000000..d984f10
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2686 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2687 b/app/dataconnect/.dataconnect/pgliteData/base/5/2687
new file mode 100644
index 0000000..5b293ff
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2687 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2688 b/app/dataconnect/.dataconnect/pgliteData/base/5/2688
new file mode 100644
index 0000000..7767c50
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2688 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2689 b/app/dataconnect/.dataconnect/pgliteData/base/5/2689
new file mode 100644
index 0000000..51d675e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2689 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2690 b/app/dataconnect/.dataconnect/pgliteData/base/5/2690
new file mode 100644
index 0000000..0e8a676
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2690 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2691 b/app/dataconnect/.dataconnect/pgliteData/base/5/2691
new file mode 100644
index 0000000..e292b9b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2691 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2692 b/app/dataconnect/.dataconnect/pgliteData/base/5/2692
new file mode 100644
index 0000000..cc0c4da
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2692 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2693 b/app/dataconnect/.dataconnect/pgliteData/base/5/2693
new file mode 100644
index 0000000..02743a4
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2693 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2696 b/app/dataconnect/.dataconnect/pgliteData/base/5/2696
new file mode 100644
index 0000000..e984d7e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2696 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2699 b/app/dataconnect/.dataconnect/pgliteData/base/5/2699
new file mode 100644
index 0000000..2a296dd
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2699 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2701 b/app/dataconnect/.dataconnect/pgliteData/base/5/2701
new file mode 100644
index 0000000..560de7b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2701 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2702 b/app/dataconnect/.dataconnect/pgliteData/base/5/2702
new file mode 100644
index 0000000..a5b55a6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2702 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2703 b/app/dataconnect/.dataconnect/pgliteData/base/5/2703
new file mode 100644
index 0000000..1bd0595
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2703 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2704 b/app/dataconnect/.dataconnect/pgliteData/base/5/2704
new file mode 100644
index 0000000..0f7ec1b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2704 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2753 b/app/dataconnect/.dataconnect/pgliteData/base/5/2753
new file mode 100644
index 0000000..3c16dff
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2753 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2753_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2753_fsm
new file mode 100644
index 0000000..642bce3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2753_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2753_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2753_vm
new file mode 100644
index 0000000..af2e59b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2753_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2754 b/app/dataconnect/.dataconnect/pgliteData/base/5/2754
new file mode 100644
index 0000000..1612421
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2754 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2755 b/app/dataconnect/.dataconnect/pgliteData/base/5/2755
new file mode 100644
index 0000000..bc50719
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2755 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2756 b/app/dataconnect/.dataconnect/pgliteData/base/5/2756
new file mode 100644
index 0000000..9ccad46
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2756 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2757 b/app/dataconnect/.dataconnect/pgliteData/base/5/2757
new file mode 100644
index 0000000..125fa06
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2757 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2830 b/app/dataconnect/.dataconnect/pgliteData/base/5/2830
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2831 b/app/dataconnect/.dataconnect/pgliteData/base/5/2831
new file mode 100644
index 0000000..6b5e269
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2831 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2832 b/app/dataconnect/.dataconnect/pgliteData/base/5/2832
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2833 b/app/dataconnect/.dataconnect/pgliteData/base/5/2833
new file mode 100644
index 0000000..bc5465b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2833 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2834 b/app/dataconnect/.dataconnect/pgliteData/base/5/2834
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2835 b/app/dataconnect/.dataconnect/pgliteData/base/5/2835
new file mode 100644
index 0000000..0dc9594
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2835 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2836 b/app/dataconnect/.dataconnect/pgliteData/base/5/2836
new file mode 100644
index 0000000..29f86db
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2836 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2836_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2836_fsm
new file mode 100644
index 0000000..aa55b9b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2836_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2836_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2836_vm
new file mode 100644
index 0000000..a4be962
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2836_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2837 b/app/dataconnect/.dataconnect/pgliteData/base/5/2837
new file mode 100644
index 0000000..1b8fca5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2837 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2838 b/app/dataconnect/.dataconnect/pgliteData/base/5/2838
new file mode 100644
index 0000000..e5313aa
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2838 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2838_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2838_fsm
new file mode 100644
index 0000000..f0efced
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2838_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2838_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2838_vm
new file mode 100644
index 0000000..a520907
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2838_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2839 b/app/dataconnect/.dataconnect/pgliteData/base/5/2839
new file mode 100644
index 0000000..520a79b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2839 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2840 b/app/dataconnect/.dataconnect/pgliteData/base/5/2840
new file mode 100644
index 0000000..1b59fbb
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2840 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2840_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/2840_fsm
new file mode 100644
index 0000000..c263bd6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2840_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2840_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/2840_vm
new file mode 100644
index 0000000..cd50bc7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2840_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2841 b/app/dataconnect/.dataconnect/pgliteData/base/5/2841
new file mode 100644
index 0000000..f473e75
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2841 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2995 b/app/dataconnect/.dataconnect/pgliteData/base/5/2995
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/2996 b/app/dataconnect/.dataconnect/pgliteData/base/5/2996
new file mode 100644
index 0000000..3df5c46
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/2996 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3079 b/app/dataconnect/.dataconnect/pgliteData/base/5/3079
new file mode 100644
index 0000000..047aec5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3079 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3079_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/3079_fsm
new file mode 100644
index 0000000..7732d22
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3079_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3079_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/3079_vm
new file mode 100644
index 0000000..75c81d1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3079_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3080 b/app/dataconnect/.dataconnect/pgliteData/base/5/3080
new file mode 100644
index 0000000..8cbc950
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3080 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3081 b/app/dataconnect/.dataconnect/pgliteData/base/5/3081
new file mode 100644
index 0000000..fe0e51a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3081 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3085 b/app/dataconnect/.dataconnect/pgliteData/base/5/3085
new file mode 100644
index 0000000..b1d02c3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3085 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3118 b/app/dataconnect/.dataconnect/pgliteData/base/5/3118
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3119 b/app/dataconnect/.dataconnect/pgliteData/base/5/3119
new file mode 100644
index 0000000..f0a4c8a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3119 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3164 b/app/dataconnect/.dataconnect/pgliteData/base/5/3164
new file mode 100644
index 0000000..23348e3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3164 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3256 b/app/dataconnect/.dataconnect/pgliteData/base/5/3256
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3257 b/app/dataconnect/.dataconnect/pgliteData/base/5/3257
new file mode 100644
index 0000000..8bad7c0
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3257 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3258 b/app/dataconnect/.dataconnect/pgliteData/base/5/3258
new file mode 100644
index 0000000..f5a565e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3258 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3350 b/app/dataconnect/.dataconnect/pgliteData/base/5/3350
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3351 b/app/dataconnect/.dataconnect/pgliteData/base/5/3351
new file mode 100644
index 0000000..4f284a7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3351 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3379 b/app/dataconnect/.dataconnect/pgliteData/base/5/3379
new file mode 100644
index 0000000..14632ca
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3379 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3380 b/app/dataconnect/.dataconnect/pgliteData/base/5/3380
new file mode 100644
index 0000000..1358925
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3380 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3381 b/app/dataconnect/.dataconnect/pgliteData/base/5/3381
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3394 b/app/dataconnect/.dataconnect/pgliteData/base/5/3394
new file mode 100644
index 0000000..ebeeef3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3394 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3394_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/3394_fsm
new file mode 100644
index 0000000..38ac5f8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3394_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3394_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/3394_vm
new file mode 100644
index 0000000..5fe819c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3394_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3395 b/app/dataconnect/.dataconnect/pgliteData/base/5/3395
new file mode 100644
index 0000000..db0fa56
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3395 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3429 b/app/dataconnect/.dataconnect/pgliteData/base/5/3429
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3430 b/app/dataconnect/.dataconnect/pgliteData/base/5/3430
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3431 b/app/dataconnect/.dataconnect/pgliteData/base/5/3431
new file mode 100644
index 0000000..4501ac3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3431 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3433 b/app/dataconnect/.dataconnect/pgliteData/base/5/3433
new file mode 100644
index 0000000..b756132
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3433 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3439 b/app/dataconnect/.dataconnect/pgliteData/base/5/3439
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3440 b/app/dataconnect/.dataconnect/pgliteData/base/5/3440
new file mode 100644
index 0000000..8495b22
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3440 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3455 b/app/dataconnect/.dataconnect/pgliteData/base/5/3455
new file mode 100644
index 0000000..dc45ca8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3455 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3456 b/app/dataconnect/.dataconnect/pgliteData/base/5/3456
new file mode 100644
index 0000000..1a9670c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3456 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3456_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/3456_fsm
new file mode 100644
index 0000000..d659243
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3456_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3456_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/3456_vm
new file mode 100644
index 0000000..9ec377c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3456_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3466 b/app/dataconnect/.dataconnect/pgliteData/base/5/3466
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3467 b/app/dataconnect/.dataconnect/pgliteData/base/5/3467
new file mode 100644
index 0000000..114c9ba
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3467 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3468 b/app/dataconnect/.dataconnect/pgliteData/base/5/3468
new file mode 100644
index 0000000..dec3a4a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3468 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3501 b/app/dataconnect/.dataconnect/pgliteData/base/5/3501
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3502 b/app/dataconnect/.dataconnect/pgliteData/base/5/3502
new file mode 100644
index 0000000..ac3f196
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3502 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3503 b/app/dataconnect/.dataconnect/pgliteData/base/5/3503
new file mode 100644
index 0000000..55bf784
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3503 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3534 b/app/dataconnect/.dataconnect/pgliteData/base/5/3534
new file mode 100644
index 0000000..0210c62
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3534 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3541 b/app/dataconnect/.dataconnect/pgliteData/base/5/3541
new file mode 100644
index 0000000..40869ad
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3541 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3541_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/3541_fsm
new file mode 100644
index 0000000..a3a2de4
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3541_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3541_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/3541_vm
new file mode 100644
index 0000000..bc851c3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3541_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3542 b/app/dataconnect/.dataconnect/pgliteData/base/5/3542
new file mode 100644
index 0000000..0f74b64
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3542 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3574 b/app/dataconnect/.dataconnect/pgliteData/base/5/3574
new file mode 100644
index 0000000..ff9defe
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3574 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3575 b/app/dataconnect/.dataconnect/pgliteData/base/5/3575
new file mode 100644
index 0000000..8148f17
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3575 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3576 b/app/dataconnect/.dataconnect/pgliteData/base/5/3576
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3596 b/app/dataconnect/.dataconnect/pgliteData/base/5/3596
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3597 b/app/dataconnect/.dataconnect/pgliteData/base/5/3597
new file mode 100644
index 0000000..9fc2268
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3597 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3598 b/app/dataconnect/.dataconnect/pgliteData/base/5/3598
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3599 b/app/dataconnect/.dataconnect/pgliteData/base/5/3599
new file mode 100644
index 0000000..f987590
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3599 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3600 b/app/dataconnect/.dataconnect/pgliteData/base/5/3600
new file mode 100644
index 0000000..fe7eb3a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3600 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3600_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/3600_fsm
new file mode 100644
index 0000000..cebec19
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3600_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3600_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/3600_vm
new file mode 100644
index 0000000..65c036d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3600_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3601 b/app/dataconnect/.dataconnect/pgliteData/base/5/3601
new file mode 100644
index 0000000..04c846e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3601 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3601_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/3601_fsm
new file mode 100644
index 0000000..7732d22
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3601_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3601_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/3601_vm
new file mode 100644
index 0000000..18e5c29
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3601_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3602 b/app/dataconnect/.dataconnect/pgliteData/base/5/3602
new file mode 100644
index 0000000..e888897
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3602 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3602_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/3602_fsm
new file mode 100644
index 0000000..d7897de
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3602_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3602_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/3602_vm
new file mode 100644
index 0000000..8c10e72
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3602_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3603 b/app/dataconnect/.dataconnect/pgliteData/base/5/3603
new file mode 100644
index 0000000..f8bad5f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3603 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3603_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/3603_fsm
new file mode 100644
index 0000000..c28dd4f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3603_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3603_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/3603_vm
new file mode 100644
index 0000000..c9a85f7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3603_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3604 b/app/dataconnect/.dataconnect/pgliteData/base/5/3604
new file mode 100644
index 0000000..14e7fb2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3604 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3605 b/app/dataconnect/.dataconnect/pgliteData/base/5/3605
new file mode 100644
index 0000000..4d6f6cb
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3605 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3606 b/app/dataconnect/.dataconnect/pgliteData/base/5/3606
new file mode 100644
index 0000000..9670ce2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3606 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3607 b/app/dataconnect/.dataconnect/pgliteData/base/5/3607
new file mode 100644
index 0000000..b6a47fa
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3607 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3608 b/app/dataconnect/.dataconnect/pgliteData/base/5/3608
new file mode 100644
index 0000000..05df954
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3608 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3609 b/app/dataconnect/.dataconnect/pgliteData/base/5/3609
new file mode 100644
index 0000000..2b1dbd2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3609 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3712 b/app/dataconnect/.dataconnect/pgliteData/base/5/3712
new file mode 100644
index 0000000..8af7bec
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3712 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3764 b/app/dataconnect/.dataconnect/pgliteData/base/5/3764
new file mode 100644
index 0000000..a662e47
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3764 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3764_fsm b/app/dataconnect/.dataconnect/pgliteData/base/5/3764_fsm
new file mode 100644
index 0000000..f64db4d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3764_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3764_vm b/app/dataconnect/.dataconnect/pgliteData/base/5/3764_vm
new file mode 100644
index 0000000..a1b0c26
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3764_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3766 b/app/dataconnect/.dataconnect/pgliteData/base/5/3766
new file mode 100644
index 0000000..8ef7400
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3766 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3767 b/app/dataconnect/.dataconnect/pgliteData/base/5/3767
new file mode 100644
index 0000000..58f9b82
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3767 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/3997 b/app/dataconnect/.dataconnect/pgliteData/base/5/3997
new file mode 100644
index 0000000..9adc33a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/3997 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4143 b/app/dataconnect/.dataconnect/pgliteData/base/5/4143
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4144 b/app/dataconnect/.dataconnect/pgliteData/base/5/4144
new file mode 100644
index 0000000..3f9c40b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/4144 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4145 b/app/dataconnect/.dataconnect/pgliteData/base/5/4145
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4146 b/app/dataconnect/.dataconnect/pgliteData/base/5/4146
new file mode 100644
index 0000000..38cbf59
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/4146 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4147 b/app/dataconnect/.dataconnect/pgliteData/base/5/4147
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4148 b/app/dataconnect/.dataconnect/pgliteData/base/5/4148
new file mode 100644
index 0000000..b6111d1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/4148 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4149 b/app/dataconnect/.dataconnect/pgliteData/base/5/4149
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4150 b/app/dataconnect/.dataconnect/pgliteData/base/5/4150
new file mode 100644
index 0000000..293149c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/4150 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4151 b/app/dataconnect/.dataconnect/pgliteData/base/5/4151
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4152 b/app/dataconnect/.dataconnect/pgliteData/base/5/4152
new file mode 100644
index 0000000..bc755fa
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/4152 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4153 b/app/dataconnect/.dataconnect/pgliteData/base/5/4153
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4154 b/app/dataconnect/.dataconnect/pgliteData/base/5/4154
new file mode 100644
index 0000000..f326816
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/4154 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4155 b/app/dataconnect/.dataconnect/pgliteData/base/5/4155
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4156 b/app/dataconnect/.dataconnect/pgliteData/base/5/4156
new file mode 100644
index 0000000..224d446
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/4156 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4157 b/app/dataconnect/.dataconnect/pgliteData/base/5/4157
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4158 b/app/dataconnect/.dataconnect/pgliteData/base/5/4158
new file mode 100644
index 0000000..19b752a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/4158 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4159 b/app/dataconnect/.dataconnect/pgliteData/base/5/4159
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4160 b/app/dataconnect/.dataconnect/pgliteData/base/5/4160
new file mode 100644
index 0000000..a48ad6d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/4160 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4163 b/app/dataconnect/.dataconnect/pgliteData/base/5/4163
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4164 b/app/dataconnect/.dataconnect/pgliteData/base/5/4164
new file mode 100644
index 0000000..7704ee8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/4164 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4165 b/app/dataconnect/.dataconnect/pgliteData/base/5/4165
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4166 b/app/dataconnect/.dataconnect/pgliteData/base/5/4166
new file mode 100644
index 0000000..edcc07c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/4166 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4167 b/app/dataconnect/.dataconnect/pgliteData/base/5/4167
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4168 b/app/dataconnect/.dataconnect/pgliteData/base/5/4168
new file mode 100644
index 0000000..347b9d5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/4168 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4169 b/app/dataconnect/.dataconnect/pgliteData/base/5/4169
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4170 b/app/dataconnect/.dataconnect/pgliteData/base/5/4170
new file mode 100644
index 0000000..82f77a2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/4170 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4171 b/app/dataconnect/.dataconnect/pgliteData/base/5/4171
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4172 b/app/dataconnect/.dataconnect/pgliteData/base/5/4172
new file mode 100644
index 0000000..8d736da
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/4172 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4173 b/app/dataconnect/.dataconnect/pgliteData/base/5/4173
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/4174 b/app/dataconnect/.dataconnect/pgliteData/base/5/4174
new file mode 100644
index 0000000..b936fa6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/4174 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/5002 b/app/dataconnect/.dataconnect/pgliteData/base/5/5002
new file mode 100644
index 0000000..8cbe938
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/5002 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/548 b/app/dataconnect/.dataconnect/pgliteData/base/5/548
new file mode 100644
index 0000000..d8787f8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/548 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/549 b/app/dataconnect/.dataconnect/pgliteData/base/5/549
new file mode 100644
index 0000000..1d0910b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/549 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/6102 b/app/dataconnect/.dataconnect/pgliteData/base/5/6102
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/6104 b/app/dataconnect/.dataconnect/pgliteData/base/5/6104
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/6106 b/app/dataconnect/.dataconnect/pgliteData/base/5/6106
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/6110 b/app/dataconnect/.dataconnect/pgliteData/base/5/6110
new file mode 100644
index 0000000..8e2aac5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/6110 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/6111 b/app/dataconnect/.dataconnect/pgliteData/base/5/6111
new file mode 100644
index 0000000..ce882c7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/6111 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/6112 b/app/dataconnect/.dataconnect/pgliteData/base/5/6112
new file mode 100644
index 0000000..05861a8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/6112 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/6113 b/app/dataconnect/.dataconnect/pgliteData/base/5/6113
new file mode 100644
index 0000000..9fc4ba5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/6113 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/6116 b/app/dataconnect/.dataconnect/pgliteData/base/5/6116
new file mode 100644
index 0000000..8d7f082
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/6116 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/6117 b/app/dataconnect/.dataconnect/pgliteData/base/5/6117
new file mode 100644
index 0000000..28be024
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/6117 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/6175 b/app/dataconnect/.dataconnect/pgliteData/base/5/6175
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/6176 b/app/dataconnect/.dataconnect/pgliteData/base/5/6176
new file mode 100644
index 0000000..7daffa1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/6176 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/6228 b/app/dataconnect/.dataconnect/pgliteData/base/5/6228
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/6229 b/app/dataconnect/.dataconnect/pgliteData/base/5/6229
new file mode 100644
index 0000000..4a95df9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/6229 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/6237 b/app/dataconnect/.dataconnect/pgliteData/base/5/6237
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/6238 b/app/dataconnect/.dataconnect/pgliteData/base/5/6238
new file mode 100644
index 0000000..596d1d7
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/6238 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/6239 b/app/dataconnect/.dataconnect/pgliteData/base/5/6239
new file mode 100644
index 0000000..53f6908
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/6239 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/826 b/app/dataconnect/.dataconnect/pgliteData/base/5/826
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/827 b/app/dataconnect/.dataconnect/pgliteData/base/5/827
new file mode 100644
index 0000000..39a7440
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/827 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/828 b/app/dataconnect/.dataconnect/pgliteData/base/5/828
new file mode 100644
index 0000000..bfc776d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/828 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/PG_VERSION b/app/dataconnect/.dataconnect/pgliteData/base/5/PG_VERSION
new file mode 100644
index 0000000..b6a7d89
--- /dev/null
+++ b/app/dataconnect/.dataconnect/pgliteData/base/5/PG_VERSION
@@ -0,0 +1 @@
+16
diff --git a/app/dataconnect/.dataconnect/pgliteData/base/5/pg_filenode.map b/app/dataconnect/.dataconnect/pgliteData/base/5/pg_filenode.map
new file mode 100644
index 0000000..4fc801a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/base/5/pg_filenode.map differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/1213 b/app/dataconnect/.dataconnect/pgliteData/global/1213
new file mode 100644
index 0000000..eec8dc3
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/1213 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/1213_fsm b/app/dataconnect/.dataconnect/pgliteData/global/1213_fsm
new file mode 100644
index 0000000..86074be
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/1213_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/1213_vm b/app/dataconnect/.dataconnect/pgliteData/global/1213_vm
new file mode 100644
index 0000000..de1a819
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/1213_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/1214 b/app/dataconnect/.dataconnect/pgliteData/global/1214
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/1232 b/app/dataconnect/.dataconnect/pgliteData/global/1232
new file mode 100644
index 0000000..ad5d5f5
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/1232 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/1233 b/app/dataconnect/.dataconnect/pgliteData/global/1233
new file mode 100644
index 0000000..145dd54
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/1233 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/1260 b/app/dataconnect/.dataconnect/pgliteData/global/1260
new file mode 100644
index 0000000..50e9c9d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/1260 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/1260_fsm b/app/dataconnect/.dataconnect/pgliteData/global/1260_fsm
new file mode 100644
index 0000000..8bbe958
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/1260_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/1260_vm b/app/dataconnect/.dataconnect/pgliteData/global/1260_vm
new file mode 100644
index 0000000..7fa3e5a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/1260_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/1261 b/app/dataconnect/.dataconnect/pgliteData/global/1261
new file mode 100644
index 0000000..10d6d8f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/1261 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/1261_fsm b/app/dataconnect/.dataconnect/pgliteData/global/1261_fsm
new file mode 100644
index 0000000..f32c23e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/1261_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/1261_vm b/app/dataconnect/.dataconnect/pgliteData/global/1261_vm
new file mode 100644
index 0000000..083910b
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/1261_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/1262 b/app/dataconnect/.dataconnect/pgliteData/global/1262
new file mode 100644
index 0000000..f8cd9f4
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/1262 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/1262_fsm b/app/dataconnect/.dataconnect/pgliteData/global/1262_fsm
new file mode 100644
index 0000000..63aac12
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/1262_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/1262_vm b/app/dataconnect/.dataconnect/pgliteData/global/1262_vm
new file mode 100644
index 0000000..ab388bf
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/1262_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2396 b/app/dataconnect/.dataconnect/pgliteData/global/2396
new file mode 100644
index 0000000..a48e314
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/2396 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2396_fsm b/app/dataconnect/.dataconnect/pgliteData/global/2396_fsm
new file mode 100644
index 0000000..7a4f24f
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/2396_fsm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2396_vm b/app/dataconnect/.dataconnect/pgliteData/global/2396_vm
new file mode 100644
index 0000000..123c77d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/2396_vm differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2397 b/app/dataconnect/.dataconnect/pgliteData/global/2397
new file mode 100644
index 0000000..44861a1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/2397 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2671 b/app/dataconnect/.dataconnect/pgliteData/global/2671
new file mode 100644
index 0000000..918fc1c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/2671 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2672 b/app/dataconnect/.dataconnect/pgliteData/global/2672
new file mode 100644
index 0000000..b4f1887
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/2672 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2676 b/app/dataconnect/.dataconnect/pgliteData/global/2676
new file mode 100644
index 0000000..5248f1a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/2676 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2677 b/app/dataconnect/.dataconnect/pgliteData/global/2677
new file mode 100644
index 0000000..7a6b850
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/2677 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2694 b/app/dataconnect/.dataconnect/pgliteData/global/2694
new file mode 100644
index 0000000..7f4e1ae
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/2694 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2695 b/app/dataconnect/.dataconnect/pgliteData/global/2695
new file mode 100644
index 0000000..7476d8d
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/2695 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2697 b/app/dataconnect/.dataconnect/pgliteData/global/2697
new file mode 100644
index 0000000..834f400
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/2697 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2698 b/app/dataconnect/.dataconnect/pgliteData/global/2698
new file mode 100644
index 0000000..c416fad
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/2698 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2846 b/app/dataconnect/.dataconnect/pgliteData/global/2846
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2847 b/app/dataconnect/.dataconnect/pgliteData/global/2847
new file mode 100644
index 0000000..25eb77e
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/2847 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2964 b/app/dataconnect/.dataconnect/pgliteData/global/2964
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2965 b/app/dataconnect/.dataconnect/pgliteData/global/2965
new file mode 100644
index 0000000..8b4f087
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/2965 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2966 b/app/dataconnect/.dataconnect/pgliteData/global/2966
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/2967 b/app/dataconnect/.dataconnect/pgliteData/global/2967
new file mode 100644
index 0000000..f5592fa
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/2967 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/3592 b/app/dataconnect/.dataconnect/pgliteData/global/3592
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/3593 b/app/dataconnect/.dataconnect/pgliteData/global/3593
new file mode 100644
index 0000000..8a6a58a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/3593 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/4060 b/app/dataconnect/.dataconnect/pgliteData/global/4060
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/4061 b/app/dataconnect/.dataconnect/pgliteData/global/4061
new file mode 100644
index 0000000..8b87208
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/4061 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/4175 b/app/dataconnect/.dataconnect/pgliteData/global/4175
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/4176 b/app/dataconnect/.dataconnect/pgliteData/global/4176
new file mode 100644
index 0000000..17173ac
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/4176 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/4177 b/app/dataconnect/.dataconnect/pgliteData/global/4177
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/4178 b/app/dataconnect/.dataconnect/pgliteData/global/4178
new file mode 100644
index 0000000..897a6e8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/4178 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/4181 b/app/dataconnect/.dataconnect/pgliteData/global/4181
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/4182 b/app/dataconnect/.dataconnect/pgliteData/global/4182
new file mode 100644
index 0000000..f8001f8
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/4182 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/4183 b/app/dataconnect/.dataconnect/pgliteData/global/4183
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/4184 b/app/dataconnect/.dataconnect/pgliteData/global/4184
new file mode 100644
index 0000000..6507a79
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/4184 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/4185 b/app/dataconnect/.dataconnect/pgliteData/global/4185
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/4186 b/app/dataconnect/.dataconnect/pgliteData/global/4186
new file mode 100644
index 0000000..2a6da91
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/4186 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/6000 b/app/dataconnect/.dataconnect/pgliteData/global/6000
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/6001 b/app/dataconnect/.dataconnect/pgliteData/global/6001
new file mode 100644
index 0000000..7fd860c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/6001 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/6002 b/app/dataconnect/.dataconnect/pgliteData/global/6002
new file mode 100644
index 0000000..da805f2
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/6002 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/6100 b/app/dataconnect/.dataconnect/pgliteData/global/6100
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/6114 b/app/dataconnect/.dataconnect/pgliteData/global/6114
new file mode 100644
index 0000000..1b3b858
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/6114 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/6115 b/app/dataconnect/.dataconnect/pgliteData/global/6115
new file mode 100644
index 0000000..075d41c
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/6115 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/6243 b/app/dataconnect/.dataconnect/pgliteData/global/6243
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/6244 b/app/dataconnect/.dataconnect/pgliteData/global/6244
new file mode 100644
index 0000000..e69de29
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/6245 b/app/dataconnect/.dataconnect/pgliteData/global/6245
new file mode 100644
index 0000000..dee8a33
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/6245 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/6246 b/app/dataconnect/.dataconnect/pgliteData/global/6246
new file mode 100644
index 0000000..b46d930
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/6246 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/6247 b/app/dataconnect/.dataconnect/pgliteData/global/6247
new file mode 100644
index 0000000..f30a140
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/6247 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/6302 b/app/dataconnect/.dataconnect/pgliteData/global/6302
new file mode 100644
index 0000000..4a450a1
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/6302 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/6303 b/app/dataconnect/.dataconnect/pgliteData/global/6303
new file mode 100644
index 0000000..00773fb
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/6303 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/pg_control b/app/dataconnect/.dataconnect/pgliteData/global/pg_control
new file mode 100644
index 0000000..db659e6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/pg_control differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/pg_filenode.map b/app/dataconnect/.dataconnect/pgliteData/global/pg_filenode.map
new file mode 100644
index 0000000..97c07a6
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/pg_filenode.map differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/global/pg_internal.init b/app/dataconnect/.dataconnect/pgliteData/global/pg_internal.init
new file mode 100644
index 0000000..5c0492a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/global/pg_internal.init differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/pg_hba.conf b/app/dataconnect/.dataconnect/pgliteData/pg_hba.conf
new file mode 100644
index 0000000..8f5a510
--- /dev/null
+++ b/app/dataconnect/.dataconnect/pgliteData/pg_hba.conf
@@ -0,0 +1,126 @@
+# PostgreSQL Client Authentication Configuration File
+# ===================================================
+#
+# Refer to the "Client Authentication" section in the PostgreSQL
+# documentation for a complete description of this file. A short
+# synopsis follows.
+#
+# ----------------------
+# Authentication Records
+# ----------------------
+#
+# This file controls: which hosts are allowed to connect, how clients
+# are authenticated, which PostgreSQL user names they can use, which
+# databases they can access. Records take one of these forms:
+#
+# local DATABASE USER METHOD [OPTIONS]
+# host DATABASE USER ADDRESS METHOD [OPTIONS]
+# hostssl DATABASE USER ADDRESS METHOD [OPTIONS]
+# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]
+# hostgssenc DATABASE USER ADDRESS METHOD [OPTIONS]
+# hostnogssenc DATABASE USER ADDRESS METHOD [OPTIONS]
+#
+# (The uppercase items must be replaced by actual values.)
+#
+# The first field is the connection type:
+# - "local" is a Unix-domain socket
+# - "host" is a TCP/IP socket (encrypted or not)
+# - "hostssl" is a TCP/IP socket that is SSL-encrypted
+# - "hostnossl" is a TCP/IP socket that is not SSL-encrypted
+# - "hostgssenc" is a TCP/IP socket that is GSSAPI-encrypted
+# - "hostnogssenc" is a TCP/IP socket that is not GSSAPI-encrypted
+#
+# DATABASE can be "all", "sameuser", "samerole", "replication", a
+# database name, a regular expression (if it starts with a slash (/))
+# or a comma-separated list thereof. The "all" keyword does not match
+# "replication". Access to replication must be enabled in a separate
+# record (see example below).
+#
+# USER can be "all", a user name, a group name prefixed with "+", a
+# regular expression (if it starts with a slash (/)) or a comma-separated
+# list thereof. In both the DATABASE and USER fields you can also write
+# a file name prefixed with "@" to include names from a separate file.
+#
+# ADDRESS specifies the set of hosts the record matches. It can be a
+# host name, or it is made up of an IP address and a CIDR mask that is
+# an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that
+# specifies the number of significant bits in the mask. A host name
+# that starts with a dot (.) matches a suffix of the actual host name.
+# Alternatively, you can write an IP address and netmask in separate
+# columns to specify the set of hosts. Instead of a CIDR-address, you
+# can write "samehost" to match any of the server's own IP addresses,
+# or "samenet" to match any address in any subnet that the server is
+# directly connected to.
+#
+# METHOD can be "trust", "reject", "md5", "password", "scram-sha-256",
+# "gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert".
+# Note that "password" sends passwords in clear text; "md5" or
+# "scram-sha-256" are preferred since they send encrypted passwords.
+#
+# OPTIONS are a set of options for the authentication in the format
+# NAME=VALUE. The available options depend on the different
+# authentication methods -- refer to the "Client Authentication"
+# section in the documentation for a list of which options are
+# available for which authentication methods.
+#
+# Database and user names containing spaces, commas, quotes and other
+# special characters must be quoted. Quoting one of the keywords
+# "all", "sameuser", "samerole" or "replication" makes the name lose
+# its special character, and just match a database or username with
+# that name.
+#
+# ---------------
+# Include Records
+# ---------------
+#
+# This file allows the inclusion of external files or directories holding
+# more records, using the following keywords:
+#
+# include FILE
+# include_if_exists FILE
+# include_dir DIRECTORY
+#
+# FILE is the file name to include, and DIR is the directory name containing
+# the file(s) to include. Any file in a directory will be loaded if suffixed
+# with ".conf". The files of a directory are ordered by name.
+# include_if_exists ignores missing files. FILE and DIRECTORY can be
+# specified as a relative or an absolute path, and can be double-quoted if
+# they contain spaces.
+#
+# -------------
+# Miscellaneous
+# -------------
+#
+# This file is read on server startup and when the server receives a
+# SIGHUP signal. If you edit the file on a running system, you have to
+# SIGHUP the server for the changes to take effect, run "pg_ctl reload",
+# or execute "SELECT pg_reload_conf()".
+#
+# ----------------------------------
+# Put your actual configuration here
+# ----------------------------------
+#
+# If you want to allow non-local connections, you need to add more
+# "host" records. In that case you will also need to make PostgreSQL
+# listen on a non-local interface via the listen_addresses
+# configuration parameter, or via the -i or -h command line switches.
+
+# CAUTION: Configuring the system for local "trust" authentication
+# allows any local user to connect as any PostgreSQL user, including
+# the database superuser. If you do not trust all your local users,
+# use another authentication method.
+
+
+# TYPE DATABASE USER ADDRESS METHOD
+
+# "local" is for Unix domain socket connections only
+local all all trust
+# IPv4 local connections:
+host all all 127.0.0.1/32 trust
+# IPv6 local connections:
+host all all ::1/128 trust
+# Allow replication connections from localhost, by a user with the
+# replication privilege.
+local replication all trust
+host replication all 127.0.0.1/32 trust
+host replication all ::1/128 trust
diff --git a/app/dataconnect/.dataconnect/pgliteData/pg_ident.conf b/app/dataconnect/.dataconnect/pgliteData/pg_ident.conf
new file mode 100644
index 0000000..f5225f2
--- /dev/null
+++ b/app/dataconnect/.dataconnect/pgliteData/pg_ident.conf
@@ -0,0 +1,72 @@
+# PostgreSQL User Name Maps
+# =========================
+#
+# ---------------
+# Mapping Records
+# ---------------
+#
+# Refer to the PostgreSQL documentation, chapter "Client
+# Authentication" for a complete description. A short synopsis
+# follows.
+#
+# This file controls PostgreSQL user name mapping. It maps external
+# user names to their corresponding PostgreSQL user names. Records
+# are of the form:
+#
+# MAPNAME SYSTEM-USERNAME PG-USERNAME
+#
+# (The uppercase quantities must be replaced by actual values.)
+#
+# MAPNAME is the (otherwise freely chosen) map name that was used in
+# pg_hba.conf. SYSTEM-USERNAME is the detected user name of the
+# client. PG-USERNAME is the requested PostgreSQL user name. The
+# existence of a record specifies that SYSTEM-USERNAME may connect as
+# PG-USERNAME.
+#
+# If SYSTEM-USERNAME starts with a slash (/), it will be treated as a
+# regular expression. Optionally this can contain a capture (a
+# parenthesized subexpression). The substring matching the capture
+# will be substituted for \1 (backslash-one) if present in
+# PG-USERNAME.
+#
+# PG-USERNAME can be "all", a user name, a group name prefixed with "+", or
+# a regular expression (if it starts with a slash (/)). If it is a regular
+# expression, the substring matching with \1 has no effect.
+#
+# Multiple maps may be specified in this file and used by pg_hba.conf.
+#
+# No map names are defined in the default configuration. If all
+# system user names and PostgreSQL user names are the same, you don't
+# need anything in this file.
+#
+# ---------------
+# Include Records
+# ---------------
+#
+# This file allows the inclusion of external files or directories holding
+# more records, using the following keywords:
+#
+# include FILE
+# include_if_exists FILE
+# include_dir DIRECTORY
+#
+# FILE is the file name to include, and DIR is the directory name containing
+# the file(s) to include. Any file in a directory will be loaded if suffixed
+# with ".conf". The files of a directory are ordered by name.
+# include_if_exists ignores missing files. FILE and DIRECTORY can be
+# specified as a relative or an absolute path, and can be double-quoted if
+# they contain spaces.
+#
+# -------------------------------
+# Miscellaneous
+# -------------------------------
+#
+# This file is read on server startup and when the postmaster receives
+# a SIGHUP signal. If you edit the file on a running system, you have
+# to SIGHUP the postmaster for the changes to take effect. You can
+# use "pg_ctl reload" to do that.
+
+# Put your actual configuration here
+# ----------------------------------
+
+# MAPNAME SYSTEM-USERNAME PG-USERNAME
diff --git a/app/dataconnect/.dataconnect/pgliteData/pg_logical/replorigin_checkpoint b/app/dataconnect/.dataconnect/pgliteData/pg_logical/replorigin_checkpoint
new file mode 100644
index 0000000..ec451b0
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/pg_logical/replorigin_checkpoint differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/pg_multixact/members/0000 b/app/dataconnect/.dataconnect/pgliteData/pg_multixact/members/0000
new file mode 100644
index 0000000..6d17cf9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/pg_multixact/members/0000 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/pg_multixact/offsets/0000 b/app/dataconnect/.dataconnect/pgliteData/pg_multixact/offsets/0000
new file mode 100644
index 0000000..6d17cf9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/pg_multixact/offsets/0000 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/pg_subtrans/0000 b/app/dataconnect/.dataconnect/pgliteData/pg_subtrans/0000
new file mode 100644
index 0000000..6d17cf9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/pg_subtrans/0000 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/pg_wal/000000010000000000000005 b/app/dataconnect/.dataconnect/pgliteData/pg_wal/000000010000000000000005
new file mode 100644
index 0000000..e2444a9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/pg_wal/000000010000000000000005 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/pg_wal/000000010000000000000006 b/app/dataconnect/.dataconnect/pgliteData/pg_wal/000000010000000000000006
new file mode 100644
index 0000000..753b051
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/pg_wal/000000010000000000000006 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/pg_wal/000000010000000000000007 b/app/dataconnect/.dataconnect/pgliteData/pg_wal/000000010000000000000007
new file mode 100644
index 0000000..b189b46
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/pg_wal/000000010000000000000007 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/pg_wal/000000010000000000000008 b/app/dataconnect/.dataconnect/pgliteData/pg_wal/000000010000000000000008
new file mode 100644
index 0000000..35782c9
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/pg_wal/000000010000000000000008 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/pg_wal/000000010000000000000009 b/app/dataconnect/.dataconnect/pgliteData/pg_wal/000000010000000000000009
new file mode 100644
index 0000000..d3fa13a
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/pg_wal/000000010000000000000009 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/pg_xact/0000 b/app/dataconnect/.dataconnect/pgliteData/pg_xact/0000
new file mode 100644
index 0000000..f60eb93
Binary files /dev/null and b/app/dataconnect/.dataconnect/pgliteData/pg_xact/0000 differ
diff --git a/app/dataconnect/.dataconnect/pgliteData/postgresql.auto.conf b/app/dataconnect/.dataconnect/pgliteData/postgresql.auto.conf
new file mode 100644
index 0000000..af7125e
--- /dev/null
+++ b/app/dataconnect/.dataconnect/pgliteData/postgresql.auto.conf
@@ -0,0 +1,2 @@
+# Do not edit this file manually!
+# It will be overwritten by the ALTER SYSTEM command.
diff --git a/app/dataconnect/.dataconnect/pgliteData/postgresql.conf b/app/dataconnect/.dataconnect/pgliteData/postgresql.conf
new file mode 100644
index 0000000..938bdaf
--- /dev/null
+++ b/app/dataconnect/.dataconnect/pgliteData/postgresql.conf
@@ -0,0 +1,820 @@
+# -----------------------------
+# PostgreSQL configuration file
+# -----------------------------
+#
+# This file consists of lines of the form:
+#
+# name = value
+#
+# (The "=" is optional.) Whitespace may be used. Comments are introduced with
+# "#" anywhere on a line. The complete list of parameter names and allowed
+# values can be found in the PostgreSQL documentation.
+#
+# The commented-out settings shown in this file represent the default values.
+# Re-commenting a setting is NOT sufficient to revert it to the default value;
+# you need to reload the server.
+#
+# This file is read on server startup and when the server receives a SIGHUP
+# signal. If you edit the file on a running system, you have to SIGHUP the
+# server for the changes to take effect, run "pg_ctl reload", or execute
+# "SELECT pg_reload_conf()". Some parameters, which are marked below,
+# require a server shutdown and restart to take effect.
+#
+# Any parameter can also be given as a command-line option to the server, e.g.,
+# "postgres -c log_connections=on". Some parameters can be changed at run time
+# with the "SET" SQL command.
+#
+# Memory units: B = bytes Time units: us = microseconds
+# kB = kilobytes ms = milliseconds
+# MB = megabytes s = seconds
+# GB = gigabytes min = minutes
+# TB = terabytes h = hours
+# d = days
+
+
+#------------------------------------------------------------------------------
+# FILE LOCATIONS
+#------------------------------------------------------------------------------
+
+# The default values of these variables are driven from the -D command-line
+# option or PGDATA environment variable, represented here as ConfigDir.
+
+#data_directory = 'ConfigDir' # use data in another directory
+ # (change requires restart)
+#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file
+ # (change requires restart)
+#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file
+ # (change requires restart)
+
+# If external_pid_file is not explicitly set, no extra PID file is written.
+#external_pid_file = '' # write an extra PID file
+ # (change requires restart)
+
+
+#------------------------------------------------------------------------------
+# CONNECTIONS AND AUTHENTICATION
+#------------------------------------------------------------------------------
+
+# - Connection Settings -
+
+#listen_addresses = 'localhost' # what IP address(es) to listen on;
+ # comma-separated list of addresses;
+ # defaults to 'localhost'; use '*' for all
+ # (change requires restart)
+#port = 5432 # (change requires restart)
+max_connections = 10 # (change requires restart)
+#reserved_connections = 0 # (change requires restart)
+#superuser_reserved_connections = 3 # (change requires restart)
+#unix_socket_directories = '/tmp' # comma-separated list of directories
+ # (change requires restart)
+#unix_socket_group = '' # (change requires restart)
+#unix_socket_permissions = 0777 # begin with 0 to use octal notation
+ # (change requires restart)
+#bonjour = off # advertise server via Bonjour
+ # (change requires restart)
+#bonjour_name = '' # defaults to the computer name
+ # (change requires restart)
+
+# - TCP settings -
+# see "man tcp" for details
+
+#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds;
+ # 0 selects the system default
+#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds;
+ # 0 selects the system default
+#tcp_keepalives_count = 0 # TCP_KEEPCNT;
+ # 0 selects the system default
+#tcp_user_timeout = 0 # TCP_USER_TIMEOUT, in milliseconds;
+ # 0 selects the system default
+
+#client_connection_check_interval = 0 # time between checks for client
+ # disconnection while running queries;
+ # 0 for never
+
+# - Authentication -
+
+#authentication_timeout = 1min # 1s-600s
+#password_encryption = scram-sha-256 # scram-sha-256 or md5
+#scram_iterations = 4096
+#db_user_namespace = off
+
+# GSSAPI using Kerberos
+#krb_server_keyfile = 'FILE:${sysconfdir}/krb5.keytab'
+#krb_caseins_users = off
+#gss_accept_delegation = off
+
+# - SSL -
+
+#ssl = off
+#ssl_ca_file = ''
+#ssl_cert_file = 'server.crt'
+#ssl_crl_file = ''
+#ssl_crl_dir = ''
+#ssl_key_file = 'server.key'
+#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers
+#ssl_prefer_server_ciphers = on
+#ssl_ecdh_curve = 'prime256v1'
+#ssl_min_protocol_version = 'TLSv1.2'
+#ssl_max_protocol_version = ''
+#ssl_dh_params_file = ''
+#ssl_passphrase_command = ''
+#ssl_passphrase_command_supports_reload = off
+
+
+#------------------------------------------------------------------------------
+# RESOURCE USAGE (except WAL)
+#------------------------------------------------------------------------------
+
+# - Memory -
+
+shared_buffers = 400kB # min 128kB
+ # (change requires restart)
+#huge_pages = try # on, off, or try
+ # (change requires restart)
+#huge_page_size = 0 # zero for system default
+ # (change requires restart)
+#temp_buffers = 8MB # min 800kB
+#max_prepared_transactions = 0 # zero disables the feature
+ # (change requires restart)
+# Caution: it is not advisable to set max_prepared_transactions nonzero unless
+# you actively intend to use prepared transactions.
+#work_mem = 4MB # min 64kB
+#hash_mem_multiplier = 2.0 # 1-1000.0 multiplier on hash table work_mem
+#maintenance_work_mem = 64MB # min 1MB
+#autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem
+#logical_decoding_work_mem = 64MB # min 64kB
+#max_stack_depth = 2MB # min 100kB
+#shared_memory_type = mmap # the default is the first option
+ # supported by the operating system:
+ # mmap
+ # sysv
+ # windows
+ # (change requires restart)
+dynamic_shared_memory_type = posix # the default is usually the first option
+ # supported by the operating system:
+ # posix
+ # sysv
+ # windows
+ # mmap
+ # (change requires restart)
+#min_dynamic_shared_memory = 0MB # (change requires restart)
+#vacuum_buffer_usage_limit = 256kB # size of vacuum and analyze buffer access strategy ring;
+ # 0 to disable vacuum buffer access strategy;
+ # range 128kB to 16GB
+
+# - Disk -
+
+#temp_file_limit = -1 # limits per-process temp file space
+ # in kilobytes, or -1 for no limit
+
+# - Kernel Resources -
+
+#max_files_per_process = 1000 # min 64
+ # (change requires restart)
+
+# - Cost-Based Vacuum Delay -
+
+#vacuum_cost_delay = 0 # 0-100 milliseconds (0 disables)
+#vacuum_cost_page_hit = 1 # 0-10000 credits
+#vacuum_cost_page_miss = 2 # 0-10000 credits
+#vacuum_cost_page_dirty = 20 # 0-10000 credits
+#vacuum_cost_limit = 200 # 1-10000 credits
+
+# - Background Writer -
+
+#bgwriter_delay = 200ms # 10-10000ms between rounds
+#bgwriter_lru_maxpages = 100 # max buffers written/round, 0 disables
+#bgwriter_lru_multiplier = 2.0 # 0-10.0 multiplier on buffers scanned/round
+#bgwriter_flush_after = 0 # measured in pages, 0 disables
+
+# - Asynchronous Behavior -
+
+#backend_flush_after = 0 # measured in pages, 0 disables
+#effective_io_concurrency = 1 # 1-1000; 0 disables prefetching
+#maintenance_io_concurrency = 10 # 1-1000; 0 disables prefetching
+#max_worker_processes = 8 # (change requires restart)
+#max_parallel_workers_per_gather = 2 # limited by max_parallel_workers
+#max_parallel_maintenance_workers = 2 # limited by max_parallel_workers
+#max_parallel_workers = 8 # number of max_worker_processes that
+ # can be used in parallel operations
+#parallel_leader_participation = on
+#old_snapshot_threshold = -1 # 1min-60d; -1 disables; 0 is immediate
+ # (change requires restart)
+
+
+#------------------------------------------------------------------------------
+# WRITE-AHEAD LOG
+#------------------------------------------------------------------------------
+
+# - Settings -
+
+#wal_level = replica # minimal, replica, or logical
+ # (change requires restart)
+#fsync = on # flush data to disk for crash safety
+ # (turning this off can cause
+ # unrecoverable data corruption)
+#synchronous_commit = on # synchronization level;
+ # off, local, remote_write, remote_apply, or on
+#wal_sync_method = fsync # the default is the first option
+ # supported by the operating system:
+ # open_datasync
+ # fdatasync (default on Linux and FreeBSD)
+ # fsync
+ # fsync_writethrough
+ # open_sync
+#full_page_writes = on # recover from partial page writes
+#wal_log_hints = off # also do full page writes of non-critical updates
+ # (change requires restart)
+#wal_compression = off # enables compression of full-page writes;
+ # off, pglz, lz4, zstd, or on
+#wal_init_zero = on # zero-fill new WAL files
+#wal_recycle = on # recycle WAL files
+#wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers
+ # (change requires restart)
+#wal_writer_delay = 200ms # 1-10000 milliseconds
+#wal_writer_flush_after = 1MB # measured in pages, 0 disables
+#wal_skip_threshold = 2MB
+
+#commit_delay = 0 # range 0-100000, in microseconds
+#commit_siblings = 5 # range 1-1000
+
+# - Checkpoints -
+
+#checkpoint_timeout = 5min # range 30s-1d
+#checkpoint_completion_target = 0.9 # checkpoint target duration, 0.0 - 1.0
+#checkpoint_flush_after = 0 # measured in pages, 0 disables
+#checkpoint_warning = 30s # 0 disables
+max_wal_size = 64MB
+min_wal_size = 5MB
+
+# - Prefetching during recovery -
+
+#recovery_prefetch = try # prefetch pages referenced in the WAL?
+#wal_decode_buffer_size = 512kB # lookahead window used for prefetching
+ # (change requires restart)
+
+# - Archiving -
+
+#archive_mode = off # enables archiving; off, on, or always
+ # (change requires restart)
+#archive_library = '' # library to use to archive a WAL file
+ # (empty string indicates archive_command should
+ # be used)
+#archive_command = '' # command to use to archive a WAL file
+ # placeholders: %p = path of file to archive
+ # %f = file name only
+ # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
+#archive_timeout = 0 # force a WAL file switch after this
+ # number of seconds; 0 disables
+
+# - Archive Recovery -
+
+# These are only used in recovery mode.
+
+#restore_command = '' # command to use to restore an archived WAL file
+ # placeholders: %p = path of file to restore
+ # %f = file name only
+ # e.g. 'cp /mnt/server/archivedir/%f %p'
+#archive_cleanup_command = '' # command to execute at every restartpoint
+#recovery_end_command = '' # command to execute at completion of recovery
+
+# - Recovery Target -
+
+# Set these only when performing a targeted recovery.
+
+#recovery_target = '' # 'immediate' to end recovery as soon as a
+ # consistent state is reached
+ # (change requires restart)
+#recovery_target_name = '' # the named restore point to which recovery will proceed
+ # (change requires restart)
+#recovery_target_time = '' # the time stamp up to which recovery will proceed
+ # (change requires restart)
+#recovery_target_xid = '' # the transaction ID up to which recovery will proceed
+ # (change requires restart)
+#recovery_target_lsn = '' # the WAL LSN up to which recovery will proceed
+ # (change requires restart)
+#recovery_target_inclusive = on # Specifies whether to stop:
+ # just after the specified recovery target (on)
+ # just before the recovery target (off)
+ # (change requires restart)
+#recovery_target_timeline = 'latest' # 'current', 'latest', or timeline ID
+ # (change requires restart)
+#recovery_target_action = 'pause' # 'pause', 'promote', 'shutdown'
+ # (change requires restart)
+
+
+#------------------------------------------------------------------------------
+# REPLICATION
+#------------------------------------------------------------------------------
+
+# - Sending Servers -
+
+# Set these on the primary and on any standby that will send replication data.
+
+#max_wal_senders = 10 # max number of walsender processes
+ # (change requires restart)
+#max_replication_slots = 10 # max number of replication slots
+ # (change requires restart)
+#wal_keep_size = 0 # in megabytes; 0 disables
+#max_slot_wal_keep_size = -1 # in megabytes; -1 disables
+#wal_sender_timeout = 60s # in milliseconds; 0 disables
+#track_commit_timestamp = off # collect timestamp of transaction commit
+ # (change requires restart)
+
+# - Primary Server -
+
+# These settings are ignored on a standby server.
+
+#synchronous_standby_names = '' # standby servers that provide sync rep
+ # method to choose sync standbys, number of sync standbys,
+ # and comma-separated list of application_name
+ # from standby(s); '*' = all
+
+# - Standby Servers -
+
+# These settings are ignored on a primary server.
+
+#primary_conninfo = '' # connection string to sending server
+#primary_slot_name = '' # replication slot on sending server
+#hot_standby = on # "off" disallows queries during recovery
+ # (change requires restart)
+#max_standby_archive_delay = 30s # max delay before canceling queries
+ # when reading WAL from archive;
+ # -1 allows indefinite delay
+#max_standby_streaming_delay = 30s # max delay before canceling queries
+ # when reading streaming WAL;
+ # -1 allows indefinite delay
+#wal_receiver_create_temp_slot = off # create temp slot if primary_slot_name
+ # is not set
+#wal_receiver_status_interval = 10s # send replies at least this often
+ # 0 disables
+#hot_standby_feedback = off # send info from standby to prevent
+ # query conflicts
+#wal_receiver_timeout = 60s # time that receiver waits for
+ # communication from primary
+ # in milliseconds; 0 disables
+#wal_retrieve_retry_interval = 5s # time to wait before retrying to
+ # retrieve WAL after a failed attempt
+#recovery_min_apply_delay = 0 # minimum delay for applying changes during recovery
+
+# - Subscribers -
+
+# These settings are ignored on a publisher.
+
+#max_logical_replication_workers = 4 # taken from max_worker_processes
+ # (change requires restart)
+#max_sync_workers_per_subscription = 2 # taken from max_logical_replication_workers
+#max_parallel_apply_workers_per_subscription = 2 # taken from max_logical_replication_workers
+
+
+#------------------------------------------------------------------------------
+# QUERY TUNING
+#------------------------------------------------------------------------------
+
+# - Planner Method Configuration -
+
+#enable_async_append = on
+#enable_bitmapscan = on
+#enable_gathermerge = on
+#enable_hashagg = on
+#enable_hashjoin = on
+#enable_incremental_sort = on
+#enable_indexscan = on
+#enable_indexonlyscan = on
+#enable_material = on
+#enable_memoize = on
+#enable_mergejoin = on
+#enable_nestloop = on
+#enable_parallel_append = on
+#enable_parallel_hash = on
+#enable_partition_pruning = on
+#enable_partitionwise_join = off
+#enable_partitionwise_aggregate = off
+#enable_presorted_aggregate = on
+#enable_seqscan = on
+#enable_sort = on
+#enable_tidscan = on
+
+# - Planner Cost Constants -
+
+#seq_page_cost = 1.0 # measured on an arbitrary scale
+#random_page_cost = 4.0 # same scale as above
+#cpu_tuple_cost = 0.01 # same scale as above
+#cpu_index_tuple_cost = 0.005 # same scale as above
+#cpu_operator_cost = 0.0025 # same scale as above
+#parallel_setup_cost = 1000.0 # same scale as above
+#parallel_tuple_cost = 0.1 # same scale as above
+#min_parallel_table_scan_size = 8MB
+#min_parallel_index_scan_size = 512kB
+#effective_cache_size = 4GB
+
+#jit_above_cost = 100000 # perform JIT compilation if available
+ # and query more expensive than this;
+ # -1 disables
+#jit_inline_above_cost = 500000 # inline small functions if query is
+ # more expensive than this; -1 disables
+#jit_optimize_above_cost = 500000 # use expensive JIT optimizations if
+ # query is more expensive than this;
+ # -1 disables
+
+# - Genetic Query Optimizer -
+
+#geqo = on
+#geqo_threshold = 12
+#geqo_effort = 5 # range 1-10
+#geqo_pool_size = 0 # selects default based on effort
+#geqo_generations = 0 # selects default based on effort
+#geqo_selection_bias = 2.0 # range 1.5-2.0
+#geqo_seed = 0.0 # range 0.0-1.0
+
+# - Other Planner Options -
+
+#default_statistics_target = 100 # range 1-10000
+#constraint_exclusion = partition # on, off, or partition
+#cursor_tuple_fraction = 0.1 # range 0.0-1.0
+#from_collapse_limit = 8
+#jit = on # allow JIT compilation
+#join_collapse_limit = 8 # 1 disables collapsing of explicit
+ # JOIN clauses
+#plan_cache_mode = auto # auto, force_generic_plan or
+ # force_custom_plan
+#recursive_worktable_factor = 10.0 # range 0.001-1000000
+
+
+#------------------------------------------------------------------------------
+# REPORTING AND LOGGING
+#------------------------------------------------------------------------------
+
+# - Where to Log -
+
+#log_destination = 'stderr' # Valid values are combinations of
+ # stderr, csvlog, jsonlog, syslog, and
+ # eventlog, depending on platform.
+ # csvlog and jsonlog require
+ # logging_collector to be on.
+
+# This is used when logging to stderr:
+#logging_collector = off # Enable capturing of stderr, jsonlog,
+ # and csvlog into log files. Required
+ # to be on for csvlogs and jsonlogs.
+ # (change requires restart)
+
+# These are only used if logging_collector is on:
+#log_directory = 'log' # directory where log files are written,
+ # can be absolute or relative to PGDATA
+#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
+ # can include strftime() escapes
+log_file_mode = 0640 # creation mode for log files,
+ # begin with 0 to use octal notation
+#log_rotation_age = 1d # Automatic rotation of logfiles will
+ # happen after that time. 0 disables.
+#log_rotation_size = 10MB # Automatic rotation of logfiles will
+ # happen after that much log output.
+ # 0 disables.
+#log_truncate_on_rotation = off # If on, an existing log file with the
+ # same name as the new log file will be
+ # truncated rather than appended to.
+ # But such truncation only occurs on
+ # time-driven rotation, not on restarts
+ # or size-driven rotation. Default is
+ # off, meaning append to existing files
+ # in all cases.
+
+# These are relevant when logging to syslog:
+#syslog_facility = 'LOCAL0'
+#syslog_ident = 'postgres'
+#syslog_sequence_numbers = on
+#syslog_split_messages = on
+
+# This is only relevant when logging to eventlog (Windows):
+# (change requires restart)
+#event_source = 'PostgreSQL'
+
+# - When to Log -
+
+#log_min_messages = warning # values in order of decreasing detail:
+ # debug5
+ # debug4
+ # debug3
+ # debug2
+ # debug1
+ # info
+ # notice
+ # warning
+ # error
+ # log
+ # fatal
+ # panic
+
+#log_min_error_statement = error # values in order of decreasing detail:
+ # debug5
+ # debug4
+ # debug3
+ # debug2
+ # debug1
+ # info
+ # notice
+ # warning
+ # error
+ # log
+ # fatal
+ # panic (effectively off)
+
+#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements
+ # and their durations, > 0 logs only
+ # statements running at least this number
+ # of milliseconds
+
+#log_min_duration_sample = -1 # -1 is disabled, 0 logs a sample of statements
+ # and their durations, > 0 logs only a sample of
+ # statements running at least this number
+ # of milliseconds;
+ # sample fraction is determined by log_statement_sample_rate
+
+#log_statement_sample_rate = 1.0 # fraction of logged statements exceeding
+ # log_min_duration_sample to be logged;
+ # 1.0 logs all such statements, 0.0 never logs
+
+
+#log_transaction_sample_rate = 0.0 # fraction of transactions whose statements
+ # are logged regardless of their duration; 1.0 logs all
+ # statements from all transactions, 0.0 never logs
+
+#log_startup_progress_interval = 10s # Time between progress updates for
+ # long-running startup operations.
+ # 0 disables the feature, > 0 indicates
+ # the interval in milliseconds.
+
+# - What to Log -
+
+#debug_print_parse = off
+#debug_print_rewritten = off
+#debug_print_plan = off
+#debug_pretty_print = on
+#log_autovacuum_min_duration = 10min # log autovacuum activity;
+ # -1 disables, 0 logs all actions and
+ # their durations, > 0 logs only
+ # actions running at least this number
+ # of milliseconds.
+#log_checkpoints = on
+#log_connections = off
+#log_disconnections = off
+#log_duration = off
+#log_error_verbosity = default # terse, default, or verbose messages
+#log_hostname = off
+#log_line_prefix = '%m [%p] ' # special values:
+ # %a = application name
+ # %u = user name
+ # %d = database name
+ # %r = remote host and port
+ # %h = remote host
+ # %b = backend type
+ # %p = process ID
+ # %P = process ID of parallel group leader
+ # %t = timestamp without milliseconds
+ # %m = timestamp with milliseconds
+ # %n = timestamp with milliseconds (as a Unix epoch)
+ # %Q = query ID (0 if none or not computed)
+ # %i = command tag
+ # %e = SQL state
+ # %c = session ID
+ # %l = session line number
+ # %s = session start timestamp
+ # %v = virtual transaction ID
+ # %x = transaction ID (0 if none)
+ # %q = stop here in non-session
+ # processes
+ # %% = '%'
+ # e.g. '<%u%%%d> '
+#log_lock_waits = off # log lock waits >= deadlock_timeout
+#log_recovery_conflict_waits = off # log standby recovery conflict waits
+ # >= deadlock_timeout
+#log_parameter_max_length = -1 # when logging statements, limit logged
+ # bind-parameter values to N bytes;
+ # -1 means print in full, 0 disables
+#log_parameter_max_length_on_error = 0 # when logging an error, limit logged
+ # bind-parameter values to N bytes;
+ # -1 means print in full, 0 disables
+#log_statement = 'none' # none, ddl, mod, all
+#log_replication_commands = off
+#log_temp_files = -1 # log temporary files equal or larger
+ # than the specified size in kilobytes;
+ # -1 disables, 0 logs all temp files
+#log_timezone = 'GMT'
+
+# - Process Title -
+
+#cluster_name = '' # added to process titles if nonempty
+ # (change requires restart)
+#update_process_title = on
+
+
+#------------------------------------------------------------------------------
+# STATISTICS
+#------------------------------------------------------------------------------
+
+# - Cumulative Query and Index Statistics -
+
+#track_activities = on
+#track_activity_query_size = 1024 # (change requires restart)
+#track_counts = on
+#track_io_timing = off
+#track_wal_io_timing = off
+#track_functions = none # none, pl, all
+#stats_fetch_consistency = cache # cache, none, snapshot
+
+
+# - Monitoring -
+
+#compute_query_id = auto
+#log_statement_stats = off
+#log_parser_stats = off
+#log_planner_stats = off
+#log_executor_stats = off
+
+
+#------------------------------------------------------------------------------
+# AUTOVACUUM
+#------------------------------------------------------------------------------
+
+#autovacuum = on # Enable autovacuum subprocess? 'on'
+ # requires track_counts to also be on.
+#autovacuum_max_workers = 3 # max number of autovacuum subprocesses
+ # (change requires restart)
+#autovacuum_naptime = 1min # time between autovacuum runs
+#autovacuum_vacuum_threshold = 50 # min number of row updates before
+ # vacuum
+#autovacuum_vacuum_insert_threshold = 1000 # min number of row inserts
+ # before vacuum; -1 disables insert
+ # vacuums
+#autovacuum_analyze_threshold = 50 # min number of row updates before
+ # analyze
+#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum
+#autovacuum_vacuum_insert_scale_factor = 0.2 # fraction of inserts over table
+ # size before insert vacuum
+#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze
+#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum
+ # (change requires restart)
+#autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age
+ # before forced vacuum
+ # (change requires restart)
+#autovacuum_vacuum_cost_delay = 2ms # default vacuum cost delay for
+ # autovacuum, in milliseconds;
+ # -1 means use vacuum_cost_delay
+#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for
+ # autovacuum, -1 means use
+ # vacuum_cost_limit
+
+
+#------------------------------------------------------------------------------
+# CLIENT CONNECTION DEFAULTS
+#------------------------------------------------------------------------------
+
+# - Statement Behavior -
+
+#client_min_messages = notice # values in order of decreasing detail:
+ # debug5
+ # debug4
+ # debug3
+ # debug2
+ # debug1
+ # log
+ # notice
+ # warning
+ # error
+#search_path = '"$user", public' # schema names
+#row_security = on
+#default_table_access_method = 'heap'
+#default_tablespace = '' # a tablespace name, '' uses the default
+#default_toast_compression = 'pglz' # 'pglz' or 'lz4'
+#temp_tablespaces = '' # a list of tablespace names, '' uses
+ # only default tablespace
+#check_function_bodies = on
+#default_transaction_isolation = 'read committed'
+#default_transaction_read_only = off
+#default_transaction_deferrable = off
+#session_replication_role = 'origin'
+#statement_timeout = 0 # in milliseconds, 0 is disabled
+#lock_timeout = 0 # in milliseconds, 0 is disabled
+#idle_in_transaction_session_timeout = 0 # in milliseconds, 0 is disabled
+#idle_session_timeout = 0 # in milliseconds, 0 is disabled
+#vacuum_freeze_table_age = 150000000
+#vacuum_freeze_min_age = 50000000
+#vacuum_failsafe_age = 1600000000
+#vacuum_multixact_freeze_table_age = 150000000
+#vacuum_multixact_freeze_min_age = 5000000
+#vacuum_multixact_failsafe_age = 1600000000
+#bytea_output = 'hex' # hex, escape
+#xmlbinary = 'base64'
+#xmloption = 'content'
+#gin_pending_list_limit = 4MB
+#createrole_self_grant = '' # set and/or inherit
+
+# - Locale and Formatting -
+
+datestyle = 'iso, mdy'
+#intervalstyle = 'postgres'
+#timezone = 'GMT'
+#timezone_abbreviations = 'Default' # Select the set of available time zone
+ # abbreviations. Currently, there are
+ # Default
+ # Australia (historical usage)
+ # India
+ # You can create your own file in
+ # share/timezonesets/.
+#extra_float_digits = 1 # min -15, max 3; any value >0 actually
+ # selects precise output mode
+#client_encoding = sql_ascii # actually, defaults to database
+ # encoding
+
+# These settings are initialized by initdb, but they can be changed.
+lc_messages = C # locale for system error message
+ # strings
+lc_monetary = C # locale for monetary formatting
+lc_numeric = C # locale for number formatting
+lc_time = C # locale for time formatting
+
+#icu_validation_level = warning # report ICU locale validation
+ # errors at the given level
+
+# default configuration for text search
+default_text_search_config = 'pg_catalog.english'
+
+# - Shared Library Preloading -
+
+#local_preload_libraries = ''
+#session_preload_libraries = ''
+#shared_preload_libraries = '' # (change requires restart)
+#jit_provider = 'llvmjit' # JIT library to use
+
+# - Other Defaults -
+
+#dynamic_library_path = '$libdir'
+#gin_fuzzy_search_limit = 0
+
+
+#------------------------------------------------------------------------------
+# LOCK MANAGEMENT
+#------------------------------------------------------------------------------
+
+#deadlock_timeout = 1s
+#max_locks_per_transaction = 64 # min 10
+ # (change requires restart)
+#max_pred_locks_per_transaction = 64 # min 10
+ # (change requires restart)
+#max_pred_locks_per_relation = -2 # negative values mean
+ # (max_pred_locks_per_transaction
+ # / -max_pred_locks_per_relation) - 1
+#max_pred_locks_per_page = 2 # min 0
+
+
+#------------------------------------------------------------------------------
+# VERSION AND PLATFORM COMPATIBILITY
+#------------------------------------------------------------------------------
+
+# - Previous PostgreSQL Versions -
+
+#array_nulls = on
+#backslash_quote = safe_encoding # on, off, or safe_encoding
+#escape_string_warning = on
+#lo_compat_privileges = off
+#quote_all_identifiers = off
+#standard_conforming_strings = on
+#synchronize_seqscans = on
+
+# - Other Platforms and Clients -
+
+#transform_null_equals = off
+
+
+#------------------------------------------------------------------------------
+# ERROR HANDLING
+#------------------------------------------------------------------------------
+
+#exit_on_error = off # terminate session on any error?
+#restart_after_crash = on # reinitialize after backend crash?
+#data_sync_retry = off # retry or panic on failure to fsync
+ # data?
+ # (change requires restart)
+#recovery_init_sync_method = fsync # fsync, syncfs (Linux 5.8+)
+
+
+#------------------------------------------------------------------------------
+# CONFIG FILE INCLUDES
+#------------------------------------------------------------------------------
+
+# These options allow settings to be loaded from files other than the
+# default postgresql.conf. Note that these are directives, not variable
+# assignments, so they can usefully be given more than once.
+
+#include_dir = '...' # include files ending in '.conf' from
+ # a directory, e.g., 'conf.d'
+#include_if_exists = '...' # include file only if it exists
+#include = '...' # include file
+
+
+#------------------------------------------------------------------------------
+# CUSTOMIZED OPTIONS
+#------------------------------------------------------------------------------
+
+# Add settings for extensions here
diff --git a/app/dataconnect/.dataconnect/pgliteData/postmaster.pid b/app/dataconnect/.dataconnect/pgliteData/postmaster.pid
new file mode 100644
index 0000000..6f57a33
--- /dev/null
+++ b/app/dataconnect/.dataconnect/pgliteData/postmaster.pid
@@ -0,0 +1,7 @@
+-42
+/tmp/pglite/base
+1734551027
+5432
+
+
+ 297884 666
diff --git a/app/dataconnect/.dataconnect/schema/prelude.gql b/app/dataconnect/.dataconnect/schema/prelude.gql
new file mode 100644
index 0000000..bc21c04
--- /dev/null
+++ b/app/dataconnect/.dataconnect/schema/prelude.gql
@@ -0,0 +1,2006 @@
+"AccessLevel specifies coarse access policies for common situations."
+enum AccessLevel {
+ """
+ This operation is accessible to anyone, with or without authentication.
+ Equivalent to: `@auth(expr: "true")`
+ """
+ PUBLIC
+
+ """
+ This operation can be executed only with a valid Firebase Auth ID token.
+ **Note:** This access level allows anonymous and unverified accounts,
+ which may present security and abuse risks.
+ Equivalent to: `@auth(expr: "auth.uid != nil")`
+ """
+ USER_ANON
+
+ """
+ This operation is restricted to non-anonymous Firebase Auth accounts.
+ Equivalent to: `@auth(expr: "auth.uid != nil && auth.token.firebase.sign_in_provider != 'anonymous'")`
+ """
+ USER
+
+ """
+ This operation is restricted to Firebase Auth accounts with verified email addresses.
+ Equivalent to: `@auth(expr: "auth.uid != nil && auth.token.email_verified")`
+ """
+ USER_EMAIL_VERIFIED
+
+ """
+ This operation cannot be executed by anyone. The operation can only be performed
+ by using the Admin SDK from a privileged environment.
+ Equivalent to: `@auth(expr: "false")`
+ """
+ NO_ACCESS
+}
+
+"""
+The `@auth` directive defines the authentication policy for a query or mutation.
+
+It must be added to any operation that you wish to be accessible from a client
+application. If not specified, the operation defaults to `@auth(level: NO_ACCESS)`.
+
+Refer to [Data Connect Auth Guide](https://firebase.google.com/docs/data-connect/authorization-and-security) for the best practices.
+"""
+directive @auth(
+ """
+ The minimal level of access required to perform this operation.
+ Exactly one of `level` and `expr` should be specified.
+ """
+ level: AccessLevel @fdc_oneOf(required: true)
+ """
+ A CEL expression that grants access to this operation if the expression
+ evaluates to `true`.
+ Exactly one of `level` and `expr` should be specified.
+ """
+ expr: Boolean_Expr @fdc_oneOf(required: true)
+) on QUERY | MUTATION
+
+
+"""
+Require that this mutation always run in a DB transaction.
+
+Mutations with `@transaction` are guaranteed to either fully succeed or fully
+fail. If any of the fields within the transaction fails, the entire transaction
+is rolled back. From a client standpoint, any failure behaves as if the entire
+request had failed with a request error and execution had not begun.
+
+Mutations without `@transaction` would execute each root field one after
+another in sequence. It surfaces any errors as partial [field errors](https://spec.graphql.org/October2021/#sec-Errors.Field-errors),
+but not impacts the subsequent executions.
+
+The `@transaction` directive cannot be added to queries for now.
+Currently, queries cannot fail partially, the response data is not guaranteed
+to be a consistent snapshot.
+"""
+directive @transaction on MUTATION
+
+"Query filter criteria for `String` scalar fields."
+input String_Filter {
+ "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`."
+ isNull: Boolean
+ "Match if field is exactly equal to provided value."
+ eq: String @fdc_oneOf(group: "eq")
+ """
+ Match if field is exactly equal to the result of the provided server value
+ expression. Currently only `auth.uid` is supported as an expression.
+ """
+ eq_expr: String_Expr @fdc_oneOf(group: "eq")
+ "Match if field is not equal to provided value."
+ ne: String @fdc_oneOf(group: "ne")
+ """
+ Match if field is not equal to the result of the provided server value
+ expression. Currently only `auth.uid` is supported as an expression.
+ """
+ ne_expr: String_Expr @fdc_oneOf(group: "ne")
+ "Match if field value is among the provided list of values."
+ in: [String!]
+ "Match if field value is not among the provided list of values."
+ nin: [String!]
+ "Match if field value is greater than the provided value."
+ gt: String
+ "Match if field value is greater than or equal to the provided value."
+ ge: String
+ "Match if field value is less than the provided value."
+ lt: String
+ "Match if field value is less than or equal to the provided value."
+ le: String
+ """
+ Match if field value contains the provided value as a substring. Equivalent
+ to `LIKE '%value%'`
+ """
+ contains: String
+ """
+ Match if field value starts with the provided value. Equivalent to
+ `LIKE 'value%'`
+ """
+ startsWith: String
+ """
+ Match if field value ends with the provided value. Equivalent to
+ `LIKE '%value'`
+ """
+ endsWith: String
+}
+
+"Query filter criteris for `[String!]` scalar fields."
+input String_ListFilter {
+ "Match if list field contains the provided value as a member."
+ includes: String
+ "Match if list field does not contain the provided value as a member."
+ excludes: String
+ "Match if list field contains all of the provided values as members."
+ includesAll: [String!]
+ "Match if list field does not contain any of the provided values as members."
+ excludesAll: [String!]
+}
+
+"Query filter criteria for `UUID` scalar fields."
+input UUID_Filter {
+ "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`."
+ isNull: Boolean
+ "Match if field is exactly equal to provided value."
+ eq: UUID
+ "Match if field is not equal to provided value."
+ ne: UUID
+ "Match if field value is among the provided list of values."
+ in: [UUID!]
+ "Match if field value is not among the provided list of values."
+ nin: [UUID!]
+}
+
+"Query filter criteris for `[UUID!]` scalar fields."
+input UUID_ListFilter {
+ "Match if list field contains the provided value as a member."
+ includes: UUID
+ "Match if list field does not contain the provided value as a member."
+ excludes: UUID
+ "Match if list field contains all of the provided values as members."
+ includesAll: [UUID!]
+ "Match if list field does not contain any of the provided values as members."
+ excludesAll: [UUID!]
+}
+
+"Query filter criteria for `Int` scalar fields."
+input Int_Filter {
+ "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`."
+ isNull: Boolean
+ "Match if field is exactly equal to provided value."
+ eq: Int
+ "Match if field is not equal to provided value."
+ ne: Int
+ "Match if field value is among the provided list of values."
+ in: [Int!]
+ "Match if field value is not among the provided list of values."
+ nin: [Int!]
+ "Match if field value is greater than the provided value."
+ gt: Int
+ "Match if field value is greater than or equal to the provided value."
+ ge: Int
+ "Match if field value is less than the provided value."
+ lt: Int
+ "Match if field value is less than or equal to the provided value."
+ le: Int
+}
+
+"Query filter criteris for `[Int!]` scalar fields."
+input Int_ListFilter {
+ "Match if list field contains the provided value as a member."
+ includes: Int
+ "Match if list field does not contain the provided value as a member."
+ excludes: Int
+ "Match if list field contains all of the provided values as members."
+ includesAll: [Int!]
+ "Match if list field does not contain any of the provided values as members."
+ excludesAll: [Int!]
+}
+
+"Query filter criteria for `Int64` scalar fields."
+input Int64_Filter {
+ "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`."
+ isNull: Boolean
+ "Match if field is exactly equal to provided value."
+ eq: Int64
+ "Match if field is not equal to provided value."
+ ne: Int64
+ "Match if field value is among the provided list of values."
+ in: [Int64!]
+ "Match if field value is not among the provided list of values."
+ nin: [Int64!]
+ "Match if field value is greater than the provided value."
+ gt: Int64
+ "Match if field value is greater than or equal to the provided value."
+ ge: Int64
+ "Match if field value is less than the provided value."
+ lt: Int64
+ "Match if field value is less than or equal to the provided value."
+ le: Int64
+}
+
+"Query filter criteria for `[Int64!]` scalar fields."
+input Int64_ListFilter {
+ "Match if list field contains the provided value as a member."
+ includes: Int64
+ "Match if list field does not contain the provided value as a member."
+ excludes: Int64
+ "Match if list field contains all of the provided values as members."
+ includesAll: [Int64!]
+ "Match if list field does not contain any of the provided values as members."
+ excludesAll: [Int64!]
+}
+
+"Query filter criteria for `Float` scalar fields."
+input Float_Filter {
+ "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`."
+ isNull: Boolean
+ "Match if field is exactly equal to provided value."
+ eq: Float
+ "Match if field is not equal to provided value."
+ ne: Float
+ "Match if field value is among the provided list of values."
+ in: [Float!]
+ "Match if field value is not among the provided list of values."
+ nin: [Float!]
+ "Match if field value is greater than the provided value."
+ gt: Float
+ "Match if field value is greater than or equal to the provided value."
+ ge: Float
+ "Match if field value is less than the provided value."
+ lt: Float
+ "Match if field value is less than or equal to the provided value."
+ le: Float
+}
+
+"Query filter criteria for `[Float!]` scalar fields."
+input Float_ListFilter {
+ "Match if list field contains the provided value as a member."
+ includes: Float
+ "Match if list field does not contain the provided value as a member."
+ excludes: Float
+ "Match if list field contains all of the provided values as members."
+ includesAll: [Float!]
+ "Match if list field does not contain any of the provided values as members."
+ excludesAll: [Float!]
+}
+
+"Query filter criteria for `Boolean` scalar fields."
+input Boolean_Filter {
+ "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`."
+ isNull: Boolean
+ "Match if field is exactly equal to provided value."
+ eq: Boolean
+ "Match if field is not equal to provided value."
+ ne: Boolean
+ "Match if field value is among the provided list of values."
+ in: [Boolean!]
+ "Match if field value is not among the provided list of values."
+ nin: [Boolean!]
+}
+
+"Query filter criteria for `[Boolean!]` scalar fields."
+input Boolean_ListFilter {
+ "Match if list field contains the provided value as a member."
+ includes: Boolean
+ "Match if list field does not contain the provided value as a member."
+ excludes: Boolean
+ "Match if list field contains all of the provided values as members."
+ includesAll: [Boolean!]
+ "Match if list field does not contain any of the provided values as members."
+ excludesAll: [Boolean!]
+}
+
+"Query filter criteria for `Any` scalar fields."
+input Any_Filter {
+ "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`."
+ isNull: Boolean
+ "Match if field is exactly equal to provided value."
+ eq: Any
+ "Match if field is not equal to provided value."
+ ne: Any
+ "Match if field value is among the provided list of values."
+ in: [Any!]
+ "Match if field value is not among the provided list of values."
+ nin: [Any!]
+}
+
+"Query filter criteria for `[Any!]` scalar fields."
+input Any_ListFilter {
+ "Match if list field contains the provided value as a member."
+ includes: Any
+ "Match if list field does not contain the provided value as a member."
+ excludes: Any
+ "Match if list field contains all of the provided values as members."
+ includesAll: [Any!]
+ "Match if list field does not contain any of the provided values as members."
+ excludesAll: [Any!]
+}
+
+"""
+(Internal) A string that uniquely identifies a type, field, and so on.
+
+The most common usage in FDC is `SomeType` or `SomeType.someField`. See the
+linked page in the @specifiedBy directive for the GraphQL RFC with more details.
+"""
+scalar SchemaCoordinate
+ @specifiedBy(url: "https://github.com/graphql/graphql-wg/blob/6d02705dea034fb65ebc6799632adb7bd550d0aa/rfcs/SchemaCoordinates.md")
+ @fdc_forbiddenAsFieldType
+ @fdc_forbiddenAsVariableType
+
+"(Internal) The purpose of a generated type or field."
+enum GeneratedPurpose {
+ # Implicit fields added to the table types as columns.
+ IMPLICIT_KEY_FIELD
+ IMPLICIT_REF_FIELD
+
+ # Relational non-column fields extended to table types.
+ QUERY_MULTIPLE_ONE_TO_MANY
+ QUERY_MULTIPLE_MANY_TO_MANY
+
+ # Top-level Query fields.
+ QUERY_SINGLE
+ QUERY_MULTIPLE
+ QUERY_MULTIPLE_BY_SIMILARITY
+
+ # Top-level Mutation fields.
+ INSERT_SINGLE
+ INSERT_MULTIPLE
+ UPSERT_SINGLE
+ UPSERT_MULTIPLE
+ UPDATE_SINGLE
+ UPDATE_MULTIPLE
+ DELETE_SINGLE
+ DELETE_MULTIPLE
+}
+
+"(Internal) Added to definitions generated by FDC."
+directive @fdc_generated(
+ "The source type or field that causes this definition to be generated."
+ from: SchemaCoordinate!
+ "The reason why this definition is generated, such as the intended use case."
+ purpose: GeneratedPurpose!
+) on
+ | SCALAR
+ | OBJECT
+ | FIELD_DEFINITION
+ | ARGUMENT_DEFINITION
+ | INTERFACE
+ | UNION
+ | ENUM
+ | ENUM_VALUE
+ | INPUT_OBJECT
+ | INPUT_FIELD_DEFINITION
+
+type _Service {
+ "Full Service Definition Language of the Frebase Data Connect Schema, including normalized schema, predefined and generated types."
+ sdl(
+ """
+ Whether or not to omit Data Connect builtin GraphQL preludes.
+ They are static GraphQL publically available in the docsite.
+ """
+ omitBuiltin: Boolean = false
+ """
+ Whether or not to omit GQL description in the SDL.
+ We generate description to document generated schema.
+ It may bloat the size of SDL.
+ """
+ omitDescription: Boolean = false
+ ): String!
+ "Orignal Schema Sources in the service."
+ schema: String!
+ "Generated documentation from the schema of the Firebase Data Connect Service."
+ docs: [_Doc!]!
+}
+
+type _Doc {
+ "Name of the Doc Page."
+ page: String!
+ "The markdown content of the doc page."
+ markdown: String!
+}
+
+"(Internal) Added to things that may be removed from FDC and will soon be no longer usable in schema or operations."
+directive @fdc_deprecated(reason: String = "No longer supported") on
+ | SCHEMA
+ | SCALAR
+ | OBJECT
+ | FIELD_DEFINITION
+ | ARGUMENT_DEFINITION
+ | INTERFACE
+ | UNION
+ | ENUM
+ | ENUM_VALUE
+ | INPUT_OBJECT
+ | INPUT_FIELD_DEFINITION
+
+"(Internal) Added to scalars representing quoted CEL expressions."
+directive @fdc_celExpression(
+ "The expected CEL type that the expression should evaluate to."
+ returnType: String
+) on SCALAR
+
+"(Internal) Added to scalars representing quoted SQL expressions."
+directive @fdc_sqlExpression(
+ "The expected SQL type that the expression should evaluate to."
+ dataType: String
+) on SCALAR
+
+"(Internal) Added to types that may not be used as variables."
+directive @fdc_forbiddenAsVariableType on SCALAR | OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT
+
+"(Internal) Added to types that may not be used as fields in schema."
+directive @fdc_forbiddenAsFieldType on SCALAR | OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT
+
+"Provides a frequently used example for this type / field / argument."
+directive @fdc_example(
+ "A GraphQL literal value (verbatim) whose type matches the target."
+ value: Any
+ "A human-readable text description of what `value` means in this context."
+ description: String
+) repeatable on SCALAR | OBJECT | FIELD_DEFINITION | ARGUMENT_DEFINITION | INTERFACE | UNION | ENUM | INPUT_OBJECT | INPUT_FIELD_DEFINITION
+
+"(Internal) Marks this field / argument as conflicting with others in the same group."
+directive @fdc_oneOf(
+ "The group name where fields / arguments conflict with each other."
+ group: String! = ""
+ "If true, exactly one field / argument in the group must be specified."
+ required: Boolean! = false
+) repeatable on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION
+
+"""
+`UUID` is a string of hexadecimal digits representing an RFC4122-compliant UUID.
+
+UUIDs are always output as 32 lowercase hexadecimal digits without delimiters or
+curly braces.
+Inputs in the following formats are also accepted (case insensitive):
+
+- `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
+- `urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
+- `{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}`
+
+In the PostgreSQL table, it's stored as [`uuid`](https://www.postgresql.org/docs/current/datatype-uuid.html).
+"""
+scalar UUID @specifiedBy(url: "https://tools.ietf.org/html/rfc4122")
+
+"""
+`Int64` is a scalar that represents a 64-bit signed integer.
+
+In the PostgreSQL table, it's stored as [`bigint`](https://www.postgresql.org/docs/current/datatype-numeric.html).
+
+On the wire, it's encoded as string because 64-bit integer exceeds the range of JSON number.
+"""
+scalar Int64
+
+"""
+The `Any` scalar type accommodates any valid [JSON value](https://www.json.org/json-en.html)
+(e.g., numbers, strings, booleans, arrays, objects). PostgreSQL efficiently
+stores this data as jsonb, providing flexibility for schemas with evolving structures.
+
+Caution: JSON doesn't distinguish Int and Float.
+
+##### Example:
+
+#### Schema
+
+```graphql
+type Movie @table {
+ name: String!
+ metadata: Any!
+}
+```
+
+#### Mutation
+
+Insert a movie with name and metadata from JSON literal.
+
+```graphql
+mutation InsertMovie {
+ movie_insert(
+ data: {
+ name: "The Dark Knight"
+ metadata: {
+ release_year: 2008
+ genre: ["Action", "Adventure", "Superhero"]
+ cast: [
+ { name: "Christopher Bale", age: 31 }
+ { name: "Heath Ledger", age: 28 }
+ ]
+ director: "Christopher Nolan"
+ }
+ }
+ )
+}
+```
+
+Insert a movie with name and metadata that's constructed from a few GQL variables.
+
+```graphql
+mutation InsertMovie($name: String!, $releaseDate: Date!, $genre: [String], $cast: [Any], $director: String!, $boxOfficeInUSD: Int) {
+ movie_insert(data: {
+ name: $name,
+ release_date: $releaseDate,
+ genre: $genre,
+ cast: $cast,
+ director: $director,
+ box_office: $boxOfficeInUSD
+ })
+}
+```
+**Note**:
+
+ - A mix of non-null and nullable variables can be provided.
+
+ - `Date!` can be passed into scalar `Any` as well! It's stored as string.
+
+ - `$cast` is a nested array. `[Any]` can represent an array of arbitrary types, but it won't enforce the input shape.
+
+#### Query
+
+Since `metadata` field has scalar `Any` type, it would return the full JSON in the response.
+
+**Note**: You can't define selection set to scalar based on [GraphQL spec](https://spec.graphql.org/October2021/#sec-Field-Selections).
+
+```graphql
+query GetAllMovies {
+ movies {
+ name
+ metadata
+ }
+}
+```
+
+"""
+scalar Any @specifiedBy(url: "https://www.json.org/json-en.html")
+
+"""
+The `Void` scalar type represents the absence of any value. It is typically used
+in operations where no value is expected in return.
+"""
+scalar Void
+
+"""
+The `True` scalar type only accepts the boolean value `true`.
+
+An optional field/argument typed as `True` may either be set
+to `true` or omitted (not provided at all). The values `false` or `null` are not
+accepted.
+"""
+scalar True
+ @fdc_forbiddenAsFieldType
+ @fdc_forbiddenAsVariableType
+ @fdc_example(value: true, description: "The only allowed value.")
+
+"""
+A Common Expression Language (CEL) expression that returns a boolean at runtime.
+
+This expression can reference the `auth` variable, which is null when Firebase
+Auth is not used. When Firebase Auth is used, the following fields are available:
+
+ - `auth.uid`: The current user ID.
+ - `auth.token`: A map containing all token fields (e.g., claims).
+
+"""
+scalar Boolean_Expr
+ @specifiedBy(url: "https://github.com/google/cel-spec")
+ @fdc_celExpression(returnType: "bool")
+ @fdc_forbiddenAsVariableType
+ @fdc_forbiddenAsFieldType
+ @fdc_example(value: "auth != null", description: "Allow only if a Firebase Auth user is present.")
+
+"""
+A Common Expression Language (CEL) expression that returns a string at runtime.
+
+**Limitation**: Currently, only a limited set of expressions are supported.
+"""
+scalar String_Expr
+ @specifiedBy(url: "https://github.com/google/cel-spec")
+ @fdc_celExpression(returnType: "string")
+ @fdc_forbiddenAsVariableType
+ @fdc_forbiddenAsFieldType
+ @fdc_example(value: "auth.uid", description: "The ID of the currently logged in user in Firebase Auth. (Errors if not logged in.)")
+ @fdc_example(value: "uuidV4()", description: "Generates a new random UUID (version 4) string, formatted as 32 lower-case hex digits without delimiters.")
+
+"""
+A Common Expression Language (CEL) expression that returns a UUID string at runtime.
+
+**Limitation**: Currently, only a limited set of expressions are supported.
+"""
+scalar UUID_Expr
+ @specifiedBy(url: "https://github.com/google/cel-spec")
+ @fdc_celExpression(returnType: "string")
+ @fdc_forbiddenAsVariableType
+ @fdc_forbiddenAsFieldType
+ @fdc_example(value: "uuidV4()", description: "Generates a new random UUID (version 4) every time.")
+
+"""
+A Common Expression Language (CEL) expression whose return type is unspecified.
+
+**Limitation**: Only a limited set of expressions are currently supported for each
+type.
+"""
+scalar Any_Expr
+ @specifiedBy(url: "https://github.com/google/cel-spec")
+ @fdc_celExpression
+ @fdc_forbiddenAsVariableType
+ @fdc_forbiddenAsFieldType
+ @fdc_example(value: "auth.uid", description: "The ID of the currently logged in user in Firebase Auth. (Errors if not logged in.)")
+ @fdc_example(value: "uuidV4()", description: "Generates a new random UUID version 4 (formatted as 32 lower-case hex digits without delimiters if result type is String).")
+ @fdc_example(value: "request.time", description: "The timestamp when the request is received (with microseconds precision).")
+
+"""
+A PostgreSQL value expression whose return type is unspecified.
+"""
+scalar Any_SQL
+ @specifiedBy(url: "https://www.postgresql.org/docs/current/sql-expressions.html")
+ @fdc_sqlExpression
+ @fdc_forbiddenAsVariableType
+ @fdc_forbiddenAsFieldType
+
+"""
+Defines a relational database table.
+
+In this example, we defined one table with a field named `myField`.
+
+```graphql
+type TableName @table {
+ myField: String
+}
+```
+Data Connect adds an implicit `id` primary key column. So the above schema is equivalent to:
+
+```graphql
+type TableName @table(key: "id") {
+ id: String @default(expr: "uuidV4()")
+ myField: String
+}
+```
+
+Data Connect generates the following SQL table and CRUD operations to use it.
+
+```sql
+CREATE TABLE "public"."table_name" (
+ "id" uuid NOT NULL DEFAULT uuid_generate_v4(),
+ "my_field" text NULL,
+ PRIMARY KEY ("id")
+)
+```
+
+ * You can lookup a row: `query ($id: UUID!) { tableName(id: $id) { myField } } `
+ * You can find rows using: `query tableNames(limit: 20) { myField }`
+ * You can insert a row: `mutation { tableName_insert(data: {myField: "foo"}) }`
+ * You can update a row: `mutation ($id: UUID!) { tableName_update(id: $id, data: {myField: "bar"}) }`
+ * You can delete a row: `mutation ($id: UUID!) { tableName_delete(id: $id) }`
+
+##### Customizations
+
+- `@table(singular)` and `@table(plural)` can customize the singular and plural name.
+- `@table(name)` can customize the Postgres table name.
+- `@table(key)` can customize the primary key field name and type.
+
+For example, the `User` table often has a `uid` as its primary key.
+
+```graphql
+type User @table(key: "uid") {
+ uid: String!
+ name: String
+}
+```
+
+ * You can securely lookup a row: `query { user(key: {uid_expr: "auth.uid"}) { name } } `
+ * You can securely insert a row: `mutation { user_insert(data: {uid_expr: "auth.uid" name: "Fred"}) }`
+ * You can securely update a row: `mutation { user_update(key: {uid_expr: "auth.uid"}, data: {name: "New Name"}) }`
+ * You can securely delete a row: `mutation { user_delete(key: {uid_expr: "auth.uid"}) }`
+
+`@table` type can be configured further with:
+
+ - Custom SQL data types for columns. See `@col`.
+ - Add SQL indexes. See `@index`.
+ - Add SQL unique constraints. See `@unique`.
+ - Add foreign key constraints to define relations. See `@ref`.
+
+"""
+directive @table(
+ """
+ Configures the SQL database table name. Defaults to snake_case like `table_name`.
+ """
+ name: String
+ """
+ Configures the singular name. Defaults to the camelCase like `tableName`.
+ """
+ singular: String
+ """
+ Configures the plural name. Defaults to infer based on English plural pattern like `tableNames`.
+ """
+ plural: String
+ """
+ Defines the primary key of the table. Defaults to a single field named `id`.
+ If not present already, Data Connect adds an implicit field `id: UUID! @default(expr: "uuidV4()")`.
+ """
+ key: [String!]
+) on OBJECT
+
+"""
+Defines a relational database Raw SQLview.
+
+Data Connect generates GraphQL queries with WHERE and ORDER BY clauses.
+However, not all SQL features has native GraphQL equivalent.
+
+You can write **an arbitrary SQL SELECT statement**. Data Connect
+would map Graphql fields on `@view` type to columns in your SELECT statement.
+
+* Scalar GQL fields (camelCase) should match a SQL column (snake_case)
+ in the SQL SELECT statement.
+* Reference GQL field can point to another `@table` type. Similar to foreign key
+ defined with `@ref` on a `@table` type, a `@view` type establishes a relation
+ when `@ref(fields)` match `@ref(references)` on the target table.
+
+In this example, you can use `@view(sql)` to define an aggregation view on existing
+table.
+
+```graphql
+type User @table {
+ name: String
+ score: Int
+}
+type UserAggregation @view(sql: '''
+ SELECT
+ COUNT(*) as count,
+ SUM(score) as sum,
+ AVG(score) as average,
+ PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY score) AS median,
+ (SELECT id FROM "user" LIMIT 1) as example_id
+ FROM "user"
+''') {
+ count: Int
+ sum: Int
+ average: Float
+ median: Float
+ example: User
+ exampleId: UUID
+}
+```
+
+###### Example: Query Raw SQL View
+
+```graphql
+query {
+ userAggregations {
+ count sum average median
+ exampleId example { id }
+ }
+}
+```
+
+##### One-to-One View
+
+An one-to-one companion `@view` can be handy if you want to argument a `@table`
+with additional implied content.
+
+```graphql
+type Restaurant @table {
+ name: String!
+}
+type Review @table {
+ restaurant: Restaurant!
+ rating: Int!
+}
+type RestaurantStats @view(sql: '''
+ SELECT
+ restaurant_id,
+ COUNT(*) AS review_count,
+ AVG(rating) AS average_rating
+ FROM review
+ GROUP BY restaurant_id
+''') {
+ restaurant: Restaurant @unique
+ reviewCount: Int
+ averageRating: Float
+}
+```
+
+In this example, `@unique` convey the assumption that each `Restaurant` should
+have only one `RestaurantStats` object.
+
+###### Example: Query One-to-One View
+
+```graphql
+query ListRestaurants {
+ restaurants {
+ name
+ stats: restaurantStats_on_restaurant {
+ reviewCount
+ averageRating
+ }
+ }
+}
+```
+
+###### Example: Filter based on One-to-One View
+
+```graphql
+query BestRestaurants($minAvgRating: Float, $minReviewCount: Int) {
+ restaurants(where: {
+ restaurantStats_on_restaurant: {
+ averageRating: {ge: $minAvgRating}
+ reviewCount: {ge: $minReviewCount}
+ }
+ }) { name }
+}
+```
+
+##### Customizations
+
+- One of `@view(sql)` or `@view(name)` should be defined.
+ `@view(name)` can refer to a persisted SQL view in the Postgres schema.
+- `@view(singular)` and `@view(plural)` can customize the singular and plural name.
+
+`@view` type can be configured further:
+
+ - `@unique` lets you define one-to-one relation.
+ - `@col` lets you customize SQL column mapping. For example, `@col(name: "column_in_select")`.
+
+##### Limitations
+
+Raw SQL view doesn't have a primary key, so it doesn't support lookup. Other
+`@table` or `@view` cannot have `@ref` to a view either.
+
+View cannot be mutated. You can perform CRUD operations on the underlying
+table to alter its content.
+
+**Important: Data Connect doesn't parse and validate SQL**
+
+- If the SQL view is invalid or undefined, related requests may fail.
+- If the SQL view return incompatible types. Firebase Data Connect may surface
+ errors.
+- If a field doesn't have a corresponding column in the SQL SELECT statement,
+ it will always be `null`.
+- There is no way to ensure VIEW to TABLE `@ref` constraint.
+- All fields must be nullable in case they aren't found in the SELECT statement
+ or in the referenced table.
+
+**Important: You should always test `@view`!**
+
+"""
+directive @view(
+ """
+ The SQL view name. If neither `name` nor `sql` are provided, defaults to the
+ snake_case of the singular type name.
+ `name` and `sql` cannot be specified at the same time.
+ """
+ name: String @fdc_oneOf
+ """
+ SQL `SELECT` statement used as the basis for this type.
+ SQL SELECT columns should use snake_case. GraphQL fields should use camelCase.
+ `name` and `sql` cannot be specified at the same time.
+ """
+ sql: String @fdc_oneOf
+ """
+ Configures the singular name. Defaults to the camelCase like `viewName`.
+ """
+ singular: String
+ """
+ Configures the plural name. Defaults to infer based on English plural pattern like `viewNames`.
+ """
+ plural: String
+) on OBJECT
+
+"""
+Customizes a field that represents a SQL database table column.
+
+Data Connect maps scalar Fields on `@table` type to a SQL column of
+corresponding data type.
+
+- scalar `UUID` maps to [`uuid`](https://www.postgresql.org/docs/current/datatype-uuid.html).
+- scalar `String` maps to [`text`](https://www.postgresql.org/docs/current/datatype-character.html).
+- scalar `Int` maps to [`int`](https://www.postgresql.org/docs/current/datatype-numeric.html).
+- scalar `Int64` maps to [`bigint`](https://www.postgresql.org/docs/current/datatype-numeric.html).
+- scalar `Float` maps to [`double precision`](https://www.postgresql.org/docs/current/datatype-numeric.html).
+- scalar `Boolean` maps to [`boolean`](https://www.postgresql.org/docs/current/datatype-boolean.html).
+- scalar `Date` maps to [`date`](https://www.postgresql.org/docs/current/datatype-datetime.html).
+- scalar `Timestamp` maps to [`timestamptz`](https://www.postgresql.org/docs/current/datatype-datetime.html).
+- scalar `Any` maps to [`jsonb`](https://www.postgresql.org/docs/current/datatype-json.html).
+- scalar `Vector` maps to [`pgvector`](https://github.com/pgvector/pgvector).
+
+Array scalar fields are mapped to [Postgres arrays](https://www.postgresql.org/docs/current/arrays.html).
+
+###### Example: Serial Primary Key
+
+For example, you can define auto-increment primary key.
+
+```graphql
+type Post @table {
+ id: Int! @col(name: "post_id", dataType: "serial")
+}
+```
+
+Data Connect converts it to the following SQL table schema.
+
+```sql
+CREATE TABLE "public"."post" (
+ "post_id" serial NOT NULL,
+ PRIMARY KEY ("id")
+)
+```
+
+###### Example: Vector
+
+```graphql
+type Post @table {
+ content: String! @col(name: "post_content")
+ contentEmbedding: Vector! @col(size:768)
+}
+```
+
+"""
+directive @col(
+ """
+ The SQL database column name. Defaults to snake_case of the field name.
+ """
+ name: String
+ """
+ Configures the custom SQL data type.
+
+ Each GraphQL type can map to multiple SQL data types.
+ Refer to [Postgres supported data types](https://www.postgresql.org/docs/current/datatype.html).
+
+ Incompatible SQL data type will lead to undefined behavior.
+ """
+ dataType: String
+ """
+ Required on `Vector` columns. It specifies the length of the Vector.
+ `textembedding-gecko@003` model generates `Vector` of `@col(size:768)`.
+ """
+ size: Int
+) on FIELD_DEFINITION
+
+
+"""
+Defines a foreign key reference to another table.
+
+For example, we can define a many-to-one relation.
+
+```graphql
+type ManyTable @table {
+ refField: OneTable!
+}
+type OneTable @table {
+ someField: String!
+}
+```
+Data Connect adds implicit foreign key column and relation query field. So the
+above schema is equivalent to the following schema.
+
+```graphql
+type ManyTable @table {
+ id: UUID! @default(expr: "uuidV4()")
+ refField: OneTable! @ref(fields: "refFieldId", references: "id")
+ refFieldId: UUID!
+}
+type OneTable @table {
+ id: UUID! @default(expr: "uuidV4()")
+ someField: UUID!
+ # Generated Fields:
+ # manyTables_on_refField: [ManyTable!]!
+}
+```
+Data Connect generates the necessary foreign key constraint.
+
+```graphql
+CREATE TABLE "public"."many_table" (
+ "id" uuid NOT NULL DEFAULT uuid_generate_v4(),
+ "ref_field_id" uuid NOT NULL,
+ PRIMARY KEY ("id"),
+ CONSTRAINT "many_table_ref_field_id_fkey" FOREIGN KEY ("ref_field_id") REFERENCES "public"."one_table" ("id") ON DELETE CASCADE
+)
+```
+
+###### Example: Traverse the Reference Field
+
+```graphql
+query ($id: UUID!) {
+ manyTable(id: $id) {
+ refField { id }
+ }
+}
+```
+
+###### Example: Reverse Traverse the Reference field
+
+```graphql
+query ($id: UUID!) {
+ oneTable(id: $id) {
+ manyTables_on_refField { id }
+ }
+}
+```
+
+##### Optional Many-to-One Relation
+
+An optional foreign key reference will be set to null if the referenced row is deleted.
+
+In this example, if a `User` is deleted, the `assignee` and `reporter`
+references will be set to null.
+
+```graphql
+type Bug @table {
+ title: String!
+ assignee: User
+ reproter: User
+}
+
+type User @table { name: String! }
+```
+
+##### Required Many-to-One Relation
+
+A required foreign key reference will cascade delete if the referenced row is
+deleted.
+
+In this example, if a `Post` is deleted, associated comments will also be
+deleted.
+
+```graphql
+type Comment @table {
+ post: Post!
+ content: String!
+}
+
+type Post @table { title: String! }
+```
+
+##### Many To Many Relation
+
+You can define a many-to-many relation with a join table.
+
+```graphql
+type Membership @table(key: ["group", "user"]) {
+ group: Group!
+ user: User!
+ role: String! @default(value: "member")
+}
+
+type Group @table { name: String! }
+type User @table { name: String! }
+```
+
+When Data Connect sees a table with two reference field as its primary key, it
+knows this is a join table, so expands the many-to-many query field.
+
+```graphql
+type Group @table {
+ name: String!
+ # Generated Fields:
+ # users_via_Membership: [User!]!
+ # memberships_on_group: [Membership!]!
+}
+type User @table {
+ name: String!
+ # Generated Fields:
+ # groups_via_Membership: [Group!]!
+ # memberships_on_user: [Membership!]!
+}
+```
+
+###### Example: Traverse the Many-To-Many Relation
+
+```graphql
+query ($id: UUID!) {
+ group(id: $id) {
+ users: users_via_Membership {
+ name
+ }
+ }
+}
+```
+
+###### Example: Traverse to the Join Table
+
+```graphql
+query ($id: UUID!) {
+ group(id: $id) {
+ memberships: memberships_on_group {
+ user { name }
+ role
+ }
+ }
+}
+```
+
+##### One To One Relation
+
+You can even define a one-to-one relation with the help of `@unique` or `@table(key)`.
+
+```graphql
+type User @table {
+ name: String
+}
+type Account @table {
+ user: User! @unique
+}
+# Alternatively, use primary key constraint.
+# type Account @table(key: "user") {
+# user: User!
+# }
+```
+
+###### Example: Transerse the Reference Field
+
+```graphql
+query ($id: UUID!) {
+ account(id: $id) {
+ user { id }
+ }
+}
+```
+
+###### Example: Reverse Traverse the Reference field
+
+```graphql
+query ($id: UUID!) {
+ user(id: $id) {
+ account_on_user { id }
+ }
+}
+```
+
+##### Customizations
+
+- `@ref(constraintName)` can customize the SQL foreign key constraint name (`table_name_ref_field_fkey` above).
+- `@ref(fields)` can customize the foreign key field names.
+- `@ref(references)` can customize the constraint to reference other columns.
+ By default, `@ref(references)` is the primary key of the `@ref` table.
+ Other fields with `@unique` may also be referred in the foreign key constraint.
+
+"""
+directive @ref(
+ "The SQL database foreign key constraint name. Defaults to snake_case `{table_name}_{field_name}_fkey`."
+ constraintName: String
+ """
+ Foreign key fields. Defaults to `{tableName}{PrimaryIdName}`.
+ """
+ fields: [String!]
+ "The fields that the foreign key references in the other table. Defaults to its primary key."
+ references: [String!]
+) on FIELD_DEFINITION
+
+"Defines the orderBy direction in a query."
+enum OrderDirection {
+"Results are ordered in ascending order."
+ ASC
+"Results are ordered in descending order."
+ DESC
+}
+
+"""
+Specifies the default value for a column field.
+
+For example:
+
+```graphql
+type User @table(key: "uid") {
+ uid: String! @default(expr: "auth.uid")
+ number: Int! @col(dataType: "serial")
+ createdAt: Date! @default(expr: "request.time")
+ role: String! @default(value: "Member")
+ credit: Int! @default(value: 100)
+}
+```
+
+The supported arguments vary based on the field type.
+"""
+directive @default(
+ "A constant value validated against the field's GraphQL type during compilation."
+ value: Any @fdc_oneOf(required: true)
+ "A CEL expression whose return value must match the field's data type."
+ expr: Any_Expr @fdc_oneOf(required: true)
+ """
+ A raw SQL expression, whose SQL data type must match the underlying column.
+
+ The value is any variable-free expression (in particular, cross-references to
+ other columns in the current table are not allowed). Subqueries are not allowed either.
+ See [PostgreSQL defaults](https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-PARMS-DEFAULT)
+ for more details.
+ """
+ sql: Any_SQL @fdc_oneOf(required: true)
+) on FIELD_DEFINITION
+
+"""
+Defines a database index to optimize query performance.
+
+```graphql
+type User @table @index(fields: ["name", "phoneNumber"], order: [ASC, DESC]) {
+ name: String @index
+ phoneNumber: Int64 @index
+ tags: [String] @index # GIN Index
+}
+```
+
+##### Single Field Index
+
+You can put `@index` on a `@col` field to create a SQL index.
+
+`@index(order)` matters little for single field indexes, as they can be scanned
+in both directions.
+
+##### Composite Index
+
+You can put `@index(fields: [...])` on `@table` type to define composite indexes.
+
+`@index(order: [...])` can customize the index order to satisfy particular
+filter and order requirement.
+
+"""
+directive @index(
+ """
+ Configure the SQL database index id.
+
+ If not overridden, Data Connect generates the index name:
+ - `{table_name}_{first_field}_{second_field}_aa_idx`
+ - `{table_name}_{field_name}_idx`
+ """
+ name: String
+ """
+ Only allowed and required when used on a `@table` type.
+ Specifies the fields to create the index on.
+ """
+ fields: [String!]
+ """
+ Only allowed for `BTREE` `@index` on `@table` type.
+ Specifies the order for each indexed column. Defaults to all `ASC`.
+ """
+ order: [IndexFieldOrder!]
+ """
+ Customize the index type.
+
+ For most index, it defaults to `BTREE`.
+ For array fields, only allowed `IndexType` is `GIN`.
+ For `Vector` fields, defaults to `HNSW`, may configure to `IVFFLAT`.
+ """
+ type: IndexType
+ """
+ Only allowed when used on vector field.
+ Defines the vector similarity method. Defaults to `INNER_PRODUCT`.
+ """
+ vector_method: VectorSimilarityMethod
+) repeatable on FIELD_DEFINITION | OBJECT
+
+"Specifies the sorting order for database indexes."
+enum IndexFieldOrder {
+ "Sorts the field in ascending order (from lowest to highest)."
+ ASC
+ "Sorts the field in descending order (from highest to lowest)."
+ DESC
+}
+
+"Defines the type of index to be used in the database."
+enum IndexType {
+ "A general-purpose index type commonly used for sorting and searching."
+ BTREE
+ "Generalized Inverted Index, optimized for indexing composite values such as arrays."
+ GIN
+ "Hierarchical Navigable Small World graph, used for nearest-neighbor searches on vector fields."
+ HNSW
+ "Inverted File Index, optimized for approximate nearest-neighbor searches in vector databases."
+ IVFFLAT
+}
+
+"""
+Defines unique constraints on `@table`.
+
+For example,
+
+```graphql
+type User @table {
+ phoneNumber: Int64 @unique
+}
+type UserProfile @table {
+ user: User! @unique
+ address: String @unique
+}
+```
+
+- `@unique` on a `@col` field adds a single-column unique constraint.
+- `@unique` on a `@table` type adds a composite unique constraint.
+- `@unique` on a `@ref` defines a one-to-one relation. It adds unique constraint
+ on `@ref(fields)`.
+
+`@unique` ensures those fields can uniquely identify a row, so other `@table`
+type may define `@ref(references)` to refer to fields that has a unique constraint.
+
+"""
+directive @unique(
+ """
+ Configures the SQL database unique constraint name.
+
+ If not overridden, Data Connect generates the unique constraint name:
+ - `table_name_first_field_second_field_uidx`
+ - `table_name_only_field_name_uidx`
+ """
+ indexName: String
+ """
+ Only allowed and required when used on OBJECT,
+ this specifies the fields to create a unique constraint on.
+ """
+ fields: [String!]
+) repeatable on FIELD_DEFINITION | OBJECT
+
+"""
+Date is a string in the YYYY-MM-DD format representing a local-only date.
+
+See the description for Timestamp for range and limitations.
+
+As a FDC-specific extension, inputs that includes time portions (as specified by
+the Timestamp scalar) are accepted but only the date portion is used. In other
+words, only the part before "T" is used and the rest discarded. This effectively
+truncates it to the local date in the specified time-zone.
+
+Outputs will always be in the canonical YYYY-MM-DD format.
+
+In the PostgreSQL table, it's stored as [`date`](https://www.postgresql.org/docs/current/datatype-datetime.html).
+"""
+scalar Date @specifiedBy(url: "https://scalars.graphql.org/andimarek/local-date.html")
+
+"""
+Timestamp is a RFC 3339 string that represents an exact point in time.
+
+The serialization format follows https://scalars.graphql.org/andimarek/date-time
+except the "Non-optional exact milliseconds" Section. As a FDC-specific
+extension, inputs and outputs may contain 0, 3, 6, or 9 fractional digits.
+
+Specifically, output precision varies by server-side factors such as data source
+support and clients must not rely on an exact number of digits. Clients may
+truncate extra digits as fit, with the caveat that there may be information loss
+if the truncated value is subsequently sent back to the server.
+
+FDC only supports year 1583 to 9999 (inclusive) and uses the ISO-8601 calendar
+system for all date-time calculations. Notably, the expanded year representation
+(+/-YYYYY) is rejected and Year 1582 and before may either be rejected or cause
+undefined behavior.
+
+In the PostgreSQL table, it's stored as [`timestamptz`](https://www.postgresql.org/docs/current/datatype-datetime.html).
+"""
+scalar Timestamp @specifiedBy(url: "https://scalars.graphql.org/andimarek/date-time")
+
+"""
+A Common Expression Language (CEL) expression that returns a Timestamp at runtime.
+
+Limitation: Right now, only a few expressions are supported.
+"""
+scalar Timestamp_Expr
+ @specifiedBy(url: "https://github.com/google/cel-spec")
+ @fdc_celExpression(returnType: "google.protobuf.Timestamp")
+ @fdc_forbiddenAsVariableType
+ @fdc_forbiddenAsFieldType
+ @fdc_example(value: "request.time", description: "The timestamp when the request is received (with microseconds precision).")
+
+"""
+A Common Expression Language (CEL) expression that returns a Timestamp at runtime,
+which is then truncated to UTC date only. The time-of-day parts are discarded.
+
+Limitation: Right now, only a few expressions are supported.
+"""
+scalar Date_Expr
+ @specifiedBy(url: "https://github.com/google/cel-spec")
+ @fdc_celExpression(returnType: "google.protobuf.Timestamp")
+ @fdc_forbiddenAsVariableType
+ @fdc_forbiddenAsFieldType
+ @fdc_example(value: "request.time", description: "The UTC date on which the request is received.")
+
+"Conditions on a `Date` value."
+input Date_Filter {
+ "Match if the field `IS NULL`."
+ isNull: Boolean
+ "Match if the field is exactly equal to the provided value."
+ eq: Date @fdc_oneOf(group: "eq")
+ "Match if the field equals the provided CEL expression."
+ eq_expr: Date_Expr @fdc_oneOf(group: "eq")
+ "Match if the field equals the provided relative date."
+ eq_date: Date_Relative @fdc_oneOf(group: "eq")
+ "Match if the field is not equal to the provided value."
+ ne: Date @fdc_oneOf(group: "ne")
+ "Match if the field is not equal to the provided CEL expression."
+ ne_expr: Date_Expr @fdc_oneOf(group: "ne")
+ "Match if the field is not equal to the provided relative date."
+ ne_date: Date_Relative @fdc_oneOf(group: "ne")
+ "Match if the field value is among the provided list of values."
+ in: [Date!]
+ "Match if the field value is not among the provided list of values."
+ nin: [Date!]
+ "Match if the field value is greater than the provided value."
+ gt: Date @fdc_oneOf(group: "gt")
+ "Match if the field value is greater than the provided CEL expression."
+ gt_expr: Date_Expr @fdc_oneOf(group: "gt")
+ "Match if the field value is greater than the provided relative date."
+ gt_date: Date_Relative @fdc_oneOf(group: "gt")
+ "Match if the field value is greater than or equal to the provided value."
+ ge: Date @fdc_oneOf(group: "ge")
+ "Match if the field value is greater than or equal to the provided CEL expression."
+ ge_expr: Date_Expr @fdc_oneOf(group: "ge")
+ "Match if the field value is greater than or equal to the provided relative date."
+ ge_date: Date_Relative @fdc_oneOf(group: "ge")
+ "Match if the field value is less than the provided value."
+ lt: Date @fdc_oneOf(group: "lt")
+ "Match if the field value is less than the provided CEL expression."
+ lt_expr: Date_Expr @fdc_oneOf(group: "lt")
+ "Match if the field value is less than the provided relative date."
+ lt_date: Date_Relative @fdc_oneOf(group: "lt")
+ "Match if the field value is less than or equal to the provided value."
+ le: Date @fdc_oneOf(group: "le")
+ "Match if the field value is less than or equal to the provided CEL expression."
+ le_expr: Date_Expr @fdc_oneOf(group: "le")
+ "Match if the field value is less than or equal to the provided relative date."
+ le_date: Date_Relative @fdc_oneOf(group: "le")
+}
+
+"Conditions on a`Date` list."
+input Date_ListFilter {
+ "Match if the list contains the provided date."
+ includes: Date @fdc_oneOf(group: "includes")
+ "Match if the list contains the provided date CEL expression."
+ includes_expr: Date_Expr @fdc_oneOf(group: "includes")
+ "Match if the list contains the provided relative date."
+ includes_date: Date_Relative @fdc_oneOf(group: "includes")
+ "Match if the list does not contain the provided date."
+ excludes: Date @fdc_oneOf(group: "excludes")
+ "Match if the list does not contain the provided date CEL expression."
+ excludes_expr: Date_Expr @fdc_oneOf(group: "excludes")
+ "Match if the list does not contain the provided relative date."
+ excludes_date: Date_Relative @fdc_oneOf(group: "excludes")
+ "Match if the list contains all the provided dates."
+ includesAll: [Date!]
+ "Match if the list contains none of the provided dates."
+ excludesAll: [Date!]
+}
+
+"Conditions on a `Timestamp` value."
+input Timestamp_Filter {
+ "Match if the field `IS NULL`."
+ isNull: Boolean
+ "Match if the field is exactly equal to the provided value."
+ eq: Timestamp @fdc_oneOf(group: "eq")
+ "Match if the field equals the provided CEL expression."
+ eq_expr: Timestamp_Expr @fdc_oneOf(group: "eq")
+ "Match if the field equals the provided relative time."
+ eq_time: Timestamp_Relative @fdc_oneOf(group: "eq")
+ "Match if the field is not equal to the provided value."
+ ne: Timestamp @fdc_oneOf(group: "ne")
+ "Match if the field is not equal to the provided CEL expression."
+ ne_expr: Timestamp_Expr @fdc_oneOf(group: "ne")
+ "Match if the field is not equal to the provided relative time."
+ ne_time: Timestamp_Relative @fdc_oneOf(group: "ne")
+ "Match if the field value is among the provided list of values."
+ in: [Timestamp!]
+ "Match if the field value is not among the provided list of values."
+ nin: [Timestamp!]
+ "Match if the field value is greater than the provided value."
+ gt: Timestamp @fdc_oneOf(group: "gt")
+ "Match if the field value is greater than the provided CEL expression."
+ gt_expr: Timestamp_Expr @fdc_oneOf(group: "gt")
+ "Match if the field value is greater than the provided relative time."
+ gt_time: Timestamp_Relative @fdc_oneOf(group: "gt")
+ "Match if the field value is greater than or equal to the provided value."
+ ge: Timestamp @fdc_oneOf(group: "ge")
+ "Match if the field value is greater than or equal to the provided CEL expression."
+ ge_expr: Timestamp_Expr @fdc_oneOf(group: "ge")
+ "Match if the field value is greater than or equal to the provided relative time."
+ ge_time: Timestamp_Relative @fdc_oneOf(group: "ge")
+ "Match if the field value is less than the provided value."
+ lt: Timestamp @fdc_oneOf(group: "lt")
+ "Match if the field value is less than the provided CEL expression."
+ lt_expr: Timestamp_Expr @fdc_oneOf(group: "lt")
+ "Match if the field value is less than the provided relative time."
+ lt_time: Timestamp_Relative @fdc_oneOf(group: "lt")
+ "Match if the field value is less than or equal to the provided value."
+ le: Timestamp @fdc_oneOf(group: "le")
+ "Match if the field value is less than or equal to the provided CEL expression."
+ le_expr: Timestamp_Expr @fdc_oneOf(group: "le")
+ "Match if the field value is less than or equal to the provided relative time."
+ le_time: Timestamp_Relative @fdc_oneOf(group: "le")
+}
+
+"Conditions on a `Timestamp` list."
+input Timestamp_ListFilter {
+ "Match if the list contains the provided timestamp."
+ includes: Timestamp @fdc_oneOf(group: "includes")
+ "Match if the list contains the provided timestamp CEL expression."
+ includes_expr: Timestamp_Expr @fdc_oneOf(group: "includes")
+ "Match if the list contains the provided relative timestamp."
+ includes_time: Timestamp_Relative @fdc_oneOf(group: "includes")
+ "Match if the list does not contain the provided timestamp."
+ excludes: Timestamp @fdc_oneOf(group: "excludes")
+ "Match if the list does not contain the provided timestamp CEL expression."
+ excludes_expr: Timestamp_Expr @fdc_oneOf(group: "excludes")
+ "Match if the list does not contain the provided relative timestamp."
+ excludes_time: Timestamp_Relative @fdc_oneOf(group: "excludes")
+ "Match if the list contains all the provided timestamps."
+ includesAll: [Timestamp!]
+ "Match if the list contains none of the provided timestamps."
+ excludesAll: [Timestamp!]
+}
+
+"Update input of a `Date` value."
+input Date_Update {
+ "Set the field to the provided date."
+ set: Date @fdc_oneOf(group: "set")
+ "Set the field to the provided date CEL expression."
+ set_expr: Date_Expr @fdc_oneOf(group: "set")
+ "Set the field to the provided relative date."
+ set_date: Date_Relative @fdc_oneOf(group: "set")
+}
+
+"Update input of a `Date` list value."
+input Date_ListUpdate {
+ "Replace the current list with the provided list of `Date` values."
+ set: [Date!]
+ "Append the provided `Date` values to the existing list."
+ append: [Date!]
+ "Prepend the provided `Date` values to the existing list."
+ prepend: [Date!]
+ "Remove the date value at the specified index."
+ delete: Int
+ "The index of the list to perform updates."
+ i: Int
+ "Update the date value at the specified index."
+ update: Date
+}
+
+"Update input of a `Timestamp` value."
+input Timestamp_Update {
+ "Set the field to the provided timestamp."
+ set: Timestamp @fdc_oneOf(group: "set")
+ "Set the field to the provided timestamp CEL expression."
+ set_expr: Timestamp_Expr @fdc_oneOf(group: "set")
+ "Set the field to the provided relative timestamp."
+ set_time: Timestamp_Relative @fdc_oneOf(group: "set")
+}
+
+"Update input of an `Timestamp` list value."
+input Timestamp_ListUpdate {
+ "Replace the current list with the provided list of `Timestamp` values."
+ set: [Timestamp!]
+ "Append the provided `Timestamp` values to the existing list."
+ append: [Timestamp!]
+ "Prepend the provided `Timestamp` values to the existing list."
+ prepend: [Timestamp!]
+ "Remove the timestamp value at the specified index."
+ delete: Int
+ "The index of the list to perform updates."
+ i: Int
+ "Update the timestamp value at the specified index."
+ update: Timestamp
+}
+
+
+"A runtime-calculated `Timestamp` value relative to `now` or `at`."
+input Timestamp_Relative @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType {
+ "Match for the current time."
+ now: True @fdc_oneOf(group: "from", required: true)
+ "A specific timestamp for matching."
+ at: Timestamp @fdc_oneOf(group: "from", required: true)
+ "Add the provided duration to the base timestamp."
+ add: Timestamp_Duration
+ "Subtract the provided duration from the base timestamp."
+ sub: Timestamp_Duration
+ "Truncate the timestamp to the provided interval."
+ truncateTo: Timestamp_Interval
+}
+
+input Timestamp_Duration @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType {
+ "The number of milliseconds for the duration."
+ milliseconds: Int! = 0
+ "The number of seconds for the duration."
+ seconds: Int! = 0
+ "The number of minutes for the duration."
+ minutes: Int! = 0
+ "The number of hours for the duration."
+ hours: Int! = 0
+ "The number of days for the duration."
+ days: Int! = 0
+ "The number of weeks for the duration."
+ weeks: Int! = 0
+ "The number of months for the duration."
+ months: Int! = 0
+ "The number of years for the duration."
+ years: Int! = 0
+}
+
+enum Timestamp_Interval @fdc_forbiddenAsFieldType {
+ "Represents a time interval of one second."
+ SECOND
+ "Represents a time interval of one minute."
+ MINUTE
+ "Represents a time interval of one hour."
+ HOUR
+ "Represents a time interval of one day."
+ DAY
+ "Represents a time interval of one week."
+ WEEK
+ "Represents a time interval of one month."
+ MONTH
+ "Represents a time interval of one year."
+ YEAR
+}
+
+"A runtime-calculated Date value relative to `today` or `on`."
+input Date_Relative @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType {
+ "Match for today’s date."
+ today: True @fdc_oneOf(group: "from", required: true)
+ "A specific date for matching."
+ on: Date @fdc_oneOf(group: "from", required: true)
+ "Add the provided duration to the base date."
+ add: Date_Duration
+ "Subtract the provided duration from the base date."
+ sub: Date_Duration
+ "Truncate the date to the provided interval."
+ truncateTo: Date_Interval
+}
+
+input Date_Duration @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType {
+ "The number of days for the duration."
+ days: Int! = 0
+ "The number of weeks for the duration."
+ weeks: Int! = 0
+ "The number of months for the duration."
+ months: Int! = 0
+ "The number of years for the duration."
+ years: Int! = 0
+}
+
+enum Date_Interval @fdc_forbiddenAsFieldType {
+ "Represents a time interval of one week."
+ WEEK
+ "Represents a time interval of one month."
+ MONTH
+ "Represents a time interval of one year."
+ YEAR
+}
+
+"Update input of a `String` value."
+input String_Update {
+ "Set the field to a provided value."
+ set: String @fdc_oneOf(group: "set")
+ "Set the field to a provided server value expression."
+ set_expr: String_Expr @fdc_oneOf(group: "set")
+}
+
+"Update input of a `String` list value."
+input String_ListUpdate {
+ "Set the list with the provided values."
+ set: [String!]
+ "Append the provided values to the existing list."
+ append: [String!]
+ "Prepend the provided values to the existing list."
+ prepend: [String!]
+}
+
+"Update input of a `UUID` value."
+input UUID_Update {
+ "Set the field to a provided UUID."
+ set: UUID @fdc_oneOf(group: "set")
+ "Set the field to a provided UUID expression."
+ set_expr: UUID_Expr @fdc_oneOf(group: "set")
+}
+
+"Update input of an `ID` list value."
+input UUID_ListUpdate {
+ "Set the list with the provided list of UUIDs."
+ set: [UUID!]
+ "Append the provided UUIDs to the existing list."
+ append: [UUID!]
+ "Prepend the provided UUIDs to the existing list."
+ prepend: [UUID!]
+}
+
+"Update input of an `Int` value."
+input Int_Update {
+ "Set the field to a provided value."
+ set: Int
+ "Increment the field by a provided value."
+ inc: Int
+ "Decrement the field by a provided value."
+ dec: Int
+}
+
+"Update input of an `Int` list value."
+input Int_ListUpdate {
+ "Set the list with the provided values."
+ set: [Int!]
+ "Append the provided list of values to the existing list."
+ append: [Int!]
+ "Prepend the provided list of values to the existing list."
+ prepend: [Int!]
+}
+
+"Update input of an `Int64` value."
+input Int64_Update {
+ "Set the field to a provided value."
+ set: Int64
+ "Increment the field by a provided value."
+ inc: Int64
+ "Decrement the field by a provided value."
+ dec: Int64
+}
+
+"Update input of an `Int64` list value."
+input Int64_ListUpdate {
+ "Replace the list with the provided values."
+ set: [Int64!]
+ "Append the provided list of values to the existing list."
+ append: [Int64!]
+ "Prepend the provided list of values to the existing list."
+ prepend: [Int64!]
+}
+
+"Update input of a `Float` value."
+input Float_Update {
+ "Set the field to a provided value."
+ set: Float
+ "Increment the field by a provided value."
+ inc: Float
+ "Decrement the field by a provided value."
+ dec: Float
+}
+
+"Update input of a `Float` list value."
+input Float_ListUpdate {
+ "Set the list with the provided values."
+ set: [Float!]
+ "Append the provided list of values to the existing list."
+ append: [Float!]
+ "Prepend the provided list of values to the existing list."
+ prepend: [Float!]
+}
+
+"Update input of a `Boolean` value."
+input Boolean_Update {
+ "Set the field to a provided value."
+ set: Boolean
+}
+
+"Update input of a `Boolean` list value."
+input Boolean_ListUpdate {
+ "Set the list with the provided values."
+ set: [Boolean!]
+ "Append the provided list of values to the existing list."
+ append: [Boolean!]
+ "Prepend the provided list of values to the existing list."
+ prepend: [Boolean!]
+}
+
+"Update input of an `Any` value."
+input Any_Update {
+ "Set the field to a provided value."
+ set: Any
+}
+
+"Update input of an `Any` list value."
+input Any_ListUpdate {
+ "Set the list with the provided values."
+ set: [Any!]
+ "Append the provided list of values to the existing list."
+ append: [Any!]
+ "Prepend the provided list of values to the existing list."
+ prepend: [Any!]
+}
+
+type Query {
+ """
+ _service provides customized introspection on Firebase Data Connect Sevice.
+ """
+ _service: _Service!
+}
+
+"""
+Vector is an array of single-precision floating-point numbers, serialized
+as a JSON array. All elements must be finite (no NaN, Infinity or -Infinity).
+
+Example: [1.1, 2, 3.3]
+
+In the PostgreSQL table, it's stored as [`pgvector`](https://github.com/pgvector/pgvector).
+
+See `Vector_Embed` for how to generate text embeddings in query and mutations.
+"""
+scalar Vector
+
+"""
+Defines the similarity function to use when comparing vectors in queries.
+
+Defaults to `INNER_PRODUCT`.
+
+View [all vector functions](https://github.com/pgvector/pgvector?tab=readme-ov-file#vector-functions).
+"""
+enum VectorSimilarityMethod {
+ "Measures the Euclidean (L2) distance between two vectors."
+ L2
+ "Measures the cosine similarity between two vectors."
+ COSINE
+ "Measures the inner product(dot product) between two vectors."
+ INNER_PRODUCT
+}
+
+"Conditions on a Vector value."
+input Vector_Filter {
+ "Match if the field is exactly equal to the provided vector."
+ eq: Vector
+ "Match if the field is not equal to the provided vector."
+ ne: Vector
+ "Match if the field value is among the provided list of vectors."
+ in: [Vector!]
+ "Match if the field value is not among the provided list of vectors."
+ nin: [Vector!]
+ "Match if the field is `NULL`."
+ isNull: Boolean
+}
+
+input Vector_ListFilter {
+ "Match if the list includes the supplied vector."
+ includes: Vector
+ "Match if the list does not include the supplied vector."
+ excludes: Vector
+ "Match if the list contains all the provided vectors."
+ includesAll: [Vector!]
+ "Match if the list contains none of the provided vectors."
+ excludesAll: [Vector!]
+}
+
+"Update input of a Vector value."
+input Vector_Update {
+ "Set the field to the provided vector value."
+ set: Vector @fdc_oneOf(group: "set")
+ "Set the field to the vector embedding result from a text input."
+ set_embed: Vector_Embed @fdc_oneOf(group: "set")
+}
+
+
+"Update input of a Vector list value."
+input Vector_ListUpdate {
+ "Replace the current list with the provided list of Vector values."
+ set: [Vector]
+ "Append the provided Vector values to the existing list."
+ append: [Vector]
+ "Prepend the provided Vector values to the existing list."
+ prepend: [Vector]
+ "Delete the vector at the specified index."
+ delete: Int
+ "The index of the vector to be updated."
+ i: Int
+ "Update the vector at the specified index."
+ update: Vector
+}
+
+"""
+Create a vector embedding of text using the given model on Vertex AI.
+
+Cloud SQL for Postgresql natively integrates with [Vertex AI Text embeddings API](https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/text-embeddings-api)
+to effectively generate text embeddings.
+
+If you uses [`Vector`](scalar.md#Vector) in your schema, Firebase Data Connect automatically installs
+[`pgvector`](https://github.com/pgvector/pgvector) and [`google_ml_integration`](https://cloud.google.com/sql/docs/postgres/integrate-cloud-sql-with-vertex-ai)
+Postgres extensions in your Cloud SQL database.
+
+Given a Post table with a `Vector` embedding field.
+
+```graphql
+type Post @table {
+ content: String!
+ contentEmbedding: Vector @col(size:768)
+}
+```
+
+NOTE: All natively supported `Vector_Embed_Model` generates vector of length `768`.
+
+###### Example: Insert embedding
+
+```graphql
+mutation CreatePost($content: String!) {
+ post_insert(data: {
+ content: $content,
+ contentEmbedding_embed: {model: "textembedding-gecko@003", text: $content},
+ })
+}
+```
+
+###### Example: Vector similarity Search
+
+```graphql
+query SearchPost($query: String!) {
+ posts_contentEmbedding_similarity(compare_embed: {model: "textembedding-gecko@003", text: $query}) {
+ id
+ content
+ }
+}
+```
+"""
+input Vector_Embed @fdc_forbiddenAsVariableType {
+ """
+ The model to use for vector embedding.
+ Recommend the latest stable model: `textembedding-gecko@003`.
+ """
+ model: Vector_Embed_Model!
+ "The text to generate the vector embedding from."
+ text: String!
+}
+
+"""
+The Vertex AI model version that is required in input `Vector_Embed`.
+
+It is recommended to use the latest stable model version: `textembedding-gecko@003`.
+
+View all supported [Vertex AI Text embeddings APIs](https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/text-embeddings-api).
+"""
+scalar Vector_Embed_Model
+ @specifiedBy(url: "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versioning")
+ @fdc_forbiddenAsVariableType
+ @fdc_forbiddenAsFieldType
+ @fdc_example(value: "textembedding-gecko@003", description: "A stable version of the textembedding-gecko model")
+ @fdc_example(value: "textembedding-gecko@001", description: "An older version of the textembedding-gecko model")
+ @fdc_example(value: "text-embedding-004", description: "Another text embedding model")
+
+"""
+Redact a part of the response from the client.
+
+Redacted fields are still evaluated for side effects (including data changes and
+`@check`) and the results are still available to later steps in CEL expressions
+(via `response.fieldName`).
+"""
+directive @redact on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
+
+"""
+Ensure this field is present and is not null or `[]`, or abort the request / transaction.
+
+A CEL expression, `expr` is used to test the field value. It defaults to
+rejecting null and `[]` but a custom expression can be provided instead.
+
+If the field occurs multiple times (i.e. directly or indirectly nested under a
+list), `expr` will be executed once for each occurrence and `@check` succeeds if
+all values succeed. `@check` fails when the field is not present at all (i.e.
+all ancestor paths contain `null` or `[]`), unless `optional` is true.
+
+If a `@check` fails in a mutation, the top-level field containing it will be
+replaced with a partial error, whose message can be customzied via the `message`
+argument. Each subsequent top-level fields will return an aborted error (i.e.
+not executed). To rollback previous steps, see `@transaction`.
+"""
+directive @check(
+ """
+ The CEL expression to test the field value (or values if nested under a list).
+
+ Within the CEL expression, a special value `this` evaluates to the field that
+ this directive is attached to. If this field occurs multiple times because
+ any ancestor is a list, each occurrence is tested with `this` bound to each
+ value. When the field itself is a list or object, `this` follows the same
+ structure (including all decendants selected in case of objects).
+
+ For any given path, if an ancestor is `null` or `[]`, the field will not be
+ reached and the CEL evaluation will be skipped for that path. In other words,
+ evaluation only takes place when `this` is `null` or non-null, but never
+ undefined. (See also the `optional` argument.)
+ """
+ expr: Boolean_Expr! = "!(this in [null, []])"
+ """
+ The error message to return to the client if the check fails.
+
+ Defaults to "permission denied" if not specified.
+ """
+ message: String! = "permission denied"
+ """
+ Whether the check should pass or fail (default) when the field is not present.
+
+ A field will not be reached at a given path if its parent or any ancestor is
+ `[]` or `null`. When this happens to all paths, the field will not be present
+ anywhere in the response tree. In other words, `expr` is evaluated 0 times.
+ By default, @check will automatically fail in this case. Set this argument to
+ `true` to make it pass even if no tests are run (a.k.a. "vacuously true").
+ """
+ optional: Boolean = false
+) repeatable on QUERY | MUTATION | FIELD | FRAGMENT_DEFINITION | FRAGMENT_SPREAD | INLINE_FRAGMENT
+
+type Mutation {
+ """
+ Run a query during the mutation and add fields into the response.
+
+ Example: foo: query { users { id } } will add a field foo: {users: [{id: "..."}, …]} into the response JSON.
+
+ Note: Data fetched this way can be handy for permission checks. See @check.
+ """
+ query: Query
+}
+
diff --git a/app/dataconnect/connector/connector.yaml b/app/dataconnect/connector/connector.yaml
new file mode 100644
index 0000000..180a2b8
--- /dev/null
+++ b/app/dataconnect/connector/connector.yaml
@@ -0,0 +1,6 @@
+connectorId: default
+generate:
+ javascriptSdk:
+ outputDir: ..\..\dataconnect-generated\js\default-connector
+ package: "@firebasegen/default-connector"
+ packageJsonDir: ..\..
diff --git a/app/dataconnect/connector/mutations.gql b/app/dataconnect/connector/mutations.gql
new file mode 100644
index 0000000..431eb34
--- /dev/null
+++ b/app/dataconnect/connector/mutations.gql
@@ -0,0 +1,50 @@
+# # Example mutations for a simple movie app
+
+# # Create a movie based on user input
+# mutation CreateMovie(
+# $title: String!
+# $genre: String!
+# $imageUrl: String!
+# ) @auth(level: USER_EMAIL_VERIFIED) {
+# movie_insert(
+# data: {
+# title: $title
+# genre: $genre
+# imageUrl: $imageUrl
+# }
+# )
+# }
+
+# # Upsert (update or insert) a user's username based on their auth.uid
+# mutation UpsertUser($username: String!) @auth(level: USER) {
+# user_upsert(
+# data: {
+# id_expr: "auth.uid"
+# username: $username
+# }
+# )
+# }
+
+# # Add a review for a movie
+# mutation AddReview(
+# $movieId: UUID!
+# $rating: Int!
+# $reviewText: String!
+# ) @auth(level: USER) {
+# review_upsert(
+# data: {
+# userId_expr: "auth.uid"
+# movieId: $movieId
+# rating: $rating
+# reviewText: $reviewText
+# # reviewDate defaults to today in the schema. No need to set it manually.
+# }
+# )
+# }
+
+# # Logged in user can delete their review for a movie
+# mutation DeleteReview(
+# $movieId: UUID!
+# ) @auth(level: USER) {
+# review_delete(key: { userId_expr: "auth.uid", movieId: $movieId })
+# }
diff --git a/app/dataconnect/connector/queries.gql b/app/dataconnect/connector/queries.gql
new file mode 100644
index 0000000..dd4424f
--- /dev/null
+++ b/app/dataconnect/connector/queries.gql
@@ -0,0 +1,83 @@
+# # Example queries for a simple movie app.
+
+# # @auth() directives control who can call each operation.
+# # Anyone should be able to list all movies, so the auth level is set to PUBLIC
+# query ListMovies @auth(level: PUBLIC) {
+# movies {
+# id
+# title
+# imageUrl
+# genre
+# }
+# }
+
+# # List all users, only admins should be able to list all users, so we use NO_ACCESS
+# query ListUsers @auth(level: NO_ACCESS) {
+# users { id, username }
+# }
+
+# # Logged in user can list all their reviews and movie titles associated with the review
+# # Since the query requires the uid of the current authenticated user, the auth level is set to USER
+# query ListUserReviews @auth(level: USER) {
+# user(key: {id_expr: "auth.uid"}) {
+# id
+# username
+# # _on_ makes it easy to grab info from another table
+# # Here, we use it to grab all the reviews written by the user.
+# reviews: reviews_on_user {
+# id
+# rating
+# reviewDate
+# reviewText
+# movie {
+# id
+# title
+# }
+# }
+# }
+# }
+
+# # Get movie by id
+# query GetMovieById($id: UUID!) @auth(level: PUBLIC) {
+# movie(id: $id) {
+# id
+# title
+# imageUrl
+# genre
+# metadata: movieMetadata_on_movie {
+# rating
+# releaseYear
+# description
+# }
+# reviews: reviews_on_movie {
+# id
+# reviewText
+# reviewDate
+# rating
+# user {
+# id
+# username
+# }
+# }
+# }
+# }
+
+# # Search for movies, actors, and reviews
+# query SearchMovie(
+# $titleInput: String
+# $genre: String
+# ) @auth(level: PUBLIC) {
+# movies(
+# where: {
+# _and: [
+# { genre: { eq: $genre } }
+# { title: { contains: $titleInput } }
+# ]
+# }
+# ) {
+# id
+# title
+# genre
+# imageUrl
+# }
+# }
diff --git a/app/dataconnect/dataconnect.yaml b/app/dataconnect/dataconnect.yaml
new file mode 100644
index 0000000..ca0f22e
--- /dev/null
+++ b/app/dataconnect/dataconnect.yaml
@@ -0,0 +1,12 @@
+specVersion: "v1beta"
+serviceId: "app"
+location: "us-central1"
+schema:
+ source: "./schema"
+ datasource:
+ postgresql:
+ database: "fdcdb"
+ cloudSql:
+ instanceId: "app-fdc"
+ # schemaValidation: "COMPATIBLE"
+connectorDirs: ["./connector"]
diff --git a/app/dataconnect/schema/schema.gql b/app/dataconnect/schema/schema.gql
new file mode 100644
index 0000000..970a7c5
--- /dev/null
+++ b/app/dataconnect/schema/schema.gql
@@ -0,0 +1,45 @@
+# # Example schema for simple movie review app
+
+# # Users
+# # Suppose a user can leave reviews for movies
+# # user -> reviews is a one to many relationship,
+# # movie -> reviews is a one to many relationship
+# # movie <-> user is a many to many relationship
+# type User @table {
+# id: String! @col(name: "user_auth")
+# username: String! @col(name: "username", dataType: "varchar(50)")
+# # The following are generated by the user: User! field in the Review table
+# # reviews_on_user
+# # movies_via_Review
+# }
+
+# # Movies
+# type Movie @table {
+# # The below parameter values are generated by default with @table, and can be edited manually.
+# # implies directive `@col(name: "movie_id")`, generating a column name
+# id: UUID! @default(expr: "uuidV4()")
+# title: String!
+# imageUrl: String!
+# genre: String
+# }
+
+# # Movie Metadata
+# # Movie - MovieMetadata is a one-to-one relationship
+# type MovieMetadata @table {
+# # @unique indicates a 1-1 relationship
+# movie: Movie! @unique
+# # movieId: UUID <- this is created by the above reference
+# rating: Float
+# releaseYear: Int
+# description: String
+# }
+
+# # Reviews
+# type Review @table(name: "Reviews", key: ["movie", "user"]) {
+# id: UUID! @default(expr: "uuidV4()")
+# user: User!
+# movie: Movie!
+# rating: Int
+# reviewText: String
+# reviewDate: Date! @default(expr: "request.time")
+# }
diff --git a/app/firebase.json b/app/firebase.json
new file mode 100644
index 0000000..56b1f84
--- /dev/null
+++ b/app/firebase.json
@@ -0,0 +1,27 @@
+{
+ "emulators": {
+ "auth": {
+ "port": 9099
+ },
+ "firestore": {
+ "port": 8080
+ },
+ "database": {
+ "port": 9000
+ },
+ "storage": {
+ "port": 9199
+ },
+ "ui": {
+ "enabled": true
+ },
+ "singleProjectMode": true
+ },
+ "firestore": {
+ "rules": "firestore.rules",
+ "indexes": "firestore.indexes.json"
+ },
+ "storage": {
+ "rules": "storage.rules"
+ }
+}
diff --git a/app/firestore.indexes.json b/app/firestore.indexes.json
new file mode 100644
index 0000000..415027e
--- /dev/null
+++ b/app/firestore.indexes.json
@@ -0,0 +1,4 @@
+{
+ "indexes": [],
+ "fieldOverrides": []
+}
diff --git a/app/firestore.rules b/app/firestore.rules
new file mode 100644
index 0000000..ec3f67f
--- /dev/null
+++ b/app/firestore.rules
@@ -0,0 +1,19 @@
+rules_version = '2';
+
+service cloud.firestore {
+ match /databases/{database}/documents {
+
+ // This rule allows anyone with your Firestore database reference to view, edit,
+ // and delete all data in your Firestore database. It is useful for getting
+ // started, but it is configured to expire after 30 days because it
+ // leaves your app open to attackers. At that time, all client
+ // requests to your Firestore database will be denied.
+ //
+ // Make sure to write security rules for your app before that time, or else
+ // all client requests to your Firestore database will be denied until you Update
+ // your rules
+ match /{document=**} {
+ allow read, write: if request.time < timestamp.date(2025, 1, 16);
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/package-lock.json b/app/package-lock.json
index 0178c0a..ccc0dc1 100644
--- a/app/package-lock.json
+++ b/app/package-lock.json
@@ -8,22 +8,34 @@
"name": "yoda",
"version": "0.0.0",
"dependencies": {
+ "@cypress/webpack-preprocessor": "^6.0.2",
+ "@firebasegen/default-connector": "file:dataconnect-generated/js/default-connector",
+ "@radix-ui/react-label": "^2.1.1",
+ "@radix-ui/react-radio-group": "^1.2.2",
+ "@radix-ui/react-select": "^2.1.4",
"@radix-ui/react-slot": "^1.1.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
+ "firebase": "^11.1.0",
+ "jspdf": "^2.5.2",
"lucide-react": "^0.468.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
+ "react-router-dom": "^7.0.2",
"tailwind-merge": "^2.5.5",
"tailwindcss-animate": "^1.0.7"
},
"devDependencies": {
+ "@babel/core": "^7.26.0",
+ "@babel/preset-react": "^7.26.3",
"@eslint/js": "^9.15.0",
"@types/node": "^22.10.1",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@vitejs/plugin-react": "^4.3.4",
"autoprefixer": "^10.4.20",
+ "babel-loader": "^9.2.1",
+ "cypress": "^13.17.0",
"eslint": "^9.15.0",
"eslint-plugin-react": "^7.37.2",
"eslint-plugin-react-hooks": "^5.0.0",
@@ -31,7 +43,18 @@
"globals": "^15.12.0",
"postcss": "^8.4.49",
"tailwindcss": "^3.4.16",
- "vite": "^6.0.1"
+ "vite": "^5.0.0"
+ }
+ },
+ "dataconnect-generated/js/default-connector": {
+ "name": "@firebasegen/default-connector",
+ "version": "1.0.0",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": " >=18.0"
+ },
+ "peerDependencies": {
+ "firebase": "^10.14.0 || ^11.0.0"
}
},
"node_modules/@alloc/quick-lru": {
@@ -50,7 +73,6 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
"integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
- "dev": true,
"license": "Apache-2.0",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
@@ -64,7 +86,6 @@
"version": "7.26.2",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
"integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-validator-identifier": "^7.25.9",
@@ -79,7 +100,6 @@
"version": "7.26.3",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz",
"integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -89,7 +109,6 @@
"version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz",
"integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
@@ -120,7 +139,6 @@
"version": "7.26.3",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz",
"integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.26.3",
@@ -133,11 +151,22 @@
"node": ">=6.9.0"
}
},
+ "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/helper-compilation-targets": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
"integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.25.9",
@@ -150,11 +179,99 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/helper-create-class-features-plugin": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz",
+ "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-member-expression-to-functions": "^7.25.9",
+ "@babel/helper-optimise-call-expression": "^7.25.9",
+ "@babel/helper-replace-supers": "^7.25.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
+ "@babel/traverse": "^7.25.9",
+ "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.26.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz",
+ "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "regexpu-core": "^6.2.0",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-define-polyfill-provider": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz",
+ "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==",
+ "license": "MIT",
+ "peer": true,
+ "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/resolve": {
+ "version": "1.22.9",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.9.tgz",
+ "integrity": "sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "is-core-module": "^2.16.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/@babel/helper-member-expression-to-functions": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz",
+ "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"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==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/traverse": "^7.25.9",
@@ -168,7 +285,6 @@
"version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
"integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.25.9",
@@ -182,21 +298,82 @@
"@babel/core": "^7.0.0"
}
},
+ "node_modules/@babel/helper-optimise-call-expression": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz",
+ "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/types": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"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==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/helper-remap-async-to-generator": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz",
+ "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-wrap-function": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-replace-supers": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz",
+ "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-member-expression-to-functions": "^7.25.9",
+ "@babel/helper-optimise-call-expression": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
+ "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"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==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -206,7 +383,6 @@
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -216,17 +392,30 @@
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
"integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/helper-wrap-function": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz",
+ "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/template": "^7.25.9",
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/helpers": {
"version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz",
"integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.25.9",
@@ -240,7 +429,6 @@
"version": "7.26.3",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz",
"integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.26.3"
@@ -252,12 +440,29 @@
"node": ">=6.0.0"
}
},
- "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
"version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz",
- "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==",
- "dev": true,
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz",
+ "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz",
+ "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
@@ -265,15 +470,15 @@
"node": ">=6.9.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
"version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz",
- "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==",
- "dev": true,
+ "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.25.9.tgz",
+ "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
@@ -281,796 +486,3290 @@
"node": ">=6.9.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/template": {
+ "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
"version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz",
- "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==",
- "dev": true,
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz",
+ "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==",
"license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/code-frame": "^7.25.9",
- "@babel/parser": "^7.25.9",
- "@babel/types": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
+ "@babel/plugin-transform-optional-chaining": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.13.0"
}
},
- "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==",
- "dev": true,
+ "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz",
+ "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==",
"license": "MIT",
+ "peer": true,
"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"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/traverse/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==",
- "dev": true,
+ "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",
+ "peer": true,
"engines": {
- "node": ">=4"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "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==",
- "dev": true,
+ "node_modules/@babel/plugin-syntax-import-assertions": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz",
+ "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/helper-string-parser": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz",
- "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-syntax-import-attributes": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz",
+ "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==",
"license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/android-arm": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz",
- "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==",
- "cpu": [
- "arm"
- ],
+ "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==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/android-arm64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz",
- "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
+ "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",
- "optional": true,
- "os": [
- "android"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@esbuild/android-x64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz",
- "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-arrow-functions": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz",
+ "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==",
"license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz",
- "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-async-generator-functions": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz",
+ "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==",
"license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-remap-async-to-generator": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz",
- "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-async-to-generator": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz",
+ "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==",
"license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-remap-async-to-generator": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz",
- "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz",
+ "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==",
"license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz",
- "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-block-scoping": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz",
+ "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==",
"license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/linux-arm": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz",
- "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-class-properties": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz",
+ "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==",
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz",
- "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-class-static-block": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz",
+ "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==",
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.12.0"
}
},
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz",
- "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-classes": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz",
+ "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==",
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-replace-supers": "^7.25.9",
+ "@babel/traverse": "^7.25.9",
+ "globals": "^11.1.0"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz",
- "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-classes/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",
- "optional": true,
- "os": [
- "linux"
- ],
+ "peer": true,
"engines": {
- "node": ">=18"
+ "node": ">=4"
}
},
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz",
- "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-computed-properties": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz",
+ "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==",
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/template": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz",
- "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-destructuring": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz",
+ "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==",
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz",
- "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-dotall-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz",
+ "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==",
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz",
- "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-duplicate-keys": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz",
+ "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==",
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/linux-x64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz",
- "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz",
+ "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==",
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz",
- "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-dynamic-import": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz",
+ "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==",
"license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz",
- "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.26.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz",
+ "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==",
"license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz",
- "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==",
- "cpu": [
- "x64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-export-namespace-from": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz",
+ "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==",
"license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz",
- "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-for-of": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz",
+ "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==",
"license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz",
- "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-function-name": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz",
+ "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==",
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz",
- "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-json-strings": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz",
+ "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==",
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/win32-x64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz",
- "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
+ "node_modules/@babel/plugin-transform-literals": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz",
+ "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==",
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "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==",
- "dev": true,
+ "node_modules/@babel/plugin-transform-logical-assignment-operators": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz",
+ "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==",
"license": "MIT",
+ "peer": true,
"dependencies": {
- "eslint-visitor-keys": "^3.4.3"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
+ "node": ">=6.9.0"
},
"peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ "@babel/core": "^7.0.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==",
- "dev": true,
- "license": "Apache-2.0",
+ "node_modules/@babel/plugin-transform-member-expression-literals": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz",
+ "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": ">=6.9.0"
},
- "funding": {
- "url": "https://opencollective.com/eslint"
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "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==",
- "dev": true,
+ "node_modules/@babel/plugin-transform-modules-amd": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz",
+ "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==",
"license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.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==",
- "dev": true,
- "license": "Apache-2.0",
+ "node_modules/@babel/plugin-transform-modules-commonjs": {
+ "version": "7.26.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz",
+ "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==",
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@eslint/object-schema": "^2.1.5",
- "debug": "^4.3.1",
- "minimatch": "^3.1.2"
+ "@babel/helper-module-transforms": "^7.26.0",
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "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==",
- "dev": true,
- "license": "Apache-2.0",
+ "node_modules/@babel/plugin-transform-modules-systemjs": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz",
+ "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==",
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@types/json-schema": "^7.0.15"
+ "@babel/helper-module-transforms": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-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==",
- "dev": true,
+ "node_modules/@babel/plugin-transform-modules-umd": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz",
+ "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==",
"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"
+ "@babel/helper-module-transforms": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": ">=6.9.0"
},
- "funding": {
- "url": "https://opencollective.com/eslint"
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "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==",
- "dev": true,
+ "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz",
+ "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==",
"license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@eslint/js": {
- "version": "9.16.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.16.0.tgz",
- "integrity": "sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==",
- "dev": true,
+ "node_modules/@babel/plugin-transform-new-target": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz",
+ "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==",
"license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-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==",
- "dev": true,
- "license": "Apache-2.0",
+ "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz",
+ "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-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==",
+ "node_modules/@babel/plugin-transform-numeric-separator": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz",
+ "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==",
+ "license": "MIT",
+ "peer": true,
+ "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-object-rest-spread": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz",
+ "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/plugin-transform-parameters": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-object-super": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz",
+ "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-replace-supers": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-optional-catch-binding": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz",
+ "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==",
+ "license": "MIT",
+ "peer": true,
+ "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-optional-chaining": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz",
+ "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-parameters": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz",
+ "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==",
+ "license": "MIT",
+ "peer": true,
+ "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-private-methods": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz",
+ "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^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-private-property-in-object": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz",
+ "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-create-class-features-plugin": "^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-property-literals": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz",
+ "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==",
+ "license": "MIT",
+ "peer": true,
+ "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": {
+ "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==",
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
"dependencies": {
- "levn": "^0.4.1"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.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==",
+ "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==",
"dev": true,
- "license": "Apache-2.0",
+ "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": ">=18.18.0"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-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==",
+ "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==",
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
"dependencies": {
- "@humanfs/core": "^0.19.1",
- "@humanwhocodes/retry": "^0.3.0"
+ "@babel/plugin-transform-react-jsx": "^7.25.9"
},
"engines": {
- "node": ">=18.18.0"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-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==",
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz",
+ "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==",
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18.18"
+ "node": ">=6.9.0"
},
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "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==",
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz",
+ "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==",
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=12.22"
+ "node": ">=6.9.0"
},
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "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==",
+ "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==",
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18.18"
+ "node": ">=6.9.0"
},
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "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",
+ "node_modules/@babel/plugin-transform-regenerator": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz",
+ "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==",
+ "license": "MIT",
+ "peer": true,
"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"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "regenerator-transform": "^0.15.2"
},
"engines": {
- "node": ">=12"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-regexp-modifiers": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz",
+ "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-reserved-words": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz",
+ "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==",
+ "license": "MIT",
+ "peer": true,
+ "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-shorthand-properties": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz",
+ "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==",
+ "license": "MIT",
+ "peer": true,
+ "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-spread": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz",
+ "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-sticky-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz",
+ "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==",
+ "license": "MIT",
+ "peer": true,
+ "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-template-literals": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz",
+ "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==",
+ "license": "MIT",
+ "peer": true,
+ "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-typeof-symbol": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz",
+ "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==",
+ "license": "MIT",
+ "peer": true,
+ "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-unicode-escapes": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz",
+ "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==",
+ "license": "MIT",
+ "peer": true,
+ "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-unicode-property-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz",
+ "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^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-unicode-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz",
+ "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^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-unicode-sets-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz",
+ "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/preset-env": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz",
+ "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.26.0",
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-validator-option": "^7.25.9",
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9",
+ "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9",
+ "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+ "@babel/plugin-syntax-import-assertions": "^7.26.0",
+ "@babel/plugin-syntax-import-attributes": "^7.26.0",
+ "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+ "@babel/plugin-transform-arrow-functions": "^7.25.9",
+ "@babel/plugin-transform-async-generator-functions": "^7.25.9",
+ "@babel/plugin-transform-async-to-generator": "^7.25.9",
+ "@babel/plugin-transform-block-scoped-functions": "^7.25.9",
+ "@babel/plugin-transform-block-scoping": "^7.25.9",
+ "@babel/plugin-transform-class-properties": "^7.25.9",
+ "@babel/plugin-transform-class-static-block": "^7.26.0",
+ "@babel/plugin-transform-classes": "^7.25.9",
+ "@babel/plugin-transform-computed-properties": "^7.25.9",
+ "@babel/plugin-transform-destructuring": "^7.25.9",
+ "@babel/plugin-transform-dotall-regex": "^7.25.9",
+ "@babel/plugin-transform-duplicate-keys": "^7.25.9",
+ "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9",
+ "@babel/plugin-transform-dynamic-import": "^7.25.9",
+ "@babel/plugin-transform-exponentiation-operator": "^7.25.9",
+ "@babel/plugin-transform-export-namespace-from": "^7.25.9",
+ "@babel/plugin-transform-for-of": "^7.25.9",
+ "@babel/plugin-transform-function-name": "^7.25.9",
+ "@babel/plugin-transform-json-strings": "^7.25.9",
+ "@babel/plugin-transform-literals": "^7.25.9",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.25.9",
+ "@babel/plugin-transform-member-expression-literals": "^7.25.9",
+ "@babel/plugin-transform-modules-amd": "^7.25.9",
+ "@babel/plugin-transform-modules-commonjs": "^7.25.9",
+ "@babel/plugin-transform-modules-systemjs": "^7.25.9",
+ "@babel/plugin-transform-modules-umd": "^7.25.9",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9",
+ "@babel/plugin-transform-new-target": "^7.25.9",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9",
+ "@babel/plugin-transform-numeric-separator": "^7.25.9",
+ "@babel/plugin-transform-object-rest-spread": "^7.25.9",
+ "@babel/plugin-transform-object-super": "^7.25.9",
+ "@babel/plugin-transform-optional-catch-binding": "^7.25.9",
+ "@babel/plugin-transform-optional-chaining": "^7.25.9",
+ "@babel/plugin-transform-parameters": "^7.25.9",
+ "@babel/plugin-transform-private-methods": "^7.25.9",
+ "@babel/plugin-transform-private-property-in-object": "^7.25.9",
+ "@babel/plugin-transform-property-literals": "^7.25.9",
+ "@babel/plugin-transform-regenerator": "^7.25.9",
+ "@babel/plugin-transform-regexp-modifiers": "^7.26.0",
+ "@babel/plugin-transform-reserved-words": "^7.25.9",
+ "@babel/plugin-transform-shorthand-properties": "^7.25.9",
+ "@babel/plugin-transform-spread": "^7.25.9",
+ "@babel/plugin-transform-sticky-regex": "^7.25.9",
+ "@babel/plugin-transform-template-literals": "^7.25.9",
+ "@babel/plugin-transform-typeof-symbol": "^7.25.9",
+ "@babel/plugin-transform-unicode-escapes": "^7.25.9",
+ "@babel/plugin-transform-unicode-property-regex": "^7.25.9",
+ "@babel/plugin-transform-unicode-regex": "^7.25.9",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.25.9",
+ "@babel/preset-modules": "0.1.6-no-external-plugins",
+ "babel-plugin-polyfill-corejs2": "^0.4.10",
+ "babel-plugin-polyfill-corejs3": "^0.10.6",
+ "babel-plugin-polyfill-regenerator": "^0.6.1",
+ "core-js-compat": "^3.38.1",
+ "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",
+ "peer": true,
+ "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==",
+ "dev": true,
+ "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/runtime": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
+ "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
+ "license": "MIT",
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "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/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/traverse/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/@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/@colors/colors": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
+ "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/@cypress/request": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.7.tgz",
+ "integrity": "sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~4.0.0",
+ "http-signature": "~1.4.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "performance-now": "^2.1.0",
+ "qs": "6.13.1",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "^5.0.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^8.3.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@cypress/webpack-preprocessor": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@cypress/webpack-preprocessor/-/webpack-preprocessor-6.0.2.tgz",
+ "integrity": "sha512-0+1+4iy4W9PE6R5ywBNKAZoFp8Sf//w3UJ+CKTqkcAjA29b+dtsD0iFT70DsYE0BMqUM1PO7HXFGbXllQ+bRAA==",
+ "license": "MIT",
+ "dependencies": {
+ "bluebird": "3.7.1",
+ "debug": "^4.3.4",
+ "lodash": "^4.17.20"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.1",
+ "@babel/preset-env": "^7.0.0",
+ "babel-loader": "^8.3 || ^9",
+ "webpack": "^4 || ^5"
+ }
+ },
+ "node_modules/@cypress/webpack-preprocessor/node_modules/bluebird": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz",
+ "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==",
+ "license": "MIT"
+ },
+ "node_modules/@cypress/xvfb": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz",
+ "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.1.0",
+ "lodash.once": "^4.1.1"
+ }
+ },
+ "node_modules/@cypress/xvfb/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
+ "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz",
+ "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz",
+ "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz",
+ "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz",
+ "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz",
+ "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz",
+ "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz",
+ "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz",
+ "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz",
+ "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz",
+ "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz",
+ "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz",
+ "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz",
+ "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz",
+ "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz",
+ "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz",
+ "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz",
+ "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz",
+ "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz",
+ "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz",
+ "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz",
+ "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz",
+ "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "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==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "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==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "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/core": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz",
+ "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "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/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "9.16.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.16.0.tgz",
+ "integrity": "sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==",
+ "dev": true,
+ "license": "MIT",
+ "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==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "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==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@firebase/analytics": {
+ "version": "0.10.10",
+ "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.10.tgz",
+ "integrity": "sha512-Psdo7c9g2SLAYh6u1XRA+RZ7ab2JfBVuAt/kLzXkhKZL/gS2cQUCMsOW5p0RIlDPRKqpdNSmvujd2TeRWLKOkQ==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/installations": "0.6.11",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "peerDependencies": {
+ "@firebase/app": "0.x"
+ }
+ },
+ "node_modules/@firebase/analytics-compat": {
+ "version": "0.2.16",
+ "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.16.tgz",
+ "integrity": "sha512-Q/s+u/TEMSb2EDJFQMGsOzpSosybBl8HuoSEMyGZ99+0Pu7SIR9MPDGUjc8PKiCFQWDJ3QXxgqh1d/rujyAMbA==",
+ "dependencies": {
+ "@firebase/analytics": "0.10.10",
+ "@firebase/analytics-types": "0.8.3",
+ "@firebase/component": "0.6.11",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "peerDependencies": {
+ "@firebase/app-compat": "0.x"
+ }
+ },
+ "node_modules/@firebase/analytics-types": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.3.tgz",
+ "integrity": "sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg=="
+ },
+ "node_modules/@firebase/app": {
+ "version": "0.10.17",
+ "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.10.17.tgz",
+ "integrity": "sha512-53sIYyAnYEPIZdaxuyq5OST7j4KBc2pqmktz+tEb1BIUSbXh8Gp4k/o6qzLelLpm4ngrBz7SRN0PZJqNRAyPog==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.10.2",
+ "idb": "7.1.1",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@firebase/app-check": {
+ "version": "0.8.10",
+ "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.10.tgz",
+ "integrity": "sha512-DWFfxxif/t+Ow4MmRUevDX+A3hVxm1rUf6y5ZP4sIomfnVCO1NNahqtsv9rb1/tKGkTeoVT40weiTS/WjQG1mA==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "@firebase/app": "0.x"
+ }
+ },
+ "node_modules/@firebase/app-check-compat": {
+ "version": "0.3.17",
+ "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.17.tgz",
+ "integrity": "sha512-a/eadrGsY0MVCBPhrNbKUhoYpms4UKTYLKO7nswwSFVsm3Rw6NslQQCNLfvljcDqP4E7alQDRGJXjkxd/5gJ+Q==",
+ "dependencies": {
+ "@firebase/app-check": "0.8.10",
+ "@firebase/app-check-types": "0.5.3",
+ "@firebase/component": "0.6.11",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "@firebase/app-compat": "0.x"
+ }
+ },
+ "node_modules/@firebase/app-check-interop-types": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.3.tgz",
+ "integrity": "sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A=="
+ },
+ "node_modules/@firebase/app-check-types": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.3.tgz",
+ "integrity": "sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng=="
+ },
+ "node_modules/@firebase/app-compat": {
+ "version": "0.2.47",
+ "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.47.tgz",
+ "integrity": "sha512-TdEWGDp6kSwuO1mxiM2Fe39eLWygfyzqTZcoU3aPV0viqqphPCbBBnVjPbFJErZ4+yaS7uCWXEbFEP9m5/COKA==",
+ "dependencies": {
+ "@firebase/app": "0.10.17",
+ "@firebase/component": "0.6.11",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@firebase/app-types": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.3.tgz",
+ "integrity": "sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw=="
+ },
+ "node_modules/@firebase/auth": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.8.1.tgz",
+ "integrity": "sha512-LX9N/Cf5Z35r5yqm2+5M3+2bRRe/+RFaa/+u4HDni7TA27C/Xm4XHLKcWcLg1BzjrS4zngSaBEOSODvp6RFOqQ==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "@firebase/app": "0.x",
+ "@react-native-async-storage/async-storage": "^1.18.1"
+ },
+ "peerDependenciesMeta": {
+ "@react-native-async-storage/async-storage": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@firebase/auth-compat": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.16.tgz",
+ "integrity": "sha512-YlYwJMBqAyv0ESy3jDUyshMhZlbUiwAm6B6+uUmigNDHU+uq7j4SFiDJEZlFFIz397yBzKn06SUdqutdQzGnCA==",
+ "dependencies": {
+ "@firebase/auth": "1.8.1",
+ "@firebase/auth-types": "0.12.3",
+ "@firebase/component": "0.6.11",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "@firebase/app-compat": "0.x"
+ }
+ },
+ "node_modules/@firebase/auth-interop-types": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.4.tgz",
+ "integrity": "sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA=="
+ },
+ "node_modules/@firebase/auth-types": {
+ "version": "0.12.3",
+ "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.12.3.tgz",
+ "integrity": "sha512-Zq9zI0o5hqXDtKg6yDkSnvMCMuLU6qAVS51PANQx+ZZX5xnzyNLEBO3GZgBUPsV5qIMFhjhqmLDxUqCbnAYy2A==",
+ "peerDependencies": {
+ "@firebase/app-types": "0.x",
+ "@firebase/util": "1.x"
+ }
+ },
+ "node_modules/@firebase/component": {
+ "version": "0.6.11",
+ "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.11.tgz",
+ "integrity": "sha512-eQbeCgPukLgsKD0Kw5wQgsMDX5LeoI1MIrziNDjmc6XDq5ZQnuUymANQgAb2wp1tSF9zDSXyxJmIUXaKgN58Ug==",
+ "dependencies": {
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@firebase/data-connect": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@firebase/data-connect/-/data-connect-0.1.3.tgz",
+ "integrity": "sha512-FbAQpWNHownJx1VTCQI4ydbWGOZmSWXoFlirQn3ItHqsLJYSywqxSgDafzvyooifFh3J/2WqaM8y9hInnPcsTw==",
+ "dependencies": {
+ "@firebase/auth-interop-types": "0.2.4",
+ "@firebase/component": "0.6.11",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "peerDependencies": {
+ "@firebase/app": "0.x"
+ }
+ },
+ "node_modules/@firebase/database": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.10.tgz",
+ "integrity": "sha512-sWp2g92u7xT4BojGbTXZ80iaSIaL6GAL0pwvM0CO/hb0nHSnABAqsH7AhnWGsGvXuEvbPr7blZylPaR9J+GSuQ==",
+ "dependencies": {
+ "@firebase/app-check-interop-types": "0.3.3",
+ "@firebase/auth-interop-types": "0.2.4",
+ "@firebase/component": "0.6.11",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.10.2",
+ "faye-websocket": "0.11.4",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@firebase/database-compat": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.0.1.tgz",
+ "integrity": "sha512-IsFivOjdE1GrjTeKoBU/ZMenESKDXidFDzZzHBPQ/4P20ptGdrl3oLlWrV/QJqJ9lND4IidE3z4Xr5JyfUW1vg==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/database": "1.0.10",
+ "@firebase/database-types": "1.0.7",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@firebase/database-types": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.7.tgz",
+ "integrity": "sha512-I7zcLfJXrM0WM+ksFmFdAMdlq/DFmpeMNa+/GNsLyFo5u/lX5zzkPzGe3srVWqaBQBY5KprylDGxOsP6ETfL0A==",
+ "dependencies": {
+ "@firebase/app-types": "0.9.3",
+ "@firebase/util": "1.10.2"
+ }
+ },
+ "node_modules/@firebase/firestore": {
+ "version": "4.7.5",
+ "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.7.5.tgz",
+ "integrity": "sha512-OO3rHvjC07jL2ITN255xH/UzCVSvh6xG8oTzQdFScQvFbcm1fjCL1hgAdpDZcx3vVcKMV+6ktr8wbllkB8r+FQ==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.10.2",
+ "@firebase/webchannel-wrapper": "1.0.3",
+ "@grpc/grpc-js": "~1.9.0",
+ "@grpc/proto-loader": "^0.7.8",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "@firebase/app": "0.x"
+ }
+ },
+ "node_modules/@firebase/firestore-compat": {
+ "version": "0.3.40",
+ "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.40.tgz",
+ "integrity": "sha512-18HopMN811KYBc9Ptpr1Rewwio0XF09FF3jc5wtV6rGyAs815SlFFw5vW7ZeLd43zv9tlEc2FzM0H+5Vr9ZRxw==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/firestore": "4.7.5",
+ "@firebase/firestore-types": "3.0.3",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "@firebase/app-compat": "0.x"
+ }
+ },
+ "node_modules/@firebase/firestore-types": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.3.tgz",
+ "integrity": "sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q==",
+ "peerDependencies": {
+ "@firebase/app-types": "0.x",
+ "@firebase/util": "1.x"
+ }
+ },
+ "node_modules/@firebase/functions": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.12.0.tgz",
+ "integrity": "sha512-plTtzY/nT0jOgHzT0vB9qch4FpHFOhCnR8HhYBqqdArG6GOQMIruKZbiTyLybO8bcaaNgQ6kSm9yohGUwxHcIw==",
+ "dependencies": {
+ "@firebase/app-check-interop-types": "0.3.3",
+ "@firebase/auth-interop-types": "0.2.4",
+ "@firebase/component": "0.6.11",
+ "@firebase/messaging-interop-types": "0.2.3",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "@firebase/app": "0.x"
+ }
+ },
+ "node_modules/@firebase/functions-compat": {
+ "version": "0.3.17",
+ "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.17.tgz",
+ "integrity": "sha512-oj2XV8YsJYutyPCRYUfbN6swmfrL6zar0/qtqZsKT7P7btOiYRl+lD6fxtQaT+pKE5YgOBGZW//kLPZfY0jWhw==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/functions": "0.12.0",
+ "@firebase/functions-types": "0.6.3",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "@firebase/app-compat": "0.x"
+ }
+ },
+ "node_modules/@firebase/functions-types": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.3.tgz",
+ "integrity": "sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg=="
+ },
+ "node_modules/@firebase/installations": {
+ "version": "0.6.11",
+ "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.11.tgz",
+ "integrity": "sha512-w8fY8mw6fxJzsZM2ufmTtomopXl1+bn/syYon+Gpn+0p0nO1cIUEVEFrFazTLaaL9q1CaVhc3HmseRTsI3igAA==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/util": "1.10.2",
+ "idb": "7.1.1",
+ "tslib": "^2.1.0"
+ },
+ "peerDependencies": {
+ "@firebase/app": "0.x"
+ }
+ },
+ "node_modules/@firebase/installations-compat": {
+ "version": "0.2.11",
+ "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.11.tgz",
+ "integrity": "sha512-SHRgw5LTa6v8LubmJZxcOCwEd1MfWQPUtKdiuCx2VMWnapX54skZd1PkQg0K4l3k+4ujbI2cn7FE6Li9hbChBw==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/installations": "0.6.11",
+ "@firebase/installations-types": "0.5.3",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "peerDependencies": {
+ "@firebase/app-compat": "0.x"
+ }
+ },
+ "node_modules/@firebase/installations-types": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.3.tgz",
+ "integrity": "sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA==",
+ "peerDependencies": {
+ "@firebase/app-types": "0.x"
+ }
+ },
+ "node_modules/@firebase/logger": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.4.tgz",
+ "integrity": "sha512-mH0PEh1zoXGnaR8gD1DeGeNZtWFKbnz9hDO91dIml3iou1gpOnLqXQ2dJfB71dj6dpmUjcQ6phY3ZZJbjErr9g==",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@firebase/messaging": {
+ "version": "0.12.15",
+ "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.15.tgz",
+ "integrity": "sha512-Bz+qvWNEwEWAbYtG4An8hgcNco6NWNoNLuLbGVwPL2fAoCF1zz+dcaBp+iTR2+K199JyRyDT9yDPAXhNHNDaKQ==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/installations": "0.6.11",
+ "@firebase/messaging-interop-types": "0.2.3",
+ "@firebase/util": "1.10.2",
+ "idb": "7.1.1",
+ "tslib": "^2.1.0"
+ },
+ "peerDependencies": {
+ "@firebase/app": "0.x"
+ }
+ },
+ "node_modules/@firebase/messaging-compat": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.15.tgz",
+ "integrity": "sha512-mEKKASRvRWq1aBNHgioGsOYR2c5nBZpO7k90K794zjKe0WkGNf0k7PLs5SlCf8FKnzumEkhTAp/SjYxovuxa8A==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/messaging": "0.12.15",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "peerDependencies": {
+ "@firebase/app-compat": "0.x"
+ }
+ },
+ "node_modules/@firebase/messaging-interop-types": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.3.tgz",
+ "integrity": "sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q=="
+ },
+ "node_modules/@firebase/performance": {
+ "version": "0.6.11",
+ "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.11.tgz",
+ "integrity": "sha512-FlkJFeqLlIeh5T4Am3uE38HVzggliDIEFy/fErEc1faINOUFCb6vQBEoNZGaXvRnTR8lh3X/hP7tv37C7BsK9g==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/installations": "0.6.11",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "peerDependencies": {
+ "@firebase/app": "0.x"
+ }
+ },
+ "node_modules/@firebase/performance-compat": {
+ "version": "0.2.11",
+ "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.11.tgz",
+ "integrity": "sha512-DqeNBy51W2xzlklyC7Ht9JQ94HhTA08PCcM4MDeyG/ol3fqum/+YgtHWQ2IQuduqH9afETthZqLwCZiSgY7hiA==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/logger": "0.4.4",
+ "@firebase/performance": "0.6.11",
+ "@firebase/performance-types": "0.2.3",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "peerDependencies": {
+ "@firebase/app-compat": "0.x"
+ }
+ },
+ "node_modules/@firebase/performance-types": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.3.tgz",
+ "integrity": "sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ=="
+ },
+ "node_modules/@firebase/remote-config": {
+ "version": "0.4.11",
+ "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.11.tgz",
+ "integrity": "sha512-9z0rgKuws2nj+7cdiqF+NY1QR4na6KnuOvP+jQvgilDOhGtKOcCMq5XHiu66i73A9kFhyU6QQ2pHXxcmaq1pBw==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/installations": "0.6.11",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "peerDependencies": {
+ "@firebase/app": "0.x"
+ }
+ },
+ "node_modules/@firebase/remote-config-compat": {
+ "version": "0.2.11",
+ "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.11.tgz",
+ "integrity": "sha512-zfIjpwPrGuIOZDmduukN086qjhZ1LnbJi/iYzgua+2qeTlO0XdlE1v66gJPwygGB3TOhT0yb9EiUZ3nBNttMqg==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/logger": "0.4.4",
+ "@firebase/remote-config": "0.4.11",
+ "@firebase/remote-config-types": "0.3.3",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "peerDependencies": {
+ "@firebase/app-compat": "0.x"
+ }
+ },
+ "node_modules/@firebase/remote-config-types": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.3.3.tgz",
+ "integrity": "sha512-YlRI9CHxrk3lpQuFup9N1eohpwdWayKZUNZ/YeQ0PZoncJ66P32UsKUKqVXOaieTjJIOh7yH8JEzRdht5s+d6g=="
+ },
+ "node_modules/@firebase/storage": {
+ "version": "0.13.4",
+ "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.13.4.tgz",
+ "integrity": "sha512-b1KaTTRiMupFurIhpGIbReaWev0k5O3ouTHkAPcEssT+FvU3q/1JwzvkX4+ZdB60Fc43Mbp8qQ1gWfT0Z2FP9Q==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "@firebase/app": "0.x"
+ }
+ },
+ "node_modules/@firebase/storage-compat": {
+ "version": "0.3.14",
+ "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.14.tgz",
+ "integrity": "sha512-Ok5FmXJiapaNAOQ8W8qppnfwgP8540jw2B8M0c4TFZqF4BD+CoKBxW0dRtOuLNGadLhzqqkDZZZtkexxrveQqA==",
+ "dependencies": {
+ "@firebase/component": "0.6.11",
+ "@firebase/storage": "0.13.4",
+ "@firebase/storage-types": "0.8.3",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "@firebase/app-compat": "0.x"
+ }
+ },
+ "node_modules/@firebase/storage-types": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.3.tgz",
+ "integrity": "sha512-+Muk7g9uwngTpd8xn9OdF/D48uiQ7I1Fae7ULsWPuKoCH3HU7bfFPhxtJYzyhjdniowhuDpQcfPmuNRAqZEfvg==",
+ "peerDependencies": {
+ "@firebase/app-types": "0.x",
+ "@firebase/util": "1.x"
+ }
+ },
+ "node_modules/@firebase/util": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.2.tgz",
+ "integrity": "sha512-qnSHIoE9FK+HYnNhTI8q14evyqbc/vHRivfB4TgCIUOl4tosmKSQlp7ltymOlMP4xVIJTg5wrkfcZ60X4nUf7Q==",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@firebase/vertexai": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@firebase/vertexai/-/vertexai-1.0.2.tgz",
+ "integrity": "sha512-4dC9m2nD0tkfKJT5v+i27tELrmUePjFXW3CDAxhVHUEv647B2R7kqpGQnyPkNEeaXkCr76THe7GGg35EWn4lDw==",
+ "dependencies": {
+ "@firebase/app-check-interop-types": "0.3.3",
+ "@firebase/component": "0.6.11",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.10.2",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "@firebase/app": "0.x",
+ "@firebase/app-types": "0.x"
+ }
+ },
+ "node_modules/@firebase/webchannel-wrapper": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.3.tgz",
+ "integrity": "sha512-2xCRM9q9FlzGZCdgDMJwc0gyUkWFtkosy7Xxr6sFgQwn+wMNIWd7xIvYNauU1r64B5L5rsGKy/n9TKJ0aAFeqQ=="
+ },
+ "node_modules/@firebasegen/default-connector": {
+ "resolved": "dataconnect-generated/js/default-connector",
+ "link": true
+ },
+ "node_modules/@floating-ui/core": {
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz",
+ "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.8"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.6.12",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz",
+ "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/core": "^1.6.0",
+ "@floating-ui/utils": "^0.2.8"
+ }
+ },
+ "node_modules/@floating-ui/react-dom": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz",
+ "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/dom": "^1.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz",
+ "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==",
+ "license": "MIT"
+ },
+ "node_modules/@grpc/grpc-js": {
+ "version": "1.9.15",
+ "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.15.tgz",
+ "integrity": "sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==",
+ "dependencies": {
+ "@grpc/proto-loader": "^0.7.8",
+ "@types/node": ">=12.12.47"
+ },
+ "engines": {
+ "node": "^8.13.0 || >=10.10.0"
+ }
+ },
+ "node_modules/@grpc/proto-loader": {
+ "version": "0.7.13",
+ "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz",
+ "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==",
+ "dependencies": {
+ "lodash.camelcase": "^4.3.0",
+ "long": "^5.0.0",
+ "protobufjs": "^7.2.5",
+ "yargs": "^17.7.2"
+ },
+ "bin": {
+ "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "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==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "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==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "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==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "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==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "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/@jridgewell/gen-mapping": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "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/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "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/@jridgewell/source-map": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+ "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "license": "MIT"
+ },
+ "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/@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/@protobufjs/aspromise": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
+ "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="
+ },
+ "node_modules/@protobufjs/base64": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
+ "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
+ },
+ "node_modules/@protobufjs/codegen": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
+ "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
+ },
+ "node_modules/@protobufjs/eventemitter": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
+ "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="
+ },
+ "node_modules/@protobufjs/fetch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
+ "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
+ "dependencies": {
+ "@protobufjs/aspromise": "^1.1.1",
+ "@protobufjs/inquire": "^1.1.0"
+ }
+ },
+ "node_modules/@protobufjs/float": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
+ "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="
+ },
+ "node_modules/@protobufjs/inquire": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
+ "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="
+ },
+ "node_modules/@protobufjs/path": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
+ "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="
+ },
+ "node_modules/@protobufjs/pool": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
+ "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="
+ },
+ "node_modules/@protobufjs/utf8": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
+ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
+ },
+ "node_modules/@radix-ui/number": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz",
+ "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==",
+ "license": "MIT"
+ },
+ "node_modules/@radix-ui/primitive": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz",
+ "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==",
+ "license": "MIT"
+ },
+ "node_modules/@radix-ui/react-arrow": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.1.tgz",
+ "integrity": "sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-collection": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.1.tgz",
+ "integrity": "sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-slot": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-compose-refs": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz",
+ "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-context": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz",
+ "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-direction": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz",
+ "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-dismissable-layer": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.3.tgz",
+ "integrity": "sha512-onrWn/72lQoEucDmJnr8uczSNTujT0vJnA/X5+3AkChVPowr8n1yvIKIabhWyMQeMvvmdpsvcyDqx3X1LEXCPg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-escape-keydown": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-focus-guards": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz",
+ "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-focus-scope": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.1.tgz",
+ "integrity": "sha512-01omzJAYRxXdG2/he/+xy+c8a8gCydoQ1yOxnWNcRhrrBW5W+RQJ22EK1SaO8tb3WoUsuEw7mJjBozPzihDFjA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-callback-ref": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-id": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz",
+ "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-label": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.1.tgz",
+ "integrity": "sha512-UUw5E4e/2+4kFMH7+YxORXGWggtY6sM8WIwh5RZchhLuUg2H1hc98Py+pr8HMz6rdaYrK2t296ZEjYLOCO5uUw==",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-popper": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.1.tgz",
+ "integrity": "sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/react-dom": "^2.0.0",
+ "@radix-ui/react-arrow": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-use-rect": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0",
+ "@radix-ui/rect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-portal": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.3.tgz",
+ "integrity": "sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-presence": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz",
+ "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-primitive": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz",
+ "integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==",
+ "dependencies": {
+ "@radix-ui/react-slot": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-radio-group": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.2.2.tgz",
+ "integrity": "sha512-E0MLLGfOP0l8P/NxgVzfXJ8w3Ch8cdO6UDzJfDChu4EJDy+/WdO5LqpdY8PYnCErkmZH3gZhDL1K7kQ41fAHuQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-roving-focus": "1.1.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-roving-focus": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.1.tgz",
+ "integrity": "sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-collection": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
}
},
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
- "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
- "license": "MIT",
- "dependencies": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.24"
+ "node_modules/@radix-ui/react-select": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.4.tgz",
+ "integrity": "sha512-pOkb2u8KgO47j/h7AylCj7dJsm69BXcjkrvTqMptFqsE2i0p8lHkfgneXKjAgPzBMivnoMyt8o4KiV4wYzDdyQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/number": "1.1.0",
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-collection": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-dismissable-layer": "1.1.3",
+ "@radix-ui/react-focus-guards": "1.1.1",
+ "@radix-ui/react-focus-scope": "1.1.1",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-popper": "1.2.1",
+ "@radix-ui/react-portal": "1.1.3",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-slot": "1.1.1",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-visually-hidden": "1.1.1",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "^2.6.1"
},
- "engines": {
- "node": ">=6.0.0"
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
}
},
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
- "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
+ "node_modules/@radix-ui/react-slot": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.1.tgz",
+ "integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
- "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==",
+ "node_modules/@radix-ui/react-use-callback-ref": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz",
+ "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==",
"license": "MIT",
- "engines": {
- "node": ">=6.0.0"
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
- "license": "MIT"
- },
- "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==",
+ "node_modules/@radix-ui/react-use-controllable-state": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz",
+ "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==",
"license": "MIT",
"dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
+ "@radix-ui/react-use-callback-ref": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
- "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==",
+ "node_modules/@radix-ui/react-use-escape-keydown": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz",
+ "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==",
"license": "MIT",
"dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
+ "@radix-ui/react-use-callback-ref": "1.1.0"
},
- "engines": {
- "node": ">= 8"
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
- "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==",
+ "node_modules/@radix-ui/react-use-layout-effect": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz",
+ "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==",
"license": "MIT",
- "engines": {
- "node": ">= 8"
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
- "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==",
+ "node_modules/@radix-ui/react-use-previous": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz",
+ "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==",
"license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
- "engines": {
- "node": ">= 8"
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
- "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==",
+ "node_modules/@radix-ui/react-use-rect": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz",
+ "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==",
"license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=14"
+ "dependencies": {
+ "@radix-ui/rect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
- "node_modules/@radix-ui/react-compose-refs": {
+ "node_modules/@radix-ui/react-use-size": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz",
- "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz",
+ "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==",
"license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
"peerDependencies": {
"@types/react": "*",
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
@@ -1081,24 +3780,35 @@
}
}
},
- "node_modules/@radix-ui/react-slot": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz",
- "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==",
+ "node_modules/@radix-ui/react-visually-hidden": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.1.tgz",
+ "integrity": "sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "1.1.0"
+ "@radix-ui/react-primitive": "2.0.1"
},
"peerDependencies": {
"@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
}
}
},
+ "node_modules/@radix-ui/rect": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz",
+ "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==",
+ "license": "MIT"
+ },
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.28.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz",
@@ -1410,25 +4120,50 @@
"@babel/types": "^7.20.7"
}
},
+ "node_modules/@types/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/eslint": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
+ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
+ "license": "MIT",
+ "peer": true,
+ "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",
+ "peer": true,
+ "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==",
- "dev": true,
"license": "MIT"
},
"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==",
- "dev": true,
"license": "MIT"
},
"node_modules/@types/node": {
"version": "22.10.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz",
"integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~6.20.0"
@@ -1441,6 +4176,13 @@
"devOptional": true,
"license": "MIT"
},
+ "node_modules/@types/raf": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz",
+ "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==",
+ "license": "MIT",
+ "optional": true
+ },
"node_modules/@types/react": {
"version": "18.3.14",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.14.tgz",
@@ -1452,41 +4194,240 @@
"csstype": "^3.0.2"
}
},
- "node_modules/@types/react-dom": {
- "version": "18.3.3",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.3.tgz",
- "integrity": "sha512-uTYkxTLkYp41nq/ULXyXMtkNT1vu5fXJoqad6uTNCOGat5t9cLgF4vMNLBXsTOXpdOI44XzKPY1M5RRm0bQHuw==",
- "dev": true,
+ "node_modules/@types/react-dom": {
+ "version": "18.3.3",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.3.tgz",
+ "integrity": "sha512-uTYkxTLkYp41nq/ULXyXMtkNT1vu5fXJoqad6uTNCOGat5t9cLgF4vMNLBXsTOXpdOI44XzKPY1M5RRm0bQHuw==",
+ "devOptional": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "^18.0.0"
+ }
+ },
+ "node_modules/@types/sinonjs__fake-timers": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz",
+ "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/sizzle": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.9.tgz",
+ "integrity": "sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/yauzl": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
+ "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@vitejs/plugin-react": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz",
+ "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.26.0",
+ "@babel/plugin-transform-react-jsx-self": "^7.25.9",
+ "@babel/plugin-transform-react-jsx-source": "^7.25.9",
+ "@types/babel__core": "^7.20.5",
+ "react-refresh": "^0.14.2"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0"
+ }
+ },
+ "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",
+ "peer": true,
+ "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",
+ "peer": true
+ },
+ "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",
+ "peer": true
+ },
+ "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",
+ "peer": true
+ },
+ "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",
+ "peer": true,
+ "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",
+ "peer": true
+ },
+ "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",
+ "peer": true,
+ "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",
+ "peer": true,
+ "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",
+ "peer": true,
+ "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",
+ "peer": true
+ },
+ "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",
+ "peer": true,
+ "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",
+ "peer": true,
+ "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",
+ "peer": true,
+ "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",
- "peerDependencies": {
- "@types/react": "^18.0.0"
+ "peer": true,
+ "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/@vitejs/plugin-react": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz",
- "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==",
- "dev": true,
+ "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",
+ "peer": true,
"dependencies": {
- "@babel/core": "^7.26.0",
- "@babel/plugin-transform-react-jsx-self": "^7.25.9",
- "@babel/plugin-transform-react-jsx-source": "^7.25.9",
- "@types/babel__core": "^7.20.5",
- "react-refresh": "^0.14.2"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "peerDependencies": {
- "vite": "^4.2.0 || ^5.0.0 || ^6.0.0"
+ "@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",
+ "peer": true
+ },
+ "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",
+ "peer": true
+ },
"node_modules/acorn": {
"version": "8.14.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
- "dev": true,
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
@@ -1505,11 +4446,24 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.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==",
+ "dev": true,
+ "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==",
- "dev": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
@@ -1522,6 +4476,81 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
+ "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/ajv-formats/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-formats/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/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",
+ "peer": true,
+ "peerDependencies": {
+ "ajv": "^6.9.1"
+ }
+ },
+ "node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/ansi-regex": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
@@ -1568,6 +4597,27 @@
"node": ">= 8"
}
},
+ "node_modules/arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
+ "dev": true,
+ "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/arg": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
@@ -1581,6 +4631,18 @@
"dev": true,
"license": "Python-2.0"
},
+ "node_modules/aria-hidden": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz",
+ "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/array-buffer-byte-length": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
@@ -1718,6 +4780,72 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "license": "(MIT OR Apache-2.0)",
+ "bin": {
+ "atob": "bin/atob.js"
+ },
+ "engines": {
+ "node": ">= 4.5.0"
+ }
+ },
"node_modules/autoprefixer": {
"version": "10.4.20",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
@@ -1772,12 +4900,129 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/aws4": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz",
+ "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/babel-loader": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz",
+ "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==",
+ "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-polyfill-corejs2": {
+ "version": "0.4.12",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz",
+ "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-define-polyfill-provider": "^0.6.3",
+ "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.10.6",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz",
+ "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.6.2",
+ "core-js-compat": "^3.38.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-regenerator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz",
+ "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.6.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+ }
+ },
"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/base64-arraybuffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+ "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true,
+ "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/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
"node_modules/binary-extensions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
@@ -1790,6 +5035,20 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/blob-util": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
+ "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -1813,37 +5072,100 @@
"node": ">=8"
}
},
- "node_modules/browserslist": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz",
- "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==",
+ "node_modules/browserslist": {
+ "version": "4.24.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz",
+ "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==",
+ "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.30001669",
+ "electron-to-chromium": "^1.5.41",
+ "node-releases": "^2.0.18",
+ "update-browserslist-db": "^1.1.1"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/btoa": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz",
+ "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==",
+ "license": "(MIT OR Apache-2.0)",
+ "bin": {
+ "btoa": "bin/btoa.js"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"dev": true,
"funding": [
{
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
},
{
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
},
{
- "type": "github",
- "url": "https://github.com/sponsors/ai"
+ "type": "consulting",
+ "url": "https://feross.org/support"
}
],
"license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001669",
- "electron-to-chromium": "^1.5.41",
- "node-releases": "^2.0.18",
- "update-browserslist-db": "^1.1.1"
- },
- "bin": {
- "browserslist": "cli.js"
- },
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ "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",
+ "peer": true
+ },
+ "node_modules/cachedir": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz",
+ "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
}
},
"node_modules/call-bind": {
@@ -1902,7 +5224,6 @@
"version": "1.0.30001687",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz",
"integrity": "sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==",
- "dev": true,
"funding": [
{
"type": "opencollective",
@@ -1919,6 +5240,40 @@
],
"license": "CC-BY-4.0"
},
+ "node_modules/canvg": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz",
+ "integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "@types/raf": "^3.4.0",
+ "core-js": "^3.8.3",
+ "raf": "^3.4.1",
+ "regenerator-runtime": "^0.13.7",
+ "rgbcolor": "^1.0.1",
+ "stackblur-canvas": "^2.0.0",
+ "svg-pathdata": "^6.0.3"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/canvg/node_modules/regenerator-runtime": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -1936,52 +5291,300 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/check-more-types": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
+ "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/chokidar": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"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"
+ "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"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/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/chrome-trace-event": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
+ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz",
+ "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/class-variance-authority": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
+ "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "clsx": "^2.1.1"
+ },
+ "funding": {
+ "url": "https://polar.sh/cva"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "restore-cursor": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-table3": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz",
+ "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": "10.* || >= 12.*"
+ },
+ "optionalDependencies": {
+ "@colors/colors": "1.5.0"
+ }
+ },
+ "node_modules/cli-table3/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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-table3/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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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==",
+ "dev": true,
+ "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/cli-table3/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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-truncate": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+ "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "slice-ansi": "^3.0.0",
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-truncate/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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-truncate/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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cli-truncate/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==",
+ "dev": true,
+ "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/cli-truncate/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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/cliui/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==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/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=="
+ },
+ "node_modules/cliui/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==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
},
"engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
+ "node": ">=8"
}
},
- "node_modules/chokidar/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",
+ "node_modules/cliui/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==",
"dependencies": {
- "is-glob": "^4.0.1"
+ "ansi-regex": "^5.0.1"
},
"engines": {
- "node": ">= 6"
+ "node": ">=8"
}
},
- "node_modules/class-variance-authority": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
- "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
- "license": "Apache-2.0",
+ "node_modules/cliui/node_modules/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==",
"dependencies": {
- "clsx": "^2.1.1"
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
},
"funding": {
- "url": "https://polar.sh/cva"
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/clsx": {
@@ -2011,6 +5614,26 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
@@ -2020,6 +5643,22 @@
"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/common-tags": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
+ "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -2031,6 +5670,47 @@
"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/cookie": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz",
+ "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/core-js": {
+ "version": "3.39.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz",
+ "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "node_modules/core-js-compat": {
+ "version": "3.39.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz",
+ "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "browserslist": "^4.24.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
"dev": true,
"license": "MIT"
},
@@ -2048,6 +5728,16 @@
"node": ">= 8"
}
},
+ "node_modules/css-line-break": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz",
+ "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "utrie": "^1.0.2"
+ }
+ },
"node_modules/cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@@ -2067,6 +5757,117 @@
"devOptional": true,
"license": "MIT"
},
+ "node_modules/cypress": {
+ "version": "13.17.0",
+ "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.17.0.tgz",
+ "integrity": "sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "@cypress/request": "^3.0.6",
+ "@cypress/xvfb": "^1.2.4",
+ "@types/sinonjs__fake-timers": "8.1.1",
+ "@types/sizzle": "^2.3.2",
+ "arch": "^2.2.0",
+ "blob-util": "^2.0.2",
+ "bluebird": "^3.7.2",
+ "buffer": "^5.7.1",
+ "cachedir": "^2.3.0",
+ "chalk": "^4.1.0",
+ "check-more-types": "^2.24.0",
+ "ci-info": "^4.0.0",
+ "cli-cursor": "^3.1.0",
+ "cli-table3": "~0.6.1",
+ "commander": "^6.2.1",
+ "common-tags": "^1.8.0",
+ "dayjs": "^1.10.4",
+ "debug": "^4.3.4",
+ "enquirer": "^2.3.6",
+ "eventemitter2": "6.4.7",
+ "execa": "4.1.0",
+ "executable": "^4.1.1",
+ "extract-zip": "2.0.1",
+ "figures": "^3.2.0",
+ "fs-extra": "^9.1.0",
+ "getos": "^3.2.1",
+ "is-installed-globally": "~0.4.0",
+ "lazy-ass": "^1.6.0",
+ "listr2": "^3.8.3",
+ "lodash": "^4.17.21",
+ "log-symbols": "^4.0.0",
+ "minimist": "^1.2.8",
+ "ospath": "^1.2.2",
+ "pretty-bytes": "^5.6.0",
+ "process": "^0.11.10",
+ "proxy-from-env": "1.0.0",
+ "request-progress": "^3.0.0",
+ "semver": "^7.5.3",
+ "supports-color": "^8.1.1",
+ "tmp": "~0.2.3",
+ "tree-kill": "1.2.2",
+ "untildify": "^4.0.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "cypress": "bin/cypress"
+ },
+ "engines": {
+ "node": "^16.0.0 || ^18.0.0 || >=20.0.0"
+ }
+ },
+ "node_modules/cypress/node_modules/commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/cypress/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cypress/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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
"node_modules/data-view-buffer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
@@ -2121,11 +5922,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/dayjs": {
+ "version": "1.11.13",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+ "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
+ "dev": true,
+ "license": "MIT"
+ },
"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==",
- "dev": true,
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
@@ -2182,6 +5989,22 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "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/didyoumean": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
@@ -2207,6 +6030,13 @@
"node": ">=0.10.0"
}
},
+ "node_modules/dompurify": {
+ "version": "2.5.8",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.8.tgz",
+ "integrity": "sha512-o1vSNgrmYMQObbSSvF/1brBYEQPHhV1+gsmrusO7/GXtp1T9rCS8cXFqVxK/9crT1jA6Ccv+5MTSjBNqr7Sovw==",
+ "license": "(MPL-2.0 OR Apache-2.0)",
+ "optional": true
+ },
"node_modules/dunder-proto": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz",
@@ -2228,11 +6058,21 @@
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
"license": "MIT"
},
+ "node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
"node_modules/electron-to-chromium": {
"version": "1.5.72",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.72.tgz",
"integrity": "sha512-ZpSAUOZ2Izby7qnZluSrAlGgGQzucmFbN0n64dYzocYxnxV5ufurpj3VgEe4cUp7ir9LmeLxNYo8bVnlM8bQHw==",
- "dev": true,
"license": "ISC"
},
"node_modules/emoji-regex": {
@@ -2241,6 +6081,67 @@
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
"license": "MIT"
},
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.17.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+ "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/enquirer": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
+ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "^4.1.1",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/enquirer/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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/enquirer/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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/es-abstract": {
"version": "1.23.5",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz",
@@ -2349,6 +6250,13 @@
"node": ">= 0.4"
}
},
+ "node_modules/es-module-lexer": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
+ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/es-object-atoms": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
@@ -2406,9 +6314,9 @@
}
},
"node_modules/esbuild": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz",
- "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz",
+ "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -2416,40 +6324,38 @@
"esbuild": "bin/esbuild"
},
"engines": {
- "node": ">=18"
+ "node": ">=12"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.24.0",
- "@esbuild/android-arm": "0.24.0",
- "@esbuild/android-arm64": "0.24.0",
- "@esbuild/android-x64": "0.24.0",
- "@esbuild/darwin-arm64": "0.24.0",
- "@esbuild/darwin-x64": "0.24.0",
- "@esbuild/freebsd-arm64": "0.24.0",
- "@esbuild/freebsd-x64": "0.24.0",
- "@esbuild/linux-arm": "0.24.0",
- "@esbuild/linux-arm64": "0.24.0",
- "@esbuild/linux-ia32": "0.24.0",
- "@esbuild/linux-loong64": "0.24.0",
- "@esbuild/linux-mips64el": "0.24.0",
- "@esbuild/linux-ppc64": "0.24.0",
- "@esbuild/linux-riscv64": "0.24.0",
- "@esbuild/linux-s390x": "0.24.0",
- "@esbuild/linux-x64": "0.24.0",
- "@esbuild/netbsd-x64": "0.24.0",
- "@esbuild/openbsd-arm64": "0.24.0",
- "@esbuild/openbsd-x64": "0.24.0",
- "@esbuild/sunos-x64": "0.24.0",
- "@esbuild/win32-arm64": "0.24.0",
- "@esbuild/win32-ia32": "0.24.0",
- "@esbuild/win32-x64": "0.24.0"
+ "@esbuild/aix-ppc64": "0.19.12",
+ "@esbuild/android-arm": "0.19.12",
+ "@esbuild/android-arm64": "0.19.12",
+ "@esbuild/android-x64": "0.19.12",
+ "@esbuild/darwin-arm64": "0.19.12",
+ "@esbuild/darwin-x64": "0.19.12",
+ "@esbuild/freebsd-arm64": "0.19.12",
+ "@esbuild/freebsd-x64": "0.19.12",
+ "@esbuild/linux-arm": "0.19.12",
+ "@esbuild/linux-arm64": "0.19.12",
+ "@esbuild/linux-ia32": "0.19.12",
+ "@esbuild/linux-loong64": "0.19.12",
+ "@esbuild/linux-mips64el": "0.19.12",
+ "@esbuild/linux-ppc64": "0.19.12",
+ "@esbuild/linux-riscv64": "0.19.12",
+ "@esbuild/linux-s390x": "0.19.12",
+ "@esbuild/linux-x64": "0.19.12",
+ "@esbuild/netbsd-x64": "0.19.12",
+ "@esbuild/openbsd-x64": "0.19.12",
+ "@esbuild/sunos-x64": "0.19.12",
+ "@esbuild/win32-arm64": "0.19.12",
+ "@esbuild/win32-ia32": "0.19.12",
+ "@esbuild/win32-x64": "0.19.12"
}
},
"node_modules/escalade": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -2637,52 +6543,147 @@
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
"integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
"dev": true,
- "license": "BSD-3-Clause",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "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/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/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/eventemitter2": {
+ "version": "6.4.7",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz",
+ "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==",
+ "dev": true,
+ "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",
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/execa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "estraverse": "^5.1.0"
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
},
"engines": {
- "node": ">=0.10"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "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==",
+ "node_modules/execa/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==",
"dev": true,
- "license": "BSD-2-Clause",
+ "license": "ISC"
+ },
+ "node_modules/executable": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
+ "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "estraverse": "^5.2.0"
+ "pify": "^2.2.0"
},
"engines": {
- "node": ">=4.0"
+ "node": ">=4"
}
},
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
+ "license": "MIT"
},
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "node_modules/extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
"dev": true,
"license": "BSD-2-Clause",
+ "dependencies": {
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "extract-zip": "cli.js"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 10.17.0"
+ },
+ "optionalDependencies": {
+ "@types/yauzl": "^2.9.1"
}
},
+ "node_modules/extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "license": "MIT"
+ },
"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==",
- "dev": true,
"license": "MIT"
},
"node_modules/fast-glob": {
@@ -2717,7 +6718,6 @@
"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==",
- "dev": true,
"license": "MIT"
},
"node_modules/fast-levenshtein": {
@@ -2727,6 +6727,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/fast-uri": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz",
+ "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==",
+ "license": "BSD-3-Clause"
+ },
"node_modules/fastq": {
"version": "1.17.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
@@ -2736,6 +6742,59 @@
"reusify": "^1.0.4"
}
},
+ "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==",
+ "dependencies": {
+ "websocket-driver": ">=0.5.1"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/fflate": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
+ "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==",
+ "license": "MIT"
+ },
+ "node_modules/figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/figures/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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.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",
@@ -2761,6 +6820,22 @@
"node": ">=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-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -2778,6 +6853,41 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/firebase": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/firebase/-/firebase-11.1.0.tgz",
+ "integrity": "sha512-3OoNW3vBXmBLYJvcwbPCwfluptbDVp2zZYjrfHPVFAXfPgmyy/LWjidt+Sw2WNvRelsG0v++WN2Wor6J3OwDRg==",
+ "dependencies": {
+ "@firebase/analytics": "0.10.10",
+ "@firebase/analytics-compat": "0.2.16",
+ "@firebase/app": "0.10.17",
+ "@firebase/app-check": "0.8.10",
+ "@firebase/app-check-compat": "0.3.17",
+ "@firebase/app-compat": "0.2.47",
+ "@firebase/app-types": "0.9.3",
+ "@firebase/auth": "1.8.1",
+ "@firebase/auth-compat": "0.5.16",
+ "@firebase/data-connect": "0.1.3",
+ "@firebase/database": "1.0.10",
+ "@firebase/database-compat": "2.0.1",
+ "@firebase/firestore": "4.7.5",
+ "@firebase/firestore-compat": "0.3.40",
+ "@firebase/functions": "0.12.0",
+ "@firebase/functions-compat": "0.3.17",
+ "@firebase/installations": "0.6.11",
+ "@firebase/installations-compat": "0.2.11",
+ "@firebase/messaging": "0.12.15",
+ "@firebase/messaging-compat": "0.2.15",
+ "@firebase/performance": "0.6.11",
+ "@firebase/performance-compat": "0.2.11",
+ "@firebase/remote-config": "0.4.11",
+ "@firebase/remote-config-compat": "0.2.11",
+ "@firebase/storage": "0.13.4",
+ "@firebase/storage-compat": "0.3.14",
+ "@firebase/util": "1.10.2",
+ "@firebase/vertexai": "1.0.2"
+ }
+ },
"node_modules/flat-cache": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
@@ -2825,6 +6935,31 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
+ "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/fraction.js": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
@@ -2839,6 +6974,22 @@
"url": "https://github.com/sponsors/rawify"
}
},
+ "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==",
+ "dev": true,
+ "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/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
@@ -2895,12 +7046,19 @@
"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==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
"node_modules/get-intrinsic": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.5.tgz",
@@ -2924,6 +7082,31 @@
"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-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/get-symbol-description": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
@@ -2942,6 +7125,26 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/getos": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
+ "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "async": "^3.2.0"
+ }
+ },
+ "node_modules/getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ }
+ },
"node_modules/glob": {
"version": "10.4.5",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
@@ -2974,6 +7177,13 @@
"node": ">=10.13.0"
}
},
+ "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",
+ "peer": true
+ },
"node_modules/glob/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@@ -2998,6 +7208,22 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ini": "2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/globals": {
"version": "15.13.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-15.13.0.tgz",
@@ -3041,6 +7267,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "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/has-bigints": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
@@ -3055,7 +7287,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -3131,6 +7362,76 @@
"node": ">= 0.4"
}
},
+ "node_modules/html2canvas": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz",
+ "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "css-line-break": "^2.1.0",
+ "text-segmentation": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "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=="
+ },
+ "node_modules/http-signature": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz",
+ "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^2.0.2",
+ "sshpk": "^1.18.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8.12.0"
+ }
+ },
+ "node_modules/idb": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz",
+ "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ=="
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true,
+ "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": "BSD-3-Clause"
+ },
"node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@@ -3168,6 +7469,26 @@
"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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ini": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
+ "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/internal-slot": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
@@ -3275,9 +7596,9 @@
}
},
"node_modules/is-core-module": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
- "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
+ "version": "2.16.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.0.tgz",
+ "integrity": "sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==",
"license": "MIT",
"dependencies": {
"hasown": "^2.0.2"
@@ -3383,6 +7704,23 @@
"node": ">=0.10.0"
}
},
+ "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==",
+ "dev": true,
+ "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-map": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
@@ -3435,6 +7773,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-regex": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.0.tgz",
@@ -3477,10 +7825,23 @@
"call-bind": "^1.0.7"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-string": {
@@ -3534,6 +7895,26 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-weakmap": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
@@ -3590,6 +7971,13 @@
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"license": "ISC"
},
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/iterator.prototype": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz",
@@ -3622,6 +8010,37 @@
"@pkgjs/parseargs": "^0.11.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",
+ "peer": true,
+ "dependencies": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/jest-worker/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",
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
"node_modules/jiti": {
"version": "1.21.6",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
@@ -3650,11 +8069,17 @@
"js-yaml": "bin/js-yaml.js"
}
},
+ "node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/jsesc": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
"integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
- "dev": true,
"license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
@@ -3670,11 +8095,24 @@
"dev": true,
"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",
+ "peer": true
+ },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "dev": true,
+ "license": "(AFL-2.1 OR BSD-3-Clause)"
+ },
"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==",
- "dev": true,
"license": "MIT"
},
"node_modules/json-stable-stringify-without-jsonify": {
@@ -3684,11 +8122,17 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
"license": "MIT",
"bin": {
"json5": "lib/cli.js"
@@ -3697,6 +8141,53 @@
"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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jspdf": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.2.tgz",
+ "integrity": "sha512-myeX9c+p7znDWPk0eTrujCzNjT+CXdXyk7YmJq5nD5V7uLLKmSXnlQ/Jn/kuo3X09Op70Apm0rQSnFWyGK8uEQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.23.2",
+ "atob": "^2.1.2",
+ "btoa": "^1.2.1",
+ "fflate": "^0.8.1"
+ },
+ "optionalDependencies": {
+ "canvg": "^3.0.6",
+ "core-js": "^3.6.0",
+ "dompurify": "^2.5.4",
+ "html2canvas": "^1.0.0-rc.5"
+ }
+ },
+ "node_modules/jsprim": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz",
+ "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ }
+ },
"node_modules/jsx-ast-utils": {
"version": "3.3.5",
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
@@ -3723,6 +8214,16 @@
"json-buffer": "3.0.1"
}
},
+ "node_modules/lazy-ass": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
+ "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "> 0.8"
+ }
+ },
"node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -3755,6 +8256,107 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"license": "MIT"
},
+ "node_modules/listr2": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
+ "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cli-truncate": "^2.1.0",
+ "colorette": "^2.0.16",
+ "log-update": "^4.0.0",
+ "p-map": "^4.0.0",
+ "rfdc": "^1.3.0",
+ "rxjs": "^7.5.1",
+ "through": "^2.3.8",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "enquirer": ">= 2.3.0 < 3"
+ },
+ "peerDependenciesMeta": {
+ "enquirer": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/listr2/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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/listr2/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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/listr2/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==",
+ "dev": true,
+ "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/listr2/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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/listr2/node_modules/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==",
+ "dev": true,
+ "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/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",
+ "peer": true,
+ "engines": {
+ "node": ">=6.11.5"
+ }
+ },
"node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -3771,6 +8373,24 @@
"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.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="
+ },
+ "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",
+ "peer": true
+ },
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -3778,6 +8398,132 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
+ "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-escapes": "^4.3.0",
+ "cli-cursor": "^3.1.0",
+ "slice-ansi": "^4.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-update/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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/log-update/node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/log-update/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==",
+ "dev": true,
+ "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/log-update/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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-update/node_modules/wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/long": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
+ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
+ },
"node_modules/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -3794,7 +8540,6 @@
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
"license": "ISC",
"dependencies": {
"yallist": "^3.0.2"
@@ -3809,6 +8554,12 @@
"react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc"
}
},
+ "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",
@@ -3831,6 +8582,37 @@
"node": ">=8.6"
}
},
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -3844,6 +8626,16 @@
"node": "*"
}
},
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/minipass": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
@@ -3857,7 +8649,6 @@
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
"license": "MIT"
},
"node_modules/mz": {
@@ -3896,11 +8687,17 @@
"dev": true,
"license": "MIT"
},
+ "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",
+ "peer": true
+ },
"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==",
- "dev": true,
"license": "MIT"
},
"node_modules/normalize-path": {
@@ -3922,6 +8719,19 @@
"node": ">=0.10.0"
}
},
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -4034,6 +8844,32 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/optionator": {
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
@@ -4052,6 +8888,13 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/ospath": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz",
+ "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -4084,6 +8927,22 @@
"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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/package-json-from-dist": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
@@ -4150,6 +9009,20 @@
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"license": "ISC"
},
+ "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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
+ "devOptional": true,
+ "license": "MIT"
+ },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -4186,6 +9059,103 @@
"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.1.1",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
+ "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/possible-typed-array-names": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
@@ -4366,6 +9336,29 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/pretty-bytes": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
+ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
"node_modules/prop-types": {
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
@@ -4378,16 +9371,72 @@
"react-is": "^16.13.1"
}
},
+ "node_modules/protobufjs": {
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz",
+ "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@protobufjs/aspromise": "^1.1.2",
+ "@protobufjs/base64": "^1.1.2",
+ "@protobufjs/codegen": "^2.0.4",
+ "@protobufjs/eventemitter": "^1.1.0",
+ "@protobufjs/fetch": "^1.1.0",
+ "@protobufjs/float": "^1.0.2",
+ "@protobufjs/inquire": "^1.1.0",
+ "@protobufjs/path": "^1.1.2",
+ "@protobufjs/pool": "^1.1.0",
+ "@protobufjs/utf8": "^1.1.0",
+ "@types/node": ">=13.7.0",
+ "long": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
+ "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pump": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
+ "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
"node_modules/punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
+ "node_modules/qs": {
+ "version": "6.13.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz",
+ "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -4408,6 +9457,26 @@
],
"license": "MIT"
},
+ "node_modules/raf": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
+ "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "performance-now": "^2.1.0"
+ }
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
"node_modules/react": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
@@ -4447,7 +9516,116 @@
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-remove-scroll": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.2.tgz",
+ "integrity": "sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw==",
+ "license": "MIT",
+ "dependencies": {
+ "react-remove-scroll-bar": "^2.3.7",
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.1.0",
+ "use-callback-ref": "^1.3.3",
+ "use-sidecar": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-remove-scroll-bar": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz",
+ "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==",
+ "license": "MIT",
+ "dependencies": {
+ "react-style-singleton": "^2.2.2",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-router": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.0.2.tgz",
+ "integrity": "sha512-m5AcPfTRUcjwmhBzOJGEl6Y7+Crqyju0+TgTQxoS4SO+BkWbhOrcfZNq6wSWdl2BBbJbsAoBUb8ZacOFT+/JlA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/cookie": "^0.6.0",
+ "cookie": "^1.0.1",
+ "set-cookie-parser": "^2.6.0",
+ "turbo-stream": "2.4.0"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.0.2.tgz",
+ "integrity": "sha512-VJOQ+CDWFDGaWdrG12Nl+d7yHtLaurNgAQZVgaIy7/Xd+DojgmYLosFfZdGz1wpxmjJIAkAMVTKWcvkx1oggAw==",
+ "license": "MIT",
+ "dependencies": {
+ "react-router": "7.0.2"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/react-style-singleton": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
+ "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==",
+ "license": "MIT",
+ "dependencies": {
+ "get-nonce": "^1.0.0",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
"node_modules/read-cache": {
@@ -4494,6 +9672,42 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "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",
+ "peer": true
+ },
+ "node_modules/regenerate-unicode-properties": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz",
+ "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==",
+ "license": "MIT",
+ "peer": true,
+ "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",
+ "peer": true,
+ "dependencies": {
+ "@babel/runtime": "^7.8.4"
+ }
+ },
"node_modules/regexp.prototype.flags": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz",
@@ -4513,6 +9727,71 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/regexpu-core": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz",
+ "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "regenerate": "^1.4.2",
+ "regenerate-unicode-properties": "^10.2.0",
+ "regjsgen": "^0.8.0",
+ "regjsparser": "^0.12.0",
+ "unicode-match-property-ecmascript": "^2.0.0",
+ "unicode-match-property-value-ecmascript": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regjsgen": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
+ "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/regjsparser": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz",
+ "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==",
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "jsesc": "~3.0.2"
+ },
+ "bin": {
+ "regjsparser": "bin/parser"
+ }
+ },
+ "node_modules/request-progress": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
+ "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "throttleit": "^1.0.0"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "engines": {
+ "node": ">=0.10.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/resolve": {
"version": "2.0.0-next.5",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
@@ -4541,6 +9820,27 @@
"node": ">=4"
}
},
+ "node_modules/restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/restore-cursor/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==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -4551,6 +9851,23 @@
"node": ">=0.10.0"
}
},
+ "node_modules/rfdc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/rgbcolor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz",
+ "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==",
+ "license": "MIT OR SEE LICENSE IN FEEL-FREE.md",
+ "optional": true,
+ "engines": {
+ "node": ">= 0.8.15"
+ }
+ },
"node_modules/rollup": {
"version": "4.28.1",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.1.tgz",
@@ -4613,6 +9930,16 @@
"queue-microtask": "^1.2.2"
}
},
+ "node_modules/rxjs": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
"node_modules/safe-array-concat": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
@@ -4632,6 +9959,25 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "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"
+ }
+ ]
+ },
"node_modules/safe-regex-test": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
@@ -4650,6 +9996,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/scheduler": {
"version": "0.23.2",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
@@ -4659,16 +10012,84 @@
"loose-envify": "^1.1.0"
}
},
+ "node_modules/schema-utils": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz",
+ "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==",
+ "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": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/schema-utils/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "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/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
+ "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",
+ "peer": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/set-cookie-parser": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
+ "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==",
+ "license": "MIT"
+ },
"node_modules/set-function-length": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
@@ -4755,6 +10176,31 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/slice-ansi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
+ "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/source-map-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
@@ -4764,6 +10210,53 @@
"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",
+ "peer": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/sshpk": {
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
+ "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ },
+ "bin": {
+ "sshpk-conv": "bin/sshpk-conv",
+ "sshpk-sign": "bin/sshpk-sign",
+ "sshpk-verify": "bin/sshpk-verify"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stackblur-canvas": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz",
+ "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=0.1.14"
+ }
+ },
"node_modules/string-width": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
@@ -4950,6 +10443,16 @@
"node": ">=8"
}
},
+ "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==",
+ "dev": true,
+ "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",
@@ -5010,6 +10513,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/svg-pathdata": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz",
+ "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/tailwind-merge": {
"version": "2.5.5",
"resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.5.tgz",
@@ -5083,6 +10596,87 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/terser": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz",
+ "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==",
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "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.11",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz",
+ "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jest-worker": "^27.4.5",
+ "schema-utils": "^4.3.0",
+ "serialize-javascript": "^6.0.2",
+ "terser": "^5.31.1"
+ },
+ "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/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",
+ "peer": true
+ },
+ "node_modules/text-segmentation": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz",
+ "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "utrie": "^1.0.2"
+ }
+ },
"node_modules/thenify": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
@@ -5101,7 +10695,54 @@
"thenify": ">= 3.1.0 < 4"
},
"engines": {
- "node": ">=0.8"
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/throttleit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz",
+ "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tldts": {
+ "version": "6.1.68",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.68.tgz",
+ "integrity": "sha512-JKF17jROiYkjJPT73hUTEiTp2OBCf+kAlB+1novk8i6Q6dWjHsgEjw9VLiipV4KTJavazXhY1QUXyQFSem2T7w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tldts-core": "^6.1.68"
+ },
+ "bin": {
+ "tldts": "bin/cli.js"
+ }
+ },
+ "node_modules/tldts-core": {
+ "version": "6.1.68",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.68.tgz",
+ "integrity": "sha512-85TdlS/DLW/gVdf2oyyzqp3ocS30WxjaL4la85EArl9cHUR/nizifKAJPziWewSZjDZS71U517/i6ciUeqtB5Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tmp": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
+ "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.14"
}
},
"node_modules/to-regex-range": {
@@ -5116,12 +10757,66 @@
"node": ">=8.0"
}
},
+ "node_modules/tough-cookie": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz",
+ "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tldts": "^6.1.32"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "tree-kill": "cli.js"
+ }
+ },
"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.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+ },
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/turbo-stream": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz",
+ "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==",
+ "license": "ISC"
+ },
+ "node_modules/tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
+ "dev": true,
+ "license": "Unlicense"
+ },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -5135,6 +10830,19 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/typed-array-buffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
@@ -5233,14 +10941,76 @@
"version": "6.20.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
"integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
- "dev": true,
"license": "MIT"
},
+ "node_modules/unicode-canonical-property-names-ecmascript": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz",
+ "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==",
+ "license": "MIT",
+ "peer": true,
+ "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",
+ "peer": true,
+ "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.2.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz",
+ "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==",
+ "license": "MIT",
+ "peer": true,
+ "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",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/universalify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/untildify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
+ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=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==",
- "dev": true,
"funding": [
{
"type": "opencollective",
@@ -5271,34 +11041,111 @@
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"punycode": "^2.1.0"
}
},
+ "node_modules/use-callback-ref": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
+ "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-sidecar": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz",
+ "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "detect-node-es": "^1.1.0",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
"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/utrie": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz",
+ "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "base64-arraybuffer": "^1.0.2"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
"node_modules/vite": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.3.tgz",
- "integrity": "sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.0.tgz",
+ "integrity": "sha512-ESJVM59mdyGpsiNAeHQOR/0fqNoOyWPYesFto8FFZugfmhdHx8Fzd8sF3Q/xkVhZsyOxHfdM7ieiVAorI9RjFw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "esbuild": "^0.24.0",
- "postcss": "^8.4.49",
- "rollup": "^4.23.0"
+ "esbuild": "^0.19.3",
+ "postcss": "^8.4.31",
+ "rollup": "^4.2.0"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ "node": "^18.0.0 || >=20.0.0"
},
"funding": {
"url": "https://github.com/vitejs/vite?sponsor=1"
@@ -5307,25 +11154,18 @@
"fsevents": "~2.3.3"
},
"peerDependencies": {
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "jiti": ">=1.21.0",
+ "@types/node": "^18.0.0 || >=20.0.0",
"less": "*",
"lightningcss": "^1.21.0",
"sass": "*",
- "sass-embedded": "*",
"stylus": "*",
"sugarss": "*",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
+ "terser": "^5.4.0"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
},
- "jiti": {
- "optional": true
- },
"less": {
"optional": true
},
@@ -5335,9 +11175,6 @@
"sass": {
"optional": true
},
- "sass-embedded": {
- "optional": true
- },
"stylus": {
"optional": true
},
@@ -5346,15 +11183,144 @@
},
"terser": {
"optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
+ }
+ }
+ },
+ "node_modules/watchpack": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
+ "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "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",
+ "peer": true,
+ "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-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",
+ "peer": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack/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",
+ "peer": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/webpack/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",
+ "peer": true,
+ "engines": {
+ "node": ">=4.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",
+ "peer": true,
+ "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/websocket-driver": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
+ "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
+ "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==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -5555,11 +11521,25 @@
"url": "https://github.com/chalk/ansi-styles?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==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true,
"license": "ISC"
},
"node_modules/yaml": {
@@ -5574,6 +11554,79 @@
"node": ">= 14"
}
},
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs/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==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/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=="
+ },
+ "node_modules/yargs/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==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/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==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
diff --git a/app/package.json b/app/package.json
index 3ac7a0d..4919951 100644
--- a/app/package.json
+++ b/app/package.json
@@ -7,25 +7,38 @@
"dev": "vite",
"build": "vite build",
"lint": "eslint .",
- "preview": "vite preview"
+ "preview": "vite preview",
+ "cy:open": "cypress open"
},
"dependencies": {
+ "@cypress/webpack-preprocessor": "^6.0.2",
+ "@firebasegen/default-connector": "file:dataconnect-generated/js/default-connector",
+ "@radix-ui/react-label": "^2.1.1",
+ "@radix-ui/react-radio-group": "^1.2.2",
+ "@radix-ui/react-select": "^2.1.4",
"@radix-ui/react-slot": "^1.1.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
+ "firebase": "^11.1.0",
+ "jspdf": "^2.5.2",
"lucide-react": "^0.468.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
+ "react-router-dom": "^7.0.2",
"tailwind-merge": "^2.5.5",
"tailwindcss-animate": "^1.0.7"
},
"devDependencies": {
+ "@babel/core": "^7.26.0",
+ "@babel/preset-react": "^7.26.3",
"@eslint/js": "^9.15.0",
"@types/node": "^22.10.1",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@vitejs/plugin-react": "^4.3.4",
"autoprefixer": "^10.4.20",
+ "babel-loader": "^9.2.1",
+ "cypress": "^13.17.0",
"eslint": "^9.15.0",
"eslint-plugin-react": "^7.37.2",
"eslint-plugin-react-hooks": "^5.0.0",
@@ -33,6 +46,6 @@
"globals": "^15.12.0",
"postcss": "^8.4.49",
"tailwindcss": "^3.4.16",
- "vite": "^6.0.1"
+ "vite": "^5.0.0"
}
}
diff --git a/app/src/App.css b/app/src/App.css
deleted file mode 100644
index b9d355d..0000000
--- a/app/src/App.css
+++ /dev/null
@@ -1,42 +0,0 @@
-#root {
- max-width: 1280px;
- margin: 0 auto;
- padding: 2rem;
- text-align: center;
-}
-
-.logo {
- height: 6em;
- padding: 1.5em;
- will-change: filter;
- transition: filter 300ms;
-}
-.logo:hover {
- filter: drop-shadow(0 0 2em #646cffaa);
-}
-.logo.react:hover {
- filter: drop-shadow(0 0 2em #61dafbaa);
-}
-
-@keyframes logo-spin {
- from {
- transform: rotate(0deg);
- }
- to {
- transform: rotate(360deg);
- }
-}
-
-@media (prefers-reduced-motion: no-preference) {
- a:nth-of-type(2) .logo {
- animation: logo-spin infinite 20s linear;
- }
-}
-
-.card {
- padding: 2em;
-}
-
-.read-the-docs {
- color: #888;
-}
diff --git a/app/src/App.jsx b/app/src/App.jsx
index 87d7cfc..b5893c7 100644
--- a/app/src/App.jsx
+++ b/app/src/App.jsx
@@ -1,38 +1,77 @@
-import { useState } from 'react'
-import reactLogo from './assets/react.svg'
-import viteLogo from '/vite.svg'
-import './App.css'
-import { Button } from './components/ui/button'
+import app from './firebase/firebase';
+import RegistrationPage from './components/pages/RegistrationPage';
+import Home from './components/pages/Homepage';
+import { BrowserRouter, Route, Routes } from 'react-router-dom';
+import LoginPage from './components/pages/LoginPage';
+import { MentorSearchForm } from './components/pages/mentor-search-form';
+import FileHomePage from './components/pages/FileHomePage';
+import FileAddDocument from './components/pages/FileAddDocument';
+import InserireVideo from './components/pages/InserireVideo';
+import Video from './components/pages/Video'; // Componente per la lista dei video
+import DettaglioVideo from './components/pages/DettaglioVideo';
+import HomePageUtente from './components/pages/HomePageUtente';
+import ModificaProfilo from './components/pages/ModificaProfilo';
+import { DettagliUtenteWrapper } from './components/pages/DettaglioUtente';
+import { AuthProvider } from './auth/auth-context';
+import PrivateRoutes from './PrivateRoutes';
+import DettaglioProfilo from './components/pages/DettaglioProfilo';
+import MatchingResultPage from './components/pages/MatchingResultPage';
+import SupportoFem from './components/pages/SupportoFemminile';
+import Supporto from "./components/pages/Supporto";
+import ChatSupporto from './components/pages/ChatSupporto';
+import ChatListPage from "./components/pages/ChatListPage";
+import MeetingScheduler from './components/pages/MeetingScheduler';
+import CalendarioIncontri from './components/pages/CalendarioIncontri';
+import MeetingSummary from './components/pages/meeting-summary';
+import MeetingSummaryMentee from './components/pages/meeting-summaryformentee';
+import Menteestatistics from './components/pages/mentee-statistics';
+import CalendarioIncontriMentee from './components/pages/CalendarioIncontriMentee';
+import NotificationsPage from "@/components/pages/Notifica";
+import MentorshipPage from './components/pages/MentorshipPage';
function App() {
- const [count, setCount] = useState(0)
-
+ const db = app;
return (
- <>
-
- Vite + React
-
-
setCount((count) => count + 1)}>
- count is {count}
-
-
- Edit src/App.jsx and save to test HMR
-
-
-
- Click on the Vite and React logos to learn more
-
- >
- )
+
+
+
+ }>
+ } />
+ }/>
+ }/>
+
+ }>
+ } />
+ } />
+ } />
+ }/>
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+
+ }>
+ } />
+ } />
+ } />
+ } />
+ } />
+
+
+
+
+ );
}
-export default App
+export default App;
diff --git a/app/src/PrivateRoutes.jsx b/app/src/PrivateRoutes.jsx
new file mode 100644
index 0000000..e77eca7
--- /dev/null
+++ b/app/src/PrivateRoutes.jsx
@@ -0,0 +1,39 @@
+import React from "react";
+import { Navigate, Outlet, useLocation} from "react-router-dom";
+import { useAuth } from "@/auth/auth-context";
+
+function PrivateRoutes({roles}) {
+ const { isLogged, userType, nome, loading } = useAuth();
+ const location = useLocation();
+ if (loading) {
+ console.log("[PRIVATE ROUTES] Verifica in corso, caricamento...");
+ return Caricamento...
; // Indica che i dati di autenticazione sono in caricamento
+ }
+ if (isLogged === false) {
+ console.log(roles.length)
+ if (roles.length==0){
+ console.log("[PRIVATE ROUTES] Accesso consentito per utenti non registrato");
+ return ;
+ }
+ else {
+ console.log("[PRIVATE ROUTES] Utente non loggato, reindirizzando a /login...");
+ return ;
+ }
+ }
+ else {
+ // Se l'utente è loggato, controlliamo se è nella home o in registrazione
+ if (location.pathname === '/' || location.pathname === '/register' || location.pathname === '/login') {
+ // Se è già loggato, redirigilo alla HomePageUtente
+ return ;
+ }
+ if (!roles.includes(userType)) {
+ console.log("[PRIVATE ROUTES] L\'utente non dispone dei permessi necessari");
+ return Non hai i permessi necessari
}
+ else {
+ console.log("[PRIVATE ROUTES] Accesso consentito per l'utente: " + nome);
+ return ;}
+ }
+}
+
+export default PrivateRoutes;
+
diff --git a/app/src/auth/auth-context.jsx b/app/src/auth/auth-context.jsx
new file mode 100644
index 0000000..80c639c
--- /dev/null
+++ b/app/src/auth/auth-context.jsx
@@ -0,0 +1,110 @@
+import React, { createContext, useContext, useState, useEffect } from "react";
+import { getFirestore, doc, getDoc } from "firebase/firestore";
+import { getAuth, onAuthStateChanged } from "firebase/auth";
+
+// Creazione del contesto di autenticazione
+const AuthContext = createContext();
+
+// Hook personalizzato per utilizzare il contesto
+export const useAuth = () => {
+ return useContext(AuthContext);
+};
+
+// Provider per il contesto di autenticazione
+export const AuthProvider = ({ children }) => {
+ const [userId, setUserId] = useState(null);
+ const [userType, setUserType] = useState(null);
+ const [isLogged, setIsLogged] = useState(false);
+ const [nome, setNome] = useState(null);
+ const [cognome, setCognome] = useState(null);
+ const [field, setField] = useState(null); // Aggiunto il campo `field`
+ const [loading, setLoading] = useState(true);
+
+ useEffect(() => {
+ const auth = getAuth();
+ const unsubscribe = onAuthStateChanged(auth, async (user) => {
+ if (user) {
+ const db = getFirestore();
+ const userDocRef = doc(db, "utenti", user.uid);
+ const userDoc = await getDoc(userDocRef);
+
+ if (userDoc.exists()) {
+ const userData = userDoc.data();
+ setUserId(user.uid);
+ setUserType(userData.userType);
+ setIsLogged(true);
+ setNome(userData.nome);
+ setCognome(userData.cognome);
+ setField(userData.field); // Aggiorna il valore di `field`
+
+ // Persisti i dati nel localStorage
+ localStorage.setItem(
+ "auth",
+ JSON.stringify({
+ userId: user.uid,
+ nome: userData.nome,
+ cognome: userData.cognome,
+ userType: userData.userType,
+ isLogged: true,
+ field: userData.field, // Aggiungi il campo `field`
+ })
+ );
+ }
+ } else {
+ // Se l'utente non è autenticato, ripulisci lo stato
+ setUserId(null);
+ setUserType(null);
+ setIsLogged(false);
+ setNome(null);
+ setCognome(null);
+ setField(null); // Resetta anche il campo `field`
+ localStorage.removeItem("auth");
+ }
+ setLoading(false);
+ });
+
+ // Carica i dati dal localStorage all'avvio
+ const storedAuth = localStorage.getItem("auth");
+ if (storedAuth) {
+ const { userId, userType, isLogged, nome, field } = JSON.parse(storedAuth);
+ setUserId(userId);
+ setUserType(userType);
+ setIsLogged(isLogged);
+ setNome(nome);
+ setCognome(cognome);
+ setField(field); // Recupera il campo `field` dal localStorage
+ setLoading(false);
+ }
+
+ return () => unsubscribe();
+ }, []);
+
+ const logout = () => {
+ const auth = getAuth();
+ auth.signOut().then(() => {
+ setUserId(null);
+ setUserType(null);
+ setIsLogged(false);
+ setNome(null);
+ setCognome(null);
+ setField(null); // Resetta anche il campo `field`
+ localStorage.removeItem("auth");
+ });
+ };
+
+ return (
+
+ {!loading && children}
+
+ );
+};
diff --git a/app/src/auth/user-login.js b/app/src/auth/user-login.js
new file mode 100644
index 0000000..d92d173
--- /dev/null
+++ b/app/src/auth/user-login.js
@@ -0,0 +1,31 @@
+import { getAuth, signInWithEmailAndPassword } from "firebase/auth";
+import { useAuth } from "./auth-context";
+
+/*
+ --| metodi Login e Logout importati da libreria Firebase
+
+ */
+// Funzione di login
+async function loginUser(email, password) {
+ try {
+ // Ottieni l'istanza di Firebase Auth
+ const auth = getAuth();
+
+ // Effettua il login con email e password
+ const userCredential = await signInWithEmailAndPassword(auth, email, password);
+
+ console.log("Login effettuato con successo!", userCredential.uid);
+ return { success: true, userId: userCredential.uid, email: userCredential.email };
+ } catch (error) {
+ console.error("Errore durante il login:", error.message);
+ return { success: false, error: error.message };
+ }
+}
+
+// Funzione di logout
+async function logoutUser() {
+ const {logout} = useAuth();
+ logout();
+}
+
+export { loginUser, logoutUser };
diff --git a/app/src/auth/user-registration.js b/app/src/auth/user-registration.js
new file mode 100644
index 0000000..7c558be
--- /dev/null
+++ b/app/src/auth/user-registration.js
@@ -0,0 +1,129 @@
+import { getAuth, createUserWithEmailAndPassword } from "firebase/auth";
+import { getFirestore, doc, setDoc } from "firebase/firestore";
+import { storage } from "@/firebase/firebase";
+import { ref, uploadBytes, getDownloadURL, deleteObject, listAll } from "firebase/storage";
+import app from "@/firebase/firebase";
+
+// Funzione per caricare il CV su Firebase Storage
+export async function uploadCV(file, userID) {
+ try {
+ const cvRef = ref(storage, `utenti/${userID}/cv/${file.name}`);
+
+ // Carica il file nel percorso definito
+ await uploadBytes(cvRef, file);
+
+ // Ottieni l'URL del file caricato
+ const cvURL = await getDownloadURL(cvRef);
+
+ return cvURL; // Restituisce l'URL del file caricato
+ } catch (error) {
+ console.error("Errore durante il caricamento del CV:", error.message);
+ throw new Error("Errore durante il caricamento del CV.");
+ }
+}
+
+
+// Funzione per caricare o aggiornare il CV
+
+export async function updateCV(file, userId) {
+ try {
+ const path = `utenti/${userId}/cv`;
+ const filePath = path+`/${file.name}`;
+ const cvRef = ref(storage, filePath);
+ console.log(path);
+
+ // Riferimento al percorso specificato
+ const listRef = ref(storage, path);
+
+ // Ottieni la lista dei file presenti nel percorso
+ const res = await listAll(listRef);
+
+ // Cancella ogni file nel percorso
+ for (const itemRef of res.items) {
+ await deleteObject(itemRef);
+ console.log(`File eliminato: ${itemRef.fullPath}`);
+ }
+
+ // Carica il nuovo CV nel percorso definito
+ await uploadBytes(cvRef, file);
+
+ // Ottieni l'URL del nuovo file caricato
+ const cvURL = await getDownloadURL(cvRef);
+
+ console.log("CV aggiornato con successo!");
+ return cvURL; // Restituisce l'URL del nuovo CV
+ } catch (error) {
+ console.error("Errore durante il caricamento del CV:", error.message);
+ throw new Error("Errore durante il caricamento del CV.");
+ }
+}
+
+
+// Funzione di registrazione
+export async function registerUser(formData, portfolioProjects) {
+ try {
+ // Ottieni l'istanza di Firebase Auth
+ const auth = getAuth(app);
+
+ // Registra l'utente con email e password
+ const userCredential = await createUserWithEmailAndPassword(
+ auth,
+ formData.email,
+ formData.password
+ );
+
+ // Ottieni l'UID dell'utente creato
+ const userId = userCredential.user.uid;
+
+ // Ottieni l'istanza di Firestore
+ const db = getFirestore(app);
+
+ // Carica il file CV se presente
+ let cvURL = null;
+ if (formData.cv) {
+ cvURL = await uploadCV(formData.cv, userId); // Carica il CV e ottieni l'URL
+ }
+
+ // Crea un documento utente in Firestore
+ const userData = {
+ nome: formData.nome,
+ cognome: formData.cognome,
+ email: formData.email,
+ sesso: formData.genere,
+ dataNascita: formData.dataDiNascita,
+ titoloDiStudio: formData.titoloDiStudio,
+ competenze: formData.competenze,
+ occupazione: formData.occupazione, // Aggiornato per accettare valori specifici come "developer", "web-developer", ecc.
+ userType: formData.userType,
+ portfolioProjects: portfolioProjects || [],
+ cv: cvURL, // Salva il nome del file CV
+ createdAt: new Date().toISOString(), // Aggiunto per tracciare la data di registrazione
+ field: formData.field || "", // Aggiunto per gestire il campo di interesse sia per mentor che mentee
+ };
+
+ // Aggiungi proprietà specifiche per i mentor
+ if (formData.userType === "mentor") {
+ userData.impiego = formData.impiego,
+ userData.availability = formData.availability || 0; // Disponibilità settimanale
+ userData.meetingMode = formData.meetingMode || "online"; // Modalità di incontro
+ }
+
+ if (formData.userType === "mentee") {
+ userData.field = formData.field || ""; // Campo di interesse del mentee
+ }
+
+ // Scrivi i dati utente su Firestore
+ await setDoc(doc(db, "utenti", userId), userData);
+
+ console.log("Utente registrato con successo!", userId);
+ return { success: true, userId: userId };
+ } catch (error) {
+ if (error.code === "auth/email-already-in-use") {
+ console.error("Errore: L'email è già registrata.");
+ return { success: false, error: "L'email è già registrata." };
+ } else {
+ console.error("Errore durante la registrazione:", error.message);
+ return { success: false, error: error.message };
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/components/assets/images/homepagefinal.png b/app/src/components/assets/images/homepagefinal.png
new file mode 100644
index 0000000..4d87bbc
Binary files /dev/null and b/app/src/components/assets/images/homepagefinal.png differ
diff --git a/app/src/components/assets/images/logo_easy.png b/app/src/components/assets/images/logo_easy.png
new file mode 100644
index 0000000..1735c30
Binary files /dev/null and b/app/src/components/assets/images/logo_easy.png differ
diff --git a/app/src/components/pages/CalendarioIncontri.jsx b/app/src/components/pages/CalendarioIncontri.jsx
new file mode 100644
index 0000000..955c03a
--- /dev/null
+++ b/app/src/components/pages/CalendarioIncontri.jsx
@@ -0,0 +1,428 @@
+// Updated CalendarioIncontri.js with Edit and Delete
+import React, { useState, useEffect } from 'react';
+import Header from "@/components/ui/Header";
+import { Link } from 'react-router-dom';
+import { Button } from "@/components/ui/button";
+import { fetchMeetingsForMentor, filterDaysWithMeetings, updateMeeting, deleteMeeting } from "@/dao/meetingsDAO"
+import { useAuth } from '@/auth/auth-context';
+
+const CalendarioIncontri = () => {
+ const [meetings, setMeetings] = useState([]);
+ const [daysWithMeetings, setDaysWithMeetings] = useState([]);
+ const [currentMonth, setCurrentMonth] = useState(new Date().getMonth());
+ const [currentYear, setCurrentYear] = useState(new Date().getFullYear());
+ const [editingMeeting, setEditingMeeting] = useState(null);
+ const {userId,nome,cognome} = useAuth();
+ const fetchMeetings = async () => {
+ try {
+ const fetchedMeetings = await fetchMeetingsForMentor(userId);
+ setMeetings(fetchedMeetings);
+ } catch (error) {
+ alert("Errore durante il recupero degli incontri." + error);
+ }
+ };
+
+ const handleEdit = (meeting) => {
+ setEditingMeeting(meeting);
+ };
+
+ const handleSaveEdit = async (updatedMeeting) => {
+ try {
+ await updateMeeting(updatedMeeting, updatedMeeting.menteeId,userId,nome,cognome);
+ setMeetings((prevMeetings) =>
+ prevMeetings.map((m) => (m.id === updatedMeeting.id ? updatedMeeting : m))
+ );
+ setEditingMeeting(null);
+ } catch (error) {
+ alert("Errore:" + error);
+ }
+ };
+ const handleDelete = async (meetingId,menteeId) => {
+ try {
+ await deleteMeeting(meetingId,menteeId,userId,nome,cognome);
+ setMeetings((prevMeetings) => prevMeetings.filter((m) => m.id !== meetingId));
+ } catch (error) {
+ alert("Errore:" + error);
+ }
+ };
+
+ useEffect(() => {
+ fetchMeetings();
+ }, []);
+
+ useEffect(() => {
+ const filteredDays = filterDaysWithMeetings(meetings, currentMonth, currentYear);
+ setDaysWithMeetings(filteredDays);
+ }, [currentMonth, currentYear, meetings]);
+
+ const changeMonth = (direction) => {
+ if (direction === 'next') {
+ if (currentMonth === 11) {
+ setCurrentMonth(0);
+ setCurrentYear(currentYear + 1);
+ } else {
+ setCurrentMonth(currentMonth + 1);
+ }
+ } else if (direction === 'prev') {
+ if (currentMonth === 0) {
+ setCurrentMonth(11);
+ setCurrentYear(currentYear - 1);
+ } else {
+ setCurrentMonth(currentMonth - 1);
+ }
+ }
+ };
+
+ const getDaysInMonth = (month, year) => {
+ return new Date(year, month + 1, 0).getDate();
+ };
+ return (
+
+
+
+
+
+
+ Calendario Incontri
+
+
+ {/* Calendar Card */}
+
+ {/* Calendar Header */}
+
+ changeMonth('prev')}
+ >
+ ←
+
+ {new Date(currentYear, currentMonth).toLocaleString('it-IT', { month: 'long', year: 'numeric' })}
+ changeMonth('next')}
+ >
+ →
+
+
+
+ {/* Calendar Grid */}
+
+ {/* Days of week */}
+ {['Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'].map(day => (
+
+ {day}
+
+ ))}
+
+ {/* Calendar days */}
+ {Array.from({ length: getDaysInMonth(currentMonth, currentYear) }, (_, i) => {
+ const day = i + 1;
+ const hasMeeting = daysWithMeetings.includes(day);
+
+ return (
+
+ {day}
+ {hasMeeting && (
+
+ )}
+
+ );
+ })}
+
+
+ {/* Upcoming Meetings Section */}
+
+ Prossimi Incontri
+
+
+
+ {meetings.map(meeting => (
+
+ {/* Calendar Icon */}
+
+ 📅
+
+
+ {/* Meeting Details */}
+
+
+ Incontro con {meeting.menteeName}
+
+
+ {meeting.date.toLocaleDateString()}, {meeting.time}
+
+
+
+ {/* Action Buttons */}
+
+ handleEdit(meeting)}
+ style={{
+ backgroundColor: '#10B981',
+ color: 'white',
+ width: '120px', // Imposta una larghezza fissa per i bottoni
+ }}
+ >
+ Modifica
+
+ handleDelete(meeting.id,meeting.menteeId)}
+ style={{
+ backgroundColor: '#EF4444',
+ color: 'white',
+ width: '120px', // Imposta una larghezza fissa per i bottoni
+ }}
+ >
+ Elimina
+
+
+
+
+ Post-Meeting
+
+
+
+
+
+
+ ))}
+
+
+ {/* Add Meeting Button */}
+
+
+ +
+ Aggiungi incontro
+
+
+
+
+
+ {/* Edit Meeting Form */}
+ {editingMeeting && (
+
+ )}
+
+ );
+};
+
+export default CalendarioIncontri;
diff --git a/app/src/components/pages/CalendarioIncontriMentee.jsx b/app/src/components/pages/CalendarioIncontriMentee.jsx
new file mode 100644
index 0000000..9959dc6
--- /dev/null
+++ b/app/src/components/pages/CalendarioIncontriMentee.jsx
@@ -0,0 +1,246 @@
+import { Link } from 'react-router-dom';
+import React, { useState, useEffect } from 'react';
+import Header from "@/components/ui/Header";
+import { fetchMeetingsForMentee, filterDaysWithMeetings } from "@/dao/meetingsDAO";
+import { useAuth } from '@/auth/auth-context';
+import { Button } from "@/components/ui/button";
+const CalendarioIncontri = () => {
+ const [meetings, setMeetings] = useState([]);
+ const [daysWithMeetings, setDaysWithMeetings] = useState([]);
+ const [currentMonth, setCurrentMonth] = useState(new Date().getMonth());
+ const [currentYear, setCurrentYear] = useState(new Date().getFullYear());
+ const {userId} = useAuth();
+ const fetchMeetings = async () => {
+ try {
+ // Recuperiamo i meeting per il mentee
+ const fetchedMeetings = await fetchMeetingsForMentee(userId);
+ setMeetings(fetchedMeetings);
+ } catch (error) {
+ alert("Errore durante il recupero degli incontri." + error);
+ }
+ };
+
+ useEffect(() => {
+ fetchMeetings();
+ }, []);
+
+ useEffect(() => {
+ const filteredDays = filterDaysWithMeetings(meetings, currentMonth, currentYear);
+ setDaysWithMeetings(filteredDays);
+ }, [currentMonth, currentYear, meetings]);
+
+ const changeMonth = (direction) => {
+ if (direction === 'next') {
+ if (currentMonth === 11) {
+ setCurrentMonth(0);
+ setCurrentYear(currentYear + 1);
+ } else {
+ setCurrentMonth(currentMonth + 1);
+ }
+ } else if (direction === 'prev') {
+ if (currentMonth === 0) {
+ setCurrentMonth(11);
+ setCurrentYear(currentYear - 1);
+ } else {
+ setCurrentMonth(currentMonth - 1);
+ }
+ }
+ };
+
+ const getDaysInMonth = (month, year) => {
+ return new Date(year, month + 1, 0).getDate();
+ };
+
+ return (
+
+
+
+
+
+
+ Calendario Incontri
+
+
+ {/* Calendar Card */}
+
+ {/* Calendar Header */}
+
+ changeMonth('prev')}
+ >
+ ←
+
+ {new Date(currentYear, currentMonth).toLocaleString('it-IT', { month: 'long', year: 'numeric' })}
+ changeMonth('next')}
+ >
+ →
+
+
+
+ {/* Calendar Grid */}
+
+ {/* Days of week */}
+ {['Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'].map(day => (
+
+ {day}
+
+ ))}
+
+ {/* Calendar days */}
+ {Array.from({ length: getDaysInMonth(currentMonth, currentYear) }, (_, i) => {
+ const day = i + 1;
+ const hasMeeting = daysWithMeetings.includes(day);
+
+ return (
+
+ {day}
+ {hasMeeting && (
+
+ )}
+
+ );
+ })}
+
+
+
+ {/* Upcoming Meetings Section */}
+
+ Prossimi Incontri
+
+
+
+ {meetings.map(meeting => (
+
+ {/* Calendar Icon */}
+
+ 📅
+
+
+ {/* Meeting Details */}
+
+
+ Incontro con {meeting.mentorName}
+
+
+ {meeting.date.toLocaleDateString()}, {meeting.time}
+
+
+
+ {/* Post-Meeting Button */}
+
+
+
+ Visualizza Minuta
+
+
+
+
+ ))}
+
+
+
+
+ );
+};
+
+export default CalendarioIncontri;
diff --git a/app/src/components/pages/ChatListPage.jsx b/app/src/components/pages/ChatListPage.jsx
new file mode 100644
index 0000000..c67aa92
--- /dev/null
+++ b/app/src/components/pages/ChatListPage.jsx
@@ -0,0 +1,189 @@
+import React, { useEffect, useState } from "react";
+import { getChatsByUserId } from "@/dao/chatSupportoDAO";
+import { useAuth } from "@/auth/auth-context";
+import { useNavigate } from "react-router-dom";
+import Header from "@/components/ui/Header";
+import {
+ getFirestore,
+ collection,
+ onSnapshot,
+ query,
+ where,
+} from "firebase/firestore";
+import app from "@/firebase/firebase";
+
+const db = getFirestore(app);
+
+export default function ChatListPage() {
+ const { userId, userType } = useAuth();
+ const [chats, setChats] = useState([]);
+ const [loading, setLoading] = useState(true);
+ const [error, setError] = useState(null);
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ const fetchChats = async () => {
+ try {
+ if (!userId) {
+ setError("Utente non autenticato.");
+ return;
+ }
+
+ const result = await getChatsByUserId(userId);
+
+ if (result.success) {
+ setChats(result.data);
+ } else {
+ setError(result.error || "Errore durante il recupero delle chat.");
+ }
+ } catch (error) {
+ setError("Errore generale durante il recupero delle chat.");
+ console.error(error);
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ fetchChats();
+ }, [userId]);
+
+ useEffect(() => {
+ if (!userId) return;
+
+ const chatsQuery = query(
+ collection(db, "supportChat"),
+ where("participants", "array-contains", userId)
+ );
+
+ const unsubscribe = onSnapshot(chatsQuery, (snapshot) => {
+ const updatedChats = snapshot.docs.map((doc) => {
+ const chat = doc.data();
+ const isNewMessage = chat.lastMessageSenderId !== userId;
+ return {
+ id: doc.id,
+ ...chat,
+ isNewMessage,
+ };
+ });
+ setChats(updatedChats);
+ });
+
+ return () => unsubscribe();
+ }, [userId]);
+
+ if (loading) {
+ return (
+
+
+ Caricamento delle chat...
+
+
+ );
+ }
+
+ if (error) {
+ return (
+
+ );
+ }
+
+ return (
+
+
+
+
+ Le Tue Chat
+
+
+ {chats.length > 0 ? (
+
+ {chats.map((chat) => {
+ const partnerName =
+ userType === "mentor"
+ ? chat.menteeName || "Mentee Sconosciuto"
+ : chat.mentorName || "Mentore Sconosciuto";
+
+ const isNewMessage = chat.isNewMessage || false;
+
+ return (
+
+ navigate("/chat-support", {
+ state: {
+ chatId: chat.id,
+ mentorId: chat.mentorId,
+ problemType: "",
+ },
+ })
+ }
+ >
+
+
+ {partnerName
+ .split(" ")
+ .map((n) => n[0])
+ .join("")
+ .toUpperCase()}
+
+
+
+ {partnerName}
+
+
+ {chat.lastMessage || "Nessun messaggio disponibile"}
+
+
+
+
+
+ {chat.updatedAt
+ ? new Date(chat.updatedAt).toLocaleDateString([], {
+ day: "2-digit",
+ month: "2-digit",
+ year: "2-digit",
+ })
+ : "N/D"}
+
+
+ {chat.updatedAt
+ ? new Date(chat.updatedAt).toLocaleTimeString([], {
+ hour: "2-digit",
+ minute: "2-digit",
+ })
+ : "N/D"}
+
+ {isNewMessage && (
+
+
+
+
+ )}
+
+
+ );
+ })}
+
+ ) : (
+
+
+ Nessuna chat trovata.
+
+
navigate("/new-chat")}
+ >
+ Inizia una nuova conversazione
+
+
+ )}
+
+
+
+ );
+}
diff --git a/app/src/components/pages/ChatSupporto.jsx b/app/src/components/pages/ChatSupporto.jsx
new file mode 100644
index 0000000..ab992fe
--- /dev/null
+++ b/app/src/components/pages/ChatSupporto.jsx
@@ -0,0 +1,227 @@
+import React, { useEffect, useState } from "react";
+import { getFirestore, doc, getDoc } from "firebase/firestore";
+import app from "@/firebase/firebase";
+import { createChat, sendSupportMessage, getSupportMessages } from "@/dao/chatSupportoDAO";
+import { useLocation, useNavigate } from "react-router-dom";
+import { Card, CardHeader, CardTitle } from "@/components/ui/card";
+import Header from "@/components/ui/Header";
+import { useAuth } from "@/auth/auth-context";
+
+const db = getFirestore(app);
+
+export default function ChatSupporto() {
+ const location = useLocation();
+ const navigate = useNavigate();
+ const { chatId, mentorId, problemType } = location.state || {}; // Aggiunto chatId
+ const { userId, userType } = useAuth(); // Importa solo le variabili richieste
+
+ const [message, setMessage] = useState("");
+ const [messages, setMessages] = useState([]);
+ const [loading, setLoading] = useState(true);
+ const [error, setError] = useState(null);
+ const [menteeName, setMenteeName] = useState("Mentee Sconosciuto");
+ const [mentorName, setMentorName] = useState("Mentore Sconosciuto");
+ const [user, setUser] = useState({ nome: "", cognome: "", occupazione: "" });
+
+ if (!userId) {
+ console.error("Utente non autenticato.");
+ navigate("/login");
+ return null;
+ }
+
+ useEffect(() => {
+ const initChat = async () => {
+ try {
+ if (!chatId) {
+ console.warn("Chat ID non disponibile. Creazione di una nuova chat...");
+ if (!mentorId) {
+ setError("Mentor ID mancante.");
+ navigate("/chat-list");
+ return;
+ }
+
+ const menteeId = userType === "mentee" ? userId : mentorId;
+ const mentorIdFinal = userType === "mentor" ? userId : mentorId;
+
+ // Creazione della chat
+ const createChatResponse = await createChat(menteeId, mentorIdFinal, "", "");
+ if (!createChatResponse.success) {
+ throw new Error("Errore nella creazione della chat.");
+ }
+
+ navigate("/chat-support", {
+ state: { chatId: createChatResponse.id, mentorId: mentorIdFinal, problemType },
+ });
+ return;
+ }
+
+ // Recupera i dettagli della chat
+ const chatDocRef = doc(db, "supportChat", chatId);
+ const chatDoc = await getDoc(chatDocRef);
+ if (chatDoc.exists()) {
+ const chatData = chatDoc.data();
+ setMenteeName(chatData.menteeName || "Mentee Sconosciuto");
+ setMentorName(chatData.mentorName || "Mentore Sconosciuto");
+
+ if (userType === "mentor") {
+ setUser({
+ nome: chatData.menteeName.split(" ")[0],
+ cognome: chatData.menteeName.split(" ")[1] || "",
+ occupazione: "Mentee",
+ });
+ } else {
+ setUser({
+ nome: chatData.mentorName.split(" ")[0],
+ cognome: chatData.mentorName.split(" ")[1] || "",
+ occupazione: "Mentore",
+ });
+ }
+ }
+
+ if (problemType) {
+ setMessage("Ciao, ti contatto per il seguente problema: " + problemType);
+ }
+
+ const savedMessages = await getSupportMessages(chatId);
+ setMessages(savedMessages);
+ } catch (err) {
+ console.error("Errore durante l'inizializzazione della chat:", err);
+ setError("Errore durante l'inizializzazione della chat.");
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ initChat();
+ }, [chatId, mentorId, userId, userType, navigate, problemType]);
+
+ const handleSendMessage = async () => {
+ if (!message.trim() || !chatId) {
+ console.warn("Messaggio vuoto o chat non disponibile.");
+ return;
+ }
+
+ try {
+ const newMessage = {
+ chatId,
+ senderId: userId,
+ text: message,
+ timestamp: Date.now(),
+ };
+
+ await sendSupportMessage(newMessage);
+ setMessages((prev) => [...prev, newMessage]);
+ setMessage("");
+ } catch (err) {
+ console.error("Errore durante l'invio del messaggio:", err);
+ setError("Errore durante l'invio del messaggio.");
+ }
+ };
+
+ if (error) {
+ useEffect(() => {
+ const timer = setTimeout(() => navigate("/chat-list"), 3000);
+ return () => clearTimeout(timer);
+ }, [navigate]);
+
+ return {error}
;
+ }
+
+ return (
+
+
+
+ {loading ? (
+
+ Caricamento in corso...
+
+ ) : (
+ <>
+
+
+
+
+ {user.nome[0]}{user.cognome[0]}
+
+
+
+ {userType === "mentor" ? "Profilo del Mentee" : "Profilo del Mentore"}
+
+
+ {user.nome} {user.cognome}
+
+
{user.occupazione}
+ {problemType && problemType !== "Non specificato" && (
+
+ Stai discutendo del problema: {problemType}
+
+ )}
+
+
+
+
+
+
+
+ {messages.length > 0 ? (
+ messages.map((msg, index) => (
+
+ {msg.senderId !== userId && (
+
+ {userType === "mentor" ? menteeName[0] : mentorName[0]}
+
+ )}
+
+
{msg.text}
+
+ {new Date(msg.timestamp).toLocaleTimeString([], {
+ hour: "2-digit",
+ minute: "2-digit",
+ })}
+
+
+ {msg.senderId === userId && (
+
+ TU
+
+ )}
+
+ ))
+ ) : (
+
Nessun messaggio disponibile.
+ )}
+
+
+
+ setMessage(e.target.value)}
+ placeholder="Scrivi un messaggio..."
+ className="flex-1 px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-[#22A699] outline-none text-gray-900"
+ />
+
+ Invia
+
+
+
+ >
+ )}
+
+
+ );
+}
diff --git a/app/src/components/pages/DettaglioProfilo.jsx b/app/src/components/pages/DettaglioProfilo.jsx
new file mode 100644
index 0000000..19a8130
--- /dev/null
+++ b/app/src/components/pages/DettaglioProfilo.jsx
@@ -0,0 +1,41 @@
+import { useState, useEffect } from "react";
+import { useAuth } from "@/auth/auth-context";
+import { getUserByID } from "@/dao/userDAO";
+import { DettagliUtente } from "./DettaglioUtente";
+
+/*
+ */
+export default function DettaglioProfilo() {
+ const { userId } = useAuth(); // Recupera l'ID dell'utente autenticato
+ const [userData, setUserData] = useState(null); // Stato per i dati dell'utente
+ const [isLoading, setIsLoading] = useState(true); // Stato di caricamento
+
+ useEffect(() => {
+ const fetchUserData = async () => {
+ try {
+ setIsLoading(true); // Inizia il caricamento
+ const data = await getUserByID(userId); // Ottieni i dati utente
+ setUserData(data); // Salva i dati nello stato
+ } catch (error) {
+ alert("Errore durante il recupero dei dati utente:" + error.message);
+ } finally {
+ setIsLoading(false); // Fine caricamento
+ }
+ };
+
+ if (userId) {
+ fetchUserData(); // Recupera i dati utente
+ }
+ }, [userId]); // Esegui l'effetto solo quando cambia userId
+
+ // Mostra un messaggio di caricamento finché i dati non sono disponibili
+ if (isLoading) {
+ return Caricamento...
;
+ }
+
+ // Passa i dati utente al componente DettagliUtente
+ return ;
+}
+
+
+
diff --git a/app/src/components/pages/DettaglioUtente.jsx b/app/src/components/pages/DettaglioUtente.jsx
new file mode 100644
index 0000000..4834c71
--- /dev/null
+++ b/app/src/components/pages/DettaglioUtente.jsx
@@ -0,0 +1,284 @@
+import { useParams } from 'react-router-dom';
+import Header from '../ui/Header';
+import { Button } from "@/components/ui/button";
+import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
+import { Badge } from '@/components/ui/badge';
+import { Mail, MapPin, Briefcase, GraduationCap, Users, Cake, ArrowRight, Download, Clock } from 'lucide-react';
+import { getUserByID } from '@/dao/userDAO';
+import { useState, useEffect } from 'react';
+import { Link } from 'react-router-dom';
+import { useAuth } from '@/auth/auth-context';
+import { createNotificationMentorship } from '@/dao/notificaDAO';
+
+/*
+ Componente DettagliUtente
+ ---------------------------
+ - Visualizza i dettagli di un utente specifico.
+ - Mostra informazioni come email, data di nascita, titolo di studio, ecc.
+ - Fornisce pulsanti azione contestuali:
+ - Modifica Profilo (se l'utente sta visualizzando il proprio profilo)
+ - Richiedi Mentorship (se l'utente è un mentee e visualizza un mentore)
+ - Contatta il Mentee (se l'utente è un mentore e visualizza un mentee)
+
+ Props:
+ - user: Oggetto con i dettagli dell'utente.
+*/
+
+
+function DettagliUtente({ user }) {
+ const { userId, nome, cognome, userType} = useAuth();
+ const isMentor = user.userType === "mentor";
+ const ownPage = userId === user.id;
+ const [successMessage, setSuccessMessage] = useState(""); // Stato per il messaggio di successo
+
+
+ // Funzione che gestisce la richiesta di mentorship
+async function handleRichiestaMentorship(user) {
+ try {
+ createNotificationMentorship(userId, user.id, nome, cognome);
+ setSuccessMessage("Notifica inviata con successo!");
+ setTimeout(() => setSuccessMessage(""), 3000); // Nasconde il messaggio dopo 3 secondi
+
+ }
+ catch (error){
+ alert("notifica mentorship non inviata con successo" + error);
+ }
+}
+
+
+ function handleClick() {
+ if (ownPage) {
+ window.location.href = "/edit-profile"; return;
+ }
+ if (isMentor) handleRichiestaMentorship(user);
+ else console.log("[DettaglioUtente] RichiedoContatto")
+ }
+
+ return (
+
+
+
+
+ {/* Header del profilo */}
+
+
+
+ {user.nome[0]}{user.cognome[0]}
+
+
+
+ {isMentor ? "Profilo del Mentore" : "Profilo del Mentee"}
+
+
+ {user.nome} {user.cognome}
+
+
{user.occupazione}
+
+
+
+
+ {/* Corpo della card */}
+
+
+ {/* Dettagli personali */}
+
+ {user.email && (
+
+
+ {user.email}
+
+ )}
+ {user.dataNascita && (
+
+
+ Data di nascita: {user.dataNascita}
+
+ )}
+ {user.sesso && (
+
+
+ Genere: {user.sesso}
+
+ )}
+ {user.titoloDiStudio && (
+
+
+ {user.titoloDiStudio}
+
+ )}
+
+
+ {/* Sezione specifica per Mentor o Mentee */}
+
+ {isMentor ? (
+ <>
+ {user.field && (
+
+
+ Settore IT: {user.field}
+
+ )}
+ {user.availability && (
+
+
+ Disponibilità: {user.availability} ore settimanali
+
+ )}
+ {user.meetingMode && (
+
+
+ Modalità di incontro: {user.meetingMode}
+
+ )}
+ >
+ ) : (
+ <>
+ {user.field && (
+
+
+
Interesse: {user.field}
+
+ )}
+ >
+ )}
+
+
+
+ {/* Sezione competenze */}
+ {user.competenze && (
+
+
Competenze
+
+ {user.competenze.split("\n").map((skill, index) => (
+
+ {skill}
+
+ ))}
+
+
+ )}
+
+ {/* Sezione Portfolio */}
+ {user.portfolioProjects && user.portfolioProjects.length > 0 && (
+
+
Portfolio
+
+ {user.portfolioProjects.map((project, index) => (
+
+
+
+
+ {project.name || "Progetto senza nome"}
+
+
+ {project.description?.slice(0, 50) || "Descrizione non disponibile"}...
+
+
+
+
+
+ ))}
+
+
+ )}
+
+ {/* Sezione Curriculum */}
+ {user.cv && (
+
+ )}
+
+
+ {/* Messaggio di successo */}
+ {successMessage && (
+
+ {successMessage}
+
+ )}
+
+
+ {/* Azione finale */}
+ {(ownPage || userType === 'mentee' || !isMentor) && (
+
+ handleClick()}>
+ {ownPage
+ ? "Modifica Profilo"
+ : isMentor
+ ? "Richiedi Mentorship"
+ : "Contatta il Mentee"}
+
+
+ )}
+
+
+
+
+ );
+}
+
+
+/*
+ Componente DettagliUtenteWrapper
+ ---------------------------------
+ - Recupera l'ID dell'utente dai parametri URL.
+ - Recupera i dati dell'utente dal backend utilizzando `getUserByID`.
+ - Gestisce stati di caricamento ed errori.
+ - Passa i dati utente al componente `DettagliUtente`.
+*/
+
+
+
+function DettagliUtenteWrapper() {
+ const { userId } = useParams(); // Ottiene l'ID dell'utente dai parametri dell'URL
+ const [user, setUser] = useState(null); // Stato per i dati dell'utente
+ const [loading, setLoading] = useState(true); // Stato per il caricamento
+ const [error, setError] = useState(null); // Stato per eventuali errori
+
+ useEffect(() => {
+ const fetchUser = async () => {
+ try {
+ const userData = await getUserByID(userId); // Recupera i dati utente
+ setUser(userData); // Aggiorna lo stato
+ console.log(userData);
+ } catch (err) {
+ setError(err.message); // Gestisce eventuali errori
+ } finally {
+ setLoading(false); // Termina il caricamento
+ }
+ };
+
+ if (userId) fetchUser(userId)
+ }, [userId]);
+
+ if (loading) {
+ return Caricamento...
;
+ }
+
+ if (error) {
+ return Errore: {error}
;
+ }
+
+ if (!user) {
+ return Utente non trovato.
;
+ }
+
+ return ;
+}
+
+
+export { DettagliUtente, DettagliUtenteWrapper };
\ No newline at end of file
diff --git a/app/src/components/pages/DettaglioVideo.jsx b/app/src/components/pages/DettaglioVideo.jsx
new file mode 100644
index 0000000..793c133
--- /dev/null
+++ b/app/src/components/pages/DettaglioVideo.jsx
@@ -0,0 +1,125 @@
+import React, { useEffect, useState } from "react";
+import { useParams } from "react-router-dom";
+import Header from "../ui/Header";
+import { collection, doc, getDoc, getFirestore } from "firebase/firestore";
+import { getStorage, ref, getDownloadURL, connectStorageEmulator } from "firebase/storage";
+import app from '@/firebase/firebase';
+
+export default function DettaglioVideo() {
+ const { id } = useParams();
+ const [video, setVideo] = useState(null);
+ const [loading, setLoading] = useState(true);
+ const db = getFirestore(app);
+ const storage = getStorage(app);
+
+ // Configura l'emulatore per Firebase Storage
+ if (window.location.hostname === 'localhost') {
+ connectStorageEmulator(storage, 'localhost', 9199); // Porta dell'emulatore di Firebase Storage
+ }
+
+ // Funzione per verificare se l'URL è valido
+ function isValidURL(url) {
+ try {
+ new URL(url); // Prova a creare un URL per vedere se è valido
+ return true;
+ } catch {
+ return false;
+ }
+ }
+
+ useEffect(() => {
+ async function fetchVideoDetails() {
+ try {
+ const docRef = doc(db, "videos", id);
+ const docSnap = await getDoc(docRef);
+
+ if (docSnap.exists()) {
+ const videoData = { id: docSnap.id, ...docSnap.data() };
+ setVideo(videoData);
+
+ // Se il video è stato caricato come file (e non come URL), ottieni l'URL dal Firebase Storage
+ if (videoData.videoFile) {
+ const videoRef = ref(storage, `videos/${videoData.videoFile.name}`); // Nome del file video
+ const videoUrl = await getDownloadURL(videoRef);
+ setVideo((prevVideo) => ({ ...prevVideo, videoUrl })); // Aggiungi l'URL del video al videoData
+ }
+ } else {
+ console.error("Video non trovato");
+ }
+ } catch (error) {
+ console.error("Errore nel caricamento del video:", error);
+ } finally {
+ setLoading(false);
+ }
+ }
+
+ fetchVideoDetails();
+ }, [id]);
+
+ if (loading) {
+ return Caricamento dettagli video...
;
+ }
+
+ if (!video) {
+ return Video non trovato.
;
+ }
+
+ // Verifica se l'URL del video è valido
+ const hasValidUrl = isValidURL(video.videoUrl);
+ const hasValidFile = video.videoFile; // Video caricato come file, controlla se esiste
+
+ return (
+
+
+
+
+
+
+ {video.title}
+
+
+
+
+ {hasValidUrl ? (
+ // Se il video ha un URL valido (YouTube, Vimeo, ecc.)
+
+ ) : hasValidFile ? (
+ // Se il video è stato caricato come file
+
+
+
+ ) : (
+ // Se nessuno dei due è valido, mostra un'immagine di fallback
+
+ )}
+
+
+
+
{video.description || "Nessuna descrizione disponibile."}
+
+
+
+
+ );
+}
diff --git a/app/src/components/pages/FileAddDocument.jsx b/app/src/components/pages/FileAddDocument.jsx
new file mode 100644
index 0000000..89f6d77
--- /dev/null
+++ b/app/src/components/pages/FileAddDocument.jsx
@@ -0,0 +1,167 @@
+import { useState } from 'react'
+import { Upload } from 'lucide-react'
+import { Button } from "@/components/ui/button"
+import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
+import { Input } from "@/components/ui/input"
+import { Label } from "@/components/ui/label"
+import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
+import Header from '@/components/ui/Header' // Import dell'header
+import { getAuth } from "firebase/auth"
+import { getFirestore, collection, addDoc } from "firebase/firestore"
+import { getStorage, ref, uploadBytes, getDownloadURL } from "firebase/storage"
+import app from '../../firebase/firebase' // Import di Firebase
+
+export default function UploadForm() {
+ const [fileName, setFileName] = useState('')
+ const [fileType, setFileType] = useState('')
+ const [title, setTitle] = useState('')
+ const [role, setRole] = useState('')
+ const [errorMessage, setErrorMessage] = useState('')
+
+ const db = getFirestore(app)
+ const auth = getAuth(app)
+ const storage = getStorage(app) // Inizializza Firebase Storage
+
+ const handleFileUpload = async (e) => {
+ e.preventDefault()
+
+ const user = auth.currentUser
+ if (!user) {
+ setErrorMessage('Non sei autenticato! Effettua il login per aggiungere un contenuto.')
+ return
+ }
+
+ const file = e.target.elements.file.files[0]
+ if (!file) {
+ setErrorMessage('Seleziona un file da caricare.')
+ return
+ }
+
+ let icon = ''
+ switch (fileType) {
+ case 'pdf':
+ icon = '📄'
+ break
+ case 'png':
+ icon = '🖼️'
+ break
+ case 'doc':
+ icon = '📝'
+ break
+ case 'zip':
+ icon = '📦'
+ break
+ default:
+ icon = '📄'
+ }
+
+ try {
+ const fileRef = ref(storage, 'documents/' + file.name)
+ console.log("Tentativo di caricamento del file su Firebase Storage:", fileRef)
+
+ await uploadBytes(fileRef, file)
+ console.log("File caricato con successo su Firebase Storage")
+
+ const fileUrl = await getDownloadURL(fileRef)
+ console.log("URL generato per il file:", fileUrl)
+
+ await addDoc(collection(db, 'documents'), {
+ title,
+ author: user.displayName || user.email,
+ role,
+ type: fileType.toUpperCase(),
+ icon,
+ createdAt: new Date(),
+ filePath: fileUrl, // URL del file caricato
+ })
+
+ console.log("Documento aggiunto a Firestore con successo")
+ alert('Caricamento completato!')
+
+ setTitle('')
+ setRole('')
+ setFileName('')
+ setFileType('')
+ setErrorMessage('')
+ } catch (error) {
+ console.error("Errore durante il caricamento del file o il salvataggio:", error)
+ setErrorMessage("Errore durante il caricamento del file.")
+ }
+ }
+
+ return (
+
+
+
+
+
+ Carica Nuovo Contenuto
+
+
+
+ {errorMessage && {errorMessage}
}
+
+
+ Nome del Contenuto
+ setTitle(e.target.value)}
+ required
+ />
+
+
+
+ Tipo di File
+ setFileType(value)} required>
+
+
+
+
+ PDF
+ PNG
+ DOC
+ ZIP
+
+
+
+
+
+
Carica File
+
+
setFileName(e.target.files?.[0]?.name || '')}
+ />
+
+
+ {fileName || 'Nessun file selezionato'}
+
+
+
document.getElementById('file')?.click()}
+ className="bg-[#178563] hover:bg-[#178563]/90"
+ >
+
+ Sfoglia
+
+
+
+
+
+ Carica Contenuto
+
+
+
+
+
+
+ )
+}
diff --git a/app/src/components/pages/FileHomePage.jsx b/app/src/components/pages/FileHomePage.jsx
new file mode 100644
index 0000000..0a3ab2b
--- /dev/null
+++ b/app/src/components/pages/FileHomePage.jsx
@@ -0,0 +1,85 @@
+import { useEffect, useState } from 'react'
+import { getFirestore, collection, getDocs } from 'firebase/firestore'
+import app from '../../firebase/firebase' // Import dell'istanza di Firebase
+import Header from '@/components/ui/Header'
+import {
+ Card,
+ CardContent,
+ CardHeader,
+ CardTitle,
+} from "@/components/ui/card"
+import { Link } from 'react-router-dom'
+import { useAuth } from '@/auth/auth-context'
+
+export default function DocumentLibrary() {
+ const [documents, setDocuments] = useState([])
+ const {userType} = useAuth();
+ useEffect(() => {
+ const db = getFirestore(app) // Inizializza Firestore
+ const fetchDocuments = async () => {
+ try {
+ const querySnapshot = await getDocs(collection(db, 'documents'))
+ const docs = querySnapshot.docs.map(doc => ({
+ ...doc.data(), // Estrarre i dati dal documento
+ id: doc.id // Aggiungere l'ID del documento
+ }))
+ setDocuments(docs) // Impostare i dati nello stato
+ } catch (error) {
+ console.error('Errore nel recupero dei documenti: ', error)
+ }
+ }
+ fetchDocuments()
+ }, [])
+
+ return (
+
+ {/* Header */}
+
+
+ {/* Main Content */}
+
+ Contenuti Media
+
+ {/* Add Document Button */}
+ {userType === "mentor" && (
+
+ Aggiungi Documento
+
+
)}
+
+
+ {documents.map((doc) => (
+
+
+
+ {doc.icon}
+ {doc.type}
+
+
+
+ {doc.title}
+
+ {doc.author}
+ •
+ {doc.role}
+
+
+
+
+ ))}
+
+
+
+ )
+}
diff --git a/app/src/components/pages/HomePageUtente.jsx b/app/src/components/pages/HomePageUtente.jsx
new file mode 100644
index 0000000..34643ba
--- /dev/null
+++ b/app/src/components/pages/HomePageUtente.jsx
@@ -0,0 +1,108 @@
+import { useEffect, useState } from "react";
+import { Button } from "@/components/ui/button";
+import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
+import Header from "@/components/ui/Header";
+import { useAuth } from "@/auth/auth-context";
+import { useNavigate } from "react-router-dom";
+import background from "../assets/images/homepagefinal.png"; // Importing the new local image
+
+export default function HomePageUtente() {
+ const { userType, nome } = useAuth();
+ const navigate = useNavigate();
+ const [loading, setLoading] = useState(true);
+
+ useEffect(() => {
+ console.log("Valori iniziali:", { userType, nome });
+ if (nome && userType) {
+ setLoading(false);
+ }
+ }, [nome, userType]);
+
+ if (loading) {
+ return (
+
+ );
+ }
+
+ return (
+
+
+
+
+ {/* Main Content with Two Columns */}
+
+
+ {/* Left Column with Content */}
+
+
+
+ Benvenuto {nome}
+
+
+ Connettiti con mentori senior del settore IT e accelera la tua carriera
+
+
+
+ {/* 3 White Boxes Section */}
+
+
+
+ Esperienza Personalizzata
+
+
+ Ricevi consigli su misura da professionisti esperti nel tuo campo di interesse.
+
+
+
+
+ Crescita Professionale
+
+
+ Sviluppa le tue competenze e avanza nella tua carriera con il supporto di mentori di successo.
+
+
+
+
+ Networking di Qualità
+
+
+ Costruisci relazioni significative all'interno del settore IT e amplia le tue opportunità.
+
+
+
+
+ {/* Specific Buttons for Mentee or Mentor */}
+ {userType === "mentee" && (
+
+ navigate("/matchingpage")}
+ >
+ Trova un Mentore
+
+
+ )}
+
+ {userType === "mentor" && (
+
+ navigate("/mentorships")}
+ >
+ Le tue Mentorship
+
+
+ )}
+
+
+
+
+
+
+ );
+}
diff --git a/app/src/components/pages/Homepage.jsx b/app/src/components/pages/Homepage.jsx
new file mode 100644
index 0000000..2cc99eb
--- /dev/null
+++ b/app/src/components/pages/Homepage.jsx
@@ -0,0 +1,71 @@
+import Header from '@/components/ui/Header'
+import { Button } from "@/components/ui/button"
+import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
+import { useNavigate } from 'react-router-dom'
+import background from "../assets/images/homepagefinal.png"; // Importing the new local image
+
+export default function Home() {
+ const navigate = useNavigate();
+ return (
+
+
+
+
+ {/* Main Content with Two Columns */}
+
+
+ {/* Left Column with Content */}
+
+
{/* Increased space between title and white boxes */}
+
Benvenuto su Yoda
+
Connettiti con mentori senior del settore IT e accelera la tua carriera
+
+
+ {/* 3 White Boxes Section */}
+
{/* Moved boxes to the left */}
+
+
+ Esperienza Personalizzata
+
+
+ Ricevi consigli su misura da professionisti esperti nel tuo campo di interesse.
+
+
+
+
+ Crescita Professionale
+
+
+ Sviluppa le tue competenze e avanza nella tua carriera con il supporto di mentori di successo.
+
+
+
+
+ Networking di Qualità
+
+
+ Costruisci relazioni significative all'interno del settore IT e amplia le tue opportunità.
+
+
+
+
+ {/* Register Button */}
+
{/* Increased margin to move the button further down */}
+ navigate('/register')}
+ >
+ Registrati Ora
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/app/src/components/pages/InserireVideo.jsx b/app/src/components/pages/InserireVideo.jsx
new file mode 100644
index 0000000..ccee3f5
--- /dev/null
+++ b/app/src/components/pages/InserireVideo.jsx
@@ -0,0 +1,207 @@
+import { useState, useEffect } from 'react';
+import { useNavigate } from 'react-router-dom';
+import Header from '../ui/Header';
+import { Button } from '@/components/ui/button';
+import { Input } from '@/components/ui/input';
+import { Label } from '@/components/ui/label';
+import { Textarea } from '@/components/ui/textarea';
+import { Upload } from 'lucide-react';
+import { collection, addDoc, getFirestore } from "firebase/firestore";
+import { getStorage, ref, uploadBytes, getDownloadURL } from "firebase/storage";
+import app, { storage } from '@/firebase/firebase'; // Assicurati che storage venga importato
+import { useAuth } from '@/auth/auth-context'; // Assicurati di importare il contesto di autenticazione
+
+export default function InserireVideo() {
+ const { userType } = useAuth(); // Ottieni il tipo di utente dal contesto di autenticazione
+ const [title, setTitle] = useState('');
+ const [description, setDescription] = useState('');
+ const [videoFile, setVideoFile] = useState(null);
+ const [videoUrl, setVideoUrl] = useState('');
+ const [uploading, setUploading] = useState(false);
+ const [titleError, setTitleError] = useState('');
+ const [descriptionError, setDescriptionError] = useState('');
+ const [videoError, setVideoError] = useState('');
+ const [uploadSuccess, setUploadSuccess] = useState(false);
+ const navigate = useNavigate();
+ const db = getFirestore(app);
+
+ // Funzione per rimuovere il file caricato
+ const removeFile = () => {
+ setVideoFile(null);
+ };
+
+ // Effettua il controllo del ruolo dell'utente
+ useEffect(() => {
+ if (userType !== "admin" && userType !== "mentor") {
+ navigate('/videos'); // Redirige alla pagina dei video se l'utente non è admin o mentor
+ }
+ }, [userType, navigate]);
+
+ async function onSubmit(event) {
+ event.preventDefault();
+ setUploading(true);
+ setVideoError('');
+ setTitleError('');
+ setDescriptionError('');
+ setUploadSuccess(false);
+
+ if (!title) {
+ setTitleError('Il titolo è obbligatorio!');
+ setUploading(false);
+ return;
+ }
+
+ if (!description) {
+ setDescriptionError('La descrizione è obbligatoria!');
+ setUploading(false);
+ return;
+ }
+
+ if (!videoUrl && !videoFile) {
+ setVideoError('Devi compilare almeno uno dei due campi: URL o file video!');
+ setUploading(false);
+ return;
+ }
+ if (videoUrl && videoFile) {
+ setVideoError('Riempi solo 1 campo: URL o file video!');
+ setUploading(false);
+ return;
+ }
+
+ try {
+ let uploadedVideoUrl = videoUrl;
+
+ if (videoFile) {
+ const storageRef = ref(storage, `videos/${videoFile.name}`);
+ await uploadBytes(storageRef, videoFile);
+ uploadedVideoUrl = await getDownloadURL(storageRef);
+ }
+
+ const videoData = {
+ title,
+ description,
+ thumbnail: "default-thumbnail-url",
+ videoUrl: uploadedVideoUrl,
+ };
+
+ await addDoc(collection(db, "videos"), videoData);
+ setUploadSuccess(true);
+ setTimeout(() => navigate('/videos'), 3000);
+
+ } catch (error) {
+ console.error("Errore durante il caricamento del video:", error);
+ alert('Errore durante il salvataggio del video.');
+ } finally {
+ setUploading(false);
+ }
+ }
+
+ return (
+
+
+
+
+
+
+
Carica un nuovo video
+
+ Compila il form sottostante per caricare un nuovo contenuto video sulla piattaforma.
+
+
+
+
+
+
+
Titolo del video
+
setTitle(e.target.value)}
+ required
+ className="border-[#178563] text-[#178563] placeholder-[#178563]/50"
+ />
+ {titleError &&
{titleError}
}
+
+
+
Descrizione
+
setDescription(e.target.value)}
+ className="w-full min-h-[150px] border-[#178563] text-[#178563] placeholder-[#178563]/50"
+ required
+ />
+ {descriptionError && {descriptionError}
}
+
+
+
+ Link del video (YouTube, Vimeo, ecc.)
+ setVideoUrl(e.target.value)}
+ className="border-[#178563] text-[#178563] placeholder-[#178563]/50"
+ />
+
+
+
+
File video
+ {videoFile && (
+
+ {videoFile.name}
+
+ X
+
+
+ )}
+
+
+
+
+
+ Clicca per caricare o trascina il file qui
+
+
+ MP4, WebM o OGG (MAX. 2GB)
+
+
+ setVideoFile(e.target.files[0])}
+ />
+
+
+
+
+
+ {videoError && {videoError}
}
+
+
+ {uploading ? 'Caricamento in corso...' : 'Carica video'}
+
+
+
+ {uploadSuccess &&
Il video è stato caricato con successo!
}
+
+
+
+
+ );
+}
diff --git a/app/src/components/pages/LoginPage.jsx b/app/src/components/pages/LoginPage.jsx
new file mode 100644
index 0000000..21394fc
--- /dev/null
+++ b/app/src/components/pages/LoginPage.jsx
@@ -0,0 +1,123 @@
+import { useState, useEffect } from "react";
+import { useNavigate, useLocation } from "react-router-dom"; // Importa useLocation
+import { loginUser } from "../../auth/user-login";
+import { Button } from "@/components/ui/button";
+import { Input } from "@/components/ui/input";
+import { Label } from "@/components/ui/label";
+import { Mail, Lock } from "lucide-react";
+import Logo from "../assets/images/logo_easy.png";
+
+
+export default function LoginPage() {
+ const [email, setEmail] = useState("");
+ const [password, setPassword] = useState("");
+ const [error, setError] = useState("");
+ const [successMessage, setSuccessMessage] = useState(""); // Stato per il messaggio di successo
+ const navigate = useNavigate();
+ const location = useLocation();
+
+ useEffect(() => {
+ // Controlla se esiste un messaggio nello stato della navigazione
+ if (location.state?.message) {
+ setSuccessMessage(location.state.message);
+ // Resetta lo stato per evitare di mostrare il messaggio su ricarica
+ navigate(location.pathname, { replace: true, state: {} });
+ }
+ }, [location, navigate]);
+
+ const handleLogin = async () => {
+ setError(""); // Reset dell'errore
+ console.log("Avvio del processo di login");
+
+ // Chiamata alla funzione di login
+ const result = await loginUser(email, password);
+ console.log("Risultato login:", result);
+
+
+ if (result.success) {
+ // Naviga in base al tipo di utente
+ // Naviga verso HomePageUtente con i dati utente
+ console.log("Login effettuato con successo, navigo a /HomePageUtente");
+ window.location.href = "/HomePageUtente";
+ }
+ else {
+ setError(result.error);
+ console.error(result.error);
+ }
+ };
+
+ return (
+
+
+
{/* Aumentato la larghezza */}
+
{/* Aumentato la larghezza */}
+
+
+
+
+
+
+
+
+
+ Benvenuto su Yoda
+
+
Effettua il login per continuare
+
+ {successMessage && (
+
+ {successMessage}
+
+ )}
+
+
+
+
Email
+
+ setEmail(e.target.value)}
+ required
+ className="pl-10"
+ />
+
+
+
+
+
+
Password
+
+ setPassword(e.target.value)}
+ required
+ className="pl-10"
+ />
+
+
+
+
+ {error &&
{error}
}
+
+
+ LOGIN
+
+
+
+
+
+ );
+}
diff --git a/app/src/components/pages/MatchingResultPage.jsx b/app/src/components/pages/MatchingResultPage.jsx
new file mode 100644
index 0000000..332d32a
--- /dev/null
+++ b/app/src/components/pages/MatchingResultPage.jsx
@@ -0,0 +1,174 @@
+import { useEffect, useState } from "react";
+import Header from "@/components/ui/Header";
+import { Card } from "@/components/ui/card";
+import { getAllMentors } from "@/dao/matchingDAO";
+import { useAuth } from "@/auth/auth-context"; // Importa il contesto Auth
+import { useNavigate } from "react-router-dom"; // Per navigare in altre pagine
+
+export default function MentorGrid() {
+ const [mentors, setMentors] = useState([]);
+ const [loading, setLoading] = useState(true);
+ const [error, setError] = useState(null);
+ const { userType, field, isLogged } = useAuth(); // Ottieni i dati dal contesto Auth
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ const fetchMentors = async () => {
+ if (!isLogged) {
+ setError("Devi essere loggato per accedere a questa pagina.");
+ setLoading(false);
+ return;
+ }
+
+ if (userType !== "mentee") {
+ setError("Solo i mentee possono accedere a questa pagina.");
+ setLoading(false);
+ return;
+ }
+
+ try {
+ const mentorsData = await getAllMentors(field); // Passa field del mentee alla funzione
+ console.log("Mentori recuperati:", mentorsData);
+ setMentors(mentorsData);
+ } catch (err) {
+ console.error("Errore nel recupero dei mentori:", err);
+ setError("Non è stato possibile caricare i dati.");
+ } finally {
+ setLoading(false);
+ }
+ if (!field || field.trim() === "") {
+ console.warn("Campo di interesse mancante o vuoto:", field);
+ setError("Il tuo campo di interesse non è impostato. Aggiorna il profilo per procedere.");
+ setMentors([]);
+ setLoading(false);
+ return;
+ }
+
+
+ };
+
+ fetchMentors();
+ }, [isLogged, userType, field]);
+
+
+ return (
+
+
+
+
+ {loading ? (
+
+
+ ) : error ? (
+ isLogged ? (
+
+
+
+ Accesso Negato
+
+
+ Questa pagina è riservata ai mentee.
+
+
navigate("/")}
+ className="w-full py-2 text-white bg-[#22A699] hover:bg-[#178563] rounded-lg transition font-medium"
+ >
+ Torna alla Home
+
+
+
+
+
+ ) : (
+
+
+
+ Effettua il Login
+
+
+ Per accedere a questa pagina, devi essere loggato. Fai clic sul pulsante
+ qui sotto per effettuare il login.
+
+
navigate("/login")}
+ className="w-full py-2 text-white bg-[#22A699] hover:bg-[#178563] rounded-lg transition font-medium"
+ >
+ Vai al Login
+
+
+
+
+ )
+ ) : mentors.length > 0 ? (
+
+
+ Scopri i Mentori Ideali per Te
+
+
+ {mentors.map((mentor, index) => (
+
+ {/* Foto del mentore */}
+
+ {mentor.photoUrl ? (
+
+ ) : (
+ `${mentor.nome?.[0] || "M"}${mentor.cognome?.[0] || "N"}`
+ )}
+
+
+ {/* Nome e occupazione */}
+
+
+ {mentor.nome || "Nome non disponibile"}{" "}
+ {mentor.cognome || "Cognome non disponibile"}
+
+
+ {mentor.occupazione || "Occupazione non specificata"}
+
+
+
+ {/* Dettagli del mentore */}
+
+
+ Meeting Mode: {" "}
+ {mentor.meetingMode || "Non specificato"}
+
+
+ Occupazione: {" "}
+ {mentor.occupazione || "Non specificata"}
+
+
+ Ore disponibili: {" "}
+ {mentor.availability || 0} ore
+
+
+
+ {/* Pulsante contatta */}
+
+ console.log(`Contatta il mentore: ${mentor.nome}`)}
+ >
+ Contatta {mentor.nome?.split(" ")[0] || "il Mentore"}
+
+
+
+ ))}
+
+
+ ) : (
+ Nessun mentore trovato.
+ )}
+
+
+ );
+}
\ No newline at end of file
diff --git a/app/src/components/pages/MeetingScheduler.jsx b/app/src/components/pages/MeetingScheduler.jsx
new file mode 100644
index 0000000..b709a26
--- /dev/null
+++ b/app/src/components/pages/MeetingScheduler.jsx
@@ -0,0 +1,148 @@
+import React, { useState, useEffect } from 'react';
+import { Timestamp } from 'firebase/firestore';
+import { createMeeting } from "@/dao/meetingsDAO";
+import Header from "@/components/ui/Header";
+import { useAuth } from '@/auth/auth-context';
+import { fetchMentorship } from '@/dao/mentorshipSessionDAO';
+
+const MeetingScheduler = () => {
+ const { userId, nome, cognome } = useAuth();
+ const [mentees, setMentees] = useState([]);
+ const [formData, setFormData] = useState({
+ date: '',
+ time: '',
+ topic: '',
+ participant: '',
+ description: '',
+ });
+
+ useEffect(() => {
+ const fetchMenteesData = async () => {
+ try {
+ const result = await fetchMentorship(userId);
+ if (Array.isArray(result)) {
+ setMentees(
+ result.map(element => ({
+ menteeId: element.menteeId,
+ menteeNome: element.menteeNome,
+ menteeCognome: element.menteeCognome,
+ }))
+ );
+ } else {
+ alert("Dati non validi ricevuti dalla query");
+ }
+ } catch (error) {
+ alert("Errore durante il recupero dei dati:" + error);
+ }
+ };
+
+ fetchMenteesData();
+ }, [userId]);
+
+ const validateForm = () => {
+ return (
+ formData.date &&
+ formData.time &&
+ formData.topic &&
+ formData.participant &&
+ formData.description
+ );
+ };
+
+ const handleInputChange = (e) => {
+ setFormData({
+ ...formData,
+ [e.target.id]: e.target.value,
+ });
+ };
+
+ const handleSubmit = async (e) => {
+ e.preventDefault();
+
+ if (!validateForm()) {
+ alert('Compila tutti i campi');
+ return;
+ }
+
+ try {
+ const selectedParticipant = mentees.find(mentee => mentee.menteeId === formData.participant);
+ if (!selectedParticipant) {
+ alert('Partecipante non trovato');
+ return;
+ }
+
+ if (!selectedParticipant.menteeNome || !selectedParticipant.menteeCognome) {
+ alert('I dati del partecipante sono incompleti');
+ return;
+ }
+
+ const meetingDate = new Date(`${formData.date}T${formData.time}:00`);
+ if (isNaN(meetingDate.getTime())) {
+ alert("Data non valida!");
+ return;
+ }
+
+ const timestamp = Timestamp.fromDate(meetingDate);
+
+ const newMeeting = {
+ date: timestamp,
+ time: formData.time,
+ topic: formData.topic,
+ description: formData.description,
+ mentorId: userId,
+ mentorName: nome,
+ mentorSurname: cognome,
+ menteeId: selectedParticipant.menteeId,
+ menteeName: selectedParticipant.menteeNome,
+ menteeCognome: selectedParticipant.menteeCognome,
+ userType: "mentee",
+ };
+
+ await createMeeting(newMeeting);
+ alert('Incontro programmato con successo');
+ } catch (error) {
+ console.error('Errore nella programmazione dell\'incontro:', error);
+ alert('Impossibile programmare l\'incontro');
+ }
+ };
+
+ return (
+
+ );
+};
+
+export default MeetingScheduler;
diff --git a/app/src/components/pages/MentorshipPage.jsx b/app/src/components/pages/MentorshipPage.jsx
new file mode 100644
index 0000000..011b288
--- /dev/null
+++ b/app/src/components/pages/MentorshipPage.jsx
@@ -0,0 +1,173 @@
+import React, { useEffect, useState } from "react";
+import { useAuth } from "@/auth/auth-context";
+import { fetchMentorship, closeMentorshipSession } from "@/dao/mentorshipSessionDAO";
+import { Card, CardContent, CardHeader } from "@/components/ui/card";
+import { Button } from "@/components/ui/button";
+import { ChevronDown, ChevronUp, Calendar, MessageSquare, FileEdit, XCircle } from "lucide-react";
+import { useNavigate } from "react-router-dom";
+import Header from "@/components/ui/Header";
+
+const MentorshipPage = () => {
+ const { userId, userType } = useAuth();
+ const [mentorshipSessions, setMentorshipSessions] = useState([]);
+ const [loading, setLoading] = useState(true);
+ const [expandedCard, setExpandedCard] = useState(null);
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ const loadMentorshipSessions = async () => {
+ if (userId) {
+ try {
+ const sessions = await fetchMentorship(userId);
+ setMentorshipSessions(sessions);
+ } catch (error) {
+ alert("Errore nel caricamento delle sessioni mentorship:" + error);
+ } finally {
+ setLoading(false);
+ }
+ }
+ };
+
+ loadMentorshipSessions();
+ }, [userId]);
+
+ const toggleCard = (id) => {
+ setExpandedCard(expandedCard === id ? null : id);
+ };
+
+ const handleScheduleClick = () => {
+ const route = userType === "mentor" ? "/Calendar" : "/CalendarMentee";
+ navigate(route);
+ };
+
+ const handleDetailClick = (session) => {
+ const route = userType === "mentor" ? `/dettagli/${session.menteeId}` : `/dettagli/${session.mentoreId}`;
+ navigate(route);
+ };
+
+ const handleCloseSession = async (sessionId) => {
+ try {
+ await closeMentorshipSession(sessionId);
+ setMentorshipSessions((prevSessions) =>
+ prevSessions.map((session) =>
+ session.id === sessionId ? { ...session, stato: "Inattivo" } : session
+ )
+ );
+ } catch (error) {
+ console.error("Errore nella chiusura della sessione:", error);
+ }
+ };
+
+ if (loading) {
+ return Caricamento delle sessioni di mentorship...
;
+ }
+
+ return (
+
+
+
+
+
Le Tue Sessioni di Mentorship
+
+ {mentorshipSessions.length > 0 ? (
+ mentorshipSessions.map((session) => {
+ const isMentee = userType === "mentee";
+ const displayName = isMentee
+ ? `${session.mentoreNome} ${session.mentoreCognome}`
+ : `${session.menteeNome} ${session.menteeCognome}`;
+ const displayLabel = isMentee ? "Mentore" : "Mentee";
+
+ const initials = displayName
+ .split(" ")
+ .map((word) => word[0])
+ .join("")
+ .toUpperCase();
+
+ return (
+
+ toggleCard(session.id)}
+ >
+
+
+
+ {initials}
+
+
+ {displayLabel}: {displayName}
+
+
+ {expandedCard === session.id ? (
+
+ ) : (
+
+ )}
+
+
+ {expandedCard === session.id && (
+
+
+
+
+ Dettagli della Sessione
+
+
+ Data di Creazione: {" "}
+ {session.createdAt?.seconds
+ ? new Date(session.createdAt.seconds * 1000).toLocaleString()
+ : "Data non disponibile"}
+
+
+ Stato: {session.stato}
+
+
+
+
+
+ Schedule
+
+
+
+ Message
+
+ handleDetailClick(session)}
+ >
+
+ Details
+
+ {userType === "mentor" && session.stato === "Attiva" && (
+ handleCloseSession(session.id)}
+ >
+
+ Chiudi Sessione
+
+ )}
+
+
+
+ )}
+
+ );
+ })
+ ) : (
+
Nessuna sessione di mentorship trovata.
+ )}
+
+
+
+ );
+};
+
+export default MentorshipPage;
diff --git a/app/src/components/pages/ModificaProfilo.jsx b/app/src/components/pages/ModificaProfilo.jsx
new file mode 100644
index 0000000..80610be
--- /dev/null
+++ b/app/src/components/pages/ModificaProfilo.jsx
@@ -0,0 +1,621 @@
+import { useState, useEffect } from 'react'
+import { Button } from "@/components/ui/button"
+import { Card, CardContent, CardDescription, CardHeader, CardTitle, CardFooter } from "@/components/ui/card"
+import { Input } from "@/components/ui/input"
+import { Label } from "@/components/ui/label"
+import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"
+import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
+import { Textarea } from "@/components/ui/textarea"
+import { X, Plus, Download } from 'lucide-react'
+import Header from "@/components/ui/Header"
+import { updateUserProfileWithCV, getUserByID } from '@/dao/userDAO'
+import { useNavigate } from "react-router-dom";
+import { useAuth } from '@/auth/auth-context'
+
+
+function ModificaProfilo() {
+ // Variabili di stato per gestire il curriculum, il portfolio, i messaggi di feedback
+ const [oldCV, setOldCV] = useState(null);
+ const [portfolioProjects, setPortfolioProjects] = useState([]);
+ const [newProject, setNewProject] = useState({ name: '', description: '', url: '' });
+ const [showPortfolioForm, setShowPortfolioForm] = useState(false);
+ const [feedbackMessage, setFeedbackMessage] = useState(null);
+ const [feedbackType, setFeedbackType] = useState(null); // Feedback type: success or error
+ const [errors, setErrors] = useState({});
+
+ // Context di autenticazione per prendere l'ID e il tipo di utente(mentor/mentee)
+ const { userId, userType } = useAuth();
+
+ // Funzioni per gestire quale form visualizzare e i dati del primo form
+ const [step, setStep] = useState(1);
+ const [formData, setFormData] = useState({
+ nome: '',
+ cognome: '',
+ genere: '',
+ titoloDiStudio: '',
+ competenze: '',
+ occupazione: '',
+ cv: null,
+ availability: null,
+ });
+ const [selectedFile, setSelectedFile] = useState(null);
+
+ // Funzione per la navigazione
+ const navigate = useNavigate();
+
+ // Prende i dati dall'utente e popola il form con i valori correnti
+ useEffect(() => {
+ const fetchUserProfile = async () => {
+ try {
+ const userData = await getUserByID(userId);
+
+ // Popola il CV e il portfolio
+ if (userData.cv) setOldCV(userData.cv);
+ if (userData.portfolioProjects) setPortfolioProjects(userData.portfolioProjects);
+ console.log("Dati utente: ");
+ console.dir(userData)
+
+ // Inizializza i dati del form con campi comuni
+ const initialData = {
+ nome: userData.nome || '',
+ cognome: userData.cognome || '',
+ email: userData.email || '',
+ dataNascita: userData.dataNascita || '',
+ genere: userData.sesso || '',
+ titoloDiStudio: userData.titoloDiStudio || '',
+ competenze: userData.competenze || '',
+ cv: userData.cv || null,
+ portfolioProjects: userData.portfolioProjects || [],
+ };
+
+ // Aggiunge campi specifici in base al ruolo(tipo) dell'utente
+ if (userType === 'mentee') {
+ initialData.field = userData.field || '';
+ } else if (userType === 'mentor') {
+ initialData.settoreIT = userData.occupazione || '';
+ initialData.availability = userData.availability || null;
+ initialData.occupazione = userData.impiego || '';
+ initialData.meetingMode = userData.meetingMode || '';
+ }
+
+ setFormData(initialData);
+ } catch (error) {
+ console.error('Errore durante il recupero del profilo:', error.message);
+ setFeedbackMessage('Errore nel caricamento dei dati utente.');
+ setFeedbackType('error');
+ }
+ };
+
+ fetchUserProfile();
+ }, [userId, userType]);
+
+ // Gestisce i cambiamenti dell'input del form
+ const handleInputChange = (e) => {
+ const { name, value } = e.target;
+ setFormData((prev) => ({ ...prev, [name]: value }));
+ setErrors((prev) => ({ ...prev, [name]: '' }));
+ };
+
+ // Gestisce la gestione del caricamento del CV
+ const handleFileChange = (event) => {
+ const file = event.target.files[0];
+ setSelectedFile(file);
+ };
+
+ // Aggiunge nuovo progetto al portfolio
+ const handleAddProject = () => {
+ if (newProject.name && newProject.description) {
+ setPortfolioProjects((prev) => [...prev, { ...newProject, id: Date.now().toString() }]);
+ setNewProject({ name: '', description: '', url: '' });
+ }
+ };
+
+ // Rimuove progetto dal portfolio
+ const handleRemoveProject = (id) => {
+ setPortfolioProjects((prev) => prev.filter((project) => project.id !== id));
+ };
+
+ // Valida il form in base allo step corrente
+ const validateForm = () => {
+ const newErrors = {};
+
+ if (step === 1) {
+ if (!formData.nome) newErrors.nome = 'Nome è obbligatorio';
+ if (!formData.cognome) newErrors.cognome = 'Cognome è obbligatorio';
+ if (!formData.genere) newErrors.genere = 'Genere è obbligatorio';
+ } else if (step === 2) {
+ if (!formData.titoloDiStudio) newErrors.titoloDiStudio = 'Titolo di studio è obbligatorio';
+ if (!formData.competenze) newErrors.competenze = 'Competenze sono obbligatorie';
+
+ if (userType === 'mentor') {
+ if (!formData.availability || formData.availability < 1 || formData.availability > 10) {
+ newErrors.availability = 'Seleziona una disponibilità valida (1-10 ore)';
+ }
+ } else if (userType === 'mentee') {
+ if (!formData.field) {
+ newErrors.field = 'Campo di interesse è obbligatorio per i Mentee';
+ }
+ }
+ }
+
+ setErrors(newErrors);
+ return Object.keys(newErrors).length === 0;
+ };
+
+ // Gestisce invio del form
+ const handleSubmit = async (e) => {
+ e.preventDefault();
+
+ if (!validateForm()) return;
+ console.log("[ModificaProfilo] PortfolioProjects = ");
+ console.log(portfolioProjects);
+ portfolioProjects.forEach((progetto) => {console.log(`progetto: ${progetto}`)});
+ try {
+ const submissionData = {
+ ...formData,
+ cv: selectedFile,
+ impiego: userType === 'mentor' ? formData.occupazione : null,
+ availability: userType === 'mentor' ? formData.availability : null,
+ occupazione: userType === 'mentor' ? formData.settoreIT : null,
+ field: userType === 'mentee' ? formData.field : null,
+ portfolioProjects: portfolioProjects,
+ };
+ console.log("[ModificaProfilo] Sto per inviare a updateUserWithCV i seguenti dati: ")
+ console.dir(submissionData);
+ const response = await updateUserProfileWithCV(userId, submissionData);
+
+ if (response.success) {
+ setFeedbackMessage('Modifica completata con successo. Verrai reindirizzato alla Home page tra 3 secondi.');
+ setFeedbackType('success');
+
+ setTimeout(() => {
+ navigate('/HomePageUtente');
+ }, 3000);
+ } else {
+ throw new Error(response.error);
+ }
+ } catch (err) {
+ console.error('Errore durante la modifica:', err.message);
+ setFeedbackMessage(err.message || 'Errore durante la modifica. Per favore riprova.');
+ setFeedbackType('error');
+ }
+ };
+
+ return (
+
+
+
+
+
+ Modifica Profilo
+ Compila il form per Modificare come {userType} {/*Intestazione del form*/}
+
+
+
+ {/*Messaggi di feedback*/}
+ {feedbackMessage && (
+
+
+ {feedbackType === 'success' ? (
+
+
+
+ ) : (
+
+
+
+ )}
+
+
{feedbackMessage}
+
setFeedbackMessage(null)}
+ className="text-sm font-medium text-gray-500 hover:text-gray-700"
+ >
+ ✕
+
+
+ )}
+
+
+
+ {/*Primo form (step = 1)*/}
+ {step === 1 && (
+
+
+ {/*Sezione del nome*/}
+
+
Nome
+
+ {errors.nome &&
{errors.nome}
}
+
+
+ {/*Sezione del cognome*/}
+
+
Cognome
+
+ {errors.cognome &&
{errors.cognome}
}
+
+
+
+ {/*Sezione del genere*/}
+
+
Genere
+
setFormData((prev) => ({ ...prev, genere: value }))}
+ className="flex items-center gap-2"
+ >
+
+
+ Maschio
+
+
+
+ Femmina
+
+
+
+ Altro
+
+
+ {errors.genere &&
{errors.genere}
}
+
+
+ )}
+
+ {/*Secondo form (step = 2)*/}
+ {step === 2 && (
+
+
+ {/*Sezione titolo di studio*/}
+
Titolo di Studio
+
setFormData((prev) => ({ ...prev, titoloDiStudio: value }))}
+ >
+
+
+
+
+ Diploma
+ Laurea
+ Master
+ Dottorato
+
+
+ {errors.titoloDiStudio &&
{errors.titoloDiStudio}
}
+
+
+ {/*Sezione competenze*/}
+
+
Competenze
+
+ {errors.competenze &&
{errors.competenze}
}
+
+
+ {/*Sezione campi per il mentore*/}
+ {userType === 'mentor' && (
+
+
+ {/*Sezione per l'occupazione*/}
+
Settore IT
+
setFormData((prev) => ({ ...prev, settoreIT: value }))}
+ >
+
+
+
+
+ Sviluppo Software
+ Sviluppo Web
+ Sviluppo Mobile
+ Data Science
+ Machine Learning
+ Intelligenza Artificiale
+ Cybersecurity
+ Cloud Computing
+ Networking
+ DevOps
+ Blockchain
+ Sviluppo Videogiochi
+ Supporto IT
+ Design UI/UX
+ Testing Software
+ Amministrazione Database
+ Robotica
+ Internet of Things (IoT)
+ Trasformazione Digitale
+ Big Data
+
+
+ {errors.occupazione &&
{errors.occupazione}
}
+
+ )}
+
+ {/*Campo disponibilità ore settimanali*/}
+ {userType === "mentor" && (
+
+
Disponibilità (ore settimanali)
+
+ {[...Array(10)].map((_, i) => (
+
+ setFormData((prev) => ({ ...prev, availability: i + 1 }))
+ }
+ >
+ {i + 1}
+
+ ))}
+
+ {errors.availability && (
+
{errors.availability}
+ )}
+
+ )}
+
+ {/*Campo per l'impiego (occupazione)*/}
+ {userType === "mentor" && (
+
+
Impiego
+
+ setFormData((prev) => ({ ...prev, occupazione: e.target.value }))
+ }
+ placeholder="Inserisci il tuo impiego"
+ className="border border-gray-300 rounded px-2 py-1 w-full"
+ />
+ {errors.impiego && (
+
+ {errors.impiego}
+
+ )}
+
+ )}
+
+ {/*Campo modalità incontro*/}
+ {userType === "mentor" && (
+
+
Modalità di incontro
+
+ setFormData((prev) => ({ ...prev, meetingMode: value }))
+ }
+ >
+
+
+
+
+ Online
+ Di persona
+ Ibrida
+
+
+ {errors.meetingMode && (
+
+ {errors.meetingMode}
+
+ )}
+
+ )}
+
+ {/*SEZIONI CAMPO DI INTERESSE PER IL MENTEE:
+
+ Sezione campo di interesse per il mentee*/}
+ {userType === 'mentee' && (
+
+
Campo di Interesse
+
setFormData((prev) => ({ ...prev, field: value }))}
+ >
+
+
+
+
+ Sviluppo Software
+ Sviluppo Web
+ Sviluppo Mobile
+ Data Science
+ Machine Learning
+ Intelligenza Artificiale
+ Cybersecurity
+ Cloud Computing
+ Networking
+ DevOps
+ Blockchain
+ Sviluppo Videogiochi
+ Supporto IT
+ Design UI/UX
+ Testing Software
+ Amministrazione Database
+ Robotica
+ Internet of Things (IoT)
+ Trasformazione Digitale
+ Big Data
+
+
+ {errors.field &&
{errors.field}
}
+
+ )}
+ {/*Campo per caricare il CV*/}
+
+
Carica nuovo CV
+
+ {oldCV && (
+
+ )}
+
+
+ {/*Campo per aggiornare il portfolio*/}
+
+
Portfolio (opzionale)
+ {portfolioProjects.map((project) => (
+
+
+
{project.name}
+
{project.description}
+ {project.url && (
+
+ {project.url}
+
+ )}
+
+
handleRemoveProject(project.id)}
+ className="text-red-500"
+ >
+
+
+
+ ))}
+ {showPortfolioForm ? (
+
+ ) : (
+
setShowPortfolioForm(true)}
+ variant="outline"
+ className="w-full border-dashed text-emerald-600 hover:bg-emerald-50 hover:text-emerald-600"
+ >
+ + Aggiungi al Portfolio
+
+ )}
+
+
+ )}
+
+
+ {/*Bottone per andare indietro*/}
+
+ {step > 1 && (
+ setStep((prev) => prev - 1)}
+ className="border-[#178563] text-[#178563] hover:bg-[#178563] hover:text-white"
+ >
+ Indietro
+
+ )}
+ {/*Bottone per andare avanti*/}
+ {step < 2 ? (
+ {
+ if (validateForm()) setStep((prev) => prev + 1);
+ }}
+ >
+ Avanti
+
+ ) : (
+
+ Modifica
+
+ )}
+
+
+
+ );
+}
+
+
+export default ModificaProfilo
\ No newline at end of file
diff --git a/app/src/components/pages/Notifica.jsx b/app/src/components/pages/Notifica.jsx
new file mode 100644
index 0000000..ade8629
--- /dev/null
+++ b/app/src/components/pages/Notifica.jsx
@@ -0,0 +1,77 @@
+//notifica
+import { useState, useEffect } from 'react';
+import NotificationCard from '@/components/ui/NotificationCard';
+import Header from '@/components/ui/Header';
+import { getByDest, deleteNotifica, getCurrentNotificaId } from '@/dao/notificaDAO';
+import { useAuth } from '@/auth/auth-context';
+import { initializeMentorship } from '@/dao/mentorshipSessionDAO';
+import {removeExpiredNotifications} from '@/dao/notificaDAO';
+
+export default function NotificationsPage() {
+ const [notifications, setNotifications] = useState([]);
+ const { userId } = useAuth();
+
+ // Carica notifiche all'avvio
+ useEffect(() => {
+ const fetchNotifications = async () => {
+ try {
+ await removeExpiredNotifications();
+ const notificationsList = await getByDest(userId);
+
+ // Ordinare le notifiche per data (dalla più recente alla meno recente)
+ const sortedNotifications = notificationsList.sort((a, b) => b.timeStamp.toMillis() - a.timeStamp.toMillis());
+
+ console.log(sortedNotifications);
+
+ setNotifications(sortedNotifications);
+ } catch (error) {
+ alert('Errore nel recupero delle notifiche:' + error);
+ }
+ };
+
+ fetchNotifications();
+ }, [userId]);
+
+ // Segna come letto (elimina la notifica)
+ const handleMarkAsRead = async (id) => {
+ try {
+ await deleteNotifica(id);
+ setNotifications((prev) => prev.filter((notification) => notification.id !== id));
+ } catch (error) {
+ alert('Errore nell\'eliminazione della notifica:' + error);
+ }
+ };
+
+ // Visualizza dettaglio della notifica
+ /*const handleView = async (notification) => {
+ const id = getCurrentNotificaId(notification);
+ if (id) {
+ await deleteNotifica(id); // Elimina dopo la visualizzazione
+ navigate(`/notification-detail/${id}`);
+ }
+ }; */
+ const createMentorship = (notification) => {
+ initializeMentorship(notification.destinatario, notification.mittente);
+ handleMarkAsRead(notification.id);
+
+ };
+
+ return (
+
+
+
+ Notifiche
+
+ {notifications.map((notification) => (
+ handleMarkAsRead(notification.id)} // Passa la funzione per segnare come letta
+ onAccettaMentorship={() => createMentorship(notification)} // Passa la funzione per accettare la mentorship
+ />
+ ))}
+
+
+
+ );
+}
diff --git a/app/src/components/pages/RegistrationPage.jsx b/app/src/components/pages/RegistrationPage.jsx
new file mode 100644
index 0000000..dbfb737
--- /dev/null
+++ b/app/src/components/pages/RegistrationPage.jsx
@@ -0,0 +1,626 @@
+import { useState } from 'react'
+import { Button } from "@/components/ui/button"
+import { Card, CardContent, CardDescription, CardHeader, CardTitle, CardFooter } from "@/components/ui/card"
+import { Input } from "@/components/ui/input"
+import { Label } from "@/components/ui/label"
+import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"
+import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
+import { Textarea } from "@/components/ui/textarea"
+import { X, Plus } from 'lucide-react'
+import Header from "@/components/ui/Header"
+import { registerUser } from '@/auth/user-registration'
+import { useNavigate } from "react-router-dom";
+
+
+function RegistrationForm() {
+ const [step, setStep] = useState(1)
+ const [userType, setUserType] = useState('')
+ const [formData, setFormData] = useState({
+ nome: '',
+ cognome: '',
+ email: '',
+ password: '',
+ dataDiNascita: '',
+ genere: '',
+ titoloDiStudio: '',
+ competenze: '',
+ occupazione: '',
+ cv: null,
+ userType: '',
+ availability: null,
+ })
+ const [portfolioProjects, setPortfolioProjects] = useState([])
+ const [newProject, setNewProject] = useState({ name: '', description: '', url: '' })
+ const [showPortfolioForm, setShowPortfolioForm] = useState(false)
+ const [feedbackMessage, setFeedbackMessage] = useState(null);
+ const [feedbackType, setFeedbackType] = useState(null); // Tipo di feedback (successo o errore)
+ const [errors, setErrors] = useState({})
+
+ const handleInputChange = (e) => {
+ const { name, value } = e.target;
+ setFormData(prev => ({ ...prev, [name]: value }));
+ setErrors(prev => ({ ...prev, [name]: '' }));
+ };
+
+const [selectedFile, setSelectedFile] = useState(null);
+const handleFileChange = (event) => {
+ const file = event.target.files[0];
+ setSelectedFile(file); // Aggiorna lo stato con il file selezionato
+};
+ const handleAddProject = () => {
+ if (newProject.name && newProject.description) {
+ setPortfolioProjects(prev => [...prev, { ...newProject, id: Date.now().toString() }]);
+ setNewProject({ name: '', description: '', url: '' });
+ }
+ };
+
+ const handleRemoveProject = (id) => {
+ setPortfolioProjects(prev => prev.filter(project => project.id !== id));
+ };
+
+ const validateForm = () => {
+ const newErrors = {};
+ if (step === 1) {
+ if (!formData.nome) newErrors.nome = 'Nome è obbligatorio';
+ if (!formData.cognome) newErrors.cognome = 'Cognome è obbligatorio';
+ if (!formData.email) newErrors.email = 'Email è obbligatorio';
+ else if (!/\S+@\S+\.\S+/.test(formData.email)) newErrors.email = 'Email non valido';
+ if (!formData.password) newErrors.password = 'Password è obbligatorio';
+ if (!formData.dataDiNascita) newErrors.dataDiNascita = 'Data di nascita è obbligatorio';
+ if (!formData.genere) newErrors.genere = 'Genere è obbligatorio';
+ } else if (step === 2) {
+ if (!formData.userType) newErrors.userType = 'Tipo di utente è obbligatorio';
+ if (!formData.titoloDiStudio) newErrors.titoloDiStudio = 'Titolo di studio è obbligatorio';
+ if (!formData.competenze) newErrors.competenze = 'Competenze sono obbligatorie';
+ if (formData.userType === "mentor") {
+ if (!formData.occupazione) newErrors.occupazione = "Il Settore IT è obbligatorio"
+ if (
+ !formData.availability ||
+ formData.availability < 1 ||
+ formData.availability > 10
+ ) {
+ newErrors.availability = "Seleziona una disponibilità valida (1-10 ore)";
+ }
+ } else if (formData.userType === "mentee") {
+ if (!formData.field) {
+ newErrors.field = "Campo di interesse è obbligatorio per i Mentee";
+ }
+ }
+ }
+
+
+ setErrors(newErrors);
+ return Object.keys(newErrors).length === 0;
+ };
+
+
+ const navigate = useNavigate();
+ const handleSubmit = async (e) => {
+ e.preventDefault();
+
+ if (!validateForm()) return;
+
+ try {
+ // Passa il formData con il file CV e gli altri dati
+ const response = await registerUser(
+ {
+ ...formData,
+ cv: selectedFile, // Include il file selezionato
+ availability: formData.userType === "mentor" ? formData.availability : null,
+ field: formData.userType === "mentee" ? formData.field : null, // Include il campo di interesse per i Mentee
+ },
+ portfolioProjects
+ );
+
+
+ if (response.success) {
+ setFeedbackMessage(
+ "Registrazione completata con successo. Verrai reindirizzato alla Home page tra 3 secondi."
+ );
+ setFeedbackType("success");
+
+ // Reindirizza alla pagina di login dopo 3 secondi
+ setTimeout(() => {
+ navigate("/login");
+ }, 3000);
+ } else {
+ throw new Error(response.error);
+ }
+ } catch (err) {
+ console.error("Errore durante la registrazione:", err.message);
+ setFeedbackMessage(
+ err.message || "Errore durante la registrazione. Per favore riprova."
+ );
+ setFeedbackType("error");
+ }
+ };
+
+
+
+
+ return (
+ <>
+
+
+
+
+
+ Registrazione Mentore o Mentee
+ Compila il form per registrarti come Mentore o Mentee
+
+
+ {feedbackMessage && (
+
+
+ {feedbackType === "success" ? (
+
+
+
+ ) : (
+
+
+
+ )}
+
+
{feedbackMessage}
+
setFeedbackMessage(null)}
+ className="text-sm font-medium text-gray-500 hover:text-gray-700"
+ >
+ ✕
+
+
+ )}
+
+
+ {step === 1 && (
+
+
+
+
Nome
+
+ {errors.nome &&
{errors.nome}
}
+
+
+
Cognome
+
+ {errors.cognome &&
{errors.cognome}
}
+
+
+
+
Email
+
+ {errors.email &&
{errors.email}
}
+
+
+
Password
+
+ {errors.password &&
{errors.password}
}
+
+
+
Data di Nascita
+
+ {errors.dataDiNascita &&
{errors.dataDiNascita}
}
+
+
+
Genere
+
setFormData(prev => ({ ...prev, genere: value }))}
+ className="flex items-center gap-2"
+ >
+
+
+ Maschio
+
+
+
+ Femmina
+
+
+
+ Altro
+
+
+ {errors.genere &&
{errors.genere}
}
+
+
+ )}
+ {step === 2 && (
+
+
+
Titolo di Studio
+
setFormData(prev => ({ ...prev, titoloDiStudio: value }))}
+ >
+
+
+
+
+ Diploma
+ Laurea
+ Master
+ Dottorato
+
+
+ {errors.titoloDiStudio &&
+
{errors.titoloDiStudio}
}
+
+
+
+
Competenze
+
+ {errors.competenze &&
{errors.competenze}
}
+
+ {userType === "mentor" && (
+
+
Settore IT
+
+ setFormData((prev) => ({ ...prev, occupazione: value }))
+ }
+ >
+
+
+
+
+ Sviluppo Software
+ Sviluppo Web
+ Sviluppo Mobile
+ Data Science
+ Machine Learning
+
+ Intelligenza Artificiale
+
+ Cybersecurity
+ Cloud Computing
+ Networking
+ DevOps
+ Blockchain
+ Sviluppo Videogiochi
+ Supporto IT
+ Design UI/UX
+ Testing Software
+
+ Amministrazione Database
+
+ Robotica
+ Internet of Things (IoT)
+
+ Trasformazione Digitale
+
+ Big Data
+
+
+ {errors.occupazione && (
+
+ {errors.occupazione}
+
+ )}
+
+)}
+
+
+{userType === "mentee" && (
+
+
Campo di Interesse
+
+ setFormData((prev) => ({ ...prev, field: value }))
+ }
+ >
+
+
+
+
+ Sviluppo Software
+ Sviluppo Web
+ Sviluppo Mobile
+ Data Science
+ Machine Learning
+
+ Intelligenza Artificiale
+
+ Cybersecurity
+ Cloud Computing
+ Networking
+ DevOps
+ Blockchain
+ Sviluppo Videogiochi
+ Supporto IT
+ Design UI/UX
+ Testing Software
+
+ Amministrazione Database
+
+ Robotica
+ Internet of Things (IoT)
+
+ Trasformazione Digitale
+
+ Big Data
+
+
+ {errors.field && (
+
+ {errors.field}
+
+ )}
+
+)}
+
+
+ {userType === "mentor" && (
+
+
Disponibilità (ore settimanali)
+
+ {[...Array(10)].map((_, i) => (
+
+ setFormData((prev) => ({ ...prev, availability: i + 1 }))
+ }
+ >
+ {i + 1}
+
+
+ ))}
+
+ {errors.availability && (
+
{errors.availability}
+ )}
+
+ )}
+
+{userType === "mentor" && (
+
+ {/* Stringa impiego per i mentor */}
+
Impiego
+
+ setFormData((prev) => ({ ...prev, impiego: e.target.value }))
+ }
+ placeholder="Inserisci il tuo impiego"
+ className="border border-gray-300 rounded px-2 py-1 w-full"
+ />
+ {errors.impiego && (
+
+ {errors.impiego}
+
+ )}
+
+)}
+
+
+
+
+{userType === "mentor" && (
+ <>
+
+
Modalità di incontro
+
+ setFormData((prev) => ({ ...prev, meetingMode: value }))
+ }
+ >
+
+
+
+
+ Online
+ Di persona
+ Ibrida
+
+
+ {errors.meetingMode && (
+
+ {errors.meetingMode}
+
+ )}
+
+ >
+)}
+
+
+
+
+
+
+
+
Tipo di Utente
+
{
+ setUserType(value)
+ setFormData(prev => ({ ...prev, userType: value }))
+ }}
+ className="flex items-center gap-4"
+ >
+
+
+ Mentee
+
+
+
+ Mentore
+
+
+ {errors.userType &&
{errors.userType}
}
+
+
+ CV (opzionale)
+
+
+
+
Portfolio (opzionale)
+ {portfolioProjects.map(project => (
+
+
+
{project.name}
+
{project.description}
+ {project.url &&
{project.url} }
+
+
handleRemoveProject(project.id)} className="text-red-500">
+
+
+
+ ))}
+ {showPortfolioForm ? (
+
+ ) : (
+
setShowPortfolioForm(true)} variant="outline" className="w-full border-dashed text-emerald-600 hover:bg-emerald-50 hover:text-emerald-600">
+ + Aggiungi al Portfolio
+
+ )}
+
+
+ )}
+
+
+
+ {step > 1 && (
+ setStep(prev => prev - 1)}
+ className="border-[#178563] text-[#178563] hover:bg-[#178563] hover:text-white"
+ >
+ Indietro
+
+ )}
+ {step < 2 ? (
+ {
+ if (validateForm()) setStep(prev => prev + 1)
+ }}
+ >
+ Avanti
+
+ ) : (
+
+ Registrati
+
+ )}
+
+
+
+ >
+ )
+}
+
+export default RegistrationForm
\ No newline at end of file
diff --git a/app/src/components/pages/Supporto.jsx b/app/src/components/pages/Supporto.jsx
new file mode 100644
index 0000000..5f41718
--- /dev/null
+++ b/app/src/components/pages/Supporto.jsx
@@ -0,0 +1,195 @@
+import { useEffect, useState } from "react"; // Usa React hooks
+import Header from "../ui/Header"; // Importa il componente Header
+import { getAllMentors } from "@/dao/supportoDAO"; // Importa la funzione dal DAO per ottenere tutti i mentori
+import { Card, CardContent } from "@/components/ui/card"; // Importa i componenti per le cards
+import { Button } from "@/components/ui/button"; // Importa il componente Button
+import { Phone, Mail } from "lucide-react"; // Importa le icone
+import { useNavigate } from "react-router-dom";
+import { useAuth } from "@/auth/auth-context";
+
+// Importazione dei componenti Select
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+} from "@/components/ui/select";
+
+export default function SupportPage() {
+ const [mentors, setMentors] = useState([]); // Stato per memorizzare i mentori
+ const [loading, setLoading] = useState(true); // Stato per la gestione del caricamento
+ const navigate = useNavigate(); // Inizializza useNavigate
+ const [selectedProblem, setSelectedProblem] = useState(""); // Stato per il problema selezionato
+ const { userType } = useAuth();
+
+ useEffect(() => {
+ const loadMentors = async () => {
+ const result = await getAllMentors(); // Chiama il DAO per ottenere i mentori
+ if (result.success) {
+ setMentors(result.data); // Imposta i mentori ricevuti nel state
+ } else {
+ console.error("Errore nel recupero dei mentori:", result.error);
+ }
+ setLoading(false); // Termina il caricamento
+ };
+ loadMentors(); // Carica i mentori al montaggio del componente
+ }, []);
+
+ if (loading) {
+ return (
+
+
+ Caricamento mentori...
+
+
+ );
+ }
+
+ const associations = [
+ {
+ name: "Telefono Rosa",
+ description: "Supporto per donne vittime di violenza",
+ phone: "1522",
+ email: "telefonorosa@mail.com",
+ },
+ {
+ name: "D.i.Re - Donne in Rete contro la violenza",
+ description: "Rete nazionale antiviolenza",
+ phone: "+39 06 6780537",
+ email: "segreteria@direcontrolaviolenza.it",
+ },
+ {
+ name: "Casa delle Donne per non subire violenza",
+ description: "Centro antiviolenza di Bologna",
+ phone: "+39 051 333173",
+ email: "casadonne@women.it",
+ },
+ ];
+
+ return (
+
+
{/* Aggiungi l'header */}
+
+ {userType === "mentee" && ( // Mostra solo se l'utente è un mentee
+
+
Richiedi Supporto
+ setSelectedProblem(value)}>
+
+
+
+
+ Bullying
+ Discrimination
+ Harassment
+ Work-Life Balance
+
+
+
+ )}
+
+
+
Mentori Disponibili
+
+ {mentors.map((mentor) => (
+
+
+
+ {mentor.nome} {mentor.cognome}
+
+ Occupazione: {mentor.occupazione}
+ Competenze:
+
+ {(mentor.competenze.split(",") || [mentor.competenze]).map((competenza, index) => (
+ {competenza.trim()}
+ ))}
+
+ {
+ window.location.href = `/dettagli/${mentor.id}`;
+ }}
+ >
+ Visualizza Mentore
+
+ {
+ if (!selectedProblem) {
+ console.warn("Devi selezionare un problema prima di contattare un mentore.");
+ return;
+ }
+ if (!mentor.id) {
+ console.error("Mentor ID non disponibile.");
+ return;
+ }
+ navigate("/chat-support", {
+ state: { mentorId: mentor.id, problemType: selectedProblem }, // Passa mentorId e problemType come stato
+ });
+ }}
+ disabled={!selectedProblem} // Disabilita se nessun problema è selezionato
+ >
+ Contatta Mentore
+
+
+
+ ))}
+
+
+
+
navigate("/chat-list")}
+ className="fixed bottom-8 right-8 z-50 flex items-center px-6 py-3 bg-gradient-to-r from-blue-500 to-indigo-600 hover:from-blue-600 hover:to-indigo-700 text-white text-lg font-semibold rounded-full shadow-lg transition duration-300"
+ >
+
+
+
+ Chat Supporto
+
+
+
+
Associazioni di Supporto
+
+ {associations.map((association) => (
+
+
+
+
{association.name}
+
{association.description}
+
+
+
+
+
{association.phone}
+
+
+
+ {association.email}
+
+
+
+ Visita il sito web
+
+
+
+ ))}
+
+
+
+
+ );
+}
diff --git a/app/src/components/pages/SupportoFemminile.jsx b/app/src/components/pages/SupportoFemminile.jsx
new file mode 100644
index 0000000..1a1f8f4
--- /dev/null
+++ b/app/src/components/pages/SupportoFemminile.jsx
@@ -0,0 +1,100 @@
+import { useEffect, useState } from "react";
+import { Button } from "@/components/ui/button";
+import { Card, CardContent } from "@/components/ui/card";
+import Header from "../ui/Header";
+import { getMentoriFemmina } from "@/dao/supportoDAO"; // Assicurati che il percorso sia corretto
+
+export default function SupportoFemminile() {
+ const [mentori, setMentori] = useState([]);
+ const [loading, setLoading] = useState(true);
+
+ // Carica i mentori quando il componente è montato
+ useEffect(() => {
+ const fetchMentori = async () => {
+ try {
+ console.log("Caricamento mentori femmina in corso...");
+ const response = await getMentoriFemmina();
+ if (response.success) {
+ setMentori(response.data);
+ console.log("Mentori caricati:", response.data);
+ } else {
+ console.error("Errore durante il recupero dei mentori:", response.error);
+ }
+ } catch (error) {
+ console.error("Errore durante il recupero dei mentori:", error);
+ } finally {
+ setLoading(false);
+ }
+ };
+ fetchMentori();
+ }, []);
+
+ return (
+
+
+
+
+
+
+
+
Rete di Supporto Femminile
+
+ Offriamo un ambiente di supporto dedicato alle donne, fornendo mentorship, risorse e una
+ comunità per crescere sia personalmente che professionalmente.
+
+
+
+
+
I Nostri Mentori e Aree di Supporto
+
+ Scopri i nostri esperti mentori e le aree di supporto disponibili per il tuo sviluppo personale e professionale.
+
+
+
+ {loading ? (
+
+
Caricamento in corso...
+
+ ) : (
+
+ {mentori.length > 0 ? (
+ mentori.map((mentore) => (
+
+
+
+
+ {mentore.nome[0]}
+
+
+
+ {mentore.nome} {mentore.cognome}
+
+
{mentore.occupazione}
+
+
+
+
Competenze:
+
{mentore.competenze || "Non specificato"}
+
{
+ window.location.href = `/dettagli/${mentore.id}`;
+ }}
+ >
+ Visualizza Mentore
+
+
+
+
+ ))
+ ) : (
+
+
Nessun mentore trovato.
+
+ )}
+
+ )}
+
+
+ );
+}
diff --git a/app/src/components/pages/Video.jsx b/app/src/components/pages/Video.jsx
new file mode 100644
index 0000000..2946af3
--- /dev/null
+++ b/app/src/components/pages/Video.jsx
@@ -0,0 +1,79 @@
+import { useState, useEffect } from "react";
+import { Link } from "react-router-dom";
+import Header from "../ui/Header";
+import VideoCard from "../ui/VideoCard"; // Importa VideoCard
+import { getDocs, collection, getFirestore } from "firebase/firestore";
+import app from '@/firebase/firebase';
+import { useAuth } from "@/auth/auth-context"; // Importa il contesto di autenticazione
+
+export default function Video() {
+ const { userType } = useAuth(); // Ottieni il ruolo dell'utente dal contesto
+ const [videos, setVideos] = useState([]);
+ const [loading, setLoading] = useState(true);
+ const db = getFirestore(app);
+
+ useEffect(() => {
+ async function fetchVideos() {
+ try {
+ const querySnapshot = await getDocs(collection(db, "videos"));
+ const videosData = querySnapshot.docs.map((doc) => ({
+ id: doc.id,
+ ...doc.data(),
+ }));
+ setVideos(videosData);
+ } catch (error) {
+ console.error("Errore nel caricamento dei dati:", error);
+ } finally {
+ setLoading(false);
+ }
+ }
+
+ fetchVideos();
+ }, []);
+
+ return (
+
+
+
+ Contenuti Video
+
+ {/* Condizione per mostrare il pulsante solo se l'utente è admin o mentor */}
+ {(userType === "admin" || userType === "mentor") && (
+
+
+ Aggiungi video
+
+
+ )}
+
+ {loading ? (
+ Caricamento...
+ ) : (
+
+ {videos.map((video) => (
+
+
+
+ ))}
+
+ )}
+
+
+ );
+}
diff --git a/app/src/components/pages/meeting-summary.jsx b/app/src/components/pages/meeting-summary.jsx
new file mode 100644
index 0000000..93b7d37
--- /dev/null
+++ b/app/src/components/pages/meeting-summary.jsx
@@ -0,0 +1,140 @@
+import React, { useState, useEffect } from "react";
+import { useParams } from "react-router-dom";
+import { fetchMeetingDetails, updateMeetingMinutes } from "@/dao/meetingsDAO";
+import Header from "@/components/ui/Header";
+import { Button } from "@/components/ui/button";
+
+function MeetingSummary() {
+ const { meetingid } = useParams(); // Ottiene l'ID del meeting dai parametri dell'URL
+ const [meeting, setMeeting] = useState(null); // Stato per i dati del meeting
+ const [loading, setLoading] = useState(true); // Stato per il caricamento
+ const [error, setError] = useState(null); // Stato per eventuali errori
+ const [successMessage, setSuccessMessage] = useState(""); // Stato per il messaggio di successo
+
+ useEffect(() => {
+ const fetchMeeting = async () => {
+ try {
+ const meetingData = await fetchMeetingDetails(meetingid); // Recupera i dettagli del meeting
+ setMeeting(meetingData); // Aggiorna lo stato con i dati del meeting
+ } catch (err) {
+ setError(err.message); // Gestisce eventuali errori
+ } finally {
+ setLoading(false); // Termina il caricamento
+ }
+ };
+
+ if (meetingid) fetchMeeting();
+ }, [meetingid]);
+
+ const handleSaveMinutes = async (minuta) => {
+ try {
+ await updateMeetingMinutes(meetingid, minuta); // Aggiorna le note del meeting
+ setSuccessMessage("Informazioni salvate con successo!");
+ } catch (err) {
+ alert("Errore nel salvataggio delle note:" + error);
+ }
+ };
+
+ const handleSubmitForm = () => {
+ // Verifica se ci sono modifiche prima di inviare i dati
+ const { summary, additionalInfo, notes } = meeting;
+ const minuta = {
+ summary: summary || "", // Usa una stringa vuota se "summary" è undefined o falsy
+ additionalInfo: additionalInfo || "", // Usa una stringa vuota se "additionalInfo" è undefined o falsy
+ notes: notes || "" // Cambiato da array a stringa vuota
+ };
+ handleSaveMinutes(minuta);
+ };
+
+ if (loading) {
+ return Caricamento...
;
+ }
+
+ if (error) {
+ return Errore: {error}
;
+ }
+
+ if (!meeting) {
+ return Meeting non trovato.
;
+ }
+
+ return (
+
+
+
+
+
+
+
+ {meeting.menteeInitials}
+
+
+
Post-Meeting: {meeting.menteeName}
+
+ Data dell'incontro: {meeting.date.toDate().toLocaleDateString("it-IT")}
+
+
+
+
+
+
+
+ {successMessage && (
+
+ {successMessage}
+
+ )}
+
+ {/* Meeting Summary */}
+
+
+
Riepilogo dell'Incontro
+ setMeeting({ ...meeting, summary: e.target.value })}
+ placeholder="Aggiungi un riepilogo"
+ />
+
+
+
+ {/* Additional Information */}
+
+
+
Informazioni Aggiuntive
+ setMeeting({ ...meeting, additionalInfo: e.target.value })}
+ placeholder="Aggiungi informazioni aggiuntive"
+ />
+
+
+
+ {/* Notes */}
+
+
+
Note e Feedback
+ setMeeting({ ...meeting, notes: e.target.value })}
+ placeholder="Aggiungi una nuova nota..."
+ />
+
+
+
+
+ Invia Dati
+
+
+
+
+ );
+}
+
+export default MeetingSummary;
diff --git a/app/src/components/pages/meeting-summaryformentee.jsx b/app/src/components/pages/meeting-summaryformentee.jsx
new file mode 100644
index 0000000..42116d1
--- /dev/null
+++ b/app/src/components/pages/meeting-summaryformentee.jsx
@@ -0,0 +1,103 @@
+import React, { useState, useEffect } from "react";
+import { useParams } from "react-router-dom";
+import { fetchMeetingDetails } from "@/dao/meetingsDAO";
+import Header from "@/components/ui/Header";
+
+function MeetingSummaryMentee() {
+ const { meetingid } = useParams(); // Ottiene l'ID del meeting dai parametri dell'URL
+ const [meeting, setMeeting] = useState(null); // Stato per i dati del meeting
+ const [loading, setLoading] = useState(true); // Stato per il caricamento
+ const [error, setError] = useState(null); // Stato per eventuali errori
+
+ useEffect(() => {
+ const fetchMeeting = async () => {
+ try {
+ const meetingData = await fetchMeetingDetails(meetingid); // Recupera i dettagli del meeting
+ setMeeting(meetingData); // Aggiorna lo stato con i dati del meeting
+ } catch (err) {
+ setError(err.message); // Gestisce eventuali errori
+ } finally {
+ setLoading(false); // Termina il caricamento
+ }
+ };
+
+ if (meetingid) fetchMeeting();
+ }, [meetingid]);
+
+ if (loading) {
+ return Caricamento...
;
+ }
+
+ if (error) {
+ return Errore: {error}
;
+ }
+
+ if (!meeting) {
+ return Meeting non trovato.
;
+ }
+
+ const { menteeName, mentorName, date, time, topic, description, minuta } = meeting;
+
+ return (
+
+
+
+
+
+
+
+ {menteeName.slice(0, 1)} {/* Iniziale del mentee */}
+
+
+
Post-Meeting: {menteeName}
+
+ Data dell'incontro: {date.toDate().toLocaleDateString("it-IT")}
+
+
+
+
+
+
+
+
+ {/* Meeting Summary */}
+
+
+
Riepilogo dell'Incontro
+
{description}
+
+
+
+ {/* Meeting Details */}
+
+
+
Dettagli dell'Incontro
+
Mentore: {mentorName}
+
Orario: {time}
+
Argomento: {topic}
+
+
+
+ {/* Minuta */}
+{minuta && (
+
+
+
Minuta dell'Incontro
+ {/* Itera sulla mappa `minuta` per stampare le chiavi e i valori */}
+
+ {Object.entries(minuta).map(([key, value]) => (
+
+ {key}: {value}
+
+ ))}
+
+
+
+)}
+
+
+
+ );
+}
+
+export default MeetingSummaryMentee;
diff --git a/app/src/components/pages/mentee-statistics.jsx b/app/src/components/pages/mentee-statistics.jsx
new file mode 100644
index 0000000..4561424
--- /dev/null
+++ b/app/src/components/pages/mentee-statistics.jsx
@@ -0,0 +1,71 @@
+import React, { useState, useEffect } from "react";
+import Header from "@/components/ui/Header";
+import { getUserByID } from "@/dao/userDAO"; // Aggiungi l'import delle funzioni DAO
+import { jsPDF } from "jspdf"; // Importa jsPD
+import { useAuth } from "@/auth/auth-context";
+
+export default function Statistics() {
+ const [user, setUser] = useState(null);
+ const [meetingsCount, setMeetingsCount] = useState(0);
+ const { userId } = useAuth();
+
+ useEffect(() => {
+ const fetchUserData = async () => {
+ try {
+ const userData = await getUserByID(userId); // Recupera i dati dell'utente da Firestore
+ setUser(userData); // Salva i dati dell'utente
+ setMeetingsCount(userData.meetingsCount || 0); // Ottieni il meetingsCount (default a 0 se non esiste)
+ } catch (error) {
+ alert("Errore durante il recupero dei dati dell'utente:" + error);
+ }
+ };
+
+ fetchUserData();
+ }, [userId]);
+
+ const downloadPDF = () => {
+ const doc = new jsPDF();
+
+ doc.setFontSize(18);
+ doc.text("Le Tue Statistiche", 20, 20);
+
+ doc.setFontSize(12);
+ doc.text(`Eventi Prenotati: ${meetingsCount}`, 20, 40);
+ doc.text(`Feedback Rilasciati: ${meetingsCount}`, 20, 50);
+
+ doc.save("statistiche.pdf");
+ };
+
+ if (!user) {
+ return Loading...
;
+ }
+
+ return (
+
+
+
+
+
+
Le Tue Statistiche
+
+ DOWNLOAD PDF
+
+
+
+
+ Eventi Prenotati
+ {meetingsCount}
+
+
+ Feedback Rilasciati
+ {meetingsCount}
+
+
+
+
+
+ );
+}
diff --git a/app/src/components/pages/mentor-search-form.jsx b/app/src/components/pages/mentor-search-form.jsx
new file mode 100644
index 0000000..0706eeb
--- /dev/null
+++ b/app/src/components/pages/mentor-search-form.jsx
@@ -0,0 +1,370 @@
+import * as React from "react";
+import Header from "../ui/Header";
+import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+} from "@/components/ui/select";
+import { Button } from "@/components/ui/button";
+import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group";
+import { Label } from "@/components/ui/label";
+import { getMentors } from "@/dao/mentorDAO"; // Aggiorna il percorso in base alla tua struttura
+import { useAuth } from "@/auth/auth-context";
+import { useNavigate } from "react-router-dom"; // Per reindirizzare al login
+
+
+
+
+
+export function MentorSearchForm() {
+ const [mentors, setMentors] = React.useState([]);
+ const [loading, setLoading] = React.useState(false);
+ const [error, setError] = React.useState("");
+ const { userType, isLoggedIn } = useAuth(); // Ottieni tipo di utente e stato di login
+
+ const navigate = useNavigate();
+
+ React.useEffect(() => {
+ if (isLoggedIn === false) {
+ setError("login-required");
+ } else if (isLoggedIn === true && userType !== "mentee") {
+ setError("access-denied");
+ } else {
+ setError(null); // Resetta errori se tutto è corretto
+ }
+ }, [isLoggedIn, userType]);
+
+
+
+
+ const [criteria, setCriteria] = React.useState({
+ occupation: "", // Campo principale per la ricerca
+ availability: 1,
+ meetingMode: "online",
+ });
+
+
+ if (error === "access-denied") {
+ return (
+
+
+
Accesso Negato
+
+ Questa pagina è riservata ai mentee.
+
+
navigate("/")}
+ className="w-full py-2 text-white bg-[#22A699] hover:bg-[#178563] rounded-lg transition font-medium"
+ >
+ Torna alla Home
+
+
+
+ );
+ }
+
+
+
+ if (userType !== "mentee") {
+ return (
+
+
+
Accesso Negato
+
+ Questa pagina è riservata ai mentee.
+
+
navigate("/")}
+ className="w-full py-2 text-white bg-[#22A699] hover:bg-[#178563] rounded-lg transition font-medium"
+ >
+ Torna alla Home
+
+
+
+ );
+ }
+
+
+
+ const searchMentors = async (filters) => {
+ setLoading(true);
+ setError("");
+
+ try {
+ const mentorList = await getMentors(filters);
+ setMentors(mentorList);
+
+ if (mentorList.length === 0) {
+ setError("Nessun mentore trovato.");
+ }
+ } catch (err) {
+ console.error(err);
+ setError("Devi selezionare un campo di interesse per avviare la ricerca.");
+ } finally {
+ setLoading(false);
+ }
+ };
+
+
+ const handleSearch = async () => {
+ await searchMentors({
+ occupation: criteria.occupation,
+ availability: criteria.availability,
+ meetingMode: criteria.meetingMode,
+ });
+ };
+
+
+
+ const handleInclusion = () => {
+ // Logica per gestire il pulsante di inclusione femminile
+ navigate("/supfem");
+ };
+
+ return (
+
+
+
+
+
+
+
+ Trova il tuo Mentore
+
+
+
+
+ {/* Campo di Interesse */}
+
+ Campo di Interesse
+
+ setCriteria((prev) => ({ ...prev, occupation: value }))
+ }
+ >
+
+
+
+
+
+
+ Sviluppo Software
+ Sviluppo Web
+ Sviluppo Mobile
+ Data Science
+ Machine Learning
+
+ Intelligenza Artificiale
+
+ Cybersecurity
+ Cloud Computing
+ Networking
+ DevOps
+ Blockchain
+ Sviluppo Videogiochi
+ Supporto IT
+ Design UI/UX
+ Testing Software
+
+ Amministrazione Database
+
+ Robotica
+ Internet of Things (IoT)
+
+ Trasformazione Digitale
+
+ Big Data
+
+
+
+
+
+
+
+ {/* Disponibilità (ore settimanali) */}
+
+
Disponibilità (ore settimanali)
+
+ {[...Array(10)].map((_, i) => (
+
+ setCriteria((prev) => ({
+ ...prev,
+ availability: i + 1,
+ }))
+ }
+ >
+ {i + 1}
+
+
+ ))}
+
+
+
+ {/* Modalità di Incontro */}
+
+
+
+
+ {/* Pulsante per cercare mentori */}
+
+ {/* Pulsante per cercare mentori */}
+
+ Trova Mentore
+
+
+ {/* Pulsante per inclusione femminile */}
+
+ Area Inclusione Femminile
+
+
+
+ {/* Risultati */}
+ {loading &&
Caricamento...
}
+ {error &&
{error}
}
+ {mentors && mentors.length > 0 && (
+
+
+ Mentori Disponibili
+
+
+ {mentors.map((mentor, index) => (
+
+ {/* Immagine o iniziali */}
+
+ {mentor.nome?.[0]?.toUpperCase() || "?"}
+ {mentor.cognome?.[0]?.toUpperCase() || ""}
+
+
+ {/* Informazioni principali */}
+
+ {mentor.nome || "Nome non disponibile"} {mentor.cognome || ""}
+
+
+ {mentor.occupazione || "Occupazione non specificata"}
+
+
+ {/* Dettagli */}
+
+
+ Meeting Mode: {mentor.meetingMode || "Non specificato"}
+
+
+ Ore disponibili: {mentor.availability || 0} ore
+
+
+
+ {/* Bottone */}
+
{
+ window.location.href = `/dettagli/${mentor.id}`; // Reindirizza alla pagina di visualizzazione del mentore
+ }}
+>
+ Profilo {mentor.nome?.split(" ")[0] || "il Mentore"}
+
+
+ ))}
+
+
+ )}
+
+
+
+
+
+ );
+}
diff --git a/app/src/components/ui/Header.jsx b/app/src/components/ui/Header.jsx
new file mode 100644
index 0000000..5a90397
--- /dev/null
+++ b/app/src/components/ui/Header.jsx
@@ -0,0 +1,148 @@
+import { useState, useEffect } from 'react';
+import { Bell, User, Menu } from 'lucide-react';
+import { Link, useNavigate } from 'react-router-dom';
+import { getAuth, onAuthStateChanged, signOut } from 'firebase/auth';
+
+export default function Header() {
+ const [isMenuOpen, setIsMenuOpen] = useState(false);
+ const [isDropdownOpen, setIsDropdownOpen] = useState(false);
+ const [user, setUser] = useState(null);
+ const navigate = useNavigate();
+ const auth = getAuth();
+
+ // Controlla lo stato di autenticazione
+ useEffect(() => {
+ const unsubscribe = onAuthStateChanged(auth, (currentUser) => {
+ setUser(currentUser);
+ });
+ return () => unsubscribe();
+ }, [auth]);
+
+ const toggleMenu = () => {
+ setIsMenuOpen((prev) => !prev);
+ };
+
+ const toggleDropdown = () => {
+ setIsDropdownOpen((prev) => !prev);
+ };
+
+ const handleLogout = async () => {
+ try {
+ await signOut(auth);
+ setUser(null);
+ navigate('/login', { state: { message: 'Logout effettuato con successo' } }); // Passa il messaggio
+ } catch (error) {
+ console.error('Errore durante il logout:', error);
+ }
+ };
+
+ return (
+
+ );
+}
diff --git a/app/src/components/ui/NotificationCard.jsx b/app/src/components/ui/NotificationCard.jsx
new file mode 100644
index 0000000..0a3f875
--- /dev/null
+++ b/app/src/components/ui/NotificationCard.jsx
@@ -0,0 +1,51 @@
+import { Button } from "@/components/ui/button";
+
+function NotificationCard({ notification, onMarkAsRead, onAccettaMentorship }) {
+ // Formatta il timestamp in un formato leggibile
+ const formatTimestamp = (timestamp) => {
+ const date = timestamp.toDate(); // Converte il Firestore Timestamp in oggetto Date
+ return `${date.toLocaleDateString()} ${date.toLocaleTimeString()}`;
+ };
+
+ return (
+
+
+
+ {/* Mostra chi ha inviato la notifica e il ruolo */}
+
+ {notification.oggetto}
+
+ {/* Mostra il messaggio della notifica */}
+
{notification.corpo}
+ {/* Mostra l'orario della notifica */}
+
+ Ricevuta: {formatTimestamp(notification.timeStamp)}
+
+
+
+ {/* Bottone per segnare la notifica come letta */}
+ onMarkAsRead(notification.id)} // Passa la funzione per segnare come letta
+ className="bg-[#178563] text-white hover:bg-[#178563]/80"
+ >
+ {notification.type === "mentorship-request" ? "Rifiuta" : "Segna come letto"}
+
+
+ {/* Bottone per accettare la mentorship, visibile solo per "mentorship-request" */}
+ {notification.type === "mentorship-request" && (
+ onAccettaMentorship(notification)} // Passa la funzione per accettare la mentorship
+ className="bg-[#178563] text-white hover:bg-[#178563]/80"
+ >
+ Accetta
+
+ )}
+
+
+
+ );
+}
+
+export default NotificationCard;
diff --git a/app/src/components/ui/V.png b/app/src/components/ui/V.png
new file mode 100644
index 0000000..b8e62ae
Binary files /dev/null and b/app/src/components/ui/V.png differ
diff --git a/app/src/components/ui/VideoCard.jsx b/app/src/components/ui/VideoCard.jsx
new file mode 100644
index 0000000..9a3b2e2
--- /dev/null
+++ b/app/src/components/ui/VideoCard.jsx
@@ -0,0 +1,20 @@
+import React from "react";
+import StaticThumbnail from "./V.png"; // Importa l'immagine statica
+
+export default function VideoCard({ title, author, role }) {
+ return (
+
+
+ {/* Usa sempre l'immagine statica */}
+
+
+
{/* Margine superiore ancora più ridotto */}
+
{title} {/* Testo verde */}
+
+
+ );
+}
diff --git a/app/src/components/ui/VideoDettaglio.jsx b/app/src/components/ui/VideoDettaglio.jsx
new file mode 100644
index 0000000..02f1376
--- /dev/null
+++ b/app/src/components/ui/VideoDettaglio.jsx
@@ -0,0 +1,27 @@
+import React from "react";
+import { Play } from "lucide-react";
+
+export default function VideoDettaglio({ title, author, role, initials }) {
+ return (
+
+
+
{title}
+
Published by {author} ({role})
+
+
+
+
+
+
+ );
+}
diff --git a/app/src/components/ui/badge.jsx b/app/src/components/ui/badge.jsx
new file mode 100644
index 0000000..a687eba
--- /dev/null
+++ b/app/src/components/ui/badge.jsx
@@ -0,0 +1,34 @@
+import * as React from "react"
+import { cva } from "class-variance-authority";
+
+import { cn } from "@/lib/utils"
+
+const badgeVariants = cva(
+ "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
+ {
+ variants: {
+ variant: {
+ default:
+ "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",
+ secondary:
+ "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
+ destructive:
+ "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",
+ outline: "text-foreground",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ },
+ }
+)
+
+function Badge({
+ className,
+ variant,
+ ...props
+}) {
+ return (
);
+}
+
+export { Badge, badgeVariants }
diff --git a/app/src/components/ui/card.jsx b/app/src/components/ui/card.jsx
new file mode 100644
index 0000000..2985cca
--- /dev/null
+++ b/app/src/components/ui/card.jsx
@@ -0,0 +1,50 @@
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+const Card = React.forwardRef(({ className, ...props }, ref) => (
+
+))
+Card.displayName = "Card"
+
+const CardHeader = React.forwardRef(({ className, ...props }, ref) => (
+
+))
+CardHeader.displayName = "CardHeader"
+
+const CardTitle = React.forwardRef(({ className, ...props }, ref) => (
+
+))
+CardTitle.displayName = "CardTitle"
+
+const CardDescription = React.forwardRef(({ className, ...props }, ref) => (
+
+))
+CardDescription.displayName = "CardDescription"
+
+const CardContent = React.forwardRef(({ className, ...props }, ref) => (
+
+))
+CardContent.displayName = "CardContent"
+
+const CardFooter = React.forwardRef(({ className, ...props }, ref) => (
+
+))
+CardFooter.displayName = "CardFooter"
+
+export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
diff --git a/app/src/components/ui/input.jsx b/app/src/components/ui/input.jsx
new file mode 100644
index 0000000..41ec05e
--- /dev/null
+++ b/app/src/components/ui/input.jsx
@@ -0,0 +1,19 @@
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+const Input = React.forwardRef(({ className, type, ...props }, ref) => {
+ return (
+ ( )
+ );
+})
+Input.displayName = "Input"
+
+export { Input }
diff --git a/app/src/components/ui/label.jsx b/app/src/components/ui/label.jsx
new file mode 100644
index 0000000..a1f4099
--- /dev/null
+++ b/app/src/components/ui/label.jsx
@@ -0,0 +1,16 @@
+import * as React from "react"
+import * as LabelPrimitive from "@radix-ui/react-label"
+import { cva } from "class-variance-authority";
+
+import { cn } from "@/lib/utils"
+
+const labelVariants = cva(
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
+)
+
+const Label = React.forwardRef(({ className, ...props }, ref) => (
+
+))
+Label.displayName = LabelPrimitive.Root.displayName
+
+export { Label }
diff --git a/app/src/components/ui/radio-group.jsx b/app/src/components/ui/radio-group.jsx
new file mode 100644
index 0000000..9d9b615
--- /dev/null
+++ b/app/src/components/ui/radio-group.jsx
@@ -0,0 +1,29 @@
+import * as React from "react"
+import * as RadioGroupPrimitive from "@radix-ui/react-radio-group"
+import { Circle } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const RadioGroup = React.forwardRef(({ className, ...props }, ref) => {
+ return ( );
+})
+RadioGroup.displayName = RadioGroupPrimitive.Root.displayName
+
+const RadioGroupItem = React.forwardRef(({ className, ...props }, ref) => {
+ return (
+ (
+
+
+
+ )
+ );
+})
+RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName
+
+export { RadioGroup, RadioGroupItem }
diff --git a/app/src/components/ui/select.jsx b/app/src/components/ui/select.jsx
new file mode 100644
index 0000000..4f1a963
--- /dev/null
+++ b/app/src/components/ui/select.jsx
@@ -0,0 +1,119 @@
+import * as React from "react"
+import * as SelectPrimitive from "@radix-ui/react-select"
+import { Check, ChevronDown, ChevronUp } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const Select = SelectPrimitive.Root
+
+const SelectGroup = SelectPrimitive.Group
+
+const SelectValue = SelectPrimitive.Value
+
+const SelectTrigger = React.forwardRef(({ className, children, ...props }, ref) => (
+ span]:line-clamp-1",
+ className
+ )}
+ {...props}>
+ {children}
+
+
+
+
+))
+SelectTrigger.displayName = SelectPrimitive.Trigger.displayName
+
+const SelectScrollUpButton = React.forwardRef(({ className, ...props }, ref) => (
+
+
+
+))
+SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName
+
+const SelectScrollDownButton = React.forwardRef(({ className, ...props }, ref) => (
+
+
+
+))
+SelectScrollDownButton.displayName =
+ SelectPrimitive.ScrollDownButton.displayName
+
+const SelectContent = React.forwardRef(({ className, children, position = "popper", ...props }, ref) => (
+
+
+
+
+ {children}
+
+
+
+
+))
+SelectContent.displayName = SelectPrimitive.Content.displayName
+
+const SelectLabel = React.forwardRef(({ className, ...props }, ref) => (
+
+))
+SelectLabel.displayName = SelectPrimitive.Label.displayName
+
+const SelectItem = React.forwardRef(({ className, children, ...props }, ref) => (
+
+
+
+
+
+
+ {children}
+
+))
+SelectItem.displayName = SelectPrimitive.Item.displayName
+
+const SelectSeparator = React.forwardRef(({ className, ...props }, ref) => (
+
+))
+SelectSeparator.displayName = SelectPrimitive.Separator.displayName
+
+export {
+ Select,
+ SelectGroup,
+ SelectValue,
+ SelectTrigger,
+ SelectContent,
+ SelectLabel,
+ SelectItem,
+ SelectSeparator,
+ SelectScrollUpButton,
+ SelectScrollDownButton,
+}
diff --git a/app/src/components/ui/textarea.jsx b/app/src/components/ui/textarea.jsx
new file mode 100644
index 0000000..b1a0b40
--- /dev/null
+++ b/app/src/components/ui/textarea.jsx
@@ -0,0 +1,18 @@
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+const Textarea = React.forwardRef(({ className, ...props }, ref) => {
+ return (
+ ( )
+ );
+})
+Textarea.displayName = "Textarea"
+
+export { Textarea }
diff --git a/app/src/dao/chatSupportoDAO.js b/app/src/dao/chatSupportoDAO.js
new file mode 100644
index 0000000..0bdc392
--- /dev/null
+++ b/app/src/dao/chatSupportoDAO.js
@@ -0,0 +1,196 @@
+import { getFirestore, collection, where, query, getDocs, addDoc, orderBy, doc, updateDoc, setDoc, getDoc } from "firebase/firestore";
+import app from "@/firebase/firebase";
+
+const db = getFirestore(app);
+const supportCollection = collection(db, "supportChat");
+const supportMessagesCollection = collection(db, "supportChatMessages");
+
+// Recupera le chat di un utente
+export async function getChatsByUserId(userId, userType) {
+ try {
+
+
+ const chatsQuery = query(
+ supportCollection,
+ where("participants", "array-contains", userId),
+ orderBy("updatedAt", "desc")
+ );
+
+ const chatsSnapshot = await getDocs(chatsQuery);
+
+ if (chatsSnapshot.empty) {
+ return { success: true, data: [] };
+ }
+
+ const chats = [];
+ for (const chatDoc of chatsSnapshot.docs) {
+ const chatData = chatDoc.data();
+
+
+
+ // Recupera i dettagli del mentee
+ if (chatData.menteeId) {
+ const menteeDocRef = doc(db, "utenti", chatData.menteeId);
+ const menteeDoc = await getDoc(menteeDocRef);
+ if (menteeDoc.exists()) {
+ const menteeData = menteeDoc.data();
+ chatData.menteeName = `${menteeData.nome || "Mentee"} ${menteeData.cognome || "Sconosciuto"}`;
+ }
+ }
+
+ // Recupera i dettagli del mentore
+ if (chatData.mentorId) {
+ const mentorDocRef = doc(db, "utenti", chatData.mentorId);
+ const mentorDoc = await getDoc(mentorDocRef);
+ if (mentorDoc.exists()) {
+ const mentorData = mentorDoc.data();
+ chatData.mentorName = `${mentorData.nome || "Mentore"} ${mentorData.cognome || "Sconosciuto"}`;
+ }
+ }
+
+ // Calcola isNewMessage direttamente qui
+ const isNewMessage = chatData.lastMessageSenderId && chatData.lastMessageSenderId !== userId;
+ chatData.isNewMessage = isNewMessage;
+
+ console.log(`Chat ${chatDoc.id} - Is New Message: ${isNewMessage}`);
+
+ chats.push({ id: chatDoc.id, ...chatData });
+ }
+
+
+ return { success: true, data: chats };
+ } catch (err) {
+
+ return { success: false, error: "Errore durante il recupero delle chat." };
+ }
+}
+
+
+// Recupera i messaggi di una chat
+export async function getSupportMessages(chatId) {
+ try {
+ const messagesQuery = query(
+ supportMessagesCollection,
+ where("chatId", "==", chatId),
+ orderBy("timestamp", "asc")
+ );
+
+ const messagesSnapshot = await getDocs(messagesQuery);
+ const messages = messagesSnapshot.docs.map((doc) => ({
+ id: doc.id,
+ ...doc.data(),
+ }));
+
+ return messages;
+ } catch (err) {
+ console.error("Errore durante il recupero dei messaggi:", err);
+ throw new Error("Impossibile recuperare i messaggi.");
+ }
+}
+
+// Invia un messaggio alla chat
+export async function sendSupportMessage(message) {
+ try {
+ // Aggiungi il messaggio alla raccolta dei messaggi
+ await addDoc(supportMessagesCollection, message);
+
+
+ // Recupera il riferimento alla chat
+ const chatDocRef = doc(db, "supportChat", message.chatId);
+ const chatDoc = await getDoc(chatDocRef);
+
+ // Verifica che la chat esista
+ if (!chatDoc.exists()) {
+ console.error("La chat non esiste. Creazione non riuscita.");
+ return;
+ }
+
+ // Aggiorna la chat con le informazioni dell'ultimo messaggio
+ await updateDoc(chatDocRef, {
+ lastMessage: message.text,
+ updatedAt: message.timestamp,
+ lastMessageSenderId: message.senderId, // Aggiunge l'ID del mittente
+ });
+
+
+ } catch (err) {
+ console.error("Errore durante l'invio del messaggio di supporto:", err);
+ throw new Error("Impossibile inviare il messaggio.");
+ }
+}
+
+
+// Crea una nuova chat
+function generateChatId(menteeId, mentorId) {
+ return `${menteeId}_${mentorId}`; // Genera ID univoco per la chat
+}
+
+export async function createChat(menteeId, mentorId, menteeName, mentorName) {
+ try {
+ if (!menteeId || !mentorId) {
+ throw new Error("Mentee ID o Mentor ID mancante.");
+ }
+
+ // Recupera il nome e cognome del mentee
+ const menteeDocRef = doc(db, "utenti", menteeId);
+ const menteeDoc = await getDoc(menteeDocRef);
+ if (menteeDoc.exists()) {
+ const menteeData = menteeDoc.data();
+ menteeName = `${menteeData.nome || "Mentee"} ${menteeData.cognome || "Sconosciuto"}`;
+ }
+
+ // Recupera il nome e cognome del mentore
+ const mentorDocRef = doc(db, "utenti", mentorId);
+ const mentorDoc = await getDoc(mentorDocRef);
+ if (mentorDoc.exists()) {
+ const mentorData = mentorDoc.data();
+ mentorName = `${mentorData.nome || "Mentore"} ${mentorData.cognome || "Sconosciuto"}`;
+ }
+
+ // Verifica se una chat esiste già tra i partecipanti
+ const chatsQuery = query(
+ supportCollection,
+ where("participants", "array-contains", menteeId)
+ );
+
+ const chatsSnapshot = await getDocs(chatsQuery);
+
+ let existingChat = null;
+
+ chatsSnapshot.forEach((doc) => {
+ const chatData = doc.data();
+ if (chatData.participants.includes(mentorId)) {
+ existingChat = { id: doc.id, ...chatData };
+ }
+ });
+
+ if (existingChat) {
+ console.log("Chat già esistente:", existingChat);
+ return { success: true, id: existingChat.chatId };
+ }
+
+ // Se la chat non esiste, creane una nuova
+ const chatId = generateChatId(menteeId, mentorId);
+
+
+ const newChat = {
+ chatId,
+ menteeId,
+ menteeName,
+ mentorId,
+ mentorName,
+ participants: [menteeId, mentorId],
+ lastMessage: "",
+ updatedAt: Date.now(),
+ };
+
+ const chatDocRef = doc(db, "supportChat", chatId);
+ await setDoc(chatDocRef, newChat);
+
+ return { success: true, id: chatId };
+ } catch (err) {
+ console.error("Errore durante la creazione della chat:", err);
+ return { success: false, error: "Impossibile creare la chat." };
+ }
+}
+
diff --git a/app/src/dao/matchingDAO.js b/app/src/dao/matchingDAO.js
new file mode 100644
index 0000000..3d5b347
--- /dev/null
+++ b/app/src/dao/matchingDAO.js
@@ -0,0 +1,43 @@
+import { getFirestore, collection, getDocs, query, where } from "firebase/firestore";
+import app from "../firebase/firebase"; // Assicurati che il percorso sia corretto
+
+// Inizializza Firestore
+const db = getFirestore(app);
+
+/**
+ * Recupera la lista di tutti i mentori basandosi sul campo `field` del mentee confrontandolo con `occupazione` del mentor.
+ * @param {string} menteeField - Il campo di interesse del mentee.
+ * @returns {Promise} - Restituisce un array di oggetti con i dati dei mentori.
+ * @throws {Error} - Solleva un errore se il recupero fallisce.
+ */
+export async function getAllMentors(menteeField) {
+ try {
+ console.log("Recupero mentori per il campo mentee:", menteeField);
+
+ const mentorsQuery = query(
+ collection(db, "utenti"),
+ where("userType", "==", "mentor"),
+ where("occupazione", "==", menteeField)
+ );
+
+ const querySnapshot = await getDocs(mentorsQuery);
+
+ if (querySnapshot.empty) {
+ console.warn("Nessun mentore trovato per il campo:", menteeField);
+ return [];
+ }
+
+ // Log dettagliato per ciascun documento
+ const mentors = querySnapshot.docs.map((doc) => {
+ console.log("Documento trovato:", doc.id, doc.data());
+ return { ...doc.data(), id: doc.id };
+ });
+
+ console.log("Tutti i mentori trovati:", mentors);
+ return mentors;
+ } catch (error) {
+ console.error("Errore durante il recupero dei mentori:", error);
+ throw new Error("Non è stato possibile recuperare i mentori.");
+ }
+ }
+
diff --git a/app/src/dao/meetingsDAO.js b/app/src/dao/meetingsDAO.js
new file mode 100644
index 0000000..9e1f4ba
--- /dev/null
+++ b/app/src/dao/meetingsDAO.js
@@ -0,0 +1,279 @@
+import { db } from "@/firebase/firebase";
+import { getFirestore, collection, query, where, getDocs, doc, updateDoc, deleteDoc, addDoc , getDoc , increment, Timestamp} from 'firebase/firestore';
+import {createNotificationMeeting, updateNotificationMeeting, removeNotificationMeeting} from "@/dao/notificaDAO";
+/**
+ * Recupera tutti gli incontri di un mentor dal database.
+ * @param {string} mentorId - ID del mentor autenticato.
+ * @returns {Promise} - Array di incontri con i dettagli richiesti.
+ */
+export const fetchMeetingsForMentor = async (mentorId) => {
+ const db = getFirestore();
+
+ try {
+ const meetingsQuery = query(
+ collection(db, 'meetings'),
+ where('mentorId', '==', mentorId)
+ );
+
+ const querySnapshot = await getDocs(meetingsQuery);
+ return querySnapshot.docs.map(doc => {
+ const data = doc.data();
+ return {
+ id: doc.id,
+ menteeName: data.menteeName,
+ menteeId: data.menteeId,
+ date: data.date.toDate(),
+ time: data.time,
+ description: data.description,
+ topic: data.topic,
+ };
+ });
+ } catch (error) {
+ console.error("Errore durante il recupero degli incontri:", error);
+ throw new Error("Impossibile recuperare gli incontri.");
+ }
+};
+
+export const fetchMeetingsForMentee = async (menteeId) => {
+ const db = getFirestore();
+
+ try {
+ const meetingsQuery = query(
+ collection(db, 'meetings'),
+ where('menteeId', '==', menteeId)
+ );
+
+ const querySnapshot = await getDocs(meetingsQuery);
+ return querySnapshot.docs.map(doc => {
+ const data = doc.data();
+ return {
+ id: doc.id,
+ menteeName: data.menteeName,
+ mentorName: data.mentorName,
+ date: data.date.toDate(),
+ time: data.time,
+ description: data.description,
+ topic: data.topic,
+ };
+ });
+ } catch (error) {
+ console.error("Errore durante il recupero degli incontri:", error);
+ throw new Error("Impossibile recuperare gli incontri.");
+ }
+};
+
+/**
+ * Recupera i dettagli di un singolo incontro.
+ * @param {string} meetingId - ID dell'incontro.
+ * @returns {Promise} - Dettagli dell'incontro.
+ */
+export const fetchMeetingDetails = async (meetingId) => {
+ const db = getFirestore();
+
+ try {
+ // Riferimento al documento specifico usando l'ID del documento
+ const meetingRef = doc(db, 'meetings', meetingId);
+ const meetingSnapshot = await getDoc(meetingRef);
+
+ if (!meetingSnapshot.exists()) {
+ throw new Error("Incontro non trovato.");
+ }
+
+ // Ottieni i dati del documento
+ const meetingData = meetingSnapshot.data();
+
+ // Costruisci l'oggetto risultato
+ return {
+ id: meetingSnapshot.id, // ID del documento
+ mentorId: meetingData.mentorId,
+ menteeId: meetingData.menteeId,
+ date: meetingData.date, // Conversione della data
+ time: meetingData.time,
+ topic: meetingData.topic,
+ description: meetingData.description,
+ menteeName: meetingData.menteeName,
+ mentorName: meetingData.mentorName,
+ menteeCognome: meetingData.menteeCognome,
+ minuta: meetingData.minuta || null, // Valore predefinito se mancante
+ };
+ } catch (error) {
+ console.error("Errore durante il recupero dei dettagli dell'incontro:", error);
+ throw new Error("Impossibile recuperare i dettagli dell'incontro.");
+ }
+};
+
+
+/**
+ * Aggiorna l'incontro con una nuova minuta.
+ * @param {string} meetingId - ID dell'incontro da aggiornare.
+ * @param {string} minuta - La minuta da aggiornare.
+ * @returns {Promise}
+ */
+export const updateMeetingMinutes = async (meetingId, minuta) => {
+ try {
+ const meetingRef = doc(db, 'meetings', meetingId);
+ await updateDoc(meetingRef, { minuta: minuta }); // Aggiorna solo il campo MINUTA
+ } catch (error) {
+ console.error('Errore durante l\'aggiornamento della minuta:', error);
+ throw error;
+ }
+};
+
+/**
+ * Crea un nuovo incontro.
+ * @param {Object} meetingData - Dati dell'incontro.
+ * @returns {Promise} - ID del nuovo incontro creato.
+ */
+
+export const createMeeting = async (meetingData) => {
+ try {
+ // Verifica che userType sia mentee
+ if (meetingData.userType !== "mentee") {
+ throw new Error("Il tipo di utente deve essere mentee");
+ }
+
+ // Recupera il riferimento al documento del mentee
+ const menteeRef = doc(db, "utenti", meetingData.menteeId);
+ const menteeSnap = await getDoc(menteeRef);
+
+ if (!menteeSnap.exists()) {
+ throw new Error(`Mentee con ID ${meetingData.menteeId} non trovato`);
+ }
+
+ const menteeData = menteeSnap.data();
+
+ // Converte la data in Timestamp Firestore
+ const meetingDate = meetingData.date instanceof Timestamp
+ ? meetingData.date
+ : Timestamp.fromDate(new Date(meetingData.date));
+
+ // Converte l'orario in minuti totali
+ const [hours, minutes] = meetingData.time.split(":").map(Number);
+ const meetingMinutes = hours * 60 + minutes;
+
+ // Query per trovare incontri nello stesso giorno con lo stesso mentor
+ const meetingsRef = collection(db, "meetings");
+ const existingMeetingsQuery = query(
+ meetingsRef,
+ where("mentorId", "==", meetingData.mentorId),
+ where("date", "==", meetingDate)
+ );
+
+ const existingMeetingsSnapshot = await getDocs(existingMeetingsQuery);
+
+ for (const doc of existingMeetingsSnapshot.docs) {
+ const existingMeeting = doc.data();
+ const [existingHours, existingMinutes] = existingMeeting.time.split(":").map(Number);
+ const existingMeetingMinutes = existingHours * 60 + existingMinutes;
+
+ // Controllo intervallo di 10 minuti
+ if (Math.abs(meetingMinutes - existingMeetingMinutes) < 10) {
+ throw new Error("Non è possibile schedulare un meeting a meno di 10 minuti di distanza da un altro.");
+ }
+ }
+
+ // Aggiorna il contatore di meeting del mentee
+ if (typeof menteeData.meetingsCount === "number") {
+ await updateDoc(menteeRef, { meetingsCount: increment(1) });
+ } else {
+ await updateDoc(menteeRef, { meetingsCount: 1 });
+ }
+
+ // Crea il nuovo meeting
+ const newMeeting = {
+ mentorId: meetingData.mentorId,
+ menteeId: meetingData.menteeId,
+ mentorName: meetingData.mentorName,
+ mentorSurname: meetingData.mentorSurname,
+ date: meetingDate,
+ time: meetingData.time,
+ topic: meetingData.topic,
+ description: meetingData.description,
+ menteeName: meetingData.menteeName,
+ menteeCognome: meetingData.menteeCognome,
+ minuta: null,
+ };
+
+ // Aggiungi il nuovo meeting al database
+ const docRef = await addDoc(collection(db, "meetings"), newMeeting);
+
+ // Crea la notifica per il meeting
+ await createNotificationMeeting(newMeeting.mentorId, newMeeting.menteeId, newMeeting.mentorName, newMeeting.mentorSurname);
+
+ return docRef.id;
+ } catch (error) {
+ throw error;
+ }
+};
+
+/**
+ * Modifica i dettagli di un incontro.
+ * @param {string} meetingId - ID dell'incontro da modificare.
+ * @param {Object} updatedData - I dati da aggiornare.
+ * @returns {Promise}
+ */
+export const updateMeeting = async (updatedData, menteeId, mittenteId,nome,cognome) => {
+ try {
+ const meetingRef = doc(db, 'meetings', updatedData.id);
+ await updateDoc(meetingRef, updatedData);
+ await updateNotificationMeeting(mittenteId,menteeId,nome,cognome);
+ } catch (error) {
+ console.error('Errore durante la modifica dell\'incontro:', error);
+ throw error;
+ }
+};
+
+/**
+ * Elimina un incontro dal database.
+ * @param {string} meetingId - ID dell'incontro da eliminare.
+ * @returns {Promise}
+ */
+export const deleteMeeting = async (meetingId,menteeId,userId,nome,cognome) => {
+ try {
+ const meetingRef = doc(db, 'meetings', meetingId);
+ await deleteDoc(meetingRef);
+ await removeNotificationMeeting(userId,menteeId,nome, cognome);
+ } catch (error) {
+ console.error('Errore durante l\'eliminazione dell\'incontro:', error);
+ throw error;
+ }
+};
+
+/**
+ * Filtra i giorni con incontri in un mese e anno specifici.
+ * @param {Array} meetings - Lista di incontri.
+ * @param {number} month - Mese (0-based).
+ * @param {number} year - Anno.
+ * @returns {Array} - Lista dei giorni con incontri.
+ */
+export const filterDaysWithMeetings = (meetings, month, year) => {
+ const daysWithMeetings = meetings
+ .filter((meeting) => {
+ const meetingDate = new Date(meeting.date);
+ return (
+ meetingDate.getMonth() === month &&
+ meetingDate.getFullYear() === year
+ );
+ })
+ .map((meeting) => new Date(meeting.date).getDate());
+
+ return Array.from(new Set(daysWithMeetings));
+};
+
+/**
+ * Recupera tutti i mentee.
+ * @returns {Promise} - Lista dei mentee.
+ */
+export const getMentees = async () => {
+ try {
+ const menteeQuery = query(collection(db, 'utenti'), where('userType', '==', 'mentee'));
+ const querySnapshot = await getDocs(menteeQuery);
+ return querySnapshot.docs.map((doc) => ({
+ id: doc.id,
+ ...doc.data(),
+ }));
+ } catch (error) {
+ console.error('Errore durante il recupero dei mentee:', error);
+ throw error;
+ }
+};
\ No newline at end of file
diff --git a/app/src/dao/mentorDAO.js b/app/src/dao/mentorDAO.js
new file mode 100644
index 0000000..9a978ee
--- /dev/null
+++ b/app/src/dao/mentorDAO.js
@@ -0,0 +1,33 @@
+import { getFirestore, collection, query, where, getDocs } from "firebase/firestore";
+
+/**
+ * Recupera i mentori dal database in base ai criteri specificati.
+ * @param {Object} filters - I filtri per la ricerca.
+ * @param {string} filters.occupation - L'occupazione del mentore.
+ * @param {number} filters.availability - Disponibilità minima in ore.
+ * @param {string} filters.meetingMode - Modalità di incontro preferita.
+ * @returns {Promise} - Un array di mentori.
+ */
+export async function getMentors({ occupation, availability, meetingMode }) {
+ const db = getFirestore();
+
+ try {
+ const mentorsRef = collection(db, "utenti");
+ let q = query(mentorsRef); // Inizia con una query vuota
+
+ // Applica filtri dinamici
+ if (occupation) q = query(q, where("occupazione", "==", occupation));
+ if (availability) q = query(q, where("availability", ">=", availability));
+ if (meetingMode) q = query(q, where("meetingMode", "==", meetingMode));
+
+ // Esegui la query
+ const querySnapshot = await getDocs(q);
+ return querySnapshot.docs.map((doc) => ({
+ id: doc.id,
+ ...doc.data(),
+ }));
+ } catch (err) {
+ console.error("Errore durante la ricerca dei mentori:", err);
+ throw new Error("Errore durante la ricerca.");
+ }
+}
diff --git a/app/src/dao/mentorshipSessionDAO.js b/app/src/dao/mentorshipSessionDAO.js
new file mode 100644
index 0000000..312a53b
--- /dev/null
+++ b/app/src/dao/mentorshipSessionDAO.js
@@ -0,0 +1,184 @@
+
+import { db } from "@/firebase/firebase";
+import { getDocs, getDoc, collection, doc, addDoc, updateDoc, deleteDoc } from "firebase/firestore";
+import {acceptNotificationMentorship, removeNotificationMentorship} from "@/dao/notificaDAO";
+
+
+const mentorshipSessionCollectionRef = collection(db, 'mentorship_session');
+const usersCollectionRef = collection(db, 'utenti');
+/**
+ * Recupera una sessione di mentorship per ID.
+ *
+ * @param {string} mentorshipId - L'ID della sessione di mentorship da recuperare.
+ * @returns {Promise} I dati della sessione di mentorship.
+ * @throws {Error} Se la sessione di mentorship non esiste.
+ */
+
+
+
+export async function fetchMentorship(userId) {
+ try {
+ const mentorshipSnapshot = await getDocs(mentorshipSessionCollectionRef);
+ const sessions = mentorshipSnapshot.docs
+ .map(doc => {
+ const data = doc.data();
+ return {
+ id: doc.id,
+ mentoreId: data.mentoreId,
+ mentoreNome: data.mentoreNome,
+ mentoreCognome: data.mentoreCognome,
+ menteeId: data.menteeId,
+ menteeNome: data.menteeNome,
+ menteeCognome: data.menteeCognome,
+ stato: data.stato,
+ createdAt: data.createdAt
+ };
+ })
+ .filter(session => session.mentoreId === userId || session.menteeId === userId); // Filtra per ID utente
+ return sessions;
+ } catch (error) {
+ throw error;
+ }
+}
+
+export async function closeMentorshipSession(sessionId) {
+ try {
+ const sessionRef = doc(mentorshipSessionCollectionRef, sessionId);
+ const meeting = await getById(sessionId);
+ await updateDoc(sessionRef, { stato: "Inattivo" });
+ await removeNotificationMentorship (meeting.mentoreId,meeting.menteeId,meeting.mentoreNome,meeting.mentoreCognome);
+ await deleteDoc(sessionRef);
+ } catch (error) {
+ throw error;
+ }
+}
+
+
+export async function getById(mentorshipId) {
+ try {
+ const docRef = doc(mentorshipSessionCollectionRef, mentorshipId);
+ const sessionData = await getDoc(docRef);
+
+ if (sessionData.exists()) {
+ return {
+ id: mentorshipId,
+ ...sessionData.data() // Restituisce i dati del documento
+ };
+ } else {
+ throw new Error("Mentorship non trovata!");
+ }
+ } catch (error) {
+ throw error; // Propaga l'errore al chiamante
+ }
+}
+
+/**
+ * Inizializza una nuova sessione di mentorship.
+ *
+ * @param {string} mentorId - L'ID del mentore.
+ * @param {string} menteeId - L'ID del mentee.
+ * @returns {Promise} L'ID della nuova sessione mentorship.
+ * @throws {Error} Se la creazione della sessione fallisce.
+ */
+export async function initializeMentorship(mentorId, menteeId) {
+ try {
+ // Recupera i dati del mentore
+ const mentorDoc = await getDoc(doc(usersCollectionRef, mentorId));
+ const mentorData = mentorDoc.exists() ? mentorDoc.data() : null;
+
+ // Recupera i dati del mentee
+ const menteeDoc = await getDoc(doc(usersCollectionRef, menteeId));
+ const menteeData = menteeDoc.exists() ? menteeDoc.data() : null;
+
+ if (!mentorData || !menteeData) {
+ throw new Error("Mentore o Mentee non trovati nel database.");
+ }
+
+ // Creazione dell'oggetto mentorship con nome e cognome
+ const mentorship = {
+ mentoreId: mentorId,
+ mentoreNome: mentorData.nome,
+ mentoreCognome: mentorData.cognome,
+ menteeId: menteeId,
+ menteeNome: menteeData.nome,
+ menteeCognome: menteeData.cognome,
+ stato: "Attiva",
+ createdAt: new Date(),
+ };
+
+ const docRef = await addDoc(mentorshipSessionCollectionRef, mentorship);
+ await acceptNotificationMentorship(mentorship.mentoreId, mentorship.menteeId, mentorship.mentoreNome, mentorship.mentoreCognome);
+ return docRef.id;
+ } catch (error) {
+ throw error;
+ }
+}
+/**
+ * Recupera il mentore da una sessione di mentorship.
+ *
+ * @param {string} mentorshipId - L'ID della sessione di mentorship.
+ * @returns {Promise} L'ID del mentore.
+ * @throws {Error} Se non è possibile recuperare il mentore.
+ */
+export async function getMentorById(mentorshipId) {
+ try {
+ const mentorshipData = await getById(mentorshipId);
+ return mentorshipData.mentore;
+ } catch (error) {
+ throw error; // Propaga l'errore al chiamante
+ }
+}
+
+/**
+ * Recupera il mentee da una sessione di mentorship.
+ *
+ * @param {string} mentorshipId - L'ID della sessione di mentorship.
+ * @returns {Promise} L'ID del mentee.
+ * @throws {Error} Se non è possibile recuperare il mentee.
+ */
+export async function getMenteeById(mentorshipId) {
+ try {
+ const mentorshipData = await getById(mentorshipId);
+ return mentorshipData.mentee;
+ } catch (error) {
+ throw error; // Propaga l'errore al chiamante
+ }
+}
+
+/**
+ * Recupera tutte le sessioni di mentorship in cui un determinato utente è coinvolto come mentore o mentee.
+ *
+ * @param {string} userId - L'ID dell'utente da cercare.
+ * @returns {Promise} Una lista di sessioni di mentorship in cui l'utente è coinvolto.
+ * @throws {Error} Se non è possibile recuperare le sessioni.
+ */
+export async function getByUser(userId) {
+ try {
+ const allSessions = await getAllMentorshipSessions(); // Recupera tutte le sessioni
+ const userSessions = allSessions.filter(session =>
+ session.mentore === userId || session.mentee === userId // Filtra per utente coinvolto
+ );
+ return userSessions;
+ } catch (error) {
+ throw error; // Propaga l'errore al chiamante
+ }
+}
+
+/**
+ * Recupera tutte le sessioni di mentorship dalla collezione.
+ *
+ * @returns {Promise} Una lista di tutte le sessioni di mentorship.
+ * @throws {Error} Se non è possibile recuperare tutte le sessioni.
+ */
+async function getAllMentorshipSessions() {
+ try {
+ const mentorshipSnapshot = await getDocs(mentorshipSessionCollectionRef);
+ const sessions = mentorshipSnapshot.docs.map(doc => ({
+ id: doc.id,
+ ...doc.data() // Restituisce i dati di ciascun documento
+ }));
+ return sessions;
+ } catch (error) {
+ throw error; // Propaga l'errore al chiamante
+ }
+}
diff --git a/app/src/dao/notificaDAO.js b/app/src/dao/notificaDAO.js
new file mode 100644
index 0000000..540ad50
--- /dev/null
+++ b/app/src/dao/notificaDAO.js
@@ -0,0 +1,209 @@
+import { collection, addDoc, getDocs, getDoc, doc, deleteDoc, query, where } from 'firebase/firestore';
+import { db } from '@/firebase/firebase';
+
+// Riferimento alla collection notifiche
+const notificationsCollectionRef = collection(db, 'notifiche');
+
+/**
+ * Crea una notifica per l'assegnazione di una mentorship.
+ * @param {string} mittenteId - ID dell'utente mittente.
+ * @param {string} destinatarioId - ID dell'utente destinatario.
+ * @param {string} nomeMittente - Nome del mittente.
+ * @param {string} cognomeMittente - Cognome del mittente.
+ */
+export async function createNotificationMentorship(mittenteId, destinatarioId, nomeMittente, cognomeMittente) {
+ await createNotification(
+ mittenteId,
+ destinatarioId,
+ 'Mentorship',
+ `Hai ricevuto richiesta di Mentorship da ${nomeMittente} ${cognomeMittente}`,
+ 'mentorship-request'
+ );
+}
+export async function acceptNotificationMentorship(mittenteId, destinatarioId, nomeMittente, cognomeMittente) {
+ await createNotification(
+ mittenteId,
+ destinatarioId,
+ 'Mentorship',
+ `Il mentore: ${nomeMittente} ${cognomeMittente} ha accettato la tua richiesta di mentorship`,
+ 'mentorship-session'
+ );
+}
+export async function removeNotificationMentorship(mittenteId, destinatarioId, nomeMittente, cognomeMittente) {
+ await createNotification(
+ mittenteId,
+ destinatarioId,
+ 'Mentorship',
+ `Il mentore: ${nomeMittente} ${cognomeMittente} ha terminato la tua sessione di mentorship`,
+ 'mentorship-session'
+ );
+}
+
+
+/**
+ * Crea una notifica per un nuovo meeting schedulato.
+ * @param {string} mittenteId - ID dell'utente mittente.
+ * @param {string} destinatarioId - ID dell'utente destinatario.
+ * @param {string} nomeMittente - Nome del mittente.
+ * @param {string} cognomeMittente - Cognome del mittente.
+ */
+export async function createNotificationMeeting(mittenteId, destinatarioId, nomeMittente, cognomeMittente) {
+ await createNotification(
+ mittenteId,
+ destinatarioId,
+ 'Nuovo meeting schedulato',
+ `E' stato schedulato un nuovo meeting da ${nomeMittente} ${cognomeMittente}`,
+ 'meeting'
+ );
+}
+
+/**
+ * Crea una notifica per l'aggiornamento della data di un meeting.
+ * @param {string} mittenteId - ID dell'utente mittente.
+ * @param {string} destinatarioId - ID dell'utente destinatario.
+ * @param {string} nomeMittente - Nome del mittente.
+ * @param {string} cognomeMittente - Cognome del mittente.
+ */
+export async function updateNotificationMeeting(mittenteId, destinatarioId, nomeMittente, cognomeMittente) {
+ await createNotification(
+ mittenteId,
+ destinatarioId,
+ 'Data del meeting modificata',
+ `E' stata modificata la data del meeting da ${nomeMittente} ${cognomeMittente}`,
+ 'meeting_update'
+ );
+}
+
+/**
+ * Crea una notifica per l'eliminazione di un meeting.
+ * @param {string} mittenteId - ID dell'utente mittente.
+ * @param {string} destinatarioId - ID dell'utente destinatario.
+ * @param {string} nomeMittente - Nome del mittente.
+ * @param {string} cognomeMittente - Cognome del mittente.
+ */
+export async function removeNotificationMeeting(mittenteId, destinatarioId, nomeMittente, cognomeMittente) {
+ await createNotification(
+ mittenteId,
+ destinatarioId,
+ 'Meeting eliminato',
+ `E' stato eliminato un meeting da ${nomeMittente} ${cognomeMittente}`,
+ 'meeting_removal'
+ );
+}
+
+/**
+ * Funzione generica per creare una notifica.
+ * @param {string} mittenteId - ID dell'utente mittente.
+ * @param {string} destinatarioId - ID dell'utente destinatario.
+ * @param {string} oggetto - Oggetto della notifica.
+ * @param {string} corpo - Corpo della notifica.
+ * @param {string} type - Tipo della notifica.
+ */
+export async function createNotification(mittenteId, destinatarioId, oggetto, corpo, type) {
+ try {
+ /**
+ * Oggetto che rappresenta una notifica da creare.
+ * @property {string} mittente - ID dell'utente mittente.
+ * @property {string} destinatario - ID dell'utente destinatario.
+ * @property {string} oggetto - Oggetto della notifica.
+ * @property {string} corpo - Testo del messaggio della notifica.
+ * @property {string} type - Tipo della notifica.
+ * @property {Date} timeStamp - Timestamp corrente della creazione.
+ * @property {Date} scadenza - Data di scadenza della notifica (24 ore dopo la creazione).
+ */
+ const timeStamp = new Date();
+ const expirationTime = 30 *24 * 60 * 60 * 1000; // 30 giorni in millisecondi
+ const expirationDate = new Date(timeStamp.getTime() + expirationTime); // Data di scadenza
+
+ const newNotification = {
+ mittente: mittenteId,
+ destinatario: destinatarioId,
+ oggetto: oggetto,
+ corpo: corpo,
+ type: type,
+ timeStamp: timeStamp,
+ scadenza: expirationDate, // Aggiungi la data di scadenza
+ };
+
+ await addDoc(notificationsCollectionRef, newNotification);
+ } catch (error) {
+ alert('Errore nella creazione della notifica:' + error);
+ throw error;
+ }
+}
+export async function removeExpiredNotifications() {
+ try {
+ const now = new Date();
+
+ // Esegui una query per recuperare tutte le notifiche con una scadenza precedente alla data attuale
+ const notificationsRef = collection(db, "notifiche");
+ const expiredNotificationsQuery = query(notificationsRef, where("scadenza", "<=", now));
+
+ const querySnapshot = await getDocs(expiredNotificationsQuery);
+
+ // Itera su ogni notifica e elimina quelle scadute
+ querySnapshot.forEach(async (doc) => {
+ await deleteDoc(doc.ref);
+ });
+
+ } catch (error) {
+ alert("Errore durante la rimozione delle notifiche scadute:" + error);
+ throw error;
+ }
+}
+/**
+ * Recupera tutte le notifiche di un utente.
+ * @param {string} userId - ID dell'utente loggato.
+ * @returns {Promise>} Un array di notifiche.
+ */
+export const getByDest = async (userId) => {
+ if (!userId) throw new Error('Utente non autenticato');
+
+ try {
+ const q = query(notificationsCollectionRef, where('destinatario', '==', userId));
+ const querySnapshot = await getDocs(q);
+ return querySnapshot.docs.map(doc => ({ id: doc.id, ...doc.data() }));
+ } catch (error) {
+ throw error;
+ }
+};
+
+/**
+ * Recupera una notifica specifica tramite ID.
+ * @param {string} id - ID della notifica.
+ * @returns {Promise} La notifica corrispondente.
+ */
+export const getById = async (id) => {
+ try {
+ const docRef = doc(db, 'notifiche', id);
+ const docSnap = await getDoc(docRef);
+
+ if (docSnap.exists()) {
+ return { id: docSnap.id, ...docSnap.data() };
+ } else {
+ throw new Error('Nessuna notifica trovata con questo ID');
+ }
+ } catch (error) {
+ throw error;
+ }
+};
+
+/**
+ * Elimina una notifica tramite ID.
+ * @param {string} id - ID della notifica da eliminare.
+ */
+export const deleteNotifica = async (id) => {
+ try {
+ const docRef = doc(db, 'notifiche', id);
+ await deleteDoc(docRef);
+ } catch (error) {
+ throw error;
+ }
+};
+
+/**
+ * Estrae l'ID di una notifica.
+ * @param {Object} notification - Oggetto della notifica.
+ * @returns {string|null} L'ID della notifica o null se non esiste.
+ */
+export const getCurrentNotificaId = (notification) => notification?.id || null;
diff --git a/app/src/dao/supportoDAO.js b/app/src/dao/supportoDAO.js
new file mode 100644
index 0000000..6b990ec
--- /dev/null
+++ b/app/src/dao/supportoDAO.js
@@ -0,0 +1,75 @@
+import { getFirestore, collection, query, where, getDocs } from "firebase/firestore"; // Assicurati che query sia importato
+
+
+/**
+ * Recupera tutti i mentori dal database.
+ * @returns {Promise} - Un oggetto contenente il successo e i dati o l'errore.
+ */
+export async function getAllMentors() {
+ const db = getFirestore();
+ try {
+
+
+ // Crea una query per ottenere tutti gli utenti con userType 'mentor'
+ const q = query(
+ collection(db, "utenti"), // Usa db per riferirti a Firestore
+ where("userType", "==", "mentor") // Filtra per 'mentor'
+ );
+
+ // Esegui la query
+ const querySnapshot = await getDocs(q);
+
+ if (querySnapshot.empty) {
+
+ return { success: true, data: [] }; // Nessun mentore trovato
+ }
+
+ const mentoriData = querySnapshot.docs.map((doc) => ({
+ id: doc.id,
+ ...doc.data(), // Aggiungi i dati del documento all'oggetto
+ }));
+
+
+ return { success: true, data: mentoriData };
+ } catch (error) {
+ console.error("Errore durante il recupero dei mentori:", error);
+ return { success: false, error: error.message }; // Ritorna un oggetto di errore
+ }
+}
+
+/**
+ * Recupera i mentori di sesso femminile dal database.
+ * @returns {Promise} - Un oggetto contenente il successo e i dati o l'errore.
+ */
+export async function getMentoriFemmina() {
+ try {
+
+
+ // Crea una query per ottenere solo gli utenti di sesso femminile e userType 'mentor'
+ const q = query(
+ collection(db, "utenti"), // Usa db per riferirti a Firestore
+ where("sesso", "==", "femmina"), // Assicurati che i valori siano in minuscolo se così sono nel database
+ where("userType", "==", "mentor")
+ );
+
+ // Esegui la query
+ const querySnapshot = await getDocs(q);
+
+ if (querySnapshot.empty) {
+
+ return { success: true, data: [] }; // Nessun mentore trovato
+ }
+
+ const mentoriData = querySnapshot.docs.map((doc) => ({
+ id: doc.id,
+ ...doc.data(), // Aggiungi i dati del documento all'oggetto
+ }));
+
+
+
+ return { success: true, data: mentoriData };
+ } catch (error) {
+ console.error("Errore durante il recupero dei mentori:", error);
+ return { success: false, error: error.message }; // Ritorna un oggetto di errore
+ }
+}
\ No newline at end of file
diff --git a/app/src/dao/userDAO.js b/app/src/dao/userDAO.js
new file mode 100644
index 0000000..5afc8b3
--- /dev/null
+++ b/app/src/dao/userDAO.js
@@ -0,0 +1,138 @@
+//### DAO per l'utente
+
+// Importa i metodi necessari da Firebase Firestore
+import { getAuth, onAuthStateChanged } from "firebase/auth";
+import { getFirestore, getDoc, doc, updateDoc} from "firebase/firestore";
+import { updateCV } from "@/auth/user-registration";
+
+// Inizializza Firestore
+const db = getFirestore();
+const auth = getAuth();
+
+
+/**
+ * Ottiene l'UID dell'utente attualmente autenticato.
+ * @returns {Promise} - Restituisce l'UID dell'utente.
+ * @throws {Error} - Solleva un errore se l'utente non è autenticato.
+ */
+export async function getCurrentUserUID() {
+ return new Promise((resolve, reject) => {
+ onAuthStateChanged(auth, (user) => {
+ if (user) {
+ resolve(user.uid); // Restituisce l'UID se l'utente è autenticato
+ } else {
+ reject(new Error("Nessun utente autenticato."));
+ }
+ });
+ });
+}
+
+/**
+ * Aggiorna il profilo dell'utente in Firestore con i dati forniti.
+ *
+ * @param {string} uid - L'ID dell'utente da aggiornare.
+ * @param {Object} profileData - I dati da aggiornare nel profilo dell'utente (es. nome, cognome, ecc.).
+ * @returns {Promise} - Un oggetto che indica il successo o il fallimento dell'operazione.
+ * Ritorna `{ success: true }` se l'aggiornamento è riuscito, altrimenti `{ success: false, error: string }` con il messaggio di errore.
+ * @throws {Error} - Solleva un errore se l'aggiornamento del profilo non riesce.
+ */
+export async function updateUserProfile(uid, profileData) {
+ try {
+ // Riferimento al documento dell'utente nella collezione 'utenti' in Firestore
+ const userDocRef = doc(db, 'utenti', uid);
+
+ // Aggiornamento del documento con i nuovi dati passati come 'profileData'
+ await updateDoc(userDocRef, profileData);
+
+ console.log('Profilo aggiornato con successo!');
+
+ // Ritorna un oggetto di successo
+ return { success: true };
+ } catch (error) {
+ console.error('Errore durante l\'aggiornamento del profilo:', error);
+
+ // Ritorna un oggetto di errore
+ return { success: false, error: error.message };
+ }
+}
+
+/**
+ * Aggiorna il profilo dell'utente insieme al caricamento del CV (se presente).
+ *
+ * @param {string} userId - L'ID dell'utente da aggiornare.
+ * @param {Object} formData - I dati del modulo, inclusi i dati del profilo e del CV.
+ * @returns {Promise} - Un oggetto che indica il successo o il fallimento dell'operazione.
+ * Ritorna `{ success: true }` se l'aggiornamento è riuscito, altrimenti `{ success: false, error: string }` con il messaggio di errore.
+ * @throws {Error} - Solleva un errore se l'aggiornamento del profilo o del CV non riesce.
+ */
+export async function updateUserProfileWithCV(userId, formData) {
+ try {
+ // Crea un oggetto con i dati da aggiornare
+ const updatedData = {
+ meetingMode: formData.meetingMode || null,
+ availability: formData.availability || null,
+ impiego: formData.impiego || null,
+ portfolioProjects: formData.portfolioProjects, // Progetti nel portfolio dell'utente
+ nome: formData.nome, // Nome dell'utente
+ cognome: formData.cognome, // Cognome dell'utente
+ sesso: formData.genere, // Genere dell'utente
+ titoloDiStudio: formData.titoloDiStudio, // Titolo di studio dell'utente
+ competenze: formData.competenze, // Elenco delle competenze dell'utente
+ occupazione: formData.occupazione, // Occupazione dell'utente
+ field: formData.field || "", // Area di specializzazione (opzionale)
+ updatedAt: new Date().toISOString(), // Timestamp dell'ultimo aggiornamento
+ };
+
+ console.log("[updateUserProfileWithCV] sto per inviare questi dati: {updatedData}");
+ console.dir(updatedData);
+
+ // Se l'utente ha caricato un nuovo CV, aggiorna il CV tramite la funzione 'updateCV'
+ let cvURL = formData.cv ? await updateCV(formData.cv, userId, formData.oldCvURL) : formData.oldCvURL;
+
+ // Aggiungi l'URL del CV aggiornato ai dati
+ if (cvURL) {
+ updatedData.cv = cvURL;
+ }
+
+ // Aggiorna i dati dell'utente in Firestore
+ const updateResult = await updateUserProfile(userId, updatedData);
+
+ if (updateResult.success) {
+ console.log("Profilo e CV aggiornati con successo!");
+ return { success: true };
+ } else {
+ return { success: false, error: updateResult.error };
+ }
+ } catch (error) {
+ console.error("Errore durante l'aggiornamento del profilo completo:", error.message);
+ return { success: false, error: error.message };
+ }
+}
+
+
+
+/**
+ * Recupera i dati di un utente dato il suo ID.
+ * @param {string} userId - L'ID dell'utente da cercare.
+ * @returns {Promise} - Un oggetto con i dati dell'utente se trovato.
+ * @throws {Error} - Solleva un errore se il documento non esiste.
+ */
+export async function getUserByID(userId) {
+ try {
+ // Riferimento al documento
+ const docRef = doc(db, "utenti", userId);
+
+ // Recupera i dati del documento
+ const utente = await getDoc(docRef);
+
+ // Controlla se il documento esiste
+ if (utente.exists()) {
+ return { id: userId, ...utente.data() }; // Aggiunge l'ID all'oggetto dati
+ } else {
+ throw new Error("Utente non trovato!");
+ }
+ } catch (error) {
+ console.error("Errore durante il recupero dell'utente:", error);
+ throw error; // Propaga l'errore al chiamante
+ }
+}
diff --git a/app/src/firebase/firebase.js b/app/src/firebase/firebase.js
new file mode 100644
index 0000000..232d8ec
--- /dev/null
+++ b/app/src/firebase/firebase.js
@@ -0,0 +1,27 @@
+import { initializeApp } from "firebase/app";
+import { getStorage, connectStorageEmulator } from "firebase/storage";
+import { getFirestore } from "firebase/firestore"; // Aggiunto per Firestore
+// La tua configurazione Firebase
+const firebaseConfig = {
+ apiKey: import.meta.env.VITE_API_KEY,
+ authDomain: import.meta.env.VITE_AUTH_DOMAIN,
+ projectId: import.meta.env.VITE_PROJECT_ID,
+ storageBucket: import.meta.env.VITE_STORAGE_BUCKET,
+ messagingSenderId: import.meta.env.VITE_MESSAGING_SENDER_ID,
+ appId: import.meta.env.VITE_APP_ID,
+ measurementId: import.meta.env.VITE_MEASUREMENT_ID
+};
+
+// Inizializza Firebase
+const app = initializeApp(firebaseConfig);
+const db = getFirestore(app);
+// Configura Firebase Storage
+const storage = getStorage(app);
+if (window.location.hostname === "localhost") {
+ // Connetti l'emulatore di Firebase Storage alla porta 9199
+ connectStorageEmulator(storage, "localhost", 9199);
+}
+
+// Esporta app e storage
+export { app, storage, db };
+export default app;
\ No newline at end of file
diff --git a/app/src/hooks/use-toast.js b/app/src/hooks/use-toast.js
new file mode 100644
index 0000000..df6b786
--- /dev/null
+++ b/app/src/hooks/use-toast.js
@@ -0,0 +1,154 @@
+// Inspired by react-hot-toast library
+import * as React from "react"
+
+const TOAST_LIMIT = 1
+const TOAST_REMOVE_DELAY = 1000000
+
+const actionTypes = {
+ ADD_TOAST: "ADD_TOAST",
+ UPDATE_TOAST: "UPDATE_TOAST",
+ DISMISS_TOAST: "DISMISS_TOAST",
+ REMOVE_TOAST: "REMOVE_TOAST"
+}
+
+let count = 0
+
+function genId() {
+ count = (count + 1) % Number.MAX_SAFE_INTEGER
+ return count.toString();
+}
+
+const toastTimeouts = new Map()
+
+const addToRemoveQueue = (toastId) => {
+ if (toastTimeouts.has(toastId)) {
+ return
+ }
+
+ const timeout = setTimeout(() => {
+ toastTimeouts.delete(toastId)
+ dispatch({
+ type: "REMOVE_TOAST",
+ toastId: toastId,
+ })
+ }, TOAST_REMOVE_DELAY)
+
+ toastTimeouts.set(toastId, timeout)
+}
+
+export const reducer = (state, action) => {
+ switch (action.type) {
+ case "ADD_TOAST":
+ return {
+ ...state,
+ toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),
+ };
+
+ case "UPDATE_TOAST":
+ return {
+ ...state,
+ toasts: state.toasts.map((t) =>
+ t.id === action.toast.id ? { ...t, ...action.toast } : t),
+ };
+
+ case "DISMISS_TOAST": {
+ const { toastId } = action
+
+ // ! Side effects ! - This could be extracted into a dismissToast() action,
+ // but I'll keep it here for simplicity
+ if (toastId) {
+ addToRemoveQueue(toastId)
+ } else {
+ state.toasts.forEach((toast) => {
+ addToRemoveQueue(toast.id)
+ })
+ }
+
+ return {
+ ...state,
+ toasts: state.toasts.map((t) =>
+ t.id === toastId || toastId === undefined
+ ? {
+ ...t,
+ open: false,
+ }
+ : t),
+ };
+ }
+ case "REMOVE_TOAST":
+ if (action.toastId === undefined) {
+ return {
+ ...state,
+ toasts: [],
+ }
+ }
+ return {
+ ...state,
+ toasts: state.toasts.filter((t) => t.id !== action.toastId),
+ };
+ }
+}
+
+const listeners = []
+
+let memoryState = { toasts: [] }
+
+function dispatch(action) {
+ memoryState = reducer(memoryState, action)
+ listeners.forEach((listener) => {
+ listener(memoryState)
+ })
+}
+
+function toast({
+ ...props
+}) {
+ const id = genId()
+
+ const update = (props) =>
+ dispatch({
+ type: "UPDATE_TOAST",
+ toast: { ...props, id },
+ })
+ const dismiss = () => dispatch({ type: "DISMISS_TOAST", toastId: id })
+
+ dispatch({
+ type: "ADD_TOAST",
+ toast: {
+ ...props,
+ id,
+ open: true,
+ onOpenChange: (open) => {
+ if (!open) dismiss()
+ },
+ },
+ })
+
+ return {
+ id: id,
+ dismiss,
+ update,
+ }
+}
+
+function useToast() {
+ const [state, setState] = React.useState(memoryState)
+
+ React.useEffect(() => {
+ listeners.push(setState)
+ return () => {
+ const index = listeners.indexOf(setState)
+ if (index > -1) {
+ listeners.splice(index, 1)
+ }
+ };
+ }, [state])
+
+ return {
+ ...state,
+ toast,
+ dismiss: (toastId) => dispatch({ type: "DISMISS_TOAST", toastId }),
+ };
+}
+
+export { useToast, toast }
diff --git a/app/src/index.css b/app/src/index.css
index 4f6671a..f315b10 100644
--- a/app/src/index.css
+++ b/app/src/index.css
@@ -3,75 +3,6 @@
@tailwind utilities;
-:root {
- font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
- line-height: 1.5;
- font-weight: 400;
-
- color-scheme: light dark;
- color: rgba(255, 255, 255, 0.87);
- background-color: #242424;
-
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-a {
- font-weight: 500;
- color: #646cff;
- text-decoration: inherit;
-}
-a:hover {
- color: #535bf2;
-}
-
-body {
- margin: 0;
- display: flex;
- place-items: center;
- min-width: 320px;
- min-height: 100vh;
-}
-
-h1 {
- font-size: 3.2em;
- line-height: 1.1;
-}
-
-button {
- border-radius: 8px;
- border: 1px solid transparent;
- padding: 0.6em 1.2em;
- font-size: 1em;
- font-weight: 500;
- font-family: inherit;
- background-color: #1a1a1a;
- cursor: pointer;
- transition: border-color 0.25s;
-}
-button:hover {
- border-color: #646cff;
-}
-button:focus,
-button:focus-visible {
- outline: 4px auto -webkit-focus-ring-color;
-}
-
-@media (prefers-color-scheme: light) {
- :root {
- color: #213547;
- background-color: #ffffff;
- }
- a:hover {
- color: #747bff;
- }
- button {
- background-color: #f9f9f9;
- }
-}
-
@layer base {
:root {
--background: 0 0% 100%;
diff --git a/app/storage.rules b/app/storage.rules
new file mode 100644
index 0000000..c807920
--- /dev/null
+++ b/app/storage.rules
@@ -0,0 +1,12 @@
+rules_version = '2';
+
+// Craft rules based on data in your Firestore database
+// allow write: if firestore.get(
+// /databases/(default)/documents/users/$(request.auth.uid)).data.isAdmin;
+service firebase.storage {
+ match /b/{bucket}/o {
+ match /{allPaths=**} {
+ allow read, write: if true;
+ }
+ }
+}
diff --git a/app/webpack.config.js b/app/webpack.config.js
new file mode 100644
index 0000000..82d78ff
--- /dev/null
+++ b/app/webpack.config.js
@@ -0,0 +1,17 @@
+module.exports = {
+ module: {
+ rules: [
+ {
+ test: /\.jsx?$/, // Regola per i file .js e .jsx
+ exclude: /node_modules/, // Esclude la cartella node_modules
+ use: {
+ loader: 'babel-loader',
+ options: {
+ presets: ['@babel/preset-react'], // Aggiunge il preset per React
+ },
+ },
+ },
+ ],
+ },
+ };
+
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..4cc3366
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,6 @@
+{
+ "name": "yoda",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {}
+}