Compare commits
49 Commits
bugfix/css
...
markdownba
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a580c2dc0a | ||
|
|
a997a956b5 | ||
|
|
540a84d3f7 | ||
|
|
178659c6fe | ||
|
|
d8dfa8b682 | ||
|
|
907ef9cbd3 | ||
|
|
a8e399c59f | ||
|
|
e7b71ec5c4 | ||
|
|
eb987e139e | ||
|
|
845b98cca3 | ||
|
|
365bb3dfd3 | ||
|
|
59a01f0f6f | ||
|
|
a491fef5d0 | ||
|
|
af0bc9da58 | ||
|
|
0b123a04ca | ||
|
|
0e2e2221fd | ||
|
|
da226ef205 | ||
|
|
a37a31f89a | ||
|
|
06209877ea | ||
|
|
822a3ce5ec | ||
|
|
1f06c67d13 | ||
|
|
9dea140859 | ||
|
|
d5899b22ab | ||
|
|
dc895ed277 | ||
|
|
7315df8a86 | ||
|
|
349f5bea66 | ||
|
|
6aef860a81 | ||
|
|
e908cb9344 | ||
|
|
1a22e54d5b | ||
|
|
172b4b71d4 | ||
|
|
3873852567 | ||
|
|
5e349855a2 | ||
|
|
40bd9e0311 | ||
|
|
b437b58d06 | ||
|
|
c3137ba1cb | ||
|
|
2e13c1b738 | ||
|
|
122870a23e | ||
|
|
4e282e0d86 | ||
|
|
6020f76adb | ||
|
|
f3c2a2ffa7 | ||
|
|
11659a838b | ||
|
|
58b7b4e753 | ||
|
|
7cf8c31e53 | ||
|
|
df000b9e8f | ||
|
|
5a0ddd91ce | ||
|
|
d097bc765b | ||
|
|
b283fc1e99 | ||
|
|
0511e00d83 | ||
|
|
c8afa775d4 |
@@ -1,4 +1,5 @@
|
|||||||
import { AppProps } from 'next/app';
|
import { AppProps } from 'next/app';
|
||||||
|
import '@portaljs/components/styles.css';
|
||||||
import './styles.css';
|
import './styles.css';
|
||||||
import { NextSeo } from 'next-seo';
|
import { NextSeo } from 'next-seo';
|
||||||
|
|
||||||
|
|||||||
722
package-lock.json
generated
@@ -8875,6 +8875,236 @@
|
|||||||
"react-dom": "^18.0.0"
|
"react-dom": "^18.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/attachment": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/attachment/-/attachment-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-etxzIQsssuUE0TYVScHDuL+AArQp3YbDTowGbpdCv8JqJFYzuGFV9+3uyvJ8QlGcPChhhr2CjHrbCTF2F2bw5w==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/bookmark": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/bookmark/-/bookmark-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-HaAQjaDrzE6Lbt89f0B1Z+jst3moSG3pqok7aGO4PmclxH4mtbBGK+zyXpWdF5+8feEnAa7QP3nWod5uAhJUQw==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/core": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/core/-/core-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-5tDBF+BafVLNULIJf1cej7nBegNrbYtdvoBKtRs9mLo3sGENIyeZuDsP4W+5mSKK84oxO3NY5MzkTkmnuu4R9g==",
|
||||||
|
"peerDependencies": {
|
||||||
|
"pdfjs-dist": "^2.6.347",
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/default-layout": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/default-layout/-/default-layout-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-68DjK+FB5+zyK5FKFYmIEcplq64Jejb3Y7tAVa9U/tEsoRnZt7C2mKW2e1IAEDZc+1ncdIboZvlFfRCSEDiG5A==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/attachment": "3.6.0",
|
||||||
|
"@react-pdf-viewer/bookmark": "3.6.0",
|
||||||
|
"@react-pdf-viewer/core": "3.6.0",
|
||||||
|
"@react-pdf-viewer/thumbnail": "3.6.0",
|
||||||
|
"@react-pdf-viewer/toolbar": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/full-screen": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/full-screen/-/full-screen-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-SG5mpE/AZr6DtwP7soGFqfGoU5wbQvaBc2KTz+upqhgmUIEyE8AwGa+ozCgkGEqTvlJ4dP7D5Kku2BFsC6l3Cg==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/get-file": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/get-file/-/get-file-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-cfMrig0Iu49yTePZSWwnyUMqu2F1pynP59snhTRoOg7RbpcAcppnDcYvVjThsE80wq1ltgMnufaVSsVoSbqIrQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/open": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/open/-/open-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-l/fBEj/7KjYH/mLMukos0nYypIuhovq2dO3TkQBHzQPdwtBdUTr049+AiSZnMDx1CIpr8Oz3FjB5FSw+LZuUog==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/page-navigation": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/page-navigation/-/page-navigation-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-YAfJ3Q6jEZ2ZtXwsdPSeCddrMvdtIG1bZidhujz47LRgZyr9ZmFVd5/D9aGm12sY5F/XB6V71SOnkww0aEOTqw==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/print": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/print/-/print-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-bQSf+qsl1OZlB6Ft1ES5xjqTirIbF1m0pZD5KLRuxAAjqMyeTBZOLC3mpgRXg2nGJ0X3BcrDrurNIkXO/CE2SQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/properties": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/properties/-/properties-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-J0tQxYK3ql3dXgjtiqOH1gU3ajUMWE5O6BNxFqE0zvE7BsnDZH6wfCVi8okkbivp0oEKC4TjSxF+KkHa9HZlPw==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/rotate": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/rotate/-/rotate-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-E1LZhWdj5dGwwZ3VreC32eT0VesniOTp1zDeZVX3Tom8XXxc9+A5/H/+DTY0/v1wimR5afB2aqCtQIjcQVupeQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/scroll-mode": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/scroll-mode/-/scroll-mode-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-KBIdCZsJxbtOAlSOgw1IpGdS5txboHXPheRnjWtjNpOCWAhkYwKV4YNRAdTATPxb+zcOrkWmiU4sHgj9m4kQLw==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/search": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/search/-/search-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-VxqUfws400C2FwaOzKTvgZgI8bhQ0Hx4aL/Ada42WbUmnySm+SGSM+l7Snj3q5pbYd3svcyz9xTlVrJDfXQ4IQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/selection-mode": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/selection-mode/-/selection-mode-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-To8Sev/30eQMDzVofPfwWXoEUfWUizqD7O67VCG+oaP6yc640y/MX4nVsP9kg+u2Git3CFSolaHgEWg/sOY60A==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/theme": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/theme/-/theme-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-IfLLKvKeuIK0dqL9YcSjSsopvhYKBEQLoDHc1lZ/XZGXANbqExFwOCeklPx40HwgUm8LL/arJNoLrbrGrGMCCA==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/thumbnail": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/thumbnail/-/thumbnail-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-fd0SERR9yPfWN5cpnhiJ3qp9KG7hR1FJkJ8S5KgDbl3AObn1tOM9Kw8m4Qw8Od5GIrsxxhdTUdw4esup5n2RBg==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/toolbar": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/toolbar/-/toolbar-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-Efz8hNsmes7A2kHVBZkXsWwrYsjybUDOf+Y69LRWilpNij4D/jtVdysQ0uSoeZYYT4P0OfNnxB5ZcdHZCn6PXg==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0",
|
||||||
|
"@react-pdf-viewer/full-screen": "3.6.0",
|
||||||
|
"@react-pdf-viewer/get-file": "3.6.0",
|
||||||
|
"@react-pdf-viewer/open": "3.6.0",
|
||||||
|
"@react-pdf-viewer/page-navigation": "3.6.0",
|
||||||
|
"@react-pdf-viewer/print": "3.6.0",
|
||||||
|
"@react-pdf-viewer/properties": "3.6.0",
|
||||||
|
"@react-pdf-viewer/rotate": "3.6.0",
|
||||||
|
"@react-pdf-viewer/scroll-mode": "3.6.0",
|
||||||
|
"@react-pdf-viewer/search": "3.6.0",
|
||||||
|
"@react-pdf-viewer/selection-mode": "3.6.0",
|
||||||
|
"@react-pdf-viewer/theme": "3.6.0",
|
||||||
|
"@react-pdf-viewer/zoom": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-pdf-viewer/zoom": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/zoom/-/zoom-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-EEmYtC07UVK1c8wLyL1fH4PszCsi8r0smPtuuiKN0AMR40ac4GcjiqxmJppgP7HOLexCk38lgg+SpIDGuLCV4Q==",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@rollup/plugin-babel": {
|
"node_modules/@rollup/plugin-babel": {
|
||||||
"version": "5.3.1",
|
"version": "5.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz",
|
||||||
@@ -13812,6 +14042,33 @@
|
|||||||
"node": ">= 10.0.0"
|
"node": ">= 10.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/adler-32": {
|
||||||
|
"version": "1.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz",
|
||||||
|
"integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ag-grid-community": {
|
||||||
|
"version": "30.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ag-grid-community/-/ag-grid-community-30.0.3.tgz",
|
||||||
|
"integrity": "sha512-agfRVHELQqhnMfRplmYEYdxMxw3c8l5Bu7lNaCfIVOasyRlSAvH4Na8qru0ORaOUN3ClulfvKIuLSWwgGSwJJQ==",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"node_modules/ag-grid-react": {
|
||||||
|
"version": "30.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/ag-grid-react/-/ag-grid-react-30.0.4.tgz",
|
||||||
|
"integrity": "sha512-6N3O0avco1BVt5jLe6tD3GepvsmoxV4gvqHQ4SguYwqkfvO9IzN8GEOiVScLlAn1zvWjhCeSpnIYRi44bP3wqQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"prop-types": "^15.8.1"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"ag-grid-community": "~30.0.3",
|
||||||
|
"react": "^16.3.0 || ^17.0.0 || ^18.0.0",
|
||||||
|
"react-dom": "^16.3.0 || ^17.0.0 || ^18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/agent-base": {
|
"node_modules/agent-base": {
|
||||||
"version": "6.0.2",
|
"version": "6.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
|
||||||
@@ -15480,6 +15737,18 @@
|
|||||||
"url": "https://github.com/sponsors/wooorm"
|
"url": "https://github.com/sponsors/wooorm"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/cfb": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz",
|
||||||
|
"integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
|
||||||
|
"dependencies": {
|
||||||
|
"adler-32": "~1.3.0",
|
||||||
|
"crc-32": "~1.2.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/chai": {
|
"node_modules/chai": {
|
||||||
"version": "4.3.7",
|
"version": "4.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
|
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
|
||||||
@@ -15803,6 +16072,14 @@
|
|||||||
"integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==",
|
"integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/codepage": {
|
||||||
|
"version": "1.15.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz",
|
||||||
|
"integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/collect-v8-coverage": {
|
"node_modules/collect-v8-coverage": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
|
||||||
@@ -16291,6 +16568,17 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/crc-32": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
|
||||||
|
"integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
|
||||||
|
"bin": {
|
||||||
|
"crc32": "bin/crc32.njs"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/create-require": {
|
"node_modules/create-require": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
|
||||||
@@ -16621,6 +16909,11 @@
|
|||||||
"integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==",
|
"integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/cuint": {
|
||||||
|
"version": "0.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz",
|
||||||
|
"integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw=="
|
||||||
|
},
|
||||||
"node_modules/cypress": {
|
"node_modules/cypress": {
|
||||||
"version": "12.9.0",
|
"version": "12.9.0",
|
||||||
"resolved": "https://registry.npmjs.org/cypress/-/cypress-12.9.0.tgz",
|
"resolved": "https://registry.npmjs.org/cypress/-/cypress-12.9.0.tgz",
|
||||||
@@ -17885,6 +18178,12 @@
|
|||||||
"url": "https://github.com/fb55/domhandler?sponsor=1"
|
"url": "https://github.com/fb55/domhandler?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/dommatrix": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/dommatrix/-/dommatrix-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-l32Xp/TLgWb8ReqbVJAFIvXmY7go4nTxxlWiAFyhoQw9RKEOHBZNnyGvJWqDVSPmq3Y9HlM4npqF/T6VMOXhww==",
|
||||||
|
"deprecated": "dommatrix is no longer maintained. Please use @thednp/dommatrix."
|
||||||
|
},
|
||||||
"node_modules/dompurify": {
|
"node_modules/dompurify": {
|
||||||
"version": "3.0.3",
|
"version": "3.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.3.tgz",
|
||||||
@@ -20129,6 +20428,14 @@
|
|||||||
"node": ">= 0.6"
|
"node": ">= 0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/frac": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/fraction.js": {
|
"node_modules/fraction.js": {
|
||||||
"version": "4.2.0",
|
"version": "4.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
|
||||||
@@ -28238,7 +28545,6 @@
|
|||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
|
||||||
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
|
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"semver": "^6.0.0"
|
"semver": "^6.0.0"
|
||||||
},
|
},
|
||||||
@@ -31425,6 +31731,23 @@
|
|||||||
"pbf": "bin/pbf"
|
"pbf": "bin/pbf"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/pdfjs-dist": {
|
||||||
|
"version": "2.15.349",
|
||||||
|
"resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.15.349.tgz",
|
||||||
|
"integrity": "sha512-EeCfqj6xi4/aegKNS7Bs+TCg3Y5gmKmG0s/5xXI0PqWW66x+Nm7iFXBpVcup7HnR8sNDm+5NESfFr8T6DeWp9Q==",
|
||||||
|
"dependencies": {
|
||||||
|
"dommatrix": "^1.0.3",
|
||||||
|
"web-streams-polyfill": "^3.2.1"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"worker-loader": "^3.0.8"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"worker-loader": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/peek-stream": {
|
"node_modules/peek-stream": {
|
||||||
"version": "1.1.3",
|
"version": "1.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz",
|
||||||
@@ -32166,6 +32489,34 @@
|
|||||||
"postcss": "^8.2.15"
|
"postcss": "^8.2.15"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/postcss-url": {
|
||||||
|
"version": "10.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz",
|
||||||
|
"integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==",
|
||||||
|
"dependencies": {
|
||||||
|
"make-dir": "~3.1.0",
|
||||||
|
"mime": "~2.5.2",
|
||||||
|
"minimatch": "~3.0.4",
|
||||||
|
"xxhashjs": "~0.2.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"postcss": "^8.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/postcss-url/node_modules/mime": {
|
||||||
|
"version": "2.5.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
|
||||||
|
"integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==",
|
||||||
|
"bin": {
|
||||||
|
"mime": "cli.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/postcss-value-parser": {
|
"node_modules/postcss-value-parser": {
|
||||||
"version": "4.2.0",
|
"version": "4.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
|
||||||
@@ -34352,7 +34703,6 @@
|
|||||||
"version": "6.3.0",
|
"version": "6.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||||
"dev": true,
|
|
||||||
"bin": {
|
"bin": {
|
||||||
"semver": "bin/semver.js"
|
"semver": "bin/semver.js"
|
||||||
}
|
}
|
||||||
@@ -34962,6 +35312,17 @@
|
|||||||
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
|
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/ssf": {
|
||||||
|
"version": "0.11.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz",
|
||||||
|
"integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
|
||||||
|
"dependencies": {
|
||||||
|
"frac": "~1.1.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/sshpk": {
|
"node_modules/sshpk": {
|
||||||
"version": "1.17.0",
|
"version": "1.17.0",
|
||||||
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
|
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
|
||||||
@@ -38660,6 +39021,14 @@
|
|||||||
"url": "https://github.com/sponsors/wooorm"
|
"url": "https://github.com/sponsors/wooorm"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/web-streams-polyfill": {
|
||||||
|
"version": "3.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz",
|
||||||
|
"integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/web-worker": {
|
"node_modules/web-worker": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz",
|
||||||
@@ -38957,6 +39326,22 @@
|
|||||||
"integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
|
"integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/wmf": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/word": {
|
||||||
|
"version": "0.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz",
|
||||||
|
"integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/word-wrap": {
|
"node_modules/word-wrap": {
|
||||||
"version": "1.2.3",
|
"version": "1.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
||||||
@@ -39063,6 +39448,26 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/xlsx": {
|
||||||
|
"version": "0.18.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz",
|
||||||
|
"integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"adler-32": "~1.3.0",
|
||||||
|
"cfb": "~1.2.1",
|
||||||
|
"codepage": "~1.15.0",
|
||||||
|
"crc-32": "~1.2.1",
|
||||||
|
"ssf": "~0.11.2",
|
||||||
|
"wmf": "~1.0.1",
|
||||||
|
"word": "~0.3.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"xlsx": "bin/xlsx.njs"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/xml-name-validator": {
|
"node_modules/xml-name-validator": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
|
||||||
@@ -39091,6 +39496,14 @@
|
|||||||
"node": ">=0.4"
|
"node": ">=0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/xxhashjs": {
|
||||||
|
"version": "0.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz",
|
||||||
|
"integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==",
|
||||||
|
"dependencies": {
|
||||||
|
"cuint": "^0.2.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/y18n": {
|
"node_modules/y18n": {
|
||||||
"version": "5.0.8",
|
"version": "5.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
||||||
@@ -39635,18 +40048,23 @@
|
|||||||
},
|
},
|
||||||
"packages/components": {
|
"packages/components": {
|
||||||
"name": "@portaljs/components",
|
"name": "@portaljs/components",
|
||||||
"version": "0.1.12",
|
"version": "0.3.1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@githubocto/flat-ui": "^0.14.1",
|
"@githubocto/flat-ui": "^0.14.1",
|
||||||
"@heroicons/react": "^2.0.17",
|
"@heroicons/react": "^2.0.17",
|
||||||
"@planet/maps": "^8.1.0",
|
"@planet/maps": "^8.1.0",
|
||||||
|
"@react-pdf-viewer/core": "3.6.0",
|
||||||
|
"@react-pdf-viewer/default-layout": "3.6.0",
|
||||||
"@tanstack/react-table": "^8.8.5",
|
"@tanstack/react-table": "^8.8.5",
|
||||||
|
"ag-grid-react": "^30.0.4",
|
||||||
"chroma-js": "^2.4.2",
|
"chroma-js": "^2.4.2",
|
||||||
"flexsearch": "0.7.21",
|
"flexsearch": "0.7.21",
|
||||||
"leaflet": "^1.9.4",
|
"leaflet": "^1.9.4",
|
||||||
"next-mdx-remote": "^4.4.1",
|
"next-mdx-remote": "^4.4.1",
|
||||||
"ol": "^7.4.0",
|
"ol": "^7.4.0",
|
||||||
"papaparse": "^5.4.1",
|
"papaparse": "^5.4.1",
|
||||||
|
"pdfjs-dist": "2.15.349",
|
||||||
|
"postcss-url": "^10.1.3",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-hook-form": "^7.43.9",
|
"react-hook-form": "^7.43.9",
|
||||||
@@ -39655,7 +40073,8 @@
|
|||||||
"react-vega": "^7.6.0",
|
"react-vega": "^7.6.0",
|
||||||
"vega": "5.25.0",
|
"vega": "5.25.0",
|
||||||
"vega-lite": "5.1.0",
|
"vega-lite": "5.1.0",
|
||||||
"vitest": "^0.31.4"
|
"vitest": "^0.31.4",
|
||||||
|
"xlsx": "^0.18.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@storybook/addon-essentials": "^7.0.7",
|
"@storybook/addon-essentials": "^7.0.7",
|
||||||
@@ -46849,6 +47268,8 @@
|
|||||||
"@githubocto/flat-ui": "^0.14.1",
|
"@githubocto/flat-ui": "^0.14.1",
|
||||||
"@heroicons/react": "^2.0.17",
|
"@heroicons/react": "^2.0.17",
|
||||||
"@planet/maps": "^8.1.0",
|
"@planet/maps": "^8.1.0",
|
||||||
|
"@react-pdf-viewer/core": "3.6.0",
|
||||||
|
"@react-pdf-viewer/default-layout": "3.6.0",
|
||||||
"@storybook/addon-essentials": "^7.0.7",
|
"@storybook/addon-essentials": "^7.0.7",
|
||||||
"@storybook/addon-interactions": "^7.0.7",
|
"@storybook/addon-interactions": "^7.0.7",
|
||||||
"@storybook/addon-links": "^7.0.7",
|
"@storybook/addon-links": "^7.0.7",
|
||||||
@@ -46867,6 +47288,7 @@
|
|||||||
"@typescript-eslint/parser": "^5.57.1",
|
"@typescript-eslint/parser": "^5.57.1",
|
||||||
"@vitejs/plugin-react": "^4.0.0",
|
"@vitejs/plugin-react": "^4.0.0",
|
||||||
"@vitejs/plugin-react-swc": "^3.3.2",
|
"@vitejs/plugin-react-swc": "^3.3.2",
|
||||||
|
"ag-grid-react": "^30.0.4",
|
||||||
"autoprefixer": "^10.4.14",
|
"autoprefixer": "^10.4.14",
|
||||||
"chroma-js": "^2.4.2",
|
"chroma-js": "^2.4.2",
|
||||||
"eslint": "^8.38.0",
|
"eslint": "^8.38.0",
|
||||||
@@ -46879,9 +47301,11 @@
|
|||||||
"next-mdx-remote": "^4.4.1",
|
"next-mdx-remote": "^4.4.1",
|
||||||
"ol": "^7.4.0",
|
"ol": "^7.4.0",
|
||||||
"papaparse": "^5.4.1",
|
"papaparse": "^5.4.1",
|
||||||
|
"pdfjs-dist": "2.15.349",
|
||||||
"postcss": "^8.4.23",
|
"postcss": "^8.4.23",
|
||||||
"postcss-import": "^15.1.0",
|
"postcss-import": "^15.1.0",
|
||||||
"postcss-import-url": "^7.2.0",
|
"postcss-import-url": "^7.2.0",
|
||||||
|
"postcss-url": "^10.1.3",
|
||||||
"prop-types": "^15.8.1",
|
"prop-types": "^15.8.1",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
@@ -46897,7 +47321,8 @@
|
|||||||
"vite": "^4.3.2",
|
"vite": "^4.3.2",
|
||||||
"vite-plugin-dts": "^2.3.0",
|
"vite-plugin-dts": "^2.3.0",
|
||||||
"vite-plugin-swc-only": "^0.1.18",
|
"vite-plugin-swc-only": "^0.1.18",
|
||||||
"vitest": "^0.31.4"
|
"vitest": "^0.31.4",
|
||||||
|
"xlsx": "^0.18.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint/eslintrc": {
|
"@eslint/eslintrc": {
|
||||||
@@ -47256,6 +47681,164 @@
|
|||||||
"integrity": "sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==",
|
"integrity": "sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==",
|
||||||
"requires": {}
|
"requires": {}
|
||||||
},
|
},
|
||||||
|
"@react-pdf-viewer/attachment": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/attachment/-/attachment-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-etxzIQsssuUE0TYVScHDuL+AArQp3YbDTowGbpdCv8JqJFYzuGFV9+3uyvJ8QlGcPChhhr2CjHrbCTF2F2bw5w==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/bookmark": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/bookmark/-/bookmark-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-HaAQjaDrzE6Lbt89f0B1Z+jst3moSG3pqok7aGO4PmclxH4mtbBGK+zyXpWdF5+8feEnAa7QP3nWod5uAhJUQw==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/core": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/core/-/core-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-5tDBF+BafVLNULIJf1cej7nBegNrbYtdvoBKtRs9mLo3sGENIyeZuDsP4W+5mSKK84oxO3NY5MzkTkmnuu4R9g==",
|
||||||
|
"requires": {}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/default-layout": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/default-layout/-/default-layout-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-68DjK+FB5+zyK5FKFYmIEcplq64Jejb3Y7tAVa9U/tEsoRnZt7C2mKW2e1IAEDZc+1ncdIboZvlFfRCSEDiG5A==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/attachment": "3.6.0",
|
||||||
|
"@react-pdf-viewer/bookmark": "3.6.0",
|
||||||
|
"@react-pdf-viewer/core": "3.6.0",
|
||||||
|
"@react-pdf-viewer/thumbnail": "3.6.0",
|
||||||
|
"@react-pdf-viewer/toolbar": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/full-screen": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/full-screen/-/full-screen-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-SG5mpE/AZr6DtwP7soGFqfGoU5wbQvaBc2KTz+upqhgmUIEyE8AwGa+ozCgkGEqTvlJ4dP7D5Kku2BFsC6l3Cg==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/get-file": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/get-file/-/get-file-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-cfMrig0Iu49yTePZSWwnyUMqu2F1pynP59snhTRoOg7RbpcAcppnDcYvVjThsE80wq1ltgMnufaVSsVoSbqIrQ==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/open": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/open/-/open-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-l/fBEj/7KjYH/mLMukos0nYypIuhovq2dO3TkQBHzQPdwtBdUTr049+AiSZnMDx1CIpr8Oz3FjB5FSw+LZuUog==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/page-navigation": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/page-navigation/-/page-navigation-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-YAfJ3Q6jEZ2ZtXwsdPSeCddrMvdtIG1bZidhujz47LRgZyr9ZmFVd5/D9aGm12sY5F/XB6V71SOnkww0aEOTqw==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/print": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/print/-/print-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-bQSf+qsl1OZlB6Ft1ES5xjqTirIbF1m0pZD5KLRuxAAjqMyeTBZOLC3mpgRXg2nGJ0X3BcrDrurNIkXO/CE2SQ==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/properties": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/properties/-/properties-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-J0tQxYK3ql3dXgjtiqOH1gU3ajUMWE5O6BNxFqE0zvE7BsnDZH6wfCVi8okkbivp0oEKC4TjSxF+KkHa9HZlPw==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/rotate": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/rotate/-/rotate-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-E1LZhWdj5dGwwZ3VreC32eT0VesniOTp1zDeZVX3Tom8XXxc9+A5/H/+DTY0/v1wimR5afB2aqCtQIjcQVupeQ==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/scroll-mode": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/scroll-mode/-/scroll-mode-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-KBIdCZsJxbtOAlSOgw1IpGdS5txboHXPheRnjWtjNpOCWAhkYwKV4YNRAdTATPxb+zcOrkWmiU4sHgj9m4kQLw==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/search": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/search/-/search-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-VxqUfws400C2FwaOzKTvgZgI8bhQ0Hx4aL/Ada42WbUmnySm+SGSM+l7Snj3q5pbYd3svcyz9xTlVrJDfXQ4IQ==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/selection-mode": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/selection-mode/-/selection-mode-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-To8Sev/30eQMDzVofPfwWXoEUfWUizqD7O67VCG+oaP6yc640y/MX4nVsP9kg+u2Git3CFSolaHgEWg/sOY60A==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/theme": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/theme/-/theme-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-IfLLKvKeuIK0dqL9YcSjSsopvhYKBEQLoDHc1lZ/XZGXANbqExFwOCeklPx40HwgUm8LL/arJNoLrbrGrGMCCA==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/thumbnail": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/thumbnail/-/thumbnail-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-fd0SERR9yPfWN5cpnhiJ3qp9KG7hR1FJkJ8S5KgDbl3AObn1tOM9Kw8m4Qw8Od5GIrsxxhdTUdw4esup5n2RBg==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/toolbar": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/toolbar/-/toolbar-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-Efz8hNsmes7A2kHVBZkXsWwrYsjybUDOf+Y69LRWilpNij4D/jtVdysQ0uSoeZYYT4P0OfNnxB5ZcdHZCn6PXg==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0",
|
||||||
|
"@react-pdf-viewer/full-screen": "3.6.0",
|
||||||
|
"@react-pdf-viewer/get-file": "3.6.0",
|
||||||
|
"@react-pdf-viewer/open": "3.6.0",
|
||||||
|
"@react-pdf-viewer/page-navigation": "3.6.0",
|
||||||
|
"@react-pdf-viewer/print": "3.6.0",
|
||||||
|
"@react-pdf-viewer/properties": "3.6.0",
|
||||||
|
"@react-pdf-viewer/rotate": "3.6.0",
|
||||||
|
"@react-pdf-viewer/scroll-mode": "3.6.0",
|
||||||
|
"@react-pdf-viewer/search": "3.6.0",
|
||||||
|
"@react-pdf-viewer/selection-mode": "3.6.0",
|
||||||
|
"@react-pdf-viewer/theme": "3.6.0",
|
||||||
|
"@react-pdf-viewer/zoom": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@react-pdf-viewer/zoom": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-pdf-viewer/zoom/-/zoom-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-EEmYtC07UVK1c8wLyL1fH4PszCsi8r0smPtuuiKN0AMR40ac4GcjiqxmJppgP7HOLexCk38lgg+SpIDGuLCV4Q==",
|
||||||
|
"requires": {
|
||||||
|
"@react-pdf-viewer/core": "3.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@rollup/plugin-babel": {
|
"@rollup/plugin-babel": {
|
||||||
"version": "5.3.1",
|
"version": "5.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz",
|
||||||
@@ -50929,6 +51512,25 @@
|
|||||||
"integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==",
|
"integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"adler-32": {
|
||||||
|
"version": "1.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz",
|
||||||
|
"integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A=="
|
||||||
|
},
|
||||||
|
"ag-grid-community": {
|
||||||
|
"version": "30.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ag-grid-community/-/ag-grid-community-30.0.3.tgz",
|
||||||
|
"integrity": "sha512-agfRVHELQqhnMfRplmYEYdxMxw3c8l5Bu7lNaCfIVOasyRlSAvH4Na8qru0ORaOUN3ClulfvKIuLSWwgGSwJJQ==",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"ag-grid-react": {
|
||||||
|
"version": "30.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/ag-grid-react/-/ag-grid-react-30.0.4.tgz",
|
||||||
|
"integrity": "sha512-6N3O0avco1BVt5jLe6tD3GepvsmoxV4gvqHQ4SguYwqkfvO9IzN8GEOiVScLlAn1zvWjhCeSpnIYRi44bP3wqQ==",
|
||||||
|
"requires": {
|
||||||
|
"prop-types": "^15.8.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"agent-base": {
|
"agent-base": {
|
||||||
"version": "6.0.2",
|
"version": "6.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
|
||||||
@@ -52180,6 +52782,15 @@
|
|||||||
"resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
|
||||||
"integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="
|
"integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="
|
||||||
},
|
},
|
||||||
|
"cfb": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz",
|
||||||
|
"integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
|
||||||
|
"requires": {
|
||||||
|
"adler-32": "~1.3.0",
|
||||||
|
"crc-32": "~1.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"chai": {
|
"chai": {
|
||||||
"version": "4.3.7",
|
"version": "4.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
|
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
|
||||||
@@ -52403,6 +53014,11 @@
|
|||||||
"integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==",
|
"integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"codepage": {
|
||||||
|
"version": "1.15.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz",
|
||||||
|
"integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA=="
|
||||||
|
},
|
||||||
"collect-v8-coverage": {
|
"collect-v8-coverage": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
|
||||||
@@ -52804,6 +53420,11 @@
|
|||||||
"yaml": "^1.10.0"
|
"yaml": "^1.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"crc-32": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
|
||||||
|
"integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="
|
||||||
|
},
|
||||||
"create-require": {
|
"create-require": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
|
||||||
@@ -53065,6 +53686,11 @@
|
|||||||
"integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==",
|
"integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"cuint": {
|
||||||
|
"version": "0.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz",
|
||||||
|
"integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw=="
|
||||||
|
},
|
||||||
"cypress": {
|
"cypress": {
|
||||||
"version": "12.9.0",
|
"version": "12.9.0",
|
||||||
"resolved": "https://registry.npmjs.org/cypress/-/cypress-12.9.0.tgz",
|
"resolved": "https://registry.npmjs.org/cypress/-/cypress-12.9.0.tgz",
|
||||||
@@ -54004,6 +54630,11 @@
|
|||||||
"domelementtype": "^2.2.0"
|
"domelementtype": "^2.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dommatrix": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/dommatrix/-/dommatrix-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-l32Xp/TLgWb8ReqbVJAFIvXmY7go4nTxxlWiAFyhoQw9RKEOHBZNnyGvJWqDVSPmq3Y9HlM4npqF/T6VMOXhww=="
|
||||||
|
},
|
||||||
"dompurify": {
|
"dompurify": {
|
||||||
"version": "3.0.3",
|
"version": "3.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.3.tgz",
|
||||||
@@ -55765,6 +56396,11 @@
|
|||||||
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
|
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"frac": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
|
||||||
|
},
|
||||||
"fraction.js": {
|
"fraction.js": {
|
||||||
"version": "4.2.0",
|
"version": "4.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
|
||||||
@@ -61973,7 +62609,6 @@
|
|||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
|
||||||
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
|
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"semver": "^6.0.0"
|
"semver": "^6.0.0"
|
||||||
}
|
}
|
||||||
@@ -64240,6 +64875,15 @@
|
|||||||
"resolve-protobuf-schema": "^2.1.0"
|
"resolve-protobuf-schema": "^2.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"pdfjs-dist": {
|
||||||
|
"version": "2.15.349",
|
||||||
|
"resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.15.349.tgz",
|
||||||
|
"integrity": "sha512-EeCfqj6xi4/aegKNS7Bs+TCg3Y5gmKmG0s/5xXI0PqWW66x+Nm7iFXBpVcup7HnR8sNDm+5NESfFr8T6DeWp9Q==",
|
||||||
|
"requires": {
|
||||||
|
"dommatrix": "^1.0.3",
|
||||||
|
"web-streams-polyfill": "^3.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"peek-stream": {
|
"peek-stream": {
|
||||||
"version": "1.1.3",
|
"version": "1.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz",
|
||||||
@@ -64714,6 +65358,24 @@
|
|||||||
"postcss-selector-parser": "^6.0.5"
|
"postcss-selector-parser": "^6.0.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"postcss-url": {
|
||||||
|
"version": "10.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz",
|
||||||
|
"integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==",
|
||||||
|
"requires": {
|
||||||
|
"make-dir": "~3.1.0",
|
||||||
|
"mime": "~2.5.2",
|
||||||
|
"minimatch": "~3.0.4",
|
||||||
|
"xxhashjs": "~0.2.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"mime": {
|
||||||
|
"version": "2.5.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
|
||||||
|
"integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"postcss-value-parser": {
|
"postcss-value-parser": {
|
||||||
"version": "4.2.0",
|
"version": "4.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
|
||||||
@@ -66346,8 +67008,7 @@
|
|||||||
"semver": {
|
"semver": {
|
||||||
"version": "6.3.0",
|
"version": "6.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"send": {
|
"send": {
|
||||||
"version": "0.18.0",
|
"version": "0.18.0",
|
||||||
@@ -66857,6 +67518,14 @@
|
|||||||
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
|
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"ssf": {
|
||||||
|
"version": "0.11.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz",
|
||||||
|
"integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
|
||||||
|
"requires": {
|
||||||
|
"frac": "~1.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"sshpk": {
|
"sshpk": {
|
||||||
"version": "1.17.0",
|
"version": "1.17.0",
|
||||||
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
|
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
|
||||||
@@ -69648,6 +70317,11 @@
|
|||||||
"integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
|
"integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
|
||||||
"devOptional": true
|
"devOptional": true
|
||||||
},
|
},
|
||||||
|
"web-streams-polyfill": {
|
||||||
|
"version": "3.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz",
|
||||||
|
"integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q=="
|
||||||
|
},
|
||||||
"web-worker": {
|
"web-worker": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz",
|
||||||
@@ -69873,6 +70547,16 @@
|
|||||||
"integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
|
"integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"wmf": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
|
||||||
|
},
|
||||||
|
"word": {
|
||||||
|
"version": "0.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz",
|
||||||
|
"integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA=="
|
||||||
|
},
|
||||||
"word-wrap": {
|
"word-wrap": {
|
||||||
"version": "1.2.3",
|
"version": "1.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
||||||
@@ -69946,6 +70630,20 @@
|
|||||||
"devOptional": true,
|
"devOptional": true,
|
||||||
"requires": {}
|
"requires": {}
|
||||||
},
|
},
|
||||||
|
"xlsx": {
|
||||||
|
"version": "0.18.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz",
|
||||||
|
"integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
|
||||||
|
"requires": {
|
||||||
|
"adler-32": "~1.3.0",
|
||||||
|
"cfb": "~1.2.1",
|
||||||
|
"codepage": "~1.15.0",
|
||||||
|
"crc-32": "~1.2.1",
|
||||||
|
"ssf": "~0.11.2",
|
||||||
|
"wmf": "~1.0.1",
|
||||||
|
"word": "~0.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"xml-name-validator": {
|
"xml-name-validator": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
|
||||||
@@ -69968,6 +70666,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
||||||
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
|
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
|
||||||
},
|
},
|
||||||
|
"xxhashjs": {
|
||||||
|
"version": "0.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz",
|
||||||
|
"integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==",
|
||||||
|
"requires": {
|
||||||
|
"cuint": "^0.2.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"y18n": {
|
"y18n": {
|
||||||
"version": "5.0.8",
|
"version": "5.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "portaljs",
|
"name": "portaljs",
|
||||||
"workspaces": ["./packages/*"],
|
"workspaces": [
|
||||||
|
"./packages/*"
|
||||||
|
],
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
<!--
|
|
||||||
This is necessary for Leaflet maps to work.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<link
|
|
||||||
rel="stylesheet"
|
|
||||||
href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
|
|
||||||
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="
|
|
||||||
crossorigin=""
|
|
||||||
/>
|
|
||||||
@@ -1,5 +1,19 @@
|
|||||||
# @portaljs/components
|
# @portaljs/components
|
||||||
|
|
||||||
|
## 0.3.1
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- [#980](https://github.com/datopian/portaljs/pull/980) [`38738525`](https://github.com/datopian/portaljs/commit/3873852567b1aab4827a716bd588bd5de3223e2b) Thanks [@demenech](https://github.com/demenech)! - Fix missing CSS styles for PDF component
|
||||||
|
|
||||||
|
## 0.3.0
|
||||||
|
|
||||||
|
### Minor Changes
|
||||||
|
|
||||||
|
- [`2e13c1b7`](https://github.com/datopian/portaljs/commit/2e13c1b738ddac91a9419f5c0484406328bd1cd3) Thanks [@demenech](https://github.com/demenech)! - PDF and Excel components
|
||||||
|
|
||||||
|
- [#973](https://github.com/datopian/portaljs/pull/973) [`f3c2a2ff`](https://github.com/datopian/portaljs/commit/f3c2a2ffa7dcf9693bd25318c719ce58d27070b8) Thanks [@demenech](https://github.com/demenech)! - Implement <Excel /> component
|
||||||
|
|
||||||
## 0.2.0
|
## 0.2.0
|
||||||
|
|
||||||
### Minor Changes
|
### Minor Changes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@portaljs/components",
|
"name": "@portaljs/components",
|
||||||
"version": "0.2.0",
|
"version": "0.3.1",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "https://portaljs.org",
|
"description": "https://portaljs.org",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
"lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
"lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
||||||
"storybook": "storybook dev -p 6006",
|
"storybook": "storybook dev -p 6006",
|
||||||
"build-storybook": "storybook build",
|
"build-storybook": "storybook build",
|
||||||
"build-tailwind": "NODE_ENV=production npx tailwindcss --postcss -c tailwind.config.js -i src/index.css -o ./dist/styles.css --minify",
|
"build-tailwind": "NODE_ENV=production npx tailwindcss --postcss -c tailwind.config.js -i src/index.css -o ./dist/style.css --minify",
|
||||||
"prepare": "npm run build",
|
"prepare": "npm run build",
|
||||||
"fix-leaflet": "node ./scripts/fix-leaflet.cjs"
|
"fix-leaflet": "node ./scripts/fix-leaflet.cjs"
|
||||||
},
|
},
|
||||||
@@ -30,12 +30,14 @@
|
|||||||
"@heroicons/react": "^2.0.17",
|
"@heroicons/react": "^2.0.17",
|
||||||
"@planet/maps": "^8.1.0",
|
"@planet/maps": "^8.1.0",
|
||||||
"@tanstack/react-table": "^8.8.5",
|
"@tanstack/react-table": "^8.8.5",
|
||||||
|
"ag-grid-react": "^30.0.4",
|
||||||
"chroma-js": "^2.4.2",
|
"chroma-js": "^2.4.2",
|
||||||
"flexsearch": "0.7.21",
|
"flexsearch": "0.7.21",
|
||||||
"leaflet": "^1.9.4",
|
"leaflet": "^1.9.4",
|
||||||
"next-mdx-remote": "^4.4.1",
|
"next-mdx-remote": "^4.4.1",
|
||||||
"ol": "^7.4.0",
|
"ol": "^7.4.0",
|
||||||
"papaparse": "^5.4.1",
|
"papaparse": "^5.4.1",
|
||||||
|
"postcss-url": "^10.1.3",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-hook-form": "^7.43.9",
|
"react-hook-form": "^7.43.9",
|
||||||
@@ -44,7 +46,11 @@
|
|||||||
"react-vega": "^7.6.0",
|
"react-vega": "^7.6.0",
|
||||||
"vega": "5.25.0",
|
"vega": "5.25.0",
|
||||||
"vega-lite": "5.1.0",
|
"vega-lite": "5.1.0",
|
||||||
"vitest": "^0.31.4"
|
"vitest": "^0.31.4",
|
||||||
|
"@react-pdf-viewer/core": "3.6.0",
|
||||||
|
"@react-pdf-viewer/default-layout": "3.6.0",
|
||||||
|
"pdfjs-dist": "2.15.349",
|
||||||
|
"xlsx": "^0.18.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@storybook/addon-essentials": "^7.0.7",
|
"@storybook/addon-essentials": "^7.0.7",
|
||||||
@@ -93,7 +99,7 @@
|
|||||||
"require": "./dist/components.umd.js"
|
"require": "./dist/components.umd.js"
|
||||||
},
|
},
|
||||||
"./styles.css": {
|
"./styles.css": {
|
||||||
"import": "./dist/styles.css"
|
"import": "./dist/style.css"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
console.log('PostCSS')
|
console.log('PostCSS');
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
plugins: {
|
plugins: {
|
||||||
'postcss-import': {},
|
'postcss-import': {},
|
||||||
|
'postcss-url': { url: 'inline' },
|
||||||
tailwindcss: {},
|
tailwindcss: {},
|
||||||
autoprefixer: {},
|
autoprefixer: {},
|
||||||
},
|
},
|
||||||
|
|||||||
99
packages/components/src/components/Excel.tsx
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
import { useEffect, useState } from 'react';
|
||||||
|
import LoadingSpinner from './LoadingSpinner';
|
||||||
|
import { read, utils } from 'xlsx';
|
||||||
|
import { AgGridReact } from 'ag-grid-react';
|
||||||
|
import 'ag-grid-community/styles/ag-grid.css';
|
||||||
|
import 'ag-grid-community/styles/ag-theme-alpine.css';
|
||||||
|
|
||||||
|
export type ExcelProps = {
|
||||||
|
url: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export function Excel({ url }: ExcelProps) {
|
||||||
|
const [isLoading, setIsLoading] = useState<boolean>(false);
|
||||||
|
const [activeSheetName, setActiveSheetName] = useState<string>();
|
||||||
|
const [workbook, setWorkbook] = useState<any>();
|
||||||
|
const [rows, setRows] = useState<any>();
|
||||||
|
const [cols, setCols] = useState<any>();
|
||||||
|
|
||||||
|
const loadSpreadsheet = (wb: any, name: string) => {
|
||||||
|
setActiveSheetName(name);
|
||||||
|
const ws = wb.Sheets[name];
|
||||||
|
|
||||||
|
const range = utils.decode_range(ws['!ref'] || 'A1');
|
||||||
|
const columns = Array.from({ length: range.e.c + 1 }, (_, i) => ({
|
||||||
|
field: utils.encode_col(i),
|
||||||
|
}));
|
||||||
|
|
||||||
|
const rowsAr = utils.sheet_to_json(ws, { header: 1 });
|
||||||
|
const rows = rowsAr.map((row) => {
|
||||||
|
const obj = {};
|
||||||
|
columns.forEach((col, i) => {
|
||||||
|
obj[col.field] = row[i];
|
||||||
|
});
|
||||||
|
return obj;
|
||||||
|
});
|
||||||
|
|
||||||
|
setRows(rows);
|
||||||
|
setCols(columns);
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setIsLoading(true);
|
||||||
|
|
||||||
|
fetch(url)
|
||||||
|
.then((res) => res.arrayBuffer())
|
||||||
|
.then((f) => {
|
||||||
|
const wb = read(f);
|
||||||
|
setWorkbook(wb);
|
||||||
|
loadSpreadsheet(wb, wb.SheetNames[0]);
|
||||||
|
setIsLoading(false);
|
||||||
|
});
|
||||||
|
}, [url]);
|
||||||
|
|
||||||
|
return isLoading ? (
|
||||||
|
<div className="w-full flex items-center justify-center w-[600px] h-[300px]">
|
||||||
|
<LoadingSpinner />
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<>
|
||||||
|
{cols && rows && (
|
||||||
|
<div>
|
||||||
|
<div
|
||||||
|
className="ag-theme-alpine"
|
||||||
|
style={{ height: 400, width: '100%' }}
|
||||||
|
>
|
||||||
|
<AgGridReact
|
||||||
|
rowData={rows}
|
||||||
|
columnDefs={cols}
|
||||||
|
defaultColDef={{
|
||||||
|
resizable: true,
|
||||||
|
minWidth: 200,
|
||||||
|
flex: 1,
|
||||||
|
sortable: true,
|
||||||
|
filter: true,
|
||||||
|
}}
|
||||||
|
></AgGridReact>
|
||||||
|
</div>
|
||||||
|
<div className="border-t">
|
||||||
|
{workbook.SheetNames.map((name: string, idx: number) => {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<button
|
||||||
|
key={idx}
|
||||||
|
className={`text-sm px-3 pb-2 pt-4 border-b border-l border-r ${
|
||||||
|
name == activeSheetName ? 'font-semibold' : ''
|
||||||
|
}`}
|
||||||
|
onClick={() => loadSpreadsheet(workbook, name)}
|
||||||
|
>
|
||||||
|
{name}
|
||||||
|
</button>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -6,9 +6,10 @@ import {
|
|||||||
MapContainer,
|
MapContainer,
|
||||||
TileLayer,
|
TileLayer,
|
||||||
GeoJSON as GeoJSONLayer,
|
GeoJSON as GeoJSONLayer,
|
||||||
LayersControl
|
LayersControl,
|
||||||
} from 'react-leaflet';
|
} from 'react-leaflet';
|
||||||
|
|
||||||
|
import 'leaflet/dist/leaflet.css';
|
||||||
import * as L from 'leaflet';
|
import * as L from 'leaflet';
|
||||||
|
|
||||||
export type MapProps = {
|
export type MapProps = {
|
||||||
@@ -131,6 +132,27 @@ export function Map({
|
|||||||
<LayersControl.Overlay key={layer.name} checked name={layer.name}>
|
<LayersControl.Overlay key={layer.name} checked name={layer.name}>
|
||||||
<GeoJSONLayer
|
<GeoJSONLayer
|
||||||
data={data}
|
data={data}
|
||||||
|
// @ts-ignore
|
||||||
|
pointToLayer={(feature, latlng) => {
|
||||||
|
// This resolver an issue in which the bundled map was
|
||||||
|
// not finding the images
|
||||||
|
const leafletBase =
|
||||||
|
'https://unpkg.com/leaflet@1.9.4/dist/images/';
|
||||||
|
|
||||||
|
const icon = new L.Icon({
|
||||||
|
iconUrl: leafletBase + 'marker-icon.png',
|
||||||
|
iconRetinaUrl: leafletBase + 'marker-icon-2x.png',
|
||||||
|
shadowUrl: leafletBase + 'marker-shadow.png',
|
||||||
|
iconSize: [25, 41],
|
||||||
|
iconAnchor: [12, 41],
|
||||||
|
popupAnchor: [1, -34],
|
||||||
|
tooltipAnchor: [16, -28],
|
||||||
|
shadowSize: [41, 41],
|
||||||
|
});
|
||||||
|
|
||||||
|
const iconMarker = L.marker(latlng, { icon });
|
||||||
|
return iconMarker;
|
||||||
|
}}
|
||||||
style={(geoJsonFeature: any) => {
|
style={(geoJsonFeature: any) => {
|
||||||
// Set the fill color of each feature when appliable
|
// Set the fill color of each feature when appliable
|
||||||
if (
|
if (
|
||||||
|
|||||||
32
packages/components/src/components/PdfViewer.tsx
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
// Core viewer
|
||||||
|
import { Viewer, Worker, SpecialZoomLevel } from '@react-pdf-viewer/core';
|
||||||
|
import { defaultLayoutPlugin } from '@react-pdf-viewer/default-layout';
|
||||||
|
|
||||||
|
// Import styles
|
||||||
|
import '@react-pdf-viewer/core/lib/styles/index.css';
|
||||||
|
import '@react-pdf-viewer/default-layout/lib/styles/index.css';
|
||||||
|
|
||||||
|
export interface PdfViewerProps {
|
||||||
|
url: string;
|
||||||
|
layout: boolean;
|
||||||
|
parentClassName?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function PdfViewer({
|
||||||
|
url,
|
||||||
|
layout = false,
|
||||||
|
parentClassName,
|
||||||
|
}: PdfViewerProps) {
|
||||||
|
const defaultLayoutPluginInstance = defaultLayoutPlugin();
|
||||||
|
return (
|
||||||
|
<Worker workerUrl="https://unpkg.com/pdfjs-dist@2.15.349/build/pdf.worker.js">
|
||||||
|
<div className={parentClassName}>
|
||||||
|
<Viewer
|
||||||
|
defaultScale={SpecialZoomLevel.PageWidth}
|
||||||
|
fileUrl={url}
|
||||||
|
plugins={layout ? [defaultLayoutPluginInstance] : []}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</Worker>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,7 +1,11 @@
|
|||||||
|
|
||||||
@import "tailwindcss/base";
|
@import "tailwindcss/base";
|
||||||
@import "tailwindcss/components";
|
@import "tailwindcss/components";
|
||||||
@import "leaflet";
|
|
||||||
@import "include";
|
@import "include";
|
||||||
|
@import "leaflet";
|
||||||
|
@import '@react-pdf-viewer/core/lib/styles/index.css';
|
||||||
|
@import '@react-pdf-viewer/default-layout/lib/styles/index.css';
|
||||||
|
@import 'ag-grid-community/styles/ag-grid.css';
|
||||||
|
@import 'ag-grid-community/styles/ag-theme-alpine.css';
|
||||||
@import "tailwindcss/utilities";
|
@import "tailwindcss/utilities";
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
export * from "./components/Table";
|
export * from './components/Table';
|
||||||
export * from "./components/Catalog";
|
export * from './components/Catalog';
|
||||||
export * from "./components/LineChart";
|
export * from './components/LineChart';
|
||||||
export * from "./components/Vega";
|
export * from './components/Vega';
|
||||||
export * from "./components/VegaLite";
|
export * from './components/VegaLite';
|
||||||
export * from "./components/FlatUiTable";
|
export * from './components/FlatUiTable';
|
||||||
export * from './components/OpenLayers/OpenLayers';
|
export * from './components/OpenLayers/OpenLayers';
|
||||||
export * from "./components/Map";
|
export * from './components/Map';
|
||||||
|
export * from './components/PdfViewer';
|
||||||
|
export * from "./components/Excel";
|
||||||
|
|||||||
34
packages/components/stories/Excel.stories.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import type { Meta, StoryObj } from '@storybook/react';
|
||||||
|
|
||||||
|
import { Excel, ExcelProps } from '../src/components/Excel';
|
||||||
|
|
||||||
|
// More on how to set up stories at: https://storybook.js.org/docs/react/writing-stories/introduction
|
||||||
|
const meta: Meta = {
|
||||||
|
title: 'Components/Excel',
|
||||||
|
component: Excel,
|
||||||
|
tags: ['autodocs'],
|
||||||
|
argTypes: {
|
||||||
|
url: {
|
||||||
|
description:
|
||||||
|
'Url of the file to be displayed e.g.: "https://url.to/data.csv"',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default meta;
|
||||||
|
|
||||||
|
type Story = StoryObj<ExcelProps>;
|
||||||
|
|
||||||
|
export const SingleSheet: Story = {
|
||||||
|
name: 'Excel file with just one sheet',
|
||||||
|
args: {
|
||||||
|
url: 'https://sheetjs.com/pres.xlsx',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const MultipleSheet: Story = {
|
||||||
|
name: 'Excel file with multiple sheets',
|
||||||
|
args: {
|
||||||
|
url: 'https://storage.portaljs.org/IC-Gantt-Chart-Project-Template-8857.xlsx',
|
||||||
|
},
|
||||||
|
};
|
||||||
50
packages/components/stories/PdfViewer.stories.ts
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
import type { Meta, StoryObj } from '@storybook/react';
|
||||||
|
|
||||||
|
import { PdfViewer, PdfViewerProps } from '../src/components/PdfViewer';
|
||||||
|
|
||||||
|
const meta: Meta = {
|
||||||
|
title: 'Components/PdfViewer',
|
||||||
|
component: PdfViewer,
|
||||||
|
tags: ['autodocs'],
|
||||||
|
argTypes: {
|
||||||
|
url: {
|
||||||
|
description: 'URL to PDF file',
|
||||||
|
},
|
||||||
|
parentClassName: {
|
||||||
|
description: 'Classname for the parent div of the pdf viewer',
|
||||||
|
},
|
||||||
|
layour: {
|
||||||
|
description:
|
||||||
|
'Set to true if you want to have a layout with zoom level, page count, printing button etc',
|
||||||
|
defaultValue: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default meta;
|
||||||
|
|
||||||
|
type Story = StoryObj<PdfViewerProps>;
|
||||||
|
|
||||||
|
export const PdfViewerStory: Story = {
|
||||||
|
name: 'PdfViewer',
|
||||||
|
args: {
|
||||||
|
url: 'https://cdn.filestackcontent.com/wcrjf9qPTCKXV3hMXDwK',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const PdfViewerStoryWithLayout: Story = {
|
||||||
|
name: 'PdfViewer with the default layout',
|
||||||
|
args: {
|
||||||
|
url: 'https://cdn.filestackcontent.com/wcrjf9qPTCKXV3hMXDwK',
|
||||||
|
layout: true,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const PdfViewerStoryWithHeight: Story = {
|
||||||
|
name: 'PdfViewer with a custom height',
|
||||||
|
args: {
|
||||||
|
url: 'https://cdn.filestackcontent.com/wcrjf9qPTCKXV3hMXDwK',
|
||||||
|
parentClassName: 'h-96',
|
||||||
|
layout: true,
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -1,6 +1,10 @@
|
|||||||
/** @type {import('tailwindcss').Config} */
|
/** @type {import('tailwindcss').Config} */
|
||||||
export default {
|
export default {
|
||||||
content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'],
|
content: [
|
||||||
|
'./index.html',
|
||||||
|
'./src/**/*.{js,ts,jsx,tsx}',
|
||||||
|
'./stories/*.{js,ts,jsx,tsx}',
|
||||||
|
],
|
||||||
theme: {},
|
theme: {},
|
||||||
plugins: [],
|
plugins: [],
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import { defineConfig } from 'vitest/config';
|
|||||||
import dts from 'vite-plugin-dts';
|
import dts from 'vite-plugin-dts';
|
||||||
import tailwindcss from 'tailwindcss';
|
import tailwindcss from 'tailwindcss';
|
||||||
import { UserConfigExport } from 'vite';
|
import { UserConfigExport } from 'vite';
|
||||||
import replace from 'rollup-plugin-re';
|
|
||||||
|
|
||||||
const app = async (): Promise<UserConfigExport> => {
|
const app = async (): Promise<UserConfigExport> => {
|
||||||
return defineConfig({
|
return defineConfig({
|
||||||
@@ -37,7 +36,7 @@ const app = async (): Promise<UserConfigExport> => {
|
|||||||
'vega',
|
'vega',
|
||||||
'react-vega',
|
'react-vega',
|
||||||
'ol',
|
'ol',
|
||||||
'leaflet'
|
'leaflet',
|
||||||
],
|
],
|
||||||
output: {
|
output: {
|
||||||
manualChunks: undefined,
|
manualChunks: undefined,
|
||||||
@@ -48,7 +47,7 @@ const app = async (): Promise<UserConfigExport> => {
|
|||||||
'react-vega': 'react-vega',
|
'react-vega': 'react-vega',
|
||||||
'react-dom': 'ReactDOM',
|
'react-dom': 'ReactDOM',
|
||||||
tailwindcss: 'tailwindcss',
|
tailwindcss: 'tailwindcss',
|
||||||
leaflet: 'leaflet'
|
leaflet: 'leaflet',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
5
site/.gitignore
vendored
@@ -35,3 +35,8 @@ yarn-error.log*
|
|||||||
|
|
||||||
# markdowndb
|
# markdowndb
|
||||||
markdown.db
|
markdown.db
|
||||||
|
|
||||||
|
# seo
|
||||||
|
robots.txt
|
||||||
|
sitemap-0.xml
|
||||||
|
sitemap.xml
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ export default function Features() {
|
|||||||
>
|
>
|
||||||
<div className="absolute -inset-px rounded-xl border-2 border-transparent opacity-0 [background:linear-gradient(var(--quick-links-hover-bg,theme(colors.sky.50)),var(--quick-links-hover-bg,theme(colors.sky.50)))_padding-box,linear-gradient(to_top,theme(colors.blue.300),theme(colors.blue.400),theme(colors.blue.500))_border-box] group-hover:opacity-100 dark:[--quick-links-hover-bg:theme(colors.slate.800)]" />
|
<div className="absolute -inset-px rounded-xl border-2 border-transparent opacity-0 [background:linear-gradient(var(--quick-links-hover-bg,theme(colors.sky.50)),var(--quick-links-hover-bg,theme(colors.sky.50)))_padding-box,linear-gradient(to_top,theme(colors.blue.300),theme(colors.blue.400),theme(colors.blue.500))_border-box] group-hover:opacity-100 dark:[--quick-links-hover-bg:theme(colors.slate.800)]" />
|
||||||
<div className="relative overflow-hidden rounded-xl p-6">
|
<div className="relative overflow-hidden rounded-xl p-6">
|
||||||
<img src={feature.icon} alt="" className="h-24 w-auto" />
|
<img src={feature.icon} alt={feature.title} className="h-24 w-auto" />
|
||||||
<h2 className="mt-4 font-display text-base text-primary dark:text-primary-dark">
|
<h2 className="mt-4 font-display text-base text-primary dark:text-primary-dark">
|
||||||
<span className="absolute -inset-px rounded-xl" />
|
<span className="absolute -inset-px rounded-xl" />
|
||||||
{feature.title}
|
{feature.title}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { useRef } from 'react';
|
|||||||
import ButtonLink from './ButtonLink';
|
import ButtonLink from './ButtonLink';
|
||||||
import NewsletterForm from './NewsletterForm';
|
import NewsletterForm from './NewsletterForm';
|
||||||
import Image from 'next/image';
|
import Image from 'next/image';
|
||||||
import DatahubExampleImg from "@/public/images/showcases/datahub.png"
|
import DatahubExampleImg from '@/public/images/showcases/datahub.webp';
|
||||||
|
|
||||||
const codeLanguage = 'javascript';
|
const codeLanguage = 'javascript';
|
||||||
const code = `export default {
|
const code = `export default {
|
||||||
@@ -41,7 +41,7 @@ export function Hero() {
|
|||||||
{/* Commented code on line 37, 39 and 113 will reenable the two columns hero */}
|
{/* Commented code on line 37, 39 and 113 will reenable the two columns hero */}
|
||||||
<div className="mx-auto grid max-w-2xl grid-cols-1 gap-y-16 gap-x-8 px-4 lg:max-w-8xl lg:grid-cols-2 lg:px-8 xl:gap-x-16 xl:px-12">
|
<div className="mx-auto grid max-w-2xl grid-cols-1 gap-y-16 gap-x-8 px-4 lg:max-w-8xl lg:grid-cols-2 lg:px-8 xl:gap-x-16 xl:px-12">
|
||||||
<div className="relative mb-10 lg:mb-0 md:text-center lg:text-left">
|
<div className="relative mb-10 lg:mb-0 md:text-center lg:text-left">
|
||||||
<div role="heading">
|
<div>
|
||||||
<h1 className="inline bg-gradient-to-r from-blue-500 via-blue-300 to-blue-500 bg-clip-text text-5xl tracking-tight text-transparent">
|
<h1 className="inline bg-gradient-to-r from-blue-500 via-blue-300 to-blue-500 bg-clip-text text-5xl tracking-tight text-transparent">
|
||||||
The JavaScript framework for data portals
|
The JavaScript framework for data portals
|
||||||
</h1>
|
</h1>
|
||||||
@@ -72,9 +72,11 @@ export function Hero() {
|
|||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
>
|
>
|
||||||
<img
|
<Image
|
||||||
src="/images/datopian_logo.png"
|
src="/images/datopian_logo.png"
|
||||||
alt="Datopian"
|
alt="Datopian"
|
||||||
|
width={24}
|
||||||
|
height={20}
|
||||||
className="mx-2 mb-1 h-6 inline bg-black rounded-full"
|
className="mx-2 mb-1 h-6 inline bg-black rounded-full"
|
||||||
/>
|
/>
|
||||||
<span>Datopian</span>
|
<span>Datopian</span>
|
||||||
@@ -85,7 +87,12 @@ export function Hero() {
|
|||||||
<div className="relative rounded-2xl bg-[#0A101F]/80 ring-1 ring-white/10 backdrop-blur">
|
<div className="relative rounded-2xl bg-[#0A101F]/80 ring-1 ring-white/10 backdrop-blur">
|
||||||
<div className="absolute -top-px left-20 right-11 h-px bg-gradient-to-r from-sky-300/0 via-sky-300/70 to-sky-300/0" />
|
<div className="absolute -top-px left-20 right-11 h-px bg-gradient-to-r from-sky-300/0 via-sky-300/70 to-sky-300/0" />
|
||||||
<div className="absolute -bottom-px left-11 right-20 h-px bg-gradient-to-r from-blue-400/0 via-blue-400 to-blue-400/0" />
|
<div className="absolute -bottom-px left-11 right-20 h-px bg-gradient-to-r from-blue-400/0 via-blue-400 to-blue-400/0" />
|
||||||
<Image src={DatahubExampleImg} alt="opendata.datahub.io" />
|
<Image
|
||||||
|
height={400}
|
||||||
|
width={600}
|
||||||
|
src={DatahubExampleImg}
|
||||||
|
alt="opendata.datahub.io"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ export default function MDXPage({ source, frontMatter }) {
|
|||||||
return <LayoutComponent {...frontMatter}>{children}</LayoutComponent>;
|
return <LayoutComponent {...frontMatter}>{children}</LayoutComponent>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout>
|
<Layout>
|
||||||
<MDXRemote {...source} components={{ DocsPagination, NextSeo, Hero }} />
|
<MDXRemote {...source} components={{ DocsPagination, NextSeo, Hero }} />
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ export default function NavItem({ item }) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Menu as="div" className="relative">
|
<Menu as="div" role="menu" className="relative">
|
||||||
<Menu.Item>
|
<Menu.Item>
|
||||||
{Object.prototype.hasOwnProperty.call(item, 'href') ? (
|
{Object.prototype.hasOwnProperty.call(item, 'href') ? (
|
||||||
<Link
|
<Link
|
||||||
|
|||||||
@@ -3,10 +3,6 @@ import Script from 'next/script';
|
|||||||
export default function NewsletterForm() {
|
export default function NewsletterForm() {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<link
|
|
||||||
rel="stylesheet"
|
|
||||||
href="https://sibforms.com/forms/end-form/build/sib-styles.css"
|
|
||||||
/>
|
|
||||||
<div
|
<div
|
||||||
id="sib-form-container"
|
id="sib-form-container"
|
||||||
className="mt-8 sm:mx-auto sm:text-center lg:text-left lg:mx-0"
|
className="mt-8 sm:mx-auto sm:text-center lg:text-left lg:mx-0"
|
||||||
@@ -119,6 +115,7 @@ export default function NewsletterForm() {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<Script
|
<Script
|
||||||
|
strategy="worker"
|
||||||
id="newsletter-submit-form"
|
id="newsletter-submit-form"
|
||||||
src="https://sibforms.com/forms/end-form/build/main.js"
|
src="https://sibforms.com/forms/end-form/build/main.js"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -5,26 +5,26 @@ const items = [
|
|||||||
{
|
{
|
||||||
title: 'Open Data Northern Ireland',
|
title: 'Open Data Northern Ireland',
|
||||||
href: 'https://www.opendatani.gov.uk/',
|
href: 'https://www.opendatani.gov.uk/',
|
||||||
image: '/images/showcases/odni.png',
|
image: '/images/showcases/odni.webp',
|
||||||
description: 'Government Open Data Portal',
|
description: 'Government Open Data Portal',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Birmingham City Observatory',
|
title: 'Birmingham City Observatory',
|
||||||
href: 'https://www.cityobservatory.birmingham.gov.uk/',
|
href: 'https://www.cityobservatory.birmingham.gov.uk/',
|
||||||
image: '/images/showcases/birmingham.png',
|
image: '/images/showcases/birmingham.webp',
|
||||||
description: 'Government Open Data Portal',
|
description: 'Government Open Data Portal',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'UAE Open Data',
|
title: 'UAE Open Data',
|
||||||
href: 'https://opendata.fcsc.gov.ae/',
|
href: 'https://opendata.fcsc.gov.ae/',
|
||||||
image: '/images/showcases/uae.png',
|
image: '/images/showcases/uae.webp',
|
||||||
description: 'Government Open Data Portal',
|
description: 'Government Open Data Portal',
|
||||||
sourceUrl: 'https://github.com/FCSCOpendata/frontend',
|
sourceUrl: 'https://github.com/FCSCOpendata/frontend',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Datahub Open Data',
|
title: 'Datahub Open Data',
|
||||||
href: 'https://opendata.datahub.io/',
|
href: 'https://opendata.datahub.io/',
|
||||||
image: '/images/showcases/datahub.png',
|
image: '/images/showcases/datahub.webp',
|
||||||
description: 'Demo Data Portal by DataHub',
|
description: 'Demo Data Portal by DataHub',
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
BIN
site/content/assets/blog/2023-07-18-map-polygons-and-points.png
Normal file
|
After Width: | Height: | Size: 416 KiB |
BIN
site/content/assets/blog/2023-07-18-map-polygons-on-region.png
Normal file
|
After Width: | Height: | Size: 187 KiB |
BIN
site/content/assets/blog/2023-07-18-map-tooltips.png
Normal file
|
After Width: | Height: | Size: 467 KiB |
BIN
site/content/assets/blog/gh-authorize.png
Normal file
|
After Width: | Height: | Size: 792 KiB |
BIN
site/content/assets/blog/gh-desktop-clone-path-select.png
Normal file
|
After Width: | Height: | Size: 218 KiB |
BIN
site/content/assets/blog/gh-desktop-clone-signin.png
Normal file
|
After Width: | Height: | Size: 192 KiB |
BIN
site/content/assets/blog/gh-desktop-clone.png
Normal file
|
After Width: | Height: | Size: 212 KiB |
BIN
site/content/assets/blog/gh-desktop-no-local-changes.png
Normal file
|
After Width: | Height: | Size: 237 KiB |
BIN
site/content/assets/blog/gh-desktop-signin-using-browser.png
Normal file
|
After Width: | Height: | Size: 233 KiB |
BIN
site/content/assets/blog/gh-desktop-starting-screen.png
Normal file
|
After Width: | Height: | Size: 168 KiB |
BIN
site/content/assets/blog/github-desktop-add-commit-message.png
Normal file
|
After Width: | Height: | Size: 227 KiB |
BIN
site/content/assets/blog/github-desktop-all-changed-files.png
Normal file
|
After Width: | Height: | Size: 223 KiB |
BIN
site/content/assets/blog/github-desktop-commit-message.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
site/content/assets/blog/github-desktop-history-after-push.png
Normal file
|
After Width: | Height: | Size: 276 KiB |
BIN
site/content/assets/blog/github-desktop-history.png
Normal file
|
After Width: | Height: | Size: 277 KiB |
BIN
site/content/assets/blog/live-book-home-page.png
Normal file
|
After Width: | Height: | Size: 213 KiB |
BIN
site/content/assets/blog/live-book.png
Normal file
|
After Width: | Height: | Size: 276 KiB |
BIN
site/content/assets/blog/obsidian-content-add-folder-2.png
Normal file
|
After Width: | Height: | Size: 210 KiB |
BIN
site/content/assets/blog/obsidian-content-add-folder.png
Normal file
|
After Width: | Height: | Size: 212 KiB |
BIN
site/content/assets/blog/obsidian-content-book-index-2.png
Normal file
|
After Width: | Height: | Size: 260 KiB |
BIN
site/content/assets/blog/obsidian-content-book-index-3.png
Normal file
|
After Width: | Height: | Size: 208 KiB |
BIN
site/content/assets/blog/obsidian-content-book-index.png
Normal file
|
After Width: | Height: | Size: 183 KiB |
BIN
site/content/assets/blog/obsidian-content-book.png
Normal file
|
After Width: | Height: | Size: 271 KiB |
BIN
site/content/assets/blog/obsidian-content-index-add-link-2.png
Normal file
|
After Width: | Height: | Size: 208 KiB |
BIN
site/content/assets/blog/obsidian-content-index-add-link.png
Normal file
|
After Width: | Height: | Size: 236 KiB |
|
After Width: | Height: | Size: 254 KiB |
BIN
site/content/assets/blog/obsidian-content-index-callout.png
Normal file
|
After Width: | Height: | Size: 280 KiB |
BIN
site/content/assets/blog/obsidian-content-index-edit.png
Normal file
|
After Width: | Height: | Size: 205 KiB |
BIN
site/content/assets/blog/obsidian-content-index-link-aliases.png
Normal file
|
After Width: | Height: | Size: 255 KiB |
BIN
site/content/assets/blog/obsidian-content-start.png
Normal file
|
After Width: | Height: | Size: 195 KiB |
BIN
site/content/assets/blog/obsidian-starting.png
Normal file
|
After Width: | Height: | Size: 105 KiB |
BIN
site/content/assets/blog/tutorial-2-result.png
Normal file
|
After Width: | Height: | Size: 305 KiB |
BIN
site/content/assets/blog/vercel-dashboard.png
Normal file
|
After Width: | Height: | Size: 277 KiB |
BIN
site/content/assets/blog/vercel-project-dashboard.png
Normal file
|
After Width: | Height: | Size: 444 KiB |
@@ -1,15 +1,15 @@
|
|||||||
---
|
---
|
||||||
title: 'Tutorial 1: Create a website from scratch using Markdown and PortalJS'
|
title: 'Tutorial 1: Create a website from scratch using Markdown and Flowershow'
|
||||||
date: 2023-06-20
|
date: 2023-06-20
|
||||||
authors: ['Ola Rubaj']
|
authors: ['Ola Rubaj']
|
||||||
filetype: 'blog'
|
filetype: 'blog'
|
||||||
---
|
---
|
||||||
|
|
||||||
In this tutorial we will walk you through creating an elegant, fully functional website written in simple markdown and published with PortalJS.
|
In this tutorial we will walk you through creating an elegant, fully functional website written in simple markdown and published with Flowershow.
|
||||||
|
|
||||||
By the end of this tutorial you will:
|
By the end of this tutorial you will:
|
||||||
|
|
||||||
- have a working markdown-based website powered by PortalJS.
|
- have a working markdown-based website powered by Flowershow.
|
||||||
- be able to edit the text and add pages, all from an online interface without installing anything.
|
- be able to edit the text and add pages, all from an online interface without installing anything.
|
||||||
|
|
||||||
Below is a screenshot of how the final website will look like:
|
Below is a screenshot of how the final website will look like:
|
||||||
|
|||||||
250
site/content/blog/edit-a-website-locally.md
Normal file
@@ -0,0 +1,250 @@
|
|||||||
|
---
|
||||||
|
title: 'Tutorial 2: Edit your Flowershow website locally on your computer'
|
||||||
|
date: 2023-06-22
|
||||||
|
authors: ['Ola Rubaj']
|
||||||
|
filetype: 'blog'
|
||||||
|
---
|
||||||
|
|
||||||
|
In this tutorial, we will walk you through the process of editing your Flowershow website locally on your computer.
|
||||||
|
|
||||||
|
By the end of this tutorial, you will:
|
||||||
|
|
||||||
|
- Understand what is Markdown and why you should use Obsidian to edit content on your Flowershow websites in most cases.
|
||||||
|
- Gain a deeper understanding of working with Git and GitHub Desktop.
|
||||||
|
- Learn how to clone your website's repository to your computer.
|
||||||
|
- Learn how to edit content using Obsidian and what are the benefits of it.
|
||||||
|
- Learn how to commit (save) your changes locally and push them back to the GitHub repository.
|
||||||
|
|
||||||
|
Below is a screenshot of how the final website will look like:
|
||||||
|
|
||||||
|
![[tutorial-2-result.png]]
|
||||||
|
|
||||||
|
Let's start by understanding why using GitHub UI as we did in tutorial 1 is not always a good choice.
|
||||||
|
|
||||||
|
## What is Markdown and why use Obsidian for editing it in Flowershow-based websites
|
||||||
|
|
||||||
|
While editing on the GitHub UI is convenient, there are certain limitations and drawbacks to consider. For example, you can't work offline, can't add or edit multiple files simultaneously, and the GitHub UI's preview doesn't render all the Markdown syntax elements that are supported by Flowershow-based websites.
|
||||||
|
|
||||||
|
Ok, but, what exactly is Markdown?
|
||||||
|
|
||||||
|
[Markdown](https://en.wikipedia.org/wiki/Markdown) is a simple and intuitive syntax, that allows you to structure your text documents. It's widely used for creating content on the web. As Wikipedia puts it:
|
||||||
|
|
||||||
|
> *Markdown is a lightweight [**markup language**](https://en.wikipedia.org/wiki/Markup_language) for creating [**formatted text**](https://en.wikipedia.org/wiki/Formatted_text) using a **plain-text editor**.*
|
||||||
|
|
||||||
|
The key term here is "markup language". In simple terms, it is a way to annotate or "mark up" a plain text document with symbols that describe how the document is structured and so, how it should be understood, processed, or displayed. These tags can tell a computer program that supports this syntax (e.g. a website) how to format the rendered text, for example: which words should be bold or italic, where to insert images, when to start new paragraphs, how to create tables, and so forth. It's important to note, that even though Markdown symbols change how the text is displayed when it's rendered by a Markdown-compatible viewer, the underlying document in still just a plain text. For instance, if you want to create a heading in Markdown, you use the "#" symbol before your heading text, like this:
|
||||||
|
|
||||||
|
```md
|
||||||
|
# This is a Heading
|
||||||
|
```
|
||||||
|
|
||||||
|
BUT, there is no single version of Markdown. It comes in different "flavours", with CommonMark and GitHub Flavoured Markdown (GFM) being the most popular ones. And different tools supporting Markdown may use their own specific versions of Markdown. The two tools relevant in the context of this guide are Obsidian and Flowershow.
|
||||||
|
|
||||||
|
Obsidian supports an extended version of Markdown that includes majority of elements from CommonMark and GFM, while also introducing its own unique features, like [wiki-links](https://help.obsidian.md/Linking+notes+and+files/Internal+links) or [callouts](https://help.obsidian.md/Editing+and+formatting/Callouts). And Flowershow template is Obsidian-compatible, meaning it supports (or aims to support) all of the Obsidian Markdown features.
|
||||||
|
|
||||||
|
To make things a bit clearer, there are:
|
||||||
|
|
||||||
|
- CommonMark
|
||||||
|
- GitHub Flavored Markdown (GFM) - superset of CommonMark
|
||||||
|
- "Obsidian flavoured Markdown" - majority of the GFM + some extra elements, like wiki-links or callouts
|
||||||
|
- "Flowershow flavoured Markdown" - majority of Obsidian-supported syntax
|
||||||
|
|
||||||
|
As you might have guessed by now, GitHub UI will only preview GitHub Flavoured Markdown. And while it's a majority of Markdown you would write, it won't be able to render Obsidian-only (or Flowershow-only) syntax elements, like callouts, wiki-links or inline table of contents.
|
||||||
|
|
||||||
|
Another drawback of GitHub UI, is that it doesn't allow you to make changes (or to add) multiple files at once. Changes to each file will have to be commited (saved) separately, which can introduce a bit of a mess to your GitHub history, and may be cumbersome (e.g. if you want to update a link to some page on 10 other pages...).
|
||||||
|
|
||||||
|
Ok, now we have this sorted, let's dive in and start editing your Flowershow website locally!
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- A [GitHub](https://github.com/) account.
|
||||||
|
- A [Vercel](https://vercel.com/) account. You can set it up using your GitHub account.
|
||||||
|
- [Obsidian](https://obsidian.md/) installed
|
||||||
|
- [GitHub Desktop](https://desktop.github.com/) installed
|
||||||
|
- [[create-a-website-from-scratch|Tutorial 1: Create a website from scratch using Markdown and PortalJS]] completed - this one is recommended so that you have the same sandbox website we're working on in this tutorial.
|
||||||
|
|
||||||
|
## Clone the GitHub repository on your computer
|
||||||
|
|
||||||
|
### 1. Open GitHub Desktop app
|
||||||
|
|
||||||
|
### 2. Click on "Clone a Repository from the Internet..."
|
||||||
|
|
||||||
|
Or click on "File" -> "Clone repository".
|
||||||
|
|
||||||
|
![[gh-desktop-starting-screen.png]]
|
||||||
|
|
||||||
|
If this is the first time you're using GitHub Desktop, it will prompt you to log in to your GitHub account. Click "Sign In" and follow the prompts.
|
||||||
|
|
||||||
|
![[gh-desktop-clone-signin.png]]
|
||||||
|
|
||||||
|
Once you're done and you've authorised GitHub Desktop to access your repositories, go back to GitHub Desktop. You should now see a list of all your GitHub repositories.
|
||||||
|
|
||||||
|
### 3. Select the repository you want to clone
|
||||||
|
|
||||||
|
![[gh-desktop-clone.png]]
|
||||||
|
|
||||||
|
### 4. Choose where your repository should be saved
|
||||||
|
|
||||||
|
Type the path manually or click "Choose..." to find it using file explorer.
|
||||||
|
|
||||||
|
![[gh-desktop-clone-path-select.png]]
|
||||||
|
|
||||||
|
### 5. Click "Clone" and wait for the process to complete
|
||||||
|
|
||||||
|
You should now see the following screen:
|
||||||
|
|
||||||
|
![[gh-desktop-no-local-changes.png]]
|
||||||
|
|
||||||
|
Done! You've successfully cloned your website's repository on your computer! 🎉
|
||||||
|
|
||||||
|
## Edit your site in Obsidian
|
||||||
|
|
||||||
|
### 1. Open Obsidian
|
||||||
|
|
||||||
|
### 2. Open your repository's `/content` folder as vault
|
||||||
|
|
||||||
|
Click on "Open" in "Open folder as vault" section and select the path to the `/content` of the cloned repository.
|
||||||
|
|
||||||
|
![[obsidian-starting.png]]
|
||||||
|
Now you're ready to edit your site! In the left-hand side panel you should see the two files we created in [[create-a-website-from-scratch|tutorial 1]]: `index.md` and `about.md`.
|
||||||
|
|
||||||
|
![[obsidian-content-start.png]]
|
||||||
|
|
||||||
|
### 3. Edit your site's content
|
||||||
|
|
||||||
|
Now, let's add some more stuff to the home page.
|
||||||
|
|
||||||
|
Click on `index.md` to open it and replace the dummy text with "About Me" section, .e.g.:
|
||||||
|
|
||||||
|
```md
|
||||||
|
## About Me
|
||||||
|
|
||||||
|
Hey there! I'm Your Name, a passionate learner and explorer of ideas.
|
||||||
|
```
|
||||||
|
|
||||||
|
![[obsidian-content-index-edit.png]]
|
||||||
|
|
||||||
|
Now, let's say for more information about you and your site, you want to add link to the about page. You can do so, by creating a wiki-link to that page, like so:
|
||||||
|
|
||||||
|
```md
|
||||||
|
[[about]]
|
||||||
|
```
|
||||||
|
|
||||||
|
When you start typing, after writing empty double brackets `[[]]`, Obsidian will suggest all the available pages you can link to, and after you select one it will create the link automatically for you.
|
||||||
|
|
||||||
|
![[obsidian-content-index-add-link.png]]
|
||||||
|
![[obsidian-content-index-add-link-2.png]]
|
||||||
|
|
||||||
|
Now, let's say you want to show people what books you've read and share your reviews and other information on each one. And let's say information on each book should be available at `/books/abc` path on our website. To achieve this, you need to create a folder called `books` in your vault and add all the project-related files in there.
|
||||||
|
|
||||||
|
To create a new folder in Obsidian, click on the "New folder" icon, and give your folder a name:
|
||||||
|
|
||||||
|
![[obsidian-content-add-folder.png]]
|
||||||
|
|
||||||
|
![[obsidian-content-add-folder-2.png]]
|
||||||
|
|
||||||
|
Now, let's write some book reviews. You can do this by right-clicking on the `/books` folder, and selecting "New note" option. Rename the newly created `Untitled.md` file and add some review in it. Then add some other reviews.
|
||||||
|
|
||||||
|
![[obsidian-content-book.png]]
|
||||||
|
|
||||||
|
Ok, now let's make a page that will list all your books reviews - our Bookshelf! It would be nice to have it available under `/books` path on the website, since each of our books will be available under `/books/abc`. To achieve this, we have to create an index page **inside** our `/books` folder, like so:
|
||||||
|
|
||||||
|
![[obsidian-content-book-index.png]]
|
||||||
|
|
||||||
|
Then, let's list our book reviews with wiki-links to their pages:
|
||||||
|
|
||||||
|
![[obsidian-content-book-index-2.png]]
|
||||||
|
|
||||||
|
![[obsidian-content-book-index-3.png]]
|
||||||
|
|
||||||
|
Now, let's add a link to our Bookshelf page on our home page, so that it's easy to find.
|
||||||
|
|
||||||
|
![[obsidian-content-index-bookshelf-link.png]]
|
||||||
|
|
||||||
|
Now, if you want to have your link say something different than the raw `books/index`, you can do this by typing `|` after the path and specifying an alternative name, .e.g:
|
||||||
|
|
||||||
|
```md
|
||||||
|
[[books/index|Bookshelf]]
|
||||||
|
```
|
||||||
|
|
||||||
|
Let's also do this for the about page:
|
||||||
|
|
||||||
|
```md
|
||||||
|
[[about|About me]]
|
||||||
|
```
|
||||||
|
|
||||||
|
![[obsidian-content-index-link-aliases.png]]
|
||||||
|
|
||||||
|
That's better!
|
||||||
|
|
||||||
|
Now, let's maybe add a short info at the bottom, that this site is new and is currently being worked on, in form of an Obsidian callout:
|
||||||
|
|
||||||
|
```md
|
||||||
|
> [!info]
|
||||||
|
> 🚧 This site it pretty new and I'm enhancing it every day. Stay tuned!
|
||||||
|
```
|
||||||
|
|
||||||
|
![[obsidian-content-index-callout.png]]
|
||||||
|
|
||||||
|
Great, our updated site is ready to be published! 🔥
|
||||||
|
|
||||||
|
## Save and publish your changes
|
||||||
|
|
||||||
|
### 1. Navigate to GitHub Desktop app
|
||||||
|
|
||||||
|
In the "Changes" tab, you'll see all the changes that have been made to the repository.
|
||||||
|
|
||||||
|
![[github-desktop-all-changed-files.png]]
|
||||||
|
|
||||||
|
All the new files will have `[+]` sign next to them, and all the edited files will have `[•]`.
|
||||||
|
|
||||||
|
### 2. Commit your changes
|
||||||
|
|
||||||
|
Now, to save these changes we need to "commit" them, which is a fancy term for making a checkpoint of the state at which your repository is currently in.
|
||||||
|
|
||||||
|
Let's make this checkpoint! In the bottom left corner there is a "Summary (required)" field, which is the place for a commit message - a concise description of the changes you made. The "Description" field is optional, and it's only needed if you need to add some more information about your changes that doesn't fit in the commit message.
|
||||||
|
|
||||||
|
![[github-desktop-add-commit-message.png]]
|
||||||
|
|
||||||
|
Now, hit the "Commit to main" button, and done! Now GitHub Desktop should say there are no local changes again. And that's correct, as all the changes we made have successfully been saved, and no other changes have been made since then.
|
||||||
|
|
||||||
|
You should see the last commit message under the button:
|
||||||
|
|
||||||
|
![[github-desktop-commit-message.png]]
|
||||||
|
|
||||||
|
You can also inspect the whole history of past commits in the "History tab".
|
||||||
|
|
||||||
|
![[github-desktop-history.png]]
|
||||||
|
|
||||||
|
The very fist commit on top is the commit we've just made, but you can also see all the commits to the repository we made in [[create-a-website-from-scratch|tutorial 1]], via GitHub UI.
|
||||||
|
|
||||||
|
### 3. Push your changes to the remote repository
|
||||||
|
|
||||||
|
The commit we've just crated has ↑ sign next to it. It means it hasn't yet been pushed to our remote version of the repository - the changes you made has been saved, but only locally on your computer. In order to push them to the cloud copy of the repository (aka "remote"), click "↑ Push origin (1 ↑)" tab.
|
||||||
|
|
||||||
|
When the "push" is complete, the arrow next to the last commit message should disappear, and there should be no `(1 )` indicator next to "Push origin" button.
|
||||||
|
|
||||||
|
![[github-desktop-history-after-push.png]]
|
||||||
|
|
||||||
|
### 4. See updated site live!
|
||||||
|
|
||||||
|
Navigate to your [vercel dashboard](https://vercel.com/dashboard).
|
||||||
|
|
||||||
|
![[vercel-dashboard.png]]
|
||||||
|
|
||||||
|
Click on the project repository to go to its dashboard.
|
||||||
|
|
||||||
|
You may have to wait a bit until the site builds, but once it's ready, you should see the preview with our latest changes.
|
||||||
|
|
||||||
|
![[vercel-project-dashboard.png]]
|
||||||
|
|
||||||
|
Note, that under "SOURCE" section (next to the preview) there is also our last commit message, indicating that the latest deployment has been triggered by this commit.
|
||||||
|
|
||||||
|
Click on the preview to see the updated site live!
|
||||||
|
|
||||||
|
![[tutorial-2-result.png]]
|
||||||
|
![[live-book-home-page.png]]
|
||||||
|
![[live-book.png]]
|
||||||
|
|
||||||
|
Congratulations!
|
||||||
|
|
||||||
|
You have successfully completed the tutorial on editing your Flowershow website locally on your computer. By utilising Obsidian and GitHub Desktop, you have unlocked powerful editing capabilities and improved the overall publishing process. Now, you can enjoy the benefits of offline editing, simultaneous file editing, and previewing the extended Markdown syntax provided by Obsidian.
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
---
|
||||||
|
title: 'Enhancing Geospatial Data Visualization with PortalJS'
|
||||||
|
date: 2023-07-18
|
||||||
|
authors: ['João Demenech', 'Luccas Mateus', 'Yoana Popova']
|
||||||
|
filetype: 'blog'
|
||||||
|
---
|
||||||
|
|
||||||
|
Are you keen on building rich and interactive data portals? Do you find value in the power and flexibility of JavaScript, Nextjs, and React? In that case, allow us to introduce you to [PortalJS](https://portaljs.org/), a state-of-the-art framework leveraging these technologies to help you build amazing data portals.
|
||||||
|
|
||||||
|
Perhaps you already understand that the effective data visualization lies in the adept utilization of various data components. Within [PortalJS](https://portaljs.org/), we take data visualization a step further. It's not just about displaying data - it's about telling a captivating story through the strategic orchestration of a diverse array of data components.
|
||||||
|
|
||||||
|
We are now eager to share our latest enhancement to [PortalJS](https://portaljs.org/): maps, a powerful tool for visualizing geospatial data. In this post, we will to take you on a tour of our experiments and progress in enhancing map functionalities on [PortalJS](https://portaljs.org/). Our journey into this innovative feature is still in its early stages, with new facets being unveiled and refined as we perfect our API. Still, this exciting development opens a new avenue for visualizing data, enhancing your ability to convey complex geospatial information with clarity and precision.
|
||||||
|
|
||||||
|
## Exploring Map Formats
|
||||||
|
|
||||||
|
Maps play a crucial role in geospatial data visualization. Several formats exist for storing and sharing this type of data, with GeoJSON, KML, and shapefiles being among the most popular. As a prominent figure in the field of open-source data portal platforms, [PortalJS](https://portaljs.org/) strives to support as many map formats as possible.
|
||||||
|
|
||||||
|
Taking inspiration from the ckanext-geoview extension, we currently support KML and GeoJSON formats in [PortalJS](https://portaljs.org/). This remarkable extension is a plugin for CKAN, the world’s leading open source data management system, that enables users to visualize geospatial data in diverse formats on an interactive map. Apart from KML and GeoJSON formats support, our roadmap entails extending compatibility to encompass all other formats supported by ckanext-geoview. Rest assured, we are committed to empowering users with a wide array of map format options in the future.
|
||||||
|
|
||||||
|
So, what makes these formats special?
|
||||||
|
|
||||||
|
- **GeoJSON**: This format uses JSON to depict simple geographic features and their associated attributes. It's often hailed as the most popular choice in the field.
|
||||||
|
- **KML**: An XML-based format, KML can store details like placemarks, paths, polygons, and styles.
|
||||||
|
- **Shapefiles**: These are file collections that store vector data—points, lines, and polygons—and their attributes.
|
||||||
|
|
||||||
|
## Unveiling the Power of Leaflet and OpenLayers
|
||||||
|
|
||||||
|
To display maps in [PortalJS](https://portaljs.org/), we utilize two powerful JavaScript libraries for creating interactive maps based on different layers: Leaflet and OpenLayers. Each offers distinct advantages (and disadvantages), inspiring us to integrate both and give users the flexibility to choose.
|
||||||
|
|
||||||
|
Leaflet is the leading open-source JavaScript library known for its mobile-friendly, interactive maps. With its compact size (just 42 KB of JS), it provides all the map features most developers need. Leaflet is designed with simplicity, performance and usability in mind. It works efficiently across all major desktop and mobile platforms.
|
||||||
|
|
||||||
|
OpenLayers is a high-performance library packed with features for creating interactive web maps. OpenLayers can display map tiles, vector data, and markers sourced from anywhere on any webpage. It's an excellent tool for leveraging geographic information of all kinds.
|
||||||
|
|
||||||
|
## Introducing Map Feature
|
||||||
|
|
||||||
|
Both components have some similar features and props, such as:
|
||||||
|
|
||||||
|
### Polygons and points
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Our initial version enables the use of both vectors and points to display information. Points are simpler and faster to render than vectors, but they have less detail and interactivity. For example, if you have data that is represented by coordinates or addresses, you can use points to show them on the map. This way, you can avoid time-consuming loading and rendering complex vector shapes that may slow down your map.
|
||||||
|
|
||||||
|
### Tooltips
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
We have implemented an exciting feature that enhances the usability of our map component: tooltips. When you hover over a polygon or point on the map, a small pop-up window, known as a tooltip, appears. This tooltip provides relevant details about the feature under your cursor, according to what features the map creator wants to highlight. For example, when exploring countries, you can effortlessly discover their name, population, and area by hovering over them. Similarly, hovering over cities reveals useful information like their name, temperature, and elevation. To enable this handy tooltip functionality on our map, simply include a tooltip prop when using the map component.
|
||||||
|
|
||||||
|
### Focus
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Users can also choose a region of focus, which will depend on the data, by setting initial center coordinates and zoom level. This is especially helpful for maps that are not global, such as the ones that use data from a specific country, city or region.
|
||||||
|
|
||||||
|
## Mapping the Future with PortalJS
|
||||||
|
|
||||||
|
Through our ongoing enhancements to the [PortalJS library](https://storybook.portaljs.org/), we aim to empower users to create engaging and informative data portals featuring diverse map formats and data components.
|
||||||
|
|
||||||
|
Why not give [PortalJS](https://portaljs.org/) a try today and discover the possibilities for your own data portals? To get started, check out our comprehensive documentation here: [PortalJS Documentation](https://portaljs.org/docs).
|
||||||
|
|
||||||
|
Have questions or comments about using [PortalJS](https://portaljs.org/) for your data portals? Feel free to share your thoughts on our [Discord channel](https://discord.com/invite/EeyfGrGu4U). We're here to help you make the most of your data.
|
||||||
|
|
||||||
|
Stay tuned for more exciting developments as we continue to enhance [PortalJS](https://portaljs.org/)!
|
||||||
@@ -1,61 +1,72 @@
|
|||||||
const config = {
|
const config = {
|
||||||
title:
|
title: 'PortalJS - The JavaScript framework for data portals.',
|
||||||
"PortalJS",
|
|
||||||
description:
|
description:
|
||||||
"PortalJS is a framework for rapidly building rich data portal frontends using a modern frontend approach. PortalJS can be used to present a single dataset or build a full-scale data catalog/portal.",
|
'PortalJS is a framework for rapidly building rich data portal frontends using a modern frontend approach.',
|
||||||
theme: {
|
theme: {
|
||||||
default: "dark",
|
default: 'dark',
|
||||||
toggleIcon: "/images/theme-button.svg",
|
toggleIcon: '/images/theme-button.svg',
|
||||||
},
|
},
|
||||||
author: "Datopian",
|
author: 'Datopian',
|
||||||
authorLogo: "/datopian-logo.png",
|
authorLogo: '/datopian-logo.webp',
|
||||||
authorUrl: "https://datopian.com/",
|
authorUrl: 'https://datopian.com/',
|
||||||
navbarTitle: {
|
navbarTitle: {
|
||||||
// logo: "/images/logo.svg",
|
// logo: "/images/logo.svg",
|
||||||
text: "🌀 PortalJS",
|
text: '🌀 PortalJS',
|
||||||
// version: "Alpha",
|
// version: "Alpha",
|
||||||
},
|
},
|
||||||
navLinks: [
|
navLinks: [
|
||||||
{ name: "Docs", href: "/docs" },
|
{ name: 'Docs', href: '/docs' },
|
||||||
// { name: "Components", href: "/docs/components" },
|
// { name: "Components", href: "/docs/components" },
|
||||||
{ name: "Blog", href: "/blog" },
|
{ name: 'Blog', href: '/blog' },
|
||||||
{ name: "Showcases", href: "/#showcases" },
|
{ name: 'Showcases', href: '/#showcases' },
|
||||||
{ name: "Howtos", href: "/howtos" },
|
{ name: 'Howtos', href: '/howtos' },
|
||||||
{ name: "Guide", href: "/guide" },
|
{ name: 'Guide', href: '/guide' },
|
||||||
{ name: "Examples", href: "https://github.com/datopian/portaljs/tree/main/examples", target: "_blank" },
|
{
|
||||||
{ name: "Components", href: "https://storybook.portaljs.org", target: "_blank" },
|
name: 'Examples',
|
||||||
|
href: 'https://github.com/datopian/portaljs/tree/main/examples',
|
||||||
|
target: '_blank',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Components',
|
||||||
|
href: 'https://storybook.portaljs.org',
|
||||||
|
target: '_blank',
|
||||||
|
},
|
||||||
// { name: "DL Demo", href: "/data-literate/demo" },
|
// { name: "DL Demo", href: "/data-literate/demo" },
|
||||||
// { name: "Excel Viewer", href: "/excel-viewer" },
|
// { name: "Excel Viewer", href: "/excel-viewer" },
|
||||||
],
|
],
|
||||||
footerLinks: [],
|
footerLinks: [],
|
||||||
nextSeo: {
|
nextSeo: {
|
||||||
|
additionalLinkTags: [
|
||||||
|
{ rel: 'icon', href: '/favicon.ico' },
|
||||||
|
{ rel: 'apple-touch-icon', href: '/icon.png', sizes: '120x120' },
|
||||||
|
],
|
||||||
openGraph: {
|
openGraph: {
|
||||||
type: "website",
|
type: 'website',
|
||||||
title:
|
title:
|
||||||
"PortalJS - rapidly build rich data portals using a modern frontend framework.",
|
'PortalJS - rapidly build rich data portals using a modern frontend framework.',
|
||||||
description:
|
description:
|
||||||
"PortalJS is a framework for rapidly building rich data portal frontends using a modern frontend approach. PortalJS can be used to present a single dataset or build a full-scale data catalog and portal.",
|
'PortalJS is a framework for rapidly building rich data portal frontends using a modern frontend approach. PortalJS can be used to present a single dataset or build a full-scale data catalog and portal.',
|
||||||
locale: "en_US",
|
locale: 'en_US',
|
||||||
images: [
|
images: [
|
||||||
{
|
{
|
||||||
url: "/homepage-screenshot.png", // TODO
|
url: '/homepage-screenshot.png', // TODO
|
||||||
alt: "PortalJS - rapidly build rich data portals using a modern frontend framework.",
|
alt: 'PortalJS - rapidly build rich data portals using a modern frontend framework.',
|
||||||
width: 1280,
|
width: 1280,
|
||||||
height: 720,
|
height: 720,
|
||||||
type: "image/jpg",
|
type: 'image/jpg',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
twitter: {
|
twitter: {
|
||||||
handle: "@datopian",
|
handle: '@datopian',
|
||||||
site: "https://datopian.com/",
|
site: 'https://datopian.com/',
|
||||||
cardType: "summary_large_image",
|
cardType: 'summary_large_image',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
github: "https://github.com/datopian/portaljs",
|
github: 'https://github.com/datopian/portaljs',
|
||||||
discord: "https://discord.gg/EeyfGrGu4U",
|
discord: 'https://discord.gg/EeyfGrGu4U',
|
||||||
tableOfContents: true,
|
tableOfContents: true,
|
||||||
analytics: "G-96GWZHMH57",
|
analytics: 'G-96GWZHMH57',
|
||||||
// editLinkShow: true,
|
// editLinkShow: true,
|
||||||
};
|
};
|
||||||
export default config;
|
export default config;
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ Let's check it's working and what we have! Open http://localhost:3000 from your
|
|||||||
|
|
||||||
You should see a page like this when you access http://localhost:3000. This is the starter template page which shows the most simple data portal you could have: a simple README plus csv file.
|
You should see a page like this when you access http://localhost:3000. This is the starter template page which shows the most simple data portal you could have: a simple README plus csv file.
|
||||||
|
|
||||||
<img src="/assets/examples/basic-example.png" />
|
<img src="/assets/examples/basic-example.png" alt="Basic example" />
|
||||||
|
|
||||||
### Editing the Page
|
### Editing the Page
|
||||||
|
|
||||||
@@ -51,7 +51,7 @@ Let’s try editing the starter page.
|
|||||||
|
|
||||||
After refreshing the page, you should see the new text:
|
After refreshing the page, you should see the new text:
|
||||||
|
|
||||||
<img src="/assets/docs/editing-the-page-1.png" />
|
<img src="/assets/docs/editing-the-page-1.png" alt="Editing base example" />
|
||||||
|
|
||||||
Congratulations! The app is up and running and you learned how to edit a page. In the next lesson, you are going to learn how to create new datasets.
|
Congratulations! The app is up and running and you learned how to edit a page. In the next lesson, you are going to learn how to create new datasets.
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
---
|
---
|
||||||
showToc: false
|
showToc: false
|
||||||
showSidebar: false
|
showSidebar: false
|
||||||
|
title: 'Markdown-based Websites Guide'
|
||||||
|
disableTitle: true
|
||||||
---
|
---
|
||||||
|
|
||||||
<Hero title="Markdown-based Websites" subtitle="Create markdown-based website, update it, add collaborators and discover markdown superpowers" />
|
<Hero title="Markdown-based Websites" subtitle="Create markdown-based website, update it, add collaborators and discover markdown superpowers" />
|
||||||
|
|
||||||
# Tutorial 1: Create a website from scratch using markdown and PortalJS
|
## Tutorials
|
||||||
|
|
||||||
|
### Tutorial 1: Create a website from scratch using markdown and PortalJS
|
||||||
|
|
||||||
In this tutorial we will walk you through creating an elegant, fully functional website written in simple markdown and published with PortalJS.
|
In this tutorial we will walk you through creating an elegant, fully functional website written in simple markdown and published with PortalJS.
|
||||||
|
|
||||||
@@ -17,7 +21,7 @@ By the end of this tutorial you will:
|
|||||||
Below is a screenshot of how the final website will look like:
|
Below is a screenshot of how the final website will look like:
|
||||||
![[tutorial-1-result.png]]
|
![[tutorial-1-result.png]]
|
||||||
|
|
||||||
### Setup a sandbox website including live publishing
|
#### Setup a sandbox website including live publishing
|
||||||
|
|
||||||
- Prerequisites: sign up for GitHub and Vercel
|
- Prerequisites: sign up for GitHub and Vercel
|
||||||
- Navigate to [datopian/flowershow repository](https://github.com/datopian/flowershow)
|
- Navigate to [datopian/flowershow repository](https://github.com/datopian/flowershow)
|
||||||
@@ -25,14 +29,14 @@ Below is a screenshot of how the final website will look like:
|
|||||||
- Let the site build on Vercel
|
- Let the site build on Vercel
|
||||||
- Visit the site! Yay! Your site is working! 🎉
|
- Visit the site! Yay! Your site is working! 🎉
|
||||||
|
|
||||||
### Now, let's edit the front page
|
#### Now, let's edit the front page
|
||||||
|
|
||||||
- Navigate to `content/index.md` file in the site repository
|
- Navigate to `content/index.md` file in the site repository
|
||||||
- Add some text to it
|
- Add some text to it
|
||||||
- Save and watch the site redeploy
|
- Save and watch the site redeploy
|
||||||
- Visit the site! Yay! Your changes are live! 🎉
|
- Visit the site! Yay! Your changes are live! 🎉
|
||||||
|
|
||||||
### Let's add a page: e.g. about page
|
#### Let's add a page: e.g. about page
|
||||||
|
|
||||||
- Navigate to the `content` folder in the site repository
|
- Navigate to the `content` folder in the site repository
|
||||||
- Add `about.md` file with some text
|
- Add `about.md` file with some text
|
||||||
@@ -42,16 +46,51 @@ Below is a screenshot of how the final website will look like:
|
|||||||
> [!tip]
|
> [!tip]
|
||||||
> Read full tutorial [[create-a-website-from-scratch|here!]]
|
> Read full tutorial [[create-a-website-from-scratch|here!]]
|
||||||
|
|
||||||
# Tutorial 2: Editing your site locally on your computer
|
### Tutorial 2: Editing your site locally on your computer
|
||||||
|
|
||||||
### What is this markdown stuff?
|
In this tutorial, we will walk you through the process of editing your Flowershow website locally on your computer.
|
||||||
|
|
||||||
- Idea of "markup" - how is this different from plain text
|
By the end of this tutorial, you will:
|
||||||
- Brief info about markdown
|
|
||||||
- Link to markdown tutorials
|
|
||||||
- Explain we offer "markdown plus"
|
|
||||||
- ?? Explain about PFM (vs GFM ...)
|
|
||||||
|
|
||||||
### Why go local?
|
- Understand what is Markdown and why you should use Obsidian to edit content on your Flowershow websites in most cases.
|
||||||
|
- Gain a deeper understanding of working with Git and GitHub Desktop.
|
||||||
|
- Learn how to clone your website's repository to your computer.
|
||||||
|
- Learn how to edit content using Obsidian and what are the benefits of it.
|
||||||
|
- Learn how to commit (save) your changes locally and push them back to the GitHub repository.
|
||||||
|
|
||||||
While editing on GitHub UI is acceptable, it has its limitations – it doesn't support working offline, adding multiple files simultaneously, or previewing many markdown syntax elements supported by Flowershow-based websites.
|
Below is a screenshot of how the final website will look like:
|
||||||
|
|
||||||
|
![[tutorial-2-result.png]]
|
||||||
|
|
||||||
|
#### Clone the repository to your computer
|
||||||
|
|
||||||
|
- Setup GitHub Desktop app with your GitHub account
|
||||||
|
- Grab your site's repository URL
|
||||||
|
- Open GitHub Desktop app and clone the repository
|
||||||
|
- Yay! You have a copy of your website's repository on your computer! 🎉
|
||||||
|
|
||||||
|
#### Now, let's edit in Obsidian
|
||||||
|
|
||||||
|
- Open the `/content` folder of the cloned repository in Obsidian
|
||||||
|
- Edit the home page and the about page
|
||||||
|
- Create a folder with the reviews of books you've read
|
||||||
|
|
||||||
|
#### Commit your changes
|
||||||
|
|
||||||
|
- Commit the changes in GitHub Desktop app
|
||||||
|
- Push the changes to the remote repository
|
||||||
|
- Watch the site redeploy
|
||||||
|
- Visit the site! Yay! Your changes are live! 🎉
|
||||||
|
|
||||||
|
> [!tip]
|
||||||
|
> Read full tutorial [[edit-a-website-locally|here!]]
|
||||||
|
|
||||||
|
## Howtos
|
||||||
|
|
||||||
|
- [[quickly-create-a-sandbox-website|How to quickly create a sandbox website]]
|
||||||
|
- [[edit-text-on-a-single-md-page|How to quickly edit text on a single Markdown-based page]]
|
||||||
|
- [[add-a-simple-md-page|How to add a simple Markdown page]]
|
||||||
|
- [[edit-or-add-md-pages-locally|How to edit or add Markdown-based pages locally on your computer]]
|
||||||
|
- [[how-to-add-images-to-a-md-page|How to add images to a Markdown-based page]]
|
||||||
|
- [[publish-obsidian-vault-to-github|How to push an Obsidian vault to a GitHub repository]]
|
||||||
|
- [[create-a-simple-catalog-of-anything|How to create a simple catalog of anything in Obsidian]]
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
---
|
---
|
||||||
title: How to quickly add a simple Markdown-based page
|
title: How to quickly add a simple Markdown-based page
|
||||||
|
date: 2023-07-27
|
||||||
|
authors: ['Lauren Wigmore', 'Ola Rubaj']
|
||||||
|
filetype: 'blog'
|
||||||
---
|
---
|
||||||
|
|
||||||
Welcome to this tutorial on how to quickly add a simple Markdown-based page to your website. The steps here are designed for non-technical contributors. There's no need to know how to code!
|
Welcome to this howto on how to quickly add a simple Markdown-based page to your website. The steps here are designed for non-technical contributors. There's no need to know how to code!
|
||||||
|
|
||||||
> [!important]
|
> [!important]
|
||||||
> This "How to" is only recommended for very simple Markdown pages, e.g. those without images, links to other pages, diagrams, or other elements that can't be previewed in GitHub preview mode.
|
> This "How to" is only recommended for very simple Markdown pages, e.g. those without images, links to other pages, diagrams, or other elements that can't be previewed in GitHub preview mode.
|
||||||
@@ -22,8 +25,8 @@ Welcome to this tutorial on how to quickly add a simple Markdown-based page to y
|
|||||||
|
|
||||||
5. Paste or write the contents of the file in Markdown format.
|
5. Paste or write the contents of the file in Markdown format.
|
||||||
6. (Optionally) Switch to the "Preview" mode, by toggling from "Edit" -> "Preview" at the top of the file content, to see a rough visualisation of your changes. Keep in mind though, that the actual website may have different styling and may support additional Markdown elements that GitHub doesn't render on the preview.
|
6. (Optionally) Switch to the "Preview" mode, by toggling from "Edit" -> "Preview" at the top of the file content, to see a rough visualisation of your changes. Keep in mind though, that the actual website may have different styling and may support additional Markdown elements that GitHub doesn't render on the preview.
|
||||||
5. When you're happy with the content, click on the “Commit changes...” button. In the "Commit message" field, provide a concise summary of your changes. If necessary, you can add further explanation in the "Extended description" text field. Then select “Commit directly to the main branch”, and hit "Commit changes."
|
7. When you're happy with the content, click on the “Commit changes...” button. In the "Commit message" field, provide a concise summary of your changes. If necessary, you can add further explanation in the "Extended description" text field. Then select “Commit directly to the main branch”, and hit "Commit changes."
|
||||||
6. The site is now going to be rebuilt to reflect the changes saved to the `main` branch. This can take up to a few minutes. After this time you should see your page live.
|
8. The site is now going to be rebuilt to reflect the changes saved to the `main` branch. This can take up to a few minutes. After this time you should see your page live.
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
|
|
||||||
|
|||||||
@@ -3,13 +3,6 @@ title: How to add or edit content on the Life Itself ecosystem page
|
|||||||
isDraft: true
|
isDraft: true
|
||||||
---
|
---
|
||||||
|
|
||||||
## Contents
|
|
||||||
|
|
||||||
1. [Introduction](#introduction)
|
|
||||||
2. [How to edit and add to the site](#how-to-edit-and-add-to-the-site)
|
|
||||||
3. [Glossary](#glossary)
|
|
||||||
4. [Contact](#contact)
|
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
From the outset, we have argued that any successful mapping effort must be collaborative and participatory. To make it as simple as possible to contribute, we have opened up the site, giving it a wiki-like structure, meaning people can contribute and add items directly - no coding required. We hope this can support the ongoing growth of our contributor community, and empower users to continue in collective efforts to make the map ever more useful and informative.
|
From the outset, we have argued that any successful mapping effort must be collaborative and participatory. To make it as simple as possible to contribute, we have opened up the site, giving it a wiki-like structure, meaning people can contribute and add items directly - no coding required. We hope this can support the ongoing growth of our contributor community, and empower users to continue in collective efforts to make the map ever more useful and informative.
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
---
|
---
|
||||||
title: "How to edit a page with a code editor or Obsidian"
|
title: 'How to edit a page with a code editor or Obsidian'
|
||||||
|
date: 2023-07-27
|
||||||
|
authors: ['Jake Hirsch', 'Ola Rubaj']
|
||||||
|
filetype: 'blog'
|
||||||
isDraft: true
|
isDraft: true
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
---
|
---
|
||||||
title: How to edit or add Markdown-based pages locally on your computer
|
title: How to edit or add Markdown-based pages locally on your computer
|
||||||
|
date: 2023-07-27
|
||||||
|
authors: ['Jake Hirsch', 'Ola Rubaj']
|
||||||
|
filetype: 'blog'
|
||||||
---
|
---
|
||||||
|
|
||||||
## Intro
|
## Intro
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
---
|
---
|
||||||
title: How to quickly edit text content on a single Markdown-based page
|
title: How to quickly edit text on a single Markdown-based page
|
||||||
|
date: 2023-07-27
|
||||||
|
authors: ['Ola Rubaj']
|
||||||
|
filetype: 'blog'
|
||||||
---
|
---
|
||||||
|
|
||||||
Welcome to this tutorial on how to quickly edit text content on a single Markdown-based page. The steps here are designed for non-technical contributors. There's no need to know how to code!
|
Welcome to this tutorial on how to quickly edit text content on a single Markdown-based page. The steps here are designed for non-technical contributors. There's no need to know how to code!
|
||||||
|
|||||||
45
site/content/howtos/how-to-add-images-to-a-md-page.md
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
---
|
||||||
|
title: How to add images to a Markdown-based page
|
||||||
|
date: 2023-07-27
|
||||||
|
authors: ['Jake Hirsch', 'Ola Rubaj']
|
||||||
|
filetype: 'blog'
|
||||||
|
---
|
||||||
|
|
||||||
|
## Intro
|
||||||
|
|
||||||
|
Here, you will learn how to add images to a Markdown-based page. These instructions show how to add these images locally, on your computer, so first you need to know how to work locally with GitHub Desktop app and Obsidian. If you're new to these tools, we recommend reading this howto first:
|
||||||
|
|
||||||
|
- [[blog/edit-or-add-md-pages-locally|How to edit or add Markdown pages locally]]
|
||||||
|
|
||||||
|
Or you can follow these two tutorials to start from scratch:
|
||||||
|
|
||||||
|
- [[create-a-website-from-scratch|Tutorial 1: Create a Markdown based website from scratch]]
|
||||||
|
- [[edit-a-website-locally|Tutorial 2: Edit your website locally on your computer]]
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- A GitHub account
|
||||||
|
- A GitHub Desktop app
|
||||||
|
- Obsidian
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
### Step 1: Set the assets folder as an attachment folder
|
||||||
|
|
||||||
|
In Obsidian, in the root of your vault, create a new folder called 'assets'. Then, right click on and select "set as attachment folder". By doing so, all the images you paste into your note will automatically be saved to this folder (instead of being saved to the root, next to all your notes). This is necessary for your website to display embedded images.
|
||||||
|
|
||||||
|
### Step 2: Copy and paste your image
|
||||||
|
|
||||||
|
Copy whichever image you would like to add and paste it directly into your Obsidian note. You can check that it has been saved to the "assets" folder.
|
||||||
|
|
||||||
|
### Step 3: Commit and push
|
||||||
|
|
||||||
|
To learn more about this step, see the howto or the tutorials listed in the intro section.
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
Congratulations, you've now learned how to add an image to your Markdown page!
|
||||||
|
|
||||||
|
If anything is not clear to you, or you have suggestions on how we can make this 'How to' better, please don't hesitate to let us know.
|
||||||
|
|
||||||
|
Happy editing!
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
title: How to format a perfect Markdown-based page
|
||||||
|
date: 2023-07-27
|
||||||
|
authors: ['Lauren Wigmore', 'Ola Rubaj']
|
||||||
|
filetype: 'blog'
|
||||||
|
isDraft: true
|
||||||
|
---
|
||||||
|
|
||||||
|
Welcome to this information guide to help you understand how to format the perfect Markdown-based page for your website. The information here is designed to give you an overview.
|
||||||
|
|
||||||
|
## Types of Markdown Styles
|
||||||
|
|
||||||
|
There are three types of Markdown options that are supported by Flowershow.
|
||||||
|
|
||||||
|
- CommonMark
|
||||||
|
- GitHub Flavored Markdown (GFM) - a superset of CommonMark
|
||||||
|
- Obsidian Flavored Markdown - a superset of CommonMark with most GFM functionalities plus its own syntax elements, such as wikilinks, callouts, LaTeX, mermaid diagrams, and more.
|
||||||
|
|
||||||
|
Each one has extra functionalities building on top of the previous Markdown option.
|
||||||
|
|
||||||
|
Flowershow aims to be fully Obsidian compatible since it supports most Obsidian Flavored Markdown syntax elements and therefore, it is the best to use as an editor.
|
||||||
|
|
||||||
|
## Useful Links
|
||||||
|
|
||||||
|
It would be too complicated (and long) to explain all of the formatting aspects here, so we have included the links below to provide you with this information and more!
|
||||||
|
[Flowershow Documents Page](https://flowershow.app/docs/syntax) - Use this page to see all of the useful key elements that are frequently required on Flowershow pages.
|
||||||
|
[Obsidian help pages](https://help.obsidian.md/Editing+and+formatting/Obsidian+Flavored+Markdown) - Use this to get more information on Obsidian's supported syntax
|
||||||
|
[GFM cheatsheet](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) - Use this as a quick guide to using Markdown for Github
|
||||||
|
|
||||||
|
## Other useful pages
|
||||||
|
|
||||||
|
[How to quickly add a simple Markdown-based page](https://guide.portaljs.org/guides/add-a-simple-md-page)
|
||||||
|
[How to quickly edit text content on a single Markdown-based page](https://guide.portaljs.org/guides/edit-text-on-a-single-md-page)
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
# Guides and tutorials
|
---
|
||||||
|
title: Guides and Tutorials
|
||||||
|
---
|
||||||
|
|
||||||
- [[howtos/analytics|How to add web analytics?]]
|
- [[howtos/analytics|How to add web analytics?]]
|
||||||
- [[howtos/seo|How to customize page metadata for SEO?]]
|
- [[howtos/seo|How to customize page metadata for SEO?]]
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
---
|
---
|
||||||
title: How to push an Obsidian vault to a GitHub repository
|
title: How to push an Obsidian vault to a GitHub repository
|
||||||
|
date: 2023-07-27
|
||||||
|
authors: ['Jake Hirsch', 'Ola Rubaj']
|
||||||
|
filetype: 'blog'
|
||||||
---
|
---
|
||||||
|
|
||||||
This howto walks you through the process of setting up your Obsidian vault as a GitHub repository. Here are some of the benefits of doing so:
|
This howto walks you through the process of setting up your Obsidian vault as a GitHub repository. Here are some of the benefits of doing so:
|
||||||
@@ -34,7 +37,7 @@ In this howto, we will use the GitHub Desktop application, an easy-to-use interf
|
|||||||
|
|
||||||
2.6. Add an optional description.
|
2.6. Add an optional description.
|
||||||
|
|
||||||
2.7. Make sure the checkbox "Initialize this repository with a README" is unchecked, and "Git Ignore" and "License" are set to "None".
|
2.7. Make sure the checkbox "Initialise this repository with a README" is unchecked, and "Git Ignore" and "License" are set to "None".
|
||||||
|
|
||||||
2.8. Click on "Create Repository".
|
2.8. Click on "Create Repository".
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
---
|
---
|
||||||
title: How to quickly create a sandbox website
|
title: How to quickly create a sandbox website
|
||||||
|
date: 2023-07-27
|
||||||
|
authors: ['Lauren Wigmore', 'Ola Rubaj']
|
||||||
|
filetype: 'blog'
|
||||||
---
|
---
|
||||||
|
|
||||||
By the end of this guide you will have a working markdown site you can edit, which gets published automatically online 🎉
|
By the end of this guide you will have a working markdown site you can edit, which gets published automatically online 🎉
|
||||||
@@ -22,13 +25,8 @@ The website will then be deployed. This takes approximately 1 minute.
|
|||||||
|
|
||||||
Once you are on the Congratulations screen, click on the preview of your sandbox website to see the live/published version.
|
Once you are on the Congratulations screen, click on the preview of your sandbox website to see the live/published version.
|
||||||
|
|
||||||
For instructions on how to add and edit pages, we recommend these tutorials:
|
For instructions on how to add and edit pages, we recommend these howtos:
|
||||||
|
|
||||||
- [[edit-a-page-with-code-editor-or-obsidian|How to edit text content on a single Markdown-based page]]
|
- [[howtos/add-a-simple-md-page|How to add a simple markdown page]]
|
||||||
- [[add-a-simple-md-page|How to add a simple Markdown-based page]]
|
- [[howtos/edit-text-on-a-single-md-page|How to edit text on a single markdown-based page]]
|
||||||
|
- [[howtos/edit-or-add-md-pages-locally|How to edit or add a markdown page locally on your computer]]
|
||||||
Here are some other links Vercel links that might be useful for you:
|
|
||||||
|
|
||||||
- [Dashboard Features Overview](https://vercel.com/docs/concepts/dashboard-features/overview)
|
|
||||||
- [Dashboard Features](https://vercel.com/docs/concepts/dashboard-features)
|
|
||||||
- [Projects](https://vercel.com/docs/concepts/projects/project-dashboard)
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: "Why use these tools to create a catalog?"
|
title: "Why use these tools to create a catalog?"
|
||||||
|
isDraft: true
|
||||||
---
|
---
|
||||||
|
|
||||||
On this site, we offer a “recipe” which uses a combination of free tools to easily create a directory of information that can be used for multiple purposes. With this method, you can start capturing information quickly and intuitively in a format that is flexible and usable later for various needs. Why does this help us? Because to map information – to collect, organise, structure, and classify it – and present it clearly is a way to make more sense of it and therefore of the world around us.
|
On this site, we offer a “recipe” which uses a combination of free tools to easily create a directory of information that can be used for multiple purposes. With this method, you can start capturing information quickly and intuitively in a format that is flexible and usable later for various needs. Why does this help us? Because to map information – to collect, organise, structure, and classify it – and present it clearly is a way to make more sense of it and therefore of the world around us.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ export default function DefaultLayout({ children, ...frontMatter }) {
|
|||||||
{/* Default layout */}
|
{/* Default layout */}
|
||||||
{!frontMatter.layout && (
|
{!frontMatter.layout && (
|
||||||
<>
|
<>
|
||||||
<h1>{frontMatter.title}</h1>
|
{!frontMatter.disableTitle && <h1>{frontMatter.title}</h1>}
|
||||||
{frontMatter.author && (
|
{frontMatter.author && (
|
||||||
<div className="-mt-6">
|
<div className="-mt-6">
|
||||||
<p className="opacity-60 pl-1">{frontMatter.author}</p>
|
<p className="opacity-60 pl-1">{frontMatter.author}</p>
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ export const DocsLayout: React.FC<any> = ({ children, ...frontMatter }) => {
|
|||||||
<time dateTime={created}>{formatDate(created)}</time>
|
<time dateTime={created}>{formatDate(created)}</time>
|
||||||
</p>
|
</p>
|
||||||
)}
|
)}
|
||||||
{title && <h1>{title}</h1>}
|
{!frontMatter.disableTitle && title && <h1>{title}</h1>}
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<section>{children}</section>
|
<section>{children}</section>
|
||||||
|
|||||||
@@ -1,21 +1,21 @@
|
|||||||
import { h } from "hastscript";
|
import { h } from 'hastscript';
|
||||||
import matter from "gray-matter";
|
import matter from 'gray-matter';
|
||||||
import mdxmermaid from "mdx-mermaid";
|
import mdxmermaid from 'mdx-mermaid';
|
||||||
import remarkCallouts from "@portaljs/remark-callouts";
|
import remarkCallouts from '@portaljs/remark-callouts';
|
||||||
import remarkEmbed from "@portaljs/remark-embed";
|
import remarkEmbed from '@portaljs/remark-embed';
|
||||||
import remarkGfm from "remark-gfm";
|
import remarkGfm from 'remark-gfm';
|
||||||
import remarkMath from "remark-math";
|
import remarkMath from 'remark-math';
|
||||||
import remarkSmartypants from "remark-smartypants";
|
import remarkSmartypants from 'remark-smartypants';
|
||||||
import remarkToc from "remark-toc";
|
import remarkToc from 'remark-toc';
|
||||||
import remarkWikiLink, { getPermalinks } from "@portaljs/remark-wiki-link";
|
import remarkWikiLink, { getPermalinks } from '@portaljs/remark-wiki-link';
|
||||||
import rehypeAutolinkHeadings from "rehype-autolink-headings";
|
import rehypeAutolinkHeadings from 'rehype-autolink-headings';
|
||||||
import rehypeKatex from "rehype-katex";
|
import rehypeKatex from 'rehype-katex';
|
||||||
import rehypeSlug from "rehype-slug";
|
import rehypeSlug from 'rehype-slug';
|
||||||
import rehypePrismPlus from "rehype-prism-plus";
|
import rehypePrismPlus from 'rehype-prism-plus';
|
||||||
import { serialize } from "next-mdx-remote/serialize";
|
import { serialize } from 'next-mdx-remote/serialize';
|
||||||
|
|
||||||
import * as tw from "../tailwind.config";
|
import * as tw from '../tailwind.config';
|
||||||
import { siteConfig } from "../config/siteConfig";
|
import { siteConfig } from '../config/siteConfig';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse a markdown or MDX file to an MDX source form + front matter data
|
* Parse a markdown or MDX file to an MDX source form + front matter data
|
||||||
@@ -36,14 +36,14 @@ const parse = async function (source, format, scope) {
|
|||||||
remarkPlugins: [
|
remarkPlugins: [
|
||||||
remarkEmbed,
|
remarkEmbed,
|
||||||
remarkGfm,
|
remarkGfm,
|
||||||
[remarkSmartypants, { quotes: false, dashes: "oldschool" }],
|
[remarkSmartypants, { quotes: false, dashes: 'oldschool' }],
|
||||||
remarkMath,
|
remarkMath,
|
||||||
remarkCallouts,
|
remarkCallouts,
|
||||||
[remarkWikiLink, { permalinks, pathFormat: "obsidian-short" }],
|
[remarkWikiLink, { permalinks, pathFormat: 'obsidian-short' }],
|
||||||
[
|
[
|
||||||
remarkToc,
|
remarkToc,
|
||||||
{
|
{
|
||||||
heading: "Table of contents",
|
heading: 'Table of contents',
|
||||||
tight: true,
|
tight: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -54,29 +54,36 @@ const parse = async function (source, format, scope) {
|
|||||||
[
|
[
|
||||||
rehypeAutolinkHeadings,
|
rehypeAutolinkHeadings,
|
||||||
{
|
{
|
||||||
properties: { className: "heading-link" },
|
properties: { className: 'heading-link' },
|
||||||
test(element) {
|
test(element) {
|
||||||
return (
|
return (
|
||||||
["h2", "h3", "h4", "h5", "h6"].includes(element.tagName) &&
|
['h2', 'h3', 'h4', 'h5', 'h6'].includes(element.tagName) &&
|
||||||
element.properties?.id !== "table-of-contents" &&
|
element.properties?.id !== 'table-of-contents' &&
|
||||||
element.properties?.className !== "blockquote-heading"
|
element.properties?.className !== 'blockquote-heading'
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
content() {
|
content(node) {
|
||||||
return [
|
return [
|
||||||
h(
|
h(
|
||||||
"svg",
|
'span.invisible.block.h-0.w-0',
|
||||||
|
{ ariaLabel: node.properties.id },
|
||||||
|
'Read the “',
|
||||||
|
node.properties.id,
|
||||||
|
'” section'
|
||||||
|
),
|
||||||
|
h(
|
||||||
|
'svg',
|
||||||
{
|
{
|
||||||
xmlns: "http:www.w3.org/2000/svg",
|
xmlns: 'http:www.w3.org/2000/svg',
|
||||||
fill: tw.theme.extend.colors.secondary.DEFAULT,
|
fill: tw.theme.extend.colors.secondary.DEFAULT,
|
||||||
viewBox: "0 0 20 20",
|
viewBox: '0 0 20 20',
|
||||||
className: "w-5 h-5",
|
className: 'w-5 h-5',
|
||||||
},
|
},
|
||||||
[
|
[
|
||||||
h("path", {
|
h('path', {
|
||||||
fillRule: "evenodd",
|
fillRule: 'evenodd',
|
||||||
clipRule: "evenodd",
|
clipRule: 'evenodd',
|
||||||
d: "M9.493 2.853a.75.75 0 00-1.486-.205L7.545 6H4.198a.75.75 0 000 1.5h3.14l-.69 5H3.302a.75.75 0 000 1.5h3.14l-.435 3.148a.75.75 0 001.486.205L7.955 14h2.986l-.434 3.148a.75.75 0 001.486.205L12.456 14h3.346a.75.75 0 000-1.5h-3.14l.69-5h3.346a.75.75 0 000-1.5h-3.14l.435-3.147a.75.75 0 00-1.486-.205L12.045 6H9.059l.434-3.147zM8.852 7.5l-.69 5h2.986l.69-5H8.852z",
|
d: 'M9.493 2.853a.75.75 0 00-1.486-.205L7.545 6H4.198a.75.75 0 000 1.5h3.14l-.69 5H3.302a.75.75 0 000 1.5h3.14l-.435 3.148a.75.75 0 001.486.205L7.955 14h2.986l-.434 3.148a.75.75 0 001.486.205L12.456 14h3.346a.75.75 0 000-1.5h-3.14l.69-5h3.346a.75.75 0 000-1.5h-3.14l.435-3.147a.75.75 0 00-1.486-.205L12.045 6H9.059l.434-3.147zM8.852 7.5l-.69 5h2.986l.69-5H8.852z',
|
||||||
}),
|
}),
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
@@ -84,7 +91,7 @@ const parse = async function (source, format, scope) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
[rehypeKatex, { output: "mathml" }],
|
[rehypeKatex, { output: 'mathml' }],
|
||||||
[rehypePrismPlus, { ignoreMissing: true }],
|
[rehypePrismPlus, { ignoreMissing: true }],
|
||||||
],
|
],
|
||||||
format,
|
format,
|
||||||
|
|||||||
5
site/next-sitemap.config.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
/** @type {import('next-sitemap').IConfig} */
|
||||||
|
module.exports = {
|
||||||
|
siteUrl: process.env.SITE_URL || 'https://portaljs.org',
|
||||||
|
generateRobotsTxt: true,
|
||||||
|
}
|
||||||
49
site/package-lock.json
generated
@@ -50,6 +50,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tailwindcss/typography": "^0.5.9",
|
"@tailwindcss/typography": "^0.5.9",
|
||||||
"autoprefixer": "^10.4.14",
|
"autoprefixer": "^10.4.14",
|
||||||
|
"next-sitemap": "^4.1.8",
|
||||||
"postcss": "^8.4.22",
|
"postcss": "^8.4.22",
|
||||||
"prettier": "^2.8.7",
|
"prettier": "^2.8.7",
|
||||||
"remark": "^14.0.2",
|
"remark": "^14.0.2",
|
||||||
@@ -229,6 +230,12 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz",
|
||||||
"integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg=="
|
"integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg=="
|
||||||
},
|
},
|
||||||
|
"node_modules/@corex/deepmerge": {
|
||||||
|
"version": "4.0.43",
|
||||||
|
"resolved": "https://registry.npmjs.org/@corex/deepmerge/-/deepmerge-4.0.43.tgz",
|
||||||
|
"integrity": "sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/@docsearch/css": {
|
"node_modules/@docsearch/css": {
|
||||||
"version": "3.5.0",
|
"version": "3.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.0.tgz",
|
||||||
@@ -7087,6 +7094,15 @@
|
|||||||
"node": "*"
|
"node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/minimist": {
|
||||||
|
"version": "1.2.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
|
||||||
|
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
|
||||||
|
"dev": true,
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/minipass": {
|
"node_modules/minipass": {
|
||||||
"version": "3.3.6",
|
"version": "3.3.6",
|
||||||
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
|
||||||
@@ -7330,6 +7346,39 @@
|
|||||||
"react-dom": ">=16.0.0"
|
"react-dom": ">=16.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/next-sitemap": {
|
||||||
|
"version": "4.1.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/next-sitemap/-/next-sitemap-4.1.8.tgz",
|
||||||
|
"integrity": "sha512-XAXpBHX4o89JfMgvrm0zimlZwpu2iBPXHpimJMUrqOZSc4C2oB1Lv89mxuVON9IE8HOezaM+w4GjJxcYCuGPTQ==",
|
||||||
|
"dev": true,
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/iamvishnusankar/next-sitemap.git"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"@corex/deepmerge": "^4.0.43",
|
||||||
|
"@next/env": "^13.4.3",
|
||||||
|
"fast-glob": "^3.2.12",
|
||||||
|
"minimist": "^1.2.8"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"next-sitemap": "bin/next-sitemap.mjs",
|
||||||
|
"next-sitemap-cjs": "bin/next-sitemap.cjs"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.18"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"next": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/next-sitemap/node_modules/@next/env": {
|
||||||
|
"version": "13.4.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.10.tgz",
|
||||||
|
"integrity": "sha512-3G1yD/XKTSLdihyDSa8JEsaWOELY+OWe08o0LUYzfuHp1zHDA8SObQlzKt+v+wrkkPcnPweoLH1ImZeUa0A1NQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/next-themes": {
|
"node_modules/next-themes": {
|
||||||
"version": "0.2.1",
|
"version": "0.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.2.1.tgz",
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
"dev": "npm run mddb && next dev",
|
"dev": "npm run mddb && next dev",
|
||||||
"build": "next build",
|
"build": "next build",
|
||||||
"prebuild": "npm run mddb && node ./scripts/fix-symlinks.mjs",
|
"prebuild": "npm run mddb && node ./scripts/fix-symlinks.mjs",
|
||||||
|
"postbuild": "next-sitemap",
|
||||||
"start": "next start",
|
"start": "next start",
|
||||||
"mddb": "mddb content"
|
"mddb": "mddb content"
|
||||||
},
|
},
|
||||||
@@ -52,6 +53,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tailwindcss/typography": "^0.5.9",
|
"@tailwindcss/typography": "^0.5.9",
|
||||||
"autoprefixer": "^10.4.14",
|
"autoprefixer": "^10.4.14",
|
||||||
|
"next-sitemap": "^4.1.8",
|
||||||
"postcss": "^8.4.22",
|
"postcss": "^8.4.22",
|
||||||
"prettier": "^2.8.7",
|
"prettier": "^2.8.7",
|
||||||
"remark": "^14.0.2",
|
"remark": "^14.0.2",
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
import "../styles/globals.css";
|
import '../styles/globals.css';
|
||||||
import "../styles/tailwind.css";
|
import '../styles/tailwind.css';
|
||||||
|
import '../styles/sib-form.css';
|
||||||
|
|
||||||
import Script from "next/script";
|
import Script from 'next/script';
|
||||||
|
|
||||||
import { DefaultSeo } from "next-seo";
|
import { DefaultSeo } from 'next-seo';
|
||||||
|
|
||||||
import { NavGroup, NavItem, pageview, ThemeProvider } from "@portaljs/core";
|
import { NavGroup, NavItem, pageview, ThemeProvider } from '@portaljs/core';
|
||||||
import { siteConfig } from "../config/siteConfig";
|
import { siteConfig } from '../config/siteConfig';
|
||||||
import { useEffect } from "react";
|
import { useEffect } from 'react';
|
||||||
import { useRouter } from "next/dist/client/router";
|
import { useRouter } from 'next/dist/client/router';
|
||||||
|
|
||||||
export interface CustomAppProps {
|
export interface CustomAppProps {
|
||||||
meta: {
|
meta: {
|
||||||
@@ -32,9 +33,9 @@ function MyApp({ Component, pageProps }) {
|
|||||||
const handleRouteChange = (url) => {
|
const handleRouteChange = (url) => {
|
||||||
pageview(url);
|
pageview(url);
|
||||||
};
|
};
|
||||||
router.events.on("routeChangeComplete", handleRouteChange);
|
router.events.on('routeChangeComplete', handleRouteChange);
|
||||||
return () => {
|
return () => {
|
||||||
router.events.off("routeChangeComplete", handleRouteChange);
|
router.events.off('routeChangeComplete', handleRouteChange);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}, [router.events]);
|
}, [router.events]);
|
||||||
@@ -44,9 +45,14 @@ function MyApp({ Component, pageProps }) {
|
|||||||
disableTransitionOnChange
|
disableTransitionOnChange
|
||||||
attribute="class"
|
attribute="class"
|
||||||
defaultTheme={siteConfig.theme.default}
|
defaultTheme={siteConfig.theme.default}
|
||||||
forcedTheme={siteConfig.theme.default ? null : "light"}
|
forcedTheme={siteConfig.theme.default ? null : 'light'}
|
||||||
>
|
>
|
||||||
<DefaultSeo defaultTitle={siteConfig.title} {...siteConfig.nextSeo} />
|
<DefaultSeo
|
||||||
|
defaultTitle={siteConfig.title}
|
||||||
|
description={siteConfig.description}
|
||||||
|
titleTemplate="PortalJS - %s"
|
||||||
|
{...siteConfig.nextSeo}
|
||||||
|
/>
|
||||||
|
|
||||||
{/* Global Site Tag (gtag.js) - Google Analytics */}
|
{/* Global Site Tag (gtag.js) - Google Analytics */}
|
||||||
{siteConfig.analytics && (
|
{siteConfig.analytics && (
|
||||||
@@ -57,7 +63,7 @@ function MyApp({ Component, pageProps }) {
|
|||||||
/>
|
/>
|
||||||
<Script
|
<Script
|
||||||
id="gtag-init"
|
id="gtag-init"
|
||||||
strategy="afterInteractive"
|
strategy="lazyOnload"
|
||||||
dangerouslySetInnerHTML={{
|
dangerouslySetInnerHTML={{
|
||||||
__html: `
|
__html: `
|
||||||
window.dataLayer = window.dataLayer || [];
|
window.dataLayer = window.dataLayer || [];
|
||||||
@@ -73,7 +79,12 @@ function MyApp({ Component, pageProps }) {
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Umami Analytics */}
|
{/* Umami Analytics */}
|
||||||
<Script async defer data-website-id="061e14c1-6157-4a93-820c-777c7a937c12" src="https://analytics.datopian.com/umami.js" />
|
<Script
|
||||||
|
async
|
||||||
|
defer
|
||||||
|
data-website-id="061e14c1-6157-4a93-820c-777c7a937c12"
|
||||||
|
src="https://analytics.datopian.com/umami.js"
|
||||||
|
/>
|
||||||
|
|
||||||
<Component {...pageProps} />
|
<Component {...pageProps} />
|
||||||
</ThemeProvider>
|
</ThemeProvider>
|
||||||
|
|||||||
13
site/pages/_document.tsx
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import { Html, Head, Main, NextScript } from 'next/document';
|
||||||
|
|
||||||
|
export default function Document() {
|
||||||
|
return (
|
||||||
|
<Html lang="en">
|
||||||
|
<Head />
|
||||||
|
<body>
|
||||||
|
<Main />
|
||||||
|
<NextScript />
|
||||||
|
</body>
|
||||||
|
</Html>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -3,10 +3,12 @@ import computeFields from '@/lib/computeFields';
|
|||||||
import clientPromise from '@/lib/mddb';
|
import clientPromise from '@/lib/mddb';
|
||||||
import { BlogsList, SimpleLayout } from '@portaljs/core';
|
import { BlogsList, SimpleLayout } from '@portaljs/core';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
|
import {NextSeo} from 'next-seo';
|
||||||
|
|
||||||
export default function Blog({ blogs }) {
|
export default function Blog({ blogs }) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
<NextSeo title="Blog posts" />
|
||||||
<Layout>
|
<Layout>
|
||||||
<SimpleLayout title="Blog posts">
|
<SimpleLayout title="Blog posts">
|
||||||
<BlogsList blogs={blogs} />
|
<BlogsList blogs={blogs} />
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import Layout from '../components/Layout';
|
|||||||
import { useRouter } from 'next/router';
|
import { useRouter } from 'next/router';
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { collectHeadings } from '@portaljs/core';
|
import { collectHeadings } from '@portaljs/core';
|
||||||
|
import Head from 'next/head';
|
||||||
|
|
||||||
export default function Home({ sidebarTree }) {
|
export default function Home({ sidebarTree }) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@@ -23,7 +24,11 @@ export default function Home({ sidebarTree }) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Layout isHomePage={true} tableOfContents={tableOfContents} sidebarTree={sidebarTree} >
|
<Layout
|
||||||
|
isHomePage={true}
|
||||||
|
tableOfContents={tableOfContents}
|
||||||
|
sidebarTree={sidebarTree}
|
||||||
|
>
|
||||||
<Features />
|
<Features />
|
||||||
<Showcases />
|
<Showcases />
|
||||||
<Community />
|
<Community />
|
||||||
|
|||||||
BIN
site/public/datopian-logo.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
site/public/icon.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
site/public/images/showcases/birmingham.webp
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
site/public/images/showcases/brazil.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
site/public/images/showcases/datahub.webp
Normal file
|
After Width: | Height: | Size: 99 KiB |
BIN
site/public/images/showcases/example-ckan.webp
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
site/public/images/showcases/example-simple-catalog.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
site/public/images/showcases/odni.webp
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
site/public/images/showcases/uae.webp
Normal file
|
After Width: | Height: | Size: 45 KiB |
@@ -1,4 +1,4 @@
|
|||||||
@import "@portaljs/remark-callouts/styles.css";
|
@import '@portaljs/remark-callouts/styles.css';
|
||||||
@import './prism.css';
|
@import './prism.css';
|
||||||
|
|
||||||
html,
|
html,
|
||||||
@@ -31,7 +31,7 @@ html {
|
|||||||
|
|
||||||
/* tooltip fade-out clip */
|
/* tooltip fade-out clip */
|
||||||
.tooltip-body::after {
|
.tooltip-body::after {
|
||||||
content: "";
|
content: '';
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0;
|
right: 0;
|
||||||
top: 3.6rem; /* multiple of $line-height used on the tooltip body (defined in tooltipBodyStyle) */
|
top: 3.6rem; /* multiple of $line-height used on the tooltip body (defined in tooltipBodyStyle) */
|
||||||
|
|||||||