@sigmaott/base-library-next 2.2.6 → 2.2.8

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 (63) hide show
  1. package/.npmrc +3 -0
  2. package/locales/en.yaml +289 -289
  3. package/locales/vi.yaml +294 -294
  4. package/nuxt.config.ts +18 -18
  5. package/package.json +32 -33
  6. package/public/routes.json +33 -33
  7. package/src/api/axios.ts +3 -3
  8. package/src/api/index.ts +86 -86
  9. package/src/api-client-library/.openapi-generator/FILES +20 -20
  10. package/src/api-client-library/.openapi-generator-ignore +23 -23
  11. package/src/api-client-library/api/health-api.ts +119 -119
  12. package/src/api-client-library/api/presets-api.ts +599 -599
  13. package/src/api-client-library/api/profiles-api.ts +676 -676
  14. package/src/api-client-library/api.ts +20 -20
  15. package/src/api-client-library/base.ts +72 -72
  16. package/src/api-client-library/common.ts +150 -150
  17. package/src/api-client-library/configuration.ts +101 -101
  18. package/src/api-client-library/git_push.sh +57 -57
  19. package/src/api-client-library/index.ts +18 -18
  20. package/src/api-client-library/models/create-preset-dto.ts +223 -223
  21. package/src/api-client-library/models/create-profile-dto.ts +45 -45
  22. package/src/api-client-library/models/health-controller-get-health200-response-info-value.ts +32 -32
  23. package/src/api-client-library/models/health-controller-get-health200-response.ts +51 -51
  24. package/src/api-client-library/models/health-controller-get-health503-response.ts +51 -51
  25. package/src/api-client-library/models/index.ts +7 -7
  26. package/src/api-client-library/models/update-preset-dto.ts +223 -223
  27. package/src/api-client-library/models/update-profile-dto.ts +45 -45
  28. package/src/components/MediaSelection.vue +40 -40
  29. package/src/components/PresetModify.vue +154 -154
  30. package/src/components/PresetTable.vue +114 -114
  31. package/src/components/ProfileAllList.vue +137 -137
  32. package/src/components/ProfileFormModal.vue +79 -79
  33. package/src/components/ProfileModify.vue +152 -152
  34. package/src/components/ProfileTable.vue +68 -68
  35. package/src/components/WatermarkDraggableItem.vue +88 -88
  36. package/src/components/channel/ConfigWatermarkItem.vue +239 -239
  37. package/src/components/channel/WatermarkPreview.vue +19 -19
  38. package/src/components/common/Vue3DraggableResizable/Container.vue +71 -71
  39. package/src/components/common/Vue3DraggableResizable/index.vue +1327 -1327
  40. package/src/components/common/Vue3DraggableResizable/utils/dom.js +63 -63
  41. package/src/components/common/Vue3DraggableResizable/utils/fns.js +37 -37
  42. package/src/components/common/VueDraggableResizable/dom.js +63 -63
  43. package/src/components/common/VueDraggableResizable/fns.js +37 -37
  44. package/src/components/common/VueDraggableResizable/index.vue +958 -958
  45. package/src/components/preset/ConfigItem.vue +956 -956
  46. package/src/components/profile/ConfigItem.vue +765 -765
  47. package/src/components/profile/TableColumns.vue +137 -137
  48. package/src/components/shared/AudioInfoViewer.vue +101 -101
  49. package/src/components/shared/MediaInfoViewer.vue +257 -249
  50. package/src/components/shared/MediaInfoViewerSmall.vue +105 -105
  51. package/src/components/shared/PopoverProfile.vue +17 -17
  52. package/src/components/shared/VideoInfoViewer.vue +136 -136
  53. package/src/components/shared/fileSizeFilter.ts +26 -26
  54. package/src/composables/preset.ts +141 -141
  55. package/src/public/build-time.json +1 -1
  56. package/src/public/favicon.svg +15 -15
  57. package/src/public/logo.svg +9 -9
  58. package/src/public/routes.json +86 -86
  59. package/src/utils/common.ts +175 -175
  60. package/src/utils/config.ts +19 -19
  61. package/src/utils/preset.ts +353 -353
  62. package/src/utils/profile.ts +30 -30
  63. package/tsconfig.json +3 -3
