@opengis/cms 0.0.2 → 0.0.3

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 (144) hide show
  1. package/.gitlab-ci.yml +36 -0
  2. package/config.example +21 -0
  3. package/docs/.vitepress/abbr.mjs +26 -0
  4. package/docs/.vitepress/config.mjs +119 -0
  5. package/docs/.vitepress/navigation.mjs +82 -0
  6. package/docs/.vitepress/theme/Layout.vue +17 -0
  7. package/docs/.vitepress/theme/components/NavigationLinks.vue +102 -0
  8. package/docs/.vitepress/theme/components/Panzoom.vue +169 -0
  9. package/docs/.vitepress/theme/index.mjs +15 -0
  10. package/docs/.vitepress/theme/style.scss +136 -0
  11. package/docs/abbr.json +4 -0
  12. package/docs/api/builder/cms.builder.delete.md +65 -0
  13. package/docs/api/builder/cms.builder.get.md +70 -0
  14. package/docs/api/builder/cms.builder.list.md +98 -0
  15. package/docs/api/builder/cms.builder.post.md +72 -0
  16. package/docs/api/builder/cms.builder.put.md +88 -0
  17. package/docs/api/category/cms.category.delete.md +60 -0
  18. package/docs/api/category/cms.category.get.md +61 -0
  19. package/docs/api/category/cms.category.list.md +77 -0
  20. package/docs/api/category/cms.category.post.md +62 -0
  21. package/docs/api/category/cms.category.put.md +78 -0
  22. package/docs/api/index.md +50 -0
  23. package/docs/api/manager/cms.manager.delete.md +64 -0
  24. package/docs/api/manager/cms.manager.get.md +72 -0
  25. package/docs/api/manager/cms.manager.list.md +96 -0
  26. package/docs/api/manager/cms.manager.post.md +70 -0
  27. package/docs/api/manager/cms.manager.put.md +86 -0
  28. package/docs/api/media/del.md +64 -0
  29. package/docs/api/media/edit.md +92 -0
  30. package/docs/api/media/list.md +70 -0
  31. package/docs/api/media/metadata.md +57 -0
  32. package/docs/api/media/preview.md +33 -0
  33. package/docs/api/media/upload.md +84 -0
  34. package/docs/db/erd.md +173 -0
  35. package/docs/db/index.md +7 -0
  36. package/docs/index.md +39 -0
  37. package/docs/public/logo-dark.svg +24 -0
  38. package/docs/public/logo-light.svg +24 -0
  39. package/docs/public/logo-short.svg +15 -0
  40. package/docs/public/logo.svg +19 -0
  41. package/docs/readme/index.md +6 -0
  42. package/docs/src/vs-button.vue +157 -0
  43. package/docs/vue/basic/button.md +144 -0
  44. package/docs/vue/index.md +9 -0
  45. package/index.html +14 -0
  46. package/package.json +2 -5
  47. package/server/app.js +25 -0
  48. package/server/config.js +5 -0
  49. package/server/index.js +23 -0
  50. package/server/migrations/media.sql +30 -0
  51. package/server/plugins/hook.js +91 -0
  52. package/server/plugins/vite.js +80 -0
  53. package/server/routes/builder/controllers/cms.builder.delete.js +21 -0
  54. package/server/routes/builder/controllers/cms.builder.get.js +17 -0
  55. package/server/routes/builder/controllers/cms.builder.list.js +16 -0
  56. package/server/routes/builder/controllers/cms.builder.post.js +21 -0
  57. package/server/routes/builder/controllers/cms.builder.put.js +23 -0
  58. package/server/routes/builder/index.mjs +22 -0
  59. package/server/routes/category/controllers/cms.category.delete.js +21 -0
  60. package/server/routes/category/controllers/cms.category.get.js +17 -0
  61. package/server/routes/category/controllers/cms.category.list.js +16 -0
  62. package/server/routes/category/controllers/cms.category.post.js +21 -0
  63. package/server/routes/category/controllers/cms.category.put.js +23 -0
  64. package/server/routes/category/index.mjs +22 -0
  65. package/server/routes/manager/controllers/cms.manager.delete.js +22 -0
  66. package/server/routes/manager/controllers/cms.manager.get.js +21 -0
  67. package/server/routes/manager/controllers/cms.manager.list.js +31 -0
  68. package/server/routes/manager/controllers/cms.manager.post.js +28 -0
  69. package/server/routes/manager/controllers/cms.manager.put.js +23 -0
  70. package/server/routes/manager/index.mjs +22 -0
  71. package/server/routes/media/controllers/delete.js +59 -0
  72. package/server/routes/media/controllers/edit.js +94 -0
  73. package/server/routes/media/controllers/list.js +74 -0
  74. package/server/routes/media/controllers/metadata.js +51 -0
  75. package/server/routes/media/controllers/preview.js +47 -0
  76. package/server/routes/media/controllers/upload.js +79 -0
  77. package/server/routes/media/index.mjs +16 -0
  78. package/server/routes/root.mjs +15 -0
  79. package/server/templates/cls/cms.category_type.json +10 -0
  80. package/server/templates/cls/cms.content_review_status.json +10 -0
  81. package/server/templates/cls/cms.content_status.json +10 -0
  82. package/server/templates/cls/cms.content_type.json +10 -0
  83. package/server/templates/cls/cms.lang.json +10 -0
  84. package/server/templates/page/login.html +59 -0
  85. package/server/templates/select/cms.category_id.sql +1 -0
  86. package/server/templates/select/cms.type_id.sql +1 -0
  87. package/src/App.vue +4 -0
  88. package/src/assets/tailwind/tailwind.js +62 -0
  89. package/src/assets/vue.svg +1 -0
  90. package/src/components/builder/vs-builder-content.vue +163 -0
  91. package/src/components/builder/vs-builder-menu.vue +142 -0
  92. package/src/components/formats/index.js +8 -0
  93. package/src/components/formats/vs-manager-table-date.vue +29 -0
  94. package/src/components/formats/vs-manager-table-switch.vue +16 -0
  95. package/src/components/icons/icon-actions.vue +24 -0
  96. package/src/components/icons/icon-arrow-left.vue +19 -0
  97. package/src/components/icons/icon-check.vue +23 -0
  98. package/src/components/icons/icon-chewron-right.vue +16 -0
  99. package/src/components/icons/icon-close.vue +22 -0
  100. package/src/components/icons/icon-edit.vue +22 -0
  101. package/src/components/icons/icon-folder.vue +18 -0
  102. package/src/components/icons/icon-folder2.vue +17 -0
  103. package/src/components/icons/icon-home.vue +16 -0
  104. package/src/components/icons/icon-image.vue +18 -0
  105. package/src/components/icons/icon-logo.vue +22 -0
  106. package/src/components/icons/icon-media.vue +22 -0
  107. package/src/components/icons/icon-point.vue +11 -0
  108. package/src/components/icons/icon-search.vue +22 -0
  109. package/src/components/icons/icon-table.vue +22 -0
  110. package/src/components/icons/icon-users.vue +18 -0
  111. package/src/components/icons/icon.plus.vue +18 -0
  112. package/src/components/manager/children/vs-manager-collection-content.vue +55 -0
  113. package/src/components/manager/children/vs-manager-collection-item-content.vue +116 -0
  114. package/src/components/manager/children/vs-manager-single-content.vue +112 -0
  115. package/src/components/manager/manager-table/vs-manager-colection-table-add.vue +84 -0
  116. package/src/components/manager/manager-table/vs-manager-collection-table.vue +59 -0
  117. package/src/components/manager/vs-manager-menu.vue +73 -0
  118. package/src/components/media/Breadcrumb.vue +73 -0
  119. package/src/components/shared-components/vs-not-data.vue +213 -0
  120. package/src/components/vs-main-menu.vue +53 -0
  121. package/src/helpers/debounce.js +10 -0
  122. package/src/helpers/translite.js +19 -0
  123. package/src/main.js +30 -0
  124. package/src/misc/import-file.js +32 -0
  125. package/src/pages/vs-builder.vue +22 -0
  126. package/src/pages/vs-layout.vue +17 -0
  127. package/src/pages/vs-manager.vue +30 -0
  128. package/src/pages/vs-media.vue +398 -0
  129. package/src/router/router.js +9 -0
  130. package/src/router/routes.config.js +40 -0
  131. package/src/style.css +0 -0
  132. package/src/templates/form-columns.js +70 -0
  133. package/src/templates/form-template.js +22 -0
  134. package/test/config.js +17 -0
  135. package/test/files/eye.svg +4 -0
  136. package/test/helper.js +30 -0
  137. package/test/routes/builder.test.js +99 -0
  138. package/test/routes/category.test.js +97 -0
  139. package/test/routes/manager.test.js +103 -0
  140. package/test/routes/media.test.js +252 -0
  141. package/vite.config.js +37 -0
  142. package/editor/dist/cms.js +0 -5900
  143. package/editor/dist/cms.umd.cjs +0 -19
  144. /package/{editor/dist → public}/vite.svg +0 -0
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>
@@ -0,0 +1,163 @@
1
+ <template>
2
+ <div class="w-full flex justify-center">
3
+ <div class="p-[20px] w-full max-w-[1440px]">
4
+ <button
5
+ @click="$router.back()"
6
+ class="text-blue-500 flex gap-2 items-center hover:text-blue-700 duration-300"
7
+ >
8
+ <IconArrorLeft /> Повернутися назад
9
+ </button>
10
+ <div class="flex items-center justify-between">
11
+ <div class="mt-[10px]">
12
+ <div class="flex items-end gap-1">
13
+ <h2 class="font-medium text-2xl">{{ objectData?.name }} -</h2>
14
+ <span class="text-gray-600 font-medium text-2xl">{{
15
+ objectData?.template
16
+ }}</span>
17
+ </div>
18
+ <p class="text-gray-600">{{ objectData?.description }}</p>
19
+ </div>
20
+ <div class="flex items-center gap-1">
21
+ <button
22
+ @click="formVisible = true"
23
+ class="py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-white bg-blue-500 rounded-lg !border-gray-200 hover:bg-blue-700 duration-300"
24
+ >
25
+ Редагувати
26
+ </button>
27
+ <button
28
+ @click="updateColumns"
29
+ class="py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-white bg-blue-500 rounded-lg !border-gray-200 hover:bg-blue-700 duration-300"
30
+ >
31
+ Зберегти
32
+ </button>
33
+ </div>
34
+ </div>
35
+ <div>
36
+ <div class="w-full mt-[20px] bg-white rounded-xl">
37
+ <VsDataTable
38
+ class="w-full"
39
+ :colModel
40
+ v-model="colValue"
41
+ :addition="false"
42
+ :import="false"
43
+ :additionBottom="true"
44
+ />
45
+ </div>
46
+ </div>
47
+ </div>
48
+ </div>
49
+ <VsDialog title="Редагувати" v-model:visible="formVisible">
50
+ <div>
51
+ <VsForm
52
+ v-model="formValues"
53
+ :scheme="[...scheme, typeScheme]"
54
+ ref="form"
55
+ />
56
+ </div>
57
+ <template #footer>
58
+ <div class="flex justify-end p-[20px] gap-[10px] border-t w-full">
59
+ <button
60
+ @click="formVisible = false"
61
+ class="py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-black border rounded-lg border-gray-200 hover:bg-gray-100 duration-300"
62
+ >
63
+ Скасувати</button
64
+ ><button
65
+ @click="updateData"
66
+ class="py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-white bg-blue-500 rounded-lg !border-gray-200 hover:bg-blue-700 duration-300"
67
+ >
68
+ Зберегти
69
+ </button>
70
+ </div>
71
+ </template>
72
+ </VsDialog>
73
+ </template>
74
+
75
+ <script setup>
76
+ import axios from "axios";
77
+ import { computed, getCurrentInstance, onMounted, ref, watch } from "vue";
78
+ import { useRoute } from "vue-router";
79
+ import IconArrorLeft from "../icons/icon-arrow-left.vue";
80
+ import colModel from "../../templates/form-columns";
81
+ import scheme from "../../templates/form-template";
82
+
83
+ const route = useRoute();
84
+ const $notify = getCurrentInstance().proxy?.$notify;
85
+
86
+ const props = defineProps({ UPDATE: Object });
87
+
88
+ const id = computed(() => route?.params?.id);
89
+ const objectData = ref(null);
90
+ const colValue = ref([]);
91
+ const formValues = ref({});
92
+ const formVisible = ref(false);
93
+ const form = ref();
94
+
95
+ const getDataById = async () => {
96
+ try {
97
+ const { data } = await axios.get(`/api/cms-builder/${id.value}`);
98
+ objectData.value = data?.rows?.[0];
99
+ formValues.value = data?.rows?.[0];
100
+ colValue.value = data?.rows?.[0]?.columns || [];
101
+ } catch (error) {}
102
+ };
103
+
104
+ const updateColumns = async () => {
105
+ try {
106
+ await axios.put(`/api/cms-builder/${id.value}`, {
107
+ ...objectData.value,
108
+ columns: colValue.value,
109
+ });
110
+ await $notify({
111
+ type: "success",
112
+ title: "Успішно!",
113
+ message: "Дані оновлено успішно",
114
+ });
115
+ await getDataById();
116
+ } catch (error) {
117
+ console.log(error);
118
+ await $notify({
119
+ type: "error",
120
+ title: "Помилка!",
121
+ message: "При спробі оновити дані виникла помилка",
122
+ });
123
+ }
124
+ };
125
+
126
+ const updateData = async () => {
127
+ try {
128
+ await form.value.doValidation();
129
+ await axios.put(`/api/cms-builder/${id.value}`, formValues.value);
130
+ await $notify({
131
+ type: "success",
132
+ title: "Успішно!",
133
+ message: "Дані оновлено успішно",
134
+ });
135
+ await getDataById();
136
+ formVisible.value = false;
137
+ props.UPDATE.getList();
138
+ } catch (error) {
139
+ console.log(error);
140
+ await $notify({
141
+ type: "error",
142
+ title: "Помилка!",
143
+ message: "При спробі оновити дані виникла помилка",
144
+ });
145
+ }
146
+ };
147
+
148
+ watch(id, getDataById);
149
+ onMounted(() => getDataById());
150
+
151
+ const typeScheme = {
152
+ key: "type",
153
+ type: "Autocomplete",
154
+ ua: "Тип",
155
+ searchable: false,
156
+ options: [
157
+ { id: "single", text: "Одиночний тип" },
158
+ { id: "collection", text: "Колекція" },
159
+ ],
160
+ };
161
+ </script>
162
+
163
+ <style lang="scss" scoped></style>
@@ -0,0 +1,142 @@
1
+ <template>
2
+ <div
3
+ class="p-4 w-[260px] border-r h-[100%] overflow-auto [&::-webkit-scrollbar]:h-2 [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-track]:bg-stone-100 [&::-webkit-scrollbar-thumb]:bg-stone-300 dark:[&::-webkit-scrollbar-track]:bg-neutral-700 dark:[&::-webkit-scrollbar-thumb]:bg-neutral-500"
4
+ >
5
+ <div>
6
+ <h2
7
+ v
8
+ class="block text-[14px] font-medium text-gray-800 mb-2 dark:text-neutral-200"
9
+ >
10
+ Колекції
11
+ </h2>
12
+
13
+ <ul class="flex flex-col space-y-1">
14
+ <li
15
+ v-for="item in list?.filter((i) => i?.type == 'collection')"
16
+ :key="item?.id"
17
+ >
18
+ <router-link
19
+ :to="`/cms/builder/${item?.id}`"
20
+ :class="[$route?.params?.id === item?.id ? 'bg-gray-200' : '']"
21
+ class="w-full flex items-center gap-x-3.5 py-2 px-2.5 text-sm text-gray-800 rounded-lg hover:bg-gray-200 focus:outline-none dark:text-white dark:hover:bg-neutral-800 dark:focus:bg-neutral-800"
22
+ >
23
+ <IconPoint class="text-gray-500" />
24
+ {{ item?.name }}
25
+ </router-link>
26
+ </li>
27
+ </ul>
28
+ <button
29
+ @click="openFormCreate('colection')"
30
+ class="text-blue-500 flex text-[14px] py-2 px-2 text-nowrap hover:text-blue-700 duration-300 gap-2 items-center"
31
+ >
32
+ <IconPlus height="16" width="16" /> Створити нову колекцію
33
+ </button>
34
+ </div>
35
+ <div class="pt-2">
36
+ <h2
37
+ class="block text-[14px] mb-2 font-medium text-gray-800 dark:text-neutral-200"
38
+ >
39
+ Одиничні типи
40
+ </h2>
41
+ <ul class="flex flex-col space-y-1">
42
+ <li
43
+ v-for="item in list?.filter((i) => i?.type == 'single')"
44
+ :key="item?.id"
45
+ >
46
+ <router-link
47
+ :to="`/cms/builder/${item?.id}`"
48
+ :class="[$route?.params?.id === item?.id ? 'bg-gray-200' : '']"
49
+ class="w-full flex items-center gap-x-3.5 py-2 px-2.5 text-sm text-gray-800 hover:bg-gray-200 rounded-lg focus:outline-none dark:text-white dark:hover:bg-neutral-800 dark:focus:bg-neutral-800"
50
+ >
51
+ <IconPoint class="text-gray-500" />
52
+ {{ item?.name }}
53
+ </router-link>
54
+ </li>
55
+ </ul>
56
+ <button
57
+ @click="openFormCreate('single')"
58
+ class="text-blue-500 flex text-[14px] py-2 px-2 hover:text-blue-700 duration-300 gap-2 items-center"
59
+ >
60
+ <IconPlus height="16" width="16" /> Створити новий тип
61
+ </button>
62
+ </div>
63
+ </div>
64
+ <VsDialog v-model:visible="formVisible" :title>
65
+ <div>
66
+ <VsForm v-model="formValues" :scheme ref="form" />
67
+ </div>
68
+ <template #footer>
69
+ <div class="flex justify-end p-[20px] gap-[10px] border-t w-full">
70
+ <button
71
+ @click="formVisible = false"
72
+ class="py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-black border rounded-lg border-gray-200 hover:bg-gray-100 duration-300"
73
+ >
74
+ Скасувати</button
75
+ ><button
76
+ @click="createObject"
77
+ class="py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-white bg-blue-500 rounded-lg !border-gray-200 hover:bg-blue-700 duration-300"
78
+ >
79
+ Зберегти
80
+ </button>
81
+ </div>
82
+ </template>
83
+ </VsDialog>
84
+ </template>
85
+ <script setup>
86
+ import axios from "axios";
87
+ import { getCurrentInstance, onMounted, ref } from "vue";
88
+ import IconPoint from "../icons/icon-point.vue";
89
+ import IconPlus from "../icons/icon.plus.vue";
90
+ import scheme from "../../templates/form-template";
91
+
92
+ const $notify = getCurrentInstance().proxy?.$notify;
93
+
94
+ const UPDATE = defineModel("UPDATE");
95
+
96
+ const list = ref(null);
97
+ const formVisible = ref(false);
98
+ const formValues = ref({});
99
+ const title = ref("");
100
+ const form = ref();
101
+
102
+ const getList = async () => {
103
+ try {
104
+ const { data } = await axios.get("/api/cms-builder");
105
+ list.value = data?.rows || null;
106
+ } catch (error) {}
107
+ };
108
+
109
+ const openFormCreate = (type) => {
110
+ if (type === "single") {
111
+ formValues.value = { type: "single" };
112
+ title.value = "Створити новий тип";
113
+ } else {
114
+ formValues.value = { type: "collection" };
115
+ title.value = "Створити колекцію";
116
+ }
117
+ formVisible.value = true;
118
+ };
119
+
120
+ const createObject = async () => {
121
+ try {
122
+ await form.value.doValidation();
123
+ await axios.post("/api/cms-builder", formValues.value);
124
+ await $notify({
125
+ type: "success",
126
+ title: "Успішно!",
127
+ message: "Об'єкт створено успішно",
128
+ });
129
+ formVisible.value = false;
130
+ await getList();
131
+ } catch (error) {
132
+ await $notify({
133
+ type: "error",
134
+ title: "Помилка!",
135
+ message: "При спробі створити об'єкт виникла помилка",
136
+ });
137
+ }
138
+ };
139
+
140
+ getList();
141
+ onMounted(() => (UPDATE.value.getList = () => getList()));
142
+ </script>
@@ -0,0 +1,8 @@
1
+ import VsManagerTableDate from "./vs-manager-table-date.vue";
2
+ import VsManagerTableSwitch from "./vs-manager-table-switch.vue";
3
+
4
+ export default {
5
+ "switch" : VsManagerTableSwitch,
6
+ "switcher": VsManagerTableSwitch,
7
+ "date": VsManagerTableDate
8
+ }
@@ -0,0 +1,29 @@
1
+ <template>
2
+ <div class="whitespace-nowrap">{{ dateValue }}</div>
3
+ </template>
4
+
5
+ <script setup>
6
+ import moment from "moment";
7
+ import { computed } from "vue";
8
+
9
+ const props = defineProps({
10
+ value: { type: String, default: () => "" },
11
+ });
12
+
13
+ const dateValue = computed(() => {
14
+ if (!props.value) return "-";
15
+ try {
16
+ const date = moment(props.value, "YYYY-MM-DD");
17
+ const createdDate = new Date(date);
18
+ return createdDate.toLocaleDateString("uk-UA", {
19
+ day: "2-digit",
20
+ month: "long",
21
+ year: "numeric",
22
+ });
23
+ } catch (error) {
24
+ return props.value;
25
+ }
26
+ });
27
+ </script>
28
+
29
+ <style lang="scss" scoped></style>
@@ -0,0 +1,16 @@
1
+ <template>
2
+ <div
3
+ class="w-[20px] h-[20px] rounded-md flex items-center justify-center disabled"
4
+ :class="[value ? 'bg-blue-400' : 'border']"
5
+ >
6
+ <IconCheck height="18" width="18" class="text-white" />
7
+ </div>
8
+ </template>
9
+
10
+ <script setup>
11
+ import IconCheck from "../icons/icon-check.vue";
12
+
13
+ const props = defineProps({ value: { type: Boolean, default: () => false } });
14
+ </script>
15
+
16
+ <style lang="scss" scoped></style>
@@ -0,0 +1,24 @@
1
+ <template>
2
+ <svg
3
+ class="flex-shrink-0 size-3.5"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="22"
6
+ height="22"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <line x1="21" x2="14" y1="4" y2="4"></line>
15
+ <line x1="10" x2="3" y1="4" y2="4"></line>
16
+ <line x1="21" x2="12" y1="12" y2="12"></line>
17
+ <line x1="8" x2="3" y1="12" y2="12"></line>
18
+ <line x1="21" x2="16" y1="20" y2="20"></line>
19
+ <line x1="12" x2="3" y1="20" y2="20"></line>
20
+ <line x1="14" x2="14" y1="2" y2="6"></line>
21
+ <line x1="8" x2="8" y1="10" y2="14"></line>
22
+ <line x1="16" x2="16" y1="18" y2="22"></line>
23
+ </svg>
24
+ </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="icon icon-tabler icons-tabler-outline icon-tabler-arrow-left"
13
+ >
14
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
15
+ <path d="M5 12l14 0" />
16
+ <path d="M5 12l6 6" />
17
+ <path d="M5 12l6 -6" />
18
+ </svg>
19
+ </template>
@@ -0,0 +1,23 @@
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="icon icon-tabler icons-tabler-outline icon-tabler-check"
13
+ >
14
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
15
+ <path d="M5 12l5 5l10 -10" />
16
+ </svg>
17
+ </template>
18
+
19
+ <script>
20
+ export default {};
21
+ </script>
22
+
23
+ <style lang="scss" scoped></style>
@@ -0,0 +1,16 @@
1
+ <template>
2
+ <svg
3
+ aria-hidden="true"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ fill="none"
6
+ viewBox="0 0 6 10"
7
+ >
8
+ <path
9
+ stroke="currentColor"
10
+ stroke-linecap="round"
11
+ stroke-linejoin="round"
12
+ stroke-width="2"
13
+ d="m1 9 4-4-4-4"
14
+ />
15
+ </svg>
16
+ </template>
@@ -0,0 +1,22 @@
1
+ <template>
2
+ <svg
3
+ width="24"
4
+ height="24"
5
+ viewBox="0 0 24 24"
6
+ fill="none"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ >
9
+ <path
10
+ d="M18 6L6 18"
11
+ stroke="#6B7280"
12
+ stroke-linecap="round"
13
+ stroke-linejoin="round"
14
+ />
15
+ <path
16
+ d="M6 6L18 18"
17
+ stroke="#6B7280"
18
+ stroke-linecap="round"
19
+ stroke-linejoin="round"
20
+ />
21
+ </svg>
22
+ </template>
@@ -0,0 +1,22 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="1rem"
5
+ height="1rem"
6
+ fill="none"
7
+ viewBox="0 0 24 24"
8
+ >
9
+ <path
10
+ fill="currentColor"
11
+ fill-rule="evenodd"
12
+ d="M23.707.297A1 1 0 0 0 23 .004h-2a13.907 13.907 0 0 0-5.38 1.077 1 1 0 0 0-.615.923V4.92a.035.035 0 0 1-.022.038l-2-1.47a1 1 0 0 0-1.265.052A14 14 0 0 0 7 14.004v1.585l-2.707 2.707a1 1 0 1 0 1.415 1.415l2.707-2.708H10a14.014 14.014 0 0 0 14-14v-2a1 1 0 0 0-.293-.706ZM18 23.999H3a3 3 0 0 1-3-3V6A3 3 0 0 1 3 3h3a1 1 0 1 1 0 2H3a1 1 0 0 0-1 1v15a1 1 0 0 0 1 1h15a1 1 0 0 0 1-1v-3a1 1 0 1 1 2 0v3a3 3 0 0 1-3 3Z"
13
+ clip-rule="evenodd"
14
+ ></path>
15
+ </svg>
16
+ </template>
17
+
18
+ <script>
19
+ export default {};
20
+ </script>
21
+
22
+ <style lang="scss" scoped></style>
@@ -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
+ width="22"
4
+ height="22"
5
+ viewBox="0 0 24 24"
6
+ fill="none"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ >
9
+ <path
10
+ d="M3 8.2C3 7.07989 3 6.51984 3.21799 6.09202C3.40973 5.71569 3.71569 5.40973 4.09202 5.21799C4.51984 5 5.0799 5 6.2 5H9.67452C10.1637 5 10.4083 5 10.6385 5.05526C10.8425 5.10425 11.0376 5.18506 11.2166 5.29472C11.4184 5.4184 11.5914 5.59135 11.9373 5.93726L12.0627 6.06274C12.4086 6.40865 12.5816 6.5816 12.7834 6.70528C12.9624 6.81494 13.1575 6.89575 13.3615 6.94474C13.5917 7 13.8363 7 14.3255 7H17.8C18.9201 7 19.4802 7 19.908 7.21799C20.2843 7.40973 20.5903 7.71569 20.782 8.09202C21 8.51984 21 9.0799 21 10.2V15.8C21 16.9201 21 17.4802 20.782 17.908C20.5903 18.2843 20.2843 18.5903 19.908 18.782C19.4802 19 18.9201 19 17.8 19H6.2C5.07989 19 4.51984 19 4.09202 18.782C3.71569 18.5903 3.40973 18.2843 3.21799 17.908C3 17.4802 3 16.9201 3 15.8V8.2Z"
11
+ stroke="#000000"
12
+ stroke-width="1"
13
+ stroke-linecap="round"
14
+ stroke-linejoin="round"
15
+ />
16
+ </svg>
17
+ </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,22 @@
1
+ <template>
2
+ <svg
3
+ width="31"
4
+ height="30"
5
+ viewBox="0 0 31 30"
6
+ fill="none"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ >
9
+ <path
10
+ d="M27.3044 11.5405C27.8889 11.9223 28.5318 12.2086 29.2086 12.3906V17.5268C26.4523 18.2695 24.4219 20.7272 24.4219 23.6324C24.4219 24.1752 24.4927 24.7121 24.6342 25.2311L20.0536 27.7962C19.5398 27.307 18.9492 26.9044 18.3001 26.6031V20.7063C20.5427 19.6773 22.0132 17.485 22.0132 14.9885C22.0132 14.8304 22.007 14.6723 21.9947 14.5142L27.3044 11.5405ZM27.4828 9.48242L20.0597 13.6403C20.192 14.0668 20.2658 14.5202 20.2658 14.9885C20.2658 17.1927 18.6785 19.039 16.5527 19.5103V27.7962C17.8632 28.0885 18.9676 28.9028 19.6229 30.0004L26.8214 25.9708C26.4092 25.2848 26.1723 24.4884 26.1723 23.6383C26.1723 21.0762 28.3165 18.9972 30.9591 18.9972V10.932C29.587 10.932 28.3565 10.3742 27.4828 9.48242Z"
11
+ fill="#CE4140"
12
+ ></path>
13
+ <path
14
+ d="M20.1119 2.21018L24.6218 4.73653C24.4895 5.24359 24.4218 5.76556 24.4218 6.29052C24.4218 6.46649 24.4279 6.64247 24.4433 6.81845L19.1736 9.76834C18.0938 9.04951 16.8018 8.6558 15.4759 8.6558C14.1593 8.6558 12.8734 9.04653 11.7967 9.75641L6.51157 6.79757C6.52388 6.63054 6.53311 6.46053 6.53311 6.29052C6.53311 5.76556 6.46543 5.24359 6.33315 4.73653L10.8399 2.21316C12.052 3.39431 13.7132 4.08332 15.4728 4.08332C17.2356 4.08332 18.8998 3.39133 20.1119 2.21018ZM19.6566 0C18.8383 1.42275 17.2725 2.38616 15.4728 2.38616C13.6732 2.38616 12.1074 1.42275 11.2891 0.0029827L4.1582 3.99384C4.55505 4.67091 4.78577 5.45238 4.78577 6.28753C4.78577 6.76775 4.71194 7.23007 4.57043 7.66256L11.9843 11.8115C12.858 10.9077 14.0977 10.344 15.4759 10.344C16.8602 10.344 18.1092 10.9137 18.9829 11.8264L26.3906 7.68045C26.2491 7.23901 26.1691 6.77073 26.1691 6.28455C26.1691 5.44939 26.3968 4.66793 26.7967 3.99085L19.6566 0Z"
15
+ fill="#CE4140"
16
+ ></path>
17
+ <path
18
+ d="M3.67003 11.5278L8.96434 14.4926C8.95203 14.6567 8.94588 14.8237 8.94588 14.9908C8.94588 17.4843 10.4164 19.6736 12.6528 20.7056V26.6054C12.0068 26.9066 11.4131 27.3093 10.9024 27.7955L6.32487 25.2333C6.46638 24.7144 6.53714 24.1745 6.53714 23.6316C6.53714 20.7235 4.50678 18.2687 1.75041 17.5261V12.3928C2.43028 12.2079 3.08245 11.9156 3.67003 11.5278ZM3.48545 9.4668C2.61178 10.3676 1.37511 10.9283 0 10.9283V18.9906C2.64254 18.9906 4.78672 21.0695 4.78672 23.6316C4.78672 24.4817 4.54985 25.2781 4.13762 25.9641L11.33 29.9908C11.9853 28.8961 13.0866 28.0818 14.3971 27.7895V19.5095C12.2744 19.0353 10.6901 17.192 10.6901 14.9878C10.6901 14.5105 10.764 14.0512 10.9024 13.6187L3.48545 9.4668Z"
19
+ fill="#CE4140"
20
+ ></path>
21
+ </svg>
22
+ </template>
@@ -0,0 +1,22 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="1rem"
5
+ height="1rem"
6
+ fill="none"
7
+ viewBox="0 0 24 24"
8
+ >
9
+ <path
10
+ fill="currentColor"
11
+ fill-rule="evenodd"
12
+ d="M4.3.6a.9.9 0 1 0 0 1.8h15.311a.9.9 0 1 0 0-1.8H4.301Zm17.1 3.7A1.6 1.6 0 0 1 23 5.9v15.5a1.6 1.6 0 0 1-1.6 1.6H2.6A1.601 1.601 0 0 1 1 21.4V5.915C1 5.03 1.716 4.3 2.6 4.3h18.8ZM5.032 19.18h14.336l-3.136-3.205-1.792 1.831-4.032-4.12-5.376 5.494Zm13.44-8.697c0 1.282-.985 2.289-2.24 2.289-1.254 0-2.24-1.007-2.24-2.29 0-1.281.986-2.288 2.24-2.288 1.255 0 2.24 1.007 2.24 2.289Z"
13
+ clip-rule="evenodd"
14
+ ></path>
15
+ </svg>
16
+ </template>
17
+
18
+ <script>
19
+ export default {};
20
+ </script>
21
+
22
+ <style lang="scss" scoped></style>
@@ -0,0 +1,11 @@
1
+ <template>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="5"
5
+ height="5"
6
+ fill="currentColor"
7
+ viewBox="0 0 4 4"
8
+ >
9
+ <rect width="4" height="4" fill="currentColor" rx="2"></rect>
10
+ </svg>
11
+ </template>
@@ -0,0 +1,22 @@
1
+ <template lang="">
2
+ <svg
3
+ width="14"
4
+ height="14"
5
+ viewBox="0 0 14 14"
6
+ fill="none"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ >
9
+ <path
10
+ d="M6.41667 11.0833C8.994 11.0833 11.0833 8.994 11.0833 6.41667C11.0833 3.83934 8.994 1.75 6.41667 1.75C3.83934 1.75 1.75 3.83934 1.75 6.41667C1.75 8.994 3.83934 11.0833 6.41667 11.0833Z"
11
+ stroke="#6B7280"
12
+ stroke-linecap="round"
13
+ stroke-linejoin="round"
14
+ />
15
+ <path
16
+ d="M12.25 12.25L9.7417 9.7417"
17
+ stroke="#6B7280"
18
+ stroke-linecap="round"
19
+ stroke-linejoin="round"
20
+ />
21
+ </svg>
22
+ </template>