@privateaim/client-vue 0.8.3 → 0.8.5

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 (138) hide show
  1. package/dist/components/Dropdown.d.ts +2 -2
  2. package/dist/components/FEntityDelete.d.ts +8 -12
  3. package/dist/components/FEntityDelete.d.ts.map +1 -1
  4. package/dist/components/analysis/FAnalyses.d.ts +7 -7
  5. package/dist/components/analysis/FAnalysis.d.ts +5 -5
  6. package/dist/components/analysis/FAnalysisBasicForm.vue.d.ts +192 -7
  7. package/dist/components/analysis/FAnalysisBasicForm.vue.d.ts.map +1 -1
  8. package/dist/components/analysis/FAnalysisBuildStatusText.vue.d.ts +5 -5
  9. package/dist/components/analysis/FAnalysisCommand.d.ts +5 -5
  10. package/dist/components/analysis/FAnalysisCommand.d.ts.map +1 -1
  11. package/dist/components/analysis/FAnalysisConfigurationStatusText.vue.d.ts +5 -5
  12. package/dist/components/analysis/FAnalysisImageCommand.d.ts +6 -6
  13. package/dist/components/analysis/FAnalysisItem.d.ts +325 -6
  14. package/dist/components/analysis/FAnalysisItem.d.ts.map +1 -1
  15. package/dist/components/analysis/FAnalysisItemCard.vue.d.ts +510 -8
  16. package/dist/components/analysis/FAnalysisItemCard.vue.d.ts.map +1 -1
  17. package/dist/components/analysis/FAnalysisName.d.ts +6 -6
  18. package/dist/components/analysis/FAnalysisPipeline.vue.d.ts +91 -6
  19. package/dist/components/analysis/FAnalysisPipeline.vue.d.ts.map +1 -1
  20. package/dist/components/analysis/wizard/FAnalysisWizard.vue.d.ts +1039 -8
  21. package/dist/components/analysis/wizard/FAnalysisWizard.vue.d.ts.map +1 -1
  22. package/dist/components/analysis/wizard/FAnalysisWizardStepBase.vue.d.ts +430 -6
  23. package/dist/components/analysis/wizard/FAnalysisWizardStepBase.vue.d.ts.map +1 -1
  24. package/dist/components/analysis/wizard/FAnalysisWizardStepFiles.vue.d.ts +523 -9
  25. package/dist/components/analysis/wizard/FAnalysisWizardStepFiles.vue.d.ts.map +1 -1
  26. package/dist/components/analysis/wizard/FAnalysisWizardStepFinal.vue.d.ts +1 -1
  27. package/dist/components/analysis/wizard/FAnalysisWizardStepFinal.vue.d.ts.map +1 -1
  28. package/dist/components/analysis-bucket/FAnalysisBucket.d.ts +5 -5
  29. package/dist/components/analysis-bucket/FAnalysisBucketDownload.d.ts +4 -4
  30. package/dist/components/analysis-bucket/FAnalysisBucketDownload.d.ts.map +1 -1
  31. package/dist/components/analysis-bucket-file/FAnalysisBucketFile.vue.d.ts +9 -9
  32. package/dist/components/analysis-bucket-file/FAnalysisBucketFileDownload.d.ts +4 -4
  33. package/dist/components/analysis-bucket-file/FAnalysisBucketFileDownload.d.ts.map +1 -1
  34. package/dist/components/analysis-bucket-file/FAnalysisBucketFileManager.vue.d.ts +295 -31
  35. package/dist/components/analysis-bucket-file/FAnalysisBucketFileManager.vue.d.ts.map +1 -1
  36. package/dist/components/analysis-bucket-file/FAnalysisBucketFileUpload.vue.d.ts +76 -0
  37. package/dist/components/analysis-bucket-file/FAnalysisBucketFileUpload.vue.d.ts.map +1 -0
  38. package/dist/components/analysis-bucket-file/FAnalysisBucketFiles.d.ts +7 -7
  39. package/dist/components/analysis-bucket-file/FAnalysisBucketFiles.d.ts.map +1 -1
  40. package/dist/components/analysis-bucket-file/FAnalysisFormFile.vue.d.ts +6 -6
  41. package/dist/components/analysis-bucket-file/FAnalysisFormFile.vue.d.ts.map +1 -1
  42. package/dist/components/analysis-log/FAnalysisLog.d.ts +5 -5
  43. package/dist/components/analysis-log/FAnalysisLogs.d.ts +5 -5
  44. package/dist/components/analysis-node/FAnalsisNodeApprovalCommand.d.ts +9 -9
  45. package/dist/components/analysis-node/FAnalsisNodeApprovalCommand.d.ts.map +1 -1
  46. package/dist/components/analysis-node/FAnalysisNode.d.ts +5 -5
  47. package/dist/components/analysis-node/FAnalysisNodeApprovalStatus.d.ts +5 -5
  48. package/dist/components/analysis-node/FAnalysisNodeApprovalStatus.d.ts.map +1 -1
  49. package/dist/components/analysis-node/FAnalysisNodeAssignAction.d.ts +6 -6
  50. package/dist/components/analysis-node/FAnalysisNodeInCard.vue.d.ts +258 -6
  51. package/dist/components/analysis-node/FAnalysisNodeInCard.vue.d.ts.map +1 -1
  52. package/dist/components/analysis-node/FAnalysisNodeRunStatus.d.ts +5 -5
  53. package/dist/components/analysis-node/FAnalysisNodes.d.ts +11 -16
  54. package/dist/components/analysis-node/FAnalysisNodes.d.ts.map +1 -1
  55. package/dist/components/analysis-node/FAnalysisNodesProgress.vue.d.ts +124 -5
  56. package/dist/components/analysis-node/FAnalysisNodesProgress.vue.d.ts.map +1 -1
  57. package/dist/components/constants.d.ts +6 -0
  58. package/dist/components/constants.d.ts.map +1 -0
  59. package/dist/components/index.d.ts +2 -0
  60. package/dist/components/index.d.ts.map +1 -1
  61. package/dist/components/login/FLoginForm.vue.d.ts +179 -6
  62. package/dist/components/login/FLoginForm.vue.d.ts.map +1 -1
  63. package/dist/components/master-image/FMasterImagePicker.d.ts +85 -6
  64. package/dist/components/master-image/FMasterImagePicker.d.ts.map +1 -1
  65. package/dist/components/master-image/FMasterImages.d.ts +7 -7
  66. package/dist/components/master-image/FMasterImagesSync.d.ts +149 -2
  67. package/dist/components/master-image/FMasterImagesSync.d.ts.map +1 -1
  68. package/dist/components/master-image-event-log/FMasterImageEventLog.d.ts +27 -0
  69. package/dist/components/master-image-event-log/FMasterImageEventLog.d.ts.map +1 -0
  70. package/dist/components/master-image-event-log/FMasterImageEventLogs.d.ts +5 -0
  71. package/dist/components/master-image-event-log/FMasterImageEventLogs.d.ts.map +1 -0
  72. package/dist/components/master-image-event-log/index.d.ts +3 -0
  73. package/dist/components/master-image-event-log/index.d.ts.map +1 -0
  74. package/dist/components/master-image-group/FMasterImageGroups.d.ts +7 -7
  75. package/dist/components/node/FNodeCrypto.vue.d.ts +30 -0
  76. package/dist/components/node/FNodeCrypto.vue.d.ts.map +1 -0
  77. package/dist/components/node/FNodeForm.d.ts +7 -7
  78. package/dist/components/node/FNodeRegistryProject.d.ts +5 -5
  79. package/dist/components/node/FNodeRobot.d.ts +5 -5
  80. package/dist/components/node/FNodes.d.ts +7 -7
  81. package/dist/components/node/index.d.ts +1 -0
  82. package/dist/components/node/index.d.ts.map +1 -1
  83. package/dist/components/project/FProject.d.ts +5 -5
  84. package/dist/components/project/FProject.d.ts.map +1 -1
  85. package/dist/components/project/FProjectForm.d.ts +7 -7
  86. package/dist/components/project/FProjectForm.d.ts.map +1 -1
  87. package/dist/components/project/FProjectInForm.d.ts +4 -4
  88. package/dist/components/project/FProjectInForm.d.ts.map +1 -1
  89. package/dist/components/project/FProjectItem.d.ts +5 -5
  90. package/dist/components/project/FProjectItem.d.ts.map +1 -1
  91. package/dist/components/project/FProjectItemCard.vue.d.ts +191 -7
  92. package/dist/components/project/FProjectItemCard.vue.d.ts.map +1 -1
  93. package/dist/components/project/FProjects.d.ts +7 -7
  94. package/dist/components/project/FProjects.d.ts.map +1 -1
  95. package/dist/components/project-node/FProjectNode.d.ts +5 -5
  96. package/dist/components/project-node/FProjectNodeApprovalCommand.d.ts +9 -9
  97. package/dist/components/project-node/FProjectNodeApprovalCommand.d.ts.map +1 -1
  98. package/dist/components/project-node/FProjectNodeApprovalStatus.d.ts +5 -5
  99. package/dist/components/project-node/FProjectNodeApprovalStatus.d.ts.map +1 -1
  100. package/dist/components/project-node/FProjectNodeAssignAction.d.ts +6 -6
  101. package/dist/components/project-node/FProjectNodeInCard.vue.d.ts +160 -7
  102. package/dist/components/project-node/FProjectNodeInCard.vue.d.ts.map +1 -1
  103. package/dist/components/project-node/FProjectNodes.d.ts +9 -13
  104. package/dist/components/project-node/FProjectNodes.d.ts.map +1 -1
  105. package/dist/components/registry/FRegistries.d.ts +7 -7
  106. package/dist/components/registry/FRegistryCleanup.d.ts +150 -5
  107. package/dist/components/registry/FRegistryCleanup.d.ts.map +1 -1
  108. package/dist/components/registry/FRegistryForm.d.ts +7 -7
  109. package/dist/components/registry/FRegistrySetup.d.ts +150 -5
  110. package/dist/components/registry/FRegistrySetup.d.ts.map +1 -1
  111. package/dist/components/registry-project/FRegistryProject.d.ts +5 -5
  112. package/dist/components/registry-project/FRegistryProjectForm.d.ts +5 -5
  113. package/dist/components/registry-project/FRegistryProjects.d.ts +7 -7
  114. package/dist/components/utility/pagination/FPagination.d.ts +5 -5
  115. package/dist/components/utility/pagination/FPagination.d.ts.map +1 -1
  116. package/dist/components/utility/search/FSearch.d.ts +5 -5
  117. package/dist/components/utility/search/FSearch.d.ts.map +1 -1
  118. package/dist/components/utility/title/FTitle.d.ts +5 -5
  119. package/dist/components/utility/title/FTitle.d.ts.map +1 -1
  120. package/dist/core/entity-manager/module.d.ts +2 -4
  121. package/dist/core/entity-manager/module.d.ts.map +1 -1
  122. package/dist/core/entity-manager/type.d.ts +2 -4
  123. package/dist/core/entity-manager/type.d.ts.map +1 -1
  124. package/dist/core/entity-socket/module.d.ts +2 -4
  125. package/dist/core/entity-socket/module.d.ts.map +1 -1
  126. package/dist/core/entity-socket/type.d.ts +6 -6
  127. package/dist/core/entity-socket/type.d.ts.map +1 -1
  128. package/dist/core/http-client/setup.d.ts.map +1 -1
  129. package/dist/core/list/module.d.ts +2 -4
  130. package/dist/core/list/module.d.ts.map +1 -1
  131. package/dist/core/list/type.d.ts +9 -9
  132. package/dist/core/list/type.d.ts.map +1 -1
  133. package/dist/core/socket/install.d.ts.map +1 -1
  134. package/dist/index.cjs +2185 -1061
  135. package/dist/index.cjs.map +1 -1
  136. package/dist/index.mjs +2190 -1072
  137. package/dist/index.mjs.map +1 -1
  138. package/package.json +32 -31
package/dist/index.cjs CHANGED
@@ -10,7 +10,7 @@ var useVuelidate = require('@vuelidate/core');
10
10
  var validators = require('@vuelidate/validators');
11
11
  var formControls = require('@vuecs/form-controls');
12
12
  var coreKit = require('@privateaim/core-kit');
13
- var crypto = require('crypto');
13
+ var crypto$1 = require('crypto');
14
14
  var listControls = require('@vuecs/list-controls');
15
15
  var rapiq = require('rapiq');
16
16
  require('@authup/kit');
@@ -18,15 +18,118 @@ var coreHttpKit = require('@authup/core-http-kit');
18
18
  var storageKit = require('@privateaim/storage-kit');
19
19
  var coreKit$1 = require('@authup/core-kit');
20
20
  var coreRealtimeKit = require('@authup/core-realtime-kit');
21
+ var timeago = require('@vuecs/timeago');
21
22
  var link = require('@vuecs/link');
22
23
  var bootstrapVueNext = require('bootstrap-vue-next');
23
- var timeago = require('@vuecs/timeago');
24
24
  var vue3FormWizard = require('vue3-form-wizard');
25
25
 
