@vitnode/blog 1.2.0-canary.78 → 2.0.0-canary.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/admin/content.d.ts +5 -0
- package/dist/src/admin/content.d.ts.map +1 -0
- package/dist/src/admin/content.js +1 -0
- package/dist/src/admin/nav.d.ts +41 -0
- package/dist/src/admin/nav.d.ts.map +1 -0
- package/dist/src/admin/nav.js +1 -0
- package/dist/src/api/lib/events.d.ts +11 -3
- package/dist/src/api/lib/events.d.ts.map +1 -1
- package/dist/src/api/lib/events.js +1 -1
- package/dist/src/api/modules/admin/admin.module.d.ts +1 -218
- package/dist/src/api/modules/admin/admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/admin.module.js +1 -1
- package/dist/src/config.api.d.ts.map +1 -1
- package/dist/src/config.api.js +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +1 -1
- package/dist/src/content/category.d.ts +5 -0
- package/dist/src/content/category.d.ts.map +1 -0
- package/dist/src/content/category.js +1 -0
- package/dist/src/content/post.d.ts +10 -0
- package/dist/src/content/post.d.ts.map +1 -0
- package/dist/src/content/post.js +1 -0
- package/dist/src/database/categories.d.ts +10 -77
- package/dist/src/database/categories.d.ts.map +1 -1
- package/dist/src/database/categories.js +1 -1
- package/dist/src/database/posts.d.ts +22 -92
- package/dist/src/database/posts.d.ts.map +1 -1
- package/dist/src/database/posts.js +1 -1
- package/dist/src/locales/en.json +50 -73
- package/dist/src/locales/index.d.ts.map +1 -1
- package/dist/src/locales/index.js +1 -1
- package/dist/src/locales/pl.json +69 -0
- package/dist/src/views/admin/article/editor-field.d.ts +4 -0
- package/dist/src/views/admin/article/editor-field.d.ts.map +1 -0
- package/dist/src/views/admin/article/editor-field.js +1 -0
- package/dist/src/views/admin/article/form-layout.d.ts +3 -0
- package/dist/src/views/admin/article/form-layout.d.ts.map +1 -0
- package/dist/src/views/admin/article/form-layout.js +1 -0
- package/dist/src/views/admin/category/color-cell.d.ts +4 -0
- package/dist/src/views/admin/category/color-cell.d.ts.map +1 -0
- package/dist/src/views/admin/category/color-cell.js +1 -0
- package/dist/src/views/admin/category/color-field.d.ts +3 -0
- package/dist/src/views/admin/category/color-field.d.ts.map +1 -0
- package/dist/src/views/admin/category/color-field.js +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/package.json +16 -10
- package/src/locales/en.json +50 -73
- package/src/locales/index.ts +1 -0
- package/src/locales/pl.json +69 -0
- package/tsconfig.build.json +6 -1
- package/dist/src/api/lib/categories-language.d.ts +0 -10
- package/dist/src/api/lib/categories-language.d.ts.map +0 -1
- package/dist/src/api/lib/categories-language.js +0 -1
- package/dist/src/api/lib/posts-language.d.ts +0 -17
- package/dist/src/api/lib/posts-language.d.ts.map +0 -1
- package/dist/src/api/lib/posts-language.js +0 -1
- package/dist/src/api/lib/search.d.ts +0 -13
- package/dist/src/api/lib/search.d.ts.map +0 -1
- package/dist/src/api/lib/search.js +0 -1
- package/dist/src/api/modules/admin/categories/categories.admin.module.d.ts +0 -100
- package/dist/src/api/modules/admin/categories/categories.admin.module.d.ts.map +0 -1
- package/dist/src/api/modules/admin/categories/categories.admin.module.js +0 -1
- package/dist/src/api/modules/admin/categories/routes/create.route.d.ts +0 -47
- package/dist/src/api/modules/admin/categories/routes/create.route.d.ts.map +0 -1
- package/dist/src/api/modules/admin/categories/routes/create.route.js +0 -1
- package/dist/src/api/modules/admin/categories/routes/delete.route.d.ts +0 -21
- package/dist/src/api/modules/admin/categories/routes/delete.route.d.ts.map +0 -1
- package/dist/src/api/modules/admin/categories/routes/delete.route.js +0 -1
- package/dist/src/api/modules/admin/categories/routes/edit.route.d.ts +0 -46
- package/dist/src/api/modules/admin/categories/routes/edit.route.d.ts.map +0 -1
- package/dist/src/api/modules/admin/categories/routes/edit.route.js +0 -1
- package/dist/src/api/modules/admin/posts/posts.admin.module.d.ts +0 -121
- package/dist/src/api/modules/admin/posts/posts.admin.module.d.ts.map +0 -1
- package/dist/src/api/modules/admin/posts/posts.admin.module.js +0 -1
- package/dist/src/api/modules/admin/posts/routes/create.route.d.ts +0 -67
- package/dist/src/api/modules/admin/posts/routes/create.route.d.ts.map +0 -1
- package/dist/src/api/modules/admin/posts/routes/create.route.js +0 -1
- package/dist/src/api/modules/admin/posts/routes/delete.route.d.ts +0 -21
- package/dist/src/api/modules/admin/posts/routes/delete.route.d.ts.map +0 -1
- package/dist/src/api/modules/admin/posts/routes/delete.route.js +0 -1
- package/dist/src/api/modules/admin/posts/routes/edit.route.d.ts +0 -55
- package/dist/src/api/modules/admin/posts/routes/edit.route.d.ts.map +0 -1
- package/dist/src/api/modules/admin/posts/routes/edit.route.js +0 -1
- package/dist/src/api/modules/categories/categories.module.d.ts +0 -75
- package/dist/src/api/modules/categories/categories.module.d.ts.map +0 -1
- package/dist/src/api/modules/categories/categories.module.js +0 -1
- package/dist/src/api/modules/categories/routes/get.route.d.ts +0 -62
- package/dist/src/api/modules/categories/routes/get.route.d.ts.map +0 -1
- package/dist/src/api/modules/categories/routes/get.route.js +0 -1
- package/dist/src/api/modules/categories/test.route.d.ts +0 -27
- package/dist/src/api/modules/categories/test.route.d.ts.map +0 -1
- package/dist/src/api/modules/categories/test.route.js +0 -1
- package/dist/src/api/modules/posts/posts.module.d.ts +0 -73
- package/dist/src/api/modules/posts/posts.module.d.ts.map +0 -1
- package/dist/src/api/modules/posts/posts.module.js +0 -1
- package/dist/src/api/modules/posts/routes/get.route.d.ts +0 -105
- package/dist/src/api/modules/posts/routes/get.route.d.ts.map +0 -1
- package/dist/src/api/modules/posts/routes/get.route.js +0 -1
- package/dist/src/database/index.d.ts +0 -4
- package/dist/src/database/index.d.ts.map +0 -1
- package/dist/src/database/index.js +0 -1
- package/dist/src/database/relations.d.ts +0 -7
- package/dist/src/database/relations.d.ts.map +0 -1
- package/dist/src/database/relations.js +0 -1
- package/dist/src/routes/admin/blog/categories/page.d.ts +0 -9
- package/dist/src/routes/admin/blog/categories/page.d.ts.map +0 -1
- package/dist/src/routes/admin/blog/categories/page.js +0 -1
- package/dist/src/routes/admin/blog/posts/page.d.ts +0 -9
- package/dist/src/routes/admin/blog/posts/page.d.ts.map +0 -1
- package/dist/src/routes/admin/blog/posts/page.js +0 -1
- package/dist/src/routes/breadcrumb/admin/blog/categories/page.d.ts +0 -2
- package/dist/src/routes/breadcrumb/admin/blog/categories/page.d.ts.map +0 -1
- package/dist/src/routes/breadcrumb/admin/blog/categories/page.js +0 -1
- package/dist/src/routes/breadcrumb/admin/blog/posts/page.d.ts +0 -2
- package/dist/src/routes/breadcrumb/admin/blog/posts/page.d.ts.map +0 -1
- package/dist/src/routes/breadcrumb/admin/blog/posts/page.js +0 -1
- package/dist/src/views/admin/categories/actions/actions.d.ts +0 -3
- package/dist/src/views/admin/categories/actions/actions.d.ts.map +0 -1
- package/dist/src/views/admin/categories/actions/actions.js +0 -1
- package/dist/src/views/admin/categories/actions/create-edit/create-edit.d.ts +0 -8
- package/dist/src/views/admin/categories/actions/create-edit/create-edit.d.ts.map +0 -1
- package/dist/src/views/admin/categories/actions/create-edit/create-edit.js +0 -1
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.server.d.ts +0 -11
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.server.d.ts.map +0 -1
- package/dist/src/views/admin/categories/actions/create-edit/mutation-api.server.js +0 -1
- package/dist/src/views/admin/categories/table/actions/delete/delete-action.d.ts +0 -5
- package/dist/src/views/admin/categories/table/actions/delete/delete-action.d.ts.map +0 -1
- package/dist/src/views/admin/categories/table/actions/delete/delete-action.js +0 -1
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.server.d.ts +0 -4
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.server.d.ts.map +0 -1
- package/dist/src/views/admin/categories/table/actions/delete/mutation-api.server.js +0 -1
- package/dist/src/views/admin/categories/table/actions/edit-action.d.ts +0 -9
- package/dist/src/views/admin/categories/table/actions/edit-action.d.ts.map +0 -1
- package/dist/src/views/admin/categories/table/actions/edit-action.js +0 -1
- package/dist/src/views/admin/categories/table/categories-admin-view.d.ts +0 -4
- package/dist/src/views/admin/categories/table/categories-admin-view.d.ts.map +0 -1
- package/dist/src/views/admin/categories/table/categories-admin-view.js +0 -1
- package/dist/src/views/admin/posts/actions/actions.d.ts +0 -3
- package/dist/src/views/admin/posts/actions/actions.d.ts.map +0 -1
- package/dist/src/views/admin/posts/actions/actions.js +0 -1
- package/dist/src/views/admin/posts/actions/create-edit/create-edit.d.ts +0 -9
- package/dist/src/views/admin/posts/actions/create-edit/create-edit.d.ts.map +0 -1
- package/dist/src/views/admin/posts/actions/create-edit/create-edit.js +0 -1
- package/dist/src/views/admin/posts/actions/create-edit/multi-lang-fields.d.ts +0 -10
- package/dist/src/views/admin/posts/actions/create-edit/multi-lang-fields.d.ts.map +0 -1
- package/dist/src/views/admin/posts/actions/create-edit/multi-lang-fields.js +0 -1
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.server.d.ts +0 -11
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.server.d.ts.map +0 -1
- package/dist/src/views/admin/posts/actions/create-edit/mutation-api.server.js +0 -1
- package/dist/src/views/admin/posts/table/actions/delete/delete-action.d.ts +0 -5
- package/dist/src/views/admin/posts/table/actions/delete/delete-action.d.ts.map +0 -1
- package/dist/src/views/admin/posts/table/actions/delete/delete-action.js +0 -1
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.server.d.ts +0 -4
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.server.d.ts.map +0 -1
- package/dist/src/views/admin/posts/table/actions/delete/mutation-api.server.js +0 -1
- package/dist/src/views/admin/posts/table/actions/edit-action.d.ts +0 -9
- package/dist/src/views/admin/posts/table/actions/edit-action.d.ts.map +0 -1
- package/dist/src/views/admin/posts/table/actions/edit-action.js +0 -1
- package/dist/src/views/admin/posts/table/posts-admin-view.d.ts +0 -4
- package/dist/src/views/admin/posts/table/posts-admin-view.d.ts.map +0 -1
- package/dist/src/views/admin/posts/table/posts-admin-view.js +0 -1
- package/src/routes/admin/blog/categories/page.tsx +0 -64
- package/src/routes/admin/blog/posts/page.tsx +0 -64
- package/src/routes/breadcrumb/admin/blog/categories/page.tsx +0 -5
- package/src/routes/breadcrumb/admin/blog/posts/page.tsx +0 -5
|
@@ -1,93 +1,23 @@
|
|
|
1
|
-
export declare const
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
name: "categoryId";
|
|
24
|
-
tableName: "blog_posts";
|
|
25
|
-
dataType: "number";
|
|
26
|
-
columnType: "PgInteger";
|
|
27
|
-
data: number;
|
|
28
|
-
driverParam: string | number;
|
|
29
|
-
notNull: true;
|
|
30
|
-
hasDefault: false;
|
|
31
|
-
isPrimaryKey: false;
|
|
32
|
-
isAutoincrement: false;
|
|
33
|
-
hasRuntimeDefault: false;
|
|
34
|
-
enumValues: undefined;
|
|
35
|
-
baseColumn: never;
|
|
36
|
-
identity: undefined;
|
|
37
|
-
generated: undefined;
|
|
38
|
-
}, {}, {}>;
|
|
39
|
-
authorId: import("drizzle-orm/pg-core").PgColumn<{
|
|
40
|
-
name: "authorId";
|
|
41
|
-
tableName: "blog_posts";
|
|
42
|
-
dataType: "number";
|
|
43
|
-
columnType: "PgInteger";
|
|
44
|
-
data: number;
|
|
45
|
-
driverParam: string | number;
|
|
46
|
-
notNull: false;
|
|
47
|
-
hasDefault: false;
|
|
48
|
-
isPrimaryKey: false;
|
|
49
|
-
isAutoincrement: false;
|
|
50
|
-
hasRuntimeDefault: false;
|
|
51
|
-
enumValues: undefined;
|
|
52
|
-
baseColumn: never;
|
|
53
|
-
identity: undefined;
|
|
54
|
-
generated: undefined;
|
|
55
|
-
}, {}, {}>;
|
|
56
|
-
createdAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
57
|
-
name: "createdAt";
|
|
58
|
-
tableName: "blog_posts";
|
|
59
|
-
dataType: "date";
|
|
60
|
-
columnType: "PgTimestamp";
|
|
61
|
-
data: Date;
|
|
62
|
-
driverParam: string;
|
|
63
|
-
notNull: true;
|
|
64
|
-
hasDefault: true;
|
|
65
|
-
isPrimaryKey: false;
|
|
66
|
-
isAutoincrement: false;
|
|
67
|
-
hasRuntimeDefault: false;
|
|
68
|
-
enumValues: undefined;
|
|
69
|
-
baseColumn: never;
|
|
70
|
-
identity: undefined;
|
|
71
|
-
generated: undefined;
|
|
72
|
-
}, {}, {}>;
|
|
73
|
-
updatedAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
74
|
-
name: "updatedAt";
|
|
75
|
-
tableName: "blog_posts";
|
|
76
|
-
dataType: "date";
|
|
77
|
-
columnType: "PgTimestamp";
|
|
78
|
-
data: Date;
|
|
79
|
-
driverParam: string;
|
|
80
|
-
notNull: true;
|
|
81
|
-
hasDefault: true;
|
|
82
|
-
isPrimaryKey: false;
|
|
83
|
-
isAutoincrement: false;
|
|
84
|
-
hasRuntimeDefault: false;
|
|
85
|
-
enumValues: undefined;
|
|
86
|
-
baseColumn: never;
|
|
87
|
-
identity: undefined;
|
|
88
|
-
generated: undefined;
|
|
89
|
-
}, {}, {}>;
|
|
90
|
-
};
|
|
91
|
-
dialect: "pg";
|
|
92
|
-
}>, "enableRLS">;
|
|
1
|
+
export declare const postContent: import("@vitnode/core/content/server").ContentModel<import("@vitnode/core/content").ContentTypeDefinition<"blog.post", {
|
|
2
|
+
categoryId: import("@vitnode/core/content").ContentRelationField<false, false, true, false, false>;
|
|
3
|
+
authorId: import("@vitnode/core/content").ContentUserField<false, false, true, true>;
|
|
4
|
+
title: import("@vitnode/core/content").ContentTextField<true, false, undefined, true>;
|
|
5
|
+
friendlyUrl: import("@vitnode/core/content").ContentSlugField<"title", true>;
|
|
6
|
+
content: import("@vitnode/core/content").ContentTextareaField<true, false, undefined, true>;
|
|
7
|
+
coverImage: import("@vitnode/core/content/types").ContentFileField<false, true, false, false>;
|
|
8
|
+
coverImageAlt: import("@vitnode/core/content").ContentTextField<false, true, undefined, true>;
|
|
9
|
+
}, true, "id" | "publishedAt" | "categoryId" | "title" | "friendlyUrl" | "content" | "coverImage" | "coverImageAlt", true, true, true, true, true, true, true>>;
|
|
10
|
+
export declare const blog_posts: import("@vitnode/core/content/server").ContentTable<string, import("@vitnode/core/content/server/types").ContentStorageFields<{
|
|
11
|
+
categoryId: import("@vitnode/core/content").ContentRelationField<false, false, true, false, false>;
|
|
12
|
+
authorId: import("@vitnode/core/content").ContentUserField<false, false, true, true>;
|
|
13
|
+
coverImage: import("@vitnode/core/content/types").ContentFileField<false, true, false, false>;
|
|
14
|
+
}>, true, true>;
|
|
15
|
+
export declare const blog_posts_translations: import("@vitnode/core/content/server").ContentTranslationTable<string, {} & {
|
|
16
|
+
title: import("@vitnode/core/content").ContentTextField<true, false, undefined, true>;
|
|
17
|
+
friendlyUrl: import("@vitnode/core/content").ContentSlugField<"title", true>;
|
|
18
|
+
content: import("@vitnode/core/content").ContentTextareaField<true, false, undefined, true>;
|
|
19
|
+
coverImageAlt: import("@vitnode/core/content").ContentTextField<false, true, undefined, true>;
|
|
20
|
+
}, true> | null;
|
|
21
|
+
export declare const blog_posts_category_id: import("@vitnode/core/content/server/types").ContentJunctionTable;
|
|
22
|
+
export declare const blog_posts_author_id: import("@vitnode/core/content/server/types").ContentJunctionTable;
|
|
93
23
|
//# sourceMappingURL=posts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"posts.d.ts","sourceRoot":"","sources":["../../../src/database/posts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"posts.d.ts","sourceRoot":"","sources":["../../../src/database/posts.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW;;;;;;;;+JAEtB,CAAC;AAEH,eAAO,MAAM,UAAU;;;;eAAoB,CAAC;AAC5C,eAAO,MAAM,uBAAuB;;;;;eAA+B,CAAC;AAEpE,eAAO,MAAM,sBAAsB,mEACc,CAAC;AAClD,eAAO,MAAM,oBAAoB,mEACc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{createContentModel}from"@vitnode/core/content/server";import{blogPostContentType}from"../content/post.js";import{blog_categories}from"./categories.js";export const postContent=createContentModel(blogPostContentType,{references:{categoryId:()=>blog_categories.id}});export const blog_posts=postContent.table;export const blog_posts_translations=postContent.translationTable;export const blog_posts_category_id=postContent.advancedTables.junctions.categoryId;export const blog_posts_author_id=postContent.advancedTables.junctions.authorId;
|
package/dist/src/locales/en.json
CHANGED
|
@@ -1,89 +1,66 @@
|
|
|
1
1
|
{
|
|
2
2
|
"@vitnode/blog": {
|
|
3
3
|
"title": "Blog",
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
"desc": "Manage categories for blog posts.",
|
|
11
|
-
"table": {
|
|
4
|
+
"content": {
|
|
5
|
+
"post": {
|
|
6
|
+
"label": "{count, plural, one {Article} other {Articles}}",
|
|
7
|
+
"title": "Articles",
|
|
8
|
+
"desc": "Write and manage your blog articles.",
|
|
9
|
+
"fields": {
|
|
12
10
|
"title": "Title",
|
|
11
|
+
"friendlyUrl": "Friendly URL",
|
|
12
|
+
"content": "Content",
|
|
13
|
+
"categoryId": "Categories",
|
|
14
|
+
"authorId": "Authors",
|
|
15
|
+
"coverImage": "Cover image",
|
|
16
|
+
"coverImageAlt": "Cover image alt text",
|
|
17
|
+
"status": "Status",
|
|
18
|
+
"publishedAt": "Published",
|
|
19
|
+
"updatedAt": "Updated"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"category": {
|
|
23
|
+
"label": "{count, plural, one {Category} other {Categories}}",
|
|
24
|
+
"title": "Categories",
|
|
25
|
+
"desc": "Group articles together.",
|
|
26
|
+
"fields": {
|
|
27
|
+
"name": "Name",
|
|
13
28
|
"color": "Color",
|
|
14
|
-
"
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
29
|
+
"updatedAt": "Updated"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"admin": {
|
|
34
|
+
"article": {
|
|
35
|
+
"content": {
|
|
36
|
+
"label": "Content"
|
|
21
37
|
},
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
"title": {
|
|
27
|
-
"label": "Title",
|
|
28
|
-
"already_exists": "This category title already exists."
|
|
29
|
-
},
|
|
30
|
-
"color": "Color"
|
|
38
|
+
"form": {
|
|
39
|
+
"publish": "Publish",
|
|
40
|
+
"cover": {
|
|
41
|
+
"title": "Cover image"
|
|
31
42
|
},
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"edit": {
|
|
36
|
-
"title": "Edit Category",
|
|
37
|
-
"submit": "Save Changes",
|
|
38
|
-
"success": "Category has been updated successfully."
|
|
43
|
+
"settings": {
|
|
44
|
+
"title": "Article settings"
|
|
45
|
+
}
|
|
39
46
|
}
|
|
40
47
|
},
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"author": "Author",
|
|
47
|
-
"updated_at": "Updated At"
|
|
48
|
-
},
|
|
49
|
-
"create": {
|
|
50
|
-
"title": "Create Post",
|
|
51
|
-
"desc": "Write a new article for your blog.",
|
|
52
|
-
"form": {
|
|
53
|
-
"title": {
|
|
54
|
-
"label": "Title",
|
|
55
|
-
"already_exists": "This post title already exists."
|
|
56
|
-
},
|
|
57
|
-
"friendly_url": {
|
|
58
|
-
"label": "Friendly URL",
|
|
59
|
-
"desc": "Used in the post address. Auto-filled from the title.",
|
|
60
|
-
"already_exists": "This friendly URL already exists."
|
|
61
|
-
},
|
|
62
|
-
"content": "Content",
|
|
63
|
-
"category": "Category"
|
|
64
|
-
},
|
|
65
|
-
"submit": "Create Post",
|
|
66
|
-
"success": "Post has been created successfully."
|
|
67
|
-
},
|
|
68
|
-
"edit": {
|
|
69
|
-
"title": "Edit Post",
|
|
70
|
-
"submit": "Save Changes",
|
|
71
|
-
"success": "Post has been updated successfully."
|
|
72
|
-
},
|
|
73
|
-
"delete": {
|
|
74
|
-
"title": "Delete Post",
|
|
75
|
-
"desc": "Are you sure you want to delete <title></title> post? This action cannot be undone.",
|
|
76
|
-
"confirm": "Yes, delete this post",
|
|
77
|
-
"success": "Post has been deleted successfully."
|
|
48
|
+
"category": {
|
|
49
|
+
"color": {
|
|
50
|
+
"label": "Color",
|
|
51
|
+
"desc": "Shown next to the category in lists.",
|
|
52
|
+
"none": "No color"
|
|
78
53
|
}
|
|
79
54
|
}
|
|
80
55
|
}
|
|
81
56
|
},
|
|
82
|
-
"@vitnode/blog:posts": "
|
|
83
|
-
"@vitnode/blog:posts:can_view": "View
|
|
84
|
-
"@vitnode/blog:posts:can_create": "Create
|
|
85
|
-
"@vitnode/blog:posts:can_edit": "Edit
|
|
86
|
-
"@vitnode/blog:posts:can_delete": "Delete
|
|
57
|
+
"@vitnode/blog:posts": "Articles",
|
|
58
|
+
"@vitnode/blog:posts:can_view": "View articles list",
|
|
59
|
+
"@vitnode/blog:posts:can_create": "Create articles",
|
|
60
|
+
"@vitnode/blog:posts:can_edit": "Edit articles",
|
|
61
|
+
"@vitnode/blog:posts:can_delete": "Delete articles",
|
|
62
|
+
"@vitnode/blog:posts:can_publish": "Publish and unpublish articles",
|
|
63
|
+
"@vitnode/blog:posts:can_restore": "Restore an earlier version of an article",
|
|
87
64
|
"@vitnode/blog:categories": "Categories",
|
|
88
65
|
"@vitnode/blog:categories:can_view": "View categories list",
|
|
89
66
|
"@vitnode/blog:categories:can_create": "Create categories",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/locales/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAMtE,QAAA,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/locales/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAMtE,QAAA,MAAM,QAAQ,EAAE,iBAGf,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const messages={en:async()=>await import("./en.json",{with:{type:"json"}})};export default messages;
|
|
1
|
+
const messages={en:async()=>await import("./en.json",{with:{type:"json"}}),pl:async()=>await import("./pl.json",{with:{type:"json"}})};export default messages;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@vitnode/blog": {
|
|
3
|
+
"title": "Blog",
|
|
4
|
+
"content": {
|
|
5
|
+
"post": {
|
|
6
|
+
"label": "{count, plural, one {Artykuł} few {Artykuły} many {Artykułów} other {Artykułu}}",
|
|
7
|
+
"title": "Artykuły",
|
|
8
|
+
"desc": "Pisz artykuły na blogu i zarządzaj nimi.",
|
|
9
|
+
"fields": {
|
|
10
|
+
"title": "Tytuł",
|
|
11
|
+
"friendlyUrl": "Przyjazny adres URL",
|
|
12
|
+
"content": "Treść",
|
|
13
|
+
"categoryId": "Kategoria",
|
|
14
|
+
"authorId": "Autor",
|
|
15
|
+
"coverImage": "Obraz wyróżniający",
|
|
16
|
+
"coverImageAlt": "Tekst alternatywny obrazu",
|
|
17
|
+
"status": "Status",
|
|
18
|
+
"publishedAt": "Opublikowano",
|
|
19
|
+
"updatedAt": "Zaktualizowano"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"category": {
|
|
23
|
+
"label": "{count, plural, one {Kategoria} few {Kategorie} many {Kategorii} other {Kategorii}}",
|
|
24
|
+
"title": "Kategorie",
|
|
25
|
+
"desc": "Grupuj artykuły razem.",
|
|
26
|
+
"fields": {
|
|
27
|
+
"name": "Nazwa",
|
|
28
|
+
"color": "Kolor",
|
|
29
|
+
"updatedAt": "Zaktualizowano"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"admin": {
|
|
34
|
+
"article": {
|
|
35
|
+
"content": {
|
|
36
|
+
"label": "Treść"
|
|
37
|
+
},
|
|
38
|
+
"form": {
|
|
39
|
+
"publish": "Publikacja",
|
|
40
|
+
"cover": {
|
|
41
|
+
"title": "Obraz wyróżniający"
|
|
42
|
+
},
|
|
43
|
+
"settings": {
|
|
44
|
+
"title": "Ustawienia artykułu"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"category": {
|
|
49
|
+
"color": {
|
|
50
|
+
"label": "Kolor",
|
|
51
|
+
"desc": "Wyświetlany obok kategorii na listach.",
|
|
52
|
+
"none": "Brak koloru"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"@vitnode/blog:posts": "Artykuły",
|
|
58
|
+
"@vitnode/blog:posts:can_view": "Wyświetlanie listy artykułów",
|
|
59
|
+
"@vitnode/blog:posts:can_create": "Tworzenie artykułów",
|
|
60
|
+
"@vitnode/blog:posts:can_edit": "Edytowanie artykułów",
|
|
61
|
+
"@vitnode/blog:posts:can_delete": "Usuwanie artykułów",
|
|
62
|
+
"@vitnode/blog:posts:can_publish": "Publikowanie i cofanie publikacji artykułów",
|
|
63
|
+
"@vitnode/blog:posts:can_restore": "Przywracanie wcześniejszej wersji artykułu",
|
|
64
|
+
"@vitnode/blog:categories": "Kategorie",
|
|
65
|
+
"@vitnode/blog:categories:can_view": "Wyświetlanie listy kategorii",
|
|
66
|
+
"@vitnode/blog:categories:can_create": "Tworzenie kategorii",
|
|
67
|
+
"@vitnode/blog:categories:can_edit": "Edytowanie kategorii",
|
|
68
|
+
"@vitnode/blog:categories:can_delete": "Usuwanie kategorii"
|
|
69
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor-field.d.ts","sourceRoot":"","sources":["../../../../../src/views/admin/article/editor-field.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAG1F,OAAO,KAAK,MAAM,OAAO,CAAC;AA8B1B,eAAO,MAAM,sBAAsB,GAAI,OAAO,0BAA0B,sBAQvE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";import{jsx as _jsx}from"react/jsx-runtime";import{Loader}from"@vitnode/core/components/ui/loader";import React from"react";import{useTranslations}from"use-intl";const AutoFormEditor=React.lazy(async()=>await import("@vitnode/core/components/form/fields/editor").then(mod=>({default:mod.AutoFormEditor})));export const BlogArticleEditorField=props=>{const t=useTranslations("@vitnode/blog.admin.article");return _jsx(React.Suspense,{fallback:_jsx(Loader,{}),children:_jsx(AutoFormEditor,{label:t("content.label"),...props})})};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-layout.d.ts","sourceRoot":"","sources":["../../../../../src/views/admin/article/form-layout.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAcvE,eAAO,MAAM,qBAAqB,GAAI,UAAU,sBAAsB,gCAsCrE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import{ContentFormActions,ContentFormField,ContentFormHeader,ContentFormLayoutGrid,ContentFormMain,ContentFormSection,ContentFormSidebar,ContentFormStatus}from"@vitnode/core/content/admin-form";import{useTranslations}from"use-intl";export const BlogArticleFormLayout=({mode})=>{const t=useTranslations("@vitnode/blog.admin.article.form");return _jsxs(_Fragment,{children:[_jsx(ContentFormHeader,{children:_jsx(ContentFormActions,{})}),_jsxs(ContentFormLayoutGrid,{children:[_jsx(ContentFormMain,{children:_jsxs(ContentFormSection,{children:[_jsx(ContentFormField,{name:"title"}),_jsx(ContentFormField,{name:"friendlyUrl"}),_jsx(ContentFormField,{name:"content"})]})}),_jsxs(ContentFormSidebar,{children:[mode==="edit"?_jsx(ContentFormSection,{title:t("publish"),children:_jsx(ContentFormStatus,{})}):null,_jsxs(ContentFormSection,{title:t("cover.title"),children:[_jsx(ContentFormField,{name:"coverImage"}),_jsx(ContentFormField,{name:"coverImageAlt"})]}),_jsxs(ContentFormSection,{title:t("settings.title"),children:[_jsx(ContentFormField,{name:"categoryId"}),_jsx(ContentFormField,{name:"authorId"})]})]})]})]})};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ContentCellProps } from "@vitnode/core/lib/plugin";
|
|
2
|
+
import type { blogCategoryContentType } from "../../../content/category";
|
|
3
|
+
export declare const BlogCategoryColorCell: ({ row, }: ContentCellProps<typeof blogCategoryContentType>) => import("react").JSX.Element;
|
|
4
|
+
//# sourceMappingURL=color-cell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-cell.d.ts","sourceRoot":"","sources":["../../../../../src/views/admin/category/color-cell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE,eAAO,MAAM,qBAAqB,GAAI,UAEnC,gBAAgB,CAAC,OAAO,uBAAuB,CAAC,gCAkBlD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{useTranslations}from"use-intl";export const BlogCategoryColorCell=({row})=>{const t=useTranslations("@vitnode/blog.admin.category");const color=row.color;if(!color){return _jsx("span",{className:"text-muted-foreground",children:t("color.none")})}return _jsxs("div",{className:"flex items-center gap-2",children:[_jsx("span",{"aria-hidden":true,className:"size-4 shrink-0 rounded-full border",style:{backgroundColor:color}}),_jsx("span",{className:"text-muted-foreground truncate text-sm",children:color})]})};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-field.d.ts","sourceRoot":"","sources":["../../../../../src/views/admin/category/color-field.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAK1F,eAAO,MAAM,sBAAsB,GAAI,OAAO,0BAA0B,gCAWvE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";import{jsx as _jsx}from"react/jsx-runtime";import{AutoFormColor}from"@vitnode/core/components/form/fields/color";import{useTranslations}from"use-intl";export const BlogCategoryColorField=props=>{const t=useTranslations("@vitnode/blog.admin.category");return _jsx(AutoFormColor,{allowRemoveColor:true,description:t("color.desc"),label:t("color.label"),...props})};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":";AAIA,wBAgBG"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vitnode/blog",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Blog plugin for VitNode, providing a blogging platform
|
|
3
|
+
"version": "2.0.0-canary.2",
|
|
4
|
+
"description": "Blog plugin for VitNode, providing a blogging platform on Hono.js.",
|
|
5
5
|
"author": "VitNode Team",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://vitnode.com",
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
"vitnode",
|
|
15
15
|
"react",
|
|
16
16
|
"hono.js",
|
|
17
|
-
"next.js",
|
|
18
17
|
"typescript",
|
|
19
18
|
"blog"
|
|
20
19
|
],
|
|
@@ -29,19 +28,19 @@
|
|
|
29
28
|
},
|
|
30
29
|
"dependencies": {
|
|
31
30
|
"@hono/zod-openapi": "^1.5.1",
|
|
32
|
-
"
|
|
33
|
-
"drizzle-
|
|
31
|
+
"ai": "^7.0.37",
|
|
32
|
+
"drizzle-kit": "1.0.0-rc.4",
|
|
33
|
+
"drizzle-orm": "1.0.0-rc.4",
|
|
34
34
|
"hono": "^4.12.31",
|
|
35
35
|
"lucide-react": "^1.25.0",
|
|
36
|
-
"next": "16.3.0-preview.9",
|
|
37
|
-
"next-intl": "^4.13.3",
|
|
38
36
|
"react": "^19.2.8",
|
|
39
37
|
"react-dom": "^19.2.8",
|
|
40
38
|
"react-email": "^6.9.0",
|
|
41
39
|
"react-hook-form": "^7.82.0",
|
|
42
40
|
"sonner": "^2.0.7",
|
|
41
|
+
"use-intl": "^4.13.7",
|
|
43
42
|
"zod": "^4.4.3",
|
|
44
|
-
"@vitnode/core": "
|
|
43
|
+
"@vitnode/core": "2.0.0-canary.2"
|
|
45
44
|
},
|
|
46
45
|
"devDependencies": {
|
|
47
46
|
"@react-email/ui": "^6.9.0",
|
|
@@ -49,16 +48,23 @@
|
|
|
49
48
|
"@swc/core": "^1.15.46",
|
|
50
49
|
"@types/react": "^19.2.17",
|
|
51
50
|
"@types/react-dom": "^19.2.3",
|
|
51
|
+
"@vitejs/plugin-react": "^6.0.4",
|
|
52
52
|
"eslint": "^10.7.0",
|
|
53
|
+
"jsdom": "^29.1.1",
|
|
54
|
+
"postgres": "^3.4.9",
|
|
53
55
|
"tsc-alias": "^1.9.1",
|
|
54
56
|
"typescript": "^6.0.3",
|
|
55
|
-
"
|
|
57
|
+
"vitest": "^4.1.10",
|
|
58
|
+
"@vitnode/config": "2.0.0-canary.2"
|
|
56
59
|
},
|
|
57
60
|
"scripts": {
|
|
58
61
|
"build:plugins": "vitnode build",
|
|
59
62
|
"dev": "vitnode dev",
|
|
60
63
|
"dev:email": "email dev --dir src/emails",
|
|
61
64
|
"lint": "eslint .",
|
|
62
|
-
"lint:fix": "eslint . --fix"
|
|
65
|
+
"lint:fix": "eslint . --fix",
|
|
66
|
+
"test": "vitest run",
|
|
67
|
+
"test:watch": "vitest",
|
|
68
|
+
"test:types": "vitest run --typecheck.only"
|
|
63
69
|
}
|
|
64
70
|
}
|
package/src/locales/en.json
CHANGED
|
@@ -1,89 +1,66 @@
|
|
|
1
1
|
{
|
|
2
2
|
"@vitnode/blog": {
|
|
3
3
|
"title": "Blog",
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
"desc": "Manage categories for blog posts.",
|
|
11
|
-
"table": {
|
|
4
|
+
"content": {
|
|
5
|
+
"post": {
|
|
6
|
+
"label": "{count, plural, one {Article} other {Articles}}",
|
|
7
|
+
"title": "Articles",
|
|
8
|
+
"desc": "Write and manage your blog articles.",
|
|
9
|
+
"fields": {
|
|
12
10
|
"title": "Title",
|
|
11
|
+
"friendlyUrl": "Friendly URL",
|
|
12
|
+
"content": "Content",
|
|
13
|
+
"categoryId": "Categories",
|
|
14
|
+
"authorId": "Authors",
|
|
15
|
+
"coverImage": "Cover image",
|
|
16
|
+
"coverImageAlt": "Cover image alt text",
|
|
17
|
+
"status": "Status",
|
|
18
|
+
"publishedAt": "Published",
|
|
19
|
+
"updatedAt": "Updated"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"category": {
|
|
23
|
+
"label": "{count, plural, one {Category} other {Categories}}",
|
|
24
|
+
"title": "Categories",
|
|
25
|
+
"desc": "Group articles together.",
|
|
26
|
+
"fields": {
|
|
27
|
+
"name": "Name",
|
|
13
28
|
"color": "Color",
|
|
14
|
-
"
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
29
|
+
"updatedAt": "Updated"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"admin": {
|
|
34
|
+
"article": {
|
|
35
|
+
"content": {
|
|
36
|
+
"label": "Content"
|
|
21
37
|
},
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
"title": {
|
|
27
|
-
"label": "Title",
|
|
28
|
-
"already_exists": "This category title already exists."
|
|
29
|
-
},
|
|
30
|
-
"color": "Color"
|
|
38
|
+
"form": {
|
|
39
|
+
"publish": "Publish",
|
|
40
|
+
"cover": {
|
|
41
|
+
"title": "Cover image"
|
|
31
42
|
},
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"edit": {
|
|
36
|
-
"title": "Edit Category",
|
|
37
|
-
"submit": "Save Changes",
|
|
38
|
-
"success": "Category has been updated successfully."
|
|
43
|
+
"settings": {
|
|
44
|
+
"title": "Article settings"
|
|
45
|
+
}
|
|
39
46
|
}
|
|
40
47
|
},
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"author": "Author",
|
|
47
|
-
"updated_at": "Updated At"
|
|
48
|
-
},
|
|
49
|
-
"create": {
|
|
50
|
-
"title": "Create Post",
|
|
51
|
-
"desc": "Write a new article for your blog.",
|
|
52
|
-
"form": {
|
|
53
|
-
"title": {
|
|
54
|
-
"label": "Title",
|
|
55
|
-
"already_exists": "This post title already exists."
|
|
56
|
-
},
|
|
57
|
-
"friendly_url": {
|
|
58
|
-
"label": "Friendly URL",
|
|
59
|
-
"desc": "Used in the post address. Auto-filled from the title.",
|
|
60
|
-
"already_exists": "This friendly URL already exists."
|
|
61
|
-
},
|
|
62
|
-
"content": "Content",
|
|
63
|
-
"category": "Category"
|
|
64
|
-
},
|
|
65
|
-
"submit": "Create Post",
|
|
66
|
-
"success": "Post has been created successfully."
|
|
67
|
-
},
|
|
68
|
-
"edit": {
|
|
69
|
-
"title": "Edit Post",
|
|
70
|
-
"submit": "Save Changes",
|
|
71
|
-
"success": "Post has been updated successfully."
|
|
72
|
-
},
|
|
73
|
-
"delete": {
|
|
74
|
-
"title": "Delete Post",
|
|
75
|
-
"desc": "Are you sure you want to delete <title></title> post? This action cannot be undone.",
|
|
76
|
-
"confirm": "Yes, delete this post",
|
|
77
|
-
"success": "Post has been deleted successfully."
|
|
48
|
+
"category": {
|
|
49
|
+
"color": {
|
|
50
|
+
"label": "Color",
|
|
51
|
+
"desc": "Shown next to the category in lists.",
|
|
52
|
+
"none": "No color"
|
|
78
53
|
}
|
|
79
54
|
}
|
|
80
55
|
}
|
|
81
56
|
},
|
|
82
|
-
"@vitnode/blog:posts": "
|
|
83
|
-
"@vitnode/blog:posts:can_view": "View
|
|
84
|
-
"@vitnode/blog:posts:can_create": "Create
|
|
85
|
-
"@vitnode/blog:posts:can_edit": "Edit
|
|
86
|
-
"@vitnode/blog:posts:can_delete": "Delete
|
|
57
|
+
"@vitnode/blog:posts": "Articles",
|
|
58
|
+
"@vitnode/blog:posts:can_view": "View articles list",
|
|
59
|
+
"@vitnode/blog:posts:can_create": "Create articles",
|
|
60
|
+
"@vitnode/blog:posts:can_edit": "Edit articles",
|
|
61
|
+
"@vitnode/blog:posts:can_delete": "Delete articles",
|
|
62
|
+
"@vitnode/blog:posts:can_publish": "Publish and unpublish articles",
|
|
63
|
+
"@vitnode/blog:posts:can_restore": "Restore an earlier version of an article",
|
|
87
64
|
"@vitnode/blog:categories": "Categories",
|
|
88
65
|
"@vitnode/blog:categories:can_view": "View categories list",
|
|
89
66
|
"@vitnode/blog:categories:can_create": "Create categories",
|
package/src/locales/index.ts
CHANGED
|
@@ -6,6 +6,7 @@ import type { LocaleMessagesMap } from "@vitnode/core/lib/i18n/types";
|
|
|
6
6
|
*/
|
|
7
7
|
const messages: LocaleMessagesMap = {
|
|
8
8
|
en: async () => await import("./en.json", { with: { type: "json" } }),
|
|
9
|
+
pl: async () => await import("./pl.json", { with: { type: "json" } }),
|
|
9
10
|
};
|
|
10
11
|
|
|
11
12
|
export default messages;
|