@coopenomics/desktop 2025.7.1 → 2025.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coopenomics/desktop",
3
- "version": "2025.7.1",
3
+ "version": "2025.7.2",
4
4
  "description": "A Desktop Project",
5
5
  "productName": "Desktop App",
6
6
  "author": "Alex Ant <dacom.dark.sun@gmail.com>",
@@ -24,8 +24,8 @@
24
24
  "start": "node -r ./alias-resolver.js dist/ssr/index.js"
25
25
  },
26
26
  "dependencies": {
27
- "@coopenomics/controller": "2025.7.1",
28
- "@coopenomics/sdk": "2025.7.1",
27
+ "@coopenomics/controller": "2025.7.2",
28
+ "@coopenomics/sdk": "2025.7.2",
29
29
  "@dicebear/collection": "^9.0.1",
30
30
  "@dicebear/core": "^9.0.1",
31
31
  "@fortawesome/fontawesome-svg-core": "^6.5.2",
@@ -50,7 +50,7 @@
50
50
  "@wharfkit/wallet-plugin-privatekey": "^1.1.0",
51
51
  "axios": "^1.2.1",
52
52
  "compression": "^1.7.4",
53
- "cooptypes": "2025.7.1",
53
+ "cooptypes": "2025.7.2",
54
54
  "dompurify": "^3.1.7",
55
55
  "dotenv": "^16.4.5",
56
56
  "email-regex": "^5.0.0",
@@ -103,5 +103,5 @@
103
103
  "npm": ">= 6.13.4",
104
104
  "yarn": ">= 1.21.1"
105
105
  },
106
- "gitHead": "ac8836628eb82672b481dbf86050918f41bf24ca"
106
+ "gitHead": "305864c1ed125be304a3b4fa9749ac6743dd5571"
107
107
  }
@@ -16,9 +16,7 @@ q-layout(view='lHh LpR fff')
16
16
 
17
17
  q-page-container
18
18
  q-page
19
- .absolute-full.flex.flex-center.bg-white.z-top(
20
- v-if='desktop.isWorkspaceChanging'
21
- )
19
+ .absolute-full.flex.flex-center.z-top(v-if='desktop.isWorkspaceChanging')
22
20
  Loader
23
21
 
24
22
  router-view(v-else)
@@ -1,24 +1,23 @@
1
1
  <template lang="pug">
2
2
  q-page.padding
3
3
  ListOfDocumentsWidget(
4
- :username="coopname"
5
- :filter="{}"
6
- :showFilter="true"
7
- :initialDocumentType="typeForToggle"
4
+ :username='coopname',
5
+ :filter='{}',
6
+ :showFilter='false',
7
+ :initialDocumentType='typeForToggle'
8
8
  )
9
9
  </template>
10
10
 
11
11
  <script setup lang="ts">
12
- import { ref, computed } from 'vue'
13
- import { useSystemStore } from 'src/entities/System/model'
14
- import { ListOfDocumentsWidget } from 'src/widgets/Cooperative/Documents/ListOfDocuments/ui'
15
- import type { DocumentType } from 'src/entities/Document/model/types'
12
+ import { ref, computed } from 'vue';
13
+ import { useSystemStore } from 'src/entities/System/model';
14
+ import { ListOfDocumentsWidget } from 'src/widgets/Cooperative/Documents/ListOfDocuments/ui';
15
+ import type { DocumentType } from 'src/entities/Document/model/types';
16
16
 
17
17
  // Получаем системную информацию
18
- const { info } = useSystemStore()
19
- const coopname = computed(() => info.coopname)
18
+ const { info } = useSystemStore();
19
+ const coopname = computed(() => info.coopname);
20
20
 
21
21
  // Переменная для отслеживания типа в интерфейсе
22
- const typeForToggle = ref<DocumentType>('newsubmitted')
23
-
22
+ const typeForToggle = ref<DocumentType>('newresolved');
24
23
  </script>
@@ -172,7 +172,6 @@ const shadowStyles = computed(
172
172
  }
173
173
 