@@ -1,249 +1,257 @@
1
- <script setup lang="ts">
2
- // import { fileSizeFilter } from './fileSizeFilter'
3
-
4
- const props = defineProps<{ media: any }>()
5
-
6
- const hasInterlaced = computed(() => {
7
- return (
8
- (props.media && props.media.interlaced)
9
- || (props.media
10
- && !props.media.interlaced
11
- && typeof props.media.interlaced === 'boolean')
12
- )
13
- })
14
-
15
- const hasCbr = computed(() => {
16
- return (
17
- (props.media && props.media.cbr)
18
- || (props.media && !props.media.cbr && typeof props.media.cbr === 'boolean')
19
- )
20
- })
21
-
22
- function fileSizeFilter(size: number) {
23
- if (Number.isNaN(size))
24
- size = 0
25
-
26
- return `${(size / 1024).toFixed(2)} KB`
27
- }
28
- </script>
29
-
30
- <template>
31
- <div class="item-list-row inline-flex">
32
- <ul class="flex flex-wrap items-center justify-center">
33
- <template v-if="media && media.name && media.type !== 'video'">
34
- <li title="Name">
35
- <el-icon>
36
- <div class="i-ep:camera-filled text-primary" :class="media.type === 'audio' ? 'i-ep:headset' : 'i-ep:menu'" />
37
- </el-icon>&nbsp;
38
- <span v-if="media.codec === 'copy'">&nbsp;</span>
39
- <span class="item__name" :title="media.name">{{
40
- (media && media.name) || '-'
41
- }}</span>
42
- </li>
43
- </template>
44
- <template v-if="media && media.codec">
45
- <li title="Codec">
46
- <el-icon>
47
- <div class="i-ep:grid text-indigo-500" />
48
- </el-icon>&nbsp;
49
- <span>{{ media.codec }}</span>
50
- </li>
51
- </template>
52
- <template v-if="media && (media.height || media.width) && media.type !== 'data'">
53
- <li title="Resolution">
54
- <el-icon name="crop">
55
- <div class="i-ep:crop text-pink-600" />
56
- </el-icon>&nbsp;
57
- <span>{{ media.width }}x{{ media.height }}</span>
58
- </li>
59
- </template>
60
- <template v-if="(media?.videoBitrate || media?.audioBitrate) && media.type !== 'data'">
61
- <li title="Bitrate">
62
- <el-icon>
63
- <div class="i-ep:scale-to-original text-teal-600" />
64
- </el-icon>&nbsp;
65
- <span>{{ media.audioBitrate ? fileSizeFilter(media.audioBitrate || media.bitrate) : fileSizeFilter(media.videoBitrate || media.bitrate) }}/s</span>
66
- </li>
67
- </template>
68
- <template v-if="media?.fps && media?.fps !== 0 && media.type !== 'data'">
69
- <li title="FPS">
70
- <el-icon>
71
- <div class="i-ep:sort text-green-600" />
72
- </el-icon>&nbsp;
73
- <span>{{ media.fps }} fps</span>
74
- </li>
75
- </template>
76
- <template v-if="media && media?.sampleRate && media.type !== 'data' && media.type !== 'video'">
77
- <li title="Sample rate">
78
- <el-icon>
79
- <div class="i-ep:message-box text-indigo-500" />
80
- </el-icon>&nbsp;
81
- <span>{{ media.sampleRate || '-' }}</span>
82
- </li>
83
- </template>
84
- <!-- <template v-if="media.type === 'video'">
85
- <li title="CBR">
86
- <el-icon>
87
- <div class="i-ep:switch-button" :class="media.cbr ? 'text-success' : 'text-gray-400'" />
88
- </el-icon>
89
- &nbsp;
90
- <span> cbr </span>
91
- </li>
92
- </template>
93
- <template v-if="media.type === 'video'">
94
- <li title="Pixel format">
95
- <el-icon>
96
- <div class="i-ep:picture" :class="!media.pixelFormat || 'text-indigo-500'" />
97
- </el-icon>&nbsp;
98
- <span>{{ media.pixelFormat || '-' }}</span>
99
- </li>
100
- </template>
101
- <template v-if="media.type === 'video'">
102
- <li title="Scale type">
103
- <el-icon>
104
- <div class="i-ep:scale-to-original" :class="!media.scaleType || 'text-pink-600'" />
105
- </el-icon>&nbsp;
106
- <span>{{ media.scaleType || '-' }}</span>
107
- </li>
108
- </template>
109
-
110
- <template v-if="media.type === 'video'">
111
- <li title="Constant quality">
112
- <el-icon>
113
- <div class="i-ep:star-filled" :class="!media.cq || 'text-teal-600'" />
114
- </el-icon>&nbsp;
115
- <span>{{ media.cq || '-' }}</span>
116
- </li>
117
- </template>
118
-
119
- <template v-if="media.type === 'video'">
120
- <li title="Interlaced mode">
121
- <el-icon>
122
- <div class="i-ep:switch-button" :class="media.interlaced ? 'text-success' : 'text-gray-400'" />
123
- </el-icon>
124
- &nbsp;
125
- <span> interlaced </span>
126
- </li>
127
- </template> -->
128
- <template v-if="media && media.channel && media.type === 'audio'">
129
- <li title="Channel">
130
- <el-icon>
131
- <div class="i-ep:platform text-pink-600" />
132
- </el-icon>&nbsp;
133
- <span>{{ media.channel || '-' }}</span>
134
- </li>
135
- </template>
136
- <template v-if="media && media.bframe && media.type !== 'video' && media.type !== 'data'">
137
- <li title="Bframe">
138
- <el-icon>
139
- <div class="i-ep:full-screen text-indigo-500" />
140
- </el-icon>&nbsp;
141
- <span>{{ media.bframe || '-' }}</span>
142
- </li>
143
- </template>
144
- <template v-if="media && media.profile && media.type !== 'data'">
145
- <li title="Profile">
146
- <el-icon>
147
- <div class="i-ep:credit-card text-gray-400" />
148
- </el-icon>&nbsp;
149
- <span>{{ media.profile || '-' }}</span>
150
- </li>
151
- </template>
152
- <template v-if="media && media.level">
153
- <li title="Level">
154
- <el-icon>
155
- <div class="i-ep:star text-indigo-500" />
156
- </el-icon>&nbsp;
157
- <span>{{ media.level || '-' }}</span>
158
- </li>
159
- </template>
160
- <template v-if="media && media.colorRange">
161
- <li title="Color range">
162
- <el-icon>
163
- <div class="i-ep:brush text-green-600" />
164
- </el-icon>&nbsp;
165
- <span>Range:
166
- <span class="font-medium">{{ media.colorRange || '-' }}</span></span>
167
- </li>
168
- </template>
169
- <template v-if="media && media.colorTransfer">
170
- <li title="Color transfer">
171
- <el-icon>
172
- <div class="i-ep:brush text-green-600" />
173
- </el-icon>&nbsp;
174
- <span>Transfer:
175
- <span class="font-medium">{{
176
- media.colorTransfer || '-'
177
- }}</span></span>
178
- </li>
179
- </template>
180
- <template v-if="media && media.colorPrimaries">
181
- <li title="Color primaries">
182
- <el-icon>
183
- <div class="i-ep:brush text-green-600" />
184
- </el-icon>&nbsp;
185
- <span>Primary:
186
- <span class="font-medium">{{
187
- media.colorPrimaries || '-'
188
- }}</span></span>
189
- </li>
190
- </template>
191
- <template v-if="media && media.colorSpace">
192
- <li title="Color space">
193
- <el-icon>
194
- <div class="i-ep:brush text-green-600" />
195
- </el-icon>&nbsp;
196
- <span>Space:
197
- <span class="font-medium">{{ media.colorSpace || '-' }}</span></span>
198
- </li>
199
- </template>
200
- </ul>
201
- <div v-if="$slots && $slots.anchor" class="anchor">
202
- <slot name="anchor" />
203
- </div>
204
- </div>
205
- </template>
206
-
207
- <style lang="scss" scoped>
208
- .item-list-row {
209
- margin: 5px;
210
- padding: 5px;
211
- position: relative;
212
- border: 1px solid rgba(64, 158, 255, 0.4);
213
- border-radius: 4px;
214
-
215
- ul {
216
- li {
217
- white-space: nowrap;
218
- display: flex;
219
- align-items: center;
220
-
221
- &:not(:last-child):after {
222
- content: '|';
223
- display: inline-block;
224
- color: #9ca3af;
225
- padding: 0 0.3rem;
226
- }
227
- }
228
-
229
- .item__name {
230
- max-width: 85px;
231
- overflow: hidden;
232
- white-space: nowrap;
233
- text-overflow: ellipsis;
234
- }
235
- }
236
-
237
- .anchor {
238
- padding: 5px;
239
- margin: -5px -5px -5px 5px;
240
- display: flex;
241
- flex-direction: column;
242
- border-left: 1px solid;
243
- border-color: inherit;
244
- background-color: rgba(64, 158, 255, 0.2);
245
- border-top-right-radius: inherit;
246
- border-bottom-right-radius: inherit;
247
- }
248
- }
249
- </style>
1
+ <script setup lang="ts">
2
+ // import { fileSizeFilter } from './fileSizeFilter'
3
+
4
+ const props = defineProps<{ media: any, isShowPId?: boolean }>()
5
+
6
+ const hasInterlaced = computed(() => {
7
+ return (
8
+ (props.media && props.media.interlaced)
9
+ || (props.media
10
+ && !props.media.interlaced
11
+ && typeof props.media.interlaced === 'boolean')
12
+ )
13
+ })
14
+
15
+ const hasCbr = computed(() => {
16
+ return (
17
+ (props.media && props.media.cbr)
18
+ || (props.media && !props.media.cbr && typeof props.media.cbr === 'boolean')
19
+ )
20
+ })
21
+
22
+ function fileSizeFilter(size: number) {
23
+ if (Number.isNaN(size))
24
+ size = 0
25
+
26
+ return `${(size / 1024).toFixed(2)} KB`
27
+ }
28
+ </script>
29
+
30
+ <template>
31
+ <div class="item-list-row inline-flex">
32
+ <ul class="flex flex-wrap items-center justify-center">
33
+ <template v-if="isShowPId">
34
+ <li title="PID">
35
+ <div class="i-carbon:id text-primary text-20px" />
36
+ <span>{{ media.id }}</span>
37
+ </li>
38
+ </template>
39
+ <template v-if="media && media.name && media.type !== 'video'">
40
+ <li title="Name">
41
+ <el-icon>
42
+ <div class="i-ep:camera-filled text-primary"
43
+ :class="media.type === 'audio' ? 'i-ep:headset' : 'i-ep:menu'" />
44
+ </el-icon>&nbsp;
45
+ <span v-if="media.codec === 'copy'">&nbsp;</span>
46
+ <span class="item__name" :title="media.name">{{
47
+ (media && media.name) || '-'
48
+ }}</span>
49
+ </li>
50
+ </template>
51
+ <template v-if="media && media.codec">
52
+ <li title="Codec">
53
+ <el-icon>
54
+ <div class="i-ep:grid text-indigo-500" />
55
+ </el-icon>&nbsp;
56
+ <span>{{ media.codec }}</span>
57
+ </li>
58
+ </template>
59
+ <template v-if="media && (media.height || media.width) && media.type !== 'data'">
60
+ <li title="Resolution">
61
+ <el-icon name="crop">
62
+ <div class="i-ep:crop text-pink-600" />
63
+ </el-icon>&nbsp;
64
+ <span>{{ media.width }}x{{ media.height }}</span>
65
+ </li>
66
+ </template>
67
+ <template v-if="(media?.videoBitrate || media?.audioBitrate) && media.type !== 'data'">
68
+ <li title="Bitrate">
69
+ <el-icon>
70
+ <div class="i-ep:scale-to-original text-teal-600" />
71
+ </el-icon>&nbsp;
72
+ <span>{{ media.audioBitrate ? fileSizeFilter(media.audioBitrate || media.bitrate) :
73
+ fileSizeFilter(media.videoBitrate || media.bitrate) }}/s</span>
74
+ </li>
75
+ </template>
76
+ <template v-if="media?.fps && media?.fps !== 0 && media.type !== 'data'">
77
+ <li title="FPS">
78
+ <el-icon>
79
+ <div class="i-ep:sort text-green-600" />
80
+ </el-icon>&nbsp;
81
+ <span>{{ media.fps }} fps</span>
82
+ </li>
83
+ </template>
84
+ <template v-if="media && media?.sampleRate && media.type !== 'data' && media.type !== 'video'">
85
+ <li title="Sample rate">
86
+ <el-icon>
87
+ <div class="i-ep:message-box text-indigo-500" />
88
+ </el-icon>&nbsp;
89
+ <span>{{ media.sampleRate || '-' }}</span>
90
+ </li>
91
+ </template>
92
+ <!-- <template v-if="media.type === 'video'">
93
+ <li title="CBR">
94
+ <el-icon>
95
+ <div class="i-ep:switch-button" :class="media.cbr ? 'text-success' : 'text-gray-400'" />
96
+ </el-icon>
97
+ &nbsp;
98
+ <span> cbr </span>
99
+ </li>
100
+ </template>
101
+ <template v-if="media.type === 'video'">
102
+ <li title="Pixel format">
103
+ <el-icon>
104
+ <div class="i-ep:picture" :class="!media.pixelFormat || 'text-indigo-500'" />
105
+ </el-icon>&nbsp;
106
+ <span>{{ media.pixelFormat || '-' }}</span>
107
+ </li>
108
+ </template>
109
+ <template v-if="media.type === 'video'">
110
+ <li title="Scale type">
111
+ <el-icon>
112
+ <div class="i-ep:scale-to-original" :class="!media.scaleType || 'text-pink-600'" />
113
+ </el-icon>&nbsp;
114
+ <span>{{ media.scaleType || '-' }}</span>
115
+ </li>
116
+ </template>
117
+
118
+ <template v-if="media.type === 'video'">
119
+ <li title="Constant quality">
120
+ <el-icon>
121
+ <div class="i-ep:star-filled" :class="!media.cq || 'text-teal-600'" />
122
+ </el-icon>&nbsp;
123
+ <span>{{ media.cq || '-' }}</span>
124
+ </li>
125
+ </template>
126
+
127
+ <template v-if="media.type === 'video'">
128
+ <li title="Interlaced mode">
129
+ <el-icon>
130
+ <div class="i-ep:switch-button" :class="media.interlaced ? 'text-success' : 'text-gray-400'" />
131
+ </el-icon>
132
+ &nbsp;
133
+ <span> interlaced </span>
134
+ </li>
135
+ </template> -->
136
+ <template v-if="media && media.channel && media.type === 'audio'">
137
+ <li title="Channel">
138
+ <el-icon>
139
+ <div class="i-ep:platform text-pink-600" />
140
+ </el-icon>&nbsp;
141
+ <span>{{ media.channel || '-' }}</span>
142
+ </li>
143
+ </template>
144
+ <template v-if="media && media.bframe && media.type !== 'video' && media.type !== 'data'">
145
+ <li title="Bframe">
146
+ <el-icon>
147
+ <div class="i-ep:full-screen text-indigo-500" />
148
+ </el-icon>&nbsp;
149
+ <span>{{ media.bframe || '-' }}</span>
150
+ </li>
151
+ </template>
152
+ <template v-if="media && media.profile && media.type !== 'data'">
153
+ <li title="Profile">
154
+ <el-icon>
155
+ <div class="i-ep:credit-card text-gray-400" />
156
+ </el-icon>&nbsp;
157
+ <span>{{ media.profile || '-' }}</span>
158
+ </li>
159
+ </template>
160
+ <template v-if="media && media.level">
161
+ <li title="Level">
162
+ <el-icon>
163
+ <div class="i-ep:star text-indigo-500" />
164
+ </el-icon>&nbsp;
165
+ <span>{{ media.level || '-' }}</span>
166
+ </li>
167
+ </template>
168
+ <template v-if="media && media.colorRange">
169
+ <li title="Color range">
170
+ <el-icon>
171
+ <div class="i-ep:brush text-green-600" />
172
+ </el-icon>&nbsp;
173
+ <span>Range:
174
+ <span class="font-medium">{{ media.colorRange || '-' }}</span></span>
175
+ </li>
176
+ </template>
177
+ <template v-if="media && media.colorTransfer">
178
+ <li title="Color transfer">
179
+ <el-icon>
180
+ <div class="i-ep:brush text-green-600" />
181
+ </el-icon>&nbsp;
182
+ <span>Transfer:
183
+ <span class="font-medium">{{
184
+ media.colorTransfer || '-'
185
+ }}</span></span>
186
+ </li>
187
+ </template>
188
+ <template v-if="media && media.colorPrimaries">
189
+ <li title="Color primaries">
190
+ <el-icon>
191
+ <div class="i-ep:brush text-green-600" />
192
+ </el-icon>&nbsp;
193
+ <span>Primary:
194
+ <span class="font-medium">{{
195
+ media.colorPrimaries || '-'
196
+ }}</span></span>
197
+ </li>
198
+ </template>
199
+ <template v-if="media && media.colorSpace">
200
+ <li title="Color space">
201
+ <el-icon>
202
+ <div class="i-ep:brush text-green-600" />
203
+ </el-icon>&nbsp;
204
+ <span>Space:
205
+ <span class="font-medium">{{ media.colorSpace || '-' }}</span></span>
206
+ </li>
207
+ </template>
208
+ </ul>
209
+ <div v-if="$slots && $slots.anchor" class="anchor">
210
+ <slot name="anchor" />
211
+ </div>
212
+ </div>
213
+ </template>
214
+
215
+ <style lang="scss" scoped>
216
+ .item-list-row {
217
+ margin: 5px;
218
+ padding: 5px;
219
+ position: relative;
220
+ border: 1px solid rgba(64, 158, 255, 0.4);
221
+ border-radius: 4px;
222
+
223
+ ul {
224
+ li {
225
+ white-space: nowrap;
226
+ display: flex;
227
+ align-items: center;
228
+
229
+ &:not(:last-child):after {
230
+ content: '|';
231
+ display: inline-block;
232
+ color: #9ca3af;
233
+ padding: 0 0.3rem;
234
+ }
235
+ }
236
+
237
+ .item__name {
238
+ max-width: 85px;
239
+ overflow: hidden;
240
+ white-space: nowrap;
241
+ text-overflow: ellipsis;
242
+ }
243
+ }
244
+
245
+ .anchor {
246
+ padding: 5px;
247
+ margin: -5px -5px -5px 5px;
248
+ display: flex;
249
+ flex-direction: column;
250
+ border-left: 1px solid;
251
+ border-color: inherit;
252
+ background-color: rgba(64, 158, 255, 0.2);
253
+ border-top-right-radius: inherit;
254
+ border-bottom-right-radius: inherit;
255
+ }
256
+ }
257
+ </style>