fluency-v8-components 1.3.5 → 1.3.7

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 (178) hide show
  1. package/dist/fluency-v8-components.es.js +1 -1
  2. package/dist/fluency-v8-components.umd.js +99 -99
  3. package/dist/{index-q2NbjdVo.mjs → index-ChEFiXF5.mjs} +12 -11
  4. package/dist/{index.es-PAPL4E6Y.mjs → index.es-CjjN70eV.mjs} +1 -1
  5. package/package.json +3 -2
  6. package/src/assets/images/ai.svg +1 -0
  7. package/src/assets/images/github-dark.svg +1 -0
  8. package/src/assets/images/github.svg +1 -0
  9. package/src/assets/images/high-priority.svg +1 -0
  10. package/src/assets/images/power-off.svg +1 -0
  11. package/src/assets/images/save.svg +1 -0
  12. package/src/assets/index.ts +15 -0
  13. package/src/assets/main.css +495 -0
  14. package/src/assets/prism-theme.css +290 -0
  15. package/src/components/buttons/ActionButtons.vue +374 -0
  16. package/src/components/buttons/DropdownButton.vue +104 -0
  17. package/src/components/buttons/IconButton.vue +63 -0
  18. package/src/components/buttons/ImageButton.vue +16 -0
  19. package/src/components/buttons/MenuButton.vue +138 -0
  20. package/src/components/buttons/SubmitButtons.vue +51 -0
  21. package/src/components/buttons/TextButton.vue +40 -0
  22. package/src/components/charts/AlertChart.vue +376 -0
  23. package/src/components/charts/BarChart.vue +212 -0
  24. package/src/components/charts/BarChartHorizontal.vue +243 -0
  25. package/src/components/charts/CronChart.vue +146 -0
  26. package/src/components/charts/EmptyChart.vue +76 -0
  27. package/src/components/charts/GradientChart.vue +310 -0
  28. package/src/components/charts/LineChart.test.js +59 -0
  29. package/src/components/charts/LineChart.vue +434 -0
  30. package/src/components/charts/PieChart.vue +293 -0
  31. package/src/components/charts/ProgressChart.vue +106 -0
  32. package/src/components/charts/StackedChart.vue +364 -0
  33. package/src/components/charts/StackedChartClustered.vue +395 -0
  34. package/src/components/charts/TimelineChart.vue +215 -0
  35. package/src/components/charts/WorkflowChart.vue +520 -0
  36. package/src/components/common/AutoCompleteSearchBar.vue +100 -0
  37. package/src/components/common/AutoRefreshButton.vue +53 -0
  38. package/src/components/common/Breadcrumb.vue +45 -0
  39. package/src/components/common/ButtonToggle.vue +24 -0
  40. package/src/components/common/Card.vue +116 -0
  41. package/src/components/common/Carousel.vue +66 -0
  42. package/src/components/common/CategoryCard.vue +28 -0
  43. package/src/components/common/CodeEditor.vue +59 -0
  44. package/src/components/common/DatePicker.vue +21 -0
  45. package/src/components/common/DatePickerInput.vue +109 -0
  46. package/src/components/common/Dialog.vue +103 -0
  47. package/src/components/common/EditorHeading.vue +10 -0
  48. package/src/components/common/EventList.vue +41 -0
  49. package/src/components/common/Facet.vue +206 -0
  50. package/src/components/common/Feed.vue +58 -0
  51. package/src/components/common/Flag.vue +27 -0
  52. package/src/components/common/HomeCard.vue +20 -0
  53. package/src/components/common/ItemBox.vue +49 -0
  54. package/src/components/common/Loading.vue +19 -0
  55. package/src/components/common/LoadingDots.vue +12 -0
  56. package/src/components/common/PageHeading.vue +30 -0
  57. package/src/components/common/Pagination.vue +105 -0
  58. package/src/components/common/Popover.vue +24 -0
  59. package/src/components/common/PowerToggle.vue +130 -0
  60. package/src/components/common/ProgressBar.vue +33 -0
  61. package/src/components/common/RadioButtons.vue +52 -0
  62. package/src/components/common/Schedule.vue +79 -0
  63. package/src/components/common/SearchBar.vue +30 -0
  64. package/src/components/common/Separator.vue +3 -0
  65. package/src/components/common/Slideout.vue +95 -0
  66. package/src/components/common/Sort.vue +83 -0
  67. package/src/components/common/Table.vue +48 -0
  68. package/src/components/common/Tabs.vue +129 -0
  69. package/src/components/common/Tag.vue +53 -0
  70. package/src/components/common/Tooltip.vue +49 -0
  71. package/src/components/common/VerticalTabs.vue +34 -0
  72. package/src/components/common/card/CardItem.vue +27 -0
  73. package/src/components/common/card/CardItemGroup.vue +45 -0
  74. package/src/components/common/facet/Leaf.vue +97 -0
  75. package/src/components/common/facet/TriState.vue +37 -0
  76. package/src/components/common/table/TableData.vue +48 -0
  77. package/src/components/common/table/TableHeader.vue +21 -0
  78. package/src/components/dialogs/ChooseValueDialog.vue +97 -0
  79. package/src/components/dialogs/ConfirmDialog.vue +73 -0
  80. package/src/components/dialogs/CopyDialog.vue +51 -0
  81. package/src/components/dialogs/DownloadDialog.vue +48 -0
  82. package/src/components/dialogs/NameDescDialog.vue +74 -0
  83. package/src/components/dialogs/NameDialog.vue +56 -0
  84. package/src/components/dialogs/PopupEditor.vue +113 -0
  85. package/src/components/dialogs/ProgressDialog.vue +58 -0
  86. package/src/components/dialogs/ResetPasswordDialog.vue +58 -0
  87. package/src/components/dialogs/Wizard.vue +99 -0
  88. package/src/components/dialogs/wizard/Stepper.vue +31 -0
  89. package/src/components/form/CheckBox.vue +26 -0
  90. package/src/components/form/Editor.vue +93 -0
  91. package/src/components/form/FormCol.vue +19 -0
  92. package/src/components/form/FormRow.vue +19 -0
  93. package/src/components/form/FormSection.vue +21 -0
  94. package/src/components/form/GreyForm.vue +7 -0
  95. package/src/components/form/GreyInput.vue +51 -0
  96. package/src/components/form/GreyInputAutocomplete.vue +100 -0
  97. package/src/components/form/GreyInputCopy.vue +66 -0
  98. package/src/components/form/GreyInputGrow.vue +42 -0
  99. package/src/components/form/GreyInputToken.vue +78 -0
  100. package/src/components/form/GreyPassword.vue +36 -0
  101. package/src/components/form/GreySelect.vue +154 -0
  102. package/src/components/form/GreySelectInput.vue +123 -0
  103. package/src/components/form/GreySelectInputMultiple.vue +218 -0
  104. package/src/components/form/GreyTel.vue +58 -0
  105. package/src/components/form/HamburgerItem.vue +95 -0
  106. package/src/components/form/KeyValueEntry.vue +74 -0
  107. package/src/components/form/RadioInput.vue +38 -0
  108. package/src/components/form/UploadFile.vue +99 -0
  109. package/src/components/icons/AiIcon.vue +6 -0
  110. package/src/components/icons/GithubIcon.vue +18 -0
  111. package/src/components/icons/HighPriorityIcon.vue +6 -0
  112. package/src/components/icons/PowerOffIcon.vue +6 -0
  113. package/src/components/icons/SaveIcon.vue +6 -0
  114. package/src/components/index.js +134 -0
  115. package/src/components/menu/DialogMenu.vue +142 -0
  116. package/src/components/menu/GrandChild.vue +39 -0
  117. package/src/components/menu/GridMenu.vue +88 -0
  118. package/src/components/menu/MenuAvatar.vue +66 -0
  119. package/src/components/menu/MenuDesktop.vue +90 -0
  120. package/src/components/notifications/Notify.vue +123 -0
  121. package/src/components/notifications/NotifyList.vue +130 -0
  122. package/src/components/page-structure/FacetPage.vue +77 -0
  123. package/src/components/query/Child.vue +63 -0
  124. package/src/components/query/LVDBQuery.vue +38 -0
  125. package/src/components/status/Active.vue +44 -0
  126. package/src/components/status/ScoreLevel.vue +43 -0
  127. package/src/components/status/Status.vue +51 -0
  128. package/src/components/status/TaskDot.vue +25 -0
  129. package/src/components/status/TaskStatus.vue +26 -0
  130. package/src/components/status/TicketStatus.vue +201 -0
  131. package/src/components/status/Trend.vue +20 -0
  132. package/src/components/tables/ArgumentRunTable.vue +96 -0
  133. package/src/components/tables/ArgumentTable.vue +67 -0
  134. package/src/components/tables/CloudFormationParameters.vue +25 -0
  135. package/src/constants/colors.js +248 -0
  136. package/src/constants/font-map.js +128 -0
  137. package/src/constants/fpl2.js +162 -0
  138. package/src/constants/icon-svg.js +405 -0
  139. package/src/constants/schedule.js +52 -0
  140. package/src/fpl/AddPanel.vue +237 -0
  141. package/src/fpl/Configs/Alert.vue +16 -0
  142. package/src/fpl/Configs/AlertSprite.vue +2 -0
  143. package/src/fpl/Configs/Chart.vue +63 -0
  144. package/src/fpl/Configs/Config.js +154 -0
  145. package/src/fpl/Configs/Counter.vue +35 -0
  146. package/src/fpl/Configs/Histogram.vue +70 -0
  147. package/src/fpl/Configs/IPMap.vue +37 -0
  148. package/src/fpl/Configs/Image.vue +163 -0
  149. package/src/fpl/Configs/MetricChart.vue +20 -0
  150. package/src/fpl/Configs/PieChart.vue +37 -0
  151. package/src/fpl/Configs/SparkChart.vue +41 -0
  152. package/src/fpl/Configs/StackedBarChart.vue +49 -0
  153. package/src/fpl/Configs/Table.vue +211 -0
  154. package/src/fpl/Configs/Text.vue +14 -0
  155. package/src/fpl/Configs/TopNChart.vue +37 -0
  156. package/src/fpl/Outputs/FPLAlert.vue +64 -0
  157. package/src/fpl/Outputs/FPLStream.vue +41 -0
  158. package/src/fpl/Outputs/FPLTable.vue +77 -0
  159. package/src/fpl/Panel.vue +202 -0
  160. package/src/fpl/Panels/Alert.vue +85 -0
  161. package/src/fpl/Panels/AlertSprite.vue +9 -0
  162. package/src/fpl/Panels/Chart.vue +98 -0
  163. package/src/fpl/Panels/Counter.vue +43 -0
  164. package/src/fpl/Panels/Histogram.vue +138 -0
  165. package/src/fpl/Panels/IPMap.vue +48 -0
  166. package/src/fpl/Panels/Image.vue +35 -0
  167. package/src/fpl/Panels/MetricChart.vue +97 -0
  168. package/src/fpl/Panels/PieChart.vue +54 -0
  169. package/src/fpl/Panels/SparkChart.vue +166 -0
  170. package/src/fpl/Panels/StackedBarChart.vue +74 -0
  171. package/src/fpl/Panels/Table.vue +103 -0
  172. package/src/fpl/Panels/Text.vue +24 -0
  173. package/src/fpl/Panels/TopNChart.vue +69 -0
  174. package/src/fpl/index.js +39 -0
  175. package/src/utils/download.js +220 -0
  176. package/src/utils/formatOutput.js +156 -0
  177. package/src/utils/random.js +32 -0
  178. package/src/utils/timeUtils.js +138 -0
