@xen-orchestra/web-core 0.20.0 → 0.21.0

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 (118) hide show
  1. package/lib/assets/all-done.svg +62 -0
  2. package/lib/assets/all-good.svg +113 -0
  3. package/lib/assets/error.svg +57 -372
  4. package/lib/assets/no-data.svg +190 -65
  5. package/lib/assets/not-found.svg +446 -126
  6. package/lib/assets/offline.svg +118 -0
  7. package/lib/assets/under-construction.svg +245 -193
  8. package/lib/assets/zoom.svg +85 -0
  9. package/lib/components/backup-state/VtsBackupState.vue +20 -17
  10. package/lib/components/cell-object/VtsCellObject.vue +4 -1
  11. package/lib/components/console/VtsActionsConsole.vue +7 -4
  12. package/lib/components/console/VtsClipboardConsole.vue +9 -6
  13. package/lib/components/copy-button/VtsCopyButton.vue +7 -14
  14. package/lib/components/dropdown/DropdownTitle.vue +5 -2
  15. package/lib/components/icon/NewVtsIcon.vue +49 -0
  16. package/lib/components/input-group/VtsInputGroup.vue +41 -0
  17. package/lib/components/input-wrapper/VtsInputWrapper.vue +2 -2
  18. package/lib/components/layout/VtsLayoutSidebar.vue +6 -3
  19. package/lib/components/linear-chart/VtsLinearChart.vue +4 -0
  20. package/lib/components/object-icon/VtsObjectIcon.vue +22 -0
  21. package/lib/components/quick-info-card/VtsQuickInfoCard.vue +4 -1
  22. package/lib/components/select/VtsOption.vue +10 -6
  23. package/lib/components/select/VtsSelect.vue +74 -50
  24. package/lib/components/state-hero/VtsAllDoneHero.vue +16 -0
  25. package/lib/components/state-hero/VtsAllGoodHero.vue +16 -0
  26. package/lib/components/state-hero/VtsComingSoonHero.vue +4 -1
  27. package/lib/components/state-hero/VtsErrorNoDataHero.vue +4 -1
  28. package/lib/components/state-hero/VtsLoadingHero.vue +4 -1
  29. package/lib/components/state-hero/VtsNoDataHero.vue +4 -1
  30. package/lib/components/state-hero/VtsNoSelectionHero.vue +4 -1
  31. package/lib/components/state-hero/VtsObjectNotFoundHero.vue +4 -1
  32. package/lib/components/state-hero/VtsOfflineHero.vue +16 -0
  33. package/lib/components/state-hero/VtsPageNotFoundHero.vue +4 -1
  34. package/lib/components/state-hero/VtsStateHero.vue +10 -1
  35. package/lib/components/table/ColumnTitle.vue +2 -2
  36. package/lib/components/task/VtsQuickTaskButton.vue +4 -1
  37. package/lib/components/task/VtsQuickTaskList.vue +5 -2
  38. package/lib/components/task/VtsQuickTaskTabBar.vue +8 -5
  39. package/lib/components/ui/card-numbers/UiCardNumbers.vue +15 -33
  40. package/lib/components/ui/character-limit/UiCharacterLimit.vue +4 -1
  41. package/lib/components/ui/input/UiInput.vue +2 -2
  42. package/lib/components/ui/label/UiLabel.vue +4 -1
  43. package/lib/components/ui/progress-bar/UiProgressBar.vue +5 -2
  44. package/lib/components/ui/query-search-bar/UiQuerySearchBar.vue +9 -6
  45. package/lib/components/ui/quick-task-item/UiQuickTaskItem.vue +6 -3
  46. package/lib/components/ui/stacked-bar/StackedBarSegment.vue +4 -1
  47. package/lib/components/ui/table-pagination/UiTablePagination.vue +6 -3
  48. package/lib/components/ui/text-area/UiTextarea.vue +4 -1
  49. package/lib/components/ui/top-bottom-table/UiTopBottomTable.vue +6 -3
  50. package/lib/components/ui/tree-item-label/UiTreeItemLabel.vue +4 -1
  51. package/lib/composables/local-time-ago.composable.ts +53 -0
  52. package/lib/composables/locale-time-ago.composable.ts +53 -0
  53. package/lib/icons/fa-icons.ts +164 -0
  54. package/lib/icons/index.ts +15 -0
  55. package/lib/icons/legacy-icons.ts +80 -0
  56. package/lib/icons/object-icons.ts +187 -0
  57. package/lib/layouts/CoreLayout.vue +7 -3
  58. package/lib/locales/cs.json +73 -7
  59. package/lib/locales/de.json +5 -1
  60. package/lib/locales/en.json +33 -3
  61. package/lib/locales/es.json +9 -5
  62. package/lib/locales/fr.json +32 -2
  63. package/lib/locales/it.json +1 -1
  64. package/lib/locales/nl.json +51 -9
  65. package/lib/locales/ru.json +28 -1
  66. package/lib/locales/sv.json +77 -13
  67. package/lib/packages/collection/README.md +23 -18
  68. package/lib/packages/collection/create-collection.ts +22 -21
  69. package/lib/packages/collection/create-item.ts +21 -20
  70. package/lib/packages/collection/create-use-subset.ts +23 -0
  71. package/lib/packages/collection/guess-item-id.ts +26 -16
  72. package/lib/packages/collection/index.ts +4 -0
  73. package/lib/packages/collection/types.ts +65 -37
  74. package/lib/packages/collection/use-collection.ts +68 -18
  75. package/lib/packages/collection/use-flag-registry.ts +38 -17
  76. package/lib/packages/form-select/guess-label.ts +45 -0
  77. package/lib/packages/form-select/guess-value.ts +23 -0
  78. package/lib/packages/form-select/index.ts +6 -0
  79. package/lib/packages/form-select/normalize-search-term.ts +11 -0
  80. package/lib/packages/form-select/types.ts +90 -42
  81. package/lib/packages/form-select/use-form-option-controller.ts +7 -3
  82. package/lib/packages/form-select/use-form-select-controller.ts +38 -27
  83. package/lib/packages/form-select/use-form-select-keyboard-navigation.ts +1 -1
  84. package/lib/packages/form-select/use-form-select.ts +308 -130
  85. package/lib/packages/icon/DisplayIcon.vue +25 -0
  86. package/lib/packages/icon/DisplayIconAny.vue +16 -0
  87. package/lib/packages/icon/DisplayIconSingle.vue +35 -0
  88. package/lib/packages/icon/DisplayIconStack.vue +34 -0
  89. package/lib/packages/icon/README.md +286 -0
  90. package/lib/packages/icon/create-icon-bindings.ts +27 -0
  91. package/lib/packages/icon/define-icon-pack.ts +23 -0
  92. package/lib/packages/icon/define-icon-single.ts +17 -0
  93. package/lib/packages/icon/define-icon-stack.ts +20 -0
  94. package/lib/packages/icon/define-icon.ts +40 -0
  95. package/lib/packages/icon/generate-icon-variants.ts +17 -0
  96. package/lib/packages/icon/index.ts +8 -0
  97. package/lib/packages/icon/is-icon-stack.ts +5 -0
  98. package/lib/packages/icon/merge-icons.ts +25 -0
  99. package/lib/packages/icon/merge-transforms.ts +12 -0
  100. package/lib/packages/icon/normalize-icon.ts +25 -0
  101. package/lib/packages/icon/to-tuple.ts +7 -0
  102. package/lib/packages/icon/types.ts +72 -0
  103. package/lib/packages/job/README.md +2 -2
  104. package/lib/packages/mapper/README.md +166 -0
  105. package/lib/packages/mapper/convert-to-map.ts +5 -0
  106. package/lib/packages/mapper/create-mapper.ts +30 -0
  107. package/lib/packages/mapper/index.ts +4 -0
  108. package/lib/packages/mapper/types.ts +1 -0
  109. package/lib/packages/mapper/use-mapper.ts +31 -0
  110. package/lib/stores/sidebar.store.ts +1 -1
  111. package/lib/types/chart.ts +2 -2
  112. package/lib/types/utility.type.ts +9 -0
  113. package/lib/utils/object.util.ts +16 -0
  114. package/lib/utils/size.util.ts +4 -2
  115. package/package.json +2 -1
  116. package/lib/components/backup-item/VtsBackupItem.vue +0 -47
  117. package/lib/composables/mapper.composable.md +0 -74
  118. package/lib/composables/mapper.composable.ts +0 -18