174
174
  th {
175
- background-color: #f4f4f4;
176
175
  width: 30% !important;
177
176
  max-width: 30% !important;
178
177
  word-break: break-word !important;
@@ -219,7 +218,6 @@ const shadowStyles = computed(
219
218
  }
220
219
 
221
220
  th {
222
- background-color: #f4f4f4;
223
221
  width: 30% !important;
224
222
  max-width: 30% !important;
225
223
  word-break: break-word !important;
@@ -4,10 +4,12 @@
4
4
  width: 100%;
5
5
  border: 1px solid rgba(0, 0, 0, 0.08);
6
6
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
7
+ background-color: var(--q-surface);
7
8
 
8
9
  .q-dark & {
9
- border: 1px solid rgba(255, 255, 255, 0.12);
10
+ border: 1px solid rgba(255, 255, 255, 0.2);
10
11
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
12
+ background-color: rgba(255, 255, 255, 0.05);
11
13
  }
12
14
  }
13
15
 
@@ -20,7 +22,7 @@
20
22
 
21
23
  .q-dark & {
22
24
  background-color: rgba(255, 255, 255, 0.05);
23
- border: 1px solid rgba(255, 255, 255, 0.08);
25
+ border: 1px solid rgba(255, 255, 255, 0.15);
24
26
  }
25
27
 
26
28
  &:last-child {
@@ -38,7 +40,7 @@
38
40
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
39
41
 
40
42
  .q-dark & {
41
- background-color: rgba(255, 255, 255, 0.08);
43
+ background-color: rgba(255, 255, 255, 0.1);
42
44
  }
43
45
  }
44
46
  }
@@ -48,10 +50,12 @@
48
50
  border-radius: 16px;
49
51
  border: 1px solid rgba(0, 0, 0, 0.08);
50
52
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
53
+ background-color: var(--q-surface);
51
54
 
52
55
  .q-dark & {
53
- border: 1px solid rgba(255, 255, 255, 0.12);
56
+ border: 1px solid rgba(255, 255, 255, 0.2);
54
57
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
58
+ background-color: rgba(255, 255, 255, 0.05);
55
59
  }
56
60
 
