@opengis/cms 0.0.21 → 0.0.22

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.
Files changed (183) hide show
  1. package/package.json +2 -2
  2. package/src/App.css +52 -0
  3. package/src/App.vue +62 -0
  4. package/src/assets/image.png +0 -0
  5. package/src/assets/main.css +3 -0
  6. package/src/assets/tailwind-3.4.17.js +113 -0
  7. package/src/components/LanguageSwitcher.vue +73 -0
  8. package/src/components/SettingsCard.vue +40 -0
  9. package/src/components/builder/CreateForm.vue +128 -0
  10. package/src/components/builder/formTypeSchema.js +145 -0
  11. package/src/components/builder/tabs/index.ts +9 -0
  12. package/src/components/builder/tabs/vs-builder-edit.vue +133 -0
  13. package/src/components/builder/tabs/vs-builder-monaco.vue +29 -0
  14. package/src/components/builder/tabs/vs-builder-preview.vue +39 -0
  15. package/src/components/builder/vs-builder-datatable-controls.vue +138 -0
  16. package/src/components/builder/vs-builder-datatable-form.vue +80 -0
  17. package/src/components/builder/vs-builder-datatable.vue +191 -0
  18. package/src/components/builder/vs-builder-list-item.vue +110 -0
  19. package/src/components/collections/CollectionsBreadcrumb.vue +52 -0
  20. package/src/components/collections/CollectionsGrid.vue +176 -0
  21. package/src/components/collections/ContentBlock.vue +75 -0
  22. package/src/components/collections/formWrapper.vue +156 -0
  23. package/src/components/dashboard/ContentItem.vue +82 -0
  24. package/src/components/dashboard/DashboardHeader.vue +33 -0
  25. package/src/components/dashboard/QuickActions.vue +84 -0
  26. package/src/components/dashboard/RecentContent.vue +54 -0
  27. package/src/components/dashboard/StatCard.vue +63 -0
  28. package/src/components/dashboard/StatsGrid.vue +28 -0
  29. package/src/components/form-components/MonacoEditor.vue +104 -0
  30. package/src/components/form-components/VsFormMeta.vue +40 -0
  31. package/src/components/form-components/VsFormTags.vue +150 -0
  32. package/src/components/form-components/custom-datatable/vs-form-custom-datatable-add.vue +84 -0
  33. package/src/components/form-components/custom-datatable/vs-form-custom-datatable-controls.vue +106 -0
  34. package/src/components/form-components/index.js +23 -0
  35. package/src/components/form-components/reference/vs-form-reference-add.vue +92 -0
  36. package/src/components/form-components/reference/vs-form-reference-controls.vue +101 -0
  37. package/src/components/form-components/reference-list/referenceOptionList.js +78 -0
  38. package/src/components/form-components/reference-list/vs-form-reference-add.vue +145 -0
  39. package/src/components/form-components/reference-list/vs-form-reference-choce.vue +39 -0
  40. package/src/components/form-components/reference-list/vs-form-reference-controls.vue +110 -0
  41. package/src/components/form-components/reference-skeleton/about-skeleton.vue +37 -0
  42. package/src/components/form-components/reference-skeleton/banner-skeleton.vue +29 -0
  43. package/src/components/form-components/reference-skeleton/body-skeleton.vue +56 -0
  44. package/src/components/form-components/reference-skeleton/cards-skeleton.vue +47 -0
  45. package/src/components/form-components/reference-skeleton/documents-skeleton.vue +64 -0
  46. package/src/components/form-components/reference-skeleton/faq-skeleton.vue +64 -0
  47. package/src/components/form-components/reference-skeleton/form-skeleton.vue +41 -0
  48. package/src/components/form-components/reference-skeleton/index.js +36 -0
  49. package/src/components/form-components/reference-skeleton/infoLine-skeleton.vue +37 -0
  50. package/src/components/form-components/reference-skeleton/news-skeleton.vue +54 -0
  51. package/src/components/form-components/reference-skeleton/slider-skeleton.vue +41 -0
  52. package/src/components/form-components/reference-skeleton/tabs-skeleton.vue +40 -0
  53. package/src/components/form-components/reference-skeleton/team-skeleton.vue +103 -0
  54. package/src/components/form-components/reference-skeleton/usefulLinks-skeleton.vue +52 -0
  55. package/src/components/form-components/reference-skeleton/video-skeleton.vue +36 -0
  56. package/src/components/form-components/testReferenceTypes.js +773 -0
  57. package/src/components/form-components/vs-form-color-picker.vue +29 -0
  58. package/src/components/form-components/vs-form-custom-datatable.vue +214 -0
  59. package/src/components/form-components/vs-form-integer.vue +86 -0
  60. package/src/components/form-components/vs-form-key-value.vue +201 -0
  61. package/src/components/form-components/vs-form-marcdown-md.vue +3 -0
  62. package/src/components/form-components/vs-form-media-select.vue +780 -0
  63. package/src/components/form-components/vs-form-reference-list.vue +97 -0
  64. package/src/components/form-components/vs-form-reference.vue +59 -0
  65. package/src/components/form-components/vs-form-relation.vue +30 -0
  66. package/src/components/form-components/vs-form-reletion-link.vue +34 -0
  67. package/src/components/form-components/vs-form-select-collection.vue +0 -0
  68. package/src/components/form-components/vs-form-slug.vue +72 -0
  69. package/src/components/form-components/vs-form-tiptap.vue +7 -0
  70. package/src/components/form-components/vs-richtext-md.vue +3 -0
  71. package/src/components/icons/BellIcon.vue +17 -0
  72. package/src/components/icons/GlobeIcon.vue +18 -0
  73. package/src/components/icons/KeyIcon.vue +20 -0
  74. package/src/components/icons/PaletteIcon.vue +22 -0
  75. package/src/components/icons/SettingsIcon.vue +19 -0
  76. package/src/components/icons/ShieldIcon.vue +18 -0
  77. package/src/components/icons/UsersIcon.vue +19 -0
  78. package/src/components/icons/icon-chevron-right.vue +16 -0
  79. package/src/components/icons/icon-drag.vue +20 -0
  80. package/src/components/icons/icon-file-text.vue +21 -0
  81. package/src/components/icons/icon-folder.vue +18 -0
  82. package/src/components/icons/icon-grid.vue +17 -0
  83. package/src/components/icons/icon-group.vue +19 -0
  84. package/src/components/icons/icon-home.vue +16 -0
  85. package/src/components/icons/icon-image.vue +18 -0
  86. package/src/components/icons/icon-list.vue +20 -0
  87. package/src/components/icons/icon-more.vue +17 -0
  88. package/src/components/icons/icon-plus.vue +17 -0
  89. package/src/components/icons-types/icon-array.vue +22 -0
  90. package/src/components/icons-types/icon-boolean.vue +18 -0
  91. package/src/components/icons-types/icon-datalist.vue +22 -0
  92. package/src/components/icons-types/icon-date.vue +20 -0
  93. package/src/components/icons-types/icon-datetime.vue +20 -0
  94. package/src/components/icons-types/icon-file.vue +21 -0
  95. package/src/components/icons-types/icon-gallery.vue +18 -0
  96. package/src/components/icons-types/icon-image.vue +19 -0
  97. package/src/components/icons-types/icon-integer.vue +20 -0
  98. package/src/components/icons-types/icon-merkdown.vue +18 -0
  99. package/src/components/icons-types/icon-multiselect.vue +22 -0
  100. package/src/components/icons-types/icon-number.vue +20 -0
  101. package/src/components/icons-types/icon-radio.vue +22 -0
  102. package/src/components/icons-types/icon-reference-list.vue +22 -0
  103. package/src/components/icons-types/icon-reference.vue +20 -0
  104. package/src/components/icons-types/icon-relation.vue +22 -0
  105. package/src/components/icons-types/icon-richtext.vue +18 -0
  106. package/src/components/icons-types/icon-select.vue +22 -0
  107. package/src/components/icons-types/icon-slug.vue +19 -0
  108. package/src/components/icons-types/icon-text.vue +19 -0
  109. package/src/components/icons-types/index.js +43 -0
  110. package/src/components/layout/Layout.vue +67 -0
  111. package/src/components/layout/Sidebar.vue +128 -0
  112. package/src/components/media/FileUploadProgress.vue +29 -0
  113. package/src/components/media/MediaBreadcrumb.vue +42 -0
  114. package/src/components/media/MediaCreateFolder.vue +59 -0
  115. package/src/components/media/MediaFileInfo.vue +148 -0
  116. package/src/components/media/MediaGrid.vue +148 -0
  117. package/src/components/media/MediaList.vue +148 -0
  118. package/src/components/media/MediaViewControls.vue +38 -0
  119. package/src/components/media/TypeTag.vue +23 -0
  120. package/src/components/menu/AddNewItemInTree.vue +75 -0
  121. package/src/components/menu/MenuBody.vue +149 -0
  122. package/src/components/menu/MenuItem.vue +73 -0
  123. package/src/components/menu/MenuList.vue +101 -0
  124. package/src/components/referencec/index.ts +7 -0
  125. package/src/components/referencec/vs-reference-faq.vue +61 -0
  126. package/src/components/referencec/vs-reference-user-card.vue +40 -0
  127. package/src/components/settings/NotificationSettings.vue +32 -0
  128. package/src/components/settings/SettingsTable.vue +50 -0
  129. package/src/components/settings/SettingsTitle.vue +33 -0
  130. package/src/components/settings/SettingsToggleItem.vue +25 -0
  131. package/src/components/sidebar/DropdownMenu.vue +34 -0
  132. package/src/components/sidebar/SettingsSidebar.vue +121 -0
  133. package/src/components/sidebar/SidebarFooter.vue +52 -0
  134. package/src/components/sidebar/SidebarHeader.vue +57 -0
  135. package/src/components/sidebar/SidebarMenu.vue +78 -0
  136. package/src/components/ui/EmptyData.vue +76 -0
  137. package/src/components/ui/UniversalTable.vue +310 -0
  138. package/src/components/ui/UniversalTableFilters.vue +0 -0
  139. package/src/components/ui/UniversalTablePagination.vue +118 -0
  140. package/src/components/ui/VsPreview.vue +75 -0
  141. package/src/composables/useCollectionView.ts +21 -0
  142. package/src/composables/useDebounce.ts +26 -0
  143. package/src/composables/useMonaco.ts +28 -0
  144. package/src/composables/useTheme.ts +40 -0
  145. package/src/content/test-slug/metadata.json +1 -0
  146. package/src/i18n.ts +75 -0
  147. package/src/index.css +3 -0
  148. package/src/locales/en.json +778 -0
  149. package/src/locales/uk.json +797 -0
  150. package/src/main.ts +41 -0
  151. package/src/pages/Dashboard.vue +168 -0
  152. package/src/pages/EmailPage.vue +183 -0
  153. package/src/pages/FeedbackPage.vue +232 -0
  154. package/src/pages/MediaPage.vue +372 -0
  155. package/src/pages/TagsPage.vue +207 -0
  156. package/src/pages/builder/BuilderPage.vue +195 -0
  157. package/src/pages/builder/EditCollectionPage.vue +163 -0
  158. package/src/pages/collections/ArticlesPage.vue +385 -0
  159. package/src/pages/collections/CollectionsPage.vue +146 -0
  160. package/src/pages/collections/SingletonsPage.vue +119 -0
  161. package/src/pages/collections/contentForm.vue +484 -0
  162. package/src/pages/collections/schema/seo.ts +27 -0
  163. package/src/pages/menu/MenuAddPage.vue +123 -0
  164. package/src/pages/menu/MenuItemPage.vue +183 -0
  165. package/src/pages/menu/MenuPage.vue +133 -0
  166. package/src/pages/settings/ApiKeys.vue +75 -0
  167. package/src/pages/settings/Appearance.vue +80 -0
  168. package/src/pages/settings/Logs.vue +260 -0
  169. package/src/pages/settings/PermissionsPage.vue +237 -0
  170. package/src/pages/settings/Settings.vue +186 -0
  171. package/src/pages/settings/Users.vue +109 -0
  172. package/src/pages/settings/general.vue +154 -0
  173. package/src/pages/settings/generalScheme.js +132 -0
  174. package/src/pages/users/AddUser.vue +106 -0
  175. package/src/pages/users/UsersPage.vue +98 -0
  176. package/src/props/builder.ts +67 -0
  177. package/src/props/content.ts +56 -0
  178. package/src/props/media.ts +63 -0
  179. package/src/router/index.ts +181 -0
  180. package/src/types/fastify-auth.d.ts +4 -0
  181. package/src/utils/getField.js +270 -0
  182. package/src/utils/translit.js +19 -0
  183. package/src/vite-env.d.ts +1 -0