@@ -0,0 +1,85 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="Zoom" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 397.13 396.85">
3
+ <defs>
4
+ <style>
5
+ .cls-1 {
6
+ fill: #eaea92;
7
+ }
8
+
9
+ .cls-2, .cls-3, .cls-4 {
10
+ fill: #8f84ff;
11
+ }
12
+
13
+ .cls-2, .cls-5 {
14
+ opacity: .3;
15
+ }
16
+
17
+ .cls-6, .cls-5 {
18
+ fill: #fff;
19
+ }
20
+
21
+ .cls-3 {
22
+ opacity: .14;
23
+ }
24
+
25
+ .cls-7 {
26
+ fill: #181849;
27
+ }
28
+
29
+ .cls-8 {
30
+ fill: #1a1b38;
31
+ }
32
+ </style>
33
+ </defs>
34
+ <path class="cls-4" d="M129.55,173.68c-6.44,2.53-12.65,5.45-18.79,8.51-6.13,3.06-12.16,6.31-18.12,9.68-5.96,3.37-11.83,6.88-17.56,10.64-2.87,1.87-5.7,3.82-8.49,5.83-2.79,2.02-5.54,4.09-8.18,6.36-1.46,1.25-1.62,3.44-.37,4.9.95,1.11,2.47,1.47,3.78,1.02,3.29-1.14,6.47-2.48,9.62-3.87,3.14-1.4,6.25-2.86,9.31-4.4,6.13-3.06,12.13-6.36,18.04-9.82,5.91-3.45,11.75-7.02,17.48-10.78,5.73-3.76,11.39-7.66,16.81-11.95,1.55-1.22,1.81-3.47.59-5.02-1-1.26-2.68-1.67-4.11-1.11Z"/>
35
+ <path class="cls-3" d="M194.07,50.23c74.01-2.19,138.12,51.52,147.8,121.98,10.59,77.04-47.69,146.36-119.41,157.46-89.2,13.81-175.73-66.08-167.96-152.75,5.85-65.3,64.33-124.47,139.57-126.69Z"/>
36
+ <path class="cls-8" d="M90.67,198.68c.14.05.25.11.35.19.1.02.2.04.3.06.46.09.46.85,0,.93-.1.02-.2.04-.3.06-.1.08-.21.14-.35.19-.46.16-.93-.25-.93-.71,0-.46.47-.87.93-.71Z"/>
37
+ <path class="cls-4" d="M162.94,225.43h0c-1.62-2.75-4.97-4.27-8.07-3.67l-48.48,9.41c-3.68.71-5.75,4.14-4.62,7.64l32.93,102.68c1.12,3.51,5.02,5.77,8.7,5.06l153.84-29.87c3.68-.71,5.75-4.14,4.62-7.64l-27.66-86.24c-1.12-3.51-5.02-5.77-8.7-5.06l-83.71,16.25c-7.25,1.41-15.06-2.14-18.85-8.56Z"/>
38
+ <polygon class="cls-6" points="299.39 311.24 138.65 342.45 108.5 236.07 269.23 204.87 299.39 311.24"/>
39
+ <polygon class="cls-1" points="299.39 311.24 138.65 342.45 111.03 235.58 269.23 204.87 299.39 311.24"/>
40
+ <polygon class="cls-6" points="299.39 311.24 138.65 342.45 111.46 231.94 272.2 200.73 299.39 311.24"/>
41
+ <polygon class="cls-6" points="299.39 311.24 138.65 342.45 114.8 231.29 272.2 200.73 299.39 311.24"/>
42
+ <polygon class="cls-1" points="299.39 280.37 138.65 311.57 115.44 197.14 276.18 165.94 299.39 280.37"/>
43
+ <polygon class="cls-1" points="299.39 311.24 138.65 342.45 120.12 229.37 279.82 198.36 299.39 311.24"/>
44
+ <polygon class="cls-6" points="300.96 307.85 138.65 342.45 121.79 229.06 282.81 198.64 300.96 307.85"/>
45
+ <polygon class="cls-1" points="299.39 311.24 138.65 342.45 124.91 231.07 285.65 199.87 299.39 311.24"/>
46
+ <polygon class="cls-6" points="299.39 311.24 138.65 342.45 126.31 231.78 287.04 200.57 299.39 311.24"/>
47
+ <path class="cls-4" d="M199.21,225.47h0c-.69-3-3.38-4.71-6.48-4.1l-48.48,9.41c-3.68.71-6.66,4.39-6.67,8.21l-.11,101.8c0,3.82,2.97,6.33,6.65,5.62l153.84-29.87c3.68-.71,6.66-4.39,6.67-8.21l.09-83.92c0-3.82-2.97-6.33-6.65-5.62l-83.71,16.25c-7.25,1.41-13.53-2.57-15.15-9.58Z"/>
48
+ <path class="cls-2" d="M153.88,195.95c26.94,15.96,61.72,7.06,77.68-19.88,15.96-26.94,7.06-61.72-19.88-77.68-26.94-15.96-61.72-7.07-77.68,19.87-15.96,26.94-7.06,61.72,19.88,77.68Z"/>
49
+ <path class="cls-5" d="M181.76,90.48l27.36,106.91c.76-.4,1.52-.82,2.26-1.25,4.76-2.77,9.13-6.25,12.98-10.41h0s-23.63-92.34-23.63-92.34c-6.21-2.08-12.62-3.03-18.97-2.91Z"/>
50
+ <path class="cls-5" d="M147.71,102.6l25.72,100.51c8.64,1.45,17.42.84,25.66-1.64l-28.09-109.76c-8.42,1.78-16.41,5.47-23.3,10.89Z"/>
51
+ <path class="cls-4" d="M212.83,199.46c-28.88,16.6-65.74,6.64-82.34-22.24-16.6-28.88-6.64-65.74,22.24-82.34,28.88-16.6,65.74-6.64,82.34,22.24,16.6,28.88,6.64,65.75-22.23,82.34ZM210.38,195.19c26.52-15.24,35.66-49.09,20.42-75.62-15.24-26.51-49.09-35.66-75.61-20.42-26.52,15.24-35.66,49.09-20.42,75.61,15.24,26.52,49.09,35.67,75.61,20.43Z"/>
52
+ <path class="cls-4" d="M133.07,179.81c-5.43,4.3-11.08,8.19-16.81,11.95-5.74,3.76-11.58,7.33-17.49,10.78-.95.56-1.91,1.11-2.87,1.66-4.98,2.86-10.02,5.59-15.17,8.16-3.06,1.54-6.17,3-9.31,4.4-3.15,1.39-6.33,2.73-9.62,3.87-1.3.45-2.82.09-3.77-1.02-1.25-1.46-1.08-3.65.37-4.9,2.65-2.27,5.4-4.34,8.19-6.36,2.79-2.01,5.61-3.96,8.48-5.83,5.74-3.76,11.61-7.28,17.57-10.65,1.23-.69,2.46-1.38,3.7-2.07,4.75-2.63,9.55-5.18,14.42-7.61,6.13-3.06,12.34-5.98,18.78-8.51,1.43-.56,3.12-.15,4.11,1.11,1.23,1.55.97,3.8-.58,5.02Z"/>
53
+ <path class="cls-6" d="M278.46,132.05l-3,1.68,1.68,3-3,1.68,1.68,3-3,1.68,1.68,3-3,1.68,1.68,3-3,1.68,1.68,3-3,1.68,1.68,3-3,1.68,1.68,3-3,1.68,1.68,3-3,1.68,1.68,3-3,1.68,1.68,3-3,1.68,1.68,3,51.04-28.52-1.68-3-1.68-3-3,1.68-1.68-3-3,1.68-1.68-3-3,1.68-1.68-3,6.01-3.36-1.68-3,6.01-3.36-1.68-3,3-1.68-3.35-6-3,1.68-1.68-3-6.01,3.36,1.68,3-6.01,3.36,1.68,3-3,1.68-6.71-12.01-3,1.68-3,1.68,1.68,3Z"/>
54
+ <rect class="cls-8" x="259.33" y="166.05" width="58.47" height="3.44" transform="translate(-45.17 162.06) rotate(-29.19)"/>
55
+ <rect class="cls-8" x="264.16" y="174.79" width="3.44" height="3.44" transform="translate(-52.32 152.1) rotate(-29.19)"/>
56
+ <rect class="cls-8" x="265.48" y="170.11" width="3.44" height="3.44" transform="translate(-49.87 152.15) rotate(-29.19)"/>
57
+ <rect class="cls-8" x="266.81" y="165.43" width="3.44" height="3.44" transform="translate(-47.42 152.2) rotate(-29.19)"/>
58
+ <rect class="cls-8" x="268.13" y="160.75" width="3.44" height="3.44" transform="translate(-44.97 152.26) rotate(-29.19)"/>
59
+ <rect class="cls-8" x="269.46" y="156.07" width="3.44" height="3.44" transform="translate(-42.52 152.31) rotate(-29.19)"/>
60
+ <rect class="cls-8" x="270.78" y="151.39" width="3.44" height="3.44" transform="translate(-40.07 152.36) rotate(-29.19)"/>
61
+ <rect class="cls-8" x="272.11" y="146.71" width="3.44" height="3.44" transform="translate(-37.62 152.41) rotate(-29.19)"/>
62
+ <rect class="cls-8" x="273.43" y="142.03" width="3.44" height="3.44" transform="translate(-35.16 152.46) rotate(-29.19)"/>
63
+ <rect class="cls-8" x="274.76" y="137.35" width="3.44" height="3.44" transform="translate(-32.71 152.52) rotate(-29.19)"/>
64
+ <rect class="cls-8" x="276.08" y="132.67" width="3.44" height="3.44" transform="translate(-30.26 152.57) rotate(-29.19)"/>
65
+ <rect class="cls-8" x="277.41" y="127.99" width="3.44" height="3.44" transform="translate(-27.81 152.62) rotate(-29.19)"/>
66
+ <rect class="cls-8" x="283.77" y="125.44" width="3.44" height="17.19" transform="translate(-29.11 156.27) rotate(-29.19)"/>
67
+ <rect class="cls-8" x="290.12" y="136.64" width="3.44" height="3.44" transform="translate(-30.42 159.92) rotate(-29.19)"/>
68
+ <rect class="cls-8" x="295.15" y="145.65" width="3.44" height="3.44" transform="translate(-34.17 163.52) rotate(-29.19)"/>
69
+ <rect class="cls-8" x="296.26" y="140.13" width="6.88" height="3.44" transform="translate(-31.12 164.2) rotate(-29.19)"/>
70
+ <rect class="cls-8" x="300.59" y="133.77" width="6.88" height="3.44" transform="translate(-27.47 165.5) rotate(-29.19)"/>
71
+ <rect class="cls-8" x="304.3" y="125.04" width="3.44" height="6.88" transform="translate(-23.79 165.58) rotate(-29.19)"/>
72
+ <rect class="cls-8" x="291.23" y="131.13" width="6.88" height="3.44" transform="translate(-27.37 160.6) rotate(-29.19)"/>
73
+ <rect class="cls-8" x="295.56" y="124.77" width="6.88" height="3.44" transform="translate(-23.72 161.9) rotate(-29.19)"/>
74
+ <rect class="cls-8" x="299.83" y="146.97" width="3.44" height="3.44" transform="translate(-34.22 165.97) rotate(-29.19)"/>
75
+ <rect class="cls-8" x="304.51" y="148.3" width="3.44" height="3.44" transform="translate(-34.27 168.42) rotate(-29.19)"/>
76
+ <rect class="cls-8" x="309.19" y="149.62" width="3.44" height="3.44" transform="translate(-34.33 170.87) rotate(-29.19)"/>
77
+ <polygon class="cls-7" points="173.4 252.35 171.52 258.69 165.18 260.57 171.52 262.45 173.4 268.79 175.28 262.45 181.62 260.57 175.28 258.69 173.4 252.35"/>
78
+ <polygon class="cls-7" points="283.94 292.49 282.82 296.27 279.05 297.39 282.82 298.51 283.94 302.28 285.06 298.51 288.84 297.39 285.06 296.27 283.94 292.49"/>
79
+ <polygon class="cls-7" points="244.55 182.48 242.67 188.82 236.33 190.7 242.67 192.58 244.55 198.92 246.43 192.58 252.77 190.7 246.43 188.82 244.55 182.48"/>
80
+ <path class="cls-6" d="M222.84,291.45c.62.17,1.24.34,1.85.5-6.22,2.4-12.01,4.07-16.61,4.88-5.54.98-9.34.71-10.07-1.05-.72-1.73,1.57-4.54,6.04-7.74.07.37.13.76.23,1.13-3.52,2.54-5.25,4.66-4.7,5.96.55,1.32,3.47,1.51,7.85.77,4.11-.7,9.5-2.23,15.42-4.45Z"/>
81
+ <path class="cls-6" d="M247.13,280.34c-4.49,3.29-11.25,6.99-19.08,10.26-.52.22-1.04.43-1.56.64-.61-.15-1.23-.32-1.85-.48.98-.38,1.98-.79,2.98-1.2,8.13-3.39,15.07-7.18,19.31-10.34,3.21-2.39,4.88-4.43,4.36-5.67-.51-1.22-3.06-1.48-6.92-.91-.19-.32-.39-.64-.6-.95,5-.77,8.4-.43,9.08,1.21.7,1.67-1.53,4.38-5.72,7.45Z"/>
82
+ <path class="cls-6" d="M253.1,292.89c-.49,1.74-3.92,2.49-9.11,2.3-5.1-.19-11.91-1.29-19.31-3.23-.61-.16-1.23-.33-1.85-.5-.06-.02-.12-.03-.18-.05-7.81-2.19-14.68-4.89-19.52-7.5-4.95-2.67-7.77-5.24-7.25-7.07.51-1.8,4.05-2.59,9.54-2.32-.17.33-.37.68-.52,1.03-4.33-.19-7,.4-7.39,1.76-.39,1.38,1.79,3.34,5.68,5.47,4.62,2.53,11.67,5.28,19.76,7.55.56.16,1.11.31,1.66.46.62.17,1.24.33,1.85.48,7.1,1.79,13.5,2.8,18.05,2.93,4,.12,6.57-.45,6.94-1.74.36-1.28-1.48-3.06-4.86-5.01.05-.37.09-.74.12-1.11,4.4,2.49,6.85,4.87,6.37,6.58Z"/>
83
+ <path class="cls-6" d="M232.63,304.23c-11.71,3.96-24.46-2.36-28.41-14.07-3.95-11.71,2.36-24.46,14.07-28.41,11.71-3.96,24.46,2.36,28.41,14.07,3.95,11.71-2.36,24.46-14.07,28.41ZM218.74,263.1c-10.97,3.7-16.88,15.64-13.17,26.61,3.7,10.97,15.64,16.88,26.6,13.17,10.97-3.7,16.88-15.64,13.17-26.61-3.7-10.97-15.64-16.88-26.6-13.17Z"/>
84
+ <path class="cls-6" d="M248.48,286.34c.29-1.97.33-3.99.1-6.02,4.16-3.22,5.87-5.83,5.06-7.76-.77-1.86-3.62-2.5-8.47-1.94-5.59-8.92-16.77-13.2-27.17-9.69-6.43,2.17-11.29,6.9-13.84,12.67-5.46-.11-8.52.9-9.11,2.99-.62,2.19,1.8,4.81,7.16,7.78.07,1.19.23,2.39.49,3.58-4.5,3.38-6.36,6.12-5.5,8.16.87,2.08,4.33,2.65,10.29,1.68,5.97,7.23,16.01,10.42,25.41,7.25,5-1.69,9.05-4.92,11.8-8.98,2.85.06,5.06-.17,6.61-.69,1.46-.49,2.34-1.25,2.62-2.25.54-1.94-1.29-4.21-5.45-6.78ZM206.39,289.43c-.37-1.11-.62-2.22-.8-3.34,4.12,1.95,9.09,3.83,14.46,5.45-3.99,1.4-7.77,2.49-10.97,3.16-1.13-1.57-2.05-3.34-2.7-5.26ZM242.76,293.22c-3.78-.26-8.45-1.02-13.52-2.19,6.28-2.67,11.96-5.65,16.33-8.56.1,3.82-.92,7.54-2.82,10.75ZM250.48,273.88c.15.35-.26,1.46-2.47,3.36-.15-.57-.31-1.14-.5-1.7-.27-.79-.57-1.55-.91-2.29,2.73-.18,3.74.29,3.88.62ZM219.02,263.92c10.51-3.55,21.96,2.11,25.51,12.63.31.93.53,1.87.7,2.81-4.39,3.05-10.83,6.43-17.96,9.4-.88.37-1.79.73-2.7,1.09-.46-.12-.91-.25-1.37-.38-6.82-1.91-13.19-4.27-17.85-6.58.05-8.36,5.32-16.16,13.67-18.98ZM198.35,277.52c.13-.45,1.31-1.13,4.8-1.16-.47,1.57-.78,3.19-.91,4.85-3.29-1.99-4.01-3.26-3.89-3.69ZM200.37,294.8c-.18-.44.34-1.73,3.16-3.98.57,1.59,1.29,3.08,2.15,4.46-3.79.48-5.15-.07-5.32-.48ZM231.89,302.06c-7.53,2.54-15.53.34-20.77-4.97,2.79-.63,5.82-1.5,9.01-2.57,1.5-.51,3.04-1.06,4.6-1.66,5.84,1.52,11.44,2.55,16.17,2.98-2.3,2.78-5.36,4.99-9.02,6.22ZM250.63,292.2c-.11.38-1.18,1.02-4.32,1.11.65-1.31,1.17-2.67,1.56-4.08,2.34,1.59,2.86,2.61,2.76,2.97Z"/>
85
+ </svg>
@@ -1,29 +1,32 @@
1
1
  <template>
