@dovetail-v2/refine 0.0.2 → 0.0.3-0.beta-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 (288) hide show
  1. package/dist/{MonacoYamlDiffEditor.a7832cec.js → MonacoYamlDiffEditor-7505595f.js} +5 -4
  2. package/dist/assets/{yaml.worker.bb17811d.js → yaml.worker-5e5f190c.js} +2153 -992
  3. package/dist/index-d02782c8.js +19445 -0
  4. package/dist/refine.js +119 -13
  5. package/dist/refine.umd.cjs +13392 -3776
  6. package/dist/style.css +1221 -32362
  7. package/lib/src/App.d.ts +0 -3
  8. package/lib/src/App.js +91 -0
  9. package/lib/src/Dovetail.d.ts +8 -4
  10. package/lib/src/Dovetail.js +45 -0
  11. package/lib/src/components/Breadcrumb/index.js +20 -0
  12. package/lib/src/components/ConditionsTable/ConditionsTable.js +56 -0
  13. package/lib/src/components/ConditionsTable/index.js +1 -0
  14. package/lib/src/components/CreateButton/index.js +10 -0
  15. package/lib/src/components/CronJobDropdown/index.d.ts +2 -2
  16. package/lib/src/components/CronJobDropdown/index.js +26 -0
  17. package/lib/src/components/CronjobJobsTable/index.js +49 -0
  18. package/lib/src/components/DeleteButton/index.js +13 -0
  19. package/lib/src/components/DeleteManyButton/index.js +16 -0
  20. package/lib/src/components/DrawerShow/DrawerShow.d.ts +6 -7
  21. package/lib/src/components/DrawerShow/DrawerShow.js +13 -0
  22. package/lib/src/components/DrawerShow/index.js +1 -0
  23. package/lib/src/components/EditButton/index.js +13 -0
  24. package/lib/src/components/EditField/index.d.ts +15 -0
  25. package/lib/src/components/EditField/index.js +47 -0
  26. package/lib/src/components/ErrorContent/index.d.ts +12 -0
  27. package/lib/src/components/ErrorContent/index.js +36 -0
  28. package/lib/src/components/EventsTable/EventsTable.d.ts +2 -0
  29. package/lib/src/components/EventsTable/EventsTable.js +59 -0
  30. package/lib/src/components/EventsTable/index.d.ts +1 -0
  31. package/lib/src/components/EventsTable/index.js +1 -0
  32. package/lib/src/components/Form/KeyValueListWidget.js +56 -0
  33. package/lib/src/components/Form/MetadataForm.js +9 -0
  34. package/lib/src/components/Form/NameInputWidget.js +50 -0
  35. package/lib/src/components/Form/NamespaceSelectWidget.js +21 -0
  36. package/lib/src/components/Form/index.js +4 -0
  37. package/lib/src/components/Form/widget.js +1 -0
  38. package/lib/src/components/FormErrorAlert/index.d.ts +8 -0
  39. package/lib/src/components/FormErrorAlert/index.js +8 -0
  40. package/lib/src/components/FormLayout/index.d.ts +5 -1
  41. package/lib/src/components/FormLayout/index.js +21 -0
  42. package/lib/src/components/FormModal/index.d.ts +10 -0
  43. package/lib/src/components/FormModal/index.js +51 -0
  44. package/lib/src/components/ImageNames/index.js +14 -0
  45. package/lib/src/components/IngressRulesComponent/index.d.ts +5 -0
  46. package/lib/src/components/IngressRulesComponent/index.js +11 -0
  47. package/lib/src/components/IngressRulesTable/IngressRulesTable.d.ts +7 -0
  48. package/lib/src/components/IngressRulesTable/IngressRulesTable.js +51 -0
  49. package/lib/src/components/IngressRulesTable/index.d.ts +1 -0
  50. package/lib/src/components/IngressRulesTable/index.js +1 -0
  51. package/lib/src/components/K8sDropdown/index.d.ts +2 -2
  52. package/lib/src/components/K8sDropdown/index.js +31 -0
  53. package/lib/src/components/KeyValue/KeyValue.js +27 -0
  54. package/lib/src/components/KeyValue/index.js +1 -0
  55. package/lib/src/components/KeyValueData/index.d.ts +6 -0
  56. package/lib/src/components/KeyValueData/index.js +50 -0
  57. package/lib/src/components/Layout/index.js +39 -0
  58. package/lib/src/components/ListPage/index.d.ts +3 -3
  59. package/lib/src/components/ListPage/index.js +25 -0
  60. package/lib/src/components/Menu/index.js +36 -0
  61. package/lib/src/components/NamespacesFilter/index.js +34 -0
  62. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.d.ts +7 -0
  63. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.js +77 -0
  64. package/lib/src/components/NetworkPolicyRulesTable/index.d.ts +1 -0
  65. package/lib/src/components/NetworkPolicyRulesTable/index.js +1 -0
  66. package/lib/src/components/PageShow/PageShow.d.ts +7 -8
  67. package/lib/src/components/PageShow/PageShow.js +11 -0
  68. package/lib/src/components/PageShow/index.js +1 -0
  69. package/lib/src/components/PodContainersTable/PodContainersTable.js +78 -0
  70. package/lib/src/components/PodContainersTable/index.js +1 -0
  71. package/lib/src/components/PodLog/index.d.ts +6 -0
  72. package/lib/src/components/PodLog/index.js +136 -0
  73. package/lib/src/components/ReferenceLink/index.d.ts +8 -0
  74. package/lib/src/components/ReferenceLink/index.js +17 -0
  75. package/lib/src/components/ResourceCRUD/ResourceCRUD.d.ts +3 -3
  76. package/lib/src/components/ResourceCRUD/ResourceCRUD.js +15 -0
  77. package/lib/src/components/ResourceCRUD/create/index.d.ts +6 -6
  78. package/lib/src/components/ResourceCRUD/create/index.js +13 -0
  79. package/lib/src/components/ResourceCRUD/index.d.ts +3 -0
  80. package/lib/src/components/ResourceCRUD/index.js +4 -0
  81. package/lib/src/components/ResourceCRUD/list/index.d.ts +4 -5
  82. package/lib/src/components/ResourceCRUD/list/index.js +19 -0
  83. package/lib/src/components/ResourceCRUD/show/index.d.ts +6 -7
  84. package/lib/src/components/ResourceCRUD/show/index.js +6 -0
  85. package/lib/src/components/ResourceLink/index.d.ts +8 -0
  86. package/lib/src/components/ResourceLink/index.js +21 -0
  87. package/lib/src/components/ResourceUsageBar/index.d.ts +8 -0
  88. package/lib/src/components/ResourceUsageBar/index.js +81 -0
  89. package/lib/src/components/Separator/index.js +11 -0
  90. package/lib/src/components/ShowContent/ShowContent.d.ts +7 -8
  91. package/lib/src/components/ShowContent/ShowContent.js +157 -0
  92. package/lib/src/components/ShowContent/fields.d.ts +34 -10
  93. package/lib/src/components/ShowContent/fields.js +157 -0
  94. package/lib/src/components/ShowContent/index.js +2 -0
  95. package/lib/src/components/StateTag/StateTag.d.ts +3 -1
  96. package/lib/src/components/StateTag/StateTag.js +22 -0
  97. package/lib/src/components/StateTag/index.js +1 -0
  98. package/lib/src/components/Table/ErrorContent.js +36 -0
  99. package/lib/src/components/Table/TableToolBar.js +14 -0
  100. package/lib/src/components/Table/TableWidgets.js +28 -0
  101. package/lib/src/components/Table/index.d.ts +9 -4
  102. package/lib/src/components/Table/index.js +69 -0
  103. package/lib/src/components/Tags/index.d.ts +1 -1
  104. package/lib/src/components/Tags/index.js +22 -0
  105. package/lib/src/components/Time/index.js +14 -0
  106. package/lib/src/components/WorkloadDropdown/index.d.ts +2 -2
  107. package/lib/src/components/WorkloadDropdown/index.js +24 -0
  108. package/lib/src/components/WorkloadPodsTable/WorkloadPodsTable.d.ts +5 -2
  109. package/lib/src/components/WorkloadPodsTable/WorkloadPodsTable.js +39 -0
  110. package/lib/src/components/WorkloadPodsTable/index.js +1 -0
  111. package/lib/src/components/WorkloadReplicas/index.d.ts +7 -4
  112. package/lib/src/components/WorkloadReplicas/index.js +50 -0
  113. package/lib/src/components/YamlEditor/MonacoYamlDiffEditor.js +34 -0
  114. package/lib/src/components/YamlEditor/MonacoYamlEditor.d.ts +1 -1
  115. package/lib/src/components/YamlEditor/MonacoYamlEditor.js +149 -0
  116. package/lib/src/components/YamlEditor/YamlEditorComponent.d.ts +2 -1
  117. package/lib/src/components/YamlEditor/YamlEditorComponent.js +90 -0
  118. package/lib/src/components/YamlEditor/index.js +1 -0
  119. package/lib/src/components/YamlEditor/style.js +102 -0
  120. package/lib/src/components/YamlEditor/yaml.worker.js +1 -0
  121. package/lib/src/components/YamlForm/index.d.ts +14 -1
  122. package/lib/src/components/YamlForm/index.js +61 -0
  123. package/lib/src/components/index.d.ts +38 -0
  124. package/lib/src/components/index.js +38 -0
  125. package/lib/src/constants/index.d.ts +2 -0
  126. package/lib/src/constants/index.js +2 -0
  127. package/lib/src/constants/k8s.d.ts +65 -0
  128. package/lib/src/constants/k8s.js +203 -0
  129. package/lib/src/constants/state.d.ts +13 -0
  130. package/lib/src/constants/state.js +15 -0
  131. package/lib/src/contexts/component.d.ts +6 -0
  132. package/lib/src/contexts/component.js +3 -0
  133. package/lib/src/contexts/configs.d.ts +4 -0
  134. package/lib/src/contexts/configs.js +3 -0
  135. package/lib/src/contexts/global-store.d.ts +6 -0
  136. package/lib/src/contexts/global-store.js +3 -0
  137. package/lib/src/contexts/index.d.ts +3 -0
  138. package/lib/src/contexts/index.js +3 -0
  139. package/lib/src/hooks/index.d.ts +5 -0
  140. package/lib/src/hooks/index.js +7 -0
  141. package/lib/src/hooks/useDeleteModal/index.js +1 -0
  142. package/lib/src/hooks/useDeleteModal/useDeleteManyModal.js +31 -0
  143. package/lib/src/hooks/useDeleteModal/useDeleteModal.js +38 -0
  144. package/lib/src/hooks/useDownloadYAML.d.ts +2 -2
  145. package/lib/src/hooks/useDownloadYAML.js +10 -0
  146. package/lib/src/hooks/useEagleForm.d.ts +17 -9
  147. package/lib/src/hooks/useEagleForm.js +177 -0
  148. package/lib/src/hooks/useEagleTable/columns.d.ts +18 -14
  149. package/lib/src/hooks/useEagleTable/columns.js +246 -0
  150. package/lib/src/hooks/useEagleTable/index.d.ts +2 -52
  151. package/lib/src/hooks/useEagleTable/index.js +2 -0
  152. package/lib/src/hooks/useEagleTable/useEagleTable.d.ts +51 -0
  153. package/lib/src/hooks/useEagleTable/useEagleTable.js +63 -0
  154. package/lib/src/hooks/useEdit.js +19 -0
  155. package/lib/src/hooks/useGlobalStore.d.ts +3 -0
  156. package/lib/src/hooks/useGlobalStore.js +5 -0
  157. package/lib/src/hooks/useK8sYamlEditor.d.ts +5 -0
  158. package/lib/src/hooks/useK8sYamlEditor.js +37 -0
  159. package/lib/src/hooks/useOpenForm.d.ts +5 -0
  160. package/lib/src/hooks/useOpenForm.js +43 -0
  161. package/lib/src/hooks/useSchema.d.ts +9 -2
  162. package/lib/src/hooks/useSchema.js +37 -0
  163. package/lib/src/hooks/useSubmitForm.d.ts +14 -0
  164. package/lib/src/hooks/useSubmitForm.js +42 -0
  165. package/lib/src/i18n.d.ts +46 -1
  166. package/lib/src/i18n.js +19 -0
  167. package/lib/src/index.d.ts +7 -2
  168. package/lib/src/index.js +13 -0
  169. package/lib/src/locales/en-US/dovetail.json +18 -0
  170. package/lib/src/locales/en-US/index.d.ts +6 -0
  171. package/lib/src/locales/en-US/index.js +4 -0
  172. package/lib/src/locales/index.js +6 -0
  173. package/lib/src/locales/zh-CN/dovetail.json +91 -0
  174. package/lib/src/locales/zh-CN/index.d.ts +40 -1
  175. package/lib/src/locales/zh-CN/index.js +4 -0
  176. package/lib/src/main.d.ts +2 -0
  177. package/lib/src/main.js +12 -0
  178. package/lib/src/models/cronjob-model.d.ts +16 -0
  179. package/lib/src/models/cronjob-model.js +32 -0
  180. package/lib/src/models/daemonset-model.d.ts +14 -0
  181. package/lib/src/models/daemonset-model.js +17 -0
  182. package/lib/src/models/deployment-model.d.ts +14 -0
  183. package/lib/src/models/deployment-model.js +17 -0
  184. package/lib/src/models/event-model.d.ts +8 -0
  185. package/lib/src/models/event-model.js +11 -0
  186. package/lib/src/models/index.d.ts +14 -0
  187. package/lib/src/models/index.js +14 -0
  188. package/lib/src/models/ingress-model.d.ts +18 -0
  189. package/lib/src/models/ingress-model.js +24 -0
  190. package/lib/src/models/job-model.d.ts +19 -0
  191. package/lib/src/models/job-model.js +56 -0
  192. package/lib/src/models/network-policy-model.d.ts +10 -0
  193. package/lib/src/models/network-policy-model.js +10 -0
  194. package/lib/src/models/pod-metrics-model.d.ts +9 -0
  195. package/lib/src/models/pod-metrics-model.js +34 -0
  196. package/lib/src/models/pod-model.d.ts +21 -0
  197. package/lib/src/models/pod-model.js +78 -0
  198. package/lib/src/models/resource-model.d.ts +21 -0
  199. package/lib/src/models/resource-model.js +34 -0
  200. package/lib/src/models/service-model.d.ts +10 -0
  201. package/lib/src/models/service-model.js +17 -0
  202. package/lib/src/models/statefulset-model.d.ts +14 -0
  203. package/lib/src/models/statefulset-model.js +17 -0
  204. package/lib/src/models/types/index.d.ts +1 -0
  205. package/lib/src/models/types/index.js +1 -0
  206. package/lib/src/models/types/metric.d.ts +25 -0
  207. package/lib/src/models/types/metric.js +1 -0
  208. package/lib/src/models/workload-base-model.d.ts +13 -0
  209. package/lib/src/models/workload-base-model.js +22 -0
  210. package/lib/src/models/workload-model.d.ts +19 -0
  211. package/lib/src/models/workload-model.js +51 -0
  212. package/lib/src/pages/configmaps/index.d.ts +4 -3
  213. package/lib/src/pages/configmaps/index.js +15 -0
  214. package/lib/src/pages/cronjobs/create/index.js +6 -0
  215. package/lib/src/pages/cronjobs/index.js +3 -0
  216. package/lib/src/pages/cronjobs/list/index.js +42 -0
  217. package/lib/src/pages/cronjobs/show/index.js +16 -0
  218. package/lib/src/pages/daemonsets/create/index.js +6 -0
  219. package/lib/src/pages/daemonsets/index.js +3 -0
  220. package/lib/src/pages/daemonsets/list/index.js +32 -0
  221. package/lib/src/pages/daemonsets/show/index.js +16 -0
  222. package/lib/src/pages/deployments/create/index.d.ts +2 -2
  223. package/lib/src/pages/deployments/create/index.js +7 -0
  224. package/lib/src/pages/deployments/index.js +3 -0
  225. package/lib/src/pages/deployments/list/index.js +26 -0
  226. package/lib/src/pages/deployments/show/index.js +16 -0
  227. package/lib/src/pages/ingresses/index.d.ts +4 -0
  228. package/lib/src/pages/ingresses/index.js +26 -0
  229. package/lib/src/pages/jobs/index.d.ts +4 -4
  230. package/lib/src/pages/jobs/index.js +34 -0
  231. package/lib/src/pages/networkPolicies/index.d.ts +4 -0
  232. package/lib/src/pages/networkPolicies/index.js +67 -0
  233. package/lib/src/pages/pods/create/index.js +6 -0
  234. package/lib/src/pages/pods/index.js +3 -0
  235. package/lib/src/pages/pods/list/index.js +81 -0
  236. package/lib/src/pages/pods/show/index.js +54 -0
  237. package/lib/src/pages/secrets/index.d.ts +4 -3
  238. package/lib/src/pages/secrets/index.js +15 -0
  239. package/lib/src/pages/services/index.d.ts +4 -0
  240. package/lib/src/pages/services/index.js +26 -0
  241. package/lib/src/pages/statefulsets/create/index.js +6 -0
  242. package/lib/src/pages/statefulsets/index.js +3 -0
  243. package/lib/src/pages/statefulsets/list/index.js +26 -0
  244. package/lib/src/pages/statefulsets/show/index.js +16 -0
  245. package/lib/src/plugins/index.d.ts +2 -0
  246. package/lib/src/plugins/index.js +3 -0
  247. package/lib/src/plugins/model-plugin.d.ts +12 -0
  248. package/lib/src/plugins/model-plugin.js +46 -0
  249. package/lib/src/plugins/relation-plugin.d.ts +27 -0
  250. package/lib/src/plugins/relation-plugin.js +81 -0
  251. package/lib/src/plugins/type.d.ts +8 -0
  252. package/lib/src/plugins/type.js +1 -0
  253. package/lib/src/providers/index.js +1 -0
  254. package/lib/src/providers/router-provider/index.d.ts +1 -1
  255. package/lib/src/providers/router-provider/index.js +100 -0
  256. package/lib/src/types/index.js +1 -0
  257. package/lib/src/types/resource.d.ts +19 -22
  258. package/lib/src/types/resource.js +12 -0
  259. package/lib/src/utils/addId.js +8 -0
  260. package/lib/src/utils/download.js +9 -0
  261. package/lib/src/utils/error.d.ts +3 -3
  262. package/lib/src/utils/error.js +53 -0
  263. package/lib/src/utils/form.d.ts +3 -0
  264. package/lib/src/utils/form.js +9 -0
  265. package/lib/src/utils/k8s.js +6 -0
  266. package/lib/src/utils/labels.js +15 -0
  267. package/lib/src/utils/match-selector.d.ts +3 -0
  268. package/lib/src/utils/match-selector.js +12 -0
  269. package/lib/src/utils/openapi.js +33 -0
  270. package/lib/src/utils/schema.js +117 -0
  271. package/lib/src/utils/selector.d.ts +3 -0
  272. package/lib/src/utils/selector.js +12 -0
  273. package/lib/src/utils/string.js +6 -0
  274. package/lib/src/utils/time.d.ts +6 -1
  275. package/lib/src/utils/time.js +46 -0
  276. package/lib/src/utils/unit.d.ts +12 -0
  277. package/lib/src/utils/unit.js +69 -0
  278. package/lib/src/utils/yaml.js +44 -0
  279. package/lib/vite.config.d.ts +1 -1
  280. package/lib/vite.config.js +60 -0
  281. package/package.json +24 -9
  282. package/dist/index.bd5d18c4.js +0 -9820
  283. package/lib/src/model/cronjob-model.d.ts +0 -9
  284. package/lib/src/model/index.d.ts +0 -5
  285. package/lib/src/model/job-model.d.ts +0 -10
  286. package/lib/src/model/pod-model.d.ts +0 -10
  287. package/lib/src/model/resource-model.d.ts +0 -17
  288. package/lib/src/model/workload-model.d.ts +0 -17
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { css } from '@linaria/core';
3
+ const Style = css `
4
+ width: 1px;
5
+ height: 16px;
6
+ border-radius: 1px;
7
+ background: rgba(172, 186, 211, 0.6);
8
+ `;
9
+ export const Separator = () => {
10
+ return _jsx("div", { className: Style });
11
+ };
@@ -1,13 +1,12 @@
1
1
  import React from 'react';