@@ -0,0 +1,270 @@
1
+ export const getField = (field) => {
2
+
3
+ const type = field?.type?.toLowerCase();
4
+ const validators = field?.required ? ["required"] : null;
5
+
6
+ if (type === "array") {
7
+ return {
8
+ key: field.name,
9
+ label: field.label || field.title,
10
+ type: "multi-text",
11
+ help: field?.help,
12
+ colModel: {
13
+ type: field?.subtype || 'text',
14
+ placeholder: field?.placeholder,
15
+ },
16
+ validators,
17
+ };
18
+ }
19
+ if (type === "boolean") {
20
+ return {
21
+ key: field.name,
22
+ label: field.label || field.title,
23
+ type: "Switcher",
24
+ help: field?.help,
25
+ validators,
26
+ };
27
+ }
28
+ if(type === "tags") {
29
+ return {
30
+ key: field.name,
31
+ label: field.label || field.title,
32
+ type: "tags",
33
+ help: field?.help,
34
+ validators,
35
+ };
36
+ }
37
+
38
+ if (type === "radio") {
39
+ return {
40
+ key: field.name,
41
+ label: field.label || field.title,
42
+ type: "radio",
43
+ help: field?.help,
44
+ options: field.options || [],
45
+ validators,
46
+ };
47
+ }
48
+
49
+ if (type === "date") {
50
+ return {
51
+ key: field.name,
52
+ label: field.label || field.title,
53
+ type: "Date",
54
+ time: false,
55
+ help: field?.help,
56
+ validators,
57
+ };
58
+ }
59
+
60
+ if (type === "datetime") {
61
+ return {
62
+ key: field.name,
63
+ label: field.label || field.title,
64
+ type: "Date",
65
+ help: field?.help,
66
+ mode: "datetime",
67
+ time: true,
68
+ validators,
69
+ };
70
+ }
71
+
72
+ if (type === "number") {
73
+ return {
74
+ key: field.name,
75
+ label: field.label || field.title,
76
+ help: field?.help,
77
+ type: "Number",
78
+ validators,
79
+ };
80
+ }
81
+
82
+ if (type === "integer") {
83
+ return {
84
+ key: field.name,
85
+ label: field.label || field.title,
86
+ type: "Integer",
87
+ help: field?.help,
88
+ validators,
89
+ };
90
+ }
91
+
92
+ if (type === "text") {
93
+ return {
94
+ key: field.name,
95
+ label: field.label || field.title,
96
+ type: "Text",
97
+ help: field?.help,
98
+ validators,
99
+ };
100
+ }
101
+
102
+ if (type === "file") {
103
+ return {
104
+ key: field.name,
105
+ label: field.label || field.title,
106
+ type: "File",
107
+ multiple: field.multi || field.multiple,
108
+ help: field?.help,
109
+ validators,
110
+ api: '/api/cms-media/upload?subdir=',
111
+ dir: 'uploads/' + new Date().toLocaleDateString('en-US').replace(/\//g, '-'),
112
+ };
113
+ }
114
+
115
+ if (type === "filelist") {
116
+ return {
117
+ key: field.name,
118
+ label: field.label || field.title,
119
+ type: "file",
120
+ multiple: true,
121
+ help: field?.help,
122
+ validators,
123
+ };
124
+ }
125
+
126
+ if (type === "slug") {
127
+ return {
128
+ key: field.name,
129
+ label: field.label || field.title,
130
+ type: "Slug",
131
+ parent: field.parent || "",
132
+ help: field?.help,
133
+ validators,
134
+ };
135
+ }
136
+
137
+ if (type === "image") {
138
+ return {
139
+ key: field.name,
140
+ label: field.label || field.title,
141
+ type: "File",
142
+ multi: field.multiple,
143
+ help: field?.help,
144
+ validators,
145
+ api: '/api/cms-media/upload?subdir=',
146
+ dir: 'uploads/' + new Date().toLocaleDateString('en-US').replace(/\//g, '-'),
147
+ };
148
+ }
149
+
150
+ if (type === "select") {
151
+ if (field.options) {
152
+ return {
153
+ key: field.name,
154
+ label: field.label || field.title,
155
+ type: "select",
156
+ options: field.options || [],
157
+ help: field?.help,
158
+ validators,
159
+ };
160
+ } else {
161
+ return {
162
+ key: field.name,
163
+ label: field.label || field.title,
164
+ type: "select",
165
+ data: field.data || [],
166
+ help: field?.help,
167
+ validators,
168
+ };
169
+ }
170
+ }
171
+
172
+ if (type === "multiselect") {
173
+ return {
174
+ key: field.name,
175
+ label: field.label || field.title,
176
+ type: "select",
177
+ data: field.data || [],
178
+ parent: field.parent || "",
179
+ options: field.options || [],
180
+ help: field?.help,
181
+ validators,
182
+ multiple: true,
183
+ };
184
+ }
185
+
186
+ if (type === "richtext") {
187
+ return {
188
+ key: field.name,
189
+ label: field.label || field.title,
190
+ type: "Texteditor",
191
+ help: field?.help,
192
+ validators,
193
+ };
194
+ }
195
+
196
+ if (type === "datalist") {
197
+ return {
198
+ key: field.name,
199
+ label: field.label || field.title,
200
+ type: "Custom-Datatable",
201
+ colModel: field.colModel?.map(item => (getField(item))) || [],
202
+ help: field?.help,
203
+ validators,
204
+ };
205
+ }
206
+
207
+ if (type === "reference") {
208
+ return {
209
+ key: field.name,
210
+ label: field.label || field.title,
211
+ type: "reference",
212
+ reference_type: field.reference_type,
213
+ help: field?.help,
214
+ validators,
215
+ };
216
+ }
217
+
218
+ if (type === "reference-list") {
219
+ return {
220
+ key: field.name,
221
+ label: field.label || field.title,
222
+ type: "reference",
223
+ reference_type: field.reference_type,
224
+ help: field?.help,
225
+ validators,
226
+ };
227
+ }
228
+
229
+ if (type === "relation") {
230
+ console.log(field);
231
+ return {
232
+ key: field.name,
233
+ label: field.label || field.title,
234
+ type: "relation-link",
235
+ help: field?.help,
236
+ relation: field.relation,
237
+ validators,
238
+ };
239
+ }
240
+
241
+ if (type === "markdown") {
242
+ return {
243
+ key: field.name,
244
+ label: field.label || field.title,
245
+ type: "richtext-md",
246
+ help: field?.help,
247
+ validators,
248
+ };
249
+ }
250
+
251
+ if (type === "mediaselect") {
252
+ return {
253
+ key: field.name,
254
+ label: field.label || field.title,
255
+ type: "mediaselect",
256
+ help: field?.help,
257
+ validators,
258
+ };
259
+ }
260
+
261
+ return {
262
+ key: field.name,
263
+ label: field.label || field.title,
264
+ placeholder: field.placeholder,
265
+ help: field?.help,
266
+ type: "Text",
267
+ validators,
268
+ };
269
+ };
270
+
@@ -0,0 +1,19 @@
1
+ export const translit = (str) => {
2
+ const map = {
3
+ 'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'e', 'ж': 'zh',
4
+ 'з': 'z', 'и': 'i', 'й': 'y', 'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o',
5
+ 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 'ф': 'f', 'х': 'kh', 'ц': 'ts',
6
+ 'ч': 'ch', 'ш': 'sh', 'щ': 'shch', 'ы': 'y', 'э': 'e', 'ю': 'yu', 'я': 'ya',
7
+ 'ь': '', 'ъ': '', 'є': 'ye', 'і': 'i', 'ї': 'yi', 'ґ': 'g'
8
+ };
9
+
10
+ return str
11
+ .toLowerCase()
12
+ .split('')
13
+ .map(char => map[char] || char)
14
+ .join('')
15
+ .replace(/[^a-z0-9\s-]/g, '')
16
+ .replace(/\s+/g, '-')
17
+ .replace(/-+/g, '-')
18
+ .trim('-');
19
+ }
@@ -0,0 +1 @@
1
+ /// <reference types="vite/client" />