@abp/ng.cms-kit 10.2.0-rc.1

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/README.md ADDED
@@ -0,0 +1,85 @@
1
+ # @abp/ng.cms-kit
2
+
3
+ ABP CMS Kit Angular package providing admin and public functionality for content management.
4
+
5
+ ## Structure
6
+
7
+ This package is organized into two main sub-packages:
8
+
9
+ - **Admin** (`admin/`) - Admin interface for managing CMS content
10
+ - **Public** (`public/`) - Public-facing components for displaying CMS content
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ npm install @abp/ng.cms-kit
16
+ ```
17
+
18
+ ## Usage
19
+
20
+ ### Admin
21
+
22
+ ```typescript
23
+ import { provideCmsKitAdminConfig } from '@abp/ng.cms-kit/admin/config';
24
+
25
+ // In your app config
26
+ export const appConfig: ApplicationConfig = {
27
+ providers: [
28
+ provideCmsKitAdminConfig(),
29
+ // ... other providers
30
+ ],
31
+ };
32
+
33
+ // In your routes
34
+ export const routes: Routes = [
35
+ {
36
+ path: 'cms',
37
+ loadChildren: () => import('@abp/ng.cms-kit/admin').then(m => m.createRoutes()),
38
+ },
39
+ ];
40
+ ```
41
+
42
+ ### Public
43
+
44
+ ```typescript
45
+ import { provideCmsKitPublicConfig } from '@abp/ng.cms-kit/public/config';
46
+
47
+ // In your app config
48
+ export const appConfig: ApplicationConfig = {
49
+ providers: [
50
+ provideCmsKitPublicConfig(),
51
+ // ... other providers
52
+ ],
53
+ };
54
+
55
+ // In your routes
56
+ export const routes: Routes = [
57
+ {
58
+ path: 'cms',
59
+ loadChildren: () => import('@abp/ng.cms-kit/public').then(m => m.createRoutes()),
60
+ },
61
+ ];
62
+ ```
63
+
64
+ ## Features
65
+
66
+ ### Admin Features
67
+
68
+ - Comments management
69
+ - Tags management
70
+ - Pages management
71
+ - Blogs management
72
+ - Blog posts management
73
+ - Menus management
74
+ - Global resources management
75
+
76
+ ### Public Features
77
+
78
+ - Public page viewing
79
+ - Public blog and blog post viewing
80
+ - Commenting functionality
81
+ - Shared components (MarkedItemToggle, PopularTags, Rating, ReactionSelection, Tags)
82
+
83
+ ## Documentation
84
+
85
+ For more information, see the [ABP Documentation](https://docs.abp.io).
@@ -0,0 +1,136 @@
1
+ import { provideAppInitializer, inject, makeEnvironmentProviders } from '@angular/core';
2
+ import { RoutesService, ConfigStateService } from '@abp/ng.core';
3
+ import { SettingTabsService } from '@abp/ng.setting-management/config';
4
+ import { CmsSettingsComponent } from '@abp/ng.cms-kit/admin';
5
+
6
+ var eCmsKitAdminPolicyNames;
7
+ (function (eCmsKitAdminPolicyNames) {
8
+ eCmsKitAdminPolicyNames["Cms"] = "CmsKit.Comments || CmsKit.Tags || CmsKit.Pages || CmsKit.Blogs || CmsKit.BlogPosts || CmsKit.Menus || CmsKit.GlobalResources";
9
+ eCmsKitAdminPolicyNames["Comments"] = "CmsKit.Comments";
10
+ eCmsKitAdminPolicyNames["Tags"] = "CmsKit.Tags";
11
+ eCmsKitAdminPolicyNames["Pages"] = "CmsKit.Pages";
12
+ eCmsKitAdminPolicyNames["Blogs"] = "CmsKit.Blogs";
13
+ eCmsKitAdminPolicyNames["BlogPosts"] = "CmsKit.BlogPosts";
14
+ eCmsKitAdminPolicyNames["Menus"] = "CmsKit.Menus";
15
+ eCmsKitAdminPolicyNames["GlobalResources"] = "CmsKit.GlobalResources";
16
+ })(eCmsKitAdminPolicyNames || (eCmsKitAdminPolicyNames = {}));
17
+
18
+ var eCmsKitAdminRouteNames;
19
+ (function (eCmsKitAdminRouteNames) {
20
+ eCmsKitAdminRouteNames["Cms"] = "CmsKit::Menu:CMS";
21
+ eCmsKitAdminRouteNames["Comments"] = "CmsKit::CmsKit.Comments";
22
+ eCmsKitAdminRouteNames["Tags"] = "CmsKit::CmsKit.Tags";
23
+ eCmsKitAdminRouteNames["Pages"] = "CmsKit::Pages";
24
+ eCmsKitAdminRouteNames["Blogs"] = "CmsKit::Blogs";
25
+ eCmsKitAdminRouteNames["BlogPosts"] = "CmsKit::BlogPosts";
26
+ eCmsKitAdminRouteNames["Menus"] = "CmsKit::Menus";
27
+ eCmsKitAdminRouteNames["GlobalResources"] = "CmsKit::GlobalResources";
28
+ })(eCmsKitAdminRouteNames || (eCmsKitAdminRouteNames = {}));
29
+
30
+ const CMS_KIT_ADMIN_ROUTE_PROVIDERS = [
31
+ provideAppInitializer(() => {
32
+ configureRoutes();
33
+ }),
34
+ ];
35
+ function configureRoutes() {
36
+ const routesService = inject(RoutesService);
37
+ routesService.add([
38
+ {
39
+ path: '/cms/blog-posts',
40
+ name: eCmsKitAdminRouteNames.BlogPosts,
41
+ parentName: eCmsKitAdminRouteNames.Cms,
42
+ order: 1,
43
+ layout: "application" /* eLayoutType.application */,
44
+ iconClass: 'fa fa-file-alt',
45
+ requiredPolicy: eCmsKitAdminPolicyNames.BlogPosts,
46
+ },
47
+ {
48
+ path: '/cms/blogs',
49
+ name: eCmsKitAdminRouteNames.Blogs,
50
+ parentName: eCmsKitAdminRouteNames.Cms,
51
+ order: 2,
52
+ layout: "application" /* eLayoutType.application */,
53
+ iconClass: 'fa fa-blog',
54
+ requiredPolicy: eCmsKitAdminPolicyNames.Blogs,
55
+ },
56
+ {
57
+ path: '/cms/comments',
58
+ name: eCmsKitAdminRouteNames.Comments,
59
+ parentName: eCmsKitAdminRouteNames.Cms,
60
+ order: 3,
61
+ layout: "application" /* eLayoutType.application */,
62
+ iconClass: 'fa fa-comments',
63
+ requiredPolicy: eCmsKitAdminPolicyNames.Comments,
64
+ },
65
+ {
66
+ path: '/cms/global-resources',
67
+ name: eCmsKitAdminRouteNames.GlobalResources,
68
+ parentName: eCmsKitAdminRouteNames.Cms,
69
+ order: 5,
70
+ layout: "application" /* eLayoutType.application */,
71
+ iconClass: 'fa fa-globe',
72
+ requiredPolicy: eCmsKitAdminPolicyNames.GlobalResources,
73
+ },
74
+ {
75
+ path: '/cms/menus',
76
+ name: eCmsKitAdminRouteNames.Menus,
77
+ parentName: eCmsKitAdminRouteNames.Cms,
78
+ order: 6,
79
+ layout: "application" /* eLayoutType.application */,
80
+ iconClass: 'fa fa-bars',
81
+ requiredPolicy: eCmsKitAdminPolicyNames.Menus,
82
+ },
83
+ {
84
+ path: '/cms/pages',
85
+ name: eCmsKitAdminRouteNames.Pages,
86
+ parentName: eCmsKitAdminRouteNames.Cms,
87
+ order: 9,
88
+ layout: "application" /* eLayoutType.application */,
89
+ iconClass: 'fa fa-file',
90
+ requiredPolicy: eCmsKitAdminPolicyNames.Pages,
91
+ },
92
+ {
93
+ path: '/cms/tags',
94
+ name: eCmsKitAdminRouteNames.Tags,
95
+ parentName: eCmsKitAdminRouteNames.Cms,
96
+ order: 11,
97
+ layout: "application" /* eLayoutType.application */,
98
+ iconClass: 'fa fa-tags',
99
+ requiredPolicy: eCmsKitAdminPolicyNames.Tags,
100
+ },
101
+ ]);
102
+ }
103
+
104
+ const CMS_KIT_ADMIN_SETTING_TAB_PROVIDERS = [
105
+ provideAppInitializer(() => {
106
+ configureSettingTabs();
107
+ }),
108
+ ];
109
+ async function configureSettingTabs() {
110
+ const settingTabs = inject(SettingTabsService);
111
+ const configState = inject(ConfigStateService);
112
+ const tabsArray = [
113
+ {
114
+ name: eCmsKitAdminRouteNames.Cms,
115
+ order: 100,
116
+ requiredPolicy: eCmsKitAdminPolicyNames.Cms,
117
+ invisible: configState.getFeature('CmsKit.CommentEnable')?.toLowerCase() === 'true',
118
+ component: CmsSettingsComponent,
119
+ },
120
+ ];
121
+ settingTabs.add(tabsArray);
122
+ }
123
+
124
+ function provideCmsKitAdminConfig() {
125
+ return makeEnvironmentProviders([
126
+ CMS_KIT_ADMIN_ROUTE_PROVIDERS,
127
+ CMS_KIT_ADMIN_SETTING_TAB_PROVIDERS,
128
+ ]);
129
+ }
130
+
131
+ /**
132
+ * Generated bundle index. Do not edit.
133
+ */
134
+
135
+ export { CMS_KIT_ADMIN_ROUTE_PROVIDERS, CMS_KIT_ADMIN_SETTING_TAB_PROVIDERS, configureRoutes, configureSettingTabs, eCmsKitAdminPolicyNames, eCmsKitAdminRouteNames, provideCmsKitAdminConfig };
136
+ //# sourceMappingURL=abp-ng.cms-kit-admin-config.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abp-ng.cms-kit-admin-config.mjs","sources":["../../../../packages/cms-kit/admin/config/src/enums/policy-names.ts","../../../../packages/cms-kit/admin/config/src/enums/route-names.ts","../../../../packages/cms-kit/admin/config/src/providers/route.provider.ts","../../../../packages/cms-kit/admin/config/src/providers/setting-tab.provider.ts","../../../../packages/cms-kit/admin/config/src/providers/cms-kit-admin-config.provider.ts","../../../../packages/cms-kit/admin/config/src/abp-ng.cms-kit-admin-config.ts"],"sourcesContent":["export enum eCmsKitAdminPolicyNames {\r\n Cms = 'CmsKit.Comments || CmsKit.Tags || CmsKit.Pages || CmsKit.Blogs || CmsKit.BlogPosts || CmsKit.Menus || CmsKit.GlobalResources',\r\n Comments = 'CmsKit.Comments',\r\n Tags = 'CmsKit.Tags',\r\n Pages = 'CmsKit.Pages',\r\n Blogs = 'CmsKit.Blogs',\r\n BlogPosts = 'CmsKit.BlogPosts',\r\n Menus = 'CmsKit.Menus',\r\n GlobalResources = 'CmsKit.GlobalResources',\r\n}\r\n","export enum eCmsKitAdminRouteNames {\r\n Cms = 'CmsKit::Menu:CMS',\r\n Comments = 'CmsKit::CmsKit.Comments',\r\n Tags = 'CmsKit::CmsKit.Tags',\r\n Pages = 'CmsKit::Pages',\r\n Blogs = 'CmsKit::Blogs',\r\n BlogPosts = 'CmsKit::BlogPosts',\r\n Menus = 'CmsKit::Menus',\r\n GlobalResources = 'CmsKit::GlobalResources',\r\n}\r\n","import { eLayoutType, RoutesService } from '@abp/ng.core';\r\nimport { inject, provideAppInitializer } from '@angular/core';\r\nimport { eCmsKitAdminPolicyNames } from '../enums/policy-names';\r\nimport { eCmsKitAdminRouteNames } from '../enums/route-names';\r\n\r\nexport const CMS_KIT_ADMIN_ROUTE_PROVIDERS = [\r\n provideAppInitializer(() => {\r\n configureRoutes();\r\n }),\r\n];\r\n\r\nexport function configureRoutes() {\r\n const routesService = inject(RoutesService);\r\n routesService.add([\r\n {\r\n path: '/cms/blog-posts',\r\n name: eCmsKitAdminRouteNames.BlogPosts,\r\n parentName: eCmsKitAdminRouteNames.Cms,\r\n order: 1,\r\n layout: eLayoutType.application,\r\n iconClass: 'fa fa-file-alt',\r\n requiredPolicy: eCmsKitAdminPolicyNames.BlogPosts,\r\n },\r\n {\r\n path: '/cms/blogs',\r\n name: eCmsKitAdminRouteNames.Blogs,\r\n parentName: eCmsKitAdminRouteNames.Cms,\r\n order: 2,\r\n layout: eLayoutType.application,\r\n iconClass: 'fa fa-blog',\r\n requiredPolicy: eCmsKitAdminPolicyNames.Blogs,\r\n },\r\n {\r\n path: '/cms/comments',\r\n name: eCmsKitAdminRouteNames.Comments,\r\n parentName: eCmsKitAdminRouteNames.Cms,\r\n order: 3,\r\n layout: eLayoutType.application,\r\n iconClass: 'fa fa-comments',\r\n requiredPolicy: eCmsKitAdminPolicyNames.Comments,\r\n },\r\n {\r\n path: '/cms/global-resources',\r\n name: eCmsKitAdminRouteNames.GlobalResources,\r\n parentName: eCmsKitAdminRouteNames.Cms,\r\n order: 5,\r\n layout: eLayoutType.application,\r\n iconClass: 'fa fa-globe',\r\n requiredPolicy: eCmsKitAdminPolicyNames.GlobalResources,\r\n },\r\n {\r\n path: '/cms/menus',\r\n name: eCmsKitAdminRouteNames.Menus,\r\n parentName: eCmsKitAdminRouteNames.Cms,\r\n order: 6,\r\n layout: eLayoutType.application,\r\n iconClass: 'fa fa-bars',\r\n requiredPolicy: eCmsKitAdminPolicyNames.Menus,\r\n },\r\n {\r\n path: '/cms/pages',\r\n name: eCmsKitAdminRouteNames.Pages,\r\n parentName: eCmsKitAdminRouteNames.Cms,\r\n order: 9,\r\n layout: eLayoutType.application,\r\n iconClass: 'fa fa-file',\r\n requiredPolicy: eCmsKitAdminPolicyNames.Pages,\r\n },\r\n {\r\n path: '/cms/tags',\r\n name: eCmsKitAdminRouteNames.Tags,\r\n parentName: eCmsKitAdminRouteNames.Cms,\r\n order: 11,\r\n layout: eLayoutType.application,\r\n iconClass: 'fa fa-tags',\r\n requiredPolicy: eCmsKitAdminPolicyNames.Tags,\r\n },\r\n ]);\r\n}\r\n","import { ABP, ConfigStateService } from '@abp/ng.core';\r\nimport { SettingTabsService } from '@abp/ng.setting-management/config';\r\nimport { inject, provideAppInitializer } from '@angular/core';\r\nimport { eCmsKitAdminPolicyNames, eCmsKitAdminRouteNames } from '../enums';\r\nimport { CmsSettingsComponent } from '@abp/ng.cms-kit/admin';\r\n\r\nexport const CMS_KIT_ADMIN_SETTING_TAB_PROVIDERS = [\r\n provideAppInitializer(() => {\r\n configureSettingTabs();\r\n }),\r\n];\r\n\r\nexport async function configureSettingTabs() {\r\n const settingTabs = inject(SettingTabsService);\r\n const configState = inject(ConfigStateService);\r\n const tabsArray: ABP.Tab[] = [\r\n {\r\n name: eCmsKitAdminRouteNames.Cms,\r\n order: 100,\r\n requiredPolicy: eCmsKitAdminPolicyNames.Cms,\r\n invisible: configState.getFeature('CmsKit.CommentEnable')?.toLowerCase() === 'true',\r\n component: CmsSettingsComponent,\r\n },\r\n ];\r\n\r\n settingTabs.add(tabsArray);\r\n}\r\n","import { makeEnvironmentProviders } from '@angular/core';\r\nimport { CMS_KIT_ADMIN_ROUTE_PROVIDERS } from './route.provider';\r\nimport { CMS_KIT_ADMIN_SETTING_TAB_PROVIDERS } from './setting-tab.provider';\r\n\r\nexport function provideCmsKitAdminConfig() {\r\n return makeEnvironmentProviders([\r\n CMS_KIT_ADMIN_ROUTE_PROVIDERS,\r\n CMS_KIT_ADMIN_SETTING_TAB_PROVIDERS,\r\n ]);\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}