@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,97 @@
1
+ <template>
2
+ <div class="w-full">
3
+ <Draggable
4
+ v-if="model?.length > 0"
5
+ v-model="model"
6
+ item-key="id"
7
+ handle=".drag-handle"
8
+ class="grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-4"
9
+ >
10
+ <template #item="{ element: item, index }">
11
+ <div class="relative" v-if="item?.reference_type">
12
+ <div
13
+ class="group wireframe-block h-[280px] !p-4 border-2 border-dashed bg-white relative overflow-hidden transition-all rounded-lg shadow-sm border-gray-00 hover:border-gray-400 cursor-grab"
14
+ >
15
+ <div
16
+ :key="item.id"
17
+ class="absolute top-2 left-2 opacity-0 group-hover:opacity-100 border border-gray-200 dark:border-gray-700 transition-opacity cursor-move z-10 bg-white dark:bg-gray-800 rounded p-1 shadow-sm drag-handle"
18
+ >
19
+ <GripVertical class="h-4 w-4 text-gray-400" />
20
+ </div>
21
+
22
+ <VsFormReferenceControls
23
+ :title="$t('builder.' + item?.reference_type)"
24
+ v-model="model[index]"
25
+ v-model:parent="model"
26
+ />
27
+ <component
28
+ v-if="referenceSkeleton[item?.reference_type]"
29
+ :is="referenceSkeleton[item?.reference_type]"
30
+ :index="index"
31
+ :text="getReferenceText(item?.reference_type)"
32
+ :count="Array.isArray(item?.data) ? item.data.length : 0"
33
+ />
34
+ <img
35
+ v-else
36
+ :src="icon"
37
+ alt="Team collaboration"
38
+ class="w-full h-full object-cover"
39
+ />
40
+ </div>
41
+ </div>
42
+ </template>
43
+ </Draggable>
44
+ <VsFormReferenceAdd class="mt-4" :title="title" v-model="model" />
45
+ </div>
46
+ </template>
47
+
48
+ <script setup>
49
+ import { GripVertical } from "lucide-vue-next";
50
+ import Draggable from "vuedraggable";
51
+ import { computed, watch } from "vue";
52
+ import icon from "../../assets/image.png";
53
+ import VsFormReferenceAdd from "./reference-list/vs-form-reference-add.vue";
54
+ import VsFormReferenceControls from "./reference-list/vs-form-reference-controls.vue";
55
+ import referenceSkeleton from "./reference-skeleton/index.js";
56
+ import referenceOptionList from "./reference-list/referenceOptionList";
57
+
58
+ const props = defineProps({
59
+ reference_type: {
60
+ type: String,
61
+ required: true,
62
+ },
63
+ title: {
64
+ type: String,
65
+ required: true,
66
+ },
67
+ });
68
+
69
+ const getReferenceText = (reference_type) => {
70
+ return referenceOptionList.find((item) => item.id === reference_type)?.text;
71
+ };
72
+
73
+ const modelValue = defineModel({
74
+ default: () => [],
75
+ });
76
+
77
+ // Normalize the model to always be an array
78
+ const model = computed({
79
+ get() {
80
+ const value = modelValue.value;
81
+ if (value === null || value === undefined) return [];
82
+ return Array.isArray(value) ? value : [];
83
+ },
84
+ set(value) {
85
+ modelValue.value = Array.isArray(value) ? value : [];
86
+ }
87
+ });
88
+
89
+ // Ensure initial value is always an array
90
+ watch(modelValue, (newValue) => {
91
+ if (newValue !== null && newValue !== undefined && !Array.isArray(newValue)) {
92
+ modelValue.value = [];
93
+ }
94
+ }, { immediate: true });
95
+ </script>
96
+
97
+ <style lang="scss" scoped></style>
@@ -0,0 +1,59 @@
1
+ <template>
2
+ <div>
3
+ <div
4
+ v-if="model && Object.keys(model).length > 0"
5
+ class="h-[260px] w-[300px] group relative bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden hover:border-sky-300 dark:hover:border-sky-600 transition-all duration-200"
6
+ >
7
+ <!-- <div
8
+ class="absolute top-2 left-2 opacity-0 group-hover:opacity-100 transition-opacity cursor-move z-10 bg-white dark:bg-gray-800 rounded p-1 shadow-sm drag-handle"
9
+ >
10
+ <GripVertical class="h-4 w-4 text-gray-400" />
11
+ </div> -->
12
+ <VsFormReferenceControls
13
+ :title="title"
14
+ :schema="scheme"
15
+ v-model="model"
16
+ />
17
+ <component
18
+ :is="testReferenceTypes[reference_type].component"
19
+ v-bind="model"
20
+ />
21
+ </div>
22
+ <VsFormReferenceAdd
23
+ v-else
24
+ class="mt-4"
25
+ :title="title"
26
+ v-model="model"
27
+ :schema="scheme"
28
+ />
29
+ </div>
30
+ </template>
31
+
32
+ <script setup>
33
+ import { testReferenceTypes } from "./testReferenceTypes";
34
+ import { computed } from "vue";
35
+ import VsFormReferenceAdd from "./reference/vs-form-reference-add.vue";
36
+ import VsFormReferenceControls from "./reference/vs-form-reference-controls.vue";
37
+
38
+ const props = defineProps({
39
+ reference_type: {
40
+ type: String,
41
+ default: "",
42
+ },
43
+ title: {
44
+ type: String,
45
+ default: "",
46
+ },
47
+ });
48
+
49
+ const model = defineModel({
50
+ type: Object,
51
+ default: () => ({}),
52
+ });
53
+
54
+ const scheme = computed(() => {
55
+ return testReferenceTypes[props.reference_type]?.schema || null;
56
+ });
57
+ </script>
58
+
59
+ <style lang="scss" scoped></style>
@@ -0,0 +1,30 @@
1
+ <template>
2
+ <VsInputSelect
3
+ v-if="options.length"
4
+ mode="combo"
5
+ v-model="model"
6
+ :options="options"
7
+ />
8
+ </template>
9
+
10
+ <script setup>
11
+ import { ref, onMounted } from "vue";
12
+ import { VsInputSelect } from '@opengis/form'
13
+
14
+
15
+ const model = defineModel();
16
+
17
+ const options = ref([]);
18
+
19
+ const fetchOptions = async () => {
20
+ const res = await fetch(`/api/cms-type`);
21
+ const data = await res.json();
22
+ options.value = data?.rows
23
+ ?.filter((item) => item.type === "collection")
24
+ ?.map((i) => ({ ...i, text: i.title }));
25
+ };
26
+
27
+ onMounted(fetchOptions);
28
+ </script>
29
+
30
+ <style lang="scss" scoped></style>
@@ -0,0 +1,34 @@
1
+ <template>
2
+ <VsInputSelect
3
+ v-if="options?.length"
4
+ mode="combo"
5
+ v-model="model"
6
+ :options="options"
7
+ />
8
+ </template>
9
+
10
+ <script setup>
11
+ import { ref, onMounted } from "vue";
12
+ import { VsInputSelect } from '@opengis/form'
13
+
14
+
15
+ const model = defineModel();
16
+ const props = defineProps({
17
+ relation: {
18
+ type: String,
19
+ required: true,
20
+ },
21
+ });
22
+
23
+ const options = ref([]);
24
+
25
+ const fetchOptions = async () => {
26
+ const res = await fetch(`/api/cms-suggest/${props.relation}`);
27
+ const data = await res.json();
28
+ options.value = data?.data;
29
+ };
30
+
31
+ onMounted(fetchOptions);
32
+ </script>
33
+
34
+ <style lang="scss" scoped></style>
@@ -0,0 +1,72 @@
1
+ <template>
2
+ <div class="relative flex gap-1 bg-white rounded-lg vs-form-text">
3
+ <input
4
+ ref="vsText"
5
+ :disabled="disabled"
6
+ :placeholder="placeholder"
7
+ v-model="value"
8
+ class="block w-full px-3 py-2 text-sm border border-solid rounded-lg placeholder:text-nowrap border-stone-200 text-stone-800 placeholder:text-stone-400 focus:outline focus:z-10 focus:border-blue-500 focus:ring-blue-500 focus:outline-blue-500"
9
+ />
10
+ <button
11
+ class="px-2 bg-gray-100 border rounded-lg hover:bg-gray-200"
12
+ @click="generateSlug"
13
+ >
14
+ {{ t('form.gen') }}
15
+ </button>
16
+ </div>
17
+ </template>
18
+ <script setup lang="ts">
19
+ import { computed, inject, watch } from "vue";
20
+ import { translit } from "../../utils/translit";
21
+ import { useI18n } from 'vue-i18n';
22
+ const { t } = useI18n();
23
+
24
+ const formValues = inject("formValues") || {};
25
+
26
+ const props = defineProps<{
27
+ disabled?: boolean;
28
+ modelValue: string;
29
+ placeholder?: string;
30
+ parent: string;
31
+ }>();
32
+
33
+ const parentValue = computed(() => {
34
+ return formValues?.value?.[props.parent || ""] || "";
35
+ });
36
+
37
+ const emit = defineEmits<{
38
+ (e: "update:modelValue", value: string): void;
39
+ }>();
40
+
41
+ const value = computed({
42
+ get(): string {
43
+ return props.modelValue;
44
+ },
45
+ set(output: string): void {
46
+ emit("update:modelValue", output.trim());
47
+ },
48
+ });
49
+
50
+ const generateSlug = () => {
51
+ value.value = parentValue.value
52
+ ? translit(parentValue.value)
53
+ : translit(value.value);
54
+ };
55
+ </script>
56
+ <style lang="scss" scoped>
57
+ .col-error {
58
+ .vs-form-text input {
59
+ border: 1px solid red;
60
+ }
61
+ }
62
+
63
+ .vs-form-text {
64
+ position: relative;
65
+ }
66
+
67
+ .vs-form-text__input {
68
+ &::placeholder {
69
+ opacity: 0.5;
70
+ }
71
+ }
72
+ </style>
@@ -0,0 +1,7 @@
1
+ <template>
2
+ <vs-richtext class="w-full" />
3
+ </template>
4
+
5
+ <script>
6
+ import "@opengis/richtext/dist/richtext.css";
7
+ </script>
@@ -0,0 +1,3 @@
1
+ <template>
2
+ <vs-richtext-md class="w-full h-[300px]" />
3
+ </template>
@@ -0,0 +1,17 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="24"
5
+ height="24"
6
+ viewBox="0 0 24 24"
7
+ fill="none"
8
+ stroke="currentColor"
9
+ stroke-width="2"
10
+ stroke-linecap="round"
11
+ stroke-linejoin="round"
12
+ class="lucide lucide-bell w-5 h-5 mr-2"
13
+ >
14
+ <path d="M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9"></path>
15
+ <path d="M10.3 21a1.94 1.94 0 0 0 3.4 0"></path>
16
+ </svg>
17
+ </template>
@@ -0,0 +1,18 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="24"
5
+ height="24"
6
+ viewBox="0 0 24 24"
7
+ fill="none"
8
+ stroke="currentColor"
9
+ stroke-width="2"
10
+ stroke-linecap="round"
11
+ stroke-linejoin="round"
12
+ class="lucide lucide-globe w-5 h-5 mr-2 text-orange-600"
13
+ >
14
+ <circle cx="12" cy="12" r="10"></circle>
15
+ <path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path>
16
+ <path d="M2 12h20"></path>
17
+ </svg>
18
+ </template>
@@ -0,0 +1,20 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="24"
5
+ height="24"
6
+ viewBox="0 0 24 24"
7
+ fill="none"
8
+ stroke="currentColor"
9
+ stroke-width="2"
10
+ stroke-linecap="round"
11
+ stroke-linejoin="round"
12
+ class="lucide lucide-key w-5 h-5 mr-2 text-purple-600"
13
+ >
14
+ <path
15
+ d="m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4"
16
+ ></path>
17
+ <path d="m21 2-9.6 9.6"></path>
18
+ <circle cx="7.5" cy="15.5" r="5.5"></circle>
19
+ </svg>
20
+ </template>
@@ -0,0 +1,22 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="24"
5
+ height="24"
6
+ viewBox="0 0 24 24"
7
+ fill="none"
8
+ stroke="currentColor"
9
+ stroke-width="2"
10
+ stroke-linecap="round"
11
+ stroke-linejoin="round"
12
+ class="lucide lucide-palette w-5 h-5 mr-2 text-pink-600"
13
+ >
14
+ <circle cx="13.5" cy="6.5" r=".5" fill="currentColor"></circle>
15
+ <circle cx="17.5" cy="10.5" r=".5" fill="currentColor"></circle>
16
+ <circle cx="8.5" cy="7.5" r=".5" fill="currentColor"></circle>
17
+ <circle cx="6.5" cy="12.5" r=".5" fill="currentColor"></circle>
18
+ <path
19
+ d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z"
20
+ ></path>
21
+ </svg>
22
+ </template>
@@ -0,0 +1,19 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="24"
5
+ height="24"
6
+ viewBox="0 0 24 24"
7
+ fill="none"
8
+ stroke="currentColor"
9
+ stroke-width="2"
10
+ stroke-linecap="round"
11
+ stroke-linejoin="round"
12
+ class="lucide lucide-settings w-5 h-5 mr-2 text-blue-600"
13
+ >
14
+ <path
15
+ d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"
16
+ ></path>
17
+ <circle cx="12" cy="12" r="3"></circle>
18
+ </svg>
19
+ </template>
@@ -0,0 +1,18 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="24"
5
+ height="24"
6
+ viewBox="0 0 24 24"
7
+ fill="none"
8
+ stroke="currentColor"
9
+ stroke-width="2"
10
+ stroke-linecap="round"
11
+ stroke-linejoin="round"
12
+ class="lucide lucide-shield w-5 h-5 mr-2 text-red-600"
13
+ >
14
+ <path
15
+ d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"
16
+ ></path>
17
+ </svg>
18
+ </template>
@@ -0,0 +1,19 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="24"
5
+ height="24"
6
+ viewBox="0 0 24 24"
7
+ fill="none"
8
+ stroke="currentColor"
9
+ stroke-width="2"
10
+ stroke-linecap="round"
11
+ stroke-linejoin="round"
12
+ class="lucide lucide-users w-5 h-5 mr-2 text-green-600"
13
+ >
14
+ <path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path>
15
+ <circle cx="9" cy="7" r="4"></circle>
16
+ <path d="M22 21v-2a4 4 0 0 0-3-3.87"></path>
17
+ <path d="M16 3.13a4 4 0 0 1 0 7.75"></path>
18
+ </svg>
19
+ </template>
@@ -0,0 +1,16 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="24"
5
+ height="24"
6
+ viewBox="0 0 24 24"
7
+ fill="none"
8
+ stroke="currentColor"
9
+ stroke-width="2"
10
+ stroke-linecap="round"
11
+ stroke-linejoin="round"
12
+ class="lucide lucide-chevron-right"
13
+ >
14
+ <path d="m9 18 6-6-6-6" />
15
+ </svg>
16
+ </template>
@@ -0,0 +1,20 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="24"
5
+ height="24"
6
+ viewBox="0 0 24 24"
7
+ fill="none"
8
+ stroke="currentColor"
9
+ stroke-width="2"
10
+ stroke-linecap="round"
11
+ stroke-linejoin="round"
12
+ >
13
+ <circle cx="9" cy="12" r="1"></circle>
14
+ <circle cx="9" cy="5" r="1"></circle>
15
+ <circle cx="9" cy="19" r="1"></circle>
16
+ <circle cx="15" cy="12" r="1"></circle>
17
+ <circle cx="15" cy="5" r="1"></circle>
18
+ <circle cx="15" cy="19" r="1"></circle>
19
+ </svg>
20
+ </template>
@@ -0,0 +1,21 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="24"
5
+ height="24"
6
+ viewBox="0 0 24 24"
7
+ fill="none"
8
+ stroke="currentColor"
9
+ stroke-width="2"
10
+ stroke-linecap="round"
11
+ stroke-linejoin="round"
12
+ >
13
+ <path
14
+ d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"
15
+ />
16
+ <polyline points="14 2 14 8 20 8" />
17
+ <line x1="16" y1="13" x2="8" y2="13" />
18
+ <line x1="16" y1="17" x2="8" y2="17" />
19
+ <line x1="10" y1="9" x2="8" y2="9" />
20
+ </svg>
21
+ </template>
@@ -0,0 +1,18 @@
1
+ <template>
2
+ <svg
3
+ aria-hidden="true"
4
+ focusable="false"
5
+ role="img"
6
+ viewBox="0 0 16 16"
7
+ width="16"
8
+ height="16"
9
+ fill="currentColor"
10
+ >
11
+ <path
12
+ d="M.513 1.513A1.75 1.75 0 0 1 1.75 1h3.5c.55 0 1.07.26 1.4.7l.9 1.2a.25.25 0 0 0 .2.1H 13a1 1 0 0 1 1 1v.5H2.75a.75.75 0 0 0 0 1.5h11.978a1 1 0 0 1 .994 1.117L15 13.25A1.75 1.75 0 0 1 13.25 15H1.75A1.75 1.75 0 0 1 0 13.25V2.75c0-.464.184-.91.513-1.237Z"
13
+ ></path>
14
+ <path
15
+ d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"
16
+ ></path>
17
+ </svg>
18
+ </template>
@@ -0,0 +1,17 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ viewBox="0 0 24 24"
5
+ fill="none"
6
+ stroke="currentColor"
7
+ stroke-width="2"
8
+ stroke-linecap="round"
9
+ stroke-linejoin="round"
10
+ >
11
+ <rect width="18" height="18" x="3" y="3" rx="2" />
12
+ <path d="M3 9h18" />
13
+ <path d="M3 15h18" />
14
+ <path d="M9 3v18" />
15
+ <path d="M15 3v18" />
16
+ </svg>
17
+ </template>
@@ -0,0 +1,19 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="24"
5
+ height="24"
6
+ viewBox="0 0 24 24"
7
+ fill="none"
8
+ stroke="currentColor"
9
+ stroke-width="2"
10
+ stroke-linecap="round"
11
+ stroke-linejoin="round"
12
+ class="w-4 h-4 lucide lucide-layout-grid"
13
+ >
14
+ <rect width="7" height="7" x="3" y="3" rx="1"></rect>
15
+ <rect width="7" height="7" x="14" y="3" rx="1"></rect>
16
+ <rect width="7" height="7" x="14" y="14" rx="1"></rect>
17
+ <rect width="7" height="7" x="3" y="14" rx="1"></rect>
18
+ </svg>
19
+ </template>
@@ -0,0 +1,16 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="20"
5
+ height="20"
6
+ viewBox="0 0 24 24"
7
+ fill="none"
8
+ stroke="currentColor"
9
+ stroke-width="2"
10
+ stroke-linecap="round"
11
+ stroke-linejoin="round"
12
+ >
13
+ <path d="m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path>
14
+ <polyline points="9 22 9 12 15 12 15 22"></polyline>
15
+ </svg>
16
+ </template>
@@ -0,0 +1,18 @@
1
+ <template>
2
+ <svg
3
+ aria-hidden="true"
4
+ focusable="false"
5
+ role="img"
6
+ viewBox="0 0 16 16"
7
+ width="16"
8
+ height="16"
9
+ fill="currentColor"
10
+ >
11
+ <path
12
+ d="M.513 1.513A1.75 1.75 0 0 1 1.75 1h3.5c.55 0 1.07.26 1.4.7l.9 1.2a.25.25 0 0 0 .2.1H 13a1 1 0 0 1 1 1v.5H2.75a.75.75 0 0 0 0 1.5h11.978a1 1 0 0 1 .994 1.117L15 13.25A1.75 1.75 0 0 1 13.25 15H1.75A1.75 1.75 0 0 1 0 13.25V2.75c0-.464.184-.91.513-1.237Z"
13
+ ></path>
14
+ <path
15
+ d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"
16
+ ></path>
17
+ </svg>
18
+ </template>
@@ -0,0 +1,20 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="24"
5
+ height="24"
6
+ viewBox="0 0 24 24"
7
+ fill="none"
8
+ stroke="currentColor"
9
+ stroke-width="2"
10
+ stroke-linecap="round"
11
+ stroke-linejoin="round"
12
+ >
13
+ <line x1="8" x2="21" y1="6" y2="6" />
14
+ <line x1="8" x2="21" y1="12" y2="12" />
15
+ <line x1="8" x2="21" y1="18" y2="18" />
16
+ <line x1="3" x2="3.01" y1="6" y2="6" />
17
+ <line x1="3" x2="3.01" y1="12" y2="12" />
18
+ <line x1="3" x2="3.01" y1="18" y2="18" />
19
+ </svg>
20
+ </template>
@@ -0,0 +1,17 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="24"
5
+ height="24"
6
+ viewBox="0 0 24 24"
7
+ fill="none"
8
+ stroke="currentColor"
9
+ stroke-width="2"
10
+ stroke-linecap="round"
11
+ stroke-linejoin="round"
12
+ >
13
+ <circle cx="12" cy="12" r="1"/>
14
+ <circle cx="12" cy="5" r="1"/>
15
+ <circle cx="12" cy="19" r="1"/>
16
+ </svg>
17
+ </template>
@@ -0,0 +1,17 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="24"
5
+ height="24"
6
+ viewBox="0 0 24 24"
7
+ fill="none"
8
+ stroke="currentColor"
9
+ stroke-width="2"
10
+ stroke-linecap="round"
11
+ stroke-linejoin="round"
12
+ class="lucide lucide-plus"
13
+ >
14
+ <path d="M5 12h14" />
15
+ <path d="M12 5v14" />
16
+ </svg>
17
+ </template>