26
- var StoreName;
27
- (function(StoreName) {
26
+ /*
27
+ * Copyright (c) 2024-2024.
28
+ * Author Peter Placzek (tada5hi)
29
+ * For the full copyright and license information,
30
+ * view the LICENSE file that was distributed with this source code.
31
+ */ const BRACKET_NUMBER_REGEX = RegExp("(?<!\\\\)\\[(\\d+)]$");
32
+ /**
33
+ * Convert string to property path array.
34
+ *
35
+ * @see https://github.com/lodash/lodash/blob/main/src/.internal/stringToPath.ts
36
+ * @see https://github.com/chaijs/pathval
37
+ *
38
+ * @param segment
39
+ */ function pathToArray(segment) {
40
+ const str = segment.replace(/([^\\])\[/g, '$1.[');
41
+ const parts = str.match(/(\\\.|[^.]+?)+/g);
42
+ if (!parts) {
43
+ return [];
44
+ }
45
+ const result = [];
46
+ for(let i = 0; i < parts.length; i++){
47
+ if (parts[i] === 'constructor' || parts[i] === '__proto__' || parts[i] === 'prototype') {
48
+ continue;
49
+ }
50
+ const regex = BRACKET_NUMBER_REGEX.exec(parts[i]);
51
+ if (regex) {
52
+ result.push(regex[1]);
53
+ } else {
54
+ result.push(parts[i].replace(/\\([.[\]])/g, '$1'));
55
+ }
56
+ }
57
+ return result;
58
+ }
59
+ /*
60
+ * Copyright (c) 2024.
61
+ * Author Peter Placzek (tada5hi)
62
+ * For the full copyright and license information,
63
+ * view the LICENSE file that was distributed with this source code.
64
+ */ var Character;
65
+ (function(Character) {
66
+ Character["WILDCARD"] = "*";
67
+ Character["GLOBSTAR"] = "**";
68
+ })(Character || (Character = {}));
69
+ /*
70
+ * Copyright (c) 2024.
71
+ * Author Peter Placzek (tada5hi)
72
+ * For the full copyright and license information,
73
+ * view the LICENSE file that was distributed with this source code.
74
+ */ function isObject$4(input) {
75
+ return !!input && typeof input === 'object' && !Array.isArray(input);
76
+ }
77
+ function getPathValue(data, path) {
78
+ const parts = Array.isArray(path) ? path : pathToArray(path);
79
+ let res;
80
+ let temp = data;
81
+ let index = 0;
82
+ while(index < parts.length){
83
+ if (temp === null || typeof temp === 'undefined') {
84
+ break;
85
+ }
86
+ if (parts[index] in Object(temp)) {
87
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
88
+ // @ts-expect-error
89
+ temp = temp[parts[index]];
90
+ } else {
91
+ break;
92
+ }
93
+ if (index === parts.length - 1) {
94
+ res = temp;
95
+ }
96
+ index++;
97
+ }
98
+ return res;
99
+ }
100
+ const NUMBER_REGEX = /^\d+$/;
101
+ function setPathValue(data, path, value) {
102
+ const parts = Array.isArray(path) ? path : pathToArray(path);
103
+ let temp = data;
104
+ let index = 0;
105
+ while(index < parts.length){
106
+ /* istanbul ignore next */ if (!Array.isArray(temp) && !isObject$4(temp)) {
107
+ break;
108
+ }
109
+ const key = parts[index];
110
+ // [foo, '0']
111
+ if (typeof temp[key] === 'undefined') {
112
+ const match = NUMBER_REGEX.test(key);
113
+ if (match) {
114
+ temp[key] = [];
115
+ } else {
116
+ temp[key] = {};
117
+ }
118
+ }
119
+ if (index === parts.length - 1) {
120
+ temp[key] = value;
121
+ break;
122
+ }
123
+ index++;
124
+ temp = temp[key];
125
+ }
126
+ return data;
127
+ }
128
+
129
+ var StoreName = /*#__PURE__*/ function(StoreName) {
28
130
  StoreName["DEFAULT"] = "default";
29
- })(StoreName || (StoreName = {}));
131
+ return StoreName;
132
+ }({});
30
133
  class Store {
31
134
  /**
32
135
  * Set options for all groups.
@@ -99,27 +202,44 @@ function applyStoreManagerOptions(manager, options) {
99
202
  store.setAll(options.defaults);
100
203
  }
101
204
  }
205
+ function inject(key, instance) {
206
+ if (instance && instance._context && instance._context.provides && instance._context.provides[key]) {
207
+ return instance._context.provides[key];
208
+ }
209
+ if (vue.hasInjectionContext()) {
210
+ return vue.inject(key, undefined);
211
+ }
212
+ return undefined;
213
+ }
214
+ function provide(key, value, app) {
215
+ if (typeof app === 'undefined') {
216
+ const val = inject(key);
217
+ if (typeof val !== 'undefined') {
218
+ return;
219
+ }
220
+ vue.provide(key, value);
221
+ return;
222
+ }
223
+ if (app && app._context && app._context.provides && app._context.provides[key]) {
224
+ return;
225
+ }
226
+ app.provide(key, value);
227
+ }
102
228
  function getSymbol(key) {
103
229
  return Symbol.for('VCStoreManager');
104
230
  }
105
231
  function installStoreManager(instance, key) {
106
- let manager;
107
232
  const symbol = getSymbol();
108
- if (instance._context && instance._context.provides && instance._context.provides[symbol]) {
109
- return instance._context.provides[symbol];
110
- }
111
- if (vue.hasInjectionContext()) {
112
- manager = vue.inject(symbol, undefined);
113
- if (manager) {
114
- return manager;
115
- }
233
+ let manager = inject(symbol, instance);
234
+ if (manager) {
235
+ return manager;
116
236
  }
117
237
  manager = new StoreManager();
118
- instance.provide(symbol, manager);
238
+ provide(symbol, manager, instance);
119
239
  return manager;
120
240
  }
121
241
 
122
- var _sfc_main$g = vue.defineComponent({
242
+ var _sfc_main$i = vue.defineComponent({
123
243
  components: {
124
244
  IVuelidate: vuelidate.IVuelidate,
125
245
  VCFormInput: formControls.VCFormInput,
@@ -135,6 +255,7 @@ var _sfc_main$g = vue.defineComponent({
135
255
  'failed'
136
256
  ],
137
257
  setup (props, { emit }) {
258
+ const store = clientWebKit.injectStore();
138
259
  const realmId = vue.toRef(props, 'realmId');
139
260
  const form = vue.reactive({
140
261
  name: '',
@@ -160,7 +281,6 @@ var _sfc_main$g = vue.defineComponent({
160
281
  },
161
282
  realm_id: {}
162
283
  }, form);
163
- const store = clientWebKit.useStore();
164
284
  const busy = vue.ref(false);
165
285
  const submit = async ()=>{
166
286
  try {
@@ -193,7 +313,7 @@ var _export_sfc = ((sfc, props)=>{
193
313
  return target;
194
314
  });
195
315
 
196
- function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) {
316
+ function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
197
317
  const _component_VCFormInput = vue.resolveComponent("VCFormInput");
198
318
  const _component_VCFormGroup = vue.resolveComponent("VCFormGroup");
199
319
  const _component_IVuelidate = vue.resolveComponent("IVuelidate");
@@ -211,9 +331,9 @@ function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) {
211
331
  "validation-messages": props.data,
212
332
  "validation-severity": props.severity
213
333
  }, {
214
- label: vue.withCtx(()=>[
334
+ label: vue.withCtx(()=>_cache[4] || (_cache[4] = [
215
335
  vue.createTextVNode(" Name ")
216
- ]),
336
+ ])),
217
337
  default: vue.withCtx(()=>[
218
338
  vue.createVNode(_component_VCFormInput, {
219
339
  modelValue: _ctx.vuelidate.name.$model,
@@ -240,9 +360,9 @@ function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) {
240
360
  "validation-messages": props.data,
241
361
  "validation-severity": props.severity
242
362
  }, {
243
- label: vue.withCtx(()=>[
363
+ label: vue.withCtx(()=>_cache[5] || (_cache[5] = [
244
364
  vue.createTextVNode(" Password ")
245
- ]),
365
+ ])),
246
366
  default: vue.withCtx(()=>[
247
367
  vue.createVNode(_component_VCFormInput, {
248
368
  modelValue: _ctx.vuelidate.password.$model,
@@ -282,10 +402,10 @@ function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) {
282
402
  ])
283
403
  ], 32);
284
404
  }
285
- var FLoginForm = /* @__PURE__ */ _export_sfc(_sfc_main$g, [
405
+ var FLoginForm = /* @__PURE__ */ _export_sfc(_sfc_main$i, [
286
406
  [
287
407
  "render",
288
- _sfc_render$g
408
+ _sfc_render$i
289
409
  ]
290
410
  ]);
291
411
 
@@ -294,39 +414,61 @@ var FLoginForm = /* @__PURE__ */ _export_sfc(_sfc_main$g, [
294
414
  * Author Peter Placzek (tada5hi)
295
415
  * For the full copyright and license information,
296
416
  * view the LICENSE file that was distributed with this source code.
297
- */ exports.ActionCommandElementType = void 0;
298
- (function(ActionCommandElementType) {
417
+ */ var ActionCommandElementType = /*#__PURE__*/ function(ActionCommandElementType) {
299
418
  ActionCommandElementType["BUTTON"] = "button";
300
419
  ActionCommandElementType["LINK"] = "link";
301
420
  ActionCommandElementType["DROPDOWN_ITEM"] = "dropDownItem";
302
- })(exports.ActionCommandElementType || (exports.ActionCommandElementType = {}));
421
+ return ActionCommandElementType;
422
+ }({});
303
423
 
424
+ // It is best to make fewer, larger requests to the crypto module to
425
+ // avoid system call overhead. So, random numbers are generated in a
426
+ // pool. The pool is a Buffer that is larger than the initial random
427
+ // request size by this multiplier. The pool is enlarged if subsequent
428
+ // requests exceed the maximum buffer size.
304
429
  const POOL_SIZE_MULTIPLIER = 128;
305
430
  let pool, poolOffset;
306
431
  let fillPool = (bytes)=>{
307
432
  if (!pool || pool.length < bytes) {
308
433
  pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER);
309
- crypto.randomFillSync(pool);
434
+ crypto$1.randomFillSync(pool);
310
435
  poolOffset = 0;
311
436
  } else if (poolOffset + bytes > pool.length) {
312
- crypto.randomFillSync(pool);
437
+ crypto$1.randomFillSync(pool);
313
438
  poolOffset = 0;
314
439
  }
315
440
  poolOffset += bytes;
316
441
  };
317
442
  let random = (bytes)=>{
318
- fillPool(bytes -= 0);
443
+ // `|=` convert `bytes` to number to prevent `valueOf` abusing and pool pollution
444
+ fillPool(bytes |= 0);
319
445
  return pool.subarray(poolOffset - bytes, poolOffset);
320
446
  };
321
447
  let customRandom = (alphabet, defaultSize, getRandom)=>{
448
+ // First, a bitmask is necessary to generate the ID. The bitmask makes bytes
449
+ // values closer to the alphabet size. The bitmask calculates the closest
450
+ // `2^31 - 1` number, which exceeds the alphabet size.
451
+ // For example, the bitmask for the alphabet size 30 is 31 (00011111).
322
452
  let mask = (2 << 31 - Math.clz32(alphabet.length - 1 | 1)) - 1;
453
+ // Though, the bitmask solution is not perfect since the bytes exceeding
454
+ // the alphabet size are refused. Therefore, to reliably generate the ID,
455
+ // the random bytes redundancy has to be satisfied.
456
+ // Note: every hardware random generator call is performance expensive,
457
+ // because the system call for entropy collection takes a lot of time.
458
+ // So, to avoid additional system calls, extra bytes are requested in advance.
459
+ // Next, a step determines how many random bytes to generate.
460
+ // The number of random bytes gets decided upon the ID size, mask,
461
+ // alphabet size, and magic number 1.6 (using 1.6 peaks at performance
462
+ // according to benchmarks).
323
463
  let step = Math.ceil(1.6 * mask * defaultSize / alphabet.length);
324
464
  return (size = defaultSize)=>{
325
465
  let id = '';
326
466
  while(true){
327
467
  let bytes = getRandom(step);
468
+ // A compact alternative for `for (let i = 0; i < step; i++)`.
328
469
  let i = step;
329
470
  while(i--){
471
+ // Adding `|| ''` refuses a random byte that exceeds the alphabet size.
330
472
  id += alphabet[bytes[i] & mask] || '';
331
473
  if (id.length === size) return id;
332
474
  }
@@ -335,13 +477,304 @@ let customRandom = (alphabet, defaultSize, getRandom)=>{
335
477
  };
336
478
  let customAlphabet = (alphabet, size = 21)=>customRandom(alphabet, size, random);
337
479
 
480
+ /*
481
+ * Copyright (c) 2024.
482
+ * Author Peter Placzek (tada5hi)
483
+ * For the full copyright and license information,
484
+ * view the LICENSE file that was distributed with this source code.
485
+ */ var AsymmetricCryptoAlgorithmName = /*#__PURE__*/ function(AsymmetricCryptoAlgorithmName) {
486
+ AsymmetricCryptoAlgorithmName["RSA_OAEP"] = "RSA-OAEP";
487
+ AsymmetricCryptoAlgorithmName["ECDH"] = "ECDH";
488
+ return AsymmetricCryptoAlgorithmName;
489
+ }({});
490
+ /*
491
+ * Copyright (c) 2024.
492
+ * Author Peter Placzek (tada5hi)
493
+ * For the full copyright and license information,
494
+ * view the LICENSE file that was distributed with this source code.
495
+ */ function asyncGeneratorStep$2$1(gen, resolve, reject, _next, _throw, key, arg) {
496
+ try {
497
+ var info = gen[key](arg);
498
+ var value = info.value;
499
+ } catch (error) {
500
+ reject(error);
501
+ return;
502
+ }
503
+ if (info.done) {
504
+ resolve(value);
505
+ } else {
506
+ Promise.resolve(value).then(_next, _throw);
507
+ }
508
+ }
509
+ function _async_to_generator$2$1(fn) {
510
+ return function() {
511
+ var self = this, args = arguments;
512
+ return new Promise(function(resolve, reject) {
513
+ var gen = fn.apply(self, args);
514
+ function _next(value) {
515
+ asyncGeneratorStep$2$1(gen, resolve, reject, _next, _throw, "next", value);
516
+ }
517
+ function _throw(err) {
518
+ asyncGeneratorStep$2$1(gen, resolve, reject, _next, _throw, "throw", err);
519
+ }
520
+ _next(undefined);
521
+ });
522
+ };
523
+ }
524
+ function arrayBufferToBase64(arrayBuffer) {
525
+ return btoa(String.fromCharCode.apply(null, new Uint8Array(arrayBuffer)));
526
+ }
527
+ function exportAsymmetricPublicKey(key) {
528
+ return _exportAsymmetricPublicKey.apply(this, arguments);
529
+ }
530
+ function _exportAsymmetricPublicKey() {
531
+ _exportAsymmetricPublicKey = _async_to_generator$2$1(function*(key) {
532
+ const exported = yield crypto.subtle.exportKey('spki', key);
533
+ return `-----BEGIN PUBLIC KEY-----\n${arrayBufferToBase64(exported)}\n-----END PUBLIC KEY-----`;
534
+ });
535
+ return _exportAsymmetricPublicKey.apply(this, arguments);
536
+ }
537
+ function exportAsymmetricPrivateKey(key) {
538
+ return _exportAsymmetricPrivateKey.apply(this, arguments);
539
+ }
540
+ function _exportAsymmetricPrivateKey() {
541
+ _exportAsymmetricPrivateKey = _async_to_generator$2$1(function*(key) {
542
+ const exported = yield crypto.subtle.exportKey('pkcs8', key);
543
+ return `-----BEGIN PRIVATE KEY-----\n${arrayBufferToBase64(exported)}\n-----END PRIVATE KEY-----`;
544
+ });
545
+ return _exportAsymmetricPrivateKey.apply(this, arguments);
546
+ }
547
+ /*
548
+ * Copyright (c) 2024.
549
+ * Author Peter Placzek (tada5hi)
550
+ * For the full copyright and license information,
551
+ * view the LICENSE file that was distributed with this source code.
552
+ */ function asyncGeneratorStep$1$1(gen, resolve, reject, _next, _throw, key, arg) {
553
+ try {
554
+ var info = gen[key](arg);
555
+ var value = info.value;
556
+ } catch (error) {
557
+ reject(error);
558
+ return;
559
+ }
560
+ if (info.done) {
561
+ resolve(value);
562
+ } else {
563
+ Promise.resolve(value).then(_next, _throw);
564
+ }
565
+ }
566
+ function _async_to_generator$1$1(fn) {
567
+ return function() {
568
+ var self = this, args = arguments;
569
+ return new Promise(function(resolve, reject) {
570
+ var gen = fn.apply(self, args);
571
+ function _next(value) {
572
+ asyncGeneratorStep$1$1(gen, resolve, reject, _next, _throw, "next", value);
573
+ }
574
+ function _throw(err) {
575
+ asyncGeneratorStep$1$1(gen, resolve, reject, _next, _throw, "throw", err);
576
+ }
577
+ _next(undefined);
578
+ });
579
+ };
580
+ }
581
+ function _define_property$1$1(obj, key, value) {
582
+ if (key in obj) {
583
+ Object.defineProperty(obj, key, {
584
+ value: value,
585
+ enumerable: true,
586
+ configurable: true,
587
+ writable: true
588
+ });
589
+ } else {
590
+ obj[key] = value;
591
+ }
592
+ return obj;
593
+ }
594
+ function _object_spread$4(target) {
595
+ for(var i = 1; i < arguments.length; i++){
596
+ var source = arguments[i] != null ? arguments[i] : {};
597
+ var ownKeys = Object.keys(source);
598
+ if (typeof Object.getOwnPropertySymbols === "function") {
599
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
600
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
601
+ }));
602
+ }
603
+ ownKeys.forEach(function(key) {
604
+ _define_property$1$1(target, key, source[key]);
605
+ });
606
+ }
607
+ return target;
608
+ }
609
+ function ownKeys(object, enumerableOnly) {
610
+ var keys = Object.keys(object);
611
+ if (Object.getOwnPropertySymbols) {
612
+ var symbols = Object.getOwnPropertySymbols(object);
613
+ keys.push.apply(keys, symbols);
614
+ }
615
+ return keys;
616
+ }
617
+ function _object_spread_props(target, source) {
618
+ source = source != null ? source : {};
619
+ if (Object.getOwnPropertyDescriptors) {
620
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
621
+ } else {
622
+ ownKeys(Object(source)).forEach(function(key) {
623
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
624
+ });
625
+ }
626
+ return target;
627
+ }
628
+ class CryptoAsymmetricAlgorithm {
629
+ buildImportParams() {
630
+ if (this.algorithm.name === AsymmetricCryptoAlgorithmName.RSA_OAEP) {
631
+ return {
632
+ name: 'RSA-OAEP',
633
+ hash: 'SHA-256'
634
+ };
635
+ }
636
+ if (this.algorithm.name === AsymmetricCryptoAlgorithmName.ECDH) {
637
+ return {
638
+ name: 'ECDH',
639
+ namedCurve: this.algorithm.namedCurve,
640
+ hash: 'SHA-256'
641
+ };
642
+ }
643
+ throw new Error('Import params could not be created.');
644
+ }
645
+ generateKeyPair() {
646
+ var _this = this;
647
+ return _async_to_generator$1$1(function*() {
648
+ if (_this.algorithm.name === AsymmetricCryptoAlgorithmName.RSA_OAEP) {
649
+ _this.keyPair = yield crypto.subtle.generateKey(_this.algorithm, true, [
650
+ 'encrypt',
651
+ 'decrypt'
652
+ ]);
653
+ return _this.keyPair;
654
+ }
655
+ if (_this.algorithm.name === AsymmetricCryptoAlgorithmName.ECDH) {
656
+ _this.keyPair = yield crypto.subtle.generateKey(_this.algorithm, true, [
657
+ 'deriveKey'
658
+ ]);
659
+ return _this.keyPair;
660
+ }
661
+ throw new Error('The algorithm is not supported for key generation.');
662
+ })();
663
+ }
664
+ useKeyPair() {
665
+ var _this = this;
666
+ return _async_to_generator$1$1(function*() {
667
+ if (typeof _this.keyPair !== 'undefined') {
668
+ return _this.keyPair;
669
+ }
670
+ return _this.generateKeyPair();
671
+ })();
672
+ }
673
+ exportPublicKey() {
674
+ var _this = this;
675
+ return _async_to_generator$1$1(function*() {
676
+ const keyPair = yield _this.useKeyPair();
677
+ return exportAsymmetricPublicKey(keyPair.publicKey);
678
+ })();
679
+ }
680
+ exportPrivateKey() {
681
+ var _this = this;
682
+ return _async_to_generator$1$1(function*() {
683
+ const keyPair = yield _this.useKeyPair();
684
+ return exportAsymmetricPrivateKey(keyPair.privateKey);
685
+ })();
686
+ }
687
+ encrypt(data, remoteKey) {
688
+ var _this = this;
689
+ return _async_to_generator$1$1(function*() {
690
+ const keyPair = yield _this.useKeyPair();
691
+ if (_this.algorithm.name === AsymmetricCryptoAlgorithmName.RSA_OAEP) {
692
+ return crypto.subtle.encrypt({
693
+ name: 'RSA-OAEP'
694
+ }, remoteKey || keyPair.publicKey, data);
695
+ }
696
+ if (_this.algorithm.name === AsymmetricCryptoAlgorithmName.ECDH) {
697
+ if (typeof remoteKey === 'undefined') {
698
+ throw new Error('Remote public key is required.');
699
+ }
700
+ const array = new Uint8Array(16);
701
+ const iv = crypto.getRandomValues(array);
702
+ const key = yield crypto.subtle.deriveKey({
703
+ name: 'ECDH',
704
+ public: remoteKey
705
+ }, keyPair.privateKey, {
706
+ name: 'AES-GCM',
707
+ length: 256
708
+ }, true, [
709
+ 'encrypt'
710
+ ]);
711
+ const arrayBuffer = yield crypto.subtle.encrypt({
712
+ name: 'AES-GCM',
713
+ length: 256,
714
+ iv
715
+ }, key, data);
716
+ const buffer = Buffer.from(arrayBuffer);
717
+ return Buffer.concat([
718
+ iv,
719
+ buffer
720
+ ]);
721
+ }
722
+ throw new Error('Unsupported algorithm for encryption.');
723
+ })();
724
+ }
725
+ decrypt(data, remoteKey) {
726
+ var _this = this;
727
+ return _async_to_generator$1$1(function*() {
728
+ const keyPair = yield _this.useKeyPair();
729
+ if (_this.algorithm.name === AsymmetricCryptoAlgorithmName.RSA_OAEP) {
730
+ return crypto.subtle.decrypt({
731
+ name: 'RSA-OAEP'
732
+ }, keyPair.privateKey, data);
733
+ }
734
+ if (_this.algorithm.name === AsymmetricCryptoAlgorithmName.ECDH) {
735
+ if (typeof remoteKey === 'undefined') {
736
+ throw new Error('Remote public key is required.');
737
+ }
738
+ const iv = data.slice(0, 16);
739
+ const key = yield crypto.subtle.deriveKey({
740
+ name: 'ECDH',
741
+ public: remoteKey
742
+ }, keyPair.privateKey, {
743
+ name: 'AES-GCM',
744
+ length: 256
745
+ }, true, [
746
+ 'decrypt'
747
+ ]);
748
+ return crypto.subtle.decrypt({
749
+ name: 'AES-GCM',
750
+ length: 256,
751
+ iv
752
+ }, key, data.slice(16));
753
+ }
754
+ throw new Error('Unsupported algorithm for decryption.');
755
+ })();
756
+ }
757
+ constructor(algorithm){
758
+ _define_property$1$1(this, "algorithm", undefined);
759
+ _define_property$1$1(this, "keyPair", undefined);
760
+ if (algorithm.name === AsymmetricCryptoAlgorithmName.RSA_OAEP) {
761
+ algorithm = _object_spread_props(_object_spread$4({}, algorithm), {
762
+ publicExponent: new Uint8Array([
763
+ 1,
764
+ 0,
765
+ 1
766
+ ])
767
+ });
768
+ }
769
+ this.algorithm = algorithm;
770
+ }
771
+ }
338
772
  /*
339
773
  * Copyright (c) 2021-2024.
340
774
  * Author Peter Placzek (tada5hi)
341
775
  * For the full copyright and license information,
342
776
  * view the LICENSE file that was distributed with this source code.
343
- */ var PermissionName;
344
- (function(PermissionName) {
777
+ */ var PermissionName = /*#__PURE__*/ function(PermissionName) {
345
778
  PermissionName["BUCKET_CREATE"] = "bucket_create";
346
779
  PermissionName["BUCKET_UPDATE"] = "bucket_update";
347
780
  PermissionName["BUCKET_DELETE"] = "bucket_delete";
@@ -364,7 +797,8 @@ let customAlphabet = (alphabet, size = 21)=>customRandom(alphabet, size, random)
364
797
  PermissionName["MASTER_IMAGE_MANAGE"] = "master_image_manage";
365
798
  PermissionName["MASTER_IMAGE_GROUP_MANAGE"] = "master_image_group_manage";
366
799
  PermissionName["SERVICE_MANAGE"] = "service_manage";
367
- })(PermissionName || (PermissionName = {}));
800
+ return PermissionName;
801
+ }({});
368
802
  /*
369
803
  * Copyright (c) 2021-2024.
370
804
  * Author Peter Placzek (tada5hi)
@@ -377,6 +811,24 @@ function hasOwnProperty(obj, prop) {
377
811
  function isObject$3(item) {
378
812
  return !!item && typeof item === 'object' && !Array.isArray(item);
379
813
  }
814
+ /*
815
+ * Copyright (c) 2021-2024.
816
+ * Author Peter Placzek (tada5hi)
817
+ * For the full copyright and license information,
818
+ * view the LICENSE file that was distributed with this source code.
819
+ */ function isHex(value) {
820
+ return /^[A-Fa-f0-9]+$/i.test(value);
821
+ }
822
+ function hexToUTF8(value) {
823
+ try {
824
+ return decodeURIComponent(`%${value.match(/.{1,2}/g).join('%')}`);
825
+ } catch (e) {
826
+ if (e instanceof URIError) {
827
+ return value;
828
+ }
829
+ throw e;
830
+ }
831
+ }
380
832
  function createNanoID(alphabetOrLen, len) {
381
833
  return customAlphabet('0123456789abcdefghijklmnopqrstuvwxyz', 21)();
382
834
  }
@@ -386,17 +838,6 @@ function createNanoID(alphabetOrLen, len) {
386
838
  * For the full copyright and license information,
387
839
  * view the LICENSE file that was distributed with this source code.
388
840
  */ const alphaNumHyphenUnderscoreRegex = /^[a-z0-9-_]*$/;
389
- /*
390
- * Copyright (c) 2024.
391
- * Author Peter Placzek (tada5hi)
392
- * For the full copyright and license information,
393
- * view the LICENSE file that was distributed with this source code.
394
- */ var EnvironmentName;
395
- (function(EnvironmentName) {
396
- EnvironmentName["TEST"] = "test";
397
- EnvironmentName["DEVELOPMENT"] = "development";
398
- EnvironmentName["PRODUCTION"] = "production";
399
- })(EnvironmentName || (EnvironmentName = {}));
400
841
 
401
842
  /**
402
843
  * Returns true if either scoped or unscoped named slot exists
@@ -722,7 +1163,7 @@ function parseQuery(parametersString = "") {
722
1163
  continue;
723
1164
  }
724
1165
  const value = decodeQueryValue(s[2] || "");
725
- if (object[key] === void 0) {
1166
+ if (object[key] === undefined) {
726
1167
  object[key] = value;
727
1168
  } else if (Array.isArray(object[key])) {
728
1169
  object[key].push(value);
@@ -748,7 +1189,7 @@ function encodeQueryItem(key, value) {
748
1189
  return `${encodeQueryKey(key)}=${encodeQueryValue(value)}`;
749
1190
  }
750
1191
  function stringifyQuery(query) {
751
- return Object.keys(query).filter((k)=>query[k] !== void 0).map((k)=>encodeQueryItem(k, query[k])).filter(Boolean).join("&");
1192
+ return Object.keys(query).filter((k)=>query[k] !== undefined).map((k)=>encodeQueryItem(k, query[k])).filter(Boolean).join("&");
752
1193
  }
753
1194
  const PROTOCOL_STRICT_REGEX = /^[\s\w\0+.-]{2,}:([/\\]{1,2})/;
754
1195
  const PROTOCOL_REGEX = /^[\s\w\0+.-]{2,}:([/\\]{2})?/;
@@ -963,16 +1404,16 @@ class BaseError extends Error {
963
1404
  var n = Object.defineProperty;
964
1405
  var e = (t, r)=>n(t, "name", {
965
1406
  value: r,
966
- configurable: !0
1407
+ configurable: true
967
1408
  });
968
1409
  var i = Object.defineProperty, c = e((t, r)=>i(t, "name", {
969
1410
  value: r,
970
- configurable: !0
1411
+ configurable: true
971
1412
  }), "e");
972
1413
  function a() {
973
1414
  return {
974
- agent: void 0,
975
- dispatcher: void 0
1415
+ agent: undefined,
1416
+ dispatcher: undefined
976
1417
  };
977
1418
  }
978
1419
  e(a, "createProxy"), c(a, "createProxy");
@@ -1008,35 +1449,35 @@ const Blob = gT.Blob || e$1;
1008
1449
  * Author Peter Placzek (tada5hi)
1009
1450
  * For the full copyright and license information,
1010
1451
  * view the LICENSE file that was distributed with this source code.
1011
- */ var ResponseType;
1012
- (function(ResponseType) {
1452
+ */ var ResponseType = /*#__PURE__*/ function(ResponseType) {
1013
1453
  ResponseType["BLOB"] = "blob";
1014
1454
  ResponseType["STREAM"] = "stream";
1015
1455
  ResponseType["TEXT"] = "text";
1016
1456
  ResponseType["ARRAY_BUFFER"] = "arrayBuffer";
1017
1457
  ResponseType["JSON"] = "json";
1018
- })(ResponseType || (ResponseType = {}));
1019
- var MethodName;
1020
- (function(MethodName) {
1458
+ return ResponseType;
1459
+ }({});
1460
+ var MethodName = /*#__PURE__*/ function(MethodName) {
1021
1461
  MethodName["DELETE"] = "DELETE";
1022
1462
  MethodName["GET"] = "GET";
1023
1463
  MethodName["HEAD"] = "HEAD";
1024
1464
  MethodName["PATCH"] = "PATCH";
1025
1465
  MethodName["POST"] = "POST";
1026
1466
  MethodName["PUT"] = "PUT";
1027
- })(MethodName || (MethodName = {}));
1467
+ return MethodName;
1468
+ }({});
1028
1469
  /*
1029
1470
  * Copyright (c) 2023.
1030
1471
  * Author Peter Placzek (tada5hi)
1031
1472
  * For the full copyright and license information,
1032
1473
  * view the LICENSE file that was distributed with this source code.
1033
- */ var HookName;
1034
- (function(HookName) {
1474
+ */ var HookName = /*#__PURE__*/ function(HookName) {
1035
1475
  HookName["REQUEST"] = "request";
1036
1476
  HookName["REQUEST_ERROR"] = "requestError";
1037
1477
  HookName["RESPONSE"] = "response";
1038
1478
  HookName["RESPONSE_ERROR"] = "responseError";
1039
- })(HookName || (HookName = {}));
1479
+ return HookName;
1480
+ }({});
1040
1481
  function kindOf(input) {
1041
1482
  return Object.prototype.toString.call(input).slice(8, -1).toLowerCase();
1042
1483
  }
@@ -1121,30 +1562,29 @@ function isJSONSerializable(input) {
1121
1562
  * Author Peter Placzek (tada5hi)
1122
1563
  * For the full copyright and license information,
1123
1564
  * view the LICENSE file that was distributed with this source code.
1124
- */ var AuthorizationHeaderType;
1125
- (function(AuthorizationHeaderType) {
1565
+ */ var AuthorizationHeaderType = /*#__PURE__*/ function(AuthorizationHeaderType) {
1126
1566
  AuthorizationHeaderType["BEARER"] = "Bearer";
1127
1567
  AuthorizationHeaderType["BASIC"] = "Basic";
1128
1568
  AuthorizationHeaderType["X_API_KEY"] = "X-API-Key";
1129
1569
  AuthorizationHeaderType["API_KEY"] = "API-Key";
1130
- })(AuthorizationHeaderType || (AuthorizationHeaderType = {}));
1570
+ return AuthorizationHeaderType;
1571
+ }({});
1131
1572
  /*
1132
1573
  * Copyright (c) 2022.
1133
1574
  * Author Peter Placzek (tada5hi)
1134
1575
  * For the full copyright and license information,
1135
1576
  * view the LICENSE file that was distributed with this source code.
1136
- */ var ErrorCode;
1137
- (function(ErrorCode) {
1577
+ */ var ErrorCode = /*#__PURE__*/ function(ErrorCode) {
1138
1578
  ErrorCode["AUTHORIZATION_HEADER_INVALID"] = "auth_header_invalid";
1139
1579
  ErrorCode["AUTHORIZATION_HEADER_PARSE"] = "auth_header_parse";
1140
1580
  ErrorCode["AUTHORIZATION_HEADER_TYPE_PARSE"] = "auth_header_type_parse";
1141
1581
  ErrorCode["CONNECTION_ABORTED"] = "ECONNABORTED";
1142
1582
  ErrorCode["CONNECTION_CLOSED"] = "ECONNRESET";
1143
- })(ErrorCode || (ErrorCode = {}));
1583
+ return ErrorCode;
1584
+ }({});
1144
1585
  class ClientError extends BaseError {
1145
1586
  constructor(ctx){
1146
- super();
1147
- this['@instanceof'] = Symbol.for('ClientError');
1587
+ super(), this['@instanceof'] = Symbol.for('ClientError');
1148
1588
  this.request = ctx.request;
1149
1589
  this.response = ctx.response;
1150
1590
  this.code = ctx.code;
@@ -1224,12 +1664,12 @@ function stringifyAuthorizationHeader(header) {
1224
1664
  * Author Peter Placzek (tada5hi)
1225
1665
  * For the full copyright and license information,
1226
1666
  * view the LICENSE file that was distributed with this source code.
1227
- */ var HeaderName;
1228
- (function(HeaderName) {
1667
+ */ var HeaderName = /*#__PURE__*/ function(HeaderName) {
1229
1668
  HeaderName["ACCEPT"] = "accept";
1230
1669
  HeaderName["AUTHORIZATION"] = "authorization";
1231
1670
  HeaderName["CONTENT_TYPE"] = "content-type";
1232
- })(HeaderName || (HeaderName = {}));
1671
+ return HeaderName;
1672
+ }({});
1233
1673
  function createDefaultRequestTransformer() {
1234
1674
  return (data, headers)=>{
1235
1675
  if (isFormData(data)) {
@@ -1700,7 +2140,7 @@ let Client$1 = class Client {
1700
2140
  function createClient(input) {
1701
2141
  return new Client$1(input);
1702
2142
  }
1703
- function isClient(input) {
2143
+ function isClient$1(input) {
1704
2144
  if (input instanceof Client$1) {
1705
2145
  return true;
1706
2146
  }
@@ -1729,11 +2169,11 @@ createClient();
1729
2169
  class BaseAPI {
1730
2170
  // -----------------------------------------------------------------------------------
1731
2171
  setClient(input) {
1732
- this.client = isClient(input) ? input : createClient(input);
2172
+ this.client = isClient$1(input) ? input : createClient(input);
1733
2173
  }
1734
2174
  // -----------------------------------------------------------------------------------
1735
2175
  constructor(context){
1736
- _define_property$5(this, "client", void 0);
2176
+ _define_property$5(this, "client", undefined);
1737
2177
  context = context || {};
1738
2178
  this.setClient(context.client);
1739
2179
  }
@@ -1743,7 +2183,7 @@ class BaseAPI {
1743
2183
  * Author Peter Placzek (tada5hi)
1744
2184
  * For the full copyright and license information,
1745
2185
  * view the LICENSE file that was distributed with this source code.
1746
- */ function asyncGeneratorStep$d(gen, resolve, reject, _next, _throw, key, arg) {
2186
+ */ function asyncGeneratorStep$e(gen, resolve, reject, _next, _throw, key, arg) {
1747
2187
  try {
1748
2188
  var info = gen[key](arg);
1749
2189
  var value = info.value;
@@ -1757,16 +2197,16 @@ class BaseAPI {
1757
2197
  Promise.resolve(value).then(_next, _throw);
1758
2198
  }
1759
2199
  }
1760
- function _async_to_generator$d(fn) {
2200
+ function _async_to_generator$e(fn) {
1761
2201
  return function() {
1762
2202
  var self = this, args = arguments;
1763
2203
  return new Promise(function(resolve, reject) {
1764
2204
  var gen = fn.apply(self, args);
1765
2205
  function _next(value) {
1766
- asyncGeneratorStep$d(gen, resolve, reject, _next, _throw, "next", value);
2206
+ asyncGeneratorStep$e(gen, resolve, reject, _next, _throw, "next", value);
1767
2207
  }
1768
2208
  function _throw(err) {
1769
- asyncGeneratorStep$d(gen, resolve, reject, _next, _throw, "throw", err);
2209
+ asyncGeneratorStep$e(gen, resolve, reject, _next, _throw, "throw", err);
1770
2210
  }
1771
2211
  _next(undefined);
1772
2212
  });
@@ -1775,21 +2215,21 @@ function _async_to_generator$d(fn) {
1775
2215
  class MasterImageGroupAPI extends BaseAPI {
1776
2216
  getMany(data) {
1777
2217
  var _this = this;
1778
- return _async_to_generator$d(function*() {
2218
+ return _async_to_generator$e(function*() {
1779
2219
  const response = yield _this.client.get(`master-image-groups${rapiq.buildQuery(data)}`);
1780
2220
  return response.data;
1781
2221
  })();
1782
2222
  }
1783
2223
  getOne(id) {
1784
2224
  var _this = this;
1785
- return _async_to_generator$d(function*() {
2225
+ return _async_to_generator$e(function*() {
1786
2226
  const response = yield _this.client.delete(`master-image-groups/${id}`);
1787
2227
  return response.data;
1788
2228
  })();
1789
2229
  }
1790
2230
  delete(id) {
1791
2231
  var _this = this;
1792
- return _async_to_generator$d(function*() {
2232
+ return _async_to_generator$e(function*() {
1793
2233
  const response = yield _this.client.delete(`master-image-groups/${id}`);
1794
2234
  return response.data;
1795
2235
  })();
@@ -1800,7 +2240,7 @@ class MasterImageGroupAPI extends BaseAPI {
1800
2240
  * Author Peter Placzek (tada5hi)
1801
2241
  * For the full copyright and license information,
1802
2242
  * view the LICENSE file that was distributed with this source code.
1803
- */ function asyncGeneratorStep$c(gen, resolve, reject, _next, _throw, key, arg) {
2243
+ */ function asyncGeneratorStep$d(gen, resolve, reject, _next, _throw, key, arg) {
1804
2244
  try {
1805
2245
  var info = gen[key](arg);
1806
2246
  var value = info.value;
@@ -1814,16 +2254,16 @@ class MasterImageGroupAPI extends BaseAPI {
1814
2254
  Promise.resolve(value).then(_next, _throw);
1815
2255
  }
1816
2256
  }
1817
- function _async_to_generator$c(fn) {
2257
+ function _async_to_generator$d(fn) {
1818
2258
  return function() {
1819
2259
  var self = this, args = arguments;
1820
2260
  return new Promise(function(resolve, reject) {
1821
2261
  var gen = fn.apply(self, args);
1822
2262
  function _next(value) {
1823
- asyncGeneratorStep$c(gen, resolve, reject, _next, _throw, "next", value);
2263
+ asyncGeneratorStep$d(gen, resolve, reject, _next, _throw, "next", value);
1824
2264
  }
1825
2265
  function _throw(err) {
1826
- asyncGeneratorStep$c(gen, resolve, reject, _next, _throw, "throw", err);
2266
+ asyncGeneratorStep$d(gen, resolve, reject, _next, _throw, "throw", err);
1827
2267
  }
1828
2268
  _next(undefined);
1829
2269
  });
@@ -1860,28 +2300,28 @@ function _object_spread$3(target) {
1860
2300
  class MasterImageAPI extends BaseAPI {
1861
2301
  getMany(data) {
1862
2302
  var _this = this;
1863
- return _async_to_generator$c(function*() {
2303
+ return _async_to_generator$d(function*() {
1864
2304
  const response = yield _this.client.get(`master-images${rapiq.buildQuery(data)}`);
1865
2305
  return response.data;
1866
2306
  })();
1867
2307
  }
1868
2308
  getOne(id, data) {
1869
2309
  var _this = this;
1870
- return _async_to_generator$c(function*() {
2310
+ return _async_to_generator$d(function*() {
1871
2311
  const response = yield _this.client.get(`master-images/${id}${rapiq.buildQuery(data)}`);
1872
2312
  return response.data;
1873
2313
  })();
1874
2314
  }
1875
2315
  delete(id) {
1876
2316
  var _this = this;
1877
- return _async_to_generator$c(function*() {
2317
+ return _async_to_generator$d(function*() {
1878
2318
  const response = yield _this.client.delete(`master-images/${id}`);
1879
2319
  return response.data;
1880
2320
  })();
1881
2321
  }
1882
2322
  runCommand(command, data = {}) {
1883
2323
  var _this = this;
1884
- return _async_to_generator$c(function*() {
2324
+ return _async_to_generator$d(function*() {
1885
2325
  const actionData = _object_spread$3({
1886
2326
  command
1887
2327
  }, data);
@@ -1890,6 +2330,77 @@ class MasterImageAPI extends BaseAPI {
1890
2330
  })();
1891
2331
  }
1892
2332
  }
2333
+ /*
2334
+ * Copyright (c) 2021-2024.
2335
+ * Author Peter Placzek (tada5hi)
2336
+ * For the full copyright and license information,
2337
+ * view the LICENSE file that was distributed with this source code.
2338
+ */ function asyncGeneratorStep$c(gen, resolve, reject, _next, _throw, key, arg) {
2339
+ try {
2340
+ var info = gen[key](arg);
2341
+ var value = info.value;
2342
+ } catch (error) {
2343
+ reject(error);
2344
+ return;
2345
+ }
2346
+ if (info.done) {
2347
+ resolve(value);
2348
+ } else {
2349
+ Promise.resolve(value).then(_next, _throw);
2350
+ }
2351
+ }
2352
+ function _async_to_generator$c(fn) {
2353
+ return function() {
2354
+ var self = this, args = arguments;
2355
+ return new Promise(function(resolve, reject) {
2356
+ var gen = fn.apply(self, args);
2357
+ function _next(value) {
2358
+ asyncGeneratorStep$c(gen, resolve, reject, _next, _throw, "next", value);
2359
+ }
2360
+ function _throw(err) {
2361
+ asyncGeneratorStep$c(gen, resolve, reject, _next, _throw, "throw", err);
2362
+ }
2363
+ _next(undefined);
2364
+ });
2365
+ };
2366
+ }
2367
+ class MasterImageEventLogAPI extends BaseAPI {
2368
+ getMany(options) {
2369
+ var _this = this;
2370
+ return _async_to_generator$c(function*() {
2371
+ const { data: response } = yield _this.client.get(`master-image-event-logs${rapiq.buildQuery(options)}`);
2372
+ return response;
2373
+ })();
2374
+ }
2375
+ getOne(id) {
2376
+ var _this = this;
2377
+ return _async_to_generator$c(function*() {
2378
+ const { data: response } = yield _this.client.get(`master-image-event-logs/${id}`);
2379
+ return response;
2380
+ })();
2381
+ }
2382
+ delete(id) {
2383
+ var _this = this;
2384
+ return _async_to_generator$c(function*() {
2385
+ const { data: response } = yield _this.client.delete(`master-image-event-logs/${id}`);
2386
+ return response;
2387
+ })();
2388
+ }
2389
+ update(id, data) {
2390
+ var _this = this;
2391
+ return _async_to_generator$c(function*() {
2392
+ const { data: response } = yield _this.client.post(`master-image-event-logs/${id}`, data);
2393
+ return response;
2394
+ })();
2395
+ }
2396
+ create(data) {
2397
+ var _this = this;
2398
+ return _async_to_generator$c(function*() {
2399
+ const { data: response } = yield _this.client.post('master-image-event-logs', data);
2400
+ return response;
2401
+ })();
2402
+ }
2403
+ }
1893
2404
  function nullifyEmptyObjectProperties(data) {
1894
2405
  const keys = Object.keys(data);
1895
2406
  for(let i = 0; i < keys.length; i++){
@@ -2879,13 +3390,16 @@ class AnalysisBucketAPI extends BaseAPI {
2879
3390
  }
2880
3391
  class Client extends Client$1 {
2881
3392
  constructor(config){
2882
- super(config), _define_property(this, "masterImage", void 0), _define_property(this, "masterImageGroup", void 0), _define_property(this, "project", void 0), _define_property(this, "projectNode", void 0), _define_property(this, "registry", void 0), _define_property(this, "registryProject", void 0), _define_property(this, "node", void 0), _define_property(this, "analysis", void 0), _define_property(this, "analysisBucket", void 0), _define_property(this, "analysisBucketFile", void 0), _define_property(this, "analysisLog", void 0), _define_property(this, "analysisNode", void 0), _define_property(this, "analysisPermission", void 0), _define_property(this, "service", void 0);
3393
+ super(config), _define_property(this, "masterImage", undefined), _define_property(this, "masterImageGroup", undefined), _define_property(this, "masterImageEventLog", undefined), _define_property(this, "project", undefined), _define_property(this, "projectNode", undefined), _define_property(this, "registry", undefined), _define_property(this, "registryProject", undefined), _define_property(this, "node", undefined), _define_property(this, "analysis", undefined), _define_property(this, "analysisBucket", undefined), _define_property(this, "analysisBucketFile", undefined), _define_property(this, "analysisLog", undefined), _define_property(this, "analysisNode", undefined), _define_property(this, "analysisPermission", undefined), _define_property(this, "service", undefined);
2883
3394
  this.masterImage = new MasterImageAPI({
2884
3395
  client: this
2885
3396
  });
2886
3397
  this.masterImageGroup = new MasterImageGroupAPI({
2887
3398
  client: this
2888
3399
  });
3400
+ this.masterImageEventLog = new MasterImageEventLogAPI({
3401
+ client: this
3402
+ });
2889
3403
  this.project = new ProjectAPI({
2890
3404
  client: this
2891
3405
  });
@@ -2932,7 +3446,7 @@ class Client extends Client$1 {
2932
3446
  }
2933
3447
 
2934
3448
  function setupBaseHTTPClient(app, client) {
2935
- const storeCreator = clientWebKit.injectStore(app);
3449
+ const storeCreator = clientWebKit.injectStoreFactory(app);
2936
3450
  const store = storeCreator();
2937
3451
  const { refreshToken } = clientWebKit.storeToRefs(store);
2938
3452
  const authupClient = clientWebKit.injectHTTPClient(app);
@@ -2947,26 +3461,28 @@ function setupBaseHTTPClient(app, client) {
2947
3461
  });
2948
3462
  },
2949
3463
  tokenCreated: (response)=>{
2950
- store.handleTokenGrantResponse(response);
3464
+ store.applyTokenGrantResponse(response);
2951
3465
  },
2952
3466
  tokenFailed: ()=>{
2953
3467
  store.logout();
2954
3468
  },
2955
3469
  timer: false
2956
3470
  });
2957
- store.$subscribe((mutation, state)=>{
2958
- if (mutation.storeId !== clientWebKit.STORE_ID) return;
2959
- if (state.accessToken) {
3471
+ const handleAccessTokenEvent = (token)=>{
3472
+ if (token) {
2960
3473
  client.setAuthorizationHeader({
2961
3474
  type: 'Bearer',
2962
- token: state.accessToken
3475
+ token
2963
3476
  });
2964
3477
  tokenHook.mount();
2965
3478
  } else {
2966
3479
  client.unsetAuthorizationHeader();
2967
3480
  tokenHook.unmount();
2968
3481
  }
2969
- });
3482
+ };
3483
+ const dispatcher = clientWebKit.injectStoreDispatcher(app);
3484
+ dispatcher.on(clientWebKit.StoreDispatcherEventName.ACCESS_TOKEN_UPDATED, (token)=>handleAccessTokenEvent(token));
3485
+ handleAccessTokenEvent(store.accessToken);
2970
3486
  }
2971
3487
 
2972
3488
  const symbol$1 = Symbol.for('FCoreHTTPClient');
@@ -3041,18 +3557,15 @@ function injectSocketManager(app) {
3041
3557
  }
3042
3558
 
3043
3559
  function installSocketManager(app, options) {
3044
- const store = clientWebKit.useStore();
3560
+ const store = clientWebKit.injectStore();
3045
3561
  const { accessToken } = clientWebKit.storeToRefs(store);
3046
3562
  const manager = new coreRealtimeKit.ClientManager({
3047
3563
  url: options.baseURL,
3048
3564
  token: ()=>accessToken.value
3049
3565
  });
3050
- const oldValue = vue.ref();
3051
- store.$subscribe((mutation, state)=>{
3052
- if (state.accessToken !== oldValue.value) {
3053
- oldValue.value = state.accessToken;
3054
- Promise.resolve().then(()=>manager.reconnect());
3055
- }
3566
+ const storeDispatcher = clientWebKit.injectStoreDispatcher();
3567
+ storeDispatcher.on(clientWebKit.StoreDispatcherEventName.ACCESS_TOKEN_UPDATED, ()=>{
3568
+ Promise.resolve().then(()=>manager.reconnect());
3056
3569
  });
3057
3570
  provideSocketManager(manager, app);
3058
3571
  }
@@ -3065,7 +3578,7 @@ function createEntitySocket(ctx) {
3065
3578
  };
3066
3579
  }
3067
3580
  const socketManager = injectSocketManager();
3068
- const store = clientWebKit.useStore();
3581
+ const store = clientWebKit.injectStore();
3069
3582
  const storeRefs = clientWebKit.storeToRefs(store);
3070
3583
  const realmId = vue.computed(()=>{
3071
3584
  if (storeRefs.realmName.value === coreKit$1.REALM_MASTER_NAME) {
@@ -3171,8 +3684,7 @@ function createEntitySocket(ctx) {
3171
3684
  vue.onUnmounted(()=>unmount());
3172
3685
  vue.watch(targetId, (val, oldValue)=>{
3173
3686
  if (val !== oldValue) {
3174
- unmount();
3175
- mount();
3687
+ Promise.resolve().then(()=>unmount()).then(()=>mount());
3176
3688
  }
3177
3689
  });
3178
3690
  return {
@@ -3270,18 +3782,28 @@ function createList(context) {
3270
3782
  busy.value = false;
3271
3783
  meta.value.busy = false;
3272
3784
  }
3273
- if (context.loadAll && total.value > data.value.length) {
3274
- await load({
3275
- ...meta.value,
3276
- pagination: {
3277
- ...meta.value.pagination,
3278
- offset: (meta.value.pagination?.offset ?? 0) + (meta.value.pagination?.limit ?? 0)
3279
- }
3280
- });
3785
+ if (context.loadAll) {
3786
+ if (total.value > data.value.length) {
3787
+ await load({
3788
+ ...meta.value,
3789
+ pagination: {
3790
+ ...meta.value.pagination,
3791
+ offset: (meta.value.pagination?.offset ?? 0) + (meta.value.pagination?.limit ?? 0)
3792
+ }
3793
+ });
3794
+ return;
3795
+ }
3796
+ if (context.onLoaded) {
3797
+ context.onLoaded(meta.value);
3798
+ }
3799
+ return;
3800
+ }
3801
+ if (context.onLoaded) {
3802
+ context.onLoaded(meta.value);
3281
3803
  }
3282
3804
  }
3283
3805
  const handleCreated = buildListCreatedHandler(data, (cbEntity)=>{
3284
- total.value--;
3806
+ total.value++;
3285
3807
  if (context.onCreated) {
3286
3808
  context.onCreated(cbEntity, meta.value);
3287
3809
  }
@@ -3321,21 +3843,13 @@ function createList(context) {
3321
3843
  total: total.value
3322
3844
  },
3323
3845
  onCreated (value) {
3324
- if (context.setup.emit) {
3325
- context.setup.emit('created', value);
3326
- }
3327
- total.value++;
3846
+ handleCreated(value);
3328
3847
  },
3329
3848
  onDeleted (value) {
3330
- if (context.setup.emit) {
3331
- context.setup.emit('deleted', value);
3332
- }
3333
- total.value--;
3849
+ handleDeleted(value);
3334
3850
  },
3335
3851
  onUpdated: (value)=>{
3336
- if (context.setup.emit) {
3337
- context.setup.emit('updated', value);
3338
- }
3852
+ handleUpdated(value);
3339
3853
  },
3340
3854
  slotItems: context.setup.slots || {}
3341
3855
  });
@@ -3398,8 +3912,7 @@ function createList(context) {
3398
3912
  };
3399
3913
  }
3400
3914
 
3401
- exports.EntityListSlotName = void 0;
3402
- (function(EntityListSlotName) {
3915
+ var EntityListSlotName = /*#__PURE__*/ function(EntityListSlotName) {
3403
3916
  EntityListSlotName[EntityListSlotName["DEFAULT"] = listControls.SlotName.DEFAULT] = "DEFAULT";
3404
3917
  EntityListSlotName[EntityListSlotName["BODY"] = listControls.SlotName.BODY] = "BODY";
3405
3918
  EntityListSlotName[EntityListSlotName["ITEM"] = listControls.SlotName.ITEM] = "ITEM";
@@ -3409,7 +3922,8 @@ exports.EntityListSlotName = void 0;
3409
3922
  EntityListSlotName[EntityListSlotName["FOOTER"] = listControls.SlotName.FOOTER] = "FOOTER";
3410
3923
  EntityListSlotName[EntityListSlotName["NO_MORE"] = listControls.SlotName.NO_MORE] = "NO_MORE";
3411
3924
  EntityListSlotName[EntityListSlotName["LOADING"] = listControls.SlotName.LOADING] = "LOADING";
3412
- })(exports.EntityListSlotName || (exports.EntityListSlotName = {}));
3925
+ return EntityListSlotName;
3926
+ }({});
3413
3927
 
3414
3928
  /*
3415
3929
  * Copyright (c) 2023-2024.
@@ -3816,109 +4330,6 @@ function createEntityManager(ctx) {
3816
4330
  };
3817
4331
  }
3818
4332
 
3819
- /*
3820
- * Copyright (c) 2024-2024.
3821
- * Author Peter Placzek (tada5hi)
3822
- * For the full copyright and license information,
3823
- * view the LICENSE file that was distributed with this source code.
3824
- */ const BRACKET_NUMBER_REGEX = RegExp("(?<!\\\\)\\[(\\d+)]$");
3825
- /**
3826
- * Convert string to property path array.
3827
- *
3828
- * @see https://github.com/lodash/lodash/blob/main/src/.internal/stringToPath.ts
3829
- * @see https://github.com/chaijs/pathval
3830
- *
3831
- * @param segment
3832
- */ function pathToArray(segment) {
3833
- const str = segment.replace(/([^\\])\[/g, '$1.[');
3834
- const parts = str.match(/(\\\.|[^.]+?)+/g);
3835
- if (!parts) {
3836
- return [];
3837
- }
3838
- const result = [];
3839
- for(let i = 0; i < parts.length; i++){
3840
- if (parts[i] === 'constructor' || parts[i] === '__proto__' || parts[i] === 'prototype') {
3841
- continue;
3842
- }
3843
- const regex = BRACKET_NUMBER_REGEX.exec(parts[i]);
3844
- if (regex) {
3845
- result.push(regex[1]);
3846
- } else {
3847
- result.push(parts[i].replace(/\\([.[\]])/g, '$1'));
3848
- }
3849
- }
3850
- return result;
3851
- }
3852
- /*
3853
- * Copyright (c) 2024.
3854
- * Author Peter Placzek (tada5hi)
3855
- * For the full copyright and license information,
3856
- * view the LICENSE file that was distributed with this source code.
3857
- */ var Character;
3858
- (function(Character) {
3859
- Character["WILDCARD"] = "*";
3860
- Character["GLOBSTAR"] = "**";
3861
- })(Character || (Character = {}));
3862
- /*
3863
- * Copyright (c) 2024.
3864
- * Author Peter Placzek (tada5hi)
3865
- * For the full copyright and license information,
3866
- * view the LICENSE file that was distributed with this source code.
3867
- */ function isObject(input) {
3868
- return !!input && typeof input === 'object' && !Array.isArray(input);
3869
- }
3870
- function getPathValue(data, path) {
3871
- const parts = Array.isArray(path) ? path : pathToArray(path);
3872
- let res;
3873
- let temp = data;
3874
- let index = 0;
3875
- while(index < parts.length){
3876
- if (temp === null || typeof temp === 'undefined') {
3877
- break;
3878
- }
3879
- if (parts[index] in Object(temp)) {
3880
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3881
- // @ts-expect-error
3882
- temp = temp[parts[index]];
3883
- } else {
3884
- break;
3885
- }
3886
- if (index === parts.length - 1) {
3887
- res = temp;
3888
- }
3889
- index++;
3890
- }
3891
- return res;
3892
- }
3893
- const NUMBER_REGEX = /^\d+$/;
3894
- function setPathValue(data, path, value) {
3895
- const parts = Array.isArray(path) ? path : pathToArray(path);
3896
- let temp = data;
3897
- let index = 0;
3898
- while(index < parts.length){
3899
- /* istanbul ignore next */ if (!Array.isArray(temp) && !isObject(temp)) {
3900
- break;
3901
- }
3902
- const key = parts[index];
3903
- // [foo, '0']
3904
- if (typeof temp[key] === 'undefined') {
3905
- const match = NUMBER_REGEX.test(key);
3906
- if (match) {
3907
- temp[key] = [];
3908
- } else {
3909
- temp[key] = {};
3910
- }
3911
- }
3912
- if (index === parts.length - 1) {
3913
- temp[key] = value;
3914
- break;
3915
- }
3916
- index++;
3917
- temp = temp[key];
3918
- }
3919
- return data;
3920
- }
3921
-
3922
4333
  class MemoryStore {
3923
4334
  async get(context) {
3924
4335
  if (!this.data[context.locale] || !this.data[context.locale][context.group]) {
@@ -4146,7 +4557,7 @@ var FMasterImagePicker = vue.defineComponent({
4146
4557
  ref: itemListNode,
4147
4558
  query: imageQuery.value
4148
4559
  }, {
4149
- [exports.EntityListSlotName.BODY]: (props)=>{
4560
+ [EntityListSlotName.BODY]: (props)=>{
4150
4561
  const options = props.data.map((entity)=>({
4151
4562
  id: entity.id,
4152
4563
  value: entity.name
@@ -4189,7 +4600,7 @@ var FMasterImagePicker = vue.defineComponent({
4189
4600
  class: 'col'
4190
4601
  }, [
4191
4602
  vue.h(MasterImageGroupList, {}, {
4192
- [exports.EntityListSlotName.BODY]: (props)=>{
4603
+ [EntityListSlotName.BODY]: (props)=>{
4193
4604
  const options = props.data.map((entity)=>({
4194
4605
  id: entity.virtual_path,
4195
4606
  value: entity.virtual_path
@@ -4225,12 +4636,18 @@ var FMasterImagePicker = vue.defineComponent({
4225
4636
  }
4226
4637
  });
4227
4638
 
4228
- var ElementType;
4229
- (function(ElementType) {
4639
+ /*
4640
+ * Copyright (c) 2024.
4641
+ * Author Peter Placzek (tada5hi)
4642
+ * For the full copyright and license information,
4643
+ * view the LICENSE file that was distributed with this source code.
4644
+ */ var ElementType = /*#__PURE__*/ function(ElementType) {
4230
4645
  ElementType["BUTTON"] = "button";
4231
4646
  ElementType["LINK"] = "link";
4232
4647
  ElementType["DROP_DOWN_ITEM"] = "dropDownItem";
4233
- })(ElementType || (ElementType = {}));
4648
+ return ElementType;
4649
+ }({});
4650
+
4234
4651
  var FEntityDelete = vue.defineComponent({
4235
4652
  name: 'FEntityDelete',
4236
4653
  props: {
@@ -4244,7 +4661,7 @@ var FEntityDelete = vue.defineComponent({
4244
4661
  },
4245
4662
  elementType: {
4246
4663
  type: String,
4247
- default: "button"
4664
+ default: `${ElementType.BUTTON}`
4248
4665
  },
4249
4666
  entityId: {
4250
4667
  type: String,
@@ -4294,10 +4711,10 @@ var FEntityDelete = vue.defineComponent({
4294
4711
  let tag = 'button';
4295
4712
  const data = {};
4296
4713
  switch(props.elementType){
4297
- case "link":
4714
+ case ElementType.LINK:
4298
4715
  tag = 'a';
4299
4716
  break;
4300
- case "dropDownItem":
4717
+ case ElementType.DROP_DOWN_ITEM:
4301
4718
  if (instance && typeof instance.appContext.app.component('BDropdownItem') !== 'undefined') {
4302
4719
  tag = vue.resolveDynamicComponent('BDropdownItem');
4303
4720
  }
@@ -4364,54 +4781,177 @@ var FMasterImagesSync = vue.defineComponent({
4364
4781
  if (itemList.value) {
4365
4782
  itemList.value.handleDeleted(data.id);
4366
4783
  }
4367
- };
4368
- return ()=>vue.h('div', [
4369
- vue.h('p', [
4370
- 'The master images and groups are extracted from the GitHub repository after executing the sync command and are then transferred to the database.' + ' ' + 'In addition, the master images are built and transferred to all registered registry instances.'
4371
- ]),
4784
+ };
4785
+ return ()=>vue.h('div', [
4786
+ vue.h('div', {
4787
+ class: 'mb-1'
4788
+ }, [
4789
+ vue.h('button', {
4790
+ type: 'button',
4791
+ disabled: busy.value,
4792
+ class: 'btn btn-xs btn-success',
4793
+ onClick (event) {
4794
+ event.preventDefault();
4795
+ return syncMasterImages();
4796
+ }
4797
+ }, [
4798
+ vue.h('i', {
4799
+ class: 'fa fa-sync me-1'
4800
+ }),
4801
+ 'Sync'
4802
+ ])
4803
+ ]),
4804
+ vue.h(MasterImageList, {
4805
+ ref: itemList
4806
+ }, {
4807
+ [EntityListSlotName.ITEM_ACTIONS]: (props)=>vue.h(FEntityDelete, {
4808
+ class: 'btn btn-xs btn-danger',
4809
+ elementType: 'button',
4810
+ entityId: props.data.id,
4811
+ entityType: coreKit.DomainType.MASTER_IMAGE,
4812
+ withText: false,
4813
+ onDeleted (item) {
4814
+ return handleDeleted(item);
4815
+ }
4816
+ })
4817
+ })
4818
+ ]);
4819
+ }
4820
+ });
4821
+
4822
+ var FMasterImageEventLog = vue.defineComponent({
4823
+ props: {
4824
+ index: {
4825
+ type: Number,
4826
+ default: 0
4827
+ },
4828
+ entity: {
4829
+ type: Object,
4830
+ required: true
4831
+ }
4832
+ },
4833
+ setup (props) {
4834
+ const entity = vue.toRef(props, 'entity');
4835
+ const message = [
4836
+ 'Event '
4837
+ ];
4838
+ message.push(vue.h('strong', `${entity.value.name}`));
4839
+ if (entity.value.master_image) {
4840
+ message.push(vue.h('span', {
4841
+ class: 'ms-1'
4842
+ }, [
4843
+ `(${entity.value.master_image.virtual_path})`
4844
+ ]));
4845
+ }
4846
+ message.push(' triggered.');
4847
+ // todo: render entity.value.data depending on event name
4848
+ return ()=>vue.h('div', {
4849
+ class: `line line-${props.index + 1}`
4850
+ }, [
4851
+ vue.h('div', {
4852
+ class: 'd-flex flex-row'
4853
+ }, [
4854
+ vue.h('div', {
4855
+ class: 'line-number'
4856
+ }, [
4857
+ props.index + 1
4858
+ ]),
4859
+ vue.h('div', {
4860
+ class: 'line-content d-flex flex-row'
4861
+ }, [
4862
+ vue.h('div', {
4863
+ class: [
4864
+ 'line-message'
4865
+ ]
4866
+ }, [
4867
+ message
4868
+ ]),
4869
+ vue.h('div', {
4870
+ class: 'ms-auto'
4871
+ }, [
4872
+ vue.h(timeago.VCTimeago, {
4873
+ datetime: entity.value.created_at
4874
+ })
4875
+ ])
4876
+ ])
4877
+ ])
4878
+ ]);
4879
+ }
4880
+ });
4881
+
4882
+ var FMasterImageEventLogs = vue.defineComponent({
4883
+ setup (props, setup) {
4884
+ const rootNode = vue.ref(null);
4885
+ const scrollToLastLine = (meta)=>{
4886
+ if (!rootNode.value) {
4887
+ return;
4888
+ }
4889
+ const el = rootNode.value.getElementsByClassName(`line-${meta.total}`)[0];
4890
+ if (el) {
4891
+ el.scrollIntoView({
4892
+ behavior: 'smooth'
4893
+ });
4894
+ }
4895
+ };
4896
+ const { render, setDefaults } = createList({
4897
+ type: `${coreKit.DomainType.MASTER_IMAGE_EVENT_LOG}`,
4898
+ onCreated (_entity, meta) {
4899
+ scrollToLastLine(meta);
4900
+ },
4901
+ onLoaded (meta) {
4902
+ vue.nextTick(()=>{
4903
+ scrollToLastLine(meta);
4904
+ });
4905
+ },
4906
+ socket: {
4907
+ processEvent (event) {
4908
+ return event.meta.roomName !== coreKit.buildDomainChannelName(coreKit.DomainType.MASTER_IMAGE_EVENT_LOG);
4909
+ }
4910
+ },
4911
+ props,
4912
+ setup,
4913
+ loadAll: true,
4914
+ query: {
4915
+ sort: {
4916
+ created_at: 'ASC'
4917
+ },
4918
+ relations: {
4919
+ master_image: true
4920
+ }
4921
+ }
4922
+ });
4923
+ setDefaults({
4924
+ noMore: {
4925
+ content: 'No more logs available...'
4926
+ },
4927
+ item: {
4928
+ content (item, slotProps) {
4929
+ return vue.h(FMasterImageEventLog, {
4930
+ entity: item,
4931
+ index: slotProps.index,
4932
+ onDeleted () {
4933
+ if (slotProps && slotProps.deleted) {
4934
+ slotProps.deleted(item);
4935
+ }
4936
+ },
4937
+ onUpdated: (e)=>{
4938
+ if (slotProps && slotProps.updated) {
4939
+ slotProps.updated(e);
4940
+ }
4941
+ }
4942
+ });
4943
+ }
4944
+ }
4945
+ });
4946
+ return ()=>vue.h('div', {
4947
+ ref: rootNode,
4948
+ class: 'log-container'
4949
+ }, [
4372
4950
  vue.h('div', {
4373
- class: 'mb-1'
4951
+ class: 'log-body'
4374
4952
  }, [
4375
- vue.h('button', {
4376
- type: 'button',
4377
- disabled: busy.value,
4378
- class: 'btn btn-xs btn-success',
4379
- onClick (event) {
4380
- event.preventDefault();
4381
- return syncMasterImages();
4382
- }
4383
- }, [
4384
- vue.h('i', {
4385
- class: 'fa fa-sync me-1'
4386
- }),
4387
- 'Sync'
4388
- ])
4389
- ]),
4390
- vue.h(MasterImageList, {
4391
- ref: itemList,
4392
- scopedSlots: {
4393
- [exports.EntityListSlotName.HEADER]: (props)=>[
4394
- vue.h(clientWebKit.ASearch, {
4395
- load: props.load,
4396
- meta: props.meta,
4397
- busy: props.busy
4398
- }),
4399
- vue.h('strong', [
4400
- 'Overview'
4401
- ])
4402
- ],
4403
- [exports.EntityListSlotName.ITEM_ACTIONS]: (props)=>vue.h(FEntityDelete, {
4404
- class: 'btn btn-xs btn-danger',
4405
- elementType: 'button',
4406
- entityId: props.data.id,
4407
- entityType: coreKit.DomainType.MASTER_IMAGE,
4408
- withText: false,
4409
- onDeleted (item) {
4410
- return handleDeleted(item);
4411
- }
4412
- })
4413
- }
4414
- })
4953
+ render()
4954
+ ])
4415
4955
  ]);
4416
4956
  }
4417
4957
  });
@@ -4556,7 +5096,9 @@ const FProjectNodeApprovalCommand = vue.defineComponent({
4556
5096
  emit('failed', e);
4557
5097
  }
4558
5098
  });
4559
- const isAllowed = clientWebKit.useAbilityCheck(PermissionName.PROJECT_APPROVE);
5099
+ const isAllowed = clientWebKit.usePermissionCheck({
5100
+ name: PermissionName.PROJECT_APPROVE
5101
+ });
4560
5102
  return ()=>renderActionCommand({
4561
5103
  execute,
4562
5104
  elementType: props.elementType,
@@ -4676,16 +5218,6 @@ var FProjectNodeAssignAction = vue.defineComponent({
4676
5218
  }
4677
5219
  });
4678
5220
 
4679
- var Direction$3;
4680
- (function(Direction) {
4681
- Direction["IN"] = "in";
4682
- Direction["OUT"] = "out";
4683
- })(Direction$3 || (Direction$3 = {}));
4684
- var Target$1;
4685
- (function(Target) {
4686
- Target["PROJECT"] = "project";
4687
- Target["NODE"] = "node";
4688
- })(Target$1 || (Target$1 = {}));
4689
5221
  var FProjectNode = vue.defineComponent({
4690
5222
  props: {
4691
5223
  entity: {
@@ -4778,11 +5310,6 @@ var FProjectNode = vue.defineComponent({
4778
5310
  }
4779
5311
  });
4780
5312
 
4781
- var Direction$2;
4782
- (function(Direction) {
4783
- Direction["IN"] = "in";
4784
- Direction["OUT"] = "out";
4785
- })(Direction$2 || (Direction$2 = {}));
4786
5313
  var FProjectNodes = vue.defineComponent({
4787
5314
  props: {
4788
5315
  ...defineListProps(),
@@ -4799,7 +5326,7 @@ var FProjectNodes = vue.defineComponent({
4799
5326
  },
4800
5327
  direction: {
4801
5328
  type: String,
4802
- default: "out"
5329
+ default: `${"out"}`
4803
5330
  },
4804
5331
  includeNode: {
4805
5332
  type: Boolean,
@@ -5056,7 +5583,7 @@ const FProjectInForm = vue.defineComponent({
5056
5583
  }
5057
5584
  });
5058
5585
 
5059
- var _sfc_main$f = vue.defineComponent({
5586
+ var _sfc_main$h = vue.defineComponent({
5060
5587
  components: {
5061
5588
  BModal: bootstrapVueNext.BModal,
5062
5589
  FProjectInForm,
@@ -5103,99 +5630,56 @@ var _sfc_main$f = vue.defineComponent({
5103
5630
  }
5104
5631
  });
5105
5632
 
5106
- const _hoisted_1$d = {
5633
+ const _hoisted_1$f = {
5107
5634
  class: "d-flex flex-column gap-1 w-100"
5108
5635
  };
5109
- const _hoisted_2$d = {
5636
+ const _hoisted_2$e = {
5110
5637
  class: "w-100"
5111
5638
  };
5112
- const _hoisted_3$d = {
5639
+ const _hoisted_3$c = {
5113
5640
  class: "d-flex flex-row align-items-center"
5114
5641
  };
5115
- const _hoisted_4$c = /* @__PURE__ */ vue.createElementVNode("i", {
5116
- class: "fas fa-project-diagram me-1"
5117
- }, null, -1);
5118
- const _hoisted_5$a = {
5642
+ const _hoisted_4$c = {
5119
5643
  class: "ms-auto d-flex flex-row gap-1"
5120
5644
  };
5121
- const _hoisted_6$8 = /* @__PURE__ */ vue.createElementVNode("i", {
5122
- class: "fa fa-bars"
5123
- }, null, -1);
5124
- const _hoisted_7$6 = /* @__PURE__ */ vue.createElementVNode("i", {
5125
- class: "fa fa-comment-alt"
5126
- }, null, -1);
5127
- const _hoisted_8$6 = [
5128
- _hoisted_7$6
5129
- ];
5130
- const _hoisted_9$6 = {
5645
+ const _hoisted_5$8 = {
5131
5646
  class: "row"
5132
5647
  };
5133
- const _hoisted_10$5 = {
5648
+ const _hoisted_6$7 = {
5134
5649
  class: "col-12 col-md-4 d-flex align-items-center flex-column"
5135
5650
  };
5136
- const _hoisted_11$4 = /* @__PURE__ */ vue.createElementVNode("div", null, [
5137
- /* @__PURE__ */ vue.createElementVNode("strong", null, [
5138
- /* @__PURE__ */ vue.createElementVNode("i", {
5139
- class: "fa-solid fa-server"
5140
- }),
5141
- /* @__PURE__ */ vue.createTextVNode(" Node")
5142
- ])
5143
- ], -1);
5144
- const _hoisted_12$4 = {
5651
+ const _hoisted_7$6 = {
5145
5652
  class: "col-12 col-md-4 d-flex align-items-center flex-column"
5146
5653
  };
5147
- const _hoisted_13$3 = /* @__PURE__ */ vue.createElementVNode("div", null, [
5148
- /* @__PURE__ */ vue.createElementVNode("strong", null, [
5149
- /* @__PURE__ */ vue.createElementVNode("i", {
5150
- class: "fa-solid fa-heartbeat"
5151
- }),
5152
- /* @__PURE__ */ vue.createTextVNode(" Status")
5153
- ])
5154
- ], -1);
5155
- const _hoisted_14$3 = {
5654
+ const _hoisted_8$6 = {
5156
5655
  class: "col-12 col-md-4 d-flex align-items-center flex-column"
5157
5656
  };
5158
- const _hoisted_15$3 = /* @__PURE__ */ vue.createElementVNode("div", null, [
5159
- /* @__PURE__ */ vue.createElementVNode("strong", null, [
5160
- /* @__PURE__ */ vue.createElementVNode("i", {
5161
- class: "fa-solid fa-user"
5162
- }),
5163
- /* @__PURE__ */ vue.createTextVNode(" Creator")
5164
- ])
5165
- ], -1);
5166
- const _hoisted_16$3 = {
5657
+ const _hoisted_9$4 = {
5167
5658
  class: "d-flex flex-row"
5168
5659
  };
5169
- const _hoisted_17$3 = {
5660
+ const _hoisted_10$4 = {
5170
5661
  class: ""
5171
5662
  };
5172
- const _hoisted_18$3 = /* @__PURE__ */ vue.createElementVNode("span", {
5173
- class: "text-muted"
5174
- }, " created ", -1);
5175
- const _hoisted_19$1 = {
5663
+ const _hoisted_11$3 = {
5176
5664
  class: "ms-auto"
5177
5665
  };
5178
- const _hoisted_20$1 = /* @__PURE__ */ vue.createElementVNode("span", {
5179
- class: "text-muted"
5180
- }, " updated ", -1);
5181
- const _hoisted_21$1 = /* @__PURE__ */ vue.createElementVNode("i", {
5182
- class: "fas fa-file-import"
5183
- }, null, -1);
5184
- function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5666
+ function _sfc_render$h(_ctx, _cache, $props, $setup, $data, $options) {
5185
5667
  const _component_VCLink = vue.resolveComponent("VCLink");
5186
5668
  const _component_FProjectNodeApprovalCommand = vue.resolveComponent("FProjectNodeApprovalCommand");
5187
5669
  const _component_FProjectNodeApprovalStatus = vue.resolveComponent("FProjectNodeApprovalStatus");
5188
5670
  const _component_VCTimeago = vue.resolveComponent("VCTimeago");
5189
5671
  const _component_FProjectInForm = vue.resolveComponent("FProjectInForm");
5190
5672
  const _component_BModal = vue.resolveComponent("BModal");
5191
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$d, [
5192
- vue.createElementVNode("div", _hoisted_2$d, [
5193
- vue.createElementVNode("div", _hoisted_3$d, [
5673
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$f, [
5674
+ vue.createElementVNode("div", _hoisted_2$e, [
5675
+ vue.createElementVNode("div", _hoisted_3$c, [
5194
5676
  vue.createElementVNode("div", null, [
5195
5677
  vue.renderSlot(_ctx.$slots, "title", {
5196
5678
  data: _ctx.entity
5197
5679
  }, ()=>[
5198
- _hoisted_4$c,
5680
+ _cache[2] || (_cache[2] = vue.createElementVNode("i", {
5681
+ class: "fas fa-project-diagram me-1"
5682
+ }, null, -1)),
5199
5683
  vue.createVNode(_component_VCLink, {
5200
5684
  to: "/projects/" + _ctx.entity.project.id,
5201
5685
  class: "mb-0"
@@ -5209,7 +5693,7 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5209
5693
  ])
5210
5694
  ])
5211
5695
  ]),
5212
- vue.createElementVNode("div", _hoisted_5$a, [
5696
+ vue.createElementVNode("div", _hoisted_4$c, [
5213
5697
  vue.renderSlot(_ctx.$slots, "itemActions", {
5214
5698
  data: _ctx.entity
5215
5699
  }, ()=>[
@@ -5218,9 +5702,11 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5218
5702
  disabled: _ctx.busy,
5219
5703
  class: "btn btn-xs btn-dark"
5220
5704
  }, {
5221
- default: vue.withCtx(()=>[
5222
- _hoisted_6$8
5223
- ]),
5705
+ default: vue.withCtx(()=>_cache[3] || (_cache[3] = [
5706
+ vue.createElementVNode("i", {
5707
+ class: "fa fa-bars"
5708
+ }, null, -1)
5709
+ ])),
5224
5710
  _: 1
5225
5711
  }, 8, [
5226
5712
  "to",
@@ -5232,7 +5718,11 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5232
5718
  onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args)=>_ctx.toggleModal && _ctx.toggleModal(...args), [
5233
5719
  "prevent"
5234
5720
  ]))
5235
- }, _hoisted_8$6),
5721
+ }, _cache[4] || (_cache[4] = [
5722
+ vue.createElementVNode("i", {
5723
+ class: "fa fa-comment-alt"
5724
+ }, null, -1)
5725
+ ])),
5236
5726
  vue.createVNode(_component_FProjectNodeApprovalCommand, {
5237
5727
  "entity-id": _ctx.entity.id,
5238
5728
  "approval-status": _ctx.entity.approval_status,
@@ -5266,13 +5756,27 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5266
5756
  vue.renderSlot(_ctx.$slots, "body", {
5267
5757
  data: _ctx.entity
5268
5758
  }, ()=>[
5269
- vue.createElementVNode("div", _hoisted_9$6, [
5270
- vue.createElementVNode("div", _hoisted_10$5, [
5271
- _hoisted_11$4,
5759
+ vue.createElementVNode("div", _hoisted_5$8, [
5760
+ vue.createElementVNode("div", _hoisted_6$7, [
5761
+ _cache[5] || (_cache[5] = vue.createElementVNode("div", null, [
5762
+ vue.createElementVNode("strong", null, [
5763
+ vue.createElementVNode("i", {
5764
+ class: "fa-solid fa-server"
5765
+ }),
5766
+ vue.createTextVNode(" Node")
5767
+ ])
5768
+ ], -1)),
5272
5769
  vue.createElementVNode("div", null, vue.toDisplayString(_ctx.entity.node.name), 1)
5273
5770
  ]),
5274
- vue.createElementVNode("div", _hoisted_12$4, [
5275
- _hoisted_13$3,
5771
+ vue.createElementVNode("div", _hoisted_7$6, [
5772
+ _cache[6] || (_cache[6] = vue.createElementVNode("div", null, [
5773
+ vue.createElementVNode("strong", null, [
5774
+ vue.createElementVNode("i", {
5775
+ class: "fa-solid fa-heartbeat"
5776
+ }),
5777
+ vue.createTextVNode(" Status")
5778
+ ])
5779
+ ], -1)),
5276
5780
  vue.createElementVNode("div", null, [
5277
5781
  vue.createVNode(_component_FProjectNodeApprovalStatus, {
5278
5782
  status: _ctx.entity.approval_status
@@ -5288,8 +5792,15 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5288
5792
  ])
5289
5793
  ])
5290
5794
  ]),
5291
- vue.createElementVNode("div", _hoisted_14$3, [
5292
- _hoisted_15$3,
5795
+ vue.createElementVNode("div", _hoisted_8$6, [
5796
+ _cache[7] || (_cache[7] = vue.createElementVNode("div", null, [
5797
+ vue.createElementVNode("strong", null, [
5798
+ vue.createElementVNode("i", {
5799
+ class: "fa-solid fa-user"
5800
+ }),
5801
+ vue.createTextVNode(" Creator")
5802
+ ])
5803
+ ], -1)),
5293
5804
  vue.createElementVNode("div", null, [
5294
5805
  _ctx.entity.project.user_id ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, {
5295
5806
  key: 0
@@ -5298,7 +5809,7 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5298
5809
  ], 64)) : _ctx.entity.project.robot_id ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, {
5299
5810
  key: 1
5300
5811
  }, [
5301
- vue.createTextVNode(vue.toDisplayString(_ctx.entity.project.project.robot_id), 1)
5812
+ vue.createTextVNode(vue.toDisplayString(_ctx.entity.project.robot_id), 1)
5302
5813
  ], 64)) : vue.createCommentVNode("", true)
5303
5814
  ])
5304
5815
  ])
@@ -5307,10 +5818,12 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5307
5818
  vue.renderSlot(_ctx.$slots, "footer", {
5308
5819
  data: _ctx.entity
5309
5820
  }, ()=>[
5310
- vue.createElementVNode("div", _hoisted_16$3, [
5311
- vue.createElementVNode("div", _hoisted_17$3, [
5821
+ vue.createElementVNode("div", _hoisted_9$4, [
5822
+ vue.createElementVNode("div", _hoisted_10$4, [
5312
5823
  vue.createElementVNode("small", null, [
5313
- _hoisted_18$3,
5824
+ _cache[8] || (_cache[8] = vue.createElementVNode("span", {
5825
+ class: "text-muted"
5826
+ }, " created ", -1)),
5314
5827
  vue.createVNode(_component_VCTimeago, {
5315
5828
  datetime: _ctx.entity.created_at
5316
5829
  }, null, 8, [
@@ -5318,9 +5831,11 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5318
5831
  ])
5319
5832
  ])
5320
5833
  ]),
5321
- vue.createElementVNode("div", _hoisted_19$1, [
5834
+ vue.createElementVNode("div", _hoisted_11$3, [
5322
5835
  vue.createElementVNode("small", null, [
5323
- _hoisted_20$1,
5836
+ _cache[9] || (_cache[9] = vue.createElementVNode("span", {
5837
+ class: "text-muted"
5838
+ }, " updated ", -1)),
5324
5839
  vue.createVNode(_component_VCTimeago, {
5325
5840
  datetime: _ctx.entity.updated_at
5326
5841
  }, null, 8, [
@@ -5340,7 +5855,9 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5340
5855
  "hide-footer": true
5341
5856
  }, {
5342
5857
  title: vue.withCtx(()=>[
5343
- _hoisted_21$1,
5858
+ _cache[10] || (_cache[10] = vue.createElementVNode("i", {
5859
+ class: "fas fa-file-import"
5860
+ }, null, -1)),
5344
5861
  vue.createTextVNode(" Project " + vue.toDisplayString(_ctx.entity.project.name), 1)
5345
5862
  ]),
5346
5863
  default: vue.withCtx(()=>[
@@ -5365,10 +5882,10 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5365
5882
  ])
5366
5883
  ]);
5367
5884
  }
5368
- var FProjectNodeInCard = /* @__PURE__ */ _export_sfc(_sfc_main$f, [
5885
+ var FProjectNodeInCard = /* @__PURE__ */ _export_sfc(_sfc_main$h, [
5369
5886
  [
5370
5887
  "render",
5371
- _sfc_render$f
5888
+ _sfc_render$h
5372
5889
  ]
5373
5890
  ]);
5374
5891
 
@@ -5587,14 +6104,14 @@ const FProjectForm = vue.defineComponent({
5587
6104
  }
5588
6105
  }
5589
6106
  }, {
5590
- [exports.EntityListSlotName.HEADER]: (props)=>[
6107
+ [EntityListSlotName.HEADER]: (props)=>[
5591
6108
  vue.h('label', 'Nodes'),
5592
6109
  vue.h(FSearch, {
5593
6110
  load: props.load,
5594
6111
  meta: props.meta
5595
6112
  })
5596
6113
  ],
5597
- [exports.EntityListSlotName.ITEM_ACTIONS]: (props)=>{
6114
+ [EntityListSlotName.ITEM_ACTIONS]: (props)=>{
5598
6115
  if (manager.data.value) {
5599
6116
  return vue.h(FProjectNodeAssignAction, {
5600
6117
  key: props.data.id,
@@ -5641,7 +6158,7 @@ const FProjectForm = vue.defineComponent({
5641
6158
  }
5642
6159
  });
5643
6160
 
5644
- var _sfc_main$e = vue.defineComponent({
6161
+ var _sfc_main$g = vue.defineComponent({
5645
6162
  components: {
5646
6163
  FEntityDelete,
5647
6164
  VCLink: link.VCLink,
@@ -5662,7 +6179,9 @@ var _sfc_main$e = vue.defineComponent({
5662
6179
  ],
5663
6180
  slots: Object,
5664
6181
  setup (_props, { emit }) {
5665
- const canDelete = clientWebKit.useAbilityCheck(PermissionName.PROJECT_DELETE);
6182
+ const canDelete = clientWebKit.usePermissionCheck({
6183
+ name: PermissionName.PROJECT_DELETE
6184
+ });
5666
6185
  const handleDeleted = (data)=>{
5667
6186
  emit('deleted', data);
5668
6187
  };
@@ -5673,87 +6192,53 @@ var _sfc_main$e = vue.defineComponent({
5673
6192
  }
5674
6193
  });
5675
6194
 
5676
- const _hoisted_1$c = {
6195
+ const _hoisted_1$e = {
5677
6196
  class: "d-flex flex-column w-100"
5678
6197
  };
5679
- const _hoisted_2$c = {
6198
+ const _hoisted_2$d = {
5680
6199
  class: "w-100"
5681
6200
  };
5682
- const _hoisted_3$c = {
6201
+ const _hoisted_3$b = {
5683
6202
  class: "d-flex flex-row align-items-center"
5684
6203
  };
5685
- const _hoisted_4$b = /* @__PURE__ */ vue.createElementVNode("i", {
5686
- class: "fas fa-project-diagram me-1"
5687
- }, null, -1);
5688
- const _hoisted_5$9 = {
6204
+ const _hoisted_4$b = {
5689
6205
  class: "ms-auto"
5690
6206
  };
5691
- const _hoisted_6$7 = /* @__PURE__ */ vue.createElementVNode("i", {
5692
- class: "fa fa-bars"
5693
- }, null, -1);
5694
- const _hoisted_7$5 = {
6207
+ const _hoisted_5$7 = {
5695
6208
  class: "d-flex justify-content-between flex-row"
5696
6209
  };
5697
- const _hoisted_8$5 = {
6210
+ const _hoisted_6$6 = {
5698
6211
  class: "d-flex flex-grow-1 align-items-center flex-column"
5699
6212
  };
5700
- const _hoisted_9$5 = /* @__PURE__ */ vue.createElementVNode("div", null, [
5701
- /* @__PURE__ */ vue.createElementVNode("strong", null, [
5702
- /* @__PURE__ */ vue.createElementVNode("i", {
5703
- class: "fa fa-microscope"
5704
- }),
5705
- /* @__PURE__ */ vue.createTextVNode(" Analyses")
5706
- ])
5707
- ], -1);
5708
- const _hoisted_10$4 = {
6213
+ const _hoisted_7$5 = {
5709
6214
  class: "d-flex flex-grow-1 align-items-center flex-column"
5710
6215
  };
5711
- const _hoisted_11$3 = /* @__PURE__ */ vue.createElementVNode("div", null, [
5712
- /* @__PURE__ */ vue.createElementVNode("strong", null, [
5713
- /* @__PURE__ */ vue.createElementVNode("i", {
5714
- class: "fa-solid fa-server"
5715
- }),
5716
- /* @__PURE__ */ vue.createTextVNode(" Nodes")
5717
- ])
5718
- ], -1);
5719
- const _hoisted_12$3 = {
6216
+ const _hoisted_8$5 = {
5720
6217
  class: "d-flex flex-grow-1 align-items-center flex-column"
5721
6218
  };
5722
- const _hoisted_13$2 = /* @__PURE__ */ vue.createElementVNode("div", null, [
5723
- /* @__PURE__ */ vue.createElementVNode("strong", null, [
5724
- /* @__PURE__ */ vue.createElementVNode("i", {
5725
- class: "fa-solid fa-user"
5726
- }),
5727
- /* @__PURE__ */ vue.createTextVNode(" Creator")
5728
- ])
5729
- ], -1);
5730
- const _hoisted_14$2 = {
6219
+ const _hoisted_9$3 = {
5731
6220
  class: "d-flex flex-row"
5732
6221
  };
5733
- const _hoisted_15$2 = {
6222
+ const _hoisted_10$3 = {
5734
6223
  class: ""
5735
6224
  };
5736
- const _hoisted_16$2 = /* @__PURE__ */ vue.createElementVNode("span", {
5737
- class: "text-muted"
5738
- }, " created ", -1);
5739
- const _hoisted_17$2 = {
6225
+ const _hoisted_11$2 = {
5740
6226
  class: "ms-auto"
5741
6227
  };
5742
- const _hoisted_18$2 = /* @__PURE__ */ vue.createElementVNode("span", {
5743
- class: "text-muted"
5744
- }, " updated ", -1);
5745
- function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
6228
+ function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) {
5746
6229
  const _component_VCLink = vue.resolveComponent("VCLink");
5747
6230
  const _component_FEntityDelete = vue.resolveComponent("FEntityDelete");
5748
6231
  const _component_VCTimeago = vue.resolveComponent("VCTimeago");
5749
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$c, [
5750
- vue.createElementVNode("div", _hoisted_2$c, [
5751
- vue.createElementVNode("div", _hoisted_3$c, [
6232
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$e, [
6233
+ vue.createElementVNode("div", _hoisted_2$d, [
6234
+ vue.createElementVNode("div", _hoisted_3$b, [
5752
6235
  vue.createElementVNode("div", null, [
5753
6236
  vue.renderSlot(_ctx.$slots, "title", {
5754
6237
  data: _ctx.entity
5755
6238
  }, ()=>[
5756
- _hoisted_4$b,
6239
+ _cache[0] || (_cache[0] = vue.createElementVNode("i", {
6240
+ class: "fas fa-project-diagram me-1"
6241
+ }, null, -1)),
5757
6242
  vue.createVNode(_component_VCLink, {
5758
6243
  to: "/projects/" + _ctx.entity.id,
5759
6244
  class: "mb-0"
@@ -5767,7 +6252,7 @@ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
5767
6252
  ])
5768
6253
  ])
5769
6254
  ]),
5770
- vue.createElementVNode("div", _hoisted_5$9, [
6255
+ vue.createElementVNode("div", _hoisted_4$b, [
5771
6256
  vue.renderSlot(_ctx.$slots, "itemActions", {
5772
6257
  data: _ctx.entity
5773
6258
  }, ()=>[
@@ -5776,9 +6261,11 @@ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
5776
6261
  disabled: _ctx.busy,
5777
6262
  class: "btn btn-xs btn-dark"
5778
6263
  }, {
5779
- default: vue.withCtx(()=>[
5780
- _hoisted_6$7
5781
- ]),
6264
+ default: vue.withCtx(()=>_cache[1] || (_cache[1] = [
6265
+ vue.createElementVNode("i", {
6266
+ class: "fa fa-bars"
6267
+ }, null, -1)
6268
+ ])),
5782
6269
  _: 1
5783
6270
  }, 8, [
5784
6271
  "to",
@@ -5804,9 +6291,16 @@ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
5804
6291
  vue.renderSlot(_ctx.$slots, "body", {
5805
6292
  data: _ctx.entity
5806
6293
  }, ()=>[
5807
- vue.createElementVNode("div", _hoisted_7$5, [
5808
- vue.createElementVNode("div", _hoisted_8$5, [
5809
- _hoisted_9$5,
6294
+ vue.createElementVNode("div", _hoisted_5$7, [
6295
+ vue.createElementVNode("div", _hoisted_6$6, [
6296
+ _cache[2] || (_cache[2] = vue.createElementVNode("div", null, [
6297
+ vue.createElementVNode("strong", null, [
6298
+ vue.createElementVNode("i", {
6299
+ class: "fa fa-microscope"
6300
+ }),
6301
+ vue.createTextVNode(" Analyses")
6302
+ ])
6303
+ ], -1)),
5810
6304
  vue.createElementVNode("div", {
5811
6305
  class: vue.normalizeClass({
5812
6306
  "text-success": _ctx.entity.analyses > 0,
@@ -5814,8 +6308,15 @@ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
5814
6308
  })
5815
6309
  }, vue.toDisplayString(_ctx.entity.analyses), 3)
5816
6310
  ]),
5817
- vue.createElementVNode("div", _hoisted_10$4, [
5818
- _hoisted_11$3,
6311
+ vue.createElementVNode("div", _hoisted_7$5, [
6312
+ _cache[3] || (_cache[3] = vue.createElementVNode("div", null, [
6313
+ vue.createElementVNode("strong", null, [
6314
+ vue.createElementVNode("i", {
6315
+ class: "fa-solid fa-server"
6316
+ }),
6317
+ vue.createTextVNode(" Nodes")
6318
+ ])
6319
+ ], -1)),
5819
6320
  vue.createElementVNode("div", {
5820
6321
  class: vue.normalizeClass({
5821
6322
  "text-success": _ctx.entity.nodes > 0,
@@ -5823,8 +6324,15 @@ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
5823
6324
  })
5824
6325
  }, vue.toDisplayString(_ctx.entity.nodes), 3)
5825
6326
  ]),
5826
- vue.createElementVNode("div", _hoisted_12$3, [
5827
- _hoisted_13$2,
6327
+ vue.createElementVNode("div", _hoisted_8$5, [
6328
+ _cache[4] || (_cache[4] = vue.createElementVNode("div", null, [
6329
+ vue.createElementVNode("strong", null, [
6330
+ vue.createElementVNode("i", {
6331
+ class: "fa-solid fa-user"
6332
+ }),
6333
+ vue.createTextVNode(" Creator")
6334
+ ])
6335
+ ], -1)),
5828
6336
  vue.createElementVNode("div", null, [
5829
6337
  _ctx.entity.user_id ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, {
5830
6338
  key: 0
@@ -5842,10 +6350,12 @@ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
5842
6350
  vue.renderSlot(_ctx.$slots, "footer", {
5843
6351
  data: _ctx.entity
5844
6352
  }, ()=>[
5845
- vue.createElementVNode("div", _hoisted_14$2, [
5846
- vue.createElementVNode("div", _hoisted_15$2, [
6353
+ vue.createElementVNode("div", _hoisted_9$3, [
6354
+ vue.createElementVNode("div", _hoisted_10$3, [
5847
6355
  vue.createElementVNode("small", null, [
5848
- _hoisted_16$2,
6356
+ _cache[5] || (_cache[5] = vue.createElementVNode("span", {
6357
+ class: "text-muted"
6358
+ }, " created ", -1)),
5849
6359
  vue.createVNode(_component_VCTimeago, {
5850
6360
  datetime: _ctx.entity.created_at
5851
6361
  }, null, 8, [
@@ -5853,9 +6363,11 @@ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
5853
6363
  ])
5854
6364
  ])
5855
6365
  ]),
5856
- vue.createElementVNode("div", _hoisted_17$2, [
6366
+ vue.createElementVNode("div", _hoisted_11$2, [
5857
6367
  vue.createElementVNode("small", null, [
5858
- _hoisted_18$2,
6368
+ _cache[6] || (_cache[6] = vue.createElementVNode("span", {
6369
+ class: "text-muted"
6370
+ }, " updated ", -1)),
5859
6371
  vue.createVNode(_component_VCTimeago, {
5860
6372
  datetime: _ctx.entity.updated_at
5861
6373
  }, null, 8, [
@@ -5867,10 +6379,10 @@ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
5867
6379
  ])
5868
6380
  ]);
5869
6381
  }
5870
- var FProjectItemCard = /* @__PURE__ */ _export_sfc(_sfc_main$e, [
6382
+ var FProjectItemCard = /* @__PURE__ */ _export_sfc(_sfc_main$g, [
5871
6383
  [
5872
6384
  "render",
5873
- _sfc_render$e
6385
+ _sfc_render$g
5874
6386
  ]
5875
6387
  ]);
5876
6388
 
@@ -6310,7 +6822,7 @@ var RegistryProjectDetails = vue.defineComponent({
6310
6822
  }, [
6311
6823
  vue.h('label', {
6312
6824
  class: 'pe-1'
6313
- }, 'Namespace'),
6825
+ }, 'Project'),
6314
6826
  vue.h('input', {
6315
6827
  class: 'form-control',
6316
6828
  type: 'text',
@@ -6324,7 +6836,7 @@ var RegistryProjectDetails = vue.defineComponent({
6324
6836
  }, [
6325
6837
  vue.h('label', {
6326
6838
  class: 'pe-1'
6327
- }, 'ID'),
6839
+ }, 'Account ID'),
6328
6840
  vue.h('input', {
6329
6841
  class: 'form-control',
6330
6842
  type: 'text',
@@ -6335,7 +6847,7 @@ var RegistryProjectDetails = vue.defineComponent({
6335
6847
  ]),
6336
6848
  formControls.buildFormGroup({
6337
6849
  label: true,
6338
- labelContent: 'Secret',
6850
+ labelContent: 'Account Secret',
6339
6851
  validationMessages: translationsValidation.secret.value,
6340
6852
  validationSeverity: vuelidate.getSeverity(vuelidate$1.value.secret),
6341
6853
  content: formControls.buildFormInput({
@@ -6632,7 +7144,7 @@ var FRegistryProjectForm = vue.defineComponent({
6632
7144
  registry = [
6633
7145
  vue.h('hr'),
6634
7146
  vue.h(RegistryList, {
6635
- [exports.EntityListSlotName.ITEM_ACTIONS]: (props)=>vue.h('button', {
7147
+ [EntityListSlotName.ITEM_ACTIONS]: (props)=>vue.h('button', {
6636
7148
  attrs: {
6637
7149
  disabled: props.busy
6638
7150
  },
@@ -6739,9 +7251,7 @@ var FNodeForm = vue.defineComponent({
6739
7251
  realm_id: {
6740
7252
  required: validators.required
6741
7253
  },
6742
- registry_id: {
6743
- required: validators.required
6744
- },
7254
+ registry_id: {},
6745
7255
  external_name: {
6746
7256
  alphaNumHyphenUnderscore: validators.helpers.regex(alphaNumHyphenUnderscoreRegex),
6747
7257
  minLength: validators.minLength(3),
@@ -6791,7 +7301,7 @@ var FNodeForm = vue.defineComponent({
6791
7301
  if (!isRealmLocked.value) {
6792
7302
  realm = [
6793
7303
  vue.h(clientWebKit.ARealms, {}, {
6794
- [exports.EntityListSlotName.BODY]: (props)=>formControls.buildFormGroup({
7304
+ [EntityListSlotName.BODY]: (props)=>formControls.buildFormGroup({
6795
7305
  validationMessages: translationsValidation.realm_id.value,
6796
7306
  validationSeverity: vuelidate.getSeverity($v.value.realm_id),
6797
7307
  label: true,
@@ -6870,7 +7380,7 @@ var FNodeForm = vue.defineComponent({
6870
7380
  label: true,
6871
7381
  labelContent: 'Registry',
6872
7382
  content: vue.h(RegistryList, {}, {
6873
- [exports.EntityListSlotName.ITEM_ACTIONS]: (props)=>vue.h('button', {
7383
+ [EntityListSlotName.ITEM_ACTIONS]: (props)=>vue.h('button', {
6874
7384
  disabled: props.busy,
6875
7385
  class: [
6876
7386
  'btn btn-xs',
@@ -6924,10 +7434,539 @@ var FNodeForm = vue.defineComponent({
6924
7434
  submitNode
6925
7435
  ])
6926
7436
  ])
6927
- ]);
6928
- };
6929
- }
6930
- });
7437
+ ]);
7438
+ };
7439
+ }
7440
+ });
7441
+
7442
+ function tryOnScopeDispose(fn) {
7443
+ if (vue.getCurrentScope()) {
7444
+ vue.onScopeDispose(fn);
7445
+ return true;
7446
+ }
7447
+ return false;
7448
+ }
7449
+ function toValue(r) {
7450
+ return typeof r === "function" ? r() : vue.unref(r);
7451
+ }
7452
+ const isClient = typeof window !== "undefined" && typeof document !== "undefined";
7453
+ typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope;
7454
+ const toString = Object.prototype.toString;
7455
+ const isObject = (val)=>toString.call(val) === "[object Object]";
7456
+ const noop = ()=>{};
7457
+ function createSingletonPromise(fn) {
7458
+ let _promise;
7459
+ function wrapper() {
7460
+ if (!_promise) _promise = fn();
7461
+ return _promise;
7462
+ }
7463
+ wrapper.reset = async ()=>{
7464
+ const _prev = _promise;
7465
+ _promise = undefined;
7466
+ if (_prev) await _prev;
7467
+ };
7468
+ return wrapper;
7469
+ }
7470
+ function useTimeoutFn(cb, interval, options = {}) {
7471
+ const { immediate = true } = options;
7472
+ const isPending = vue.ref(false);
7473
+ let timer = null;
7474
+ function clear() {
7475
+ if (timer) {
7476
+ clearTimeout(timer);
7477
+ timer = null;
7478
+ }
7479
+ }
7480
+ function stop() {
7481
+ isPending.value = false;
7482
+ clear();
7483
+ }
7484
+ function start(...args) {
7485
+ clear();
7486
+ isPending.value = true;
7487
+ timer = setTimeout(()=>{
7488
+ isPending.value = false;
7489
+ timer = null;
7490
+ cb(...args);
7491
+ }, toValue(interval));
7492
+ }
7493
+ if (immediate) {
7494
+ isPending.value = true;
7495
+ if (isClient) start();
7496
+ }
7497
+ tryOnScopeDispose(stop);
7498
+ return {
7499
+ isPending: vue.readonly(isPending),
7500
+ start,
7501
+ stop
7502
+ };
7503
+ }
7504
+
7505
+ const defaultWindow = isClient ? window : undefined;
7506
+ const defaultNavigator = isClient ? window.navigator : undefined;
7507
+ function unrefElement(elRef) {
7508
+ var _a;
7509
+ const plain = toValue(elRef);
7510
+ return (_a = plain == null ? undefined : plain.$el) != null ? _a : plain;
7511
+ }
7512
+ function useEventListener(...args) {
7513
+ let target;
7514
+ let events;
7515
+ let listeners;
7516
+ let options;
7517
+ if (typeof args[0] === "string" || Array.isArray(args[0])) {
7518
+ [events, listeners, options] = args;
7519
+ target = defaultWindow;
7520
+ } else {
7521
+ [target, events, listeners, options] = args;
7522
+ }
7523
+ if (!target) return noop;
7524
+ if (!Array.isArray(events)) events = [
7525
+ events
7526
+ ];
7527
+ if (!Array.isArray(listeners)) listeners = [
7528
+ listeners
7529
+ ];
7530
+ const cleanups = [];
7531
+ const cleanup = ()=>{
7532
+ cleanups.forEach((fn)=>fn());
7533
+ cleanups.length = 0;
7534
+ };
7535
+ const register = (el, event, listener, options2)=>{
7536
+ el.addEventListener(event, listener, options2);
7537
+ return ()=>el.removeEventListener(event, listener, options2);
7538
+ };
7539
+ const stopWatch = vue.watch(()=>[
7540
+ unrefElement(target),
7541
+ toValue(options)
7542
+ ], ([el, options2])=>{
7543
+ cleanup();
7544
+ if (!el) return;
7545
+ const optionsClone = isObject(options2) ? {
7546
+ ...options2
7547
+ } : options2;
7548
+ cleanups.push(...events.flatMap((event)=>{
7549
+ return listeners.map((listener)=>register(el, event, listener, optionsClone));
7550
+ }));
7551
+ }, {
7552
+ immediate: true,
7553
+ flush: "post"
7554
+ });
7555
+ const stop = ()=>{
7556
+ stopWatch();
7557
+ cleanup();
7558
+ };
7559
+ tryOnScopeDispose(stop);
7560
+ return stop;
7561
+ }
7562
+ function useMounted() {
7563
+ const isMounted = vue.ref(false);
7564
+ const instance = vue.getCurrentInstance();
7565
+ if (instance) {
7566
+ vue.onMounted(()=>{
7567
+ isMounted.value = true;
7568
+ }, instance);
7569
+ }
7570
+ return isMounted;
7571
+ }
7572
+ function useSupported(callback) {
7573
+ const isMounted = useMounted();
7574
+ return vue.computed(()=>{
7575
+ isMounted.value;
7576
+ return Boolean(callback());
7577
+ });
7578
+ }
7579
+ function usePermission(permissionDesc, options = {}) {
7580
+ const { controls = false, navigator = defaultNavigator } = options;
7581
+ const isSupported = useSupported(()=>navigator && "permissions" in navigator);
7582
+ const permissionStatus = vue.shallowRef();
7583
+ const desc = typeof permissionDesc === "string" ? {
7584
+ name: permissionDesc
7585
+ } : permissionDesc;
7586
+ const state = vue.shallowRef();
7587
+ const update = ()=>{
7588
+ var _a, _b;
7589
+ state.value = (_b = (_a = permissionStatus.value) == null ? undefined : _a.state) != null ? _b : "prompt";
7590
+ };
7591
+ useEventListener(permissionStatus, "change", update);
7592
+ const query = createSingletonPromise(async ()=>{
7593
+ if (!isSupported.value) return;
7594
+ if (!permissionStatus.value) {
7595
+ try {
7596
+ permissionStatus.value = await navigator.permissions.query(desc);
7597
+ } catch (e) {
7598
+ permissionStatus.value = undefined;
7599
+ } finally{
7600
+ update();
7601
+ }
7602
+ }
7603
+ if (controls) return vue.toRaw(permissionStatus.value);
7604
+ });
7605
+ query();
7606
+ if (controls) {
7607
+ return {
7608
+ state,
7609
+ isSupported,
7610
+ query
7611
+ };
7612
+ } else {
7613
+ return state;
7614
+ }
7615
+ }
7616
+ function useClipboard(options = {}) {
7617
+ const { navigator = defaultNavigator, read = false, source, copiedDuring = 1500, legacy = false } = options;
7618
+ const isClipboardApiSupported = useSupported(()=>navigator && "clipboard" in navigator);
7619
+ const permissionRead = usePermission("clipboard-read");
7620
+ const permissionWrite = usePermission("clipboard-write");
7621
+ const isSupported = vue.computed(()=>isClipboardApiSupported.value || legacy);
7622
+ const text = vue.ref("");
7623
+ const copied = vue.ref(false);
7624
+ const timeout = useTimeoutFn(()=>copied.value = false, copiedDuring);
7625
+ function updateText() {
7626
+ if (isClipboardApiSupported.value && isAllowed(permissionRead.value)) {
7627
+ navigator.clipboard.readText().then((value)=>{
7628
+ text.value = value;
7629
+ });
7630
+ } else {
7631
+ text.value = legacyRead();
7632
+ }
7633
+ }
7634
+ if (isSupported.value && read) useEventListener([
7635
+ "copy",
7636
+ "cut"
7637
+ ], updateText);
7638
+ async function copy(value = toValue(source)) {
7639
+ if (isSupported.value && value != null) {
7640
+ if (isClipboardApiSupported.value && isAllowed(permissionWrite.value)) await navigator.clipboard.writeText(value);
7641
+ else legacyCopy(value);
7642
+ text.value = value;
7643
+ copied.value = true;
7644
+ timeout.start();
7645
+ }
7646
+ }
7647
+ function legacyCopy(value) {
7648
+ const ta = document.createElement("textarea");
7649
+ ta.value = value != null ? value : "";
7650
+ ta.style.position = "absolute";
7651
+ ta.style.opacity = "0";
7652
+ document.body.appendChild(ta);
7653
+ ta.select();
7654
+ document.execCommand("copy");
7655
+ ta.remove();
7656
+ }
7657
+ function legacyRead() {
7658
+ var _a, _b, _c;
7659
+ return (_c = (_b = (_a = document == null ? undefined : document.getSelection) == null ? undefined : _a.call(document)) == null ? undefined : _b.toString()) != null ? _c : "";
7660
+ }
7661
+ function isAllowed(status) {
7662
+ return status === "granted" || status === "prompt";
7663
+ }
7664
+ return {
7665
+ isSupported,
7666
+ text,
7667
+ copied,
7668
+ copy
7669
+ };
7670
+ }
7671
+
7672
+ var _sfc_main$f = vue.defineComponent({
7673
+ props: {
7674
+ entity: {
7675
+ type: Object,
7676
+ required: true
7677
+ }
7678
+ },
7679
+ emits: [
7680
+ 'updated',
7681
+ 'failed',
7682
+ 'keyCopied',
7683
+ 'keyPairGenerated'
7684
+ ],
7685
+ setup (props, { emit }) {
7686
+ const httpClient = injectCoreHTTPClient();
7687
+ const keyTypeOptions = [
7688
+ {
7689
+ id: 'rsa',
7690
+ value: 'RSA'
7691
+ },
7692
+ {
7693
+ id: 'ecdh',
7694
+ value: 'ECDH'
7695
+ }
7696
+ ];
7697
+ const keyType = vue.ref('rsa');
7698
+ const privateKey = vue.ref(null);
7699
+ const publicKey = vue.ref(null);
7700
+ const clipboard = useClipboard();
7701
+ const init = ()=>{
7702
+ if (props.entity.public_key) {
7703
+ publicKey.value = isHex(props.entity.public_key) ? hexToUTF8(props.entity.public_key) : props.entity.public_key;
7704
+ }
7705
+ };
7706
+ init();
7707
+ const copy = (type)=>{
7708
+ if (type === 'privateKey') {
7709
+ if (!privateKey.value) {
7710
+ return;
7711
+ }
7712
+ clipboard.copy(privateKey.value);
7713
+ emit('keyCopied');
7714
+ return;
7715
+ }
7716
+ if (!publicKey.value) {
7717
+ return;
7718
+ }
7719
+ clipboard.copy(publicKey.value);
7720
+ emit('keyCopied');
7721
+ };
7722
+ const busy = vue.ref(false);
7723
+ const save = async ()=>{
7724
+ if (busy.value) return;
7725
+ busy.value = true;
7726
+ try {
7727
+ const response = await httpClient.node.update(props.entity.id, {
7728
+ public_key: publicKey.value
7729
+ });
7730
+ emit('updated', response);
7731
+ } catch (e) {
7732
+ emit('failed', e);
7733
+ } finally{
7734
+ busy.value = false;
7735
+ }
7736
+ };
7737
+ const generate = async ()=>{
7738
+ if (busy.value) return;
7739
+ busy.value = true;
7740
+ try {
7741
+ let algorithmOptions;
7742
+ if (keyType.value === 'ecdh') {
7743
+ algorithmOptions = {
7744
+ name: 'ECDH',
7745
+ namedCurve: 'P-384'
7746
+ };
7747
+ } else {
7748
+ algorithmOptions = {
7749
+ name: 'RSA-OAEP',
7750
+ modulusLength: 2048,
7751
+ hash: 'SHA-256',
7752
+ publicExponent: new Uint8Array([
7753
+ 1,
7754
+ 0,
7755
+ 1
7756
+ ])
7757
+ };
7758
+ }
7759
+ console.log(algorithmOptions);
7760
+ const algorithm = new CryptoAsymmetricAlgorithm(algorithmOptions);
7761
+ const keyPair = await algorithm.generateKeyPair();
7762
+ publicKey.value = await exportAsymmetricPublicKey(keyPair.publicKey);
7763
+ privateKey.value = await exportAsymmetricPrivateKey(keyPair.privateKey);
7764
+ emit('keyPairGenerated');
7765
+ } finally{
7766
+ busy.value = false;
7767
+ }
7768
+ };
7769
+ return {
7770
+ keyType,
7771
+ keyTypeOptions,
7772
+ busy,
7773
+ copy,
7774
+ generate,
7775
+ save,
7776
+ publicKey,
7777
+ privateKey
7778
+ };
7779
+ }
7780
+ });
7781
+
7782
+ const _hoisted_1$d = {
7783
+ class: "d-flex flex-column gap-1"
7784
+ };
7785
+ const _hoisted_2$c = {
7786
+ class: "row"
7787
+ };
7788
+ const _hoisted_3$a = {
7789
+ class: "col-4"
7790
+ };
7791
+ const _hoisted_4$a = {
7792
+ class: "d-flex flex-row"
7793
+ };
7794
+ const _hoisted_5$6 = {
7795
+ class: "ms-auto"
7796
+ };
7797
+ const _hoisted_6$5 = {
7798
+ class: "col-8"
7799
+ };
7800
+ const _hoisted_7$4 = {
7801
+ class: "d-flex flex-row"
7802
+ };
7803
+ const _hoisted_8$4 = {
7804
+ class: "ms-auto"
7805
+ };
7806
+ const _hoisted_9$2 = {
7807
+ key: 0,
7808
+ class: "alert alert-sm alert-warning"
7809
+ };
7810
+ const _hoisted_10$2 = {
7811
+ class: "d-flex flex-row gap-1"
7812
+ };
7813
+ const _hoisted_11$1 = [
7814
+ "disabled"
7815
+ ];
7816
+ const _hoisted_12 = [
7817
+ "disabled"
7818
+ ];
7819
+ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
7820
+ const _component_VCFormTextarea = vue.resolveComponent("VCFormTextarea");
7821
+ const _component_VCFormGroup = vue.resolveComponent("VCFormGroup");
7822
+ const _component_VCFormSelect = vue.resolveComponent("VCFormSelect");
7823
+ return vue.openBlock(), vue.createElementBlock("div", null, [
7824
+ _cache[14] || (_cache[14] = vue.createElementVNode("h6", null, "KeyPair", -1)),
7825
+ _cache[15] || (_cache[15] = vue.createElementVNode("p", null, " The public key of the key pair is used to encrypt data that is transmitted between different nodes through the storage service. ", -1)),
7826
+ vue.createElementVNode("div", _hoisted_1$d, [
7827
+ vue.createElementVNode("div", _hoisted_2$c, [
7828
+ vue.createElementVNode("div", _hoisted_3$a, [
7829
+ vue.createVNode(_component_VCFormGroup, {
7830
+ "label-class": "w-100 mb-1"
7831
+ }, {
7832
+ label: vue.withCtx(()=>[
7833
+ vue.createElementVNode("div", _hoisted_4$a, [
7834
+ _cache[8] || (_cache[8] = vue.createElementVNode("div", null, " PublicKey ", -1)),
7835
+ vue.createElementVNode("div", _hoisted_5$6, [
7836
+ vue.withDirectives(vue.createElementVNode("button", {
7837
+ type: "button",
7838
+ class: "btn btn-xs btn-dark",
7839
+ onClick: _cache[0] || (_cache[0] = vue.withModifiers(($event)=>_ctx.copy("publicKey"), [
7840
+ "prevent"
7841
+ ]))
7842
+ }, _cache[7] || (_cache[7] = [
7843
+ vue.createElementVNode("i", {
7844
+ class: "fa fa-copy"
7845
+ }, null, -1),
7846
+ vue.createTextVNode(" Copy ")
7847
+ ]), 512), [
7848
+ [
7849
+ vue.vShow,
7850
+ !!_ctx.publicKey
7851
+ ]
7852
+ ])
7853
+ ])
7854
+ ])
7855
+ ]),
7856
+ default: vue.withCtx(()=>[
7857
+ vue.createVNode(_component_VCFormTextarea, {
7858
+ modelValue: _ctx.publicKey,
7859
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event)=>_ctx.publicKey = $event),
7860
+ rows: "8"
7861
+ }, null, 8, [
7862
+ "modelValue"
7863
+ ])
7864
+ ]),
7865
+ _: 1
7866
+ })
7867
+ ]),
7868
+ vue.createElementVNode("div", _hoisted_6$5, [
7869
+ vue.createVNode(_component_VCFormGroup, {
7870
+ "label-class": "w-100 mb-1"
7871
+ }, {
7872
+ label: vue.withCtx(()=>[
7873
+ vue.createElementVNode("div", _hoisted_7$4, [
7874
+ _cache[10] || (_cache[10] = vue.createElementVNode("div", null, " PrivateKey ", -1)),
7875
+ vue.createElementVNode("div", _hoisted_8$4, [
7876
+ vue.withDirectives(vue.createElementVNode("button", {
7877
+ type: "button",
7878
+ class: "btn btn-xs btn-dark",
7879
+ onClick: _cache[2] || (_cache[2] = vue.withModifiers(($event)=>_ctx.copy("privateKey"), [
7880
+ "prevent"
7881
+ ]))
7882
+ }, _cache[9] || (_cache[9] = [
7883
+ vue.createElementVNode("i", {
7884
+ class: "fa fa-copy"
7885
+ }, null, -1),
7886
+ vue.createTextVNode(" Copy ")
7887
+ ]), 512), [
7888
+ [
7889
+ vue.vShow,
7890
+ !!_ctx.privateKey
7891
+ ]
7892
+ ])
7893
+ ])
7894
+ ])
7895
+ ]),
7896
+ default: vue.withCtx(()=>[
7897
+ vue.createVNode(_component_VCFormTextarea, {
7898
+ modelValue: _ctx.privateKey,
7899
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event)=>_ctx.privateKey = $event),
7900
+ disabled: true,
7901
+ rows: "8"
7902
+ }, null, 8, [
7903
+ "modelValue"
7904
+ ])
7905
+ ]),
7906
+ _: 1
7907
+ }),
7908
+ _ctx.privateKey ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_9$2, " Please copy the key to a safe location, as it is not stored remotely. ")) : vue.createCommentVNode("", true)
7909
+ ])
7910
+ ]),
7911
+ vue.createElementVNode("div", null, [
7912
+ vue.createVNode(_component_VCFormGroup, null, {
7913
+ label: vue.withCtx(()=>_cache[11] || (_cache[11] = [
7914
+ vue.createTextVNode(" KeyType ")
7915
+ ])),
7916
+ default: vue.withCtx(()=>[
7917
+ vue.createVNode(_component_VCFormSelect, {
7918
+ modelValue: _ctx.keyType,
7919
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event)=>_ctx.keyType = $event),
7920
+ options: _ctx.keyTypeOptions
7921
+ }, null, 8, [
7922
+ "modelValue",
7923
+ "options"
7924
+ ])
7925
+ ]),
7926
+ _: 1
7927
+ })
7928
+ ]),
7929
+ vue.createElementVNode("div", _hoisted_10$2, [
7930
+ vue.createElementVNode("div", null, [
7931
+ vue.createElementVNode("button", {
7932
+ disabled: _ctx.busy,
7933
+ type: "button",
7934
+ class: "btn btn-primary btn-xs",
7935
+ onClick: _cache[5] || (_cache[5] = vue.withModifiers((...args)=>_ctx.save && _ctx.save(...args), [
7936
+ "prevent"
7937
+ ]))
7938
+ }, _cache[12] || (_cache[12] = [
7939
+ vue.createElementVNode("i", {
7940
+ class: "fa fa-save"
7941
+ }, null, -1),
7942
+ vue.createTextVNode(" Save ")
7943
+ ]), 8, _hoisted_11$1)
7944
+ ]),
7945
+ vue.createElementVNode("div", null, [
7946
+ vue.createElementVNode("button", {
7947
+ disabled: _ctx.busy,
7948
+ type: "button",
7949
+ class: "btn btn-dark btn-xs",
7950
+ onClick: _cache[6] || (_cache[6] = vue.withModifiers((...args)=>_ctx.generate && _ctx.generate(...args), [
7951
+ "prevent"
7952
+ ]))
7953
+ }, _cache[13] || (_cache[13] = [
7954
+ vue.createElementVNode("i", {
7955
+ class: "fas fa-sync-alt"
7956
+ }, null, -1),
7957
+ vue.createTextVNode(" Generate ")
7958
+ ]), 8, _hoisted_12)
7959
+ ])
7960
+ ])
7961
+ ])
7962
+ ]);
7963
+ }
7964
+ var FNodeCrypto = /* @__PURE__ */ _export_sfc(_sfc_main$f, [
7965
+ [
7966
+ "render",
7967
+ _sfc_render$f
7968
+ ]
7969
+ ]);
6931
7970
 
6932
7971
  var FNodeRegistryProject = vue.defineComponent({
6933
7972
  props: {
@@ -7124,7 +8163,9 @@ const FAnalysisNodeApprovalCommand = vue.defineComponent({
7124
8163
  }
7125
8164
  busy.value = false;
7126
8165
  };
7127
- const isAllowed = clientWebKit.useAbilityCheck(PermissionName.ANALYSIS_APPROVE);
8166
+ const isAllowed = clientWebKit.usePermissionCheck({
8167
+ name: PermissionName.ANALYSIS_APPROVE
8168
+ });
7128
8169
  return ()=>renderActionCommand({
7129
8170
  execute,
7130
8171
  elementType: props.elementType,
@@ -7243,16 +8284,6 @@ var FAnalysisNodeAssignAction = vue.defineComponent({
7243
8284
  }
7244
8285
  });
7245
8286
 
7246
- var Direction$1;
7247
- (function(Direction) {
7248
- Direction["IN"] = "in";
7249
- Direction["OUT"] = "out";
7250
- })(Direction$1 || (Direction$1 = {}));
7251
- var Target;
7252
- (function(Target) {
7253
- Target["ANALYSIS"] = "analysis";
7254
- Target["NODE"] = "node";
7255
- })(Target || (Target = {}));
7256
8287
  var FAnalysisNode = vue.defineComponent({
7257
8288
  props: {
7258
8289
  entity: {
@@ -7345,11 +8376,6 @@ var FAnalysisNode = vue.defineComponent({
7345
8376
  }
7346
8377
  });
7347
8378
 
7348
- var Direction;
7349
- (function(Direction) {
7350
- Direction["IN"] = "in";
7351
- Direction["OUT"] = "out";
7352
- })(Direction || (Direction = {}));
7353
8379
  var FAnalysisNodes = vue.defineComponent({
7354
8380
  props: {
7355
8381
  ...defineListProps(),
@@ -7362,11 +8388,11 @@ var FAnalysisNodes = vue.defineComponent({
7362
8388
  },
7363
8389
  target: {
7364
8390
  type: String,
7365
- default: coreKit.DomainType.NODE
8391
+ default: `${coreKit.DomainType.NODE}`
7366
8392
  },
7367
8393
  direction: {
7368
8394
  type: String,
7369
- default: "out"
8395
+ default: `${"out"}`
7370
8396
  }
7371
8397
  },
7372
8398
  slots: Object,
@@ -7571,7 +8597,7 @@ var FAnalysisNodeRunStatus = vue.defineComponent({
7571
8597
  }
7572
8598
  });
7573
8599
 
7574
- var _sfc_main$d = vue.defineComponent({
8600
+ var _sfc_main$e = vue.defineComponent({
7575
8601
  components: {
7576
8602
  FAnalysisNodes,
7577
8603
  FAnalysisNodeRunStatus
@@ -7615,30 +8641,25 @@ var _sfc_main$d = vue.defineComponent({
7615
8641
  }
7616
8642
  });
7617
8643
 
7618
- const _hoisted_1$b = {
8644
+ const _hoisted_1$c = {
7619
8645
  key: 0,
7620
8646
  class: "train-stations-progress"
7621
8647
  };
7622
8648
  const _hoisted_2$b = {
7623
8649
  class: "icon"
7624
8650
  };
7625
- const _hoisted_3$b = /* @__PURE__ */ vue.createElementVNode("div", {
7626
- class: "mt-1"
7627
- }, [
7628
- /* @__PURE__ */ vue.createElementVNode("strong", null, "Status")
7629
- ], -1);
7630
- const _hoisted_4$a = {
8651
+ const _hoisted_3$9 = {
7631
8652
  key: 1,
7632
8653
  class: "progress bg-white"
7633
8654
  };
7634
- const _hoisted_5$8 = [
8655
+ const _hoisted_4$9 = [
7635
8656
  "aria-valuenow"
7636
8657
  ];
7637
- function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
8658
+ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
7638
8659
  const _component_FAnalysisNodeRunStatus = vue.resolveComponent("FAnalysisNodeRunStatus");
7639
8660
  const _component_FAnalysisNodes = vue.resolveComponent("FAnalysisNodes");
7640
8661
  return vue.openBlock(), vue.createElementBlock("div", null, [
7641
- _ctx.elementType === "steps" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$b, [
8662
+ _ctx.elementType === "steps" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$c, [
7642
8663
  vue.createVNode(_component_FAnalysisNodes, {
7643
8664
  header: false,
7644
8665
  query: _ctx.query,
@@ -7667,7 +8688,11 @@ function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
7667
8688
  }, [
7668
8689
  vue.createElementVNode("span", _hoisted_2$b, vue.toDisplayString(item.node.name), 1)
7669
8690
  ], 2),
7670
- _hoisted_3$b,
8691
+ _cache[0] || (_cache[0] = vue.createElementVNode("div", {
8692
+ class: "mt-1"
8693
+ }, [
8694
+ vue.createElementVNode("strong", null, "Status")
8695
+ ], -1)),
7671
8696
  vue.createElementVNode("div", null, [
7672
8697
  vue.createVNode(_component_FAnalysisNodeRunStatus, {
7673
8698
  status: item.run_status
@@ -7684,7 +8709,7 @@ function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
7684
8709
  "realm-id",
7685
8710
  "source-id"
7686
8711
  ])
7687
- ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$a, [
8712
+ ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$9, [
7688
8713
  vue.createElementVNode("div", {
7689
8714
  class: vue.normalizeClass([
7690
8715
  "progress-bar",
@@ -7699,14 +8724,14 @@ function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
7699
8724
  "aria-valuenow": _ctx.progressPercentage,
7700
8725
  "aria-valuemin": "0",
7701
8726
  "aria-valuemax": "100"
7702
- }, null, 14, _hoisted_5$8)
8727
+ }, null, 14, _hoisted_4$9)
7703
8728
  ]))
7704
8729
  ]);
7705
8730
  }
7706
- var FAnalysisNodesProgress = /* @__PURE__ */ _export_sfc(_sfc_main$d, [
8731
+ var FAnalysisNodesProgress = /* @__PURE__ */ _export_sfc(_sfc_main$e, [
7707
8732
  [
7708
8733
  "render",
7709
- _sfc_render$d
8734
+ _sfc_render$e
7710
8735
  ]
7711
8736
  ]);
7712
8737
 
@@ -7733,7 +8758,7 @@ const FAnalysisBucketDownload = vue.defineComponent({
7733
8758
  },
7734
8759
  elementType: {
7735
8760
  type: String,
7736
- default: exports.ActionCommandElementType.BUTTON
8761
+ default: ActionCommandElementType.BUTTON
7737
8762
  },
7738
8763
  withIcon: {
7739
8764
  type: Boolean,
@@ -7895,7 +8920,7 @@ var TrainName = vue.defineComponent({
7895
8920
  }
7896
8921
  });
7897
8922
 
7898
- var _sfc_main$c = vue.defineComponent({
8923
+ var _sfc_main$d = vue.defineComponent({
7899
8924
  components: {
7900
8925
  FAnalysisBucket,
7901
8926
  FAnalysisBucketDownload,
@@ -7944,76 +8969,40 @@ var _sfc_main$c = vue.defineComponent({
7944
8969
  }
7945
8970
  });
7946
8971
 
7947
- const _hoisted_1$a = {
8972
+ const _hoisted_1$b = {
7948
8973
  class: "d-flex flex-column gap-1 w-100"
7949
8974
  };
7950
8975
  const _hoisted_2$a = {
7951
8976
  class: "w-100"
7952
8977
  };
7953
- const _hoisted_3$a = {
8978
+ const _hoisted_3$8 = {
7954
8979
  class: "d-flex flex-row align-items-center"
7955
8980
  };
7956
- const _hoisted_4$9 = /* @__PURE__ */ vue.createElementVNode("i", {
7957
- class: "fas fa-microscope me-1"
7958
- }, null, -1);
7959
- const _hoisted_5$7 = {
8981
+ const _hoisted_4$8 = {
7960
8982
  class: "ms-auto d-flex flex-row gap-1"
7961
8983
  };
7962
- const _hoisted_6$6 = /* @__PURE__ */ vue.createElementVNode("i", {
7963
- class: "fa fa-bars"
7964
- }, null, -1);
7965
- const _hoisted_7$4 = {
8984
+ const _hoisted_5$5 = {
7966
8985
  class: "row"
7967
8986
  };
7968
- const _hoisted_8$4 = {
8987
+ const _hoisted_6$4 = {
7969
8988
  class: "col-12 col-md-4 d-flex align-items-center flex-column"
7970
8989
  };
7971
- const _hoisted_9$4 = /* @__PURE__ */ vue.createElementVNode("div", null, [
7972
- /* @__PURE__ */ vue.createElementVNode("strong", null, [
7973
- /* @__PURE__ */ vue.createElementVNode("i", {
7974
- class: "fa-solid fa-server"
7975
- }),
7976
- /* @__PURE__ */ vue.createTextVNode(" Node")
7977
- ])
7978
- ], -1);
7979
- const _hoisted_10$3 = {
8990
+ const _hoisted_7$3 = {
7980
8991
  class: "col-12 col-md-4 d-flex align-items-center flex-column"
7981
8992
  };
7982
- const _hoisted_11$2 = /* @__PURE__ */ vue.createElementVNode("div", null, [
7983
- /* @__PURE__ */ vue.createElementVNode("strong", null, [
7984
- /* @__PURE__ */ vue.createElementVNode("i", {
7985
- class: "fa-solid fa-heartbeat"
7986
- }),
7987
- /* @__PURE__ */ vue.createTextVNode(" Status")
7988
- ])
7989
- ], -1);
7990
- const _hoisted_12$2 = {
8993
+ const _hoisted_8$3 = {
7991
8994
  class: "col-12 col-md-4 d-flex align-items-center flex-column"
7992
8995
  };
7993
- const _hoisted_13$1 = /* @__PURE__ */ vue.createElementVNode("div", null, [
7994
- /* @__PURE__ */ vue.createElementVNode("strong", null, [
7995
- /* @__PURE__ */ vue.createElementVNode("i", {
7996
- class: "fa-solid fa-user"
7997
- }),
7998
- /* @__PURE__ */ vue.createTextVNode(" Creator")
7999
- ])
8000
- ], -1);
8001
- const _hoisted_14$1 = {
8996
+ const _hoisted_9$1 = {
8002
8997
  class: "d-flex flex-row"
8003
8998
  };
8004
- const _hoisted_15$1 = {
8999
+ const _hoisted_10$1 = {
8005
9000
  class: ""
8006
9001
  };
8007
- const _hoisted_16$1 = /* @__PURE__ */ vue.createElementVNode("span", {
8008
- class: "text-muted"
8009
- }, " created ", -1);
8010
- const _hoisted_17$1 = {
9002
+ const _hoisted_11 = {
8011
9003
  class: "ms-auto"
8012
9004
  };
8013
- const _hoisted_18$1 = /* @__PURE__ */ vue.createElementVNode("span", {
8014
- class: "text-muted"
8015
- }, " updated ", -1);
8016
- function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
9005
+ function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
8017
9006
  const _component_FAnalysisName = vue.resolveComponent("FAnalysisName");
8018
9007
  const _component_VCLink = vue.resolveComponent("VCLink");
8019
9008
  const _component_FAnalysisBucketDownload = vue.resolveComponent("FAnalysisBucketDownload");
@@ -8021,14 +9010,16 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
8021
9010
  const _component_FAnalysisNodeApprovalCommand = vue.resolveComponent("FAnalysisNodeApprovalCommand");
8022
9011
  const _component_FAnalysisNodeApprovalStatus = vue.resolveComponent("FAnalysisNodeApprovalStatus");
8023
9012
  const _component_VCTimeago = vue.resolveComponent("VCTimeago");
8024
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$a, [
9013
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$b, [
8025
9014
  vue.createElementVNode("div", _hoisted_2$a, [
8026
- vue.createElementVNode("div", _hoisted_3$a, [
9015
+ vue.createElementVNode("div", _hoisted_3$8, [
8027
9016
  vue.createElementVNode("div", null, [
8028
9017
  vue.renderSlot(_ctx.$slots, "title", {
8029
9018
  data: _ctx.entity
8030
9019
  }, ()=>[
8031
- _hoisted_4$9,
9020
+ _cache[0] || (_cache[0] = vue.createElementVNode("i", {
9021
+ class: "fas fa-microscope me-1"
9022
+ }, null, -1)),
8032
9023
  vue.createVNode(_component_FAnalysisName, {
8033
9024
  "entity-id": _ctx.entity.analysis.id,
8034
9025
  "entity-name": _ctx.entity.analysis.name
@@ -8038,7 +9029,7 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
8038
9029
  ])
8039
9030
  ])
8040
9031
  ]),
8041
- vue.createElementVNode("div", _hoisted_5$7, [
9032
+ vue.createElementVNode("div", _hoisted_4$8, [
8042
9033
  vue.renderSlot(_ctx.$slots, "itemActions", {
8043
9034
  data: _ctx.entity
8044
9035
  }, ()=>[
@@ -8047,9 +9038,11 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
8047
9038
  disabled: _ctx.busy,
8048
9039
  class: "btn btn-xs btn-dark"
8049
9040
  }, {
8050
- default: vue.withCtx(()=>[
8051
- _hoisted_6$6
8052
- ]),
9041
+ default: vue.withCtx(()=>_cache[1] || (_cache[1] = [
9042
+ vue.createElementVNode("i", {
9043
+ class: "fa fa-bars"
9044
+ }, null, -1)
9045
+ ])),
8053
9046
  _: 1
8054
9047
  }, 8, [
8055
9048
  "to",
@@ -8104,13 +9097,27 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
8104
9097
  vue.renderSlot(_ctx.$slots, "body", {
8105
9098
  data: _ctx.entity
8106
9099
  }, ()=>[
8107
- vue.createElementVNode("div", _hoisted_7$4, [
8108
- vue.createElementVNode("div", _hoisted_8$4, [
8109
- _hoisted_9$4,
9100
+ vue.createElementVNode("div", _hoisted_5$5, [
9101
+ vue.createElementVNode("div", _hoisted_6$4, [
9102
+ _cache[2] || (_cache[2] = vue.createElementVNode("div", null, [
9103
+ vue.createElementVNode("strong", null, [
9104
+ vue.createElementVNode("i", {
9105
+ class: "fa-solid fa-server"
9106
+ }),
9107
+ vue.createTextVNode(" Node")
9108
+ ])
9109
+ ], -1)),
8110
9110
  vue.createElementVNode("div", null, vue.toDisplayString(_ctx.entity.node.name), 1)
8111
9111
  ]),
8112
- vue.createElementVNode("div", _hoisted_10$3, [
8113
- _hoisted_11$2,
9112
+ vue.createElementVNode("div", _hoisted_7$3, [
9113
+ _cache[3] || (_cache[3] = vue.createElementVNode("div", null, [
9114
+ vue.createElementVNode("strong", null, [
9115
+ vue.createElementVNode("i", {
9116
+ class: "fa-solid fa-heartbeat"
9117
+ }),
9118
+ vue.createTextVNode(" Status")
9119
+ ])
9120
+ ], -1)),
8114
9121
  vue.createElementVNode("div", null, [
8115
9122
  vue.createVNode(_component_FAnalysisNodeApprovalStatus, {
8116
9123
  status: _ctx.entity.approval_status
@@ -8126,8 +9133,15 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
8126
9133
  ])
8127
9134
  ])
8128
9135
  ]),
8129
- vue.createElementVNode("div", _hoisted_12$2, [
8130
- _hoisted_13$1,
9136
+ vue.createElementVNode("div", _hoisted_8$3, [
9137
+ _cache[4] || (_cache[4] = vue.createElementVNode("div", null, [
9138
+ vue.createElementVNode("strong", null, [
9139
+ vue.createElementVNode("i", {
9140
+ class: "fa-solid fa-user"
9141
+ }),
9142
+ vue.createTextVNode(" Creator")
9143
+ ])
9144
+ ], -1)),
8131
9145
  vue.createElementVNode("div", null, [
8132
9146
  _ctx.entity.analysis.user_id ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, {
8133
9147
  key: 0
@@ -8141,10 +9155,12 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
8141
9155
  vue.renderSlot(_ctx.$slots, "footer", {
8142
9156
  data: _ctx.entity
8143
9157
  }, ()=>[
8144
- vue.createElementVNode("div", _hoisted_14$1, [
8145
- vue.createElementVNode("div", _hoisted_15$1, [
9158
+ vue.createElementVNode("div", _hoisted_9$1, [
9159
+ vue.createElementVNode("div", _hoisted_10$1, [
8146
9160
  vue.createElementVNode("small", null, [
8147
- _hoisted_16$1,
9161
+ _cache[5] || (_cache[5] = vue.createElementVNode("span", {
9162
+ class: "text-muted"
9163
+ }, " created ", -1)),
8148
9164
  vue.createVNode(_component_VCTimeago, {
8149
9165
  datetime: _ctx.entity.created_at
8150
9166
  }, null, 8, [
@@ -8152,9 +9168,11 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
8152
9168
  ])
8153
9169
  ])
8154
9170
  ]),
8155
- vue.createElementVNode("div", _hoisted_17$1, [
9171
+ vue.createElementVNode("div", _hoisted_11, [
8156
9172
  vue.createElementVNode("small", null, [
8157
- _hoisted_18$1,
9173
+ _cache[6] || (_cache[6] = vue.createElementVNode("span", {
9174
+ class: "text-muted"
9175
+ }, " updated ", -1)),
8158
9176
  vue.createVNode(_component_VCTimeago, {
8159
9177
  datetime: _ctx.entity.updated_at
8160
9178
  }, null, 8, [
@@ -8166,14 +9184,14 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
8166
9184
  ])
8167
9185
  ]);
8168
9186
  }
8169
- var FAnalysisNodeInCard = /* @__PURE__ */ _export_sfc(_sfc_main$c, [
9187
+ var FAnalysisNodeInCard = /* @__PURE__ */ _export_sfc(_sfc_main$d, [
8170
9188
  [
8171
9189
  "render",
8172
- _sfc_render$c
9190
+ _sfc_render$d
8173
9191
  ]
8174
9192
  ]);
8175
9193
 
8176
- var _sfc_main$b = vue.defineComponent({
9194
+ var _sfc_main$c = vue.defineComponent({
8177
9195
  components: {
8178
9196
  ListPagination: FPagination,
8179
9197
  ListSearch: FSearch,
@@ -8236,47 +9254,22 @@ var _sfc_main$b = vue.defineComponent({
8236
9254
  }
8237
9255
  });
8238
9256
 
8239
- const _hoisted_1$9 = {
9257
+ const _hoisted_1$a = {
8240
9258
  class: "mb-2"
8241
9259
  };
8242
- const _hoisted_2$9 = /* @__PURE__ */ vue.createElementVNode("h6", null, [
8243
- /* @__PURE__ */ vue.createElementVNode("i", {
8244
- class: "fa fa-compact-disc"
8245
- }),
8246
- /* @__PURE__ */ vue.createTextVNode(" MasterImage")
8247
- ], -1);
8248
- const _hoisted_3$9 = {
9260
+ const _hoisted_2$9 = {
8249
9261
  class: "mb-2"
8250
9262
  };
8251
- const _hoisted_4$8 = /* @__PURE__ */ vue.createElementVNode("hr", null, null, -1);
8252
- const _hoisted_5$6 = /* @__PURE__ */ vue.createElementVNode("h6", null, [
8253
- /* @__PURE__ */ vue.createElementVNode("i", {
8254
- class: "fa fa-city"
8255
- }),
8256
- /* @__PURE__ */ vue.createTextVNode(" Nodes")
8257
- ], -1);
8258
- const _hoisted_6$5 = {
9263
+ const _hoisted_3$7 = {
8259
9264
  class: "row"
8260
9265
  };
8261
- const _hoisted_7$3 = {
9266
+ const _hoisted_4$7 = {
8262
9267
  class: "col-12 col-xl-6"
8263
9268
  };
8264
- const _hoisted_8$3 = /* @__PURE__ */ vue.createElementVNode("span", null, [
8265
- /* @__PURE__ */ vue.createTextVNode("Nodes "),
8266
- /* @__PURE__ */ vue.createElementVNode("span", {
8267
- class: "text-info"
8268
- }, "available")
8269
- ], -1);
8270
- const _hoisted_9$3 = {
9269
+ const _hoisted_5$4 = {
8271
9270
  class: "col-12 col-xl-6"
8272
9271
  };
8273
- const _hoisted_10$2 = /* @__PURE__ */ vue.createElementVNode("span", null, [
8274
- /* @__PURE__ */ vue.createTextVNode("Nodes "),
8275
- /* @__PURE__ */ vue.createElementVNode("span", {
8276
- class: "text-success"
8277
- }, "selected")
8278
- ], -1);
8279
- function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
9272
+ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
8280
9273
  const _component_FMasterImagePicker = vue.resolveComponent("FMasterImagePicker");
8281
9274
  const _component_ListSearch = vue.resolveComponent("ListSearch");
8282
9275
  const _component_ListPagination = vue.resolveComponent("ListPagination");
@@ -8284,9 +9277,14 @@ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
8284
9277
  const _component_FProjectNodes = vue.resolveComponent("FProjectNodes");
8285
9278
  const _component_FAnalysisNodes = vue.resolveComponent("FAnalysisNodes");
8286
9279
  return vue.openBlock(), vue.createElementBlock("div", null, [
8287
- vue.createElementVNode("div", _hoisted_1$9, [
8288
- _hoisted_2$9,
8289
- vue.createElementVNode("div", _hoisted_3$9, [
9280
+ vue.createElementVNode("div", _hoisted_1$a, [
9281
+ _cache[0] || (_cache[0] = vue.createElementVNode("h6", null, [
9282
+ vue.createElementVNode("i", {
9283
+ class: "fa fa-compact-disc"
9284
+ }),
9285
+ vue.createTextVNode(" MasterImage")
9286
+ ], -1)),
9287
+ vue.createElementVNode("div", _hoisted_2$9, [
8290
9288
  vue.createVNode(_component_FMasterImagePicker, {
8291
9289
  "entity-id": _ctx.entity.master_image_id,
8292
9290
  onSelected: _ctx.handleMasterImageSelected
@@ -8296,11 +9294,16 @@ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
8296
9294
  ])
8297
9295
  ])
8298
9296
  ]),
8299
- _hoisted_4$8,
9297
+ _cache[4] || (_cache[4] = vue.createElementVNode("hr", null, null, -1)),
8300
9298
  vue.createElementVNode("div", null, [
8301
- _hoisted_5$6,
8302
- vue.createElementVNode("div", _hoisted_6$5, [
8303
- vue.createElementVNode("div", _hoisted_7$3, [
9299
+ _cache[3] || (_cache[3] = vue.createElementVNode("h6", null, [
9300
+ vue.createElementVNode("i", {
9301
+ class: "fa fa-city"
9302
+ }),
9303
+ vue.createTextVNode(" Nodes")
9304
+ ], -1)),
9305
+ vue.createElementVNode("div", _hoisted_3$7, [
9306
+ vue.createElementVNode("div", _hoisted_4$7, [
8304
9307
  vue.createVNode(_component_FProjectNodes, {
8305
9308
  ref: "FProjectNodes",
8306
9309
  "realm-id": _ctx.entity.realm_id,
@@ -8312,7 +9315,12 @@ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
8312
9315
  }
8313
9316
  }, {
8314
9317
  header: vue.withCtx((props)=>[
8315
- _hoisted_8$3,
9318
+ _cache[1] || (_cache[1] = vue.createElementVNode("span", null, [
9319
+ vue.createTextVNode("Nodes "),
9320
+ vue.createElementVNode("span", {
9321
+ class: "text-info"
9322
+ }, "available")
9323
+ ], -1)),
8316
9324
  vue.createVNode(_component_ListSearch, {
8317
9325
  load: props.load,
8318
9326
  meta: props.meta
@@ -8354,7 +9362,7 @@ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
8354
9362
  "query"
8355
9363
  ])
8356
9364
  ]),
8357
- vue.createElementVNode("div", _hoisted_9$3, [
9365
+ vue.createElementVNode("div", _hoisted_5$4, [
8358
9366
  vue.createVNode(_component_FAnalysisNodes, {
8359
9367
  ref: "FAnalysisNodes",
8360
9368
  "realm-id": _ctx.entity.realm_id,
@@ -8365,9 +9373,14 @@ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
8365
9373
  }
8366
9374
  }
8367
9375
  }, {
8368
- header: vue.withCtx(()=>[
8369
- _hoisted_10$2
8370
- ]),
9376
+ header: vue.withCtx(()=>_cache[2] || (_cache[2] = [
9377
+ vue.createElementVNode("span", null, [
9378
+ vue.createTextVNode("Nodes "),
9379
+ vue.createElementVNode("span", {
9380
+ class: "text-success"
9381
+ }, "selected")
9382
+ ], -1)
9383
+ ])),
8371
9384
  _: 1
8372
9385
  }, 8, [
8373
9386
  "realm-id",
@@ -8378,14 +9391,14 @@ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
8378
9391
  ])
8379
9392
  ]);
8380
9393
  }
8381
- var FAnalysisWizardStepBase = /* @__PURE__ */ _export_sfc(_sfc_main$b, [
9394
+ var FAnalysisWizardStepBase = /* @__PURE__ */ _export_sfc(_sfc_main$c, [
8382
9395
  [
8383
9396
  "render",
8384
- _sfc_render$b
9397
+ _sfc_render$c
8385
9398
  ]
8386
9399
  ]);
8387
9400
 
8388
- var _sfc_main$a = vue.defineComponent({
9401
+ var _sfc_main$b = vue.defineComponent({
8389
9402
  props: {
8390
9403
  entity: {
8391
9404
  type: Object,
@@ -8437,25 +9450,19 @@ var _sfc_main$a = vue.defineComponent({
8437
9450
  }
8438
9451
  });
8439
9452
 
8440
- const _hoisted_1$8 = {
9453
+ const _hoisted_1$9 = {
8441
9454
  class: "title"
8442
9455
  };
8443
9456
  const _hoisted_2$8 = {
8444
9457
  class: "ms-auto d-flex flex-row me-1"
8445
9458
  };
8446
- const _hoisted_3$8 = {
9459
+ const _hoisted_3$6 = {
8447
9460
  class: "ms-1"
8448
9461
  };
8449
- const _hoisted_4$7 = [
9462
+ const _hoisted_4$6 = [
8450
9463
  "disabled"
8451
9464
  ];
8452
- const _hoisted_5$5 = /* @__PURE__ */ vue.createElementVNode("i", {
8453
- class: "fa fa-trash"
8454
- }, null, -1);
8455
- const _hoisted_6$4 = [
8456
- _hoisted_5$5
8457
- ];
8458
- function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
9465
+ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
8459
9466
  return vue.openBlock(), vue.createElementBlock("div", {
8460
9467
  class: vue.normalizeClass([
8461
9468
  "card card-file d-flex flex-row align-items-center p-1",
@@ -8470,7 +9477,7 @@ function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
8470
9477
  "prevent"
8471
9478
  ]))
8472
9479
  }, [
8473
- vue.createElementVNode("span", _hoisted_1$8, vue.toDisplayString(_ctx.entity.name), 1)
9480
+ vue.createElementVNode("span", _hoisted_1$9, vue.toDisplayString(_ctx.entity.name), 1)
8474
9481
  ]),
8475
9482
  vue.createElementVNode("div", _hoisted_2$8, [
8476
9483
  vue.createElementVNode("div", null, [
@@ -8496,7 +9503,7 @@ function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
8496
9503
  }, null, 2)
8497
9504
  ], 2)) : vue.createCommentVNode("", true)
8498
9505
  ]),
8499
- vue.createElementVNode("div", _hoisted_3$8, [
9506
+ vue.createElementVNode("div", _hoisted_3$6, [
8500
9507
  vue.createElementVNode("button", {
8501
9508
  type: "button",
8502
9509
  class: "btn btn-danger btn-xs",
@@ -8504,15 +9511,19 @@ function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
8504
9511
  onClick: _cache[2] || (_cache[2] = vue.withModifiers((...args)=>_ctx.drop && _ctx.drop(...args), [
8505
9512
  "prevent"
8506
9513
  ]))
8507
- }, _hoisted_6$4, 8, _hoisted_4$7)
9514
+ }, _cache[3] || (_cache[3] = [
9515
+ vue.createElementVNode("i", {
9516
+ class: "fa fa-trash"
9517
+ }, null, -1)
9518
+ ]), 8, _hoisted_4$6)
8508
9519
  ])
8509
9520
  ])
8510
9521
  ], 2);
8511
9522
  }
8512
- var FAnalysisFile = /* @__PURE__ */ _export_sfc(_sfc_main$a, [
9523
+ var FAnalysisFile = /* @__PURE__ */ _export_sfc(_sfc_main$b, [
8513
9524
  [
8514
9525
  "render",
8515
- _sfc_render$a
9526
+ _sfc_render$b
8516
9527
  ]
8517
9528
  ]);
8518
9529
 
@@ -8542,7 +9553,7 @@ const FAnalysisBucketFiles = vue.defineComponent({
8542
9553
  }
8543
9554
  });
8544
9555
 
8545
- var _sfc_main$9 = vue.defineComponent({
9556
+ var _sfc_main$a = vue.defineComponent({
8546
9557
  props: {
8547
9558
  file: {
8548
9559
  type: Object,
@@ -8574,41 +9585,229 @@ var _sfc_main$9 = vue.defineComponent({
8574
9585
  }
8575
9586
  });
8576
9587
 
8577
- const _hoisted_1$7 = {
9588
+ const _hoisted_1$8 = {
8578
9589
  class: "card card-file d-flex flex-row align-items-center p-1"
8579
9590
  };
8580
9591
  const _hoisted_2$7 = {
8581
9592
  class: "card-heading"
8582
9593
  };
8583
- const _hoisted_3$7 = {
9594
+ const _hoisted_3$5 = {
8584
9595
  class: "title"
8585
9596
  };
8586
- const _hoisted_4$6 = {
9597
+ const _hoisted_4$5 = {
8587
9598
  class: "ms-auto"
8588
9599
  };
8589
- const _hoisted_5$4 = /* @__PURE__ */ vue.createElementVNode("i", {
8590
- class: "fa fa fa-trash"
8591
- }, null, -1);
8592
- const _hoisted_6$3 = [
8593
- _hoisted_5$4
8594
- ];
8595
- function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
8596
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
9600
+ function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
9601
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$8, [
8597
9602
  vue.createElementVNode("div", _hoisted_2$7, [
8598
- vue.createElementVNode("span", _hoisted_3$7, vue.toDisplayString(_ctx.path), 1)
9603
+ vue.createElementVNode("span", _hoisted_3$5, vue.toDisplayString(_ctx.path), 1)
8599
9604
  ]),
8600
- vue.createElementVNode("div", _hoisted_4$6, [
9605
+ vue.createElementVNode("div", _hoisted_4$5, [
8601
9606
  vue.createElementVNode("button", {
8602
9607
  type: "button",
8603
9608
  class: "btn btn-dark btn-xs",
8604
9609
  onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args)=>_ctx.drop && _ctx.drop(...args), [
8605
9610
  "prevent"
8606
9611
  ]))
8607
- }, _hoisted_6$3)
9612
+ }, _cache[1] || (_cache[1] = [
9613
+ vue.createElementVNode("i", {
9614
+ class: "fa fa fa-trash"
9615
+ }, null, -1)
9616
+ ]))
9617
+ ])
9618
+ ]);
9619
+ }
9620
+ var FAnalysisFormFile = /* @__PURE__ */ _export_sfc(_sfc_main$a, [
9621
+ [
9622
+ "render",
9623
+ _sfc_render$a
9624
+ ]
9625
+ ]);
9626
+
9627
+ var _sfc_main$9 = vue.defineComponent({
9628
+ components: {
9629
+ FAnalysisFormFile
9630
+ },
9631
+ props: {
9632
+ entity: {
9633
+ type: Object,
9634
+ required: true
9635
+ }
9636
+ },
9637
+ emits: [
9638
+ 'fileUploaded',
9639
+ 'uploaded',
9640
+ 'failed'
9641
+ ],
9642
+ setup (props, { emit }) {
9643
+ const coreClient = injectCoreHTTPClient();
9644
+ const storageClient = injectStorageHTTPClient();
9645
+ const busy = vue.ref(false);
9646
+ const tempFiles = vue.ref([]);
9647
+ const directoryMode = vue.ref(true);
9648
+ const vNode = vue.ref(null);
9649
+ const checkTempFiles = ($event)=>{
9650
+ $event.preventDefault();
9651
+ for(let i = 0; i < $event.target.files.length; i++){
9652
+ tempFiles.value.push($event.target.files[i]);
9653
+ }
9654
+ if (vNode.value) {
9655
+ vNode.value = '';
9656
+ }
9657
+ };
9658
+ const dropTempFile = ($event)=>{
9659
+ const index = tempFiles.value.findIndex((file)=>{
9660
+ if (hasOwnProperty(file, 'webkitRelativePath') && hasOwnProperty($event, 'webkitRelativePath')) {
9661
+ return file.webkitRelativePath === $event.webkitRelativePath;
9662
+ }
9663
+ return file.name === $event.name;
9664
+ });
9665
+ if (index !== -1) {
9666
+ tempFiles.value.splice(index, 1);
9667
+ }
9668
+ };
9669
+ const upload = wrapFnWithBusyState(busy, async ()=>{
9670
+ if (tempFiles.value.length === 0) return;
9671
+ if (!props.entity.external_id) {
9672
+ emit('failed', new Error('The analysis bucket has not created yet.'));
9673
+ return;
9674
+ }
9675
+ try {
9676
+ const formData = new FormData();
9677
+ for(let i = 0; i < tempFiles.value.length; i++){
9678
+ formData.append(`files[${i}]`, tempFiles.value[i]);
9679
+ }
9680
+ const { data: bucketFiles } = await storageClient.bucket.upload(props.entity.external_id, formData);
9681
+ for(let i = 0; i < bucketFiles.length; i++){
9682
+ const file = await coreClient.analysisBucketFile.create({
9683
+ external_id: bucketFiles[i].id,
9684
+ bucket_id: props.entity.id,
9685
+ analysis_id: props.entity.analysis_id,
9686
+ name: bucketFiles[i].path
9687
+ });
9688
+ emit('fileUploaded', file);
9689
+ }
9690
+ tempFiles.value = [];
9691
+ emit('uploaded');
9692
+ } catch (e) {
9693
+ emit('failed', e);
9694
+ }
9695
+ });
9696
+ return {
9697
+ directoryMode,
9698
+ busy,
9699
+ vNode,
9700
+ tempFiles,
9701
+ checkTempFiles,
9702
+ dropTempFile,
9703
+ upload
9704
+ };
9705
+ }
9706
+ });
9707
+
9708
+ const _hoisted_1$7 = {
9709
+ class: "d-flex flex-column"
9710
+ };
9711
+ const _hoisted_2$6 = {
9712
+ class: "form-group"
9713
+ };
9714
+ const _hoisted_3$4 = {
9715
+ class: "form-label"
9716
+ };
9717
+ const _hoisted_4$4 = [
9718
+ "webkitdirectory",
9719
+ "disbaled"
9720
+ ];
9721
+ const _hoisted_5$3 = {
9722
+ class: "form-group mb-0"
9723
+ };
9724
+ const _hoisted_6$3 = {
9725
+ class: "form-check form-switch"
9726
+ };
9727
+ const _hoisted_7$2 = {
9728
+ key: 0,
9729
+ class: "alert alert-info alert-sm m-t-10"
9730
+ };
9731
+ const _hoisted_8$2 = {
9732
+ class: "d-flex flex-column"
9733
+ };
9734
+ const _hoisted_9 = {
9735
+ class: "form-group"
9736
+ };
9737
+ const _hoisted_10 = [
9738
+ "disabled"
9739
+ ];
9740
+ function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
9741
+ const _component_FAnalysisFormFile = vue.resolveComponent("FAnalysisFormFile");
9742
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
9743
+ vue.createElementVNode("div", null, [
9744
+ vue.createElementVNode("div", _hoisted_2$6, [
9745
+ vue.createElementVNode("label", _hoisted_3$4, vue.toDisplayString(_ctx.directoryMode ? "Directories" : "Files"), 1),
9746
+ vue.createElementVNode("input", {
9747
+ id: "files",
9748
+ ref: "vNode",
9749
+ type: "file",
9750
+ webkitdirectory: _ctx.directoryMode,
9751
+ class: "form-control",
9752
+ multiple: "",
9753
+ disbaled: _ctx.busy,
9754
+ onChange: _cache[0] || (_cache[0] = (...args)=>_ctx.checkTempFiles && _ctx.checkTempFiles(...args))
9755
+ }, null, 40, _hoisted_4$4)
9756
+ ]),
9757
+ vue.createElementVNode("div", _hoisted_5$3, [
9758
+ vue.createElementVNode("div", _hoisted_6$3, [
9759
+ vue.withDirectives(vue.createElementVNode("input", {
9760
+ id: "train-file-manager-switch",
9761
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event)=>_ctx.directoryMode = $event),
9762
+ class: "form-check-input",
9763
+ type: "checkbox"
9764
+ }, null, 512), [
9765
+ [
9766
+ vue.vModelCheckbox,
9767
+ _ctx.directoryMode
9768
+ ]
9769
+ ]),
9770
+ _cache[3] || (_cache[3] = vue.createElementVNode("label", {
9771
+ class: "form-check-label",
9772
+ for: "train-file-manager-switch"
9773
+ }, "Directory Mode", -1))
9774
+ ])
9775
+ ])
9776
+ ]),
9777
+ vue.createElementVNode("div", null, [
9778
+ _ctx.tempFiles.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$2, " You have not selected any " + vue.toDisplayString(_ctx.directoryMode ? "directories" : "files") + " to upload. ", 1)) : vue.createCommentVNode("", true),
9779
+ vue.createElementVNode("div", _hoisted_8$2, [
9780
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.tempFiles, (file, key)=>{
9781
+ return vue.openBlock(), vue.createBlock(_component_FAnalysisFormFile, {
9782
+ key,
9783
+ class: "me-1",
9784
+ file,
9785
+ onDrop: _ctx.dropTempFile
9786
+ }, null, 8, [
9787
+ "file",
9788
+ "onDrop"
9789
+ ]);
9790
+ }), 128))
9791
+ ]),
9792
+ vue.createElementVNode("div", _hoisted_9, [
9793
+ vue.createElementVNode("button", {
9794
+ type: "button",
9795
+ class: "btn btn-sm btn-primary btn-block",
9796
+ disabled: _ctx.busy || _ctx.tempFiles.length === 0,
9797
+ onClick: _cache[2] || (_cache[2] = vue.withModifiers((...args)=>_ctx.upload && _ctx.upload(...args), [
9798
+ "prevent"
9799
+ ]))
9800
+ }, _cache[4] || (_cache[4] = [
9801
+ vue.createElementVNode("i", {
9802
+ class: "fa fa-upload"
9803
+ }, null, -1),
9804
+ vue.createTextVNode(" Upload ")
9805
+ ]), 8, _hoisted_10)
9806
+ ])
8608
9807
  ])
8609
9808
  ]);
8610
9809
  }
8611
- var FAnalysisFormFile = /* @__PURE__ */ _export_sfc(_sfc_main$9, [
9810
+ var FAnalysisBucketFileUpload = /* @__PURE__ */ _export_sfc(_sfc_main$9, [
8612
9811
  [
8613
9812
  "render",
8614
9813
  _sfc_render$9
@@ -8617,8 +9816,9 @@ var FAnalysisFormFile = /* @__PURE__ */ _export_sfc(_sfc_main$9, [
8617
9816
 
8618
9817
  var _sfc_main$8 = vue.defineComponent({
8619
9818
  components: {
9819
+ BModal: bootstrapVueNext.BModal,
9820
+ FAnalysisBucketFileUpload,
8620
9821
  FAnalysisBucketFiles,
8621
- FAnalysisFormFile,
8622
9822
  FAnalysisFile
8623
9823
  },
8624
9824
  props: {
@@ -8640,7 +9840,6 @@ var _sfc_main$8 = vue.defineComponent({
8640
9840
  ],
8641
9841
  setup (props, { emit }) {
8642
9842
  const coreClient = injectCoreHTTPClient();
8643
- const storageClient = injectStorageHTTPClient();
8644
9843
  const entrypointFile = vue.ref(null);
8645
9844
  if (props.fileEntity) {
8646
9845
  entrypointFile.value = props.fileEntity;
@@ -8651,10 +9850,12 @@ var _sfc_main$8 = vue.defineComponent({
8651
9850
  }
8652
9851
  return undefined;
8653
9852
  });
8654
- const tempFiles = vue.ref([]);
9853
+ const modal = vue.ref(false);
9854
+ const toggleModal = ()=>{
9855
+ modal.value = !modal.value;
9856
+ };
8655
9857
  const selected = vue.ref([]);
8656
9858
  const selectAll = vue.ref(false);
8657
- const directoryMode = vue.ref(true);
8658
9859
  const busy = vue.ref(false);
8659
9860
  const fileListNode = vue.ref(null);
8660
9861
  const fileListQuery = vue.computed(()=>({
@@ -8685,32 +9886,16 @@ var _sfc_main$8 = vue.defineComponent({
8685
9886
  }
8686
9887
  emit('updated', entity);
8687
9888
  };
8688
- const upload = wrapFnWithBusyState(busy, async ()=>{
8689
- if (tempFiles.value.length === 0) return;
8690
- if (!props.entity.external_id) {
8691
- emit('failed', new Error('The analysis bucket has not created yet.'));
8692
- }
8693
- try {
8694
- const formData = new FormData();
8695
- for(let i = 0; i < tempFiles.value.length; i++){
8696
- formData.append(`files[${i}]`, tempFiles.value[i]);
8697
- }
8698
- const { data: bucketFiles } = await storageClient.bucket.upload(props.entity.external_id, formData);
8699
- for(let i = 0; i < bucketFiles.length; i++){
8700
- const file = await coreClient.analysisBucketFile.create({
8701
- external_id: bucketFiles[i].id,
8702
- bucket_id: props.entity.id,
8703
- analysis_id: props.entity.analysis_id,
8704
- name: bucketFiles[i].path
8705
- });
8706
- handleCreated(file);
8707
- }
8708
- tempFiles.value = [];
8709
- emit('uploaded');
8710
- } catch (e) {
8711
- emit('failed', e);
8712
- }
8713
- });
9889
+ const handleFailed = (e)=>{
9890
+ emit('failed', e);
9891
+ };
9892
+ const handleUploaded = ()=>{
9893
+ emit('uploaded');
9894
+ toggleModal();
9895
+ };
9896
+ const handleFileUploaded = (entity)=>{
9897
+ handleCreated(entity);
9898
+ };
8714
9899
  const dropSelected = wrapFnWithBusyState(busy, async ()=>{
8715
9900
  if (selected.value.length === 0) return;
8716
9901
  try {
@@ -8741,27 +9926,6 @@ var _sfc_main$8 = vue.defineComponent({
8741
9926
  selected.value.splice(index, 1);
8742
9927
  }
8743
9928
  };
8744
- const filesNode = vue.ref(null);
8745
- const checkTempFiles = ($event)=>{
8746
- $event.preventDefault();
8747
- for(let i = 0; i < $event.target.files.length; i++){
8748
- tempFiles.value.push($event.target.files[i]);
8749
- }
8750
- if (filesNode.value) {
8751
- filesNode.value = '';
8752
- }
8753
- };
8754
- const dropTempFile = ($event)=>{
8755
- const index = tempFiles.value.findIndex((file)=>{
8756
- if (hasOwnProperty(file, 'webkitRelativePath') && hasOwnProperty($event, 'webkitRelativePath')) {
8757
- return file.webkitRelativePath === $event.webkitRelativePath;
8758
- }
8759
- return file.name === $event.name;
8760
- });
8761
- if (index !== -1) {
8762
- tempFiles.value.splice(index, 1);
8763
- }
8764
- };
8765
9929
  const changeEntryPointFile = async (file)=>{
8766
9930
  if (entrypointFile.value) {
8767
9931
  if (entrypointFile.value.id === file.id) {
@@ -8789,261 +9953,199 @@ var _sfc_main$8 = vue.defineComponent({
8789
9953
  }
8790
9954
  };
8791
9955
  return {
8792
- directoryMode,
8793
9956
  busy,
8794
- checkTempFiles,
8795
- tempFiles,
8796
9957
  selected,
8797
9958
  selectAll,
8798
9959
  dropSelected,
8799
9960
  selectAllFiles,
8800
- dropTempFile,
8801
- upload,
8802
9961
  handleCreated,
8803
9962
  handleDeleted,
8804
9963
  handleUpdated,
9964
+ handleFailed,
9965
+ handleUploaded,
9966
+ handleFileUploaded,
8805
9967
  toggleFile,
8806
9968
  entrypointFile,
8807
9969
  entrypointFileId,
8808
9970
  changeEntryPointFile,
8809
- filesNode,
8810
9971
  fileListNode,
8811
- fileListQuery
9972
+ fileListQuery,
9973
+ modal,
9974
+ toggleModal
8812
9975
  };
8813
9976
  }
8814
9977
  });
8815
9978
 
8816
9979
  const _hoisted_1$6 = {
8817
- class: "row"
8818
- };
8819
- const _hoisted_2$6 = {
8820
- class: "col"
8821
- };
8822
- const _hoisted_3$6 = /* @__PURE__ */ vue.createElementVNode("h6", null, [
8823
- /* @__PURE__ */ vue.createElementVNode("i", {
8824
- class: "fa fa-upload"
8825
- }),
8826
- /* @__PURE__ */ vue.createTextVNode(" Upload")
8827
- ], -1);
8828
- const _hoisted_4$5 = {
8829
- class: "form-group"
8830
- };
8831
- const _hoisted_5$3 = {
8832
- class: "form-label"
8833
- };
8834
- const _hoisted_6$2 = [
8835
- "webkitdirectory",
8836
- "disbaled"
8837
- ];
8838
- const _hoisted_7$2 = {
8839
- class: "form-group"
8840
- };
8841
- const _hoisted_8$2 = {
8842
- class: "form-check form-switch"
8843
- };
8844
- const _hoisted_9$2 = /* @__PURE__ */ vue.createElementVNode("label", {
8845
- class: "form-check-label",
8846
- for: "train-file-manager-switch"
8847
- }, "Directory Mode", -1);
8848
- const _hoisted_10$1 = {
8849
- class: "row"
9980
+ class: "d-flex flex-column gap-1"
8850
9981
  };
8851
- const _hoisted_11$1 = {
8852
- class: "col"
8853
- };
8854
- const _hoisted_12$1 = /* @__PURE__ */ vue.createStaticVNode('<div class="d-flex flex-row"><div><h6 class="title text-muted"> Files <span style="font-size:0.65rem;"><span class="text-info"><i class="fa fa-memory"></i> in Memory </span></span></h6></div><div class="ms-auto"><h6 class="title text-muted"> Path: <span class="sub-title"> [root] </span></h6></div></div>', 1);
8855
- const _hoisted_13 = {
8856
- key: 0,
8857
- class: "alert alert-info alert-sm m-t-10"
9982
+ const _hoisted_2$5 = {
9983
+ class: "form-check"
8858
9984
  };
8859
- const _hoisted_14 = {
9985
+ const _hoisted_3$3 = {
8860
9986
  class: "d-flex flex-column"
8861
9987
  };
8862
- const _hoisted_15 = {
9988
+ const _hoisted_4$3 = {
8863
9989
  class: "form-group"
8864
9990
  };
8865
- const _hoisted_16 = [
9991
+ const _hoisted_5$2 = [
8866
9992
  "disabled"
8867
9993
  ];
8868
- const _hoisted_17 = {
8869
- class: "col"
9994
+ const _hoisted_6$2 = {
9995
+ class: "d-flex flex-row w-100"
8870
9996
  };
8871
- const _hoisted_18 = /* @__PURE__ */ vue.createElementVNode("h6", {
8872
- class: "title text-muted"
8873
- }, [
8874
- /* @__PURE__ */ vue.createTextVNode(" Files "),
8875
- /* @__PURE__ */ vue.createElementVNode("span", {
8876
- style: {
8877
- "font-size": "0.65rem"
8878
- }
8879
- }, [
8880
- /* @__PURE__ */ vue.createElementVNode("span", {
8881
- class: "text-success"
8882
- }, [
8883
- /* @__PURE__ */ vue.createElementVNode("i", {
8884
- class: "fa fa-file"
8885
- }),
8886
- /* @__PURE__ */ vue.createTextVNode(" uploaded ")
8887
- ])
8888
- ])
8889
- ], -1);
8890
- const _hoisted_19 = {
8891
- class: "form-check"
8892
- };
8893
- const _hoisted_20 = /* @__PURE__ */ vue.createElementVNode("label", {
8894
- for: "selectAllFiles"
8895
- }, "Select all", -1);
8896
- const _hoisted_21 = {
8897
- class: "d-flex flex-column"
8898
- };
8899
- const _hoisted_22 = {
8900
- class: "form-group"
9997
+ const _hoisted_7$1 = {
9998
+ class: "ms-auto"
8901
9999
  };
8902
- const _hoisted_23 = [
8903
- "disabled"
10000
+ const _hoisted_8$1 = [
10001
+ "onClick"
8904
10002
  ];
8905
- const _hoisted_24 = /* @__PURE__ */ vue.createElementVNode("i", {
8906
- class: "fa fa-trash"
8907
- }, null, -1);
8908
10003
  function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
8909
- const _component_FAnalysisFormFile = vue.resolveComponent("FAnalysisFormFile");
8910
10004
  const _component_FAnalysisFile = vue.resolveComponent("FAnalysisFile");
8911
10005
  const _component_FAnalysisBucketFiles = vue.resolveComponent("FAnalysisBucketFiles");
8912
- return vue.openBlock(), vue.createElementBlock("div", null, [
8913
- vue.createElementVNode("div", _hoisted_1$6, [
8914
- vue.createElementVNode("div", _hoisted_2$6, [
8915
- _hoisted_3$6,
8916
- vue.createElementVNode("div", _hoisted_4$5, [
8917
- vue.createElementVNode("label", _hoisted_5$3, vue.toDisplayString(_ctx.directoryMode ? "Directories" : "Files"), 1),
8918
- vue.createElementVNode("input", {
8919
- id: "files",
8920
- ref: "filesNode",
8921
- type: "file",
8922
- webkitdirectory: _ctx.directoryMode,
8923
- class: "form-control",
8924
- multiple: "",
8925
- disbaled: _ctx.busy,
8926
- onChange: _cache[0] || (_cache[0] = (...args)=>_ctx.checkTempFiles && _ctx.checkTempFiles(...args))
8927
- }, null, 40, _hoisted_6$2)
8928
- ]),
8929
- vue.createElementVNode("div", _hoisted_7$2, [
8930
- vue.createElementVNode("div", _hoisted_8$2, [
8931
- vue.withDirectives(vue.createElementVNode("input", {
8932
- id: "train-file-manager-switch",
8933
- "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event)=>_ctx.directoryMode = $event),
8934
- class: "form-check-input",
8935
- type: "checkbox"
8936
- }, null, 512), [
8937
- [
8938
- vue.vModelCheckbox,
8939
- _ctx.directoryMode
8940
- ]
8941
- ]),
8942
- _hoisted_9$2
8943
- ])
8944
- ])
8945
- ])
10006
+ const _component_FAnalysisBucketFileUpload = vue.resolveComponent("FAnalysisBucketFileUpload");
10007
+ const _component_BModal = vue.resolveComponent("BModal");
10008
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [
10009
+ vue.createElementVNode("div", null, [
10010
+ vue.createElementVNode("button", {
10011
+ type: "button",
10012
+ class: "btn btn-primary btn-block",
10013
+ onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args)=>_ctx.toggleModal && _ctx.toggleModal(...args), [
10014
+ "prevent"
10015
+ ]))
10016
+ }, _cache[5] || (_cache[5] = [
10017
+ vue.createElementVNode("i", {
10018
+ class: "fa fa-upload"
10019
+ }, null, -1),
10020
+ vue.createTextVNode(" Upload ")
10021
+ ]))
8946
10022
  ]),
8947
- vue.createElementVNode("div", _hoisted_10$1, [
8948
- vue.createElementVNode("div", _hoisted_11$1, [
8949
- _hoisted_12$1,
8950
- _ctx.tempFiles.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_13, " You have not selected any files to upload... ")) : vue.createCommentVNode("", true),
8951
- vue.createElementVNode("div", _hoisted_14, [
8952
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.tempFiles, (file, key)=>{
8953
- return vue.openBlock(), vue.createBlock(_component_FAnalysisFormFile, {
8954
- key,
8955
- class: "me-1",
8956
- file,
8957
- onDrop: _ctx.dropTempFile
8958
- }, null, 8, [
8959
- "file",
8960
- "onDrop"
8961
- ]);
8962
- }), 128))
10023
+ vue.createElementVNode("div", null, [
10024
+ vue.createElementVNode("div", _hoisted_2$5, [
10025
+ vue.withDirectives(vue.createElementVNode("input", {
10026
+ id: "selectAllFiles",
10027
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event)=>_ctx.selectAll = $event),
10028
+ type: "checkbox",
10029
+ class: "form-check-input",
10030
+ onChange: _cache[2] || (_cache[2] = (...args)=>_ctx.selectAllFiles && _ctx.selectAllFiles(...args))
10031
+ }, null, 544), [
10032
+ [
10033
+ vue.vModelCheckbox,
10034
+ _ctx.selectAll
10035
+ ]
8963
10036
  ]),
8964
- vue.createElementVNode("div", _hoisted_15, [
8965
- vue.createElementVNode("button", {
8966
- type: "button",
8967
- class: "btn btn-xs btn-dark",
8968
- disabled: _ctx.busy || _ctx.tempFiles.length === 0,
8969
- onClick: _cache[2] || (_cache[2] = vue.withModifiers((...args)=>_ctx.upload && _ctx.upload(...args), [
8970
- "prevent"
8971
- ]))
8972
- }, " Upload ", 8, _hoisted_16)
8973
- ])
10037
+ _cache[6] || (_cache[6] = vue.createElementVNode("label", {
10038
+ for: "selectAllFiles"
10039
+ }, "Select all", -1))
8974
10040
  ]),
8975
- vue.createElementVNode("div", _hoisted_17, [
8976
- _hoisted_18,
8977
- vue.createElementVNode("div", _hoisted_19, [
8978
- vue.withDirectives(vue.createElementVNode("input", {
8979
- id: "selectAllFiles",
8980
- "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event)=>_ctx.selectAll = $event),
8981
- type: "checkbox",
8982
- class: "form-check-input",
8983
- onChange: _cache[4] || (_cache[4] = (...args)=>_ctx.selectAllFiles && _ctx.selectAllFiles(...args))
8984
- }, null, 544), [
8985
- [
8986
- vue.vModelCheckbox,
8987
- _ctx.selectAll
8988
- ]
10041
+ vue.createVNode(_component_FAnalysisBucketFiles, {
10042
+ ref: "fileListNode",
10043
+ query: _ctx.fileListQuery,
10044
+ "header-search": false,
10045
+ "header-title": false,
10046
+ "footer-pagination": false,
10047
+ onCreated: _ctx.handleCreated,
10048
+ onUpdated: _ctx.handleUpdated,
10049
+ onDeleted: _ctx.handleDeleted
10050
+ }, {
10051
+ body: vue.withCtx((props)=>[
10052
+ vue.createElementVNode("div", _hoisted_3$3, [
10053
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(props.data, (file)=>{
10054
+ return vue.openBlock(), vue.createBlock(_component_FAnalysisFile, {
10055
+ key: file.id,
10056
+ class: "me-1",
10057
+ entity: file,
10058
+ "files-selected": _ctx.selected,
10059
+ "file-selected-id": _ctx.entrypointFileId,
10060
+ onCheck: _ctx.toggleFile,
10061
+ onUpdated: props.updated,
10062
+ onDeleted: props.deleted,
10063
+ onToggle: _ctx.changeEntryPointFile
10064
+ }, null, 8, [
10065
+ "entity",
10066
+ "files-selected",
10067
+ "file-selected-id",
10068
+ "onCheck",
10069
+ "onUpdated",
10070
+ "onDeleted",
10071
+ "onToggle"
10072
+ ]);
10073
+ }), 128))
10074
+ ])
8989
10075
  ]),
8990
- _hoisted_20
8991
- ]),
8992
- vue.createVNode(_component_FAnalysisBucketFiles, {
8993
- ref: "fileListNode",
8994
- query: _ctx.fileListQuery,
8995
- "header-search": false,
8996
- "header-title": false,
8997
- "footer-pagination": false,
8998
- onCreated: _ctx.handleCreated,
8999
- onUpdated: _ctx.handleUpdated,
9000
- onDeleted: _ctx.handleDeleted
9001
- }, {
9002
- body: vue.withCtx((props)=>[
9003
- vue.createElementVNode("div", _hoisted_21, [
9004
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(props.data, (file)=>{
9005
- return vue.openBlock(), vue.createBlock(_component_FAnalysisFile, {
9006
- key: file.id,
9007
- class: "me-1",
9008
- entity: file,
9009
- "files-selected": _ctx.selected,
9010
- "file-selected-id": _ctx.entrypointFileId,
9011
- onCheck: _ctx.toggleFile,
9012
- onUpdated: props.updated,
9013
- onDeleted: props.deleted,
9014
- onToggle: _ctx.changeEntryPointFile
9015
- }, null, 8, [
9016
- "entity",
9017
- "files-selected",
9018
- "file-selected-id",
9019
- "onCheck",
9020
- "onUpdated",
9021
- "onDeleted",
9022
- "onToggle"
9023
- ]);
9024
- }), 128))
10076
+ _: 1
10077
+ }, 8, [
10078
+ "query",
10079
+ "onCreated",
10080
+ "onUpdated",
10081
+ "onDeleted"
10082
+ ]),
10083
+ vue.createElementVNode("div", _hoisted_4$3, [
10084
+ vue.createElementVNode("button", {
10085
+ type: "button",
10086
+ class: "btn btn-warning btn-xs",
10087
+ disabled: _ctx.busy || _ctx.selected.length === 0,
10088
+ onClick: _cache[3] || (_cache[3] = vue.withModifiers((...args)=>_ctx.dropSelected && _ctx.dropSelected(...args), [
10089
+ "prevent"
10090
+ ]))
10091
+ }, _cache[7] || (_cache[7] = [
10092
+ vue.createElementVNode("i", {
10093
+ class: "fa fa-trash"
10094
+ }, null, -1),
10095
+ vue.createTextVNode(" Delete ")
10096
+ ]), 8, _hoisted_5$2)
10097
+ ])
10098
+ ]),
10099
+ vue.createElementVNode("div", null, [
10100
+ vue.createVNode(_component_BModal, {
10101
+ modelValue: _ctx.modal,
10102
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event)=>_ctx.modal = $event),
10103
+ "no-footer": true,
10104
+ size: "lg"
10105
+ }, {
10106
+ header: vue.withCtx((props)=>[
10107
+ vue.createElementVNode("div", _hoisted_6$2, [
10108
+ _cache[9] || (_cache[9] = vue.createElementVNode("div", null, [
10109
+ vue.createElementVNode("h5", {
10110
+ class: "mb-0"
10111
+ }, [
10112
+ vue.createElementVNode("i", {
10113
+ class: "fa fa-upload"
10114
+ }),
10115
+ vue.createTextVNode(" Upload ")
10116
+ ])
10117
+ ], -1)),
10118
+ vue.createElementVNode("div", _hoisted_7$1, [
10119
+ vue.createElementVNode("button", {
10120
+ type: "button",
10121
+ class: "btn btn-xs btn-secondary",
10122
+ onClick: vue.withModifiers(($event)=>props.close(), [
10123
+ "prevent"
10124
+ ])
10125
+ }, _cache[8] || (_cache[8] = [
10126
+ vue.createElementVNode("i", {
10127
+ class: "fa fa-times"
10128
+ }, null, -1)
10129
+ ]), 8, _hoisted_8$1)
9025
10130
  ])
9026
- ]),
9027
- _: 1
9028
- }, 8, [
9029
- "query",
9030
- "onCreated",
9031
- "onUpdated",
9032
- "onDeleted"
9033
- ]),
9034
- vue.createElementVNode("div", _hoisted_22, [
9035
- vue.createElementVNode("button", {
9036
- type: "button",
9037
- class: "btn btn-warning btn-xs",
9038
- disabled: _ctx.busy || _ctx.selected.length === 0,
9039
- onClick: _cache[5] || (_cache[5] = vue.withModifiers((...args)=>_ctx.dropSelected && _ctx.dropSelected(...args), [
9040
- "prevent"
9041
- ]))
9042
- }, [
9043
- _hoisted_24,
9044
- vue.createTextVNode(" Delete ")
9045
- ], 8, _hoisted_23)
9046
- ])
10131
+ ])
10132
+ ]),
10133
+ default: vue.withCtx(()=>[
10134
+ vue.createVNode(_component_FAnalysisBucketFileUpload, {
10135
+ entity: _ctx.entity,
10136
+ onFileUploaded: _ctx.handleFileUploaded,
10137
+ onUploaded: _ctx.handleUploaded,
10138
+ onFailed: _ctx.handleFailed
10139
+ }, null, 8, [
10140
+ "entity",
10141
+ "onFileUploaded",
10142
+ "onUploaded",
10143
+ "onFailed"
10144
+ ])
10145
+ ]),
10146
+ _: 1
10147
+ }, 8, [
10148
+ "modelValue"
9047
10149
  ])
9048
10150
  ])
9049
10151
  ]);
@@ -9223,18 +10325,21 @@ var _sfc_main$7 = vue.defineComponent({
9223
10325
  }
9224
10326
  });
9225
10327
 
9226
- const _hoisted_1$5 = /* @__PURE__ */ vue.createElementVNode("span", null, "Entrypoint Command", -1);
9227
- const _hoisted_2$5 = /* @__PURE__ */ vue.createElementVNode("br", null, null, -1);
9228
- const _hoisted_3$5 = {
10328
+ const _hoisted_1$5 = {
10329
+ class: "row"
10330
+ };
10331
+ const _hoisted_2$4 = {
10332
+ class: "col-9"
10333
+ };
10334
+ const _hoisted_3$2 = {
10335
+ class: "col-3"
10336
+ };
10337
+ const _hoisted_4$2 = {
9229
10338
  class: "alert alert-sm alert-warning"
9230
10339
  };
9231
- const _hoisted_4$4 = /* @__PURE__ */ vue.createElementVNode("p", null, " The code bucket does not exist. Therefore, no files can be uploaded. ", -1);
9232
- const _hoisted_5$2 = /* @__PURE__ */ vue.createElementVNode("i", {
9233
- class: "fas fa-rotate-right"
9234
- }, null, -1);
9235
10340
  function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
9236
- const _component_FAnalysisImageCommand = vue.resolveComponent("FAnalysisImageCommand");
9237
10341
  const _component_FAnalysisBucketFileManager = vue.resolveComponent("FAnalysisBucketFileManager");
10342
+ const _component_FAnalysisImageCommand = vue.resolveComponent("FAnalysisImageCommand");
9238
10343
  const _component_FAnalysisBucket = vue.resolveComponent("FAnalysisBucket");
9239
10344
  return vue.openBlock(), vue.createElementBlock("div", null, [
9240
10345
  vue.createVNode(_component_FAnalysisBucket, {
@@ -9242,43 +10347,61 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
9242
10347
  "query-filters": _ctx.queryFilters
9243
10348
  }, {
9244
10349
  default: vue.withCtx(({ data: bucket })=>[
9245
- _hoisted_1$5,
9246
- _hoisted_2$5,
9247
- vue.createVNode(_component_FAnalysisImageCommand, {
9248
- class: "mt-2 mb-2",
9249
- "master-image-id": _ctx.entity.master_image_id,
9250
- "analysis-file": _ctx.entrypointEntity,
9251
- "analysis-id": _ctx.entity.id
9252
- }, null, 8, [
9253
- "master-image-id",
9254
- "analysis-file",
9255
- "analysis-id"
9256
- ]),
9257
- vue.createVNode(_component_FAnalysisBucketFileManager, {
9258
- entity: bucket,
9259
- "file-entity": _ctx.entrypointEntity,
9260
- onSetEntrypointFile: _ctx.handleEntrypointChanged,
9261
- onFailed: _ctx.handleFailed
9262
- }, null, 8, [
9263
- "entity",
9264
- "file-entity",
9265
- "onSetEntrypointFile",
9266
- "onFailed"
10350
+ vue.createElementVNode("div", _hoisted_1$5, [
10351
+ vue.createElementVNode("div", _hoisted_2$4, [
10352
+ _cache[1] || (_cache[1] = vue.createElementVNode("h6", null, [
10353
+ vue.createElementVNode("i", {
10354
+ class: "fa fa-file"
10355
+ }),
10356
+ vue.createTextVNode(" Files")
10357
+ ], -1)),
10358
+ vue.createVNode(_component_FAnalysisBucketFileManager, {
10359
+ entity: bucket,
10360
+ "file-entity": _ctx.entrypointEntity,
10361
+ onSetEntrypointFile: _ctx.handleEntrypointChanged,
10362
+ onFailed: _ctx.handleFailed
10363
+ }, null, 8, [
10364
+ "entity",
10365
+ "file-entity",
10366
+ "onSetEntrypointFile",
10367
+ "onFailed"
10368
+ ])
10369
+ ]),
10370
+ vue.createElementVNode("div", _hoisted_3$2, [
10371
+ _cache[2] || (_cache[2] = vue.createElementVNode("h6", null, [
10372
+ vue.createElementVNode("i", {
10373
+ class: "fa fa-terminal"
10374
+ }),
10375
+ vue.createTextVNode(" Command")
10376
+ ], -1)),
10377
+ vue.createVNode(_component_FAnalysisImageCommand, {
10378
+ class: "mt-2 mb-2",
10379
+ "master-image-id": _ctx.entity.master_image_id,
10380
+ "analysis-file": _ctx.entrypointEntity,
10381
+ "analysis-id": _ctx.entity.id
10382
+ }, null, 8, [
10383
+ "master-image-id",
10384
+ "analysis-file",
10385
+ "analysis-id"
10386
+ ])
10387
+ ])
9267
10388
  ])
9268
10389
  ]),
9269
10390
  error: vue.withCtx(()=>[
9270
- vue.createElementVNode("div", _hoisted_3$5, [
9271
- _hoisted_4$4,
10391
+ vue.createElementVNode("div", _hoisted_4$2, [
10392
+ _cache[4] || (_cache[4] = vue.createElementVNode("p", null, " The code bucket does not exist. Therefore, no files can be uploaded. ", -1)),
9272
10393
  vue.createElementVNode("button", {
9273
10394
  type: "button",
9274
10395
  class: "btn btn-xs btn-dark",
9275
10396
  onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args)=>_ctx.retry && _ctx.retry(...args), [
9276
10397
  "prevent"
9277
10398
  ]))
9278
- }, [
9279
- _hoisted_5$2,
10399
+ }, _cache[3] || (_cache[3] = [
10400
+ vue.createElementVNode("i", {
10401
+ class: "fas fa-rotate-right"
10402
+ }, null, -1),
9280
10403
  vue.createTextVNode(" Retry ")
9281
- ])
10404
+ ]))
9282
10405
  ])
9283
10406
  ]),
9284
10407
  _: 1
@@ -9298,17 +10421,15 @@ const _sfc_main$6 = {};
9298
10421
  const _hoisted_1$4 = {
9299
10422
  class: "alert alert-info alert-sm"
9300
10423
  };
9301
- const _hoisted_2$4 = /*#__PURE__*/ vue.createElementVNode("i", {
9302
- class: "fa fa-info"
9303
- }, null, -1);
9304
- const _hoisted_3$4 = /*#__PURE__*/ vue.createElementVNode("br", null, null, -1);
9305
10424
  function _sfc_render$6(_ctx, _cache) {
9306
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [
9307
- _hoisted_2$4,
10425
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, _cache[0] || (_cache[0] = [
10426
+ vue.createElementVNode("i", {
10427
+ class: "fa fa-info"
10428
+ }, null, -1),
9308
10429
  vue.createTextVNode(" The analysis is now fully configured and can now be built."),
9309
- _hoisted_3$4,
10430
+ vue.createElementVNode("br", null, null, -1),
9310
10431
  vue.createTextVNode(" Be aware that when you start the building process, you are not longer able to modify the configuration. ")
9311
- ]);
10432
+ ]));
9312
10433
  }
9313
10434
  var FAnalysisWizardStepFinal = /*#__PURE__*/ _export_sfc(_sfc_main$6, [
9314
10435
  [
@@ -9499,21 +10620,10 @@ var _sfc_main$5 = vue.defineComponent({
9499
10620
  }
9500
10621
  });
9501
10622
 
9502
- const _hoisted_1$3 = /* @__PURE__ */ vue.createElementVNode("h4", {
9503
- class: "wizard-title"
9504
- }, [
9505
- /* @__PURE__ */ vue.createElementVNode("i", {
9506
- class: "fa fa-hat-wizard"
9507
- }),
9508
- /* @__PURE__ */ vue.createTextVNode(" Wizard ")
9509
- ], -1);
9510
- const _hoisted_2$3 = /* @__PURE__ */ vue.createElementVNode("p", {
9511
- class: "category"
9512
- }, " Configure your analysis step by step ", -1);
9513
- const _hoisted_3$3 = {
10623
+ const _hoisted_1$3 = {
9514
10624
  class: "wizard-footer-left"
9515
10625
  };
9516
- const _hoisted_4$3 = {
10626
+ const _hoisted_2$3 = {
9517
10627
  class: "wizard-footer-right"
9518
10628
  };
9519
10629
  function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
@@ -9533,36 +10643,45 @@ function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
9533
10643
  onOnComplete: _ctx.handleWizardFinishedEvent,
9534
10644
  onOnError: _ctx.handleWizardErrorEvent
9535
10645
  }, {
9536
- title: vue.withCtx(()=>[
9537
- _hoisted_1$3,
9538
- _hoisted_2$3
9539
- ]),
10646
+ title: vue.withCtx(()=>_cache[0] || (_cache[0] = [
10647
+ vue.createElementVNode("h4", {
10648
+ class: "wizard-title"
10649
+ }, [
10650
+ vue.createElementVNode("i", {
10651
+ class: "fa fa-hat-wizard"
10652
+ }),
10653
+ vue.createTextVNode(" Wizard ")
10654
+ ], -1),
10655
+ vue.createElementVNode("p", {
10656
+ class: "category"
10657
+ }, " Configure your analysis step by step ", -1)
10658
+ ])),
9540
10659
  footer: vue.withCtx((props)=>[
9541
- vue.createElementVNode("div", _hoisted_3$3, [
10660
+ vue.createElementVNode("div", _hoisted_1$3, [
9542
10661
  props.activeTabIndex > 0 && !props.isLastStep ? (vue.openBlock(), vue.createBlock(_component_WizardButton, {
9543
10662
  key: 0,
9544
10663
  style: vue.normalizeStyle(props.fillButtonStyle),
9545
10664
  onClick: _ctx.prevWizardStep
9546
10665
  }, {
9547
- default: vue.withCtx(()=>[
10666
+ default: vue.withCtx(()=>_cache[1] || (_cache[1] = [
9548
10667
  vue.createTextVNode(" Back ")
9549
- ]),
10668
+ ])),
9550
10669
  _: 2
9551
10670
  }, 1032, [
9552
10671
  "style",
9553
10672
  "onClick"
9554
10673
  ])) : vue.createCommentVNode("", true)
9555
10674
  ]),
9556
- vue.createElementVNode("div", _hoisted_4$3, [
10675
+ vue.createElementVNode("div", _hoisted_2$3, [
9557
10676
  !props.isLastStep ? (vue.openBlock(), vue.createBlock(_component_WizardButton, {
9558
10677
  key: 0,
9559
10678
  class: "wizard-footer-right",
9560
10679
  style: vue.normalizeStyle(props.fillButtonStyle),
9561
10680
  onClick: _ctx.nextWizardStep
9562
10681
  }, {
9563
- default: vue.withCtx(()=>[
10682
+ default: vue.withCtx(()=>_cache[2] || (_cache[2] = [
9564
10683
  vue.createTextVNode(" Next ")
9565
- ]),
10684
+ ])),
9566
10685
  _: 2
9567
10686
  }, 1032, [
9568
10687
  "style",
@@ -9573,9 +10692,9 @@ function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
9573
10692
  style: vue.normalizeStyle(props.fillButtonStyle),
9574
10693
  onClick: _ctx.handleWizardFinishedEvent
9575
10694
  }, {
9576
- default: vue.withCtx(()=>[
10695
+ default: vue.withCtx(()=>_cache[3] || (_cache[3] = [
9577
10696
  vue.createTextVNode(" Finish ")
9578
- ]),
10697
+ ])),
9579
10698
  _: 2
9580
10699
  }, 1032, [
9581
10700
  "style",
@@ -9727,23 +10846,18 @@ const _hoisted_1$2 = {
9727
10846
  const _hoisted_2$2 = {
9728
10847
  class: "col"
9729
10848
  };
9730
- const _hoisted_3$2 = /* @__PURE__ */ vue.createElementVNode("hr", null, null, -1);
9731
- const _hoisted_4$2 = [
10849
+ const _hoisted_3$1 = [
9732
10850
  "disabled"
9733
10851
  ];
9734
- const _hoisted_5$1 = /* @__PURE__ */ vue.createElementVNode("i", {
9735
- class: "fa fa-plus"
9736
- }, null, -1);
9737
- const _hoisted_6$1 = {
10852
+ const _hoisted_4$1 = {
9738
10853
  key: 0,
9739
10854
  class: "col"
9740
10855
  };
9741
- const _hoisted_7$1 = /* @__PURE__ */ vue.createElementVNode("label", null, "Projects", -1);
9742
- const _hoisted_8$1 = [
10856
+ const _hoisted_5$1 = [
9743
10857
  "disabled",
9744
10858
  "onClick"
9745
10859
  ];
9746
- const _hoisted_9$1 = {
10860
+ const _hoisted_6$1 = {
9747
10861
  key: 0,
9748
10862
  class: "alert alert-sm alert-warning"
9749
10863
  };
@@ -9769,9 +10883,9 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
9769
10883
  "validation-messages": props.data,
9770
10884
  "validation-severity": props.severity
9771
10885
  }, {
9772
- label: vue.withCtx(()=>[
10886
+ label: vue.withCtx(()=>_cache[4] || (_cache[4] = [
9773
10887
  vue.createTextVNode(" Name ")
9774
- ]),
10888
+ ])),
9775
10889
  default: vue.withCtx(()=>[
9776
10890
  vue.createVNode(_component_VCFormInput, {
9777
10891
  modelValue: _ctx.v$.name.$model,
@@ -9790,7 +10904,7 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
9790
10904
  }, 8, [
9791
10905
  "validation"
9792
10906
  ]),
9793
- _hoisted_3$2,
10907
+ _cache[7] || (_cache[7] = vue.createElementVNode("hr", null, null, -1)),
9794
10908
  vue.createVNode(_component_IVuelidate, {
9795
10909
  validation: _ctx.v$.description
9796
10910
  }, {
@@ -9799,9 +10913,9 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
9799
10913
  "validation-messages": props.data,
9800
10914
  "validation-severity": props.severity
9801
10915
  }, {
9802
- label: vue.withCtx(()=>[
10916
+ label: vue.withCtx(()=>_cache[5] || (_cache[5] = [
9803
10917
  vue.createTextVNode(" Description ")
9804
- ]),
10918
+ ])),
9805
10919
  default: vue.withCtx(()=>[
9806
10920
  vue.createVNode(_component_VCFormTextarea, {
9807
10921
  modelValue: _ctx.v$.description.$model,
@@ -9829,18 +10943,20 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
9829
10943
  onClick: _cache[2] || (_cache[2] = vue.withModifiers((...args)=>_ctx.add && _ctx.add(...args), [
9830
10944
  "prevent"
9831
10945
  ]))
9832
- }, [
9833
- _hoisted_5$1,
10946
+ }, _cache[6] || (_cache[6] = [
10947
+ vue.createElementVNode("i", {
10948
+ class: "fa fa-plus"
10949
+ }, null, -1),
9834
10950
  vue.createTextVNode(" create ")
9835
- ], 8, _hoisted_4$2)
10951
+ ]), 8, _hoisted_3$1)
9836
10952
  ])
9837
10953
  ]),
9838
- !_ctx.projectId ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$1, [
10954
+ !_ctx.projectId ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$1, [
9839
10955
  vue.createVNode(_component_FProjects, {
9840
10956
  query: _ctx.proposalQuery
9841
10957
  }, {
9842
10958
  header: vue.withCtx((props)=>[
9843
- _hoisted_7$1,
10959
+ _cache[8] || (_cache[8] = vue.createElementVNode("label", null, "Projects", -1)),
9844
10960
  vue.createVNode(_component_FSearch, {
9845
10961
  load: props.load,
9846
10962
  meta: props.meta
@@ -9870,13 +10986,13 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
9870
10986
  "fa fa-minus": _ctx.form.project_id === props.data.id
9871
10987
  })
9872
10988
  }, null, 2)
9873
- ], 10, _hoisted_8$1)
10989
+ ], 10, _hoisted_5$1)
9874
10990
  ]),
9875
10991
  _: 1
9876
10992
  }, 8, [
9877
10993
  "query"
9878
10994
  ]),
9879
- !_ctx.v$.project_id.required && !_ctx.v$.project_id.$model ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_9$1, " Choose a project as base of your analysis ")) : vue.createCommentVNode("", true)
10995
+ !_ctx.v$.project_id.required && !_ctx.v$.project_id.$model ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$1, " Choose a project as base of your analysis ")) : vue.createCommentVNode("", true)
9880
10996
  ])) : vue.createCommentVNode("", true)
9881
10997
  ])
9882
10998
  ], 32);
@@ -9915,7 +11031,7 @@ const FAnalysisCommand = vue.defineComponent({
9915
11031
  },
9916
11032
  elementType: {
9917
11033
  type: String,
9918
- default: exports.ActionCommandElementType.BUTTON
11034
+ default: ActionCommandElementType.BUTTON
9919
11035
  },
9920
11036
  withIcon: {
9921
11037
  type: Boolean,
@@ -9946,7 +11062,9 @@ const FAnalysisCommand = vue.defineComponent({
9946
11062
  }
9947
11063
  }
9948
11064
  });
9949
- const isAllowed = clientWebKit.useAbilityCheck(PermissionName.ANALYSIS_UPDATE);
11065
+ const isAllowed = clientWebKit.usePermissionCheck({
11066
+ name: PermissionName.ANALYSIS_UPDATE
11067
+ });
9950
11068
  const isHidden = vue.computed(()=>{
9951
11069
  if (props.command === coreKit.AnalysisAPICommand.CONFIGURATION_LOCK) {
9952
11070
  return entity.value.configuration_locked;
@@ -10207,21 +11325,11 @@ var _sfc_main$1 = vue.defineComponent({
10207
11325
  }
10208
11326
  });
10209
11327
 
10210
- const _hoisted_1$1 = /* @__PURE__ */ vue.createElementVNode("div", {
10211
- class: "me-1"
10212
- }, [
10213
- /* @__PURE__ */ vue.createElementVNode("strong", null, "1. Configuration")
10214
- ], -1);
10215
- const _hoisted_2$1 = {
11328
+ const _hoisted_1$1 = {
10216
11329
  key: 0,
10217
11330
  class: "ms-auto"
10218
11331
  };
10219
- const _hoisted_3$1 = /* @__PURE__ */ vue.createElementVNode("div", {
10220
- class: "me-1"
10221
- }, [
10222
- /* @__PURE__ */ vue.createElementVNode("strong", null, "2. Build")
10223
- ], -1);
10224
- const _hoisted_4$1 = {
11332
+ const _hoisted_2$1 = {
10225
11333
  key: 0,
10226
11334
  class: "ms-auto flex-row d-flex justify-between gap-1"
10227
11335
  };
@@ -10250,7 +11358,11 @@ function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
10250
11358
  "flex-basis": "0"
10251
11359
  }
10252
11360
  }, [
10253
- _hoisted_1$1,
11361
+ _cache[5] || (_cache[5] = vue.createElementVNode("div", {
11362
+ class: "me-1"
11363
+ }, [
11364
+ vue.createElementVNode("strong", null, "1. Configuration")
11365
+ ], -1)),
10254
11366
  vue.createElementVNode("div", null, [
10255
11367
  vue.createVNode(_component_FAnalysisConfigurationStatusText, {
10256
11368
  locked: _ctx.entity.configuration_locked
@@ -10258,7 +11370,7 @@ function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
10258
11370
  "locked"
10259
11371
  ])
10260
11372
  ]),
10261
- _ctx.withCommand ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$1, [
11373
+ _ctx.withCommand ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [
10262
11374
  vue.createVNode(_component_FAnalysisCommand, {
10263
11375
  command: _ctx.trainCommand.CONFIGURATION_LOCK,
10264
11376
  "with-icon": true,
@@ -10299,7 +11411,11 @@ function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
10299
11411
  "flex-basis": "0"
10300
11412
  }
10301
11413
  }, [
10302
- _hoisted_3$1,
11414
+ _cache[6] || (_cache[6] = vue.createElementVNode("div", {
11415
+ class: "me-1"
11416
+ }, [
11417
+ vue.createElementVNode("strong", null, "2. Build")
11418
+ ], -1)),
10303
11419
  vue.createElementVNode("div", null, [
10304
11420
  vue.createVNode(_component_FAnalysisBuildStatusText, {
10305
11421
  status: _ctx.entity.build_status
@@ -10307,7 +11423,7 @@ function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
10307
11423
  "status"
10308
11424
  ])
10309
11425
  ]),
10310
- _ctx.withCommand ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$1, [
11426
+ _ctx.withCommand ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$1, [
10311
11427
  vue.createElementVNode("div", null, [
10312
11428
  vue.createVNode(_component_FAnalysisCommand, {
10313
11429
  command: _ctx.trainCommand.BUILD_START,
@@ -10395,7 +11511,9 @@ var _sfc_main = vue.defineComponent({
10395
11511
  const toggleView = ()=>{
10396
11512
  extendedView.value = !extendedView.value;
10397
11513
  };
10398
- const canDelete = clientWebKit.useAbilityCheck(PermissionName.ANALYSIS_DELETE);
11514
+ const canDelete = clientWebKit.usePermissionCheck({
11515
+ name: PermissionName.ANALYSIS_DELETE
11516
+ });
10399
11517
  const handleDeleted = (data)=>{
10400
11518
  emit('deleted', data);
10401
11519
  };
@@ -10429,34 +11547,22 @@ const _hoisted_2 = {
10429
11547
  const _hoisted_3 = {
10430
11548
  class: "me-1"
10431
11549
  };
10432
- const _hoisted_4 = /* @__PURE__ */ vue.createElementVNode("i", {
10433
- class: "fas fa-microscope me-1"
10434
- }, null, -1);
10435
- const _hoisted_5 = {
11550
+ const _hoisted_4 = {
10436
11551
  key: 0,
10437
11552
  class: "text-muted ms-1"
10438
11553
  };
10439
- const _hoisted_6 = {
11554
+ const _hoisted_5 = {
10440
11555
  class: "ms-auto"
10441
11556
  };
10442
- const _hoisted_7 = /* @__PURE__ */ vue.createElementVNode("i", {
10443
- class: "fa fa-bars"
10444
- }, null, -1);
10445
- const _hoisted_8 = {
11557
+ const _hoisted_6 = {
10446
11558
  class: "d-flex flex-row"
10447
11559
  };
10448
- const _hoisted_9 = {
11560
+ const _hoisted_7 = {
10449
11561
  class: ""
10450
11562
  };
10451
- const _hoisted_10 = /* @__PURE__ */ vue.createElementVNode("span", {
10452
- class: "text-muted"
10453
- }, " created ", -1);
10454
- const _hoisted_11 = {
11563
+ const _hoisted_8 = {
10455
11564
  class: "ms-auto"
10456
11565
  };
10457
- const _hoisted_12 = /* @__PURE__ */ vue.createElementVNode("span", {
10458
- class: "text-muted"
10459
- }, " updated ", -1);
10460
11566
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
10461
11567
  const _component_VCLink = vue.resolveComponent("VCLink");
10462
11568
  const _component_FAnalysisName = vue.resolveComponent("FAnalysisName");
@@ -10475,7 +11581,9 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
10475
11581
  onUpdated: _ctx.handleUpdated
10476
11582
  }, {
10477
11583
  default: vue.withCtx((props)=>[
10478
- _hoisted_4,
11584
+ _cache[1] || (_cache[1] = vue.createElementVNode("i", {
11585
+ class: "fas fa-microscope me-1"
11586
+ }, null, -1)),
10479
11587
  vue.createVNode(_component_VCLink, {
10480
11588
  to: "/analyses/" + props.entityId
10481
11589
  }, {
@@ -10486,7 +11594,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
10486
11594
  }, 1032, [
10487
11595
  "to"
10488
11596
  ]),
10489
- props.entityName ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5, vue.toDisplayString(props.entityId), 1)) : vue.createCommentVNode("", true)
11597
+ props.entityName ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4, vue.toDisplayString(props.entityId), 1)) : vue.createCommentVNode("", true)
10490
11598
  ]),
10491
11599
  _: 1
10492
11600
  }, 8, [
@@ -10495,7 +11603,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
10495
11603
  "onUpdated"
10496
11604
  ])
10497
11605
  ]),
10498
- vue.createElementVNode("div", _hoisted_6, [
11606
+ vue.createElementVNode("div", _hoisted_5, [
10499
11607
  vue.renderSlot(_ctx.$slots, "itemActions", {
10500
11608
  data: _ctx.entity
10501
11609
  }, ()=>[
@@ -10517,9 +11625,11 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
10517
11625
  disabled: _ctx.busy,
10518
11626
  class: "btn btn-xs btn-dark ms-1"
10519
11627
  }, {
10520
- default: vue.withCtx(()=>[
10521
- _hoisted_7
10522
- ]),
11628
+ default: vue.withCtx(()=>_cache[2] || (_cache[2] = [
11629
+ vue.createElementVNode("i", {
11630
+ class: "fa fa-bars"
11631
+ }, null, -1)
11632
+ ])),
10523
11633
  _: 1
10524
11634
  }, 8, [
10525
11635
  "to",
@@ -10566,10 +11676,12 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
10566
11676
  }, null, 8, [
10567
11677
  "entity"
10568
11678
  ]),
10569
- vue.createElementVNode("div", _hoisted_8, [
10570
- vue.createElementVNode("div", _hoisted_9, [
11679
+ vue.createElementVNode("div", _hoisted_6, [
11680
+ vue.createElementVNode("div", _hoisted_7, [
10571
11681
  vue.createElementVNode("small", null, [
10572
- _hoisted_10,
11682
+ _cache[3] || (_cache[3] = vue.createElementVNode("span", {
11683
+ class: "text-muted"
11684
+ }, " created ", -1)),
10573
11685
  vue.createVNode(_component_VCTimeago, {
10574
11686
  datetime: _ctx.entity.created_at
10575
11687
  }, null, 8, [
@@ -10577,9 +11689,11 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
10577
11689
  ])
10578
11690
  ])
10579
11691
  ]),
10580
- vue.createElementVNode("div", _hoisted_11, [
11692
+ vue.createElementVNode("div", _hoisted_8, [
10581
11693
  vue.createElementVNode("small", null, [
10582
- _hoisted_12,
11694
+ _cache[4] || (_cache[4] = vue.createElementVNode("span", {
11695
+ class: "text-muted"
11696
+ }, " updated ", -1)),
10583
11697
  vue.createVNode(_component_VCTimeago, {
10584
11698
  datetime: _ctx.entity.updated_at
10585
11699
  }, null, 8, [
@@ -10691,7 +11805,7 @@ const FAnalysisBucketFileDownload = vue.defineComponent({
10691
11805
  },
10692
11806
  elementType: {
10693
11807
  type: String,
10694
- default: exports.ActionCommandElementType.BUTTON
11808
+ default: ActionCommandElementType.BUTTON
10695
11809
  },
10696
11810
  withIcon: {
10697
11811
  type: Boolean,
@@ -10907,6 +12021,7 @@ var FAnalysisLogs = vue.defineComponent({
10907
12021
 
10908
12022
  var components = /*#__PURE__*/Object.freeze({
10909
12023
  __proto__: null,
12024
+ ElementType: ElementType,
10910
12025
  FAnalyses: FAnalyses,
10911
12026
  FAnalysis: TrainEntity,
10912
12027
  FAnalysisBasicForm: FAnalysisBasicForm,
@@ -10932,6 +12047,9 @@ var components = /*#__PURE__*/Object.freeze({
10932
12047
  FAnalysisPipeline: TrainPipeline,
10933
12048
  FAnalysisWizard: FAnalysisWizard,
10934
12049
  FEntityDelete: FEntityDelete,
12050
+ FMasterImageEventLog: FMasterImageEventLog,
12051
+ FMasterImageEventLogs: FMasterImageEventLogs,
12052
+ FNodeCrypto: FNodeCrypto,
10935
12053
  FNodeForm: FNodeForm,
10936
12054
  FNodeRegistryProject: FNodeRegistryProject,
10937
12055
  FNodeRobotEntity: FNodeRobot,
@@ -11001,6 +12119,9 @@ var index = {
11001
12119
  install
11002
12120
  };
11003
12121
 
12122
+ exports.ActionCommandElementType = ActionCommandElementType;
12123
+ exports.ElementType = ElementType;
12124
+ exports.EntityListSlotName = EntityListSlotName;
11004
12125
  exports.EntityManagerError = EntityManagerError;
11005
12126
  exports.FAnalyses = FAnalyses;
11006
12127
  exports.FAnalysis = TrainEntity;
@@ -11027,6 +12148,9 @@ exports.FAnalysisNodes = FAnalysisNodes;
11027
12148
  exports.FAnalysisPipeline = TrainPipeline;
11028
12149
  exports.FAnalysisWizard = FAnalysisWizard;
11029
12150
  exports.FEntityDelete = FEntityDelete;
12151
+ exports.FMasterImageEventLog = FMasterImageEventLog;
12152
+ exports.FMasterImageEventLogs = FMasterImageEventLogs;
12153
+ exports.FNodeCrypto = FNodeCrypto;
11030
12154
  exports.FNodeForm = FNodeForm;
11031
12155
  exports.FNodeRegistryProject = FNodeRegistryProject;
11032
12156
  exports.FNodeRobotEntity = FNodeRobot;