2
- <VtsIcon :accent="color" :icon class="vts-backup-state" />
2
+ <UiInfo :accent="state.accent" class="vts-backup-state">
3
+ {{ state.text }}
4
+ </UiInfo>
3
5
  </template>
4
6
 
5
7
  <script lang="ts" setup>
6
- import VtsIcon from '@core/components/icon/VtsIcon.vue'
7
- import type { IconDefinition } from '@fortawesome/fontawesome-common-types'
8
- import { faCheckCircle, faCircleMinus, faCircleXmark } from '@fortawesome/free-solid-svg-icons'
9
- import { computed } from 'vue'
8
+ import UiInfo, { type InfoAccent } from '@core/components/ui/info/UiInfo.vue'
9
+ import { useMapper } from '@core/packages/mapper'
10
+ import { useI18n } from 'vue-i18n'
10
11
 
11
- export type BackupState = 'success' | 'failure' | 'partial'
12
-
13
- type Props = {
12
+ const { state: _state } = defineProps<{
14
13
  state: BackupState
15
- }
14
+ }>()
16
15
 
17
- const props = defineProps<Props>()
16
+ const { t } = useI18n()
18
17
 
19
- const states: Record<Props['state'], { icon: IconDefinition; color: 'success' | 'warning' | 'danger' }> = {
20
- success: { icon: faCheckCircle, color: 'success' },
21
- partial: { icon: faCircleMinus, color: 'warning' },
22
- failure: { icon: faCircleXmark, color: 'danger' },
23
- }
18
+ type BackupState = 'success' | 'failure' | 'skipped' | 'interrupted'
24
19
 