2
- import { ResourceModel } from '../../model';
3
- import { Resource } from '../../types';
4
- import { ShowField } from './fields';
5
- type Props<Raw extends Resource, Model extends ResourceModel> = {
6
- fieldGroups: ShowField<Model>[][];
7
- formatter: (r: Raw) => Model;
2
+ import { ResourceModel } from '../../models';
3
+ import { ShowConfig } from './fields';
4
+ type Props<Model extends ResourceModel> = {
5
+ showConfig: ShowConfig<Model>;
6
+ formatter?: (r: Model) => Model;
8
7
  Dropdown?: React.FC<{
9
- data: Model;
8
+ record: Model;
10
9
  }>;
11
10
  };
12
- export declare const ShowContent: <Raw extends Resource, Model extends ResourceModel>(props: Props<Raw, Model>) => JSX.Element | null;
11
+ export declare const ShowContent: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(props: Props<Model>) => JSX.Element | null;
13
12
  export {};
@@ -0,0 +1,157 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Typo, useUIKit } from '@cloudtower/eagle';
3
+ import { css } from '@linaria/core';
4
+ import { useParsed, useResource, useShow } from '@refinedev/core';
5
+ import yaml from 'js-yaml';
6
+ import { get, omit } from 'lodash-es';
7
+ import { useState, useMemo, useCallback } from 'react';
8
+ import K8sDropdown from 'src/components/K8sDropdown';
9
+ import { KeyValueData } from 'src/components/KeyValueData';
10
+ import MonacoYamlEditor from 'src/components/YamlEditor/MonacoYamlEditor';
11
+ import useK8sYamlEditor from 'src/hooks/useK8sYamlEditor';
12
+ import { useGlobalStore } from '../../hooks';
13
+ import { useD2Translation } from '../../i18n';
14
+ import { StateTag } from '../StateTag';
15
+ import { Tags } from '../Tags';
16
+ import Time from '../Time';
17
+ const ShowContentWrapperStyle = css `
18
+ .ant-row {
19
+ margin-right: 0 !important;
20
+ }
21
+ `;
22
+ const TopBarStyle = css `
23
+ justify-content: space-between;
24
+ width: 100%;
25
+ `;
26
+ const ShowContentHeaderStyle = css `
27
+ width: 100%;
28
+ height: 100%;
29
+ `;
30
+ const EditorStyle = css `
31
+ margin-top: 16px;
32
+ `;
33
+ const FieldWrapperStyle = css `
34
+ display: flex;
35
+ flex-wrap: nowrap;
36
+ `;
37
+ const TabsStyle = css `
38
+ &.ant-tabs {
39
+ .ant-tabs-nav {
40
+ margin-bottom: 0;
41
+ }
42
+ }
43
+ `;
44
+ const StateTagStyle = css `
45
+ margin-left: 8px;
46
+ `;
47
+ var Mode;
48
+ (function (Mode) {
49
+ Mode["Detail"] = "detail";
50
+ Mode["Yaml"] = "yaml";
51
+ })(Mode || (Mode = {}));
52
+ export const ShowContent = (props) => {
53
+ const { showConfig, formatter, Dropdown = K8sDropdown } = props;
54
+ const kit = useUIKit();
55
+ const { globalStore } = useGlobalStore();
56
+ const parsed = useParsed();
57
+ const { resource } = useResource();
58
+ const [mode, setMode] = useState(Mode.Detail);
59
+ const { queryResult } = useShow({
60
+ id: parsed?.params?.id,
61
+ liveMode: mode === Mode.Yaml ? 'off' : 'auto',
62
+ });
63
+ const { t } = useD2Translation();
64
+ const { fold } = useK8sYamlEditor();
65
+ const { data } = queryResult;
66
+ const schema = useMemo(() => ({}), []);
67
+ const defaultEditorValue = useMemo(() => (data?.data ? yaml.dump(omit(globalStore?.restoreItem(data.data), 'id')) : ''), [globalStore, data]);
68
+ const onEditorCreate = useCallback(editor => {
69
+ fold(editor);
70
+ }, [fold]);
71
+ if (!data?.data) {
72
+ return null;
73
+ }
74
+ const model = data.data;
75
+ const record = formatter ? formatter(model) : data?.data;
76
+ function renderFields(fields) {
77
+ if (!record)
78
+ return null;
79
+ return fields.map(field => {
80
+ let content;
81
+ const value = get(record, field.path);
82
+ if (field.renderContent) {
83
+ content = field.renderContent(value, record, field);
84
+ }
85
+ else {
86
+ content = _jsx("span", { children: get(record, field.path) });
87
+ }
88
+ return (_jsx(kit.col, { span: field.col, children: field.render ? (field.render(value, record, field)) : (_jsxs("div", { className: FieldWrapperStyle, children: [_jsxs("span", { className: Typo.Label.l3_regular, style: { width: field.labelWidth || '64px' }, children: [field.title, ":", ' '] }), content] })) }, field.path.join()));
89
+ });
90
+ }
91
+ const DESCRIPTION_DEFAULT_FIELDS = [
92
+ {
93
+ key: 'NameSpace',
94
+ title: t('dovetail.namespace'),
95
+ path: ['metadata', 'namespace'],
96
+ },
97
+ {
98
+ key: 'Age',
99
+ title: t('dovetail.created_time'),
100
+ path: ['metadata', 'creationTimestamp'],
101
+ renderContent(value) {
102
+ return _jsx(Time, { date: new Date(value) });
103
+ },
104
+ },
105
+ ];
106
+ const LABELS_ANNOTATIONS_GROUP_FIELDS = [
107
+ {
108
+ key: 'Labels',
109
+ title: t('dovetail.label'),
110
+ path: ['metadata', 'labels'],
111
+ col: 24,
112
+ renderContent: value => {
113
+ if (!value) {
114
+ return undefined;
115
+ }
116
+ return _jsx(Tags, { value: value });
117
+ },
118
+ },
119
+ {
120
+ key: 'Annotations',
121
+ title: t('dovetail.annotation'),
122
+ path: ['metadata', 'annotations'],
123
+ col: 24,
124
+ renderContent: value => {
125
+ if (!value) {
126
+ return undefined;
127
+ }
128
+ return _jsx(KeyValueData, { datas: value, expandable: true });
129
+ },
130
+ },
131
+ ];
132
+ const stateDisplay = get(record, 'stateDisplay');
133
+ const topBar = (_jsxs(kit.space, { className: TopBarStyle, children: [_jsxs("div", { children: [_jsxs("span", { className: Typo.Display.d2_bold_title, children: [resource?.meta?.kind, ": "] }), _jsx("span", { className: Typo.Label.l1_regular, children: record?.metadata?.name }), stateDisplay ? (_jsx(StateTag, { className: StateTagStyle, state: stateDisplay })) : undefined] }), _jsxs(kit.space, { children: [_jsxs(kit.radioGroup, { value: mode, onChange: e => setMode(e.target.value), children: [_jsx(kit.radioButton, { value: "detail", children: t('dovetail.detail') }), _jsx(kit.radioButton, { value: "yaml", children: "YAML" })] }), _jsx(Dropdown, { record: record })] })] }));
134
+ const descriptions = (_jsx(kit.row, { gutter: 24, children: renderFields([...DESCRIPTION_DEFAULT_FIELDS, ...(showConfig.descriptions || [])]) }));
135
+ const groups = (showConfig.groups || [])
136
+ .concat([
137
+ {
138
+ fields: LABELS_ANNOTATIONS_GROUP_FIELDS,
139
+ },
140
+ ])
141
+ .map((group, index) => (_jsx(kit.row, { gutter: [24, 16], children: renderFields(group.fields) }, index)));
142
+ const tabs = (_jsx(kit.tabs, { className: TabsStyle, children: (showConfig.tabs || []).map(field => {
143
+ let content;
144
+ if (field.renderContent) {
145
+ content = field.renderContent(get(record, field.path), record, field);
146
+ }
147
+ else {
148
+ content = _jsx("span", { children: get(record, field.path) });
149
+ }
150
+ return (_jsx(kit.tabsTabPane, { tab: field.title, children: content }, field.key));
151
+ }) }));
152
+ const modeMap = {
153
+ [Mode.Detail]: (_jsxs(_Fragment, { children: [groups, _jsx(kit.divider, {}), tabs] })),
154
+ [Mode.Yaml]: (_jsx(MonacoYamlEditor, { className: EditorStyle, defaultValue: defaultEditorValue, schema: schema, onEditorCreate: onEditorCreate, readOnly: true })),
155
+ };
156
+ return (_jsxs("div", { className: ShowContentWrapperStyle, children: [_jsxs(kit.space, { direction: "vertical", className: ShowContentHeaderStyle, children: [topBar, descriptions] }), _jsx(kit.divider, {}), modeMap[mode]] }));
157
+ };
@@ -1,16 +1,40 @@
1
- import { i18n } from 'i18next';
1
+ import { i18n as I18nType } from 'i18next';
2
2
  import React from 'react';
