forked from geolba/tethys.backend
- prettier formatting
- npm updates - new SearchMap.vue component
This commit is contained in:
parent
7bc9f90cca
commit
a7142f694f
|
@ -19,15 +19,11 @@
|
||||||
"./start/kernel",
|
"./start/kernel",
|
||||||
{
|
{
|
||||||
"file": "./start/inertia",
|
"file": "./start/inertia",
|
||||||
"environment": [
|
"environment": ["web"]
|
||||||
"web"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"file": "./start/validator",
|
"file": "./start/validator",
|
||||||
"environment": [
|
"environment": ["web"]
|
||||||
"web"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"providers": [
|
"providers": [
|
||||||
|
@ -53,21 +49,15 @@
|
||||||
"reloadServer": false
|
"reloadServer": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"aceProviders": [
|
"aceProviders": ["@adonisjs/repl"],
|
||||||
"@adonisjs/repl"
|
|
||||||
],
|
|
||||||
"tests": {
|
"tests": {
|
||||||
"suites": [
|
"suites": [
|
||||||
{
|
{
|
||||||
"name": "functional",
|
"name": "functional",
|
||||||
"files": [
|
"files": ["tests/functional/**/*.spec(.ts|.js)"],
|
||||||
"tests/functional/**/*.spec(.ts|.js)"
|
|
||||||
],
|
|
||||||
"timeout": 60000
|
"timeout": 60000
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"testProviders": [
|
"testProviders": ["@japa/preset-adonis/TestsProvider"]
|
||||||
"@japa/preset-adonis/TestsProvider"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +1,14 @@
|
||||||
{
|
{
|
||||||
"extends": [
|
"extends": ["plugin:adonis/typescriptApp", "prettier"],
|
||||||
"plugin:adonis/typescriptApp",
|
"plugins": ["prettier"],
|
||||||
"prettier"
|
|
||||||
],
|
|
||||||
"plugins": [
|
|
||||||
"prettier"
|
|
||||||
],
|
|
||||||
"rules": {
|
"rules": {
|
||||||
"prettier/prettier": [
|
"prettier/prettier": ["error", { "singleQuote": true }],
|
||||||
"error",
|
|
||||||
{ "singleQuote": true }
|
|
||||||
],
|
|
||||||
"@typescript-eslint/indent": ["error", 4, { "ignoredNodes": ["PropertyDefinition", "TSUnionType"] }],
|
"@typescript-eslint/indent": ["error", 4, { "ignoredNodes": ["PropertyDefinition", "TSUnionType"] }],
|
||||||
"@typescript-eslint/naming-convention": [
|
"@typescript-eslint/naming-convention": [
|
||||||
"warn",
|
"warn",
|
||||||
{
|
{
|
||||||
"selector": "interface",
|
"selector": "interface",
|
||||||
"format": [
|
"format": ["PascalCase"],
|
||||||
"PascalCase"
|
|
||||||
],
|
|
||||||
"custom": {
|
"custom": {
|
||||||
"regex": "^I[A-Z]",
|
"regex": "^I[A-Z]",
|
||||||
"match": false
|
"match": false
|
||||||
|
|
|
@ -28,7 +28,6 @@ jobs:
|
||||||
# Set health checks to wait until postgres has started
|
# Set health checks to wait until postgres has started
|
||||||
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
|
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
|
||||||
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
# this will check out the current branch (https://github.com/actions/checkout#Push-a-commit-using-the-built-in-token)
|
# this will check out the current branch (https://github.com/actions/checkout#Push-a-commit-using-the-built-in-token)
|
||||||
- name: 1 Check out repository code
|
- name: 1 Check out repository code
|
||||||
|
|
|
@ -7,10 +7,17 @@
|
||||||
},
|
},
|
||||||
"commandPath": "./commands/IndexDatasets",
|
"commandPath": "./commands/IndexDatasets",
|
||||||
"commandName": "index:datasets",
|
"commandName": "index:datasets",
|
||||||
"description": "",
|
"description": "Index datasets based on publish_id",
|
||||||
"args": [],
|
"args": [],
|
||||||
"aliases": [],
|
"aliases": [],
|
||||||
"flags": []
|
"flags": [
|
||||||
|
{
|
||||||
|
"name": "publish-id",
|
||||||
|
"propertyName": "publish_id",
|
||||||
|
"type": "number",
|
||||||
|
"alias": "p"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"validate:checksum": {
|
"validate:checksum": {
|
||||||
"settings": {
|
"settings": {
|
||||||
|
|
|
@ -9,7 +9,7 @@ import { transform } from 'saxon-js';
|
||||||
import { Client } from '@opensearch-project/opensearch';
|
import { Client } from '@opensearch-project/opensearch';
|
||||||
|
|
||||||
const opensearchNode = process.env.OPENSEARCH_HOST || 'localhost';
|
const opensearchNode = process.env.OPENSEARCH_HOST || 'localhost';
|
||||||
const client = new Client({ node: `http://${opensearchNode}:9200` }); // replace with your OpenSearch endpoint
|
const client = new Client({ node: `http://${opensearchNode}` }); // replace with your OpenSearch endpoint
|
||||||
|
|
||||||
export default class IndexDatasets extends BaseCommand {
|
export default class IndexDatasets extends BaseCommand {
|
||||||
public static commandName = 'index:datasets';
|
public static commandName = 'index:datasets';
|
||||||
|
@ -87,7 +87,7 @@ export default class IndexDatasets extends BaseCommand {
|
||||||
});
|
});
|
||||||
Logger.info(`dataset with publish_id ${dataset.publish_id} successfully indexed`);
|
Logger.info(`dataset with publish_id ${dataset.publish_id} successfully indexed`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Logger.error(`An error occurred while uindexing datsaet with publish_id ${dataset.publish_id}.`);
|
Logger.error(`An error occurred while indexing datsaet with publish_id ${dataset.publish_id}.`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
621
package-lock.json
generated
621
package-lock.json
generated
|
@ -2682,9 +2682,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint-community/regexpp": {
|
"node_modules/@eslint-community/regexpp": {
|
||||||
"version": "4.9.1",
|
"version": "4.10.0",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
|
||||||
"integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==",
|
"integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
|
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
|
||||||
|
@ -2826,9 +2826,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@inertiajs/core": {
|
"node_modules/@inertiajs/core": {
|
||||||
"version": "1.0.12",
|
"version": "1.0.13",
|
||||||
"resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-1.0.12.tgz",
|
"resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-1.0.13.tgz",
|
||||||
"integrity": "sha512-N9RBmkL7p6N81NT4pBJpU6CmLqO1/VrTdVjIoEjnOpqTjNJnX6Zyq4j8ld2tqLDEd7FZ2tITY30AV1ncvI7B6g==",
|
"integrity": "sha512-xPvogbRgAXbogP16EBnGduEmVtImdncEBNQF9etRFF5Ne2nrJafeFgM0FZHqsSqCDvA4jjk8b8Ezt6gZRPK9hg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^1.2.0",
|
"axios": "^1.2.0",
|
||||||
"deepmerge": "^4.0.0",
|
"deepmerge": "^4.0.0",
|
||||||
|
@ -2837,9 +2837,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@inertiajs/core/node_modules/axios": {
|
"node_modules/@inertiajs/core/node_modules/axios": {
|
||||||
"version": "1.5.1",
|
"version": "1.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz",
|
||||||
"integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==",
|
"integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"follow-redirects": "^1.15.0",
|
"follow-redirects": "^1.15.0",
|
||||||
"form-data": "^4.0.0",
|
"form-data": "^4.0.0",
|
||||||
|
@ -2857,11 +2857,11 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@inertiajs/vue3": {
|
"node_modules/@inertiajs/vue3": {
|
||||||
"version": "1.0.12",
|
"version": "1.0.13",
|
||||||
"resolved": "https://registry.npmjs.org/@inertiajs/vue3/-/vue3-1.0.12.tgz",
|
"resolved": "https://registry.npmjs.org/@inertiajs/vue3/-/vue3-1.0.13.tgz",
|
||||||
"integrity": "sha512-ycMtiCequV/IyPhzXQAnS0uFXTBVkmaXqygAADrLNtkLczGqpCuazULXp3lIArJfotjtx10kEQ8ojTHcQ4bg1g==",
|
"integrity": "sha512-KtUZBP0qRjAHX+ZKpBRFrAwwxUpq51eNhfxxp8A7NAn0OpajfQB8cwVkB4368JGOdjkGFLhDJkMpzfxe0qlPPg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@inertiajs/core": "1.0.12",
|
"@inertiajs/core": "1.0.13",
|
||||||
"lodash.clonedeep": "^4.5.0",
|
"lodash.clonedeep": "^4.5.0",
|
||||||
"lodash.isequal": "^4.5.0"
|
"lodash.isequal": "^4.5.0"
|
||||||
},
|
},
|
||||||
|
@ -3964,9 +3964,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/estree": {
|
"node_modules/@types/estree": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.4.tgz",
|
||||||
"integrity": "sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==",
|
"integrity": "sha512-2JwWnHK9H+wUZNorf2Zr6ves96WHoWDJIftkcxPKsS7Djta6Zu519LarhRNljPXkpsZR2ZMwNCPeW7omW07BJw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"peer": true
|
"peer": true
|
||||||
},
|
},
|
||||||
|
@ -4122,11 +4122,20 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "20.8.7",
|
"version": "20.8.10",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz",
|
||||||
"integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
|
"integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"undici-types": "~5.25.1"
|
"undici-types": "~5.26.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/node-forge": {
|
||||||
|
"version": "1.3.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.8.tgz",
|
||||||
|
"integrity": "sha512-vGXshY9vim9CJjrpcS5raqSjEfKlJcWy2HNdgUasR66fAnVEYarrf1ULV4nfvpC1nZq/moA9qyqBcu83x+Jlrg==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/pino": {
|
"node_modules/@types/pino": {
|
||||||
|
@ -4545,36 +4554,36 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@vue/compiler-core": {
|
"node_modules/@vue/compiler-core": {
|
||||||
"version": "3.3.6",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.7.tgz",
|
||||||
"integrity": "sha512-2JNjemwaNwf+MkkatATVZi7oAH1Hx0B04DdPH3ZoZ8vKC1xZVP7nl4HIsk8XYd3r+/52sqqoz9TWzYc3yE9dqA==",
|
"integrity": "sha512-pACdY6YnTNVLXsB86YD8OF9ihwpolzhhtdLVHhBL6do/ykr6kKXNYABRtNMGrsQXpEXXyAdwvWWkuTbs4MFtPQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.23.0",
|
"@babel/parser": "^7.23.0",
|
||||||
"@vue/shared": "3.3.6",
|
"@vue/shared": "3.3.7",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "^2.0.2",
|
||||||
"source-map-js": "^1.0.2"
|
"source-map-js": "^1.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/compiler-dom": {
|
"node_modules/@vue/compiler-dom": {
|
||||||
"version": "3.3.6",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.7.tgz",
|
||||||
"integrity": "sha512-1MxXcJYMHiTPexjLAJUkNs/Tw2eDf2tY3a0rL+LfuWyiKN2s6jvSwywH3PWD8bKICjfebX3GWx2Os8jkRDq3Ng==",
|
"integrity": "sha512-0LwkyJjnUPssXv/d1vNJ0PKfBlDoQs7n81CbO6Q0zdL7H1EzqYRrTVXDqdBVqro0aJjo/FOa1qBAPVI4PGSHBw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/compiler-core": "3.3.6",
|
"@vue/compiler-core": "3.3.7",
|
||||||
"@vue/shared": "3.3.6"
|
"@vue/shared": "3.3.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/compiler-sfc": {
|
"node_modules/@vue/compiler-sfc": {
|
||||||
"version": "3.3.6",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.7.tgz",
|
||||||
"integrity": "sha512-/Kms6du2h1VrXFreuZmlvQej8B1zenBqIohP0690IUBkJjsFvJxY0crcvVRJ0UhMgSR9dewB+khdR1DfbpArJA==",
|
"integrity": "sha512-7pfldWy/J75U/ZyYIXRVqvLRw3vmfxDo2YLMwVtWVNew8Sm8d6wodM+OYFq4ll/UxfqVr0XKiVwti32PCrruAw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.23.0",
|
"@babel/parser": "^7.23.0",
|
||||||
"@vue/compiler-core": "3.3.6",
|
"@vue/compiler-core": "3.3.7",
|
||||||
"@vue/compiler-dom": "3.3.6",
|
"@vue/compiler-dom": "3.3.7",
|
||||||
"@vue/compiler-ssr": "3.3.6",
|
"@vue/compiler-ssr": "3.3.7",
|
||||||
"@vue/reactivity-transform": "3.3.6",
|
"@vue/reactivity-transform": "3.3.7",
|
||||||
"@vue/shared": "3.3.6",
|
"@vue/shared": "3.3.7",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "^2.0.2",
|
||||||
"magic-string": "^0.30.5",
|
"magic-string": "^0.30.5",
|
||||||
"postcss": "^8.4.31",
|
"postcss": "^8.4.31",
|
||||||
|
@ -4582,12 +4591,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/compiler-ssr": {
|
"node_modules/@vue/compiler-ssr": {
|
||||||
"version": "3.3.6",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.7.tgz",
|
||||||
"integrity": "sha512-QTIHAfDCHhjXlYGkUg5KH7YwYtdUM1vcFl/FxFDlD6d0nXAmnjizka3HITp8DGudzHndv2PjKVS44vqqy0vP4w==",
|
"integrity": "sha512-TxOfNVVeH3zgBc82kcUv+emNHo+vKnlRrkv8YvQU5+Y5LJGJwSNzcmLUoxD/dNzv0bhQ/F0s+InlgV0NrApJZg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/compiler-dom": "3.3.6",
|
"@vue/compiler-dom": "3.3.7",
|
||||||
"@vue/shared": "3.3.6"
|
"@vue/shared": "3.3.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/devtools-api": {
|
"node_modules/@vue/devtools-api": {
|
||||||
|
@ -4597,41 +4606,41 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@vue/reactivity": {
|
"node_modules/@vue/reactivity": {
|
||||||
"version": "3.3.6",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.7.tgz",
|
||||||
"integrity": "sha512-gtChAumfQz5lSy5jZXfyXbKrIYPf9XEOrIr6rxwVyeWVjFhJwmwPLtV6Yis+M9onzX++I5AVE9j+iPH60U+B8Q==",
|
"integrity": "sha512-cZNVjWiw00708WqT0zRpyAgduG79dScKEPYJXq2xj/aMtk3SKvL3FBt2QKUlh6EHBJ1m8RhBY+ikBUzwc7/khg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/shared": "3.3.6"
|
"@vue/shared": "3.3.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/reactivity-transform": {
|
"node_modules/@vue/reactivity-transform": {
|
||||||
"version": "3.3.6",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.7.tgz",
|
||||||
"integrity": "sha512-RlJl4dHfeO7EuzU1iJOsrlqWyJfHTkJbvYz/IOJWqu8dlCNWtxWX377WI0VsbAgBizjwD+3ZjdnvSyyFW1YVng==",
|
"integrity": "sha512-APhRmLVbgE1VPGtoLQoWBJEaQk4V8JUsqrQihImVqKT+8U6Qi3t5ATcg4Y9wGAPb3kIhetpufyZ1RhwbZCIdDA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.23.0",
|
"@babel/parser": "^7.23.0",
|
||||||
"@vue/compiler-core": "3.3.6",
|
"@vue/compiler-core": "3.3.7",
|
||||||
"@vue/shared": "3.3.6",
|
"@vue/shared": "3.3.7",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "^2.0.2",
|
||||||
"magic-string": "^0.30.5"
|
"magic-string": "^0.30.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/runtime-core": {
|
"node_modules/@vue/runtime-core": {
|
||||||
"version": "3.3.6",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.7.tgz",
|
||||||
"integrity": "sha512-qp7HTP1iw1UW2ZGJ8L3zpqlngrBKvLsDAcq5lA6JvEXHmpoEmjKju7ahM9W2p/h51h0OT5F2fGlP/gMhHOmbUA==",
|
"integrity": "sha512-LHq9du3ubLZFdK/BP0Ysy3zhHqRfBn80Uc+T5Hz3maFJBGhci1MafccnL3rpd5/3wVfRHAe6c+PnlO2PAavPTQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/reactivity": "3.3.6",
|
"@vue/reactivity": "3.3.7",
|
||||||
"@vue/shared": "3.3.6"
|
"@vue/shared": "3.3.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/runtime-dom": {
|
"node_modules/@vue/runtime-dom": {
|
||||||
"version": "3.3.6",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.7.tgz",
|
||||||
"integrity": "sha512-AoX3Cp8NqMXjLbIG9YR6n/pPLWE9TiDdk6wTJHFnl2GpHzDFH1HLBC9wlqqQ7RlnvN3bVLpzPGAAH00SAtOxHg==",
|
"integrity": "sha512-PFQU1oeJxikdDmrfoNQay5nD4tcPNYixUBruZzVX/l0eyZvFKElZUjW4KctCcs52nnpMGO6UDK+jF5oV4GT5Lw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/runtime-core": "3.3.6",
|
"@vue/runtime-core": "3.3.7",
|
||||||
"@vue/shared": "3.3.6",
|
"@vue/shared": "3.3.7",
|
||||||
"csstype": "^3.1.2"
|
"csstype": "^3.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -4641,21 +4650,21 @@
|
||||||
"integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
|
"integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
|
||||||
},
|
},
|
||||||
"node_modules/@vue/server-renderer": {
|
"node_modules/@vue/server-renderer": {
|
||||||
"version": "3.3.6",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.7.tgz",
|
||||||
"integrity": "sha512-kgLoN43W4ERdZ6dpyy+gnk2ZHtcOaIr5Uc/WUP5DRwutgvluzu2pudsZGoD2b7AEJHByUVMa9k6Sho5lLRCykw==",
|
"integrity": "sha512-UlpKDInd1hIZiNuVVVvLgxpfnSouxKQOSE2bOfQpBuGwxRV/JqqTCyyjXUWiwtVMyeRaZhOYYqntxElk8FhBhw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/compiler-ssr": "3.3.6",
|
"@vue/compiler-ssr": "3.3.7",
|
||||||
"@vue/shared": "3.3.6"
|
"@vue/shared": "3.3.7"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"vue": "3.3.6"
|
"vue": "3.3.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/shared": {
|
"node_modules/@vue/shared": {
|
||||||
"version": "3.3.6",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.7.tgz",
|
||||||
"integrity": "sha512-Xno5pEqg8SVhomD0kTSmfh30ZEmV/+jZtyh39q6QflrjdJCXah5lrnOLi9KB6a5k5aAHXMXjoMnxlzUkCNfWLQ=="
|
"integrity": "sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg=="
|
||||||
},
|
},
|
||||||
"node_modules/@vue/tsconfig": {
|
"node_modules/@vue/tsconfig": {
|
||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
|
@ -4914,9 +4923,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/acorn": {
|
"node_modules/acorn": {
|
||||||
"version": "8.10.0",
|
"version": "8.11.2",
|
||||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
|
||||||
"integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
|
"integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
|
||||||
"bin": {
|
"bin": {
|
||||||
"acorn": "bin/acorn"
|
"acorn": "bin/acorn"
|
||||||
},
|
},
|
||||||
|
@ -4997,9 +5006,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/acorn-walk": {
|
"node_modules/acorn-walk": {
|
||||||
"version": "8.2.0",
|
"version": "8.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz",
|
||||||
"integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
|
"integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.4.0"
|
"node": ">=0.4.0"
|
||||||
}
|
}
|
||||||
|
@ -5816,13 +5825,13 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/babel-plugin-polyfill-corejs3": {
|
"node_modules/babel-plugin-polyfill-corejs3": {
|
||||||
"version": "0.8.5",
|
"version": "0.8.6",
|
||||||
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.5.tgz",
|
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz",
|
||||||
"integrity": "sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==",
|
"integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/helper-define-polyfill-provider": "^0.4.3",
|
"@babel/helper-define-polyfill-provider": "^0.4.3",
|
||||||
"core-js-compat": "^3.32.2"
|
"core-js-compat": "^3.33.1"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
|
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
|
||||||
|
@ -6290,9 +6299,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001553",
|
"version": "1.0.30001559",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001553.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz",
|
||||||
"integrity": "sha512-N0ttd6TrFfuqKNi+pMgWJTb9qrdJu4JSpgPFLe/lrD19ugC6fZgF0pUewRowDwzdDnb9V41mFcdlYgl/PyKf4A==",
|
"integrity": "sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -6523,75 +6532,17 @@
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/class-utils/node_modules/is-accessor-descriptor": {
|
|
||||||
"version": "0.1.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
|
|
||||||
"integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"kind-of": "^3.0.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": {
|
|
||||||
"version": "3.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
|
||||||
"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"is-buffer": "^1.1.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/class-utils/node_modules/is-data-descriptor": {
|
|
||||||
"version": "0.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
|
||||||
"integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"kind-of": "^3.0.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": {
|
|
||||||
"version": "3.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
|
||||||
"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"is-buffer": "^1.1.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/class-utils/node_modules/is-descriptor": {
|
"node_modules/class-utils/node_modules/is-descriptor": {
|
||||||
"version": "0.1.6",
|
"version": "0.1.7",
|
||||||
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
|
||||||
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
|
"integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"is-accessor-descriptor": "^0.1.6",
|
"is-accessor-descriptor": "^1.0.1",
|
||||||
"is-data-descriptor": "^0.1.4",
|
"is-data-descriptor": "^1.0.1"
|
||||||
"kind-of": "^5.0.0"
|
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">= 0.4"
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/class-utils/node_modules/kind-of": {
|
|
||||||
"version": "5.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
|
|
||||||
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
|
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/clean-stack": {
|
"node_modules/clean-stack": {
|
||||||
|
@ -6958,9 +6909,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/core-js-compat": {
|
"node_modules/core-js-compat": {
|
||||||
"version": "3.33.1",
|
"version": "3.33.2",
|
||||||
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.1.tgz",
|
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.2.tgz",
|
||||||
"integrity": "sha512-6pYKNOgD/j/bkC5xS5IIg6bncid3rfrI42oBH1SQJbsmYPKF7rhzcFzYCcxYMmNQQ0rCEB8WqpW7QHndOggaeQ==",
|
"integrity": "sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"browserslist": "^4.22.1"
|
"browserslist": "^4.22.1"
|
||||||
|
@ -8152,9 +8103,9 @@
|
||||||
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
|
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
|
||||||
},
|
},
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.4.563",
|
"version": "1.4.571",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.563.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.571.tgz",
|
||||||
"integrity": "sha512-dg5gj5qOgfZNkPNeyKBZQAQitIQ/xwfIDmEQJHCbXaD9ebTZxwJXUsDYcBlAvZGZLi+/354l35J1wkmP6CqYaw==",
|
"integrity": "sha512-Sc+VtKwKCDj3f/kLBjdyjMpNzoZsU6WuL/wFb6EH8USmHEcebxRXcRrVpOpayxd52tuey4RUDpUsw5OS5LhJqg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/emittery": {
|
"node_modules/emittery": {
|
||||||
|
@ -8751,66 +8702,17 @@
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/expand-brackets/node_modules/is-accessor-descriptor": {
|
|
||||||
"version": "0.1.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
|
|
||||||
"integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"kind-of": "^3.0.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": {
|
|
||||||
"version": "3.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
|
||||||
"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"is-buffer": "^1.1.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/expand-brackets/node_modules/is-data-descriptor": {
|
|
||||||
"version": "0.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
|
||||||
"integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"kind-of": "^3.0.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": {
|
|
||||||
"version": "3.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
|
||||||
"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"is-buffer": "^1.1.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/expand-brackets/node_modules/is-descriptor": {
|
"node_modules/expand-brackets/node_modules/is-descriptor": {
|
||||||
"version": "0.1.6",
|
"version": "0.1.7",
|
||||||
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
|
||||||
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
|
"integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"is-accessor-descriptor": "^0.1.6",
|
"is-accessor-descriptor": "^1.0.1",
|
||||||
"is-data-descriptor": "^0.1.4",
|
"is-data-descriptor": "^1.0.1"
|
||||||
"kind-of": "^5.0.0"
|
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">= 0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/expand-brackets/node_modules/is-extendable": {
|
"node_modules/expand-brackets/node_modules/is-extendable": {
|
||||||
|
@ -8822,15 +8724,6 @@
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/expand-brackets/node_modules/kind-of": {
|
|
||||||
"version": "5.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
|
|
||||||
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
|
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/expand-brackets/node_modules/ms": {
|
"node_modules/expand-brackets/node_modules/ms": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
|
@ -10428,15 +10321,15 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/is-accessor-descriptor": {
|
"node_modules/is-accessor-descriptor": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz",
|
||||||
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
|
"integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"kind-of": "^6.0.0"
|
"hasown": "^2.0.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">= 0.10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/is-arrayish": {
|
"node_modules/is-arrayish": {
|
||||||
|
@ -10474,29 +10367,28 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/is-data-descriptor": {
|
"node_modules/is-data-descriptor": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz",
|
||||||
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
|
"integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"kind-of": "^6.0.0"
|
"hasown": "^2.0.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">= 0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/is-descriptor": {
|
"node_modules/is-descriptor": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
|
||||||
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
|
"integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"is-accessor-descriptor": "^1.0.0",
|
"is-accessor-descriptor": "^1.0.1",
|
||||||
"is-data-descriptor": "^1.0.0",
|
"is-data-descriptor": "^1.0.1"
|
||||||
"kind-of": "^6.0.2"
|
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">= 0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/is-docker": {
|
"node_modules/is-docker": {
|
||||||
|
@ -11150,9 +11042,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/jiti": {
|
"node_modules/jiti": {
|
||||||
"version": "1.20.0",
|
"version": "1.21.0",
|
||||||
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz",
|
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
|
||||||
"integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==",
|
"integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"jiti": "bin/jiti.js"
|
"jiti": "bin/jiti.js"
|
||||||
|
@ -12423,51 +12315,17 @@
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/object-copy/node_modules/is-accessor-descriptor": {
|
|
||||||
"version": "0.1.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
|
|
||||||
"integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"kind-of": "^3.0.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/object-copy/node_modules/is-data-descriptor": {
|
|
||||||
"version": "0.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
|
||||||
"integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"kind-of": "^3.0.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/object-copy/node_modules/is-descriptor": {
|
"node_modules/object-copy/node_modules/is-descriptor": {
|
||||||
"version": "0.1.6",
|
"version": "0.1.7",
|
||||||
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
|
||||||
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
|
"integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"is-accessor-descriptor": "^0.1.6",
|
"is-accessor-descriptor": "^1.0.1",
|
||||||
"is-data-descriptor": "^0.1.4",
|
"is-data-descriptor": "^1.0.1"
|
||||||
"kind-of": "^5.0.0"
|
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">= 0.4"
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": {
|
|
||||||
"version": "5.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
|
|
||||||
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
|
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/object-copy/node_modules/kind-of": {
|
"node_modules/object-copy/node_modules/kind-of": {
|
||||||
|
@ -14206,9 +14064,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/punycode": {
|
"node_modules/punycode": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
|
||||||
"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
|
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
|
@ -14798,9 +14656,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/saxon-js/node_modules/axios": {
|
"node_modules/saxon-js/node_modules/axios": {
|
||||||
"version": "1.5.1",
|
"version": "1.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz",
|
||||||
"integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==",
|
"integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"follow-redirects": "^1.15.0",
|
"follow-redirects": "^1.15.0",
|
||||||
"form-data": "^4.0.0",
|
"form-data": "^4.0.0",
|
||||||
|
@ -14878,11 +14736,12 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/selfsigned": {
|
"node_modules/selfsigned": {
|
||||||
"version": "2.1.1",
|
"version": "2.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz",
|
||||||
"integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==",
|
"integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@types/node-forge": "^1.3.0",
|
||||||
"node-forge": "^1"
|
"node-forge": "^1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
@ -15383,66 +15242,17 @@
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/snapdragon/node_modules/is-accessor-descriptor": {
|
|
||||||
"version": "0.1.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
|
|
||||||
"integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"kind-of": "^3.0.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": {
|
|
||||||
"version": "3.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
|
||||||
"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"is-buffer": "^1.1.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/snapdragon/node_modules/is-data-descriptor": {
|
|
||||||
"version": "0.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
|
||||||
"integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"kind-of": "^3.0.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": {
|
|
||||||
"version": "3.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
|
||||||
"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"is-buffer": "^1.1.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/snapdragon/node_modules/is-descriptor": {
|
"node_modules/snapdragon/node_modules/is-descriptor": {
|
||||||
"version": "0.1.6",
|
"version": "0.1.7",
|
||||||
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
|
||||||
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
|
"integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"is-accessor-descriptor": "^0.1.6",
|
"is-accessor-descriptor": "^1.0.1",
|
||||||
"is-data-descriptor": "^0.1.4",
|
"is-data-descriptor": "^1.0.1"
|
||||||
"kind-of": "^5.0.0"
|
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">= 0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/snapdragon/node_modules/is-extendable": {
|
"node_modules/snapdragon/node_modules/is-extendable": {
|
||||||
|
@ -15454,15 +15264,6 @@
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/snapdragon/node_modules/kind-of": {
|
|
||||||
"version": "5.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
|
|
||||||
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
|
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/snapdragon/node_modules/ms": {
|
"node_modules/snapdragon/node_modules/ms": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
|
@ -15670,75 +15471,17 @@
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/static-extend/node_modules/is-accessor-descriptor": {
|
|
||||||
"version": "0.1.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
|
|
||||||
"integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"kind-of": "^3.0.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": {
|
|
||||||
"version": "3.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
|
||||||
"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"is-buffer": "^1.1.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/static-extend/node_modules/is-data-descriptor": {
|
|
||||||
"version": "0.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
|
||||||
"integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"kind-of": "^3.0.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": {
|
|
||||||
"version": "3.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
|
||||||
"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"is-buffer": "^1.1.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/static-extend/node_modules/is-descriptor": {
|
"node_modules/static-extend/node_modules/is-descriptor": {
|
||||||
"version": "0.1.6",
|
"version": "0.1.7",
|
||||||
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
|
||||||
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
|
"integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"is-accessor-descriptor": "^0.1.6",
|
"is-accessor-descriptor": "^1.0.1",
|
||||||
"is-data-descriptor": "^0.1.4",
|
"is-data-descriptor": "^1.0.1"
|
||||||
"kind-of": "^5.0.0"
|
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">= 0.4"
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/static-extend/node_modules/kind-of": {
|
|
||||||
"version": "5.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
|
|
||||||
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
|
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/statuses": {
|
"node_modules/statuses": {
|
||||||
|
@ -16204,9 +15947,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/tailwindcss": {
|
"node_modules/tailwindcss": {
|
||||||
"version": "3.3.3",
|
"version": "3.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz",
|
||||||
"integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==",
|
"integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@alloc/quick-lru": "^5.2.0",
|
"@alloc/quick-lru": "^5.2.0",
|
||||||
|
@ -16214,10 +15957,10 @@
|
||||||
"chokidar": "^3.5.3",
|
"chokidar": "^3.5.3",
|
||||||
"didyoumean": "^1.2.2",
|
"didyoumean": "^1.2.2",
|
||||||
"dlv": "^1.1.3",
|
"dlv": "^1.1.3",
|
||||||
"fast-glob": "^3.2.12",
|
"fast-glob": "^3.3.0",
|
||||||
"glob-parent": "^6.0.2",
|
"glob-parent": "^6.0.2",
|
||||||
"is-glob": "^4.0.3",
|
"is-glob": "^4.0.3",
|
||||||
"jiti": "^1.18.2",
|
"jiti": "^1.19.1",
|
||||||
"lilconfig": "^2.1.0",
|
"lilconfig": "^2.1.0",
|
||||||
"micromatch": "^4.0.5",
|
"micromatch": "^4.0.5",
|
||||||
"normalize-path": "^3.0.0",
|
"normalize-path": "^3.0.0",
|
||||||
|
@ -16269,9 +16012,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/terser": {
|
"node_modules/terser": {
|
||||||
"version": "5.22.0",
|
"version": "5.23.0",
|
||||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.22.0.tgz",
|
"resolved": "https://registry.npmjs.org/terser/-/terser-5.23.0.tgz",
|
||||||
"integrity": "sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw==",
|
"integrity": "sha512-Iyy83LN0uX9ZZLCX4Qbu5JiHiWjOCTwrmM9InWOzVeM++KNWEsqV4YgN9U9E8AlohQ6Gs42ztczlWOG/lwDAMA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jridgewell/source-map": "^0.3.3",
|
"@jridgewell/source-map": "^0.3.3",
|
||||||
|
@ -16767,9 +16510,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/undici-types": {
|
"node_modules/undici-types": {
|
||||||
"version": "5.25.3",
|
"version": "5.26.5",
|
||||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
|
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
|
||||||
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA=="
|
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
|
||||||
},
|
},
|
||||||
"node_modules/unicode-canonical-property-names-ecmascript": {
|
"node_modules/unicode-canonical-property-names-ecmascript": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
|
@ -17064,15 +16807,15 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vue": {
|
"node_modules/vue": {
|
||||||
"version": "3.3.6",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/vue/-/vue-3.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/vue/-/vue-3.3.7.tgz",
|
||||||
"integrity": "sha512-jJIDETeWJnoY+gfn4ZtMPMS5KtbP4ax+CT4dcQFhTnWEk8xMupFyQ0JxL28nvT/M4+p4a0ptxaV2WY0LiIxvRg==",
|
"integrity": "sha512-YEMDia1ZTv1TeBbnu6VybatmSteGOS3A3YgfINOfraCbf85wdKHzscD6HSS/vB4GAtI7sa1XPX7HcQaJ1l24zA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/compiler-dom": "3.3.6",
|
"@vue/compiler-dom": "3.3.7",
|
||||||
"@vue/compiler-sfc": "3.3.6",
|
"@vue/compiler-sfc": "3.3.7",
|
||||||
"@vue/runtime-dom": "3.3.6",
|
"@vue/runtime-dom": "3.3.7",
|
||||||
"@vue/server-renderer": "3.3.6",
|
"@vue/server-renderer": "3.3.7",
|
||||||
"@vue/shared": "3.3.6"
|
"@vue/shared": "3.3.7"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"typescript": "*"
|
"typescript": "*"
|
||||||
|
@ -17093,9 +16836,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vue-loader": {
|
"node_modules/vue-loader": {
|
||||||
"version": "17.3.0",
|
"version": "17.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.3.1.tgz",
|
||||||
"integrity": "sha512-VUURABiN0TIUz0yvJJ/V/rZjGUh10JZtD+IDI5bXFslzFi9mV6ebKkPzoqiSi8e0vh8Ip7JHJx+I0AzAG0KsCA==",
|
"integrity": "sha512-nmVu7KU8geOyzsStyyaxID/uBGDMS8BkPXb6Lu2SNkMawriIbb+hYrNtgftHMKxOSkjjjTF5OSSwPo3KP59egg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chalk": "^4.1.0",
|
"chalk": "^4.1.0",
|
||||||
|
@ -17686,9 +17429,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/xslt3/node_modules/axios": {
|
"node_modules/xslt3/node_modules/axios": {
|
||||||
"version": "1.5.1",
|
"version": "1.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz",
|
||||||
"integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==",
|
"integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"follow-redirects": "^1.15.0",
|
"follow-redirects": "^1.15.0",
|
||||||
|
|
|
@ -117,7 +117,6 @@
|
||||||
"publisher_place": {
|
"publisher_place": {
|
||||||
"type": "text"
|
"type": "text"
|
||||||
},
|
},
|
||||||
|
|
||||||
"geo_location": {
|
"geo_location": {
|
||||||
"type": "geo_shape",
|
"type": "geo_shape",
|
||||||
"tree": "quadtree",
|
"tree": "quadtree",
|
||||||
|
@ -136,8 +135,6 @@
|
||||||
"type": "float"
|
"type": "float"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
"status": {
|
"status": {
|
||||||
"type": "keyword"
|
"type": "keyword"
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
Welcome to the Tethys Research Repository Backend System! This is the backend component responsible for managing datasets, users, and the core functionality of the Tethys Data Research Repository.
|
Welcome to the Tethys Research Repository Backend System! This is the backend component responsible for managing datasets, users, and the core functionality of the Tethys Data Research Repository.
|
||||||
|
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
|
||||||
- [Getting Started](#getting-started)
|
- [Getting Started](#getting-started)
|
||||||
- [Prerequisites](#prerequisites)
|
- [Prerequisites](#prerequisites)
|
||||||
- [Installation](#installation)
|
- [Installation](#installation)
|
||||||
|
@ -29,3 +30,4 @@ Before you begin, ensure you have met the following requirements:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://gitea.geologie.ac.at/geolba/tethys.backend.git
|
git clone https://gitea.geologie.ac.at/geolba/tethys.backend.git
|
||||||
|
```
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { Link } from "@inertiajs/vue3"
|
import { Link } from '@inertiajs/vue3';
|
||||||
import BaseButton from "@/Components/BaseButton.vue"
|
import BaseButton from '@/Components/BaseButton.vue';
|
||||||
import BaseButtons from "@/Components/BaseButtons.vue"
|
import BaseButtons from '@/Components/BaseButtons.vue';
|
||||||
import {
|
import { mdiSquareEditOutline, mdiTrashCan } from '@mdi/js';
|
||||||
mdiSquareEditOutline,
|
|
||||||
mdiTrashCan,
|
|
||||||
} from "@mdi/js"
|
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
item: {
|
item: {
|
||||||
|
@ -22,9 +19,9 @@ const props = defineProps({
|
||||||
},
|
},
|
||||||
level: {
|
level: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 0
|
default: 0,
|
||||||
},
|
},
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -40,8 +37,13 @@ const props = defineProps({
|
||||||
</td>
|
</td>
|
||||||
<td v-if="can.edit || can.delete" class="before:hidden lg:w-1 whitespace-nowrap">
|
<td v-if="can.edit || can.delete" class="before:hidden lg:w-1 whitespace-nowrap">
|
||||||
<BaseButtons type="justify-start lg:justify-end" no-wrap>
|
<BaseButtons type="justify-start lg:justify-end" no-wrap>
|
||||||
<BaseButton v-if="can.edit" :route-name="route('menu.item.edit', { menu: menu.id, item: item.id })"
|
<BaseButton
|
||||||
color="info" :icon="mdiSquareEditOutline" small />
|
v-if="can.edit"
|
||||||
|
:route-name="route('menu.item.edit', { menu: menu.id, item: item.id })"
|
||||||
|
color="info"
|
||||||
|
:icon="mdiSquareEditOutline"
|
||||||
|
small
|
||||||
|
/>
|
||||||
<BaseButton v-if="can.delete" color="danger" :icon="mdiTrashCan" small @click="destroy(item.id)" />
|
<BaseButton v-if="can.delete" color="danger" :icon="mdiTrashCan" small @click="destroy(item.id)" />
|
||||||
</BaseButtons>
|
</BaseButtons>
|
||||||
</td>
|
</td>
|
||||||
|
|
|
@ -59,24 +59,33 @@ total:
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<!-- <nav v-if="data.links.length > 3" -->
|
<!-- <nav v-if="data.links.length > 3" -->
|
||||||
<nav v-if="data.total > 3" role="navigation" aria-label="Pagination Navigation"
|
<nav v-if="data.total > 3" role="navigation" aria-label="Pagination Navigation" class="flex items-center justify-between">
|
||||||
class="flex items-center justify-between">
|
|
||||||
<div class="flex justify-between flex-1 sm:hidden">
|
<div class="flex justify-between flex-1 sm:hidden">
|
||||||
<span v-if="data.current_page <= 1"
|
<span
|
||||||
class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 rounded-md">
|
v-if="data.current_page <= 1"
|
||||||
|
class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 rounded-md"
|
||||||
|
>
|
||||||
Previous
|
Previous
|
||||||
</span>
|
</span>
|
||||||
<Link v-else :href="data.previous_page_url"
|
<Link
|
||||||
class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150">
|
v-else
|
||||||
|
:href="data.previous_page_url"
|
||||||
|
class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150"
|
||||||
|
>
|
||||||
Previous
|
Previous
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
<Link v-if="data.current_page < data.last_page" :href="data.next_page_url"
|
<Link
|
||||||
class="relative inline-flex items-center px-4 py-2 ml-3 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150">
|
v-if="data.current_page < data.last_page"
|
||||||
|
:href="data.next_page_url"
|
||||||
|
class="relative inline-flex items-center px-4 py-2 ml-3 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150"
|
||||||
|
>
|
||||||
Next
|
Next
|
||||||
</Link>
|
</Link>
|
||||||
<span v-else
|
<span
|
||||||
class="relative inline-flex items-center px-4 py-2 ml-3 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 rounded-md">
|
v-else
|
||||||
|
class="relative inline-flex items-center px-4 py-2 ml-3 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 rounded-md"
|
||||||
|
>
|
||||||
Next
|
Next
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -99,23 +108,32 @@ total:
|
||||||
<span v-if="props.data.current_page <= 1" aria-disabled="true" aria-label="Previous">
|
<span v-if="props.data.current_page <= 1" aria-disabled="true" aria-label="Previous">
|
||||||
<span
|
<span
|
||||||
class="relative inline-flex items-center px-2 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default rounded-l-md leading-5"
|
class="relative inline-flex items-center px-2 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default rounded-l-md leading-5"
|
||||||
aria-hidden="true">
|
aria-hidden="true"
|
||||||
|
>
|
||||||
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
||||||
<path fill-rule="evenodd"
|
<path
|
||||||
|
fill-rule="evenodd"
|
||||||
d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z"
|
d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z"
|
||||||
clip-rule="evenodd" />
|
clip-rule="evenodd"
|
||||||
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<!-- <Link v-else :href="data.previous_page_url" rel="prev" -->
|
<!-- <Link v-else :href="data.previous_page_url" rel="prev" -->
|
||||||
<Link v-else :href="prevPageLink" rel="prev"
|
<Link
|
||||||
|
v-else
|
||||||
|
:href="prevPageLink"
|
||||||
|
rel="prev"
|
||||||
class="relative inline-flex items-center px-2 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-l-md leading-5 hover:text-gray-400 focus:z-10 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-500 transition ease-in-out duration-150"
|
class="relative inline-flex items-center px-2 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-l-md leading-5 hover:text-gray-400 focus:z-10 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-500 transition ease-in-out duration-150"
|
||||||
aria-label="Previous">
|
aria-label="Previous"
|
||||||
|
>
|
||||||
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
||||||
<path fill-rule="evenodd"
|
<path
|
||||||
|
fill-rule="evenodd"
|
||||||
d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z"
|
d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z"
|
||||||
clip-rule="evenodd" />
|
clip-rule="evenodd"
|
||||||
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
|
@ -133,24 +151,33 @@ total:
|
||||||
</template>
|
</template>
|
||||||
</template> -->
|
</template> -->
|
||||||
|
|
||||||
<Link v-if="props.data.current_page < props.data.last_page" :href="nextPageLink" rel="next"
|
<Link
|
||||||
|
v-if="props.data.current_page < props.data.last_page"
|
||||||
|
:href="nextPageLink"
|
||||||
|
rel="next"
|
||||||
class="relative inline-flex items-center px-2 py-2 -ml-px text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-r-md leading-5 hover:text-gray-400 focus:z-10 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-500 transition ease-in-out duration-150"
|
class="relative inline-flex items-center px-2 py-2 -ml-px text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-r-md leading-5 hover:text-gray-400 focus:z-10 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-500 transition ease-in-out duration-150"
|
||||||
aria-label="Next">
|
aria-label="Next"
|
||||||
|
>
|
||||||
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
||||||
<path fill-rule="evenodd"
|
<path
|
||||||
|
fill-rule="evenodd"
|
||||||
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
|
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
|
||||||
clip-rule="evenodd" />
|
clip-rule="evenodd"
|
||||||
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</Link>
|
</Link>
|
||||||
<!-- else disabled link -->
|
<!-- else disabled link -->
|
||||||
<span v-else aria-disabled="true" aria-label="Next">
|
<span v-else aria-disabled="true" aria-label="Next">
|
||||||
<span
|
<span
|
||||||
class="relative inline-flex items-center px-2 py-2 -ml-px text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default rounded-r-md leading-5"
|
class="relative inline-flex items-center px-2 py-2 -ml-px text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default rounded-r-md leading-5"
|
||||||
aria-hidden="true">
|
aria-hidden="true"
|
||||||
|
>
|
||||||
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
||||||
<path fill-rule="evenodd"
|
<path
|
||||||
|
fill-rule="evenodd"
|
||||||
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
|
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
|
||||||
clip-rule="evenodd" />
|
clip-rule="evenodd"
|
||||||
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -51,24 +51,10 @@ const sortLink = computed(() => {
|
||||||
{{ label }}
|
{{ label }}
|
||||||
</Link>
|
</Link>
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
<svg
|
<svg class="inline-block" xmlns="http://www.w3.org/2000/svg" width="15px" height="15px" viewBox="0 0 15 15" fill="none">
|
||||||
class="inline-block"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="15px"
|
|
||||||
height="15px"
|
|
||||||
viewBox="0 0 15 15"
|
|
||||||
fill="none"
|
|
||||||
>
|
|
||||||
<path d="M7.5 3L15 11H0L7.5 3Z" :fill="upFill" />
|
<path d="M7.5 3L15 11H0L7.5 3Z" :fill="upFill" />
|
||||||
</svg>
|
</svg>
|
||||||
<svg
|
<svg class="inline-block" xmlns="http://www.w3.org/2000/svg" width="15px" height="15px" viewBox="0 0 15 15" fill="none">
|
||||||
class="inline-block"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="15px"
|
|
||||||
height="15px"
|
|
||||||
viewBox="0 0 15 15"
|
|
||||||
fill="none"
|
|
||||||
>
|
|
||||||
<path d="M7.49988 12L-0.00012207 4L14.9999 4L7.49988 12Z" :fill="downFill" />
|
<path d="M7.49988 12L-0.00012207 4L14.9999 4L7.49988 12Z" :fill="downFill" />
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// import { usePage } from '@inertiajs/vue3'
|
// import { usePage } from '@inertiajs/vue3'
|
||||||
// import { usePage } from '@inertiajs/inertia-vue3';
|
// import { usePage } from '@inertiajs/inertia-vue3';
|
||||||
import { LayoutService } from '@/Stores/layout';
|
import { LayoutService } from '@/Stores/layout';
|
||||||
import menu from '@/menu'
|
import menu from '@/menu';
|
||||||
import AsideMenuLayer from '@/Components/AsideMenuLayer.vue';
|
import AsideMenuLayer from '@/Components/AsideMenuLayer.vue';
|
||||||
import OverlayLayer from '@/Components/OverlayLayer.vue';
|
import OverlayLayer from '@/Components/OverlayLayer.vue';
|
||||||
|
|
||||||
|
|
|
@ -49,46 +49,56 @@ const activeInactiveStyle = computed(() => {
|
||||||
if (props.item.route && stardust.isCurrent(props.item.route)) {
|
if (props.item.route && stardust.isCurrent(props.item.route)) {
|
||||||
// console.log(props.item.route);
|
// console.log(props.item.route);
|
||||||
return styleService.asideMenuItemActiveStyle;
|
return styleService.asideMenuItemActiveStyle;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const is = computed(() => {
|
const is = computed(() => {
|
||||||
if (props.item.href) {
|
if (props.item.href) {
|
||||||
return 'a'
|
return 'a';
|
||||||
}
|
}
|
||||||
if (props.item.route) {
|
if (props.item.route) {
|
||||||
return Link
|
return Link;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 'div'
|
return 'div';
|
||||||
})
|
});
|
||||||
|
|
||||||
// props.routeName && stardust.isCurrent(props.routeName) ? props.activeColor : null
|
// props.routeName && stardust.isCurrent(props.routeName) ? props.activeColor : null
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- :target="props.item.target ?? null" -->
|
<!-- :target="props.item.target ?? null" -->
|
||||||
<template>
|
<template>
|
||||||
<li>
|
<li>
|
||||||
<!-- <component :is="itemHref ? 'div' : Link" :href="itemHref ? itemHref : itemRoute" -->
|
<!-- <component :is="itemHref ? 'div' : Link" :href="itemHref ? itemHref : itemRoute" -->
|
||||||
<component :is="is" :href="itemRoute ? stardust.route(props.item.route) : props.item.href"
|
<component
|
||||||
class="flex cursor-pointer dark:text-slate-300 dark:hover:text-white" :class="componentClass"
|
:is="is"
|
||||||
@click="menuClick" v-bind:target="props.item.target ?? null">
|
:href="itemRoute ? stardust.route(props.item.route) : props.item.href"
|
||||||
<BaseIcon v-if="item.icon" :path="item.icon" class="flex-none" :class="activeInactiveStyle" w="w-16"
|
class="flex cursor-pointer dark:text-slate-300 dark:hover:text-white"
|
||||||
:size="18" />
|
:class="componentClass"
|
||||||
|
@click="menuClick"
|
||||||
|
v-bind:target="props.item.target ?? null"
|
||||||
|
>
|
||||||
|
<BaseIcon v-if="item.icon" :path="item.icon" class="flex-none" :class="activeInactiveStyle" w="w-16" :size="18" />
|
||||||
<span class="grow text-ellipsis line-clamp-1" :class="activeInactiveStyle">
|
<span class="grow text-ellipsis line-clamp-1" :class="activeInactiveStyle">
|
||||||
{{ item.label }}
|
{{ item.label }}
|
||||||
</span>
|
</span>
|
||||||
<!-- plus icon for expanding sub menu -->
|
<!-- plus icon for expanding sub menu -->
|
||||||
<BaseIcon v-if="hasDropdown" :path="isDropdownActive ? mdiMinus : mdiPlus" class="flex-none"
|
<BaseIcon
|
||||||
:class="activeInactiveStyle" w="w-12" @click.prevent="menuClick"/>
|
v-if="hasDropdown"
|
||||||
|
:path="isDropdownActive ? mdiMinus : mdiPlus"
|
||||||
|
class="flex-none"
|
||||||
|
:class="activeInactiveStyle"
|
||||||
|
w="w-12"
|
||||||
|
@click.prevent="menuClick"
|
||||||
|
/>
|
||||||
</component>
|
</component>
|
||||||
<AsideMenuList v-if="hasDropdown" :menu="item.children" :class="[
|
<AsideMenuList
|
||||||
styleService.asideMenuDropdownStyle,
|
v-if="hasDropdown"
|
||||||
isDropdownActive ? 'block dark:bg-slate-800/50' : 'hidden',
|
:menu="item.children"
|
||||||
]" is-dropdown-list />
|
:class="[styleService.asideMenuDropdownStyle, isDropdownActive ? 'block dark:bg-slate-800/50' : 'hidden']"
|
||||||
|
is-dropdown-list
|
||||||
|
/>
|
||||||
</li>
|
</li>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { router } from '@inertiajs/vue3'
|
import { router } from '@inertiajs/vue3';
|
||||||
// import { Inertia } from '@inertiajs/inertia';
|
// import { Inertia } from '@inertiajs/inertia';
|
||||||
import { stardust } from '@eidellev/adonis-stardust/client';
|
import { stardust } from '@eidellev/adonis-stardust/client';
|
||||||
import { mdiLogout, mdiClose } from '@mdi/js';
|
import { mdiLogout, mdiClose } from '@mdi/js';
|
||||||
|
@ -44,8 +44,7 @@ const menuClick = (event, item) => {
|
||||||
<template>
|
<template>
|
||||||
<aside id="aside" class="lg:py-2 lg:pl-2 w-60 fixed flex z-40 top-0 h-screen transition-position overflow-hidden">
|
<aside id="aside" class="lg:py-2 lg:pl-2 w-60 fixed flex z-40 top-0 h-screen transition-position overflow-hidden">
|
||||||
<div :class="styleStore.asideStyle" class="lg:rounded-xl flex-1 flex flex-col overflow-hidden dark:bg-slate-900">
|
<div :class="styleStore.asideStyle" class="lg:rounded-xl flex-1 flex flex-col overflow-hidden dark:bg-slate-900">
|
||||||
<div :class="styleStore.asideBrandStyle"
|
<div :class="styleStore.asideBrandStyle" class="flex flex-row h-14 items-center justify-between dark:bg-slate-900">
|
||||||
class="flex flex-row h-14 items-center justify-between dark:bg-slate-900">
|
|
||||||
<div class="text-center flex-1 lg:text-left lg:pl-6 xl:text-center xl:pl-0">
|
<div class="text-center flex-1 lg:text-left lg:pl-6 xl:text-center xl:pl-0">
|
||||||
<b class="font-black">Menu</b>
|
<b class="font-black">Menu</b>
|
||||||
</div>
|
</div>
|
||||||
|
@ -53,8 +52,10 @@ const menuClick = (event, item) => {
|
||||||
<BaseIcon :path="mdiClose" />
|
<BaseIcon :path="mdiClose" />
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div :class="styleStore.darkMode ? 'aside-scrollbars-[slate]' : styleStore.asideScrollbarsStyle"
|
<div
|
||||||
class="flex-1 overflow-y-auto overflow-x-hidden">
|
:class="styleStore.darkMode ? 'aside-scrollbars-[slate]' : styleStore.asideScrollbarsStyle"
|
||||||
|
class="flex-1 overflow-y-auto overflow-x-hidden"
|
||||||
|
>
|
||||||
<AsideMenuList v-bind:menu="menu" @menu-click="menuClick" />
|
<AsideMenuList v-bind:menu="menu" @menu-click="menuClick" />
|
||||||
</div>
|
</div>
|
||||||
<!-- <p class="menu-label">About</p>> -->
|
<!-- <p class="menu-label">About</p>> -->
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<script>
|
<script>
|
||||||
import { h, defineComponent } from 'vue'
|
import { h, defineComponent } from 'vue';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'BaseButtons',
|
name: 'BaseButtons',
|
||||||
|
@ -7,49 +7,45 @@ export default defineComponent({
|
||||||
noWrap: Boolean,
|
noWrap: Boolean,
|
||||||
type: {
|
type: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'justify-start'
|
default: 'justify-start',
|
||||||
},
|
},
|
||||||
classAddon: {
|
classAddon: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'mr-3 last:mr-0 mb-3'
|
default: 'mr-3 last:mr-0 mb-3',
|
||||||
},
|
},
|
||||||
mb: {
|
mb: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '-mb-3'
|
default: '-mb-3',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
render() {
|
render() {
|
||||||
const hasSlot = this.$slots && this.$slots.default
|
const hasSlot = this.$slots && this.$slots.default;
|
||||||
|
|
||||||
const parentClass = [
|
const parentClass = ['flex', 'items-center', this.type, this.noWrap ? 'flex-nowrap' : 'flex-wrap'];
|
||||||
'flex',
|
|
||||||
'items-center',
|
|
||||||
this.type,
|
|
||||||
this.noWrap ? 'flex-nowrap' : 'flex-wrap'
|
|
||||||
]
|
|
||||||
|
|
||||||
if (this.mb) {
|
if (this.mb) {
|
||||||
parentClass.push(this.mb)
|
parentClass.push(this.mb);
|
||||||
}
|
}
|
||||||
|
|
||||||
return h(
|
return h(
|
||||||
'div',
|
'div',
|
||||||
{ class: parentClass },
|
{ class: parentClass },
|
||||||
hasSlot
|
hasSlot
|
||||||
? this.$slots.default().map(element => {
|
? this.$slots.default().map((element) => {
|
||||||
if (element && element.children && typeof element.children === 'object') {
|
if (element && element.children && typeof element.children === 'object') {
|
||||||
return h(
|
return h(
|
||||||
element,
|
element,
|
||||||
{},
|
{},
|
||||||
element.children.map(child => {
|
element.children.map((child) => {
|
||||||
return h(child, { class: [this.classAddon] })
|
return h(child, { class: [this.classAddon] });
|
||||||
}))
|
}),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return h(element, { class: [this.classAddon] })
|
return h(element, { class: [this.classAddon] });
|
||||||
})
|
|
||||||
: null
|
|
||||||
)
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
: null,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
navBar: Boolean
|
navBar: Boolean,
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<hr
|
<hr
|
||||||
:class="props.navBar ? 'hidden lg:block lg:my-0.5 dark:border-slate-700' : 'my-6 -mx-6 dark:border-slate-800'"
|
:class="props.navBar ? 'hidden lg:block lg:my-0.5 dark:border-slate-700' : 'my-6 -mx-6 dark:border-slate-800'"
|
||||||
class="border-t border-gray-100"
|
class="border-t border-gray-100"
|
||||||
>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -4,37 +4,29 @@ import { computed } from 'vue';
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
path: {
|
path: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
w: {
|
w: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'w-6'
|
default: 'w-6',
|
||||||
},
|
},
|
||||||
h: {
|
h: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'h-6'
|
default: 'h-6',
|
||||||
},
|
},
|
||||||
size: {
|
size: {
|
||||||
type: [String, Number],
|
type: [String, Number],
|
||||||
default: 16
|
default: 16,
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
|
|
||||||
const spanClass = computed(() => `inline-flex justify-center items-center ${props.w} ${props.h}`)
|
const spanClass = computed(() => `inline-flex justify-center items-center ${props.w} ${props.h}`);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<span :class="spanClass">
|
<span :class="spanClass">
|
||||||
<svg
|
<svg viewBox="0 0 24 24" :width="size" :height="size" class="inline-block">
|
||||||
viewBox="0 0 24 24"
|
<path fill="currentColor" :d="path" />
|
||||||
:width="size"
|
|
||||||
:height="size"
|
|
||||||
class="inline-block"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
fill="currentColor"
|
|
||||||
:d="path"
|
|
||||||
/>
|
|
||||||
</svg>
|
</svg>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,61 +1,60 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue';
|
||||||
import { mdiTrendingDown, mdiTrendingUp, mdiTrendingNeutral } from '@mdi/js'
|
import { mdiTrendingDown, mdiTrendingUp, mdiTrendingNeutral } from '@mdi/js';
|
||||||
import CardBox from '@/Components/CardBox.vue'
|
import CardBox from '@/Components/CardBox.vue';
|
||||||
import BaseLevel from '@/Components/BaseLevel.vue'
|
import BaseLevel from '@/Components/BaseLevel.vue';
|
||||||
import PillTag from '@/Components/PillTag.vue'
|
import PillTag from '@/Components/PillTag.vue';
|
||||||
import UserAvatar from '@/Components/UserAvatar.vue'
|
import UserAvatar from '@/Components/UserAvatar.vue';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
name: {
|
name: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
login: {
|
login: {
|
||||||
type: String,
|
type: String,
|
||||||
required: false
|
required: false,
|
||||||
},
|
},
|
||||||
email: {
|
email: {
|
||||||
type: String,
|
type: String,
|
||||||
required: false
|
required: false,
|
||||||
},
|
},
|
||||||
date: {
|
date: {
|
||||||
type: String,
|
type: String,
|
||||||
required: false
|
required: false,
|
||||||
},
|
},
|
||||||
progress: {
|
progress: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 0
|
default: 0,
|
||||||
},
|
},
|
||||||
text: {
|
text: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
type: {
|
type: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
|
|
||||||
|
|
||||||
const pillType = computed(() => {
|
const pillType = computed(() => {
|
||||||
if (props.type) {
|
if (props.type) {
|
||||||
return props.type
|
return props.type;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (props.progress) {
|
if (props.progress) {
|
||||||
if (props.progress >= 60) {
|
if (props.progress >= 60) {
|
||||||
return 'success'
|
return 'success';
|
||||||
}
|
}
|
||||||
if (props.progress >= 40) {
|
if (props.progress >= 40) {
|
||||||
return 'warning'
|
return 'warning';
|
||||||
}
|
}
|
||||||
|
|
||||||
return 'danger'
|
return 'danger';
|
||||||
}
|
}
|
||||||
|
|
||||||
return 'info'
|
return 'info';
|
||||||
})
|
});
|
||||||
|
|
||||||
const pillIcon = computed(() => {
|
const pillIcon = computed(() => {
|
||||||
return {
|
return {
|
||||||
|
@ -63,23 +62,17 @@ const pillIcon = computed(() => {
|
||||||
warning: mdiTrendingNeutral,
|
warning: mdiTrendingNeutral,
|
||||||
danger: mdiTrendingDown,
|
danger: mdiTrendingDown,
|
||||||
info: mdiTrendingNeutral,
|
info: mdiTrendingNeutral,
|
||||||
}[pillType.value]
|
}[pillType.value];
|
||||||
})
|
});
|
||||||
|
|
||||||
const pillText = computed(() => props.text ?? `${props.progress}%`)
|
const pillText = computed(() => props.text ?? `${props.progress}%`);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<CardBox
|
<CardBox class="mb-6 last:mb-0" hoverable>
|
||||||
class="mb-6 last:mb-0"
|
|
||||||
hoverable
|
|
||||||
>
|
|
||||||
<BaseLevel>
|
<BaseLevel>
|
||||||
<BaseLevel type="justify-start">
|
<BaseLevel type="justify-start">
|
||||||
<UserAvatar
|
<UserAvatar class="w-12 h-12 mr-6" :username="props.name" />
|
||||||
class="w-12 h-12 mr-6"
|
|
||||||
:username="props.name"
|
|
||||||
/>
|
|
||||||
<div class="text-center md:text-left overflow-hidden">
|
<div class="text-center md:text-left overflow-hidden">
|
||||||
<h4 class="text-xl text-ellipsis">
|
<h4 class="text-xl text-ellipsis">
|
||||||
{{ name }}
|
{{ name }}
|
||||||
|
@ -90,12 +83,7 @@ const pillText = computed(() => props.text ?? `${props.progress}%`)
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</BaseLevel>
|
</BaseLevel>
|
||||||
<PillTag
|
<PillTag :type="pillType" :text="pillText" small :icon="pillIcon" />
|
||||||
:type="pillType"
|
|
||||||
:text="pillText"
|
|
||||||
small
|
|
||||||
:icon="pillIcon"
|
|
||||||
/>
|
|
||||||
</BaseLevel>
|
</BaseLevel>
|
||||||
</CardBox>
|
</CardBox>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -30,8 +30,8 @@ const props = defineProps({
|
||||||
},
|
},
|
||||||
deleteId: {
|
deleteId: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: null
|
default: null,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const emit = defineEmits(['update:modelValue', 'cancel', 'confirm']);
|
const emit = defineEmits(['update:modelValue', 'cancel', 'confirm']);
|
||||||
|
@ -49,7 +49,6 @@ const confirmCancel = (mode) => {
|
||||||
} else {
|
} else {
|
||||||
emit(mode);
|
emit(mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const confirm = () => confirmCancel('confirm');
|
const confirm = () => confirmCancel('confirm');
|
||||||
|
|
|
@ -1,79 +1,70 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue';
|
||||||
import { mdiCashMinus, mdiCashPlus, mdiReceipt, mdiCreditCardOutline } from '@mdi/js'
|
import { mdiCashMinus, mdiCashPlus, mdiReceipt, mdiCreditCardOutline } from '@mdi/js';
|
||||||
import CardBox from '@/Components/CardBox.vue'
|
import CardBox from '@/Components/CardBox.vue';
|
||||||
import BaseLevel from '@/Components/BaseLevel.vue'
|
import BaseLevel from '@/Components/BaseLevel.vue';
|
||||||
import PillTag from '@/Components/PillTag.vue'
|
import PillTag from '@/Components/PillTag.vue';
|
||||||
import IconRounded from '@/Components/IconRounded.vue'
|
import IconRounded from '@/Components/IconRounded.vue';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
amount: {
|
amount: {
|
||||||
type: Number,
|
type: Number,
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
date: {
|
date: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
business: {
|
business: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
type: {
|
type: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
name: {
|
name: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
account: {
|
account: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
|
|
||||||
const icon = computed(() => {
|
const icon = computed(() => {
|
||||||
if (props.type === 'withdrawal') {
|
if (props.type === 'withdrawal') {
|
||||||
return {
|
return {
|
||||||
icon: mdiCashMinus,
|
icon: mdiCashMinus,
|
||||||
type: 'danger'
|
type: 'danger',
|
||||||
}
|
};
|
||||||
} else if (props.type === 'deposit') {
|
} else if (props.type === 'deposit') {
|
||||||
return {
|
return {
|
||||||
icon: mdiCashPlus,
|
icon: mdiCashPlus,
|
||||||
type: 'success'
|
type: 'success',
|
||||||
}
|
};
|
||||||
} else if (props.type === 'invoice') {
|
} else if (props.type === 'invoice') {
|
||||||
return {
|
return {
|
||||||
icon: mdiReceipt,
|
icon: mdiReceipt,
|
||||||
type: 'warning'
|
type: 'warning',
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
icon: mdiCreditCardOutline,
|
icon: mdiCreditCardOutline,
|
||||||
type: 'info'
|
type: 'info',
|
||||||
}
|
};
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<CardBox
|
<CardBox class="mb-6 last:mb-0" hoverable>
|
||||||
class="mb-6 last:mb-0"
|
|
||||||
hoverable
|
|
||||||
>
|
|
||||||
<BaseLevel>
|
<BaseLevel>
|
||||||
<BaseLevel type="justify-start">
|
<BaseLevel type="justify-start">
|
||||||
<IconRounded
|
<IconRounded :icon="icon.icon" :type="icon.type" class="md:mr-6" />
|
||||||
:icon="icon.icon"
|
|
||||||
:type="icon.type"
|
|
||||||
class="md:mr-6"
|
|
||||||
/>
|
|
||||||
<div class="text-center space-y-1 md:text-left md:mr-6">
|
<div class="text-center space-y-1 md:text-left md:mr-6">
|
||||||
<h4 class="text-xl">
|
<h4 class="text-xl">${{ amount }}</h4>
|
||||||
${{ amount }}
|
|
||||||
</h4>
|
|
||||||
<p class="text-gray-500 dark:text-slate-400">
|
<p class="text-gray-500 dark:text-slate-400">
|
||||||
<b>{{ date }}</b> via {{ business }}
|
<b>{{ date }}</b> via {{ business }}
|
||||||
</p>
|
</p>
|
||||||
|
@ -84,11 +75,7 @@ const icon = computed(() => {
|
||||||
{{ name }}
|
{{ name }}
|
||||||
</p>
|
</p>
|
||||||
<div>
|
<div>
|
||||||
<PillTag
|
<PillTag :type="icon.type" :text="type" small />
|
||||||
:type="icon.type"
|
|
||||||
:text="type"
|
|
||||||
small
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</BaseLevel>
|
</BaseLevel>
|
||||||
|
|
|
@ -1,46 +1,46 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { mdiCog } from '@mdi/js'
|
import { mdiCog } from '@mdi/js';
|
||||||
import CardBox from '@/Components/CardBox.vue'
|
import CardBox from '@/Components/CardBox.vue';
|
||||||
import NumberDynamic from '@/Components/NumberDynamic.vue'
|
import NumberDynamic from '@/Components/NumberDynamic.vue';
|
||||||
import BaseIcon from '@/Components/BaseIcon.vue'
|
import BaseIcon from '@/Components/BaseIcon.vue';
|
||||||
import BaseLevel from '@/Components/BaseLevel.vue'
|
import BaseLevel from '@/Components/BaseLevel.vue';
|
||||||
import PillTagTrend from '@/Components/PillTagTrend.vue'
|
import PillTagTrend from '@/Components/PillTagTrend.vue';
|
||||||
import BaseButton from '@/Components/BaseButton.vue'
|
import BaseButton from '@/Components/BaseButton.vue';
|
||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
number: {
|
number: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 0
|
default: 0,
|
||||||
},
|
},
|
||||||
icon: {
|
icon: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
prefix: {
|
prefix: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
suffix: {
|
suffix: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
label: {
|
label: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
color: {
|
color: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
trend: {
|
trend: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
trendType: {
|
trendType: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
|
@ -1,27 +1,19 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, watch, computed, onMounted } from 'vue'
|
import { ref, watch, computed, onMounted } from 'vue';
|
||||||
import {
|
import { Chart, LineElement, PointElement, LineController, LinearScale, CategoryScale, Tooltip } from 'chart.js';
|
||||||
Chart,
|
|
||||||
LineElement,
|
|
||||||
PointElement,
|
|
||||||
LineController,
|
|
||||||
LinearScale,
|
|
||||||
CategoryScale,
|
|
||||||
Tooltip
|
|
||||||
} from 'chart.js'
|
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
data: {
|
data: {
|
||||||
type: Object,
|
type: Object,
|
||||||
required: true
|
required: true,
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
|
|
||||||
const root = ref(null)
|
const root = ref(null);
|
||||||
|
|
||||||
let chart
|
let chart;
|
||||||
|
|
||||||
Chart.register(LineElement, PointElement, LineController, LinearScale, CategoryScale, Tooltip)
|
Chart.register(LineElement, PointElement, LineController, LinearScale, CategoryScale, Tooltip);
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
chart = new Chart(root.value, {
|
chart = new Chart(root.value, {
|
||||||
|
@ -32,29 +24,29 @@ onMounted(() => {
|
||||||
maintainAspectRatio: false,
|
maintainAspectRatio: false,
|
||||||
scales: {
|
scales: {
|
||||||
y: {
|
y: {
|
||||||
display: false
|
display: false,
|
||||||
},
|
},
|
||||||
x: {
|
x: {
|
||||||
display: true
|
display: true,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
plugins: {
|
plugins: {
|
||||||
legend: {
|
legend: {
|
||||||
display: false
|
display: false,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
|
|
||||||
const chartData = computed(() => props.data)
|
const chartData = computed(() => props.data);
|
||||||
|
|
||||||
watch(chartData, data => {
|
watch(chartData, (data) => {
|
||||||
if (chart) {
|
if (chart) {
|
||||||
chart.data = data
|
chart.data = data;
|
||||||
chart.update()
|
chart.update();
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
|
@ -1,18 +1,17 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue';
|
||||||
import { containerMaxW } from '@/config.js';
|
import { containerMaxW } from '@/config.js';
|
||||||
import BaseLevel from '@/Components/BaseLevel.vue'
|
import BaseLevel from '@/Components/BaseLevel.vue';
|
||||||
import JustboilLogo from '@/Components/JustboilLogo.vue'
|
import JustboilLogo from '@/Components/JustboilLogo.vue';
|
||||||
|
|
||||||
const year = computed(() => new Date().getFullYear())
|
const year = computed(() => new Date().getFullYear());
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<footer class="py-2 px-6">
|
<footer class="py-2 px-6">
|
||||||
<BaseLevel :class="containerMaxW">
|
<BaseLevel :class="containerMaxW">
|
||||||
<div class="text-center md:text-left">
|
<div class="text-center md:text-left">
|
||||||
<b>©{{ year }}, <a href="https://tethys.at/" target="_blank">
|
<b>©{{ year }}, <a href="https://tethys.at/" target="_blank"> Tethys.at</a>.</b>
|
||||||
Tethys.at</a>.</b>
|
|
||||||
<!-- Get more with <a href="https://tailwind-vue.justboil.me/" target="_blank" class="text-blue-600">Premium
|
<!-- Get more with <a href="https://tailwind-vue.justboil.me/" target="_blank" class="text-blue-600">Premium
|
||||||
version</a> -->
|
version</a> -->
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -4,47 +4,39 @@ import { computed } from 'vue';
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
name: {
|
name: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
type: {
|
type: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'checkbox',
|
default: 'checkbox',
|
||||||
validator: value => ['checkbox', 'radio', 'switch'].includes(value)
|
validator: (value) => ['checkbox', 'radio', 'switch'].includes(value),
|
||||||
},
|
},
|
||||||
label: {
|
label: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
modelValue: {
|
modelValue: {
|
||||||
type: [Array, String, Number, Boolean],
|
type: [Array, String, Number, Boolean],
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
inputValue: {
|
inputValue: {
|
||||||
type: [String, Number, Boolean],
|
type: [String, Number, Boolean],
|
||||||
required: true
|
required: true,
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
const emit = defineEmits(['update:modelValue'])
|
const emit = defineEmits(['update:modelValue']);
|
||||||
const computedValue = computed({
|
const computedValue = computed({
|
||||||
get: () => props.modelValue,
|
get: () => props.modelValue,
|
||||||
set: value => {
|
set: (value) => {
|
||||||
emit('update:modelValue', value)
|
emit('update:modelValue', value);
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
const inputType = computed(() => props.type === 'radio' ? 'radio' : 'checkbox')
|
const inputType = computed(() => (props.type === 'radio' ? 'radio' : 'checkbox'));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<label
|
<label :class="type" class="mr-6 mb-3 last:mr-0">
|
||||||
:class="type"
|
<input v-model="computedValue" :type="inputType" :name="name" :value="inputValue" />
|
||||||
class="mr-6 mb-3 last:mr-0"
|
|
||||||
>
|
|
||||||
<input
|
|
||||||
v-model="computedValue"
|
|
||||||
:type="inputType"
|
|
||||||
:name="name"
|
|
||||||
:value="inputValue"
|
|
||||||
>
|
|
||||||
<span class="check" />
|
<span class="check" />
|
||||||
<span class="pl-2">{{ label }}</span>
|
<span class="pl-2">{{ label }}</span>
|
||||||
</label>
|
</label>
|
||||||
|
|
|
@ -1,44 +1,41 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue';
|
||||||
import FormCheckRadio from '@/Components/FormCheckRadio.vue'
|
import FormCheckRadio from '@/Components/FormCheckRadio.vue';
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
options: {
|
options: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => {}
|
default: () => {},
|
||||||
},
|
},
|
||||||
name: {
|
name: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
type: {
|
type: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'checkbox',
|
default: 'checkbox',
|
||||||
validator: value => ['checkbox', 'radio', 'switch'].includes(value)
|
validator: (value) => ['checkbox', 'radio', 'switch'].includes(value),
|
||||||
},
|
},
|
||||||
componentClass: {
|
componentClass: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
isColumn: Boolean,
|
isColumn: Boolean,
|
||||||
modelValue: {
|
modelValue: {
|
||||||
type: [Array, String, Number, Boolean, Object],
|
type: [Array, String, Number, Boolean, Object],
|
||||||
default: null
|
default: null,
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
const emit = defineEmits(['update:modelValue'])
|
const emit = defineEmits(['update:modelValue']);
|
||||||
const computedValue = computed({
|
const computedValue = computed({
|
||||||
get: () => props.modelValue,
|
get: () => props.modelValue,
|
||||||
set: value => {
|
set: (value) => {
|
||||||
emit('update:modelValue', value)
|
emit('update:modelValue', value);
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div
|
<div class="flex justify-start flex-wrap -mb-3" :class="{ 'flex-col': isColumn }">
|
||||||
class="flex justify-start flex-wrap -mb-3"
|
|
||||||
:class="{ 'flex-col': isColumn }"
|
|
||||||
>
|
|
||||||
<!-- :input-value="key" -->
|
<!-- :input-value="key" -->
|
||||||
<!-- :label="value" -->
|
<!-- :label="value" -->
|
||||||
<!-- :input-value="value.id"
|
<!-- :input-value="value.id"
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="bg-slate-100 py-3 px-6 flex justify-between items-center mb-6">
|
<div class="bg-slate-100 py-3 px-6 flex justify-between items-center mb-6">
|
||||||
|
|
||||||
<div class="flex items-center space-x-6">
|
<div class="flex items-center space-x-6">
|
||||||
<h3 class="font-bold">AdonisJS InertiaJS Example</h3>
|
<h3 class="font-bold">AdonisJS InertiaJS Example</h3>
|
||||||
<nav class="flex items-center text-sm">
|
<nav class="flex items-center text-sm">
|
||||||
|
@ -26,7 +25,7 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
components: {
|
components: {
|
||||||
Link
|
Link,
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -21,7 +21,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="!isLastStep"
|
<div
|
||||||
|
v-if="!isLastStep"
|
||||||
class="flex-auto border-t-2 transition duration-500 ease-in-out invisible sm:visible"
|
class="flex-auto border-t-2 transition duration-500 ease-in-out invisible sm:visible"
|
||||||
:class="[isChecked ? 'border-teal-600' : 'border-gray-300']"
|
:class="[isChecked ? 'border-teal-600' : 'border-gray-300']"
|
||||||
></div>
|
></div>
|
||||||
|
|
295
resources/js/Components/Map/SearchMap.vue
Normal file
295
resources/js/Components/Map/SearchMap.vue
Normal file
|
@ -0,0 +1,295 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { onMounted, onUnmounted, ref, Ref, defineProps, computed } from 'vue';
|
||||||
|
import SectionMain from '@/Components/SectionMain.vue';
|
||||||
|
import { Map } from 'leaflet/src/map/index';
|
||||||
|
import { Rectangle } from 'leaflet';
|
||||||
|
import { canvas } from 'leaflet/src/layer/vector/Canvas';
|
||||||
|
import { svg } from 'leaflet/src/layer/vector/SVG';
|
||||||
|
import axios from 'axios';
|
||||||
|
import { LatLngBoundsExpression } from 'leaflet/src/geo/LatLngBounds';
|
||||||
|
// import { tileLayerWMS } from 'leaflet/src/layer/tile/TileLayer.WMS';
|
||||||
|
import { TileLayer } from 'leaflet/src/layer/tile/TileLayer';
|
||||||
|
import { Attribution } from 'leaflet/src/control/Control.Attribution';
|
||||||
|
import DrawControlComponent from '@/Components/Map/draw.component.vue';
|
||||||
|
import ZoomControlComponent from '@/Components/Map/zoom.component.vue';
|
||||||
|
import { MapService } from '@/Stores/map.service';
|
||||||
|
import { LayerGroup } from 'leaflet/src/layer/LayerGroup';
|
||||||
|
import { OpensearchDocument } from '@/Dataset';
|
||||||
|
|
||||||
|
Map.include({
|
||||||
|
// @namespace Map; @method getRenderer(layer: Path): Renderer
|
||||||
|
// Returns the instance of `Renderer` that should be used to render the given
|
||||||
|
// `Path`. It will ensure that the `renderer` options of the map and paths
|
||||||
|
// are respected, and that the renderers do exist on the map.
|
||||||
|
getRenderer: function (layer) {
|
||||||
|
// @namespace Path; @option renderer: Renderer
|
||||||
|
// Use this specific instance of `Renderer` for this path. Takes
|
||||||
|
// precedence over the map's [default renderer](#map-renderer).
|
||||||
|
var renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;
|
||||||
|
|
||||||
|
if (!renderer) {
|
||||||
|
renderer = this._renderer = this._createRenderer();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.hasLayer(renderer)) {
|
||||||
|
this.addLayer(renderer);
|
||||||
|
}
|
||||||
|
return renderer;
|
||||||
|
},
|
||||||
|
|
||||||
|
_getPaneRenderer: function (name) {
|
||||||
|
if (name === 'overlayPane' || name === undefined) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var renderer = this._paneRenderers[name];
|
||||||
|
if (renderer === undefined) {
|
||||||
|
renderer = this._createRenderer({ pane: name });
|
||||||
|
this._paneRenderers[name] = renderer;
|
||||||
|
}
|
||||||
|
return renderer;
|
||||||
|
},
|
||||||
|
|
||||||
|
_createRenderer: function (options) {
|
||||||
|
// @namespace Map; @option preferCanvas: Boolean = false
|
||||||
|
// Whether `Path`s should be rendered on a `Canvas` renderer.
|
||||||
|
// By default, all `Path`s are rendered in a `SVG` renderer.
|
||||||
|
return (this.options.preferCanvas && canvas(options)) || svg(options);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const DEFAULT_BASE_LAYER_NAME = 'BaseLayer';
|
||||||
|
const DEFAULT_BASE_LAYER_ATTRIBUTION = '© <a target="_blank" href="http://osm.org/copyright">OpenStreetMap</a> contributors';
|
||||||
|
// const OPEN_SEARCH_HOST = 'http://localhost:9200';
|
||||||
|
const OPEN_SEARCH_HOST = 'http://192.168.21.18';
|
||||||
|
let map: Map;
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
dheckable: Boolean,
|
||||||
|
datasets: {
|
||||||
|
type: Array<OpensearchDocument>,
|
||||||
|
default: () => [],
|
||||||
|
},
|
||||||
|
mapId: {
|
||||||
|
type: String,
|
||||||
|
default: 'map',
|
||||||
|
},
|
||||||
|
mapOptions: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({
|
||||||
|
center: [48.208174, 16.373819],
|
||||||
|
zoom: 3,
|
||||||
|
zoomControl: false,
|
||||||
|
attributionControl: false,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const items = computed({
|
||||||
|
get() {
|
||||||
|
return props.datasets;
|
||||||
|
},
|
||||||
|
// setter
|
||||||
|
set(value) {
|
||||||
|
// Note: we are using destructuring assignment syntax here.
|
||||||
|
|
||||||
|
props.datasets.length = 0;
|
||||||
|
props.datasets.push(...value);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const fitBounds: LatLngBoundsExpression = [
|
||||||
|
[46.4318173285, 9.47996951665],
|
||||||
|
[49.0390742051, 16.9796667823],
|
||||||
|
];
|
||||||
|
|
||||||
|
// const mapId = 'map';
|
||||||
|
const drawControl: Ref<DrawControlComponent | null> = ref(null);
|
||||||
|
const southWest = ref(null);
|
||||||
|
const northEast = ref(null);
|
||||||
|
const mapService = MapService();
|
||||||
|
// const coverage = {
|
||||||
|
// x_min: undefined,
|
||||||
|
// y_min: undefined,
|
||||||
|
// x_max: undefined,
|
||||||
|
// y_max: undefined,
|
||||||
|
// elevation_min: undefined,
|
||||||
|
// elevation_max: undefined,
|
||||||
|
// elevation_absolut: undefined,
|
||||||
|
// depth_min: undefined,
|
||||||
|
// depth_max: undefined,
|
||||||
|
// depth_absolut: undefined,
|
||||||
|
// time_min: undefined,
|
||||||
|
// time_max: undefined,
|
||||||
|
// time_absolut: undefined,
|
||||||
|
// };
|
||||||
|
const filterLayerGroup = new LayerGroup();
|
||||||
|
// Replace with your actual data
|
||||||
|
// const datasets: Ref<OpensearchDocument[]> = ref([]);
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
initMap();
|
||||||
|
});
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
map.off('zoomend zoomlevelschange');
|
||||||
|
});
|
||||||
|
|
||||||
|
const initMap = async () => {
|
||||||
|
// init leaflet map
|
||||||
|
map = new Map('map', props.mapOptions);
|
||||||
|
mapService.setMap(props.mapId, map);
|
||||||
|
map.scrollWheelZoom.disable();
|
||||||
|
map.fitBounds(fitBounds);
|
||||||
|
drawControl.value?.toggleDraw();
|
||||||
|
|
||||||
|
map.addLayer(filterLayerGroup);
|
||||||
|
|
||||||
|
const attributionControl = new Attribution().addTo(map);
|
||||||
|
attributionControl.setPrefix(false);
|
||||||
|
|
||||||
|
// let osmGgray = tileLayerWMS('https://ows.terrestris.de/osm-gray/service', {
|
||||||
|
// format: 'image/png',
|
||||||
|
// attribution: DEFAULT_BASE_LAYER_ATTRIBUTION,
|
||||||
|
// layers: 'OSM-WMS',
|
||||||
|
// });
|
||||||
|
|
||||||
|
let baseAt = new TileLayer('https://{s}.wien.gv.at/basemap/bmapgrau/normal/google3857/{z}/{y}/{x}.png', {
|
||||||
|
subdomains: ['maps', 'maps1', 'maps2', 'maps3', 'maps4'],
|
||||||
|
attribution: DEFAULT_BASE_LAYER_ATTRIBUTION,
|
||||||
|
});
|
||||||
|
|
||||||
|
let layerOptions = {
|
||||||
|
label: DEFAULT_BASE_LAYER_NAME,
|
||||||
|
visible: true,
|
||||||
|
layer: baseAt,
|
||||||
|
};
|
||||||
|
layerOptions.layer.addTo(map);
|
||||||
|
|
||||||
|
map.on('Draw.Event.CREATED', handleDrawEventCreated);
|
||||||
|
|
||||||
|
// // const query = {
|
||||||
|
// // query: {
|
||||||
|
// // term: {
|
||||||
|
// // id: "103"
|
||||||
|
// // }
|
||||||
|
// // }
|
||||||
|
// // };
|
||||||
|
// // to do : call extra method:
|
||||||
|
// const query = {
|
||||||
|
// // q: 'id:103'
|
||||||
|
// // q: 'author:"Iglseder, Christoph" OR title:"Datensatz"',
|
||||||
|
// // q: 'author:"Iglseder"',
|
||||||
|
// q: '*',
|
||||||
|
// _source: 'author,bbox_xmin,bbox_xmax,bbox_ymin,bbox_ymax,abstract,title',
|
||||||
|
// size: 1000
|
||||||
|
// // qf:"title^3 author^2 subject^1",
|
||||||
|
// }
|
||||||
|
// try {
|
||||||
|
// let response = await axios({
|
||||||
|
// method: 'GET',
|
||||||
|
// url: OPEN_SEARCH_HOST + '/tethys-records/_search',
|
||||||
|
// headers: { 'Content-Type': 'application/json' },
|
||||||
|
// params: query
|
||||||
|
// });
|
||||||
|
// // Loop through the hits in the response
|
||||||
|
// response.data.hits.hits.forEach(hit => {
|
||||||
|
// // Get the geo_location attribute
|
||||||
|
// // var geo_location = hit._source.geo_location;
|
||||||
|
// let xMin = hit._source.bbox_xmin;
|
||||||
|
// let xMax = hit._source.bbox_xmax;
|
||||||
|
// let yMin = hit._source.bbox_ymin;
|
||||||
|
// let yMax = hit._source.bbox_ymax;
|
||||||
|
// var bbox: LatLngBoundsExpression = [[yMin, xMin], [yMax, xMax]];
|
||||||
|
// // Parse the WKT string to get the bounding box coordinates
|
||||||
|
// // var bbox = wktToBbox(geo_location);
|
||||||
|
|
||||||
|
// // // Add the bounding box to the map as a rectangle
|
||||||
|
// new Rectangle(bbox, { color: "#ff7800", weight: 1 }).addTo(map);
|
||||||
|
// // console.log(hit._source);
|
||||||
|
// });
|
||||||
|
// } catch (error) {
|
||||||
|
// console.error(error);
|
||||||
|
// }
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleDrawEventCreated = async (event) => {
|
||||||
|
filterLayerGroup.clearLayers();
|
||||||
|
items.value = [];
|
||||||
|
|
||||||
|
let layer = event.layer;
|
||||||
|
let bounds = layer.getBounds();
|
||||||
|
// coverage.x_min = bounds.getSouthWest().lng;
|
||||||
|
// coverage.y_min = bounds.getSouthWest().lat;
|
||||||
|
// coverage.x_max = bounds.getNorthEast().lng;
|
||||||
|
// coverage.y_max = bounds.getNorthEast().lat;
|
||||||
|
|
||||||
|
try {
|
||||||
|
let response = await axios({
|
||||||
|
method: 'POST',
|
||||||
|
url: OPEN_SEARCH_HOST + '/tethys-records/_search',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
data: {
|
||||||
|
size: 1000,
|
||||||
|
query: {
|
||||||
|
bool: {
|
||||||
|
must: {
|
||||||
|
match_all: {},
|
||||||
|
},
|
||||||
|
filter: {
|
||||||
|
geo_shape: {
|
||||||
|
geo_location: {
|
||||||
|
// replace 'location' with your geo-point field name
|
||||||
|
shape: {
|
||||||
|
type: 'envelope',
|
||||||
|
coordinates: [
|
||||||
|
[bounds.getSouthWest().lng, bounds.getNorthEast().lat],
|
||||||
|
[bounds.getNorthEast().lng, bounds.getSouthWest().lat],
|
||||||
|
],
|
||||||
|
},
|
||||||
|
relation: 'within',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// _source: 'author,bbox_xmin,bbox_xmax,bbox_ymin,bbox_ymax,abstract,title',
|
||||||
|
// "size": 1000
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
// Loop through the hits in the response
|
||||||
|
response.data.hits.hits.forEach((hit) => {
|
||||||
|
// Get the geo_location attribute
|
||||||
|
// var geo_location = hit._source.geo_location;
|
||||||
|
let xMin = hit._source.bbox_xmin;
|
||||||
|
let xMax = hit._source.bbox_xmax;
|
||||||
|
let yMin = hit._source.bbox_ymin;
|
||||||
|
let yMax = hit._source.bbox_ymax;
|
||||||
|
var bbox: LatLngBoundsExpression = [
|
||||||
|
[yMin, xMin],
|
||||||
|
[yMax, xMax],
|
||||||
|
];
|
||||||
|
// Parse the WKT string to get the bounding box coordinates
|
||||||
|
// var bbox = wktToBbox(geo_location);
|
||||||
|
|
||||||
|
// // Add the bounding box to the map as a rectangle
|
||||||
|
let rect = new Rectangle(bbox, { color: '#ff7800', weight: 1 });
|
||||||
|
filterLayerGroup.addLayer(rect);
|
||||||
|
// add to result list
|
||||||
|
items.value.push(hit._source);
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<SectionMain>
|
||||||
|
<div id="map" class="map-container mapDesktop mt-6 mb-6 rounded-2xl py-12 px-6 text-center">
|
||||||
|
<ZoomControlComponent ref="zoomControl" :mapId="mapId"></ZoomControlComponent>
|
||||||
|
<DrawControlComponent ref="drawControl" :preserve="false" :mapId="mapId" :southWest="southWest" :northEast="northEast">
|
||||||
|
</DrawControlComponent>
|
||||||
|
</div>
|
||||||
|
</SectionMain>
|
||||||
|
<!-- </section> -->
|
||||||
|
</template>
|
|
@ -4,10 +4,13 @@
|
||||||
<fa-icon [icon]="faSearchLocation"></fa-icon>
|
<fa-icon [icon]="faSearchLocation"></fa-icon>
|
||||||
</button> -->
|
</button> -->
|
||||||
<!-- -->
|
<!-- -->
|
||||||
<button ref="inputDraw"
|
<button
|
||||||
|
ref="inputDraw"
|
||||||
class="inline-flex cursor-pointer justify-center items-center whitespace-nowrap focus:outline-none transition-colors duration-150 border rounded ring-blue-700 text-black border-teal-50 hover:bg-gray-200 text-sm p-1"
|
class="inline-flex cursor-pointer justify-center items-center whitespace-nowrap focus:outline-none transition-colors duration-150 border rounded ring-blue-700 text-black border-teal-50 hover:bg-gray-200 text-sm p-1"
|
||||||
type="button" :class="[_enabled ? 'cursor-not-allowed bg-cyan-200' : 'bg-teal-50 is-active']"
|
type="button"
|
||||||
@click.prevent="toggleDraw">
|
:class="[_enabled ? 'cursor-not-allowed bg-cyan-200' : 'bg-teal-50 is-active']"
|
||||||
|
@click.prevent="toggleDraw"
|
||||||
|
>
|
||||||
<BaseIcon v-if="mdiDrawPen" :path="mdiDrawPen" />
|
<BaseIcon v-if="mdiDrawPen" :path="mdiDrawPen" />
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -53,15 +56,14 @@ export default class DrawControlComponent extends Vue {
|
||||||
metric: true, // Whether to use the metric measurement system or imperial
|
metric: true, // Whether to use the metric measurement system or imperial
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@Prop() public mapId: string;
|
@Prop() public mapId: string;
|
||||||
// @Prop() public map: Map;
|
// @Prop() public map: Map;
|
||||||
@Prop public southWest: LatLngBounds;
|
@Prop public southWest: LatLngBounds;
|
||||||
@Prop public northEast: LatLngBounds;
|
@Prop public northEast: LatLngBounds;
|
||||||
@Prop({
|
@Prop({
|
||||||
default: true
|
default: true,
|
||||||
}) public preserve: boolean;
|
})
|
||||||
|
public preserve: boolean;
|
||||||
|
|
||||||
mapService = MapService();
|
mapService = MapService();
|
||||||
public _enabled;
|
public _enabled;
|
||||||
|
@ -97,7 +99,6 @@ export default class DrawControlComponent extends Vue {
|
||||||
|
|
||||||
// @Ref('inputDraw') private _inputDraw: HTMLElement;
|
// @Ref('inputDraw') private _inputDraw: HTMLElement;
|
||||||
|
|
||||||
|
|
||||||
private addHooks() {
|
private addHooks() {
|
||||||
// L.Draw.Feature.prototype.addHooks.call(this);
|
// L.Draw.Feature.prototype.addHooks.call(this);
|
||||||
this._map = this.mapService.getMap(this.mapId);
|
this._map = this.mapService.getMap(this.mapId);
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { usePage, router } from '@inertiajs/vue3'
|
import { usePage, router } from '@inertiajs/vue3';
|
||||||
// import { usePage } from '@inertiajs/inertia-vue3';
|
// import { usePage } from '@inertiajs/inertia-vue3';
|
||||||
// import { Inertia } from '@inertiajs/inertia';
|
// import { Inertia } from '@inertiajs/inertia';
|
||||||
import {ComputedRef} from "vue";
|
import { ComputedRef } from 'vue';
|
||||||
|
|
||||||
import { computed, ref } from 'vue';
|
import { computed, ref } from 'vue';
|
||||||
import { containerMaxW } from '@/config.js';
|
import { containerMaxW } from '@/config.js';
|
||||||
|
@ -34,13 +34,11 @@ import UserAvatarCurrentUser from '@/Components/UserAvatarCurrentUser.vue';
|
||||||
import BaseIcon from '@/Components/BaseIcon.vue';
|
import BaseIcon from '@/Components/BaseIcon.vue';
|
||||||
import NavBarSearch from '@/Components/NavBarSearch.vue';
|
import NavBarSearch from '@/Components/NavBarSearch.vue';
|
||||||
import { stardust } from '@eidellev/adonis-stardust/client';
|
import { stardust } from '@eidellev/adonis-stardust/client';
|
||||||
import type User from "App/Models/User";
|
import type User from 'App/Models/User';
|
||||||
|
|
||||||
// const mainStore = MainService();
|
// const mainStore = MainService();
|
||||||
// const userName = computed(() =>mainStore.userName);
|
// const userName = computed(() =>mainStore.userName);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const styleService = StyleService();
|
const styleService = StyleService();
|
||||||
// const props = defineProps({
|
// const props = defineProps({
|
||||||
// user: {
|
// user: {
|
||||||
|
@ -82,16 +80,11 @@ const logout = async() => {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<nav
|
<nav class="top-0 left-0 right-0 fixed bg-gray-50 h-14 z-40 w-screen transition-position xl:pl-60 lg:w-auto dark:bg-slate-800">
|
||||||
class="top-0 left-0 right-0 fixed bg-gray-50 h-14 z-40 w-screen transition-position xl:pl-60 lg:w-auto dark:bg-slate-800"
|
|
||||||
>
|
|
||||||
<div class="flex lg:items-stretch" :class="containerMaxW">
|
<div class="flex lg:items-stretch" :class="containerMaxW">
|
||||||
<div class="flex-1 items-stretch flex h-14">
|
<div class="flex-1 items-stretch flex h-14">
|
||||||
<NavBarItem type="flex lg:hidden" @click.prevent="layoutStore.asideMobileToggle()">
|
<NavBarItem type="flex lg:hidden" @click.prevent="layoutStore.asideMobileToggle()">
|
||||||
<BaseIcon
|
<BaseIcon :path="layoutStore.isAsideMobileExpanded ? mdiBackburger : mdiForwardburger" size="24" />
|
||||||
:path="layoutStore.isAsideMobileExpanded ? mdiBackburger : mdiForwardburger"
|
|
||||||
size="24"
|
|
||||||
/>
|
|
||||||
</NavBarItem>
|
</NavBarItem>
|
||||||
<NavBarItem type="hidden lg:flex xl:hidden" @click.prevent="menuOpenLg">
|
<NavBarItem type="hidden lg:flex xl:hidden" @click.prevent="menuOpenLg">
|
||||||
<BaseIcon :path="mdiMenu" size="24" />
|
<BaseIcon :path="mdiMenu" size="24" />
|
||||||
|
@ -109,9 +102,7 @@ const logout = async() => {
|
||||||
class="absolute w-screen top-14 left-0 bg-gray-50 shadow lg:w-auto lg:items-stretch lg:flex lg:grow lg:static lg:border-b-0 lg:overflow-visible lg:shadow-none dark:bg-slate-800"
|
class="absolute w-screen top-14 left-0 bg-gray-50 shadow lg:w-auto lg:items-stretch lg:flex lg:grow lg:static lg:border-b-0 lg:overflow-visible lg:shadow-none dark:bg-slate-800"
|
||||||
:class="[isMenuNavBarActive ? 'block' : 'hidden']"
|
:class="[isMenuNavBarActive ? 'block' : 'hidden']"
|
||||||
>
|
>
|
||||||
<div
|
<div class="max-h-screen-menu overflow-y-auto lg:overflow-visible lg:flex lg:items-stretch lg:justify-end lg:ml-auto">
|
||||||
class="max-h-screen-menu overflow-y-auto lg:overflow-visible lg:flex lg:items-stretch lg:justify-end lg:ml-auto"
|
|
||||||
>
|
|
||||||
<NavBarMenu>
|
<NavBarMenu>
|
||||||
<NavBarItemLabel :icon="mdiMenu" label="Help menu" />
|
<NavBarItemLabel :icon="mdiMenu" label="Help menu" />
|
||||||
<template #dropdown>
|
<template #dropdown>
|
||||||
|
|
|
@ -1,55 +1,55 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { StyleService } from '@/Stores/style'
|
import { StyleService } from '@/Stores/style';
|
||||||
// import { Link } from '@inertiajs/vue3'
|
// import { Link } from '@inertiajs/vue3'
|
||||||
import { Link } from '@inertiajs/vue3'
|
import { Link } from '@inertiajs/vue3';
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue';
|
||||||
import { stardust } from '@eidellev/adonis-stardust/client';
|
import { stardust } from '@eidellev/adonis-stardust/client';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
href: {
|
href: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
routeName: {
|
routeName: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
param: {
|
param: {
|
||||||
type:Number
|
type: Number,
|
||||||
},
|
},
|
||||||
type: {
|
type: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'flex'
|
default: 'flex',
|
||||||
},
|
},
|
||||||
activeColor: {
|
activeColor: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
isDesktopIconOnly: Boolean,
|
isDesktopIconOnly: Boolean,
|
||||||
dropdown: Boolean,
|
dropdown: Boolean,
|
||||||
active: Boolean
|
active: Boolean,
|
||||||
})
|
});
|
||||||
|
|
||||||
const is = computed(() => {
|
const is = computed(() => {
|
||||||
if (props.href) {
|
if (props.href) {
|
||||||
return 'a'
|
return 'a';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (props.routeName) {
|
if (props.routeName) {
|
||||||
return Link
|
return Link;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 'div'
|
return 'div';
|
||||||
})
|
});
|
||||||
|
|
||||||
const styleStore = StyleService()
|
const styleStore = StyleService();
|
||||||
|
|
||||||
const activeColor = props.activeColor ?? `${styleStore.navBarItemLabelActiveColorStyle} dark:text-slate-400`
|
const activeColor = props.activeColor ?? `${styleStore.navBarItemLabelActiveColorStyle} dark:text-slate-400`;
|
||||||
|
|
||||||
const activeClass = computed(
|
const activeClass = computed(
|
||||||
// () => props.routeName && route().current(props.routeName) == true ? props.activeColor : null
|
// () => props.routeName && route().current(props.routeName) == true ? props.activeColor : null
|
||||||
() => props.routeName && stardust.isCurrent(props.routeName) ? props.activeColor : null
|
() => (props.routeName && stardust.isCurrent(props.routeName) ? props.activeColor : null),
|
||||||
)
|
);
|
||||||
// const itemRoute = computed(() => (props.routeName ? stardust.route(props.routeName): ''));
|
// const itemRoute = computed(() => (props.routeName ? stardust.route(props.routeName): ''));
|
||||||
|
|
||||||
const componentClass = computed(() => {
|
const componentClass = computed(() => {
|
||||||
|
@ -57,25 +57,25 @@ const componentClass = computed(() => {
|
||||||
props.type,
|
props.type,
|
||||||
props.active
|
props.active
|
||||||
? activeColor
|
? activeColor
|
||||||
: `${styleStore.navBarItemLabelStyle} dark:text-white dark:hover:text-slate-400 ${styleStore.navBarItemLabelHoverStyle}`
|
: `${styleStore.navBarItemLabelStyle} dark:text-white dark:hover:text-slate-400 ${styleStore.navBarItemLabelHoverStyle}`,
|
||||||
]
|
];
|
||||||
|
|
||||||
if (props.type === 'block') {
|
if (props.type === 'block') {
|
||||||
base.push('lg:flex')
|
base.push('lg:flex');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!props.dropdown) {
|
if (!props.dropdown) {
|
||||||
base.push('py-2', 'px-3')
|
base.push('py-2', 'px-3');
|
||||||
} else {
|
} else {
|
||||||
base.push('p-0', 'lg:py-2', 'lg:px-3')
|
base.push('p-0', 'lg:py-2', 'lg:px-3');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (props.isDesktopIconOnly) {
|
if (props.isDesktopIconOnly) {
|
||||||
base.push('lg:w-16', 'lg:justify-center')
|
base.push('lg:w-16', 'lg:justify-center');
|
||||||
}
|
}
|
||||||
|
|
||||||
return base
|
return base;
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
|
@ -1,28 +1,21 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import BaseIcon from '@/Components/BaseIcon.vue'
|
import BaseIcon from '@/Components/BaseIcon.vue';
|
||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
icon: {
|
icon: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
label: {
|
label: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
isDesktopIconOnly: Boolean
|
isDesktopIconOnly: Boolean,
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<slot />
|
<slot />
|
||||||
<BaseIcon
|
<BaseIcon v-if="icon" :path="icon" class="transition-colors" />
|
||||||
v-if="icon"
|
<span class="px-2 transition-colors" :class="{ 'lg:hidden': isDesktopIconOnly && icon }">{{ label }}</span>
|
||||||
:path="icon"
|
|
||||||
class="transition-colors"
|
|
||||||
/>
|
|
||||||
<span
|
|
||||||
class="px-2 transition-colors"
|
|
||||||
:class="{ 'lg:hidden':isDesktopIconOnly && icon }"
|
|
||||||
>{{ label }}</span>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,59 +1,48 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { StyleService } from '@/Stores/style'
|
import { StyleService } from '@/Stores/style';
|
||||||
import { computed, ref, onMounted, onBeforeUnmount } from 'vue'
|
import { computed, ref, onMounted, onBeforeUnmount } from 'vue';
|
||||||
import { mdiChevronUp, mdiChevronDown } from '@mdi/js'
|
import { mdiChevronUp, mdiChevronDown } from '@mdi/js';
|
||||||
import NavBarItem from '@/Components/NavBarItem.vue'
|
import NavBarItem from '@/Components/NavBarItem.vue';
|
||||||
import BaseIcon from '@/Components/BaseIcon.vue'
|
import BaseIcon from '@/Components/BaseIcon.vue';
|
||||||
|
|
||||||
const styleStore = StyleService()
|
const styleStore = StyleService();
|
||||||
|
|
||||||
const isDropdownActive = ref(false)
|
const isDropdownActive = ref(false);
|
||||||
|
|
||||||
const toggleDropdownIcon = computed(() => isDropdownActive.value ? mdiChevronUp : mdiChevronDown)
|
const toggleDropdownIcon = computed(() => (isDropdownActive.value ? mdiChevronUp : mdiChevronDown));
|
||||||
|
|
||||||
const toggle = () => {
|
const toggle = () => {
|
||||||
isDropdownActive.value = !isDropdownActive.value
|
isDropdownActive.value = !isDropdownActive.value;
|
||||||
}
|
};
|
||||||
|
|
||||||
const root = ref(null)
|
const root = ref(null);
|
||||||
|
|
||||||
const forceClose = event => {
|
const forceClose = (event) => {
|
||||||
if (!root.value.$el.contains(event.target)) {
|
if (!root.value.$el.contains(event.target)) {
|
||||||
isDropdownActive.value = false
|
isDropdownActive.value = false;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
window.addEventListener('click', forceClose)
|
window.addEventListener('click', forceClose);
|
||||||
})
|
});
|
||||||
|
|
||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
window.removeEventListener('click', forceClose)
|
window.removeEventListener('click', forceClose);
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<NavBarItem
|
<NavBarItem ref="root" type="block" :active="isDropdownActive" dropdown @click="toggle">
|
||||||
ref="root"
|
|
||||||
type="block"
|
|
||||||
:active="isDropdownActive"
|
|
||||||
dropdown
|
|
||||||
@click="toggle"
|
|
||||||
>
|
|
||||||
<a
|
<a
|
||||||
class="flex items-center py-2 px-3 dark:bg-slate-800 lg:bg-transparent lg:dark:bg-transparent"
|
class="flex items-center py-2 px-3 dark:bg-slate-800 lg:bg-transparent lg:dark:bg-transparent"
|
||||||
:class="styleStore.navBarMenuListUpperLabelStyle"
|
:class="styleStore.navBarMenuListUpperLabelStyle"
|
||||||
>
|
>
|
||||||
<slot />
|
<slot />
|
||||||
<BaseIcon
|
<BaseIcon :path="toggleDropdownIcon" class="hidden lg:inline-flex transition-colors" />
|
||||||
:path="toggleDropdownIcon"
|
|
||||||
class="hidden lg:inline-flex transition-colors"
|
|
||||||
/>
|
|
||||||
</a>
|
</a>
|
||||||
<div
|
<div
|
||||||
class="-mx-px text-sm border-b border-gray-100 lg:border lg:bg-white lg:absolute
|
class="-mx-px text-sm border-b border-gray-100 lg:border lg:bg-white lg:absolute lg:top-full lg:left-0 lg:min-w-full lg:z-20 lg:rounded-b lg:dark:bg-slate-800 dark:border-slate-700"
|
||||||
lg:top-full lg:left-0 lg:min-w-full lg:z-20 lg:rounded-b lg:dark:bg-slate-800
|
|
||||||
dark:border-slate-700"
|
|
||||||
:class="{ 'lg:hidden': !isDropdownActive }"
|
:class="{ 'lg:hidden': !isDropdownActive }"
|
||||||
>
|
>
|
||||||
<slot name="dropdown" />
|
<slot name="dropdown" />
|
||||||
|
|
|
@ -3,11 +3,5 @@ import FormControl from '@/Components/FormControl.vue';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<FormControl
|
<FormControl ref="root" placeholder="Search (ctrl+k)" ctrl-k-focus transparent borderless />
|
||||||
ref="root"
|
|
||||||
placeholder="Search (ctrl+k)"
|
|
||||||
ctrl-k-focus
|
|
||||||
transparent
|
|
||||||
borderless
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,68 +1,45 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, computed, useSlots } from 'vue'
|
import { ref, computed, useSlots } from 'vue';
|
||||||
import { mdiClose } from '@mdi/js'
|
import { mdiClose } from '@mdi/js';
|
||||||
import { colorsBgLight, colorsOutline } from '@/colors.js'
|
import { colorsBgLight, colorsOutline } from '@/colors.js';
|
||||||
import BaseLevel from '@/Components/BaseLevel.vue'
|
import BaseLevel from '@/Components/BaseLevel.vue';
|
||||||
import BaseIcon from '@/Components/BaseIcon.vue'
|
import BaseIcon from '@/Components/BaseIcon.vue';
|
||||||
import BaseButton from '@/Components/BaseButton.vue'
|
import BaseButton from '@/Components/BaseButton.vue';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
icon: {
|
icon: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
outline: Boolean,
|
outline: Boolean,
|
||||||
color: {
|
color: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
|
|
||||||
const componentClass = computed(() => props.outline
|
const componentClass = computed(() => (props.outline ? colorsOutline[props.color] : colorsBgLight[props.color]));
|
||||||
? colorsOutline[props.color]
|
|
||||||
: colorsBgLight[props.color]
|
|
||||||
)
|
|
||||||
|
|
||||||
const isDismissed = ref(false)
|
const isDismissed = ref(false);
|
||||||
|
|
||||||
const dismiss = () => {
|
const dismiss = () => {
|
||||||
isDismissed.value = true
|
isDismissed.value = true;
|
||||||
}
|
};
|
||||||
|
|
||||||
const slots = useSlots()
|
const slots = useSlots();
|
||||||
|
|
||||||
const hasRightSlot = computed(() => slots.right)
|
const hasRightSlot = computed(() => slots.right);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div
|
<div v-if="!isDismissed" :class="componentClass" class="px-3 py-6 md:py-3 mb-6 last:mb-0 border rounded transition-colors duration-150">
|
||||||
v-if="!isDismissed"
|
|
||||||
:class="componentClass"
|
|
||||||
class="px-3 py-6 md:py-3 mb-6 last:mb-0 border rounded transition-colors duration-150"
|
|
||||||
>
|
|
||||||
<BaseLevel>
|
<BaseLevel>
|
||||||
<div class="flex flex-col md:flex-row items-center">
|
<div class="flex flex-col md:flex-row items-center">
|
||||||
<BaseIcon
|
<BaseIcon v-if="icon" :path="icon" w="w-10 md:w-5" h="h-10 md:h-5" size="24" class="md:mr-2" />
|
||||||
v-if="icon"
|
|
||||||
:path="icon"
|
|
||||||
w="w-10 md:w-5"
|
|
||||||
h="h-10 md:h-5"
|
|
||||||
size="24"
|
|
||||||
class="md:mr-2"
|
|
||||||
/>
|
|
||||||
<span class="text-center md:text-left"><slot /></span>
|
<span class="text-center md:text-left"><slot /></span>
|
||||||
</div>
|
</div>
|
||||||
<slot
|
<slot v-if="hasRightSlot" name="right" />
|
||||||
v-if="hasRightSlot"
|
<BaseButton v-else :icon="mdiClose" :outline="outline" small @click="dismiss" />
|
||||||
name="right"
|
|
||||||
/>
|
|
||||||
<BaseButton
|
|
||||||
v-else
|
|
||||||
:icon="mdiClose"
|
|
||||||
:outline="outline"
|
|
||||||
small
|
|
||||||
@click="dismiss"
|
|
||||||
/>
|
|
||||||
</BaseLevel>
|
</BaseLevel>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -14,10 +14,7 @@ defineProps({
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="flex flex-col mb-6 -mt-6 -mr-6 -ml-6 animate-fade-in">
|
<div class="flex flex-col mb-6 -mt-6 -mr-6 -ml-6 animate-fade-in">
|
||||||
<div
|
<div :class="[colorsBgLight[color], { 'rounded-t-xl': !isPlacedWithHeader }]" class="flex flex-col p-6 transition-colors">
|
||||||
:class="[colorsBgLight[color], { 'rounded-t-xl': !isPlacedWithHeader }]"
|
|
||||||
class="flex flex-col p-6 transition-colors"
|
|
||||||
>
|
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,61 +1,59 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { computed, ref, watch, onMounted } from 'vue'
|
import { computed, ref, watch, onMounted } from 'vue';
|
||||||
import numeral from 'numeral'
|
import numeral from 'numeral';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
prefix: {
|
prefix: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
suffix: {
|
suffix: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
value: {
|
value: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 0
|
default: 0,
|
||||||
},
|
},
|
||||||
duration: {
|
duration: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 500
|
default: 500,
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
|
|
||||||
const newValue = ref(0)
|
const newValue = ref(0);
|
||||||
|
|
||||||
const newValueFormatted = computed(
|
const newValueFormatted = computed(() => (newValue.value < 1000 ? newValue.value : numeral(newValue.value).format('0,0')));
|
||||||
() => newValue.value < 1000 ? newValue.value : numeral(newValue.value).format('0,0')
|
|
||||||
)
|
|
||||||
|
|
||||||
const value = computed(() => props.value)
|
const value = computed(() => props.value);
|
||||||
|
|
||||||
const grow = m => {
|
const grow = (m) => {
|
||||||
const v = Math.ceil(newValue.value + m)
|
const v = Math.ceil(newValue.value + m);
|
||||||
|
|
||||||
if (v > value.value) {
|
if (v > value.value) {
|
||||||
newValue.value = value.value
|
newValue.value = value.value;
|
||||||
return false
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
newValue.value = v
|
newValue.value = v;
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
grow(m)
|
grow(m);
|
||||||
}, 25)
|
}, 25);
|
||||||
}
|
};
|
||||||
|
|
||||||
const growInit = () => {
|
const growInit = () => {
|
||||||
newValue.value = 0
|
newValue.value = 0;
|
||||||
grow(props.value / (props.duration / 25))
|
grow(props.value / (props.duration / 25));
|
||||||
}
|
};
|
||||||
|
|
||||||
watch(value, () => {
|
watch(value, () => {
|
||||||
growInit()
|
growInit();
|
||||||
})
|
});
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
growInit()
|
growInit();
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
|
@ -4,29 +4,41 @@ import { StyleService } from '@/Stores/style';
|
||||||
defineProps({
|
defineProps({
|
||||||
zIndex: {
|
zIndex: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'z-50'
|
default: 'z-50',
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
|
|
||||||
const emit = defineEmits(['overlay-click'])
|
const emit = defineEmits(['overlay-click']);
|
||||||
|
|
||||||
const overlayClick = event => {
|
const overlayClick = (event) => {
|
||||||
emit('overlay-click', event)
|
emit('overlay-click', event);
|
||||||
}
|
};
|
||||||
|
|
||||||
const styleStore = StyleService()
|
const styleStore = StyleService();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="flex items-center flex-col justify-center overflow-hidden fixed inset-0" :class="zIndex">
|
<div class="flex items-center flex-col justify-center overflow-hidden fixed inset-0" :class="zIndex">
|
||||||
<transition enter-active-class="transition duration-150 ease-in" enter-from-class="opacity-0"
|
<transition
|
||||||
enter-to-class="opacity-100" leave-active-class="transition duration-150 ease-in" leave-from-class="opacity-100"
|
enter-active-class="transition duration-150 ease-in"
|
||||||
leave-to-class="opacity-0">
|
enter-from-class="opacity-0"
|
||||||
<div class="absolute inset-0 bg-gradient-to-tr opacity-90 dark:from-gray-700 dark:via-gray-900 dark:to-gray-700"
|
enter-to-class="opacity-100"
|
||||||
:class="styleStore.overlayStyle" @click="overlayClick" />
|
leave-active-class="transition duration-150 ease-in"
|
||||||
|
leave-from-class="opacity-100"
|
||||||
|
leave-to-class="opacity-0"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="absolute inset-0 bg-gradient-to-tr opacity-90 dark:from-gray-700 dark:via-gray-900 dark:to-gray-700"
|
||||||
|
:class="styleStore.overlayStyle"
|
||||||
|
@click="overlayClick"
|
||||||
|
/>
|
||||||
</transition>
|
</transition>
|
||||||
<transition enter-active-class="transition duration-100 ease-out" enter-from-class="transform scale-95 opacity-0"
|
<transition
|
||||||
enter-to-class="transform scale-100 opacity-100" leave-active-class="animate-fade-out">
|
enter-active-class="transition duration-100 ease-out"
|
||||||
|
enter-from-class="transform scale-95 opacity-0"
|
||||||
|
enter-to-class="transform scale-100 opacity-100"
|
||||||
|
leave-active-class="animate-fade-out"
|
||||||
|
>
|
||||||
<slot />
|
<slot />
|
||||||
</transition>
|
</transition>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,53 +1,48 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue';
|
||||||
import { mdiChevronUp, mdiChevronDown, mdiAlertCircleOutline } from '@mdi/js'
|
import { mdiChevronUp, mdiChevronDown, mdiAlertCircleOutline } from '@mdi/js';
|
||||||
import PillTag from '@/Components/PillTag.vue'
|
import PillTag from '@/Components/PillTag.vue';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
trend: {
|
trend: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
trendType: {
|
trendType: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
small: Boolean
|
small: Boolean,
|
||||||
})
|
});
|
||||||
|
|
||||||
const trendStyle = computed(() => {
|
const trendStyle = computed(() => {
|
||||||
if (props.trendType === 'up') {
|
if (props.trendType === 'up') {
|
||||||
return {
|
return {
|
||||||
icon: mdiChevronUp,
|
icon: mdiChevronUp,
|
||||||
style: 'success'
|
style: 'success',
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (props.trendType === 'down') {
|
if (props.trendType === 'down') {
|
||||||
return {
|
return {
|
||||||
icon: mdiChevronDown,
|
icon: mdiChevronDown,
|
||||||
style: 'danger'
|
style: 'danger',
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (props.trendType === 'alert') {
|
if (props.trendType === 'alert') {
|
||||||
return {
|
return {
|
||||||
icon: mdiAlertCircleOutline,
|
icon: mdiAlertCircleOutline,
|
||||||
style: 'warning'
|
style: 'warning',
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
style: 'info'
|
style: 'info',
|
||||||
}
|
};
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<PillTag
|
<PillTag :text="trend" :type="trendStyle.style" :icon="trendStyle.icon" :small="small" />
|
||||||
:text="trend"
|
|
||||||
:type="trendStyle.style"
|
|
||||||
:icon="trendStyle.icon"
|
|
||||||
:small="small"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -4,9 +4,10 @@ import { Link } from '@inertiajs/vue3';
|
||||||
|
|
||||||
const props = defineProps(['href', 'active']);
|
const props = defineProps(['href', 'active']);
|
||||||
|
|
||||||
const classes = computed(() => props.active
|
const classes = computed(() =>
|
||||||
|
props.active
|
||||||
? 'block pl-3 pr-4 py-2 border-l-4 border-indigo-400 text-base font-medium text-indigo-700 bg-indigo-50 focus:outline-none focus:text-indigo-800 focus:bg-indigo-100 focus:border-indigo-700 transition duration-150 ease-in-out'
|
? 'block pl-3 pr-4 py-2 border-l-4 border-indigo-400 text-base font-medium text-indigo-700 bg-indigo-50 focus:outline-none focus:text-indigo-800 focus:bg-indigo-100 focus:border-indigo-700 transition duration-150 ease-in-out'
|
||||||
: 'block pl-3 pr-4 py-2 border-l-4 border-transparent text-base font-medium text-gray-600 hover:text-gray-800 hover:bg-gray-50 hover:border-gray-300 focus:outline-none focus:text-gray-800 focus:bg-gray-50 focus:border-gray-300 transition duration-150 ease-in-out'
|
: 'block pl-3 pr-4 py-2 border-l-4 border-transparent text-base font-medium text-gray-600 hover:text-gray-800 hover:bg-gray-50 hover:border-gray-300 focus:outline-none focus:text-gray-800 focus:bg-gray-50 focus:border-gray-300 transition duration-150 ease-in-out',
|
||||||
);
|
);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -167,7 +167,6 @@ watch(search, async () => {
|
||||||
await onChange();
|
await onChange();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// function onChange() {
|
// function onChange() {
|
||||||
// if (!props.source || !data.search) {
|
// if (!props.source || !data.search) {
|
||||||
// return false;
|
// return false;
|
||||||
|
|
|
@ -7,13 +7,7 @@ import SectionBanner from '@/Components/SectionBanner.vue';
|
||||||
<SectionBanner bg="greenBlue">
|
<SectionBanner bg="greenBlue">
|
||||||
<h1 class="text-3xl text-white mb-6">Like the project? Please star on <b>Gitea</b>!</h1>
|
<h1 class="text-3xl text-white mb-6">Like the project? Please star on <b>Gitea</b>!</h1>
|
||||||
<div>
|
<div>
|
||||||
<BaseButton
|
<BaseButton href="https://gitea.geologie.ac.at/geolba/tethys" :icon="mdiGithub" label="Gitea" target="_blank" rounded-full />
|
||||||
href="https://gitea.geologie.ac.at/geolba/tethys"
|
|
||||||
:icon="mdiGithub"
|
|
||||||
label="Gitea"
|
|
||||||
target="_blank"
|
|
||||||
rounded-full
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</SectionBanner>
|
</SectionBanner>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
defineProps({
|
defineProps({
|
||||||
custom: Boolean,
|
custom: Boolean,
|
||||||
first: Boolean,
|
first: Boolean,
|
||||||
last: Boolean
|
last: Boolean,
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -12,10 +12,7 @@ defineProps({
|
||||||
:class="{ '-mb-6': first, '-mt-6': last, '-my-6': !first && !last }"
|
:class="{ '-mb-6': first, '-mt-6': last, '-my-6': !first && !last }"
|
||||||
>
|
>
|
||||||
<slot v-if="custom" />
|
<slot v-if="custom" />
|
||||||
<h1
|
<h1 v-else class="text-2xl text-gray-500 dark:text-slate-400">
|
||||||
v-else
|
|
||||||
class="text-2xl text-gray-500 dark:text-slate-400"
|
|
||||||
>
|
|
||||||
<slot />
|
<slot />
|
||||||
</h1>
|
</h1>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -1,56 +1,35 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { mdiCog } from '@mdi/js'
|
import { mdiCog } from '@mdi/js';
|
||||||
import { useSlots, computed } from 'vue'
|
import { useSlots, computed } from 'vue';
|
||||||
import BaseIcon from '@/Components/BaseIcon.vue'
|
import BaseIcon from '@/Components/BaseIcon.vue';
|
||||||
import BaseButton from '@/Components/BaseButton.vue'
|
import BaseButton from '@/Components/BaseButton.vue';
|
||||||
import IconRounded from '@/Components/IconRounded.vue'
|
import IconRounded from '@/Components/IconRounded.vue';
|
||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
icon: {
|
icon: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null,
|
||||||
},
|
},
|
||||||
title: {
|
title: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
main: Boolean
|
main: Boolean,
|
||||||
})
|
});
|
||||||
|
|
||||||
const hasSlot = computed(() => useSlots().default)
|
const hasSlot = computed(() => useSlots().default);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<section
|
<section :class="{ 'pt-6': !main }" class="mb-6 flex items-center justify-between">
|
||||||
:class="{'pt-6':!main}"
|
|
||||||
class="mb-6 flex items-center justify-between"
|
|
||||||
>
|
|
||||||
<div class="flex items-center justify-start">
|
<div class="flex items-center justify-start">
|
||||||
<IconRounded
|
<IconRounded v-if="icon && main" :icon="icon" type="light" class="mr-3" bg />
|
||||||
v-if="icon && main"
|
<BaseIcon v-else-if="icon" :path="icon" class="mr-2" size="20" />
|
||||||
:icon="icon"
|
<h1 :class="main ? 'text-3xl' : 'text-2xl'" class="leading-tight">
|
||||||
type="light"
|
|
||||||
class="mr-3"
|
|
||||||
bg
|
|
||||||
/>
|
|
||||||
<BaseIcon
|
|
||||||
v-else-if="icon"
|
|
||||||
:path="icon"
|
|
||||||
class="mr-2"
|
|
||||||
size="20"
|
|
||||||
/>
|
|
||||||
<h1
|
|
||||||
:class="main ? 'text-3xl' : 'text-2xl'"
|
|
||||||
class="leading-tight"
|
|
||||||
>
|
|
||||||
{{ title }}
|
{{ title }}
|
||||||
</h1>
|
</h1>
|
||||||
</div>
|
</div>
|
||||||
<slot v-if="hasSlot" />
|
<slot v-if="hasSlot" />
|
||||||
<BaseButton
|
<BaseButton v-else :icon="mdiCog" small />
|
||||||
v-else
|
|
||||||
:icon="mdiCog"
|
|
||||||
small
|
|
||||||
/>
|
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,32 +1,26 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, watch } from 'vue'
|
import { ref, watch } from 'vue';
|
||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
type: {
|
type: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'td'
|
default: 'td',
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
|
|
||||||
const emit = defineEmits(['checked'])
|
const emit = defineEmits(['checked']);
|
||||||
|
|
||||||
const checked = ref(false)
|
const checked = ref(false);
|
||||||
|
|
||||||
watch(checked, newVal => {
|
watch(checked, (newVal) => {
|
||||||
emit('checked', newVal)
|
emit('checked', newVal);
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<component
|
<component :is="type" class="lg:w-1">
|
||||||
:is="type"
|
|
||||||
class="lg:w-1"
|
|
||||||
>
|
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input
|
<input v-model="checked" type="checkbox" />
|
||||||
v-model="checked"
|
|
||||||
type="checkbox"
|
|
||||||
>
|
|
||||||
<span class="check" />
|
<span class="check" />
|
||||||
</label>
|
</label>
|
||||||
</component>
|
</component>
|
||||||
|
|
|
@ -120,8 +120,7 @@ const removeItem = (key) => {
|
||||||
<UserAvatar :username="client.value" class="w-24 h-24 mx-auto lg:w-6 lg:h-6" />
|
<UserAvatar :username="client.value" class="w-24 h-24 mx-auto lg:w-6 lg:h-6" />
|
||||||
</td> -->
|
</td> -->
|
||||||
<td data-label="Type" scope="row">
|
<td data-label="Type" scope="row">
|
||||||
<FormControl required v-model="item.type" :type="'select'" placeholder="[Enter Language]"
|
<FormControl required v-model="item.type" :type="'select'" placeholder="[Enter Language]" :options="props.subjectTypes">
|
||||||
:options="props.subjectTypes">
|
|
||||||
<div class="text-red-400 text-sm" v-if="errors[`subjects.${index}.type`]">
|
<div class="text-red-400 text-sm" v-if="errors[`subjects.${index}.type`]">
|
||||||
{{ errors[`subjects.${index}.type`].join(', ') }}
|
{{ errors[`subjects.${index}.type`].join(', ') }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -129,17 +128,21 @@ const removeItem = (key) => {
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td data-label="Value" scope="row">
|
<td data-label="Value" scope="row">
|
||||||
<SearchCategoryAutocomplete v-if="item.type !== 'uncontrolled'" v-model="item.value" @subject="(language) => {
|
<SearchCategoryAutocomplete
|
||||||
|
v-if="item.type !== 'uncontrolled'"
|
||||||
|
v-model="item.value"
|
||||||
|
@subject="
|
||||||
|
(language) => {
|
||||||
item.language = language;
|
item.language = language;
|
||||||
}
|
}
|
||||||
">
|
"
|
||||||
|
>
|
||||||
<div class="text-red-400 text-sm" v-if="errors[`subjects.${index}.value`]">
|
<div class="text-red-400 text-sm" v-if="errors[`subjects.${index}.value`]">
|
||||||
{{ errors[`subjects.${index}.value`].join(', ') }}
|
{{ errors[`subjects.${index}.value`].join(', ') }}
|
||||||
</div>
|
</div>
|
||||||
</SearchCategoryAutocomplete>
|
</SearchCategoryAutocomplete>
|
||||||
|
|
||||||
<FormControl v-else required v-model="item.value" type="text" placeholder="[enter keyword value]"
|
<FormControl v-else required v-model="item.value" type="text" placeholder="[enter keyword value]" :borderless="true">
|
||||||
:borderless="true">
|
|
||||||
<div class="text-red-400 text-sm" v-if="errors[`subjects.${index}.value`]">
|
<div class="text-red-400 text-sm" v-if="errors[`subjects.${index}.value`]">
|
||||||
{{ errors[`subjects.${index}.value`].join(', ') }}
|
{{ errors[`subjects.${index}.value`].join(', ') }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -147,8 +150,14 @@ const removeItem = (key) => {
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td data-label="Language" scope="row">
|
<td data-label="Language" scope="row">
|
||||||
<FormControl required v-model="item.language" :type="'select'" placeholder="[Enter Lang]"
|
<FormControl
|
||||||
:options="{ de: 'de', en: 'en' }" :is-read-only="item.type != 'uncontrolled'">
|
required
|
||||||
|
v-model="item.language"
|
||||||
|
:type="'select'"
|
||||||
|
placeholder="[Enter Lang]"
|
||||||
|
:options="{ de: 'de', en: 'en' }"
|
||||||
|
:is-read-only="item.type != 'uncontrolled'"
|
||||||
|
>
|
||||||
<div class="text-red-400 text-sm" v-if="errors[`subjects.${index}.language`]">
|
<div class="text-red-400 text-sm" v-if="errors[`subjects.${index}.language`]">
|
||||||
{{ errors[`subjects.${index}.language`].join(', ') }}
|
{{ errors[`subjects.${index}.language`].join(', ') }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -157,8 +166,7 @@ const removeItem = (key) => {
|
||||||
<td class="before:hidden lg:w-1 whitespace-nowrap" scope="row">
|
<td class="before:hidden lg:w-1 whitespace-nowrap" scope="row">
|
||||||
<BaseButtons type="justify-start lg:justify-end" no-wrap>
|
<BaseButtons type="justify-start lg:justify-end" no-wrap>
|
||||||
<!-- <BaseButton color="info" :icon="mdiEye" small @click="isModalActive = true" /> -->
|
<!-- <BaseButton color="info" :icon="mdiEye" small @click="isModalActive = true" /> -->
|
||||||
<BaseButton v-if="index > 2" color="danger" :icon="mdiTrashCan" small
|
<BaseButton v-if="index > 2" color="danger" :icon="mdiTrashCan" small @click.prevent="removeItem(index)" />
|
||||||
@click.prevent="removeItem(index)" />
|
|
||||||
</BaseButtons>
|
</BaseButtons>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -169,8 +177,15 @@ const removeItem = (key) => {
|
||||||
<div class="p-3 lg:px-6 border-t border-gray-100 dark:border-slate-800">
|
<div class="p-3 lg:px-6 border-t border-gray-100 dark:border-slate-800">
|
||||||
<BaseLevel>
|
<BaseLevel>
|
||||||
<BaseButtons>
|
<BaseButtons>
|
||||||
<BaseButton v-for="page in pagesList" :key="page" :active="page === currentPage" :label="page + 1" small
|
<BaseButton
|
||||||
:outline="styleService.darkMode" @click="currentPage = page" />
|
v-for="page in pagesList"
|
||||||
|
:key="page"
|
||||||
|
:active="page === currentPage"
|
||||||
|
:label="page + 1"
|
||||||
|
small
|
||||||
|
:outline="styleService.darkMode"
|
||||||
|
@click="currentPage = page"
|
||||||
|
/>
|
||||||
</BaseButtons>
|
</BaseButtons>
|
||||||
<small>Page {{ currentPageHuman }} of {{ numPages }}</small>
|
<small>Page {{ currentPageHuman }} of {{ numPages }}</small>
|
||||||
</BaseLevel>
|
</BaseLevel>
|
||||||
|
@ -182,7 +197,6 @@ const removeItem = (key) => {
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
/* tr:nth-child(even) {
|
/* tr:nth-child(even) {
|
||||||
background: gray;
|
background: gray;
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,10 +169,17 @@ const removeAuthor = (key) => {
|
||||||
{{ option }}
|
{{ option }}
|
||||||
</option>
|
</option>
|
||||||
</select> -->
|
</select> -->
|
||||||
<FormControl required v-model="element.pivot_contributor_type" type="select"
|
<FormControl
|
||||||
:options="contributortypes" placeholder="[relation type]">
|
required
|
||||||
<div class="text-red-400 text-sm"
|
v-model="element.pivot_contributor_type"
|
||||||
v-if="errors && Array.isArray(errors[`contributors.${index}.pivot_contributor_type`])">
|
type="select"
|
||||||
|
:options="contributortypes"
|
||||||
|
placeholder="[relation type]"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="text-red-400 text-sm"
|
||||||
|
v-if="errors && Array.isArray(errors[`contributors.${index}.pivot_contributor_type`])"
|
||||||
|
>
|
||||||
{{ errors[`contributors.${index}.pivot_contributor_type`].join(', ') }}
|
{{ errors[`contributors.${index}.pivot_contributor_type`].join(', ') }}
|
||||||
</div>
|
</div>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
|
|
|
@ -24,9 +24,7 @@ const perPage = ref(5);
|
||||||
const currentPage = ref(0);
|
const currentPage = ref(0);
|
||||||
const checkedRows = ref([]);
|
const checkedRows = ref([]);
|
||||||
|
|
||||||
const itemsPaginated = computed(() =>
|
const itemsPaginated = computed(() => items.value.slice(perPage.value * currentPage.value, perPage.value * (currentPage.value + 1)));
|
||||||
items.value.slice(perPage.value * currentPage.value, perPage.value * (currentPage.value + 1))
|
|
||||||
);
|
|
||||||
|
|
||||||
const numPages = computed(() => Math.ceil(items.value.length / perPage.value));
|
const numPages = computed(() => Math.ceil(items.value.length / perPage.value));
|
||||||
|
|
||||||
|
@ -75,8 +73,11 @@ const checked = (isChecked, client) => {
|
||||||
</CardBoxModal>
|
</CardBoxModal>
|
||||||
|
|
||||||
<div v-if="checkedRows.length" class="p-3 bg-gray-100/50 dark:bg-slate-800">
|
<div v-if="checkedRows.length" class="p-3 bg-gray-100/50 dark:bg-slate-800">
|
||||||
<span v-for="checkedRow in checkedRows" :key="checkedRow.id"
|
<span
|
||||||
class="inline-block px-2 py-1 rounded-sm mr-2 text-sm bg-gray-100 dark:bg-slate-700">
|
v-for="checkedRow in checkedRows"
|
||||||
|
:key="checkedRow.id"
|
||||||
|
class="inline-block px-2 py-1 rounded-sm mr-2 text-sm bg-gray-100 dark:bg-slate-700"
|
||||||
|
>
|
||||||
{{ checkedRow.name }}
|
{{ checkedRow.name }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -115,9 +116,7 @@ const checked = (isChecked, client) => {
|
||||||
</progress>
|
</progress>
|
||||||
</td>
|
</td>
|
||||||
<td data-label="Created" class="lg:w-1 whitespace-nowrap">
|
<td data-label="Created" class="lg:w-1 whitespace-nowrap">
|
||||||
<small class="text-gray-500 dark:text-slate-400" :title="client.created">{{
|
<small class="text-gray-500 dark:text-slate-400" :title="client.created">{{ client.created }}</small>
|
||||||
client.created
|
|
||||||
}}</small>
|
|
||||||
</td>
|
</td>
|
||||||
<td class="before:hidden lg:w-1 whitespace-nowrap">
|
<td class="before:hidden lg:w-1 whitespace-nowrap">
|
||||||
<BaseButtons type="justify-start lg:justify-end" no-wrap>
|
<BaseButtons type="justify-start lg:justify-end" no-wrap>
|
||||||
|
@ -131,8 +130,15 @@ const checked = (isChecked, client) => {
|
||||||
<div class="p-3 lg:px-6 border-t border-gray-100 dark:border-slate-800">
|
<div class="p-3 lg:px-6 border-t border-gray-100 dark:border-slate-800">
|
||||||
<BaseLevel>
|
<BaseLevel>
|
||||||
<BaseButtons>
|
<BaseButtons>
|
||||||
<BaseButton v-for="page in pagesList" :key="page" :active="page === currentPage" :label="page + 1" small
|
<BaseButton
|
||||||
:outline="styleService.darkMode" @click="currentPage = page" />
|
v-for="page in pagesList"
|
||||||
|
:key="page"
|
||||||
|
:active="page === currentPage"
|
||||||
|
:label="page + 1"
|
||||||
|
small
|
||||||
|
:outline="styleService.darkMode"
|
||||||
|
@click="currentPage = page"
|
||||||
|
/>
|
||||||
</BaseButtons>
|
</BaseButtons>
|
||||||
<small>Page {{ currentPageHuman }} of {{ numPages }}</small>
|
<small>Page {{ currentPageHuman }} of {{ numPages }}</small>
|
||||||
</BaseLevel>
|
</BaseLevel>
|
||||||
|
|
|
@ -19,7 +19,7 @@ const props = defineProps({
|
||||||
const avatar = computed(
|
const avatar = computed(
|
||||||
// () => props.avatar ?? `https://avatars.dicebear.com/api/${props.api}/${props.username?.replace(/[^a-z0-9]+/i, '-')}.svg`
|
// () => props.avatar ?? `https://avatars.dicebear.com/api/${props.api}/${props.username?.replace(/[^a-z0-9]+/i, '-')}.svg`
|
||||||
|
|
||||||
() => props.avatar ?? `https://avatars.dicebear.com/api/initials/${props.username}.svg`
|
() => props.avatar ?? `https://avatars.dicebear.com/api/initials/${props.username}.svg`,
|
||||||
|
|
||||||
// () => {
|
// () => {
|
||||||
|
|
||||||
|
@ -32,10 +32,6 @@ const username = computed(() => props.username);
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<img
|
<img :src="avatar" :alt="username" class="rounded-full block h-auto w-full max-w-full bg-gray-100 dark:bg-slate-800" />
|
||||||
:src="avatar"
|
|
||||||
:alt="username"
|
|
||||||
class="rounded-full block h-auto w-full max-w-full bg-gray-100 dark:bg-slate-800"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -15,5 +15,10 @@ onMounted(() => {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<input class="border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 rounded-md shadow-sm" :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" ref="input">
|
<input
|
||||||
|
class="border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 rounded-md shadow-sm"
|
||||||
|
:value="modelValue"
|
||||||
|
@input="$emit('update:modelValue', $event.target.value)"
|
||||||
|
ref="input"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,20 +1,16 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { Head, Link, useForm, router } from "@inertiajs/vue3"
|
import { Head, Link, useForm, router } from '@inertiajs/vue3';
|
||||||
import {
|
import { mdiAccountKey, mdiArrowLeftBoldOutline, mdiAccount, mdiNoteText, mdiFormTextarea } from '@mdi/js';
|
||||||
mdiAccountKey,
|
import LayoutAuthenticated from '@/Layouts/LayoutAuthenticated.vue';
|
||||||
mdiArrowLeftBoldOutline,
|
import SectionMain from '@/Components/SectionMain.vue';
|
||||||
mdiAccount, mdiNoteText, mdiFormTextarea
|
import SectionTitleLineWithButton from '@/Components/SectionTitleLineWithButton.vue';
|
||||||
} from "@mdi/js"
|
import CardBox from '@/Components/CardBox.vue';
|
||||||
import LayoutAuthenticated from "@/Layouts/LayoutAuthenticated.vue"
|
import FormField from '@/Components/FormField.vue';
|
||||||
import SectionMain from "@/Components/SectionMain.vue"
|
import FormControl from '@/Components/FormControl.vue';
|
||||||
import SectionTitleLineWithButton from "@/Components/SectionTitleLineWithButton.vue"
|
import FormCheckRadioGroup from '@/Components/FormCheckRadioGroup.vue';
|
||||||
import CardBox from "@/Components/CardBox.vue"
|
import BaseDivider from '@/Components/BaseDivider.vue';
|
||||||
import FormField from '@/Components/FormField.vue'
|
import BaseButton from '@/Components/BaseButton.vue';
|
||||||
import FormControl from '@/Components/FormControl.vue'
|
import BaseButtons from '@/Components/BaseButtons.vue';
|
||||||
import FormCheckRadioGroup from '@/Components/FormCheckRadioGroup.vue'
|
|
||||||
import BaseDivider from '@/Components/BaseDivider.vue'
|
|
||||||
import BaseButton from '@/Components/BaseButton.vue'
|
|
||||||
import BaseButtons from '@/Components/BaseButtons.vue'
|
|
||||||
import { stardust } from '@eidellev/adonis-stardust/client';
|
import { stardust } from '@eidellev/adonis-stardust/client';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
@ -28,7 +24,7 @@ const form = useForm({
|
||||||
name: '',
|
name: '',
|
||||||
display_name: '',
|
display_name: '',
|
||||||
description: '',
|
description: '',
|
||||||
permissions: []
|
permissions: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
const submit = async () => {
|
const submit = async () => {
|
||||||
|
@ -38,16 +34,20 @@ const submit = async () => {
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<LayoutAuthenticated>
|
<LayoutAuthenticated>
|
||||||
|
|
||||||
<Head title="Add role" />
|
<Head title="Add role" />
|
||||||
<SectionMain>
|
<SectionMain>
|
||||||
<SectionTitleLineWithButton :icon="mdiAccountKey" title="Add role" main>
|
<SectionTitleLineWithButton :icon="mdiAccountKey" title="Add role" main>
|
||||||
<BaseButton :route-name="stardust.route('role.index')" :icon="mdiArrowLeftBoldOutline" label="Back" color="white"
|
<BaseButton
|
||||||
rounded-full small />
|
:route-name="stardust.route('role.index')"
|
||||||
|
:icon="mdiArrowLeftBoldOutline"
|
||||||
|
label="Back"
|
||||||
|
color="white"
|
||||||
|
rounded-full
|
||||||
|
small
|
||||||
|
/>
|
||||||
</SectionTitleLineWithButton>
|
</SectionTitleLineWithButton>
|
||||||
<!-- <CardBox form @submit.prevent="form.post(stardust.route('role.store'))"> -->
|
<!-- <CardBox form @submit.prevent="form.post(stardust.route('role.store'))"> -->
|
||||||
<CardBox form @submit.prevent="submit()">
|
<CardBox form @submit.prevent="submit()">
|
||||||
|
|
||||||
<FormField label="Name" help="Required. Role name" :class="{ 'text-red-400': form.errors.name }">
|
<FormField label="Name" help="Required. Role name" :class="{ 'text-red-400': form.errors.name }">
|
||||||
<FormControl v-model="form.name" type="text" placeholder="Enter Name" required :error="form.errors.name">
|
<FormControl v-model="form.name" type="text" placeholder="Enter Name" required :error="form.errors.name">
|
||||||
<div class="text-red-400 text-sm" v-if="form.errors.name">
|
<div class="text-red-400 text-sm" v-if="form.errors.name">
|
||||||
|
@ -64,8 +64,18 @@ const submit = async () => {
|
||||||
</FormControl>
|
</FormControl>
|
||||||
</FormField>
|
</FormField>
|
||||||
|
|
||||||
<FormField label="Description" help="Optional. Description of new role" :class="{ 'text-red-400': form.errors.description }">
|
<FormField
|
||||||
<FormControl v-model="form.description" v-bind:icon="mdiFormTextarea" name="display_name" :type="'textarea'" :error="form.errors.description">
|
label="Description"
|
||||||
|
help="Optional. Description of new role"
|
||||||
|
:class="{ 'text-red-400': form.errors.description }"
|
||||||
|
>
|
||||||
|
<FormControl
|
||||||
|
v-model="form.description"
|
||||||
|
v-bind:icon="mdiFormTextarea"
|
||||||
|
name="display_name"
|
||||||
|
:type="'textarea'"
|
||||||
|
:error="form.errors.description"
|
||||||
|
>
|
||||||
<div class="text-red-400 text-sm" v-if="form.errors.description">
|
<div class="text-red-400 text-sm" v-if="form.errors.description">
|
||||||
{{ form.errors.description }}
|
{{ form.errors.description }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -84,8 +94,13 @@ const submit = async () => {
|
||||||
|
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<BaseButtons>
|
<BaseButtons>
|
||||||
<BaseButton type="submit" color="info" label="Submit" :class="{ 'opacity-25': form.processing }"
|
<BaseButton
|
||||||
:disabled="form.processing" />
|
type="submit"
|
||||||
|
color="info"
|
||||||
|
label="Submit"
|
||||||
|
:class="{ 'opacity-25': form.processing }"
|
||||||
|
:disabled="form.processing"
|
||||||
|
/>
|
||||||
</BaseButtons>
|
</BaseButtons>
|
||||||
</template>
|
</template>
|
||||||
</CardBox>
|
</CardBox>
|
||||||
|
|
|
@ -1,20 +1,16 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { Head, Link, useForm } from "@inertiajs/vue3"
|
import { Head, Link, useForm } from '@inertiajs/vue3';
|
||||||
import {
|
import { mdiAccountKey, mdiArrowLeftBoldOutline, mdiFormTextarea } from '@mdi/js';
|
||||||
mdiAccountKey,
|
import LayoutAuthenticated from '@/Layouts/LayoutAuthenticated.vue';
|
||||||
mdiArrowLeftBoldOutline,
|
import SectionMain from '@/Components/SectionMain.vue';
|
||||||
mdiFormTextarea
|
import SectionTitleLineWithButton from '@/Components/SectionTitleLineWithButton.vue';
|
||||||
} from "@mdi/js"
|
import CardBox from '@/Components/CardBox.vue';
|
||||||
import LayoutAuthenticated from "@/Layouts/LayoutAuthenticated.vue"
|
import FormField from '@/Components/FormField.vue';
|
||||||
import SectionMain from "@/Components/SectionMain.vue"
|
import FormControl from '@/Components/FormControl.vue';
|
||||||
import SectionTitleLineWithButton from "@/Components/SectionTitleLineWithButton.vue"
|
import FormCheckRadioGroup from '@/Components/FormCheckRadioGroup.vue';
|
||||||
import CardBox from "@/Components/CardBox.vue"
|
import BaseDivider from '@/Components/BaseDivider.vue';
|
||||||
import FormField from '@/Components/FormField.vue'
|
import BaseButton from '@/Components/BaseButton.vue';
|
||||||
import FormControl from '@/Components/FormControl.vue'
|
import BaseButtons from '@/Components/BaseButtons.vue';
|
||||||
import FormCheckRadioGroup from '@/Components/FormCheckRadioGroup.vue'
|
|
||||||
import BaseDivider from '@/Components/BaseDivider.vue'
|
|
||||||
import BaseButton from '@/Components/BaseButton.vue'
|
|
||||||
import BaseButtons from '@/Components/BaseButtons.vue'
|
|
||||||
import { stardust } from '@eidellev/adonis-stardust/client';
|
import { stardust } from '@eidellev/adonis-stardust/client';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
@ -29,15 +25,15 @@ const props = defineProps({
|
||||||
roleHasPermissions: {
|
roleHasPermissions: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => ({}),
|
default: () => ({}),
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
|
|
||||||
const form = useForm({
|
const form = useForm({
|
||||||
_method: 'put',
|
_method: 'put',
|
||||||
name: props.role.name,
|
name: props.role.name,
|
||||||
description: props.role.description,
|
description: props.role.description,
|
||||||
permissions: props.roleHasPermissions
|
permissions: props.roleHasPermissions,
|
||||||
})
|
});
|
||||||
|
|
||||||
const submit = async () => {
|
const submit = async () => {
|
||||||
// await Inertia.post(stardust.route('user.store'), form);
|
// await Inertia.post(stardust.route('user.store'), form);
|
||||||
|
@ -47,16 +43,20 @@ const submit = async () => {
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<LayoutAuthenticated>
|
<LayoutAuthenticated>
|
||||||
|
|
||||||
<Head title="Update role" />
|
<Head title="Update role" />
|
||||||
<SectionMain>
|
<SectionMain>
|
||||||
<SectionTitleLineWithButton :icon="mdiAccountKey" title="Update role" main>
|
<SectionTitleLineWithButton :icon="mdiAccountKey" title="Update role" main>
|
||||||
<BaseButton :route-name="stardust.route('role.index')" :icon="mdiArrowLeftBoldOutline" label="Back" color="white"
|
<BaseButton
|
||||||
rounded-full small />
|
:route-name="stardust.route('role.index')"
|
||||||
|
:icon="mdiArrowLeftBoldOutline"
|
||||||
|
label="Back"
|
||||||
|
color="white"
|
||||||
|
rounded-full
|
||||||
|
small
|
||||||
|
/>
|
||||||
</SectionTitleLineWithButton>
|
</SectionTitleLineWithButton>
|
||||||
<!-- <CardBox form @submit.prevent="form.put(stardust.route('role.update', [props.role.id]))"> -->
|
<!-- <CardBox form @submit.prevent="form.put(stardust.route('role.update', [props.role.id]))"> -->
|
||||||
<CardBox form @submit.prevent="submit()">
|
<CardBox form @submit.prevent="submit()">
|
||||||
|
|
||||||
<FormField label="Name" :class="{ 'text-red-400': form.errors.name }">
|
<FormField label="Name" :class="{ 'text-red-400': form.errors.name }">
|
||||||
<FormControl v-model="form.name" type="text" placeholder="Enter Name" required :error="form.errors.name">
|
<FormControl v-model="form.name" type="text" placeholder="Enter Name" required :error="form.errors.name">
|
||||||
<div class="text-red-400 text-sm" v-if="form.errors.name">
|
<div class="text-red-400 text-sm" v-if="form.errors.name">
|
||||||
|
@ -65,8 +65,18 @@ const submit = async () => {
|
||||||
</FormControl>
|
</FormControl>
|
||||||
</FormField>
|
</FormField>
|
||||||
|
|
||||||
<FormField label="Description" help="Optional. Description of new role" :class="{ 'text-red-400': form.errors.description }">
|
<FormField
|
||||||
<FormControl v-model="form.description" v-bind:icon="mdiFormTextarea" name="display_name" :type="'textarea'" :error="form.errors.description">
|
label="Description"
|
||||||
|
help="Optional. Description of new role"
|
||||||
|
:class="{ 'text-red-400': form.errors.description }"
|
||||||
|
>
|
||||||
|
<FormControl
|
||||||
|
v-model="form.description"
|
||||||
|
v-bind:icon="mdiFormTextarea"
|
||||||
|
name="display_name"
|
||||||
|
:type="'textarea'"
|
||||||
|
:error="form.errors.description"
|
||||||
|
>
|
||||||
<div class="text-red-400 text-sm" v-if="form.errors.description">
|
<div class="text-red-400 text-sm" v-if="form.errors.description">
|
||||||
{{ form.errors.description }}
|
{{ form.errors.description }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -81,8 +91,13 @@ const submit = async () => {
|
||||||
|
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<BaseButtons>
|
<BaseButtons>
|
||||||
<BaseButton type="submit" color="info" label="Submit" :class="{ 'opacity-25': form.processing }"
|
<BaseButton
|
||||||
:disabled="form.processing" />
|
type="submit"
|
||||||
|
color="info"
|
||||||
|
label="Submit"
|
||||||
|
:class="{ 'opacity-25': form.processing }"
|
||||||
|
:disabled="form.processing"
|
||||||
|
/>
|
||||||
</BaseButtons>
|
</BaseButtons>
|
||||||
</template>
|
</template>
|
||||||
</CardBox>
|
</CardBox>
|
||||||
|
|
|
@ -1,14 +1,11 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { Head, Link, useForm } from "@inertiajs/vue3"
|
import { Head, Link, useForm } from '@inertiajs/vue3';
|
||||||
import {
|
import { mdiAccountKey, mdiArrowLeftBoldOutline } from '@mdi/js';
|
||||||
mdiAccountKey,
|
import LayoutAuthenticated from '@/Layouts/LayoutAuthenticated.vue';
|
||||||
mdiArrowLeftBoldOutline,
|
import SectionMain from '@/Components/SectionMain.vue';
|
||||||
} from "@mdi/js"
|
import SectionTitleLineWithButton from '@/Components/SectionTitleLineWithButton.vue';
|
||||||
import LayoutAuthenticated from "@/Layouts/LayoutAuthenticated.vue"
|
import CardBox from '@/Components/CardBox.vue';
|
||||||
import SectionMain from "@/Components/SectionMain.vue"
|
import BaseButton from '@/Components/BaseButton.vue';
|
||||||
import SectionTitleLineWithButton from "@/Components/SectionTitleLineWithButton.vue"
|
|
||||||
import CardBox from "@/Components/CardBox.vue"
|
|
||||||
import BaseButton from "@/Components/BaseButton.vue"
|
|
||||||
import { stardust } from '@eidellev/adonis-stardust/client';
|
import { stardust } from '@eidellev/adonis-stardust/client';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
@ -23,49 +20,41 @@ const props = defineProps({
|
||||||
roleHasPermissions: {
|
roleHasPermissions: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => ({}),
|
default: () => ({}),
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<LayoutAuthenticated>
|
<LayoutAuthenticated>
|
||||||
|
|
||||||
<Head title="View role" />
|
<Head title="View role" />
|
||||||
<SectionMain>
|
<SectionMain>
|
||||||
<SectionTitleLineWithButton :icon="mdiAccountKey" title="View role" main>
|
<SectionTitleLineWithButton :icon="mdiAccountKey" title="View role" main>
|
||||||
<BaseButton :route-name="stardust.route('role.index')" :icon="mdiArrowLeftBoldOutline" label="Back" color="white"
|
<BaseButton
|
||||||
rounded-full small />
|
:route-name="stardust.route('role.index')"
|
||||||
|
:icon="mdiArrowLeftBoldOutline"
|
||||||
|
label="Back"
|
||||||
|
color="white"
|
||||||
|
rounded-full
|
||||||
|
small
|
||||||
|
/>
|
||||||
</SectionTitleLineWithButton>
|
</SectionTitleLineWithButton>
|
||||||
<CardBox class="mb-6">
|
<CardBox class="mb-6">
|
||||||
<table>
|
<table>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="p-4 pl-8 text-slate-500 dark:text-slate-400 hidden lg:block">
|
<td class="p-4 pl-8 text-slate-500 dark:text-slate-400 hidden lg:block">Name</td>
|
||||||
Name
|
|
||||||
</td>
|
|
||||||
<td data-label="Name">
|
<td data-label="Name">
|
||||||
{{ role.name }}
|
{{ role.name }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="p-4 pl-8 text-slate-500 dark:text-slate-400 hidden lg:block">
|
<td class="p-4 pl-8 text-slate-500 dark:text-slate-400 hidden lg:block">Name</td>
|
||||||
Name
|
|
||||||
</td>
|
|
||||||
<td data-label="Description">
|
<td data-label="Description">
|
||||||
{{ role.description }}
|
{{ role.description }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="
|
<td class="p-4 pl-8 text-slate-500 dark:text-slate-400 hidden lg:block">Created</td>
|
||||||
p-4
|
|
||||||
pl-8
|
|
||||||
text-slate-500
|
|
||||||
dark:text-slate-400
|
|
||||||
hidden
|
|
||||||
lg:block
|
|
||||||
">
|
|
||||||
Created
|
|
||||||
</td>
|
|
||||||
<td data-label="Created">
|
<td data-label="Created">
|
||||||
<!-- {{ new Date(role.created_at).toLocaleString() }} -->
|
<!-- {{ new Date(role.created_at).toLocaleString() }} -->
|
||||||
{{ role.created_at }}
|
{{ role.created_at }}
|
||||||
|
|
|
@ -40,12 +40,17 @@ const submit = async () => {
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<LayoutAuthenticated>
|
<LayoutAuthenticated>
|
||||||
|
|
||||||
<Head title="Add user" />
|
<Head title="Add user" />
|
||||||
<SectionMain>
|
<SectionMain>
|
||||||
<SectionTitleLineWithButton :icon="mdiAccountKey" title="Add user" main>
|
<SectionTitleLineWithButton :icon="mdiAccountKey" title="Add user" main>
|
||||||
<BaseButton :route-name="stardust.route('user.index')" :icon="mdiArrowLeftBoldOutline" label="Back"
|
<BaseButton
|
||||||
color="modern" rounded-full small />
|
:route-name="stardust.route('user.index')"
|
||||||
|
:icon="mdiArrowLeftBoldOutline"
|
||||||
|
label="Back"
|
||||||
|
color="modern"
|
||||||
|
rounded-full
|
||||||
|
small
|
||||||
|
/>
|
||||||
</SectionTitleLineWithButton>
|
</SectionTitleLineWithButton>
|
||||||
<!-- @submit.prevent="form.post(stardust.route('user.store'))" -->
|
<!-- @submit.prevent="form.post(stardust.route('user.store'))" -->
|
||||||
<CardBox form @submit.prevent="submit()">
|
<CardBox form @submit.prevent="submit()">
|
||||||
|
@ -68,8 +73,7 @@ const submit = async () => {
|
||||||
</FormField>
|
</FormField>
|
||||||
|
|
||||||
<FormField label="Password" :class="{ 'text-red-400': errors.password }">
|
<FormField label="Password" :class="{ 'text-red-400': errors.password }">
|
||||||
<FormControl v-model="form.password" type="password" placeholder="Enter Password"
|
<FormControl v-model="form.password" type="password" placeholder="Enter Password" :errors="errors.password">
|
||||||
:errors="errors.password">
|
|
||||||
<div class="text-red-400 text-sm" v-if="errors.password && Array.isArray(errors.password)">
|
<div class="text-red-400 text-sm" v-if="errors.password && Array.isArray(errors.password)">
|
||||||
<!-- {{ errors.password }} -->
|
<!-- {{ errors.password }} -->
|
||||||
{{ errors.password.join(', ') }}
|
{{ errors.password.join(', ') }}
|
||||||
|
@ -78,10 +82,16 @@ const submit = async () => {
|
||||||
</FormField>
|
</FormField>
|
||||||
|
|
||||||
<FormField label="Password Confirmation" :class="{ 'text-red-400': errors.password_confirmation }">
|
<FormField label="Password Confirmation" :class="{ 'text-red-400': errors.password_confirmation }">
|
||||||
<FormControl v-model="form.password_confirmation" type="password"
|
<FormControl
|
||||||
placeholder="Enter Password Confirmation" :errors="errors.password">
|
v-model="form.password_confirmation"
|
||||||
<div class="text-red-400 text-sm"
|
type="password"
|
||||||
v-if="errors.password_confirmation && Array.isArray(errors.password_confirmation)">
|
placeholder="Enter Password Confirmation"
|
||||||
|
:errors="errors.password"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="text-red-400 text-sm"
|
||||||
|
v-if="errors.password_confirmation && Array.isArray(errors.password_confirmation)"
|
||||||
|
>
|
||||||
<!-- {{ errors.password_confirmation }} -->
|
<!-- {{ errors.password_confirmation }} -->
|
||||||
{{ errors.password_confirmation.join(', ') }}
|
{{ errors.password_confirmation.join(', ') }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -100,8 +110,13 @@ const submit = async () => {
|
||||||
|
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<BaseButtons>
|
<BaseButtons>
|
||||||
<BaseButton type="submit" color="info" label="Submit" :class="{ 'opacity-25': form.processing }"
|
<BaseButton
|
||||||
:disabled="form.processing" />
|
type="submit"
|
||||||
|
color="info"
|
||||||
|
label="Submit"
|
||||||
|
:class="{ 'opacity-25': form.processing }"
|
||||||
|
:disabled="form.processing"
|
||||||
|
/>
|
||||||
</BaseButtons>
|
</BaseButtons>
|
||||||
</template>
|
</template>
|
||||||
</CardBox>
|
</CardBox>
|
||||||
|
|
|
@ -1,19 +1,16 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { Head, useForm, router } from "@inertiajs/vue3"
|
import { Head, useForm, router } from '@inertiajs/vue3';
|
||||||
import {
|
import { mdiAccountKey, mdiArrowLeftBoldOutline } from '@mdi/js';
|
||||||
mdiAccountKey,
|
import LayoutAuthenticated from '@/Layouts/LayoutAuthenticated.vue';
|
||||||
mdiArrowLeftBoldOutline
|
import SectionMain from '@/Components/SectionMain.vue';
|
||||||
} from "@mdi/js"
|
import SectionTitleLineWithButton from '@/Components/SectionTitleLineWithButton.vue';
|
||||||
import LayoutAuthenticated from "@/Layouts/LayoutAuthenticated.vue"
|
import CardBox from '@/Components/CardBox.vue';
|
||||||
import SectionMain from "@/Components/SectionMain.vue"
|
import FormField from '@/Components/FormField.vue';
|
||||||
import SectionTitleLineWithButton from "@/Components/SectionTitleLineWithButton.vue"
|
import FormControl from '@/Components/FormControl.vue';
|
||||||
import CardBox from "@/Components/CardBox.vue"
|
import FormCheckRadioGroup from '@/Components/FormCheckRadioGroup.vue';
|
||||||
import FormField from '@/Components/FormField.vue'
|
import BaseDivider from '@/Components/BaseDivider.vue';
|
||||||
import FormControl from '@/Components/FormControl.vue'
|
import BaseButton from '@/Components/BaseButton.vue';
|
||||||
import FormCheckRadioGroup from '@/Components/FormCheckRadioGroup.vue'
|
import BaseButtons from '@/Components/BaseButtons.vue';
|
||||||
import BaseDivider from '@/Components/BaseDivider.vue'
|
|
||||||
import BaseButton from '@/Components/BaseButton.vue'
|
|
||||||
import BaseButtons from '@/Components/BaseButtons.vue'
|
|
||||||
import { stardust } from '@eidellev/adonis-stardust/client';
|
import { stardust } from '@eidellev/adonis-stardust/client';
|
||||||
// import { Inertia } from '@inertiajs/inertia';
|
// import { Inertia } from '@inertiajs/inertia';
|
||||||
|
|
||||||
|
@ -34,7 +31,7 @@ const props = defineProps({
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => ({}),
|
default: () => ({}),
|
||||||
},
|
},
|
||||||
})
|
});
|
||||||
|
|
||||||
const form = useForm({
|
const form = useForm({
|
||||||
_method: 'put',
|
_method: 'put',
|
||||||
|
@ -43,7 +40,7 @@ const form = useForm({
|
||||||
password: '',
|
password: '',
|
||||||
password_confirmation: '',
|
password_confirmation: '',
|
||||||
roles: props.userHasRoles, // fill actual user roles from db
|
roles: props.userHasRoles, // fill actual user roles from db
|
||||||
})
|
});
|
||||||
|
|
||||||
const submit = async () => {
|
const submit = async () => {
|
||||||
// await Inertia.post(stardust.route('user.store'), form);
|
// await Inertia.post(stardust.route('user.store'), form);
|
||||||
|
@ -53,16 +50,20 @@ const submit = async () => {
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<LayoutAuthenticated>
|
<LayoutAuthenticated>
|
||||||
|
|
||||||
<Head title="Update user" />
|
<Head title="Update user" />
|
||||||
<SectionMain>
|
<SectionMain>
|
||||||
<SectionTitleLineWithButton :icon="mdiAccountKey" title="Update user" main>
|
<SectionTitleLineWithButton :icon="mdiAccountKey" title="Update user" main>
|
||||||
<BaseButton :route-name="stardust.route('user.index')" :icon="mdiArrowLeftBoldOutline" label="Back"
|
<BaseButton
|
||||||
color="white" rounded-full small />
|
:route-name="stardust.route('user.index')"
|
||||||
|
:icon="mdiArrowLeftBoldOutline"
|
||||||
|
label="Back"
|
||||||
|
color="white"
|
||||||
|
rounded-full
|
||||||
|
small
|
||||||
|
/>
|
||||||
</SectionTitleLineWithButton>
|
</SectionTitleLineWithButton>
|
||||||
<!-- <CardBox form @submit.prevent="form.put(stardust.route('user.update', [props.user.id]))"> -->
|
<!-- <CardBox form @submit.prevent="form.put(stardust.route('user.update', [props.user.id]))"> -->
|
||||||
<CardBox form @submit.prevent="submit()">
|
<CardBox form @submit.prevent="submit()">
|
||||||
|
|
||||||
<FormField label="Enter Login" :class="{ 'text-red-400': errors.name }">
|
<FormField label="Enter Login" :class="{ 'text-red-400': errors.name }">
|
||||||
<FormControl v-model="form.login" type="text" placeholder="Name" :errors="errors.login">
|
<FormControl v-model="form.login" type="text" placeholder="Name" :errors="errors.login">
|
||||||
<div class="text-red-400 text-sm" v-if="errors.login">
|
<div class="text-red-400 text-sm" v-if="errors.login">
|
||||||
|
@ -88,9 +89,16 @@ const submit = async () => {
|
||||||
</FormField>
|
</FormField>
|
||||||
|
|
||||||
<FormField label="Password Confirmation" :class="{ 'text-red-400': errors.password_confirmation }">
|
<FormField label="Password Confirmation" :class="{ 'text-red-400': errors.password_confirmation }">
|
||||||
<FormControl v-model="form.password_confirmation" type="password" placeholder="Enter Password Confirmation"
|
<FormControl
|
||||||
:errors="errors.password">
|
v-model="form.password_confirmation"
|
||||||
<div class="text-red-400 text-sm" v-if="errors.password_confirmation && Array.isArray(errors.password_confirmation)">
|
type="password"
|
||||||
|
placeholder="Enter Password Confirmation"
|
||||||
|
:errors="errors.password"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="text-red-400 text-sm"
|
||||||
|
v-if="errors.password_confirmation && Array.isArray(errors.password_confirmation)"
|
||||||
|
>
|
||||||
{{ errors.password_confirmation.join(', ') }}
|
{{ errors.password_confirmation.join(', ') }}
|
||||||
</div>
|
</div>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
|
@ -108,8 +116,13 @@ const submit = async () => {
|
||||||
|
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<BaseButtons>
|
<BaseButtons>
|
||||||
<BaseButton type="submit" color="info" label="Submit" :class="{ 'opacity-25': form.processing }"
|
<BaseButton
|
||||||
:disabled="form.processing" />
|
type="submit"
|
||||||
|
color="info"
|
||||||
|
label="Submit"
|
||||||
|
:class="{ 'opacity-25': form.processing }"
|
||||||
|
:disabled="form.processing"
|
||||||
|
/>
|
||||||
</BaseButtons>
|
</BaseButtons>
|
||||||
</template>
|
</template>
|
||||||
</CardBox>
|
</CardBox>
|
||||||
|
|
|
@ -2,13 +2,7 @@
|
||||||
// import { Head, Link, useForm, usePage } from '@inertiajs/inertia-vue3';
|
// import { Head, Link, useForm, usePage } from '@inertiajs/inertia-vue3';
|
||||||
import { Head, Link, useForm, usePage } from '@inertiajs/vue3';
|
import { Head, Link, useForm, usePage } from '@inertiajs/vue3';
|
||||||
import { ComputedRef } from 'vue';
|
import { ComputedRef } from 'vue';
|
||||||
import {
|
import { mdiAccountKey, mdiPlus, mdiSquareEditOutline, mdiTrashCan, mdiAlertBoxOutline } from '@mdi/js';
|
||||||
mdiAccountKey,
|
|
||||||
mdiPlus,
|
|
||||||
mdiSquareEditOutline,
|
|
||||||
mdiTrashCan,
|
|
||||||
mdiAlertBoxOutline,
|
|
||||||
} from '@mdi/js';
|
|
||||||
import { computed } from 'vue';
|
import { computed } from 'vue';
|
||||||
import LayoutAuthenticated from '@/Layouts/LayoutAuthenticated.vue';
|
import LayoutAuthenticated from '@/Layouts/LayoutAuthenticated.vue';
|
||||||
import SectionMain from '@/Components/SectionMain.vue';
|
import SectionMain from '@/Components/SectionMain.vue';
|
||||||
|
@ -62,19 +56,23 @@ const destroy = async (id) => {
|
||||||
if (confirm('Are you sure you want to delete?')) {
|
if (confirm('Are you sure you want to delete?')) {
|
||||||
await formDelete.delete(stardust.route('user.destroy', [id]));
|
await formDelete.delete(stardust.route('user.destroy', [id]));
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<LayoutAuthenticated>
|
<LayoutAuthenticated>
|
||||||
|
|
||||||
<Head title="Users" />
|
<Head title="Users" />
|
||||||
<SectionMain>
|
<SectionMain>
|
||||||
<SectionTitleLineWithButton :icon="mdiAccountKey" title="Tethys Users" main>
|
<SectionTitleLineWithButton :icon="mdiAccountKey" title="Tethys Users" main>
|
||||||
<BaseButton v-if="can.create" :route-name="stardust.route('user.create')" :icon="mdiPlus" label="Add"
|
<BaseButton
|
||||||
color="modern" rounded-full small />
|
v-if="can.create"
|
||||||
|
:route-name="stardust.route('user.create')"
|
||||||
|
:icon="mdiPlus"
|
||||||
|
label="Add"
|
||||||
|
color="modern"
|
||||||
|
rounded-full
|
||||||
|
small
|
||||||
|
/>
|
||||||
</SectionTitleLineWithButton>
|
</SectionTitleLineWithButton>
|
||||||
<!-- <label>{{ form.search }}</label> -->
|
<!-- <label>{{ form.search }}</label> -->
|
||||||
<NotificationBar v-if="flash.message" color="success" :icon="mdiAlertBoxOutline">
|
<NotificationBar v-if="flash.message" color="success" :icon="mdiAlertBoxOutline">
|
||||||
|
@ -85,11 +83,13 @@ const destroy = async (id) => {
|
||||||
<form @submit.prevent="form.get(stardust.route('user.index'))">
|
<form @submit.prevent="form.get(stardust.route('user.index'))">
|
||||||
<div class="py-2 flex">
|
<div class="py-2 flex">
|
||||||
<div class="flex pl-4">
|
<div class="flex pl-4">
|
||||||
<input type="search" v-model="form.search"
|
<input
|
||||||
|
type="search"
|
||||||
|
v-model="form.search"
|
||||||
class="rounded-md shadow-sm border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50"
|
class="rounded-md shadow-sm border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50"
|
||||||
placeholder="Search" />
|
placeholder="Search"
|
||||||
<BaseButton label="Search" type="submit" color="modern"
|
/>
|
||||||
class="ml-4 inline-flex items-center px-4 py-2" />
|
<BaseButton label="Search" type="submit" color="modern" class="ml-4 inline-flex items-center px-4 py-2" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -112,8 +112,10 @@ const destroy = async (id) => {
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr v-for="user in users.data" :key="user.id">
|
<tr v-for="user in users.data" :key="user.id">
|
||||||
<td data-label="Login">
|
<td data-label="Login">
|
||||||
<Link v-bind:href="stardust.route('user.show', [user.id])"
|
<Link
|
||||||
class="no-underline hover:underline text-cyan-600 dark:text-cyan-400">
|
v-bind:href="stardust.route('user.show', [user.id])"
|
||||||
|
class="no-underline hover:underline text-cyan-600 dark:text-cyan-400"
|
||||||
|
>
|
||||||
{{ user.login }}
|
{{ user.login }}
|
||||||
</Link>
|
</Link>
|
||||||
<!-- {{ user.id }} -->
|
<!-- {{ user.id }} -->
|
||||||
|
@ -130,13 +132,7 @@ const destroy = async (id) => {
|
||||||
:icon="mdiSquareEditOutline"
|
:icon="mdiSquareEditOutline"
|
||||||
small
|
small
|
||||||
/>
|
/>
|
||||||
<BaseButton
|
<BaseButton v-if="can.delete" color="danger" :icon="mdiTrashCan" small @click="destroy(user.id)" />
|
||||||
v-if="can.delete"
|
|
||||||
color="danger"
|
|
||||||
:icon="mdiTrashCan"
|
|
||||||
small
|
|
||||||
@click="destroy(user.id)"
|
|
||||||
/>
|
|
||||||
</BaseButtons>
|
</BaseButtons>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -54,7 +54,7 @@ export default {
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Component, Vue, Prop } from 'vue-facing-decorator';
|
import { Component, Vue, Prop } from 'vue-facing-decorator';
|
||||||
import type User from "App/Models/User";
|
import type User from 'App/Models/User';
|
||||||
import { Link } from '@inertiajs/vue3';
|
import { Link } from '@inertiajs/vue3';
|
||||||
import DefaultLayout from '@/Layouts/Default.vue';
|
import DefaultLayout from '@/Layouts/Default.vue';
|
||||||
// import { NInput, NButton } from 'naive-ui';
|
// import { NInput, NButton } from 'naive-ui';
|
||||||
|
@ -74,13 +74,13 @@ export default class AppComponent extends Vue {
|
||||||
// Component Property
|
// Component Property
|
||||||
@Prop({
|
@Prop({
|
||||||
type: String,
|
type: String,
|
||||||
default: () => (""),
|
default: () => '',
|
||||||
})
|
})
|
||||||
testing: string;
|
testing: string;
|
||||||
|
|
||||||
@Prop({
|
@Prop({
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => ([]),
|
default: () => [],
|
||||||
})
|
})
|
||||||
users: Array<User>;
|
users: Array<User>;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,12 +32,11 @@ import FormControl from '@/Components/FormControl.vue';
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<LayoutGuest>
|
<LayoutGuest>
|
||||||
|
|
||||||
<Head title="Login" />
|
<Head title="Login" />
|
||||||
|
|
||||||
<SectionFullScreen v-slot="{ cardClass }">
|
<SectionFullScreen v-slot="{ cardClass }">
|
||||||
<a class="text-2xl font-semibold flex justify-center items-center mb-8 lg:mb-10">
|
<a class="text-2xl font-semibold flex justify-center items-center mb-8 lg:mb-10">
|
||||||
<img src="/logo.svg" class="h-10 mr-4" alt="Windster Logo">
|
<img src="/logo.svg" class="h-10 mr-4" alt="Windster Logo" />
|
||||||
<!-- <span class="self-center text-2xl font-bold whitespace-nowrap">Tethys</span> -->
|
<!-- <span class="self-center text-2xl font-bold whitespace-nowrap">Tethys</span> -->
|
||||||
</a>
|
</a>
|
||||||
<!-- Card -->
|
<!-- Card -->
|
||||||
|
@ -49,13 +48,18 @@ import FormControl from '@/Components/FormControl.vue';
|
||||||
</NotificationBarInCard>
|
</NotificationBarInCard>
|
||||||
|
|
||||||
<FormField label="Email" label-for="email" help="Please enter your email">
|
<FormField label="Email" label-for="email" help="Please enter your email">
|
||||||
<FormControl v-model="form.email" :icon="mdiAccount" id="email" autocomplete="email" type="email"
|
<FormControl v-model="form.email" :icon="mdiAccount" id="email" autocomplete="email" type="email" required />
|
||||||
required />
|
|
||||||
</FormField>
|
</FormField>
|
||||||
|
|
||||||
<FormField label="Password" label-for="password" help="Please enter your password">
|
<FormField label="Password" label-for="password" help="Please enter your password">
|
||||||
<FormControl v-model="form.password" :icon="mdiAsterisk" type="password" id="password"
|
<FormControl
|
||||||
autocomplete="current-password" required />
|
v-model="form.password"
|
||||||
|
:icon="mdiAsterisk"
|
||||||
|
type="password"
|
||||||
|
id="password"
|
||||||
|
autocomplete="current-password"
|
||||||
|
required
|
||||||
|
/>
|
||||||
</FormField>
|
</FormField>
|
||||||
|
|
||||||
<FormCheckRadioGroup v-model="form.remember" name="remember" :options="{ remember: 'Remember' }" />
|
<FormCheckRadioGroup v-model="form.remember" name="remember" :options="{ remember: 'Remember' }" />
|
||||||
|
@ -78,8 +82,12 @@ import FormControl from '@/Components/FormControl.vue';
|
||||||
<BaseButtons>
|
<BaseButtons>
|
||||||
<!-- <BaseButton type="submit" color="info" label="Login" :class="{ 'opacity-25': form.processing }"
|
<!-- <BaseButton type="submit" color="info" label="Login" :class="{ 'opacity-25': form.processing }"
|
||||||
v-bind:disabled="form.processing" /> -->
|
v-bind:disabled="form.processing" /> -->
|
||||||
<button type="submit" v-bind:disabled="form.processing" :class="{ 'opacity-25': form.processing }"
|
<button
|
||||||
class="text-white bg-cyan-600 hover:bg-cyan-700 focus:ring-4 focus:ring-cyan-200 font-medium rounded-lg text-base px-5 py-3 w-full sm:w-auto text-center">
|
type="submit"
|
||||||
|
v-bind:disabled="form.processing"
|
||||||
|
:class="{ 'opacity-25': form.processing }"
|
||||||
|
class="text-white bg-cyan-600 hover:bg-cyan-700 focus:ring-4 focus:ring-cyan-200 font-medium rounded-lg text-base px-5 py-3 w-full sm:w-auto text-center"
|
||||||
|
>
|
||||||
Login to your account
|
Login to your account
|
||||||
</button>
|
</button>
|
||||||
<!-- <BaseButton v-if="canResetPassword" :route-name="route('password.request')" color="info" outline
|
<!-- <BaseButton v-if="canResetPassword" :route-name="route('password.request')" color="info" outline
|
||||||
|
|
|
@ -23,7 +23,7 @@ import { useForm } from '@inertiajs/vue3';
|
||||||
import { Inertia } from '@inertiajs/inertia';
|
import { Inertia } from '@inertiajs/inertia';
|
||||||
// import { NButton, NInput } from 'naive-ui';
|
// import { NButton, NInput } from 'naive-ui';
|
||||||
// import { useForm } from '@inertiajs/inertia-vue3'
|
// import { useForm } from '@inertiajs/inertia-vue3'
|
||||||
import FormInput from '@/Components/FormInput.vue'
|
import FormInput from '@/Components/FormInput.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
layout: AuthLayout,
|
layout: AuthLayout,
|
||||||
|
@ -31,7 +31,7 @@ export default {
|
||||||
components: {
|
components: {
|
||||||
NButton,
|
NButton,
|
||||||
// NInput,
|
// NInput,
|
||||||
FormInput
|
FormInput,
|
||||||
},
|
},
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
|
|
@ -58,44 +58,81 @@ const datasets = computed(() => mainService.datasets);
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<LayoutAuthenticated>
|
<LayoutAuthenticated>
|
||||||
|
|
||||||
<Head title="Dashboard" />
|
<Head title="Dashboard" />
|
||||||
|
|
||||||
<!-- <section class="p-6" v-bind:class="containerMaxW"> -->
|
<!-- <section class="p-6" v-bind:class="containerMaxW"> -->
|
||||||
<SectionMain>
|
<SectionMain>
|
||||||
<SectionTitleLineWithButton v-bind:icon="mdiChartTimelineVariant" title="Overview" main>
|
<SectionTitleLineWithButton v-bind:icon="mdiChartTimelineVariant" title="Overview" main>
|
||||||
<BaseButton href="https://gitea.geologie.ac.at/geolba/tethys" target="_blank" :icon="mdiGithub"
|
<BaseButton
|
||||||
label="Star on Gitea" color="contrast" rounded-full small />
|
href="https://gitea.geologie.ac.at/geolba/tethys"
|
||||||
|
target="_blank"
|
||||||
|
:icon="mdiGithub"
|
||||||
|
label="Star on Gitea"
|
||||||
|
color="contrast"
|
||||||
|
rounded-full
|
||||||
|
small
|
||||||
|
/>
|
||||||
</SectionTitleLineWithButton>
|
</SectionTitleLineWithButton>
|
||||||
|
|
||||||
<div class="grid grid-cols-1 gap-6 lg:grid-cols-3 mb-6">
|
<div class="grid grid-cols-1 gap-6 lg:grid-cols-3 mb-6">
|
||||||
<CardBoxWidget trend="12%" trend-type="up" color="text-emerald-500" :icon="mdiAccountMultiple"
|
<CardBoxWidget
|
||||||
:number="authors.length" label="Authors" />
|
trend="12%"
|
||||||
<CardBoxWidget trend="193" trend-type="info" color="text-blue-500" :icon="mdiDatabaseOutline"
|
trend-type="up"
|
||||||
:number="datasets.length" label="Publications" />
|
color="text-emerald-500"
|
||||||
|
:icon="mdiAccountMultiple"
|
||||||
|
:number="authors.length"
|
||||||
|
label="Authors"
|
||||||
|
/>
|
||||||
|
<CardBoxWidget
|
||||||
|
trend="193"
|
||||||
|
trend-type="info"
|
||||||
|
color="text-blue-500"
|
||||||
|
:icon="mdiDatabaseOutline"
|
||||||
|
:number="datasets.length"
|
||||||
|
label="Publications"
|
||||||
|
/>
|
||||||
<!-- <CardBoxWidget trend="193" trend-type="info" color="text-blue-500" :icon="mdiCartOutline" :number="datasets.length"
|
<!-- <CardBoxWidget trend="193" trend-type="info" color="text-blue-500" :icon="mdiCartOutline" :number="datasets.length"
|
||||||
prefix="$" label="Publications" /> -->
|
prefix="$" label="Publications" /> -->
|
||||||
<CardBoxWidget trend="Overflow" trend-type="alert" color="text-red-500" :icon="mdiChartTimelineVariant"
|
<CardBoxWidget
|
||||||
:number="256" suffix="%" label="Performance" />
|
trend="Overflow"
|
||||||
|
trend-type="alert"
|
||||||
|
color="text-red-500"
|
||||||
|
:icon="mdiChartTimelineVariant"
|
||||||
|
:number="256"
|
||||||
|
suffix="%"
|
||||||
|
label="Performance"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
|
||||||
<div class="flex flex-col justify-between">
|
<div class="flex flex-col justify-between">
|
||||||
<CardBoxClient v-for="client in authorBarItems" :key="client.id" :name="client.name"
|
<CardBoxClient
|
||||||
:email="client.email" :date="client.created_at" :text="client.datasetCount" />
|
v-for="client in authorBarItems"
|
||||||
|
:key="client.id"
|
||||||
|
:name="client.name"
|
||||||
|
:email="client.email"
|
||||||
|
:date="client.created_at"
|
||||||
|
:text="client.datasetCount"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col justify-between">
|
<div class="flex flex-col justify-between">
|
||||||
<CardBoxTransaction v-for="(transaction, index) in transactionBarItems" :key="index"
|
<CardBoxTransaction
|
||||||
:amount="transaction.amount" :date="transaction.date" :business="transaction.business"
|
v-for="(transaction, index) in transactionBarItems"
|
||||||
:type="transaction.type" :name="transaction.name" :account="transaction.account" />
|
:key="index"
|
||||||
|
:amount="transaction.amount"
|
||||||
|
:date="transaction.date"
|
||||||
|
:business="transaction.business"
|
||||||
|
:type="transaction.type"
|
||||||
|
:name="transaction.name"
|
||||||
|
:account="transaction.account"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<SectionBannerStarOnGitHub />
|
<SectionBannerStarOnGitHub />
|
||||||
|
|
||||||
<SectionTitleLineWithButton :icon="mdiChartPie" title="Trends overview (to do publications per year)" />
|
<SectionTitleLineWithButton :icon="mdiChartPie" title="Trends overview (to do publications per year)" />
|
||||||
<CardBox title="Performance" :icon="mdiFinance" :header-icon="mdiReload" class="mb-6"
|
<CardBox title="Performance" :icon="mdiFinance" :header-icon="mdiReload" class="mb-6" @header-icon-click="fillChartData">
|
||||||
@header-icon-click="fillChartData">
|
|
||||||
<div v-if="chartData">
|
<div v-if="chartData">
|
||||||
<line-chart :data="chartData" class="h-96" />
|
<line-chart :data="chartData" class="h-96" />
|
||||||
</div>
|
</div>
|
||||||
|
@ -103,9 +140,7 @@ const datasets = computed(() => mainService.datasets);
|
||||||
|
|
||||||
<SectionTitleLineWithButton :icon="mdiAccountMultiple" title="Submitters (to do)" />
|
<SectionTitleLineWithButton :icon="mdiAccountMultiple" title="Submitters (to do)" />
|
||||||
|
|
||||||
<NotificationBar color="info" :icon="mdiMonitorCellphone">
|
<NotificationBar color="info" :icon="mdiMonitorCellphone"> <b>Responsive table.</b> Collapses on mobile </NotificationBar>
|
||||||
<b>Responsive table.</b> Collapses on mobile
|
|
||||||
</NotificationBar>
|
|
||||||
|
|
||||||
<CardBox :icon="mdiMonitorCellphone" title="Responsive table" has-table>
|
<CardBox :icon="mdiMonitorCellphone" title="Responsive table" has-table>
|
||||||
<TableSampleClients />
|
<TableSampleClients />
|
||||||
|
@ -113,32 +148,23 @@ const datasets = computed(() => mainService.datasets);
|
||||||
|
|
||||||
<CardBox>
|
<CardBox>
|
||||||
<p class="mb-3 text-gray-500 dark:text-gray-400">
|
<p class="mb-3 text-gray-500 dark:text-gray-400">
|
||||||
Discover the power of Tethys, the cutting-edge web backend solution that revolutionizes the way you
|
Discover the power of Tethys, the cutting-edge web backend solution that revolutionizes the way you handle research
|
||||||
handle
|
data. At the heart of Tethys lies our meticulously developed research data repository, which leverages state-of-the-art
|
||||||
research data. At the heart of Tethys lies our meticulously developed research data repository, which
|
CI/CD techniques to deliver a seamless and efficient experience.
|
||||||
leverages state-of-the-art CI/CD techniques to deliver a seamless and efficient experience.
|
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-3 text-gray-500 dark:text-gray-400">
|
<p class="mb-3 text-gray-500 dark:text-gray-400">
|
||||||
CI/CD, or Continuous Integration and Continuous Deployment, is a modern software development approach
|
CI/CD, or Continuous Integration and Continuous Deployment, is a modern software development approach that ensures your
|
||||||
that
|
code undergoes automated testing, continuous integration, and frequent deployment. By embracing CI/CD techniques, we
|
||||||
ensures your code undergoes automated testing, continuous integration, and frequent deployment. By
|
ensure that every code change in our research data repository is thoroughly validated, enhancing reliability and
|
||||||
embracing
|
accelerating development cycles.
|
||||||
CI/CD techniques, we ensure that every code change in our research data repository is thoroughly
|
|
||||||
validated,
|
|
||||||
enhancing reliability and accelerating development cycles.
|
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-3 text-gray-500 dark:text-gray-400">
|
<p class="mb-3 text-gray-500 dark:text-gray-400">
|
||||||
With Tethys, you can say goodbye to the complexities of manual deployments and embrace a streamlined
|
With Tethys, you can say goodbye to the complexities of manual deployments and embrace a streamlined process that
|
||||||
process
|
eliminates errors and minimizes downtime. Our CI/CD pipeline automatically verifies each code commit, runs comprehensive
|
||||||
that eliminates errors and minimizes downtime. Our CI/CD pipeline automatically verifies each code
|
tests, and deploys the repository seamlessly, ensuring that your research data is always up-to-date and accessible.
|
||||||
commit,
|
|
||||||
runs comprehensive tests, and deploys the repository seamlessly, ensuring that your research data is
|
|
||||||
always
|
|
||||||
up-to-date and accessible.
|
|
||||||
</p>
|
</p>
|
||||||
</CardBox>
|
</CardBox>
|
||||||
</SectionMain>
|
</SectionMain>
|
||||||
<!-- </section> -->
|
<!-- </section> -->
|
||||||
|
|
||||||
</LayoutAuthenticated>
|
</LayoutAuthenticated>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,116 +1,42 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { Head } from '@inertiajs/vue3';
|
import { Head } from '@inertiajs/vue3';
|
||||||
import { onMounted, onUnmounted, ref, Ref } from 'vue';
|
import { ref, Ref } from 'vue';
|
||||||
// import { MainService } from '@/Stores/main';;
|
import { mdiChartTimelineVariant } from '@mdi/js';
|
||||||
import {
|
|
||||||
mdiChartTimelineVariant
|
|
||||||
} from '@mdi/js';
|
|
||||||
import LayoutGuest from '@/Layouts/LayoutGuest.vue';
|
import LayoutGuest from '@/Layouts/LayoutGuest.vue';
|
||||||
import SectionMain from '@/Components/SectionMain.vue';
|
import SectionMain from '@/Components/SectionMain.vue';
|
||||||
// import CardBox from '@/Components/CardBox.vue';
|
|
||||||
import BaseButton from '@/Components/BaseButton.vue';
|
import BaseButton from '@/Components/BaseButton.vue';
|
||||||
|
|
||||||
import SectionTitleLineWithButton from '@/Components/SectionTitleLineWithButton.vue';
|
import SectionTitleLineWithButton from '@/Components/SectionTitleLineWithButton.vue';
|
||||||
// import SectionBannerStarOnGitHub from '@/Components/SectionBannerStarOnGitea.vue';
|
|
||||||
import { Map } from 'leaflet/src/map/index';
|
|
||||||
import { Rectangle } from 'leaflet';
|
|
||||||
import { canvas } from 'leaflet/src/layer/vector/Canvas';
|
|
||||||
import { svg } from 'leaflet/src/layer/vector/SVG';
|
|
||||||
import { MapOptions } from '@/Components/Map/MapOptions';
|
import { MapOptions } from '@/Components/Map/MapOptions';
|
||||||
import axios from 'axios';
|
|
||||||
import { LatLngBoundsExpression } from 'leaflet/src/geo/LatLngBounds';
|
|
||||||
import { tileLayerWMS } from 'leaflet/src/layer/tile/TileLayer.WMS';
|
|
||||||
import { Attribution } from 'leaflet/src/control/Control.Attribution';
|
|
||||||
import { stardust } from '@eidellev/adonis-stardust/client';
|
import { stardust } from '@eidellev/adonis-stardust/client';
|
||||||
import DrawControlComponent from '@/Components/Map/draw.component.vue';
|
import SearchMap from '@/Components/Map/SearchMap.vue';
|
||||||
import { MapService } from '@/Stores/map.service';
|
|
||||||
import { LayerGroup } from 'leaflet/src/layer/LayerGroup'
|
|
||||||
import { OpensearchDocument } from '@/Dataset';
|
import { OpensearchDocument } from '@/Dataset';
|
||||||
|
|
||||||
Map.include({
|
// const fitBounds: LatLngBoundsExpression = [
|
||||||
// @namespace Map; @method getRenderer(layer: Path): Renderer
|
// [46.4318173285, 9.47996951665],
|
||||||
// Returns the instance of `Renderer` that should be used to render the given
|
// [49.0390742051, 16.9796667823],
|
||||||
// `Path`. It will ensure that the `renderer` options of the map and paths
|
// ];
|
||||||
// are respected, and that the renderers do exist on the map.
|
|
||||||
getRenderer: function (layer) {
|
|
||||||
// @namespace Path; @option renderer: Renderer
|
|
||||||
// Use this specific instance of `Renderer` for this path. Takes
|
|
||||||
// precedence over the map's [default renderer](#map-renderer).
|
|
||||||
var renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;
|
|
||||||
|
|
||||||
if (!renderer) {
|
// const mapId = 'map';
|
||||||
renderer = this._renderer = this._createRenderer();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this.hasLayer(renderer)) {
|
// const coverage = {
|
||||||
this.addLayer(renderer);
|
// x_min: undefined,
|
||||||
}
|
// y_min: undefined,
|
||||||
return renderer;
|
// x_max: undefined,
|
||||||
},
|
// y_max: undefined,
|
||||||
|
// elevation_min: undefined,
|
||||||
|
// elevation_max: undefined,
|
||||||
|
// elevation_absolut: undefined,
|
||||||
|
// depth_min: undefined,
|
||||||
|
// depth_max: undefined,
|
||||||
|
// depth_absolut: undefined,
|
||||||
|
// time_min: undefined,
|
||||||
|
// time_max: undefined,
|
||||||
|
// time_absolut: undefined,
|
||||||
|
// };
|
||||||
|
|
||||||
_getPaneRenderer: function (name) {
|
|
||||||
if (name === 'overlayPane' || name === undefined) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var renderer = this._paneRenderers[name];
|
|
||||||
if (renderer === undefined) {
|
|
||||||
renderer = this._createRenderer({ pane: name });
|
|
||||||
this._paneRenderers[name] = renderer;
|
|
||||||
}
|
|
||||||
return renderer;
|
|
||||||
},
|
|
||||||
|
|
||||||
_createRenderer: function (options) {
|
|
||||||
// @namespace Map; @option preferCanvas: Boolean = false
|
|
||||||
// Whether `Path`s should be rendered on a `Canvas` renderer.
|
|
||||||
// By default, all `Path`s are rendered in a `SVG` renderer.
|
|
||||||
return (this.options.preferCanvas && canvas(options)) || svg(options);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
const DEFAULT_BASE_LAYER_NAME = 'BaseLayer';
|
|
||||||
const DEFAULT_BASE_LAYER_ATTRIBUTION = '© <a target="_blank" href="http://osm.org/copyright">OpenStreetMap</a> contributors';
|
|
||||||
const OPEN_SEARCH_HOST = 'http://192.168.21.18';
|
|
||||||
let map: Map;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const fitBounds: LatLngBoundsExpression = [
|
|
||||||
[46.4318173285, 9.47996951665],
|
|
||||||
[49.0390742051, 16.9796667823],
|
|
||||||
];
|
|
||||||
|
|
||||||
const mapId = 'map';
|
|
||||||
const draw: Ref<DrawControlComponent | null> = ref(null);
|
|
||||||
const southWest = ref(null);
|
|
||||||
const northEast = ref(null);
|
|
||||||
const mapService = MapService();
|
|
||||||
const coverage = {
|
|
||||||
x_min: undefined,
|
|
||||||
y_min: undefined,
|
|
||||||
x_max: undefined,
|
|
||||||
y_max: undefined,
|
|
||||||
elevation_min: undefined,
|
|
||||||
elevation_max: undefined,
|
|
||||||
elevation_absolut: undefined,
|
|
||||||
depth_min: undefined,
|
|
||||||
depth_max: undefined,
|
|
||||||
depth_absolut: undefined,
|
|
||||||
time_min: undefined,
|
|
||||||
time_max: undefined,
|
|
||||||
time_absolut: undefined,
|
|
||||||
};
|
|
||||||
const filterLayerGroup = new LayerGroup();
|
|
||||||
// Replace with your actual data
|
// Replace with your actual data
|
||||||
const datasets: Ref<OpensearchDocument[]> = ref([]);
|
const datasets: Ref<OpensearchDocument[]> = ref([]);
|
||||||
|
const openAccessLicences: Array<string> = ['CC-BY-4.0', 'CC-BY-SA-4.0'];
|
||||||
onMounted(() => {
|
|
||||||
initMap();
|
|
||||||
});
|
|
||||||
|
|
||||||
onUnmounted(() => {
|
|
||||||
map.off('zoomend zoomlevelschange');
|
|
||||||
});
|
|
||||||
|
|
||||||
const mapOptions: MapOptions = {
|
const mapOptions: MapOptions = {
|
||||||
center: [48.208174, 16.373819],
|
center: [48.208174, 16.373819],
|
||||||
|
@ -118,155 +44,10 @@ const mapOptions: MapOptions = {
|
||||||
zoomControl: false,
|
zoomControl: false,
|
||||||
attributionControl: false,
|
attributionControl: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
const initMap = async () => {
|
|
||||||
// init leaflet map
|
|
||||||
map = new Map('map', mapOptions);
|
|
||||||
mapService.setMap(mapId, map);
|
|
||||||
map.scrollWheelZoom.disable();
|
|
||||||
map.fitBounds(fitBounds);
|
|
||||||
draw.value?.toggleDraw();
|
|
||||||
|
|
||||||
|
|
||||||
map.addLayer(filterLayerGroup);
|
|
||||||
|
|
||||||
const attributionControl = new Attribution().addTo(map);
|
|
||||||
attributionControl.setPrefix(false);
|
|
||||||
|
|
||||||
let osmGgray = tileLayerWMS('https://ows.terrestris.de/osm-gray/service', {
|
|
||||||
format: 'image/png',
|
|
||||||
attribution: DEFAULT_BASE_LAYER_ATTRIBUTION,
|
|
||||||
layers: 'OSM-WMS',
|
|
||||||
});
|
|
||||||
let layerOptions = {
|
|
||||||
label: DEFAULT_BASE_LAYER_NAME,
|
|
||||||
visible: true,
|
|
||||||
layer: osmGgray,
|
|
||||||
};
|
|
||||||
layerOptions.layer.addTo(map);
|
|
||||||
|
|
||||||
map.on('Draw.Event.CREATED', handleDrawEventCreated);
|
|
||||||
|
|
||||||
|
|
||||||
// // const query = {
|
|
||||||
// // query: {
|
|
||||||
// // term: {
|
|
||||||
// // id: "103"
|
|
||||||
// // }
|
|
||||||
// // }
|
|
||||||
// // };
|
|
||||||
// // to do : call extra method:
|
|
||||||
// const query = {
|
|
||||||
// // q: 'id:103'
|
|
||||||
// // q: 'author:"Iglseder, Christoph" OR title:"Datensatz"',
|
|
||||||
// // q: 'author:"Iglseder"',
|
|
||||||
// q: '*',
|
|
||||||
// _source: 'author,bbox_xmin,bbox_xmax,bbox_ymin,bbox_ymax,abstract,title',
|
|
||||||
// size: 1000
|
|
||||||
// // qf:"title^3 author^2 subject^1",
|
|
||||||
// }
|
|
||||||
// try {
|
|
||||||
// let response = await axios({
|
|
||||||
// method: 'GET',
|
|
||||||
// url: OPEN_SEARCH_HOST + '/tethys-records/_search',
|
|
||||||
// headers: { 'Content-Type': 'application/json' },
|
|
||||||
// params: query
|
|
||||||
// });
|
|
||||||
// // Loop through the hits in the response
|
|
||||||
// response.data.hits.hits.forEach(hit => {
|
|
||||||
// // Get the geo_location attribute
|
|
||||||
// // var geo_location = hit._source.geo_location;
|
|
||||||
// let xMin = hit._source.bbox_xmin;
|
|
||||||
// let xMax = hit._source.bbox_xmax;
|
|
||||||
// let yMin = hit._source.bbox_ymin;
|
|
||||||
// let yMax = hit._source.bbox_ymax;
|
|
||||||
// var bbox: LatLngBoundsExpression = [[yMin, xMin], [yMax, xMax]];
|
|
||||||
// // Parse the WKT string to get the bounding box coordinates
|
|
||||||
// // var bbox = wktToBbox(geo_location);
|
|
||||||
|
|
||||||
// // // Add the bounding box to the map as a rectangle
|
|
||||||
// new Rectangle(bbox, { color: "#ff7800", weight: 1 }).addTo(map);
|
|
||||||
// // console.log(hit._source);
|
|
||||||
// });
|
|
||||||
// } catch (error) {
|
|
||||||
// console.error(error);
|
|
||||||
// }
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const handleDrawEventCreated = async (event) => {
|
|
||||||
filterLayerGroup.clearLayers();
|
|
||||||
datasets.value = [];
|
|
||||||
|
|
||||||
let layer = event.layer;
|
|
||||||
let bounds = layer.getBounds();
|
|
||||||
// coverage.x_min = bounds.getSouthWest().lng;
|
|
||||||
// coverage.y_min = bounds.getSouthWest().lat;
|
|
||||||
// coverage.x_max = bounds.getNorthEast().lng;
|
|
||||||
// coverage.y_max = bounds.getNorthEast().lat;
|
|
||||||
|
|
||||||
|
|
||||||
try {
|
|
||||||
let response = await axios({
|
|
||||||
method: 'POST',
|
|
||||||
url: OPEN_SEARCH_HOST + '/tethys-records/_search',
|
|
||||||
headers: { 'Content-Type': 'application/json' },
|
|
||||||
data: {
|
|
||||||
"size": 1000,
|
|
||||||
"query": {
|
|
||||||
"bool": {
|
|
||||||
"must": {
|
|
||||||
"match_all": {}
|
|
||||||
},
|
|
||||||
"filter": {
|
|
||||||
"geo_bounding_box": {
|
|
||||||
"geo_location": { // replace 'location' with your geo-point field name
|
|
||||||
"top_left": {
|
|
||||||
"lat": bounds.getNorthEast().lat,
|
|
||||||
"lon": bounds.getSouthWest().lng
|
|
||||||
},
|
|
||||||
"bottom_right": {
|
|
||||||
"lat": bounds.getSouthWest().lat,
|
|
||||||
"lon": bounds.getNorthEast().lng
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// _source: 'author,bbox_xmin,bbox_xmax,bbox_ymin,bbox_ymax,abstract,title',
|
|
||||||
// "size": 1000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// Loop through the hits in the response
|
|
||||||
response.data.hits.hits.forEach(hit => {
|
|
||||||
// Get the geo_location attribute
|
|
||||||
// var geo_location = hit._source.geo_location;
|
|
||||||
let xMin = hit._source.bbox_xmin;
|
|
||||||
let xMax = hit._source.bbox_xmax;
|
|
||||||
let yMin = hit._source.bbox_ymin;
|
|
||||||
let yMax = hit._source.bbox_ymax;
|
|
||||||
var bbox: LatLngBoundsExpression = [[yMin, xMin], [yMax, xMax]];
|
|
||||||
// Parse the WKT string to get the bounding box coordinates
|
|
||||||
// var bbox = wktToBbox(geo_location);
|
|
||||||
|
|
||||||
// // Add the bounding box to the map as a rectangle
|
|
||||||
let rect = new Rectangle(bbox, { color: "#ff7800", weight: 1 });
|
|
||||||
filterLayerGroup.addLayer(rect);
|
|
||||||
|
|
||||||
datasets.value.push(hit._source);
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<LayoutGuest>
|
<LayoutGuest>
|
||||||
|
|
||||||
<Head title="Map" />
|
<Head title="Map" />
|
||||||
|
|
||||||
<!-- <section class="p-6" v-bind:class="containerMaxW"> -->
|
<!-- <section class="p-6" v-bind:class="containerMaxW"> -->
|
||||||
|
@ -277,36 +58,46 @@ const handleDrawEventCreated = async (event) => {
|
||||||
<BaseButton :route-name="stardust.route('app.login.show')" label="Login" color="white" rounded-full small />
|
<BaseButton :route-name="stardust.route('app.login.show')" label="Login" color="white" rounded-full small />
|
||||||
</SectionTitleLineWithButton>
|
</SectionTitleLineWithButton>
|
||||||
|
|
||||||
|
<!-- <SectionBannerStarOnGitea /> -->
|
||||||
<!-- <SectionBannerStarOnGitHub /> -->
|
|
||||||
|
|
||||||
<!-- <CardBox> -->
|
<!-- <CardBox> -->
|
||||||
<div id="map" class="map-container mapDesktop mt-6 mb-6 rounded-2xl py-12 px-6 text-center">
|
<!-- <div id="map" class="map-container mapDesktop mt-6 mb-6 rounded-2xl py-12 px-6 text-center">
|
||||||
<DrawControlComponent ref="draw" :preserve="false" :mapId="mapId" :southWest="southWest"
|
<DrawControlComponent ref="draw" :preserve="false" :mapId="mapId" :southWest="southWest"
|
||||||
:northEast="northEast">
|
:northEast="northEast">
|
||||||
</DrawControlComponent>
|
</DrawControlComponent>
|
||||||
</div>
|
</div> -->
|
||||||
|
<SearchMap :datasets="datasets" :map-options="mapOptions"></SearchMap>
|
||||||
|
|
||||||
<div d="search-result-list-wrapper" class="flex flex-wrap col-span-24">
|
<div d="search-result-list-wrapper" class="flex flex-wrap col-span-24 h-full">
|
||||||
<div v-for="dataset in datasets" :key="dataset.id" class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4 p-4">
|
<div v-for="dataset in datasets" :key="dataset.id" class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4 p-4">
|
||||||
<div class="bg-white rounded shadow p-6">
|
<div class="bg-white rounded shadow p-6">
|
||||||
<h2 class="text-xl font-bold mb-2">{{ dataset.title_output }}</h2>
|
<h3 class="text-lg leading-tight text-gray-500 dark:text-slate-400">
|
||||||
|
{{ dataset.title_output }}
|
||||||
|
</h3>
|
||||||
|
<!-- <h2 class="text-xl font-bold mb-2">{{ dataset.title_output }}</h2> -->
|
||||||
<p class="text-gray-700 mb-2">{{ dataset.abstract_output }}</p>
|
<p class="text-gray-700 mb-2">{{ dataset.abstract_output }}</p>
|
||||||
<div class="text-sm text-gray-600">
|
<div class="text-sm text-gray-600">
|
||||||
<div v-for="author in dataset.author" :key="author" class="mb-1">{{ author }}</div>
|
<div v-for="author in dataset.author" :key="author" class="mb-1">{{ author }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
<span
|
<span class="inline-block bg-gray-200 rounded-full px-3 py-1 text-sm font-semibold text-gray-700 mr-2 mb-2">
|
||||||
class="inline-block bg-gray-200 rounded-full px-3 py-1 text-sm font-semibold text-gray-700 mr-2 mb-2">{{
|
{{ dataset.year }}
|
||||||
dataset.year }}</span>
|
</span>
|
||||||
<span
|
<span class="inline-block bg-gray-200 rounded-full px-3 py-1 text-sm font-semibold text-gray-700 mr-2 mb-2">
|
||||||
class="inline-block bg-gray-200 rounded-full px-3 py-1 text-sm font-semibold text-gray-700 mr-2 mb-2">{{
|
{{ dataset.language }}
|
||||||
dataset.language }}</span>
|
</span>
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
<span class="label"><i class="fas fa-file"></i> {{ dataset.doctype }}</span>
|
||||||
|
<!-- <span>Licence: {{ document.licence }}</span> -->
|
||||||
|
<span v-if="openAccessLicences.includes(dataset.licence)" class="label titlecase"
|
||||||
|
><i class="fas fa-lock-open"></i> Open Access</span
|
||||||
|
>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
</SectionMain>
|
</SectionMain>
|
||||||
<!-- </section> -->
|
<!-- </section> -->
|
||||||
</LayoutGuest></template>
|
</LayoutGuest>
|
||||||
|
</template>
|
||||||
|
|
|
@ -20,12 +20,11 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import RegisterViewComponent from "@/Pages/register-view/register-view-component";
|
import RegisterViewComponent from '@/Pages/register-view/register-view-component';
|
||||||
// import RegisterViewComponent from "./register-view-component";
|
// import RegisterViewComponent from "./register-view-component";
|
||||||
// const test = RegisterViewComponent;
|
// const test = RegisterViewComponent;
|
||||||
export default RegisterViewComponent;
|
export default RegisterViewComponent;
|
||||||
|
|
||||||
|
|
||||||
// import { Component, Vue, Prop } from "vue-facing-decorator";
|
// import { Component, Vue, Prop } from "vue-facing-decorator";
|
||||||
// import AuthLayout from '@/Layouts/Auth.vue';
|
// import AuthLayout from '@/Layouts/Auth.vue';
|
||||||
// // import { reactive } from 'vue';
|
// // import { reactive } from 'vue';
|
||||||
|
@ -34,8 +33,6 @@ export default RegisterViewComponent;
|
||||||
// import FormInput from '@/Components/FormInput.vue';// @/Components/FormInput.vue'
|
// import FormInput from '@/Components/FormInput.vue';// @/Components/FormInput.vue'
|
||||||
// // import { defineComponent } from 'vue';
|
// // import { defineComponent } from 'vue';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// export default {
|
// export default {
|
||||||
// layout: AuthLayout,
|
// layout: AuthLayout,
|
||||||
|
|
||||||
|
@ -115,10 +112,10 @@ export default RegisterViewComponent;
|
||||||
// await Inertia.post('/app/register', this.form);
|
// await Inertia.post('/app/register', this.form);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// </script>
|
//
|
||||||
|
</script>
|
||||||
|
|
||||||
<!-- <style scoped>
|
<!-- <style scoped>
|
||||||
.greeting {
|
.greeting {
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"extends": "adonis-preset-ts/tsconfig.json",
|
"extends": "adonis-preset-ts/tsconfig.json",
|
||||||
"include": [
|
"include": [
|
||||||
// "**/*",
|
// "**/*",
|
||||||
"**/*",
|
"**/*"
|
||||||
// "./resources/js/**/*"
|
// "./resources/js/**/*"
|
||||||
// "./resources/js/**/*.vue",
|
// "./resources/js/**/*.vue",
|
||||||
// "./resources/js/**/*.ts",
|
// "./resources/js/**/*.ts",
|
||||||
|
@ -30,22 +30,12 @@
|
||||||
"esModuleInterop": true, //neu
|
"esModuleInterop": true, //neu
|
||||||
"allowSyntheticDefaultImports": true, //neu,
|
"allowSyntheticDefaultImports": true, //neu,
|
||||||
"paths": {
|
"paths": {
|
||||||
"App/*": [
|
"App/*": ["./app/*"],
|
||||||
"./app/*"
|
"Config/*": ["./config/*"],
|
||||||
],
|
"Contracts/*": ["./contracts/*"],
|
||||||
"Config/*": [
|
"Database/*": ["./database/*"],
|
||||||
"./config/*"
|
|
||||||
],
|
|
||||||
"Contracts/*": [
|
|
||||||
"./contracts/*"
|
|
||||||
],
|
|
||||||
"Database/*": [
|
|
||||||
"./database/*"
|
|
||||||
],
|
|
||||||
// "@/*": ["./resources/js/"],
|
// "@/*": ["./resources/js/"],
|
||||||
"@/*": [
|
"@/*": ["./resources/js/*"]
|
||||||
"./resources/js/*"
|
|
||||||
]
|
|
||||||
// "vue$": ["vue/dist/vue.runtime.esm-bundler.js"],
|
// "vue$": ["vue/dist/vue.runtime.esm-bundler.js"],
|
||||||
},
|
},
|
||||||
"types": [
|
"types": [
|
||||||
|
@ -61,7 +51,5 @@
|
||||||
"@adonisjs/auth"
|
"@adonisjs/auth"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"files": [
|
"files": ["index.d.ts"]
|
||||||
"index.d.ts"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user