25
- const icon = computed(() => states[props.state].icon)
26
- const color = computed(() => states[props.state].color)
20
+ const state = useMapper<BackupState, { text: string; accent: InfoAccent }>(
21
+ () => _state,
22
+ {
23
+ success: { text: t('success'), accent: 'success' },
24
+ failure: { text: t('failure'), accent: 'danger' },
25
+ skipped: { text: t('skipped'), accent: 'warning' },
26
+ interrupted: { text: t('interrupted'), accent: 'danger' },
27
+ },
28
+ 'failure'
29
+ )
27
30
  </script>
28
31
 
29
32
  <style lang="postcss" scoped>
@@ -15,7 +15,7 @@
15
15
  accent="brand"
16
16
  @click="copy(id)"
17
17
  >
18
- {{ copied ? $t('core.copied') : $t('core.copy-id') }}
18
+ {{ copied ? t('core.copied') : t('core.copy-id') }}
19
19
  </UiButton>
20
20
  </template>
21
21
  </div>
@@ -27,12 +27,15 @@ import UiButton from '@core/components/ui/button/UiButton.vue'
27
27
  import { vTooltip } from '@core/directives/tooltip.directive'
28
28
  import { faCopy } from '@fortawesome/free-solid-svg-icons'
29
29
  import { useClipboard } from '@vueuse/core'