3
- import { JobModel, ResourceModel, WorkloadModel } from '../../model';
3
+ import { JobModel, ResourceModel, WorkloadModel, WorkloadBaseModel, CronJobModel, IngressModel } from '../../models';
4
4
  export type ShowField<Model extends ResourceModel> = {
5
5
  key: string;
6
6
  title: string;
7
7
  path: string[];
8
- render?: (val: unknown, record: Model) => React.ReactElement | undefined;
8
+ labelWidth?: string;
9
+ col?: number;
10
+ render?: (val: unknown, record: Model, field: ShowField<Model>) => React.ReactElement | undefined;
11
+ renderContent?: (val: unknown, record: Model, field: ShowField<Model>) => React.ReactElement | undefined;
9
12
  };
10
- export declare const ImageField: (i18n: i18n) => ShowField<WorkloadModel>;
11
- export declare const ReplicaField: (i18n: i18n) => ShowField<WorkloadModel>;
12
- export declare const ConditionsField: (i18n: i18n) => ShowField<WorkloadModel>;
13
- export declare const PodsField: (_: i18n) => ShowField<WorkloadModel>;
14
- export declare const JobsField: (_: i18n) => ShowField<WorkloadModel>;
15
- export declare const DataField: (i18n: i18n) => ShowField<ResourceModel>;
16
- export declare const StartTimeField: (i18n: i18n) => ShowField<JobModel>;
13
+ export type ShowTabField<Model extends ResourceModel> = {
14
+ key: string;
15
+ title: string;
16
+ path: string[];
17
+ renderContent?: (val: unknown, record: Model, field: ShowTabField<Model>) => React.ReactElement | undefined;
18
+ };
19
+ export interface ShowConfig<Model extends ResourceModel = ResourceModel> {
20
+ title?: string;
21
+ descriptions?: ShowField<Model>[];
22
+ groups?: {
23
+ fields: ShowField<Model>[];
24
+ }[];
25
+ tabs?: ShowTabField<Model>[];
26
+ }
27
+ export declare const ImageField: <Model extends WorkloadBaseModel>(i18n: I18nType) => ShowField<Model>;
28
+ export declare const ReplicaField: (i18n: I18nType) => ShowField<WorkloadModel>;
29
+ export declare const ConditionsField: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType) => ShowTabField<Model>;
30
+ export declare const PodsField: <Model extends WorkloadBaseModel>() => ShowTabField<Model>;
31
+ export declare const JobsField: <Model extends JobModel | CronJobModel>() => ShowTabField<Model>;
32
+ export declare const DataField: (i18n: I18nType) => ShowField<ResourceModel>;
33
+ export declare const SecretDataField: (i18n: I18nType) => ShowField<ResourceModel>;
34
+ export declare const StartTimeField: (i18n: I18nType) => ShowField<JobModel>;
35
+ export declare const ServiceTypeField: (i18n: I18nType) => ShowField<ResourceModel>;
36
+ export declare const ClusterIpField: (i18n: I18nType) => ShowField<ResourceModel>;
37
+ export declare const SessionAffinityField: (i18n: I18nType) => ShowField<ResourceModel>;
38
+ export declare const ServicePodsField: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>() => ShowTabField<Model>;
39
+ export declare const IngressRulesTableTabField: <Model extends IngressModel>(i18n: I18nType) => ShowTabField<Model>;
40
+ export declare const EventsTableTabField: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType) => ShowTabField<Model>;
@@ -0,0 +1,157 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ConditionsTable } from '../ConditionsTable';
3
+ import { CronjobJobsTable } from '../CronjobJobsTable';
4
+ import { EventsTable } from '../EventsTable';
5
+ import { ImageNames } from '../ImageNames';
6
+ import { IngressRulesTable } from '../IngressRulesTable';
7
+ import { KeyValue } from '../KeyValue';
8
+ import Time from '../Time';
9
+ import { WorkloadPodsTable } from '../WorkloadPodsTable';
10
+ import { WorkloadReplicas } from '../WorkloadReplicas';
11
+ export const ImageField = (i18n) => {
12
+ return {
13
+ key: 'Image',
14
+ title: i18n.t('dovetail.image'),
15
+ path: ['imageNames'],
16
+ col: 12,
17
+ renderContent(value) {
18
+ return _jsx(ImageNames, { value: value });
19
+ },
20
+ };
21
+ };
22
+ export const ReplicaField = (i18n) => {
23
+ return {
24
+ key: 'Replicas',
25
+ title: i18n.t('dovetail.replicas'),
26
+ path: ['status', 'replicas'],
27
+ renderContent: (_, record, field) => {
28
+ return _jsx(WorkloadReplicas, { record: record, label: field.title, editable: true });
29
+ },
30
+ };
31
+ };
32
+ export const ConditionsField = (i18n) => {
33
+ return {
34
+ key: 'Conditions',
35
+ title: i18n.t('dovetail.condition'),
36
+ path: ['status', 'conditions'],
37
+ renderContent: value => {
38
+ return _jsx(ConditionsTable, { conditions: value });
39
+ },
40
+ };
41
+ };
42
+ export const PodsField = () => {
43
+ return {
44
+ key: 'pods',
45
+ title: 'Pods',
46
+ path: [],
47
+ renderContent: (_, record) => {
48
+ return (_jsx(WorkloadPodsTable, { selector: record.metadata.relations?.find(r => {
49
+ return r.kind === 'Pod' && r.type === 'creates';
50
+ })?.selector, hideToolbar: true }));
51
+ },
52
+ };
53
+ };
54
+ export const JobsField = () => {
55
+ return {
56
+ key: 'jobs',
57
+ title: 'Jobs',
58
+ path: [],
59
+ renderContent: (_, record) => {
60
+ return (_jsx(CronjobJobsTable, { owner: {
61
+ apiVersion: record.apiVersion || '',
62
+ kind: record.kind || '',
63
+ name: record.metadata?.name || '',
64
+ namespace: record.metadata?.namespace || '',
65
+ uid: record.metadata?.uid || '',
66
+ } }));
67
+ },
68
+ };
69
+ };
70
+ export const DataField = (i18n) => {
71
+ return {
72
+ key: 'data',
73
+ title: i18n.t('dovetail.data'),
74
+ path: ['data'],
75
+ renderContent: val => {
76
+ return _jsx(KeyValue, { value: val });
77
+ },
78
+ };
79
+ };
80
+ export const SecretDataField = (i18n) => {
81
+ return {
82
+ key: 'data',
83
+ title: i18n.t('dovetail.data'),
84
+ path: ['data'],
85
+ renderContent: val => {
86
+ const decodeVal = {};
87
+ for (const key in val) {
88
+ decodeVal[key] = atob(val[key]);
89
+ }
90
+ return _jsx(KeyValue, { value: decodeVal });
91
+ },
92
+ };
93
+ };
94
+ export const StartTimeField = (i18n) => {
95
+ return {
96
+ key: 'started',
97
+ title: i18n.t('dovetail.started'),
98
+ path: ['status', 'startTime'],
99
+ col: 12,
100
+ renderContent(value) {
101
+ return _jsx(Time, { date: value });
102
+ },
103
+ };
104
+ };
105
+ export const ServiceTypeField = (i18n) => {
106
+ return {
107
+ key: 'type',
108
+ title: i18n.t('dovetail.type'),
109
+ path: ['spec', 'type'],
110
+ };
111
+ };
112
+ export const ClusterIpField = (i18n) => {
113
+ return {
114
+ key: 'clusterIp',
115
+ title: i18n.t('dovetail.clusterIp'),
116
+ path: ['spec', 'clusterIP'],
117
+ };
118
+ };
119
+ export const SessionAffinityField = (i18n) => {
120
+ return {
121
+ key: 'clusterIp',
122
+ title: i18n.t('dovetail.sessionAffinity'),
123
+ path: ['spec', 'sessionAffinity'],
124
+ };
125
+ };
126
+ export const ServicePodsField = () => {
127
+ return {
128
+ key: 'pods',
129
+ title: 'Pods',
130
+ path: [],
131
+ renderContent: (_, record) => {
132
+ return (_jsx(WorkloadPodsTable, { selector: record.metadata.relations?.find(r => {
133
+ return r.kind === 'Pod' && r.type === 'selects';
134
+ })?.selector }));
135
+ },
136
+ };
137
+ };
138
+ export const IngressRulesTableTabField = (i18n) => {
139
+ return {
140
+ key: 'rules',
141
+ title: i18n.t('dovetail.rule'),
142
+ path: ['spec', 'rules'],
143
+ renderContent: (_, record) => {
144
+ return _jsx(IngressRulesTable, { ingress: record });
145
+ },
146
+ };
147
+ };
148
+ export const EventsTableTabField = (i18n) => {
149
+ return {
150
+ key: 'event',
151
+ title: i18n.t('dovetail.event'),
152
+ path: [],
153
+ renderContent: () => {
154
+ return _jsx(EventsTable, {});
155
+ },
156
+ };
157
+ };
@@ -0,0 +1,2 @@
1
+ export * from './fields';
2
+ export * from './ShowContent';
@@ -1,6 +1,8 @@
1
1
  import React from 'react';
