initial commit

This commit is contained in:
2026-05-03 10:00:01 +02:00
parent ac2d1f25e5
commit 41d017b70f
20 changed files with 4019 additions and 276 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1 +1 @@
{"DocumentConnection":{"type":"DocumentConnection","resolveType":"multiCollectionDocumentList","collections":["post","page"]},"Node":{"type":"Node","resolveType":"nodeDocument"},"DocumentNode":{"type":"DocumentNode","resolveType":"multiCollectionDocument","createDocument":"create","updateDocument":"update"},"Post":{"type":"Post","resolveType":"collectionDocument","collection":"post","createPost":"create","updatePost":"update"},"PostConnection":{"type":"PostConnection","resolveType":"collectionDocumentList","collection":"post"},"Page":{"type":"Page","resolveType":"collectionDocument","collection":"page","createPage":"create","updatePage":"update"},"PageConnection":{"type":"PageConnection","resolveType":"collectionDocumentList","collection":"page"}}
{"DocumentConnection":{"type":"DocumentConnection","resolveType":"multiCollectionDocumentList","collections":["post","page","theaterHomepage"]},"Node":{"type":"Node","resolveType":"nodeDocument"},"DocumentNode":{"type":"DocumentNode","resolveType":"multiCollectionDocument","createDocument":"create","updateDocument":"update"},"Post":{"type":"Post","resolveType":"collectionDocument","collection":"post","createPost":"create","updatePost":"update"},"PostConnection":{"type":"PostConnection","resolveType":"collectionDocumentList","collection":"post"},"Page":{"type":"Page","resolveType":"collectionDocument","collection":"page","createPage":"create","updatePage":"update"},"PageConnection":{"type":"PageConnection","resolveType":"collectionDocumentList","collection":"page"},"TheaterHomepage":{"type":"TheaterHomepage","resolveType":"collectionDocument","collection":"theaterHomepage","createTheaterHomepage":"create","updateTheaterHomepage":"update"},"TheaterHomepageConnection":{"type":"TheaterHomepageConnection","resolveType":"collectionDocumentList","collection":"theaterHomepage"}}
+1 -1
View File
File diff suppressed because one or more lines are too long
+5 -2
View File
@@ -1,2 +1,5 @@
export default ()=>({})
export const client = ()=>({})
import { createClient } from "tinacms/dist/client";
import { queries } from "./types";
export const client = createClient({ url: 'http://localhost:4001/graphql', token: '', queries, });
export default client;
+380
View File
@@ -91,6 +91,386 @@ var config_default = defineConfig({
required: true
}
]
},
{
name: "theaterHomepage",
label: "Theater Homepage",
path: "content/theater",
format: "mdx",
ui: {
allowedActions: {
create: false,
delete: false
}
},
fields: [
{
type: "string",
name: "title",
label: "Page Title",
isTitle: true,
required: true
},
// Hero Section
{
type: "object",
name: "hero",
label: "Hero Section",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true
},
{
type: "string",
name: "subtitle_de",
label: "Subtitle (German)",
required: true,
ui: {
component: "textarea"
}
},
{
type: "string",
name: "subtitle_en",
label: "Subtitle (English)",
required: true,
ui: {
component: "textarea"
}
}
]
},
// Section 1: Das Projekt
{
type: "object",
name: "projekt",
label: "Section 1: Das Projekt / The Project",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true
},
{
type: "rich-text",
name: "content_de",
label: "Content (German)",
required: true
},
{
type: "rich-text",
name: "content_en",
label: "Content (English)",
required: true
}
]
},
// Section 2: Wer steckt dahinter
{
type: "object",
name: "team",
label: "Section 2: Wer steckt dahinter / Who's Behind It",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true
},
{
type: "rich-text",
name: "content_de",
label: "Content (German)",
required: true
},
{
type: "rich-text",
name: "content_en",
label: "Content (English)",
required: true
},
{
type: "object",
name: "organizations",
label: "Organizations",
list: true,
fields: [
{
type: "string",
name: "name",
label: "Name"
},
{
type: "string",
name: "role_de",
label: "Role (German)"
},
{
type: "string",
name: "role_en",
label: "Role (English)"
}
]
}
]
},
// Section 3: Das Stück
{
type: "object",
name: "stueck",
label: "Section 3: Das St\xFCck / The Play",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true
},
{
type: "rich-text",
name: "content_de",
label: "Content (German)",
required: true
},
{
type: "rich-text",
name: "content_en",
label: "Content (English)",
required: true
}
]
},
// Section 4: Mitwirkung
{
type: "object",
name: "mitwirkung",
label: "Section 4: Mitwirkung / Participation",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true
},
{
type: "rich-text",
name: "content_de",
label: "Content (German)",
required: true
},
{
type: "rich-text",
name: "content_en",
label: "Content (English)",
required: true
},
{
type: "string",
name: "director_name",
label: "Director Name"
},
{
type: "string",
name: "director_email",
label: "Director Email"
},
{
type: "string",
name: "director_phone",
label: "Director Phone"
}
]
},
// Section 5: Termine
{
type: "object",
name: "termine",
label: "Section 5: Termine / Schedule",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true
},
{
type: "object",
name: "events",
label: "Events",
list: true,
fields: [
{
type: "string",
name: "title_de",
label: "Event Title (German)"
},
{
type: "string",
name: "title_en",
label: "Event Title (English)"
},
{
type: "string",
name: "date",
label: "Date/Period"
},
{
type: "string",
name: "description_de",
label: "Description (German)",
ui: {
component: "textarea"
}
},
{
type: "string",
name: "description_en",
label: "Description (English)",
ui: {
component: "textarea"
}
}
]
}
]
},
// Section 6: Presse
{
type: "object",
name: "presse",
label: "Section 6: Presse / Press",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true
},
{
type: "rich-text",
name: "content_de",
label: "Content (German)",
required: true
},
{
type: "rich-text",
name: "content_en",
label: "Content (English)",
required: true
}
]
},
// Section 7: Foto Galerie
{
type: "object",
name: "gallery",
label: "Section 7: Foto Galerie / Photo Gallery",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true
},
{
type: "image",
name: "images",
label: "Gallery Images",
list: true
}
]
},
// Section 8: Tickets
{
type: "object",
name: "tickets",
label: "Section 8: Tickets",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true
},
{
type: "rich-text",
name: "content_de",
label: "Content (German)",
required: true
},
{
type: "rich-text",
name: "content_en",
label: "Content (English)",
required: true
},
{
type: "string",
name: "ticket_url",
label: "Ticket Purchase URL",
description: "External link to ticket partner"
}
]
}
]
}
]
}
+98
View File
@@ -0,0 +1,98 @@
fragment PostParts on Post {
__typename
title
date
excerpt
coverImage
body
}
fragment PageParts on Page {
__typename
title
description
body
}
fragment TheaterHomepageParts on TheaterHomepage {
__typename
title
hero {
__typename
title_de
title_en
subtitle_de
subtitle_en
}
projekt {
__typename
title_de
title_en
content_de
content_en
}
team {
__typename
title_de
title_en
content_de
content_en
organizations {
__typename
name
role_de
role_en
}
}
stueck {
__typename
title_de
title_en
content_de
content_en
}
mitwirkung {
__typename
title_de
title_en
content_de
content_en
director_name
director_email
director_phone
}
termine {
__typename
title_de
title_en
events {
__typename
title_de
title_en
date
description_de
description_en
}
}
presse {
__typename
title_de
title_en
content_de
content_en
}
gallery {
__typename
title_de
title_en
images
}
tickets {
__typename
title_de
title_en
content_de
content_en
ticket_url
}
}
+164
View File
@@ -0,0 +1,164 @@
query post($relativePath: String!) {
post(relativePath: $relativePath) {
... on Document {
_sys {
filename
basename
hasReferences
breadcrumbs
path
relativePath
extension
}
id
}
...PostParts
}
}
query postConnection($before: String, $after: String, $first: Float, $last: Float, $sort: String, $filter: PostFilter) {
postConnection(
before: $before
after: $after
first: $first
last: $last
sort: $sort
filter: $filter
) {
pageInfo {
hasPreviousPage
hasNextPage
startCursor
endCursor
}
totalCount
edges {
cursor
node {
... on Document {
_sys {
filename
basename
hasReferences
breadcrumbs
path
relativePath
extension
}
id
}
...PostParts
}
}
}
}
query page($relativePath: String!) {
page(relativePath: $relativePath) {
... on Document {
_sys {
filename
basename
hasReferences
breadcrumbs
path
relativePath
extension
}
id
}
...PageParts
}
}
query pageConnection($before: String, $after: String, $first: Float, $last: Float, $sort: String, $filter: PageFilter) {
pageConnection(
before: $before
after: $after
first: $first
last: $last
sort: $sort
filter: $filter
) {
pageInfo {
hasPreviousPage
hasNextPage
startCursor
endCursor
}
totalCount
edges {
cursor
node {
... on Document {
_sys {
filename
basename
hasReferences
breadcrumbs
path
relativePath
extension
}
id
}
...PageParts
}
}
}
}
query theaterHomepage($relativePath: String!) {
theaterHomepage(relativePath: $relativePath) {
... on Document {
_sys {
filename
basename
hasReferences
breadcrumbs
path
relativePath
extension
}
id
}
...TheaterHomepageParts
}
}
query theaterHomepageConnection($before: String, $after: String, $first: Float, $last: Float, $sort: String, $filter: TheaterHomepageFilter) {
theaterHomepageConnection(
before: $before
after: $after
first: $first
last: $last
sort: $sort
filter: $filter
) {
pageInfo {
hasPreviousPage
hasNextPage
startCursor
endCursor
}
totalCount
edges {
cursor
node {
... on Document {
_sys {
filename
basename
hasReferences
breadcrumbs
path
relativePath
extension
}
id
}
...TheaterHomepageParts
}
}
}
}
+517
View File
@@ -0,0 +1,517 @@
# DO NOT MODIFY THIS FILE. This file is automatically generated by Tina
"""References another document, used as a foreign key"""
scalar Reference
""""""
scalar JSON
type SystemInfo {
filename: String!
title: String
basename: String!
hasReferences: Boolean
breadcrumbs(excludeExtension: Boolean): [String!]!
path: String!
relativePath: String!
extension: String!
template: String!
collection: Collection!
}
type Folder {
name: String!
path: String!
}
type PageInfo {
hasPreviousPage: Boolean!
hasNextPage: Boolean!
startCursor: String!
endCursor: String!
}
""""""
interface Node {
id: ID!
}
""""""
interface Document {
id: ID!
_sys: SystemInfo
_values: JSON!
}
"""A relay-compliant pagination connection"""
interface Connection {
totalCount: Float!
pageInfo: PageInfo!
}
type Query {
getOptimizedQuery(queryString: String!): String
collection(collection: String): Collection!
collections: [Collection!]!
node(id: String): Node!
document(collection: String, relativePath: String): DocumentNode!
post(relativePath: String): Post!
postConnection(before: String, after: String, first: Float, last: Float, sort: String, filter: PostFilter): PostConnection!
page(relativePath: String): Page!
pageConnection(before: String, after: String, first: Float, last: Float, sort: String, filter: PageFilter): PageConnection!
theaterHomepage(relativePath: String): TheaterHomepage!
theaterHomepageConnection(before: String, after: String, first: Float, last: Float, sort: String, filter: TheaterHomepageFilter): TheaterHomepageConnection!
}
input DocumentFilter {
post: PostFilter
page: PageFilter
theaterHomepage: TheaterHomepageFilter
}
type DocumentConnectionEdges {
cursor: String!
node: DocumentNode
}
type DocumentConnection implements Connection {
pageInfo: PageInfo!
totalCount: Float!
edges: [DocumentConnectionEdges]
}
type Collection {
name: String!
slug: String!
label: String
path: String!
format: String
matches: String
templates: [JSON]
fields: [JSON]
documents(before: String, after: String, first: Float, last: Float, sort: String, filter: DocumentFilter, folder: String): DocumentConnection!
}
union DocumentNode = Post | Page | TheaterHomepage | Folder
type Post implements Node & Document {
title: String!
date: String!
excerpt: String!
coverImage: String
body: JSON!
id: ID!
_sys: SystemInfo!
_values: JSON!
}
input StringFilter {
startsWith: String
eq: String
exists: Boolean
in: [String]
}
input DatetimeFilter {
after: String
before: String
eq: String
exists: Boolean
in: [String]
}
input ImageFilter {
startsWith: String
eq: String
exists: Boolean
in: [String]
}
input RichTextFilter {
startsWith: String
eq: String
exists: Boolean
}
input PostFilter {
title: StringFilter
date: DatetimeFilter
excerpt: StringFilter
coverImage: ImageFilter
body: RichTextFilter
}
type PostConnectionEdges {
cursor: String!
node: Post
}
type PostConnection implements Connection {
pageInfo: PageInfo!
totalCount: Float!
edges: [PostConnectionEdges]
}
type Page implements Node & Document {
title: String!
description: String
body: JSON!
id: ID!
_sys: SystemInfo!
_values: JSON!
}
input PageFilter {
title: StringFilter
description: StringFilter
body: RichTextFilter
}
type PageConnectionEdges {
cursor: String!
node: Page
}
type PageConnection implements Connection {
pageInfo: PageInfo!
totalCount: Float!
edges: [PageConnectionEdges]
}
type TheaterHomepageHero {
title_de: String!
title_en: String!
subtitle_de: String!
subtitle_en: String!
}
type TheaterHomepageProjekt {
title_de: String!
title_en: String!
content_de: JSON!
content_en: JSON!
}
type TheaterHomepageTeamOrganizations {
name: String
role_de: String
role_en: String
}
type TheaterHomepageTeam {
title_de: String!
title_en: String!
content_de: JSON!
content_en: JSON!
organizations: [TheaterHomepageTeamOrganizations]
}
type TheaterHomepageStueck {
title_de: String!
title_en: String!
content_de: JSON!
content_en: JSON!
}
type TheaterHomepageMitwirkung {
title_de: String!
title_en: String!
content_de: JSON!
content_en: JSON!
director_name: String
director_email: String
director_phone: String
}
type TheaterHomepageTermineEvents {
title_de: String
title_en: String
date: String
description_de: String
description_en: String
}
type TheaterHomepageTermine {
title_de: String!
title_en: String!
events: [TheaterHomepageTermineEvents]
}
type TheaterHomepagePresse {
title_de: String!
title_en: String!
content_de: JSON!
content_en: JSON!
}
type TheaterHomepageGallery {
title_de: String!
title_en: String!
images: [String]
}
type TheaterHomepageTickets {
title_de: String!
title_en: String!
content_de: JSON!
content_en: JSON!
ticket_url: String
}
type TheaterHomepage implements Node & Document {
title: String!
hero: TheaterHomepageHero
projekt: TheaterHomepageProjekt
team: TheaterHomepageTeam
stueck: TheaterHomepageStueck
mitwirkung: TheaterHomepageMitwirkung
termine: TheaterHomepageTermine
presse: TheaterHomepagePresse
gallery: TheaterHomepageGallery
tickets: TheaterHomepageTickets
id: ID!
_sys: SystemInfo!
_values: JSON!
}
input TheaterHomepageHeroFilter {
title_de: StringFilter
title_en: StringFilter
subtitle_de: StringFilter
subtitle_en: StringFilter
}
input TheaterHomepageProjektFilter {
title_de: StringFilter
title_en: StringFilter
content_de: RichTextFilter
content_en: RichTextFilter
}
input TheaterHomepageTeamOrganizationsFilter {
name: StringFilter
role_de: StringFilter
role_en: StringFilter
}
input TheaterHomepageTeamFilter {
title_de: StringFilter
title_en: StringFilter
content_de: RichTextFilter
content_en: RichTextFilter
organizations: TheaterHomepageTeamOrganizationsFilter
}
input TheaterHomepageStueckFilter {
title_de: StringFilter
title_en: StringFilter
content_de: RichTextFilter
content_en: RichTextFilter
}
input TheaterHomepageMitwirkungFilter {
title_de: StringFilter
title_en: StringFilter
content_de: RichTextFilter
content_en: RichTextFilter
director_name: StringFilter
director_email: StringFilter
director_phone: StringFilter
}
input TheaterHomepageTermineEventsFilter {
title_de: StringFilter
title_en: StringFilter
date: StringFilter
description_de: StringFilter
description_en: StringFilter
}
input TheaterHomepageTermineFilter {
title_de: StringFilter
title_en: StringFilter
events: TheaterHomepageTermineEventsFilter
}
input TheaterHomepagePresseFilter {
title_de: StringFilter
title_en: StringFilter
content_de: RichTextFilter
content_en: RichTextFilter
}
input TheaterHomepageGalleryFilter {
title_de: StringFilter
title_en: StringFilter
images: ImageFilter
}
input TheaterHomepageTicketsFilter {
title_de: StringFilter
title_en: StringFilter
content_de: RichTextFilter
content_en: RichTextFilter
ticket_url: StringFilter
}
input TheaterHomepageFilter {
title: StringFilter
hero: TheaterHomepageHeroFilter
projekt: TheaterHomepageProjektFilter
team: TheaterHomepageTeamFilter
stueck: TheaterHomepageStueckFilter
mitwirkung: TheaterHomepageMitwirkungFilter
termine: TheaterHomepageTermineFilter
presse: TheaterHomepagePresseFilter
gallery: TheaterHomepageGalleryFilter
tickets: TheaterHomepageTicketsFilter
}
type TheaterHomepageConnectionEdges {
cursor: String!
node: TheaterHomepage
}
type TheaterHomepageConnection implements Connection {
pageInfo: PageInfo!
totalCount: Float!
edges: [TheaterHomepageConnectionEdges]
}
type Mutation {
addPendingDocument(collection: String!, relativePath: String!, template: String): DocumentNode!
updateDocument(collection: String, relativePath: String!, params: DocumentUpdateMutation!): DocumentNode!
deleteDocument(collection: String, relativePath: String!): DocumentNode!
createDocument(collection: String, relativePath: String!, params: DocumentMutation!): DocumentNode!
createFolder(collection: String, relativePath: String!): DocumentNode!
updatePost(relativePath: String!, params: PostMutation!): Post!
createPost(relativePath: String!, params: PostMutation!): Post!
updatePage(relativePath: String!, params: PageMutation!): Page!
createPage(relativePath: String!, params: PageMutation!): Page!
updateTheaterHomepage(relativePath: String!, params: TheaterHomepageMutation!): TheaterHomepage!
createTheaterHomepage(relativePath: String!, params: TheaterHomepageMutation!): TheaterHomepage!
}
input DocumentUpdateMutation {
post: PostMutation
page: PageMutation
theaterHomepage: TheaterHomepageMutation
relativePath: String
}
input DocumentMutation {
post: PostMutation
page: PageMutation
theaterHomepage: TheaterHomepageMutation
}
input PostMutation {
title: String
date: String
excerpt: String
coverImage: String
body: JSON
}
input PageMutation {
title: String
description: String
body: JSON
}
input TheaterHomepageHeroMutation {
title_de: String
title_en: String
subtitle_de: String
subtitle_en: String
}
input TheaterHomepageProjektMutation {
title_de: String
title_en: String
content_de: JSON
content_en: JSON
}
input TheaterHomepageTeamOrganizationsMutation {
name: String
role_de: String
role_en: String
}
input TheaterHomepageTeamMutation {
title_de: String
title_en: String
content_de: JSON
content_en: JSON
organizations: [TheaterHomepageTeamOrganizationsMutation]
}
input TheaterHomepageStueckMutation {
title_de: String
title_en: String
content_de: JSON
content_en: JSON
}
input TheaterHomepageMitwirkungMutation {
title_de: String
title_en: String
content_de: JSON
content_en: JSON
director_name: String
director_email: String
director_phone: String
}
input TheaterHomepageTermineEventsMutation {
title_de: String
title_en: String
date: String
description_de: String
description_en: String
}
input TheaterHomepageTermineMutation {
title_de: String
title_en: String
events: [TheaterHomepageTermineEventsMutation]
}
input TheaterHomepagePresseMutation {
title_de: String
title_en: String
content_de: JSON
content_en: JSON
}
input TheaterHomepageGalleryMutation {
title_de: String
title_en: String
images: [String]
}
input TheaterHomepageTicketsMutation {
title_de: String
title_en: String
content_de: JSON
content_en: JSON
ticket_url: String
}
input TheaterHomepageMutation {
title: String
hero: TheaterHomepageHeroMutation
projekt: TheaterHomepageProjektMutation
team: TheaterHomepageTeamMutation
stueck: TheaterHomepageStueckMutation
mitwirkung: TheaterHomepageMitwirkungMutation
termine: TheaterHomepageTermineMutation
presse: TheaterHomepagePresseMutation
gallery: TheaterHomepageGalleryMutation
tickets: TheaterHomepageTicketsMutation
}
schema {
query: Query
mutation: Mutation
}
+1
View File
@@ -0,0 +1 @@
[]
+1129
View File
File diff suppressed because it is too large Load Diff