30
+ import { useI18n } from 'vue-i18n'
30
31
 
31
32
  defineProps<{
32
33
  id?: string
33
34
  copiableId?: boolean
34
35
  }>()
35
36
 
37
+ const { t } = useI18n()
38
+
36
39
  const { isSupported, copy, copied } = useClipboard()
37
40
  </script>
38
41
 
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <UiCardTitle>{{ $t('console-actions') }}</UiCardTitle>
2
+ <UiCardTitle>{{ t('console-actions') }}</UiCardTitle>
3
3
  <UiButton
4
4
  class="button"
5
5
  accent="brand"
@@ -8,7 +8,7 @@
8
8
  :left-icon="isFullscreen ? faDownLeftAndUpRightToCenter : faUpRightAndDownLeftFromCenter"
9
9
  @click="toggleFullScreen"
10
10
  >
11
- {{ $t(isFullscreen ? 'exit-fullscreen' : 'fullscreen') }}
11
+ {{ t(isFullscreen ? 'exit-fullscreen' : 'fullscreen') }}
12
12
  </UiButton>
13
13
  <UiButton
14
14
  class="button"
@@ -18,7 +18,7 @@
18
18
  :left-icon="faArrowUpRightFromSquare"
19
19
  @click="openInNewTab"
20
20
  >
