💄 Optimized navbar
This commit is contained in:
		
							
								
								
									
										57
									
								
								.idea/codeStyles/Project.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								.idea/codeStyles/Project.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | |||||||
|  | <component name="ProjectCodeStyleConfiguration"> | ||||||
|  |   <code_scheme name="Project" version="173"> | ||||||
|  |     <HTMLCodeStyleSettings> | ||||||
|  |       <option name="HTML_SPACE_INSIDE_EMPTY_TAG" value="true" /> | ||||||
|  |     </HTMLCodeStyleSettings> | ||||||
|  |     <JSCodeStyleSettings version="0"> | ||||||
|  |       <option name="FORCE_SEMICOLON_STYLE" value="true" /> | ||||||
|  |       <option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" /> | ||||||
|  |       <option name="FORCE_QUOTE_STYlE" value="true" /> | ||||||
|  |       <option name="ENFORCE_TRAILING_COMMA" value="Remove" /> | ||||||
|  |       <option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" /> | ||||||
|  |       <option name="SPACES_WITHIN_IMPORTS" value="true" /> | ||||||
|  |     </JSCodeStyleSettings> | ||||||
|  |     <TypeScriptCodeStyleSettings version="0"> | ||||||
|  |       <option name="FORCE_SEMICOLON_STYLE" value="true" /> | ||||||
|  |       <option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" /> | ||||||
|  |       <option name="FORCE_QUOTE_STYlE" value="true" /> | ||||||
|  |       <option name="ENFORCE_TRAILING_COMMA" value="Remove" /> | ||||||
|  |       <option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" /> | ||||||
|  |       <option name="SPACES_WITHIN_IMPORTS" value="true" /> | ||||||
|  |     </TypeScriptCodeStyleSettings> | ||||||
|  |     <VueCodeStyleSettings> | ||||||
|  |       <option name="INTERPOLATION_NEW_LINE_AFTER_START_DELIMITER" value="false" /> | ||||||
|  |       <option name="INTERPOLATION_NEW_LINE_BEFORE_END_DELIMITER" value="false" /> | ||||||
|  |     </VueCodeStyleSettings> | ||||||
|  |     <codeStyleSettings language="HTML"> | ||||||
|  |       <option name="SOFT_MARGINS" value="120" /> | ||||||
|  |       <indentOptions> | ||||||
|  |         <option name="INDENT_SIZE" value="2" /> | ||||||
|  |         <option name="CONTINUATION_INDENT_SIZE" value="2" /> | ||||||
|  |         <option name="TAB_SIZE" value="2" /> | ||||||
|  |       </indentOptions> | ||||||
|  |     </codeStyleSettings> | ||||||
|  |     <codeStyleSettings language="JavaScript"> | ||||||
|  |       <option name="SOFT_MARGINS" value="120" /> | ||||||
|  |       <indentOptions> | ||||||
|  |         <option name="INDENT_SIZE" value="2" /> | ||||||
|  |         <option name="CONTINUATION_INDENT_SIZE" value="2" /> | ||||||
|  |         <option name="TAB_SIZE" value="2" /> | ||||||
|  |       </indentOptions> | ||||||
|  |     </codeStyleSettings> | ||||||
|  |     <codeStyleSettings language="TypeScript"> | ||||||
|  |       <option name="SOFT_MARGINS" value="120" /> | ||||||
|  |       <indentOptions> | ||||||
|  |         <option name="INDENT_SIZE" value="2" /> | ||||||
|  |         <option name="CONTINUATION_INDENT_SIZE" value="2" /> | ||||||
|  |         <option name="TAB_SIZE" value="2" /> | ||||||
|  |       </indentOptions> | ||||||
|  |     </codeStyleSettings> | ||||||
|  |     <codeStyleSettings language="Vue"> | ||||||
|  |       <option name="SOFT_MARGINS" value="120" /> | ||||||
|  |       <indentOptions> | ||||||
|  |         <option name="CONTINUATION_INDENT_SIZE" value="2" /> | ||||||
|  |       </indentOptions> | ||||||
|  |     </codeStyleSettings> | ||||||
|  |   </code_scheme> | ||||||
|  | </component> | ||||||
							
								
								
									
										5
									
								
								.idea/codeStyles/codeStyleConfig.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.idea/codeStyles/codeStyleConfig.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | <component name="ProjectCodeStyleConfiguration"> | ||||||
