Compare commits

...

1646 Commits

Author SHA1 Message Date
dependabot[bot]
e2721a141a
build(deps-dev): bump rollup-plugin-dts from 6.2.3 to 6.3.0 (#606)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mahula <lenzmath@posteo.de>
2025-12-10 10:28:15 +00:00
dependabot[bot]
ecea9dc4ad
build(deps-dev): bump @types/node from 24.10.1 to 24.10.2 (#612)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-10 10:16:30 +00:00
dependabot[bot]
38950b8f3d
build(deps-dev): bump vite-plugin-pwa from 1.1.0 to 1.2.0 (#601)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-10 10:02:00 +00:00
dependabot[bot]
bea6d8dde1
build(deps): bump amannn/action-semantic-pull-request from 5 to 6 (#446)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-10 09:54:11 +00:00
dependabot[bot]
6fede95953
build(deps): bump yet-another-react-lightbox from 3.25.0 to 3.26.0 (#616)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-10 09:41:35 +00:00
dependabot[bot]
c7fe238b51
build(deps-dev): bump vite from 7.2.4 to 7.2.7 (#615)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-10 09:16:06 +00:00
dependabot[bot]
40ef048f88
build(deps-dev): bump prettier from 3.7.3 to 3.7.4 (#610)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-10 09:09:53 +00:00
dependabot[bot]
dd1ada268f
build(deps): bump actions/setup-node from 6.0.0 to 6.1.0 (#617)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-10 09:49:47 +01:00
Anton Tranelis
e375553b3f
fix(app): normalize url in .env (#607) 2025-12-03 19:34:14 +01:00
dependabot[bot]
e8c4615803
build(deps-dev): bump cypress from 15.7.0 to 15.7.1 (#597)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-03 08:06:48 +00:00
dependabot[bot]
7228807b25
build(deps-dev): bump happy-dom from 20.0.10 to 20.0.11 (#598)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-03 08:01:24 +00:00
dependabot[bot]
0291ce7331
build(deps): bump actions/checkout from 6.0.0 to 6.0.1 (#602)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-03 07:53:59 +00:00
dependabot[bot]
5b79140bf0
build(deps-dev): bump prettier from 3.6.2 to 3.7.3 (#604)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-03 08:48:14 +01:00
mahula
a2608da517
refactor(workflow): disable automatic dependabot pull request rebase after changes (#595)
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-26 09:03:15 +00:00
dependabot[bot]
d57eeed51a
build(deps-dev): bump eslint from 9.18.0 to 9.39.1 in /lib/examples/3-tags (#479)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mahula <lenzmath@posteo.de>
2025-11-26 08:58:31 +00:00
dependabot[bot]
c2693be7be
build(deps-dev): bump eslint-plugin-react-refresh from 0.4.18 to 0.4.24 in /lib/examples/3-tags (#482)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-26 08:51:38 +00:00
dependabot[bot]
29a9eda824
build(deps-dev): bump cypress from 15.6.0 to 15.7.0 (#590)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-26 08:20:15 +00:00
dependabot[bot]
446a6551ef
build(deps-dev): bump vite from 7.2.2 to 7.2.4 (#591)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-26 09:10:11 +01:00
Anton Tranelis
2eec9f959f
fix(app): show past items (#433)
Co-authored-by: mahula <lenzmath@posteo.de>
Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-11-24 21:48:03 +01:00
dependabot[bot]
1aa9132246
build(deps): bump actions/setup-node from 4.1.0 to 6.0.0 (#461)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 12:49:11 +00:00
dependabot[bot]
3be376419e
build(deps-dev): bump mochawesome-merge from 4.4.1 to 5.0.0 in /cypress (#455)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mahula <lenzmath@posteo.de>
2025-11-24 13:45:04 +01:00
dependabot[bot]
5fd8ccd864
build(deps): bump actions/upload-pages-artifact from 3.0.1 to 4.0.0 (#452)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 13:20:59 +01:00
dependabot[bot]
204bf6a562
build(deps): bump actions/checkout from 4.2.2 to 5.0.1 (#443)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 12:43:58 +01:00
mahula
0c0f89710f
fix(workflow): replace fixed wait for directus to be actually ready in seeding workflow (#589) 2025-11-24 11:10:32 +01:00
dependabot[bot]
b44b479932
build(deps-dev): bump eslint-import-resolver-typescript from 3.10.1 to 4.4.4 (#549)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 23:14:24 +01:00
dependabot[bot]
78079cf699
build(deps-dev): bump eslint-plugin-n from 16.6.2 to 17.23.1 (#556)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 23:07:23 +01:00
dependabot[bot]
e2fac71e6f
build(deps-dev): bump @rollup/plugin-node-resolve from 16.0.2 to 16.0.3 (#558)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 22:49:18 +01:00
dependabot[bot]
103a1fb36e
build(deps-dev): bump rollup from 4.52.4 to 4.53.3 (#560)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 22:41:25 +01:00
dependabot[bot]
5891ab8413
build(deps): bump the tiptap group with 10 updates (#548)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 22:26:43 +01:00
dependabot[bot]
c6512fcf45
build(deps-dev): bump @types/leaflet from 1.9.20 to 1.9.21 (#553)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-19 22:16:59 +01:00
dependabot[bot]
bac7783f79
build(deps-dev): bump vite from 6.4.1 to 7.2.2 (#561)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 22:02:33 +01:00
dependabot[bot]
bae7d59b56
build(deps): bump react-photo-album from 3.1.0 to 3.2.1 (#567)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 21:48:34 +01:00
dependabot[bot]
083fc70f36
build(deps-dev): bump eslint-plugin-react-refresh from 0.4.23 to 0.4.24 (#566)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-19 21:39:11 +01:00
dependabot[bot]
31c0469e10
build(deps-dev): bump @rollup/plugin-alias from 5.1.1 to 6.0.0 (#574)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-19 21:19:37 +01:00
dependabot[bot]
1882396765
build(deps-dev): bump eslint-plugin-promise from 6.6.0 to 7.2.1 (#564)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 21:11:04 +01:00
dependabot[bot]
d0fe1eae49
build(deps-dev): bump eslint-config-prettier from 9.1.2 to 10.1.8 (#565)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 20:52:48 +01:00
Anton Tranelis
0c6391e901
fix(other): removed unused packages and package-lock.json and fix vulnerabilities… (#588)
Co-authored-by: mahula <lenzmath@posteo.de>
2025-11-19 20:43:49 +01:00
dependabot[bot]
c23aa1b655
build(deps-dev): bump @rollup/plugin-commonjs from 28.0.6 to 29.0.0 (#572)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 20:26:09 +01:00
dependabot[bot]
7468be017f
build(deps-dev): bump eslint-plugin-react-hooks from 4.6.2 to 7.0.1 (#578)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 20:10:54 +01:00
dependabot[bot]
f55437b39e
build(deps-dev): bump vite-plugin-pwa from 0.21.2 to 1.1.0 (#563)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 19:55:10 +01:00
dependabot[bot]
d088e3b227
build(deps): bump @tailwindcss/vite from 4.1.14 to 4.1.17 (#554)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 19:37:33 +01:00
dependabot[bot]
61b959e003
build(deps): bump axios from 1.12.2 to 1.13.2 (#569)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 19:31:52 +01:00
dependabot[bot]
e400309971
build(deps): bump react-leaflet-cluster from 2.1.0 to 3.1.1 (#587)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <mail@antontranelis.de>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 18:36:14 +01:00
dependabot[bot]
813dc2e6db
build(deps-dev): bump @rollup/plugin-typescript from 12.1.4 to 12.3.0 (#581)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-19 18:20:16 +01:00
dependabot[bot]
8b8b26703a
build(deps-dev): bump @tailwindcss/postcss from 4.1.14 to 4.1.17 (#582)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-19 16:32:59 +00:00
dependabot[bot]
d9cf62ba6d
build(deps-dev): bump typescript from 5.8.3 to 5.9.3 (#583)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 16:04:18 +00:00
dependabot[bot]
c5884dad87
build(deps-dev): bump daisyui from 5.2.3 to 5.5.5 (#585)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 15:32:41 +00:00
dependabot[bot]
a02edce30e
build(deps-dev): bump tailwindcss from 4.1.14 to 4.1.17 (#586)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 16:23:54 +01:00
dependabot[bot]
12bff01aac
build(deps): bump @tanstack/react-query from 5.90.2 to 5.90.10 in /lib (#534)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-19 14:40:01 +00:00
dependabot[bot]
9576168886
build(deps-dev): bump @rollup/plugin-typescript from 12.1.4 to 12.3.0 in /lib (#537)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 15:23:08 +01:00
dependabot[bot]
5dda991569
build(deps-dev): bump typescript-eslint from 8.44.1 to 8.47.0 in /cypress (#448)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-19 15:16:16 +01:00
dependabot[bot]
8b7c995e33
build(deps): bump axios from 1.12.2 to 1.13.2 in /lib (#541)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 15:09:56 +01:00
mahula
0c891f0951
refactor(deps): update package-lock.json file (#545) 2025-11-19 14:00:04 +00:00
mahula
67436f3771
refactor(other): adapt dependabot configuration to work with npm workspaces correctly (#544) 2025-11-19 14:51:15 +01:00
dependabot[bot]
8e379c52a7
build(deps-dev): bump typescript from 5.9.2 to 5.9.3 in /cypress (#474)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-19 08:48:08 +00:00
dependabot[bot]
0d91167409
build(deps-dev): bump eslint-plugin-cypress from 5.1.1 to 5.2.0 in /cypress (#467)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-19 08:45:53 +00:00
dependabot[bot]
bda34aeb50
build(deps-dev): bump rollup from 4.52.4 to 4.53.2 in /lib (#531)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 07:36:51 +00:00
dependabot[bot]
a360899ea4
build(deps): bump react-image-crop from 10.1.8 to 11.0.10 in /lib (#542)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 07:15:31 +00:00
dependabot[bot]
1c80f4685a
build(deps-dev): bump typescript from 5.8.3 to 5.9.3 in /lib (#532)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 07:01:11 +00:00
dependabot[bot]
baa373a773
build(deps-dev): bump tailwindcss from 4.1.14 to 4.1.17 in /lib (#540)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-19 06:54:28 +00:00
Copilot
1b22b37b09
fix(lib): empty text fields not saving in profile forms (#437)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: antontranelis <31516529+antontranelis@users.noreply.github.com>
Co-authored-by: mahula <lenzmath@posteo.de>
2025-11-19 06:51:31 +00:00
9a241f4c77 updated package-lock 2025-11-18 21:28:09 +01:00
dependabot[bot]
b6a69f4733
build(deps): bump actions/download-artifact from 4a24838f3d5601fd639834081e118c2995d51e1c to f093f21ca4cfa7c75ccbbc2be54da76a0c7e1f05 (#456)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-18 20:24:31 +00:00
dependabot[bot]
e2148bea07
build(deps): bump actions/upload-artifact from 2848b2cda0e5190984587ec6bb1f36730ca78d50 to 330a01c490aca151604b8cf639adc76d48f6c5d4 (#451)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-18 20:19:11 +00:00
dependabot[bot]
bf9e3017b8
build(deps-dev): bump typescript from 5.8.3 to 5.9.3 in /app (#483)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-18 20:10:08 +00:00
dependabot[bot]
11b971371b
build(deps-dev): bump @types/node from 22.15.28 to 24.10.1 in /app (#505)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-18 20:05:26 +00:00
mahula
50c20ccdd6
fix(deps-dev): update root package-lock.json to current state (#543) 2025-11-18 21:03:35 +01:00
Copilot
d5080e2bc9
fix(lib): remove UUID from URL when popup closes (#435)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: antontranelis <31516529+antontranelis@users.noreply.github.com>
Co-authored-by: Anton Tranelis <mail@antontranelis.de>
Co-authored-by: mahula <lenzmath@posteo.de>
2025-11-18 18:59:55 +00:00
dependabot[bot]
6aa9f014d7
build(deps-dev): bump cypress from 14.5.4 to 15.6.0 in /lib (#514)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-18 18:36:10 +00:00
dependabot[bot]
89c7211ce2
build(deps-dev): bump cypress-split from 1.24.23 to 1.24.25 in /cypress (#462)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-18 19:31:54 +01:00
dependabot[bot]
ef746b92fd
build(deps-dev): bump cypress from 15.3.0 to 15.6.0 in /cypress (#458)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-18 18:26:22 +00:00
dependabot[bot]
a547f99122
build(deps-dev): bump mochawesome-report-generator from 6.3.0 to 6.3.2 in /cypress (#450)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-18 18:21:27 +00:00
dependabot[bot]
d753669a76
build(deps-dev): bump eslint from 9.36.0 to 9.39.1 in /cypress (#466)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-18 19:18:41 +01:00
Anton Tranelis
cb9ff624bf
Add 'deps' and 'deps-dev' to scopes in workflow 2025-11-18 18:30:58 +01:00
Anton Tranelis
24301a8933
fix(docu): update README.md (#441) 2025-11-18 18:13:09 +01:00
mahula
362ba88bf3
feat(other): introduce dependabot (#440)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: antontranelis <31516529+antontranelis@users.noreply.github.com>
2025-11-18 18:09:58 +01:00
90edd4c90c fix zoom offset default value 2025-11-18 15:25:32 +01:00
04b2ea4e92 fix vulnerabilities 2025-11-17 18:24:39 +01:00
Anton Tranelis
5cf49cfcd3
fix(lib): align zoom-control and tags (#427) 2025-11-11 15:14:59 +01:00
Anton Tranelis
462d9056f4
fix(lib): set login link in placeholder text (#432) 2025-11-11 14:49:39 +01:00
Anton Tranelis
c808fdd470
fix(lib): fix icons in ´SearchControl´ (#431)
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-11-11 14:39:29 +01:00
Anton Tranelis
8391532d83
fix(lib): fix missing secret bug (#430) 2025-11-11 11:05:53 +01:00
Anton Tranelis
2ee10f0f55
fix(app): refactor icons (#428) 2025-11-10 16:55:31 +01:00
Anton Tranelis
719e1e16b5
fix(lib): fix invite url (#426) 2025-10-14 12:10:04 +02:00
Anton Tranelis
590be2b7e5
fix(lib): optimized layout elements (#424)
Co-authored-by: Claude <noreply@anthropic.com>
2025-10-14 12:00:23 +02:00
Anton Tranelis
15fbd3e6ce
fix(lib): improved item header (#383)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-13 13:15:06 +02:00
Anton Tranelis
2411017c33
feat(lib): maplibre (#425) 2025-10-13 13:10:38 +02:00
Anton Tranelis
d10f924fa0
fix(lib): update tiptap to v3 (#422)
Co-authored-by: mahula <lenzmath@posteo.de>
2025-10-10 18:14:59 +02:00
mahula
78a8c68800
feat(other): initial end-to-end tests working in github ci and locally (#402)
Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-10-09 21:59:06 +02:00
f80357e45f
refactor(backend): separate push from seed and provide a pull script (#423) 2025-10-09 13:55:46 +00:00
Anton Tranelis
e261d68534
feat(lib): blanked out maps support (#416)
Co-authored-by: mahula <lenzmath@posteo.de>
Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-10-09 15:50:32 +02:00
Anton Tranelis
9f1368e6c5
fix(backend): seed themes (#421) 2025-10-09 14:51:06 +02:00
25267224c9
refactor(backend): ignore specs (#389) 2025-10-08 13:56:47 +00:00
edb0212147
fix(backend): docker-compose.override.yml dist file (#388) 2025-10-08 13:55:40 +00:00
mahula
cbdbfe6117
refactor(other): update directus version (#415) 2025-10-08 15:53:28 +02:00
mahula
d95afca304
refactor(other): set nodejs version to current lts version application-wide (#414) 2025-10-07 18:04:11 +02:00
Anton Tranelis
988fbde4b2
fix(app): fix critical vulneralility (#417) 2025-10-07 15:53:18 +02:00
Anton Tranelis
27ebc26a41
fix(lib): lists style in info modal (#412) 2025-10-06 13:23:17 +02:00
Copilot
b25ded083f
feat(lib): add Fullscreen Control to UtopiaMap Component (#408)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: antontranelis <31516529+antontranelis@users.noreply.github.com>
Co-authored-by: Anton Tranelis <mail@antontranelis.de>
2025-10-04 08:04:20 +02:00
mahula
6050903ce5
fix(backend): pin directus sync extension to last current version before current breaking changes (#403) 2025-09-30 02:05:44 +02:00
Anton Tranelis
171f6a2b59
fix: prevent 'Cannot read properties of undefined (reading '0')' errors (#385)
- Add proper array length checks before accessing error.errors[0]
- Secure error handling in App.tsx for both map loading and layer loading
- Fix unsafe array access in mapApi.ts error handler
- Prevent crashes when error.errors is undefined or empty array

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-15 11:47:09 +02:00
Anton Tranelis
6d504fa2e3
cleanup item types (#386) 2025-09-15 11:45:55 +02:00
Anton Tranelis
c5232093dc
feat(lib): relation component (#387)
* Fix relations view

* extended relation component

* added backend fields

* bidirectional direction

* fix linting
2025-09-15 11:32:19 +02:00
a2b7c16133
refactor(backend): remove ocean nomad features from seed data (#382)
* removed ocean nomad specific collections

* removed vessel icon

* updated seeds

* added profilecomponentes to type

* added text to item

* improved sample data

* improved sample data

* improved sample data

* fix comment

---------

Co-authored-by: Anton Tranelis <mail@antontranelis.de>
2025-09-13 12:48:06 +02:00
Anton Tranelis
298876a269
fix(lib): fix user_created reset when updating other users profile marker (#380)
* fix user_created new set when updating other users profile marker

* fix same issue on different places

* fix linting

* fix tests
2025-09-12 21:50:33 +02:00
5de172e739
fix public role permissions (#381) 2025-09-12 15:47:46 +02:00
07c8154453
add trailing slash for VITE_API_URL example (#379)
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-09-10 12:31:50 +02:00
6d0d346c6c
feat(docker): missing docker compose variables (#378)
* missing docker compose variables

* adjust array list according to production environment
2025-09-10 12:30:39 +02:00
3129171534
missing changes & fixes from oceannomads (#376) 2025-09-10 10:26:02 +00:00
756a2cdf64
refactor(backend): structural change to match directus-sync's default (#377)
* a small structural change to fit better with the default of directus-sync

* revert mage conflict
2025-09-10 12:20:51 +02:00
Anton Tranelis
79af6ed3f9
fix(backend): extended flows (#374)
* extended flows

* redeactivated flows

* Update flows.json

* fix id

* fix update_user operations

* fix flows
2025-09-09 19:38:02 +00:00
f8bf861e4e
feat(backend): directus data per project (#375)
* seed directus data as a whole per project, fix marker icon: user-outline

* rename deploy.sh back to seed.sh

* workflow to test the seed in the backend

* test workflow failure

* wait 3 seconds for all docker containers to be ready

* sleep 3 seconds not 3000

* mod permissions

* try sudo

* revert breaking change

* enforce exit status 0

* fix exit enforce

* test if failing seed files is related to the data folder

fix

* revert volume removal, create uploads folder

* also chmod
2025-09-08 22:22:50 +02:00
Anton Tranelis
a49590243a
adjust UserControl for external profiles and small item edits (#363) 2025-09-07 13:47:50 +02:00
Anton Tranelis
659efc0d5e
fix(lib): adjust index page for external profiles (#361)
* don't open internal profile, if item has external profile url

* refactor(backend): simplified icon config (#359)

* simplified icon config

* fixed linting

* fixed linting

* fix linting and searchControl

* adjust useSelectPosition

* adjust useSelectPosition

* fixed presets

* removed menuIcon artefacts

* fix example

* adjust icon size in addButton

* item index page is now not opening internal profile if external profile exist

* fix imports

* reset layer

* fix behaviour

* set map position to popup form
2025-09-07 13:42:29 +02:00
Copilot
a9004a47ea
fix(app): unlimited loading screen when backend is not reachable (#364)
* Initial plan

* Add error handling for unlimited loading screen bug

Co-authored-by: antontranelis <31516529+antontranelis@users.noreply.github.com>

* Complete fix for unlimited loading screen bug with proper state management

Co-authored-by: antontranelis <31516529+antontranelis@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: antontranelis <31516529+antontranelis@users.noreply.github.com>
2025-09-07 12:45:37 +02:00
dbb405fe7e
log sql file currently executed in seed (#360) 2025-09-05 23:36:29 +02:00
Anton Tranelis
879dbf1631
refactor(backend): simplified icon config (#359)
* simplified icon config

* fixed linting

* fixed linting

* fix linting and searchControl

* adjust useSelectPosition

* adjust useSelectPosition

* fixed presets

* removed menuIcon artefacts

* fix example

* adjust icon size in addButton
2025-09-05 22:26:26 +02:00
Anton Tranelis
8ec51d4490
optimized collection views (#358) 2025-09-04 18:38:53 +02:00
Anton Tranelis
cafffe88b4
change profile button target (#357) 2025-09-04 14:17:36 +02:00
Anton Tranelis
f0a6710dee
fix(backend): fixed oceannomads flows (#356)
* fixed oceannomads flows

* set ON flows to inactive
2025-09-04 14:09:51 +02:00
55f9bb514b
type event seed using flex layout (#355) 2025-09-04 14:01:37 +02:00
6793a33fac
delete ocean nomads specific data seeds (#354) 2025-09-03 18:14:53 +02:00
9812799868
corrected flow name, activate flows via script (#353) 2025-09-03 18:10:42 +02:00
6a8352bb32
adjust layer ids in flows for ocean nomads (#352) 2025-09-03 17:46:03 +02:00
97f50c2d9a
seed text+gallery type (#351) 2025-09-03 16:13:22 +02:00
31eb3ed000
feat(backend): item seeds (#349)
* add marker icons, images & seeds

* added sample items to the development environment

Co-authored-by: Anton Tranelis
<31516529+antontranelis@users.noreply.github.com>

* added ocean nomads layers

* added and restructured files

* added menu texts and removed place layer from sample map

---------

Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
Co-authored-by: Anton Tranelis <mail@antontranelis.de>
2025-09-03 15:03:58 +02:00
e9f8f6e3ea
add marker icons, images & seeds (#348) 2025-09-02 19:31:02 +02:00
Anton Tranelis
75516b8c3a
fix(app): layer sort (#347)
* layer sort

* change dev port back to 5174
2025-09-02 14:11:07 +02:00
Anton Tranelis
02e5598266
fix(lib): login info box (#345)
* login info box

* fixed linting

* fix linting

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-09-02 09:56:15 +00:00
138874cef4
refactor(backend): sync collection with production (#346)
* sync collections & other settings with production

missing changes

* deactivated specific flows

---------

Co-authored-by: Anton Tranelis <mail@antontranelis.de>
2025-09-02 11:51:32 +02:00
Anton Tranelis
34136ac6c2
fix(backend): add backend fields (#344)
* added missing backend fields

* fix api stuff directus

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-08-27 17:18:31 +02:00
Anton Tranelis
71e192a60b
removed würdekompass admin role (#343) 2025-08-27 16:58:49 +02:00
Anton Tranelis
1aaabebc99
reinsert uuid to fix notifiations in backend (#342) 2025-08-27 13:20:46 +02:00
Anton Tranelis
94ec2e5576
fix popup button (#339) 2025-08-27 13:17:20 +02:00
Anton Tranelis
1b0b51e91a
fix behaviour of modal (#340) 2025-08-27 10:05:42 +02:00
Anton Tranelis
7e059d8deb
feat(app): added external profile url (#328)
* added external profile url

* switch port back to 5174

* fix linting

* chaneged target to _parent
2025-08-26 14:56:55 +02:00
Anton Tranelis
cb6737d370
feat(app): popup customizing (#333)
* small form edits

* fix linting

* custom button label

* more popup customizing

* reset dev port
2025-08-26 14:55:15 +02:00
Anton Tranelis
a599eddca6
feat(lib): add optional request password button to login page (#334)
* add optional request password button to login page

* fix linting

* fix linting

* added field to backend config
2025-08-26 14:43:31 +02:00
Anton Tranelis
1ef562cf3c
feat(lib): hide signup option (#329)
* hide signup option

* directus pull
2025-08-26 14:22:26 +02:00
0b77d95ae4
fix(backend): register role seed (#337)
* adjust seed structure to support multiple projects

* fix gitignore

* seed the role a user has when registered properly
2025-08-26 13:53:01 +02:00
9a19617906
refactor(app): parameterize admin role & enforce it to be set (#336)
* parameterize admin role & enforce it to be set

* fix lint

---------

Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-08-26 09:52:25 +00:00
d199d47730
feat(backend): seed multi project architecture (#327)
* rename manual folder to seed-manual

* adjust seed structure to support multiple projects

* add gitignore

---------

Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-08-26 11:46:06 +02:00
62777970fc
rename manual folder to seed-manual (#326) 2025-08-26 11:39:29 +02:00
af7f51efbd
refactor(backend): directus sync files (#325)
* update directus-extension-sync

* seed files via directus sync

* delete manual seed files & script
2025-08-26 11:24:02 +02:00
Anton Tranelis
fbe1eb9e0f
avatar-widget showing external image (#330) 2025-08-25 11:03:59 +02:00
2baabe7940 disable close on click outside in location update dialog 2025-08-20 19:02:08 +02:00
6fcdef0433 fix(lib): ensure user_created is preserved in all item operations
- Add user_created field to all item update operations to maintain proper user association
- Update useMyProfile hook to use direct computation instead of useMemo to avoid React hook queue issues
- Refactor UserControl to use useMyProfile hook for consistency
- Fix user_created handling in LocateControl, ItemFormPopup, useSelectPosition, and itemFunctions
- Add user parameter to linkItem, unlinkItem, and related functions with proper TypeScript signatures
- Update all function calls and tests to include user parameter
- Ensure proper null safety with user ?? undefined pattern

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-20 18:55:02 +02:00
Anton Tranelis
db423b26f3
fix(lib): fix tests for locateControl (#324)
* improved locate control

* fix(lib): clean up setTimeout and fix Chrome modal layout issue

- Add proper cleanup for setTimeout in LocateControl to prevent memory leaks
- Replace modal-open class with direct overflow style to fix Chrome scrollbar issue
- Add timeout reference tracking for better component unmount handling

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix linting

* set distance rule

* optimized locatecontrol

* working for new users without profile now

* test(lib): add comprehensive tests for LocateControl component

- Add 9 comprehensive unit tests covering all LocateControl functionality
- Test modal display logic for new and existing users
- Test profile creation and position updates
- Test navigation after successful operations
- Test error handling with proper toast notifications
- Mock all external dependencies (React Router, Leaflet, APIs)
- Verify dialog behavior prevents re-appearance after decline
- Include snapshot tests for UI consistency
- All tests pass with proper TypeScript typing

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* removed unused code, add 1s delay

* updated tests

* fixed tests

* fix test for LocateControl

* fix linting

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-20 16:53:08 +02:00
Anton Tranelis
f7f758bb00
feat(lib): enhanced LocateControl (#308)
* improved locate control

* fix(lib): clean up setTimeout and fix Chrome modal layout issue

- Add proper cleanup for setTimeout in LocateControl to prevent memory leaks
- Replace modal-open class with direct overflow style to fix Chrome scrollbar issue
- Add timeout reference tracking for better component unmount handling

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix linting

* set distance rule

* optimized locatecontrol

* working for new users without profile now

* test(lib): add comprehensive tests for LocateControl component

- Add 9 comprehensive unit tests covering all LocateControl functionality
- Test modal display logic for new and existing users
- Test profile creation and position updates
- Test navigation after successful operations
- Test error handling with proper toast notifications
- Mock all external dependencies (React Router, Leaflet, APIs)
- Verify dialog behavior prevents re-appearance after decline
- Include snapshot tests for UI consistency
- All tests pass with proper TypeScript typing

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* removed unused code, add 1s delay

* updated tests

* fixed tests

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-20 16:39:19 +02:00
Anton Tranelis
649efe551d
refactor(lib): implement server-response-first pattern (#322)
* use server response for local state updates

* fix formatting

* refactor: comprehensive server-response-first pattern implementation

## Major Changes

### LayerProps ID Required
- Made `LayerProps.id` required (was optional)
- All layers now guaranteed to have server-provided UUID
- Enables reliable layer ID mapping from server responses

### useSelectPosition Hook Refactored
- Added reusable `handleApiOperation` helper function
- Refactored `itemUpdatePosition`, `itemUpdateParent`, `linkItem`
- All functions now use server response + layer ID mapping
- Consistent error handling and toast management

### itemFunctions.ts Complete Refactor
- **submitNewItem**: Server response with layer mapping
- **linkItem**: Server response preserves layer object
- **unlinkItem**: Same pattern as linkItem
- **handleDelete**: Simplified error handling
- **onUpdateItem**: Complex function refactored for both update/create branches

### Benefits
-  Eliminates race conditions from manual state construction
-  Server response as single source of truth for all updates
-  Consistent error handling across all API operations
-  Items no longer disappear from map after updates
-  Type-safe layer ID mapping

### Testing
- Updated ItemFunctions.spec.tsx with new toast patterns
- Added required layer IDs to test objects
- All 19 tests passing (3 skipped)
- ESLint clean

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix linting

* fix: resolve TypeScript undefined data errors

- Add non-null assertions for result.data in conditional blocks
- TypeScript now properly recognizes data is defined after success check
- All linting and TypeScript errors resolved

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fixed examples

* remove unneccessary uuid generation

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-20 15:03:30 +02:00
Anton Tranelis
94fa6321ba
fix(lib): adjust UserControl and HeaderView (#293)
* fix(lib): resolve TypeScript unsafe assignment errors in UserControl and HeaderView

- Add ESLint disable for @typescript-eslint/no-unsafe-assignment in UserControl to align with other components
- Refactor avatar logic in UserControl to use explicit typing and conditional assignment
- Add alt attribute to avatar image in UserControl for better accessibility
- Fix image priority order in HeaderView to prioritize internal images over external ones
- Support both internal and external images with proper fallback in both components

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: remove unused ESLint disable and fix CI lint check

The explicit typing approach resolved the TypeScript unsafe assignment
errors without needing the ESLint disable rule.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* removed unused linting exception

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-08-14 11:27:11 +02:00
Anton Tranelis
34e45c6dea
feat(other): add development configuration files (#307)
* feat: add development configuration files

Add .gitignore and CLAUDE.md to standardize development environment:
- .gitignore: Exclude IDE files, build artifacts, and temporary files
- CLAUDE.md: Project documentation and development commands for AI tools

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* moved scripts to ./claude

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-14 11:16:19 +02:00
85b0f93ab7
feat(backend): selfhosted utopia map (#299)
* describe manual seed

* directus minimal seed & seed instructions

* use api config everywhere, default to localhost, ignore .env file, provide .env.dist

* fix lint

* backend readme: import dump instructions

* complete instructions for seeding

* update readme, fix merge conflict, typos
2025-08-14 09:00:23 +00:00
42086b9217
feat(backend): manual seed (#313)
* bind uploads folder to local harddrive

* updated backend README.md regarding permissions

* manual seed script

* seed branding utopia-logo

* describe manual seed

* simplify directus logo seed (only update one field)

---------

Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-08-14 10:56:15 +02:00
6c7308ad38
feat(backend): make map URL configurable (#304)
* use api config everywhere, default to localhost, ignore .env file, provide .env.dist

* fix lint

* make mapUrl configurable

---------

Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-08-14 10:43:30 +02:00
5c79633ea4
feat(backend): directus seed advanced (#306)
* directus minimal seed & seed instructions

* more seed data

* places-layer

---------

Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-08-14 09:47:23 +02:00
aa13c44cba
delete map user_type as it is no longer required (#309) 2025-08-14 07:08:14 +00:00
cf80f35b5c
feat(backend): bind uploads folder to local harddrive (#312)
* bind uploads folder to local harddrive

* updated backend README.md regarding permissions
2025-08-14 08:40:25 +02:00
9b2ac9f74f
directus minimal seed & seed instructions (#305) 2025-08-13 23:14:29 +00:00
cfd7ca1a26
refactor(app): default backend: localhost (#303)
* use api config everywhere, default to localhost, ignore .env file, provide .env.dist

* fix lint
2025-08-13 23:12:39 +00:00
a778fcf971
backend readme: import dump instructions (#296) 2025-08-13 23:10:30 +00:00
fb78619fa9
define cors also for development (#302) 2025-08-14 00:25:40 +02:00
5a2d1ea856
changes on package-lock.json when running npm install (#301) 2025-08-13 20:58:11 +00:00
6f5ee59cc4
workflow: build docker (#311)
fix change detection variable
2025-08-13 20:54:57 +00:00
f7fafc6db9
fix the workflow matrix with a aggregating result (#317) 2025-08-13 22:52:03 +02:00
f4c1fe7e25
fix workflows to always execute all matrix jobs and check for requiredness later (#310)
revert change partially
2025-08-13 20:34:01 +00:00
188f8ad284
describe how to backup the database (#314) 2025-08-13 20:31:14 +00:00
6b57993d9f
directus collections used on production (#297) 2025-08-13 20:27:30 +00:00
d044143aa1
correctly bind and document postgress data folder bind (#298) 2025-08-12 11:10:19 +02:00
54b8d3e4f3
move docker compose to the correct directory and correct paths (#295) 2025-08-11 18:16:35 +00:00
05268fbc3d
pin correct directus version 11.7.2 (#294) 2025-08-11 20:13:01 +02:00
Anton Tranelis
4e6fb57042
fix(lib): critical vulnerability (#290)
* fix critical vulnerability

* fix same in app
2025-08-06 13:07:18 +00:00
Anton Tranelis
945e5b066a
feat(lib): add support for external images in items (#291)
* feat: add support for external images in items

Add image_external field to Item type and update HeaderView to prefer external images over internal ones when available.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: prettier formatting for external image feature

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-06 15:04:52 +02:00
Anton Tranelis
7e0d44dac8
fix(app): add close button to custom info modal (#275)
* add close button to custom info modal

* update workflow

* fixes workflow

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-07-16 20:57:21 +02:00
Max
1e7320b895
feat(app): qR invites (#267)
* Add component to show invite link (WIP)

* Show invite link with copy functionality and QR-Code, add tests

* Query secrets

* Update directus collections

* Add config and invite api

* Let vite resolve paths using tsconfig

* Redeem invite link when logged in or after logging in

* Redirect to inviting profile when redeeming

* Fix some logic with login and redeeming

* Use correct redeem flow

* Hide missing form error

* Add basic relations view

* Pass profile to redeem Api and adapt to changed redeem flow

* Remove unnecessary aliases in vite config

* Remove dead import

* gitignore mac specific file

* Remove lazy loading

* Fix linting

* add InviteApi import

* Change case of file name (tbd)

* Don't toast error if user profile was not loaded yet

* Fix casing

* avoid app crash when profile of a new item is opened

---------

Co-authored-by: Anton Tranelis <mail@antontranelis.de>
2025-07-11 13:37:05 +02:00
Anton Tranelis
855ef3de29
fix(lib): base layer config (#276)
* add close button to custom info modal

* added attribution

* fix build examples workflow

* fix pending tests

* Revert "add close button to custom info modal"

This reverts commit 835c661009abbdc5c095a6bc86bbd6890e080e5f.
2025-07-04 08:39:13 +02:00
Anton Tranelis
12aba6a67e
fix(lib): fix labels (#278)
* fix labels

* more lables

* and the rest of the lables

* updated snapshots

* fix linting
2025-07-04 08:36:11 +02:00
Anton Tranelis
045ec726eb
fix(lib): auto close update position toast (#277)
* add close button to custom info modal

* auto close update position toat

* Revert "add close button to custom info modal"

This reverts commit cf5b9a407effe0772ed622ce2369cf16e0b82175.

* fix: reset position for new items without text
2025-07-03 13:18:10 +02:00
Max
c92695eea7
fix(frontend): update directus collections (#269)
* Update directus collections

* item_secrets is not a collection we call via directus client

---------

Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-07-03 07:21:31 +00:00
Anton Tranelis
729f97f38a
refactor(app): rename frontend directory (#273) 2025-07-01 16:51:46 +02:00
Anton Tranelis
712aa98ac2
refactor(other): repo setup (#271)
* direct library import

* running dev environment

* fix linting

* strickt null checks

* fix linting

* chunks

* fix jumping button

* don't exclude rollup-config from typechecks
2025-06-27 20:03:16 +02:00
Anton Tranelis
76d899dba2
fix(lib): fixed profile crash on browser translation (#270)
* fixed profile crash on browser translation

* fix linting
2025-06-26 20:36:16 +02:00
Max
13612c56aa
fix(frontend): lazy load components at top level, not inside another component (#265)
* Lazy load components at top level, not inside another component

* version

---------

Co-authored-by: Anton Tranelis <mail@antontranelis.de>
2025-06-23 07:08:49 +00:00
Anton Tranelis
1828f29cfb
fix(frontend): fixed gallery object on item update (#261)
* fixed gallery object on item update

* version
2025-06-18 13:19:01 +02:00
Anton Tranelis
d73e4886e8
fix(other): fixed lib README badges, moved map README, unpublished map changes, f… (#259)
* fixed lib README badges, moved map README, unpublished map changes, fixed vulnurability

* limit scope of rollups commonjs plugin
2025-06-15 10:29:39 +02:00
a723d4d3cf
move text files to the root directory where applicable (#258) 2025-06-13 09:48:41 +02:00
18d159a504
Merge pull request #245 from utopia-os/mono-repo
chore(other): mono repo
2025-06-13 09:14:43 +02:00
da634ba8c9
fixed related to mono-repo
issue templates

workflow: lint frontend

workflow: test lib

workflow - unit tests frontend

lib instead of frontend

missing name

workflow: lint examples

workflow: build lib

LICENSE

rename workflow build lib

docs lib

deploy docs

fix build example flow
2025-06-12 11:29:22 +02:00
82cc262218
include utopia-map 2025-06-12 10:54:23 +02:00
d32be08be8
move utopia-ui into subfolder lib 2025-06-12 10:46:01 +02:00
Anton Tranelis
55c39bef88
fix(source): select position on index page (#240)
* 3.0.97

* 3.0.98

* 3.0.99

* add select position to item menu on index page

* added tooltips to headermenu

* optimized toasts while updating item position
2025-06-11 13:04:04 +02:00
Anton Tranelis
a7a50af896
fix(source): fix link detection (#243)
* 3.0.97

* 3.0.98

* 3.0.99

* fixed markdown link detection

* Update src/Components/Map/Subcomponents/ItemPopupComponents/TextView.tsx

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>

* css fix

* fix linting

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-06-11 12:38:19 +02:00
Anton Tranelis
6327ae7788
fix(source): fix index plus button (#239)
* 3.0.97

* 3.0.98

* 3.0.99

* fix index plus icon

* fix linting
2025-06-11 10:59:24 +02:00
Anton Tranelis
ab304d4251
fix(source): gallery lightbox fix (#238)
* 3.0.97

* 3.0.98

* 3.0.99

* fix lightbox z-index
2025-06-11 08:13:16 +00:00
Anton Tranelis
df834855da
fix(source): gallery png support (#237)
* 3.0.97

* 3.0.98

* 3.0.99

* png support for gallery

* Use actual file types; throw error when using unsupported file type

---------

Co-authored-by: Maximilian Harz <maxharz@gmail.com>
2025-06-11 10:10:10 +02:00
Max
05f65291f4
feat(source): gallery form (#233)
Implements image upload to gallery.
2025-06-10 14:26:10 +02:00
Anton Tranelis
afdf589b1e
fix(source): fix marker icon update issue (#235)
* 3.0.97

* fix marker icon issue on update group
2025-06-10 13:43:35 +02:00
2c50d66edc
feat(source): tip tap version 2 (#231)
* tip tap version 2

* youtube

* menu-bar

* refactorng layout

* fixed flex layout

* fixed flex layout

* a lot of ui fixes

* optimizing flex layout & styling inputs

* markdown styling

* fix linting

* updated snapshots

* layout optimization

* flex layout optimizations, text editor fine tuning and markdown rendering

* updated snapshots

---------

Co-authored-by: Anton Tranelis <mail@antontranelis.de>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-06-10 08:46:33 +00:00
Anton Tranelis
5927ba8c16
fix(source): fixed edit item form init process (#234)
* fixed edit item form init process

* fix linting
2025-06-10 10:27:05 +02:00
Max
483c3f0857
Disable typescript sourcemap to get a valid sourcemap (#232) 2025-06-09 09:57:36 +00:00
Anton Tranelis
6a138f834e
fix(frontend): css fix for chrome bug (#44)
* handover layercontrol init variable

* merged

* fixing mobile chrome keyboard breaking layout
2025-06-06 23:18:28 +02:00
Anton Tranelis
3acac31b76
refactor(frontend): dynamic imports (#43)
* handover layercontrol init variable

* merged

* updated config for lazy loading

* fix dyynamic imports

* commented out https config
2025-06-04 19:57:40 +02:00
5dd0191d79
feat(source): lazy loading (#229)
* optimized build for lazy loading

* 3.0.95

* loading map overlay component

* 3.0.96

* loading screen for dynamic imports

* replace RichTextEditor with TextAreaInput (dummy)

* reduce changeset

---------

Co-authored-by: Anton Tranelis <mail@antontranelis.de>
2025-06-04 13:12:57 +00:00
c82084576a
refactor(source): text-view (#227)
* refactor text-view

* lint fix
2025-06-03 10:09:19 +02:00
Anton Tranelis
39acb2b3c7
fix(frontend): layer control (#41)
* CONFIG LAYER CONTROL

* handover layercontrol init variable

* merged

* fix vulnerability

* updated utopia-ui to 3.0.93

* updated utopia-ui
2025-05-23 10:56:22 +02:00
Anton Tranelis
ed9906ae2f
fix(source): enhancing layer control (#223)
* 3.0.82

* version number

* 3.0.84

* 3.0.85

* 3.0.86

* 3.0.87

* 3.0.88

* url layer parameter

* layer control customizing

* 3.0.89

* 3.0.90

* 3.0.91

* typing

* 3.0.92

* fixing bug and imports

* 3.0.93

* fixing bug on profile-item-create caused by PR 185
2025-05-23 10:04:34 +02:00
Anton Tranelis
64daaee93b
CONFIG LAYER CONTROL (#40) 2025-05-22 20:47:57 +02:00
Max
650b478e75
refactor(frontend): rename ItemView and ItemForm to PopupView and PopupForm (#20)
* Redo renaming

* Redo renaming

* utopia v 3.0.90

* utopia v 3.0.91

---------

Co-authored-by: Anton Tranelis <mail@antontranelis.de>
2025-05-22 20:41:56 +02:00
Max
82b1f39141
refactor(source): refactor Layer and its subcomponents, replacing cloneElement by context (#185)
* Refactor Layer and its subcomponents, replacing cloneElement by context

* Add showcase for PopupButton template component

* Templateify exported elements (WIP)

* Remove unused file

* Export templateified PopupStartEndInput

* Fix template component type

* Change folder structure

* Lower test coverage

* changed export name

* Refactor PopupForm and PopupView

* More refactoring

* Add provider for PopupFormContext

* Fix popupform title

* Add comments

* Use correct ItemFormPopup for new items

* Fix linting

* Reduce coverage

* Change tailwind prefix

* Fix type

---------

Co-authored-by: Anton Tranelis <mail@antontranelis.de>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-05-22 20:14:42 +02:00
Anton Tranelis
06252fb0b5
refactor(source): zoom control (#221)
* 3.0.82

* version number

* 3.0.84

* 3.0.85

* 3.0.86

* optional zoom control
2025-05-22 12:06:30 +02:00
Anton Tranelis
d89e160276
error-handing (#38) 2025-05-21 12:24:00 +02:00
Anton Tranelis
1040db5fa5
api adjustments for svg-marker-icon loading (#39) 2025-05-21 11:56:24 +02:00
Anton Tranelis
67e8dfe7c1
refactor(source): dynamic marker icons (#219)
* 3.0.82

* version number

* 3.0.84

* 3.0.85

* 3.0.86

* loading svgs from backend

* bugfixing and icon ajustments

* correct type import

* updated examples

* bugfix

* bugfix

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-05-21 09:37:16 +02:00
Anton Tranelis
204444f42d
fix(source): fix searchbar layout bug (#220)
* 3.0.82

* version number

* 3.0.84

* 3.0.85

* 3.0.86

* fix layout bug in searchbar
2025-05-17 10:11:43 +02:00
Anton Tranelis
5f5fbe6a13
fix(source): icons (#216)
* 3.0.82

* version number

* 3.0.84

* 3.0.85

* suitcase & offer icon
2025-05-09 11:57:04 +02:00
Anton Tranelis
924195ce9f
fix(source): fix gallery (#213)
* 3.0.82

* version number

* fix gallery bug
2025-05-06 09:31:36 +00:00
Anton Tranelis
4d0ffdffc6
fix(source): new marker icons (#214)
* 3.0.82

* version number

* steps-icon
2025-05-06 09:28:28 +00:00
Anton Tranelis
cc9fb9376d
fix(source): fix popup tip (#215)
* 3.0.82

* version number

* fix popup tip radius
2025-05-06 11:26:17 +02:00
Anton Tranelis
9d8dbc235e
using theme control (#37) 2025-04-29 11:09:32 +02:00
Anton Tranelis
9e6bcf1846
fix(source): update tailwind and daisyui (#196)
* removed daisy from config

* removed tw-elements artefact

* removed comments from tailwind config

* removed safelist

* migrated to tailwind4 and daisyui5

* deleted tailwind.config.js which is not eeded anymore

* 3.0.79

* version number

* fixed broken layouts

* more fixing

* more layout fixing

* tested theming

* small fixes

* adapt snapshots to changes

* package.json: add unit test update script

* more ui refactoring & theme controller

* ui improvements

* package-lock.json

* fix linting

* fixed tabs

* fix linting

* fixed typing

---------

Co-authored-by: mahula <lenzmath@posteo.de>
2025-04-25 16:03:42 +02:00
Anton Tranelis
67a5e6e22d
docs(docu): improved documentation (#169)
* rollup - fail when typescript has warnings or errors

Currently this is detected when building the docu. Since the developer
rarely does that the problem is detected on github.
This change allows the developer to discover the error early by failing
the build.

* cleand up types of UtopiaMap and UtopiaMapInner

* documented UtopiaMap, Tags, Tag and  Permissions

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-04-21 23:21:11 +00:00
Anton Tranelis
e68ca0817a
test(source): linkItem() tested (#211)
* linkItem() tested

* set line coverage to 1
2025-04-21 23:19:01 +00:00
Anton Tranelis
823d8c2c82
refactor(frontend): get open collective key from env (#36)
* removed daiyui from config

* updated to tailwind4 and daisyui 5

* changed embedded mode handling

* get open collective api key from .env

* linting
2025-04-17 14:41:23 +01:00
Anton Tranelis
edb0172a8e
feat(source): initialized donation widget (#194)
* initialized donation widget

* opencollective api calls

* form element and styling

* fix linting

* removed unused import

* 3.0.79

* get opencollectiva api key from app state

* linting
2025-04-17 14:47:31 +02:00
Anton Tranelis
3bd22259f9
fix(docu): extending examples (#197)
* Create README.md

* Update README.md

* Update examples/README.md

Co-authored-by: mahula <lenzmath@posteo.de>

---------

Co-authored-by: mahula <lenzmath@posteo.de>
2025-04-17 11:13:30 +00:00
mahula
1d70cd4f3e
package.json: add unit test update script (#198)
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-04-17 12:05:36 +01:00
Anton Tranelis
7fdc41d679
refactor(source): reperation to merge map and landingpage (#209)
* adjustments to allow merge of map with landingpage

* 3.0.79

* 3.0.80

* version

* removed unused imports
2025-04-15 20:27:21 +00:00
Anton Tranelis
0b3b615dec
refactor(frontend): update tailwind and daisyui (#34)
* removed daiyui from config

* updated to tailwind4 and daisyui 5

* changed embedded mode handling

* tailwind config

* fix linting
2025-04-14 22:44:35 +01:00
Anton Tranelis
eb5328e263
Update README.md (#206) 2025-04-03 10:53:36 +02:00
Anton Tranelis
79bf57b839
refactor(docu): add browserstack hint to readme.md (#205)
* Added Browserstack hint to README.md

* Update README.md
2025-04-03 09:47:59 +01:00
Max
f6e77df83a
Disable typescript sourcemap to get a valid sourcemap (#203) 2025-04-01 11:57:06 +02:00
Anton Tranelis
638630404f
fix include path (#32) 2025-03-20 00:54:07 +00:00
Anton Tranelis
4fc9516715
fix(source): external svg theming (#192)
* allow include of external svgs without breaking theming

* 3.0.77

* 3.0.78

* fixed LocateControl and added react-inlinesvg to external dependencies

* theming toast close button

* fixed typing

* theming search resuts

* theming search resuts

* theming search resuts

* theming donation widget

* theming donation widget

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-03-19 23:28:04 +00:00
Anton Tranelis
8863f848d6
fix(frontend): use SVG component to theme menu icons (#30)
* use SVG component to theme menu icons

* fixed linting

* externalize github icon and add opencollective

* fixed spelling
2025-03-19 23:14:50 +00:00
Anton Tranelis
8b7cff2b32
fix(source): fix bug in ItemFormPopup (#191)
* fix bug in ItemFormPopup

* removed logging

* removed more logging
2025-03-19 23:07:43 +00:00
1d00438440
refactor(docker): directus use postgress, redis and fix cors (#26)
* directus use postgress, redis and fix cors

In order to use gis features you can install some plugins to sqlite or
use postgres which supports those features natively.
Use a redis cache as this was part of the advanced setup example.
Furthermore fix cors and allow http://localhost:8080 by default.

* lint fixes
2025-03-18 10:07:48 +01:00
02833c79af
Merge pull request #29 from utopia-os/eslint
refactor(frontend): eslint
2025-03-17 22:58:48 +01:00
f6435c050f
fix eslint
fix eslint

lint fix
2025-03-16 02:30:32 +01:00
30fb36ee37
workflow: lint
delete comments
2025-03-16 02:10:03 +01:00
c8b994796b
fix everything
- fix all autofixable problems
- fix all other errors by a file-wide ignore
2025-03-16 02:05:18 +01:00
9d5ebf7e08
eslint
sync eslint configuration with `utopia-ui`
2025-03-16 01:37:21 +01:00
Anton Tranelis
ce9ca46757
Merge pull request #25 from utopia-os/fix-vulnerabilities
fix(frontend): fix vulnerabilities
2025-03-14 19:05:47 +00:00
ab3c471b6d fix vulnerabilities 2025-03-14 13:42:41 +00:00
a0c20cd69c Merge branch 'main' of github.com:utopia-os/utopia-flex-map 2025-03-14 13:41:03 +00:00
6edf0fb7d3
Merge pull request #23 from utopia-os/backend-data-empty
feat(backend): backend data empty
2025-03-14 14:06:45 +01:00
669a73b55a
Merge branch 'main' into backend-data-empty 2025-03-14 13:57:47 +01:00
fecb275f16
Merge pull request #22 from utopia-os/docker-compose-backend
feat(docker): docker compose backend
2025-03-14 13:57:21 +01:00
2a3f14ef4e
Merge branch 'main' into docker-compose-backend 2025-03-14 13:50:09 +01:00
ad893ae71c
Merge pull request #21 from utopia-os/docker-compose-frontend
feat(docker): docker compose frontend
2025-03-14 13:49:54 +01:00
Max
0595e54a9b
Use defaultValue instead of selected (#187) 2025-03-13 18:27:56 +00:00
709f3bb2b1 Merge branch 'main' of github.com:utopia-os/utopia-flex-map 2025-03-13 08:00:44 +00:00
aec914c0bc
Merge branch 'main' into backend-data-empty 2025-03-12 15:46:31 +01:00
Anton Tranelis
4900d8ae6a
Merge pull request #24 from utopia-os/workflow-lint-pr-scope-frotnend-backend
refactor(workflow): workflow lint pr - new scope frontend and backend
2025-03-12 14:44:07 +00:00
2a3e785e18
workflow: lint pr - new scope frontend and backend 2025-03-10 16:48:56 +01:00
245d41816e
empty directus data dump
empty directus data dump + README.md explaining how to do so

also document how to push data
2025-03-10 16:45:21 +01:00
9944964e2e
docker-compose backend + dockerfile including sync extension
Includes a directus backend in the docker-compose file and the extension
`directus-sync` to allow the persisting of the directus configuration.
2025-03-10 16:37:09 +01:00
b39999fd65
clean docker-compose file 2025-03-10 16:08:25 +01:00
d37ec273ac
use cupcakearmy/static instead of flashspys/nginx-static
cupcakearmy's nginx has more configuraion options (you can override the
nginx config for example)
2025-03-10 16:08:03 +01:00
0f64f3200c
docker-compose for the frontend
Serve static files via nginx from dist folder in docker-compose
2025-03-10 16:02:43 +01:00
Anton Tranelis
d987ac816a
docs(docu): update README.md (#181)
* Update README.md

* Update README.md

fixed url
2025-03-06 11:02:55 +01:00
Max
a412895d5d
Simplify the ContextWrapper (#182)
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-03-05 23:42:02 +00:00
Anton Tranelis
9f631f156c
fix(source): fix avatar bug (#173)
* rollup - fail when typescript has warnings or errors

Currently this is detected when building the docu. Since the developer
rarely does that the problem is detected on github.
This change allows the developer to discover the error early by failing
the build.

* 3.0.75

* fix avatar disapeared when item is updated

* fixed linting

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-03-05 21:31:57 +00:00
Anton Tranelis
31f0dd7a81
fix(source): fixed attestation layout (#180)
* fixed attestation layout

* fixed for attestations on other map instances

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-03-05 21:26:16 +00:00
Max
77f596fd76
Remove unused file (#183) 2025-03-05 21:23:43 +00:00
Anton Tranelis
6a5bc0ade3
removed hardcoded asset api (#179) 2025-03-05 15:51:56 +01:00
60984241fa changed port back to 5174 2025-03-05 07:42:12 +00:00
0678506ed6
fix(workflow): unit tests workflow not running properly (#178)
* workflow: unit tests do not run properly

The pedicate-quantifier every seem not to mach properly

Problematic worklfow:
https://github.com/utopia-os/utopia-ui/actions/runs/13639312728/job/38125326624

The PR(https://github.com/utopia-os/utopia-ui/pull/172) did not execute,
but tsx files were changed.

* reduce coverage requirements

This was inherited frommaster
2025-03-05 00:54:15 +01:00
Anton Tranelis
54f464ef02
fix(source): removed tw-elements (#175)
* rollup - fail when typescript has warnings or errors

Currently this is detected when building the docu. Since the developer
rarely does that the problem is detected on github.
This change allows the developer to discover the error early by failing
the build.

* 3.0.75

* removed tw-elements

* removed tw-elements package

* found userType artefacts and removed it

* fixed linting

* 3.0.76

* adjust sidebar size and transition

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-03-04 23:35:10 +01:00
5c18ed2abd
fix types - components/templates (#172)
Fix more types - specifically in components/templates. This is done by
removing eslint-ignores and fixing them.
2025-03-03 19:58:04 +00:00
4041e9472a
refactor(source): css (#171)
* separate css into several files by topic, move all css into assets

Make separate files for all css topics like leaflet and move its into
the assets folder.

This way only one include from index.ts points to an index.tsx in assets
including all the css files.

* fix up compiling

* extract more css imports, unify imports in a css.tsx file

* separate external css & internal css

* renamed icons.css in marker-icons.css

---------

Co-authored-by: Anton Tranelis <mail@antontranelis.de>
2025-03-03 19:42:59 +01:00
Anton Tranelis
18e561b8b9
fix(source): adjust filter control (#170)
* rollup - fail when typescript has warnings or errors

Currently this is detected when building the docu. Since the developer
rarely does that the problem is detected on github.
This change allows the developer to discover the error early by failing
the build.

* adjust filter control to migrate wuerdekompass map to the latest code with modular profiles

* 3.0.65

* set version to 3.0.71 for npm release

* 3.0.72

* 3.0.73

* resolved merge conflict

* 3.0.74

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-03-01 10:04:25 +00:00
b98daf618b updated utopia-ui to 3.0.74 2025-02-28 20:00:35 +00:00
eb4b8788bb
feat(docu): generate coverage badge (#162)
* generate coverage badge

generate coverage badge in docs generation workflow in order to upload
it with the documentation

* include badge in readme, correct image name & json path

* job names, json path

* remove coverage branch from workflow
2025-02-28 19:56:03 +00:00
mahula
d9a54bf567
refactor(workflow): refine change check filters (#118)
* workflows: removeredundant change check filters

* docs workflow: refine file filter

* unit test workflow: refine file filter

* Revert "workflows: removeredundant change check filters"

This reverts commit 2477cd595e6f22437454c9eef654ef01cfca7ed8.
2025-02-28 10:38:24 +01:00
Anton Tranelis
42e3e95c1e
fix(source): fix linked items header (#165)
* rollup - fail when typescript has warnings or errors

Currently this is detected when building the docu. Since the developer
rarely does that the problem is detected on github.
This change allows the developer to discover the error early by failing
the build.

* updated packages, fixed vulnerabilities

* 3.0.65

* hide avatar if no item image

* fix linting

* 3.0.66

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-02-27 20:18:58 +00:00
Anton Tranelis
e045414118
fix(source): fixed AppShell type (#167)
* rollup - fail when typescript has warnings or errors

Currently this is detected when building the docu. Since the developer
rarely does that the problem is detected on github.
This change allows the developer to discover the error early by failing
the build.

* rebase

* removed userType from AppShell type defnitions

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-02-27 20:14:22 +00:00
Anton Tranelis
e74fc083ae
fix(source): cleanup exports (#168)
* rollup - fail when typescript has warnings or errors

Currently this is detected when building the docu. Since the developer
rarely does that the problem is detected on github.
This change allows the developer to discover the error early by failing
the build.

* removed unused components and exports

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-02-27 20:10:42 +00:00
f506509531 updated to utopia-ui 3.0.66 2025-02-27 08:26:54 +00:00
3aec205daa updated to utopia-ui 3.0.65 2025-02-27 08:07:32 +00:00
Anton Tranelis
7d16b2140a
fix(source): fix donation widget button (#153)
* fix donation widget button

* fixed linting

* fixed timing
2025-02-26 14:03:04 +01:00
Moriz Wahl
0169f1c8bc
remove select box component (#159) 2025-02-25 19:42:19 +00:00
Moriz Wahl
b22f62fe2c
unit test for combo box component (#157) 2025-02-25 19:24:25 +00:00
Moriz Wahl
c1eafc9a0f
feat(source): test text area input (#155)
* unit tests for text area input component
2025-02-25 20:21:06 +01:00
Max
1de44c3e1c
feat(release): improve typing of itemsApi (WIP) (#148)
* Improve typing of itemsApi

* Show error if name of new item cannot be determined

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
2025-02-25 08:39:09 +00:00
18030b8bc0
rollup - fail when typescript has warnings or errors (#154)
Currently this is detected when building the docu. Since the developer
rarely does that the problem is detected on github.
This change allows the developer to discover the error early by failing
the build.
2025-02-25 08:30:15 +00:00
9668f8d417
refactor(source): svg files & heroicons (#144)
* support for svg files

Support to load svg files and include them as bas64 encoded images in
the bundle.

* navbar svgs

* replace NavBar SVGs with heroicons

* layercontrol icons

* lint fix

* quest - questionmark

* plusbutton - plus

* linkeditem - elipse-vertical - link-slash

* contactinfo - envelope & phone

* avatar - arrow-up-tray

* ActionButton - link & plus

* StartEndView - calendar x2

* HeaderView - ellipse-vertical & pencil & trash

* SidebarControl - bars-3

* SearchControl - flag & magnifying-glass

* GratitudeControl - heart

* FilterControl - funnel

* AddButton - plus

* reduce test coverage requirements

* remove wrongfully commit dummy svg

* updated obsolete package.lock

* migrate more svgs from code to file, use hero icons where it seems applicable

* moved share icons to subfolder

* fixed layout

---------

Co-authored-by: Anton Tranelis <mail@antontranelis.de>
2025-02-24 14:58:31 +00:00
12fd624780
refactor(source): define more types (#149)
* define more types

* lint fixes

* update snapshot and reduce coverage

* revert role change, since it incompatible with directus
2025-02-22 16:09:38 +00:00
63e864ff81
fix delayed build (#150)
We noticed that the build was outdated and lagged behind 1 build.

Reason for this is rollup and its second config.
Solved by
https://github.com/rollup/rollup/issues/1666#issuecomment-1163091988

This could cause problems when types change
2025-02-22 15:54:34 +00:00
Max
1357a18b65
Don't crash when text field is not set (#147) 2025-02-22 15:49:50 +00:00
0ec0f13c74
refactor(source): define types and remove file-wide eslint disables (#133)
* types: define types and remove file-wide eslint disables

* reduce coverage requirement
2025-02-20 15:24:21 +00:00
Anton Tranelis
f8a0f36d54
docs(docu): update README.md (#143)
* Update README.md

* Update examples/1-basic-map/README.md

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-02-20 14:12:12 +00:00
Anton Tranelis
656fbb3ffc
refactor(source): get rid of item type (#142)
* started

* removed replaced itemType on all the places where it was used to identyfi the user profile layer

* removed unused property from NavBar

* removed unused property from AppShell

* removed userType from app state

* 3.0.60

* set version to 3.0.64 to publish package to include it in utopia-map

---------

Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-02-20 11:04:05 +00:00
27e4282624
types for all auth related things (#135) 2025-02-20 09:45:58 +00:00
ba27c3f560
refactor(source): remove packages unused (#139)
* remove unused packages

Remove packages not in use (anymore) in the project.

* fix type
2025-02-20 09:30:23 +00:00
2d79bb464c updated to utopia-ui@3.0.64 2025-02-20 09:07:23 +00:00
Anton Tranelis
c02efb9a41
docs(source): add tags example (#131)
* added tags example

* changed page title

* updated github workflows to test new example

* fixed yaml syntax

* fixed yaml syntax

* fixed packagenames in package.json
2025-02-19 15:58:48 +01:00
e2beb712bf
refactor(source): export point type (#138)
* bind the local utopia-ui lib

To ensure the examples still work with the latest utopia-ui, it is now
bound to the current code and does no longer depend on publishing the
library first

* replaced number by uuid as item ids in examples

* remove link mechanic from workflow

* also build utopia-ui

* fix example2

for some reason this stopped working on maaster.

* export geojson point to remove this external dependency

By exporting this type another package is not needed. This is especially
important, since there are different Point definitions which are
partially incompatible.

---------

Co-authored-by: Anton Tranelis <31516529+antontranelis@users.noreply.github.com>
Co-authored-by: Anton Tranelis <mail@antontranelis.de>
2025-02-19 14:44:56 +00:00
1b5df93313
fix example2 (#137)
for some reason this stopped working on maaster.
2025-02-19 15:05:39 +01:00
feae3dc482
fix(source): type export via rollup plugin by using the correct input (#122)
* fix typeexport via rollup plugin by using the correct input

The rollup plugin dts requires a d.ts tree as input not the txs sources.

This change points the plugin into the right direction and removes the
type export hacks.

* corrected types path

apparently this was not properly adjusted accross the board when moving
the folder

* fix rollup config

properly export types

* use export * where needed

Since we now export types alongside with defintions we use the `export *
from` syntax to simplify things

* export types alongside with interfaces

export types so we can properly use them in external projects alongside
the exported function/module/...

* fix type-problems uncovered by utopia-map

When including types properly in the utopia-map several missing typings
showed up.

* fix typing

fix an inhereted type

* dummy restructure code

to properly be able to compile things we are not allowed to have unsed
parameters/props

* assigne types to category types
2025-02-19 12:05:42 +00:00
5e628d6e4d
docs: include internal types (#121)
Include internal types, not exposed.
For this purpose the typedoc plugin `typedoc-plugin-missing-exports` is
utilized,

It looks like there is trouble with the type export in general.
2025-02-18 15:04:24 +01:00
f9b079c2bf
docs: include version in the title (#123)
Include the version according to the package.json in the title of docs
page.
2025-02-18 13:17:10 +01:00
93eabedd16
docs: group by category (#124)
Groups the docs by categories and assigns all exported Components a
category (except types).
2025-02-18 11:11:06 +01:00
876d5925e0
refactor(docu): reference the docu URL in the README.md (#125)
* docs: reference the URL in the README.md

Link to the docs published on github when pushing to `main` and include
percentage badge for documentation coverage.

* corrected typo

* corrected typo
2025-02-18 10:15:14 +01:00
Max
d6c7481661
Merge pull request #78 from utopia-os/eslint-react-refresh
fix(workflow): add eslint-react-refresh
2025-02-17 18:34:59 +01:00
Maximilian Harz
a3d7fa8496 Merge main 2025-02-17 18:32:14 +01:00
Max
c38d1283e1
Merge pull request #90 from utopia-os/remove-get-value
Improves typing of items
Removes getValue because it is super hard to type and was introduced for a customisation which is not used anymore. if needed, we could have a cleaner solution to offer that functionality.
2025-02-17 18:28:15 +01:00
Maximilian Harz
83d65b0107 Fix package-lock.json 2025-02-17 18:21:45 +01:00
Maximilian Harz
8f624b90fa Make item optional 2025-02-17 18:07:01 +01:00
Maximilian Harz
10e81c38c2 Use item in TextView when given 2025-02-17 18:07:01 +01:00
Maximilian Harz
b9295128fd Add ? to item references 2025-02-17 18:07:01 +01:00
Maximilian Harz
23145b0a14 Remove unnecessary eslint disable 2025-02-17 18:07:01 +01:00
Maximilian Harz
134d2ef123 Use ?? instead of || 2025-02-17 18:07:01 +01:00
Maximilian Harz
2556d8c047 item.text is optional 2025-02-17 18:07:01 +01:00
Maximilian Harz
cb727d433d Fix paranthesis in ProfileForm 2025-02-17 18:07:01 +01:00
Maximilian Harz
aa616ed295 Refactor background style 2025-02-17 18:07:00 +01:00
Maximilian Harz
f71929b4d8 Fix paranthesis in ActionsButton 2025-02-17 18:07:00 +01:00
Maximilian Harz
0395c6393b Fix package-lock 2025-02-17 18:06:58 +01:00
Maximilian Harz
bface9c397 Lower test coverage 2025-02-17 18:05:06 +01:00
Maximilian Harz
5835a71588 Type item.gallery 2025-02-17 18:05:06 +01:00
Maximilian Harz
990f837aaf Use radash.get to support deep properties in ProfileTextView 2025-02-17 18:05:06 +01:00
Maximilian Harz
876aa65f4f Ignore any 2025-02-17 18:05:06 +01:00
Maximilian Harz
a949df25c2 Simplify conditional and fix color calculation 2025-02-17 18:05:06 +01:00
Maximilian Harz
7e326590bb Don't type api for now; re-add hasColor 2025-02-17 18:05:06 +01:00
Maximilian Harz
bc0aa25cd2 Make updateItem type partial 2025-02-17 18:05:06 +01:00
Maximilian Harz
a3acf592dd Allow item.position to be null 2025-02-17 18:05:06 +01:00
Maximilian Harz
f0a3cbada7 Hide empty avatar 2025-02-17 18:05:06 +01:00
Maximilian Harz
5846637747 Improve api type 2025-02-17 18:05:06 +01:00
Maximilian Harz
5741070854 Remove unused props and comment 2025-02-17 18:05:06 +01:00
Maximilian Harz
bbd6e2dd61 Remove unneeded props 2025-02-17 18:05:06 +01:00
Maximilian Harz
9511dc0408 Use .image as avatar 2025-02-17 18:05:06 +01:00
Maximilian Harz
d096ffe456 Fix PopupButton 2025-02-17 18:05:04 +01:00
Maximilian Harz
ea80e6e94c Use better type name for tag ids 2025-02-17 18:03:30 +01:00
Maximilian Harz
7f4594ad53 Fix functionality of ProfileTextView 2025-02-17 18:03:30 +01:00
Maximilian Harz
4316387ecb Improve typing of items, remove getValue 2025-02-17 18:03:25 +01:00
Maximilian Harz
f5b7b9267f Try to type Item and getValue (WIP) 2025-02-17 17:56:56 +01:00
mahula
c9a66461e1
Merge pull request #117 from utopia-os/setup-component-testing
feat(other): set up component testing
2025-02-17 17:52:01 +01:00
mahula
13754e6da7
remove double entry from package.json 2025-02-17 17:32:21 +01:00
mahula
cab457ad23
fix mistake in package.json 2025-02-17 17:26:10 +01:00
mahula
126af43ead
Merge branch 'main' into setup-component-testing 2025-02-17 17:20:24 +01:00
be5513947c reorderd exports to avoid cypress warning 2025-02-17 15:51:35 +00:00
Anton Tranelis
987540652a
Merge pull request #112 from utopia-os/simple-script-names
feat(workflow): add simpler names for linting and lintfix
2025-02-17 13:04:40 +00:00
mahula
054db690d0 fix linting 2025-02-14 22:23:24 +01:00
mahula
1a33891a21 add cypress commands and compontents files to tsconfig include 2025-02-14 22:11:18 +01:00
mahula
0b509d1963 fix linting 2025-02-14 21:54:58 +01:00
mahula
e75602d365 add component test script to package.json 2025-02-14 21:45:13 +01:00
mahula
b1b3376aee add first rudimentary component tests 2025-02-14 21:42:37 +01:00
mahula
d632e2c5b7 add first rudimentary component tests 2025-02-14 21:20:18 +01:00
mahula
f8a14cd942 add cypress config to tsconfig 2025-02-14 18:24:30 +01:00
mahula
45037737f4 add basic cypress component testing config 2025-02-14 18:22:13 +01:00
mahula
7b905135aa add cypress to package.json 2025-02-14 18:19:37 +01:00
antontranelis
1de3469bed
Merge pull request #19 from utopia-os/fix-type-imports
fix(other): fix type imports
2025-02-11 15:27:17 +00:00
44c7f4d120 fix type imports 2025-02-11 15:25:57 +00:00
antontranelis
7fb2fbc54c
Merge pull request #18 from utopia-os/fix-type-imports
fix(other): remove custom item property names per layer
2025-02-11 15:25:20 +00:00
antontranelis
97f676a379
Merge pull request #116 from utopia-os/contact-not-mandotory-in-tabview
fix(source): contact not mandotory in tabview
2025-02-11 14:17:58 +00:00
ba1dbcb975 contact not mandotory anymore in TabView to avoid side effects 2025-02-11 14:08:38 +00:00
01c3424fb9 3.0.59 2025-02-11 13:57:11 +00:00
antontranelis
7bc4e34718
Merge pull request #115 from utopia-os/info-dialog
feat(source): info dialog
2025-02-11 13:55:22 +00:00
e1b3492514 added donation widget 2025-02-11 13:53:03 +00:00
0a70af994c Merge branch 'main' into info-dialog 2025-02-11 13:05:53 +00:00
antontranelis
14dc0e38ba
Merge pull request #114 from utopia-os/remove-defaultProps
fix(source): use JavaScript default parameters instead defaultProps
2025-02-11 10:56:29 +00:00
f6ba6fbff1 Use JavaScript default parameters instead defaultProps 2025-02-11 10:52:09 +00:00
antontranelis
bb867e96bf
Merge pull request #113 from utopia-os/eslint-igonore-coverage
fix(workflow): add /coverage to .eslintignore
2025-02-11 10:12:37 +00:00
e566061e73 add /coverage to .eslintignore 2025-02-11 10:01:26 +00:00
Maximilian Harz
db94b7517d Add simpler names for linting and lintfix 2025-02-10 23:26:32 +01:00
antontranelis
64397f1a9c
Merge pull request #110 from utopia-os/fix-build-process
fix(source): fix build process
2025-02-10 11:41:16 +00:00
79ca17aa3f fix types import path 2025-02-10 11:39:07 +00:00
fd3da848ba extended external dependencies 2025-02-10 11:38:40 +00:00
antontranelis
a8130b3c54
Merge pull request #109 from utopia-os/fix-add-button
fix(source): capture tap events in add button on mobile chrome
2025-02-09 21:13:08 +00:00
58e1b12121 capture tap events 2025-02-09 21:09:38 +00:00
antontranelis
1de3f3e271
Merge pull request #108 from utopia-os/export-all-types
fix(source): export all types
2025-02-09 21:03:01 +00:00
da7852f3e4 3.0.58 2025-02-09 20:34:13 +00:00
ddb0d481fb reorganized types 2025-02-09 20:34:08 +00:00
a450128b72 reorganized types 2025-02-09 20:32:41 +00:00
4d52294758 3.0.57 2025-02-09 19:43:13 +00:00
d6e63270fc updated config for rollup 2025-02-09 19:43:10 +00:00
4663acf9b8 3.0.56 2025-02-09 19:03:41 +00:00
c6484027c4 uddated package.json 2025-02-09 19:02:35 +00:00
2af771a79b 3.0.55 2025-02-09 18:48:54 +00:00
0cfd4482bb config for rollup 4.x 2025-02-09 18:48:47 +00:00
0e02ad0a60 3.0.54 2025-02-09 18:27:43 +00:00
bb3f600b8b 3.0.53 2025-02-09 18:27:05 +00:00
2945c0e4bd fixed types path in package.json 2025-02-09 18:27:01 +00:00
b370b7afe3 3.0.52 2025-02-09 18:24:38 +00:00
d9791b84c4 updated rollup 2025-02-09 18:24:27 +00:00
75879fdc21 version 3.0.51 2025-02-09 10:42:42 +00:00
874e6fc2c6 export all types 2025-02-09 10:41:20 +00:00
Maximilian Harz
26f2547c61 Remove custom item property names per layer 2025-02-06 12:27:05 +01:00
c5f4c227a0 adjust donation widget 2025-02-04 20:39:18 +00:00
39a114bb1b Merge branch 'main' into info-dialog 2025-02-04 20:07:29 +00:00
antontranelis
061116151a
Merge pull request #100 from utopia-os/add-avatar-placeholder
feat(source): add avatar placeholder
2025-02-04 20:00:02 +00:00
4524cc8417 added avatar placeholder 2025-02-04 19:56:46 +00:00
27f0af6654 incude button 2025-02-04 17:25:21 +00:00
bead17d189 3.0.40 2025-02-04 13:03:30 +00:00
ca03ee5de8
Merge pull request #98 from utopia-os/doc-coverage-requirement
feat(workflow): test documentation coverage
2025-02-04 14:00:48 +01:00
antontranelis
5a99a55b7b
Merge pull request #97 from utopia-os/ci-unit-tests
feat(workflow): unit tests
2025-02-04 12:56:06 +00:00
antontranelis
fedcb6a3be
Merge pull request #99 from utopia-os/remove-tribute
fix(source): remove tribute
2025-02-04 12:55:06 +00:00
ec9f086000 fix linting 2025-02-04 12:47:53 +00:00
a8ad09fab7 removed tributejs 2025-02-04 12:44:59 +00:00
a4db7b78a1 Merge branch 'main' of github.com:utopia-os/utopia-ui 2025-02-04 12:36:07 +00:00
b3559bbf04
reduce docs coverage requirement to 0 2025-02-04 13:21:01 +01:00
1c966300ec
better debug output for doc-coverage script 2025-02-04 13:17:44 +01:00
96ce2f1a8f
fix workflow 2025-02-04 13:15:31 +01:00
627a6446bd
missing package-lock 2025-02-04 13:12:50 +01:00
4c58a90ab3
docs-coverage script 2025-02-04 13:12:37 +01:00
b6bf4a2cff
coverage debug output when quota is not met 2025-02-04 13:02:34 +01:00
1700fa9db5
test documentation coverage 2025-02-04 12:57:27 +01:00
Moriz Wahl
f41cf4ebe7 specify working directory 2025-02-04 12:15:14 +01:00
Moriz Wahl
3f6cdf15a5 ci unit tests 2025-02-04 12:14:33 +01:00
Moriz Wahl
b926f695f7
Merge pull request #96 from utopia-os/setup-unit-tests
feat(source): setup unit tests
2025-02-04 12:06:25 +01:00
c91bf17cfd
fix typedoc 2025-02-04 12:03:16 +01:00
Moriz Wahl
52899df550 Merge branch 'main' into setup-unit-tests 2025-02-04 10:46:27 +01:00
c71b4f5ed3
Merge pull request #89 from utopia-os/typedoc
feat(other): typedoc
2025-02-04 10:42:28 +01:00
Moriz Wahl
21926aebe4 vitejs to dev dependencies 2025-02-04 10:32:19 +01:00
Moriz Wahl
1a003ae9d8 peer dependencies for react and react-dom 2025-02-04 10:28:30 +01:00
Moriz Wahl
942d17d1e2 Merge branch 'main' into setup-unit-tests 2025-02-03 23:09:44 +01:00
Moriz Wahl
5760ff0701 cjs for postcss 2025-02-03 22:50:30 +01:00
Moriz Wahl
22258a62ca fully test text input component 2025-02-03 22:40:06 +01:00
Moriz Wahl
3a84b6db07 test snapshot 2025-02-03 21:52:07 +01:00
Moriz Wahl
42e03a4296 linting 2025-02-03 21:47:57 +01:00
Moriz Wahl
a13339ac47 add coverage thrasholds 2025-02-03 21:47:03 +01:00
Moriz Wahl
0acadc8596 test setup file and jest-dom 2025-02-03 21:42:35 +01:00
Moriz Wahl
3e12d56fae add coverage 2025-02-03 21:33:58 +01:00
Moriz Wahl
0cb4fd19a9 include vite.config 2025-02-03 21:20:16 +01:00
Moriz Wahl
1a2b2275e5 add simple unit test 2025-02-03 21:05:25 +01:00
97f5880f4c 3.0.39 2025-02-03 15:16:18 +00:00
antontranelis
4c01c15623
Merge pull request #95 from utopia-os/small-fixes
fix(source): small fixes
2025-02-03 15:14:13 +00:00
2bd9fd20d2 changed wording in player profiles 2025-02-03 10:38:16 +00:00
b7fbbd4d89 set infotext timer to 10s 2025-02-03 10:20:04 +00:00
eb02d376df fix custom marker icon in Layer component 2025-02-03 10:16:53 +00:00
4c0a945f0a
delete docs accidentally submitted 2025-02-03 11:06:17 +01:00
6b8ec30579
master only 2025-02-03 11:06:17 +01:00
bf4a8fa693
also checkout code 2025-02-03 11:06:17 +01:00
24310ec9db
test docs deploy 2025-02-03 11:06:17 +01:00
30edd02a1c
fix lint 2025-02-03 11:06:17 +01:00
5170c6089a
ignore docs in eslint 2025-02-03 11:06:17 +01:00
17533165dd
generate docs workflow 2025-02-03 11:06:17 +01:00
dc3107f460
fix tribute package 2025-02-03 11:06:17 +01:00
d7b21c8ee8
cast to any as setClusterRef is not properly typed at the moment 2025-02-03 11:06:17 +01:00
dec492632f
add missing types 2025-02-03 11:06:17 +01:00
3310b978da
ignore docs 2025-02-03 11:06:17 +01:00
f75767f286
install typedoc 2025-02-03 11:06:17 +01:00
7a1b90e70b 3.0.38 2025-02-03 09:00:27 +00:00
antontranelis
8f2310b73f
Merge pull request #94 from utopia-os/new-icons
feat(source): new icon
2025-02-03 08:58:16 +00:00
c934621ff2 cannabis icon 2025-02-03 08:55:42 +00:00
45f17194d0 3.0.37 2025-02-03 08:25:27 +00:00
8840ec2982
Merge pull request #88 from utopia-os/update-typescript
feat(other): update-typescript
2025-02-03 05:11:43 +01:00
38adffcf1c
Merge pull request #86 from utopia-os/lint-examples
feat(workflow): lint examples
2025-02-03 05:11:26 +01:00
726542e70e updated utopia-ui to 3.0.36 2025-02-02 22:02:32 +00:00
db8f7ff753 3.0.36 2025-02-02 21:54:44 +00:00
antontranelis
44c17b5908
Merge pull request #92 from utopia-os/gallery-component
feat(source): gallery component
2025-02-02 21:53:15 +00:00
ad4ef14014 Merge branch 'main' into gallery-component 2025-02-02 21:51:19 +00:00
antontranelis
297435fd47
Merge pull request #93 from utopia-os/disabled-no-unassigned-import-for-css
fix(workflow): disabled no-unassigned-import for css
2025-02-02 21:40:46 +00:00
04e806cbdc fix linting 2025-02-02 21:37:39 +00:00
573b4294ee disabled no-unassigned-import for css 2025-02-02 21:29:37 +00:00
0e6959331a fixed some linting 2025-02-02 19:24:13 +00:00
acc502edde Merge branch 'main' into gallery-component 2025-02-02 18:21:27 +00:00
antontranelis
3c2d4c6c23
Merge pull request #91 from utopia-os/new-icons
feat(source): added more marker icons
2025-02-02 18:07:48 +00:00
f836e57c18 added more marker icons 2025-02-02 17:58:48 +00:00
antontranelis
3fc7fe6c87
Merge pull request #87 from utopia-os/update-command
feat(other): update-command
2025-01-31 15:04:02 +00:00
antontranelis
fb86f0a50d
Merge pull request #84 from utopia-os/update-build-workfow-to-check-examples
fix(workflow): update test.build.yml
2025-01-31 12:16:37 +00:00
27d8a9d7e2
rename workflow 2025-01-31 09:02:04 +01:00
aaf1dfd31e
update typescript 2025-01-31 08:15:51 +01:00
4d4b004974
implement update command for package updates 2025-01-31 08:12:29 +01:00
b9991d6041
lint examples
have a workflow for each example to lint according to local lint rules
2025-01-31 07:58:30 +01:00
antontranelis
4a685c001e
Update test.build.yml 2025-01-30 15:26:56 +00:00
antontranelis
9f409e36f4
Update test.build.yml 2025-01-30 15:18:25 +00:00
antontranelis
69c735bae3
Merge pull request #83 from utopia-os/remove-useAuth-from-export
fix(source): remove useAuth from export
2025-01-29 14:49:59 +00:00
b6cb5db804 remove useAuth from export 2025-01-29 14:48:26 +00:00
antontranelis
b0e952c4df
Merge pull request #82 from utopia-os/reorganize-map-and-layer
fix(source): removed some logging
2025-01-29 14:24:23 +00:00
6004ca095a removed logging 2025-01-29 14:22:51 +00:00
antontranelis
c3edabdbb9
Merge pull request #81 from utopia-os/reorganize-map-and-layer
fix(source): cleanup maps and layers
2025-01-29 14:18:56 +00:00
c704308010 linting 2025-01-29 14:17:13 +00:00
9c0a11ceee cleanup maps and layers 2025-01-29 14:13:02 +00:00
Maximilian Harz
eeafacb074 Add eslint-plugin-react-refresh package 2025-01-29 14:18:52 +01:00
Maximilian Harz
cdf4770333 Add eslint-react-refresh 2025-01-29 14:18:51 +01:00
antontranelis
4b444b65c2
Merge pull request #76 from utopia-os/types-emoji-picker
fix(source): types for emoji picker and less deactivated linting rules in AttestationForm
2025-01-29 12:38:47 +00:00
378cc760bd Merge branch 'main' of github.com:utopia-os/utopia-flex-map 2025-01-29 12:09:00 +00:00
86891765c5 loading animation 2025-01-29 12:08:09 +00:00
antontranelis
59a4501f25
Merge pull request #80 from utopia-os/contribution-guide-readme
docs(docu): link contribution guide to README.md
2025-01-28 21:14:31 +00:00
antontranelis
d061367a05
link contribution guide to README.md 2025-01-28 21:13:33 +00:00
antontranelis
456323c4dd
Merge pull request #79 from utopia-os/contribution-guide
docs(docu): update CONTRIBUTING.md
2025-01-28 20:56:29 +00:00
antontranelis
9085eb4eda
Update CONTRIBUTING.md 2025-01-28 20:54:13 +00:00
Maximilian Harz
cc2f4badbb Merge branch 'main' into types-emoji-picker 2025-01-28 13:15:49 +01:00
antontranelis
10f1e7b407
Merge pull request #75 from utopia-os/update-package-lock
fix(workflow): update package-lock.json
2025-01-28 11:57:23 +00:00
antontranelis
1d35a92469
Merge pull request #74 from utopia-os/eslint-fix-react-version
fix(workflow): add specific react version in eslint settings
2025-01-28 11:56:59 +00:00
Maximilian Harz
6287bb78e8 Solve linting errors or outcomment rules 2025-01-28 11:40:31 +01:00
antontranelis
0cd8686590
Merge pull request #77 from utopia-os/antontranelis-patch-2
docs(docu): update README.md
2025-01-26 03:04:20 +00:00
antontranelis
68bd262566
Update README.md 2025-01-26 03:02:38 +00:00
Maximilian Harz
8a32cd5c73 Update package-lock.json 2025-01-25 10:49:07 +01:00
Maximilian Harz
e41e71327c Add specific react version in eslint settings 2025-01-25 10:45:31 +01:00
Maximilian Harz
0c60f9fc7f Merge main 2025-01-25 10:26:33 +01:00
antontranelis
c84a9f305a
Merge pull request #73 from utopia-os/antontranelis-patch-3
docs(docu): update README.md
2025-01-24 12:46:09 +00:00
antontranelis
af5e540531
Merge pull request #72 from utopia-os/antontranelis-patch-2
docs(docu): update README.md
2025-01-24 12:45:50 +00:00
antontranelis
7e06d7a16a
Update README.md 2025-01-24 12:45:10 +00:00
antontranelis
73409c2042
Update README.md 2025-01-24 12:42:34 +00:00
antontranelis
61ef7f5617
Merge pull request #71 from utopia-os/antontranelis-patch-2-1
docs(docu): update README.md
2025-01-24 12:40:50 +00:00
antontranelis
4478f8cc53
Merge pull request #70 from utopia-os/antontranelis-patch-2
docs(docu): update README.md
2025-01-24 12:40:34 +00:00
antontranelis
def49098ed
Update README.md 2025-01-24 12:39:36 +00:00
antontranelis
00be8175bc
Update README.md 2025-01-24 12:38:08 +00:00
antontranelis
48fccf0f71
Merge pull request #69 from utopia-os/antontranelis-patch-2
docs(docu): cleanup-examples
2025-01-24 12:37:04 +00:00
6e0de3beda merged 2025-01-24 12:35:51 +00:00
44fbefe53c cleanup examples 2025-01-24 12:33:55 +00:00
antontranelis
ecab4ed3fb
Merge pull request #68 from utopia-os/antontranelis-patch-2
docs(docu): cleanup examples
2025-01-24 12:31:25 +00:00
3afb9f184b cleanup examples 2025-01-24 12:30:17 +00:00
c8a2204d0f cleanup examples 2025-01-24 12:27:39 +00:00
antontranelis
3a1c2a5fb1
Update README.md 2025-01-24 12:21:31 +00:00
antontranelis
267d5b1c78
Merge pull request #67 from utopia-os/antontranelis-patch-2
docs(docu): update README.md
2025-01-24 12:20:20 +00:00
antontranelis
7a50b04fae
Update README.md 2025-01-24 12:19:15 +00:00
antontranelis
03b400924a
Merge pull request #66 from utopia-os/add-examples
docs(docu): added examples
2025-01-24 12:17:04 +00:00
00e0e57ffc replaced examples with ts implementation 2025-01-24 12:13:52 +00:00
e7d44657d7 replaced examples with ts implementation 2025-01-24 12:12:59 +00:00
59030fda66 added examples to eslintignore 2025-01-24 11:51:07 +00:00
28ee520a16 fix more linting 2025-01-23 13:19:06 +00:00
5f48f4e645 fix linting 2025-01-23 13:02:34 +00:00
b1e6db5d1f Merge branch 'main' into add-examples 2025-01-23 12:31:37 +00:00
antontranelis
de065bd8c0
Merge pull request #65 from utopia-os/add-examples
docs(docu): add examples & component diagram
2025-01-23 12:30:11 +00:00
70b85f4555 added component diagram 2025-01-23 12:28:05 +00:00
c6a8c543c1 added basic examples 2025-01-23 12:23:52 +00:00
Maximilian Harz
be3fca7925 Add types for EmojiPicker 2025-01-23 12:05:48 +01:00
6501ef4008 3.0.35 2025-01-08 00:32:03 +00:00
5ffe44de2c implemented gallery widget 2025-01-08 00:31:58 +00:00
c4a8c14fcb Merge branch 'main' into gallery-component 2025-01-07 16:53:51 +00:00
c0f0349628 3.0.34 2025-01-07 15:40:27 +00:00
e71d0ae822 Merge branch 'main' of github.com:utopia-os/utopia-ui 2025-01-07 14:44:33 +00:00
antontranelis
46ba73fd1b
Merge pull request #62 from utopia-os/typescript-navbar
fix(other): make NavBar typesafe
2025-01-07 13:06:18 +00:00
bb2025456a fixed vulnerability 2025-01-07 12:53:59 +00:00
7be57a5658 init gallery component 2025-01-04 15:24:40 +00:00
20e8203b26
make NavBar typesafe
removed obsolete eslint disables

fixed a type problem

another type problem

type check
2024-12-19 12:17:51 +01:00
antontranelis
0316b2402c
Merge pull request #61 from utopia-os/code-of-conduct
docs(docu): create CODE_OF_CONDUCT.md
2024-12-10 21:43:36 +01:00
antontranelis
0af9fd3829
Create CODE_OF_CONDUCT.md 2024-12-10 21:38:43 +01:00
db25259557 Merge branch 'main' of github.com:utopia-os/utopia-ui 2024-12-04 06:35:37 +01:00
antontranelis
81a9c9023f
Merge pull request #55 from utopia-os/fix-rollup2
fix(other): externalize rollup dependencies
2024-12-04 06:35:17 +01:00
0face20845 3.0.33 2024-11-29 18:11:15 +01:00
antontranelis
bbaaa93ef2
Merge pull request #57 from utopia-os/textarea-required-option
feat(source): textarea required option
2024-11-29 18:10:53 +01:00
3014cf682f option to make textarea input required or optional 2024-11-29 18:05:26 +01:00
antontranelis
a5faf037f1
Merge pull request #56 from utopia-os/antontranelis-patch-2
refactor(workflow): update test.lint.pr.yml
2024-11-27 07:17:50 +01:00
antontranelis
af760dfd09
Update test.lint.pr.yml 2024-11-27 07:14:35 +01:00
9acbbbed5b
externalize rollup dependencies 2024-11-26 10:07:09 +01:00
af639c7224 Merge branch 'main' of github.com:utopia-os/utopia-ui 2024-11-26 09:14:30 +01:00
antontranelis
fbbf035567
Update README.md 2024-11-26 09:03:30 +01:00
antontranelis
7976f25c90
Update README.md 2024-11-26 08:29:00 +01:00
antontranelis
0b17cdb624
Merge pull request #52 from utopia-os/types
fix(other): separated types, eslint rule for importing types
2024-11-26 06:14:22 +01:00
antontranelis
9d9db90600
Update README.md 2024-11-24 21:31:36 +01:00
antontranelis
cb8af4c2b5
Update README.md 2024-11-24 21:31:04 +01:00
3ed67d7142 3.0.32 2024-11-24 10:55:04 +01:00
8cc660dba9 Merge branch 'main' of github.com:utopia-os/utopia-ui 2024-11-24 10:54:36 +01:00
antontranelis
a581fa3c1a
Merge pull request #51 from utopia-os/potential-fix-app-crash
fix(other): potentially fix an app crash
2024-11-24 10:54:24 +01:00
fc4fbfa191 removed utopia-ui 2024-11-24 10:18:47 +01:00
antontranelis
bd9ce63d68
Merge pull request #54 from utopia-os/antontranelis-patch-1
fix(other): update readme
2024-11-24 08:58:39 +01:00
antontranelis
60555de3f9
Update README.md 2024-11-24 08:36:35 +01:00
002f606953
fix AssetsApi any 2024-11-24 04:20:26 +01:00
9b98a18597
removed types from include
types should be included by typeRoots and hence not result in errors of
eslint (has to be monitored)
2024-11-24 04:15:53 +01:00
3872a052b6
separated types, eslint rule for importing types
- Separated types and moved them into the proper ./types folder defined
in the tsconfig.json.
- Defined a new folder alias `#types`.
- New eslint rule to enforce `import type` when a type is imported.
- Removed Geometry Class and used manual Point types from `geojson`
2024-11-24 04:11:32 +01:00
a6cd9dbeb2
potentially fix an app crash
Potentially fixes app crash on
https://next.docutopia.de/item/54870c5f-9b37-4bcb-9838-59a76561c4d5
caused by an field being null
2024-11-24 01:25:33 +01:00
antontranelis
90004de1d6
Update README.md 2024-11-23 07:01:37 +01:00
antontranelis
84997e2e94
Update README.md 2024-11-23 07:01:02 +01:00
antontranelis
4a0f0a4271
Update README.md 2024-11-23 06:51:52 +01:00
antontranelis
0db4076748
Update README.md 2024-11-23 06:50:28 +01:00
3856446302 3.0.31 2024-11-22 18:39:33 +01:00
caac412693 Merge branch 'main' of github.com:utopia-os/utopia-ui 2024-11-22 18:38:56 +01:00
antontranelis
d87363faf1
Merge pull request #48 from utopia-os/markdown-hint
fix(other): markdown hint
2024-11-22 18:33:28 +01:00
ae9a15b50c make icon and text inline 2024-11-22 18:22:27 +01:00
ad032f11ee make icon and text inline 2024-11-22 18:20:27 +01:00
5835baa94c markdown hint 2024-11-22 16:56:48 +01:00
6ead89c747 3.0.30 2024-11-22 15:01:20 +01:00
c2fc88408b 3.0.29 2024-11-22 15:00:57 +01:00
e6b09c25b7 3.0.28 2024-11-22 14:57:34 +01:00
dcb0cc97f9 Merge branch 'main' of github.com:utopia-os/utopia-ui 2024-11-22 14:57:24 +01:00
antontranelis
f2520f36db
Merge pull request #47 from utopia-os/profile-fix
fix(other): fix form height
2024-11-22 14:57:16 +01:00
22915c19aa fix form height 2024-11-22 14:55:06 +01:00
98191b56c4 3.0.27 2024-11-22 13:34:18 +01:00
antontranelis
5354daa402
Merge pull request #45 from utopia-os/profile-fix
fix(other): fix some profile issues
2024-11-22 13:33:07 +01:00
1923e180d4 e-mail and phone validation in group-subheader component 2024-11-22 13:27:15 +01:00
594784e77a fix removing custom profile image bug 2024-11-22 13:25:41 +01:00
975331c23d 3.0.26 2024-11-21 11:07:49 +01:00
30b46666d4 adjust version 2024-11-21 10:21:33 +01:00
b6adca6a1a removed unused iport 2024-11-21 10:21:03 +01:00
3709c43a4b 3.0.21 2024-11-21 10:20:14 +01:00
fe33d56131 profile fix part 1 2024-11-21 10:20:03 +01:00
antontranelis
0b2d990c34
Merge pull request #6 from utopia-os/fix-wrongful-includes
fix(other): wrongful relative includes in tsconfig.json
2024-11-21 09:21:36 +01:00
antontranelis
43e798f44e
Merge pull request #40 from utopia-os/fix-vulnerability
fix(other): fix vulnerability
2024-11-21 09:08:38 +01:00
545308e6a1
fix wrongful relative includes in tsconfig.json
For some reason specific Components were included in the tsconfig.json
with a relative path. This should have caused problems for anyone who
has not checked out `utopia-ui` in the coresponding location.
This was discovered due to the fact that we cannot include components
directly anymore since the include paths have project specific path
aliases
2024-11-20 12:49:35 +01:00
268123c20a 3.0.20 2024-11-20 05:10:19 +01:00
912119aaf9 fix vulnerability 2024-11-20 05:10:11 +01:00
antontranelis
fd39c0cb9c
Merge pull request #35 from utopia-os/lint-security
feat(other): lint security
2024-11-18 09:30:41 +01:00
antontranelis
f4e71050a5
Merge branch 'main' into lint-security 2024-11-18 09:28:52 +01:00
antontranelis
66f1c328e7
Merge pull request #36 from utopia-os/lint-catchall
feat(other): lint catchall
2024-11-18 09:24:24 +01:00
antontranelis
4031cd25ca
Merge pull request #33 from utopia-os/lint-promise
feat(other): lint promise
2024-11-18 09:12:20 +01:00
antontranelis
67ef62645f
Update README.md 2024-11-18 07:01:31 +01:00
antontranelis
61edadd984
Update README.md 2024-11-18 06:52:45 +01:00
antontranelis
b5fc86f3f8
Merge pull request #38 from utopia-os/antontranelis-patch-1
fix(other): update README.md
2024-11-18 06:30:01 +01:00
antontranelis
0d10422fd2
Update README.md 2024-11-18 06:28:58 +01:00
antontranelis
b16f57324a
Update README.md 2024-11-15 11:19:56 +01:00
6e60d47e86
fix all lint errors 2024-11-12 09:29:02 +01:00
8556c07378
install lint no-catch-all rule 2024-11-12 09:29:01 +01:00
e84061178f
remove node environment requirement 2024-11-12 09:26:57 +01:00
antontranelis
b3f3e93aa6
Merge pull request #37 from utopia-os/lint-console
feat(other): lint console
2024-11-12 06:44:00 +01:00
5a7bdfe7f7
lint fixes 2024-11-11 17:02:21 +01:00
5dd4c67637
lint no console log 2024-11-11 17:02:10 +01:00
34435e8272
lint-security fixes 2024-11-11 16:45:01 +01:00
16193033b0
install lint security 2024-11-11 16:44:43 +01:00
782b0fc700
fix errors 2024-11-11 15:45:25 +01:00
97c3ef867e
promise linting 2024-11-11 15:45:25 +01:00
antontranelis
693f2c6d38
Merge pull request #34 from utopia-os/mail-regex-fix
fix(other): updated regex for mail detection
2024-11-11 14:43:43 +01:00
1ed2211efa updated regex for mail detection 2024-11-11 14:41:18 +01:00
antontranelis
b6bd8cf2fe
Merge pull request #32 from utopia-os/lint-nochange
feat(other): lint nochange
2024-11-11 14:22:04 +01:00
34d83eee2e
test build and lint always 2024-11-09 00:41:12 +01:00
a1041ab40a
enable lint rules which require no further change 2024-11-09 00:41:12 +01:00
antontranelis
47dd9d1767
Merge pull request #31 from utopia-os/lint-import
feat(other): lint import
2024-11-08 22:19:43 +01:00
cfa099eda7 Merge branch 'main' of github.com:utopia-os/utopia-flex-map 2024-11-08 22:09:43 +01:00
f8c494548e updated to utopia-ui@3.0.19 2024-11-08 22:08:27 +01:00
94d5f2ef52
build fix 2024-11-08 19:42:56 +01:00
7f6b08a13f
missing fix 2024-11-08 19:37:14 +01:00
fefc015b70
lint fixes 2024-11-08 19:36:35 +01:00
f339315067
missing plugins 2024-11-08 16:57:43 +01:00
286488c18c
install import eslint 2024-11-08 16:55:12 +01:00
antontranelis
17a70d687a
Merge pull request #28 from utopia-os/lint-typescript
fix(other): lint typescript
2024-11-08 10:35:42 +01:00
cc4971e2d0 updated 2024-11-08 10:34:06 +01:00
8af866acf4 merged main 2024-11-08 10:27:10 +01:00
7e273b7097 Merge branch 'main' of github.com:utopia-os/utopia-ui 2024-11-08 09:26:39 +01:00
fd19b34888 merged 2024-11-08 09:26:24 +01:00
antontranelis
e8a44b8ee1
Merge pull request #30 from utopia-os/flex-profile
fix(other): advanced Social Share Buttons
2024-11-08 09:25:03 +01:00
6e3385ab20 3.0.19 2024-11-08 09:01:55 +01:00
7ddd125289 fix email hint 2024-11-08 09:01:46 +01:00
fbfa0d5d7f 3.0.18 2024-11-08 08:56:50 +01:00
1245d8f3b0 advanced share buttons and copy to clipboard 2024-11-08 08:56:36 +01:00
842d1d4bab
lint fixes 2024-11-07 17:04:14 +01:00
12545f9c84
fix problem 2024-11-07 16:56:27 +01:00
f4c9b98dae
fix 2024-11-07 16:56:26 +01:00
7e29e0c0af
fix 2024-11-07 16:56:26 +01:00
388ae9ef6a
lint fixes 2024-11-07 16:56:26 +01:00
37d1a03948
install typescript eslint 2024-11-07 16:47:37 +01:00
125538db20 3.0.17 2024-11-07 08:16:39 +01:00
2bc5b95151 added protocoll to share url 2024-11-07 08:16:32 +01:00
393ab6ef4c 3.0.16 2024-11-07 08:07:28 +01:00
f8f7f485a4 slug share workaround 2024-11-07 08:07:13 +01:00
ba369e6d80 3.0.15 2024-11-06 20:29:47 +01:00
f9c3902357 3.0.14 2024-11-06 20:29:30 +01:00
e4f1ed4ccd 3.0.13 2024-11-06 20:25:15 +01:00
8e2fc084dc version 2024-11-06 20:25:10 +01:00
7b2254f8f0 3.0.11 2024-11-06 20:24:16 +01:00
660b4231b6 fix share base url 2024-11-06 20:24:01 +01:00
afd43da634 3.0.11 2024-11-06 20:15:21 +01:00
antontranelis
05b095e6fb
Merge pull request #29 from utopia-os/flex-profile
fix(other): flex profile
2024-11-06 20:14:28 +01:00
f296ddd606 implemented flex profiles 2024-11-06 20:11:17 +01:00
b849e48c3e
fix problem 2024-11-05 10:13:21 +01:00
3f701233a1 flex profiles 2024-11-05 09:15:20 +01:00
2933880de2
fix 2024-11-03 00:40:20 +01:00
7a0667388f
fix 2024-11-03 00:39:50 +01:00
5807869721
lint fixes 2024-11-03 00:36:02 +01:00
antontranelis
9b120d6e83
Merge pull request #27 from utopia-os/license
fix(other): fix wrong license in package.json
2024-11-03 00:04:14 +01:00
479b983a9e fixed wrong licence in package.json 2024-11-03 00:01:50 +01:00
0dcbd6bb1c
install typescript eslint 2024-11-02 23:38:18 +01:00
0e45cd487f
Merge pull request #26 from utopia-os/lint-comments
fix(other): lint comments
2024-11-02 23:32:30 +01:00
4cf0670941
missing change 2024-11-02 23:29:47 +01:00
663971cd9c
missing change 2024-11-02 23:27:22 +01:00
6d3f2bf38c
remove new lines 2024-11-02 23:26:14 +01:00
2f77dde3da
remove used eslint disables 2024-11-02 23:18:29 +01:00
4950a1eb60
install eslint comments 2024-11-02 23:18:08 +01:00
2550575660
Merge pull request #25 from utopia-os/lint-prettier
feat(other): lint prettier
2024-11-02 23:14:00 +01:00
2746844f07
fix formating errors with eslint ignore comments 2024-11-02 22:51:59 +01:00
6ae276bedf
autofixes 2024-11-02 22:45:29 +01:00
0d6909bd25
install prettier 2024-11-02 22:43:20 +01:00
3464eadc89
Merge pull request #21 from utopia-os/eslint-standart
fix(other): eslint standard
2024-11-02 22:31:25 +01:00
107f7da939 fixed linting 2024-11-02 22:28:47 +01:00
997c31c8f5 restore setTemplate 2024-11-02 21:55:03 +01:00
3dc533676e fixed linting 2024-11-02 21:21:24 +01:00
antontranelis
df29558fc0
Merge pull request #3 from utopia-os/fix-node23
fix(other): node23 import
2024-11-01 20:56:45 +01:00
400f65ad91 Merge branch 'fix-node23' of github.com:utopia-os/utopia-flex-map 2024-11-01 20:55:29 +01:00
antontranelis
678adb898b
Create FUNDING.yaml 2024-11-01 20:54:16 +01:00
antontranelis
5a8e764aa9
Merge pull request #2 from utopia-os/gitignore
fix(other): missing .gitignore
2024-11-01 20:44:55 +01:00
antontranelis
a97fa09fcc
Update .gitignore 2024-11-01 20:44:06 +01:00
3acefa1f8f Merge branch 'main' of github.com:utopia-os/utopia-flex-map 2024-11-01 20:39:29 +01:00
d95982d5a7 update utopia-ui 2024-11-01 20:39:15 +01:00
07c6a76e0c api fix for directus SDK18 2024-11-01 20:38:55 +01:00
2bded766c9 inklude market view 2024-11-01 20:37:53 +01:00
65e04fcc12 just formatting 2024-11-01 20:37:25 +01:00
antontranelis
7f686aa7ae
Merge pull request #4 from utopia-os/issue-templates
feat(github): issue templates
2024-11-01 20:21:43 +01:00
7d3d8c006d
lint fix 2024-11-01 14:59:04 +01:00
268368b8b6
Merge branch 'main' into eslint-standart 2024-11-01 14:58:04 +01:00
antontranelis
39de17fa0f
Merge pull request #24 from utopia-os/fix-the-fix
fix(other): final permission fix
2024-11-01 08:22:34 +01:00
599ab6ebc0 3.0.10 2024-11-01 08:20:55 +01:00
9757304a3b remoeved logging 2024-11-01 08:20:45 +01:00
046ae052f3 3.0.9 2024-10-31 15:05:22 +01:00
5339d3fa18 fix logging issue 2024-10-31 15:05:08 +01:00
e2d6e515d9 3.0.8 2024-10-31 14:56:51 +01:00
31845b4841 fix logging issue 2024-10-31 14:56:07 +01:00
39e9b88edc 3.0.7 2024-10-31 14:45:47 +01:00
3128181476 fix-the-permission-fix 2024-10-31 14:45:09 +01:00
8e59f27a2a
issue templates 2024-10-31 13:02:53 +01:00
2c6564ecf7
fixes after merge 2024-10-31 12:45:13 +01:00
ba0c501d4c
Merge branch 'main' into eslint-standart 2024-10-31 12:32:12 +01:00
d4729826ce Merge branch 'main' of github.com:utopia-os/utopia-ui 2024-10-31 12:28:10 +01:00
215c7db3d7 3.0.6 2024-10-31 12:08:03 +01:00
antontranelis
105df78b03
Merge pull request #23 from utopia-os/permission-issue-hotfix2
fix(other): permission fix
2024-10-31 12:07:03 +01:00
0cef378cd6 fix some issues with th previous fix 2024-10-31 12:04:57 +01:00
antontranelis
55a34df9ca
Merge pull request #22 from utopia-os/fix-linting
fix(other): mix
2024-10-31 07:57:08 +01:00
97add15469 removed unused var 2024-10-30 08:03:19 +01:00
1c2fa07285 3.0.5 2024-10-30 07:43:23 +01:00
9dcd2b858f hotfix to fix permission issue 2024-10-30 07:43:16 +01:00
7f12122872 3.0.4 2024-10-29 23:47:13 +01:00
c37bc2cb57 hotfix to fix permission issue 2024-10-29 23:46:36 +01:00
36aeda5919
lint fixes 2024-10-29 18:24:11 +01:00
9546b2e9f4
autofixes 2024-10-29 17:42:04 +01:00
99eff50474
eslint standart plugin 2024-10-29 17:41:46 +01:00
d69f0ff199
fix node23 import 2024-10-29 17:36:36 +01:00
1e9cc0d916
missing gitignore 2024-10-29 17:34:43 +01:00
a4d3285829 3.0.3 2024-10-29 16:20:00 +01:00
03e7a9ca8c updated permission types 2024-10-29 16:19:52 +01:00
6b492db463 Merge branch 'main' of github.com:utopia-os/utopia-ui 2024-10-29 15:14:23 +01:00
0ac2718c45
Merge pull request #19 from utopia-os/eslint-ignore
fix(other): lint ignore
2024-10-29 12:38:57 +01:00
94417580eb
lint ignore 2024-10-29 12:38:12 +01:00
592b8475fa
Merge pull request #18 from utopia-os/workflow-build
feat(workflow): new build workflow
2024-10-29 12:32:58 +01:00
645e3d04bb
new build workflow 2024-10-29 12:30:32 +01:00
87ec6aa8db
Merge pull request #16 from utopia-os/lint
fix(other): lint (green)
2024-10-29 12:16:12 +01:00
caa0faf194
import fix 2024-10-29 11:58:27 +01:00
7e02a76102
import fix 2024-10-29 11:58:04 +01:00
f2a96b9482 Merge branch 'main' of github.com:utopia-os/utopia-ui 2024-10-29 11:56:14 +01:00
ddbf262912 fixed staff-snake 2024-10-29 11:55:40 +01:00
ec7278f82e
more fixes 2024-10-29 11:55:18 +01:00
d832185ee3
lint fixes 2024-10-29 11:55:07 +01:00
95f108c2f7
fix more lint errors 2024-10-29 10:46:14 +01:00
d115a1331b
fixable errors 2024-10-29 10:43:22 +01:00
d2fb6c72ec
Merge pull request #13 from utopia-os/workflow-lint
ci(workflow): implement test.lint workflow
2024-10-29 10:40:00 +01:00
625c85cd45
fix workflow 2024-10-29 10:36:17 +01:00
4d9bb8bf83
implement test.lint workflow 2024-10-29 10:29:25 +01:00
antontranelis
5c9373eabd
Update GLOSSAR.md 2024-10-27 07:13:23 +01:00
antontranelis
168cd28af7
Update GLOSSAR.md 2024-10-26 08:40:28 +02:00
antontranelis
0533834ecc
Update GLOSSAR.md 2024-10-26 08:36:14 +02:00
antontranelis
080e49d6fa
Update GLOSSAR.md 2024-10-26 08:34:11 +02:00
antontranelis
af025da571
Create GLOSSAR.md 2024-10-26 08:31:31 +02:00
78503d498e 3.0.2 2024-10-23 11:36:05 +02:00
7265c2247d Merge branch 'main' of github.com:utopia-os/utopia-ui 2024-10-23 11:29:42 +02:00
2a55a1a2c0 staff-snake icon 2024-10-23 11:29:27 +02:00
antontranelis
ecbb092f00
Update README.md 2024-10-22 11:01:40 +02:00
antontranelis
19ffefd9a5
Update README.md 2024-10-22 10:59:16 +02:00
antontranelis
3d0b788619
Update README.md
added Tutorial
2024-10-22 10:58:10 +02:00
94b7d16029 .github/ 2024-10-22 09:53:43 +02:00
65cce5cb34 3.0.1 2024-10-17 11:02:16 +02:00
3baae9651e basic Market View 2024-10-17 11:01:53 +02:00
7f02a56052 add underline to links 2024-10-17 11:01:14 +02:00
bd5142edc0 welcome notification 2024-10-17 11:00:39 +02:00
986f3fbff5 basic Market View 2024-10-17 10:59:30 +02:00
8353ef4145 fixed toasts 2024-10-17 09:42:53 +02:00
7cb5f61447 removed unused import 2024-10-17 09:42:19 +02:00
abc91712e0 changed some wording 2024-10-14 16:14:48 +02:00
bc922adfa6 OpenCollective Widgets 2024-10-14 16:05:53 +02:00
b6df7a89f3 OpenCollective Widgets 2024-10-14 16:05:32 +02:00
1088599381 OpenCollective Widgets 2024-10-14 16:04:43 +02:00
ece8736505 added FUNDING.yaml 2024-10-14 16:02:39 +02:00
fc5be43768 merged 2024-10-14 15:58:27 +02:00
5c68069940 README 2024-10-13 23:12:28 +02:00
5321c56669 fixed imports 2024-10-13 23:03:22 +02:00
3888aa06ea layout improvements 2024-10-13 23:03:08 +02:00
32b39a94f1 support for rumble embedded links 2024-10-13 23:02:43 +02:00
3c70e060c7 removed logging 2024-10-13 23:01:57 +02:00
580826b36f something I dont know 2024-10-13 22:45:41 +02:00
4d6689ca2d 3.0.0 2024-10-13 16:37:35 +02:00
226e19e626 small cleanup 2024-10-13 16:28:21 +02:00
a29bc164ae fix for static layers 2024-10-13 16:28:10 +02:00
30d96bfd91 dynamic router and context loading only if needed 2024-10-13 16:27:32 +02:00
da7c3b3734 3.0.0-alpha.264 2024-10-13 01:59:26 +02:00
5cb8885131 config for gratuitude control 2024-10-13 01:59:17 +02:00
a1da109c00 3.0.0-alpha.263 2024-10-13 01:04:19 +02:00
daa0a3a8e8 fixed useItems for static data 2024-10-13 01:04:12 +02:00
c552b067f6 fixed vulnerabilities 2024-10-13 01:03:42 +02:00
7d943126ab enhanced TabView 2024-10-13 01:01:23 +02:00
b2111b675e add browser router to standalone map 2024-10-13 01:01:02 +02:00
85bbf0e911 fix search control css 2024-10-13 01:00:06 +02:00
f23ea88e31 merged 2024-10-08 08:32:10 +02:00
4de7b76ca8 removed unused imports 2024-10-08 08:27:49 +02:00
8228d4b912 3.0.0-alpha.261 2024-09-03 15:40:52 +02:00
4b3eb20d9e 3.0.0-alpha.262 2024-08-03 17:50:39 +02:00
c3867b8835 fix error handling: not inifinite loading wehn error occurs while updating profile 2024-08-03 17:50:27 +02:00
ce3959d248 3.0.0-alpha.261 2024-07-31 22:00:28 +02:00
7b3f570fff merged 2024-07-31 22:00:04 +02:00
b4b80312a1 added padding to search field 2024-07-31 21:58:34 +02:00
0d6899cef5 fixed remove filter tag issue 2024-07-31 21:58:23 +02:00
3032125147 updated utopia-ui 2024-07-31 21:56:26 +02:00
db85f95745 3.0.0-alpha.260 2024-07-31 21:54:07 +02:00
b98cc90983 added padding to search field 2024-07-31 21:53:47 +02:00
280ab01515 3.0.0-alpha.259 2024-07-31 21:51:34 +02:00
6e0775e1a2 fixed remove filter tag issue 2024-07-31 21:51:30 +02:00
3372b30c57 3.0.0-alpha.258 2024-07-31 21:35:16 +02:00
5a84c4f180 merged 2024-07-31 21:34:27 +02:00
ae4c185157 updated to utopia-ui@alpha.257 2024-07-31 21:32:17 +02:00
65fdd86348 3.0.0-alpha.257 2024-07-31 21:30:27 +02:00
0a3f752ab1 just open profile when item exist and loaded 2024-07-31 21:29:52 +02:00
216dbc1b79 3.0.0-alpha.256 2024-07-31 21:09:14 +02:00
52eb8e29db try some new aproach to handel mobile image upload issue 2024-07-31 21:09:06 +02:00
930a4d6ceb fix marker icon in search control 2024-07-31 21:08:32 +02:00
93ba730c94 prevent setting item parent to itself 2024-07-31 19:13:27 +02:00
ca86bad272 cleanup 2024-07-31 19:12:59 +02:00
21471e7698 3.0.0-alpha.255 2024-07-31 18:33:29 +02:00
23931a66cd fix bug preventing save empty fields 2024-07-31 18:33:25 +02:00
12401766ae animate select position 2024-07-31 18:32:59 +02:00
a57c51d676 animate select position 2024-07-31 18:32:24 +02:00
c075d474c4 version number 2024-07-31 17:26:57 +02:00
a8eabacb3a 3.0.0-alpha.252 2024-07-31 17:26:12 +02:00
7a56c6acb4 3.0.0-alpha.251 2024-07-31 17:26:08 +02:00
3b24541490 enabeld attestations 2024-07-31 17:01:18 +02:00
2b4a2ae08f fix URL issue 2024-07-31 17:00:15 +02:00
ef74d60bfb removed ununsed hook 2024-07-31 16:59:44 +02:00
13f016ea16 3.0.0-alpha.253 2024-07-31 14:34:00 +02:00
f4b22f9361 optimizing attestations 2024-07-31 14:33:40 +02:00
729a01c922 fix URL issue 2024-07-31 14:33:18 +02:00
1feb2dd1d5 3.0.0-alpha.252 2024-07-31 09:26:06 +02:00
46a0361b92 version number 2024-07-31 09:26:04 +02:00
224b220b8b 3.0.0-alpha.250 2024-07-31 09:25:24 +02:00
bc8b73451c first working attestation prototype 2024-07-31 09:25:14 +02:00
4f92c5b4b4 Merge branch 'main' of github.com:utopia-os/utopia-ui into questlog 2024-07-31 09:24:36 +02:00
7f8b1f065b 3.0.0-alpha.250 2024-07-30 21:26:38 +02:00
e229b272ca changed tag url seperator to semikolon to avoid conflicts with tags that contain commas 2024-07-30 21:26:29 +02:00
e3a1b4dc54 3.0.0-alpha.249 2024-07-30 19:29:07 +02:00
ed338c7bdd fix disabled tag input on desktop 2024-07-30 19:29:04 +02:00
87f392e6e1 prepared attestation api 2024-07-30 18:15:13 +02:00
a5ccf7c6f1 removed unused imports 2024-07-30 18:14:59 +02:00
e0eb300304 merged 2024-07-30 16:54:23 +02:00
5f1f9ece1f 3.0.0-alpha.248 2024-07-30 15:37:32 +02:00
451af88aee 3.0.0-alpha.247 2024-07-30 15:37:19 +02:00
f4e3c464d0 3.0.0-alpha.246 2024-07-30 15:36:36 +02:00
a012dcb955 tag input issue 2024-07-30 15:36:33 +02:00
989ead0350 3.0.0-alpha.245 2024-07-30 15:14:28 +02:00
18be3153ec tag input issue 2024-07-30 15:14:24 +02:00
360b92496b 3.0.0-alpha.244 2024-07-30 15:11:22 +02:00
c05c15ef11 tag input issue 2024-07-30 15:11:14 +02:00
a5abb69d17 3.0.0-alpha.243 2024-07-30 15:00:26 +02:00
9ba935a21a fix slow tab switch 2024-07-30 15:00:19 +02:00
8bbdda2873 3.0.0-alpha.242 2024-07-30 14:28:56 +02:00
eb3a35482a is this faster? 2024-07-30 14:28:48 +02:00
94143afa16 3.0.0-alpha.241 2024-07-30 14:21:51 +02:00
3079dc3142 performance check 2024-07-30 14:21:45 +02:00
ed9e89df7f 3.0.0-alpha.240 2024-07-30 14:19:12 +02:00
549beacf53 layout fix 2024-07-30 14:18:50 +02:00
ef58783c06 3.0.0-alpha.239 2024-07-30 13:59:35 +02:00
6ff9e4576a small layout fix in tabs form 2024-07-30 13:59:32 +02:00
e7101c3439 3.0.0-alpha.238 2024-07-30 13:38:10 +02:00
82d6ca4097 small layout fix in tabs form 2024-07-30 13:38:07 +02:00
1241bff95b 3.0.0-alpha.237 2024-07-30 13:32:41 +02:00
b42e310d69 added contact, start and end to tabs form 2024-07-30 13:32:05 +02:00
54edc33a78 make formpopups messages customizable 2024-07-30 08:11:48 +02:00
c9633e5dce 3.0.0-alpha.236 2024-07-29 22:19:52 +02:00
bcbec30414 changed filter logic in index page from AND to OR 2024-07-29 22:19:44 +02:00
c20998b74d 3.0.0-alpha.235 2024-07-29 22:06:23 +02:00
17dc55e1bb fix control width 2024-07-29 22:06:12 +02:00
c5f426e943 3.0.0-alpha.234 2024-07-29 21:53:12 +02:00
8213356fc6 3.0.0-alpha.233 2024-07-29 21:52:05 +02:00
23578502e3 give layer and filter control some more padding 2024-07-29 21:52:02 +02:00
359a9c57d2 3.0.0-alpha.232 2024-07-29 21:49:17 +02:00
721c4faac7 3.0.0-alpha.231 2024-07-29 21:49:00 +02:00
65de01caf9 give layer and filter control some more padding 2024-07-29 21:48:56 +02:00
d2befc1fe0 3.0.0-alpha.230 2024-07-29 21:47:21 +02:00
7d2cc19eec give layer and filter control some more padding 2024-07-29 21:46:36 +02:00
d216dac810 3.0.0-alpha.229 2024-07-29 21:36:05 +02:00
6503ce7efc fix subname can be set to empty string 2024-07-29 21:35:58 +02:00
bb28bd3cf8 3.0.0-alpha.228 2024-07-29 20:59:06 +02:00
d7a757c75d fix simple form issze 2024-07-29 20:58:57 +02:00
627fab28ac 3.0.0-alpha.227 2024-07-29 20:39:50 +02:00
1d53ba3f9c close new item form when switching layers 2024-07-29 20:39:25 +02:00
53598fc066 comment 2024-07-29 20:38:54 +02:00
6ddda318bd fix simple form 2024-07-29 20:38:35 +02:00
6e4b883742 3.0.0-alpha.226 2024-07-29 19:07:45 +02:00
4c215ef803 3.0.0-alpha.225 2024-07-29 19:07:31 +02:00
7f90702961 3.0.0-alpha.224 2024-07-29 19:06:30 +02:00
b3d89827a2 3.0.0-alpha.223 2024-07-29 19:06:16 +02:00
e9c0a6f1e7 center small item heading 2024-07-29 19:06:13 +02:00
ca018fde46 3.0.0-alpha.222 2024-07-29 19:04:03 +02:00
0ebe5fb01b adjust small item heading 2024-07-29 19:03:52 +02:00
9e5d6653fb 3.0.0-alpha.221 2024-07-29 18:51:33 +02:00
3514aea29f sidebar to 180px 2024-07-29 18:51:07 +02:00
75f923aee2 3.0.0-alpha.220 2024-07-29 13:04:23 +02:00
05ce1ec5ff removed unused impoert 2024-07-29 13:04:14 +02:00
0fdd39b391 fixed tag keyboard select heighlighting 2024-07-29 13:04:02 +02:00
79f0e5fdd1 3.0.0-alpha.219 2024-07-29 12:45:43 +02:00
5bd69781d1 Merge branch 'main' of github.com:utopia-os/utopia-ui into add-tag-bug 2024-07-29 12:44:03 +02:00
7e426348df fixed request handling to fix add tag issue 2024-07-29 12:43:03 +02:00
5781c8c8d4 remove logging 2024-07-29 12:42:37 +02:00
4afc19aa45 3.0.0-alpha.218 2024-07-29 10:27:35 +02:00
dc3434e22c set #tag filter to logic from AND to OR 2024-07-29 10:27:29 +02:00
361e6831a0 set sidbar width to 168px 2024-07-29 10:26:16 +02:00
362c7401d2 3.0.0-alpha.217 2024-07-29 09:00:17 +02:00
d55864e083 logging and awaits added 2024-07-29 08:59:23 +02:00
2156a9811b advaneced permission logic 2024-07-29 08:58:14 +02:00
431f8df132 added puzzle icon 2024-07-29 08:57:26 +02:00
48fb08360a attestation form added 2024-07-26 13:06:20 +02:00
c3b074f22c attestation form and profile experiments 2024-07-26 13:05:44 +02:00
a98fce32d7 merged 2024-07-25 00:37:29 +02:00
5e38215038 merged 2024-07-25 00:24:00 +02:00
0509bfbfb2 updated to utopia-ui@alpha.218 2024-07-25 00:14:51 +02:00
005adc42ad 3.0.0-alpha.216 2024-07-24 15:16:50 +02:00
8dc8779fe5 fix permission logic 2024-07-24 15:16:40 +02:00
02ffdcae22 3.0.0-alpha.215 2024-07-24 13:50:31 +02:00
10be28ce4c permission fix 2024-07-24 13:50:29 +02:00
0cf013a500 3.0.0-alpha.214 2024-07-24 12:49:35 +02:00
809aeea3a6 3.0.0-alpha.213 2024-07-24 12:49:20 +02:00
5f4a4820c8 3.0.0-alpha.212 2024-07-24 12:27:54 +02:00
ffd9374390 3.0.0-alpha.204 2024-07-24 12:27:27 +02:00
d318152dce design fix in tab forms relations tab 2024-07-23 23:21:20 +02:00
87076e5e97 fix tab navigation issue 2024-07-23 22:48:57 +02:00
fadd06c60f removed logging 2024-07-23 22:44:05 +02:00
e7482adaf9 fix TagWidget issue 2024-07-23 22:12:54 +02:00
13a640b868 fix cicular import 2024-07-23 18:44:06 +02:00
86b442aabf cleanup profile form 2024-07-23 18:29:10 +02:00
fd989e9b16 outsourced profile item functions in new file 2024-07-23 13:46:37 +02:00
3e8ac0758f code cleanup 2024-07-23 12:32:22 +02:00
3f88f3a801 /src/Components/Profile cleanup 2024-07-23 11:49:36 +02:00
546fde0bf6 basic sitemap 2024-07-23 10:36:15 +02:00
57b69b36ee fixed color for dark theme 2024-07-23 10:35:46 +02:00
d93ea6e5c1 renamend profile to profile_owner 2024-07-23 10:35:16 +02:00
9f3e8758ad contribution guide 2024-07-23 09:39:34 +02:00
c9d5653216 3.0.0-alpha.211 2024-07-21 23:03:08 +02:00
49d4012e69 fixed wc image 2024-07-21 23:03:00 +02:00
bcff84a203 3.0.0-alpha.210 2024-07-21 22:52:58 +02:00
ab1e164f81 optimized wc profiles for darkmode 2024-07-21 22:52:36 +02:00
1f5cd0254a rounded images 2024-07-21 22:51:53 +02:00
08003a3ee6 3.0.0-alpha.209 2024-07-21 17:51:53 +02:00
7dcab614f2 wc profile fix 2024-07-21 17:51:43 +02:00
13a2d3c681 3.0.0-alpha.208 2024-07-21 13:52:46 +02:00
25f3ece3c5 optimized wc profiles 2024-07-21 13:52:42 +02:00
424a0f6b17 change color of filter indicator 2024-07-21 13:52:28 +02:00
c4ae29411f filter indicator 2024-07-21 12:23:50 +02:00
ed3446dc13 fix not showing items with grouptypes on maps not filtered 2024-07-21 12:02:40 +02:00
b640e2bc97 3.0.0-alpha.207 2024-07-20 15:23:42 +02:00
b707b8204b optimized wc profiles 2024-07-20 15:23:29 +02:00
570e247d43 3.0.0-alpha.206 2024-07-20 14:27:06 +02:00
bb63a2705b fixed profile height 2024-07-20 14:26:56 +02:00
1dd9ce8a28 3.0.0-alpha.205 2024-07-20 14:10:22 +02:00
0563135ae4 small layout optimization for onepager 2024-07-20 14:10:11 +02:00
1e2917525a 3.0.0-alpha.204 2024-07-20 12:55:09 +02:00
ae1810e47e set wuerdecompüass social share url 2024-07-20 12:54:42 +02:00
e39a9560a2 included user-select 2024-07-20 12:53:58 +02:00
eed958f8bc added url params to links 2024-07-20 12:29:30 +02:00
16c93809b6 player profile and user select 2024-07-20 12:28:51 +02:00
b3df36cf36 utopia-ui@3.0.0-alpha.203 2024-07-16 16:20:39 +02:00
6c9311de52 3.0.0-alpha.203 2024-07-16 16:20:10 +02:00
48453bbd28 fix item image when not square 2024-07-16 16:19:34 +02:00
6229dfcecc utopia-ui@3.0.0-alpha.202 2024-07-16 16:07:06 +02:00
387453f2f5 3.0.0-alpha.202 2024-07-16 16:06:43 +02:00
76489ffd52 3.0.0-alpha.201 2024-07-16 16:06:27 +02:00
0747deeecf keep embedded mode when opening wc user profile 2024-07-16 16:06:18 +02:00
eab26fdf9d utopia-ui@3.0.0-alpha.200 2024-07-16 16:02:45 +02:00
8c17b8694d 3.0.0-alpha.200 2024-07-16 16:01:55 +02:00
a28c913f68 3.0.0-alpha.199 2024-07-16 16:01:42 +02:00
814b037879 utopia-ui@3.0.0-alpha.198 2024-07-16 16:00:16 +02:00
fe168d4bc0 3.0.0-alpha.198 2024-07-16 15:58:34 +02:00
6724bf4f0a layout fix 2024-07-16 15:58:21 +02:00
90a7829981 utopia-ui@3.0.0-alpha.197 2024-07-16 15:06:19 +02:00
e745252f10 3.0.0-alpha.197 2024-07-16 15:05:32 +02:00
8e60dd8acf small layout fix in ralations tab 2024-07-16 15:05:20 +02:00
antontranelis
b8e1a56fa8
Merge pull request #1 from utopia-os/wuerdekompass
Wuerdekompass
2024-07-16 14:56:58 +02:00
d3e061198a utopia-ui@3.0.0-alpha.196 2024-07-16 14:52:08 +02:00
7847fbd6b2 3.0.0-alpha.196 2024-07-16 14:51:32 +02:00
fadfb650d2 small layout fix in ralations tab 2024-07-16 14:51:25 +02:00
2e92fe6a5a updated to utopia-ui@3.0.0-alpha.195 2024-07-16 14:19:30 +02:00
24cad1b695 3.0.0-alpha.195 2024-07-16 14:17:32 +02:00
cbeec7a9ec fixed layout / removed logging 2024-07-16 14:17:01 +02:00
020ab51681 removed logging 2024-07-16 14:16:52 +02:00
f310bb7033 fixed color / removed logging 2024-07-16 14:16:41 +02:00
4c6cfa6587 merged 2024-07-16 12:49:24 +02:00
antontranelis
c1d09ddad7
Merge pull request #2 from utopia-os/wuerdekompass-anton
Wuerdekompass Changes
2024-07-16 11:37:11 +02:00
6219fae2c2 removed unneccesary routes 2024-07-16 11:35:05 +02:00
73f2d39c7c undo some unneccesarrx changes in Utopia Map Container 2024-07-16 11:33:17 +02:00
271a968c61 make contact avatar clickable 2024-07-16 11:32:50 +02:00
559d34e58b fixed sidbar bug 2024-07-16 11:32:09 +02:00
12ce786293 Revert "- fixed position of ChevronRightIcon"
This reverts commit fa85b372cab45a52b9b935054a515605a6281a32.
2024-07-16 10:35:38 +02:00
7b52bec0c2 updated utopia-ui 2024-07-15 19:37:57 +02:00
3e0a2abf5f added keys to hidden inputs 2024-07-15 19:37:46 +02:00
95735e8a63 3.0.0-alpha.194 2024-07-15 19:36:40 +02:00
0a7661980e click avatar in nav to see the owen profile view 2024-07-15 19:36:30 +02:00
a5d08d97a5 added margin to name imput in popupform 2024-07-15 17:57:42 +02:00
d486acac3c cutomizable user type 2024-07-15 11:42:15 +02:00
0e862627f9 3.0.0-alpha.193 2024-07-15 11:41:12 +02:00
d74374d291 profile abstraction and customizable user type 2024-07-15 11:40:55 +02:00
273b4ea76e support for item presets 2024-07-12 14:16:53 +02:00
d2ef363192 3.0.0-alpha.192 2024-07-12 14:15:20 +02:00
c1356a01ab added item_presets to layer type 2024-07-12 14:15:16 +02:00
8eb34a9904 3.0.0-alpha.191 2024-07-12 13:07:54 +02:00
a1b069d252 3.0.0-alpha.190 2024-07-12 13:05:26 +02:00
8f7a07b242 3.0.0-alpha.189 2024-07-12 13:04:57 +02:00
a59655fd0a code formatted 2024-07-12 13:04:47 +02:00
7e63f4f8a4 removed unused geocoder 2024-07-12 13:01:41 +02:00
304f6c1c38 fix onepage contact image 2024-07-12 13:00:32 +02:00
d78b8598b4 adjust grouptype color 2024-07-12 12:59:56 +02:00
5fc977a62d 3.0.0-alpha.188 2024-07-11 14:07:36 +02:00
dd29f971d7 utopia ui alpha 187 2024-07-11 13:59:11 +02:00
a96a1d3fd2 version number 2024-07-11 13:58:13 +02:00
ab4d60c950 optimizations for unlisted user items 2024-07-11 13:57:11 +02:00
871e853340 allow unlisted layers 2024-07-11 12:17:28 +02:00
ddcb4469b2 change item color, image and markericon on groupe type change 2024-07-11 11:15:41 +02:00
1d01d5d91f make controls visibility customizable 2024-07-11 11:15:00 +02:00
bec87a23a3 rebuild FilterControl Component 2024-07-11 11:14:13 +02:00
b196e253b1 fixed marker Icon on Location Search 2024-07-11 08:26:20 +02:00
6396df8983 Merge branch 'wuerdekompass-anton' of github.com:utopia-os/utopia-ui into wuerdekompass-anton 2024-07-11 07:59:00 +02:00
Sebastian Stein
033eeb64db - added FilterControl to map 2024-07-10 17:13:46 +02:00
Sebastian Stein
711d809cf6 - remove dummy data from profile 2024-07-10 13:36:52 +02:00
Sebastian Stein
3b7aa5722f Profile & its Settings:
- added ComboBoxInput.tsx
- added new fields: groupType, status, email, phone, next_appointment
- added settings layout

ContactInfo:
- added Telephone
- changed show elements only if required
2024-07-10 13:22:42 +02:00
4d52badfdd 3.0.0-alpha.182 2024-07-03 16:51:51 +02:00
4060fddf1e 3.0.0-alpha.186 2024-07-02 22:37:20 +02:00
7b0fce6411 layer type props 2024-07-02 22:37:09 +02:00
0f97b2d922 3.0.0-alpha.185 2024-07-02 22:35:20 +02:00
59dc444280 3.0.0-alpha.184 2024-07-02 22:35:02 +02:00
47b896aa2e layer type props 2024-07-02 22:34:56 +02:00
eca9574005 3.0.0-alpha.183 2024-07-02 22:32:25 +02:00
b191466f39 fixed js-console errors 2024-07-02 14:11:10 +02:00
02af3b5d82 diffeent icons for diffeent groups 2024-07-02 13:54:16 +02:00
9454da1327 Merge branch 'main' of github.com:utopia-os/utopia-ui into wuerdekompass-anton 2024-07-02 13:53:39 +02:00
9f63c36893 3.0.0-alpha.182 2024-07-02 13:41:56 +02:00
83f9e258ce version number 2024-07-02 13:41:53 +02:00
d81284141e 3.0.0-alpha.179 2024-07-02 13:40:29 +02:00
d113542247 updated refactored markers 2024-07-02 13:40:18 +02:00
5ebd8ffc1d Merge branch 'main' of github.com:utopia-os/utopia-ui into wuerdekompass-anton 2024-07-01 17:18:52 +02:00
f9b8951f01 added group marker icon 2024-07-01 17:17:36 +02:00
2cd782112f 3.0.0-alpha.181 2024-06-28 14:43:15 +02:00
6131b326cd 3.0.0-alpha.180 2024-06-28 14:42:57 +02:00
5993c78577 3.0.0-alpha.179 2024-06-28 14:39:53 +02:00
Sebastian Stein
c27888c3fd - preparation for presentation 2024-06-28 14:37:48 +02:00
4181460ba1 profiles, reverse, geocoder, ... 2024-06-27 16:09:09 +02:00
Sebastian Stein
c5c6374d6d - changed: do not show AddButton in embedded mode or when the user is not logged in 2024-06-25 14:10:58 +02:00
Sebastian Stein
1f159ac836 - changed: do not show QuestControl in embedded mode 2024-06-25 13:52:40 +02:00
Sebastian Stein
fa85b372ca - fixed position of ChevronRightIcon 2024-06-25 13:45:33 +02:00
Sebastian Stein
3acb1c1937 - transformed list into a masonry layout 2024-06-25 10:55:15 +02:00
Sebastian Stein
935f0aeed9 - removed GitHub Link in Sidebar for embedded mode 2024-06-25 10:22:19 +02:00
Sebastian Stein
aff509f1dd - added new profile layout (not dynamic data linked yet)
- added new components around the profile
2024-06-25 09:46:26 +02:00
a7786d8b01 updated utopia-ui 2024-06-18 11:26:34 +02:00
aa607da13b 3.0.0-alpha.178 2024-06-18 11:25:38 +02:00
50f5a6855f onepage layout frame 2024-06-18 11:16:06 +02:00
464f9f5193 3.0.0-alpha.177 2024-06-17 12:59:34 +02:00
8bd1dc5144 layout fix 2024-06-17 12:59:05 +02:00
96a564016e 3.0.0-alpha.176 2024-06-16 22:29:19 +02:00
6788310368 mobile fix 2024-06-16 22:28:32 +02:00
2e22b023a0 3.0.0-alpha.175 2024-06-16 12:50:49 +02:00
66defb2a04 small mobile optimization 2024-06-16 12:50:40 +02:00
dbaf74442f 3.0.0-alpha.174 2024-06-16 11:45:43 +02:00
22ab0e3acc optimized search, filter and items index pages 2024-06-16 11:45:18 +02:00
f1c272126c 3.0.0-alpha.173 2024-06-10 13:32:46 +02:00
82d8d18c93 fixed sidenav margin in embedded mode 2024-06-10 13:32:40 +02:00
566d93be4a 3.0.0-alpha.172 2024-06-10 11:53:57 +02:00
cfbf536d59 fixed embedded param forwarding 2024-06-10 11:53:53 +02:00
88cf7a0cd0 3.0.0-alpha.171 2024-06-10 11:46:03 +02:00
9829456ed8 fixed sidenav margin in embedded mode 2024-06-10 11:45:54 +02:00
0f5534acef 3.0.0-alpha.170 2024-06-10 11:39:39 +02:00
1877218e71 show menu in embedded mode 2024-06-10 11:39:36 +02:00
a7a78e0707 removed unused files from public 2024-06-05 23:35:23 +02:00
cb3057293d utopia-ui@3.0.0-alpha.169 2024-06-05 23:35:00 +02:00
924213b386 fixed map height in embedded mode 2024-06-05 23:34:17 +02:00
cef597436e 3.0.0-alpha.169 2024-06-05 22:53:40 +02:00
ed8dea5b32 fixed embedded mode 2024-06-05 22:53:36 +02:00
3cc9790f77 3.0.0-alpha.168 2024-06-05 22:43:17 +02:00
16e09ac827 embedded mode more responsive 2024-06-05 22:43:12 +02:00
b7f0ddb480 3.0.0-alpha.167 2024-06-05 22:31:32 +02:00
0689ff5a8e embedded mode more responsive 2024-06-05 22:31:15 +02:00
34f6675c8b 3.0.0-alpha.166 2024-06-04 12:08:52 +02:00
d745c1f97f embedded url parameter to hide navbar 2024-06-04 12:08:39 +02:00
5200a73472 removed logging 2024-06-04 12:07:49 +02:00
0275f3dc96 removed logging 2024-06-04 12:06:57 +02:00
77e0082831 3.0.0-alpha.165 2024-06-02 11:12:12 +02:00
57c171ee21 css fix 2024-06-02 11:11:56 +02:00
6d457b9184 updated utopia ui to alpha164 2024-06-02 11:03:02 +02:00
0ffb6d74f3 3.0.0-alpha.164 2024-06-02 10:05:16 +02:00
9c7bf5e7f7 added compass marker icon 2024-06-02 10:04:56 +02:00
a88d5f8282 permission to relate on public items as public user fixed 2024-05-31 14:39:23 +02:00
f2de6e7176 3.0.0-alpha.163 2024-05-31 12:48:26 +02:00
4ae642a59e quest icon 2024-05-31 12:48:20 +02:00
d45cdb58f6 3.0.0-alpha.162 2024-05-18 14:12:57 +02:00
00f9aed612 fixed relating bug 2024-05-18 14:12:51 +02:00
3d06b73bf5 fix public realting items 2024-05-18 13:59:26 +02:00
5b30e19f57 3.0.0-alpha.161 2024-05-12 21:59:19 +02:00
15828ccd21 3.0.0-alpha.160 2024-05-11 08:50:02 +02:00
87c78846bb popup when clicking geojson works again 2024-05-11 08:49:58 +02:00
c03fd9967f utopia-ui@3.0.0-alpha.159 2024-05-09 11:28:24 +02:00
5fd37e67a6 3.0.0-alpha.159 2024-05-09 11:27:50 +02:00
85e1e240a9 color picker fix 2024-05-09 11:27:46 +02:00
cfb3e8df4a utopia-ui@3.0.0-alpha.157 2024-05-09 11:23:00 +02:00
f5c8ec248b 3.0.0-alpha.158 2024-05-09 11:22:13 +02:00
ca72523e63 3.0.0-alpha.157 2024-05-09 11:21:57 +02:00
f2ae48003c color picker fix 2024-05-09 11:21:51 +02:00
de58d23978 3.0.0-alpha.156 2024-05-09 11:18:25 +02:00
c33bc1c607 color picker enhacement 2024-05-09 11:18:18 +02:00
8bfef3c072 allow to place popups ontop of geojson elements 2024-05-09 11:03:49 +02:00
32af7030be utopia-ui@3.0.0-alpha.155 2024-05-08 16:06:51 +02:00
6b8e0562f3 3.0.0-alpha.155 2024-05-08 11:45:41 +02:00
cf33c035f5 offer need issue fixed 2024-05-08 11:45:37 +02:00
ddc5809787 3.0.0-alpha.154 2024-05-08 11:37:23 +02:00
97bf44092a offer need issue fixed 2024-05-08 11:37:17 +02:00
d69a626223 3.0.0-alpha.153 2024-05-08 11:24:39 +02:00
ed959e8076 offer need issue fixed 2024-05-08 11:24:34 +02:00
c99abae51d Item Card Component 2024-05-08 11:24:18 +02:00
0e73bb6efe fixed header image hight in landingpage 2024-05-08 08:11:40 +02:00
3a11da1c3f load geojson from db 2024-05-07 13:57:45 +02:00
402040a285 3.0.0-alpha.152 2024-05-07 12:45:22 +02:00
6d1dda7530 show name of geojson feature 2024-05-07 12:45:07 +02:00
fe776ab01b 3.0.0-alpha.151 2024-05-07 11:36:13 +02:00
201d6f881c support for GeoJSON attached to map 2024-05-07 11:36:03 +02:00
d1638aea31 relations in item-profile-settings 2024-05-07 08:36:17 +02:00
44f46d60a4 removed unused imports 2024-05-06 10:24:03 +02:00
a3677a2d2d 3.0.0-alpha.150 2024-05-06 10:09:11 +02:00
99a6fdfc0f extend error toast auto close time to 10s on login and signup 2024-05-06 10:08:23 +02:00
8b1b6d3087 show profile name instead of user name in navbar 2024-05-06 09:57:15 +02:00
3be44a6872 open map popup, when item popup opens 2024-05-06 09:50:39 +02:00
4575be4522 utopia-ui@3.0.0-alpha.149 2024-05-05 19:41:29 +02:00
02436b1139 3.0.0-alpha.149 2024-05-04 09:21:00 +02:00
1c00e6abf1 improved permission detection in items index 2024-05-04 09:20:44 +02:00
8c075e0823 3.0.0-alpha.148 2024-05-03 12:49:25 +02:00
06755d7f80 basic public item support 2024-05-03 12:49:19 +02:00
1ab589d3b1 3.0.0-alpha.147 2024-05-03 10:37:52 +02:00
1402a7a156 color fix 2024-05-03 10:37:49 +02:00
c9484f4918 3.0.0-alpha.146 2024-05-03 09:55:38 +02:00
9e6826b0ea color fix 2024-05-03 09:55:36 +02:00
89c7a63785 3.0.0-alpha.145 2024-05-03 09:54:23 +02:00
aaf60005d0 3.0.0-alpha.144 2024-05-03 09:54:04 +02:00
77c4d16a72 color fix 2024-05-03 09:54:02 +02:00
aded3c1f45 3.0.0-alpha.143 2024-05-03 09:49:47 +02:00
650ef46c62 color fix 2024-05-03 09:49:41 +02:00
40c8ef2b7a 3.0.0-alpha.142 2024-05-03 09:40:08 +02:00
b08915e97e color and layout fix 2024-05-03 09:40:01 +02:00
a91f8073ab 3.0.0-alpha.141 2024-05-03 07:43:42 +02:00
ca45cc9187 fix add item no offer/needs error 2024-05-03 07:43:33 +02:00
b846c36906 fix add item no offer/needs error 2024-05-03 07:42:18 +02:00
ec4f4d6c3b utopia-ui@3.0.0-alpha.150 2024-05-03 07:05:05 +02:00
7d32e61418 3.0.0-alpha.140 2024-05-03 07:04:01 +02:00
829d07b8ea popup button color 2024-05-03 07:03:46 +02:00
19e011e45d utopia-ui@3.0.0-alpha.139 2024-05-02 22:53:42 +02:00
93d336e70f 3.0.0-alpha.139 2024-05-02 22:53:12 +02:00
8b9328b41c login with enter 2024-05-02 22:53:03 +02:00
d3417d6d59 updated to utopia-ui@3.0.0-alpha.138 2024-05-02 22:18:20 +02:00
b5d59e860d 3.0.0-alpha.138 2024-05-02 18:30:59 +02:00
cbd2d2e194 show date for events in all popups 2024-05-02 18:30:45 +02:00
eff830ca57 3.0.0-alpha.137 2024-05-02 14:40:29 +02:00
090155c612 small fixes 2024-05-02 14:40:19 +02:00
f17ac46a97 3.0.0-alpha.136 2024-05-02 10:57:58 +02:00
72c8d4132c fixed tag view for multiline tags 2024-05-02 10:57:27 +02:00
321bd393f8 fixed some profile setting issues 2024-05-02 10:56:58 +02:00
6e26435b87 3.0.0-alpha.135 2024-05-01 09:59:51 +02:00
3b49c4061f 3.0.0-alpha.134 2024-05-01 09:59:01 +02:00
86fe6e3218 3.0.0-alpha.133 2024-05-01 09:28:46 +02:00
6c87ab5027 index page background color 2024-05-01 09:28:38 +02:00
14fd1f6703 3.0.0-alpha.132 2024-05-01 09:23:11 +02:00
63fb0d3fd0 updated item profiles 2024-05-01 09:22:57 +02:00
e4a56218f5 added GPL Licence 2024-04-30 12:06:18 +02:00
34dac6ec5d 3.0.0-alpha.131 2024-04-29 12:55:41 +02:00
abff99de66 fix layer issue 2024-04-29 12:55:36 +02:00
72f6546e89 3.0.0-alpha.130 2024-04-27 07:47:43 +02:00
b3d706cbf9 changed date presentation 2024-04-27 07:47:40 +02:00
c09cb08bbf 3.0.0-alpha.129 2024-04-27 07:30:03 +02:00
65fe895937 3.0.0-alpha.128 2024-04-27 07:28:20 +02:00
9bc07a330c changed date presentation 2024-04-27 07:26:54 +02:00
2195f08c95 3.0.0-alpha.127 2024-04-27 07:17:04 +02:00
f022709cf8 sort items by date in index page and always show date in item popup 2024-04-27 07:16:47 +02:00
79e1e2e1d3 basic dynamic welcome popup 2024-04-26 11:29:14 +02:00
2d56c5386d changed readme 2024-04-25 19:59:18 +02:00
8d07bd99f9 dynamic map creation 2024-04-25 19:54:23 +02:00
c67cef9576 3.0.0-alpha.126 2024-04-25 18:10:02 +02:00
69131b6618 fixed search bar bug 2024-04-25 18:09:50 +02:00
0a3157fea5 3.0.0-alpha.125 2024-04-24 08:48:58 +02:00
4a681cd503 performance fix 2024-04-24 08:48:52 +02:00
e34fe9e22a 3.0.0-alpha.124 2024-04-23 22:23:02 +02:00
2eade19cd5 make i.user_created optional 2024-04-23 22:22:51 +02:00
7af09ce106 3.0.0-alpha.123 2024-04-23 22:16:57 +02:00
eaeb498834 3.0.0-alpha.122 2024-04-23 22:09:15 +02:00
69e3222c97 small fix 2024-04-23 22:09:12 +02:00
f1b338f36e small fix 2024-04-23 22:08:57 +02:00
cc1a27e6ef 3.0.0-alpha.121 2024-04-23 09:17:08 +02:00
183f549742 marker color fix 2024-04-23 09:16:46 +02:00
459b528711 3.0.0-alpha.120 2024-04-22 22:54:58 +02:00
3ab18d60e1 updated @types/react 2024-04-22 22:54:49 +02:00
d05895bf7f 3.0.0-alpha.119 2024-04-22 22:40:34 +02:00
94c2905e04 vulnerability fixed 2024-04-22 22:40:12 +02:00
8d9bc7bf73 Merge branch 'main' of github.com:utopia-os/utopia-ui 2024-04-22 22:38:53 +02:00
5bbd4714b6 some adjustments for dynamic maps 2024-04-22 22:38:39 +02:00
antontranelis
43ffb5324d
Delete LICENSE.md 2024-04-21 14:00:53 +02:00
antontranelis
72ad1d277d
Change LICENSE to GPL 2024-04-21 13:59:40 +02:00
fce13e8be3 added video 2024-03-30 20:37:42 +01:00
antontranelis
d4e8f86aa1
Update README.md 2024-03-30 20:27:53 +01:00
antontranelis
5ea9b5ee96
Update README.md 2024-03-30 20:27:07 +01:00
dcefee8c4a Merge branch 'main' of github.com:utopia-os/moos-map 2024-03-30 20:15:00 +01:00
c1be9e9178 added utopia game concept 2024-03-30 20:11:35 +01:00
antontranelis
c628662cf4
Update README.md 2024-03-30 18:31:42 +01:00
antontranelis
0855eead5c
Update README.md 2024-03-30 18:28:56 +01:00
antontranelis
540bbb16cc
Update README.md 2024-03-30 18:19:55 +01:00
antontranelis
08f800b31d
Update README.md 2024-03-30 18:00:33 +01:00
310106d8aa updated video preview 2024-03-30 17:56:43 +01:00
96ce362bb3 added video preview 2024-03-30 17:51:40 +01:00
2db8cd4dcf updated to utopia-ui@3.0.0-alpha.118 2024-03-29 15:11:34 +01:00
e78784b337 3.0.0-alpha.118 2024-03-29 15:10:00 +01:00
3e43df82d7 fixed quests 2024-03-29 15:09:56 +01:00
ba07566248 3.0.0-alpha.117 2024-03-28 15:49:14 +01:00
ea31a5672b fixed gaming 2024-03-28 15:48:54 +01:00
5a8129cb0b 3.0.0-alpha.116 2024-03-27 13:42:11 +01:00
659c582836 3.0.0-alpha.115 2024-03-27 13:39:13 +01:00
e9c65491c6 open inks in same tab 2024-03-27 13:37:58 +01:00
daa964daae 3.0.0-alpha.114 2024-03-27 12:22:03 +01:00
849a56eeab show subtitle 2024-03-27 12:21:39 +01:00
8b90b3c8a5 3.0.0-alpha.113 2024-03-27 09:17:09 +01:00
4185258568 reimplemented user profiles 2024-03-27 09:16:55 +01:00
7f711a5133 added OverlayIndexItemPage 2024-03-26 23:58:16 +01:00
8fc993a39c 3.0.0-alpha.112 2024-03-25 18:57:49 +01:00
c627ee3800 subtitles, header optimization and bugfixing 2024-03-25 18:57:26 +01:00
c9191c9284 3.0.0-alpha.111 2024-03-25 01:57:25 +01:00
0d366f7577 fix search issues 2024-03-25 01:57:17 +01:00
8269f79563 3.0.0-alpha.110 2024-03-25 01:07:10 +01:00
8484379113 update item position, item parents, focus item on profile load an open cluster 2024-03-25 01:06:47 +01:00
c77972a3be 3.0.0-alpha.109 2024-03-24 14:08:02 +01:00
cef4ab8fb6 removed update position in header of project explorer 2024-03-24 14:07:54 +01:00
86466b2d41 3.0.0-alpha.108 2024-03-24 13:35:13 +01:00
0aa96a45e6 update item position 2024-03-24 13:34:38 +01:00
228dc71974 updated readme 2024-03-24 09:18:26 +01:00
271f9d7f84 3.0.0-alpha.107 2024-03-23 17:37:30 +01:00
ba828f5b17 small bugfix 2024-03-23 17:37:26 +01:00
b9a2556938 3.0.0-alpha.106 2024-03-23 15:26:30 +01:00
6857a6352c small bugfix 2024-03-23 15:26:27 +01:00
112b600f73 3.0.0-alpha.105 2024-03-23 15:12:39 +01:00
5a6bbdc00f small bugfix 2024-03-23 15:12:31 +01:00
9e7f206aee 3.0.0-alpha.104 2024-03-23 14:59:48 +01:00
93bf7519d6 improved item menu 2024-03-23 14:59:34 +01:00
03a502812b init moos map 2024-03-23 13:16:05 +01:00
970938400f 3.0.0-alpha.103 2024-03-23 11:46:53 +01:00
7005f492dd support for tab urls and several fixes 2024-03-23 11:46:44 +01:00
4cd5b8b0fc 3.0.0-alpha.102 2024-03-22 15:31:24 +01:00
9dcd92e1f8 fix custom button color 2024-03-22 15:31:18 +01:00
87ecefae17 3.0.0-alpha.101 2024-03-22 15:27:04 +01:00
f817e1baf7 link and unlink profiles 2024-03-22 15:26:52 +01:00
62a9208f85 3.0.0-alpha.100 2024-03-22 11:58:35 +01:00
93cbcf7f15 HeaderView and bugfixing 2024-03-22 11:58:27 +01:00
0b717f35fe 3.0.0-alpha.99 2024-03-22 02:05:49 +01:00
056bd27f2f small stuff 2024-03-22 02:05:40 +01:00
66b98b39d7 3.0.0-alpha.98 2024-03-22 00:12:09 +01:00
68ce808558 permissions and item index 2024-03-22 00:11:44 +01:00
ad13ecb682 3.0.0-alpha.97 2024-03-21 15:46:41 +01:00
7e613be019 add button for index page 2024-03-21 15:45:30 +01:00
9f150df3ca 3.0.0-alpha.96 2024-03-21 12:25:21 +01:00
192ac891f3 Merge branch 'main' of github.com:utopia-os/utopia-ui 2024-03-21 12:25:05 +01:00
1e8e68302c a lot of things 2024-03-21 12:24:29 +01:00
d5ffc462cf 3.0.0-alpha.95 2024-03-19 22:56:48 +01:00
57835e1777 css fix 2024-03-19 22:56:17 +01:00
28b12a110b 3.0.0-alpha.94 2024-03-19 21:45:10 +01:00
02bfb65c45 useAuth fix 2024-03-19 21:45:00 +01:00
7a5160291e 3.0.0-alpha.93 2024-03-19 20:43:07 +01:00
1e48f3c0f2 css fix 2024-03-19 20:43:01 +01:00
86e449cccc 3.0.0-alpha.92 2024-03-19 19:46:02 +01:00
5fd1fc4de1 new icons 2024-03-19 19:45:55 +01:00
antontranelis
671acf1a36
Create FUNDING.json 2024-03-16 12:10:21 +01:00
878f4c5d9a 3.0.0-alpha.91 2024-03-14 17:41:28 +01:00
98f5e379d6 3.0.0-alpha.90 2024-03-14 13:15:31 +01:00
466eb75de2 fixed some css 2024-03-14 13:15:25 +01:00
94965a161c landingpage and other things 2024-03-13 10:44:33 +01:00
0b906c3c81 3.0.0-alpha.89 2024-02-29 10:20:17 +01:00
bf94461bec fixed typing 2024-02-29 10:20:01 +01:00
e91f240c74 3.0.0-alpha.88 2024-02-29 10:13:11 +01:00
82ebd493b9 ItemViewPage 2024-02-29 10:12:48 +01:00
52c55e328b 3.0.0-alpha.87 2024-02-29 08:06:03 +01:00
512cd3d96c ItemsIndexPage 2024-02-29 08:05:44 +01:00
4e50c943f0 3.0.0-alpha.86 2024-02-26 13:03:33 +01:00
f9f9bb3283 changes to overla page 2024-02-26 13:03:17 +01:00
2c1eea870d 3.0.0-alpha.85 2024-02-25 14:12:07 +01:00
742ede8bc0 compiler fix 2024-02-25 14:11:57 +01:00
a85036fbf1 3.0.0-alpha.84 2024-02-25 14:00:36 +01:00
39fbff8b02 fixed some typing 2024-02-25 14:00:32 +01:00
8f238330c3 3.0.0-alpha.83 2024-02-25 13:51:09 +01:00
e839fc4658 remove unused variables 2024-02-25 13:51:01 +01:00
d5cd33aecf 3.0.0-alpha.82 2024-02-25 13:47:53 +01:00
59645f2370 padding handling at overlaypage changed 2024-02-25 13:47:48 +01:00
5ab1c0a5f8 some profile layouting 2024-02-24 11:07:21 +01:00
0983c20632 3.0.0-alpha.81 2024-02-22 12:08:56 +01:00
7386982ebc profile fine tuning 2024-02-22 12:08:46 +01:00
3bb6908236 3.0.0-alpha.80 2024-02-22 11:54:22 +01:00
2720aeae04 optimized profile tabs 2024-02-22 11:54:12 +01:00
52ab62d832 3.0.0-alpha.79 2024-02-22 11:11:43 +01:00
c15f7a897d basic calendart ui and tabs in profile 2024-02-22 11:11:08 +01:00
824075af2e export OverlayPage 2024-02-20 17:30:02 +01:00
951ffd24d6 fixed layer control not working properly when clicking on labels 2024-02-20 17:29:45 +01:00
d935cc0bb6 fixed tag handling for items comming with tag property 2024-02-20 17:29:00 +01:00
3b65703ccc 3.0.0-alpha.78 2024-02-19 21:18:22 +01:00
975771b678 fixed offers and needs race condition 2024-02-19 21:18:18 +01:00
121654c9fc Merge branch 'main' of github.com:utopia-os/utopia-game 2024-02-19 11:15:24 +01:00
a1122ab68f updated utopia-ui 2024-02-19 11:15:16 +01:00
1cd413339c updated utopia ui to @3.0.0-alpha.77 2024-02-19 11:14:04 +01:00
d610c20d9d 3.0.0-alpha.77 2024-02-19 11:12:22 +01:00
beaf073e27 tag optimization 2024-02-19 11:11:37 +01:00
bcb51ff814 merged 2024-02-16 14:13:30 +01:00
d6f6a23ed0 cutomizing development environment 2024-02-16 14:05:50 +01:00
3fbaaa36f2 updated utopia-ui 2024-02-16 14:04:42 +01:00
e5da04c98d 3.0.0-alpha.76 2024-02-16 14:03:26 +01:00
7af7649edf fix some rendering issue at offers and needs 2024-02-16 14:03:19 +01:00
a10eccd4ee updated to utopia-ui@3.0.0-alpha.75 2024-02-16 08:10:46 +01:00
3a5430f077 3.0.0-alpha.75 2024-02-15 21:04:31 +01:00
aa4a332d13 fixed tag issue 2024-02-15 21:04:16 +01:00
dde57d4aa9 3.0.0-alpha.74 2024-02-15 20:13:51 +01:00
b3b5bbb9ea enhanced offers & needs 2024-02-15 20:13:36 +01:00
1583e55e7e refactored tags and offers & needs implemented 2024-02-15 17:28:00 +01:00
c6be6abb84 profile offers & needs wisgets 2024-02-11 14:00:21 +01:00
de7ea664d6 removed unused packages 2024-02-11 13:59:55 +01:00
17b94b3b36 removed logging 2024-02-11 13:58:26 +01:00
89ce816958 removed logging 2024-02-11 13:57:13 +01:00
95862f0998 removed unused import 2024-02-11 13:55:33 +01:00
da6f03dbcf 3.0.0-alpha.73 2024-02-08 13:42:29 +01:00
dba1c90245 changed mobile behaviour 2024-02-08 13:42:20 +01:00
7cbdb9ec00 3.0.0-alpha.72 2024-02-08 12:41:17 +01:00
4a5c07ec3d going back to old simple text editor 2024-02-08 12:41:13 +01:00
b4d51784b3 3.0.0-alpha.71 2024-02-08 10:32:51 +01:00
31b131cea0 Tabs and rich Text Editor in Profile Settings 2024-02-08 10:23:59 +01:00
a7b0be3c79 added backdrop to UserSettings 2024-02-08 10:20:44 +01:00
bd193acabf multi-word-tags 2024-02-08 10:19:59 +01:00
e74de18b95 changed backdrop 2024-02-08 10:17:30 +01:00
66ca54b9b9 layout fix 2024-02-08 10:16:08 +01:00
599f89ba5f layout fix 2024-02-08 10:15:09 +01:00
6772df7b80 3.0.0-alpha.70 2024-02-05 10:06:50 +01:00
a0113d0fc5 MapOverlay Pages and Advanced Profiles 2024-02-05 10:06:38 +01:00
2844bbfeff loading thumbnail instead of full image 2024-02-04 14:53:20 +01:00
b43c4f3cfb tags url parameter 2024-02-04 12:01:16 +01:00
8407b92fe8 3.0.0-alpha.69 2024-02-02 19:50:58 +01:00
994ea884a2 fix tag issue 2024-02-02 19:50:53 +01:00
a0dcf4f193 3.0.0-alpha.68 2024-02-02 19:36:30 +01:00
ec69c14fb4 fix tag issue 2024-02-02 19:26:05 +01:00
42b8f5372c 3.0.0-alpha.67 2024-02-02 14:28:57 +01:00
2dead76e1b search results scrollable 2024-02-02 14:28:53 +01:00
fe8c539725 3.0.0-alpha.66 2024-02-02 14:13:03 +01:00
522e2d47d4 search results scrollable 2024-02-02 14:12:55 +01:00
3e1757808c 3.0.0-alpha.65 2024-02-02 13:40:30 +01:00
ca0022536e allow modals to open on startup 2024-02-02 13:40:23 +01:00
7bd0781a69 allow Links to open in new tab 2024-02-02 13:39:58 +01:00
09924d4f47 3.0.0-alpha.64 2024-02-01 13:40:19 +01:00
5de37323d4 changed custom position field 2024-02-01 13:40:11 +01:00
d8832ed8da 3.0.0-alpha.63 2024-02-01 11:57:40 +01:00
a5baa8f39d implemented new tag schema 2024-02-01 11:57:11 +01:00
3c0481cbfc adjust itemsApi 2024-02-01 11:06:58 +01:00
efaa9aac69 updated itemsApi 2024-02-01 08:15:00 +01:00
d1bd58cfa8 updated api to fetch specific map items from backend 2024-02-01 07:41:09 +01:00
075576b5d0 updated api to fetch specific layer from backend 2024-02-01 07:26:06 +01:00
000b33ca0b updated to utopia-ui@3.0.0-alpha-62 2024-01-31 14:59:12 +01:00
94878958c5 3.0.0-alpha.62 2024-01-31 14:55:53 +01:00
eff243bc36 delete confirmation popup 2024-01-31 09:39:16 +01:00
0f690f6f24 removed some logging 2024-01-30 21:47:28 +01:00
f3ee53bc77 3.0.0-alpha.61 2024-01-30 21:32:34 +01:00
5772cbf1d8 fix some firefox mobile issue 2024-01-30 21:32:32 +01:00
4c56901a6e 3.0.0-alpha.60 2024-01-30 21:25:40 +01:00
c7c3f07acf fix some firefox mobile issue 2024-01-30 21:25:37 +01:00
a9f42e2ef6 3.0.0-alpha.59 2024-01-30 21:18:15 +01:00
a7e2612b28 fix some firefox mobile issue 2024-01-30 21:18:12 +01:00
a5a1c70520 3.0.0-alpha.58 2024-01-30 21:06:38 +01:00
10f5709732 fix some firefox mobile issue 2024-01-30 21:06:35 +01:00
0f87a4d7a8 3.0.0-alpha.57 2024-01-30 20:53:56 +01:00
7eb52a616d fix some firefox mobile issue 2024-01-30 20:53:53 +01:00
fa19a7ae4b 3.0.0-alpha.56 2024-01-30 20:44:41 +01:00
3595818a2d fix some firefox mobile issue 2024-01-30 20:44:37 +01:00
c483236892 3.0.0-alpha.55 2024-01-30 20:35:38 +01:00
57231ae27c fix some firefox mobile issue 2024-01-30 20:35:29 +01:00
720ea2c79f 3.0.0-alpha.54 2024-01-30 20:20:02 +01:00
d30812fe1b fix some firefox mobile issue 2024-01-30 20:19:57 +01:00
fdc4fb996b 3.0.0-alpha.53 2024-01-30 20:09:27 +01:00
a1faa91fba fix searchbar disapear issue 2024-01-30 20:09:16 +01:00
5c287f7df4 3.0.0-alpha.52 2024-01-30 14:04:33 +01:00
07492564d7 optimization for profile layers 2024-01-30 14:04:08 +01:00
5b01dc983d updated daisy ui 2024-01-30 14:01:35 +01:00
bf4c66ce4a 3.0.0-alpha.51 2024-01-29 19:25:39 +01:00
fbe19d1994 more customizable item fields @ layer component and improved tag handling 2024-01-29 16:07:04 +01:00
f9ffc7b739 optimized fonts 2024-01-29 16:05:48 +01:00
fefcbf5605 show pointer on hover 2024-01-27 07:37:11 +01:00
a797652f8f 3.0.0-alpha.50 2024-01-16 11:35:32 +01:00
f74c352e44 fixed search result marker popup 2024-01-16 11:35:29 +01:00
02d41ae3fd 3.0.0-alpha.49 2024-01-16 11:25:56 +01:00
335978d404 place marker for result on geo search 2024-01-16 11:25:41 +01:00
fc7dc74433 3.0.0-alpha.48 2024-01-15 16:26:03 +01:00
990a24707e detect geo coordinates 2024-01-15 16:25:49 +01:00
2a57b13e81 3.0.0-alpha.47 2024-01-15 13:06:09 +01:00
56e849729d youtube video support 2024-01-15 13:05:55 +01:00
cfe3b9e432 loading animation for locate control 2024-01-15 03:50:56 +01:00
e5f833452b 3.0.0-alpha.46 2024-01-14 20:14:46 +01:00
b52ae474cd basic locate control 2024-01-14 20:08:12 +01:00
6d53d0d3f8 optimized search control 2024-01-14 13:34:39 +01:00
825d5d233f some ui optimization 2024-01-14 12:12:25 +01:00
13a7f3fd90 3.0.0-alpha.45 2024-01-14 08:16:48 +01:00
b3e277f8f1 svg can be passed to layer as menu icon 2024-01-14 08:16:43 +01:00
229f127331 3.0.0-alpha.44 2024-01-13 19:27:20 +01:00
1ed18decf1 fixed search issues 2024-01-13 19:27:02 +01:00
25ec60b3a1 implemented searchbar and reorganized map controls 2024-01-13 17:54:23 +01:00
00daae6b57 fixed links 2024-01-13 17:53:19 +01:00
d3fab314ae optimized #tag autocomplete 2024-01-13 17:52:50 +01:00
ad78f4993b 3.0.0-alpha.43 2024-01-12 21:04:30 +01:00
188965d1ca disabled click propagation in layer control 2024-01-12 21:04:22 +01:00
65232c6ab8 3.0.0-alpha.42 2024-01-12 20:41:37 +01:00
40cec9c674 basic video support 2024-01-12 20:40:55 +01:00
5b699b7d74 styling 2024-01-12 20:40:36 +01:00
25fcb4ef9c basic markdown implementation in item text view 2024-01-09 13:46:43 +01:00
444cac6dc2 some layout 2024-01-09 08:32:40 +01:00
3be1718022 password reset implemented 2024-01-08 22:21:35 +01:00
f5dd097228 css fix 2024-01-07 13:14:01 +01:00
6c204bed31 removed unused imports 2024-01-07 13:13:40 +01:00
1dabfde040 rerenderd dependency-graph 2024-01-07 13:12:51 +01:00
23b87fc033 implmented profile detail view and update to utopia-ui@3.0.0-alpha.41 2024-01-06 21:13:20 +01:00
f151a4dbcf 3.0.0-alpha.41 2024-01-06 21:07:03 +01:00
767cfef7de card page template 2024-01-06 21:00:40 +01:00
a8112ee604 owned item basics and item field adjustments 2024-01-06 17:00:44 +01:00
49ab4a9989 ItemViewPopup layout 2024-01-06 13:37:40 +01:00
ac63672290 added PopupButton component 2024-01-06 13:37:05 +01:00
33b340b6bb move getValue to utils 2024-01-06 13:35:48 +01:00
eb47b05fe4 move getValue to utils 2024-01-06 13:35:08 +01:00
0267a2f91f split Settings in UserSettings and ProfileSettings 2024-01-03 18:26:46 +01:00
7cb7c0e002 fixed small compiler warnings 2024-01-01 21:21:23 +01:00
eaa7eea7f5 some css fixes 2024-01-01 21:08:45 +01:00
1e16a1406a updated to utopia-ui@3.0.0-alpha.40 2024-01-01 20:49:24 +01:00
0bed9b0dd8 fix icon color 2024-01-01 20:48:52 +01:00
74a8892b4e 3.0.0-alpha.40 2024-01-01 20:45:35 +01:00
3dd146adda css fix 2024-01-01 20:45:20 +01:00
53392c9ebc css fix 2024-01-01 15:41:24 +01:00
ca7a9e39ff utopia-ui@3.0.0-alpha.39 2023-12-30 19:01:21 +01:00
95fbb91ff0 Merge branch 'main' of github.com:utopia-os/utopia-game 2023-12-30 12:51:13 +01:00
d3edfc0ede updated package 2023-12-30 12:49:59 +01:00
9bc18f830c various changes and update to utopia-ui@3.0.0-alpha.39 2023-12-29 09:48:15 +01:00
6597f0292a added timestap and author to popup 2023-12-26 11:04:31 +01:00
aef05cb757 pagetitle for profile layer 2023-12-26 11:03:38 +01:00
4efa682b06 changed ItemFormPopup 2023-12-24 03:02:06 +01:00
38aeb28fab itemColorField to enable profile-colored markers 2023-12-23 18:43:42 +01:00
6a84ee8abb reduced border radius of search control 2023-12-23 18:02:56 +01:00
2dd3db2052 3.0.0-alpha.39 2023-12-22 14:25:29 +01:00
75a0ca4fb2 css fix 2023-12-22 14:25:26 +01:00
35d3098619 3.0.0-alpha.38 2023-12-22 14:13:29 +01:00
75769d7a6a css fix 2023-12-22 14:13:24 +01:00
18c1159d0e 3.0.0-alpha.37 2023-12-22 14:00:13 +01:00
69276b0f50 css fix 2023-12-22 14:00:09 +01:00
0c8d4d4ed5 3.0.0-alpha.36 2023-12-22 13:51:47 +01:00
e96af21ff0 css fix 2023-12-22 13:51:43 +01:00
6c6c539fbb 3.0.0-alpha.35 2023-12-22 13:47:49 +01:00
000cf19e3c css fix 2023-12-22 13:47:46 +01:00
fbc915c7f0 3.0.0-alpha.34 2023-12-22 13:42:44 +01:00
64b56846b3 css fix 2023-12-22 13:42:40 +01:00
672f172269 3.0.0-alpha.33 2023-12-22 13:38:26 +01:00
a42dabb13b css fix 2023-12-22 13:38:20 +01:00
e96599c731 3.0.0-alpha.32 2023-12-22 13:34:36 +01:00
d81b7b2c4f css fix at modal 2023-12-22 13:34:25 +01:00
d4d0d52db3 added themes 2023-12-22 13:34:10 +01:00
1588ee2c25 3.0.0-alpha.31 2023-12-22 11:16:14 +01:00
708f300553 make app name width adjustable 2023-12-22 11:15:17 +01:00
064643114b css fix 2023-12-22 10:23:07 +01:00
94a3f8d5a8 Modal can have children now 2023-12-22 10:22:50 +01:00
100ecc0035 fixed bug 2023-12-22 10:22:08 +01:00
7aea369235 show AddButton and ItemViewPopup-Menu only when appropriate permissions are granted 2023-12-22 08:47:43 +01:00
7b87188109 added some themes 2023-12-22 08:46:14 +01:00
e0e154fcf6 hide Quest Control when there are no Quests 2023-12-22 08:45:35 +01:00
979c4009f4 added some css shadow to navbar and sidebar 2023-12-22 08:43:54 +01:00
842020e38a updated some libraries 2023-12-22 08:42:57 +01:00
3f9e530a97 3.0.0-alpha.30 2023-12-20 20:38:22 +01:00
8ced9d39e7 profile layer basics 2023-12-20 20:38:16 +01:00
0e63c794d3 added tree and fire icon 2023-12-20 20:36:57 +01:00
5b979ef411 css fix 2023-12-18 09:30:02 +01:00
3421b3a31e css fix 2023-12-18 09:00:28 +01:00
d70b1bc7f1 Quest improvments 2023-12-15 13:11:52 +01:00
12ad299477 add PopupTextInput Component 2023-12-12 15:33:07 +01:00
f70fd2b305 cleanup imports 2023-12-12 15:30:00 +01:00
8af92836a1 added user marker icon 2023-12-12 15:29:18 +01:00
29bbe64e23 added user marker icon 2023-12-12 15:23:51 +01:00
c27dfcd09b add PopupTextInput Component 2023-12-12 15:21:35 +01:00
542d9d7f39 fix image pathes 2023-12-12 15:19:02 +01:00
1d8a0f3002 Merge branch 'main' of github.com:utopia-os/utopia-ui 2023-12-12 14:57:02 +01:00
142a4f86ee added color picker and avatar upload to profile 2023-12-12 14:54:50 +01:00
antontranelis
9099511bdc
Update README.md 2023-10-23 12:11:24 +02:00
antontranelis
0dad204a91
Update README.md 2023-10-23 12:08:24 +02:00
antontranelis
0f0f548e5b
Update README.md 2023-10-23 12:06:36 +02:00
antontranelis
0728fcbb5b
Update README.md 2023-10-23 09:03:26 +02:00
antontranelis
91a1dc2caf
Update README.md 2023-10-20 08:36:49 +02:00
antontranelis
4b86eb223c
Update README.md 2023-10-18 11:24:21 +02:00
antontranelis
24050e118c
Update README.md 2023-10-18 10:48:21 +02:00
771c8f06bc 3.0.0-alpha.29 2023-10-14 00:57:01 +02:00
2e2680235f css fix 2023-10-14 00:56:56 +02:00
5412e17f99 3.0.0-alpha.28 2023-10-14 00:46:47 +02:00
2cdd07bdb6 css fix 2023-10-14 00:46:42 +02:00
dcfe3dfd0d update to utopia-ui@3.0.0-alpha.27 2023-10-14 00:05:51 +02:00
8d64a5c662 3.0.0-alpha.27 2023-10-13 23:49:34 +02:00
de4e4093c6 avatar upload finetuning 2023-10-13 23:49:28 +02:00
85bca48fd7 3.0.0-alpha.26 2023-10-13 21:33:58 +02:00
ae096d4b7e basic avatar upload 2023-10-13 21:33:47 +02:00
29eedc3a37 basic avatar upload 2023-10-13 18:32:23 +02:00
2dfdb874bc updated postcss 2023-10-12 08:41:24 +02:00
5e1860dbf6 Modal finetuning 2023-10-12 08:38:06 +02:00
da368e9728 gameplay 2023-10-11 22:11:30 +02:00
e9491e4616 3.0.0-alpha.25 2023-10-10 00:18:49 +02:00
a3a41ba34b autocomplete='off' in ItemForm 2023-10-10 00:18:44 +02:00
c43bfdb2c2 3.0.0-alpha.24 2023-10-09 23:37:46 +02:00
054bb30326 fix to disable chroms autocomplet on date-inputs 2023-10-09 23:37:33 +02:00
cb91cc2f4a translated demo quests 2023-10-09 23:37:09 +02:00
12814b380b updated to Utopia UI to alpha.23 2023-10-09 20:16:08 +02:00
ceaaf4e9f0 3.0.0-alpha.23 2023-10-09 20:13:25 +02:00
3ffd88c5a9 updated gaming 2023-10-09 20:13:17 +02:00
e049152347 optional open links in new tab 2023-10-09 20:12:39 +02:00
8d6390816e updated to utopia-ui@3.0.0-alpha.22 2023-10-04 17:58:29 +02:00
524944a7c3 updated sidebar 2023-10-04 17:57:37 +02:00
792084730b updated concept 2023-10-04 17:57:10 +02:00
690a069dbd 3.0.0-alpha.22 2023-10-04 17:52:19 +02:00
b3370114dd parent property for CardPage 2023-10-04 17:51:52 +02:00
20790168f6 added buttom links to sidebar 2023-10-04 17:51:07 +02:00
c3e4908571 Project Detail Page 2023-10-03 20:43:57 +02:00
96a71d4926 Concept Page Layout 2023-10-03 20:43:25 +02:00
3546b0e933 3.0.0-alpha.21 2023-09-27 18:30:04 +02:00
a24563a096 Components Finetuning 2023-09-27 18:29:47 +02:00
18d69caf43 Projects and Concept 2023-09-27 15:19:14 +02:00
4df05ae8db undo dynamic icon imorts 2023-09-27 08:22:46 +02:00
f99a5fcce9 changed Quests z-index 2023-09-27 08:22:12 +02:00
9c274a0ef4 3.0.0-alpha.20 2023-09-16 11:39:43 +02:00
a6cb2061d8 dynamic import in DynamicHeroIcon 2023-09-16 11:38:38 +02:00
519614cabc LayerControl css 2023-09-16 11:38:06 +02:00
b1c1d14bd7 change build output from es to esm 2023-09-16 11:37:02 +02:00
056bee7d1b 3.0.0-alpha.19 2023-09-15 13:17:49 +02:00
5fbfdfec43 layer control 2023-09-15 12:11:59 +02:00
2fec9b05d7 removed react-helment 2023-09-15 08:19:03 +02:00
1ad42909c4 3.0.0-alpha.18 2023-09-14 15:38:21 +02:00
1fccee5b37 using react-helmet for og meta tags 2023-09-14 15:38:07 +02:00
386e47752b 3.0.0-alpha.17 2023-09-14 14:37:26 +02:00
79a6128be7 fix og-meta-tags 2023-09-14 14:37:21 +02:00
6766879163 3.0.0-alpha.16 2023-09-14 14:10:56 +02:00
f959dd2713 fix og-meta-tags 2023-09-14 14:10:48 +02:00
676f1662ad 3.0.0-alpha.15 2023-09-14 14:07:10 +02:00
a4f119cde5 fix og-meta-tags 2023-09-14 14:07:05 +02:00
c8c4c6875a updated to utopia-ui@3.0.0-alpha.14 2023-09-14 13:56:30 +02:00
390a3ecbc5 3.0.0-alpha.14 2023-09-14 13:54:02 +02:00
2795db6351 fix browser navigation 2023-09-14 13:53:53 +02:00
a58b4fef7a 3.0.0-alpha.13 2023-09-14 13:47:20 +02:00
8c23b3fcba navigate items with browser 2023-09-14 13:47:07 +02:00
60427cb3d7 fixing hash tag issue 2023-09-14 12:10:56 +02:00
8fd1f6e0a6 added og-meta-tags for items 2023-09-14 12:10:32 +02:00
58380f6b77 individual item URLS basics 2023-09-14 08:31:41 +02:00
1f675ccf3c state management cleanup 2023-09-14 08:31:08 +02:00
5da17ff553 removesd some logging 2023-09-12 08:26:12 +02:00
0138f20b97 implemented permissions 2023-09-05 16:45:01 +02:00
42fe4fae4e 3.0.0-alpha.12 2023-09-04 22:33:24 +02:00
3bec98b4f7 implemented Permissions 2023-09-04 22:33:19 +02:00
28cf401f2f fix popup closing whe marker leaves scrren, which causes trouble on mobile 2023-09-04 22:32:08 +02:00
89b35562ce 3.0.0-alpha.11 2023-09-04 20:14:22 +02:00
1d2831befc renaming setItemPosition 2023-09-04 20:13:57 +02:00
cace6fc7e8 make browser save passowrd 2023-09-04 20:12:36 +02:00
88c89d88b0 3.0.0-alpha.10 2023-09-03 13:30:11 +02:00
3939940244 fix control issue 2023-09-03 13:30:04 +02:00
b746c45d2d added tooltips 2023-09-03 11:13:51 +02:00
abc0c79e74 3.0.0-alpha.9 2023-09-03 08:34:09 +02:00
4826ba951d hide filterControl when height is very small 2023-09-03 08:33:49 +02:00
40854fa1cf UX Improvments 2023-09-02 16:57:31 +02:00
a771fb9ee1 small ui fixes 2023-09-02 15:28:55 +02:00
055b285704 updated to utopia-ui@3.0.0-alpha.8 2023-09-02 10:25:55 +02:00
989c65b692 3.0.0-alpha.8 2023-09-02 10:20:19 +02:00
066353f267 ui theming 2023-09-02 10:20:04 +02:00
63fbcb4b0a improving error handling 2023-09-02 10:19:35 +02:00
4795968eb7 3.0.0-alpha.7 2023-09-01 01:11:56 +02:00
bd0e3a94c2 removed logs 2023-09-01 01:11:52 +02:00
b011159912 change add button color for dark mode 2023-09-01 01:11:36 +02:00
aa6dcf5223 make app an PWA 2023-09-01 00:57:53 +02:00
5342328209 cleanup data 2023-09-01 00:57:24 +02:00
968e7303d4 extended api 2023-09-01 00:56:09 +02:00
109a4eccae updated directus 2023-09-01 00:54:24 +02:00
56cb40eb82 3.0.0-alpha.6 2023-09-01 00:42:02 +02:00
ddd87b8748 fix add button bug on mobile and dark mode issue 2023-09-01 00:39:04 +02:00
d6ada13e19 adding new tag bugfixing 2023-08-31 22:37:01 +02:00
8460e87a9b 3.0.0-alpha.5 2023-08-31 22:10:01 +02:00
997efa8906 fixed api error and error handling 2023-08-31 22:08:37 +02:00
3a9c3de127 Filter Control and more styling 2023-08-31 16:27:31 +02:00
bbe755a034 ItemViewPopup TextView styling / url formatting 2023-08-30 01:09:46 +02:00
289ea16340 filter map on tag-click 2023-08-29 22:56:24 +02:00
c32b7b8f51 implemented useFilter hook 2023-08-29 18:38:03 +02:00
c92b2be9fc refactoring hooks and api 2023-08-29 13:11:39 +02:00
b0e611c9c5 Tag API implementation 2023-08-27 20:25:52 +02:00
18bb8e6ad2 Text Area Hash Tag Autocompletion Styling 2023-08-25 06:15:27 +02:00
15041b74b5 textarea now has Hash Tag Autocompletion 2023-08-24 00:13:53 +02:00
2bff47a610 changed toast messages 2023-08-23 15:28:10 +02:00
b17efefda6 delete loading spinner 2023-08-23 00:11:54 +02:00
539e460f84 item loading spinner 2023-08-22 23:51:06 +02:00
e742dd20b6 updated to utopia-ui@3.0.0-alpha-4 2023-08-22 22:42:37 +02:00
49877c1b4c 3.0.0-alpha.4 2023-08-22 22:38:15 +02:00
9b01977cd3 added prop-types for children-cloning in production 2023-08-22 22:38:06 +02:00
0128ef4b79 3.0.0-alpha.3 2023-08-22 19:42:56 +02:00
24e8c984d8 some css 2023-08-22 19:42:06 +02:00
a68d4951af some Item Popup Components ready to use 2023-08-22 19:36:53 +02:00
6bd062c1b3 custom popups are basicly working 🍄 2023-08-22 14:54:57 +02:00
d6e780436f ItemFormPopup cleanup 2023-08-21 11:41:48 +02:00
ee4b67d590 Add Views for Modularization of Item Popups 2023-08-20 21:17:58 +02:00
4fe4aa6b74 Modularization of Item Popups 2023-08-20 13:11:57 +02:00
77f7e36a5d fix small chrome issue 2023-08-19 00:14:23 +02:00
53bcd553ed login, signup, logout redesign 2023-08-19 00:01:46 +02:00
caea879aab login, signup, logout redesign 2023-08-19 00:01:33 +02:00
2fa78bc4ff generalization of useAuth hook 2023-08-08 10:15:46 +02:00
3c276c8fdf added page template and basic registration 2023-08-06 17:09:09 +02:00
b7d46473ce 3.0.0-alpha.2 2023-07-23 23:14:48 +02:00
3dd32c62dd updated daisy ui 2023-07-23 23:14:44 +02:00
bbbbe1ac2c 3.0.0-alpha.1 2023-07-23 11:03:04 +02:00
f8f0001ed7 Quests closeable 2023-07-23 09:57:40 +02:00
1c41115948 renamed app to utopia-game 2023-07-23 00:27:52 +02:00
373a7020e2 removed dist/ from repository 2023-07-22 21:04:11 +02:00
b6989152cd updated to utopia-ui v3 alpha 2023-07-22 21:02:25 +02:00
a39ff36e10 3.0.0-alpha.0 2023-07-22 12:23:25 +02:00
5ffec65c27 removed logging 2023-07-22 12:23:22 +02:00
846dea24db lowercase tags effect marker color 2023-07-22 07:28:50 +02:00
b1093dcc41 fix quest positio 2023-07-22 00:11:30 +02:00
d7a216e1d4 just small css 2023-07-21 23:43:21 +02:00
cf34e815b6 #tags not case sensitive 2023-07-21 23:28:57 +02:00
bd57c87e95 basic textbased #tags 2023-07-21 19:29:13 +02:00
8bbb6bd1e2 basic API implementation 2023-07-21 12:54:58 +02:00
eba7f0630b renamed Popup Components 2023-07-20 10:00:19 +02:00
f25a3a1be1 change event icon 2023-06-16 11:55:06 +02:00
AT
3548a686e9 fix for mobile devices 2023-05-23 09:29:39 +02:00
AT
a67373ea96 updatet utopia-ui to 2.0.6 2023-05-22 23:06:04 +02:00
AT
4e7170cfc9 css optimizations 2023-05-22 23:05:18 +02:00
AT
48c63f0c1e updatet utopia-ui to 2.0.5 2023-05-22 21:17:27 +02:00
AT
174b3f07f7 fixed Password Bug 2023-05-22 21:16:34 +02:00
AT
5667db15dd updatet utopia-ui to 2.0.4 2023-05-22 20:43:10 +02:00
AT
7232b8fdda fixed NavBar Bug 2023-05-22 20:41:39 +02:00
AT
9d84d32883 fixed type issues 2023-05-22 20:07:22 +02:00
AT
8181ffd9f9 updated utopia-ui 2023-05-22 16:15:11 +02:00
AT
c83d76c3b3 version number for npm release 2023-05-22 16:13:45 +02:00
AT
8c9499336f package config 2023-05-22 16:12:58 +02:00
AT
15edf319ff readme 2023-05-22 15:40:45 +02:00
AT
fbcf285bf9 readme 2023-05-22 15:39:58 +02:00
AT
23b6bbd56b readme 2023-05-22 15:35:47 +02:00
AT
c2d511b7c3 deleted pnpm artefact 2023-05-22 15:34:48 +02:00
AT
e53d95b4eb small fixes 2023-05-22 15:33:36 +02:00
AT
5d14d7d56d updated README, added Sample Data 2023-05-22 14:56:21 +02:00
AT
2f58f813fc initial commit 2023-05-22 14:40:18 +02:00
AT
8d65ffa306 adjustments for heroicons2 + various small things 2023-05-22 14:22:02 +02:00
AT
0c39ffa6f9 more components 2023-05-18 23:48:46 +02:00
AT
ca3b09c430 just code formatting 2023-05-18 10:49:07 +02:00
AT
8506e3d746 popup dropdown opens to bottom 2023-04-19 16:46:06 +02:00
AT
d43ace920a diverses 2023-04-19 13:07:20 +02:00
AT
16959f1519 removed logging 2023-04-16 21:19:35 +02:00
AT
96193ab8c2 enhanced state management 2023-04-16 21:11:25 +02:00
AT
069cc18cbf changed compile format fro cjs to es 2023-04-16 21:10:29 +02:00
AT
65cc743079 removed unused packages, enabled tailwind preflight 2023-04-16 12:20:39 +02:00
AT
aefa687bd5 fixed vulnerabilities 2023-04-15 17:12:18 +02:00
AT
4942777352 react 18 2023-04-15 16:23:19 +02:00
AT
f848a1fbf6 updated to react 18 2023-04-15 16:19:04 +02:00
AT
5e78ecdb24 switch to osmand tile server 2023-04-15 16:18:37 +02:00
AT
9e17d6c8c0 update babel loader 2023-04-15 14:16:30 +02:00
AT
46a1324cea some changes 2022-10-01 14:50:38 +02:00
AT
65ea019633 updated react to v18, react-leaflet to v4 and react-leaflet-cluster to v2 2022-10-01 08:56:33 +02:00
AT
815c302778 removed storybook which caused several vulnerabilities 2022-09-28 18:32:08 +02:00
AT
de929beb45 update Items 2022-09-27 12:36:41 +02:00
AT
3f540ff2d4 state management 2022-08-10 12:44:27 +02:00
AT
b532eca956 useTags hook 2022-08-06 10:14:38 +02:00
AT
1b3aef9906 useLayer Hook 2022-08-05 21:37:40 +02:00
AT
76f929360e fixed vulnerabilities 2022-08-04 20:27:35 +02:00
AT
a589513954 added storybook 2022-08-04 20:23:57 +02:00
AT
aef9f56148 basic useItems hook 2022-08-04 11:51:04 +02:00
AT
654d066587 new item popups 2022-07-18 14:15:33 +02:00
AT
2b48eb84f8 AdButton and Layer Component 2022-07-15 12:51:33 +02:00
AT
891df60c9f another README fix 2022-07-14 23:53:07 +02:00
AT
f51eb19d0a fixed example code in README 2022-07-14 23:51:55 +02:00
AT
6a551b47e4 added missing source files 2022-07-13 10:26:23 +02:00
AT
809689a614 README 2022-07-13 10:21:48 +02:00
AT
179ed10d93 restructured internal files 2022-07-13 10:20:30 +02:00
AT
4f7050f0bc more README 2022-07-12 20:48:52 +02:00
AT
4850b9a086 README 2022-07-12 20:25:18 +02:00
AT
4e972f7e11 added tailwind 2022-07-12 20:24:00 +02:00
844 changed files with 82451 additions and 3837 deletions

13
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,13 @@
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
<!--
Please take a look at the issue templates at https://github.com/[ORGA/USER]/[REPO]/issues/new/choose
before submitting a new issue. Following one of the issue templates will ensure maintainers can route your request efficiently.
Thanks!
-->
## 💬 Issue
<!-- Describe your Issue in detail. -->
<!-- Attach screenshots and drawings if needed. -->

10
.github/ISSUE_TEMPLATE/bug.md vendored Normal file
View File

@ -0,0 +1,10 @@
---
name: 🐛 Bug
about: Create a report to help us improve
labels: bug
title: 🐛 [Bug]
---
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
## 🐛 Bug
<!-- Describe your issue in detail. Include screenshots if needed. Give us as much information as possible. Use a clear and concise description of what the bug is.-->

10
.github/ISSUE_TEMPLATE/devops.md vendored Normal file
View File

@ -0,0 +1,10 @@
---
name: 💥 DevOp
about: Help us manage our deployed Software.
labels: devops
title: 💥 [DevOps]
---
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
## 💥 DevOps
<!-- Describe your issue in detail. Include screenshots if needed. Give us as much information as possible. Use a clear and concise description of what the problem is.-->

13
.github/ISSUE_TEMPLATE/epic.md vendored Normal file
View File

@ -0,0 +1,13 @@
---
name: 🌟 Epic
about: Define a big development Step
labels: epic
title: 🌟 [EPIC]
---
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
<!-- THIS ISSUE-TYPE IS NOT FOR YOU! -->
<!-- Proceed only if you know what you are doing - have a chat with Project's Team first -->
## 🌟 EPIC
<!-- Describe your Epic in detail. Include screenshots and drawings -->

10
.github/ISSUE_TEMPLATE/feature.md vendored Normal file
View File

@ -0,0 +1,10 @@
---
name: 🚀 Feature
about: Suggest an idea for this project
labels: feature
title: 🚀 [Feature]
---
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
## 🚀 Feature
<!-- Give a short summary of the Feature. Use Screenshots if you want. -->

13
.github/ISSUE_TEMPLATE/question.md vendored Normal file
View File

@ -0,0 +1,13 @@
---
name: 💬 Question
about: If you need help understanding our Software.
labels: question
title: 💬 [Question]
---
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
<!-- Question the project's team -->
<!-- If you need an answer right away, consider to take other means of communication with the project's team -->
## 💬 Question
<!-- Describe your Question in detail. Include screenshots and drawings if needed. -->

10
.github/ISSUE_TEMPLATE/refactor.md vendored Normal file
View File

@ -0,0 +1,10 @@
---
name: 🔧 Refactor
about: Help us improve our code by refactoring it.
labels: refactor
title: 🔧 [Refactor]
---
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
## 🔧 Refactor
<!-- Describe your issue in detail. Include screenshots if needed. Give us as much information as possible. Use a clear and concise description of what the problem is.-->

13
.github/ISSUE_TEMPLATE/release.md vendored Normal file
View File

@ -0,0 +1,13 @@
---
name: 🎂 Release
about: Define a Release
labels: release
title: 🎂 [RELEASE]
---
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
<!-- THIS ISSUE-TYPE IS NOT FOR YOU! -->
<!-- Proceed only if you know what you are doing - have a chat with Project's Team first -->
## 🎂 RELEASE
<!-- Describe your Release in detail. Include screenshots and drawings -->

15
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,15 @@
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
## 🍰 Pullrequest
<!-- Describe the Pullrequest. Use Screenshots if possible. -->
### Issues
<!-- Which Issues does this fix, which are related?
- fixes #XXX
- relates #XXX
-->
- None
### Todo
<!-- In case some parts are still missing, list them here. -->
- [X] None

45
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,45 @@
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
rebase-strategy: "disabled"
schedule:
interval: "weekly"
day: "wednesday"
time: "03:00"
timezone: "Europe/Berlin"
open-pull-requests-limit: 99
groups:
react-ecosystem:
patterns:
- "react"
- "react-dom"
- "@types/react"
- "@types/react-dom"
typescript-eslint:
patterns:
- "@typescript-eslint/parser"
- "@typescript-eslint/eslint-plugin"
tiptap:
patterns:
- "@tiptap/core"
- "@tiptap/extension-*"
- "@tiptap/pm"
- "@tiptap/react"
- "@tiptap/starter-kit"
labels:
- "dependencies"
- "javascript"
- package-ecosystem: "github-actions"
directory: "/"
rebase-strategy: "disabled"
schedule:
interval: "weekly"
day: "wednesday"
time: "03:00"
timezone: "Europe/Berlin"
open-pull-requests-limit: 99
labels:
- "dependencies"
- "github_actions"

69
.github/workflows/deploy.docs.yml vendored Normal file
View File

@ -0,0 +1,69 @@
name: deploy:docs:lib
on:
push:
branches:
- main
jobs:
# Build job
build:
# Specify runner + build & upload the static files as an artifact
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v4.0.3
with:
node-version-file: '.tool-versions'
- name: Install Dependencies & Build Library
run: |
npm install
npm run build
working-directory: lib/
- name: Build static files
id: build
run: npm run docs:generate
working-directory: lib/
- name: Generate coverage
id: coverage
run: npm run test:unit
working-directory: lib/
- name: Create coverage badges
id: coverage-badge
uses: jaywcjlove/coverage-badges-cli@main
with:
style: flat
source: lib/coverage/coverage-summary.json
output: lib/docs/test-coverage.svg
jsonPath: total.lines.pct
- name: Upload static files as artifact
id: deployment
uses: actions/upload-pages-artifact@v4.0.0
with:
path: lib/docs/
# Deploy job
deploy:
# Add a dependency to the build job
needs: build
# Grant GITHUB_TOKEN the permissions required to make a Pages deployment
permissions:
pages: write # to deploy to Pages
id-token: write # to verify the deployment originates from an appropriate source
# Deploy to the github-pages environment
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
# Specify runner + deployment step
runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4.0.5

60
.github/workflows/test.backend.seed.yml vendored Normal file
View File

@ -0,0 +1,60 @@
name: "test:build test docker"
on: push
jobs:
files-changed:
name: Detect File Changes - build - docker
runs-on: ubuntu-latest
outputs:
changes: ${{ steps.filter.outputs.match }}
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
id: filter
with:
filters: |
match:
- '.github/workflows/*'
- 'backend/**/*'
backend-seed:
if: needs.files-changed.outputs.changes == 'true'
name: Backend Seed
needs: files-changed
runs-on: ubuntu-latest
env:
WORKING_DIRECTORY: ./
steps:
- name: Checkout code
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- name: Setup Node.js
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
with:
node-version-file: '.tool-versions'
- name: Build Docker Production
run: |
mkdir -p ./data/uploads
sudo chmod 777 -R ./data
docker compose -f docker-compose.yml up -d
# Wait for Directus to be ready using health endpoint polling
timeout 120 bash -c 'until curl -f http://localhost:8055/server/health; do echo "Waiting for Directus..."; sleep 5; done'
cd backend && ./push.sh && ./seed.sh
working-directory: ${{env.WORKING_DIRECTORY}}
#build-development:
# if: needs.files-changed.outputs.changes == 'true'
# name: Build Docker Development
# needs: files-changed
# runs-on: ubuntu-latest
# env:
# WORKING_DIRECTORY: ./
# steps:
# - name: Checkout code
# uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
#
# - name: Build Docker Development
# run: docker compose build
# working-directory: ${{env.WORKING_DIRECTORY}}

49
.github/workflows/test.build.docker.yml vendored Normal file
View File

@ -0,0 +1,49 @@
name: "test:build test docker"
on: push
jobs:
files-changed:
name: Detect File Changes - build - docker
runs-on: ubuntu-latest
outputs:
changes: ${{ steps.filter.outputs.build-docker }}
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
id: filter
with:
filters: |
build-docker:
- '.github/workflows/*'
- '**/*'
build-production:
if: needs.files-changed.outputs.changes == 'true'
name: Build Docker Production
needs: files-changed
runs-on: ubuntu-latest
env:
WORKING_DIRECTORY: ./
steps:
- name: Checkout code
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- name: Build Docker Production
run: docker compose -f docker-compose.yml build
working-directory: ${{env.WORKING_DIRECTORY}}
#build-development:
# if: needs.files-changed.outputs.changes == 'true'
# name: Build Docker Development
# needs: files-changed
# runs-on: ubuntu-latest
# env:
# WORKING_DIRECTORY: ./
# steps:
# - name: Checkout code
# uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
#
# - name: Build Docker Development
# run: docker compose build
# working-directory: ${{env.WORKING_DIRECTORY}}

72
.github/workflows/test.build.lib.yml vendored Normal file
View File

@ -0,0 +1,72 @@
name: build:lib
on: push
jobs:
files-changed:
name: Detect File Changes - build -lib
runs-on: ubuntu-latest
outputs:
build: ${{ steps.filter.outputs.build }}
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
id: filter
with:
filters: |
build:
- '.github/workflows/**/*'
- 'lib/**/*'
build:
if: needs.files-changed.outputs.build == 'true'
name: Build
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v4.0.3
with:
node-version-file: '.tool-versions'
- name: Install Dependencies & Build Library
run: |
npm install
npm run build
working-directory: lib/
build-examples:
if: needs.files-changed.outputs.build == 'true'
name: Test Example Apps
needs: [files-changed, build]
runs-on: ubuntu-latest
strategy:
matrix:
app: [examples/1-basic-map, examples/2-static-layers, examples/3-tags ]
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v4.0.3
with:
node-version-file: '.tool-versions'
- name: Link Utopia-UI in Example App
run: |
npm install
npm run build
cd ${{ matrix.app }}
npm install
npm run build
working-directory: lib/
results:
if: ${{ always() }}
runs-on: ubuntu-latest
name: Test Example Apps - results
needs: [build-examples]
steps:
- run: |
result="${{ needs.build-examples.result }}"
if [[ $result == "success" || $result == "skipped" ]]; then
exit 0
else
exit 1
fi

53
.github/workflows/test.docs.lib.yml vendored Normal file
View File

@ -0,0 +1,53 @@
name: test:docs:lib
on: push
jobs:
files-changed:
name: Detect File Changes - docs - lib
runs-on: ubuntu-latest
outputs:
docs: ${{ steps.filter.outputs.docs }}
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
id: filter
with:
filters: |
docs:
- '.github/workflows/**/*'
- 'lib/**/*.md'
- 'LICENSE'
# build:
# if: needs.files-changed.outputs.frontend == 'true'
# name: Build - Frontend
# needs: files-changed
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
# - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v4.0.3
# with:
# node-version-file: './.tool-versions'
# - name: Frontend | Build
# run: npm install && npm run build
# working-directory: ./frontend
docs:
if: needs.files-changed.outputs.docs == 'true'
name: Docs - lib
needs: files-changed
runs-on: ubuntu-latest
env:
COVERAGE_REQUIRED: 0
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v4.0.3
with:
node-version-file: '.tool-versions'
- name: Docs
run: |
npm install
npm run docs:generate
./scripts/docs-coverage.sh
working-directory: lib/

211
.github/workflows/test.e2e.yml vendored Normal file
View File

@ -0,0 +1,211 @@
name: test:e2e
on: push
jobs:
cypress-e2e-tests:
name: Run E2E Tests
runs-on: ubuntu-latest
outputs:
tests-failed: ${{ steps.cypress-tests.outcome == 'failure' || steps.report-results.outputs.test_failed == 'true' }}
tests-outcome: ${{ steps.cypress-tests.outcome }}
test_failed: ${{ steps.report-results.outputs.test_failed }}
steps:
- name: Checkout code
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v5.0.0
- name: Set up Node.js
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v5.0.0
with:
node-version-file: ./.tool-versions
cache: 'npm'
cache-dependency-path: |
app/package-lock.json
lib/package-lock.json
cypress/package-lock.json
- name: Build Library
run: |
npm ci
npm run build
working-directory: ./lib
- name: Build Frontend
run: |
cp .env.dist .env
sed -i '/VITE_DIRECTUS_ADMIN_ROLE=/c\VITE_DIRECTUS_ADMIN_ROLE=8141dee8-8e10-48d0-baf1-680aea271298' .env
npm ci
npm run build
working-directory: ./app
- name: Clean Database State
run: |
# Remove any existing database data to ensure fresh state
sudo rm -rf ./data/database
mkdir -p ./data/uploads
sudo chmod 777 -R ./data
- name: Build and start all Containers
run: docker compose up -d
- name: Wait for Directus to be Ready
run: |
echo "Waiting for Directus API to be ready..."
timeout 120 bash -c 'until curl -f http://localhost:8055/server/health; do echo "Waiting for Directus..."; sleep 5; done'
echo "Directus is ready!"
- name: Seed Backend
run: |
mkdir -p ./data/uploads
sudo chmod 777 -R ./data
cd backend && ./push.sh && ./seed.sh
working-directory: ./
- name: Wait for Application to be Ready
run: |
echo "Waiting for application to be ready..."
timeout 300 bash -c 'until curl -f http://localhost:8080/login; do sleep 5; done'
echo "Application is ready!"
- name: Health Check
run: |
echo "Frontend health check:"
curl -f http://localhost:8080/login || exit 1
echo "Backend health check:"
curl -f http://localhost:8055/server/health || exit 1
- name: Install Cypress Dependencies
run: npm ci
working-directory: ./cypress
- name: Setup Display Environment for Parallel Tests
run: |
echo "Setting up display environment for parallel Cypress execution..."
# Kill any existing Xvfb processes to ensure clean state
sudo pkill Xvfb || true
# Remove any existing lock files
sudo rm -f /tmp/.X*-lock || true
# Ensure xvfb is available
which xvfb-run || (sudo apt-get update && sudo apt-get install -y xvfb)
echo "Display environment setup complete"
- name: Run E2E Tests
id: cypress-tests
run: |
# Override the npm script to use xvfb-run with display isolation
SPEC_COUNT=$(find e2e -name "*.cy.ts" | wc -l)
echo "Running $SPEC_COUNT test chunks in parallel with display isolation"
# Array to store background process PIDs
declare -a pids=()
# Launch parallel processes with isolated displays
for i in $(seq 0 $((SPEC_COUNT-1))); do
echo "Starting Cypress chunk $((i + 1))/$SPEC_COUNT on display :$((100 + i))"
(
SPLIT="$SPEC_COUNT" SPLIT_INDEX="$i" SPLIT_SUMMARY=false \
xvfb-run --server-num="$((100 + i))" \
--server-args="-screen 0 1280x720x24 -ac +extension GLX +render -noreset" \
npx cypress run --e2e --browser chromium
) &
pids+=($!)
done
# Wait for all background processes and collect exit codes
exit_code=0
for pid in "${pids[@]}"; do
if ! wait "$pid"; then
echo "Process $pid failed"
exit_code=1
fi
done
echo "All parallel test processes completed"
# Exit with failure if any test failed
if [ $exit_code -ne 0 ]; then
echo "❌ Some tests failed"
exit 1
else
echo "✅ All tests passed"
fi
working-directory: ./cypress
env:
# Disable individual cypress-split summaries to avoid conflicts
SPLIT_SUMMARY: false
- name: Upload test artifacts on failure
if: failure()
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v4.6.2
with:
name: cypress-test-results-${{ github.run_id }}
path: |
cypress/results/
cypress/screenshots/
retention-days: 7
if-no-files-found: warn
process-test-reports:
name: Process Test Reports
runs-on: ubuntu-latest
needs: cypress-e2e-tests
if: failure() && needs.cypress-e2e-tests.result == 'failure'
steps:
- name: Checkout code
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v5.0.0
- name: Setup Node.js
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v5.0.0
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: cypress/package-lock.json
- name: Install dependencies
run: npm ci
working-directory: ./cypress
- name: Download test artifacts
uses: actions/download-artifact@f093f21ca4cfa7c75ccbbc2be54da76a0c7e1f05 # v5.0.0
with:
name: cypress-test-results-${{ github.run_id }}
path: ./cypress
- name: Merge JSON reports into one consolidated report
run: ./scripts/merge-reports.sh
working-directory: ./cypress
- name: Generate HTML report with screenshots
run: ./scripts/generate-html-report.sh
working-directory: ./cypress
- name: Create simple index page
run: ./scripts/create-index-page.sh
working-directory: ./cypress
env:
GITHUB_RUN_ID: ${{ github.run_id }}
GITHUB_SHA: ${{ github.sha }}
- name: Upload consolidated test report
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v4.6.2
with:
name: e2e-test-report-${{ github.run_id }}
path: cypress/results/html/
retention-days: 14
if-no-files-found: warn
- name: Upload raw test data (for debugging)
if: failure()
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v4.6.2
with:
name: e2e-raw-data-${{ github.run_id }}
path: |
cypress/results/
cypress/screenshots/
cypress/videos/
retention-days: 7
if-no-files-found: warn

34
.github/workflows/test.lint.cypress.yml vendored Normal file
View File

@ -0,0 +1,34 @@
name: test:lint:cypress
on: push
jobs:
files-changed:
name: Detect File Changes - lint - cypress
runs-on: ubuntu-latest
outputs:
cypress: ${{ steps.filter.outputs.cypress }}
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v5.0.0
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
id: filter
with:
filters: |
cypress:
- '.github/workflows/test.lint.cypress.yml'
- '.github/workflows/test.e2e.yml'
- 'cypress/**/*'
lint:
if: needs.files-changed.outputs.cypress == 'true'
name: Lint - cypress
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v5.0.0
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v5.0.0
with:
node-version-file: '.tool-versions'
- name: Lint
run: npm install && npm run lint
working-directory: cypress/

View File

@ -0,0 +1,33 @@
name: test:lint:app
on: push
jobs:
files-changed:
name: Detect File Changes - lint - app
runs-on: ubuntu-latest
outputs:
lint: ${{ steps.filter.outputs.lint }}
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
id: filter
with:
filters: |
lint:
- '.github/workflows/**/*'
- 'app/**/*'
lint:
if: needs.files-changed.outputs.lint == 'true'
name: Lint - app
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v4.0.3
with:
node-version-file: '.tool-versions'
- name: Lint
run: npm install && npm run test:lint:eslint
working-directory: app/

View File

@ -0,0 +1,89 @@
name: test::examples:lib
on: push
jobs:
files-changed:
name: Detect File Changes - lint
runs-on: ubuntu-latest
outputs:
lint: ${{ steps.filter.outputs.lint }}
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
id: filter
with:
filters: |
lint:
- '.github/workflows/**/*'
- 'lib/**/*'
# build:
# if: needs.files-changed.outputs.frontend == 'true'
# name: Build - Frontend
# needs: files-changed
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
# - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v4.0.3
# with:
# node-version-file: './.tool-versions'
# - name: Frontend | Build
# run: npm install && npm run build
# working-directory: ./frontend
lint-example-1-basic-map:
if: needs.files-changed.outputs.lint == 'true'
name: Lint Example 1 - Basic Map
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v4.0.3
with:
node-version-file: '.tool-versions'
- name: Lint
run: npm install && npm run lint
working-directory: lib/examples/1-basic-map
lint-example-2-static-layers:
if: needs.files-changed.outputs.lint == 'true'
name: Lint Example 2 - Static Layers
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v4.0.3
with:
node-version-file: '.tool-versions'
- name: Lint
run: npm install && npm run lint
working-directory: lib/examples/2-static-layers
lint-example-3-tags:
if: needs.files-changed.outputs.lint == 'true'
name: Lint Example 3 - Tags
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v4.0.3
with:
node-version-file: '.tool-versions'
- name: Lint
run: npm install && npm run lint
working-directory: lib/examples/3-tags
# unit:
# if: needs.files-changed.outputs.frontend == 'true'
# name: Unit - Frontend
# needs: files-changed
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
# - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v4.0.3
# with:
# node-version-file: './.tool-versions'
# - name: Frontend | Unit
# run: npm install && npm run test:unit
# working-directory: ./frontend

33
.github/workflows/test.lint.lib.yml vendored Normal file
View File

@ -0,0 +1,33 @@
name: test:lint:lib
on: push
jobs:
files-changed:
name: Detect File Changes - lint - lib
runs-on: ubuntu-latest
outputs:
lint: ${{ steps.filter.outputs.lint }}
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
id: filter
with:
filters: |
lint:
- '.github/workflows/**/*'
- 'lib/**/*'
lint:
if: needs.files-changed.outputs.lint == 'true'
name: Lint - lib
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v4.0.3
with:
node-version-file: '.tool-versions'
- name: Lint
run: npm install && npm run test:lint:eslint
working-directory: lib/

81
.github/workflows/test.lint.pr.yml vendored Normal file
View File

@ -0,0 +1,81 @@
name: "test:lint pull request CI"
on:
pull_request_target:
types:
- opened
- edited
- synchronize
permissions:
pull-requests: write
statuses: write
jobs:
main:
name: Validate PR title
runs-on: ubuntu-latest
if: ${{ github.actor != 'dependabot[bot]' }}
steps:
- uses: amannn/action-semantic-pull-request@v6
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
# Configure which types are allowed (newline delimited).
# Default: https://github.com/commitizen/conventional-commit-types
#types: |
# fix
# feat
# Configure which scopes are allowed (newline delimited).
# Append a scope for each service here
scopes: |
backend
app
lib
deps
deps-dev
docu
docker
release
workflow
other
# Configure that a scope must always be provided.
requireScope: true
# Configure which scopes (newline delimited) are disallowed in PR
# titles. For instance by setting # the value below, `chore(release):
# ...` and `ci(e2e,release): ...` will be rejected.
#disallowScopes: |
# release
# Configure additional validation for the subject based on a regex.
# This example ensures the subject doesn't start with an uppercase character.
subjectPattern: ^(?![A-Z]).+$
# If `subjectPattern` is configured, you can use this property to override
# the default error message that is shown when the pattern doesn't match.
# The variables `subject` and `title` can be used within the message.
subjectPatternError: |
The subject "{subject}" found in the pull request title "{title}"
didn't match the configured pattern. Please ensure that the subject
doesn't start with an uppercase character.
# If you use GitHub Enterprise, you can set this to the URL of your server
#githubBaseUrl: https://github.myorg.com/api/v3
# If the PR contains one of these labels (newline delimited), the
# validation is skipped.
# If you want to rerun the validation when labels change, you might want
# to use the `labeled` and `unlabeled` event triggers in your workflow.
#ignoreLabels: |
# bot
# ignore-semantic-pull-request
# If you're using a format for the PR title that differs from the traditional Conventional
# Commits spec, you can use these options to customize the parsing of the type, scope and
# subject. The `headerPattern` should contain a regex where the capturing groups in parentheses
# correspond to the parts listed in `headerPatternCorrespondence`.
# See: https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-commits-parser#headerpattern
headerPattern: '^(\w*)(?:\(([\w$.\-*/ ]*)\))?: (.*)$'
headerPatternCorrespondence: type, scope, subject
# For work-in-progress PRs you can typically use draft pull requests
# from GitHub. However, private repositories on the free plan don't have
# this option and therefore this action allows you to opt-in to using the
# special "[WIP]" prefix to indicate this state. This will avoid the
# validation of the PR title and the pull request checks remain pending.
# Note that a second check will be reported if this is enabled.
wip: true

33
.github/workflows/test.unit.lib.yml vendored Normal file
View File

@ -0,0 +1,33 @@
name: test:unit:lib
on: push
jobs:
files-changed:
name: Detect File Changes - unit - lib
runs-on: ubuntu-latest
outputs:
unit: ${{ steps.filter.outputs.unit }}
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
id: filter
with:
filters: |
unit:
- '.github/workflows/**/*'
- 'lib/**/*'
unit:
if: needs.files-changed.outputs.unit == 'true'
name: Unit - lib
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4.1.7
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v4.0.3
with:
node-version-file: '.tool-versions'
- name: Unit
run: npm install && npm run test:unit
working-directory: lib/

96
.gitignore vendored
View File

@ -1,91 +1,7 @@
# See http://help.github.com/ignore-files/ for more about ignoring files. .claude/
data/
# compiled output
/dist
/tmp
/out-tsc
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# IDEs and editors
.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# misc
.sass-cache
connect.lock
typings
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Dependency directories
node_modules/ node_modules/
jspm_packages/ cypress/node_modules/
cypress/results/
# Optional npm cache directory cypress/runner-results/
.npm cypress/screenshots/
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
# next.js build output
.next
# Lerna
lerna-debug.log
# System Files
.DS_Store
Thumbs.db

1
.tool-versions Normal file
View File

@ -0,0 +1 @@
nodejs 22.20.0

126
CLAUDE.md Normal file
View File

@ -0,0 +1,126 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
This is **Utopia Map**, a flexible collaborative mapping application for decentralized coordination and real-life networking. The project consists of three main parts:
- **`/app`**: React application (frontend) - the main Utopia Map instance
- **`/lib`**: React component library (`utopia-ui`) - reusable UI components
- **`/backend`**: Directus CMS backend configuration and Docker setup
## Development Commands
### App (Frontend)
```bash
cd app
npm install
npm run dev # Start development server
npm run build # Build for production
npm run test:lint:eslint # Run ESLint
npm run preview # Preview production build
```
### Library (utopia-ui)
```bash
cd lib
npm install
npm run build # Build library
npm run start # Build in watch mode
npm run test:lint:eslint # Run ESLint
npm run lint # Run ESLint (alias)
npm run lintfix # Auto-fix ESLint issues
npm run test:component # Run Cypress component tests
npm run test:unit # Run Vitest unit tests with coverage
npm run test:unit:dev # Run Vitest in watch mode
npm run docs:generate # Generate TypeDoc documentation
```
### Backend (Directus)
```bash
cd app
docker-compose up # Start Directus backend locally
# Sync data to/from Directus (run from backend/)
npx directus-sync pull --directus-url http://localhost:8055 --directus-email admin@it4c.dev --directus-password admin123
npx directus-sync push --directus-url http://localhost:8055 --directus-email admin@it4c.dev --directus-password admin123
```
## Architecture Overview
### High-Level Structure
**Utopia Map** is built on a **3-tier monorepo architecture**:
1. **Frontend App** (`/app`): Consumer application using `utopia-ui` components
2. **Component Library** (`/lib`): Reusable React components with TypeScript
3. **Backend** (`/backend`): Directus headless CMS with Docker configuration
### Key Design Patterns
**API Abstraction Layer**: The app uses API classes (`itemsApi`, `mapApi`, `layersApi`, etc.) that implement TypeScript interfaces to abstract backend communication. This allows swapping backends without changing components.
**Layer-Based Data Model**: Items are organized into customizable **Layers** (e.g., Places, Projects, People) where each layer defines:
- Visual styling (icons, colors, markers)
- Data structure and validation
- Custom popup and profile templates
**Component Composition**: The `UtopiaMap` component accepts child components like `<Layer>`, `<Tags>`, and `<Permissions>` to configure its behavior declaratively.
**Type-Safe APIs**: All API interactions use TypeScript interfaces (`ItemsApi<T>`, `UserApi`, `InviteApi`) ensuring type safety across the frontend-backend boundary.
### Core Components Architecture
- **`UtopiaMap`**: Main map container with Leaflet integration
- **`Layer`**: Defines item types with custom styling and behavior
- **`AppShell`**: Navigation, sidebar, and global app state management
- **`AuthProvider`**: Authentication context and user management
- **Profile Templates**: Flexible system for custom item display (`SimpleView`, `TabsView`, `OnepagerView`)
### Data Flow
1. **Items** are fetched via API classes from Directus backend
2. **Layers** define how items are displayed on the map
3. **Popups** show item previews when clicking map markers
4. **Profiles** provide detailed item views with custom templates
5. **Permissions** control CRUD operations based on user roles
### Testing Strategy
- **Unit Tests**: Vitest for lib components with coverage reporting
- **Linting**: ESLint with TypeScript rules for code quality
- **Type Checking**: TypeScript strict mode across all packages
- **End-to-End Tests**: Cypress for testing the app's UI and user flows
### Import Conventions
The lib uses path mapping for clean imports:
- `#components/*``./src/Components/*`
- `#types/*``./src/types/*`
- `#utils/*``./src/Utils/*`
- `#assets/*``./src/assets/*`
### Backend Integration
Uses **Directus** as headless CMS with:
- RESTful API for CRUD operations
- GraphQL endpoint available
- Real-time updates via WebSocket
- File/media management
- Role-based permissions
- Collection definitions in `/backend/directus-config/`
## Code Quality
- **ESLint** enforces code style across both app and lib
- **TypeScript strict mode** ensures type safety
- Pre-commit hooks run linting checks via `scripts/check-lint.sh`
- Coverage reporting for unit tests
- Automated dependency updates via `npm-check-updates`
## CSS and Styling Conventions
- **Tailwind CSS Prefix**: Always use the `tw:` prefix for all Tailwind CSS classes (e.g., `tw:flex`, `tw:bg-base-100`)
- **DaisyUI Components**: Use the `tw:` prefix for all DaisyUI component classes (e.g., `tw:btn`, `tw:card`, `tw:modal`)
- This prefix system prevents conflicts with other CSS frameworks and maintains consistent styling across the codebase

108
CODE_OF_CONDUCT.md Normal file
View File

@ -0,0 +1,108 @@
# Code of Conduct
## Purpose
Our community is dedicated to fostering an open, inclusive, and respectful environment. This Code of Conduct outlines our expectations for all participants and the steps for addressing any unacceptable behavior. By adhering to these guidelines, we can create a space where collaboration and learning thrive.
---
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Ensure that your contributions are relevant to the discussion and meeting agendas.
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of
any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Repeatedly deviating from the agenda during meetings, interrupting discussions, or monopolizing speaking time with irrelevant or incoherent contributions.
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
---
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines when determining consequences for violations of this Code of Conduct.
### 1. Correction
**Community Impact:** Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
**Consequence:** A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact:** A violation through a single incident or series of actions.
**Consequence:** A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
### 3. Temporary Ban
**Community Impact:** A serious violation of community standards, including sustained inappropriate behavior.
**Consequence:** A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact:** Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
**Consequence:** A permanent ban from any sort of public interaction within the community.
---
## Conflict Resolution Process
To address and resolve conflicts effectively, the community will follow these steps:
### Step 1: Direct Communication
If a conflict arises, the involved parties are encouraged to address the issue directly and respectfully with one another to seek resolution. This conversation should focus on the behavior or issue at hand, avoiding personal attacks or assumptions.
### Step 2: Mediation
If direct communication does not resolve the issue, either party may request mediation from a neutral community leader. The mediator will facilitate a structured conversation to help clarify misunderstandings and find common ground.
### Step 3: Formal Review
If the conflict remains unresolved, the issue will be escalated to the community leadership team for review. The leadership team will gather relevant information, including accounts from all parties involved, and make a decision based on the Code of Conduct and the communitys best interests.
### Step 4: Resolution and Follow-Up
The leadership team will communicate their decision and any actions to be taken to the involved parties. Follow-up will be conducted to ensure that the resolution is effective and that no further issues arise.
---
## Scope
This Code of Conduct applies to all community spaces, including but not limited to:
- Online forums, repositories, and communication channels.
- In-person or virtual meetings and events.
- External channels where the community is represented (e.g., social media).
---
## Reporting
If you experience or witness behavior that violates this Code of Conduct, please report it to the community leaders via [info@utopia-lab.org](mailto:info@utopia-lab.org). All reports will be handled with discretion and confidentiality.
---
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 2.1.

2
FUNDING.yaml Normal file
View File

@ -0,0 +1,2 @@
github: [utopia-os]
open_collective: utopia-project

22
GLOSSAR.md Normal file
View File

@ -0,0 +1,22 @@
# Glossar
#### Map
A geographic interactive map and an instance of the Utopia Map with its own name, its own users and [Items](#Item) in predefined [Layers](#Layer)
#### Layer
A predefined category of [Items](#Item), with predefined [Map Markers](#Map-Marker), icons, colors, texts, [Popups](#Popups) and [Profiles](#Profile)
#### Item
An item is an object whith a profile which is part of one [Layer](#Layer) and usually has a geographic position shown on the map wiht [Map Marker](#Map-Marker) and [Popup](#Popup)
#### Map Marker
A marker on a Map which shows the geographic position of an [Item](#Item)
#### Popup
A small preview of an item which opens on the map when the user clicks it's [Map Marker](#Map-Marker).
#### Profile
A representation of all the the data of an [Item](#Item)
#### Network
An initiative that aims to connect people in real life by providing their own [Map instance](#Map) to its circle

674
LICENSE Normal file
View File

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.

138
README.md
View File

@ -1,108 +1,62 @@
# Utopia UI [![npm version](https://img.shields.io/npm/v/utopia-ui.svg)](https://www.npmjs.com/package/utopia-ui) # 🌍 Utopia Map [![](https://img.shields.io/opencollective/backers/utopia-project)](https://opencollective.com/utopia-project#section-contributors) [![Join us on Telegram](https://img.shields.io/badge/Join-Telegram-blue?logo=telegram)](https://t.me/UtopiaMap)
Reuseable React Components to build mapping apps for all kinds of communities with focus of real life action, local connection and positiv impact.
Check [utopia-os.org](https://utopia-os.org) for more information The Utopia Map is a flexible collaborative app for decentralized coordination and real-life networking that can be adapted to the specific requirements of different networks. Its central element is the interactive geographical map, where users can add and manage **Items** in predefined **Layers**.
*This Library is in early alpha stage. You are very welcome to participate in the development* Utopia Map is made for networks and initiatives that aim to connect people in real life. By providing a custom instance of Utopia Map, each network can grow and coordinate its ecosystem effectively while encouraging real-world interactions and collaborations.
*A Django-based Proof of Concept can be found @ [new.docutopia.de](https://new.docutopia.de). This map can be edited freely you can register to create an account and place them on the map. The project is no longer maintained.* **Utopia Map** is based on **[Utopia UI](https://github.com/utopia-os/utopia-ui)**.
Utopia UI is a fully new approach to create a Open Source Library of JavaScript Components which should fit the needs of many different projects and communities. ## Key Features
- **Interactive Map**: The core feature is an intuitive geographical map where users can add, edit, and manage items like members, activities, and resources. Each map instance has its own identity, users, and unique configuration.
- **Customizable Layers**: Items are organized into predefined Layers, each with specific icons, colors, texts, and Map Markers. This ensures clarity and relevance for different networks.
- **Dynamic Map Markers**: Geographic position of item are indicated on the map by adaptive and customizable Map Markers
- **Popups**: Clicking a Map Marker reveals a Popup — a compact preview of the Item with its most relevant information. Define custom Popups for each of your Layers.
- **Profiles**: Each Item has a dedicated Profile that showcases all its associated data, making it easier to explore and manage. Define custom profiles for each of your Layers.
## Map UI Component ## Deployment Options
Map UI is a JavaScript Map Library to create nice and easy to use Maps
### Getting Started - **SaaS**: A hosted solution with regular updates and support for easy onboarding and maintenance.
- **Self-Hosted**: Deploy on your own infrastructure to retain full control and customization.
## Getting Started
install via npm Clone the repository and get started with the following commands:
**Start docker**
```bash ```bash
npm install utopia-ui docker compose up -d
```
**Initialize backend**
```bash
sudo chmod 777 -R ./data/
cd backend/
./push.sh
./seed.sh
```
After this the frontend is running on http://localhost:8080 and the backend on http://localhost:8055
**Start dev server**
```bash
cd app/
npm run dev
``` ```
then import in your React App ## Get your Map! 🌱 🌍
```jsx
import UtopiaMap from 'utopia-ui'
```
use the [Map UI Component](/docs/utopia-ui/map-components/map) Start mapping and growing your community ecosystem together with your custom map.
```jsx
<UtopiaMap>
height='360px'
width='100vw'
center={[51.3, 9.6]}
zoom={6}
places={places}
events={events}
tags = {tags}
</UtopiaMap>
```
You can find some Sample Data (places, events, tags) for test purpose below
### Options [Join us on Telegram](https://t.me/UtopiaMap)
## Support Utopia Map 💚
We are building Utopia Map as an free and opensource tool. To keep this project sustainable and accessible, we need financial support as well as Developrs, UX Designer, Community Managers and Content Creators.
[Join us on Telegram](https://t.me/UtopiaMap) and support us on [OpenCollective](https://opencollective.com/utopia-project)
<a href="https://opencollective.com/utopia-project">
<img width="250" src="https://opencollective.com/utopia-project/donate/button@2x.png?color=blue" style="margin-bottom:20px;" />
</a>
Option | Type | Default | Required | Description
--- | --- | --- | --- | ---
`height` | `string` |`'400px'` | No | height of the map
`width` | `string` |`'100vw'` | No | width of the map
`center` | `LatLng` |`[50.6, 9.5]` | No | initial map position
`zoom` | `number` |`10` | No | initial zoom level
`places` | [`Item[]`](https://utopia-os.org/docs/utopia-ui/map-components/item)| | No | Array with Items
`events` | [`Item[]`](https://utopia-os.org/docs/utopia-ui/map-components/item)| | No | Array with Items
`tags` | [`Tag[]`](https://utopia-os.org/docs/utopia-ui/map-components/tag) | | No | Array with Tags
### Sample Data
```jsx
const places = [{
"id": 51,
"name": "Stadtgemüse",
"text": "Stadtgemüse Fulda ist eine Gemüsegärtnerei in Maberzell, die es sich zur Aufgabe gemacht hat, die Stadt und seine Bewohner:innen mit regionalem, frischem und natürlich angebautem Gemüse mittels Gemüsekisten zu versorgen. Es gibt also jede Woche, von Frühjahr bis Herbst, angepasst an die Saison eine Kiste mit schmackhaftem und frischem Gemüse für euch, welche ihr direkt vor Ort abholen könnt. \r\n\r\nhttps://stadtgemuese-fulda.de",
"position": { "type": "Point", "coordinates": [9.632435, 50.560342] },
"tags": [9,13],
},
{
"id": 166,
"name": "Weidendom",
"text": "free camping",
"position": { "type": "Point", "coordinates": [9.438793, 50.560112] },
"tags": [10,11]
}];
const events = [
{
"id": 423,
"name": "Hackathon",
"text": "still in progress",
"position": { "type": "Point", "coordinates": [9.5, 50.62] },
"start": "2022-03-25T12:00:00",
"end": "2022-05-12T12:00:00",
"tags": [10]
}
]
const tags = [
{"id": 9, "name": "Gardening", "color": "#008e5b" },
{"id": 10, "name": "Art", "color": "#fdc60b" },
{"id": 11, "name": "Nature", "color": "#8cbb26" },
{"id": 13, "name": "Market", "color": "#2a71b0" }
]
```
## Coming Soon
* Profile UI Component
* Market UI Component
* Calendar UI Component
* Friends
* Groups
* Tags & Colors
* Gamification Elements
## Join the community
*We are looking for Web Developer, UX Designer, Community Manager, Visionaries, Artists, etc. who like to support this Vision.*
[https://t.me/utopiaOS](https://t.me/utopiaOS)

8
app/.env.dist Normal file
View File

@ -0,0 +1,8 @@
VITE_OPEN_COLLECTIVE_API_KEY=your_key
VITE_API_URL=http://localhost:8055
#VITE_API_URL=https://api.utopia-lab.org/
VITE_MAP_URL=http://local.development
#VITE_MAP_URL=CURRENT_WINDOW_LOCATION
#VITE_DIRECTUS_ADMIN_ROLE=
VITE_VALIDATE_INVITE_FLOW_ID=01d61db0-25aa-4bfa-bc24-c6a8f208a455
VITE_REDEEM_INVITE_FLOW_ID=cc80ec73-ecf5-4789-bee5-1127fb1a6ed4

3
app/.eslintignore Normal file
View File

@ -0,0 +1,3 @@
node_modules/
dist/
data/

223
app/.eslintrc.cjs Normal file
View File

@ -0,0 +1,223 @@
// eslint-disable-next-line import/no-commonjs
module.exports = {
env: {
browser: true,
es2021: true,
},
extends: [
'standard',
'eslint:recommended',
'plugin:@eslint-community/eslint-comments/recommended',
'plugin:@typescript-eslint/recommended',
'plugin:import/recommended',
'plugin:import/typescript',
// 'plugin:promise/recommended',
'plugin:security/recommended-legacy',
'plugin:react/recommended',
],
parserOptions: {
ecmaVersion: 'latest',
parser: '@typescript-eslint/parser',
sourceType: 'module',
},
plugins: [
'@typescript-eslint',
'import',
'promise',
'security',
'no-catch-all',
'react',
'react-hooks',
'react-refresh',
],
// TODO also parse this
ignorePatterns: ['vite.config.ts'],
settings: {
'import/resolver': {
typescript: true,
node: {
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
},
react: {
version: '18.2.0',
},
},
rules: {
'react-hooks/rules-of-hooks': 'error', // Checks rules of Hooks
'react-hooks/exhaustive-deps': 'warn', // Checks effect dependencies
'react/react-in-jsx-scope': 'off', // Disable requirement for React import
'no-catch-all/no-catch-all': 'error',
'no-console': 'error',
'no-debugger': 'error',
camelcase: 'error',
indent: ['error', 2],
'linebreak-style': ['error', 'unix'],
semi: ['error', 'never'],
// Optional eslint-comments rule
'@eslint-community/eslint-comments/no-unused-disable': 'error',
'@eslint-community/eslint-comments/disable-enable-pair': ['error', { allowWholeFile: true }],
// import
'import/export': 'error',
'import/no-deprecated': 'error',
'import/no-empty-named-blocks': 'error',
'import/no-extraneous-dependencies': 'error',
'import/no-mutable-exports': 'error',
'import/no-unused-modules': 'error',
'import/no-named-as-default': 'error',
'import/no-named-as-default-member': 'error',
'import/no-amd': 'error',
'import/no-commonjs': 'error',
'import/no-import-module-exports': 'error',
'import/no-nodejs-modules': 'off',
'import/unambiguous': 'off', // not compatible with scriptless vue files
'import/default': 'error',
'import/named': 'error',
'import/namespace': 'error',
'import/no-absolute-path': 'error',
'import/no-cycle': 'error',
'import/no-dynamic-require': 'error',
'import/no-internal-modules': 'off',
'import/no-relative-packages': 'error',
'import/no-relative-parent-imports': [
'error',
{
ignore: ['#[src,types,root,components,utils,assets]/*', '@/config/*'],
},
],
'import/no-self-import': 'error',
'import/no-unresolved': [
'error',
{
ignore: ['react'],
},
],
'import/no-useless-path-segments': 'error',
'import/no-webpack-loader-syntax': 'error',
'import/consistent-type-specifier-style': 'error',
'import/exports-last': 'off',
'import/extensions': [
'error',
'never',
{
json: 'always',
},
],
'import/first': 'error',
'import/group-exports': 'off',
'import/newline-after-import': 'error',
'import/no-anonymous-default-export': 'off', // todo - consider to enable again
'import/no-default-export': 'off', // incompatible with vite & vike
'import/no-duplicates': 'error',
'import/no-named-default': 'error',
'import/no-namespace': 'error',
'import/no-unassigned-import': [
'error',
{
allow: ['**/*.css'],
},
],
'import/order': [
'error',
{
groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index', 'object', 'type'],
'newlines-between': 'always',
alphabetize: {
order: 'asc', // sort in ascending order. Options: ["ignore", "asc", "desc"]
caseInsensitive: true, // ignore case. Options: [true, false]
},
distinctGroup: true,
},
],
'import/prefer-default-export': 'off',
// promise
'promise/catch-or-return': 'error',
'promise/no-return-wrap': 'error',
'promise/param-names': 'error',
'promise/always-return': 'error',
'promise/no-native': 'off',
'promise/no-nesting': 'warn',
'promise/no-promise-in-callback': 'warn',
'promise/no-callback-in-promise': 'warn',
'promise/avoid-new': 'warn',
'promise/no-new-statics': 'error',
'promise/no-return-in-finally': 'warn',
'promise/valid-params': 'warn',
'promise/prefer-await-to-callbacks': 'error',
'promise/no-multiple-resolved': 'error',
},
overrides: [
{
files: ['*.ts', '*.tsx'],
parser: '@typescript-eslint/parser',
parserOptions: {
tsconfigRootDir: __dirname,
project: ['./tsconfig.json', '**/tsconfig.json'],
ecmaVersion: 'latest',
parser: '@typescript-eslint/parser',
sourceType: 'module',
},
plugins: ['@typescript-eslint'],
extends: [
'plugin:@typescript-eslint/recommended',
'plugin:@typescript-eslint/recommended-requiring-type-checking',
'plugin:@typescript-eslint/strict',
],
rules: {
'@typescript-eslint/consistent-type-imports': 'error',
// allow explicitly defined dangling promises
'@typescript-eslint/no-floating-promises': ['error', { ignoreVoid: true }],
'no-void': ['error', { allowAsStatement: true }],
},
},
{
files: ['!*.json'],
plugins: ['prettier'],
extends: ['plugin:prettier/recommended'],
rules: {
'prettier/prettier': 'error',
},
},
{
files: ['*.json'],
plugins: ['json'],
extends: ['plugin:json/recommended-with-comments'],
},
// {
// files: ['*.{test,spec}.[tj]s'],
// plugins: ['vitest'],
// extends: ['plugin:vitest/all'],
// rules: {
// 'vitest/prefer-lowercase-title': 'off',
// 'vitest/no-hooks': 'off',
// 'vitest/consistent-test-filename': 'off',
// 'vitest/prefer-expect-assertions': [
// 'off',
// {
// onlyFunctionsWithExpectInLoop: true,
// onlyFunctionsWithExpectInCallback: true,
// },
// ],
// 'vitest/prefer-strict-equal': 'off',
// 'vitest/prefer-to-be-falsy': 'off',
// 'vitest/prefer-to-be-truthy': 'off',
// 'vitest/require-hook': [
// 'error',
// {
// allowedFunctionCalls: [
// 'mockClient.setRequestHandler',
// 'setActivePinia',
// 'provideApolloClient',
// ],
// },
// ],
// },
// },
{
files: ['*.yaml', '*.yml'],
parser: 'yaml-eslint-parser',
plugins: ['yml'],
extends: ['plugin:yml/prettier'],
},
],
}

4
app/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
node_modules/
dist/
.DS_Store
.env

14
app/.prettierrc.json Normal file
View File

@ -0,0 +1,14 @@
{
"printWidth": 100,
"tabWidth": 2,
"useTabs": false,
"semi": false,
"singleQuote": true,
"quoteProps": "as-needed",
"jsxSingleQuote": true,
"trailingComma": "all",
"bracketSpacing": true,
"bracketSameLine": false,
"arrowParens": "always",
"endOfLine": "auto"
}

11
app/README.md Normal file
View File

@ -0,0 +1,11 @@
# App
## Troubleshooting
Map doesn't load and the Error `You must define the Admin roll in the .env file!` shows in the console.
In order to get the map running you need to define the correct uuid of the admin roll in the `.env` file.
Go to http://localhost:8055 and login with the admin credentials. Navigate to http://localhost:8055/admin/settings/roles and click `Administrator` and copy the UUID from the URL.
Put this UUID in the `.env` as `VITE_DIRECTUS_ADMIN_ROLE=UUID`

22
app/index.html Normal file
View File

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, interactive-widget=resizes-visual" />
<meta name="description" content="collaborative and interactive Maps for Utopians">
<link rel="icon" type="image/png" href="/3markers-globe.svg" />
<link rel="stylesheet" type="text/css" href="/style.css" />
<title>Utopia Map</title>
</head>
<body>
<div id="root">
<div class="outer fade-in">
<img height="100" class="pulse-loader opacity" src="/3markers-globe.svg"/>
<br>
<span class="loader"></span>
</div>
</div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>

26
app/localhost-cert.pem Normal file
View File

@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEXTCCAsWgAwIBAgIQcCbPt92wSwGqEayIluO/fTANBgkqhkiG9w0BAQsFADB7
MR4wHAYDVQQKExVta2NlcnQgZGV2ZWxvcG1lbnQgQ0ExKDAmBgNVBAsMH2ZyaXR6
QGZyaXR6LVRoaW5rUGFkLVQxNHMtR2VuLTMxLzAtBgNVBAMMJm1rY2VydCBmcml0
ekBmcml0ei1UaGlua1BhZC1UMTRzLUdlbi0zMB4XDTI1MDUzMDE3NTUwMFoXDTI3
MDgzMDE3NTUwMFowUzEnMCUGA1UEChMebWtjZXJ0IGRldmVsb3BtZW50IGNlcnRp
ZmljYXRlMSgwJgYDVQQLDB9mcml0ekBmcml0ei1UaGlua1BhZC1UMTRzLUdlbi0z
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApl8YZzbT2AHZCtsVR7Er
8TNDl6EbpKsppOstbtcF7m3eRNL6C/NrgGusDYEpqimUNFkzietD/WFHjzZFiOwL
UUNlTlFud+xAhjFEpI7VMdckY0vWYNRpX5A3qZM5Mj0GnP8HJOeRvp855XpaIlR9
Nlnx8PQy7Na40MAf6dXUEnEyXHDSEasNaGpsi/csEDvWc4APzVyi22IE5yPoGJqr
gr04zgy6Vk5sorCFIxdJ1AjyNsO8TK3cP5c/AWbeG9rzD6Ue8kTNIx/C6IPVWTjz
UltRwoFYNmqNAfyMC92jsDOyNzIceA83flfij073Bux1nry6ECsCgClS4G3N+6/f
ewIDAQABo4GEMIGBMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcD
ATAfBgNVHSMEGDAWgBRK5epC4SLzleTP68biJNt6oll9xzA5BgNVHREEMjAwggls
b2NhbGhvc3SCCzE5Mi4xNjgueC54hwR/AAABhxAAAAAAAAAAAAAAAAAAAAABMA0G
CSqGSIb3DQEBCwUAA4IBgQCLTcK+MOuA99iF4aOE3iUwsuJmmcr/CLjMi3S+MqmP
LKRakqefruV2x4cpgW52Y31nH7UYUTus8FPj/FJAFF8+A1Cw/mLvamAGfcHRpeX0
CiqmOlDmfqN8x40qeckOn+ymHtjG6szWJ1Erryb2v8KkRmE/dJYCtuUKIvid+yK1
RObg8UBNf98CpzBWnNgGjIKcJOjtde9sl2d0970SJ3udPJ1Vg2iqx/7sSrFFnBi8
s7S086GJDEE7vj+3BGs+Xdvscibf9J5TUf0LzziDj7v/1xbQSdsqyhjp2oFXv44A
JZLehvqnyrQ2LxGeECitLugwWg/VabZC8OGMo15VUO4Vexx/l4SjrqVVcBP4rfs0
rjLUvxNcpyQEX6sFSBIrlA1NhQc9fH9SK1ownjiSoYKyDn/aQ1M57oQJXIm8+kVN
VUrPrqDOopsCj4uOuRhnN7Pr6R4r2JX/N9SlaYvCACIYVdlsO/ENdOamtoLXSZKF
v+MkgeYzDeqx7kJDhrLwhKY=
-----END CERTIFICATE-----

28
app/localhost-key.pem Normal file
View File

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCmXxhnNtPYAdkK
2xVHsSvxM0OXoRukqymk6y1u1wXubd5E0voL82uAa6wNgSmqKZQ0WTOJ60P9YUeP
NkWI7AtRQ2VOUW537ECGMUSkjtUx1yRjS9Zg1GlfkDepkzkyPQac/wck55G+nznl
eloiVH02WfHw9DLs1rjQwB/p1dQScTJccNIRqw1oamyL9ywQO9ZzgA/NXKLbYgTn
I+gYmquCvTjODLpWTmyisIUjF0nUCPI2w7xMrdw/lz8BZt4b2vMPpR7yRM0jH8Lo
g9VZOPNSW1HCgVg2ao0B/IwL3aOwM7I3Mhx4Dzd+V+KPTvcG7HWevLoQKwKAKVLg
bc37r997AgMBAAECggEBAJk7+TQHkbLgcNHI256+lmR//P+JifZvF9ooKh5uua3T
T+dAEsIzH46WnU+K6Z8q0LAugIPFR0f283v6Vq04C2x7kLFD22VlGkD+2+RdEgvn
xkIWtYtV2QAFyt7LFOEqyA6N7jyVdO2HpkGwIZiBDRqkWWy+3rC5TFwouLwdEEky
sPExVAYYkuDwYpb82ENz6fxR4rvfI5mMkoyI12q4UxByLd7lC6rHgCP8jpz3lpMB
dx2+eWpRH4cA/SSxn2SnpSyLIWnPaS4FmL7t6Yfd9xnp9Qm6vtiTeR+i6mOP1D9u
yjNhI/CoUBIFlxOnweGwlycR9kEiF0khzV7LKq5N55ECgYEA1eQeDs/hd7QAcmKN
lyH0ZdXXFoUpE81yZHECoQ/EZaWh+qzvRQoMusUMRZHKXewgCjuj3CygatIFX+gS
tkjz04K24p/ilGgGXUAnsc2K0N0lDhd5fTngP49AOvbpwbH1pmy1YIeWML0AvdZO
qAir+mo8WYArOBJNVsfnjYChyZcCgYEAxyAKM4D6G2k7MzlRoZ5rNifk8lYP0TZc
fISRt5g4ckGL/qLHJl0Y5EcFXdElEwO9VTNYkuRNSffttzVtR4MSpVsSOcGW+fcd
nAarlK58EZzg54LCITANEJNVFrj6zhaxKLKLfvhvuhM6hR36Th8xz+JHeSf2zEGP
lXWLxHt1rb0CgYEAshUE5aY0/foTaSke5Bc0Kdl6BFkIE2G5fWEOJFVBWrQmAdUc
PeoZISPQjNfOmpZvMrXnPvi081s7eFd7xONGhvLNHDCscI2PxvIUWphcnHuTT4FB
+H5IdALsImvTwh5N/auC9ATPinLCfExDHuphbdQnvQjWcw/h7n/wDUNs8K8CgYEA
kM4o/PlfaI2nIoIdbgXRe4mZge26BO+eZGLXwQaujdBC6UMgxjJPhrprGaWda219
wzbaw7/IwPDOazwsIyQbbCqFX4D7tP3TB4MGRdJ5oSlPmKxLVm0mIxaxexu8MCDq
Zmko7oXmYg/Xr7R0MVmYFNA+H8pDPJi0vQDFSnZpxpUCgYB2/fXHBjlBrvq41Tve
O46t0vZVcePsmLPNNE9wugT6QRuIlRGbi3PVE0PIjPG+gpfZPDGedLztMnsrm4cj
RMuCOer300/MAw/cBLEhmaX38Y/UK4oQ3y+XlvniEHcFSBhDoBFrvMqxLvYdU06X
ktmcj6c87RE7QEWnSmbpj3Oo3A==
-----END PRIVATE KEY-----

58
app/package.json Normal file
View File

@ -0,0 +1,58 @@
{
"name": "utopia-map",
"private": true,
"version": "0.0.0",
"type": "module",
"engines": {
"node": ">=22.20.0"
},
"scripts": {
"dev": "vite --host",
"build": "tsc && vite build",
"test:lint:eslint": "eslint --ext .ts,.tsx,.js,.jsx,.cjs,.mjs,.json,.yml,.yaml --max-warnings 0 .",
"preview": "vite preview"
},
"dependencies": {
"@directus/sdk": "^17.0.2",
"@heroicons/react": "^2.1.1",
"@tailwindcss/vite": "^4.1.17",
"@types/geojson": "^7946.0.10",
"axios": "^1.13.2",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-rnd": "^10.4.1",
"react-router-dom": "^6.23.0",
"vite-tsconfig-paths": "^5.1.4",
"utopia-ui": "^3.0.111"
},
"devDependencies": {
"@eslint-community/eslint-plugin-eslint-comments": "^4.4.1",
"@types/node": "^24.10.2",
"@types/react": "^18.2.79",
"@types/react-dom": "^18.2.25",
"@typescript-eslint/eslint-plugin": "^5.62.0",
"@typescript-eslint/parser": "^5.62.0",
"@vitejs/plugin-react": "^4.0.0",
"daisyui": "^5.5.5",
"eslint": "^8.24.0",
"eslint-config-prettier": "^10.1.8",
"eslint-config-standard": "^17.1.0",
"eslint-import-resolver-typescript": "^4.4.4",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-json": "^3.1.0",
"eslint-plugin-n": "^17.23.1",
"eslint-plugin-no-catch-all": "^1.1.0",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-promise": "^7.2.1",
"eslint-plugin-react": "^7.31.8",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.4.24",
"eslint-plugin-security": "^3.0.1",
"eslint-plugin-yml": "^1.14.0",
"postcss": "^8.4.30",
"tailwindcss": "^4.1.17",
"typescript": "^5.9.3",
"vite": "^7.2.7",
"vite-plugin-pwa": "^1.2.0"
}
}

View File

@ -0,0 +1,264 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="18mm"
height="16mm"
viewBox="0 0 17.999999 16.000001"
version="1.1"
id="svg119"
sodipodi:docname="3markers-globe.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs113" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="10.24"
inkscape:cx="25.927734"
inkscape:cy="34.61914"
inkscape:document-units="mm"
inkscape:current-layer="layer6"
showgrid="false"
fit-margin-right="-0.1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1013"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:pagecheckerboard="0" />
<metadata
id="metadata116">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="Ebene 4"
style="display:inline"
transform="translate(0,-4.809948)">
<path
inkscape:connector-curvature="0"
style="display:inline;fill:#aad400;stroke-width:0.26458332;fill-opacity:1"
d="m 8.5782875,9.4721385 c -2.9104166,0 -5.2916666,2.3812505 -5.2916666,5.2916675 0,2.910417 2.38125,5.291667 5.2916666,5.291667 2.9104165,0 5.2916665,-2.38125 5.2916665,-5.291667 0,-2.910417 -2.38125,-5.2916675 -5.2916665,-5.2916675 z"
id="path2" />
<path
inkscape:connector-curvature="0"
style="display:inline;fill:#31b0fd;stroke-width:0.26458332;fill-opacity:1"
d="m 14.134538,14.763806 c 0,3.095625 -2.513542,5.55625 -5.5562505,5.55625 -3.0427082,0 -5.5562499,-2.460625 -5.5562499,-5.55625 0,-3.095625 2.460625,-5.5562505 5.5562499,-5.5562505 3.0956255,0 5.5562505,2.4606255 5.5562505,5.5562505 z m -5.6091675,2.566458 c 0,-0.105833 -0.05292,-0.15875 -0.15875,-0.211666 -0.3439579,-0.105834 -0.6614579,-0.105834 -0.9524996,-0.396875 -0.052917,-0.105834 -0.052917,-0.211667 -0.1058333,-0.343959 -0.1058333,-0.105833 -0.396875,-0.15875 -0.555625,-0.211666 -0.2116667,0 -0.4497917,0 -0.714375,0 -0.1058333,0 -0.2910417,0 -0.396875,0 -0.15875,-0.05292 -0.2910417,-0.291042 -0.396875,-0.449792 0,-0.05292 0,-0.15875 -0.1058333,-0.15875 -0.1058334,-0.05292 -0.2116667,0.05292 -0.3439584,0 -0.052917,-0.05292 -0.052917,-0.105833 -0.052917,-0.15875 0,-0.15875 0.1058333,-0.343958 0.2116666,-0.449792 0.15875,-0.105833 0.3439584,0.05292 0.5027084,0.05292 0.052917,0 0.052917,0 0.1058333,0.05292 0.15875,0.05292 0.2116667,0.264583 0.2116667,0.449791 0,0.05292 0,0.105834 0,0.105834 0,0.05292 0.052917,0.05292 0.1058333,0.05292 0.052917,-0.291041 0.052917,-0.555625 0.1058333,-0.846666 0,-0.343959 0.3439584,-0.661459 0.6085417,-0.767292 0.1058333,-0.05292 0.15875,0.05292 0.2910417,0 0.3439583,-0.105833 1.1641666,-0.449792 1.0054166,-0.899583 -0.1058333,-0.396875 -0.4497916,-0.767292 -0.8995833,-0.714375 -0.1058333,0.05292 -0.15875,0.105833 -0.2645833,0.15875 -0.15875,0.105833 -0.5027084,0.449791 -0.6614584,0.449791 -0.2910416,-0.05292 -0.2910416,-0.449791 -0.2116666,-0.608541 0.052917,-0.211667 0.555625,-0.9525 0.8995833,-0.820209 0.052917,0.05292 0.15875,0.15875 0.2116667,0.211667 0.1058333,0.05292 0.2910416,0.05292 0.4497916,0.05292 0.052917,0 0.1058334,0 0.15875,-0.05292 0.052917,-0.05292 0.052917,-0.05292 0.052917,-0.105833 0,-0.15875 -0.15875,-0.343959 -0.2645833,-0.449792 -0.1058334,-0.105833 -0.2910417,-0.211667 -0.4497917,-0.291042 -0.555625,-0.15875 -1.4552083,0.05292 -1.8785417,0.449792 -0.4233333,0.396875 -0.7672916,1.058333 -1.0054166,1.613958 -0.1058334,0.343959 -0.2116667,0.767292 -0.2645834,1.164167 -0.052917,0.264583 -0.1058333,0.502708 0.052917,0.767292 0.15875,0.343958 0.5027083,0.661458 0.8466667,0.899583 0.2116666,0.15875 0.6614583,0.15875 0.8995833,0.449792 0.15875,0.211666 0.1058333,0.502708 0.1058333,0.767291 0,0.343959 0.2116667,0.608542 0.3439584,0.899584 0.052917,0.15875 0.1058333,0.396875 0.15875,0.555625 0,0.05292 0.052917,0.396875 0.052917,0.449791 0.3439584,0.15875 0.6085417,0.343959 1.0054167,0.449792 0.052917,0 0.2645833,-0.343958 0.2645833,-0.396875 0.15875,-0.15875 0.2910417,-0.396875 0.4497917,-0.502708 0.1058333,-0.05292 0.2116663,-0.105834 0.3439583,-0.211667 0.105833,-0.105833 0.15875,-0.343958 0.211667,-0.502708 0.02646,-0.132292 0.07937,-0.343959 0.02646,-0.502709 z m 0.105834,-5.132916 c 0.05292,0 0.105833,-0.05292 0.211666,-0.105834 0.15875,-0.105833 0.343959,-0.291041 0.502709,-0.396875 0.15875,-0.105833 0.343958,-0.291041 0.449791,-0.396875 0.15875,-0.105833 0.2910415,-0.343958 0.3439585,-0.502708 0.05292,-0.105833 0.211666,-0.343958 0.15875,-0.502708 -0.05292,-0.105834 -0.3439585,-0.15875 -0.4497915,-0.211667 -0.449792,-0.1058335 -0.820208,-0.1587505 -1.27,-0.1587505 -0.15875,0 -0.396875,0.05292 -0.449792,0.2116675 -0.05292,0.291041 0.15875,0.211666 0.396875,0.291041 0,0 0.05292,0.449792 0.05292,0.502709 0.05292,0.264583 -0.105833,0.449791 -0.105833,0.714375 0,0.15875 0,0.449791 0.105833,0.555625 z m 4.6566665,3.889375 c 0.05292,-0.105834 0.05292,-0.291042 0.105833,-0.396875 0.05292,-0.264584 0.05292,-0.555625 0.05292,-0.820209 0,-0.555625 -0.05292,-1.11125 -0.211666,-1.613958 -0.105834,-0.15875 -0.15875,-0.343958 -0.211667,-0.502708 -0.105833,-0.291042 -0.264583,-0.555625 -0.502708,-0.767292 -0.211667,-0.291042 -0.502709,-1.058333 -1.005417,-0.820208 -0.15875,0.05292 -0.264583,0.264583 -0.396875,0.396875 -0.105833,0.15875 -0.211667,0.343958 -0.343959,0.502708 -0.05292,0.05292 -0.105833,0.15875 -0.05292,0.211667 0,0.05292 0.05292,0.05292 0.105834,0.05292 0.105833,0.05292 0.15875,0.05292 0.264583,0.105834 0.05292,0 0.105834,0.05292 0.05292,0.105833 0,0 0,0.05292 -0.05292,0.05292 -0.264583,0.291041 -0.555625,0.502708 -0.820208,0.767291 -0.05292,0.05292 -0.105834,0.15875 -0.105834,0.211667 0,0.05292 0.05292,0.05292 0.05292,0.105833 0,0.05292 -0.05292,0.05292 -0.105833,0.105834 -0.105832,0.05292 -0.2116665,0.105833 -0.2910415,0.15875 -0.05292,0.105833 0,0.291041 -0.05292,0.396875 -0.05292,0.291041 -0.211666,0.502708 -0.343958,0.767291 -0.105833,0.15875 -0.15875,0.343959 -0.264583,0.502709 0,0.211666 -0.05292,0.396875 0.05292,0.555625 0.264583,0.396875 0.767291,0.15875 1.1641655,0.343958 0.105834,0.05292 0.211667,0.05292 0.291042,0.15875 0.15875,0.15875 0.15875,0.449792 0.211667,0.608542 0.05292,0.211666 0.105833,0.449791 0.211667,0.661458 0.05292,0.264583 0.15875,0.555625 0.211666,0.767292 0.502709,-0.396875 0.9525,-0.820209 1.27,-1.375834 0.396875,-0.343958 0.555625,-0.79375 0.714375,-1.243541 z"
id="path4" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Ebene 2"
style="display:inline"
transform="translate(4.6675853,46.091266)">
<g
id="g89"
transform="rotate(-34.618495,35.488753,-41.431433)">
<g
id="g356"
font-style="normal"
font-weight="400"
font-size="10"
transform="matrix(0.1012137,-0.03262355,0.01210909,0.10427296,3.1730944,-59.40221)"
stroke-miterlimit="2"
style="font-style:normal;font-weight:400;font-size:10px;font-family:Ubuntu;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:2;stroke-opacity:1">
<image
id="image354"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAQCAYAAACcN8ZaAAAACXBIWXMAAA9hAAAPYQGoP6dpAAABoUlEQVRIic2Vy3LCMAxFD2lS6Gtg0f//x0JoEwKmC98LqklCZ7qpZjSynYdOrmQH/pEtJtarYlxNrM89V1oaiSnMR2Gq4HVwry0m4OZgnPAInBUPikdfd5LyhTXwKF8CK+ChgIrPTSl8DjBJAINiBXQBMtUzIC/Aq+JKa02AmAIwRCzDSQl7uQFqRdCktErJ34A1sBFQU8DYUhi7BGeyAkfFgdteORfP3sBYmaUANsA7WSErU4L4pafgA7msveYprLtM7plLE48pY6gl8CyQNfCkBLaY3Ar0Gp/I/fAFfAJ7je2dYBLXMt30jEHsDblk7ptGShjAfeAvPyh5B2wDyF5rPSO7aE6ZSAvXrdzofpfGQBFgB7SaO1qNsjRwp2cM4i+OsrqffK3VtZ08wrg8VsIl+XHIlVaPXHT9nWgrVQYBHZS4lRugJ5ej1b1dUOHSF3rHKNCYMj6cdlxP3J7cwGhsGAO7DLM9MTKehfHNhnFJPsi7K4WvngOYTDhnU1v7yPWoTuT6+1fgph3COPGLnrhnUz/KCFuHseGiAnHn/cm+AU9X31BIhxprAAAAAElFTkSuQmCC"
preserveAspectRatio="none"
height="16"
width="35"
y="-6.5234251"
x="3.2418795"
transform="rotate(32.792589)" />
</g>
<g
id="g522"
font-style="normal"
font-weight="400"
font-size="10"
transform="matrix(0.13120595,0,0,0.13120595,2.0117562,-64.499292)"
style="font-style:normal;font-weight:400;font-size:10px;font-family:Ubuntu;display:inline;fill:#c4037d;fill-opacity:1;stroke:none">
<path
id="path520"
d="M 28.205,3.217 H 6.777 c -2.367,0 -4.286,1.87 -4.286,4.179 v 19.847 c 0,2.308 1.919,4.179 4.286,4.179 h 5.357 l 5.337,13.58 5.377,-13.58 h 5.357 c 2.366,0 4.285,-1.87 4.285,-4.179 V 7.396 c 0,-2.308 -1.919,-4.179 -4.285,-4.179"
inkscape:connector-curvature="0"
style="vector-effect:none;fill-rule:nonzero" />
</g>
<g
id="g550"
font-style="normal"
font-weight="400"
font-size="10"
transform="matrix(0.13915785,0,0,0.13915785,1.8725982,-64.608673)"
style="font-style:normal;font-weight:400;font-size:10px;font-family:Ubuntu;display:inline;fill:#ffffff;fill-opacity:1;stroke:none">
<path
id="path548"
d="m 11.875,22.4375 c 0,0.3646 0.1276,0.6745 0.3828,0.9297 0.2552,0.2552 0.5651,0.3828 0.9297,0.3828 h 9.625 c 0.3646,0 0.6745,-0.1276 0.9297,-0.3828 0.2552,-0.2552 0.3828,-0.5651 0.3828,-0.9297 V 15 h -12.25 v 7.4375 m 8.75,-5.3594 c 0,-0.0937 0.0313,-0.1718 0.0938,-0.2343 0.0625,-0.0625 0.1406,-0.0938 0.2343,-0.0938 h 1.0938 c 0.0937,0 0.1719,0.0313 0.2344,0.0938 0.0625,0.0625 0.0937,0.1406 0.0937,0.2343 v 1.0938 c 0,0.0937 -0.0312,0.1719 -0.0937,0.2344 C 22.2188,18.4688 22.1406,18.5 22.0469,18.5 h -1.0938 c -0.0937,0 -0.1718,-0.0312 -0.2343,-0.0937 -0.0625,-0.0625 -0.0938,-0.1407 -0.0938,-0.2344 v -1.0938 m 0,3.5 c 0,-0.0937 0.0313,-0.1718 0.0938,-0.2343 0.0625,-0.0625 0.1406,-0.0938 0.2343,-0.0938 h 1.0938 c 0.0937,0 0.1719,0.0313 0.2344,0.0938 0.0625,0.0625 0.0937,0.1406 0.0937,0.2343 v 1.0938 c 0,0.0937 -0.0312,0.1719 -0.0937,0.2344 C 22.2188,21.9688 22.1406,22 22.0469,22 H 20.9531 C 20.8594,22 20.7813,21.9688 20.7188,21.9063 20.6563,21.8438 20.625,21.7656 20.625,21.6719 v -1.0938 m -3.5,-3.5 c 0,-0.0937 0.0313,-0.1718 0.0938,-0.2343 0.0625,-0.0625 0.1406,-0.0938 0.2343,-0.0938 h 1.0938 c 0.0937,0 0.1719,0.0313 0.2344,0.0938 0.0625,0.0625 0.0937,0.1406 0.0937,0.2343 v 1.0938 c 0,0.0937 -0.0312,0.1719 -0.0937,0.2344 C 18.7188,18.4688 18.6406,18.5 18.5469,18.5 h -1.0938 c -0.0937,0 -0.1718,-0.0312 -0.2343,-0.0937 -0.0625,-0.0625 -0.0938,-0.1407 -0.0938,-0.2344 v -1.0938 m 0,3.5 c 0,-0.0937 0.0313,-0.1718 0.0938,-0.2343 0.0625,-0.0625 0.1406,-0.0938 0.2343,-0.0938 h 1.0938 c 0.0937,0 0.1719,0.0313 0.2344,0.0938 0.0625,0.0625 0.0937,0.1406 0.0937,0.2343 v 1.0938 c 0,0.0937 -0.0312,0.1719 -0.0937,0.2344 C 18.7188,21.9688 18.6406,22 18.5469,22 H 17.4531 C 17.3594,22 17.2813,21.9688 17.2188,21.9063 17.1563,21.8438 17.125,21.7656 17.125,21.6719 v -1.0938 m -3.5,-3.5 c 0,-0.0937 0.0313,-0.1718 0.0938,-0.2343 0.0625,-0.0625 0.1406,-0.0938 0.2343,-0.0938 h 1.0938 c 0.0937,0 0.1719,0.0313 0.2344,0.0938 0.0625,0.0625 0.0937,0.1406 0.0937,0.2343 v 1.0938 c 0,0.0937 -0.0312,0.1719 -0.0937,0.2344 C 15.2188,18.4688 15.1406,18.5 15.0469,18.5 h -1.0938 c -0.0937,0 -0.1718,-0.0312 -0.2343,-0.0937 -0.0625,-0.0625 -0.0938,-0.1407 -0.0938,-0.2344 v -1.0938 m 0,3.5 c 0,-0.0937 0.0313,-0.1718 0.0938,-0.2343 0.0625,-0.0625 0.1406,-0.0938 0.2343,-0.0938 h 1.0938 c 0.0937,0 0.1719,0.0313 0.2344,0.0938 0.0625,0.0625 0.0937,0.1406 0.0937,0.2343 v 1.0938 c 0,0.0937 -0.0312,0.1719 -0.0937,0.2344 C 15.2188,21.9688 15.1406,22 15.0469,22 H 13.9531 C 13.8594,22 13.7813,21.9688 13.7188,21.9063 13.6563,21.8438 13.625,21.7656 13.625,21.6719 V 20.5781 M 22.8125,11.5 H 21.5 V 10.1875 C 21.5,10.0625 21.4583,9.95833 21.375,9.875 21.2917,9.79167 21.1875,9.75 21.0625,9.75 h -0.875 c -0.125,0 -0.2292,0.04167 -0.3125,0.125 -0.0833,0.08333 -0.125,0.1875 -0.125,0.3125 V 11.5 h -3.5 V 10.1875 C 16.25,10.0625 16.2083,9.95833 16.125,9.875 16.0417,9.79167 15.9375,9.75 15.8125,9.75 h -0.875 c -0.125,0 -0.2292,0.04167 -0.3125,0.125 C 14.5417,9.95833 14.5,10.0625 14.5,10.1875 V 11.5 h -1.3125 c -0.3646,0 -0.6745,0.1276 -0.9297,0.3828 -0.2552,0.2552 -0.3828,0.5651 -0.3828,0.9297 v 1.3125 h 12.25 v -1.3125 c 0,-0.3646 -0.1276,-0.6745 -0.3828,-0.9297 C 23.487,11.6276 23.1771,11.5 22.8125,11.5"
inkscape:connector-curvature="0"
style="vector-effect:none;fill-rule:nonzero" />
</g>
<g
id="g356-3"
font-style="normal"
font-weight="400"
font-size="10"
transform="matrix(0.1012137,-0.03262355,0.01210909,0.10427296,8.1741435,-58.851786)"
stroke-miterlimit="2"
style="font-style:normal;font-weight:400;font-size:10px;font-family:Ubuntu;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:2;stroke-opacity:1">
<image
id="image354-6"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAQCAYAAACcN8ZaAAAACXBIWXMAAA9hAAAPYQGoP6dpAAABoUlEQVRIic2Vy3LCMAxFD2lS6Gtg0f//x0JoEwKmC98LqklCZ7qpZjSynYdOrmQH/pEtJtarYlxNrM89V1oaiSnMR2Gq4HVwry0m4OZgnPAInBUPikdfd5LyhTXwKF8CK+ChgIrPTSl8DjBJAINiBXQBMtUzIC/Aq+JKa02AmAIwRCzDSQl7uQFqRdCktErJ34A1sBFQU8DYUhi7BGeyAkfFgdteORfP3sBYmaUANsA7WSErU4L4pafgA7msveYprLtM7plLE48pY6gl8CyQNfCkBLaY3Ar0Gp/I/fAFfAJ7je2dYBLXMt30jEHsDblk7ptGShjAfeAvPyh5B2wDyF5rPSO7aE6ZSAvXrdzofpfGQBFgB7SaO1qNsjRwp2cM4i+OsrqffK3VtZ08wrg8VsIl+XHIlVaPXHT9nWgrVQYBHZS4lRugJ5ej1b1dUOHSF3rHKNCYMj6cdlxP3J7cwGhsGAO7DLM9MTKehfHNhnFJPsi7K4WvngOYTDhnU1v7yPWoTuT6+1fgph3COPGLnrhnUz/KCFuHseGiAnHn/cm+AU9X31BIhxprAAAAAElFTkSuQmCC"
preserveAspectRatio="none"
height="13.833991"
width="32.70261"
y="-4.4695668"
x="2.8086059"
transform="matrix(0.82962222,0.55832515,-0.5232806,0.85216044,0,0)" />
</g>
<g
id="g356-3-7"
font-style="normal"
font-weight="400"
font-size="10"
transform="matrix(0.1012137,-0.03262355,0.01210909,0.10427296,10.119996,-55.735617)"
stroke-miterlimit="2"
style="font-style:normal;font-weight:400;font-size:10px;font-family:Ubuntu;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:2;stroke-opacity:1">
<image
id="image354-6-5"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAQCAYAAACcN8ZaAAAACXBIWXMAAA9hAAAPYQGoP6dpAAABoUlEQVRIic2Vy3LCMAxFD2lS6Gtg0f//x0JoEwKmC98LqklCZ7qpZjSynYdOrmQH/pEtJtarYlxNrM89V1oaiSnMR2Gq4HVwry0m4OZgnPAInBUPikdfd5LyhTXwKF8CK+ChgIrPTSl8DjBJAINiBXQBMtUzIC/Aq+JKa02AmAIwRCzDSQl7uQFqRdCktErJ34A1sBFQU8DYUhi7BGeyAkfFgdteORfP3sBYmaUANsA7WSErU4L4pafgA7msveYprLtM7plLE48pY6gl8CyQNfCkBLaY3Ar0Gp/I/fAFfAJ7je2dYBLXMt30jEHsDblk7ptGShjAfeAvPyh5B2wDyF5rPSO7aE6ZSAvXrdzofpfGQBFgB7SaO1qNsjRwp2cM4i+OsrqffK3VtZ08wrg8VsIl+XHIlVaPXHT9nWgrVQYBHZS4lRugJ5ej1b1dUOHSF3rHKNCYMj6cdlxP3J7cwGhsGAO7DLM9MTKehfHNhnFJPsi7K4WvngOYTDhnU1v7yPWoTuT6+1fgph3COPGLnrhnUz/KCFuHseGiAnHn/cm+AU9X31BIhxprAAAAAElFTkSuQmCC"
preserveAspectRatio="none"
height="16"
width="35"
y="-2.0808461"
x="2.1253965"
transform="rotate(32.792589)" />
</g>
</g>
</g>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-58.269337,-115.53478)"
style="display:inline">
<g
id="g109"
transform="rotate(-1.1556361,1155.3307,302.61847)">
<g
style="font-style:normal;font-weight:400;font-size:10px;font-family:Ubuntu;fill:#e87520;fill-opacity:1;stroke:none"
transform="matrix(0.13120595,0,0,0.13120595,69.079628,93.634241)"
font-size="10"
font-weight="400"
font-style="normal"
id="g6701">
<path
style="vector-effect:none;fill-rule:nonzero"
inkscape:connector-curvature="0"
d="M 28.205,3.217 H 6.777 c -2.367,0 -4.286,1.87 -4.286,4.179 v 19.847 c 0,2.308 1.919,4.179 4.286,4.179 h 5.357 l 5.337,13.58 5.377,-13.58 h 5.357 c 2.366,0 4.285,-1.87 4.285,-4.179 V 7.396 c 0,-2.308 -1.919,-4.179 -4.285,-4.179"
id="path6699" />
</g>
<g
style="font-style:normal;font-weight:400;font-size:10px;font-family:Ubuntu;fill:#231f20;fill-opacity:0.2;stroke:none"
transform="matrix(0.14057447,0,0,-0.14057447,38.479791,112.89298)"
font-size="10"
font-weight="400"
font-style="normal"
id="g6709">
<path
style="vector-effect:none;fill-rule:nonzero"
inkscape:connector-curvature="0"
d="m 244,134 h -20 c -2.209,0 -4,-1.746 -4,-3.9 v -18.525 c 0,-2.154 1.791,-3.9 4,-3.9 h 5 L 233.982,95 239,107.675 h 5 c 2.209,0 4,1.746 4,3.9 V 130.1 c 0,2.154 -1.791,3.9 -4,3.9 m 0,-1 c 1.654,0 3,-1.301 3,-2.9 v -18.525 c 0,-1.599 -1.346,-2.9 -3,-2.9 h -5.68 l -0.25,-0.632 -4.084,-10.318 -4.055,10.316 -0.249,0.634 H 224 c -1.654,0 -3,1.301 -3,2.9 V 130.1 c 0,1.599 1.346,2.9 3,2.9 h 20"
id="path6707" />
</g>
<g
style="font-style:normal;font-weight:400;font-size:10px;font-family:Ubuntu;fill:#ffffff;fill-opacity:1;stroke:none"
transform="matrix(0.13915785,0,0,0.13915785,68.702265,93.556608)"
font-size="10"
font-weight="400"
font-style="normal"
id="g6729">
<path
style="vector-effect:none;fill-rule:nonzero"
inkscape:connector-curvature="0"
d="m 18.364194,16.757346 c 0.6354,0 1.224,-0.1562 1.7656,-0.4687 0.5417,-0.3125 0.9662,-0.737 1.2735,-1.2735 0.3073,-0.5364 0.4609,-1.1224 0.4609,-1.7578 0,-0.6354 -0.1536,-1.224 -0.4609,-1.7656 -0.3073,-0.5417 -0.7318,-0.9662 -1.2735,-1.2735 -0.5416,-0.3072494 -1.1302,-0.4608994 -1.7656,-0.4608994 -0.6354,0 -1.2214,0.15365 -1.7578,0.4608994 -0.5365,0.3073 -0.9609,0.7318 -1.2734,1.2735 -0.3125,0.5416 -0.4688,1.1302 -0.4688,1.7656 0,0.6354 0.1563,1.2214 0.4688,1.7578 0.3125,0.5365 0.7369,0.961 1.2734,1.2735 0.5364,0.3125 1.1224,0.4687 1.7578,0.4687 m 2.4688,0.875 h -0.4688 c -0.6354,0.2917 -1.2995,0.4375 -1.9922,0.4375 -0.6927,0 -1.362,-0.1458 -2.0078,-0.4375 h -0.4531 c -0.6563,0 -1.2683,0.1641 -1.836,0.4922 -0.5677,0.3281 -1.0156,0.7734 -1.3437,1.3359 -0.3281,0.5625 -0.4922,1.1719 -0.4922,1.8282 v 1.1562 c 0,0.3646 0.1276,0.6745 0.3828,0.9297 0.2552,0.2552 0.5651,0.3828 0.9297,0.3828 h 9.625 c 0.3646,0 0.6745,-0.1276 0.9297,-0.3828 0.2552,-0.2552 0.3828,-0.5651 0.3828,-0.9297 v -1.1562 c 0,-0.6563 -0.1641,-1.2657 -0.4922,-1.8282 -0.3281,-0.5625 -0.7734,-1.0078 -1.3359,-1.3359 -0.5625,-0.3281 -1.1719,-0.4922 -1.8281,-0.4922"
id="path6727" />
</g>
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer6"
inkscape:label="Ebene 3"
style="display:inline"
transform="translate(4.6675853,46.091266)">
<g
id="g99"
transform="rotate(58.747582,-19.440046,-29.612246)">
<g
id="g678"
font-style="normal"
font-weight="400"
font-size="10"
transform="matrix(0.12723008,0,0,0.12723008,-15.000979,-62.923636)"
style="font-style:normal;font-weight:400;font-size:10px;font-family:Ubuntu;display:inline;fill:#008e5b;fill-opacity:1;stroke:none">
<path
id="path676"
d="m 17.5,2.746 c -8.284,0 -15,6.853 -15,15.307 0,0.963 0.098,1.902 0.265,2.816 0.36664,2.0268 1.13579,3.9595 2.262,5.684 l 0.134,0.193 12.295,17.785 12.439,-17.863 0.056,-0.08 c 1.2093,-1.8462 2.0083,-3.9305 2.343,-6.112 0.123,-0.791 0.206,-1.597 0.206,-2.423 0,-8.454 -6.716,-15.307 -15,-15.307"
inkscape:connector-curvature="0"
style="vector-effect:none;fill-rule:nonzero" />
</g>
<g
id="g684"
font-style="normal"
font-weight="400"
font-size="10"
transform="matrix(0.12723008,0,0,0.12723008,-15.000979,-62.923636)"
style="font-style:normal;font-weight:400;font-size:10px;font-family:Ubuntu;display:inline;fill:#2a71b0;fill-opacity:1;stroke:none">
<path
id="path682"
d="m 17.488,2.748 c -8.284,0 -15,6.853 -15,15.307 0,0.963 0.098,1.902 0.265,2.816 0.36664,2.0268 1.13579,3.9595 2.262,5.684 l 0.134,0.193 12.295,17.785 12.44,-17.863 0.055,-0.08 c 1.2093,-1.8462 2.0083,-3.9305 2.343,-6.112 0.124,-0.791 0.206,-1.597 0.206,-2.423 0,-8.454 -6.716,-15.307 -15,-15.307 m 0,1.071 c 7.68,0 13.929,6.386 13.929,14.236 0,0.685 -0.064,1.423 -0.193,2.258 -0.325,2.075 -1.059,3.99 -2.164,5.667 L 29.005,26.058 17.448,42.653 6.032,26.14 5.912,25.966 C 4.86177,24.3621 4.14583,22.5629 3.807,20.676 3.64649,19.8118 3.56383,18.935 3.56,18.056 3.56,10.205 9.809,3.819 17.488,3.819"
inkscape:connector-curvature="0"
style="vector-effect:none;fill-rule:nonzero;fill:#008000" />
</g>
<g
id="g702"
font-style="normal"
font-weight="400"
font-size="10"
transform="matrix(0.13915785,0,0,0.13915785,-15.279297,-63.122493)"
style="font-style:normal;font-weight:400;font-size:10px;font-family:Ubuntu;display:inline;fill:#ffffff;fill-opacity:1;stroke:none">
<path
id="path700"
d="m 18,9.96875 c -1.2187,0 -2.349,0.30465 -3.3906,0.91405 -1.0417,0.6094 -1.8672,1.4349 -2.4766,2.4766 -0.6094,1.0416 -0.914,2.1719 -0.914,3.3906 0,1.2188 0.3046,2.349 0.914,3.3906 0.6094,1.0417 1.4349,1.8672 2.4766,2.4766 1.0416,0.6094 2.1719,0.9141 3.3906,0.9141 1.2188,0 2.349,-0.3047 3.3906,-0.9141 1.0417,-0.6094 1.8672,-1.4349 2.4766,-2.4766 0.6094,-1.0416 0.9141,-2.1718 0.9141,-3.3906 0,-1.2187 -0.3047,-2.349 -0.9141,-3.3906 C 23.2578,12.3177 22.4323,11.4922 21.3906,10.8828 20.349,10.2734 19.2188,9.96875 18,9.96875"
inkscape:connector-curvature="0"
style="vector-effect:none;fill-rule:nonzero" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

BIN
app/public/bg1.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 682 KiB

14
app/public/github.svg Normal file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" fill="currentColor" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Dribbble-Light-Preview" transform="translate(-140.000000, -7559.000000)" fill="currentColor">
<g id="icons" transform="translate(56.000000, 160.000000)">
<path d="M94,7399 C99.523,7399 104,7403.59 104,7409.253 C104,7413.782 101.138,7417.624 97.167,7418.981 C96.66,7419.082 96.48,7418.762 96.48,7418.489 C96.48,7418.151 96.492,7417.047 96.492,7415.675 C96.492,7414.719 96.172,7414.095 95.813,7413.777 C98.04,7413.523 100.38,7412.656 100.38,7408.718 C100.38,7407.598 99.992,7406.684 99.35,7405.966 C99.454,7405.707 99.797,7404.664 99.252,7403.252 C99.252,7403.252 98.414,7402.977 96.505,7404.303 C95.706,7404.076 94.85,7403.962 94,7403.958 C93.15,7403.962 92.295,7404.076 91.497,7404.303 C89.586,7402.977 88.746,7403.252 88.746,7403.252 C88.203,7404.664 88.546,7405.707 88.649,7405.966 C88.01,7406.684 87.619,7407.598 87.619,7408.718 C87.619,7412.646 89.954,7413.526 92.175,7413.785 C91.889,7414.041 91.63,7414.493 91.54,7415.156 C90.97,7415.418 89.522,7415.871 88.63,7414.304 C88.63,7414.304 88.101,7413.319 87.097,7413.247 C87.097,7413.247 86.122,7413.234 87.029,7413.87 C87.029,7413.87 87.684,7414.185 88.139,7415.37 C88.139,7415.37 88.726,7417.2 91.508,7416.58 C91.513,7417.437 91.522,7418.245 91.522,7418.489 C91.522,7418.76 91.338,7419.077 90.839,7418.982 C86.865,7417.627 84,7413.783 84,7409.253 C84,7403.59 88.478,7399 94,7399" id="github-[#142]">
</path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-opencollective" viewBox="0 0 16 16">
<path fill-opacity=".4" d="M12.995 8.195c0 .937-.312 1.912-.78 2.693l1.99 1.99c.976-1.327 1.6-2.966 1.6-4.683 0-1.795-.624-3.434-1.561-4.76l-2.068 2.028c.468.781.78 1.679.78 2.732h.04Z"/>
<path d="M8 13.151a4.995 4.995 0 1 1 0-9.99c1.015 0 1.951.273 2.732.82l1.95-2.03a7.805 7.805 0 1 0 .04 12.449l-1.951-2.03a5.072 5.072 0 0 1-2.732.781H8Z"/>
</svg>

After

Width:  |  Height:  |  Size: 487 B

111
app/public/style.css Normal file
View File

@ -0,0 +1,111 @@
body {
height: 100vh;
overflow: hidden;
}
#root {
width: 100%;
height: 100%;
}
.pulse-loader {
animation: pulse 2.5s infinite ease-in-out;
}
@keyframes pulse {
30% {
transform: scale(1);
}
50% {
transform: scale(1.1);
}
70% {
transform: scale(1);
}
}
.loader {
width: 10px;
height: 10px;
border-radius: 50%;
display: block;
margin: 15px auto;
position: relative;
color: #FFF;
left: -120px;
box-sizing: border-box;
animation: shadowRolling 2s linear infinite;
}
@keyframes shadowRolling {
0% {
box-shadow: 0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0);
}
12% {
box-shadow: 100px 0 lightgray, 0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0);
}
25% {
box-shadow: 110px 0 lightgray, 100px 0 lightgray, 0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0);
}
36% {
box-shadow: 120px 0 lightgray, 110px 0 lightgray, 100px 0 lightgray, 0px 0 rgba(255, 255, 255, 0);
}
50% {
box-shadow: 130px 0 lightgray, 120px 0 lightgray, 110px 0 lightgray, 100px 0 lightgray;
}
62% {
box-shadow: 200px 0 rgba(255, 255, 255, 0), 130px 0 lightgray, 120px 0 lightgray, 110px 0 lightgray;
}
75% {
box-shadow: 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0), 130px 0 lightgray, 120px 0 lightgray;
}
87% {
box-shadow: 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0), 130px 0 lightgray;
}
100% {
box-shadow: 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0);
}
}
.opacity {
opacity: 0.8;
}
.outer {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center; /* Zentriert die Items horizontal */
justify-content: center; /* Zentriert die Items vertikal */}
.inner {
height: 96px;
color: lightgray;
display: grid;
place-items: center;
}
@keyframes fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.fade-in {
animation: fade-in 1.5s ease-in;
}

41
app/src/App.css Normal file
View File

@ -0,0 +1,41 @@
html, body, #root {
margin: 0;
padding: 0;
height: 100%;
overflow: hidden;
}
.App {
width: 100vw;
height: 100dvh;
overflow: hidden;
}
#app-content {
height: 100%;
}
.fadeable-div {
transition: opacity 1000ms ease;
opacity: 1;
}
.div-hidden {
opacity: 0;
}
.movable-div {
transition: transform 600ms ease;
transform: translateX(0);
}
.move-out-right {
transform: translateX(100vw);
/* Verschiebt das Div um die Breite des Viewports */
}
.move-out-left {
transform: translateX(-100vw);
/* Verschiebt das Div um die Breite des Viewports */
}

344
app/src/App.tsx Normal file
View File

@ -0,0 +1,344 @@
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
/* eslint-disable @typescript-eslint/no-non-null-assertion */
/* eslint-disable import/order */
/* eslint-disable eqeqeq */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
/* eslint-disable react-hooks/exhaustive-deps */
/* eslint-disable @typescript-eslint/no-floating-promises */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable new-cap */
/* eslint-disable @typescript-eslint/prefer-optional-chain */
/* eslint-disable @typescript-eslint/restrict-plus-operands */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-call */
import type { Tag, LayerProps } from 'utopia-ui'
import {
AppShell,
SideBar,
Content,
AuthProvider,
Modal,
InvitePage,
LoginPage,
SignupPage,
Quests,
RequestPasswordPage,
SetNewPasswordPage,
OverlayItemsIndexPage,
Permissions,
Tags,
SelectUser,
AttestationForm,
MarketView,
SVG,
LoadingMapOverlay,
ProfileForm,
ProfileView,
UserSettings,
} from 'utopia-ui'
import { Route, Routes } from 'react-router-dom'
import './App.css'
import { Suspense, useEffect, useState } from 'react'
import { assetsApi } from './api/assetsApi'
import { itemsApi } from './api/itemsApi'
import { layersApi } from './api/layersApi'
import { mapApi } from './api/mapApi'
import { permissionsApi } from './api/permissionsApi'
import { UserApi } from './api/userApi'
import { ModalContent } from './ModalContent'
import { Landingpage } from './pages/Landingpage'
import MapContainer from './pages/MapContainer'
import { getBottomRoutes, routes } from './routes/sidebar'
import { config } from './config'
import { InviteApi } from './api/inviteApi'
import { MapPinIcon } from '@heroicons/react/24/solid'
const userApi = new UserApi()
const inviteApi = new InviteApi(userApi)
function App() {
const [permissionsApiInstance, setPermissionsApiInstance] = useState<permissionsApi>()
const [tagsApi, setTagsApi] = useState<itemsApi<Tag>>()
const [mapApiInstance, setMapApiInstance] = useState<mapApi>()
const [layersApiInstance, setLayersApiInstance] = useState<layersApi>()
const [attestationApi, setAttestationApi] = useState<itemsApi<any>>()
const [map, setMap] = useState<any>()
const [layers, setLayers] = useState<any>()
const [layerPageRoutes, setLayerPageRoutes] = useState<any>()
const [loading, setLoading] = useState<boolean>(true)
const [error, setError] = useState<string | null>(null)
const retryConnection = () => {
setError(null)
setLoading(true)
if (mapApiInstance) {
getMap()
}
}
const [embedded, setEmbedded] = useState<boolean>(true)
useEffect(() => {
const params = new URLSearchParams(location.search)
const embedded = params.get('embedded')
embedded !== 'true' && setEmbedded(false)
}, [location])
useEffect(() => {
setPermissionsApiInstance(new permissionsApi())
// TODO: it should be mapId instead of mapUrl, which then in turn can be an URL
const mapUrl =
config.mapUrl === 'CURRENT_WINDOW_LOCATION' ? window.location.origin : config.mapUrl
setMapApiInstance(new mapApi(mapUrl))
setAttestationApi(new itemsApi<any>('attestations'))
}, [])
useEffect(() => {
mapApiInstance && getMap()
}, [mapApiInstance])
const getMap = async () => {
try {
const map = await mapApiInstance?.getItems()
map && setMap(map)
map && map != 'null' && setLayersApiInstance(new layersApi(map.id))
map && map != 'null' && map.own_tag_space
? setTagsApi(new itemsApi<Tag>('tags', undefined, map.id))
: setTagsApi(new itemsApi<Tag>('tags'))
// eslint-disable-next-line no-catch-all/no-catch-all
} catch (error: any) {
// eslint-disable-next-line no-console
console.error('Failed to load map:', error)
setError(
typeof error === 'string'
? error
: (error?.errors?.length > 0 ? error.errors[0]?.message : null) ||
error?.message ||
'Failed to connect to the server. Please check your connection and try again.',
)
setLoading(false)
// Don't rethrow since we're handling the error by setting error state
}
}
useEffect(() => {
layersApiInstance && getLayers()
}, [layersApiInstance])
const getLayers = async () => {
try {
const layers = await layersApiInstance?.getItems()
layers && setLayers(layers)
setLayerPageRoutes(
layers
?.filter((l: LayerProps) => l.listed)
.map((l: LayerProps) => ({
path: '/' + l.name, // url
icon: l.markerIcon?.image ? (
<SVG
src={`${config.apiUrl}/assets/${l.markerIcon.image_outline ?? l.markerIcon.image}`}
style={{
width: `${(l.markerIcon.size ?? 18) * 1.3}px`,
height: `${(l.markerIcon.size ?? 18) * 1.3}px`,
}}
preProcessor={(code: string) =>
code.replace(/stroke=".*?"/g, 'stroke="currentColor"')
}
/>
) : (
<MapPinIcon className='tw:w-6 tw:h-6' />
),
name: l.name, // name that appear in Sidebar
color: l.menuColor,
})),
)
// eslint-disable-next-line no-catch-all/no-catch-all
} catch (error: any) {
// eslint-disable-next-line no-console
console.error('Failed to load layers:', error)
setError(
typeof error === 'string'
? error
: (error?.errors?.length > 0 ? error.errors[0]?.message : null) ||
error?.message ||
'Failed to load map layers. Please check your permissions and try again.',
)
setLoading(false)
// Don't rethrow since we're handling the error by setting error state
}
}
useEffect(() => {
if (map && map.name) {
document.title = map?.name && map.name
let link: HTMLLinkElement = document.querySelector("link[rel~='icon']")!
if (!link) {
link = document.createElement('link')
link.rel = 'icon'
document.getElementsByTagName('head')[0].appendChild(link)
}
link.href = map?.logo && config.apiUrl + '/assets/' + map.logo // Specify the path to your favicon
}
// Only set loading to false when both map and layers are successfully loaded
if (map && layers) {
setLoading(false)
}
}, [map, layers])
const currentUrl = window.location.href
const bottomRoutes = getBottomRoutes(currentUrl)
if (map && layers)
return (
<div className='App tw:overflow-x-hidden'>
<AuthProvider userApi={userApi} inviteApi={inviteApi}>
<AppShell
assetsApi={new assetsApi(config.apiUrl + '/assets/')}
appName={map.name}
embedded={embedded}
openCollectiveApiKey={config.openCollectiveApiKey}
hideSignup={map.hide_signup}
>
<Permissions api={permissionsApiInstance} adminRole={config.adminRole} />
{tagsApi && <Tags api={tagsApi}></Tags>}
<Modal>
<ModalContent map={map} />
</Modal>
<SideBar routes={[...routes, ...layerPageRoutes]} bottomRoutes={bottomRoutes} />
<Content>
<Quests />
<Routes>
<Route path='/*' element={<MapContainer map={map} layers={layers} />}>
<Route path='invite/:id' element={<InvitePage inviteApi={inviteApi} />} />
<Route
path='login'
element={
<LoginPage
showRequestPassword={map.show_request_password}
inviteApi={inviteApi}
/>
}
/>
<Route path='signup' element={<SignupPage />} />
<Route
path='reset-password'
element={<RequestPasswordPage resetUrl={map.url + '/set-new-password/'} />}
/>
<Route path='set-new-password' element={<SetNewPasswordPage />} />
<Route
path='item/*'
element={
<Suspense fallback={<LoadingMapOverlay />}>
<ProfileView attestationApi={attestationApi} />
</Suspense>
}
/>
<Route
path='edit-item/*'
element={
<Suspense fallback={<LoadingMapOverlay />}>
<ProfileForm />
</Suspense>
}
/>
<Route
path='user-settings'
element={
<Suspense fallback={<LoadingMapOverlay />}>
<UserSettings />
</Suspense>
}
/>
<Route path='landingpage' element={<Landingpage />} />
<Route path='market' element={<MarketView />} />
<Route path='select-user' element={<SelectUser />} />
{/* <Route
path='onboarding'
element={
<MapOverlayPage
backdrop
className='max-w-[calc(100vw-32px)] md:max-w-md h-[calc(100vh-96px)] md:h-fit'
>
<Onboarding />
</MapOverlayPage>
}
/> */}
<Route
path='attestation-form'
element={<AttestationForm api={attestationApi} />}
/>
{layers.map((l: LayerProps) => (
<Route
key={l.id}
path={l.name}
element={
<OverlayItemsIndexPage
layerName={l.name}
url={l.itemType.custom_profile_url ? '/' : '/item/'}
parameterField={'id'}
/>
}
/>
))}
</Route>
</Routes>
</Content>
</AppShell>
</AuthProvider>
</div>
)
else if (map == 'null' && !loading)
return (
<div className='tw:flex tw:items-center tw:justify-center tw:h-screen'>
<div>
<p className='tw:text-xl tw:font-semibold'>This map does not exist</p>
</div>
</div>
)
else if (error)
return (
<div className='tw:flex tw:items-center tw:justify-center tw:h-screen tw:bg-base-100'>
<div className='tw:max-w-md tw:mx-auto tw:p-6 tw:text-center'>
<div className='tw:mb-4'>
<svg
className='tw:w-16 tw:h-16 tw:mx-auto tw:text-error tw:mb-4'
fill='none'
stroke='currentColor'
viewBox='0 0 24 24'
>
<path
strokeLinecap='round'
strokeLinejoin='round'
strokeWidth={2}
d='M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.732-.833-2.5 0L4.314 16.5c-.77.833.192 2.5 1.732 2.5z'
/>
</svg>
</div>
<h2 className='tw:text-xl tw:font-semibold tw:text-base-content tw:mb-2'>
Connection Error
</h2>
<p className='tw:text-base-content/70 tw:mb-6'>{error}</p>
<button onClick={retryConnection} className='tw:btn tw:btn-primary'>
Try Again
</button>
</div>
</div>
)
else
return (
<div className='outer'>
<img className='pulse-loader tw-h-[96px]' src='/3markers-globe.svg' />
<br />
<span className='tw:loader'></span>
</div>
)
}
export default App

96
app/src/ModalContent.tsx Normal file
View File

@ -0,0 +1,96 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/restrict-plus-operands */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
import { useEffect, useState } from 'react'
import { TextView } from 'utopia-ui'
import { config } from './config'
interface ChapterProps {
clickAction1: () => void
map?: any
}
export function Welcome1({ clickAction1, map }: ChapterProps) {
return (
<>
{map.custom_text ? (
<>
<TextView rawText={map.custom_text}></TextView>
<div className='tw:grid'>
<label
className='tw:btn tw:btn-primary tw:place-self-end tw:mt-4'
onClick={() => clickAction1()}
>
Close
</label>
</div>
</>
) : (
<>
<h3 className='tw:font-bold tw:text-lg'>Welcome to {map?.name || 'Utopia Map'}</h3>
<img
className='tw:float-right tw:w-32 tw:m-2'
src={config.apiUrl + '/assets/' + map.logo}
></img>
<p className='tw:py-3'>
It is a tool for collaborative mapping to connect local initiatives, people and events.
</p>
<p className='tw:py-1'>
Join us and grow the network by adding projects and events to the map.
</p>
<p className='tw:py-1'>Create your personal profile and place it on the map.</p>
<div className='tw:grid'>
<label
className='tw:btn tw:btn-primary tw:place-self-end tw:mt-4'
onClick={() => clickAction1()}
>
Close
</label>
</div>
</>
)}
</>
)
}
const close = () => {
const myModal = document.getElementById('my_modal_3') as HTMLDialogElement
myModal.close()
}
export const ModalContent = ({ map }: { map: any }) => {
useEffect(() => {
const myModal = document.getElementById('my_modal_3') as HTMLDialogElement
if (map.info_open) {
myModal.showModal()
}
}, [map.info_open])
const [chapter, setChapter] = useState<number>(1)
// const setQuestsOpen = useSetQuestOpen()
const ActiveChapter = () => {
switch (chapter) {
case 1:
return (
<Welcome1
map={map}
clickAction1={() => {
close()
setTimeout(() => {
// setQuestsOpen(true);
setChapter(1)
}, 1000)
}}
/>
)
default:
return <></>
}
}
return <ActiveChapter />
}

28
app/src/api/assetsApi.ts Normal file
View File

@ -0,0 +1,28 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable no-console */
import { uploadFiles } from '@directus/sdk'
import { directusClient } from './directus'
import type { AssetsApi } from 'utopia-ui'
export class assetsApi implements AssetsApi {
url: string
constructor(url: string) {
this.url = url
}
async upload(file: Blob, title: string) {
const formData = new FormData()
formData.append('title', title)
formData.append('file', file)
try {
return await directusClient.request(uploadFiles(formData))
} catch (error: any) {
console.log(error)
throw error
}
}
}

107
app/src/api/directus.ts Normal file
View File

@ -0,0 +1,107 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-non-null-assertion */
/* eslint-disable @typescript-eslint/require-await */
/* eslint-disable @typescript-eslint/no-unsafe-return */
import { createDirectus, rest, authentication } from '@directus/sdk'
// eslint-disable-next-line import/no-relative-parent-imports
import { config } from '../config'
import type { AuthenticationData, AuthenticationStorage } from '@directus/sdk'
import type { Point } from 'geojson'
import type { Item } from 'utopia-ui'
export interface Place {
id: string
name: string
text: string
position?: Point
}
export interface Project {
id: string
name: string
text: string
position?: Point
picture: string
subname: string
[key: string]: any
}
export interface Tag {
id: string
color: string
}
export interface Event {
id: string
name: string
text: string
position?: Point
start: Date
end: Date
}
export interface Update {
id: string
text: string
position?: Point
user_created: string
date_created: string
}
interface CustomUserFields {
position: Point
}
interface ItemSecret {
secret: string
item: string
}
export interface MyCollections {
places: Place[]
events: Event[]
updates: Update[]
tags: Tag[]
projects: Project[]
directus_users: CustomUserFields[]
item_secrets: ItemSecret[]
items: Item[]
team: any[]
features: any[]
attestations: any[]
}
export const authLocalStorage = (mainKey = 'directus_storage') =>
({
// implementation of get, here return json parsed data from localStorage at mainKey (or null if not found)
get: async () => {
const data = window.localStorage.getItem(mainKey)
if (data) {
return JSON.parse(data)
}
return null
},
// implementation of set, here set the value at mainKey in localStorage, or remove it if value is null
set: async (value: AuthenticationData | null) => {
if (!value) {
return window.localStorage.removeItem(mainKey)
}
return window.localStorage.setItem(mainKey, JSON.stringify(value))
},
}) as AuthenticationStorage
export async function getRefreshToken() {
const auth = await authLocalStorage().get()
return auth!.refresh_token
}
export const directusClient = createDirectus<MyCollections>(config.apiUrl)
.with(rest())
.with(
authentication('json', {
// add this if you want to use authentication, json is important, it's type of your authentication usage, here JWT
storage: authLocalStorage(), // here set the storage previously created
}),
)

79
app/src/api/inviteApi.ts Normal file
View File

@ -0,0 +1,79 @@
/* @eslint-disable-next-line import/no-relative-parent-imports */
import { config } from '@/config'
import type { UserApi } from 'utopia-ui'
type InvitingProfileResponse = [
{
item: string
},
]
export class InviteApi {
userApi: UserApi
constructor(userApi: UserApi) {
this.userApi = userApi
}
async validateInvite(inviteId: string): Promise<string | null> {
try {
const response = await fetch(
`${config.apiUrl}/flows/trigger/${config.validateInviteFlowId}?secret=${inviteId}`,
{
method: 'GET',
mode: 'cors',
headers: {
'Content-Type': 'application/json',
},
},
)
if (!response.ok) return null
const data = (await response.json()) as InvitingProfileResponse
return data[0].item
} catch (error: unknown) {
// eslint-disable-next-line no-console
console.error('Error fetching inviting profile:', error)
if (error instanceof Error && error.message) {
throw new Error(error.message)
} else {
throw new Error('An unknown error occurred while fetching the inviting profile.')
}
}
}
async redeemInvite(inviteId: string, itemId: string): Promise<string | null> {
try {
const token = await this.userApi.getToken()
if (!token) {
throw new Error('User is not authenticated. Cannot redeem invite.')
}
const response = await fetch(`${config.apiUrl}/flows/trigger/${config.redeemInviteFlowId}`, {
method: 'POST',
mode: 'cors',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({ secret: inviteId, item: itemId }),
})
if (!response.ok) return null
return (await response.json()) as string
} catch (error: unknown) {
// eslint-disable-next-line no-console
console.error('Error fetching inviting profile:', error)
if (error instanceof Error && error.message) {
throw new Error(error.message)
} else {
throw new Error('An unknown error occurred while fetching the inviting profile.')
}
}
}
}

122
app/src/api/itemsApi.ts Normal file
View File

@ -0,0 +1,122 @@
/* eslint-disable @typescript-eslint/no-non-null-assertion */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable no-console */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
import { createItem, deleteItem, readItem, readItems, updateItem } from '@directus/sdk'
import { directusClient } from './directus'
import type { MyCollections } from './directus'
import type { ItemsApi } from 'utopia-ui'
export class itemsApi<T> implements ItemsApi<T> {
collectionName: keyof MyCollections
filter: any
layerId: string | undefined
mapId: string | undefined
customParameter: any
constructor(
collectionName: keyof MyCollections,
layerId?: string | undefined,
mapId?: string | undefined,
filter?: any,
customParameter?: any,
) {
this.collectionName = collectionName
if (filter) this.filter = filter
else this.filter = {}
this.layerId = layerId
if (layerId) {
this.filter = { ...filter, ...{ layer: { id: { _eq: layerId } } } }
}
this.mapId = mapId
if (mapId) {
this.filter = { ...filter, ...{ map: { id: { _eq: mapId } } } }
}
if (customParameter) this.customParameter = customParameter
}
async getItems(): Promise<T[]> {
try {
const result = await directusClient.request<T[]>(
readItems(this.collectionName as never, {
fields: [
'*',
'secrets.*',
'to.*',
'relations.*',
'user_created.*',
'markerIcon.*',
{ offers: ['*'], needs: ['*'], gallery: ['*.*'] } as any,
],
filter: this.filter,
limit: -1,
}),
)
return result
} catch (error: any) {
console.error(error)
if (error.errors?.[0]?.message) {
throw new Error(error.errors[0].message)
} else {
throw error
}
}
}
async getItem(id: string): Promise<T> {
try {
const result = await directusClient.request(readItem(this.collectionName as never, id))
return result as T
} catch (error: any) {
console.log(error)
if (error.errors[0]?.message) throw error.errors[0].message
else throw error
}
}
async createItem(item: T & { id?: string }): Promise<T> {
try {
const result = await directusClient.request(
createItem(this.collectionName, {
...item,
...(this.customParameter && this.customParameter),
...(this.layerId && { layer: this.layerId }),
...(this.layerId && { layer: this.layerId }),
...(this.mapId && { map: this.mapId }),
}),
)
return result as T
} catch (error: any) {
console.log(error)
if (error.errors[0]?.message) throw error.errors[0].message
else throw error
}
}
async updateItem(item: T & { id?: string }): Promise<T> {
try {
const result = await directusClient.request(updateItem(this.collectionName, item.id!, item))
return result as T
} catch (error: any) {
console.log(error)
if (error.errors[0].message) throw error.errors[0].message
else throw error
}
}
async deleteItem(id: string): Promise<boolean> {
try {
const result = await directusClient.request(deleteItem(this.collectionName, id))
return result as unknown as boolean
} catch (error: any) {
console.log(error)
if (error.errors[0].message) throw error.errors[0].message
else throw error
}
}
}

36
app/src/api/layersApi.ts Normal file
View File

@ -0,0 +1,36 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable no-console */
import { readItems } from '@directus/sdk'
import { directusClient } from './directus'
export class layersApi {
mapId: string
constructor(mapId: string) {
this.mapId = mapId
}
async getItems() {
try {
const layers = await directusClient.request(
readItems('layers' as any, {
fields: [
'*',
{ itemType: ['*.*', { profileTemplate: ['*', 'item.*.*.*.*'] }] },
{ markerIcon: ['*'] } as any,
],
filter: { maps: { maps_id: { id: { _eq: this.mapId } } } },
limit: 500,
sort: ['sort'],
}),
)
return layers
} catch (error: any) {
console.log(error)
if (error.errors[0]?.message) throw error.errors[0].message
else throw error
}
}
}

33
app/src/api/mapApi.ts Normal file
View File

@ -0,0 +1,33 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable no-console */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-explicit-any */
import { readItems } from '@directus/sdk'
import { directusClient } from './directus'
export class mapApi {
url: string
constructor(url: string) {
this.url = url
}
async getItems() {
try {
const map = await directusClient.request(
readItems('maps' as any, {
fields: ['*'],
filter: { url: { _eq: this.url } } as any,
limit: 500,
}),
)
if (map[0]) return map[0]
else return 'null'
} catch (error: any) {
console.log(error)
if (error.errors?.length > 0 && error.errors[0]?.message) throw error.errors[0].message
else throw error
}
}
}

View File

@ -0,0 +1,27 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-useless-constructor */
/* eslint-disable @typescript-eslint/no-empty-function */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable no-console */
import { readPermissions } from '@directus/sdk'
import { directusClient } from './directus'
import type { ItemsApi, Permission } from 'utopia-ui'
export class permissionsApi implements ItemsApi<Permission> {
constructor() {}
async getItems(): Promise<Permission[]> {
try {
const result = await directusClient.request(
readPermissions({ fields: ['*', { policy: ['name', 'roles'] } as any] }),
)
return result as unknown as Permission[]
} catch (error: any) {
console.log(error)
if (error.errors[0]?.message) throw error.errors[0].message
else throw error
}
}
}

View File

@ -0,0 +1,18 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable no-console */
/* eslint-disable @typescript-eslint/no-explicit-any */
import { readUser } from '@directus/sdk'
import { directusClient } from './directus'
export class readUserApi {
async getItem(id: string) {
try {
return await directusClient.request(readUser(id))
} catch (error: any) {
console.log(error)
if (error.errors[0]?.message) throw error.errors[0].message
else throw error
}
}
}

29
app/src/api/refiBcnApi.ts Normal file
View File

@ -0,0 +1,29 @@
/* eslint-disable no-console */
/* eslint-disable @typescript-eslint/no-unsafe-return */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-explicit-any */
import axios from 'axios'
import type { ItemsApi } from 'utopia-ui'
export class refiBcnApi implements ItemsApi<any> {
collectionName: string
constructor(collectionName: string) {
this.collectionName = collectionName
}
async getItems() {
try {
return (
await axios.get(
'https://antontranelis.github.io/ReFi-Barcelona-Prototype/projects/index.json',
)
).data.data
} catch (error: any) {
console.log(error)
if (error.errors[0]?.message) throw error.errors[0].message
else throw error
}
}
}

118
app/src/api/userApi.ts Normal file
View File

@ -0,0 +1,118 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
/* eslint-disable camelcase */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable no-console */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-unsafe-return */
import { createUser, passwordRequest, passwordReset, readMe, updateMe } from '@directus/sdk'
import { directusClient } from './directus'
import type { UserItem } from 'utopia-ui'
interface DirectusError {
errors: {
message: string
[key: string]: any
}[]
}
export class UserApi {
async register(email: string, password: string, userName: string): Promise<any> {
try {
return await directusClient.request(createUser({ email, password, first_name: userName }))
} catch (error: unknown) {
console.error('Registration error:', error)
if (
typeof error === 'object' &&
error !== null &&
'errors' in error &&
Array.isArray((error as any).errors)
) {
const directusError = error as DirectusError
const errorMessage = directusError.errors[0]?.message
if (errorMessage.includes('has to be unique')) {
throw new Error('This e-mail address is already registered.')
}
throw new Error(errorMessage || 'Unknown error during registration.')
}
throw error
}
}
async login(email: string, password: string): Promise<any> {
try {
return await directusClient.login(email, password, { mode: 'json' })
} catch (error: any) {
console.log(error)
if (error.errors[0].message) throw error.errors[0].message
else throw error
}
}
async logout(): Promise<any> {
try {
return await directusClient.logout()
} catch (error: any) {
console.log(error)
if (error.errors[0].message) throw error.errors[0].message
else throw error
}
}
async getUser(): Promise<any> {
try {
const user = await directusClient.request(readMe({ fields: ['*', { role: ['*'] } as any] }))
return user
} catch (error: any) {
console.log(error)
if (error.errors[0].message) throw error.errors[0].message
else throw error
}
}
async getToken(): Promise<any> {
try {
const token = await directusClient.getToken()
return token
} catch (error: any) {
console.log(error)
if (error.errors[0].message) throw error.errors[0].message
else throw error
}
}
async updateUser(user: UserItem): Promise<any> {
const { id, ...userRest } = user
try {
const res = await directusClient.request(updateMe(userRest, { fields: ['*'] }))
return res as any
} catch (error: any) {
console.log(error)
if (error.errors[0].message) throw error.errors[0].message
else throw error
}
}
async requestPasswordReset(email: string, reset_url?: string): Promise<any> {
try {
return await directusClient.request(passwordRequest(email, reset_url))
} catch (error: any) {
console.log(error)
if (error.errors[0].message) throw error.errors[0].message
else throw error
}
}
async passwordReset(reset_token: string, new_password: string): Promise<any> {
try {
return await directusClient.request(passwordReset(reset_token, new_password))
} catch (error: any) {
console.log(error)
if (error.errors[0].message) throw error.errors[0].message
else throw error
}
}
}

26
app/src/config/index.ts Normal file
View File

@ -0,0 +1,26 @@
const normalizeBaseUrl = (value: string) => value.replace(/\/+$/, '')
const getMapUrl = () => {
const url = String(import.meta.env.VITE_MAP_URL ?? 'http://local.development')
if (url === 'CURRENT_WINDOW_LOCATION') return url
return normalizeBaseUrl(url)
}
export const config = {
apiUrl: normalizeBaseUrl(String(import.meta.env.VITE_API_URL ?? 'http://localhost:8055/')),
mapUrl: getMapUrl(),
adminRole: String(import.meta.env.VITE_DIRECTUS_ADMIN_ROLE ?? ''),
validateInviteFlowId: String(
import.meta.env.VITE_VALIDATE_INVITE_FLOW_ID ?? '01d61db0-25aa-4bfa-bc24-c6a8f208a455',
),
redeemInviteFlowId: String(
import.meta.env.VITE_REDEEM_INVITE_FLOW_ID ?? 'cc80ec73-ecf5-4789-bee5-1127fb1a6ed4',
),
openCollectiveApiKey: String(import.meta.env.VITE_OPEN_COLLECTIVE_API_KEY ?? ''),
}
if (config.adminRole === '') {
throw Error('You must define the Admin roll in the .env file!')
}
export type Config = typeof config

11
app/src/index.css Normal file
View File

@ -0,0 +1,11 @@
@import 'tailwindcss';
@plugin "daisyui" {
themes: light --default, dark --prefersdark, valentine, retro, aqua, cyberpunk, caramellatte, abyss, silk;
}
@theme {
--animate-fade: fadeOut 1s ease-in-out;
}
@import 'tailwindcss' prefix(tw);
@source '../../lib/src/';

14
app/src/main.tsx Normal file
View File

@ -0,0 +1,14 @@
/* eslint-disable import/extensions */
/* eslint-disable import/no-named-as-default-member */
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.tsx'
import './index.css'
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<App />
</React.StrictMode>,
)

188
app/src/pages/Concept.tsx Normal file
View File

@ -0,0 +1,188 @@
/* eslint-disable react/no-unescaped-entities */
import { CardPage } from 'utopia-ui'
export default function Concept() {
return (
<CardPage title='Concept'>
Utopia is a cooperative Real Life Manifestation Game. While playing, we connect with
ourselves, each other and our dreams to manifest them together.<br></br>
<br></br>
<div className='collapse collapse-arrow bg-base-200 mb-2'>
<input type='radio' name='my-accordion-2' />
<div className='collapse-title text-xl font-medium'>Real Life Manifestation Games </div>
<div className='collapse-content'>
<ul className='list-disc list-inside pl-4'>
<li>
Like a role-playing game, you can create your own profile, but here you can map, share
and train real skills.
</li>
<li>
Further, real resources are made visible and available, managed and used, similar to a
strategy game.
</li>
<li>
Project management tasks can be mapped as quests, levels, missions and problems become
challenges.
</li>
<li>The storytelling is based on the real conditions and challenges on our planet.</li>
<li>
The goal of the game is to create win-win-win situations. Win for you, win for us, win
for the world.
</li>
</ul>
</div>
</div>
<div className='collapse collapse-arrow bg-base-200 mb-2'>
<input type='radio' name='my-accordion-2' />
<div className='collapse-title text-xl font-medium'>Elements</div>
<div className='collapse-content'>
<div className='flex flex-row flex-wrap'>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> The App</h3>
The app provides an interactive geographical map as a playing field. It also allows
you to create and view player profiles. The marketplace shows offers and needs.{' '}
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Print Material</h3>
To complement offline play, there are flyers, stickers, signs and workbooks that
invite players to play. Players receive or print ID cards with QR codes that are used
for networking (more on this later).
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Gatherings</h3>
Coming together at workshops, festivals and local meetings to connect, build
structures and to engage new players.{' '}
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Permanent Structures</h3>
When we play, we create tangible structures like places and infrastructure. And also
intangibles like networks of relationships, stories, information ...
</div>
</div>
</div>
</div>
<div className='collapse collapse-arrow bg-base-200 mb-2'>
<input type='radio' name='my-accordion-2' />
<div className='collapse-title text-xl font-medium'>Goals </div>
<div className='collapse-content'>
<ol className='list-decimal list-inside pl-4'>
<li>To build a decentralised network</li>
<li>Free development of our collective and individual potential</li>
<li>Start co-creation and build collective structures</li>
</ol>
</div>
</div>
<div className='collapse collapse-arrow bg-base-200 mb-2'>
<input type='radio' name='my-accordion-2' />
<div className='collapse-title text-xl font-medium'>Gameplay </div>
<div className='collapse-content'>
Through playful elements and gamification, the player is motivated and guided through
quests and levels.
<h3 className='text-base my-3 font-medium'> Player Profiles</h3>
The player examines himself and his abilities as well as deeper desires and visions to
define his character or player profile. The focus is on the following questions:
<ul className='list-disc list-inside pl-4 pt-4'>
<li>How and in what kind of world do I want to live?</li>
<li>Who am I and what are my special abilities or my special task in this life?</li>
<li>
What do I have to give? What can and do I want to share with others and the world?
</li>
<li>
What do I still need to come fully into my power? How can others support me in this?
</li>
</ul>
<h3 className='text-base my-3 font-medium'> Resources</h3>
The player explores and defines his/her offers and needs, shares his/her resources and
uses those of the network. E.g. tools, machines, electrical appliances, vehicles, food and
drink, places to sleep, rides, books, access to the internet, individual skills and help
in everyday life
<h3 className='text-base my-3 font-medium'> Realising Projects</h3>
The player joins projects and starts his own. The game offers support in project
management or crowdfunding. In this way, structures, events, permanent places,
infrastructure and everything we need to meet our human needs in harmony with Mother Earth
can be created.
<h3 className='text-base my-3 font-medium'> Making Change visible</h3>
The player is motivated to map and document the newly emerging world by ...
<ul className='list-disc list-inside pl-4 pt-4'>
<li>adding places, events etc. to the map</li>
<li>documenting projects with text, images, audio and video</li>
<li>telling stories of change</li>
</ul>
</div>
</div>
<div className='collapse collapse-arrow bg-base-200 mb-2'>
<input type='radio' name='my-accordion-2' />
<div className='collapse-title text-xl font-medium'>Web of Trust </div>
<div className='collapse-content'>
<div className='flex flex-row flex-wrap'>
While we connect with other people in real life and build our personal network, we are
simultaneously exchanging cryptographic keys and building a "Web of Trust".{' '}
<div className='basis-full'>
<div className='divider divider-vertical'></div>
</div>
<h3 className='text-base basis-full my-3 font-medium'> Decentralised IDs</h3>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<img className='float-right h-28 px-4 pb-4' src='/public-private-key.svg'></img>
<p>
When we create our profile, a key pair consisting of a private key and a public key
is generated at the same time.
</p>
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<p className='basis-full pb-4'>
We share the public key with our friends and they can use it to encrypt data for us.
We keep the private key secret. It is needed to decrypt data that has been encrypted
for us on our device.
</p>
</div>
<div className='basis-full'>
<div className='divider divider-vertical'></div>
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Key Exchange</h3>
<img className='float-left h-32 px-4' src='/qr-scan.svg'></img>
When we meet people in real life, we can exchange our public keys by scanning each
other's QR codes or on paper.{' '}
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Private data sharing</h3>
<img className='float-right h-32 px-4' src='/web-of-trust.svg'></img>
Within our network, we can then share our profiles, offers, needs, projects, locations
and events end-to-end encrypted.
</div>
</div>
</div>
</div>
<div className='collapse collapse-arrow bg-base-200 mb-2'>
<input type='radio' name='my-accordion-2' />
<h2 className='collapse-title text-xl font-medium'>Principles </h2>
<div className='collapse-content'>
<div className='flex flex-row flex-wrap'>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Everything is just a game</h3>
Everything happens voluntarily, out of ourselves in the flow. Everyone is invited to
join in at any time.
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> No Money</h3>
Since the fun stops with money, we don't pay each other money when we play.
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Decentralised Structures</h3>
All structures we create are decentralised and free of hierarchies. The same rules
apply to everyone.
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Real Life</h3>
Real change happens in real life. We only use the internet where it directly helps to
organise real encounters.{' '}
</div>
</div>
</div>
</div>
</CardPage>
)
}

203
app/src/pages/ConceptDE.tsx Normal file
View File

@ -0,0 +1,203 @@
import { CardPage } from 'utopia-ui'
export default function Concept() {
return (
<CardPage title='Concept'>
<b>Utopia Game</b> is a cooperative <b>Real Life Manifestation Game</b>. While playing, we
connect with ourselves, each other and our dreams to manifest them together.<br></br>
<br></br>
<div className='collapse collapse-arrow bg-base-200 mb-2'>
<input type='radio' name='my-accordion-2' />
<div className='collapse-title text-xl font-medium'>Real-Life-Manifestations-Spiel ? </div>
<div className='collapse-content'>
<div className='flex flex-row flex-wrap'>
<div className='basis-full pr-4 pb-4'>
Ähnlich wie bei einem Rollenspiel kann man sich sein eigenes Profil erstellen, mit dem
Unterschied, dass hier echte Fähigkeiten abgebildet, geteilt und trainiert werden
können.
</div>
<div className='basis-full pr-4 pb-4'>
Die Geschichte und das Storytelling orientiert sich an den realen Zuständen und
Herausforderungen auf unserer Erde.
</div>
<div className='basis-full pr-4 pb-4'>
Des weiteren werden reale Ressourcen sichtbar und verfügbar gemacht, verwaltet und
eingesetzt, ähnlich wie bei einem Strategie-Spiel.
</div>
<div className='basis-full pr-4 pb-4'>
Die Aufgaben des Projektmanagements können als Quests bzw. Spielaufträge abgebildet
werden. Kleine und große Aufgaben werden in Abenteuer und Herausforderungen verwandelt
und Probleme in Rätsel.
</div>
</div>
<div className='basis-full pr-4 pb-4'>
Ziel des Spiels ist es, WinWinWin Situationen zu erzeugen. Win für Dich, Win für Uns,
Win für die Welt.
</div>
</div>
</div>
<div className='collapse collapse-arrow bg-base-200 mb-2'>
<input type='radio' name='my-accordion-2' />
<div className='collapse-title text-xl font-medium'>Elemente des Spiels </div>
<div className='collapse-content'>
<div className='flex flex-row flex-wrap'>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> App</h3>
Die App bietet eine interaktive geografische Karte als Spielfeld. Außerdem ermöglicht
sie das Erstellen und Ansehen von Spieler-Profilen. Der Marktplatz zeigt Angebote und
Bedürfnisse
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Print Material</h3>
Als Ergänzung und zum Offline-Spielen gibt es Flyer, Aufkleber, Schilder und
Workbooks, welche zum Spielen einladen. Spieler erhalten Ausweise und Visitenkarten
mit QR-Codes, die zu Vernetzung genutzt werden (später mehr)
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Temporäre Events</h3>
Wir kommen zusammen bei Workshops, auf Festivals und bei lokalen Treffen um uns zu
connecten, Strukturen zu bilden und neue Spieler zu gewinnen.
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Dauerhafte Strukturen</h3>
Beim Spielen erschaffen wir dauerhafte materielle Strukturen wie Orte und
Infrastruktur. Und Immaterielles wie Netzwerke aus Beziehungen, Geschichten,
Informationen ...
</div>
</div>
</div>
</div>
<div className='collapse collapse-arrow bg-base-200 mb-2'>
<input type='radio' name='my-accordion-2' />
<div className='collapse-title text-xl font-medium'>Ziel des Spiels </div>
<div className='collapse-content'>
<ol className='list-decimal list-inside pl-4'>
<li>Ein dezentrales Netzwerk aufspannen</li>
<li>Freie Entfaltung unserer kollektiven und individuellen Potentiale</li>
<li>Aufbau kollektiver Strukturen und Co-Kreation</li>
</ol>
</div>
</div>
<div className='collapse collapse-arrow bg-base-200 mb-2'>
<input type='radio' name='my-accordion-2' />
<div className='collapse-title text-xl font-medium'>Ablauf </div>
<div className='collapse-content'>
Durch spielerische Elemente / Gamification wird der Spieler motiviert und angeleitet ...
<h3 className='text-base my-3 font-medium'> Spieler Profile</h3>
Der Spieler setzt sich mit sich selbst und seinen Fähigkeiten sowie tieferen Wünschen und
Visionen auseinander und definiert seinen Charakter bzw. Spieler-Profil Dabei stehen
folgende Fragen im Mittelpunkt:
<ul className='list-disc list-inside pl-4 pt-4'>
<li>Wie und in was für einer Welt möchte ich leben?</li>
<li>
Wer bin ich und was sind meine besonderen Fähigkeiten oder meine spezielle Aufgabe in
diesem Leben?
</li>
<li>Was habe ich zu geben? Was kann und möchte ich mit anderen und der Welt teilen?</li>
<li>
Was brauche ich noch um ganz in meine Kraft zu kommen? Wie können mich andere dabei
unterstützen?
</li>
</ul>
<h3 className='text-base my-3 font-medium'> Ressourcen</h3>
Der Spieler erforscht und definiert seine Angebote und Bedürfnisse, teilt seine Ressourcen
und nutzt die des Netzwerks Z.B. Werkzeuge, Maschinen, Elektrogeräte, Fahrzeuge, Essen und
Trinken, Schlafplätze, Mitfahrten, Bücher, Zugang zum Internet, individuelle Fähigkeiten
sowie Hilfe im Alltag
<h3 className='text-base my-3 font-medium'> Projekte umsetzen</h3>
Der Spieler schließt sich Projekten an und startet selbst welche. Das Spiel unterstützt
beim Projektmanagement oder beim Crowdfunding So entstehen Strukturen, Veranstaltungen,
dauerhafte Orte, Infrastruktur und alles was wir brauchen um unsere menschlichen
Bedürfnisse im Einklang mit Mutter Erde zu befriedigen.
<h3 className='text-base my-3 font-medium'> Wandel sichtbar machen</h3>
Der Spieler wird motiviert die neu entstehende Welt zu kartieren und zu dokumentieren
indem er ...
<ul className='list-disc list-inside pl-4 pt-4'>
<li>Orte, Veranstaltungen usw. in der Karte einträgt</li>
<li>Projekte mit Text, Bild und Ton dokumentiert</li>
<li>Geschichten des Wandels erzählt</li>
</ul>
</div>
</div>
<div className='collapse collapse-arrow bg-base-200 mb-2'>
<input type='radio' name='my-accordion-2' />
<div className='collapse-title text-xl font-medium'>Web of Trust </div>
<div className='collapse-content'>
<div className='flex flex-row flex-wrap'>
Während wir uns mit anderen Menschen im echten Leben connecten und unser persönliches
Netzwerk aufbauen, tauschen wir gleichzeitig kryptografische Schlüssel aus und bauen ein
sogenanntes Web of Trust.
<div className='basis-full'>
<div className='divider divider-vertical'></div>
</div>
<h3 className='text-base basis-full my-3 font-medium'> Dezentrale IDs</h3>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<img className='float-right h-24 px-4' src='/public-private-key.svg'></img>
<p>
Wenn wir unser Profil erstellen wird gleichzeitig ein Schlüsselpaar bestehend aus
einem privaten und einem öffentlichen Schlüssel erzeugt.
</p>
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<p className='basis-full pb-4'>
Den öffentlichen Schlüssel teilen wir mit unseren Freunden und diese können damit
Daten für uns verschlüsseln.
</p>
<p className='basis-full'>
Den privaten Schlüssel halten wir geheim. Er wird benötigt um Daten die für uns
verschlüsselt wurden auf unserem Gerät wieder zu entschlüsselt.
</p>
</div>
<div className='basis-full'>
<div className='divider divider-vertical'></div>
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Schlüsseltausch</h3>
<img className='float-left h-32 px-4' src='/qr-scan.svg'></img>
Wenn wir Menschen im echten Leben begegnen tauschen wir unsere öffentlichen Schlüssel
via QR-Code-Scan oder auf Papier.
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Private Daten teilen</h3>
<img className='float-right h-32 px-4' src='/web-of-trust.svg'></img>
Innerhalb unseres Netzwerkes können wir dann unsere Profile, Angebote, Bedürfnisse,
Projekte, Orte und Veranstaltungen ende-zu-ende-verschlüsselt teilen.
</div>
</div>
</div>
</div>
<div className='collapse collapse-arrow bg-base-200 mb-2'>
<input type='radio' name='my-accordion-2' />
<h2 className='collapse-title text-xl font-semibold'>Prinzipien </h2>
<div className='collapse-content'>
<div className='flex flex-row flex-wrap'>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Alles ist nur ein Spiel</h3>
Alles passiert freiwillig, aus uns selbst heraus im Flow. Jeder ist jederzeit
eingeladen mitzumachen.
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Kein Geld</h3>
Da beim Geld der Spaß bekanntlich aufhört, bezahlen wir uns beim Spielen gegenseitig
kein Geld.
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Dezentrale Strukturen</h3>
Alle Strukturen, die wir erschaffen, gestalten wir dezentral und frei von Hierarchien.
Für alle gelten die gleichen Regeln.
</div>
<div className='basis-full md:basis-1/2 pr-4 pb-4'>
<h3 className='text-base my-3 font-medium'> Real Life</h3>
Veränderung passiert im echten Leben. Wir nutzen das Internet nur wo es direkt hilft
echte Begegnungen zu organisieren.
</div>
</div>
</div>
</div>
</CardPage>
)
}

View File

@ -0,0 +1,217 @@
/* eslint-disable react/no-unescaped-entities */
/* eslint-disable @typescript-eslint/restrict-template-expressions */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable import/no-relative-parent-imports */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
/* eslint-disable new-cap */
/* eslint-disable react-hooks/exhaustive-deps */
/* eslint-disable @typescript-eslint/no-floating-promises */
import { useEffect, useState } from 'react'
import { useNavigate } from 'react-router-dom'
import { MapOverlayPage } from 'utopia-ui'
import { itemsApi } from '../api/itemsApi'
import { config } from '../config'
export const Landingpage = () => {
const [isLandingpageVisible, setIsLandingpageVisible] = useState(true)
const [isBoxVisible, setIsBoxVisible] = useState(true)
const [isPhoneVisible, setIsPhoneVisible] = useState(true)
const [featuresApi, setFeaturesApi] = useState<itemsApi<any>>()
const [features, setFeatures] = useState<any[]>()
const [teamApi, setTeamApi] = useState<itemsApi<any>>()
const [team, setTeam] = useState<any[]>()
const loadFeatures = async () => {
const items = await featuresApi?.getItems()
setFeatures(items as any)
}
const loadTeam = async () => {
const items = await teamApi?.getItems()
setTeam(items as any)
}
useEffect(() => {
setFeaturesApi(
new itemsApi<any>('features', undefined, undefined, { status: { _eq: 'published' } }),
)
setTeamApi(new itemsApi<any>('team'))
loadTeam()
loadFeatures()
}, [])
useEffect(() => {
loadFeatures()
}, [featuresApi])
useEffect(() => {
loadTeam()
}, [teamApi])
const navigate = useNavigate()
const startGame = () => {
setTimeout(() => {
setIsBoxVisible(false)
}, 200)
setTimeout(() => {
setIsPhoneVisible(false)
}, 200)
setTimeout(() => {
setIsLandingpageVisible(false)
}, 500)
setTimeout(() => {
navigate('/')
}, 1500)
}
return (
<MapOverlayPage
className={`rounded-none! overflow-y-auto p-0! fadeable-div flex-none ${isLandingpageVisible ? '' : 'div-hidden'}`}
card={false}
>
<div className='hero min-h-full text-base'>
<div className='hero-content text-center flex flex-col place-items-center p-0'>
<div
className='bg-no-repeat bg-center w-full'
style={{ backgroundImage: 'url(bg1.webp)' }}
>
<div className='min-h-[calc(100vh-60px)] flex flex-row items-center justify-center '>
<div
className={`max-w-md text-center bg-black p-8 m-8 bg-opacity-50 text-white backdrop-blur-xs rounded-xl movable-div ${isBoxVisible ? '' : 'move-out-left'}`}
>
<h1 className='text-5xl font-bold'>Utopia Game</h1>
<p className='py-6'>
ist mehr als nur ein Spiel. Es ist eine Bewegung, die darauf abzielt, die Spieler
aus ihren virtuellen Welten zu befreien und sie zu inspirieren, das echte Leben zu
erkunden, Fähigkeiten zu entwickeln und die Welt um sie herum zu gestalten. Bist
du bereit, Teil dieser Revolution zu werden?{' '}
</p>
<div className='btn text-white! btn-primary' onClick={startGame}>
Play
</div>
</div>
<div
className={`mockup-phone m-8 hidden lg:block movable-div ${isPhoneVisible ? '' : 'move-out-right'}`}
>
<div className='camera'></div>
<div className='display'>
my-8
<div className='artboard artboard-demo phone-1'>
<iframe src='/' height={568} width={320}></iframe>
</div>
</div>
</div>
</div>
</div>
<section className='min-h-[50em] p-8 flex h-full items-center justify-center'>
<ul className='my-8 grid gap-y-8 gap-x-12 sm:grid-cols-2 lg:grid-cols-3'>
{features?.map((item, idx) => (
<li key={idx} className='space-y-3'>
<div className='w-12tw-card tw-card-body h-12 mx-auto bg-transparent! text-indigo-600 rounded-full flex items-center justify-center text-5xl'>
{item.symbol}
</div>
<h4 className='text-lg font-semibold'>{item.heading}</h4>
<p>{item.text}</p>
</li>
))}
</ul>
</section>
<section className='py-14 min-h-[40em] p-8 flex h-full items-center justify-center mb-28'>
<div className='max-w-(--breakpoint-xl) mx-auto text-center'>
<div className='max-w-xl mx-auto'>
<h3 className='text-3xl font-semibold sm:text-4xl'>Meet our team</h3>
<p className='mt-3'>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.Lorem
Ipsum has been the industry's standard dummy.
</p>
</div>
<div className='mt-12'>
<ul className='grid gap-8 sm:grid-cols-2 md:grid-cols-3'>
{team?.map((item, idx) => (
<li key={idx}>
<div className='w-24 h-24 mx-auto'>
<img
src={`${config.apiUrl}/assets/${item.image}`}
className='w-full h-full rounded-full'
alt=''
/>
</div>
<div className='mt-2'>
<h4 className='font-semibold sm:text-lg'>{item.name}</h4>
<p className='text-indigo-600'>{item.role}</p>
<p className='mt-2'>{item.text}</p>
<div className='mt-4 flex justify-center gap-4'></div>
</div>
</li>
))}
</ul>
</div>
</div>
</section>
</div>
</div>
<footer className='text-gray-500 bg-base-200 px-4 py-5 w-full mx-auto md:px-8 text-base'>
<div className='mt-8 items-center justify-center flex'>
<div className='mt-6 sm:mt-0'>
<ul className='flex items-center space-x-4'>
<li className='w-8 h-8 border-current bg-white rounded-full flex items-center justify-center'>
<a href='https://t.me/UtopiaMap'>
<svg
stroke='currentColor'
fill='#1d93d2'
strokeWidth='0'
viewBox='0 0 512 512'
height='1.4rem'
width='1.4rem'
xmlns='http://www.w3.org/2000/svg'
>
<path d='M446.7 98.6l-67.6 318.8c-5.1 22.5-18.4 28.1-37.3 17.5l-103-75.9-49.7 47.8c-5.5 5.5-10.1 10.1-20.7 10.1l7.4-104.9 190.9-172.5c8.3-7.4-1.8-11.5-12.9-4.1L117.8 284 16.2 252.2c-22.1-6.9-22.5-22.1 4.6-32.7L418.2 66.4c18.4-6.9 34.5 4.1 28.5 32.2z'></path>
</svg>
</a>
</li>
<li className='w-8 h-8 border-current bg-white rounded-full flex items-center justify-center'>
<a href='mailto:hello@utopia-lab.org'>
<svg
stroke='currentColor'
fill='#333'
strokeWidth='0'
viewBox='0 0 24 24'
height='1.25rem'
width='1.25rem'
xmlns='http://www.w3.org/2000/svg'
>
<path fill='none' d='M0 0h24v24H0z'></path>
<path d='M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z'></path>
</svg>{' '}
</a>
</li>
<li className='w-8 h-8 border-current bg-white rounded-full flex items-center justify-center'>
<a href='https://twitter.com/UtopiaMapGame/' className='text-white'>
<svg
className='svg-icon w-[1.4rem] h-[1.4rem] text-[#1d93d2]'
viewBox='0 0 20 20'
>
<path
fill='currentColor'
d='M18.258,3.266c-0.693,0.405-1.46,0.698-2.277,0.857c-0.653-0.686-1.586-1.115-2.618-1.115c-1.98,0-3.586,1.581-3.586,3.53c0,0.276,0.031,0.545,0.092,0.805C6.888,7.195,4.245,5.79,2.476,3.654C2.167,4.176,1.99,4.781,1.99,5.429c0,1.224,0.633,2.305,1.596,2.938C2.999,8.349,2.445,8.19,1.961,7.925C1.96,7.94,1.96,7.954,1.96,7.97c0,1.71,1.237,3.138,2.877,3.462c-0.301,0.08-0.617,0.123-0.945,0.123c-0.23,0-0.456-0.021-0.674-0.062c0.456,1.402,1.781,2.422,3.35,2.451c-1.228,0.947-2.773,1.512-4.454,1.512c-0.291,0-0.575-0.016-0.855-0.049c1.588,1,3.473,1.586,5.498,1.586c6.598,0,10.205-5.379,10.205-10.045c0-0.153-0.003-0.305-0.01-0.456c0.7-0.499,1.308-1.12,1.789-1.827c-0.644,0.28-1.334,0.469-2.06,0.555C17.422,4.782,17.99,4.091,18.258,3.266'
></path>
</svg>
</a>
</li>
</ul>
</div>
</div>
<div className='mt-8 flex item s-center justify-center'>&copy; 2024</div>
</footer>
</MapOverlayPage>
)
}

View File

@ -0,0 +1,171 @@
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable import/no-relative-parent-imports */
/* eslint-disable new-cap */
/* eslint-disable @typescript-eslint/no-empty-function */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
import { useEffect, useState } from 'react'
import {
UtopiaMap,
Layer,
PopupView,
PopupButton,
StartEndView,
TextView,
PopupForm,
PopupStartEndInput,
PopupTextAreaInput,
PopupTextInput,
HeaderView,
} from 'utopia-ui'
import { itemsApi } from '../api/itemsApi'
import type { Place } from '../api/directus'
import type { LayerProps } from 'utopia-ui'
interface layerApi {
id: string
api: itemsApi<Place>
}
function MapContainer({ layers, map }: { layers: LayerProps[]; map: any }) {
const [apis, setApis] = useState<layerApi[]>([])
useEffect(() => {
// get timestamp for the start of the current day
const now = new Date()
const startOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate())
const startOfDayISO = startOfDay.toISOString()
const newApis = layers.map((layer: LayerProps) => {
// Only apply date filter if showPastItems is not explicitly set to true
const dateFilter = layer.showPastItems
? undefined
: {
_or: [
{
end: {
_gt: startOfDayISO,
},
},
{
end: {
_null: true,
},
},
],
}
return {
id: layer.id,
api: new itemsApi<Place>('items', layer.id, undefined, dateFilter),
}
})
setApis(newApis)
}, [layers])
useEffect(() => {}, [apis])
return (
<>
<UtopiaMap
geo={map.geo}
zoom={map.zoom || 5}
center={map.center ? [map.center?.coordinates[1], map.center?.coordinates[0]] : [50.6, 9.5]}
height='100%'
width='100%'
showFilterControl={map.show_filter_control}
showLayerControl={map.show_layer_control}
showGratitudeControl={map.show_gratitude_control}
donationWidget={map.donation_widget}
showThemeControl={map.show_theme_control}
defaultTheme={map.default_theme}
showZoomControl={map.show_zoom_control}
expandLayerControl={map.expand_layer_control}
tileServerUrl={map.tile_server_url}
tileServerAttribution={map.tile_server_attribution}
tilesType={map.tiles_type}
maplibreStyle={map.maplibre_style}
showFullscreenControl={map.show_fullscreen_control}
zoomOffset={map.zoom_offset}
tileSize={map.tile_size}
>
{layers &&
apis &&
layers.map((layer) => (
<Layer
id={layer.id}
key={layer.id}
name={layer.name}
menuText={layer.menuText}
menuColor={layer.menuColor}
markerIcon={layer.markerIcon}
markerShape={layer.markerShape}
userProfileLayer={layer.userProfileLayer}
markerDefaultColor={layer.menuColor}
markerDefaultColor2={
layer.markerDefaultColor2 ? layer.markerDefaultColor2 : 'RGBA(35, 31, 32, 0.2)'
}
itemType={layer.itemType}
customEditLink={layer.itemType.small_form_edit ? undefined : '/edit-item'}
customEditParameter='id'
public_edit_items={layer.public_edit_items}
listed={layer.listed}
api={apis.find((api) => api.id === layer.id)?.api}
item_default_name={layer.item_default_name}
>
<PopupView>
{layer.itemType.show_start_end && <StartEndView></StartEndView>}
{layer.itemType.show_profile_button && (
<PopupButton
url={layer.itemType.custom_profile_url ?? '/item'}
parameterField={
layer.itemType.custom_profile_url ? 'extended.external_profile_id' : 'id'
}
text={layer.itemType.button_label ?? 'Profile'}
target={layer.itemType.custom_profile_url ? '_blank' : '_self'}
/>
)}
{layer.itemType.show_text && <TextView truncate></TextView>}
</PopupView>
<PopupForm>
{layer.itemType.show_header_view_in_form && <HeaderView hideMenu />}
{layer.itemType.show_name_input && (
<PopupTextInput dataField='name' placeholder='Name'></PopupTextInput>
)}
{layer.itemType.show_start_end_input && (
<PopupStartEndInput showLabels={false}></PopupStartEndInput>
)}
{layer.itemType.show_text_input && (
<div className='tw:mt-4'>
<PopupTextAreaInput
dataField='text'
placeholder={layer.itemType.text_input_label ?? 'Text ...'}
style='tw:h-40'
></PopupTextAreaInput>
</div>
)}
{
// layer.public_edit_items && <PopupCheckboxInput dataField={'public_edit'} label={'public edit'}/>
}
{layer.itemType.custom_text && (
<div className='tw:flex tw:justify-center'>
<p>{layer.itemType.custom_text}</p>
</div>
)}
{layer.item_presets &&
Object.entries(layer.item_presets).map((ip: any) => (
<input key={ip[0]} type='hidden' id={ip[0]} name={ip[0]} value={ip[1]} />
))}
</PopupForm>
</Layer>
))}
</UtopiaMap>
</>
)
}
export default MapContainer

115
app/src/pages/data.ts Normal file
View File

@ -0,0 +1,115 @@
import type { Item, Tag } from 'utopia-ui'
export const tags: Tag[] = [
{
id: '423423423423',
name: 'Activism',
color: '#6d398b',
},
{
id: '4234423',
name: 'Art',
color: '#fdc60b',
},
{
id: '4231223423',
name: 'Community',
color: '#FFA439',
},
{
id: '429803423423',
name: 'Culture',
color: '#f18e1c',
},
{
id: '42423423',
name: 'Education',
color: '#444e99',
},
{
id: '4565654423',
name: 'Gardening',
color: '#008e5b',
},
{
id: '4234gfh423',
name: 'Healing',
color: '#c4037d',
},
{
id: '4223423',
name: 'Market',
color: '#2a71b0',
},
{
id: '42342gd3423',
name: 'Nature',
color: '#8cbb26',
},
{
id: '423123423',
name: 'Technology',
color: '#0696bb',
},
]
export const events: Item[] = [
{
id: '243253f3645643',
name: 'Vollmondtrommeln',
text: 'Zu den Vollmonden vom März bis Oktober treffen sich traditionell Menschen zum gemeinsamen Musizieren, Tanzen, Spielen, Grillen und Entspannen am Gerloser Häuschen im Niesiger Wald.\r\n\r\nUhrzeit: immer ab 17 Uhr\r\n\r\nhttps://trommeln-fulda.de/vollmondtrommeln/',
position: {
type: 'Point',
coordinates: [9.667615, 50.588632],
},
start: '2022-03-18T12:00:00',
end: '2022-10-08T12:00:00',
},
{
id: 'fsdfsdfsdfsdfdse',
name: 'anderes Event',
text: 'Zu den Vollmonden vom März bis Oktober treffen sich traditionell Menschen zum gemeinsamen Musizieren, Tanzen, Spielen, Grillen und Entspannen am Gerloser Häuschen im Niesiger Wald.\r\n\r\nUhrzeit: immer ab 17 Uhr\r\n\r\nhttps://trommeln-fulda.de/vollmondtrommeln/',
position: {
type: 'Point',
coordinates: [9.68, 50.59],
},
start: '2022-03-18T12:00:00',
end: '2022-10-08T12:00:00',
},
]
export const places: Item[] = [
{
id: '1asdasdasd',
name: 'Gärtnerei am Leisebach',
text: 'Wir sind eine Bio-Gemüsegärtnerei und suchen noch fleißige Helfer für diese Saison.',
position: {
type: 'Point',
coordinates: [8.476371, 51.0044],
},
date_created: '2021-04-15T07:46:26.906Z',
date_updated: '2021-04-15T07:46:26.906Z',
},
{
id: 'adsasdas2',
name: 'Rainbow Crystal Land',
text: 'https://rainbowcrystal.land',
position: {
type: 'Point',
coordinates: [-76.367426, 1.87],
},
date_created: '2021-04-04T18:01:24.596Z',
date_updated: '2021-04-04T18:01:24.596Z',
},
{
id: 'f345v34',
name: '🌈 RainbowCrystaleARThshipKinderGarten',
text: "AMYTIME WELCOME HOME\r\n\r\n#lebenliebenlernen\r\n#symbioticsynergysolutions\r\n#lebenlanglachen\r\n#soriendosiempresaludpazyamor\r\n#laughinglearninglivingloving\r\n#souriresantétoujoursamoure\r\n\r\n\r\n<b>Garden IntroductionVideo</b>\r\n<br>\r\n\r\n\r\n<iframe width='250' src='https://www.youtube-nocookie.com/embed/7jUaixJGK08' title='YouTube video player' frameborder='0' allow='accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture' allowfullscreen></iframe>",
position: {
type: 'Point',
coordinates: [9.502648, 51.334741],
},
date_created: '2022-03-13T23:09:56.305Z',
date_updated: '2022-03-13T23:09:56.305Z',
},
]

View File

@ -0,0 +1,70 @@
import { MapIcon } from '@heroicons/react/24/outline'
import { SVG } from 'utopia-ui'
import type { Route } from '#components/AppShell/SideBar'
export const routes = [
{
path: '/',
icon: <MapIcon style={{ width: 24 }} />,
name: 'Map',
} /**
{
path: '/people', // url
icon: <UsersIcon style={{width: 24 }}/>, // icon component
name: 'People', // name that appear in Sidebar
}, */,
/*
{
path: '', //no url needed as this has submenu
icon: <DocumentDuplicateIcon className={`${iconClasses} inline` }/>, // icon component
name: 'Pages', // name that appear in Sidebar
submenu : [
{
path: '/login',
icon: <ArrowRightOnRectangleIcon className={submenuIconClasses}/>,
name: 'Kanban',
},
{
path: '/register', //url
icon: <UserIcon className={submenuIconClasses}/>, // icon component
name: 'Gitlab', // name that appear in Sidebar
},
{
path: '/forgot-password',
icon: <KeyIcon className={submenuIconClasses}/>,
name: 'Wiki',
},
]
}
*/
]
export const getBottomRoutes = (currentUrl: string) => {
const url = new URL(currentUrl)
const isEmbedded = url.searchParams.get('embedded') === 'true'
const bottomRoutes: Route[] = [
// Other routes can be added here
]
if (!isEmbedded) {
bottomRoutes.push(
{
path: 'https://github.com/utopia-os/utopia-ui', // url
icon: <SVG src='/github.svg' className='tw:w-6 tw:h-6' />,
name: 'GitHub', // name that appear in Sidebar
blank: true,
},
{
path: 'https://opencollective.com/utopia-project', // url
icon: <SVG src='/opencollective.svg' className='tw:w-6 tw:h-6' />,
name: 'Open Collective', // name that appear in Sidebar
blank: true,
},
)
}
return bottomRoutes
}

1
app/src/vite-env.d.ts vendored Normal file
View File

@ -0,0 +1 @@
/// <reference types="vite/client" />

12
app/tailwind.config.js Normal file
View File

@ -0,0 +1,12 @@
/** @type {import('tailwindcss').Config} */
export default {
content: ['./src/**/*.{html,js,jsx,tsx,ts}'],
theme: {
extend: {
// that is animation class
animation: {
fade: 'fadeOut 1s ease-in-out',
},
},
},
}

49
app/tsconfig.json Normal file
View File

@ -0,0 +1,49 @@
{
"extends": "../tsconfig.base.json",
"compilerOptions": {
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"baseUrl": ".",
"paths": {
"@/*": [
"src/*"
],
"utopia-ui": [
"../lib/src"
],
"#components/*": [
"../lib/src/Components/*"
],
"#utils/*": [
"../lib/src/Utils/*"
],
"#types/*": [
"../lib/src/types/*"
],
"#assets/*": [
"../lib/src/assets/*"
],
"#src/*": [
"../lib/src/*"
],
"#root/*": [
"../lib/*"
]
}
},
"include": [
"src"
],
"references": [
{
"path": "./tsconfig.node.json"
}
]
}

10
app/tsconfig.node.json Normal file
View File

@ -0,0 +1,10 @@
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}

BIN
app/video_preview.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 KiB

62
app/vite.config.ts Normal file
View File

@ -0,0 +1,62 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import tailwindcss from '@tailwindcss/vite'
import fs from 'fs'
import path from 'path'
import tsConfigPaths from 'vite-tsconfig-paths'
// __dirname-Ersatz für ESModules
const __dirname = path.dirname(new URL(import.meta.url).pathname)
export default defineConfig({
server: {
host: true,
port: 5174,
/**
* https: {
* key: fs.readFileSync(path.resolve(__dirname, 'localhost-key.pem')),
* cert: fs.readFileSync(path.resolve(__dirname, 'localhost-cert.pem')),
* },
*/
},
plugins: [react(), tailwindcss(), tsConfigPaths()],
build: {
sourcemap: true,
modulePreload: {
// Don't preload maplibre chunks - only load when actually needed
resolveDependencies: (_filename, deps) => {
return deps.filter((dep) => !dep.includes('maplibre'))
},
},
rollupOptions: {
output: {
manualChunks: (id) => {
// Handle lib source (dev) or dist (prod)
if (id.includes('lib/src') || id.includes('lib/dist')) {
// Separate chunk for MapLibre components
if (id.includes('MapLibre')) {
return 'maplibre-layer'
}
return 'utopia-ui'
}
if (id.includes('node_modules')) {
if (id.includes('react') || id.includes('scheduler') || id.includes('use-sync-external-store')) {
return 'react'
}
if (id.includes('tiptap')) {
return 'tiptap'
}
if (id.includes('leaflet')) {
return 'leaflet'
}
// Separate chunk for maplibre-gl
if (id.includes('maplibre-gl')) {
return 'maplibre-gl'
}
return 'vendor'
}
},
},
},
},
})

12
backend/Dockerfile Normal file
View File

@ -0,0 +1,12 @@
FROM node:22.20.0-alpine as third-party-ext
RUN apk add python3 g++ make
WORKDIR /extensions
ADD extensions .
RUN npm install
# Move all extensions that start with directus-extension-, using find, to the /extensions/directus folder
RUN mkdir -p ./directus
RUN cd node_modules && find . -maxdepth 1 -type d -name "directus-extension-*" -exec mv {} ../directus \;
FROM directus/directus:11.9.3
# Copy third party extensions
COPY --from=third-party-ext /extensions/directus ./extensions

122
backend/README.md Normal file
View File

@ -0,0 +1,122 @@
# Utopia Backend
To run the backend you can simply execute
`docker-compose up`
To fill in all required data execute the following commands in order:
```
cd backend
./push.sh
./seed.sh
```
## Pull Data from Docker to Harddrive
In order to pull data from your locally running backend (see [docker-compose](../app/docker-compose.yml)) to your local harddrive, you can run the following command
```
npx directus-sync pull \
--dump-path ./directus-config/development \
--directus-url http://localhost:8055 \
--directus-email admin@it4c.dev \
--directus-password admin123
```
You can run `./pull.sh` to run this command and modify it via `export PROJECT=...` for a different project configuration.
## Push Data from Harddrive to Docker
To push local changes or to seed directus use the following command
```
npx directus-sync push \
--dump-path ./directus-config/development \
--directus-url http://localhost:8055 \
--directus-email admin@it4c.dev \
--directus-password admin123
```
You can run `./push.sh` to run this command and modify it via `export PROJECT=...` for a different project configuration.
## Seed Data for local development
In order to seed the development data, run the script `backend/seed.sh`.
## Backup Database
Either keep a copy of the `/data/database` folder or run the following command to get an sql dump
```
docker exec -t utopia-map-database-1 pg_dumpall -c -U directus > dump.sql
```
## How to apply a database dump to the docker
Assuming you run docker-compose with the default postgress credentials and have the dump in cwd as ./dump.sql, execute:
Find current schema name:
```
echo "SELECT CURRENT_SCHEMA, CURRENT_SCHEMA();" | docker exec -i utopia-map-database-1 /bin/bash -c "PGPASSWORD=directus psql --username directus"
```
> current_schema | current_schema
> ----------------+----------------
> public | public
> (1 row)
Drop schemata (loses all data):
```
echo "DROP SCHEMA public CASCADE;" | docker exec -i utopia-map-database-1 /bin/bash -c "PGPASSWORD=directus psql --username directus"
echo "DROP SCHEMA tiger CASCADE;" | docker exec -i utopia-map-database-1 /bin/bash -c "PGPASSWORD=directus psql --username directus"
echo "DROP SCHEMA tiger_data CASCADE;" | docker exec -i utopia-map-database-1 /bin/bash -c "PGPASSWORD=directus psql --username directus"
echo "DROP SCHEMA topology CASCADE;" | docker exec -i utopia-map-database-1 /bin/bash -c "PGPASSWORD=directus psql --username directus"
```
> drop cascades to table ...
> ...
> DROP SCHEMA
Create the public schema again:
```
echo "CREATE SCHEMA public;" | docker exec -i utopia-map-database-1 /bin/bash -c "PGPASSWORD=directus psql --username directus"
```
Verify schemata:
```
echo "select schema_name from information_schema.schemata;" | docker exec -i utopia-map-database-1 /bin/bash -c "PGPASSWORD=directus psql --username directus"
```
Verify database is empty:
```
echo "\dt" | docker exec -i utopia-map-database-1 /bin/bash -c "PGPASSWORD=directus psql --username directus directus"
```
> Did not find any relations.
Create admin role & grant it:
```
echo "CREATE ROLE admin;" | docker exec -i utopia-map-database-1 /bin/bash -c "PGPASSWORD=directus psql --username directus directus"
```
Apply dump:
```
docker exec -i utopia-map-database-1 /bin/bash -c "PGPASSWORD=directus psql -v ON_ERROR_STOP=1 --username directus directus" < ./dump.sql
```
> Bring time depending on the dump size.
Reassign ownership of tables:
```
echo "REASSIGN OWNED BY admin TO directus" | docker exec -i utopia-map-database-1 /bin/bash -c "PGPASSWORD=directus psql --username directus directus"
```
> REASSIGN OWNED
## Access Data on local drive
In order to access the postgress data mounted to the local drive at `/data/database` you need to make it accessible (assuming you are not root):
```
sudo chmod 777 -R ./data/
```
This process is to be repeated whenever you restart the database docker container
The same applies for the uploads and extension folder - ensure that the folder is writeable or file uploads will fail.

4
backend/directus-config/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
/*
!development/
**/specs/
!.gitignore

View File

@ -0,0 +1 @@
[]

View File

@ -0,0 +1,292 @@
[
{
"name": "get_item_by_secret",
"icon": "bolt",
"color": null,
"description": null,
"status": "active",
"trigger": "webhook",
"accountability": "all",
"options": {},
"operation": "c880bc9d-1568-4c9c-b3d5-ddbd61f0a9d3",
"_syncId": "01d61db0-25aa-4bfa-bc24-c6a8f208a455"
},
{
"name": "Create initial secret",
"icon": "bolt",
"color": null,
"description": "Creates a secret for an existing item, triggered by another flow",
"status": "inactive",
"trigger": "operation",
"accountability": "all",
"options": {
"return": "$last"
},
"operation": "3767ea47-c9f5-4668-9cfa-9350803b9b31",
"_syncId": "234d13fe-112a-4408-9bdb-78dd8cbd6b82"
},
{
"name": "Ocean Nomads: Delete Nomad",
"icon": "sailing",
"color": "#2ECDA7",
"description": "Deletes Nomads User and Items",
"status": "inactive",
"trigger": "event",
"accountability": "all",
"options": {
"type": "filter",
"scope": [
"items.delete"
],
"collections": [
"oceannomads_profiles"
]
},
"operation": "2f4c3d12-87c3-44d5-aa5d-0e7d5529b149",
"_syncId": "3c6cdddf-2944-493d-bc7f-2769fd87b1d6"
},
{
"name": "Post Profiles to Murmurations",
"icon": "bolt",
"color": null,
"description": null,
"status": "inactive",
"trigger": "event",
"accountability": "all",
"options": {
"type": "action",
"scope": [
"items.create",
"items.update"
],
"collections": [
"updates"
]
},
"operation": "8265ad6e-df54-48c8-b068-31c07f6b50a8",
"_syncId": "5e320392-429d-4759-95ec-c5adcff61f01"
},
{
"name": "Request Profile",
"icon": "bolt",
"color": null,
"description": null,
"status": "inactive",
"trigger": "webhook",
"accountability": "all",
"options": {
"return": "$all"
},
"operation": null,
"_syncId": "6a48c246-2fb2-42ca-bebb-3f605e794d02"
},
{
"name": "Ocean Nomads: Create Location or Home",
"icon": "sailing",
"color": "#2ECDA7",
"description": "Creates Nomads Current Location or Home",
"status": "inactive",
"trigger": "event",
"accountability": "all",
"options": {
"type": "filter",
"return": "$last",
"scope": [
"items.create"
],
"collections": [
"items"
]
},
"operation": "39d03980-4747-4970-80fa-2ad9afbdfb32",
"_syncId": "77f1fc79-d0fd-4f5d-a168-50fa3948a945"
},
{
"name": "Ocean Nomads: Create Event",
"icon": "sailing",
"color": "#2ECDA7",
"description": "Creates Event Item on Map",
"status": "inactive",
"trigger": "event",
"accountability": "all",
"options": {
"type": "action",
"scope": [
"items.create"
],
"collections": [
"oceannomads_events"
]
},
"operation": "67847550-3c95-4ee4-af02-32ebb69747d6",
"_syncId": "7b978be2-605f-4061-b5b3-46f151b1b80a"
},
{
"name": "Ocean Nomads: Create Nomad",
"icon": "sailing",
"color": "#2ECDA7",
"description": "Creates Nomads User and Home Base",
"status": "inactive",
"trigger": "event",
"accountability": "all",
"options": {
"type": "action",
"scope": [
"items.create"
],
"collections": [
"oceannomads_profiles"
]
},
"operation": "02499c24-46a9-4d77-8a2e-1b963cb3d62c",
"_syncId": "8b79cca0-d346-4d05-8bb2-c4b3c45d0721"
},
{
"name": "Initial item secrets trigger",
"icon": "salinity",
"color": null,
"description": "Generate a secret for each item",
"status": "inactive",
"trigger": "manual",
"accountability": "all",
"options": {
"collections": [
"itemSecrets"
],
"requireSelection": false
},
"operation": "589ea382-5027-40fb-9f4d-3852389ccaab",
"_syncId": "9a1d1084-438f-471e-aac5-47e0749375e7"
},
{
"name": "Telegram-Bot-Trigger",
"icon": "mark_chat_read",
"color": "#3584E4",
"description": null,
"status": "inactive",
"trigger": "event",
"accountability": "all",
"options": {
"type": "action",
"scope": [
"items.update",
"items.create"
],
"collections": [
"items"
]
},
"operation": "9838d2ca-3698-4d29-8429-038dfcaf7fab",
"_syncId": "a78d01a4-13b3-46a4-8938-9606bf26e329"
},
{
"name": "Item Notification Setup",
"icon": "outgoing_mail",
"color": "#C061CB",
"description": "Inform Users about new items in layers they subscripe to ",
"status": "active",
"trigger": "event",
"accountability": "all",
"options": {
"type": "action",
"scope": [
"items.create",
"items.update"
],
"collections": [
"items"
]
},
"operation": "2eba1a24-aec5-477b-919f-f2276705606f",
"_syncId": "bff21ad9-d142-4a6e-96fe-8da016576bc7"
},
{
"name": "Ocean Nomads: Update Nomad",
"icon": "sailing",
"color": "#2ECDA7",
"description": "Updates Nomads User, Home Base and Current Location",
"status": "inactive",
"trigger": "event",
"accountability": "all",
"options": {
"type": "action",
"scope": [
"items.update"
],
"collections": [
"oceannomads_profiles"
]
},
"operation": "9d88e79c-2d51-4b66-9c36-341f1c8f9508",
"_syncId": "cb772a2c-150c-4cca-bc2c-1f8498a5cd92"
},
{
"name": "Create Secret",
"icon": "azm",
"color": null,
"description": null,
"status": "active",
"trigger": "event",
"accountability": "all",
"options": {
"type": "action",
"scope": [
"items.create"
],
"collections": [
"items"
]
},
"operation": "05954e5e-1ca7-4a9c-b8c8-3ea6fceaa5de",
"_syncId": "cbd7d15d-7f09-4f45-8060-3b24adabf82a"
},
{
"name": "redeem-invite",
"icon": "bolt",
"color": null,
"description": "Redeems an invite link (item secret)",
"status": "active",
"trigger": "webhook",
"accountability": "all",
"options": {
"error_on_reject": true,
"method": "POST"
},
"operation": "0d9acb0c-571a-4a6a-b6c9-aa4f2dab8ca6",
"_syncId": "cc80ec73-ecf5-4789-bee5-1127fb1a6ed4"
},
{
"name": "Send Item Notification Mail",
"icon": "send",
"color": "#C061CB",
"description": null,
"status": "active",
"trigger": "operation",
"accountability": "all",
"options": {
"return": "$last"
},
"operation": "43de95f1-d63b-4231-80c3-b399c45470f6",
"_syncId": "d7e74f35-a19a-4a0b-9ae8-59af2fa0f081"
},
{
"name": "Slug Generation",
"icon": "bolt",
"color": null,
"description": null,
"status": "active",
"trigger": "event",
"accountability": "all",
"options": {
"type": "action",
"scope": [
"items.create"
],
"collections": [
"items"
]
},
"operation": "55857562-e0ab-49a5-a292-18f6c1cb075e",
"_syncId": "f2beb617-9c21-48b2-a8ec-c04197d1b7d1"
}
]

View File

@ -0,0 +1,17 @@
[
{
"name": "map-logos",
"parent": null,
"_syncId": "27b2a288-d50a-48b7-88cd-35945503277b"
},
{
"name": "icons-solid",
"parent": null,
"_syncId": "889a110a-a117-40fa-b091-5c5a2766563f"
},
{
"name": "icons-outline",
"parent": null,
"_syncId": "f255d3a7-8ecc-4ee0-b584-dee753317415"
}
]

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
[]

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,88 @@
[
{
"name": "Administrator",
"icon": "verified",
"description": "$t:admin_policy_description",
"ip_access": null,
"enforce_tfa": false,
"admin_access": true,
"app_access": true,
"roles": [
{
"role": "_sync_default_admin_role",
"sort": 1
}
],
"_syncId": "_sync_default_admin_policy"
},
{
"name": "App Access",
"icon": "badge",
"description": null,
"ip_access": null,
"enforce_tfa": false,
"admin_access": false,
"app_access": true,
"roles": [],
"_syncId": "_sync_default_public_policy"
},
{
"name": "Editor",
"icon": "supervised_user_circle",
"description": null,
"ip_access": null,
"enforce_tfa": false,
"admin_access": false,
"app_access": true,
"roles": [
{
"role": "f07fdc26-2935-401a-abc9-67d5ad38a965",
"sort": 1
}
],
"_syncId": "263ff65e-de84-4e41-8eb2-9354fe69c484"
},
{
"name": "$t:public_label",
"icon": "public",
"description": "$t:public_description",
"ip_access": null,
"enforce_tfa": false,
"admin_access": false,
"app_access": false,
"roles": [
{
"role": null,
"sort": 1
}
],
"_syncId": "4d5d2bd8-7e1f-40c1-b10b-3f0ecac70877"
},
{
"name": "Zapier",
"icon": "badge",
"description": null,
"ip_access": null,
"enforce_tfa": false,
"admin_access": false,
"app_access": false,
"roles": [],
"_syncId": "b0eb656b-96e5-4a30-a083-6ef8141e6a4c"
},
{
"name": "Registrated",
"icon": "paragliding",
"description": null,
"ip_access": null,
"enforce_tfa": false,
"admin_access": false,
"app_access": false,
"roles": [
{
"role": "4c32a9b2-714d-44e4-84bd-675d2351bdd7",
"sort": 1
}
],
"_syncId": "e1a6faf4-e93c-4f22-bc56-41b8e48b3ee7"
}
]

View File

@ -0,0 +1,124 @@
[
{
"bookmark": null,
"role": null,
"collection": "items",
"search": null,
"layout": null,
"layout_query": {
"tabular": {
"page": 1,
"fields": [
"name",
"layer.name",
"date_created",
"date_updated",
"user_created",
"user_updated"
]
}
},
"layout_options": {
"tabular": {
"widths": {}
}
},
"refresh_interval": null,
"filter": null,
"icon": "bookmark",
"color": null,
"_syncId": "053f9b93-aa94-4ad8-b64e-babb69f0ea6c"
},
{
"bookmark": null,
"role": null,
"collection": "marker_icons",
"search": null,
"layout": null,
"layout_query": {
"tabular": {
"page": 1,
"fields": [
"id",
"image.$thumbnail",
"size",
"image_outline.$thumbnail",
"size_outline"
],
"limit": 500
}
},
"layout_options": {
"tabular": {
"widths": {}
}
},
"refresh_interval": null,
"filter": null,
"icon": "bookmark",
"color": null,
"_syncId": "2a1656b7-d6d2-4b47-bd22-41babc8bf828"
},
{
"bookmark": null,
"role": null,
"collection": "maps",
"search": null,
"layout": null,
"layout_query": {
"tabular": {
"fields": [
"logo.$thumbnail",
"name",
"url",
"layers.layers_id.name"
],
"page": 1
}
},
"layout_options": {
"tabular": {
"widths": {
"logo.$thumbnail": 77,
"name": 237,
"url": 280.5,
"layers.layers_id.name": 473
}
}
},
"refresh_interval": null,
"filter": null,
"icon": "bookmark",
"color": null,
"_syncId": "337b9c3e-667f-4c61-9406-4e45ca24e37e"
},
{
"bookmark": null,
"role": null,
"collection": "types",
"search": null,
"layout": null,
"layout_query": {
"tabular": {
"page": 1,
"fields": [
"name",
"template",
"profileTemplate.collection"
]
}
},
"layout_options": {
"tabular": {
"widths": {
"profileTemplate.collection": 238
}
}
},
"refresh_interval": null,
"filter": null,
"icon": "bookmark",
"color": null,
"_syncId": "3789cfe7-78f9-428e-9770-d8e1c5de1145"
}
]

View File

@ -0,0 +1,23 @@
[
{
"name": "Administrator",
"icon": "verified",
"description": "$t:admin_description",
"parent": null,
"_syncId": "_sync_default_admin_role"
},
{
"name": "Registrated",
"icon": "paragliding",
"description": null,
"parent": null,
"_syncId": "4c32a9b2-714d-44e4-84bd-675d2351bdd7"
},
{
"name": "Editor",
"icon": "supervised_user_circle",
"description": null,
"parent": null,
"_syncId": "f07fdc26-2935-401a-abc9-67d5ad38a965"
}
]

View File

@ -0,0 +1,67 @@
[
{
"project_name": "Utopia Map",
"project_color": "#99C1F1",
"public_note": null,
"auth_login_attempts": 25,
"auth_password_policy": null,
"storage_asset_transform": "all",
"storage_asset_presets": null,
"custom_css": null,
"storage_default_folder": null,
"basemaps": null,
"mapbox_key": null,
"module_bar": [
{
"type": "module",
"id": "content",
"enabled": true
},
{
"type": "module",
"id": "visual",
"enabled": false
},
{
"type": "module",
"id": "users",
"enabled": true
},
{
"type": "module",
"id": "files",
"enabled": true
},
{
"type": "module",
"id": "insights",
"enabled": false
},
{
"type": "module",
"id": "settings",
"enabled": true,
"locked": true
}
],
"project_descriptor": "collaborative Mapping",
"default_language": "en-US",
"custom_aspect_ratios": null,
"default_appearance": "auto",
"default_theme_light": null,
"theme_light_overrides": null,
"default_theme_dark": null,
"theme_dark_overrides": null,
"report_error_url": null,
"report_bug_url": null,
"report_feature_url": null,
"public_registration": false,
"public_registration_verify_email": true,
"public_registration_role": null,
"public_registration_email_filter": null,
"visual_editor_urls": null,
"accepted_terms": true,
"project_id": "0199aa52-4dd7-7293-984a-f2af93b5f8fd",
"_syncId": "55f04445-0c26-4201-ab9c-d6e0fbadf6bf"
}
]

View File

@ -0,0 +1,49 @@
{
"collection": "Themes",
"meta": {
"insert_order": 1,
"create": true,
"update": true,
"delete": true,
"preserve_ids": true,
"ignore_on_update": []
},
"data": [
{
"_sync_id": "theme-light",
"theme": "light"
},
{
"_sync_id": "theme-dark",
"theme": "dark"
},
{
"_sync_id": "theme-valentine",
"theme": "valentine"
},
{
"_sync_id": "theme-retro",
"theme": "retro"
},
{
"_sync_id": "theme-aqua",
"theme": "aqua"
},
{
"_sync_id": "theme-cyberpunk",
"theme": "cyberpunk"
},
{
"_sync_id": "theme-caramellatte",
"theme": "caramellatte"
},
{
"_sync_id": "theme-abyss",
"theme": "abyss"
},
{
"_sync_id": "theme-silk",
"theme": "silk"
}
]
}

View File

@ -0,0 +1,22 @@
{
"collection": "directus_files",
"meta": {
"insert_order": 1,
"create": true,
"update": true,
"delete": true,
"preserve_ids": false,
"ignore_on_update": []
},
"data": [
{
"_sync_id": "utopia-logo",
"_file_path": "./files/utopia-logo.svg",
"storage": "local",
"filename_download": "utopia-logo.svg",
"title": "Utopia Logo",
"tags": [],
"description": "Utopia Logo"
}
]
}

View File

@ -0,0 +1,73 @@
{
"collection": "directus_files",
"meta": {
"insert_order": 2,
"create": true,
"update": true,
"delete": true,
"preserve_ids": false,
"ignore_on_update": []
},
"data": [
{
"_sync_id": "boat-outline",
"_file_path": "./files/icons/outline/boat.svg",
"storage": "local",
"folder": "f255d3a7-8ecc-4ee0-b584-dee753317415",
"filename_download": "boat-outline.svg",
"title": "boat outline",
"tags": [],
"description": "boat outline"
},
{
"_sync_id": "calendar-outline",
"_file_path": "./files/icons/outline/calendar.svg",
"storage": "local",
"folder": "f255d3a7-8ecc-4ee0-b584-dee753317415",
"filename_download": "calendar-outline.svg",
"title": "calendar outline",
"tags": [],
"description": "calendar outline"
},
{
"_sync_id": "house-outline",
"_file_path": "./files/icons/outline/house.svg",
"storage": "local",
"folder": "f255d3a7-8ecc-4ee0-b584-dee753317415",
"filename_download": "house-outline.svg",
"title": "home outline",
"tags": [],
"description": "home outline"
},
{
"_sync_id": "users-outline",
"_file_path": "./files/icons/outline/users.svg",
"storage": "local",
"folder": "f255d3a7-8ecc-4ee0-b584-dee753317415",
"filename_download": "users-outline.svg",
"title": "users outline",
"tags": [],
"description": "users outline"
},
{
"_sync_id": "map-pin-outline",
"_file_path": "./files/icons/outline/map-pin.svg",
"storage": "local",
"folder": "f255d3a7-8ecc-4ee0-b584-dee753317415",
"filename_download": "map-pin-outline.svg",
"title": "map pin outline",
"tags": [],
"description": "map pin outline"
},
{
"_sync_id": "user-outline",
"_file_path": "./files/icons/outline/user.svg",
"storage": "local",
"folder": "f255d3a7-8ecc-4ee0-b584-dee753317415",
"filename_download": "user-outline.svg",
"title": "user outline",
"tags": [],
"description": "user outline"
}
]
}

View File

@ -0,0 +1,303 @@
{
"collection": "directus_files",
"meta": {
"insert_order": 2,
"create": true,
"update": true,
"delete": true,
"preserve_ids": false,
"ignore_on_update": []
},
"data": [
{
"_sync_id": "bicycle-solid",
"_file_path": "./files/icons/solid/bicycle.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "bicycle.svg",
"title": "bicycle",
"tags": [],
"description": "bicycle"
},
{
"_sync_id": "boat-solid",
"_file_path": "./files/icons/solid/boat.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "boat.svg",
"title": "boat",
"tags": [],
"description": "boat"
},
{
"_sync_id": "cafe-solid",
"_file_path": "./files/icons/solid/cafe.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "cafe.svg",
"title": "cafe",
"tags": [],
"description": "cafe"
},
{
"_sync_id": "calendar-solid",
"_file_path": "./files/icons/solid/calendar.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "calendar.svg",
"title": "calendar",
"tags": [],
"description": "calendar"
},
{
"_sync_id": "camp-solid",
"_file_path": "./files/icons/solid/camp.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "camp.svg",
"title": "camp",
"tags": [],
"description": "camp"
},
{
"_sync_id": "cannabis-solid",
"_file_path": "./files/icons/solid/cannabis.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "cannabis.svg",
"title": "cannabis",
"tags": [],
"description": "cannabis"
},
{
"_sync_id": "circle-dot-solid",
"_file_path": "./files/icons/solid/circle-dot.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "circle-dot.svg",
"title": "circle-dot",
"tags": [],
"description": "circle-dot"
},
{
"_sync_id": "compass-solid",
"_file_path": "./files/icons/solid/compass.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "compass.svg",
"title": "compass",
"tags": [],
"description": "compass"
},
{
"_sync_id": "crosshair-solid",
"_file_path": "./files/icons/solid/crosshair.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "crosshair.svg",
"title": "crosshair",
"tags": [],
"description": "crosshair"
},
{
"_sync_id": "drum-solid",
"_file_path": "./files/icons/solid/drum.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "drum.svg",
"title": "drum",
"tags": [],
"description": "drum"
},
{
"_sync_id": "fire-solid",
"_file_path": "./files/icons/solid/fire.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "fire.svg",
"title": "fire",
"tags": [],
"description": "fire"
},
{
"_sync_id": "flower-solid",
"_file_path": "./files/icons/solid/flower.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "flower.svg",
"title": "flower",
"tags": [],
"description": "flower"
},
{
"_sync_id": "group-solid",
"_file_path": "./files/icons/solid/group.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "group.svg",
"title": "group",
"tags": [],
"description": "group"
},
{
"_sync_id": "house-solid",
"_file_path": "./files/icons/solid/house.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "house.svg",
"title": "house",
"tags": [],
"description": "house"
},
{
"_sync_id": "liebevoll.jetzt-solid",
"_file_path": "./files/icons/solid/liebevoll.jetzt.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "liebevoll.jetzt.svg",
"title": "liebevoll.jetzt",
"tags": [],
"description": "liebevoll.jetzt"
},
{
"_sync_id": "music-solid",
"_file_path": "./files/icons/solid/music.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "music.svg",
"title": "music",
"tags": [],
"description": "music"
},
{
"_sync_id": "network-solid",
"_file_path": "./files/icons/solid/network.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "network.svg",
"title": "network",
"tags": [],
"description": "network"
},
{
"_sync_id": "offer-solid",
"_file_path": "./files/icons/solid/offer.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "offer.svg",
"title": "offer",
"tags": [],
"description": "offer"
},
{
"_sync_id": "plant-solid",
"_file_path": "./files/icons/solid/plant.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "plant.svg",
"title": "plant",
"tags": [],
"description": "plant"
},
{
"_sync_id": "point-solid",
"_file_path": "./files/icons/solid/point.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "point.svg",
"title": "point",
"tags": [],
"description": "point"
},
{
"_sync_id": "puzzle-solid",
"_file_path": "./files/icons/solid/puzzle.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "puzzle.svg",
"title": "puzzle",
"tags": [],
"description": "puzzle"
},
{
"_sync_id": "quest-solid",
"_file_path": "./files/icons/solid/quest.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "quest.svg",
"title": "quest",
"tags": [],
"description": "quest"
},
{
"_sync_id": "shop-solid",
"_file_path": "./files/icons/solid/shop.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "shop.svg",
"title": "shop",
"tags": [],
"description": "shop"
},
{
"_sync_id": "staff-snake-solid",
"_file_path": "./files/icons/solid/staff-snake.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "staff-snake.svg",
"title": "staff-snake",
"tags": [],
"description": "staff-snake"
},
{
"_sync_id": "star-solid",
"_file_path": "./files/icons/solid/star.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "star.svg",
"title": "star",
"tags": [],
"description": "star"
},
{
"_sync_id": "steps-solid",
"_file_path": "./files/icons/solid/steps.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "steps.svg",
"title": "steps",
"tags": [],
"description": "steps"
},
{
"_sync_id": "suitecase-solid",
"_file_path": "./files/icons/solid/suitecase.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "suitecase.svg",
"title": "suitecase",
"tags": [],
"description": "suitecase"
},
{
"_sync_id": "tree-solid",
"_file_path": "./files/icons/solid/tree.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "tree.svg",
"title": "tree",
"tags": [],
"description": "tree"
},
{
"_sync_id": "user-solid",
"_file_path": "./files/icons/solid/user.svg",
"storage": "local",
"folder": "889a110a-a117-40fa-b091-5c5a2766563f",
"filename_download": "user.svg",
"title": "user",
"tags": [],
"description": "user"
}
]
}

View File

@ -0,0 +1 @@
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg"><path d="M247.21,172.53A8,8,0,0,0,240,168H144V144h72a8,8,0,0,0,5.92-13.38L144,44.91V8a8,8,0,0,0-14.21-5l-104,128A8,8,0,0,0,32,144h96v24H16a8,8,0,0,0-6.25,13l29.6,37a15.93,15.93,0,0,0,12.49,6H204.16a15.93,15.93,0,0,0,12.49-6l29.6-37A8,8,0,0,0,247.21,172.53ZM197.92,128H144V68.69ZM48.81,128,128,30.53V128Zm155.35,80H51.84l-19.2-24H223.36Z"></path></svg>

After

Width:  |  Height:  |  Size: 473 B

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.75 3V5.25M17.25 3V5.25M3 18.75V7.5C3 6.25736 4.00736 5.25 5.25 5.25H18.75C19.9926 5.25 21 6.25736 21 7.5V18.75M3 18.75C3 19.9926 4.00736 21 5.25 21H18.75C19.9926 21 21 19.9926 21 18.75M3 18.75V11.25C3 10.0074 4.00736 9 5.25 9H18.75C19.9926 9 21 10.0074 21 11.25V18.75M12 12.75H12.0075V12.7575H12V12.75ZM12 15H12.0075V15.0075H12V15ZM12 17.25H12.0075V17.2575H12V17.25ZM9.75 15H9.7575V15.0075H9.75V15ZM9.75 17.25H9.7575V17.2575H9.75V17.25ZM7.5 15H7.5075V15.0075H7.5V15ZM7.5 17.25H7.5075V17.2575H7.5V17.25ZM14.25 12.75H14.2575V12.7575H14.25V12.75ZM14.25 15H14.2575V15.0075H14.25V15ZM14.25 17.25H14.2575V17.2575H14.25V17.25ZM16.5 12.75H16.5075V12.7575H16.5V12.75ZM16.5 15H16.5075V15.0075H16.5V15Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 893 B

View File

@ -0,0 +1 @@
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"><path d="M946.5 505L560.1 118.8l-25.9-25.9a31.5 31.5 0 0 0-44.4 0L77.5 505a63.9 63.9 0 0 0-18.8 46c.4 35.2 29.7 63.3 64.9 63.3h42.5V940h691.8V614.3h43.4c17.1 0 33.2-6.7 45.3-18.8a63.6 63.6 0 0 0 18.7-45.3c0-17-6.7-33.1-18.8-45.2zM568 868H456V664h112v204zm217.9-325.7V868H632V640c0-22.1-17.9-40-40-40H432c-22.1 0-40 17.9-40 40v228H238.1V542.3h-96l370-369.7 23.1 23.1L882 542.3h-96.1z"></path></svg>

After

Width:  |  Height:  |  Size: 521 B

View File

@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15 10.5C15 12.1569 13.6569 13.5 12 13.5C10.3431 13.5 9 12.1569 9 10.5C9 8.84315 10.3431 7.5 12 7.5C13.6569 7.5 15 8.84315 15 10.5Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M19.5 10.5C19.5 17.6421 12 21.75 12 21.75C12 21.75 4.5 17.6421 4.5 10.5C4.5 6.35786 7.85786 3 12 3C16.1421 3 19.5 6.35786 19.5 10.5Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 558 B

View File

@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15.75 6C15.75 8.07107 14.071 9.75 12 9.75C9.9289 9.75 8.24996 8.07107 8.24996 6C8.24996 3.92893 9.9289 2.25 12 2.25C14.071 2.25 15.75 3.92893 15.75 6Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M4.5011 20.1182C4.5714 16.0369 7.90184 12.75 12 12.75C16.0982 12.75 19.4287 16.0371 19.4988 20.1185C17.216 21.166 14.6764 21.75 12.0003 21.75C9.32396 21.75 6.78406 21.1659 4.5011 20.1182Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 633 B

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15 19.1276C15.8329 19.37 16.7138 19.5 17.625 19.5C19.1037 19.5 20.5025 19.1576 21.7464 18.5478C21.7488 18.4905 21.75 18.4329 21.75 18.375C21.75 16.0968 19.9031 14.25 17.625 14.25C16.2069 14.25 14.956 14.9655 14.2136 16.0552M15 19.1276V19.125C15 18.0121 14.7148 16.9658 14.2136 16.0552M15 19.1276C15 19.1632 14.9997 19.1988 14.9991 19.2343C13.1374 20.3552 10.9565 21 8.625 21C6.29353 21 4.11264 20.3552 2.25092 19.2343C2.25031 19.198 2.25 19.1615 2.25 19.125C2.25 15.6042 5.10418 12.75 8.625 12.75C11.0329 12.75 13.129 14.085 14.2136 16.0552M12 6.375C12 8.23896 10.489 9.75 8.625 9.75C6.76104 9.75 5.25 8.23896 5.25 6.375C5.25 4.51104 6.76104 3 8.625 3C10.489 3 12 4.51104 12 6.375ZM20.25 8.625C20.25 10.0747 19.0747 11.25 17.625 11.25C16.1753 11.25 15 10.0747 15 8.625C15 7.17525 16.1753 6 17.625 6C19.0747 6 20.25 7.17525 20.25 8.625Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1 @@
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="M388 448a92 92 0 1 1 92-92 92.1 92.1 0 0 1-92 92zm0-152a60 60 0 1 0 60 60 60.07 60.07 0 0 0-60-60zM124 448a92 92 0 1 1 92-92 92.1 92.1 0 0 1-92 92zm0-152a60 60 0 1 0 60 60 60.07 60.07 0 0 0-60-60zm196-168a31.89 31.89 0 0 0 32-32.1A31.55 31.55 0 0 0 320.2 64a32 32 0 1 0-.2 64z"></path><path d="M367.55 192h-43.76a4 4 0 0 1-3.51-2.08l-31.74-58.17a31 31 0 0 0-49.38-7.75l-69.86 70.4a32.56 32.56 0 0 0-9.3 22.4c0 17.4 12.6 23.6 18.5 27.1 28.5 16.42 48.57 28.43 59.58 35.1a4 4 0 0 1 1.92 3.41v69.12c0 8.61 6.62 16 15.23 16.43A16 16 0 0 0 272 352v-86a16 16 0 0 0-6.66-13l-37-26.61a4 4 0 0 1-.58-6l42-44.79a4 4 0 0 1 6.42.79L298 215.77a16 16 0 0 0 14 8.23h56a16 16 0 0 0 16-16.77c-.42-8.61-7.84-15.23-16.45-15.23z"></path></svg>

After

Width:  |  Height:  |  Size: 853 B

View File

@ -0,0 +1 @@
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg"><path d="M160,140V72.85a4,4,0,0,1,7-2.69l55,60.46a8,8,0,0,1,.43,10.26,8.24,8.24,0,0,1-6.58,3.12H164A4,4,0,0,1,160,140Zm87.21,32.53A8,8,0,0,0,240,168H144V8a8,8,0,0,0-14.21-5l-104,128A8,8,0,0,0,32,144h96v24H16a8,8,0,0,0-6.25,13l29.6,37a15.93,15.93,0,0,0,12.49,6H204.16a15.93,15.93,0,0,0,12.49-6l29.6-37A8,8,0,0,0,247.21,172.53Z"></path></svg>

After

Width:  |  Height:  |  Size: 462 B

View File

@ -0,0 +1 @@
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" height="200px" width="200px" xmlns="http://www.w3.org/2000/svg"><path d="M48 400h368v48H48zM424 64H80v224c0 44 36 80 80 80h144c44 0 80-36 80-80v-64h40c22 0 40-18 40-40v-80c0-22-18-40-40-40zm0 112h-40v-64h40v64z"></path></svg>

After

Width:  |  Height:  |  Size: 312 B

Some files were not shown because too many files have changed in this diff Show More