diff --git a/analystview/.gitignore b/analystview/.gitignore
new file mode 100644
index 0000000..53f7466
--- /dev/null
+++ b/analystview/.gitignore
@@ -0,0 +1,5 @@
+node_modules
+.DS_Store
+dist
+dist-ssr
+*.local
\ No newline at end of file
diff --git a/analystview/.prettierrc.json b/analystview/.prettierrc.json
new file mode 100644
index 0000000..b2095be
--- /dev/null
+++ b/analystview/.prettierrc.json
@@ -0,0 +1,4 @@
+{
+ "semi": false,
+ "singleQuote": true
+}
diff --git a/analystview/README.md b/analystview/README.md
new file mode 100644
index 0000000..a646151
--- /dev/null
+++ b/analystview/README.md
@@ -0,0 +1,50 @@
+# Frappe UI Starter
+
+This template should help get you started developing custom frontend for Frappe
+apps with Vue 3 and the Frappe UI package.
+
+![Auth](https://user-images.githubusercontent.com/34810212/236846289-ac31c292-81ea-4456-be65-95773a4049be.png)
+
+![Home](https://user-images.githubusercontent.com/34810212/236846299-fd534e2b-1c06-4f01-a4f2-91a27547cd55.png)
+
+This boilerplate sets up Vue 3, Vue Router, TailwindCSS, and Frappe UI out of
+the box. It also has basic authentication frontend.
+
+## Docs
+
+[Frappe UI Website](https://frappeui.com)
+
+## Usage
+
+This template is meant to be cloned inside an existing Frappe App. Assuming your
+apps name is `todo`. Clone this template in the root folder of your app using `degit`.
+
+```
+cd apps/todo
+npx degit NagariaHussain/doppio_frappeui_starter frontend
+cd frontend
+yarn
+yarn dev
+```
+
+In a development environment, you need to put the below key-value pair in your `site_config.json` file:
+
+```
+"ignore_csrf": 1
+```
+
+This will prevent `CSRFToken` errors while using the vite dev server. In production environment, the `csrf_token` is attached to the `window` object in `index.html` for you.
+
+The Vite dev server will start on the port `8080`. This can be changed from `vite.config.js`.
+The development server is configured to proxy your frappe app (usually running on port `8000`). If you have a site named `todo.test`, open `http://todo.test:8080` in your browser. If you see a button named "Click to send 'ping' request", congratulations!
+
+If you notice the browser URL is `/frontend`, this is the base URL where your frontend app will run in production.
+To change this, open `src/router.js` and change the base URL passed to `createWebHistory`.
+
+## Resources
+
+- [Vue 3](https://v3.vuejs.org/guide/introduction.html)
+- [Vue Router](https://next.router.vuejs.org/guide/)
+- [Frappe UI](https://github.com/frappe/frappe-ui)
+- [TailwindCSS](https://tailwindcss.com/docs/utility-first)
+- [Vite](https://vitejs.dev/guide/)
diff --git a/analystview/index.html b/analystview/index.html
new file mode 100644
index 0000000..86cc91b
--- /dev/null
+++ b/analystview/index.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ Frappe UI App
+
+
+
+
+
+
+
+
+
+
diff --git a/analystview/package.json b/analystview/package.json
new file mode 100644
index 0000000..deb4251
--- /dev/null
+++ b/analystview/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "frappe-ui-frontend",
+ "private": true,
+ "version": "0.0.0",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build --base=/assets/kolanalystapp/analystview/ && yarn copy-html-entry",
+ "preview": "vite preview",
+ "copy-html-entry": "cp ../kolanalystapp/public/analystview/index.html ../kolanalystapp/www/analystview.html"
+ },
+ "dependencies": {
+ "feather-icons": "^4.28.0",
+ "frappe-ui": "^0.1.62",
+ "vue": "^3.4.29",
+ "vue-router": "^4.0.12"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^2.0.0",
+ "autoprefixer": "^10.4.2",
+ "postcss": "^8.4.5",
+ "tailwindcss": "^3.0.15",
+ "vite": "^2.7.2"
+ }
+}
\ No newline at end of file
diff --git a/analystview/postcss.config.js b/analystview/postcss.config.js
new file mode 100644
index 0000000..33ad091
--- /dev/null
+++ b/analystview/postcss.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/analystview/public/favicon.png b/analystview/public/favicon.png
new file mode 100644
index 0000000..b51db82
Binary files /dev/null and b/analystview/public/favicon.png differ
diff --git a/analystview/src/App.vue b/analystview/src/App.vue
new file mode 100644
index 0000000..a14d0c3
--- /dev/null
+++ b/analystview/src/App.vue
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/analystview/src/assets/Inter/Inter-Black.woff b/analystview/src/assets/Inter/Inter-Black.woff
new file mode 100644
index 0000000..c7737ed
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-Black.woff differ
diff --git a/analystview/src/assets/Inter/Inter-Black.woff2 b/analystview/src/assets/Inter/Inter-Black.woff2
new file mode 100644
index 0000000..b16b995
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-Black.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-BlackItalic.woff b/analystview/src/assets/Inter/Inter-BlackItalic.woff
new file mode 100644
index 0000000..b5f1447
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-BlackItalic.woff differ
diff --git a/analystview/src/assets/Inter/Inter-BlackItalic.woff2 b/analystview/src/assets/Inter/Inter-BlackItalic.woff2
new file mode 100644
index 0000000..a3f1b70
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-BlackItalic.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-Bold.woff b/analystview/src/assets/Inter/Inter-Bold.woff
new file mode 100644
index 0000000..e384555
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-Bold.woff differ
diff --git a/analystview/src/assets/Inter/Inter-Bold.woff2 b/analystview/src/assets/Inter/Inter-Bold.woff2
new file mode 100644
index 0000000..835dd49
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-Bold.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-BoldItalic.woff b/analystview/src/assets/Inter/Inter-BoldItalic.woff
new file mode 100644
index 0000000..ffac3f5
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-BoldItalic.woff differ
diff --git a/analystview/src/assets/Inter/Inter-BoldItalic.woff2 b/analystview/src/assets/Inter/Inter-BoldItalic.woff2
new file mode 100644
index 0000000..1a41a14
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-BoldItalic.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-ExtraBold.woff b/analystview/src/assets/Inter/Inter-ExtraBold.woff
new file mode 100644
index 0000000..885ac94
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-ExtraBold.woff differ
diff --git a/analystview/src/assets/Inter/Inter-ExtraBold.woff2 b/analystview/src/assets/Inter/Inter-ExtraBold.woff2
new file mode 100644
index 0000000..ae956b1
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-ExtraBold.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-ExtraBoldItalic.woff b/analystview/src/assets/Inter/Inter-ExtraBoldItalic.woff
new file mode 100644
index 0000000..d6cf862
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-ExtraBoldItalic.woff differ
diff --git a/analystview/src/assets/Inter/Inter-ExtraBoldItalic.woff2 b/analystview/src/assets/Inter/Inter-ExtraBoldItalic.woff2
new file mode 100644
index 0000000..8657899
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-ExtraBoldItalic.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-ExtraLight.woff b/analystview/src/assets/Inter/Inter-ExtraLight.woff
new file mode 100644
index 0000000..ff76919
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-ExtraLight.woff differ
diff --git a/analystview/src/assets/Inter/Inter-ExtraLight.woff2 b/analystview/src/assets/Inter/Inter-ExtraLight.woff2
new file mode 100644
index 0000000..694b2df
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-ExtraLight.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-ExtraLightItalic.woff b/analystview/src/assets/Inter/Inter-ExtraLightItalic.woff
new file mode 100644
index 0000000..c6ed13a
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-ExtraLightItalic.woff differ
diff --git a/analystview/src/assets/Inter/Inter-ExtraLightItalic.woff2 b/analystview/src/assets/Inter/Inter-ExtraLightItalic.woff2
new file mode 100644
index 0000000..9a7bd11
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-ExtraLightItalic.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-Italic.woff b/analystview/src/assets/Inter/Inter-Italic.woff
new file mode 100644
index 0000000..4fdb59d
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-Italic.woff differ
diff --git a/analystview/src/assets/Inter/Inter-Italic.woff2 b/analystview/src/assets/Inter/Inter-Italic.woff2
new file mode 100644
index 0000000..deca637
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-Italic.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-Light.woff b/analystview/src/assets/Inter/Inter-Light.woff
new file mode 100644
index 0000000..42850ac
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-Light.woff differ
diff --git a/analystview/src/assets/Inter/Inter-Light.woff2 b/analystview/src/assets/Inter/Inter-Light.woff2
new file mode 100644
index 0000000..65a7dad
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-Light.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-LightItalic.woff b/analystview/src/assets/Inter/Inter-LightItalic.woff
new file mode 100644
index 0000000..c4ed9a9
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-LightItalic.woff differ
diff --git a/analystview/src/assets/Inter/Inter-LightItalic.woff2 b/analystview/src/assets/Inter/Inter-LightItalic.woff2
new file mode 100644
index 0000000..555fc55
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-LightItalic.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-Medium.woff b/analystview/src/assets/Inter/Inter-Medium.woff
new file mode 100644
index 0000000..495faef
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-Medium.woff differ
diff --git a/analystview/src/assets/Inter/Inter-Medium.woff2 b/analystview/src/assets/Inter/Inter-Medium.woff2
new file mode 100644
index 0000000..871ce4c
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-Medium.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-MediumItalic.woff b/analystview/src/assets/Inter/Inter-MediumItalic.woff
new file mode 100644
index 0000000..389c7a2
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-MediumItalic.woff differ
diff --git a/analystview/src/assets/Inter/Inter-MediumItalic.woff2 b/analystview/src/assets/Inter/Inter-MediumItalic.woff2
new file mode 100644
index 0000000..aa80579
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-MediumItalic.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-Regular.woff b/analystview/src/assets/Inter/Inter-Regular.woff
new file mode 100644
index 0000000..fa7715d
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-Regular.woff differ
diff --git a/analystview/src/assets/Inter/Inter-Regular.woff2 b/analystview/src/assets/Inter/Inter-Regular.woff2
new file mode 100644
index 0000000..b52dd0a
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-Regular.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-SemiBold.woff b/analystview/src/assets/Inter/Inter-SemiBold.woff
new file mode 100644
index 0000000..18d7749
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-SemiBold.woff differ
diff --git a/analystview/src/assets/Inter/Inter-SemiBold.woff2 b/analystview/src/assets/Inter/Inter-SemiBold.woff2
new file mode 100644
index 0000000..ece5204
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-SemiBold.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-SemiBoldItalic.woff b/analystview/src/assets/Inter/Inter-SemiBoldItalic.woff
new file mode 100644
index 0000000..8ee6439
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-SemiBoldItalic.woff differ
diff --git a/analystview/src/assets/Inter/Inter-SemiBoldItalic.woff2 b/analystview/src/assets/Inter/Inter-SemiBoldItalic.woff2
new file mode 100644
index 0000000..b32c0ba
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-SemiBoldItalic.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-Thin.woff b/analystview/src/assets/Inter/Inter-Thin.woff
new file mode 100644
index 0000000..1a22286
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-Thin.woff differ
diff --git a/analystview/src/assets/Inter/Inter-Thin.woff2 b/analystview/src/assets/Inter/Inter-Thin.woff2
new file mode 100644
index 0000000..c56bc7c
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-Thin.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-ThinItalic.woff b/analystview/src/assets/Inter/Inter-ThinItalic.woff
new file mode 100644
index 0000000..d8ec837
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-ThinItalic.woff differ
diff --git a/analystview/src/assets/Inter/Inter-ThinItalic.woff2 b/analystview/src/assets/Inter/Inter-ThinItalic.woff2
new file mode 100644
index 0000000..eca5608
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-ThinItalic.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-italic.var.woff2 b/analystview/src/assets/Inter/Inter-italic.var.woff2
new file mode 100644
index 0000000..1f5d926
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-italic.var.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter-roman.var.woff2 b/analystview/src/assets/Inter/Inter-roman.var.woff2
new file mode 100644
index 0000000..05621d8
Binary files /dev/null and b/analystview/src/assets/Inter/Inter-roman.var.woff2 differ
diff --git a/analystview/src/assets/Inter/Inter.var.woff2 b/analystview/src/assets/Inter/Inter.var.woff2
new file mode 100644
index 0000000..46bb515
Binary files /dev/null and b/analystview/src/assets/Inter/Inter.var.woff2 differ
diff --git a/analystview/src/assets/Inter/inter.css b/analystview/src/assets/Inter/inter.css
new file mode 100644
index 0000000..7f09dcc
--- /dev/null
+++ b/analystview/src/assets/Inter/inter.css
@@ -0,0 +1,152 @@
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 100;
+ font-display: swap;
+ src: url('Inter-Thin.woff2?v=3.12') format('woff2'),
+ url('Inter-Thin.woff?v=3.12') format('woff');
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 100;
+ font-display: swap;
+ src: url('Inter-ThinItalic.woff2?v=3.12') format('woff2'),
+ url('Inter-ThinItalic.woff?v=3.12') format('woff');
+}
+
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 200;
+ font-display: swap;
+ src: url('Inter-ExtraLight.woff2?v=3.12') format('woff2'),
+ url('Inter-ExtraLight.woff?v=3.12') format('woff');
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 200;
+ font-display: swap;
+ src: url('Inter-ExtraLightItalic.woff2?v=3.12') format('woff2'),
+ url('Inter-ExtraLightItalic.woff?v=3.12') format('woff');
+}
+
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 300;
+ font-display: swap;
+ src: url('Inter-Light.woff2?v=3.12') format('woff2'),
+ url('Inter-Light.woff?v=3.12') format('woff');
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 300;
+ font-display: swap;
+ src: url('Inter-LightItalic.woff2?v=3.12') format('woff2'),
+ url('Inter-LightItalic.woff?v=3.12') format('woff');
+}
+
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: url('Inter-Regular.woff2?v=3.12') format('woff2'),
+ url('Inter-Regular.woff?v=3.12') format('woff');
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 400;
+ font-display: swap;
+ src: url('Inter-Italic.woff2?v=3.12') format('woff2'),
+ url('Inter-Italic.woff?v=3.12') format('woff');
+}
+
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 500;
+ font-display: swap;
+ src: url('Inter-Medium.woff2?v=3.12') format('woff2'),
+ url('Inter-Medium.woff?v=3.12') format('woff');
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 500;
+ font-display: swap;
+ src: url('Inter-MediumItalic.woff2?v=3.12') format('woff2'),
+ url('Inter-MediumItalic.woff?v=3.12') format('woff');
+}
+
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 600;
+ font-display: swap;
+ src: url('Inter-SemiBold.woff2?v=3.12') format('woff2'),
+ url('Inter-SemiBold.woff?v=3.12') format('woff');
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 600;
+ font-display: swap;
+ src: url('Inter-SemiBoldItalic.woff2?v=3.12') format('woff2'),
+ url('Inter-SemiBoldItalic.woff?v=3.12') format('woff');
+}
+
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: url('Inter-Bold.woff2?v=3.12') format('woff2'),
+ url('Inter-Bold.woff?v=3.12') format('woff');
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 700;
+ font-display: swap;
+ src: url('Inter-BoldItalic.woff2?v=3.12') format('woff2'),
+ url('Inter-BoldItalic.woff?v=3.12') format('woff');
+}
+
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 800;
+ font-display: swap;
+ src: url('Inter-ExtraBold.woff2?v=3.12') format('woff2'),
+ url('Inter-ExtraBold.woff?v=3.12') format('woff');
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 800;
+ font-display: swap;
+ src: url('Inter-ExtraBoldItalic.woff2?v=3.12') format('woff2'),
+ url('Inter-ExtraBoldItalic.woff?v=3.12') format('woff');
+}
+
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 900;
+ font-display: swap;
+ src: url('Inter-Black.woff2?v=3.12') format('woff2'),
+ url('Inter-Black.woff?v=3.12') format('woff');
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 900;
+ font-display: swap;
+ src: url('Inter-BlackItalic.woff2?v=3.12') format('woff2'),
+ url('Inter-BlackItalic.woff?v=3.12') format('woff');
+}
diff --git a/analystview/src/assets/ksplash.svg b/analystview/src/assets/ksplash.svg
new file mode 100644
index 0000000..75bcc45
--- /dev/null
+++ b/analystview/src/assets/ksplash.svg
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/analystview/src/components/AppSidebar.vue b/analystview/src/components/AppSidebar.vue
new file mode 100644
index 0000000..0e74cbf
--- /dev/null
+++ b/analystview/src/components/AppSidebar.vue
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ __(view.name) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/analystview/src/components/Filter.vue b/analystview/src/components/Filter.vue
new file mode 100644
index 0000000..e69de29
diff --git a/analystview/src/components/Icons/DetailsIcon.vue b/analystview/src/components/Icons/DetailsIcon.vue
new file mode 100644
index 0000000..1b4dc89
--- /dev/null
+++ b/analystview/src/components/Icons/DetailsIcon.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/analystview/src/components/Icons/DuplicateIcon.vue b/analystview/src/components/Icons/DuplicateIcon.vue
new file mode 100644
index 0000000..e69de29
diff --git a/analystview/src/components/Icons/EditIcon.vue b/analystview/src/components/Icons/EditIcon.vue
new file mode 100644
index 0000000..6a7861e
--- /dev/null
+++ b/analystview/src/components/Icons/EditIcon.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/analystview/src/components/Icons/KonectarLogo.vue b/analystview/src/components/Icons/KonectarLogo.vue
new file mode 100644
index 0000000..54153e2
--- /dev/null
+++ b/analystview/src/components/Icons/KonectarLogo.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/analystview/src/components/Icons/PinIcon.vue b/analystview/src/components/Icons/PinIcon.vue
new file mode 100644
index 0000000..d0e7459
--- /dev/null
+++ b/analystview/src/components/Icons/PinIcon.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/analystview/src/components/Icons/RefreshIcon.vue b/analystview/src/components/Icons/RefreshIcon.vue
new file mode 100644
index 0000000..9d5f24d
--- /dev/null
+++ b/analystview/src/components/Icons/RefreshIcon.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/analystview/src/components/Icons/UnpinIcon.vue b/analystview/src/components/Icons/UnpinIcon.vue
new file mode 100644
index 0000000..cba4cc8
--- /dev/null
+++ b/analystview/src/components/Icons/UnpinIcon.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/analystview/src/components/LayoutHeader.vue b/analystview/src/components/LayoutHeader.vue
new file mode 100644
index 0000000..49960c9
--- /dev/null
+++ b/analystview/src/components/LayoutHeader.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/analystview/src/components/QuickFilterField.vue b/analystview/src/components/QuickFilterField.vue
new file mode 100644
index 0000000..d5a36d2
--- /dev/null
+++ b/analystview/src/components/QuickFilterField.vue
@@ -0,0 +1,63 @@
+
+
+
+ updateFilter(filter, data)"
+ />
+ updateFilter(filter, v)"
+ :placeholder="filter.label"
+ />
+
+
+
+
\ No newline at end of file
diff --git a/analystview/src/components/SortBy.vue b/analystview/src/components/SortBy.vue
new file mode 100644
index 0000000..e69de29
diff --git a/analystview/src/components/UserDropdown.vue b/analystview/src/components/UserDropdown.vue
new file mode 100644
index 0000000..27d997c
--- /dev/null
+++ b/analystview/src/components/UserDropdown.vue
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+ Konectar
+
+
+ {{ session.user }}
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/analystview/src/components/ViewControllers.vue b/analystview/src/components/ViewControllers.vue
new file mode 100644
index 0000000..306c63e
--- /dev/null
+++ b/analystview/src/components/ViewControllers.vue
@@ -0,0 +1,877 @@
+
\ No newline at end of file
diff --git a/analystview/src/data/session.js b/analystview/src/data/session.js
new file mode 100644
index 0000000..b397227
--- /dev/null
+++ b/analystview/src/data/session.js
@@ -0,0 +1,42 @@
+import router from '@/router'
+import { computed, reactive } from 'vue'
+import { createResource } from 'frappe-ui'
+
+import { userResource } from './user'
+
+export function sessionUser() {
+ const cookies = new URLSearchParams(document.cookie.split('; ').join('&'))
+ let _sessionUser = cookies.get('user_id')
+ if (_sessionUser === 'Guest') {
+ _sessionUser = null
+ }
+ return _sessionUser
+}
+
+export const session = reactive({
+ login: createResource({
+ url: 'login',
+ makeParams({ email, password }) {
+ return {
+ usr: email,
+ pwd: password,
+ }
+ },
+ onSuccess(data) {
+ userResource.reload()
+ session.user = sessionUser()
+ session.login.reset()
+ router.replace(data.default_route || '/')
+ },
+ }),
+ logout: createResource({
+ url: 'logout',
+ onSuccess() {
+ userResource.reset()
+ session.user = sessionUser()
+ router.replace({ name: 'Login' })
+ },
+ }),
+ user: sessionUser(),
+ isLoggedIn: computed(() => !!session.user),
+})
diff --git a/analystview/src/data/user.js b/analystview/src/data/user.js
new file mode 100644
index 0000000..3471158
--- /dev/null
+++ b/analystview/src/data/user.js
@@ -0,0 +1,12 @@
+import router from '@/router'
+import { createResource } from 'frappe-ui'
+
+export const userResource = createResource({
+ url: 'frappe.auth.get_logged_user',
+ cache: 'User',
+ onError(error) {
+ if (error && error.exc_type === 'AuthenticationError') {
+ router.push({ name: 'LoginPage' })
+ }
+ },
+})
diff --git a/analystview/src/index.css b/analystview/src/index.css
new file mode 100644
index 0000000..166ac59
--- /dev/null
+++ b/analystview/src/index.css
@@ -0,0 +1,2 @@
+@import './assets/Inter/inter.css';
+@import 'frappe-ui/src/style.css';
diff --git a/analystview/src/main.js b/analystview/src/main.js
new file mode 100644
index 0000000..317da68
--- /dev/null
+++ b/analystview/src/main.js
@@ -0,0 +1,31 @@
+import './index.css'
+
+import { createApp } from 'vue'
+import router from './router'
+import App from './App.vue'
+
+import {
+ Button,
+ Card,
+ Input,
+ setConfig,
+ frappeRequest,
+ resourcesPlugin,
+
+
+} from 'frappe-ui'
+
+let app = createApp(App)
+
+setConfig('resourceFetcher', frappeRequest)
+
+
+app.use(router)
+app.use(resourcesPlugin)
+
+app.component('Button', Button)
+app.component('Card', Card)
+app.component('Input', Input)
+
+
+app.mount('#app')
diff --git a/analystview/src/pages/Home.vue b/analystview/src/pages/Home.vue
new file mode 100644
index 0000000..ca90c60
--- /dev/null
+++ b/analystview/src/pages/Home.vue
@@ -0,0 +1,37 @@
+
+
+
+ Welcome {{ session.user }}!
+
+
+
+ Click to send 'ping' request
+
+
+ {{ ping.data }}
+
+
{{ ping }}
+
+
+ Open Dialog
+ Logout
+
+
+
+
Dialog content
+
+
+
+
diff --git a/analystview/src/pages/Login.vue b/analystview/src/pages/Login.vue
new file mode 100644
index 0000000..e04c3e5
--- /dev/null
+++ b/analystview/src/pages/Login.vue
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
diff --git a/analystview/src/pages/OptInView.vue b/analystview/src/pages/OptInView.vue
new file mode 100644
index 0000000..ac6d23f
--- /dev/null
+++ b/analystview/src/pages/OptInView.vue
@@ -0,0 +1,365 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/analystview/src/pages/OptList.vue b/analystview/src/pages/OptList.vue
new file mode 100644
index 0000000..9f77294
--- /dev/null
+++ b/analystview/src/pages/OptList.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/analystview/src/router.js b/analystview/src/router.js
new file mode 100644
index 0000000..9401a8c
--- /dev/null
+++ b/analystview/src/router.js
@@ -0,0 +1,55 @@
+import { createRouter, createWebHistory } from 'vue-router'
+import { session } from './data/session'
+import { userResource } from '@/data/user'
+
+const routes = [
+ {
+ path: '/',
+ name: 'Home',
+ component: () => import('@/pages/Home.vue'),
+ },
+ {
+ name: 'Login',
+ path: '/account/login',
+ component: () => import('@/pages/Login.vue'),
+ },
+ {
+ name: 'OptView',
+ path: '/home/OptView',
+ component: () => import('@/pages/OptInView.vue'),
+ },
+ {
+ name: 'OptList',
+ path: '/home/OptList',
+ component: () => import('@/pages/OptList.vue'),
+ },
+ {
+ name: 'LayoutHeader',
+ path: '/LayoutHeader',
+ component: () => import('@/components/LayoutHeader.vue'),
+ },
+]
+
+let router = createRouter({
+ history: createWebHistory('/analystview'),
+ routes,
+})
+
+router.beforeEach(async (to, from, next) => {
+ let isLoggedIn = session.isLoggedIn
+ try {
+ await userResource.promise
+ } catch (error) {
+ isLoggedIn = false
+ }
+
+ if (to.name === 'Login' && isLoggedIn) {
+ next({ name: 'Home' })
+ } else if (to.name !== 'Login' && !isLoggedIn) {
+ next({ name: 'Login' })
+ } else {
+ next()
+ }
+})
+
+export default router
diff --git a/analystview/tailwind.config.js b/analystview/tailwind.config.js
new file mode 100644
index 0000000..e2ceba6
--- /dev/null
+++ b/analystview/tailwind.config.js
@@ -0,0 +1,12 @@
+module.exports = {
+ presets: [require('frappe-ui/src/utils/tailwind.config')],
+ content: [
+ './index.html',
+ './src/**/*.{vue,js,ts,jsx,tsx}',
+ './node_modules/frappe-ui/src/components/**/*.{vue,js,ts,jsx,tsx}',
+ ],
+ theme: {
+ extend: {},
+ },
+ plugins: [],
+}
diff --git a/analystview/vite.config.js b/analystview/vite.config.js
new file mode 100644
index 0000000..b2847c5
--- /dev/null
+++ b/analystview/vite.config.js
@@ -0,0 +1,22 @@
+import path from 'path'
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+import frappeui from 'frappe-ui/vite'
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [frappeui(), vue()],
+ resolve: {
+ alias: {
+ '@': path.resolve(__dirname, 'src'),
+ },
+ },
+ build: {
+ outDir: `../${path.basename(path.resolve('..'))}/public/analystview`,
+ emptyOutDir: true,
+ target: 'es2015',
+ },
+ optimizeDeps: {
+ include: ['frappe-ui > feather-icons', 'showdown', 'engine.io-client'],
+ },
+})
diff --git a/analystview/yarn.lock b/analystview/yarn.lock
new file mode 100644
index 0000000..a2bd63f
--- /dev/null
+++ b/analystview/yarn.lock
@@ -0,0 +1,1856 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.0.0":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789"
+ integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==
+ dependencies:
+ "@babel/highlight" "^7.16.7"
+
+"@babel/helper-validator-identifier@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad"
+ integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==
+
+"@babel/highlight@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.7.tgz#81a01d7d675046f0d96f82450d9d9578bdfd6b0b"
+ integrity sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.16.7"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85"
+ integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==
+
+"@babel/runtime@^7.13.10":
+ version "7.21.0"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673"
+ integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==
+ dependencies:
+ regenerator-runtime "^0.13.11"
+
+"@floating-ui/core@^1.0.0":
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.1.tgz#a4e6fef1b069cda533cbc7a4998c083a37f37573"
+ integrity sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==
+ dependencies:
+ "@floating-ui/utils" "^0.2.0"
+
+"@floating-ui/dom@^1.5.4", "@floating-ui/dom@^1.6.1":
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.5.tgz#323f065c003f1d3ecf0ff16d2c2c4d38979f4cb9"
+ integrity sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==
+ dependencies:
+ "@floating-ui/core" "^1.0.0"
+ "@floating-ui/utils" "^0.2.0"
+
+"@floating-ui/utils@^0.2.0", "@floating-ui/utils@^0.2.1":
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.2.tgz#d8bae93ac8b815b2bd7a98078cf91e2724ef11e5"
+ integrity sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==
+
+"@floating-ui/vue@^1.0.4":
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/@floating-ui/vue/-/vue-1.0.6.tgz#31860a12f1135d19554c232d99c5bab631c5c576"
+ integrity sha512-EdrOljjkpkkqZnrpqUcPoz9NvHxuTjUtSInh6GMv3+Mcy+giY2cE2pHh9rpacRcZ2eMSCxel9jWkWXTjLmY55w==
+ dependencies:
+ "@floating-ui/dom" "^1.6.1"
+ "@floating-ui/utils" "^0.2.1"
+ vue-demi ">=0.13.0"
+
+"@headlessui/vue@^1.7.14":
+ version "1.7.16"
+ resolved "https://registry.yarnpkg.com/@headlessui/vue/-/vue-1.7.16.tgz#bdc9d32d329248910325539b99e6abfce0c69f89"
+ integrity sha512-nKT+nf/q6x198SsyK54mSszaQl/z+QxtASmgMEJtpxSX2Q0OPJX0upS/9daDyiECpeAsvjkoOrm2O/6PyBQ+Qg==
+
+"@internationalized/date@^3.5.2":
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/@internationalized/date/-/date-3.5.3.tgz#acef6e6f8855a44d685111023aa471f2012643c8"
+ integrity sha512-X9bi8NAEHAjD8yzmPYT2pdJsbe+tYSEBAfowtlxJVJdZR3aK8Vg7ZUT1Fm5M47KLzp/M1p1VwAaeSma3RT7biw==
+ dependencies:
+ "@swc/helpers" "^0.5.0"
+
+"@jridgewell/sourcemap-codec@^1.4.15":
+ version "1.4.15"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@linaria/core@3.0.0-beta.13":
+ version "3.0.0-beta.13"
+ resolved "https://registry.yarnpkg.com/@linaria/core/-/core-3.0.0-beta.13.tgz#049c5be5faa67e341e413a0f6b641d5d78d91056"
+ integrity sha512-3zEi5plBCOsEzUneRVuQb+2SAx3qaC1dj0FfFAI6zIJQoDWu0dlSwKijMRack7oO9tUWrchfj3OkKQAd1LBdVg==
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@popperjs/core@^2.11.2":
+ version "2.11.2"
+ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9"
+ integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==
+
+"@popperjs/core@^2.9.0":
+ version "2.11.7"
+ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.7.tgz#ccab5c8f7dc557a52ca3288c10075c9ccd37fff7"
+ integrity sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==
+
+"@remirror/core-constants@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@remirror/core-constants/-/core-constants-2.0.0.tgz#a52f89059d93955e00810023cc76b4f7db9650bf"
+ integrity sha512-vpePPMecHJllBqCWXl6+FIcZqS+tRUM2kSCCKFeEo1H3XUEv3ocijBIPhnlSAa7g6maX+12ATTgxrOsLpWVr2g==
+ dependencies:
+ "@babel/runtime" "^7.13.10"
+
+"@remirror/core-helpers@^2.0.1":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@remirror/core-helpers/-/core-helpers-2.0.1.tgz#6847666a009ada8c9b9f3a093c13a6d07a95d9bb"
+ integrity sha512-s8M1pn33aBUhduvD1QR02uUQMegnFkGaTr4c1iBzxTTyg0rbQstzuQ7Q8TkL6n64JtgCdJS9jLz2dONb2meBKQ==
+ dependencies:
+ "@babel/runtime" "^7.13.10"
+ "@linaria/core" "3.0.0-beta.13"
+ "@remirror/core-constants" "^2.0.0"
+ "@remirror/types" "^1.0.0"
+ "@types/object.omit" "^3.0.0"
+ "@types/object.pick" "^1.3.1"
+ "@types/throttle-debounce" "^2.1.0"
+ case-anything "^2.1.10"
+ dash-get "^1.0.2"
+ deepmerge "^4.2.2"
+ fast-deep-equal "^3.1.3"
+ make-error "^1.3.6"
+ object.omit "^3.0.0"
+ object.pick "^1.3.0"
+ throttle-debounce "^3.0.1"
+
+"@remirror/types@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@remirror/types/-/types-1.0.0.tgz#cc8764440089a2ada71f149c409739575b73b12e"
+ integrity sha512-7HQbW7k8VxrAtfzs9FxwO6XSDabn8tSFDi1wwzShOnU+cvaYpfxu0ygyTk3TpXsag1hgFKY3ZIlAfB4WVz2LkQ==
+ dependencies:
+ type-fest "^2.0.0"
+
+"@socket.io/component-emitter@~3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553"
+ integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==
+
+"@swc/helpers@^0.5.0":
+ version "0.5.11"
+ resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.11.tgz#5bab8c660a6e23c13b2d23fcd1ee44a2db1b0cb7"
+ integrity sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==
+ dependencies:
+ tslib "^2.4.0"
+
+"@tailwindcss/forms@^0.5.3":
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.5.3.tgz#e4d7989686cbcaf416c53f1523df5225332a86e7"
+ integrity sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==
+ dependencies:
+ mini-svg-data-uri "^1.2.3"
+
+"@tailwindcss/typography@^0.5.0":
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.0.tgz#47886ec46ac41e1211d24fea05301046d9b30906"
+ integrity sha512-1p/3C6C+JJziS/ghtG8ACYalbA2SyLJY27Pm33cVTlAoY6VQ7zfm2H64cPxUMBkVIlWXTtWHhZcZJPobMRmQAA==
+ dependencies:
+ lodash.castarray "^4.4.0"
+ lodash.isplainobject "^4.0.6"
+ lodash.merge "^4.6.2"
+ lodash.uniq "^4.5.0"
+
+"@tanstack/virtual-core@3.5.0":
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.5.0.tgz#108208d0f1d75271300bc5560cf9a85a1fa01e89"
+ integrity sha512-KnPRCkQTyqhanNC0K63GBG3wA8I+D1fQuVnAvcBF8f13akOKeQp1gSbu6f77zCxhEk727iV5oQnbHLYzHrECLg==
+
+"@tanstack/vue-virtual@^3.1.3":
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/@tanstack/vue-virtual/-/vue-virtual-3.5.0.tgz#5794af3b2d0cc0331ba3f671fba8770e0abd4993"
+ integrity sha512-wvRQ8sFxn/NDr3WvI5XabhFovZ5MBmpEck2GHpTxYunmV63Ovpl30lRu6W5BPQo35a1GqDZ+Pvzlz6WDWRNqqw==
+ dependencies:
+ "@tanstack/virtual-core" "3.5.0"
+
+"@tiptap/core@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.1.10.tgz#6d8f3c777f1700dcc6c903b1185576754175e366"
+ integrity sha512-yhUKsac6nlqbPQfwQnp+4Jb110EqmzocXKoZacLwzHpM7JVsr2+LXMDu9kahtrvHNJErJljhnQvDHRsrrYeJkQ==
+
+"@tiptap/extension-blockquote@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.1.10.tgz#dc475bef70dd460fc730a14b3b4cc18f37cd1b2d"
+ integrity sha512-lpBF/a+qgv4Bdf7HYisTkMFdFdGfn2SqspsydvG8UI7N9B/PfnCCrtoMaC3bqTaT6u8ZVxyM3Y3vnq2AxXJvBw==
+
+"@tiptap/extension-bold@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.1.10.tgz#fb71c2575087d3d2a9c6d214b3c1587da931cc61"
+ integrity sha512-I43WCwc7pyz5vtKGj24Rjv7HN0EK5S4PlADQPBuhC1qQvfCTFvjrBB6ZmsekUMGmllW0qMOFVLSjtffpckqshA==
+
+"@tiptap/extension-bubble-menu@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.1.10.tgz#551e93219b98f097331b30865123d36e95c37404"
+ integrity sha512-XxgJajXkfAj/fChXkIwKBs7/3pd7OxV1uGc6Opx1qW/nSRYx/rr97654Sx/sg6auwIlbpRoqTmyqjbykGX1/yA==
+ dependencies:
+ tippy.js "^6.3.7"
+
+"@tiptap/extension-bullet-list@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.1.10.tgz#e7d7fb578502da6c6208a4daa3e2fe4249ae6280"
+ integrity sha512-e6aFr29OSOmXsjFZB2zt3p8aeCWOx0C9Ayrpdf4QBUCOUJtt6FQPxxiYc+XZcdrYbLGLznA7QJlulCK9SGv2Fw==
+
+"@tiptap/extension-code-block@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.1.10.tgz#a125a12f716728b271a130178c6fc60237ed46f5"
+ integrity sha512-M+s89V9mP3tOoS6p/X2Dzw/Z7Fcg9EF0ZXlsMNifdlpwJlhAIYxI7vjPBmkMAFXTDB5eMZblXyNQaZ7v6V2Yeg==
+
+"@tiptap/extension-code@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.1.10.tgz#704798f90a32d6166ce96dc65ef4a541f424f895"
+ integrity sha512-1yy/kR0FAeMkDdAt1LW/FH6vlyZLqLZqY6BM+wBCiGrr+XeA5FTXih9iT/4gbTRuIzG0EPqx18nvroG7hUsWBg==
+
+"@tiptap/extension-color@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-color/-/extension-color-2.1.10.tgz#5941f40a0418f3bc2bd52f172957be2e4e8ce3d6"
+ integrity sha512-ZBHi/4+bT3PbC/PtZFF6lc1QbnhUYBLRd4o6AHbtNqBFVcagbRUeiyxJg5xXQa/Ar9eR3NPkG0y5WY/kRxB9Bg==
+
+"@tiptap/extension-document@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.1.10.tgz#6d2ab2301c86139d711fa460a311aa2c8bb343f8"
+ integrity sha512-jNlNGQIGg471DvzhADaEoRINa3LNghowrBbKK9d5wGVnbKRykNEPwjCf8zNl+m5NBmCZl3lsdznlwBk5zyh5Bg==
+
+"@tiptap/extension-dropcursor@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.1.10.tgz#490c9aa82656592c9820c55214381fb9bfea92f2"
+ integrity sha512-GhsWsCq6wLb8HJ32BeAm7ndv4lPyu1F7FFwmnARzEF5q54FV20kWSv2zC+Dv0dTvynXR3quXybdUM92xeNDovw==
+
+"@tiptap/extension-floating-menu@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.1.10.tgz#82914a02e04e019d8b5da5158b32ffb29d4cce80"
+ integrity sha512-uChrDrY3usnF9wSegqq+YGaqd229p9gmaB5xyOyMERDs972hKj4Ul95rXzBBiMKAWUMw9eM09i7+ijTzz4KDUw==
+ dependencies:
+ tippy.js "^6.3.7"
+
+"@tiptap/extension-gapcursor@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.1.10.tgz#712853ce82642108e50a37014d585ff72af6758d"
+ integrity sha512-WSBT9X7dzg0HyMoMP/Yyxl28QwIJO90YzobI9z5mav86BQv7C5wU0fQSpbpAbsN3s7lxKhPwNrXkwkpnXT4ZCA==
+
+"@tiptap/extension-hard-break@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.1.10.tgz#e885e83d936b45891bf4dc40c713d042f84eb8c4"
+ integrity sha512-sYrzpPoV5jQri+duGb50nDTs+hOBQDxXTKlJuZNFfZMwgx6epwxb8xICcGAUJFShuuW8UAWCNcB4jG9tMqgvyw==
+
+"@tiptap/extension-heading@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.1.10.tgz#1b32726551466c29987861181966e5675417b28c"
+ integrity sha512-1OgmrRPMcY52WI7I4799xd4eIsEX/bI813B8mZvNYXLzZI75pLW1hmz1mUvBYyMwlcek74zVTGYgPy11o+2JEg==
+
+"@tiptap/extension-highlight@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-highlight/-/extension-highlight-2.1.10.tgz#8d94db01a2324e0ce380e6e7515fa0bc6004d9b9"
+ integrity sha512-HPD9T0MPEfrD40aSjcj23OcAYDnpsRLXxwQAYK1jw6Fvk7OtJZn8iaoAb4GcFfcKs3vgkpA9DC6DXlnvN0txYA==
+
+"@tiptap/extension-history@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.1.10.tgz#efa60d657a76818361a3af14769660672d4bc227"
+ integrity sha512-tApuN8MIJMzc0dxvkYJPt3t5cea9NuZBGNiuVedJwMMUF6hbFpMZAt20GW2qwjBaZ76rQwbLp1s3KnImFsPe5A==
+
+"@tiptap/extension-horizontal-rule@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.1.10.tgz#cfdb67530be100054fc8511942d4ec3534acf828"
+ integrity sha512-91lGpK2d6WMPhrMDPBURS8z8pEg1CUBYy7GmBenKvvgh+JzVhG+U6MtykfWNfm2R4iRXOl1xLbyUOCiOSUXodQ==
+
+"@tiptap/extension-image@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.1.10.tgz#6c597ad02285f1f3508fd4aa21e30213657cbd7c"
+ integrity sha512-d7+d4J2TJ99+phFbVTpsFhi208jAgcrfbdwUDkkwjdF+PQhax5pounSt/8eZPWdyCXj+EWYjCjx0znwsD6+SCA==
+
+"@tiptap/extension-italic@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.1.10.tgz#7183119c8c61beb2ac635ca3c2066624530b4a56"
+ integrity sha512-ebw5m+rWx6K5UoBVXSkz3fpvDJh/wScfYmwl6pkbjc2jNbZiln2LSiLHYc2eIYJ2aTsVxcw/n0Azfk5Lb19InA==
+
+"@tiptap/extension-link@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.1.10.tgz#c2a33fdf33dd2d97f29381ae2163c10318dc371f"
+ integrity sha512-dXxPTWzJzpbDRAewM4P8jN/n9h8uUH83lOLwweuODYCqHRdjQL/uGkQworFFrgqmRHs+9JjHZ4DETILZVawJ+Q==
+ dependencies:
+ linkifyjs "^4.1.0"
+
+"@tiptap/extension-list-item@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.1.10.tgz#0615e4fb68161e6457e6041e195f454bfd537d44"
+ integrity sha512-rRRyB14vOcSjTMAh8Y+50TRC/jO469CelGwFjOLrK1ZSEag5wmLDaqpWOOb52BFYnvCHuIm1HqZtdL5bTI/J1w==
+
+"@tiptap/extension-mention@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-mention/-/extension-mention-2.1.10.tgz#a60d5a4ad62f8dcceea10fe6951fd4af8e3e5d1d"
+ integrity sha512-OYt4etiv3N2rj+eQUZimuFHM8AK0DP90WknUFLBF++FKB7l50WOkVv7ZEK7i78JBzNkIN4vAI7K6NhY0HCvQzg==
+
+"@tiptap/extension-ordered-list@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.1.10.tgz#ef5d5ba68baf86e9b66c1b2c1cec458aa111ad44"
+ integrity sha512-jouo3RHUMxU4dPzZcfZdUzmsLVp1KHrLIAD2YAxBuqArACrBNfJpIhtkTKuGLlaFhKqGr+EmNdNQnK8JOBhLtQ==
+
+"@tiptap/extension-paragraph@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.1.10.tgz#ee1238d2d6e9460b2a929b05a5fd43cfb58a6017"
+ integrity sha512-kzuHbrxcxpWkha5P+JFzCKT54pNqb4IBKMU5qT9YGhZSdNTtU63ncdCHM+Ad1ukLuvXAv95zh1IQC5j+Z1Qk4A==
+
+"@tiptap/extension-placeholder@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.1.10.tgz#bdb03dac209444276f25d76f3929bb2bc1facfe8"
+ integrity sha512-lwtNmMZpxvQBGP72/zrdPFOmn/3QNZAKpkrfrK95Ri4TU6LPeDDwPsP81s9mkAFZPuDQ1i8SPakl+RivWa6qtA==
+
+"@tiptap/extension-strike@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.1.10.tgz#ec311395d16af15345b63d2dac2d459b9ad5fa9e"
+ integrity sha512-KW63lZLPFIir5AIeh2I7UK6Tx1O3jetD7JIPUzEqp1I1BfJlHGHVQxV8VXAmJl0hTOzjQBsHW42PmBxSC97NUg==
+
+"@tiptap/extension-table-cell@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-table-cell/-/extension-table-cell-2.1.10.tgz#e594b55622435c43a95edf6f2adfaca402f5cbed"
+ integrity sha512-NQOTKjPOTJrkI7VaR9wFF3UKB9N2THD8zJZJDcECKQxLR740udF6/6jWm1uwkTwdkBekVKHBMQvKKK9W1bOBiw==
+
+"@tiptap/extension-table-header@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-table-header/-/extension-table-header-2.1.10.tgz#6250676a26946e5b7186198a06990ea70f578a87"
+ integrity sha512-NSC0Y10kXDvPGiJckJY/QU8VA7HHU0tI20Dj7/r1oD9itBWSnWP0zAOXzHVlQt9GpThhFNo2nu3fAaVQNfKoTg==
+
+"@tiptap/extension-table-row@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-table-row/-/extension-table-row-2.1.10.tgz#e7a1ca8342b623a400848b437c82d57680e551e3"
+ integrity sha512-yMOnAaXE7vK7MwULuVUO8v6AYZu6wxTfHAWQe/FqPeMf9tG0HL6+gyt1audremw0xBFMGPx6v4t8vlqPXW9p2g==
+
+"@tiptap/extension-table@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-table/-/extension-table-2.1.10.tgz#5654426366b547631c647ffc5dacf040e65307e1"
+ integrity sha512-fsf0c6qA+R6NzbFx+tm1l5POZsgadHjREsedvq5q1i8rCq1Gt1AK+lR7WQsaXlSeIRsWtg4RT0eUjAYNCmKkug==
+
+"@tiptap/extension-text-align@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-text-align/-/extension-text-align-2.1.10.tgz#0aa0b9e5b319471e074d6ce0a201840a3e5307d0"
+ integrity sha512-dp+9ru5mJnJ7XHXP7Qs7W14RP610LDca4mHRJtaMbUZTCHhDgqVDOb9oPYaSH76Adl/5s/ey6oKgyAaNqF5H3w==
+
+"@tiptap/extension-text-style@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.1.10.tgz#7d12e4d42da61ea5b4a675f31fea16482326c37b"
+ integrity sha512-ptgCZQfpy/8aQHHzktVMMAy30uMvC0XkPbJPmD0nYJqt/m+3QFHHWiGyaKXmYhqyg/TjPvTTMHjcvTvk5k4Sug==
+
+"@tiptap/extension-text@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.1.10.tgz#db297fb5d2ee50ef7a14650539e3d335f772f755"
+ integrity sha512-ubU/WQwNB0MVKyMAHr8ka3Nu3jCR03HARGKUwNRzppZYtRXWyXHNlAaJdplNb1NMGb8hd0ElBJmwFlVqmh8haQ==
+
+"@tiptap/extension-typography@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-typography/-/extension-typography-2.1.10.tgz#bb5605cf76992a0e8e78e7e755ac07e761c24190"
+ integrity sha512-UHAa6xRBxzTP4rLYBrHz5qYHySIO5ASf4CzZVmJ+QNEarsKQKYz3M0dTgqF1KK4FexB0x1UKWLM8lq1TfzmQgg==
+
+"@tiptap/pm@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.1.10.tgz#84d5ae574568dca00ee62698559523d77e980620"
+ integrity sha512-Y+AqizKnjQpx4pSaA6m/cCD5QHQRPtALhO4ZO4YFZV1idYmsJA3/S5lgJI3ZL5eAHKHcGk6Vv3/8Y+eej5YIPw==
+ dependencies:
+ prosemirror-changeset "^2.2.0"
+ prosemirror-collab "^1.3.0"
+ prosemirror-commands "^1.3.1"
+ prosemirror-dropcursor "^1.5.0"
+ prosemirror-gapcursor "^1.3.1"
+ prosemirror-history "^1.3.0"
+ prosemirror-inputrules "^1.2.0"
+ prosemirror-keymap "^1.2.0"
+ prosemirror-markdown "^1.10.1"
+ prosemirror-menu "^1.2.1"
+ prosemirror-model "^1.18.1"
+ prosemirror-schema-basic "^1.2.0"
+ prosemirror-schema-list "^1.2.2"
+ prosemirror-state "^1.4.1"
+ prosemirror-tables "^1.3.0"
+ prosemirror-trailing-node "^2.0.2"
+ prosemirror-transform "^1.7.0"
+ prosemirror-view "^1.28.2"
+
+"@tiptap/starter-kit@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.1.10.tgz#5f19c199c79d90ef5e3b8990ca3aa76ce625d68c"
+ integrity sha512-h5mH1qv7SDFXWZPbOWC8zpGZ62EnDizRNtM45Gani0HYWJXcbPFpgN1qJmESP/jP+v+0hxtnVEkgfpiy3LRm6A==
+ dependencies:
+ "@tiptap/core" "^2.1.10"
+ "@tiptap/extension-blockquote" "^2.1.10"
+ "@tiptap/extension-bold" "^2.1.10"
+ "@tiptap/extension-bullet-list" "^2.1.10"
+ "@tiptap/extension-code" "^2.1.10"
+ "@tiptap/extension-code-block" "^2.1.10"
+ "@tiptap/extension-document" "^2.1.10"
+ "@tiptap/extension-dropcursor" "^2.1.10"
+ "@tiptap/extension-gapcursor" "^2.1.10"
+ "@tiptap/extension-hard-break" "^2.1.10"
+ "@tiptap/extension-heading" "^2.1.10"
+ "@tiptap/extension-history" "^2.1.10"
+ "@tiptap/extension-horizontal-rule" "^2.1.10"
+ "@tiptap/extension-italic" "^2.1.10"
+ "@tiptap/extension-list-item" "^2.1.10"
+ "@tiptap/extension-ordered-list" "^2.1.10"
+ "@tiptap/extension-paragraph" "^2.1.10"
+ "@tiptap/extension-strike" "^2.1.10"
+ "@tiptap/extension-text" "^2.1.10"
+
+"@tiptap/suggestion@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/suggestion/-/suggestion-2.1.10.tgz#fe6dd160ea93f8135c0831ae4accc7a708bac019"
+ integrity sha512-k9WTTWT81UkHaxZksjp+wE31E85QL0jyLd0ZEKAs+btW148Pon1KwBeLnODNHILcdQaRPxRvb28a47cRHEKTiw==
+
+"@tiptap/vue-3@^2.0.3":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@tiptap/vue-3/-/vue-3-2.1.10.tgz#bccb6cb0c2bd0a76c0d63a3feee05c74e0005e77"
+ integrity sha512-GE2fDERHXfbFSGvw9Ov/Wf9RbmYRRSii4oC05Xf2Jw9F2x8NjJWJvZVFEzAGoJSc5UskzXfwtNOmlt4AcBYuew==
+ dependencies:
+ "@tiptap/extension-bubble-menu" "^2.1.10"
+ "@tiptap/extension-floating-menu" "^2.1.10"
+
+"@types/object.omit@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/object.omit/-/object.omit-3.0.0.tgz#0d31e1208eac8fe2ad5c9499a1016a8273bbfafc"
+ integrity sha512-I27IoPpH250TUzc9FzXd0P1BV/BMJuzqD3jOz98ehf9dQqGkxlq+hO1bIqZGWqCg5bVOy0g4AUVJtnxe0klDmw==
+
+"@types/object.pick@^1.3.1":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@types/object.pick/-/object.pick-1.3.2.tgz#9eb28118240ad8f658b9c9c6caf35359fdb37150"
+ integrity sha512-sn7L+qQ6RLPdXRoiaE7bZ/Ek+o4uICma/lBFPyJEKDTPTBP1W8u0c4baj3EiS4DiqLs+Hk+KUGvMVJtAw3ePJg==
+
+"@types/parse-json@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+
+"@types/throttle-debounce@^2.1.0":
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz#1c3df624bfc4b62f992d3012b84c56d41eab3776"
+ integrity sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==
+
+"@types/web-bluetooth@^0.0.20":
+ version "0.0.20"
+ resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz#f066abfcd1cbe66267cdbbf0de010d8a41b41597"
+ integrity sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==
+
+"@vitejs/plugin-vue@^2.0.0":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-2.0.1.tgz#db0e5eacf96358e04cc501c9008079b25a70a4ac"
+ integrity sha512-wtdMnGVvys9K8tg+DxowU1ytTrdVveXr3LzdhaKakysgGXyrsfaeds2cDywtvujEASjWOwWL/OgWM+qoeM8Plg==
+
+"@vue/compiler-core@3.4.31":
+ version "3.4.31"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.31.tgz#b51a76f1b30e9b5eba0553264dff0f171aedb7c6"
+ integrity sha512-skOiodXWTV3DxfDhB4rOf3OGalpITLlgCeOwb+Y9GJpfQ8ErigdBUHomBzvG78JoVE8MJoQsb+qhZiHfKeNeEg==
+ dependencies:
+ "@babel/parser" "^7.24.7"
+ "@vue/shared" "3.4.31"
+ entities "^4.5.0"
+ estree-walker "^2.0.2"
+ source-map-js "^1.2.0"
+
+"@vue/compiler-dom@3.4.31":
+ version "3.4.31"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.31.tgz#30961ca847f5d6ad18ffa26236c219f61b195f6b"
+ integrity sha512-wK424WMXsG1IGMyDGyLqB+TbmEBFM78hIsOJ9QwUVLGrcSk0ak6zYty7Pj8ftm7nEtdU/DGQxAXp0/lM/2cEpQ==
+ dependencies:
+ "@vue/compiler-core" "3.4.31"
+ "@vue/shared" "3.4.31"
+
+"@vue/compiler-sfc@3.4.31":
+ version "3.4.31"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.31.tgz#cc6bfccda17df8268cc5440842277f61623c591f"
+ integrity sha512-einJxqEw8IIJxzmnxmJBuK2usI+lJonl53foq+9etB2HAzlPjAS/wa7r0uUpXw5ByX3/0uswVSrjNb17vJm1kQ==
+ dependencies:
+ "@babel/parser" "^7.24.7"
+ "@vue/compiler-core" "3.4.31"
+ "@vue/compiler-dom" "3.4.31"
+ "@vue/compiler-ssr" "3.4.31"
+ "@vue/shared" "3.4.31"
+ estree-walker "^2.0.2"
+ magic-string "^0.30.10"
+ postcss "^8.4.38"
+ source-map-js "^1.2.0"
+
+"@vue/compiler-ssr@3.4.31":
+ version "3.4.31"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.31.tgz#f62ffecdf15bacb883d0099780cf9a1e3654bfc4"
+ integrity sha512-RtefmITAje3fJ8FSg1gwgDhdKhZVntIVbwupdyZDSifZTRMiWxWehAOTCc8/KZDnBOcYQ4/9VWxsTbd3wT0hAA==
+ dependencies:
+ "@vue/compiler-dom" "3.4.31"
+ "@vue/shared" "3.4.31"
+
+"@vue/devtools-api@^6.0.0-beta.18":
+ version "6.0.0-beta.21.1"
+ resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.0.0-beta.21.1.tgz#f1410f53c42aa67fa3b01ca7bdba891f69d7bc97"
+ integrity sha512-FqC4s3pm35qGVeXRGOjTsRzlkJjrBLriDS9YXbflHLsfA9FrcKzIyWnLXoNm+/7930E8rRakXuAc2QkC50swAw==
+
+"@vue/reactivity@3.4.31":
+ version "3.4.31"
+ resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.4.31.tgz#eda80e90c4f9d7659efe1f5ed99c2dfdc9e93d77"
+ integrity sha512-VGkTani8SOoVkZNds1PfJ/T1SlAIOf8E58PGAhIOUDYPC4GAmFA2u/E14TDAFcf3vVDKunc4QqCe/SHr8xC65Q==
+ dependencies:
+ "@vue/shared" "3.4.31"
+
+"@vue/runtime-core@3.4.31":
+ version "3.4.31"
+ resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.4.31.tgz#ad3a41ad76385c0429e3e4dbefb81918494e10cf"
+ integrity sha512-LDkztxeUPazxG/p8c5JDDKPfkCDBkkiNLVNf7XZIUnJ+66GVGkP+TIh34+8LtPisZ+HMWl2zqhIw0xN5MwU1cw==
+ dependencies:
+ "@vue/reactivity" "3.4.31"
+ "@vue/shared" "3.4.31"
+
+"@vue/runtime-dom@3.4.31":
+ version "3.4.31"
+ resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.4.31.tgz#bae7ad844f944af33699c73581bc36125bab96ce"
+ integrity sha512-2Auws3mB7+lHhTFCg8E9ZWopA6Q6L455EcU7bzcQ4x6Dn4cCPuqj6S2oBZgN2a8vJRS/LSYYxwFFq2Hlx3Fsaw==
+ dependencies:
+ "@vue/reactivity" "3.4.31"
+ "@vue/runtime-core" "3.4.31"
+ "@vue/shared" "3.4.31"
+ csstype "^3.1.3"
+
+"@vue/server-renderer@3.4.31":
+ version "3.4.31"
+ resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.4.31.tgz#bbe990f793c36d62d05bdbbaf142511d53e159fd"
+ integrity sha512-D5BLbdvrlR9PE3by9GaUp1gQXlCNadIZytMIb8H2h3FMWJd4oUfkUTEH2wAr3qxoRz25uxbTcbqd3WKlm9EHQA==
+ dependencies:
+ "@vue/compiler-ssr" "3.4.31"
+ "@vue/shared" "3.4.31"
+
+"@vue/shared@3.4.31":
+ version "3.4.31"
+ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.31.tgz#af9981f57def2c3f080c14bf219314fc0dc808a0"
+ integrity sha512-Yp3wtJk//8cO4NItOPpi3QkLExAr/aLBGZMmTtW9WpdwBCJpRM6zj9WgWktXAl8IDIozwNMByT45JP3tO3ACWA==
+
+"@vueuse/core@^10.4.1", "@vueuse/core@^10.5.0":
+ version "10.9.0"
+ resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-10.9.0.tgz#7d779a95cf0189de176fee63cee4ba44b3c85d64"
+ integrity sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==
+ dependencies:
+ "@types/web-bluetooth" "^0.0.20"
+ "@vueuse/metadata" "10.9.0"
+ "@vueuse/shared" "10.9.0"
+ vue-demi ">=0.14.7"
+
+"@vueuse/metadata@10.9.0":
+ version "10.9.0"
+ resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-10.9.0.tgz#769a1a9db65daac15cf98084cbf7819ed3758620"
+ integrity sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==
+
+"@vueuse/shared@10.9.0", "@vueuse/shared@^10.5.0":
+ version "10.9.0"
+ resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-10.9.0.tgz#13af2a348de15d07b7be2fd0c7fc9853a69d8fe0"
+ integrity sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==
+ dependencies:
+ vue-demi ">=0.14.7"
+
+acorn-node@^1.6.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8"
+ integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==
+ dependencies:
+ acorn "^7.0.0"
+ acorn-walk "^7.0.0"
+ xtend "^4.0.2"
+
+acorn-walk@^7.0.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
+ integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
+
+acorn@^7.0.0:
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+ integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+anymatch@~3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
+ integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+arg@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.1.tgz#eb0c9a8f77786cad2af8ff2b862899842d7b6adb"
+ integrity sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+aria-hidden@^1.2.3:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.4.tgz#b78e383fdbc04d05762c78b4a25a501e736c4522"
+ integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==
+ dependencies:
+ tslib "^2.0.0"
+
+autoprefixer@^10.4.2:
+ version "10.4.2"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.2.tgz#25e1df09a31a9fba5c40b578936b90d35c9d4d3b"
+ integrity sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==
+ dependencies:
+ browserslist "^4.19.1"
+ caniuse-lite "^1.0.30001297"
+ fraction.js "^4.1.2"
+ normalize-range "^0.1.2"
+ picocolors "^1.0.0"
+ postcss-value-parser "^4.2.0"
+
+binary-extensions@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+ integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+braces@^3.0.1, braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+browserslist@^4.19.1:
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3"
+ integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==
+ dependencies:
+ caniuse-lite "^1.0.30001286"
+ electron-to-chromium "^1.4.17"
+ escalade "^3.1.1"
+ node-releases "^2.0.1"
+ picocolors "^1.0.0"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase-css@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
+ integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
+
+caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001297:
+ version "1.0.30001300"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz#11ab6c57d3eb6f964cba950401fd00a146786468"
+ integrity sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA==
+
+case-anything@^2.1.10:
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/case-anything/-/case-anything-2.1.10.tgz#d18a6ca968d54ec3421df71e3e190f3bced23410"
+ integrity sha512-JczJwVrCP0jPKh05McyVsuOg6AYosrB9XWZKbQzXeDAm2ClE/PJE/BcrrQrVyGYH7Jg8V/LDupmyL4kFlVsVFQ==
+
+chalk@^2.0.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chokidar@^3.5.2:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+ integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+ 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"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+classnames@^2.2.5:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e"
+ integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@^1.1.4, color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+commander@^9.0.0:
+ version "9.5.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30"
+ integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==
+
+core-js@^3.1.3:
+ version "3.20.3"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.20.3.tgz#c710d0a676e684522f3db4ee84e5e18a9d11d69a"
+ integrity sha512-vVl8j8ph6tRS3B8qir40H7yw7voy17xL0piAjlbBUsH7WIfzoedL/ZOr1OV9FyZQLWXsayOJyV4tnRyXR85/ag==
+
+cosmiconfig@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d"
+ integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.2.1"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.10.0"
+
+crelt@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.5.tgz#57c0d52af8c859e354bace1883eb2e1eb182bb94"
+ integrity sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+csstype@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
+ integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
+
+dash-get@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/dash-get/-/dash-get-1.0.2.tgz#4c9e9ad5ef04c4bf9d3c9a451f6f7997298dcc7c"
+ integrity sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==
+
+debug@~4.3.1, debug@~4.3.2:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ dependencies:
+ ms "2.1.2"
+
+deepmerge@^4.2.2:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
+ integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
+
+defined@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+ integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
+
+defu@^6.1.4:
+ version "6.1.4"
+ resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479"
+ integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==
+
+detective@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b"
+ integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==
+ dependencies:
+ acorn-node "^1.6.1"
+ defined "^1.0.0"
+ minimist "^1.1.1"
+
+didyoumean@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
+ integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
+
+dlv@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
+ integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
+
+electron-to-chromium@^1.4.17:
+ version "1.4.47"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.47.tgz#5d5535cdbca2b9264abee4d6ea121995e9554bbe"
+ integrity sha512-ZHc8i3/cgeCRK/vC7W2htAG6JqUmOUgDNn/f9yY9J8UjfLjwzwOVEt4MWmgJAdvmxyrsR5KIFA/6+kUHGY0eUA==
+
+engine.io-client@~6.4.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.4.0.tgz#88cd3082609ca86d7d3c12f0e746d12db4f47c91"
+ integrity sha512-GyKPDyoEha+XZ7iEqam49vz6auPnNJ9ZBfy89f+rMMas8AuiMWOZ9PVzu8xb9ZC6rafUqiGHSCfu22ih66E+1g==
+ dependencies:
+ "@socket.io/component-emitter" "~3.1.0"
+ debug "~4.3.1"
+ engine.io-parser "~5.0.3"
+ ws "~8.11.0"
+ xmlhttprequest-ssl "~2.0.0"
+
+engine.io-parser@~5.0.3:
+ version "5.0.6"
+ resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.6.tgz#7811244af173e157295dec9b2718dfe42a64ef45"
+ integrity sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==
+
+entities@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
+ integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+
+entities@~3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4"
+ integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==
+
+error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+esbuild-android-arm64@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz#3fc3ff0bab76fe35dd237476b5d2b32bb20a3d44"
+ integrity sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==
+
+esbuild-darwin-64@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz#8e9169c16baf444eacec60d09b24d11b255a8e72"
+ integrity sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==
+
+esbuild-darwin-arm64@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz#1b07f893b632114f805e188ddfca41b2b778229a"
+ integrity sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==
+
+esbuild-freebsd-64@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz#0b8b7eca1690c8ec94c75680c38c07269c1f4a85"
+ integrity sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==
+
+esbuild-freebsd-arm64@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz#2e1a6c696bfdcd20a99578b76350b41db1934e52"
+ integrity sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==
+
+esbuild-linux-32@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz#6fd39f36fc66dd45b6b5f515728c7bbebc342a69"
+ integrity sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==
+
+esbuild-linux-64@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz#9cb8e4bcd7574e67946e4ee5f1f1e12386bb6dd3"
+ integrity sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==
+
+esbuild-linux-arm64@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz#3891aa3704ec579a1b92d2a586122e5b6a2bfba1"
+ integrity sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==
+
+esbuild-linux-arm@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz#8a00e99e6a0c6c9a6b7f334841364d8a2b4aecfe"
+ integrity sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==
+
+esbuild-linux-mips64le@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz#36b07cc47c3d21e48db3bb1f4d9ef8f46aead4f7"
+ integrity sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==
+
+esbuild-linux-ppc64le@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz#f7e6bba40b9a11eb9dcae5b01550ea04670edad2"
+ integrity sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==
+
+esbuild-netbsd-64@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz#a2fedc549c2b629d580a732d840712b08d440038"
+ integrity sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==
+
+esbuild-openbsd-64@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz#b22c0e5806d3a1fbf0325872037f885306b05cd7"
+ integrity sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==
+
+esbuild-sunos-64@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz#d0b6454a88375ee8d3964daeff55c85c91c7cef4"
+ integrity sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==
+
+esbuild-windows-32@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz#c96d0b9bbb52f3303322582ef8e4847c5ad375a7"
+ integrity sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==
+
+esbuild-windows-64@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz#1f79cb9b1e1bb02fb25cd414cb90d4ea2892c294"
+ integrity sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==
+
+esbuild-windows-arm64@0.13.15:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz#482173070810df22a752c686509c370c3be3b3c3"
+ integrity sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==
+
+esbuild@^0.13.12:
+ version "0.13.15"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.13.15.tgz#db56a88166ee373f87dbb2d8798ff449e0450cdf"
+ integrity sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==
+ optionalDependencies:
+ esbuild-android-arm64 "0.13.15"
+ esbuild-darwin-64 "0.13.15"
+ esbuild-darwin-arm64 "0.13.15"
+ esbuild-freebsd-64 "0.13.15"
+ esbuild-freebsd-arm64 "0.13.15"
+ esbuild-linux-32 "0.13.15"
+ esbuild-linux-64 "0.13.15"
+ esbuild-linux-arm "0.13.15"
+ esbuild-linux-arm64 "0.13.15"
+ esbuild-linux-mips64le "0.13.15"
+ esbuild-linux-ppc64le "0.13.15"
+ esbuild-netbsd-64 "0.13.15"
+ esbuild-openbsd-64 "0.13.15"
+ esbuild-sunos-64 "0.13.15"
+ esbuild-windows-32 "0.13.15"
+ esbuild-windows-64 "0.13.15"
+ esbuild-windows-arm64 "0.13.15"
+
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+estree-walker@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
+ integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
+
+fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.2.7:
+ version "3.2.11"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
+ integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fastq@^1.6.0:
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
+ integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==
+ dependencies:
+ reusify "^1.0.4"
+
+feather-icons@^4.28.0:
+ version "4.28.0"
+ resolved "https://registry.yarnpkg.com/feather-icons/-/feather-icons-4.28.0.tgz#e1892a401fe12c4559291770ff6e68b0168e760f"
+ integrity sha512-gRdqKESXRBUZn6Nl0VBq2wPHKRJgZz7yblrrc2lYsS6odkNFDnA4bqvrlEVRUPjE1tFax+0TdbJKZ31ziJuzjg==
+ dependencies:
+ classnames "^2.2.5"
+ core-js "^3.1.3"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+fraction.js@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.2.tgz#13e420a92422b6cf244dff8690ed89401029fbe8"
+ integrity sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==
+
+frappe-ui@^0.1.62:
+ version "0.1.63"
+ resolved "https://registry.yarnpkg.com/frappe-ui/-/frappe-ui-0.1.63.tgz#8a065d6bbfa1ae1444440ae124214c7a9842aa95"
+ integrity sha512-R9ZsydHvRSz++JKCFfTdevRS6eZpI4PbWg7oq1aiX4WOiPpBg9dQxBGxZJS7S/6geaLh9KQtiGMrtkyaS5G0xw==
+ dependencies:
+ "@headlessui/vue" "^1.7.14"
+ "@popperjs/core" "^2.11.2"
+ "@tailwindcss/forms" "^0.5.3"
+ "@tailwindcss/typography" "^0.5.0"
+ "@tiptap/extension-color" "^2.0.3"
+ "@tiptap/extension-highlight" "^2.0.3"
+ "@tiptap/extension-image" "^2.0.3"
+ "@tiptap/extension-link" "^2.0.3"
+ "@tiptap/extension-mention" "^2.0.3"
+ "@tiptap/extension-placeholder" "^2.0.3"
+ "@tiptap/extension-table" "^2.0.3"
+ "@tiptap/extension-table-cell" "^2.0.3"
+ "@tiptap/extension-table-header" "^2.0.3"
+ "@tiptap/extension-table-row" "^2.0.3"
+ "@tiptap/extension-text-align" "^2.0.3"
+ "@tiptap/extension-text-style" "^2.0.3"
+ "@tiptap/extension-typography" "^2.0.3"
+ "@tiptap/pm" "^2.0.3"
+ "@tiptap/starter-kit" "^2.0.3"
+ "@tiptap/suggestion" "^2.0.3"
+ "@tiptap/vue-3" "^2.0.3"
+ "@vueuse/core" "^10.4.1"
+ feather-icons "^4.28.0"
+ idb-keyval "^6.2.0"
+ prettier "^3.3.2"
+ radix-vue "^1.5.3"
+ showdown "^2.1.0"
+ socket.io-client "^4.5.1"
+ tippy.js "^6.3.7"
+
+fsevents@~2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+ integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+glob-parent@^5.1.2, glob-parent@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+idb-keyval@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.0.tgz#3af94a3cc0689d6ee0bc9e045d2a3340ea897173"
+ integrity sha512-uw+MIyQn2jl3+hroD7hF8J7PUviBU7BPKWw4f/ISf32D4LoGu98yHjrzWWJDASu9QNrX10tCJqk9YY0ClWm8Ng==
+ dependencies:
+ safari-14-idb-fix "^3.0.0"
+
+import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-core-module@^2.8.0:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211"
+ integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==
+ dependencies:
+ has "^1.0.3"
+
+is-extendable@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
+
+js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+json-parse-even-better-errors@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+ integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+lilconfig@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082"
+ integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==
+
+lines-and-columns@^1.1.6:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
+ integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
+linkify-it@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-4.0.1.tgz#01f1d5e508190d06669982ba31a7d9f56a5751ec"
+ integrity sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==
+ dependencies:
+ uc.micro "^1.0.1"
+
+linkifyjs@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.1.1.tgz#73d427e3bbaaf4ca8e71c589ad4ffda11a9a5fde"
+ integrity sha512-zFN/CTVmbcVef+WaDXT63dNzzkfRBKT1j464NJQkV7iSgJU0sLBus9W0HBwnXK13/hf168pbrx/V/bjEHOXNHA==
+
+lodash.castarray@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115"
+ integrity sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU=
+
+lodash.isplainobject@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+ integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
+
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+lodash.uniq@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+ integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
+
+magic-string@^0.30.10:
+ version "0.30.10"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e"
+ integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==
+ dependencies:
+ "@jridgewell/sourcemap-codec" "^1.4.15"
+
+make-error@^1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
+ integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
+
+markdown-it@^13.0.1:
+ version "13.0.1"
+ resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-13.0.1.tgz#c6ecc431cacf1a5da531423fc6a42807814af430"
+ integrity sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==
+ dependencies:
+ argparse "^2.0.1"
+ entities "~3.0.1"
+ linkify-it "^4.0.1"
+ mdurl "^1.0.1"
+ uc.micro "^1.0.5"
+
+mdurl@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
+ integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==
+
+merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micromatch@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
+ integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.2.3"
+
+mini-svg-data-uri@^1.2.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/mini-svg-data-uri/-/mini-svg-data-uri-1.4.3.tgz#43177b2e93766ba338931a3e2a84a3dfd3a222b8"
+ integrity sha512-gSfqpMRC8IxghvMcxzzmMnWpXAChSA+vy4cia33RgerMS8Fex95akUyQZPbxJJmeBGiGmK7n/1OpUX8ksRjIdA==
+
+minimist@^1.1.1:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+ integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+nanoid@^3.1.30:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c"
+ integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==
+
+nanoid@^3.3.7:
+ version "3.3.7"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
+ integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
+
+nanoid@^5.0.6:
+ version "5.0.7"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.0.7.tgz#6452e8c5a816861fd9d2b898399f7e5fd6944cc6"
+ integrity sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==
+
+node-releases@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5"
+ integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
+
+object-hash@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5"
+ integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==
+
+object.omit@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-3.0.0.tgz#0e3edc2fce2ba54df5577ff529f6d97bd8a522af"
+ integrity sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==
+ dependencies:
+ is-extendable "^1.0.0"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==
+ dependencies:
+ isobject "^3.0.1"
+
+orderedmap@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/orderedmap/-/orderedmap-2.1.0.tgz#819457082fa3a06abd316d83a281a1ca467437cd"
+ integrity sha512-/pIFexOm6S70EPdznemIz3BQZoJ4VTFrhqzu0ACBqBgeLsLxq8e6Jim63ImIfwW/zAD1AlXpRMlOv3aghmo4dA==
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-json@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-even-better-errors "^2.3.0"
+ lines-and-columns "^1.1.6"
+
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+picocolors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+ integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picocolors@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1"
+ integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+postcss-js@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00"
+ integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==
+ dependencies:
+ camelcase-css "^2.0.1"
+
+postcss-load-config@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.1.tgz#2f53a17f2f543d9e63864460af42efdac0d41f87"
+ integrity sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==
+ dependencies:
+ lilconfig "^2.0.4"
+ yaml "^1.10.2"
+
+postcss-nested@5.0.6:
+ version "5.0.6"
+ resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.6.tgz#466343f7fc8d3d46af3e7dba3fcd47d052a945bc"
+ integrity sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==
+ dependencies:
+ postcss-selector-parser "^6.0.6"
+
+postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.8:
+ version "6.0.8"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz#f023ed7a9ea736cd7ef70342996e8e78645a7914"
+ integrity sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
+postcss-value-parser@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+postcss@^8.4.38:
+ version "8.4.39"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.39.tgz#aa3c94998b61d3a9c259efa51db4b392e1bde0e3"
+ integrity sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==
+ dependencies:
+ nanoid "^3.3.7"
+ picocolors "^1.0.1"
+ source-map-js "^1.2.0"
+
+postcss@^8.4.5:
+ version "8.4.5"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95"
+ integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==
+ dependencies:
+ nanoid "^3.1.30"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.1"
+
+prettier@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a"
+ integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==
+
+prosemirror-changeset@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/prosemirror-changeset/-/prosemirror-changeset-2.2.0.tgz#22c05da271a118be40d3e339fa2cace789b1254b"
+ integrity sha512-QM7ohGtkpVpwVGmFb8wqVhaz9+6IUXcIQBGZ81YNAKYuHiFJ1ShvSzab4pKqTinJhwciZbrtBEk/2WsqSt2PYg==
+ dependencies:
+ prosemirror-transform "^1.0.0"
+
+prosemirror-collab@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/prosemirror-collab/-/prosemirror-collab-1.3.0.tgz#601d33473bf72e6c43041a54b860c84c60b37769"
+ integrity sha512-+S/IJ69G2cUu2IM5b3PBekuxs94HO1CxJIWOFrLQXUaUDKL/JfBx+QcH31ldBlBXyDEUl+k3Vltfi1E1MKp2mA==
+ dependencies:
+ prosemirror-state "^1.0.0"
+
+prosemirror-commands@^1.0.0, prosemirror-commands@^1.3.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.5.1.tgz#89ddfa14e144dcc7fb0938aa0e2568c7fdde306f"
+ integrity sha512-ga1ga/RkbzxfAvb6iEXYmrEpekn5NCwTb8w1dr/gmhSoaGcQ0VPuCzOn5qDEpC45ql2oDkKoKQbRxLJwKLpMTQ==
+ dependencies:
+ prosemirror-model "^1.0.0"
+ prosemirror-state "^1.0.0"
+ prosemirror-transform "^1.0.0"
+
+prosemirror-dropcursor@^1.5.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.0.tgz#7bfa11925e0da41d1db869954fe51e1aa55158e4"
+ integrity sha512-TZMitR8nlp9Xh42pDYGcWopCoFPmJduoyGJ7FjYM2/7gZKnfD41TIaZN5Q1cQjm6Fm/P5vk/DpVYFhS8kDdigw==
+ dependencies:
+ prosemirror-state "^1.0.0"
+ prosemirror-transform "^1.1.0"
+ prosemirror-view "^1.1.0"
+
+prosemirror-gapcursor@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.1.tgz#8cfd874592e4504d63720e14ed680c7866e64554"
+ integrity sha512-GKTeE7ZoMsx5uVfc51/ouwMFPq0o8YrZ7Hx4jTF4EeGbXxBveUV8CGv46mSHuBBeXGmvu50guoV2kSnOeZZnUA==
+ dependencies:
+ prosemirror-keymap "^1.0.0"
+ prosemirror-model "^1.0.0"
+ prosemirror-state "^1.0.0"
+ prosemirror-view "^1.0.0"
+
+prosemirror-history@^1.0.0, prosemirror-history@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-1.3.0.tgz#bf5a1ff7759aca759ddf0c722c2fa5b14fb0ddc1"
+ integrity sha512-qo/9Wn4B/Bq89/YD+eNWFbAytu6dmIM85EhID+fz9Jcl9+DfGEo8TTSrRhP15+fFEoaPqpHSxlvSzSEbmlxlUA==
+ dependencies:
+ prosemirror-state "^1.2.2"
+ prosemirror-transform "^1.0.0"
+ rope-sequence "^1.3.0"
+
+prosemirror-inputrules@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/prosemirror-inputrules/-/prosemirror-inputrules-1.2.0.tgz#476dde2dc244050b3aca00cf58a82adfad6749e7"
+ integrity sha512-eAW/M/NTSSzpCOxfR8Abw6OagdG0MiDAiWHQMQveIsZtoKVYzm0AflSPq/ymqJd56/Su1YPbwy9lM13wgHOFmQ==
+ dependencies:
+ prosemirror-state "^1.0.0"
+ prosemirror-transform "^1.0.0"
+
+prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.1.2, prosemirror-keymap@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prosemirror-keymap/-/prosemirror-keymap-1.2.1.tgz#3839e7db66cecddae7451f4246e73bdd8489be1d"
+ integrity sha512-kVK6WGC+83LZwuSJnuCb9PsADQnFZllt94qPP3Rx/vLcOUV65+IbBeH2nS5cFggPyEVJhGkGrgYFRrG250WhHQ==
+ dependencies:
+ prosemirror-state "^1.0.0"
+ w3c-keyname "^2.2.0"
+
+prosemirror-markdown@^1.10.1:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/prosemirror-markdown/-/prosemirror-markdown-1.10.1.tgz#e20468201cda1916a6182686159398b242bb78ab"
+ integrity sha512-s7iaTLiX+qO5z8kF2NcMmy2T7mIlxzkS4Sp3vTKSYChPtbMpg6YxFkU0Y06rUg2WtKlvBu7v1bXzlGBkfjUWAA==
+ dependencies:
+ markdown-it "^13.0.1"
+ prosemirror-model "^1.0.0"
+
+prosemirror-menu@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prosemirror-menu/-/prosemirror-menu-1.2.1.tgz#94d99a8547b7ba5680c20e9c497ce19846ce3b2c"
+ integrity sha512-sBirXxVfHalZO4f1ZS63WzewINK4182+7dOmoMeBkqYO8wqMBvBS7wQuwVOHnkMWPEh0+N0LJ856KYUN+vFkmQ==
+ dependencies:
+ crelt "^1.0.0"
+ prosemirror-commands "^1.0.0"
+ prosemirror-history "^1.0.0"
+ prosemirror-state "^1.0.0"
+
+prosemirror-model@^1.0.0, prosemirror-model@^1.16.0, prosemirror-model@^1.18.1, prosemirror-model@^1.19.0, prosemirror-model@^1.8.1:
+ version "1.19.0"
+ resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.19.0.tgz#d7ad9a65ada0bb12196f64fe0dd4fc392c841c29"
+ integrity sha512-/CvFGJnwc41EJSfDkQLly1cAJJJmBpZwwUJtwZPTjY2RqZJfM8HVbCreOY/jti8wTRbVyjagcylyGoeJH/g/3w==
+ dependencies:
+ orderedmap "^2.0.0"
+
+prosemirror-schema-basic@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.1.tgz#a5a137a6399d1a829873332117d2fe8131d291d0"
+ integrity sha512-vYBdIHsYKSDIqYmPBC7lnwk9DsKn8PnVqK97pMYP5MLEDFqWIX75JiaJTzndBii4bRuNqhC2UfDOfM3FKhlBHg==
+ dependencies:
+ prosemirror-model "^1.19.0"
+
+prosemirror-schema-list@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/prosemirror-schema-list/-/prosemirror-schema-list-1.2.2.tgz#bafda37b72367d39accdcaf6ddf8fb654a16e8e5"
+ integrity sha512-rd0pqSDp86p0MUMKG903g3I9VmElFkQpkZ2iOd3EOVg1vo5Cst51rAsoE+5IPy0LPXq64eGcCYlW1+JPNxOj2w==
+ dependencies:
+ prosemirror-model "^1.0.0"
+ prosemirror-state "^1.0.0"
+ prosemirror-transform "^1.0.0"
+
+prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.3.1, prosemirror-state@^1.4.1:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/prosemirror-state/-/prosemirror-state-1.4.2.tgz#f93bd8a33a4454efab917ba9b738259d828db7e5"
+ integrity sha512-puuzLD2mz/oTdfgd8msFbe0A42j5eNudKAAPDB0+QJRw8cO1ygjLmhLrg9RvDpf87Dkd6D4t93qdef00KKNacQ==
+ dependencies:
+ prosemirror-model "^1.0.0"
+ prosemirror-transform "^1.0.0"
+ prosemirror-view "^1.27.0"
+
+prosemirror-tables@^1.3.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.3.2.tgz#ca208c6a55d510af14b652d23e800e00ba6bebd4"
+ integrity sha512-/9JTeN6s58Zq66HXaxP6uf8PAmc7XXKZFPlOGVtLvxEd6xBP6WtzaJB9wBjiGUzwbdhdMEy7V62yuHqk/3VrnQ==
+ dependencies:
+ prosemirror-keymap "^1.1.2"
+ prosemirror-model "^1.8.1"
+ prosemirror-state "^1.3.1"
+ prosemirror-transform "^1.2.1"
+ prosemirror-view "^1.13.3"
+
+prosemirror-trailing-node@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/prosemirror-trailing-node/-/prosemirror-trailing-node-2.0.3.tgz#213fc0e545a434ff3c37b5218a0de69561bf3892"
+ integrity sha512-lGrjMrn97KWkjQSW/FjdvnhJmqFACmQIyr6lKYApvHitDnKsCoZz6XzrHB7RZYHni/0NxQmZ01p/2vyK2SkvaA==
+ dependencies:
+ "@babel/runtime" "^7.13.10"
+ "@remirror/core-constants" "^2.0.0"
+ "@remirror/core-helpers" "^2.0.1"
+ escape-string-regexp "^4.0.0"
+
+prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.2.1, prosemirror-transform@^1.7.0:
+ version "1.7.1"
+ resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.7.1.tgz#b516e818c3add0bdf960f4ca8ccb9d057a3ba21b"
+ integrity sha512-VteoifAfpt46z0yEt6Fc73A5OID9t/y2QIeR5MgxEwTuitadEunD/V0c9jQW8ziT8pbFM54uTzRLJ/nLuQjMxg==
+ dependencies:
+ prosemirror-model "^1.0.0"
+
+prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.13.3, prosemirror-view@^1.27.0, prosemirror-view@^1.28.2:
+ version "1.30.2"
+ resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.30.2.tgz#57a9d15c5baa454f0d0f4a3028ddbd9be1e8ed9b"
+ integrity sha512-nTNzZvalQf9kHeEyO407LiV6DoOs/pXsid88UqW9Vvybo4ozJW2PJhkfZUxCUF1hR/9vJLdhxX84wuw9P9HsXA==
+ dependencies:
+ prosemirror-model "^1.16.0"
+ prosemirror-state "^1.0.0"
+ prosemirror-transform "^1.1.0"
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+quick-lru@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
+ integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
+
+radix-vue@^1.5.3:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/radix-vue/-/radix-vue-1.7.4.tgz#73ed97e1a9e0822f295e3d4170cd1c7e1b8efe5d"
+ integrity sha512-Z75iJVb2rNL6347pWwqDIP02ktTowiDKVsScrLRv9y7uj8tMsEcD4pC0oTogVScRP5voZd3rov6zKE20MQTj+A==
+ dependencies:
+ "@floating-ui/dom" "^1.5.4"
+ "@floating-ui/vue" "^1.0.4"
+ "@internationalized/date" "^3.5.2"
+ "@tanstack/vue-virtual" "^3.1.3"
+ "@vueuse/core" "^10.5.0"
+ "@vueuse/shared" "^10.5.0"
+ aria-hidden "^1.2.3"
+ defu "^6.1.4"
+ fast-deep-equal "^3.1.3"
+ nanoid "^5.0.6"
+
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
+regenerator-runtime@^0.13.11:
+ version "0.13.11"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
+ integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve@^1.20.0, resolve@^1.21.0:
+ version "1.21.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f"
+ integrity sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==
+ dependencies:
+ is-core-module "^2.8.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rollup@^2.59.0:
+ version "2.64.0"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.64.0.tgz#f0f59774e21fbb56de438a37d06a2189632b207a"
+ integrity sha512-+c+lbw1lexBKSMb1yxGDVfJ+vchJH3qLbmavR+awDinTDA2C5Ug9u7lkOzj62SCu0PKUExsW36tpgW7Fmpn3yQ==
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+rope-sequence@^1.3.0:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.3.tgz#3f67fc106288b84b71532b4a5fd9d4881e4457f0"
+ integrity sha512-85aZYCxweiD5J8yTEbw+E6A27zSnLPNDL0WfPdw3YYodq7WjnTKo0q4dtyQ2gz23iPT8Q9CUyJtAaUNcTxRf5Q==
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+safari-14-idb-fix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/safari-14-idb-fix/-/safari-14-idb-fix-3.0.0.tgz#450fc049b996ec7f3fd9ca2f89d32e0761583440"
+ integrity sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==
+
+showdown@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/showdown/-/showdown-2.1.0.tgz#1251f5ed8f773f0c0c7bfc8e6fd23581f9e545c5"
+ integrity sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==
+ dependencies:
+ commander "^9.0.0"
+
+socket.io-client@^4.5.1:
+ version "4.6.1"
+ resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.6.1.tgz#80d97d5eb0feca448a0fb6d69a7b222d3d547eab"
+ integrity sha512-5UswCV6hpaRsNg5kkEHVcbBIXEYoVbMQaHJBXJCyEQ+CiFPV1NIOY0XOFWG4XR4GZcB8Kn6AsRs/9cy9TbqVMQ==
+ dependencies:
+ "@socket.io/component-emitter" "~3.1.0"
+ debug "~4.3.2"
+ engine.io-client "~6.4.0"
+ socket.io-parser "~4.2.1"
+
+socket.io-parser@~4.2.1:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.2.tgz#1dd384019e25b7a3d374877f492ab34f2ad0d206"
+ integrity sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==
+ dependencies:
+ "@socket.io/component-emitter" "~3.1.0"
+ debug "~4.3.1"
+
+source-map-js@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.1.tgz#a1741c131e3c77d048252adfa24e23b908670caf"
+ integrity sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==
+
+source-map-js@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
+ integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+tailwindcss@^3.0.15:
+ version "3.0.15"
+ resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.0.15.tgz#e4db219771eb7678a3bfd97b3f6c8fe20be0a410"
+ integrity sha512-bT2iy7FtjwgsXik4ZoJnHXR+SRCiGR1W95fVqpLZebr64m4ahwUwRbIAc5w5+2fzr1YF4Ct2eI7dojMRRl8sVQ==
+ dependencies:
+ arg "^5.0.1"
+ chalk "^4.1.2"
+ chokidar "^3.5.2"
+ color-name "^1.1.4"
+ cosmiconfig "^7.0.1"
+ detective "^5.2.0"
+ didyoumean "^1.2.2"
+ dlv "^1.1.3"
+ fast-glob "^3.2.7"
+ glob-parent "^6.0.2"
+ is-glob "^4.0.3"
+ normalize-path "^3.0.0"
+ object-hash "^2.2.0"
+ postcss-js "^4.0.0"
+ postcss-load-config "^3.1.0"
+ postcss-nested "5.0.6"
+ postcss-selector-parser "^6.0.8"
+ postcss-value-parser "^4.2.0"
+ quick-lru "^5.1.1"
+ resolve "^1.21.0"
+
+throttle-debounce@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb"
+ integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==
+
+tippy.js@^6.3.7:
+ version "6.3.7"
+ resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c"
+ integrity sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==
+ dependencies:
+ "@popperjs/core" "^2.9.0"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+tslib@^2.0.0, tslib@^2.4.0:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
+ integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
+
+type-fest@^2.0.0:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
+ integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
+
+uc.micro@^1.0.1, uc.micro@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
+ integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
+
+util-deprecate@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+vite@^2.7.2:
+ version "2.7.12"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-2.7.12.tgz#7784ab19e7ff98f6a192d2d7d877480a8c2b7e7d"
+ integrity sha512-KvPYToRQWhRfBeVkyhkZ5hASuHQkqZUUdUcE3xyYtq5oYEPIJ0h9LWiWTO6v990glmSac2cEPeYeXzpX5Z6qKQ==
+ dependencies:
+ esbuild "^0.13.12"
+ postcss "^8.4.5"
+ resolve "^1.20.0"
+ rollup "^2.59.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+vue-demi@>=0.13.0, vue-demi@>=0.14.7:
+ version "0.14.7"
+ resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.7.tgz#8317536b3ef74c5b09f268f7782e70194567d8f2"
+ integrity sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==
+
+vue-router@^4.0.12:
+ version "4.0.12"
+ resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.12.tgz#8dc792cddf5bb1abcc3908f9064136de7e13c460"
+ integrity sha512-CPXvfqe+mZLB1kBWssssTiWg4EQERyqJZes7USiqfW9B5N2x+nHlnsM1D3b5CaJ6qgCvMmYJnz+G0iWjNCvXrg==
+ dependencies:
+ "@vue/devtools-api" "^6.0.0-beta.18"
+
+vue@^3.4.29:
+ version "3.4.31"
+ resolved "https://registry.yarnpkg.com/vue/-/vue-3.4.31.tgz#83a3c4dab8302b0e974b0d4b92a2f6a6378ae797"
+ integrity sha512-njqRrOy7W3YLAlVqSKpBebtZpDVg21FPoaq1I7f/+qqBThK9ChAIjkRWgeP6Eat+8C+iia4P3OYqpATP21BCoQ==
+ dependencies:
+ "@vue/compiler-dom" "3.4.31"
+ "@vue/compiler-sfc" "3.4.31"
+ "@vue/runtime-dom" "3.4.31"
+ "@vue/server-renderer" "3.4.31"
+ "@vue/shared" "3.4.31"
+
+w3c-keyname@^2.2.0:
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.6.tgz#8412046116bc16c5d73d4e612053ea10a189c85f"
+ integrity sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==
+
+ws@~8.11.0:
+ version "8.11.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143"
+ integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==
+
+xmlhttprequest-ssl@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67"
+ integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==
+
+xtend@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+yaml@^1.10.0, yaml@^1.10.2:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
+ integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
diff --git a/kolanalystapp/api.py b/kolanalystapp/api.py
new file mode 100644
index 0000000..f2fbbbc
--- /dev/null
+++ b/kolanalystapp/api.py
@@ -0,0 +1,206 @@
+import frappe
+
+
+@frappe.whitelist(allow_guest=True)
+def fetch_data(
+ doctype : str,
+ fields= None,
+ filters=None,
+ order_by=None,
+ page_length=20):
+ records = frappe.get_list('optlistdata',
+ filters=filters,
+ limit_page_length = page_length)
+ return [{
+ "kol_id" : str(client["kol_id"]),
+ "kol_name" : str(client["kol_name"]),
+ "project_name" : str(client["project_name"]),
+ "client_name" : str(client["client_name"]),
+ "client_poc" : str(client["client_poc"]),
+ "optin_received_date" : str(client["optin_recieived_date"]),
+ "optin_approved_date" : str(client["optin_approved_date"]),
+ "status" : str(client["status"]),
+ "instance" : str(client["instance"]),
+ "npi_id": str(client["npi_id"]),
+ "country" : str(client["country"]),
+ "data_processed_date" : str(client["data_processed_date"]),
+ "user_name": str(client["user_name"]),
+ }
+ for client in records]
+
+@frappe.whitelist()
+def get_list_data(
+ doctype: str,
+ filters: dict,
+ order_by: str,
+ page_length=20,
+ page_length_count=20,
+ columns=None,
+ rows=None,
+ view=None,
+ default_filters=None,
+):
+ custom_view = False
+ filters = frappe._dict(filters)
+
+ custom_view_name = view.get('custom_view_name') if view else None
+ view_type = view.get('view_type') if view else None
+ group_by_field = view.get('group_by_field') if view else None
+
+ for key in filters:
+ value = filters[key]
+ if isinstance(value, list):
+ if "@me" in value:
+ value[value.index("@me")] = frappe.session.user
+ elif "%@me%" in value:
+ index = [i for i, v in enumerate(value) if v == "%@me%"]
+ for i in index:
+ value[i] = "%" + frappe.session.user + "%"
+ elif value == "@me":
+ filters[key] = frappe.session.user
+
+ if default_filters:
+ default_filters = frappe.parse_json(default_filters)
+ filters.update(default_filters)
+
+ is_default = True
+ if columns or rows:
+ custom_view = True
+ is_default = False
+ columns = frappe.parse_json(columns)
+ rows = frappe.parse_json(rows)
+
+ if not columns:
+ columns = [
+ {"label": "Name", "type": "Data", "key": "name", "width": "16rem"},
+ {"label": "Last Modified", "type": "Datetime", "key": "modified", "width": "8rem"},
+ ]
+
+ if not rows:
+ rows = ["name"]
+
+ default_view_filters = {
+ "dt": doctype,
+ "type": view_type or 'list',
+ "is_default": 1,
+ "user": frappe.session.user,
+ }
+
+ _list = get_controller(doctype)
+
+ if not custom_view :
+ list_view_settings = frappe.get_doc("optlistdata", default_view_filters)
+ columns = frappe.parse_json(list_view_settings.columns)
+ rows = frappe.parse_json(list_view_settings.rows)
+ is_default = False
+ elif not custom_view or is_default and hasattr(_list, "default_list_data"):
+ columns = _list.default_list_data().get("columns")
+
+ if hasattr(_list, "default_list_data"):
+ rows = _list.default_list_data().get("rows")
+
+ # check if rows has all keys from columns if not add them
+ for column in columns:
+ if column.get("key") not in rows:
+ rows.append(column.get("key"))
+ column["label"] = _(column.get("label"))
+
+ if column.get("key") == "_liked_by" and column.get("width") == "10rem":
+ column["width"] = "50px"
+
+ # check if rows has group_by_field if not add it
+ if group_by_field and group_by_field not in rows:
+ rows.append(group_by_field)
+
+ data = fetch_data(
+ doctype,
+ fields=rows,
+ filters=filters,
+ order_by=order_by,
+ page_length=page_length,
+ ) or []
+
+ fields = frappe.get_meta(doctype).fields
+ fields = [field for field in fields if field.fieldtype not in no_value_fields]
+ fields = [
+ {
+ "label": _(field.label),
+ "type": field.fieldtype,
+ "value": field.fieldname,
+ "options": field.options,
+ }
+ for field in fields
+ if field.label and field.fieldname
+ ]
+
+ std_fields = [
+ {"label": "Name", "type": "Data", "value": "name"},
+ {"label": "Created On", "type": "Datetime", "value": "creation"},
+ {"label": "Last Modified", "type": "Datetime", "value": "modified"},
+ {
+ "label": "Modified By",
+ "type": "Link",
+ "value": "modified_by",
+ "options": "User",
+ },
+ {"label": "Assigned To", "type": "Text", "value": "_assign"},
+ {"label": "Owner", "type": "Link", "value": "owner", "options": "User"},
+ {"label": "Like", "type": "Data", "value": "_liked_by"},
+ ]
+
+ for field in std_fields:
+ if field.get('value') not in rows:
+ rows.append(field.get('value'))
+ if field not in fields:
+ field["label"] = _(field["label"])
+ fields.append(field)
+
+ if not is_default and custom_view_name:
+ is_default = frappe.db.get_value("optlistdata", custom_view_name, "load_default_columns")
+
+ if group_by_field and view_type == "group_by":
+ def get_options(type, options):
+ if type == "Select":
+ return [option for option in options.split("\n")]
+ else:
+ has_empty_values = any([not d.get(group_by_field) for d in data])
+ options = list(set([d.get(group_by_field) for d in data]))
+ options = [u for u in options if u]
+ if has_empty_values:
+ options.append("")
+
+ if order_by and group_by_field in order_by:
+ order_by_fields = order_by.split(",")
+ order_by_fields = [(field.split(" ")[0], field.split(" ")[1]) for field in order_by_fields]
+ if (group_by_field, "asc") in order_by_fields:
+ options.sort()
+ elif (group_by_field, "desc") in order_by_fields:
+ options.sort(reverse=True)
+ else:
+ options.sort()
+ return options
+
+ for field in fields:
+ if field.get("value") == group_by_field:
+ group_by_field = {
+ "label": field.get("label"),
+ "name": field.get("value"),
+ "type": field.get("type"),
+ "options": get_options(field.get("type"), field.get("options")),
+ }
+
+ return {
+ # "data": data,
+ "columns": columns,
+ "rows": rows,
+ "fields": fields,
+ "group_by_field": group_by_field,
+ "page_length": page_length,
+ "page_length_count": page_length_count,
+ "is_default": is_default,
+ "views": get_views(doctype),
+ "total_count": len(frappe.get_list(doctype, filters=filters)),
+ "row_count": len(data),
+ "form_script": get_form_script(doctype),
+ "list_script": get_form_script(doctype, "List"),
+ }
\ No newline at end of file
diff --git a/kolanalystapp/hooks.py b/kolanalystapp/hooks.py
index 6702c0d..8bfbc80 100644
--- a/kolanalystapp/hooks.py
+++ b/kolanalystapp/hooks.py
@@ -227,3 +227,5 @@ app_license = "mit"
# "Logging DocType Name": 30 # days to retain logs
# }
+
+website_route_rules = [{'from_route': '/analystview/', 'to_route': 'analystview'},]
\ No newline at end of file
diff --git a/kolanalystapp/opt_in_analyst_app/doctype/__init__.py b/kolanalystapp/opt_in_analyst_app/doctype/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/kolanalystapp/opt_in_analyst_app/doctype/optlistdata/__init__.py b/kolanalystapp/opt_in_analyst_app/doctype/optlistdata/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/kolanalystapp/opt_in_analyst_app/doctype/optlistdata/optlistdata.js b/kolanalystapp/opt_in_analyst_app/doctype/optlistdata/optlistdata.js
new file mode 100644
index 0000000..b97408d
--- /dev/null
+++ b/kolanalystapp/opt_in_analyst_app/doctype/optlistdata/optlistdata.js
@@ -0,0 +1,8 @@
+// Copyright (c) 2024, snehalatha and contributors
+// For license information, please see license.txt
+
+// frappe.ui.form.on("optlistdata", {
+// refresh(frm) {
+
+// },
+// });
diff --git a/kolanalystapp/opt_in_analyst_app/doctype/optlistdata/optlistdata.json b/kolanalystapp/opt_in_analyst_app/doctype/optlistdata/optlistdata.json
new file mode 100644
index 0000000..b59e93c
--- /dev/null
+++ b/kolanalystapp/opt_in_analyst_app/doctype/optlistdata/optlistdata.json
@@ -0,0 +1,131 @@
+{
+ "actions": [],
+ "allow_rename": 1,
+ "autoname": "field:kol_id",
+ "creation": "2024-07-03 18:39:37.119865",
+ "doctype": "DocType",
+ "engine": "InnoDB",
+ "field_order": [
+ "kol_id",
+ "kol_name",
+ "client_name",
+ "project_name",
+ "client_poc",
+ "optin_recieived_date",
+ "optin_approved_date",
+ "status",
+ "user_name",
+ "optin_type",
+ "data_processed_date",
+ "instance",
+ "npi_id",
+ "country"
+ ],
+ "fields": [
+ {
+ "fieldname": "kol_id",
+ "fieldtype": "Data",
+ "in_preview": 1,
+ "in_standard_filter": 1,
+ "label": "KOL ID",
+ "unique": 1
+ },
+ {
+ "fieldname": "kol_name",
+ "fieldtype": "Data",
+ "label": "KOL Name"
+ },
+ {
+ "fieldname": "client_name",
+ "fieldtype": "Data",
+ "label": "Client Name"
+ },
+ {
+ "fieldname": "project_name",
+ "fieldtype": "Data",
+ "label": "Project Name"
+ },
+ {
+ "fieldname": "client_poc",
+ "fieldtype": "Data",
+ "label": "Client POC"
+ },
+ {
+ "fieldname": "optin_recieived_date",
+ "fieldtype": "Data",
+ "label": "Optin recieived date"
+ },
+ {
+ "fieldname": "optin_approved_date",
+ "fieldtype": "Data",
+ "label": "Optin approved date"
+ },
+ {
+ "fieldname": "status",
+ "fieldtype": "Data",
+ "label": "status"
+ },
+ {
+ "fieldname": "user_name",
+ "fieldtype": "Data",
+ "label": "User Name"
+ },
+ {
+ "fieldname": "optin_type",
+ "fieldtype": "Data",
+ "in_list_view": 1,
+ "label": "Optin Type"
+ },
+ {
+ "fieldname": "data_processed_date",
+ "fieldtype": "Data",
+ "label": "Data Processed Date"
+ },
+ {
+ "fieldname": "instance",
+ "fieldtype": "Data",
+ "in_list_view": 1,
+ "in_preview": 1,
+ "label": "instance"
+ },
+ {
+ "fieldname": "npi_id",
+ "fieldtype": "Data",
+ "in_list_view": 1,
+ "in_preview": 1,
+ "in_standard_filter": 1,
+ "label": "NPI ID"
+ },
+ {
+ "fieldname": "country",
+ "fieldtype": "Data",
+ "label": "Country"
+ }
+ ],
+ "index_web_pages_for_search": 1,
+ "is_virtual": 1,
+ "links": [],
+ "modified": "2024-07-04 17:47:38.089823",
+ "modified_by": "Administrator",
+ "module": "Opt in analyst app",
+ "name": "optlistdata",
+ "naming_rule": "By fieldname",
+ "owner": "Administrator",
+ "permissions": [
+ {
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "System Manager",
+ "share": 1,
+ "write": 1
+ }
+ ],
+ "sort_field": "creation",
+ "sort_order": "DESC",
+ "states": []
+}
\ No newline at end of file
diff --git a/kolanalystapp/opt_in_analyst_app/doctype/optlistdata/optlistdata.py b/kolanalystapp/opt_in_analyst_app/doctype/optlistdata/optlistdata.py
new file mode 100644
index 0000000..2c98337
--- /dev/null
+++ b/kolanalystapp/opt_in_analyst_app/doctype/optlistdata/optlistdata.py
@@ -0,0 +1,173 @@
+# Copyright (c) 2024, snehalatha and contributors
+# For license information, please see license.txt
+
+import frappe
+from frappe.model.document import Document
+from kolanalystapp.opt_in_analyst_app.kol_databases import get_records
+
+
+class optlistdata(Document):
+
+ def db_insert(self, *args, **kwargs):
+ raise NotImplementedError
+
+ def load_from_db(self):
+ clients_array = get_records()
+ clientlist = []
+ d = {}
+
+ for client in clients_array :
+ clientlist.append(
+ {
+ "name": client["id"],
+ "kol_id" : str(client["id"]),
+ "kol_name" : str(client["kol_name"]),
+ "project_name" : str(client["project_name"]),
+ "client_name" : str(client["client_name"]),
+ "client_poc" : str(client["client_poc"]),
+ "status" : str(client["status"]),
+ "instance" : str(client["instance"]),
+ "npi_id": str(client["npi_num"]),
+ "data_processed_date": str(client["data_processed_date"]),
+ "country": str(client["user_country"]),
+ "user_name": str(client["user_name"]),
+ "optin_recieived_date" : optinReceived(str(client["project_details"]),"Opt-in Received"),
+ "optin_approved_date" : optinReceived(str(client["project_details"]),"Opt-in Approved"),
+
+ }
+ )
+
+ print(f"$$name: {self.name}")
+
+ for client in clientlist :
+ if client["kol_id"] == self.name :
+ d = client
+
+ super(Document, self).__init__(d)
+
+ def db_update(self):
+ raise NotImplementedError
+
+ def delete(self):
+ raise NotImplementedError
+
+ @staticmethod
+ def get_list(filters=None, page_length=20, **kwargs):
+ clientlist = []
+ clientlist = getValues()
+ # page_length = 20
+
+ # for client in clients_array :
+ # clientlist.append({
+ # **client,
+ # # "_id": str(client["id"]),
+ # # "kol_id" : str(client["id"]),
+ # # "kol_name" : str(client["kol_name"]),
+ # # "client_poc" : str(client["client_name"]),
+ # # "project_name" : str(client["project_details"]),
+ # # "cs_assigned_poc" : str(client["user_name"]),
+ # })
+
+ # {'id': 457002, 'kol_name': 'Ferdinand Douglas', 'project_name': None, 'client_name': 'Abbott EMEA', 'user_name': 'Abbott EMEAGeneric', 'project_details': 'New-2024-04-18,Opt-in Requested-2024-04-18'}
+ # print(f"################################check person {clientlist}")
+ return paginate(clientlist,page_length,1)
+
+
+
+
+
+
+
+
+
+ @staticmethod
+ def get_count(filters=None, **kwargs):
+ clientlist = []
+ clientlist = getValues()
+ return len(clientlist)
+
+ @staticmethod
+ def get_stats(**kwargs):
+ pass
+
+
+ # def get_virtual_data(start=0, page_length=20):
+ # data = [{"name": f"Doc {i+1}", "value": i+1}
+ # for i in range(start, start + page_length)]
+
+ # total_records = 1000
+ # return data, total_records
+
+
+
+ # def get_paginated_data(start=0, page_length=20):
+ # start = int(start)
+ # page_length = int(page_length)
+
+ # data, total_records = get_virtual_data(start, page_length)
+
+ # return {
+ # "data": data,
+ # "total_records": total_records,
+ # }
+
+def paginate(items, page_size, page_number):
+ start_index = (page_number - 1) * page_size
+ end_index = start_index + page_size
+ return items[start_index:end_index]
+
+def getValues():
+ records = get_records()
+ # print(f"rec########{records}")
+
+ return[
+ {
+ "name": client["id"],
+ "kol_id" : str(client["id"]),
+ "kol_name" : str(client["kol_name"]),
+ "project_name" : str(client["project_name"]),
+ "client_name" : str(client["client_name"]),
+ "client_poc" : str(client["client_poc"]),
+ "status" : str(client["status"]),
+ "instance" : str(client["instance"]),
+ "npi_id": str(client["npi_num"]),
+ "data_processed_date": str(client["data_processed_date"]),
+ "country": str(client["user_country"]),
+ "user_name": str(client["user_name"]),
+ "optin_recieived_date" : optinReceived(str(client["project_details"]),"Opt-in Received"),
+ "optin_approved_date" : optinReceived(str(client["project_details"]),"Opt-in Approved"),
+
+ }
+ for client in records
+ ]
+
+
+def optinReceived(value,key):
+ if not value:
+ return "no date"
+ else:
+ dictionary = dict(subString.split(":") for subString in value.split(","))
+ if(key in dictionary):
+ return dictionary[key]
+ else:
+ return ' '
+
+
+
+def optinStatus(str):
+ if not str:
+ return str("")
+ else:
+ dictionary = dict(subString.split(":") for subString in str.split(","))
+ if("Opt-in" in dictionary):
+ if(len(dictionary) == 1 ):
+ return "Opted In"
+ else:
+ if("Opt-out" in dictionary):
+ return "Opted Out"
+
+
+
+
+
+
diff --git a/kolanalystapp/opt_in_analyst_app/doctype/optlistdata/test_optlistdata.py b/kolanalystapp/opt_in_analyst_app/doctype/optlistdata/test_optlistdata.py
new file mode 100644
index 0000000..5e476d8
--- /dev/null
+++ b/kolanalystapp/opt_in_analyst_app/doctype/optlistdata/test_optlistdata.py
@@ -0,0 +1,9 @@
+# Copyright (c) 2024, snehalatha and Contributors
+# See license.txt
+
+# import frappe
+from frappe.tests.utils import FrappeTestCase
+
+
+class Testoptlistdata(FrappeTestCase):
+ pass
diff --git a/kolanalystapp/opt_in_analyst_app/kol_databases.py b/kolanalystapp/opt_in_analyst_app/kol_databases.py
new file mode 100644
index 0000000..eff58cd
--- /dev/null
+++ b/kolanalystapp/opt_in_analyst_app/kol_databases.py
@@ -0,0 +1,68 @@
+import mysql.connector
+from mysql.connector import Error
+
+# Define the database connection details
+db_configs = [
+ {
+ 'user': 'snehalatha',
+ 'password': 'paSsWord@#654',
+ 'host': 'konectar-readreplica-rds.konectar.io',
+ 'database': 'kolm_lite_cardio',
+ 'instance':'cardio'
+ },
+ {
+ 'user': 'snehalatha',
+ 'password': 'paSsWord@#654',
+ 'host': 'konectar-readreplica-rds.konectar.io',
+ 'database': 'kolm_lite_veterinary',
+ 'instance':'veterinary'
+ },
+ {
+ 'user': 'snehalatha',
+ 'password': 'paSsWord@#654',
+ 'host': 'konectar-readreplica-rds.konectar.io',
+ 'database': 'kolm_lite_oralhealth',
+ 'instance':'oralhealth'
+ }
+]
+
+def fetch_records(config):
+ try:
+ # Connect to the database
+ connection = mysql.connector.connect(
+ host=config['host'],
+ user=config['user'],
+ password=config['password'],
+ database=config['database']
+ )
+ if connection.is_connected():
+
+ cursor = connection.cursor(dictionary=True)
+ cursor.execute(f"SELECT '{ config['instance'] }' as instance, kols.npi_num,kols.id,CONCAT_WS(' ',kols.first_name,kols.middle_name,kols.last_name) as kol_name, projects.name as project_name, clients.name as client_name,CONCAT(client_users.first_name,' ',client_users.last_name) as user_name, GROUP_CONCAT(DISTINCT log_activities.transaction_name,':',date(log_activities.created_on)) as project_details,case when user_kols.opt_in_out_status = 3 then 'Opted Out' when user_kols.opt_in_out_status = 4 then 'Opted In' else '' end as status , date(kols.data_updated) as data_processed_date,countries.Country as user_country,CONCAT(poc.first_name,' ',poc.last_name) as client_poc FROM kols left join user_kols on user_kols.kol_id = kols.id left join countries on countries.CountryId = kols.country_id inner join opt_inout_statuses on opt_inout_statuses.id = user_kols.opt_in_out_status left join log_activities on log_activities.miscellaneous1 = user_kols.kol_id left join client_users on client_users.id = user_kols.user_id left join clients on client_users.client_id = clients.id left join client_users as poc on poc.id = clients.created_by left join project_clients on project_clients.client_id = clients.id left join projects on project_clients.project_id = projects.id where log_activities.module ='opt_in_out' and log_activities.transaction_name in ('New','Opt-in Requested','Opt-out','Opt-in Approved','Opt-in Expired','Opt-in Received','Opt-in') group by kols.id;")
+ records = cursor.fetchall()
+ return records
+
+ except Error as e:
+ print(f"Error while connecting to MySQL: {e}")
+ return None
+
+ finally:
+ if connection.is_connected():
+ cursor.close()
+ connection.close()
+
+# Loop through the databases and fetch records
+
+def get_records():
+ all_records = []
+ for config in db_configs:
+ records = fetch_records(config)
+ if records:
+ all_records.extend(records)
+
+ return all_records
+
+# Print or process the fetched records
+# for record in all_records:
+# print(record)
+
diff --git a/kolanalystapp/reportquery.py b/kolanalystapp/reportquery.py
new file mode 100644
index 0000000..88f4dae
--- /dev/null
+++ b/kolanalystapp/reportquery.py
@@ -0,0 +1,121 @@
+import frappe
+
+import json
+from functools import lru_cache
+
+from sql_metadata import Parser
+
+import frappe
+import frappe.permissions
+from frappe import _
+from frappe.core.doctype.access_log.access_log import make_access_log
+from frappe.model import child_table_fields, default_fields, get_permitted_fields, optional_fields
+from frappe.model.base_document import get_controller
+from frappe.model.db_query import DatabaseQuery
+from frappe.model.utils import is_virtual_doctype
+from frappe.utils import add_user_info, cint, format_duration
+from frappe.utils.data import sbool
+
+@frappe.whitelist()
+@frappe.read_only()
+def export_query():
+ """export from report builder"""
+ from frappe.desk.utils import get_csv_bytes, pop_csv_params, provide_binary_file
+
+ form_params = get_form_params()
+ form_params["limit_page_length"] = None
+ form_params["as_list"] = True
+ doctype = form_params.pop("doctype")
+ file_format_type = form_params.pop("file_format_type")
+ title = form_params.pop("title", doctype)
+ csv_params = pop_csv_params(form_params)
+ add_totals_row = 1 if form_params.pop("add_totals_row", None) == "1" else None
+
+ frappe.permissions.can_export(doctype, raise_exception=True)
+
+ if selection := form_params.pop("selected_items", None):
+ form_params["filters"] = {"name": ("in", json.loads(selection))}
+
+ make_access_log(
+ doctype=doctype,
+ file_type=file_format_type,
+ report_name=form_params.report_name,
+ filters=form_params.filters,
+ )
+
+ db_query = DatabaseQuery(doctype)
+ ret = frappe.get_list(doctype)
+
+ if add_totals_row:
+ ret = append_totals_row(ret)
+
+ # //data = [[_("Sr"), *get_labels(fields, doctype)]]
+ data.extend([i + 1, *list(row)] for i, row in enumerate(ret.value))
+ data = handle_duration_fieldtype_values(doctype, data, db_query.fields)
+
+ if file_format_type == "CSV":
+ from frappe.utils.xlsxutils import handle_html
+
+ file_extension = "csv"
+ content = get_csv_bytes(
+ [[handle_html(frappe.as_unicode(v)) if isinstance(v, str) else v for v in r] for r in data],
+ csv_params,
+ )
+ elif file_format_type == "Excel":
+ from frappe.utils.xlsxutils import make_xlsx
+
+ file_extension = "xlsx"
+ content = make_xlsx(data, doctype).getvalue()
+
+ provide_binary_file(title, file_extension, content)
+
+def get_form_params():
+ """parse GET request parameters."""
+ data = frappe._dict(frappe.local.form_dict)
+ # clean_params(data)
+ # validate_args(data)
+ return data
+
+def get_labels(fields, doctype):
+ """get column labels based on column names"""
+ labels = []
+ for key in fields:
+ try:
+ parenttype, fieldname = parse_field(key)
+ except ValueError:
+ continue
+
+ parenttype = parenttype or doctype
+
+ if parenttype == doctype and fieldname == "name":
+ label = _("ID", context="Label of name column in report")
+ else:
+ df = frappe.get_meta(parenttype).get_field(fieldname)
+ label = _(df.label if df else fieldname.title())
+ if parenttype != doctype:
+ # If the column is from a child table, append the child doctype.
+ # For example, "Item Code (Sales Invoice Item)".
+ label += f" ({ _(parenttype) })"
+
+ labels.append(label)
+
+ return labels
+
+def handle_duration_fieldtype_values(doctype, data, fields):
+ for field in fields:
+ try:
+ parenttype, fieldname = parse_field(field)
+ except ValueError:
+ continue
+
+ parenttype = parenttype or doctype
+ df = frappe.get_meta(parenttype).get_field(fieldname)
+
+ if df and df.fieldtype == "Duration":
+ index = fields.index(field) + 1
+ for i in range(1, len(data)):
+ val_in_seconds = data[i][index]
+ if val_in_seconds:
+ duration_val = format_duration(val_in_seconds, df.hide_days)
+ data[i][index] = duration_val
+ return data
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..199ab3a
--- /dev/null
+++ b/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "kolanalystapp",
+ "version": "1.0.0",
+ "description": "Opt in analyst app",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "postinstall": "cd analystview && yarn install",
+ "dev": "cd analystview && yarn dev",
+ "build": "cd analystview && yarn build"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC"
+}
\ No newline at end of file