57
61
  .page-header {
@@ -82,10 +86,12 @@
82
86
  border-radius: 16px;
83
87
  border: 1px solid rgba(0, 0, 0, 0.08);
84
88
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
89
+ background-color: var(--q-surface);
85
90
 
86
91
  .q-dark & {
87
- border: 1px solid rgba(255, 255, 255, 0.12);
92
+ border: 1px solid rgba(255, 255, 255, 0.2);
88
93
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
94
+ background-color: rgba(255, 255, 255, 0.05);
89
95
  }
90
96
 
91
97
  .section-header {
@@ -114,7 +120,7 @@
114
120
 
115
121
  .q-dark & {
116
122
  background-color: rgba(255, 255, 255, 0.05);
117
- border: 1px solid rgba(255, 255, 255, 0.08);
123
+ border: 1px solid rgba(255, 255, 255, 0.15);
118
124
  }
119
125
 
120
126
  &:last-child {
@@ -127,7 +133,7 @@
127
133
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
128
134
 
129
135
  .q-dark & {
130
- background-color: rgba(255, 255, 255, 0.08);
136
+ background-color: rgba(255, 255, 255, 0.1);
131
137
  }
132
138
  }
133
139
 
@@ -54,12 +54,19 @@ const meetStatus = useMeetStatus(props.meet);
54
54
  cursor: pointer;
55
55
  transition: all 0.3s ease;
56
56
 
57
+ // Дополнительная стилизация для темной темы
58
+ .q-dark & {
59
+ background-color: rgba(255, 255, 255, 0.07) !important;
60
+ border: 1px solid rgba(255, 255, 255, 0.25) !important;
61
+ }
62
+
57
63
  &:hover {
58
64
  transform: translateY(-4px);
59
65
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
60
66
 
61
67
  .q-dark & {
62
68
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
69
+ background-color: rgba(255, 255, 255, 0.1) !important;
63
70
  }
64
71
 
65
72
  .balance-card {
@@ -4,23 +4,15 @@ div(ref='shadowHost')
4
4
  <script setup lang="ts">
5
5
  import { onMounted, ref, watch } from 'vue';
6
6
 
7
- console.log('ShadowHtml: component script setup starts');
8
-
9
7
  const props = defineProps({
10
8
  html: { type: String, required: true },
11
9
  styles: { type: String, required: false, default: '' },
12
10
  });
13
11
 
14
- console.log('ShadowHtml initial props:', {
15
- html_length: props.html.length,
16
- styles_length: props.styles.length,
17
- });
18
-
19
12
  const shadowHost = ref<HTMLDivElement | null>(null);
20
13
  let shadowRoot: ShadowRoot | null = null;
21
14
  function renderToShadow() {
22
15
  if (shadowRoot) {
23
- console.log('ShadowHtml: rendering content to shadow root');
24
16
  shadowRoot.innerHTML =
25
17
  (props.styles ? `<style>${props.styles}</style>` : '') + props.html;
26
18
  } else {
@@ -30,7 +22,6 @@ function renderToShadow() {
30
22
  }
31
23
  }
32
24
  onMounted(() => {
33
- console.log('ShadowHtml: onMounted hook triggered.');
34
25
  if (shadowHost.value) {
35
26
  if (!shadowRoot) {
36
27
  console.log('ShadowHtml: shadowHost found, attaching shadow DOM.');
@@ -50,6 +41,4 @@ watch(
50
41
  renderToShadow();
51
42
  },
52
43
  );
53
-
54
- console.log('ShadowHtml: component script setup ends');
55
44
  </script>
@@ -1,23 +1,24 @@
1
1
  <template lang="pug">
2
2
  div
3
- q-list.second-menu(v-if='filteredRoutes')
4
- q-item(
5
- v-for='route in filteredRoutes',
6
- :key='route.name',
7
- clickable,
8
- v-ripple,
9
- :active='isActive(route)',
10
- active-class='bg-gradient-dark text-white',
11
- @click='navigate(route)'
12
- )
13
- q-item-section
14
- q-item-label.no-select
15
- span {{ route.meta.title }}
16
- //- q-icon(
17
- //- v-if="route.meta.roles && !route.meta.roles.includes('user') && route.meta.roles.length > 0"
18
- //- name="fa-solid fa-lock-open"
19
- //- :color="context.userRole === 'member' ? 'orange' : 'teal'"
20
- //- )
3
+ transition(
4
+ mode='out-in',
5
+ enter-active-class='menu-enter-active',
6
+ leave-active-class='menu-leave-active'
7
+ )
8
+ q-list.second-menu(v-if='filteredRoutes.length > 0', :key='menuKey')
9
+ q-item.menu-item(
10
+ v-for='(route, index) in filteredRoutes',
11
+ :key='route.name',
12
+ clickable,
13
+ v-ripple,
14
+ :active='isActive(route)',
15
+ active-class='bg-gradient-dark text-white',
16
+ @click='navigate(route)',
17
+ :style='{ "animation-delay": `${index * 60}ms` }'
18
+ )
19
+ q-item-section
20
+ q-item-label.no-select
21
+ span {{ route.meta.title }}
21
22
  </template>
22
23
 
23
24
  <script lang="ts" setup>
@@ -95,10 +96,59 @@ const navigate = (routeToNavigate: IRoute) => {
95
96
  params: { coopname: info.coopname },
96
97
  });
97
98
  };
99
+
100
+ // Ключ для принудительного перерендера при смене маршрутов
101
+ const menuKey = computed(() => {
102
+ return filteredRoutes.value.map((route) => route.name).join('-');
103
+ });
98
104
  </script>
99
105
 
100
106
  <style>
101
107
  .second-menu .q-item-label {
102
108
  font-size: 12px !important;
103
109
  }
110
+
111
+ /* Анимации для входа и выхода всего меню */
112
+ .menu-enter-active {
113
+ transition: all 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94);
114
+ }
115
+
116
+ .menu-leave-active {
117
+ transition: all 0.15s cubic-bezier(0.55, 0.06, 0.68, 0.19);
118
+ }
119
+
120
+ .menu-enter-active .menu-item {
121
+ animation: slideInDown 0.35s cubic-bezier(0.175, 0.885, 0.32, 1.275) both;
122
+ }
123
+
124
+ .menu-leave-active .menu-item {
125
+ animation: slideOutUp 0.2s cubic-bezier(0.55, 0.06, 0.68, 0.19) both;
126
+ }
127
+
128
+ /* Анимации для отдельных элементов */
129
+ @keyframes slideInDown {
130
+ 0% {
131
+ transform: translateY(-30px) scale(0.95);
132
+ opacity: 0;
133
+ }
134
+ 60% {
135
+ transform: translateY(5px) scale(1.02);
136
+ opacity: 0.8;
137
+ }
138
+ 100% {
139
+ transform: translateY(0) scale(1);
140
+ opacity: 1;
141
+ }
142
+ }
143
+
144
+ @keyframes slideOutUp {
145
+ 0% {
146
+ transform: translateY(0) scale(1);
147
+ opacity: 1;
148
+ }
149
+ 100% {
150
+ transform: translateY(-25px) scale(0.9);
151
+ opacity: 0;
152
+ }
153
+ }
104
154
  </style>
@@ -8,7 +8,9 @@ div
8
8
  swipeable,
9
9
  control-type='flat',
10
10
  control-color='grey',
11
- height='100px'
11
+ height='100px',
12
+ transition-prev='flip-left',
13
+ transition-next='flip-right'
12
14
  )
13
15
  q-carousel-slide.flex.flex-center(
14
16
  v-for='(item, index) in menuWorkspaces',