21
- {{ $t('open-console-in-new-tab') }}
21
+ {{ t('open-console-in-new-tab') }}
22
22
  </UiButton>
23
23
  <UiButton
24
24
  class="button"
@@ -28,7 +28,7 @@
28
28
  :left-icon="faKeyboard"
29
29
  @click="sendCtrlAltDel"
30
30
  >
31
- {{ $t('send-ctrl-alt-del') }}
31
+ {{ t('send-ctrl-alt-del') }}
32
32
  </UiButton>
33
33
  </template>
34
34
 
@@ -45,12 +45,15 @@ import {
45
45
  import { useActiveElement, useMagicKeys, whenever } from '@vueuse/core'
46
46
  import { logicAnd } from '@vueuse/math'
47
47
  import { computed } from 'vue'
48
+ import { useI18n } from 'vue-i18n'
48
49
  import { useRouter } from 'vue-router'
49
50
 
50
51
  defineProps<{
51
52
  sendCtrlAltDel: () => void
52
53
  }>()
53
54
 
55
+ const { t } = useI18n()
56
+
54
57
  const router = useRouter()
55
58
  const uiStore = useUiStore()
56
59
 
@@ -1,13 +1,13 @@
1
1
  <template>
2
2
  <div class="vts-clipboard-console">
3
- <UiCardTitle>{{ $t('console-clipboard') }}</UiCardTitle>
4
- <UiTextarea v-tooltip="$t('coming-soon')" accent="brand" disabled :model-value="modelValue" />
3
+ <UiCardTitle>{{ t('console-clipboard') }}</UiCardTitle>
4
+ <UiTextarea v-tooltip="t('coming-soon')" accent="brand" disabled :model-value="modelValue" />
5
5
  <div class="buttons-container">
6
- <UiButton v-tooltip="$t('coming-soon')" accent="brand" variant="primary" size="medium" disabled>
7
- {{ $t('send') }}
6
+ <UiButton v-tooltip="t('coming-soon')" accent="brand" variant="primary" size="medium" disabled>
7
+ {{ t('send') }}
8
8
  </UiButton>
9
- <UiButton v-tooltip="$t('coming-soon')" accent="brand" variant="secondary" size="medium" disabled>
10
- {{ $t('receive') }}
9
+ <UiButton v-tooltip="t('coming-soon')" accent="brand" variant="secondary" size="medium" disabled>
10
+ {{ t('receive') }}
11
11
  </UiButton>
12
12
  </div>
13
13
  </div>
@@ -19,8 +19,11 @@ import UiCardTitle from '@core/components/ui/card-title/UiCardTitle.vue'
19
19
  import UiTextarea from '@core/components/ui/text-area/UiTextarea.vue'
20
20
  import { vTooltip } from '@core/directives/tooltip.directive'
21
21
  import { ref } from 'vue'
22
+ import { useI18n } from 'vue-i18n'
22
23
 
23
24
  const modelValue = ref('')
25
+
26
+ const { t } = useI18n()
24
27
  </script>
25
28
 
26
29
  <style lang="postcss" scoped>
@@ -1,29 +1,22 @@
1
1
  <template>
2
- <UiButtonIcon v-tooltip="copied && $t('core.copied')" :icon size="medium" accent="brand" @click="copyToClipboard()" />
2
+ <UiButtonIcon v-tooltip="copied && t('core.copied')" :icon size="medium" accent="brand" @click="copy()" />
3
3
  </template>
4
4
 
5
5
  <script setup lang="ts">
6
6
  import UiButtonIcon from '@core/components/ui/button-icon/UiButtonIcon.vue'
7
7
  import { vTooltip } from '@core/directives/tooltip.directive'
8
8
  import { faCheckCircle, faCopy } from '@fortawesome/free-solid-svg-icons'
9
- import { useClipboard, useTimeoutFn } from '@vueuse/core'
10
- import { ref } from 'vue'
9
+ import { useClipboard } from '@vueuse/core'
10
+ import { computed } from 'vue'
11
+ import { useI18n } from 'vue-i18n'
11
12
 
12
13
  const { value } = defineProps<{
13
14
  value: string
14
15
  }>()
15
16
 
16
- const { copy, copied } = useClipboard()
17
+ const { t } = useI18n()
17
18
 
18
- const icon = ref(faCopy)
19
+ const { copy, copied } = useClipboard({ source: () => value })
19
20
 
20
- const { start: changeIcon } = useTimeoutFn(() => {
21
- icon.value = faCopy
22
- }, 1_500) // 1.5s is time to toltips is visible
23
-
24
- function copyToClipboard() {
25
- copy(value)
26
- icon.value = faCheckCircle
27
- changeIcon()
28
- }
21
+ const icon = computed(() => (copied.value ? faCheckCircle : faCopy))
29
22
  </script>
@@ -10,10 +10,10 @@
10
10
  </div>
11
11
  <div v-if="onToggleSelectAll" class="buttons">
12
12
  <span v-if="selected !== 'all'" @click="emit('toggleSelectAll', true)">
13
- {{ $t('core.select.all') }}
13
+ {{ t('core.select.all') }}
14
14
  </span>
15
15
  <span v-if="selected !== 'none'" @click="emit('toggleSelectAll', false)">
16
- {{ $t('core.select.none') }}
16
+ {{ t('core.select.none') }}
17
17
  </span>
18
18
  </div>
19
19
  </div>
@@ -22,6 +22,7 @@
22
22
  <script lang="ts" setup>
23
23
  import VtsIcon from '@core/components/icon/VtsIcon.vue'
24
24
  import type { IconDefinition } from '@fortawesome/fontawesome-common-types'
25
+ import { useI18n } from 'vue-i18n'
25
26
 
26
27
  withDefaults(
27
28
  defineProps<{
@@ -35,6 +36,8 @@ withDefaults(
35
36
  const emit = defineEmits<{
36
37
  toggleSelectAll: [value: boolean]
37
38
  }>()
39
+
40
+ const { t } = useI18n()
38
41
  </script>
39
42
 
40
43
  <style lang="postcss" scoped>
@@ -0,0 +1,49 @@
1
+ <template>
2
+ <DisplayIcon v-if="icon" class="vts-icon" :class="className" :icon />
3
+ </template>
4
+
5
+ <script lang="ts" setup>
6
+ import { type IconName, icons } from '@core/icons'
7
+ import { DisplayIcon } from '@core/packages/icon'
8
+ import { toVariants } from '@core/utils/to-variants.util.ts'
9
+ import { computed } from 'vue'
10
+
11
+ export type IconSize = 'small' | 'medium' | 'large' | 'current'
12
+
13
+ const { size, name } = defineProps<{
14
+ size: IconSize
15
+ name: IconName
16
+ }>()
17
+
18
+ const className = computed(() =>
19
+ toVariants({
20
+ size: size === 'current' ? undefined : size,
21
+ })
22
+ )
23
+
24
+ const icon = computed(() => {
25
+ const icon = icons[name]
26
+
27
+ if (icon === undefined) {
28
+ console.warn(`Icon "${name}" not found.`)
29
+ }
30
+
31
+ return icon
32
+ })
33
+ </script>
34
+
35
+ <style lang="postcss" scoped>
36
+ .vts-icon {
37
+ &.size--small {
38
+ font-size: 1.2rem;
39
+ }
40
+
41
+ &.size--medium {
42
+ font-size: 1.6rem;
43
+ }
44
+
45
+ &.size--large {
46
+ font-size: 2rem;
47
+ }
48
+ }
49
+ </style>
@@ -0,0 +1,41 @@
1
+ <template>
2
+ <div class="vts-input-group">
3
+ <slot />
4
+ </div>
5
+ </template>
6
+
7
+ <style lang="postcss" scoped>
8
+ .vts-input-group {
9
+ display: flex;
10
+ align-items: center;
11
+
12
+ :slotted(> .ui-input),
13
+ :slotted(> .vts-select) {
14
+ &:hover {
15
+ z-index: 1;
16
+ }
17
+
18
+ &:focus-within {
19
+ z-index: 2;
20
+ }
21
+
22
+ &:not(:first-child) {
23
+ margin-left: -1px;
24
+
25
+ &,
26
+ .ui-input {
27
+ border-start-start-radius: 0;
28
+ border-end-start-radius: 0;
29
+ }
30
+ }
31
+
32
+ &:not(:last-child) {
33
+ &,
34
+ .ui-input {
35
+ border-start-end-radius: 0;
36
+ border-end-end-radius: 0;
37
+ }
38
+ }
39
+ }
40
+ }
41
+ </style>
@@ -20,8 +20,8 @@
20
20
  <script lang="ts" setup>
21
21
  import UiInfo, { type InfoAccent } from '@core/components/ui/info/UiInfo.vue'
22
22
  import UiLabel, { type LabelAccent } from '@core/components/ui/label/UiLabel.vue'
23
- import { useMapper } from '@core/composables/mapper.composable'
24
23
  import { useRanked } from '@core/composables/ranked.composable.ts'
24
+ import { useMapper } from '@core/packages/mapper/use-mapper.ts'
25
25
  import type { MaybeArray } from '@core/types/utility.type'
26
26
  import { IK_INPUT_WRAPPER_CONTROLLER } from '@core/utils/injection-keys.util'
27
27
  import { toArray } from '@core/utils/to-array.utils'
@@ -70,7 +70,7 @@ const labelAccent = useMapper<InfoAccent, LabelAccent>(
70
70
  danger: 'danger',
71
71
  muted: 'neutral',
72
72
  },
73
- 'neutral'
73
+ 'info'
74
74
  )
75
75
 
76
76
  const wrapperController = reactive({
@@ -6,12 +6,12 @@
6
6
  <div v-if="!ui.isMobile" class="lock">
7
7
  <UiButtonIcon
8
8
  v-tooltip="{
9
- content: sidebar.isLocked ? $t('core.sidebar.unlock') : $t('core.sidebar.lock'),
9
+ content: sidebar.isLocked ? t('core.sidebar.unlock') : t('core.sidebar.lock'),
10
10
  placement: 'right',
11
11
  }"
12
12
  accent="brand"
13
13
  size="medium"
14
- :icon="sidebar.isLocked ? faLock : faLockOpen"
14
+ :icon="sidebar.isLocked ? faThumbTackSlash : faThumbTack"
15
15
  @click="sidebar.toggleLock()"
16
16
  />
17
17
  </div>
@@ -38,7 +38,8 @@ import UiButtonIcon from '@core/components/ui/button-icon/UiButtonIcon.vue'
38
38
  import { vTooltip } from '@core/directives/tooltip.directive'
39
39
  import { useSidebarStore } from '@core/stores/sidebar.store'
40
40
  import { useUiStore } from '@core/stores/ui.store'
41
- import { faLock, faLockOpen } from '@fortawesome/free-solid-svg-icons'
41
+ import { faThumbTack, faThumbTackSlash } from '@fortawesome/free-solid-svg-icons'
42
+ import { useI18n } from 'vue-i18n'
42
43
 
43
44
  const slots = defineSlots<{
44
45
  default(): any
@@ -46,6 +47,8 @@ const slots = defineSlots<{
46
47
  footer?(): any
47
48
  }>()
48
49
 
50
+ const { t } = useI18n()
51
+
49
52
  const sidebar = useSidebarStore()
50
53
  const ui = useUiStore()
51
54
  </script>
@@ -29,6 +29,10 @@ const valueFormatter = computed<ValueFormatter>(() => {
29
29
  const formatter = _valueFormatter
30
30
 
31
31
  return value => {
32
+ if (value === null) {
33
+ return ''
34
+ }
35
+
32
36
  if (formatter === undefined) {
33
37
  return value.toString()
34
38
  }
@@ -0,0 +1,22 @@
1
+ <template>
2
+ <NewVtsIcon :name="iconName" :size />
3
+ </template>
4
+
5
+ <script generic="TType extends ObjectIconType" lang="ts" setup>
6
+ import NewVtsIcon, { type IconSize } from '@core/components/icon/NewVtsIcon.vue'
7
+ import type { ObjectIconName } from '@core/icons'
8
+ import { computed } from 'vue'
9
+
10
+ export type ObjectIconType = ObjectIconName extends `object:${infer TType}:${string}` ? TType : never
11
+
12
+ export type ObjectIconState<TType extends ObjectIconType> =
13
+ Extract<ObjectIconName, `object:${TType}:${string}`> extends `object:${TType}:${infer TState}` ? TState : never
14
+
15
+ const { type, state } = defineProps<{
16
+ type: TType
17
+ state: ObjectIconState<TType>
18
+ size: IconSize
19
+ }>()
20
+
21
+ const iconName = computed(() => `object:${type}:${state}` as ObjectIconName)
22
+ </script>
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <UiCard class="vts-quick-info-card">
3
- <UiCardTitle>{{ $t('quick-info') }}</UiCardTitle>
3
+ <UiCardTitle>{{ t('quick-info') }}</UiCardTitle>
4
4
  <VtsLoadingHero v-if="loading" type="card" />
5
5
  <div v-else class="info-container">
6
6
  <slot />
@@ -12,10 +12,13 @@
12
12
  import VtsLoadingHero from '@core/components/state-hero/VtsLoadingHero.vue'
13
13
  import UiCard from '@core/components/ui/card/UiCard.vue'
14
14
  import UiCardTitle from '@core/components/ui/card-title/UiCardTitle.vue'
15
+ import { useI18n } from 'vue-i18n'
15
16
 
16
17
  defineProps<{
17
18
  loading: boolean
18
19
  }>()
20
+
21
+ const { t } = useI18n()
19
22
  </script>
20
23
 
21
24
  <style lang="postcss" scoped>
@@ -1,24 +1,28 @@
1
1
  <template>
2
2
  <UiDropdown
3
3
  ref="elementRef"
4
- :checkbox="option.properties.multiple"
4
+ :accent
5
+ :checkbox="isMultiple"
5
6
  :disabled="option.properties.disabled"
6
7
  :hover="option.flags.active"
7
8
  :selected="option.flags.selected"
8
- accent="normal"
9
9
  >
10
10
  <slot>{{ option.properties.label }}</slot>
11
11
  </UiDropdown>
12
12
  </template>
13
13
 
14
- <script generic="TOption extends FormOption" lang="ts" setup>
15
- import UiDropdown from '@core/components/ui/dropdown/UiDropdown.vue'
16
- import type { FormOption } from '@core/packages/form-select/types.ts'
17
- import { useFormOptionController } from '@core/packages/form-select/use-form-option-controller.ts'
14
+ <script generic="TOption extends FormOption<{ accent?: DropdownAccent }>" lang="ts" setup>
15
+ import UiDropdown, { type DropdownAccent } from '@core/components/ui/dropdown/UiDropdown.vue'
16
+ import { type FormOption, IK_FORM_SELECT_CONTROLLER, useFormOptionController } from '@core/packages/form-select'
17
+ import { computed, inject } from 'vue'
18
18
 
19
19
  const { option } = defineProps<{
20
20
  option: TOption
21
21
  }>()
22
22
 
23
+ const accent = computed(() => option.properties.accent ?? 'normal')
24
+
23
25
  const { elementRef } = useFormOptionController(() => option)
26
+
27
+ const { isMultiple } = inject(IK_FORM_SELECT_CONTROLLER)!
24
28
  </script>