2
+ import { WorkloadState } from '../../constants';
2
3
  type Props = {
3
- state?: string;
4
+ state?: WorkloadState;
5
+ className?: string;
4
6
  };
5
7
  export declare const StateTag: React.FC<Props>;
6
8
  export {};
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useUIKit } from '@cloudtower/eagle';
3
+ import { WorkloadState } from '../../constants';
4
+ import { useD2Translation } from '../../i18n';
5
+ export const StateTag = ({ state = WorkloadState.UPDATEING, className }) => {
6
+ const kit = useUIKit();
7
+ const { t } = useD2Translation();
8
+ const colorMap = {
9
+ updating: 'blue',
10
+ ready: 'green',
11
+ completed: 'green',
12
+ failed: 'red',
13
+ suspended: 'gray',
14
+ running: 'blue',
15
+ succeeded: 'green',
16
+ unknown: 'gray',
17
+ terminating: 'gray',
18
+ pending: 'gray',
19
+ waiting: 'gray',
20
+ };
21
+ return _jsx(kit.tag, { className: className, color: colorMap[state], children: t(`dovetail.${state || 'updaing'}`) });
22
+ };
@@ -0,0 +1 @@
1
+ export * from './StateTag';
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { kitContext } from '@cloudtower/eagle';
3
+ import { Typo } from '@cloudtower/eagle';
4
+ import { cx, css } from '@linaria/core';
5
+ import { useContext } from 'react';
6
+ import { useD2Translation } from '../../i18n';
7
+ export const ErrorWrapper = css `
8
+ display: flex;
9
+ flex-direction: column;
10
+ justify-content: center;
11
+ align-items: center;
12
+ height: 100%;
13
+ `;
14
+ export const ErrorContent = css `
15
+ display: flex;
16
+ flex-direction: column;
17
+ align-items: center;
18
+
19
+ .title {
20
+ margin-bottom: 8px;
21
+ background-clip: text;
22
+ -webkit-background-clip: text;
23
+ -webkit-text-fill-color: transparent;
24
+ background-image: linear-gradient(211.41deg, #929dad 0%, #d3dbe3 100%);
25
+ }
26
+ `;
27
+ const WidgetErrorContent = props => {
28
+ const { refetch } = props;
29
+ const kit = useContext(kitContext);
30
+ const { t } = useD2Translation();
31
+ return (_jsx("div", { className: ErrorWrapper, style: props.style, children: _jsxs("div", { className: ErrorContent, children: [_jsx("p", { className: cx(Typo.Label.l1_regular_title, 'title'), children: props.errorText || t('dovetail.obtain_data_error') }), refetch ? (_jsx(kit.button, { type: "ordinary", onClick: e => {
32
+ e.stopPropagation();
33
+ refetch?.();
34
+ }, children: t('dovetail.retry') })) : null] }) }));
35
+ };
36
+ export default WidgetErrorContent;
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useUIKit, Typo } from '@cloudtower/eagle';
3
+ import { css, cx } from '@linaria/core';
4
+ import { CreateButton } from '../CreateButton';
5
+ import { DeleteManyButton } from '../DeleteManyButton';
6
+ const ToolbarStyle = css `
7
+ justify-content: space-between;
8
+ width: 100%;
9
+ margin-bottom: 16px;
10
+ `;
11
+ export const TableToolBar = ({ title, selectedKeys, hideCreate }) => {
12
+ const kit = useUIKit();
13
+ return (_jsxs(kit.space, { className: cx(ToolbarStyle, 'table-toolbar'), children: [_jsx("span", { className: Typo.Display.d2_bold_title, children: title }), _jsxs(kit.space, { children: [selectedKeys.length > 0 ? _jsx(DeleteManyButton, { ids: selectedKeys }) : undefined, !hideCreate ? _jsx(CreateButton, {}) : null] })] }));
14
+ };
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ArrowChevronUp16BoldSecondaryIcon } from '@cloudtower/icons-react';
3
+ import { cx } from '@linaria/core';
4
+ import { styled } from '@linaria/react';
5
+ export const ColumnTitle = props => {
6
+ const { title, sortOrder } = props;
7
+ return (_jsxs(_Fragment, { children: [title, _jsx(ArrowChevronUp16BoldSecondaryIcon, { className: cx('order-icon', sortOrder) })] }));
8
+ };
9
+ export const AuxiliaryLine = styled.div `
10
+ position: absolute;
11
+ top: 0;
12
+ left: 0;
13
+ bottom: 0;
14
+ width: 1px;
15
+ background: $blue-60;
16
+ transform: translateX(-9999px);
17
+ z-index: 999;
18
+
19
+ &::before {
20
+ content: '';
21
+ position: absolute;
22
+ height: 34px;
23
+ width: 3px;
24
+ top: 0;
25
+ left: -1px;
26
+ background: $blue-60;
27
+ }
28
+ `;
@@ -1,7 +1,7 @@
1
- import { TableProps as BaseTableProps } from '@cloudtower/eagle';
2
- import { RequiredColumnProps } from '@cloudtower/eagle/dist/spec/base';
1
+ import { TableProps as BaseTableProps, RequiredColumnProps } from '@cloudtower/eagle';
3
2
  import React from 'react';
