diff --git a/examples/2-static-layers/package-lock.json b/examples/2-static-layers/package-lock.json
index 4d45be8f..19098ea6 100644
--- a/examples/2-static-layers/package-lock.json
+++ b/examples/2-static-layers/package-lock.json
@@ -13,6 +13,7 @@
},
"devDependencies": {
"@eslint/js": "^9.17.0",
+ "@types/geojson": "^7946.0.16",
"@types/react": "^18.3.18",
"@types/react-dom": "^18.3.5",
"@vitejs/plugin-react": "^4.3.4",
@@ -1270,6 +1271,13 @@
"integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
"dev": true
},
+ "node_modules/@types/geojson": {
+ "version": "7946.0.16",
+ "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz",
+ "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
diff --git a/examples/2-static-layers/package.json b/examples/2-static-layers/package.json
index 93dd2179..127d6363 100644
--- a/examples/2-static-layers/package.json
+++ b/examples/2-static-layers/package.json
@@ -16,6 +16,7 @@
},
"devDependencies": {
"@eslint/js": "^9.17.0",
+ "@types/geojson": "^7946.0.16",
"@types/react": "^18.3.18",
"@types/react-dom": "^18.3.5",
"@vitejs/plugin-react": "^4.3.4",
diff --git a/examples/2-static-layers/src/App.tsx b/examples/2-static-layers/src/App.tsx
index bba8bfed..8ed144cc 100644
--- a/examples/2-static-layers/src/App.tsx
+++ b/examples/2-static-layers/src/App.tsx
@@ -1,6 +1,40 @@
import { UtopiaMap, Layer } from "utopia-ui"
import { events, places } from "./sample-data"
+const itemTypeEvent = {
+ name: "event",
+ show_name_input: false,
+ show_profile_button: false,
+ show_start_end: false,
+ show_start_end_input: false,
+ show_text: false,
+ show_text_input: false,
+ custom_text: "",
+ profileTemplate: [],
+ offers_and_needs: false,
+ icon_as_labels: null,
+ relations: false,
+ template: "TODO",
+ questlog: false,
+}
+
+const itemTypePlace = {
+ name: "event",
+ show_name_input: false,
+ show_profile_button: false,
+ show_start_end: false,
+ show_start_end_input: false,
+ show_text: false,
+ show_text_input: false,
+ custom_text: "",
+ profileTemplate: [],
+ offers_and_needs: false,
+ icon_as_labels: null,
+ relations: false,
+ template: "TODO",
+ questlog: false,
+}
+
function App() {
return (
@@ -9,13 +43,23 @@ function App() {
markerIcon='calendar'
markerShape='square'
markerDefaultColor='#700'
- data={events} />
+ data={events}
+ menuIcon="calendar"
+ menuColor="#700"
+ menuText="events"
+ itemType={itemTypeEvent}
+ />
+ data={places}
+ menuIcon="point"
+ menuColor="#007"
+ menuText="places"
+ itemType={itemTypePlace}
+ />
)
}
diff --git a/examples/2-static-layers/src/sample-data.ts b/examples/2-static-layers/src/sample-data.ts
index ae57855b..8f2682d4 100644
--- a/examples/2-static-layers/src/sample-data.ts
+++ b/examples/2-static-layers/src/sample-data.ts
@@ -1,22 +1,24 @@
+import { Point } from "geojson";
+
export const places = [{
- "id": 51,
+ "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] },
+ "position": { "type": "Point", "coordinates": [9.632435, 50.560342] } as Point,
},
{
- "id": 166,
+ "id": "166",
"name": "Weidendom",
"text": "free camping",
- "position": { "type": "Point", "coordinates": [9.438793, 50.560112] },
+ "position": { "type": "Point", "coordinates": [9.438793, 50.560112] } as Point,
}];
export const events = [
{
- "id": 423,
+ "id": "423",
"name": "Hackathon",
"text": "still in progress",
- "position": { "type": "Point", "coordinates": [10.5, 51.62] },
+ "position": { "type": "Point", "coordinates": [10.5, 51.62] } as Point,
"start": "2022-03-25T12:00:00",
"end": "2022-05-12T12:00:00",
}
diff --git a/package.json b/package.json
index c1f20ccd..e73f5764 100644
--- a/package.json
+++ b/package.json
@@ -113,8 +113,8 @@
"imports": {
"#components/*": "./src/Components/*",
"#utils/*": "./src/Utils/*",
+ "#types/*": "./src/types/*",
"#src/*": "./src/*",
- "#types/*": "./types/*",
"#root/*": "./*"
}
}
diff --git a/rollup.config.js b/rollup.config.js
index 5f4a811b..0370b6cc 100644
--- a/rollup.config.js
+++ b/rollup.config.js
@@ -76,17 +76,16 @@ export default [
],
},
{
- input: 'src/index.tsx',
+ input: 'dist/types/src/index.d.ts',
output: [{ file: 'dist/index.d.ts', format: 'es' }],
plugins: [
aliasConfig,
dts({
- respectExternal: true,
compilerOptions: {
skipLibCheck: true,
},
}),
],
- external: [/\.css$/, /\.d\.ts$/], // ✅ `.d.ts` als extern behandeln
+ external: [/\.css$/], //, /\.d\.ts$/
},
]
diff --git a/src/Components/AppShell/AppShell.tsx b/src/Components/AppShell/AppShell.tsx
index be88baba..9db9aadd 100644
--- a/src/Components/AppShell/AppShell.tsx
+++ b/src/Components/AppShell/AppShell.tsx
@@ -4,6 +4,8 @@ import { SetAppState } from './SetAppState'
import type { AssetsApi } from '#types/AssetsApi'
+export type { AssetsApi } from '#types/AssetsApi'
+
/**
* @category AppShell
*/
diff --git a/src/Components/AppShell/NavBar.tsx b/src/Components/AppShell/NavBar.tsx
index 08971877..36ecee76 100644
--- a/src/Components/AppShell/NavBar.tsx
+++ b/src/Components/AppShell/NavBar.tsx
@@ -3,7 +3,7 @@ import { useEffect, useRef, useState } from 'react'
import { Link, useLocation } from 'react-router-dom'
import { toast } from 'react-toastify'
-import { useAuth } from '#components/Auth'
+import { useAuth } from '#components/Auth/useAuth'
import { useItems } from '#components/Map/hooks/useItems'
import type { Item } from '#types/Item'
diff --git a/src/Components/AppShell/index.tsx b/src/Components/AppShell/index.tsx
index 839a969c..72464ef5 100644
--- a/src/Components/AppShell/index.tsx
+++ b/src/Components/AppShell/index.tsx
@@ -1,4 +1,4 @@
-export { AppShell } from './AppShell'
+export * from './AppShell'
export { SideBar } from './SideBar'
export { Content } from './Content'
export { Sitemap } from './Sitemap'
diff --git a/src/Components/Auth/index.tsx b/src/Components/Auth/index.tsx
index 2a53f98d..c8fe3b90 100644
--- a/src/Components/Auth/index.tsx
+++ b/src/Components/Auth/index.tsx
@@ -1,4 +1,4 @@
-export { AuthProvider, useAuth } from './useAuth'
+export { AuthProvider, UserApi, UserItem } from './useAuth'
export { LoginPage } from './LoginPage'
export { SignupPage } from './SignupPage'
export { RequestPasswordPage } from './RequestPasswordPage'
diff --git a/src/Components/Auth/useAuth.tsx b/src/Components/Auth/useAuth.tsx
index 1cbba54c..ffde8af5 100644
--- a/src/Components/Auth/useAuth.tsx
+++ b/src/Components/Auth/useAuth.tsx
@@ -8,6 +8,9 @@ import { createContext, useState, useContext, useEffect } from 'react'
import type { UserApi } from '#types/UserApi'
import type { UserItem } from '#types/UserItem'
+export type { UserApi } from '#types/UserApi'
+export type { UserItem } from '#types/UserItem'
+
interface AuthProviderProps {
userApi: UserApi
children?: React.ReactNode
diff --git a/src/Components/Gaming/Quests.tsx b/src/Components/Gaming/Quests.tsx
index 07fa54c1..2d14488d 100644
--- a/src/Components/Gaming/Quests.tsx
+++ b/src/Components/Gaming/Quests.tsx
@@ -1,6 +1,6 @@
import { useEffect, useState } from 'react'
-import { useAuth } from '#components/Auth'
+import { useAuth } from '#components/Auth/useAuth'
import { useItems } from '#components/Map/hooks/useItems'
import { useQuestsOpen, useSetQuestOpen } from './hooks/useQuests'
diff --git a/src/Components/Map/Layer.tsx b/src/Components/Map/Layer.tsx
index 01ce5946..a5071cb7 100644
--- a/src/Components/Map/Layer.tsx
+++ b/src/Components/Map/Layer.tsx
@@ -27,6 +27,11 @@ import type { Tag } from '#types/Tag'
import type { Popup } from 'leaflet'
import type { ReactElement, ReactNode } from 'react'
+export type { Item } from '#types/Item'
+export type { LayerProps } from '#types/LayerProps'
+export type { Tag } from '#types/Tag'
+export type { Popup } from 'leaflet'
+
/**
* @category Map
*/
diff --git a/src/Components/Map/Permissions.tsx b/src/Components/Map/Permissions.tsx
index 47a61a1c..4091319b 100644
--- a/src/Components/Map/Permissions.tsx
+++ b/src/Components/Map/Permissions.tsx
@@ -1,6 +1,6 @@
import { useEffect } from 'react'
-import { useAuth } from '#components/Auth'
+import { useAuth } from '#components/Auth/useAuth'
import { useSetPermissionData, useSetPermissionApi, useSetAdminRole } from './hooks/usePermissions'
@@ -8,17 +8,20 @@ import type { ItemsApi } from '#types/ItemsApi'
import type { Permission } from '#types/Permission'
/**
- * @category Map
+ * @category Types
*/
-export function Permissions({
- data,
- api,
- adminRole,
-}: {
+export interface PermissionsProps {
data?: Permission[]
api?: ItemsApi
adminRole?: string
-}) {
+}
+export type { Permission } from '#types/Permission'
+export type { ItemsApi } from '#types/ItemsApi'
+
+/**
+ * @category Map
+ */
+export function Permissions({ data, api, adminRole }: PermissionsProps) {
const setPermissionData = useSetPermissionData()
const setPermissionApi = useSetPermissionApi()
const setAdminRole = useSetAdminRole()
diff --git a/src/Components/Map/Subcomponents/Controls/GratitudeControl.tsx b/src/Components/Map/Subcomponents/Controls/GratitudeControl.tsx
index 873c06e1..473151b0 100644
--- a/src/Components/Map/Subcomponents/Controls/GratitudeControl.tsx
+++ b/src/Components/Map/Subcomponents/Controls/GratitudeControl.tsx
@@ -1,6 +1,6 @@
import { useNavigate } from 'react-router-dom'
-import { useAuth } from '#components/Auth'
+import { useAuth } from '#components/Auth/useAuth'
export const GratitudeControl = () => {
const navigate = useNavigate()
diff --git a/src/Components/Map/Subcomponents/ItemPopupComponents/TextView.tsx b/src/Components/Map/Subcomponents/ItemPopupComponents/TextView.tsx
index 27bb83a2..e33684d3 100644
--- a/src/Components/Map/Subcomponents/ItemPopupComponents/TextView.tsx
+++ b/src/Components/Map/Subcomponents/ItemPopupComponents/TextView.tsx
@@ -27,12 +27,14 @@ export const TextView = ({
text,
truncate = false,
rawText,
+ itemTextField,
}: {
item?: Item
- itemId: string
+ itemId?: string
text?: string
truncate?: boolean
rawText?: string
+ itemTextField?: string
}) => {
if (item) {
text = item.text
@@ -40,6 +42,8 @@ export const TextView = ({
}
const tags = useTags()
const addFilterTag = useAddFilterTag()
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ const itemTextFieldDummy = itemTextField
let innerText = ''
let replacedText = ''
@@ -125,7 +129,7 @@ export const TextView = ({
}: {
children: string
tag: Tag
- itemId: string
+ itemId?: string
}) => {
return (
{
const [loading, setLoading] = useState(false)
const [addItemPopupType, setAddItemPopupType] = useState('')
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ const parameterFieldDummy = parameterField
const tabRef = useRef(null)
diff --git a/src/index.tsx b/src/index.tsx
index 1446e5a5..0e6c5864 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -1,43 +1,12 @@
import './index.css'
-export {
- UtopiaMap,
- Layer,
- Tags,
- Permissions,
- ItemForm,
- ItemView,
- PopupTextAreaInput,
- PopupStartEndInput,
- PopupTextInput,
- PopupButton,
- TextView,
- StartEndView,
- PopupCheckboxInput,
-} from './Components/Map'
-export { AppShell, Content, SideBar, Sitemap } from './Components/AppShell'
-export {
- AuthProvider,
- LoginPage,
- SignupPage,
- RequestPasswordPage,
- SetNewPasswordPage,
-} from './Components/Auth'
-export { UserSettings, ProfileView, ProfileForm } from './Components/Profile'
-export { Quests, Modal } from './Components/Gaming'
-export {
- TitleCard,
- CardPage,
- MapOverlayPage,
- OverlayItemsIndexPage,
- MoonCalendar,
- SelectUser,
- AttestationForm,
- MarketView,
-} from './Components/Templates'
-export { TextInput, TextAreaInput, SelectBox } from './Components/Input'
-
-export * from './types'
+export * from './Components/Map'
+export * from './Components/AppShell'
+export * from './Components/Auth'
+export * from './Components/Profile'
+export * from './Components/Gaming'
+export * from './Components/Templates'
+export * from './Components/Input'
declare global {
interface Window {
diff --git a/src/types/AssetsApi.d.ts b/src/types/AssetsApi.d.ts
index f2005016..7a8e9e77 100644
--- a/src/types/AssetsApi.d.ts
+++ b/src/types/AssetsApi.d.ts
@@ -1,3 +1,6 @@
+/**
+ * @category Types
+ */
export interface AssetsApi {
upload(file: Blob, title: string): Promise<{ id: string }>
url: string
diff --git a/src/types/Item.d.ts b/src/types/Item.d.ts
index 8723732c..4e84e992 100644
--- a/src/types/Item.d.ts
+++ b/src/types/Item.d.ts
@@ -15,6 +15,9 @@ interface GalleryItem {
}
}
+/**
+ * @category Types
+ */
export interface Item {
id: string
name: string
diff --git a/src/types/ItemType.d.ts b/src/types/ItemType.d.ts
index 9a4f621c..df56aff7 100644
--- a/src/types/ItemType.d.ts
+++ b/src/types/ItemType.d.ts
@@ -2,14 +2,18 @@ import type { Key } from 'react'
export interface ItemType {
name: string
+ show_name_input: boolean
+ show_profile_button: boolean
show_start_end: boolean
+ show_start_end_input: boolean
show_text: boolean
+ show_text_input: boolean
+ custom_text: string
// eslint-disable-next-line @typescript-eslint/no-explicit-any
profileTemplate: { collection: string | number; id: Key | null | undefined; item: any }[]
offers_and_needs: boolean
icon_as_labels: unknown
relations: boolean
template: string
- show_start_end_input: boolean
questlog: boolean
}
diff --git a/src/types/ItemsApi.d.ts b/src/types/ItemsApi.d.ts
index 54553c1e..e20b2ed8 100644
--- a/src/types/ItemsApi.d.ts
+++ b/src/types/ItemsApi.d.ts
@@ -1,3 +1,6 @@
+/**
+ * @category Types
+ */
export interface ItemsApi {
getItems(): Promise
getItem?(id: string): Promise
diff --git a/src/types/LayerProps.d.ts b/src/types/LayerProps.d.ts
index fef17678..e1b94b8b 100644
--- a/src/types/LayerProps.d.ts
+++ b/src/types/LayerProps.d.ts
@@ -3,6 +3,9 @@ import type { ItemFormPopupProps } from './ItemFormPopupProps'
import type { ItemsApi } from './ItemsApi'
import type { ItemType } from './ItemType'
+/**
+ * @category Types
+ */
export interface LayerProps {
id?: string
data?: Item[]
diff --git a/src/types/Permission.d.ts b/src/types/Permission.d.ts
index 57067fee..871558a2 100644
--- a/src/types/Permission.d.ts
+++ b/src/types/Permission.d.ts
@@ -1,6 +1,9 @@
import type { PermissionAction } from './PermissionAction'
import type { PermissionCondition } from './PermissionCondition'
+/**
+ * @category Types
+ */
export interface Permission {
id?: string
policy?: { name: string }
diff --git a/src/types/Tag.d.ts b/src/types/Tag.d.ts
index 1dc7c5a9..0999d7cd 100644
--- a/src/types/Tag.d.ts
+++ b/src/types/Tag.d.ts
@@ -1,3 +1,6 @@
+/**
+ * @category Types
+ */
export interface Tag {
color: string
id: string
diff --git a/src/types/UserApi.d.ts b/src/types/UserApi.d.ts
index 6c36cd4e..a35e079d 100644
--- a/src/types/UserApi.d.ts
+++ b/src/types/UserApi.d.ts
@@ -1,5 +1,8 @@
import type { UserItem } from './UserItem'
+/**
+ * @category Types
+ */
export interface UserApi {
register(email: string, password: string, userName: string): Promise
login(email: string, password: string): Promise
diff --git a/src/types/UserItem.d.ts b/src/types/UserItem.d.ts
index 1d28817e..68ccb8d7 100644
--- a/src/types/UserItem.d.ts
+++ b/src/types/UserItem.d.ts
@@ -1,5 +1,8 @@
import type { Profile } from './Profile'
+/**
+ * @category Types
+ */
export interface UserItem {
id?: string
// eslint-disable-next-line @typescript-eslint/no-explicit-any
diff --git a/src/types/index.ts b/src/types/index.ts
deleted file mode 100644
index 42cb2117..00000000
--- a/src/types/index.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-export type { ItemsApi } from './ItemsApi'
-export type { Tag } from './Tag'
-export type { Item } from './Item'
-export type { Permission } from './Permission'
-export type { LayerProps } from './LayerProps'
-export type { UserApi } from './UserApi'
-export type { UserItem } from './UserItem'
-export type { UtopiaMapProps } from './UtopiaMapProps'
-export type { AssetsApi } from './AssetsApi'
diff --git a/tsconfig.json b/tsconfig.json
index 69322b8e..2a66fedf 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -22,15 +22,15 @@
"paths": {
"#components/*": ["./src/Components/*"],
"#utils/*": ["./src/Utils/*"],
- "#src/*": ["./src/*"],
"#types/*": ["./src/types/*"],
+ "#src/*": ["./src/*"],
"#root/*": ["./*"]
}
},
"include": ["src", "vite.config.ts", "setupTest.ts", "cypress.config.ts", "cypress/support/commands.ts", "cypress/support/component.ts"],
"exclude": ["node_modules", "dist", "example", "rollup.config.mjss"],
"typeRoots": [
- "./types",
+ "./src/types",
"./node_modules/@types/"
]
}