@@ -0,0 +1,201 @@
1
+ <template>
2
+ <Menu as="div" class="inline-block text-left">
3
+ <div>
4
+ <MenuButton
5
+ class="inline-flex w-full justify-center rounded-md bg-white dark:bg-transparent px-3 py-1 text-sm font-semibold text-gray-900 dark:text-white shadow-xs ring-1 ring-inset ring-gray-300 hover:bg-gray-50 dark:hoverdark-bg-hover"
6
+ :disabled="disabled"
7
+ @click="($event) => closeMenu($event)"
8
+ >
9
+ <div class="flex">
10
+ <ExclamationCircleIcon
11
+ v-if="selectedItem === 'new'"
12
+ class="icon mt-0.5 icon-yellow"
13
+ />
14
+ <ClockIcon
15
+ v-if="
16
+ selectedItem === 'acknowledged' || selectedItem === 'Acknowledged'
17
+ "
18
+ class="icon mt-0.5 icon-blue"
19
+ />
20
+ <CheckCircleIcon
21
+ v-if="selectedItem === 'resolved' || selectedItem === 'Resolved'"
22
+ class="icon mt-0.5 icon-green"
23
+ />
24
+ <XCircleIcon
25
+ v-if="selectedItem === 'closed' || selectedItem === 'Closed'"
26
+ class="icon mt-0.5 icon-gray"
27
+ />
28
+ <div class="ml-1">
29
+ {{ selectedItem || "N/A" }}
30
+ </div>
31
+ </div>
32
+ <ChevronDownIcon
33
+ v-if="!disabled"
34
+ class="-mr-1 icon-md text-gray-400"
35
+ aria-hidden="true"
36
+ />
37
+ </MenuButton>
38
+ </div>
39
+
40
+ <transition
41
+ enter-active-class="transition ease-out duration-100"
42
+ enter-from-class="transform opacity-0 scale-95"
43
+ enter-to-class="transform opacity-100 scale-100"
44
+ leave-active-class="transition ease-in duration-75"
45
+ leave-from-class="transform opacity-100 scale-100"
46
+ leave-to-class="transform opacity-0 scale-95"
47
+ >
48
+ <MenuItems
49
+ class="absolute z-10 w-30 origin-top-right rounded-xs bg-white dark:bg-zinc-800 shadow-lg ring-1 ring-black dark:ring-gray-300/5 focus:outline-hidden"
50
+ style="transform: translateX(-60px)"
51
+ >
52
+ <div class="py-0.5" v-for="(item, index) in data" :key="index">
53
+ <MenuItem
54
+ v-if="(item !== 'closed' && item !== 'Closed') || hideSubItems"
55
+ v-slot="{ active }"
56
+ @click.stop="selectItem(item)"
57
+ @mouseover="openClassification = false"
58
+ >
59
+ <a
60
+ :class="[
61
+ active
62
+ ? 'bg-gray-100 text-gray-900 dark:text-black'
63
+ : 'text-gray-700',
64
+ 'block px-4 py-1 text-sm dark:text-white dark:std-dark',
65
+ ]"
66
+ >
67
+ <div class="flex">
68
+ <ExclamationCircleIcon
69
+ v-if="item === 'new' || item === 'New'"
70
+ class="icon mt-0.5 icon-yellow"
71
+ />
72
+ <ClockIcon
73
+ v-if="item === 'acknowledged' || item === 'Acknowledged'"
74
+ class="icon mt-0.5 icon-blue"
75
+ />
76
+ <XCircleIcon
77
+ v-if="item === 'closed' || item === 'Closed'"
78
+ class="icon mt-0.5 icon-gray"
79
+ />
80
+ <div class="ml-1">{{ item }}</div>
81
+ </div>
82
+ </a>
83
+ </MenuItem>
84
+ <div
85
+ v-else
86
+ class="relative"
87
+ @click.stop="() => {}"
88
+ @mouseover="openClassification = true"
89
+ >
90
+ <MenuItem v-slot="{ active }">
91
+ <div
92
+ :class="[
93
+ active
94
+ ? 'bg-gray-100 text-gray-900 dark:text-black'
95
+ : 'text-gray-700',
96
+ 'block px-4 py-1 text-sm dark:text-white dark:std-dark',
97
+ ]"
98
+ >
99
+ <div class="flex">
100
+ <XCircleIcon class="icon mt-0.5 icon-gray" />
101
+ <div class="ml-1">Closed</div>
102
+ </div>
103
+ </div>
104
+ </MenuItem>
105
+ <div
106
+ v-if="openClassification"
107
+ :class="[
108
+ 'absolute top-0 w-80 rounded-xs bg-white dark:bg-zinc-800 shadow-lg ring-1 ring-black dark:ring-gray-300/5',
109
+ { 'left-full': subItemDirection === 'right' },
110
+ { 'right-full': subItemDirection === 'left' },
111
+ ]"
112
+ >
113
+ <a
114
+ v-for="classification in classifications"
115
+ class="block px-4 py-1 text-sm text-gray-700 dark:text-white dark:std-dark hover:bg-gray-100 hover:text-gray-900"
116
+ @click.stop="selectSubItem(item, classification)"
117
+ >
118
+ <div class="flex">
119
+ <div class="ml-1">{{ classification }}</div>
120
+ </div>
121
+ </a>
122
+ </div>
123
+ </div>
124
+ </div>
125
+ </MenuItems>
126
+ </transition>
127
+ </Menu>
128
+ </template>
129
+
130
+ <script setup>
131
+ import { Menu, MenuButton, MenuItem, MenuItems } from "@headlessui/vue";
132
+ import {
133
+ CheckCircleIcon,
134
+ ClockIcon,
135
+ ChevronDownIcon,
136
+ ExclamationCircleIcon,
137
+ XCircleIcon,
138
+ } from "@heroicons/vue/24/outline";
139
+ import { ref, watch } from "vue";
140
+ // constants
141
+ const data = ["new", "acknowledged", "closed"];
142
+ const classifications = [
143
+ "True Positive - suspicious activity",
144
+ "Benign Positive - suspicious but expected",
145
+ "False Positive - incorrect alert logic",
146
+ "False Positive - incorrect data",
147
+ "Undetermined",
148
+ ];
149
+ // props and emits
150
+ const props = defineProps({
151
+ current: String,
152
+ disabled: {
153
+ type: Boolean,
154
+ default: false,
155
+ },
156
+ hideSubItems: {
157
+ type: Boolean,
158
+ default: false,
159
+ },
160
+ subItemDirection: {
161
+ type: String,
162
+ default: "right",
163
+ },
164
+ });
165
+ const emits = defineEmits(["select", "selectSubItem"]);
166
+ // states
167
+ const selectedItem = ref(props.current);
168
+ const openClassification = ref(false);
169
+ // watch for changes in current prop
170
+ watch(
171
+ () => props.current,
172
+ () => {
173
+ selectedItem.value = props.current || "N/A";
174
+ },
175
+ { immediate: true }
176
+ );
177
+ // function defs
178
+ function selectItem(item) {
179
+ selectedItem.value = item;
180
+ emits("select", item);
181
+ }
182
+
183
+ function selectSubItem(item, classification) {
184
+ selectedItem.value = item;
185
+ openClassification.value = false;
186
+ emits("selectSubItem", item, classification);
187
+ }
188
+
189
+ function closeMenu(event) {
190
+ event.stopPropagation();
191
+ openClassification.value = false;
192
+ }
193
+
194
+ function reset(item) {
195
+ selectedItem.value = item;
196
+ }
197
+
198
+ defineExpose({
199
+ reset,
200
+ });
201
+ </script>
@@ -0,0 +1,20 @@
1
+ <template>
2
+ <div
3
+ :class="[
4
+ 'status-dot text-2xl',
5
+ trend === 'positive'
6
+ ? 'status-positive'
7
+ : trend === 'negative'
8
+ ? 'status-negative'
9
+ : 'status-neutral',
10
+ ]"
11
+ >
12
+ {{ (trend === "positive" ? "+ " : "- ") + value }}
13
+ </div>
14
+ </template>
15
+ <script setup>
16
+ const props = defineProps({
17
+ trend: String,
18
+ value: String,
19
+ });
20
+ </script>
@@ -0,0 +1,96 @@
1
+ <template>
2
+ <Table :data="['padding']">
3
+ <template #header>
4
+ <tr>
5
+ <TableHeader title="Name" />
6
+ <TableHeader title="Description" />
7
+ <TableHeader title="Type" />
8
+ <TableHeader title="Value" />
9
+ </tr>
10
+ </template>
11
+ <template #rows>
12
+ <tr v-for="(param, i) in local" :key="param.name">
13
+ <TableData :title="param.name" />
14
+ <TableData :title="param.description" />
15
+ <TableData :title="typeMap[param.type]" />
16
+ <TableData>
17
+ <div class="row relative">
18
+ <GreyInput v-model="param.value" :error="errors[param.name]" />
19
+ <IconButton
20
+ v-if="attributes.length > 0"
21
+ tooltip="Use Attribute"
22
+ tooltip-direction="left"
23
+ @click="selecting(i)"
24
+ >
25
+ <PencilIcon class="icon-md" />
26
+ </IconButton>
27
+ </div>
28
+ </TableData>
29
+ </tr>
30
+ </template>
31
+ </Table>
32
+ <ChooseValueDialog
33
+ ref="chooseValue"
34
+ :values="attributes"
35
+ title="Choose Attribute"
36
+ nameField="Attribute"
37
+ saveButtonText="Set Attribute"
38
+ @save="setValue"
39
+ />
40
+ </template>
41
+ <script setup>
42
+ import { ref, watch } from "vue";
43
+ import {
44
+ Table,
45
+ TableHeader,
46
+ GreyInput,
47
+ TableData,
48
+ IconButton,
49
+ ChooseValueDialog,
50
+ } from "@/components";
51
+ import { PencilIcon } from "@heroicons/vue/20/solid";
52
+
53
+ // constants
54
+ const typeMap = {
55
+ string: "String",
56
+ integer: "Integer",
57
+ float: "Float",
58
+ boolean: "Boolean",
59
+ };
60
+ // props and emits
61
+ const props = defineProps({
62
+ data: Object,
63
+ attributes: {
64
+ type: Array,
65
+ default: () => [],
66
+ },
67
+ errors: {
68
+ type: Object,
69
+ default: () => ({}),
70
+ },
71
+ });
72
+ // states
73
+ const local = ref(props.data);
74
+ const selected = ref(-1);
75
+ // dialogs
76
+ const chooseValue = ref();
77
+ // watcher
78
+ watch(
79
+ () => props.data,
80
+ (val) => {
81
+ local.value = val;
82
+ }
83
+ );
84
+
85
+ // function defs
86
+ function selecting(i) {
87
+ selected.value = i;
88
+ chooseValue.value.openModal();
89
+ }
90
+
91
+ function setValue(val) {
92
+ local.value[selected.value].value = val.val;
93
+ selected.value = -1;
94
+ chooseValue.value.close();
95
+ }
96
+ </script>
@@ -0,0 +1,67 @@
1
+ <template>
2
+ <table class="w-full select-none std-table">
3
+ <thead class="text-left bg-neutral-200 dark:dark-bg">
4
+ <tr>
5
+ <TableHeader title="Name" />
6
+ <TableHeader title="Description" />
7
+ <TableHeader title="Type" />
8
+ <TableHeader title="Default Value" />
9
+ <!--TableHeader title="Actions" /-->
10
+ </tr>
11
+ </thead>
12
+ <tbody class="std-table-body">
13
+ <tr v-for="(param, idx) in local" :key="param.name">
14
+ <TableData :title="param.name" />
15
+ <TableData>
16
+ <GreyInput v-model="param.description" :readonly="readonly" />
17
+ </TableData>
18
+ <TableData>
19
+ <GreySelect
20
+ v-model="param.type"
21
+ :options="typeOptions"
22
+ :readonly="readonly"
23
+ />
24
+ </TableData>
25
+ <TableData>
26
+ <GreyInput v-model.trim="param.defaultValue" :readonly="readonly" />
27
+ </TableData>
28
+ <!--TableData>
29
+ <ActionButtons delete @delete="local.splice(idx, 1)" />
30
+ </TableData-->
31
+ </tr>
32
+ <!--tr>
33
+ <TableData
34
+ colspan="5"
35
+ class="dark:hover:dark-bg-hover hover:white-bg-hover"
36
+ title="+ Add Argument"
37
+ :center="true"
38
+ @click="
39
+ local.push({
40
+ name: '',
41
+ description: '',
42
+ type: 'string',
43
+ defaultValue: '',
44
+ })
45
+ "
46
+ />
47
+ </tr-->
48
+ </tbody>
49
+ </table>
50
+ </template>
51
+ <script setup>
52
+ import { ref } from "vue";
53
+ import { TableHeader, GreyInput, GreySelect, TableData } from "@/components";
54
+
55
+ const props = defineProps({
56
+ data: Object,
57
+ readonly: [Boolean, Number],
58
+ });
59
+ const local = ref(props.data);
60
+
61
+ const typeOptions = [
62
+ { label: "String", value: "string" },
63
+ { label: "Integer", value: "integer" },
64
+ { label: "Float", value: "float" },
65
+ { label: "Boolean", value: "boolean" },
66
+ ];
67
+ </script>
@@ -0,0 +1,25 @@
1
+ <template>
2
+ <Table :data="data">
3
+ <template #header>
4
+ <tr>
5
+ <TableHeader title="Name" class="px-4 py-2" />
6
+ <TableHeader title="Description" class="px-4 py-2" />
7
+ <TableHeader title="Value" class="px-4 py-2" />
8
+ </tr>
9
+ </template>
10
+ <template #rows>
11
+ <tr v-for="param in data" :key="param.name">
12
+ <td class="px-4 py-2">{{ param.name }}</td>
13
+ <td class="px-4 py-2">{{ param.description }}</td>
14
+ <td class="px-4 py-2">{{ param.value }}</td>
15
+ </tr>
16
+ </template>
17
+ </Table>
18
+ </template>
19
+ <script setup>
20
+ import { Table, TableHeader } from "@/components";
21
+
22
+ const props = defineProps({
23
+ data: Object,
24
+ });
25
+ </script>
@@ -0,0 +1,248 @@
1
+ import * as d3 from "d3";
2
+
3
+ const colors = {
4
+ light: {
5
+ canvas: "#f3f4f6",
6
+ primary: "#003153",
7
+ secondary: "#2d6f9d",
8
+ accent: "#9C27B0",
9
+ positive: "#259940",
10
+ neutral: "#777777",
11
+ negative: "#C10015",
12
+ info: "#007bf5",
13
+ warning: "#C71E23",
14
+ active: "#007D11",
15
+ active2: "#BE8700",
16
+ inactive: "#5C5C5C",
17
+ error: "#B44936",
18
+ text: "#000000",
19
+ main: "#FFFFFF",
20
+ },
21
+ dark: {
22
+ canvas: "#121212",
23
+ primary: "#003153",
24
+ secondary: "#2d6f9d",
25
+ accent: "#9C27B0",
26
+ positive: "#259940",
27
+ neutral: "#777777",
28
+ negative: "#C10015",
29
+ info: "#007bf5",
30
+ warning: "#C71E23",
31
+ active: "#03FC1C",
32
+ active2: "goldenrod",
33
+ inactive: "#BDBDBD",
34
+ error: "#FD1C03",
35
+ text: "#cbd5e1", // text-slate-300
36
+ main: "#1f2937", // bg-gray-800
37
+ },
38
+ };
39
+
40
+ const badge = {
41
+ light: {
42
+ green: {
43
+ background: "#BDE3C6",
44
+ border: "#259940",
45
+ weight: 300,
46
+ },
47
+ red: {
48
+ background: "#F4C7C3",
49
+ border: "#C10015",
50
+ weight: 300,
51
+ },
52
+ },
53
+ dark: {
54
+ green: {
55
+ background: "#259940",
56
+ border: "#BDE3C6",
57
+ weight: 400,
58
+ },
59
+ red: {
60
+ background: "#C10015",
61
+ border: "#F4C7C3",
62
+ weight: 400,
63
+ },
64
+ },
65
+ };
66
+
67
+ const platformMetricsLabels = {
68
+ light: {
69
+ pass: "#27aeef",
70
+ input: "#007D11",
71
+ output: "#007D11",
72
+ drop: "#ef9b20",
73
+ abort: "#7f7f7f",
74
+ compressed: "#5C5C5C",
75
+ error: "#ea5545",
76
+ ignored: "#7f7f7f",
77
+ buffer: "#27aeef",
78
+ },
79
+ dark: {
80
+ pass: "#27aeef",
81
+ input: "#03FC1C",
82
+ output: "#03FC1C",
83
+ drop: "#ef9b20",
84
+ abort: "#7f7f7f",
85
+ compressed: "#BDBDBD",
86
+ error: "#ea5545",
87
+ ignored: "#7f7f7f",
88
+ buffer: "#27aeef",
89
+ },
90
+ scale: {
91
+ pass: d3.scaleSequential(d3.interpolateBlues),
92
+ input: d3.scaleSequential(d3.interpolateGreens),
93
+ output: d3.scaleSequential(d3.interpolateGreens),
94
+ drop: d3.scaleSequential(d3.interpolateOranges),
95
+ abort: d3.scaleSequential(d3.interpolateGreys),
96
+ compressed: d3.scaleSequential(d3.interpolateGreys),
97
+ error: d3.scaleSequential(d3.interpolateReds),
98
+ ignored: d3.scaleSequential(d3.interpolateGreys),
99
+ buffer: d3.scaleSequential(d3.interpolateBlues),
100
+ },
101
+ };
102
+
103
+ const costLabels = {
104
+ light: {
105
+ ingressdata: "#007D11",
106
+ egresstootherregion: "#ef9b20",
107
+ egresstointernet: "#27aeef",
108
+ },
109
+ dark: {
110
+ ingressdata: "#03FC1C",
111
+ egresstootherregion: "#ef9b20",
112
+ egresstointernet: "#27aeef",
113
+ },
114
+ };
115
+
116
+ const chartColors = [
117
+ "#1f77b4",
118
+ "#ff7f0e",
119
+ "#2ca02c",
120
+ "#d62728",
121
+ "#9467bd",
122
+ "#8c564b",
123
+ "#e377c2",
124
+ "#7f7f7f",
125
+ "#bcbd22",
126
+ "#17becf",
127
+ "#1c9099",
128
+ "#d95f02",
129
+ "#7570b3",
130
+ "#e7298a",
131
+ "#66a61e",
132
+ "#e6ab02",
133
+ "#a6761d",
134
+ "#666666",
135
+ ];
136
+
137
+ const alertChartColors = {
138
+ light: {
139
+ Average: "#ff7f0e",
140
+ Upper_Bound: "#2ca02c",
141
+ Lower_Bound: "#e377c2",
142
+ Alert: "#27aeef",
143
+ },
144
+ dark: {
145
+ Average: "#ff7f0e",
146
+ Upper_Bound: "#2ca02c",
147
+ Lower_Bound: "#e377c2",
148
+ Alert: "#27aeef",
149
+ },
150
+ };
151
+
152
+ const colorListGreen = [
153
+ "#3FA83F",
154
+ "#93CE07",
155
+ "#43B446",
156
+ "#73B142",
157
+ "#259940",
158
+ "#00695C",
159
+ "#3ec995",
160
+ ];
161
+
162
+ const colorListMap = {
163
+ green: colorListGreen,
164
+ compute15: generateGradients("#b50101", "#7f7f7f", 15),
165
+ };
166
+
167
+ function numToHexStr(n) {
168
+ if (n < 0) {
169
+ return "00";
170
+ }
171
+ if (n < 16) {
172
+ return "0" + n.toString(16);
173
+ } else {
174
+ return n.toString(16);
175
+ }
176
+ }
177
+
178
+ function generateGradientsInterpolate(b, e, st, max) {
179
+ if (b > e) {
180
+ return numToHexStr(Math.floor((e - b) * (st / max)) + b);
181
+ } else {
182
+ return numToHexStr(Math.floor((b - e) * (1 - st / max)) + e);
183
+ }
184
+ }
185
+
186
+ function generateGradients(color1, color2, steps) {
187
+ if (steps <= 1) {
188
+ steps = 1;
189
+ }
190
+ if (steps > 256) {
191
+ steps = 16;
192
+ }
193
+ color1 = color1.replace("#", ""); // #7f7f7f
194
+ color2 = color2.replace("#", ""); // #b50101
195
+
196
+ const color1R = parseInt(color1.substring(0, 2), 16);
197
+ const color1G = parseInt(color1.substring(2, 4), 16);
198
+ const color1B = parseInt(color1.substring(4, 6), 16);
199
+
200
+ const color2R = parseInt(color2.substring(0, 2), 16);
201
+ const color2G = parseInt(color2.substring(2, 4), 16);
202
+ const color2B = parseInt(color2.substring(4, 6), 16);
203
+ // console.log(color1R, color1G, color1B)
204
+ // console.log(color2R, color2G, color2B)
205
+
206
+ const colors = [];
207
+ for (let i = 0; i <= steps; i++) {
208
+ let temp = "#";
209
+ const tempR = generateGradientsInterpolate(color1R, color2R, i, steps);
210
+ const tempG = generateGradientsInterpolate(color1G, color2G, i, steps);
211
+ const tempB = generateGradientsInterpolate(color1B, color2B, i, steps);
212
+ temp = temp + tempR + tempG + tempB;
213
+ colors.push(temp);
214
+ // console.log(temp)
215
+ }
216
+ return colors;
217
+ }
218
+
219
+ function getAColorByIndex(name, index) {
220
+ const cl = colorListMap[name];
221
+ return cl[index % cl.length];
222
+ }
223
+
224
+ function getAColorByHash(name, str) {
225
+ let sum = 0;
226
+ for (let i = 0; i < str.length; i++) {
227
+ sum += str.charCodeAt(i);
228
+ }
229
+ return getAColorByIndex(name, sum);
230
+ }
231
+
232
+ function getColorScheme(dark) {
233
+ return dark ? colors.dark : colors.light;
234
+ }
235
+
236
+ export {
237
+ colors,
238
+ badge,
239
+ chartColors,
240
+ alertChartColors,
241
+ platformMetricsLabels,
242
+ costLabels,
243
+ colorListMap,
244
+ getAColorByHash,
245
+ getAColorByIndex,
246
+ getColorScheme,
247
+ colorListGreen,
248
+ };