4
- import { ResourceModel } from '../../model';
3
+ import { FormType } from 'src/types';
4
+ import { ResourceModel } from '../../models';
5
5
  export type IDObject = {
6
6
  id: string;
7
7
  };
@@ -9,10 +9,11 @@ export type Column<Data extends ResourceModel> = RequiredColumnProps<Data> & {
9
9
  display: boolean;
10
10
  };
11
11
  export type TableProps<Data extends ResourceModel> = {
12
+ tableKey: string;
12
13
  className?: string;
13
14
  loading: boolean;
14
15
  error: boolean;
15
- dataSource: Data[];
16
+ data: Data[];
16
17
  refetch: () => void;
17
18
  rowKey: (string & keyof Data) | ((record: Data) => string);
18
19
  columns: Array<Column<Data>>;
@@ -23,6 +24,10 @@ export type TableProps<Data extends ResourceModel> = {
23
24
  onSelect?: (keys: React.Key[], rows: Data[]) => void;
24
25
  onPageChange: (page: number) => void;
25
26
  onSizeChange?: (size: number) => void;
27
+ RowMenu?: React.FC<{
28
+ record: Data;
29
+ formType?: FormType;
30
+ }>;
26
31
  };
27
32
  declare function Table<Data extends ResourceModel>(props: TableProps<Data>): JSX.Element;
28
33
  export default Table;
@@ -0,0 +1,69 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useUIKit } from '@cloudtower/eagle';
3
+ import { css, cx } from '@linaria/core';
4
+ import { useMemo, useRef } from 'react';
5
+ import { useD2Translation } from '../../i18n';
6
+ import ErrorContent from './ErrorContent';
7
+ import { AuxiliaryLine } from './TableWidgets';
8
+ const TableContainerStyle = css `
9
+ width: 100%;
10
+ border-top: 1px solid rgba(211, 218, 235, 0.6);
11
+ display: flex;
12
+ flex-direction: column;
13
+
14
+ // use eagle's own pagination component, hide antd's
15
+ .ant-table-pagination {
16
+ display: none;
17
+ }
18
+
19
+ .table-container {
20
+ min-height: 0;
21
+ }
22
+ `;
23
+ function Table(props) {
24
+ const kit = useUIKit();
25
+ const { t } = useD2Translation();
26
+ const { loading, error, data: dataSource, rowKey, columns, scroll, currentPage, currentSize, RowMenu, refetch, onSelect, onPageChange, onSizeChange, } = props;
27
+ const auxiliaryLineRef = useRef(null);
28
+ const wrapperRef = useRef(null);
29
+ const pagination = useMemo(() => ({
30
+ current: currentPage,
31
+ pageSize: currentSize,
32
+ onChange: onPageChange,
33
+ }), [currentPage, currentSize, onPageChange]);
34
+ const finalColumns = useMemo(() => {
35
+ if (RowMenu) {
36
+ const actionColumn = {
37
+ key: '_action_',
38
+ display: true,
39
+ dataIndex: [],
40
+ title: '',
41
+ render: (_, record) => {
42
+ return _jsx(RowMenu, { record: record });
43
+ },
44
+ };
45
+ return [
46
+ ...columns,
47
+ actionColumn
48
+ ];
49
+ }
50
+ return columns;
51
+ }, [columns, RowMenu]);
52
+ if (loading) {
53
+ return _jsx(kit.loading, {});
54
+ }
55
+ else if (error) {
56
+ return (_jsx(ErrorContent, { errorText: t('dovetail.retry_when_access_data_failed'), refetch: refetch, style: { padding: '15px 0' } }));
57
+ }
58
+ else if (dataSource.length === 0) {
59
+ return _jsx(ErrorContent, { errorText: t('dovetail.empty'), style: { padding: '15px 0' } });
60
+ }
61
+ return (_jsxs("div", { ref: wrapperRef, className: cx(TableContainerStyle, props.className, 'table-wrapper'), children: [_jsx(kit.table, { tableLayout: "fixed", rowSelection: onSelect
62
+ ? {
63
+ onChange: (keys, rows) => {
64
+ onSelect?.(keys, rows);
65
+ },
66
+ }
67
+ : undefined, columns: finalColumns, dataSource: dataSource, pagination: pagination, error: error, loading: loading, rowKey: rowKey, wrapper: wrapperRef, scroll: scroll }), _jsx(AuxiliaryLine, { ref: auxiliaryLineRef }), _jsx(kit.pagination, { current: currentPage, size: currentSize, count: dataSource.length, onChange: onPageChange, onSizeChange: onSizeChange })] }));
68
+ }
69
+ export default Table;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  type Props = {
3
- value: Record<string, string>;
3
+ value?: Record<string, string>;
4
4
  };
5
5
  export declare const Tags: React.FC<Props>;
6
6
  export {};
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useUIKit } from '@cloudtower/eagle';
3
+ import { css } from '@linaria/core';
4
+ const TagWrapper = css `
5
+ flex-wrap: wrap;
6
+ max-width: 100%;
7
+ `;
8
+ const TagStyle = css `
9
+ overflow: hidden;
10
+ text-overflow: ellipsis;
11
+ `;
12
+ export const Tags = props => {
13
+ const { value } = props;
14
+ const kit = useUIKit();
15
+ if (!value) {
16
+ return _jsx("span", { children: "-" });
17
+ }
18
+ const tags = Object.keys(value).map(key => {
19
+ return (_jsx(kit.tag.SplitTag, { className: TagStyle, primaryContent: key, secondaryContent: value[key], title: `${key}:${value[key]}`, color: "gray" }, key));
20
+ });
21
+ return (_jsx(kit.space, { className: TagWrapper, size: 8, children: tags }));
22
+ };