|  |   <state> | ||||||
|  |     <option name="USE_PER_PROJECT_SETTINGS" value="true" /> | ||||||
|  |   </state> | ||||||
|  | </component> | ||||||
							
								
								
									
										5
									
								
								.prettierrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.prettierrc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | { | ||||||
|  |   "tabWidth": 2, | ||||||
|  |   "printWidth": 120, | ||||||
|  |   "singleQuote": false | ||||||
|  | } | ||||||
| @@ -4,14 +4,16 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | |||||||
| var __getOwnPropNames = Object.getOwnPropertyNames; | var __getOwnPropNames = Object.getOwnPropertyNames; | ||||||
| var __hasOwnProp = Object.prototype.hasOwnProperty; | var __hasOwnProp = Object.prototype.hasOwnProperty; | ||||||
| var __export = (target, all) => { | var __export = (target, all) => { | ||||||
|   for (var name in all) |   for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); | ||||||
|     __defProp(target, name, { get: all[name], enumerable: true }); |  | ||||||
| }; | }; | ||||||
| var __copyProps = (to, from, except, desc) => { | var __copyProps = (to, from, except, desc) => { | ||||||
|   if (from && typeof from === "object" || typeof from === "function") { |   if ((from && typeof from === "object") || typeof from === "function") { | ||||||
|     for (let key of __getOwnPropNames(from)) |     for (let key of __getOwnPropNames(from)) | ||||||
|       if (!__hasOwnProp.call(to, key) && key !== except) |       if (!__hasOwnProp.call(to, key) && key !== except) | ||||||
|         __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); |         __defProp(to, key, { | ||||||
|  |           get: () => from[key], | ||||||
|  |           enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable, | ||||||
|  |         }); | ||||||
|   } |   } | ||||||
|   return to; |   return to; | ||||||
| }; | }; | ||||||
| @@ -20,7 +22,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru | |||||||
| // keystone.ts | // keystone.ts | ||||||
| var keystone_exports = {}; | var keystone_exports = {}; | ||||||
| __export(keystone_exports, { | __export(keystone_exports, { | ||||||
|   default: () => keystone_default |   default: () => keystone_default, | ||||||
| }); | }); | ||||||
| module.exports = __toCommonJS(keystone_exports); | module.exports = __toCommonJS(keystone_exports); | ||||||
| var import_core8 = require("@keystone-6/core"); | var import_core8 = require("@keystone-6/core"); | ||||||
| @@ -35,24 +37,24 @@ var allowUser = { | |||||||
|   operation: { |   operation: { | ||||||
|     create: isUser, |     create: isUser, | ||||||
|     update: isUser, |     update: isUser, | ||||||
|     delete: isUser |     delete: isUser, | ||||||
|   } |   }, | ||||||
| }; | }; | ||||||
| var isEditor = ({ session: session2 }) => session2?.data.isEditor || session2?.data.isAdmin; | var isEditor = ({ session: session2 }) => session2?.data.isEditor || session2?.data.isAdmin; | ||||||
| var allowEditor = { | var allowEditor = { | ||||||
|   operation: { |   operation: { | ||||||
|     create: isEditor, |     create: isEditor, | ||||||
|     update: isEditor, |     update: isEditor, | ||||||
|     delete: isEditor |     delete: isEditor, | ||||||
|   } |   }, | ||||||
| }; | }; | ||||||
| var isAdmin = ({ session: session2 }) => session2?.data.isAdmin; | var isAdmin = ({ session: session2 }) => session2?.data.isAdmin; | ||||||
| var allowAdmin = { | var allowAdmin = { | ||||||
|   operation: { |   operation: { | ||||||
|     create: isAdmin, |     create: isAdmin, | ||||||
|     update: isAdmin, |     update: isAdmin, | ||||||
|     delete: isAdmin |     delete: isAdmin, | ||||||
|   } |   }, | ||||||
| }; | }; | ||||||
|  |  | ||||||
| // schema/assets.ts | // schema/assets.ts | ||||||
| @@ -64,9 +66,9 @@ var Image = (0, import_core.list)({ | |||||||
|     caption: (0, import_fields.text)(), |     caption: (0, import_fields.text)(), | ||||||
|     image: (0, import_fields.image)({ storage: "localImages" }), |     image: (0, import_fields.image)({ storage: "localImages" }), | ||||||
|     createdAt: (0, import_fields.timestamp)({ |     createdAt: (0, import_fields.timestamp)({ | ||||||
|       defaultValue: { kind: "now" } |       defaultValue: { kind: "now" }, | ||||||
|     }) |     }), | ||||||
|   } |   }, | ||||||
| }); | }); | ||||||
| var Asset = (0, import_core.list)({ | var Asset = (0, import_core.list)({ | ||||||
|   access: allowEditor, |   access: allowEditor, | ||||||
| @@ -77,17 +79,17 @@ var Asset = (0, import_core.list)({ | |||||||
|       type: "enum", |       type: "enum", | ||||||
|       options: [ |       options: [ | ||||||
|         { label: "Video", value: "video" }, |         { label: "Video", value: "video" }, | ||||||
|         { label: "Audio", value: "audio" } |         { label: "Audio", value: "audio" }, | ||||||
|       ], |       ], | ||||||
|       defaultValue: "video", |       defaultValue: "video", | ||||||
|       db: { map: "media_type" }, |       db: { map: "media_type" }, | ||||||
|       validation: { isRequired: true }, |       validation: { isRequired: true }, | ||||||
|       ui: { displayMode: "select" } |       ui: { displayMode: "select" }, | ||||||
|     }), |     }), | ||||||
|     createdAt: (0, import_fields.timestamp)({ |     createdAt: (0, import_fields.timestamp)({ | ||||||
|       defaultValue: { kind: "now" } |       defaultValue: { kind: "now" }, | ||||||
|     }) |     }), | ||||||
|   } |   }, | ||||||
| }); | }); | ||||||
|  |  | ||||||
| // schema/moments.ts | // schema/moments.ts | ||||||
| @@ -106,10 +108,10 @@ var Moment = (0, import_core2.list)({ | |||||||
|         [1, 1, 1], |         [1, 1, 1], | ||||||
|         [2, 1], |         [2, 1], | ||||||
|         [1, 2], |         [1, 2], | ||||||
|         [1, 2, 1] |         [1, 2, 1], | ||||||
|       ], |       ], | ||||||
|       links: true, |       links: true, | ||||||
|       dividers: true |       dividers: true, | ||||||
|     }), |     }), | ||||||
|     author: (0, import_fields2.relationship)({ |     author: (0, import_fields2.relationship)({ | ||||||
|       ref: "User.moments", |       ref: "User.moments", | ||||||
| @@ -118,9 +120,9 @@ var Moment = (0, import_core2.list)({ | |||||||
|         cardFields: ["name", "email"], |         cardFields: ["name", "email"], | ||||||
|         inlineEdit: { fields: ["name", "email"] }, |         inlineEdit: { fields: ["name", "email"] }, | ||||||
|         linkToItem: true, |         linkToItem: true, | ||||||
|         inlineConnect: true |         inlineConnect: true, | ||||||
|       }, |       }, | ||||||
|       many: false |       many: false, | ||||||
|     }), |     }), | ||||||
|     categories: (0, import_fields2.relationship)({ |     categories: (0, import_fields2.relationship)({ | ||||||
|       ref: "Category.moments", |       ref: "Category.moments", | ||||||
| @@ -131,8 +133,8 @@ var Moment = (0, import_core2.list)({ | |||||||
|         inlineEdit: { fields: ["name"] }, |         inlineEdit: { fields: ["name"] }, | ||||||
|         linkToItem: true, |         linkToItem: true, | ||||||
|         inlineConnect: true, |         inlineConnect: true, | ||||||
|         inlineCreate: { fields: ["name"] } |         inlineCreate: { fields: ["name"] }, | ||||||
|       } |       }, | ||||||
|     }), |     }), | ||||||
|     tags: (0, import_fields2.relationship)({ |     tags: (0, import_fields2.relationship)({ | ||||||
|       ref: "Tag.moments", |       ref: "Tag.moments", | ||||||
| @@ -143,13 +145,13 @@ var Moment = (0, import_core2.list)({ | |||||||
|         inlineEdit: { fields: ["name"] }, |         inlineEdit: { fields: ["name"] }, | ||||||
|         linkToItem: true, |         linkToItem: true, | ||||||
|         inlineConnect: true, |         inlineConnect: true, | ||||||
|         inlineCreate: { fields: ["name"] } |         inlineCreate: { fields: ["name"] }, | ||||||
|       } |       }, | ||||||
|     }), |     }), | ||||||
|     createdAt: (0, import_fields2.timestamp)({ |     createdAt: (0, import_fields2.timestamp)({ | ||||||
|       defaultValue: { kind: "now" } |       defaultValue: { kind: "now" }, | ||||||
|     }) |     }), | ||||||
|   } |   }, | ||||||
| }); | }); | ||||||
|  |  | ||||||
| // schema/categories.ts | // schema/categories.ts | ||||||
| @@ -160,30 +162,30 @@ var Category = (0, import_core3.list)({ | |||||||
|   fields: { |   fields: { | ||||||
|     slug: (0, import_fields3.text)({ |     slug: (0, import_fields3.text)({ | ||||||
|       validation: { |       validation: { | ||||||
|         isRequired: true |         isRequired: true, | ||||||
|       }, |       }, | ||||||
|       isIndexed: "unique" |       isIndexed: "unique", | ||||||
|     }), |     }), | ||||||
|     name: (0, import_fields3.text)(), |     name: (0, import_fields3.text)(), | ||||||
|     posts: (0, import_fields3.relationship)({ ref: "Post.categories", many: true }), |     posts: (0, import_fields3.relationship)({ ref: "Post.categories", many: true }), | ||||||
|     moments: (0, import_fields3.relationship)({ ref: "Moment.categories", many: true }), |     moments: (0, import_fields3.relationship)({ ref: "Moment.categories", many: true }), | ||||||
|     events: (0, import_fields3.relationship)({ ref: "Event.categories", many: true }) |     events: (0, import_fields3.relationship)({ ref: "Event.categories", many: true }), | ||||||
|   } |   }, | ||||||
| }); | }); | ||||||
| var Tag = (0, import_core3.list)({ | var Tag = (0, import_core3.list)({ | ||||||
|   access: allowEditor, |   access: allowEditor, | ||||||
|   fields: { |   fields: { | ||||||
|     slug: (0, import_fields3.text)({ |     slug: (0, import_fields3.text)({ | ||||||
|       validation: { |       validation: { | ||||||
|         isRequired: true |         isRequired: true, | ||||||
|       }, |       }, | ||||||
|       isIndexed: "unique" |       isIndexed: "unique", | ||||||
|     }), |     }), | ||||||
|     name: (0, import_fields3.text)(), |     name: (0, import_fields3.text)(), | ||||||
|     posts: (0, import_fields3.relationship)({ ref: "Post.tags", many: true }), |     posts: (0, import_fields3.relationship)({ ref: "Post.tags", many: true }), | ||||||
|     moments: (0, import_fields3.relationship)({ ref: "Moment.tags", many: true }), |     moments: (0, import_fields3.relationship)({ ref: "Moment.tags", many: true }), | ||||||
|     events: (0, import_fields3.relationship)({ ref: "Event.tags", many: true }) |     events: (0, import_fields3.relationship)({ ref: "Event.tags", many: true }), | ||||||
|   } |   }, | ||||||
| }); | }); | ||||||
|  |  | ||||||
| // schema/projects.ts | // schema/projects.ts | ||||||
| @@ -194,11 +196,10 @@ var Project = (0, import_core4.list)({ | |||||||
|     ...allowAdmin, |     ...allowAdmin, | ||||||
|     filter: { |     filter: { | ||||||
|       query: ({ session: session2 }) => { |       query: ({ session: session2 }) => { | ||||||
|         if (session2?.data.isEditor || session2?.data.isAdmin) |         if (session2?.data.isEditor || session2?.data.isAdmin) return true; | ||||||
|           return true; |  | ||||||
|         return { isPublished: { equals: true } }; |         return { isPublished: { equals: true } }; | ||||||
|       } |       }, | ||||||
|     } |     }, | ||||||
|   }, |   }, | ||||||
|   fields: { |   fields: { | ||||||
|     icon: (0, import_fields4.relationship)({ ref: "Image" }), |     icon: (0, import_fields4.relationship)({ ref: "Image" }), | ||||||
| @@ -212,18 +213,18 @@ var Project = (0, import_core4.list)({ | |||||||
|         { label: "Pending", value: "pending" }, |         { label: "Pending", value: "pending" }, | ||||||
|         { label: "Constructing", value: "constructing" }, |         { label: "Constructing", value: "constructing" }, | ||||||
|         { label: "Published", value: "published" }, |         { label: "Published", value: "published" }, | ||||||
|         { label: "Abandoned", value: "abandoned" } |         { label: "Abandoned", value: "abandoned" }, | ||||||
|       ], |       ], | ||||||
|       defaultValue: "pending", |       defaultValue: "pending", | ||||||
|       db: { map: "project_status" }, |       db: { map: "project_status" }, | ||||||
|       validation: { isRequired: true }, |       validation: { isRequired: true }, | ||||||
|       ui: { displayMode: "select" } |       ui: { displayMode: "select" }, | ||||||
|     }), |     }), | ||||||
|     post: (0, import_fields4.relationship)({ ref: "Post" }), |     post: (0, import_fields4.relationship)({ ref: "Post" }), | ||||||
|     createdAt: (0, import_fields4.timestamp)({ |     createdAt: (0, import_fields4.timestamp)({ | ||||||
|       defaultValue: { kind: "now" } |       defaultValue: { kind: "now" }, | ||||||
|     }) |     }), | ||||||
|   } |   }, | ||||||
| }); | }); | ||||||
|  |  | ||||||
| // schema/posts.ts | // schema/posts.ts | ||||||
| @@ -235,18 +236,17 @@ var Post = (0, import_core5.list)({ | |||||||
|     ...allowEditor, |     ...allowEditor, | ||||||
|     filter: { |     filter: { | ||||||
|       query: ({ session: session2 }) => { |       query: ({ session: session2 }) => { | ||||||
|         if (session2?.data.isEditor || session2?.data.isAdmin) |         if (session2?.data.isEditor || session2?.data.isAdmin) return true; | ||||||
|           return true; |  | ||||||
|         return { isPublished: { equals: true } }; |         return { isPublished: { equals: true } }; | ||||||
|       } |       }, | ||||||
|     } |     }, | ||||||
|   }, |   }, | ||||||
|   fields: { |   fields: { | ||||||
|     slug: (0, import_fields5.text)({ |     slug: (0, import_fields5.text)({ | ||||||
|       validation: { |       validation: { | ||||||
|         isRequired: true |         isRequired: true, | ||||||
|       }, |       }, | ||||||
|       isIndexed: "unique" |       isIndexed: "unique", | ||||||
|     }), |     }), | ||||||
|     title: (0, import_fields5.text)({ validation: { isRequired: true } }), |     title: (0, import_fields5.text)({ validation: { isRequired: true } }), | ||||||
|     cover: (0, import_fields5.relationship)({ ref: "Image" }), |     cover: (0, import_fields5.relationship)({ ref: "Image" }), | ||||||
| @@ -260,21 +260,21 @@ var Post = (0, import_core5.list)({ | |||||||
|         [1, 1, 1], |         [1, 1, 1], | ||||||
|         [2, 1], |         [2, 1], | ||||||
|         [1, 2], |         [1, 2], | ||||||
|         [1, 2, 1] |         [1, 2, 1], | ||||||
|       ], |       ], | ||||||
|       links: true, |       links: true, | ||||||
|       dividers: true |       dividers: true, | ||||||
|     }), |     }), | ||||||
|     type: (0, import_fields5.select)({ |     type: (0, import_fields5.select)({ | ||||||
|       type: "enum", |       type: "enum", | ||||||
|       options: [ |       options: [ | ||||||
|         { label: "Article", value: "article" }, |         { label: "Article", value: "article" }, | ||||||
|         { label: "Podcast", value: "podcast" } |         { label: "Podcast", value: "podcast" }, | ||||||
|       ], |       ], | ||||||
|       defaultValue: "article", |       defaultValue: "article", | ||||||
|       db: { map: "post_type" }, |       db: { map: "post_type" }, | ||||||
|       validation: { isRequired: true }, |       validation: { isRequired: true }, | ||||||
|       ui: { displayMode: "select" } |       ui: { displayMode: "select" }, | ||||||
|     }), |     }), | ||||||
|     isPublished: (0, import_fields5.checkbox)(), |     isPublished: (0, import_fields5.checkbox)(), | ||||||
|     author: (0, import_fields5.relationship)({ |     author: (0, import_fields5.relationship)({ | ||||||
| @@ -284,9 +284,9 @@ var Post = (0, import_core5.list)({ | |||||||
|         cardFields: ["name", "email"], |         cardFields: ["name", "email"], | ||||||
|         inlineEdit: { fields: ["name", "email"] }, |         inlineEdit: { fields: ["name", "email"] }, | ||||||
|         linkToItem: true, |         linkToItem: true, | ||||||
|         inlineConnect: true |         inlineConnect: true, | ||||||
|       }, |       }, | ||||||
|       many: false |       many: false, | ||||||
|     }), |     }), | ||||||
|     categories: (0, import_fields5.relationship)({ |     categories: (0, import_fields5.relationship)({ | ||||||
|       ref: "Category.posts", |       ref: "Category.posts", | ||||||
| @@ -297,8 +297,8 @@ var Post = (0, import_core5.list)({ | |||||||
|         inlineEdit: { fields: ["name"] }, |         inlineEdit: { fields: ["name"] }, | ||||||
|         linkToItem: true, |         linkToItem: true, | ||||||
|         inlineConnect: true, |         inlineConnect: true, | ||||||
|         inlineCreate: { fields: ["name"] } |         inlineCreate: { fields: ["name"] }, | ||||||
|       } |       }, | ||||||
|     }), |     }), | ||||||
|     tags: (0, import_fields5.relationship)({ |     tags: (0, import_fields5.relationship)({ | ||||||
|       ref: "Tag.posts", |       ref: "Tag.posts", | ||||||
| @@ -309,13 +309,13 @@ var Post = (0, import_core5.list)({ | |||||||
|         inlineEdit: { fields: ["name"] }, |         inlineEdit: { fields: ["name"] }, | ||||||
|         linkToItem: true, |         linkToItem: true, | ||||||
|         inlineConnect: true, |         inlineConnect: true, | ||||||
|         inlineCreate: { fields: ["name"] } |         inlineCreate: { fields: ["name"] }, | ||||||
|       } |       }, | ||||||
|     }), |     }), | ||||||
|     createdAt: (0, import_fields5.timestamp)({ |     createdAt: (0, import_fields5.timestamp)({ | ||||||
|       defaultValue: { kind: "now" } |       defaultValue: { kind: "now" }, | ||||||
|     }) |     }), | ||||||
|   } |   }, | ||||||
| }); | }); | ||||||
|  |  | ||||||
| // schema/events.ts | // schema/events.ts | ||||||
| @@ -327,18 +327,17 @@ var Event = (0, import_core6.list)({ | |||||||
|     ...allowEditor, |     ...allowEditor, | ||||||
|     filter: { |     filter: { | ||||||
|       query: ({ session: session2 }) => { |       query: ({ session: session2 }) => { | ||||||
|         if (session2?.data.isEditor || session2?.data.isAdmin) |         if (session2?.data.isEditor || session2?.data.isAdmin) return true; | ||||||
|           return true; |  | ||||||
|         return { isPublished: { equals: true } }; |         return { isPublished: { equals: true } }; | ||||||
|       } |       }, | ||||||
|     } |     }, | ||||||
|   }, |   }, | ||||||
|   fields: { |   fields: { | ||||||
|     slug: (0, import_fields6.text)({ |     slug: (0, import_fields6.text)({ | ||||||
|       validation: { |       validation: { | ||||||
|         isRequired: true |         isRequired: true, | ||||||
|       }, |       }, | ||||||
|       isIndexed: "unique" |       isIndexed: "unique", | ||||||
|     }), |     }), | ||||||
|     title: (0, import_fields6.text)({ validation: { isRequired: true } }), |     title: (0, import_fields6.text)({ validation: { isRequired: true } }), | ||||||
|     description: (0, import_fields6.text)(), |     description: (0, import_fields6.text)(), | ||||||
| @@ -349,10 +348,10 @@ var Event = (0, import_core6.list)({ | |||||||
|         [1, 1, 1], |         [1, 1, 1], | ||||||
|         [2, 1], |         [2, 1], | ||||||
|         [1, 2], |         [1, 2], | ||||||
|         [1, 2, 1] |         [1, 2, 1], | ||||||
|       ], |       ], | ||||||
|       links: true, |       links: true, | ||||||
|       dividers: true |       dividers: true, | ||||||
|     }), |     }), | ||||||
|     isPublished: (0, import_fields6.checkbox)(), |     isPublished: (0, import_fields6.checkbox)(), | ||||||
|     isHistory: (0, import_fields6.checkbox)(), |     isHistory: (0, import_fields6.checkbox)(), | ||||||
| @@ -363,9 +362,9 @@ var Event = (0, import_core6.list)({ | |||||||
|         cardFields: ["name", "email"], |         cardFields: ["name", "email"], | ||||||
|         inlineEdit: { fields: ["name", "email"] }, |         inlineEdit: { fields: ["name", "email"] }, | ||||||
|         linkToItem: true, |         linkToItem: true, | ||||||
|         inlineConnect: true |         inlineConnect: true, | ||||||
|       }, |       }, | ||||||
|       many: false |       many: false, | ||||||
|     }), |     }), | ||||||
|     categories: (0, import_fields6.relationship)({ |     categories: (0, import_fields6.relationship)({ | ||||||
|       ref: "Category.events", |       ref: "Category.events", | ||||||
| @@ -376,8 +375,8 @@ var Event = (0, import_core6.list)({ | |||||||
|         inlineEdit: { fields: ["name"] }, |         inlineEdit: { fields: ["name"] }, | ||||||
|         linkToItem: true, |         linkToItem: true, | ||||||
|         inlineConnect: true, |         inlineConnect: true, | ||||||
|         inlineCreate: { fields: ["name"] } |         inlineCreate: { fields: ["name"] }, | ||||||
|       } |       }, | ||||||
|     }), |     }), | ||||||
|     tags: (0, import_fields6.relationship)({ |     tags: (0, import_fields6.relationship)({ | ||||||
|       ref: "Tag.events", |       ref: "Tag.events", | ||||||
| @@ -388,13 +387,13 @@ var Event = (0, import_core6.list)({ | |||||||
|         inlineEdit: { fields: ["name"] }, |         inlineEdit: { fields: ["name"] }, | ||||||
|         linkToItem: true, |         linkToItem: true, | ||||||
|         inlineConnect: true, |         inlineConnect: true, | ||||||
|         inlineCreate: { fields: ["name"] } |         inlineCreate: { fields: ["name"] }, | ||||||
|       } |       }, | ||||||
|     }), |     }), | ||||||
|     createdAt: (0, import_fields6.timestamp)({ |     createdAt: (0, import_fields6.timestamp)({ | ||||||
|       defaultValue: { kind: "now" } |       defaultValue: { kind: "now" }, | ||||||
|     }) |     }), | ||||||
|   } |   }, | ||||||
| }); | }); | ||||||
|  |  | ||||||
| // schema/index.ts | // schema/index.ts | ||||||
| @@ -405,7 +404,7 @@ var lists = { | |||||||
|       name: (0, import_fields7.text)({ validation: { isRequired: true } }), |       name: (0, import_fields7.text)({ validation: { isRequired: true } }), | ||||||
|       email: (0, import_fields7.text)({ |       email: (0, import_fields7.text)({ | ||||||
|         validation: { isRequired: true }, |         validation: { isRequired: true }, | ||||||
|         isIndexed: "unique" |         isIndexed: "unique", | ||||||
|       }), |       }), | ||||||
|       password: (0, import_fields7.password)({ validation: { isRequired: true } }), |       password: (0, import_fields7.password)({ validation: { isRequired: true } }), | ||||||
|       posts: (0, import_fields7.relationship)({ ref: "Post.author", many: true }), |       posts: (0, import_fields7.relationship)({ ref: "Post.author", many: true }), | ||||||
| @@ -414,9 +413,9 @@ var lists = { | |||||||
|       isAdmin: (0, import_fields7.checkbox)(), |       isAdmin: (0, import_fields7.checkbox)(), | ||||||
|       isEditor: (0, import_fields7.checkbox)(), |       isEditor: (0, import_fields7.checkbox)(), | ||||||
|       createdAt: (0, import_fields7.timestamp)({ |       createdAt: (0, import_fields7.timestamp)({ | ||||||
|         defaultValue: { kind: "now" } |         defaultValue: { kind: "now" }, | ||||||
|       }) |       }), | ||||||
|     } |     }, | ||||||
|   }), |   }), | ||||||
|   Image, |   Image, | ||||||
|   Asset, |   Asset, | ||||||
| @@ -425,7 +424,7 @@ var lists = { | |||||||
|   Project, |   Project, | ||||||
|   Event, |   Event, | ||||||
|   Category, |   Category, | ||||||
|   Tag |   Tag, | ||||||
| }; | }; | ||||||
|  |  | ||||||
| // auth.ts | // auth.ts | ||||||
| @@ -442,13 +441,13 @@ var { withAuth } = (0, import_auth.createAuth)({ | |||||||
|   sessionData: "id name createdAt isAdmin isEditor", |   sessionData: "id name createdAt isAdmin isEditor", | ||||||
|   secretField: "password", |   secretField: "password", | ||||||
|   initFirstItem: { |   initFirstItem: { | ||||||
|     fields: ["name", "email", "password", "isAdmin"] |     fields: ["name", "email", "password", "isAdmin"], | ||||||
|   } |   }, | ||||||
| }); | }); | ||||||
| var sessionMaxAge = 60 * 60 * 24 * 30; | var sessionMaxAge = 60 * 60 * 24 * 30; | ||||||
| var session = (0, import_session.statelessSessions)({ | var session = (0, import_session.statelessSessions)({ | ||||||
|   maxAge: sessionMaxAge, |   maxAge: sessionMaxAge, | ||||||
|   secret: sessionSecret |   secret: sessionSecret, | ||||||
| }); | }); | ||||||
|  |  | ||||||
| // keystone.ts | // keystone.ts | ||||||
| @@ -458,17 +457,17 @@ var databaseProvider = process.env.DATABASE_PROVIDER ?? "postgresql"; | |||||||
| var keystone_default = withAuth( | var keystone_default = withAuth( | ||||||
|   (0, import_core8.config)({ |   (0, import_core8.config)({ | ||||||
|     ui: { |     ui: { | ||||||
|       basePath: "/cms" |       basePath: "/cms", | ||||||
|     }, |     }, | ||||||
|     db: { |     db: { | ||||||
|       provider: databaseProvider, |       provider: databaseProvider, | ||||||
|       url: databaseUrl |       url: databaseUrl, | ||||||
|     }, |     }, | ||||||
|     server: { |     server: { | ||||||
|       cors: { |       cors: { | ||||||
|         origin: "*", |         origin: "*", | ||||||
|         methods: "GET,HEAD,PUT,PATCH,POST,DELETE" |         methods: "GET,HEAD,PUT,PATCH,POST,DELETE", | ||||||
|       } |       }, | ||||||
|     }, |     }, | ||||||
|     storage: { |     storage: { | ||||||
|       localImages: { |       localImages: { | ||||||
| @@ -476,13 +475,13 @@ var keystone_default = withAuth( | |||||||
|         type: "image", |         type: "image", | ||||||
|         generateUrl: (path) => `${baseUrl}/images${path}`, |         generateUrl: (path) => `${baseUrl}/images${path}`, | ||||||
|         serverRoute: { |         serverRoute: { | ||||||
|           path: "/images" |           path: "/images", | ||||||
|  |         }, | ||||||
|  |         storagePath: "public/images", | ||||||
|       }, |       }, | ||||||
|         storagePath: "public/images" |  | ||||||
|       } |  | ||||||
|     }, |     }, | ||||||
|     lists, |     lists, | ||||||
|     session |     session, | ||||||
|   }) |   }), | ||||||
| ); | ); | ||||||
| //# sourceMappingURL=config.js.map | //# sourceMappingURL=config.js.map | ||||||
|   | |||||||
| @@ -6,15 +6,13 @@ import { withAuth, session } from "./auth"; | |||||||
| import { DatabaseProvider } from "@keystone-6/core/types"; | import { DatabaseProvider } from "@keystone-6/core/types"; | ||||||
|  |  | ||||||
| const baseUrl = process.env.BASE_URL ?? "http://localhost:3000"; | const baseUrl = process.env.BASE_URL ?? "http://localhost:3000"; | ||||||
| const databaseUrl = | const databaseUrl = process.env.DATABASE_URL ?? "postgresql://postgres:password@127.0.0.1:5432/capital"; | ||||||
|   process.env.DATABASE_URL ?? |  | ||||||
|   "postgresql://postgres:password@127.0.0.1:5432/capital"; |  | ||||||
| const databaseProvider = process.env.DATABASE_PROVIDER ?? "postgresql"; | const databaseProvider = process.env.DATABASE_PROVIDER ?? "postgresql"; | ||||||
|  |  | ||||||
| export default withAuth( | export default withAuth( | ||||||
|   config({ |   config({ | ||||||
|     ui: { |     ui: { | ||||||
|       basePath: "/cms" |       basePath: "/cms", | ||||||
|     }, |     }, | ||||||
|     db: { |     db: { | ||||||
|       provider: databaseProvider as DatabaseProvider, |       provider: databaseProvider as DatabaseProvider, | ||||||
| @@ -39,5 +37,5 @@ export default withAuth( | |||||||
|     }, |     }, | ||||||
|     lists, |     lists, | ||||||
|     session, |     session, | ||||||
|   }) |   }), | ||||||
| ); | ); | ||||||
|   | |||||||
| @@ -7,8 +7,7 @@ const allowUser: any = { | |||||||
|   }, |   }, | ||||||
| }; | }; | ||||||
|  |  | ||||||
| const isEditor = ({ session }: { session: any }) => | const isEditor = ({ session }: { session: any }) => session?.data.isEditor || session?.data.isAdmin; | ||||||
|   session?.data.isEditor || session?.data.isAdmin; |  | ||||||
| const allowEditor: any = { | const allowEditor: any = { | ||||||
|   operation: { |   operation: { | ||||||
|     create: isEditor, |     create: isEditor, | ||||||
|   | |||||||
| @@ -6,11 +6,29 @@ type User { | |||||||
|   name: String |   name: String | ||||||
|   email: String |   email: String | ||||||
|   password: PasswordState |   password: PasswordState | ||||||
|   posts(where: PostWhereInput! = {}, orderBy: [PostOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: PostWhereUniqueInput): [Post!] |   posts( | ||||||
|  |     where: PostWhereInput! = {} | ||||||
|  |     orderBy: [PostOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: PostWhereUniqueInput | ||||||
|  |   ): [Post!] | ||||||
|   postsCount(where: PostWhereInput! = {}): Int |   postsCount(where: PostWhereInput! = {}): Int | ||||||
|   moments(where: MomentWhereInput! = {}, orderBy: [MomentOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: MomentWhereUniqueInput): [Moment!] |   moments( | ||||||
|  |     where: MomentWhereInput! = {} | ||||||
|  |     orderBy: [MomentOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: MomentWhereUniqueInput | ||||||
|  |   ): [Moment!] | ||||||
|   momentsCount(where: MomentWhereInput! = {}): Int |   momentsCount(where: MomentWhereInput! = {}): Int | ||||||
|   events(where: EventWhereInput! = {}, orderBy: [EventOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: EventWhereUniqueInput): [Event!] |   events( | ||||||
|  |     where: EventWhereInput! = {} | ||||||
|  |     orderBy: [EventOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: EventWhereUniqueInput | ||||||
|  |   ): [Event!] | ||||||
|   eventsCount(where: EventWhereInput! = {}): Int |   eventsCount(where: EventWhereInput! = {}): Int | ||||||
|   isAdmin: Boolean |   isAdmin: Boolean | ||||||
|   isEditor: Boolean |   isEditor: Boolean | ||||||
| @@ -253,7 +271,9 @@ input ImageFieldInput { | |||||||
|   upload: Upload! |   upload: Upload! | ||||||
| } | } | ||||||
|  |  | ||||||
| """The `Upload` scalar type represents a file upload.""" | """ | ||||||
|  | The `Upload` scalar type represents a file upload. | ||||||
|  | """ | ||||||
| scalar Upload | scalar Upload | ||||||
|  |  | ||||||
| input ImageUpdateArgs { | input ImageUpdateArgs { | ||||||
| @@ -335,17 +355,41 @@ type Post { | |||||||
|   title: String |   title: String | ||||||
|   cover: Image |   cover: Image | ||||||
|   description: String |   description: String | ||||||
|   assets(where: AssetWhereInput! = {}, orderBy: [AssetOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: AssetWhereUniqueInput): [Asset!] |   assets( | ||||||
|  |     where: AssetWhereInput! = {} | ||||||
|  |     orderBy: [AssetOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: AssetWhereUniqueInput | ||||||
|  |   ): [Asset!] | ||||||
|   assetsCount(where: AssetWhereInput! = {}): Int |   assetsCount(where: AssetWhereInput! = {}): Int | ||||||
|   images(where: ImageWhereInput! = {}, orderBy: [ImageOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: ImageWhereUniqueInput): [Image!] |   images( | ||||||
|  |     where: ImageWhereInput! = {} | ||||||
|  |     orderBy: [ImageOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: ImageWhereUniqueInput | ||||||
|  |   ): [Image!] | ||||||
|   imagesCount(where: ImageWhereInput! = {}): Int |   imagesCount(where: ImageWhereInput! = {}): Int | ||||||
|   content: Post_content_Document |   content: Post_content_Document | ||||||
|   type: PostTypeType |   type: PostTypeType | ||||||
|   isPublished: Boolean |   isPublished: Boolean | ||||||
|   author: User |   author: User | ||||||
|   categories(where: CategoryWhereInput! = {}, orderBy: [CategoryOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: CategoryWhereUniqueInput): [Category!] |   categories( | ||||||
|  |     where: CategoryWhereInput! = {} | ||||||
|  |     orderBy: [CategoryOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: CategoryWhereUniqueInput | ||||||
|  |   ): [Category!] | ||||||
|   categoriesCount(where: CategoryWhereInput! = {}): Int |   categoriesCount(where: CategoryWhereInput! = {}): Int | ||||||
|   tags(where: TagWhereInput! = {}, orderBy: [TagOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: TagWhereUniqueInput): [Tag!] |   tags( | ||||||
|  |     where: TagWhereInput! = {} | ||||||
|  |     orderBy: [TagOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: TagWhereUniqueInput | ||||||
|  |   ): [Tag!] | ||||||
|   tagsCount(where: TagWhereInput! = {}): Int |   tagsCount(where: TagWhereInput! = {}): Int | ||||||
|   createdAt: DateTime |   createdAt: DateTime | ||||||
| } | } | ||||||
| @@ -534,13 +578,31 @@ input TagRelateToManyForCreateInput { | |||||||
| type Moment { | type Moment { | ||||||
|   id: ID! |   id: ID! | ||||||
|   title: String |   title: String | ||||||
|   images(where: ImageWhereInput! = {}, orderBy: [ImageOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: ImageWhereUniqueInput): [Image!] |   images( | ||||||
|  |     where: ImageWhereInput! = {} | ||||||
|  |     orderBy: [ImageOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: ImageWhereUniqueInput | ||||||
|  |   ): [Image!] | ||||||
|   imagesCount(where: ImageWhereInput! = {}): Int |   imagesCount(where: ImageWhereInput! = {}): Int | ||||||
|   content: Moment_content_Document |   content: Moment_content_Document | ||||||
|   author: User |   author: User | ||||||
|   categories(where: CategoryWhereInput! = {}, orderBy: [CategoryOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: CategoryWhereUniqueInput): [Category!] |   categories( | ||||||
|  |     where: CategoryWhereInput! = {} | ||||||
|  |     orderBy: [CategoryOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: CategoryWhereUniqueInput | ||||||
|  |   ): [Category!] | ||||||
|   categoriesCount(where: CategoryWhereInput! = {}): Int |   categoriesCount(where: CategoryWhereInput! = {}): Int | ||||||
|   tags(where: TagWhereInput! = {}, orderBy: [TagOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: TagWhereUniqueInput): [Tag!] |   tags( | ||||||
|  |     where: TagWhereInput! = {} | ||||||
|  |     orderBy: [TagOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: TagWhereUniqueInput | ||||||
|  |   ): [Tag!] | ||||||
|   tagsCount(where: TagWhereInput! = {}): Int |   tagsCount(where: TagWhereInput! = {}): Int | ||||||
|   createdAt: DateTime |   createdAt: DateTime | ||||||
| } | } | ||||||
| @@ -699,9 +761,21 @@ type Event { | |||||||
|   isPublished: Boolean |   isPublished: Boolean | ||||||
|   isHistory: Boolean |   isHistory: Boolean | ||||||
|   author: User |   author: User | ||||||
|   categories(where: CategoryWhereInput! = {}, orderBy: [CategoryOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: CategoryWhereUniqueInput): [Category!] |   categories( | ||||||
|  |     where: CategoryWhereInput! = {} | ||||||
|  |     orderBy: [CategoryOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: CategoryWhereUniqueInput | ||||||
|  |   ): [Category!] | ||||||
|   categoriesCount(where: CategoryWhereInput! = {}): Int |   categoriesCount(where: CategoryWhereInput! = {}): Int | ||||||
|   tags(where: TagWhereInput! = {}, orderBy: [TagOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: TagWhereUniqueInput): [Tag!] |   tags( | ||||||
|  |     where: TagWhereInput! = {} | ||||||
|  |     orderBy: [TagOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: TagWhereUniqueInput | ||||||
|  |   ): [Tag!] | ||||||
|   tagsCount(where: TagWhereInput! = {}): Int |   tagsCount(where: TagWhereInput! = {}): Int | ||||||
|   createdAt: DateTime |   createdAt: DateTime | ||||||
| } | } | ||||||
| @@ -776,11 +850,29 @@ type Category { | |||||||
|   id: ID! |   id: ID! | ||||||
|   slug: String |   slug: String | ||||||
|   name: String |   name: String | ||||||
|   posts(where: PostWhereInput! = {}, orderBy: [PostOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: PostWhereUniqueInput): [Post!] |   posts( | ||||||
|  |     where: PostWhereInput! = {} | ||||||
|  |     orderBy: [PostOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: PostWhereUniqueInput | ||||||
|  |   ): [Post!] | ||||||
|   postsCount(where: PostWhereInput! = {}): Int |   postsCount(where: PostWhereInput! = {}): Int | ||||||
|   moments(where: MomentWhereInput! = {}, orderBy: [MomentOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: MomentWhereUniqueInput): [Moment!] |   moments( | ||||||
|  |     where: MomentWhereInput! = {} | ||||||
|  |     orderBy: [MomentOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: MomentWhereUniqueInput | ||||||
|  |   ): [Moment!] | ||||||
|   momentsCount(where: MomentWhereInput! = {}): Int |   momentsCount(where: MomentWhereInput! = {}): Int | ||||||
|   events(where: EventWhereInput! = {}, orderBy: [EventOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: EventWhereUniqueInput): [Event!] |   events( | ||||||
|  |     where: EventWhereInput! = {} | ||||||
|  |     orderBy: [EventOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: EventWhereUniqueInput | ||||||
|  |   ): [Event!] | ||||||
|   eventsCount(where: EventWhereInput! = {}): Int |   eventsCount(where: EventWhereInput! = {}): Int | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -832,11 +924,29 @@ type Tag { | |||||||
|   id: ID! |   id: ID! | ||||||
|   slug: String |   slug: String | ||||||
|   name: String |   name: String | ||||||
|   posts(where: PostWhereInput! = {}, orderBy: [PostOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: PostWhereUniqueInput): [Post!] |   posts( | ||||||
|  |     where: PostWhereInput! = {} | ||||||
|  |     orderBy: [PostOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: PostWhereUniqueInput | ||||||
|  |   ): [Post!] | ||||||
|   postsCount(where: PostWhereInput! = {}): Int |   postsCount(where: PostWhereInput! = {}): Int | ||||||
|   moments(where: MomentWhereInput! = {}, orderBy: [MomentOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: MomentWhereUniqueInput): [Moment!] |   moments( | ||||||
|  |     where: MomentWhereInput! = {} | ||||||
|  |     orderBy: [MomentOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: MomentWhereUniqueInput | ||||||
|  |   ): [Moment!] | ||||||
|   momentsCount(where: MomentWhereInput! = {}): Int |   momentsCount(where: MomentWhereInput! = {}): Int | ||||||
|   events(where: EventWhereInput! = {}, orderBy: [EventOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: EventWhereUniqueInput): [Event!] |   events( | ||||||
|  |     where: EventWhereInput! = {} | ||||||
|  |     orderBy: [EventOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: EventWhereUniqueInput | ||||||
|  |   ): [Event!] | ||||||
|   eventsCount(where: EventWhereInput! = {}): Int |   eventsCount(where: EventWhereInput! = {}): Int | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -949,7 +1059,9 @@ type Mutation { | |||||||
|   createInitialUser(data: CreateInitialUserInput!): UserAuthenticationWithPasswordSuccess! |   createInitialUser(data: CreateInitialUserInput!): UserAuthenticationWithPasswordSuccess! | ||||||
| } | } | ||||||
|  |  | ||||||
| union UserAuthenticationWithPasswordResult = UserAuthenticationWithPasswordSuccess | UserAuthenticationWithPasswordFailure | union UserAuthenticationWithPasswordResult = | ||||||
|  |   | UserAuthenticationWithPasswordSuccess | ||||||
|  |   | UserAuthenticationWithPasswordFailure | ||||||
|  |  | ||||||
| type UserAuthenticationWithPasswordSuccess { | type UserAuthenticationWithPasswordSuccess { | ||||||
|   sessionToken: String! |   sessionToken: String! | ||||||
| @@ -968,31 +1080,85 @@ input CreateInitialUserInput { | |||||||
| } | } | ||||||
|  |  | ||||||
| type Query { | type Query { | ||||||
|   users(where: UserWhereInput! = {}, orderBy: [UserOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: UserWhereUniqueInput): [User!] |   users( | ||||||
|  |     where: UserWhereInput! = {} | ||||||
|  |     orderBy: [UserOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: UserWhereUniqueInput | ||||||
|  |   ): [User!] | ||||||
|   user(where: UserWhereUniqueInput!): User |   user(where: UserWhereUniqueInput!): User | ||||||
|   usersCount(where: UserWhereInput! = {}): Int |   usersCount(where: UserWhereInput! = {}): Int | ||||||
|   images(where: ImageWhereInput! = {}, orderBy: [ImageOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: ImageWhereUniqueInput): [Image!] |   images( | ||||||
|  |     where: ImageWhereInput! = {} | ||||||
|  |     orderBy: [ImageOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: ImageWhereUniqueInput | ||||||
|  |   ): [Image!] | ||||||
|   image(where: ImageWhereUniqueInput!): Image |   image(where: ImageWhereUniqueInput!): Image | ||||||
|   imagesCount(where: ImageWhereInput! = {}): Int |   imagesCount(where: ImageWhereInput! = {}): Int | ||||||
|   assets(where: AssetWhereInput! = {}, orderBy: [AssetOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: AssetWhereUniqueInput): [Asset!] |   assets( | ||||||
|  |     where: AssetWhereInput! = {} | ||||||
|  |     orderBy: [AssetOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: AssetWhereUniqueInput | ||||||
|  |   ): [Asset!] | ||||||
|   asset(where: AssetWhereUniqueInput!): Asset |   asset(where: AssetWhereUniqueInput!): Asset | ||||||
|   assetsCount(where: AssetWhereInput! = {}): Int |   assetsCount(where: AssetWhereInput! = {}): Int | ||||||
|   posts(where: PostWhereInput! = {}, orderBy: [PostOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: PostWhereUniqueInput): [Post!] |   posts( | ||||||
|  |     where: PostWhereInput! = {} | ||||||
|  |     orderBy: [PostOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: PostWhereUniqueInput | ||||||
|  |   ): [Post!] | ||||||
|   post(where: PostWhereUniqueInput!): Post |   post(where: PostWhereUniqueInput!): Post | ||||||
|   postsCount(where: PostWhereInput! = {}): Int |   postsCount(where: PostWhereInput! = {}): Int | ||||||
|   moments(where: MomentWhereInput! = {}, orderBy: [MomentOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: MomentWhereUniqueInput): [Moment!] |   moments( | ||||||
|  |     where: MomentWhereInput! = {} | ||||||
|  |     orderBy: [MomentOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: MomentWhereUniqueInput | ||||||
|  |   ): [Moment!] | ||||||
|   moment(where: MomentWhereUniqueInput!): Moment |   moment(where: MomentWhereUniqueInput!): Moment | ||||||
|   momentsCount(where: MomentWhereInput! = {}): Int |   momentsCount(where: MomentWhereInput! = {}): Int | ||||||
|   projects(where: ProjectWhereInput! = {}, orderBy: [ProjectOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: ProjectWhereUniqueInput): [Project!] |   projects( | ||||||
|  |     where: ProjectWhereInput! = {} | ||||||
|  |     orderBy: [ProjectOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: ProjectWhereUniqueInput | ||||||
|  |   ): [Project!] | ||||||
|   project(where: ProjectWhereUniqueInput!): Project |   project(where: ProjectWhereUniqueInput!): Project | ||||||
|   projectsCount(where: ProjectWhereInput! = {}): Int |   projectsCount(where: ProjectWhereInput! = {}): Int | ||||||
|   events(where: EventWhereInput! = {}, orderBy: [EventOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: EventWhereUniqueInput): [Event!] |   events( | ||||||
|  |     where: EventWhereInput! = {} | ||||||
|  |     orderBy: [EventOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: EventWhereUniqueInput | ||||||
|  |   ): [Event!] | ||||||
|   event(where: EventWhereUniqueInput!): Event |   event(where: EventWhereUniqueInput!): Event | ||||||
|   eventsCount(where: EventWhereInput! = {}): Int |   eventsCount(where: EventWhereInput! = {}): Int | ||||||
|   categories(where: CategoryWhereInput! = {}, orderBy: [CategoryOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: CategoryWhereUniqueInput): [Category!] |   categories( | ||||||
|  |     where: CategoryWhereInput! = {} | ||||||
|  |     orderBy: [CategoryOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: CategoryWhereUniqueInput | ||||||
|  |   ): [Category!] | ||||||
|   category(where: CategoryWhereUniqueInput!): Category |   category(where: CategoryWhereUniqueInput!): Category | ||||||
|   categoriesCount(where: CategoryWhereInput! = {}): Int |   categoriesCount(where: CategoryWhereInput! = {}): Int | ||||||
|   tags(where: TagWhereInput! = {}, orderBy: [TagOrderByInput!]! = [], take: Int, skip: Int! = 0, cursor: TagWhereUniqueInput): [Tag!] |   tags( | ||||||
|  |     where: TagWhereInput! = {} | ||||||
|  |     orderBy: [TagOrderByInput!]! = [] | ||||||
|  |     take: Int | ||||||
|  |     skip: Int! = 0 | ||||||
|  |     cursor: TagWhereUniqueInput | ||||||
|  |   ): [Tag!] | ||||||
|   tag(where: TagWhereUniqueInput!): Tag |   tag(where: TagWhereUniqueInput!): Tag | ||||||
|   tagsCount(where: TagWhereInput! = {}): Int |   tagsCount(where: TagWhereInput! = {}): Int | ||||||
|   keystone: KeystoneMeta! |   keystone: KeystoneMeta! | ||||||
|   | |||||||
| @@ -1,9 +1,4 @@ | |||||||
| import { | import { checkbox, relationship, text, timestamp } from "@keystone-6/core/fields"; | ||||||
|   checkbox, |  | ||||||
|   relationship, |  | ||||||
|   text, |  | ||||||
|   timestamp, |  | ||||||
| } from "@keystone-6/core/fields"; |  | ||||||
| import { document } from "@keystone-6/fields-document"; | import { document } from "@keystone-6/fields-document"; | ||||||
| import { list } from "@keystone-6/core"; | import { list } from "@keystone-6/core"; | ||||||
| import { allowEditor } from "../limit"; | import { allowEditor } from "../limit"; | ||||||
|   | |||||||
| @@ -1,12 +1,6 @@ | |||||||
| import { list } from "@keystone-6/core"; | import { list } from "@keystone-6/core"; | ||||||
|  |  | ||||||
| import { | import { text, relationship, password, timestamp, checkbox } from "@keystone-6/core/fields"; | ||||||
|   text, |  | ||||||
|   relationship, |  | ||||||
|   password, |  | ||||||
|   timestamp, |  | ||||||
|   checkbox, |  | ||||||
| } from "@keystone-6/core/fields"; |  | ||||||
|  |  | ||||||
| import { allowAdmin } from "../limit"; | import { allowAdmin } from "../limit"; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -67,4 +67,4 @@ export const Moment = list({ | |||||||
|       defaultValue: { kind: "now" }, |       defaultValue: { kind: "now" }, | ||||||
|     }), |     }), | ||||||
|   }, |   }, | ||||||
|   }) | }); | ||||||
|   | |||||||
| @@ -1,10 +1,4 @@ | |||||||
| import { | import { checkbox, relationship, select, text, timestamp } from "@keystone-6/core/fields"; | ||||||
|   checkbox, |  | ||||||
|   relationship, |  | ||||||
|   select, |  | ||||||
|   text, |  | ||||||
|   timestamp, |  | ||||||
| } from "@keystone-6/core/fields"; |  | ||||||
| import { document } from "@keystone-6/fields-document"; | import { document } from "@keystone-6/fields-document"; | ||||||
| import { list } from "@keystone-6/core"; | import { list } from "@keystone-6/core"; | ||||||
| import { allowEditor } from "../limit"; | import { allowEditor } from "../limit"; | ||||||
|   | |||||||
| @@ -6,5 +6,5 @@ | |||||||
|     "noEmit": true, |     "noEmit": true, | ||||||
|     "esModuleInterop": true, |     "esModuleInterop": true, | ||||||
|     "forceConsistentCasingInFileNames": true, |     "forceConsistentCasingInFileNames": true, | ||||||
|   } |   }, | ||||||
| } | } | ||||||
|   | |||||||
| @@ -139,8 +139,7 @@ body { | |||||||
|   font-family: "Noto Serif SC"; |   font-family: "Noto Serif SC"; | ||||||
|   font-style: normal; |   font-style: normal; | ||||||
|   font-weight: 200; |   font-weight: 200; | ||||||
|   src: url("./noto-serif-sc-v22-chinese-simplified-200.woff2") |   src: url("./noto-serif-sc-v22-chinese-simplified-200.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ | ||||||
|     format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /* noto-serif-sc-300 - chinese-simplified */ | /* noto-serif-sc-300 - chinese-simplified */ | ||||||
| @@ -149,8 +148,7 @@ body { | |||||||
|   font-family: "Noto Serif SC"; |   font-family: "Noto Serif SC"; | ||||||
|   font-style: normal; |   font-style: normal; | ||||||
|   font-weight: 300; |   font-weight: 300; | ||||||
|   src: url("./noto-serif-sc-v22-chinese-simplified-300.woff2") |   src: url("./noto-serif-sc-v22-chinese-simplified-300.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ | ||||||
|     format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /* noto-serif-sc-regular - chinese-simplified */ | /* noto-serif-sc-regular - chinese-simplified */ | ||||||
| @@ -159,8 +157,7 @@ body { | |||||||
|   font-family: "Noto Serif SC"; |   font-family: "Noto Serif SC"; | ||||||
|   font-style: normal; |   font-style: normal; | ||||||
|   font-weight: 400; |   font-weight: 400; | ||||||
|   src: url("./noto-serif-sc-v22-chinese-simplified-regular.woff2") |   src: url("./noto-serif-sc-v22-chinese-simplified-regular.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ | ||||||
|     format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /* noto-serif-sc-500 - chinese-simplified */ | /* noto-serif-sc-500 - chinese-simplified */ | ||||||
| @@ -169,8 +166,7 @@ body { | |||||||
|   font-family: "Noto Serif SC"; |   font-family: "Noto Serif SC"; | ||||||
|   font-style: normal; |   font-style: normal; | ||||||
|   font-weight: 500; |   font-weight: 500; | ||||||
|   src: url("./noto-serif-sc-v22-chinese-simplified-500.woff2") |   src: url("./noto-serif-sc-v22-chinese-simplified-500.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ | ||||||
|     format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /* noto-serif-sc-600 - chinese-simplified */ | /* noto-serif-sc-600 - chinese-simplified */ | ||||||
| @@ -179,8 +175,7 @@ body { | |||||||
|   font-family: "Noto Serif SC"; |   font-family: "Noto Serif SC"; | ||||||
|   font-style: normal; |   font-style: normal; | ||||||
|   font-weight: 600; |   font-weight: 600; | ||||||
|   src: url("./noto-serif-sc-v22-chinese-simplified-600.woff2") |   src: url("./noto-serif-sc-v22-chinese-simplified-600.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ | ||||||
|     format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /* noto-serif-sc-700 - chinese-simplified */ | /* noto-serif-sc-700 - chinese-simplified */ | ||||||
| @@ -189,8 +184,7 @@ body { | |||||||
|   font-family: "Noto Serif SC"; |   font-family: "Noto Serif SC"; | ||||||
|   font-style: normal; |   font-style: normal; | ||||||
|   font-weight: 700; |   font-weight: 700; | ||||||
|   src: url("./noto-serif-sc-v22-chinese-simplified-700.woff2") |   src: url("./noto-serif-sc-v22-chinese-simplified-700.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ | ||||||
|     format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /* noto-serif-sc-900 - chinese-simplified */ | /* noto-serif-sc-900 - chinese-simplified */ | ||||||
| @@ -199,6 +193,5 @@ body { | |||||||
|   font-family: "Noto Serif SC"; |   font-family: "Noto Serif SC"; | ||||||
|   font-style: normal; |   font-style: normal; | ||||||
|   font-weight: 900; |   font-weight: 900; | ||||||
|   src: url("./noto-serif-sc-v22-chinese-simplified-900.woff2") |   src: url("./noto-serif-sc-v22-chinese-simplified-900.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ | ||||||
|     format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,14 +1,17 @@ | |||||||
| --- | --- | ||||||
| interface MenuItem { | interface MenuItem { | ||||||
|   href: string; |   href?: string; | ||||||
|   label: string; |   label: string; | ||||||
|   children?: MenuItem[]; |   children?: MenuItem[]; | ||||||
| } | } | ||||||
|  |  | ||||||
| const items: MenuItem[] = [ | const items: MenuItem[] = [ | ||||||
|  |   { | ||||||
|  |     label: "情报", children: [ | ||||||
|       { href: "/posts", label: "记录" }, |       { href: "/posts", label: "记录" }, | ||||||
|   { href: "/events", label: "活动" }, |       { href: "/events", label: "活动" } | ||||||
|   { href: "/projects", label: "企划" }, |     ] | ||||||
|  |   } | ||||||
| ]; | ]; | ||||||
| --- | --- | ||||||
|  |  | ||||||
| @@ -22,11 +25,13 @@ const items: MenuItem[] = [ | |||||||
|           fill="none" |           fill="none" | ||||||
|           viewBox="0 0 24 24" |           viewBox="0 0 24 24" | ||||||
|           stroke="currentColor" |           stroke="currentColor" | ||||||
|           ><path |         > | ||||||
|  |           <path | ||||||
|             stroke-linecap="round" |             stroke-linecap="round" | ||||||
|             stroke-linejoin="round" |             stroke-linejoin="round" | ||||||
|             stroke-width="2" |             stroke-width="2" | ||||||
|             d="M4 6h16M4 12h8m-8 6h16"></path></svg |             d="M4 6h16M4 12h8m-8 6h16"></path> | ||||||
|  |         </svg | ||||||
|         > |         > | ||||||
|       </div> |       </div> | ||||||
|       <ul |       <ul | ||||||
| @@ -41,7 +46,7 @@ const items: MenuItem[] = [ | |||||||
|                 <ul class="p-2"> |                 <ul class="p-2"> | ||||||
|                   {item.children?.map((child) => ( |                   {item.children?.map((child) => ( | ||||||
|                     <li> |                     <li> | ||||||
|                       <a href={item.href}>{item.label}</a> |                       <a href={child.href}>{child.label}</a> | ||||||
|                     </li> |                     </li> | ||||||
|                   ))} |                   ))} | ||||||
|                 </ul> |                 </ul> | ||||||
| @@ -61,15 +66,13 @@ const items: MenuItem[] = [ | |||||||
|             {item.children ? ( |             {item.children ? ( | ||||||
|               <details> |               <details> | ||||||
|                 <summary>{item.label}</summary> |                 <summary>{item.label}</summary> | ||||||
|                 <ul class="p-2"> |  | ||||||
|                 <ul class="p-2"> |                 <ul class="p-2"> | ||||||
|                   {item.children?.map((child) => ( |                   {item.children?.map((child) => ( | ||||||
|                     <li> |                     <li> | ||||||
|                         <a href={item.href}>{item.label}</a> |                       <a href={child.href}>{child.label}</a> | ||||||
|                     </li> |                     </li> | ||||||
|                   ))} |                   ))} | ||||||
|                 </ul> |                 </ul> | ||||||
|                 </ul> |  | ||||||
|               </details> |               </details> | ||||||
|             ) : ( |             ) : ( | ||||||
|               <a href={item.href}>{item.label}</a> |               <a href={item.href}>{item.label}</a> | ||||||
| @@ -87,18 +90,22 @@ const items: MenuItem[] = [ | |||||||
|         class="swap-on fill-current w-8 h-8" |         class="swap-on fill-current w-8 h-8" | ||||||
|         xmlns="http://www.w3.org/2000/svg" |         xmlns="http://www.w3.org/2000/svg" | ||||||
|         viewBox="0 0 24 24" |         viewBox="0 0 24 24" | ||||||
|         ><path |       > | ||||||
|  |         <path | ||||||
|           d="M5.64,17l-.71.71a1,1,0,0,0,0,1.41,1,1,0,0,0,1.41,0l.71-.71A1,1,0,0,0,5.64,17ZM5,12a1,1,0,0,0-1-1H3a1,1,0,0,0,0,2H4A1,1,0,0,0,5,12Zm7-7a1,1,0,0,0,1-1V3a1,1,0,0,0-2,0V4A1,1,0,0,0,12,5ZM5.64,7.05a1,1,0,0,0,.7.29,1,1,0,0,0,.71-.29,1,1,0,0,0,0-1.41l-.71-.71A1,1,0,0,0,4.93,6.34Zm12,.29a1,1,0,0,0,.7-.29l.71-.71a1,1,0,1,0-1.41-1.41L17,5.64a1,1,0,0,0,0,1.41A1,1,0,0,0,17.66,7.34ZM21,11H20a1,1,0,0,0,0,2h1a1,1,0,0,0,0-2Zm-9,8a1,1,0,0,0-1,1v1a1,1,0,0,0,2,0V20A1,1,0,0,0,12,19ZM18.36,17A1,1,0,0,0,17,18.36l.71.71a1,1,0,0,0,1.41,0,1,1,0,0,0,0-1.41ZM12,6.5A5.5,5.5,0,1,0,17.5,12,5.51,5.51,0,0,0,12,6.5Zm0,9A3.5,3.5,0,1,1,15.5,12,3.5,3.5,0,0,1,12,15.5Z" |           d="M5.64,17l-.71.71a1,1,0,0,0,0,1.41,1,1,0,0,0,1.41,0l.71-.71A1,1,0,0,0,5.64,17ZM5,12a1,1,0,0,0-1-1H3a1,1,0,0,0,0,2H4A1,1,0,0,0,5,12Zm7-7a1,1,0,0,0,1-1V3a1,1,0,0,0-2,0V4A1,1,0,0,0,12,5ZM5.64,7.05a1,1,0,0,0,.7.29,1,1,0,0,0,.71-.29,1,1,0,0,0,0-1.41l-.71-.71A1,1,0,0,0,4.93,6.34Zm12,.29a1,1,0,0,0,.7-.29l.71-.71a1,1,0,1,0-1.41-1.41L17,5.64a1,1,0,0,0,0,1.41A1,1,0,0,0,17.66,7.34ZM21,11H20a1,1,0,0,0,0,2h1a1,1,0,0,0,0-2Zm-9,8a1,1,0,0,0-1,1v1a1,1,0,0,0,2,0V20A1,1,0,0,0,12,19ZM18.36,17A1,1,0,0,0,17,18.36l.71.71a1,1,0,0,0,1.41,0,1,1,0,0,0,0-1.41ZM12,6.5A5.5,5.5,0,1,0,17.5,12,5.51,5.51,0,0,0,12,6.5Zm0,9A3.5,3.5,0,1,1,15.5,12,3.5,3.5,0,0,1,12,15.5Z" | ||||||
|         ></path></svg |         ></path> | ||||||
|  |       </svg | ||||||
|       > |       > | ||||||
|  |  | ||||||
|       <svg |       <svg | ||||||
|         class="swap-off fill-current w-8 h-8" |         class="swap-off fill-current w-8 h-8" | ||||||
|         xmlns="http://www.w3.org/2000/svg" |         xmlns="http://www.w3.org/2000/svg" | ||||||
|         viewBox="0 0 24 24" |         viewBox="0 0 24 24" | ||||||
|         ><path |       > | ||||||
|  |         <path | ||||||
|           d="M21.64,13a1,1,0,0,0-1.05-.14,8.05,8.05,0,0,1-3.37.73A8.15,8.15,0,0,1,9.08,5.49a8.59,8.59,0,0,1,.25-2A1,1,0,0,0,8,2.36,10.14,10.14,0,1,0,22,14.05,1,1,0,0,0,21.64,13Zm-9.5,6.69A8.14,8.14,0,0,1,7.08,5.22v.27A10.15,10.15,0,0,0,17.22,15.63a9.79,9.79,0,0,0,2.1-.22A8.11,8.11,0,0,1,12.14,19.73Z" |           d="M21.64,13a1,1,0,0,0-1.05-.14,8.05,8.05,0,0,1-3.37.73A8.15,8.15,0,0,1,9.08,5.49a8.59,8.59,0,0,1,.25-2A1,1,0,0,0,8,2.36,10.14,10.14,0,1,0,22,14.05,1,1,0,0,0,21.64,13Zm-9.5,6.69A8.14,8.14,0,0,1,7.08,5.22v.27A10.15,10.15,0,0,0,17.22,15.63a9.79,9.79,0,0,0,2.1-.22A8.11,8.11,0,0,1,12.14,19.73Z" | ||||||
|         ></path></svg |         ></path> | ||||||
|  |       </svg | ||||||
|       > |       > | ||||||
|     </label> |     </label> | ||||||
|   </div> |   </div> | ||||||
|   | |||||||
| @@ -1,13 +1,7 @@ | |||||||
| import { useState, Fragment } from "react"; | import { useState, Fragment } from "react"; | ||||||
|  |  | ||||||
| export default function Media({ | export default function Media({ sources }: { sources: { caption: string; url: string; type: string }[] }) { | ||||||
|   sources, |   const [focus, setFocus] = useState<boolean[]>(sources.map((_, idx) => idx === 0)); | ||||||
| }: { |  | ||||||
|   sources: { caption: string; url: string; type: string }[]; |  | ||||||
| }) { |  | ||||||
|   const [focus, setFocus] = useState<boolean[]>( |  | ||||||
|     sources.map((_, idx) => idx === 0) |  | ||||||
|   ); |  | ||||||
|  |  | ||||||
|   function changeFocus(idx: number) { |   function changeFocus(idx: number) { | ||||||
|     setFocus(focus.map((_, idx) => idx === idx)); |     setFocus(focus.map((_, idx) => idx === idx)); | ||||||
| @@ -26,10 +20,7 @@ export default function Media({ | |||||||
|             checked={focus[idx]} |             checked={focus[idx]} | ||||||
|             onChange={() => changeFocus(idx)} |             onChange={() => changeFocus(idx)} | ||||||
|           /> |           /> | ||||||
|           <div |           <div role="tabpanel" className="tab-content bg-base-100 border-base-300 rounded-box"> | ||||||
|             role="tabpanel" |  | ||||||
|             className="tab-content bg-base-100 border-base-300 rounded-box" |  | ||||||
|           > |  | ||||||
|             {item.type === "video" && ( |             {item.type === "video" && ( | ||||||
|               <video className="mb-0 block w-full h-[360px]" controls> |               <video className="mb-0 block w-full h-[360px]" controls> | ||||||
|                 <source src={item.url} /> |                 <source src={item.url} /> | ||||||
|   | |||||||
| @@ -1,24 +0,0 @@ | |||||||
| --- |  | ||||||
| import PageLayout from "../../layouts/PageLayout.astro"; |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| <PageLayout title="企划"> |  | ||||||
|   <div role="alert" class="alert alert-info"> |  | ||||||
|     <svg |  | ||||||
|       xmlns="http://www.w3.org/2000/svg" |  | ||||||
|       fill="none" |  | ||||||
|       viewBox="0 0 24 24" |  | ||||||
|       class="stroke-current shrink-0 w-6 h-6" |  | ||||||
|       ><path |  | ||||||
|         stroke-linecap="round" |  | ||||||
|         stroke-linejoin="round" |  | ||||||
|         stroke-width="2" |  | ||||||
|         d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" |  | ||||||
|       ></path></svg |  | ||||||
|     > |  | ||||||
|     <div> |  | ||||||
|         <p>暂无可公开企划,若想进一步探索,可以加入我们的 GoatChat!</p> |  | ||||||
|         <a class="link" href="https://matrix.to/#/#plaza:matrix.smartsheep.studio">邀请链接 👈</a> |  | ||||||
|     </div> |  | ||||||
|   </div> |  | ||||||
| </PageLayout> |  | ||||||
| @@ -1,17 +1,14 @@ | |||||||
| const defaultCms = "https://smartsheep.studio"; | const defaultCms = "https://smartsheep.studio"; | ||||||
|  |  | ||||||
| export async function graphQuery(query: string, variables: any) { | export async function graphQuery(query: string, variables: any) { | ||||||
|   const response = await fetch( |   const response = await fetch(`${process.env.PUBLIC_CMS ?? defaultCms}/api/graphql`, { | ||||||
|     `${process.env.PUBLIC_CMS ?? defaultCms}/api/graphql`, |  | ||||||
|     { |  | ||||||
|     method: "POST", |     method: "POST", | ||||||
|     headers: { "Content-Type": "application/json" }, |     headers: { "Content-Type": "application/json" }, | ||||||
|     body: JSON.stringify({ |     body: JSON.stringify({ | ||||||
|       query, |       query, | ||||||
|       variables, |       variables, | ||||||
|     }), |     }), | ||||||
|     }, |   }); | ||||||
|   ); |  | ||||||
|  |  | ||||||
|   return await response.json(); |   return await response.json(); | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user