ydb-embedded-ui 20.5.0 → 21.1.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 (173) hide show
  1. package/README.md +41 -0
  2. package/dist/components/AutoRefreshControl/i18n/index.d.ts +1 -1
  3. package/dist/components/CriticalActionDialog/CriticalActionDialog.js +10 -6
  4. package/dist/components/CriticalActionDialog/CriticalActionDialog.js.map +1 -1
  5. package/dist/components/CriticalActionDialog/i18n/en.json +1 -2
  6. package/dist/components/CriticalActionDialog/i18n/index.d.ts +1 -1
  7. package/dist/components/DropdownMenu/DropdownMenu.d.ts +2 -1
  8. package/dist/components/DropdownMenu/DropdownMenu.js +1 -1
  9. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -1
  10. package/dist/components/FullNodeViewer/i18n/index.d.ts +1 -1
  11. package/dist/components/Graph/BlockComponents/ConnectionBlockComponent.d.ts +7 -0
  12. package/dist/components/Graph/BlockComponents/ConnectionBlockComponent.js +30 -0
  13. package/dist/components/Graph/BlockComponents/ConnectionBlockComponent.js.map +1 -0
  14. package/dist/components/Graph/BlockComponents/QueryBlockComponent.d.ts +5 -0
  15. package/dist/components/Graph/BlockComponents/QueryBlockComponent.js +5 -0
  16. package/dist/components/Graph/BlockComponents/QueryBlockComponent.js.map +1 -0
  17. package/dist/components/Graph/BlockComponents/ResultBlockComponent.d.ts +7 -0
  18. package/dist/components/Graph/BlockComponents/ResultBlockComponent.js +5 -0
  19. package/dist/components/Graph/BlockComponents/ResultBlockComponent.js.map +1 -0
  20. package/dist/components/Graph/BlockComponents/StageBlockComponent.d.ts +7 -0
  21. package/dist/components/Graph/BlockComponents/StageBlockComponent.js +17 -0
  22. package/dist/components/Graph/BlockComponents/StageBlockComponent.js.map +1 -0
  23. package/dist/components/Graph/FullViewportBackground.d.ts +2 -0
  24. package/dist/components/Graph/FullViewportBackground.js +67 -0
  25. package/dist/components/Graph/FullViewportBackground.js.map +1 -0
  26. package/dist/components/Graph/GraphControls.d.ts +6 -0
  27. package/dist/components/Graph/GraphControls.js +24 -0
  28. package/dist/components/Graph/GraphControls.js.map +1 -0
  29. package/dist/components/Graph/GravityGraph.d.ts +9 -0
  30. package/dist/components/Graph/GravityGraph.js +122 -0
  31. package/dist/components/Graph/GravityGraph.js.map +1 -0
  32. package/dist/components/Graph/GravityGraph.scss +131 -0
  33. package/dist/components/Graph/NonSelectableConnection.d.ts +9 -0
  34. package/dist/components/Graph/NonSelectableConnection.js +16 -0
  35. package/dist/components/Graph/NonSelectableConnection.js.map +1 -0
  36. package/dist/components/Graph/TooltipComponent.d.ts +8 -0
  37. package/dist/components/Graph/TooltipComponent.js +63 -0
  38. package/dist/components/Graph/TooltipComponent.js.map +1 -0
  39. package/dist/components/Graph/colorsConfig.d.ts +19 -0
  40. package/dist/components/Graph/colorsConfig.js +20 -0
  41. package/dist/components/Graph/colorsConfig.js.map +1 -0
  42. package/dist/components/Graph/i18n/en.json +5 -0
  43. package/dist/components/Graph/i18n/index.d.ts +2 -0
  44. package/dist/components/Graph/i18n/index.js +5 -0
  45. package/dist/components/Graph/i18n/index.js.map +1 -0
  46. package/dist/components/Graph/runTreeLayout.d.ts +12 -0
  47. package/dist/components/Graph/runTreeLayout.js +75 -0
  48. package/dist/components/Graph/runTreeLayout.js.map +1 -0
  49. package/dist/components/Graph/treeLayout.d.ts +2 -0
  50. package/dist/components/Graph/treeLayout.js +284 -0
  51. package/dist/components/Graph/treeLayout.js.map +1 -0
  52. package/dist/components/Graph/types.d.ts +52 -0
  53. package/dist/components/Graph/types.js +2 -0
  54. package/dist/components/Graph/types.js.map +1 -0
  55. package/dist/components/Graph/utils.d.ts +6 -0
  56. package/dist/components/Graph/utils.js +88 -0
  57. package/dist/components/Graph/utils.js.map +1 -0
  58. package/dist/components/PDiskInfo/i18n/index.d.ts +1 -1
  59. package/dist/components/VDiskInfo/i18n/index.d.ts +1 -1
  60. package/dist/containers/Clusters/constants.d.ts +1 -1
  61. package/dist/containers/Header/HeaderActionsMenu.js +19 -3
  62. package/dist/containers/Header/HeaderActionsMenu.js.map +1 -1
  63. package/dist/containers/Header/hooks/useSharedDatabasePath.d.ts +4 -1
  64. package/dist/containers/Header/hooks/useSharedDatabasePath.js +14 -10
  65. package/dist/containers/Header/hooks/useSharedDatabasePath.js.map +1 -1
  66. package/dist/containers/Header/i18n/en.json +1 -0
  67. package/dist/containers/Header/i18n/index.d.ts +1 -1
  68. package/dist/containers/Nodes/i18n/index.d.ts +1 -1
  69. package/dist/containers/Operations/columns.js +2 -2
  70. package/dist/containers/Operations/columns.js.map +1 -1
  71. package/dist/containers/Operations/constants.d.ts +1 -1
  72. package/dist/containers/Operations/i18n/en.json +2 -2
  73. package/dist/containers/PDiskPage/DecommissionButton/DecommissionButton.js +1 -1
  74. package/dist/containers/PDiskPage/DecommissionButton/DecommissionButton.js.map +1 -1
  75. package/dist/containers/PDiskPage/PDiskPage.js +1 -1
  76. package/dist/containers/PDiskPage/PDiskPage.js.map +1 -1
  77. package/dist/containers/PDiskPage/i18n/en.json +3 -3
  78. package/dist/containers/Storage/PDisks/PDisks.js +1 -1
  79. package/dist/containers/Storage/PDisks/PDisks.js.map +1 -1
  80. package/dist/containers/Tablet/components/TabletControls/TabletControls.js +1 -1
  81. package/dist/containers/Tablet/components/TabletControls/TabletControls.js.map +1 -1
  82. package/dist/containers/Tablet/i18n/en.json +3 -3
  83. package/dist/containers/Tablets/TabletsTable.js +1 -1
  84. package/dist/containers/Tablets/TabletsTable.js.map +1 -1
  85. package/dist/containers/Tablets/i18n/en.json +1 -1
  86. package/dist/containers/Tenant/Diagnostics/Overview/TransferInfo/Credentials.d.ts +1 -1
  87. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.js +3 -1
  88. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.js.map +1 -1
  89. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js +2 -2
  90. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js.map +1 -1
  91. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/useTenantStorageNewData.d.ts +2 -2
  92. package/dist/containers/Tenant/Healthcheck/components/HealthcheckDrawer.js +10 -2
  93. package/dist/containers/Tenant/Healthcheck/components/HealthcheckDrawer.js.map +1 -1
  94. package/dist/containers/Tenant/Query/QueryResult/components/Graph/Graph.js +9 -4
  95. package/dist/containers/Tenant/Query/QueryResult/components/Graph/Graph.js.map +1 -1
  96. package/dist/containers/Tenant/Query/QueryResult/components/Graph/Graph.scss +2 -0
  97. package/dist/containers/Tenant/TenantNavigation/useTenantNavigation.d.ts +1 -1
  98. package/dist/graphLayout.worker.d.ts +1 -0
  99. package/dist/graphLayout.worker.js +17 -0
  100. package/dist/graphLayout.worker.js.map +1 -0
  101. package/dist/lib.d.ts +1 -1
  102. package/dist/lib.js.map +1 -1
  103. package/dist/store/reducers/query/parsers/preparePlanData.js.map +1 -1
  104. package/dist/store/reducers/query/types.d.ts +38 -1
  105. package/dist/store/reducers/settings/utils.d.ts +2 -2
  106. package/dist/store/reducers/storage/utils.js +3 -3
  107. package/dist/store/reducers/storage/utils.js.map +1 -1
  108. package/dist/uiFactory/types.d.ts +9 -0
  109. package/dist/uiFactory/uiFactory.js +5 -2
  110. package/dist/uiFactory/uiFactory.js.map +1 -1
  111. package/dist/utils/disks/helpers.d.ts +2 -2
  112. package/dist/utils/hooks/useChangedQuerySettings.d.ts +2 -2
  113. package/dist/utils/hooks/useLastQueryExecutionSettings.d.ts +2 -2
  114. package/dist/utils/hooks/useQueryExecutionSettings.d.ts +2 -2
  115. package/dist/utils/prepareQueryExplain.d.ts +1 -2
  116. package/dist/utils/prepareQueryExplain.js +10 -2
  117. package/dist/utils/prepareQueryExplain.js.map +1 -1
  118. package/dist/utils/query.d.ts +1 -1
  119. package/package.json +3 -3
  120. package/src/components/CriticalActionDialog/CriticalActionDialog.tsx +12 -25
  121. package/src/components/CriticalActionDialog/i18n/en.json +1 -2
  122. package/src/components/DropdownMenu/DropdownMenu.tsx +3 -2
  123. package/src/components/Graph/BlockComponents/ConnectionBlockComponent.tsx +49 -0
  124. package/src/components/Graph/BlockComponents/QueryBlockComponent.tsx +7 -0
  125. package/src/components/Graph/BlockComponents/ResultBlockComponent.tsx +10 -0
  126. package/src/components/Graph/BlockComponents/StageBlockComponent.tsx +35 -0
  127. package/src/components/Graph/FullViewportBackground.ts +122 -0
  128. package/src/components/Graph/GraphControls.tsx +49 -0
  129. package/src/components/Graph/GravityGraph.scss +131 -0
  130. package/src/components/Graph/GravityGraph.tsx +174 -0
  131. package/src/components/Graph/NonSelectableConnection.tsx +14 -0
  132. package/src/components/Graph/TooltipComponent.tsx +114 -0
  133. package/src/components/Graph/colorsConfig.ts +21 -0
  134. package/src/components/Graph/i18n/en.json +5 -0
  135. package/src/components/Graph/i18n/index.ts +7 -0
  136. package/src/components/Graph/runTreeLayout.ts +105 -0
  137. package/src/components/Graph/treeLayout.ts +378 -0
  138. package/src/components/Graph/types.ts +56 -0
  139. package/src/components/Graph/utils.ts +112 -0
  140. package/src/containers/Header/HeaderActionsMenu.tsx +22 -2
  141. package/src/containers/Header/hooks/useSharedDatabasePath.ts +33 -26
  142. package/src/containers/Header/i18n/en.json +1 -0
  143. package/src/containers/Operations/columns.tsx +4 -0
  144. package/src/containers/Operations/i18n/en.json +2 -2
  145. package/src/containers/PDiskPage/DecommissionButton/DecommissionButton.tsx +2 -0
  146. package/src/containers/PDiskPage/PDiskPage.tsx +3 -1
  147. package/src/containers/PDiskPage/i18n/en.json +3 -3
  148. package/src/containers/Storage/PDisks/PDisks.tsx +1 -1
  149. package/src/containers/Tablet/components/TabletControls/TabletControls.tsx +7 -1
  150. package/src/containers/Tablet/i18n/en.json +3 -3
  151. package/src/containers/Tablets/TabletsTable.tsx +3 -1
  152. package/src/containers/Tablets/i18n/en.json +1 -1
  153. package/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.tsx +3 -1
  154. package/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx +2 -2
  155. package/src/containers/Tenant/Healthcheck/components/HealthcheckDrawer.tsx +16 -1
  156. package/src/containers/Tenant/Query/QueryResult/components/Graph/Graph.scss +2 -0
  157. package/src/containers/Tenant/Query/QueryResult/components/Graph/Graph.tsx +13 -7
  158. package/src/graphLayout.worker.ts +21 -0
  159. package/src/lib.ts +1 -0
  160. package/src/store/reducers/query/parsers/preparePlanData.ts +1 -3
  161. package/src/store/reducers/query/types.ts +42 -2
  162. package/src/store/reducers/storage/utils.ts +3 -3
  163. package/src/uiFactory/types.ts +10 -0
  164. package/src/uiFactory/uiFactory.ts +12 -2
  165. package/src/utils/prepareQueryExplain.ts +13 -5
  166. package/dist/components/Graph/Graph.d.ts +0 -12
  167. package/dist/components/Graph/Graph.js +0 -44
  168. package/dist/components/Graph/Graph.js.map +0 -1
  169. package/dist/components/Graph/colors.d.ts +0 -10
  170. package/dist/components/Graph/colors.js +0 -53
  171. package/dist/components/Graph/colors.js.map +0 -1
  172. package/src/components/Graph/Graph.tsx +0 -70
  173. package/src/components/Graph/colors.ts +0 -75
package/README.md CHANGED
@@ -147,6 +147,47 @@ E2E tests are run in CI in the `e2e_tests` job. Each shard starts `ghcr.io/ydb-p
147
147
 
148
148
  ## Making a production bundle.
149
149
 
150
+ ### Web Workers for package consumers
151
+
152
+ The computation graph calculates its layout in a Web Worker. By default, the package uses the native bundler pattern:
153
+
154
+ ```ts
155
+ new Worker(new URL('./graphLayout.worker', import.meta.url));
156
+ ```
157
+
158
+ Bundlers that support this pattern, including Rsbuild and Rspack, emit the worker as a separate asset automatically. The emitted worker script must be deployed with the application, served from the application origin, and allowed by the application's Content Security Policy:
159
+
160
+ ```http
161
+ Content-Security-Policy: worker-src 'self'
162
+ ```
163
+
164
+ If application chunks are loaded from a CDN, configure the bundler to keep native worker scripts on the application origin. For example, with Rspack:
165
+
166
+ ```ts
167
+ export default {
168
+ output: {
169
+ workerPublicPath: '/build/',
170
+ },
171
+ };
172
+ ```
173
+
174
+ Consumers that need to resolve the worker URL at runtime can provide a worker factory before rendering `SingleClusterApp` or `MultiClusterApp`. The factory must return a new worker instance on every call:
175
+
176
+ ```ts
177
+ import {configureUIFactory} from 'ydb-embedded-ui';
178
+
179
+ configureUIFactory({
180
+ createGraphLayoutWorker: () =>
181
+ new Worker(window.runtimeConfig.ydbGraphLayoutWorkerUrl, {
182
+ name: 'ydb-graph-layout',
183
+ }),
184
+ });
185
+ ```
186
+
187
+ Use `ydb-embedded-ui/dist/graphLayout.worker.js` as the worker entry in the consumer build. Process this entry with the consumer's bundler rather than copying it as an unbundled static file. Publish the resulting worker bundle at the URL returned by the runtime configuration.
188
+
189
+ If the browser cannot create or load the worker, the graph retries the layout on the main thread. This fallback preserves functionality, but consumers should configure worker delivery to keep expensive layout work off the UI thread.
190
+
150
191
  Base command `npm run build` builds the app for production to the `build` folder.\
151
192
  It correctly bundles React in production mode and optimizes the build for the best performance.
152
193
 
@@ -1,2 +1,2 @@
1
- declare const _default: (key: "Refresh" | "None" | "15 sec" | "1 min" | "2 min" | "5 min", params?: import("@gravity-ui/i18n").Params) => string;
1
+ declare const _default: (key: "None" | "Refresh" | "15 sec" | "1 min" | "2 min" | "5 min", params?: import("@gravity-ui/i18n").Params) => string;
2
2
  export default _default;
@@ -3,6 +3,7 @@ import React from 'react';
3
3
  import { Alert, Checkbox, Dialog, Flex, Text } from '@gravity-ui/uikit';
4
4
  import { ResultIssues } from '../../containers/Tenant/Query/Issues/Issues';
5
5
  import { cn } from '../../utils/cn';
6
+ import { BRAND_BUTTON_CLASS } from '../../utils/constants';
6
7
  import { isResponseError, isResponseErrorWithIssues } from '../../utils/response';
7
8
  import { criticalActionDialogKeyset } from './i18n';
8
9
  import './CriticalActionDialog.scss';
@@ -54,17 +55,20 @@ export function CriticalActionDialog({ visible, header, description, warningText
54
55
  return null;
55
56
  };
56
57
  const renderDialogContent = () => {
58
+ const isRetry = Boolean(error && withRetry);
59
+ let currentApplyButtonText = applyButtonText;
57
60
  if (error) {
58
- return (_jsxs(React.Fragment, { children: [_jsx(Dialog.Header, { caption: header }), _jsx(Dialog.Body, { children: _jsx(Alert, { theme: "danger", message: parseError(error), view: "outlined" }) }), _jsx(Dialog.Footer, { loading: false, preset: "default", textButtonApply: withRetry
59
- ? retryButtonText || criticalActionDialogKeyset('button-retry')
60
- : undefined, textButtonCancel: criticalActionDialogKeyset('button-close'), propsButtonApply: { view: 'normal' }, onClickButtonApply: () => onApply(true), onClickButtonCancel: onClose })] }));
61
+ currentApplyButtonText = isRetry
62
+ ? retryButtonText || criticalActionDialogKeyset('button-retry')
63
+ : undefined;
61
64
  }
62
- return (_jsxs(React.Fragment, { children: [_jsx(Dialog.Header, { caption: header }), _jsx(Dialog.Body, { children: _jsxs(Flex, { direction: "column", gap: 4, children: [description && _jsx(Text, { as: "div", children: description }), warningText && _jsx(Alert, { theme: "warning", message: warningText }), renderCheckBox()] }) }), _jsx(Dialog.Footer, { loading: isLoading, preset: "default", textButtonApply: applyButtonText, textButtonCancel: criticalActionDialogKeyset('button-cancel'), propsButtonApply: {
65
+ return (_jsxs(React.Fragment, { children: [_jsx(Dialog.Header, { caption: header }), _jsx(Dialog.Body, { children: _jsxs(Flex, { direction: "column", gap: 4, children: [description && _jsx(Text, { as: "div", children: description }), warningText && _jsx(Alert, { theme: "warning", message: warningText }), error && _jsx(Alert, { theme: "danger", message: parseError(error) }), renderCheckBox()] }) }), _jsx(Dialog.Footer, { loading: isLoading, preset: "default", textButtonApply: currentApplyButtonText, textButtonCancel: criticalActionDialogKeyset('button-cancel'), propsButtonApply: {
63
66
  type: 'submit',
64
67
  disabled: withCheckBox && !checkBoxChecked,
65
68
  view: applyButtonView,
66
- }, onClickButtonCancel: onClose, onClickButtonApply: () => onApply() })] }));
69
+ className: applyButtonView === 'action' ? BRAND_BUTTON_CLASS : undefined,
70
+ }, onClickButtonCancel: onClose, onClickButtonApply: () => onApply(isRetry ? true : undefined) })] }));
67
71
  };
68
- return (_jsx(Dialog, { open: visible, hasCloseButton: false, className: b(), size: "s", onClose: onClose, onTransitionOutComplete: handleTransitionExited, children: renderDialogContent() }));
72
+ return (_jsx(Dialog, { open: visible, hasCloseButton: true, className: b(), size: "s", onClose: onClose, onTransitionOutComplete: handleTransitionExited, children: renderDialogContent() }));
69
73
  }
70
74
  //# sourceMappingURL=CriticalActionDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CriticalActionDialog.js","sourceRoot":"","sources":["../../../src/components/CriticalActionDialog/CriticalActionDialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CriticalActionDialog.js","sourceRoot":"","sources":["../../../src/components/CriticalActionDialog/CriticalActionDialog.tsx"],"names":[],"mappings":"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"}
@@ -4,6 +4,5 @@
4
4
  "button-confirm": "Confirm",
5
5
  "button-retry": "Retry",
6
6
  "button-cancel": "Cancel",
7
- "button-close": "Close",
8
- "checkbox-text": "I understand what I'm doing"
7
+ "checkbox-text": "I understand the impact of this action"
9
8
  }
@@ -1 +1 @@
1
- export declare const criticalActionDialogKeyset: (key: "default-error" | "no-rights-error" | "button-confirm" | "button-retry" | "button-cancel" | "button-close" | "checkbox-text", params?: import("@gravity-ui/i18n").Params) => string;
1
+ export declare const criticalActionDialogKeyset: (key: "default-error" | "no-rights-error" | "button-confirm" | "button-retry" | "button-cancel" | "checkbox-text", params?: import("@gravity-ui/i18n").Params) => string;
@@ -1,7 +1,8 @@
1
1
  import React from 'react';
2
2
  import type { DropdownMenuItem, DropdownMenuProps as GravityDropdownMenuProps, IconProps } from '@gravity-ui/uikit';
3
3
  import './DropdownMenu.scss';
4
- export interface DropdownMenuItemWithDescription<T = HTMLElement> extends Omit<DropdownMenuItem<T>, 'text' | 'iconStart'> {
4
+ export interface DropdownMenuItemWithDescription<T = HTMLElement> extends Omit<DropdownMenuItem<T>, 'text' | 'iconStart' | 'title'> {
5
+ title: React.ReactNode;
5
6
  description?: React.ReactNode;
6
7
  iconStart?: IconProps['data'];
7
8
  }
@@ -5,7 +5,7 @@ import { cn } from '../../utils/cn';
5
5
  import './DropdownMenu.scss';
6
6
  const b = cn('ydb-dropdown-menu');
7
7
  function renderMenuItemText({ title, description, }) {
8
- return (_jsxs(Flex, { direction: "column", className: b('item-content'), children: [_jsx(Text, { className: b('item-title'), children: title }), description ? (_jsx(Text, { color: "secondary", className: b('item-description'), children: description })) : null] }));
8
+ return (_jsxs(Flex, { direction: "column", className: b('item-content'), children: [typeof title === 'string' ? _jsx(Text, { className: b('item-title'), children: title }) : title, description ? (_jsx(Text, { color: "secondary", className: b('item-description'), children: description })) : null] }));
9
9
  }
10
10
  function mapMenuItem(item) {
11
11
  const { title, description, iconStart, className, ...restItem } = item;
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenu.js","sourceRoot":"","sources":["../../../src/components/DropdownMenu/DropdownMenu.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,EAAC,IAAI,EAAE,YAAY,IAAI,mBAAmB,EAAE,IAAI,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAExF,OAAO,EAAC,EAAE,EAAC,MAAM,gBAAgB,CAAC;AAElC,OAAO,qBAAqB,CAAC;AAE7B,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC;AAalC,SAAS,kBAAkB,CAAC,EACxB,KAAK,EACL,WAAW,GACkD;IAC7D,OAAO,CACH,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,CAAC,cAAc,CAAC,aACjD,KAAC,IAAI,IAAC,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,YAAG,KAAK,GAAQ,EAC/C,WAAW,CAAC,CAAC,CAAC,CACX,KAAC,IAAI,IAAC,KAAK,EAAC,WAAW,EAAC,SAAS,EAAE,CAAC,CAAC,kBAAkB,CAAC,YACnD,WAAW,GACT,CACV,CAAC,CAAC,CAAC,IAAI,IACL,CACV,CAAC;AACN,CAAC;AAED,SAAS,WAAW,CAChB,IAAwC;IAExC,MAAM,EAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAC,GAAG,IAAI,CAAC;IAErE,OAAO;QACH,GAAG,QAAQ;QACX,IAAI,EAAE,kBAAkB,CAAC,EAAC,KAAK,EAAE,WAAW,EAAC,CAAC;QAC9C,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CACnB,KAAC,IAAI,IACD,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,kBAAkB,EAAE,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC,GAClE,CACL,CAAC,CAAC,CAAC,SAAS;QACb,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,EAAC,kBAAkB,EAAE,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC,CAAC;aAC7E,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC;KACM,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,YAAY,CAAkB,EAAC,KAAK,EAAE,GAAG,KAAK,EAAuB;IACjF,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAuC,GAAG,EAAE;QACzE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACvB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC;YAED,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,KAAC,mBAAmB,OAAK,KAAK,EAAE,KAAK,EAAE,WAAW,GAAI,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"DropdownMenu.js","sourceRoot":"","sources":["../../../src/components/DropdownMenu/DropdownMenu.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,EAAC,IAAI,EAAE,YAAY,IAAI,mBAAmB,EAAE,IAAI,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAExF,OAAO,EAAC,EAAE,EAAC,MAAM,gBAAgB,CAAC;AAElC,OAAO,qBAAqB,CAAC;AAE7B,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC;AAclC,SAAS,kBAAkB,CAAC,EACxB,KAAK,EACL,WAAW,GACkD;IAC7D,OAAO,CACH,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,CAAC,cAAc,CAAC,aAChD,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,YAAG,KAAK,GAAQ,CAAC,CAAC,CAAC,KAAK,EACpF,WAAW,CAAC,CAAC,CAAC,CACX,KAAC,IAAI,IAAC,KAAK,EAAC,WAAW,EAAC,SAAS,EAAE,CAAC,CAAC,kBAAkB,CAAC,YACnD,WAAW,GACT,CACV,CAAC,CAAC,CAAC,IAAI,IACL,CACV,CAAC;AACN,CAAC;AAED,SAAS,WAAW,CAChB,IAAwC;IAExC,MAAM,EAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAC,GAAG,IAAI,CAAC;IAErE,OAAO;QACH,GAAG,QAAQ;QACX,IAAI,EAAE,kBAAkB,CAAC,EAAC,KAAK,EAAE,WAAW,EAAC,CAAC;QAC9C,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CACnB,KAAC,IAAI,IACD,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,kBAAkB,EAAE,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC,GAClE,CACL,CAAC,CAAC,CAAC,SAAS;QACb,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,EAAC,kBAAkB,EAAE,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC,CAAC;aAC7E,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC;KACM,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,YAAY,CAAkB,EAAC,KAAK,EAAE,GAAG,KAAK,EAAuB;IACjF,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAuC,GAAG,EAAE;QACzE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACvB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC;YAED,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,KAAC,mBAAmB,OAAK,KAAK,EAAE,KAAK,EAAE,WAAW,GAAI,CAAC;AAClE,CAAC"}
@@ -1,2 +1,2 @@
1
- declare const _default: (key: "version" | "database" | "links" | "no-data" | "dc" | "uptime" | "rack" | "la-interval-1m" | "la-interval-5m" | "la-interval-15m" | "developer-ui" | "title.common-info" | "title.endpoints" | "title.roles" | "title.pools" | "title.load-average", params?: import("@gravity-ui/i18n").Params) => string;
1
+ declare const _default: (key: "links" | "version" | "database" | "no-data" | "dc" | "uptime" | "rack" | "la-interval-1m" | "la-interval-5m" | "la-interval-15m" | "developer-ui" | "title.common-info" | "title.endpoints" | "title.roles" | "title.pools" | "title.load-average", params?: import("@gravity-ui/i18n").Params) => string;
2
2
  export default _default;
@@ -0,0 +1,7 @@
1
+ import type { ExtendedTBlock } from '../types';
2
+ type Props = {
3
+ block: ExtendedTBlock;
4
+ className: string;
5
+ };
6
+ export declare const ConnectionBlockComponent: ({ className, block }: Props) => import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ArrowsExpandHorizontal, DatabaseFill, GripHorizontal, MapPin, Shuffle, } from '@gravity-ui/icons';
3
+ import { Icon } from '@gravity-ui/uikit';
4
+ import { TooltipComponent } from '../TooltipComponent';
5
+ const getIcon = (name) => {
6
+ switch (name) {
7
+ case 'Merge':
8
+ return DatabaseFill;
9
+ case 'UnionAll':
10
+ return GripHorizontal;
11
+ case 'HashShuffle':
12
+ return Shuffle;
13
+ case 'Map':
14
+ return MapPin;
15
+ case 'Broadcast':
16
+ return ArrowsExpandHorizontal;
17
+ default:
18
+ return undefined;
19
+ }
20
+ };
21
+ export const ConnectionBlockComponent = ({ className, block }) => {
22
+ var _a;
23
+ const icon = getIcon(block.name);
24
+ const content = (_jsxs("div", { className: className, children: [icon && _jsx(Icon, { data: icon }), " ", block.name] }));
25
+ if (!((_a = block.stats) === null || _a === void 0 ? void 0 : _a.length)) {
26
+ return content;
27
+ }
28
+ return _jsx(TooltipComponent, { block: block, children: content });
29
+ };
30
+ //# sourceMappingURL=ConnectionBlockComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionBlockComponent.js","sourceRoot":"","sources":["../../../../src/components/Graph/BlockComponents/ConnectionBlockComponent.tsx"],"names":[],"mappings":";AAAA,OAAO,EACH,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,MAAM,EACN,OAAO,GACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAC,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAGvC,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AAQrD,MAAM,OAAO,GAAG,CAAC,IAAY,EAAwB,EAAE;IACnD,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,OAAO;YACR,OAAO,YAAY,CAAC;QACxB,KAAK,UAAU;YACX,OAAO,cAAc,CAAC;QAC1B,KAAK,aAAa;YACd,OAAO,OAAO,CAAC;QACnB,KAAK,KAAK;YACN,OAAO,MAAM,CAAC;QAClB,KAAK,WAAW;YACZ,OAAO,sBAAsB,CAAC;QAClC;YACI,OAAO,SAAS,CAAC;IACzB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,EAAC,SAAS,EAAE,KAAK,EAAQ,EAAE,EAAE;;IAClE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,CACZ,eAAK,SAAS,EAAE,SAAS,aACpB,IAAI,IAAI,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,GAAI,OAAG,KAAK,CAAC,IAAI,IACxC,CACT,CAAC;IAEF,IAAI,CAAC,CAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,MAAM,CAAA,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,OAAO,KAAC,gBAAgB,IAAC,KAAK,EAAE,KAAK,YAAG,OAAO,GAAoB,CAAC;AACxE,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ type Props = {
2
+ className: string;
3
+ };
4
+ export declare const QueryBlockComponent: ({ className }: Props) => import("react/jsx-runtime").JSX.Element;
5
+ export {};
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const QueryBlockComponent = ({ className }) => {
3
+ return _jsx("div", { className: className });
4
+ };
5
+ //# sourceMappingURL=QueryBlockComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBlockComponent.js","sourceRoot":"","sources":["../../../../src/components/Graph/BlockComponents/QueryBlockComponent.tsx"],"names":[],"mappings":";AAIA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAC,SAAS,EAAQ,EAAE,EAAE;IACtD,OAAO,cAAK,SAAS,EAAE,SAAS,GAAI,CAAC;AACzC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { TBlock } from '@gravity-ui/graph';
2
+ type Props = {
3
+ block: TBlock;
4
+ className: string;
5
+ };
6
+ export declare const ResultBlockComponent: ({ className, block }: Props) => import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const ResultBlockComponent = ({ className, block }) => {
3
+ return _jsx("div", { className: className, children: block.name });
4
+ };
5
+ //# sourceMappingURL=ResultBlockComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResultBlockComponent.js","sourceRoot":"","sources":["../../../../src/components/Graph/BlockComponents/ResultBlockComponent.tsx"],"names":[],"mappings":";AAOA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EAAC,SAAS,EAAE,KAAK,EAAQ,EAAE,EAAE;IAC9D,OAAO,cAAK,SAAS,EAAE,SAAS,YAAG,KAAK,CAAC,IAAI,GAAO,CAAC;AACzD,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ExtendedTBlock } from '../types';
2
+ type Props = {
3
+ block: ExtendedTBlock;
4
+ className: string;
5
+ };
6
+ export declare const StageBlockComponent: ({ className, block }: Props) => import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Text } from '@gravity-ui/uikit';
3
+ import { cn } from '../../../utils/cn';
4
+ import { TooltipComponent } from '../TooltipComponent';
5
+ import i18n from '../i18n';
6
+ const b = cn('ydb-gravity-graph');
7
+ export const StageBlockComponent = ({ className, block }) => {
8
+ var _a, _b, _c;
9
+ const content = (_jsxs("div", { className: className, children: [((_a = block.operators) === null || _a === void 0 ? void 0 : _a.length)
10
+ ? block.operators.map((item) => _jsx("div", { children: item }, item))
11
+ : block.name, (_b = block.tables) === null || _b === void 0 ? void 0 : _b.map((table, index) => (_jsxs("div", { className: b('stage-table-row'), title: table, children: [index === 0 ? _jsxs(Text, { color: "secondary", children: [i18n('label_tables'), ": "] }) : null, table] }, `${table}-${index}`)))] }));
12
+ if (!((_c = block.stats) === null || _c === void 0 ? void 0 : _c.length)) {
13
+ return content;
14
+ }
15
+ return _jsx(TooltipComponent, { block: block, children: content });
16
+ };
17
+ //# sourceMappingURL=StageBlockComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StageBlockComponent.js","sourceRoot":"","sources":["../../../../src/components/Graph/BlockComponents/StageBlockComponent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAC,EAAE,EAAC,MAAM,mBAAmB,CAAC;AACrC,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AACrD,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC;AAOlC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAC,SAAS,EAAE,KAAK,EAAQ,EAAE,EAAE;;IAC7D,MAAM,OAAO,GAAG,CACZ,eAAK,SAAS,EAAE,SAAS,aACpB,CAAA,MAAA,KAAK,CAAC,SAAS,0CAAE,MAAM;gBACpB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAiB,IAAI,IAAX,IAAI,CAAc,CAAC;gBAC7D,CAAC,CAAC,KAAK,CAAC,IAAI,EACf,MAAA,KAAK,CAAC,MAAM,0CAAE,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CACjC,eAA+B,SAAS,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,KAAK,aACvE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAC,IAAI,IAAC,KAAK,EAAC,WAAW,aAAE,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAC5E,KAAK,KAFA,GAAG,KAAK,IAAI,KAAK,EAAE,CAGvB,CACT,CAAC,IACA,CACT,CAAC;IAEF,IAAI,CAAC,CAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,MAAM,CAAA,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,OAAO,KAAC,gBAAgB,IAAC,KAAK,EAAE,KAAK,YAAG,OAAO,GAAoB,CAAC;AACxE,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Component } from '@gravity-ui/graph';
2
+ export declare const FullViewportBackground: typeof Component;
@@ -0,0 +1,67 @@
1
+ import { Component } from '@gravity-ui/graph';
2
+ const VIEWPORT_PADDING = 10;
3
+ const DOT_SIZE = 2;
4
+ const LARGE_DOT_MULTIPLIER = 3;
5
+ const PATTERN_GRID_SIZE = 5;
6
+ class FullViewportBackgroundComponent extends Component {
7
+ render() {
8
+ const { camera, colors, constants, ctx } = this.context;
9
+ const cameraState = camera.getCameraState();
10
+ const x = -cameraState.relativeX - VIEWPORT_PADDING;
11
+ const y = -cameraState.relativeY - VIEWPORT_PADDING;
12
+ const width = cameraState.relativeWidth + VIEWPORT_PADDING * 2;
13
+ const height = cameraState.relativeHeight + VIEWPORT_PADDING * 2;
14
+ ctx.fillStyle = colors.canvas.layerBackground;
15
+ ctx.fillRect(x, y, width, height);
16
+ if (cameraState.scale < constants.block.SCALES[0]) {
17
+ return;
18
+ }
19
+ this.preparePatterns(colors.canvas.dots, constants.system.GRID_SIZE);
20
+ if (!this.patterns) {
21
+ return;
22
+ }
23
+ ctx.fillStyle =
24
+ cameraState.scale > constants.block.SCALES[2]
25
+ ? this.patterns.normal
26
+ : this.patterns.simple;
27
+ ctx.fillRect(x, y, width, height);
28
+ }
29
+ preparePatterns(color, gridSize) {
30
+ if (this.patterns && this.patternsColor === color && this.patternsGridSize === gridSize) {
31
+ return;
32
+ }
33
+ const normal = this.createPattern(color, gridSize, false);
34
+ const simple = this.createPattern(color, gridSize, true);
35
+ if (normal && simple) {
36
+ this.patterns = { normal, simple };
37
+ this.patternsColor = color;
38
+ this.patternsGridSize = gridSize;
39
+ }
40
+ }
41
+ createPattern(color, gridSize, simple) {
42
+ const { ctx } = this.context;
43
+ const patternCanvas = document.createElement('canvas');
44
+ const patternSize = PATTERN_GRID_SIZE * gridSize;
45
+ patternCanvas.width = patternSize;
46
+ patternCanvas.height = patternSize;
47
+ const patternContext = patternCanvas.getContext('2d');
48
+ if (!patternContext) {
49
+ return null;
50
+ }
51
+ patternContext.fillStyle = color;
52
+ for (let row = -1; row <= PATTERN_GRID_SIZE; row += 1) {
53
+ for (let column = -1; column <= PATTERN_GRID_SIZE; column += 1) {
54
+ if (row % PATTERN_GRID_SIZE === 0 && column % PATTERN_GRID_SIZE === 0) {
55
+ const largeDotSize = DOT_SIZE * LARGE_DOT_MULTIPLIER;
56
+ patternContext.fillRect(row * gridSize - largeDotSize / 2, column * gridSize - largeDotSize / 2, largeDotSize, largeDotSize);
57
+ }
58
+ else if (!simple) {
59
+ patternContext.fillRect(row * gridSize - DOT_SIZE / 2, column * gridSize - DOT_SIZE / 2, DOT_SIZE, DOT_SIZE);
60
+ }
61
+ }
62
+ }
63
+ return ctx.createPattern(patternCanvas, 'repeat');
64
+ }
65
+ }
66
+ export const FullViewportBackground = FullViewportBackgroundComponent;
67
+ //# sourceMappingURL=FullViewportBackground.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FullViewportBackground.js","sourceRoot":"","sources":["../../../src/components/Graph/FullViewportBackground.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Graph } from '@gravity-ui/graph';
2
+ interface Props {
3
+ graph: Graph;
4
+ }
5
+ export declare const GraphControls: ({ graph }: Props) => import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { Button, Icon } from '@gravity-ui/uikit';
4
+ import { cn } from '../../utils/cn';
5
+ import i18n from './i18n';
6
+ import MagnifierMinusIcon from '@gravity-ui/icons/svgs/magnifier-minus.svg';
7
+ import MagnifierPlusIcon from '@gravity-ui/icons/svgs/magnifier-plus.svg';
8
+ const b = cn('ydb-gravity-graph');
9
+ const ZOOM_STEP = 1.25;
10
+ export const GraphControls = ({ graph }) => {
11
+ const onZoomInClick = React.useCallback(() => {
12
+ const cameraScale = graph.cameraService.getCameraScale();
13
+ graph.zoom({ scale: cameraScale * ZOOM_STEP });
14
+ }, [graph]);
15
+ const onZoomOutClick = React.useCallback(() => {
16
+ const cameraScale = graph.cameraService.getCameraScale();
17
+ graph.zoom({ scale: cameraScale / ZOOM_STEP });
18
+ }, [graph]);
19
+ const onResetZoomClick = React.useCallback(() => {
20
+ graph.zoom({ scale: 1 });
21
+ }, [graph]);
22
+ return (_jsxs("div", { className: b('zoom-controls'), children: [_jsx(Button, { view: "raised", onClick: onZoomInClick, "aria-label": i18n('action_zoom-in'), children: _jsx(Icon, { data: MagnifierPlusIcon, size: 16 }) }), _jsx(Button, { view: "raised", onClick: onZoomOutClick, "aria-label": i18n('action_zoom-out'), children: _jsx(Icon, { data: MagnifierMinusIcon, size: 16 }) }), _jsx(Button, { view: "raised", onClick: onResetZoomClick, children: "1:1" })] }));
23
+ };
24
+ //# sourceMappingURL=GraphControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphControls.js","sourceRoot":"","sources":["../../../src/components/Graph/GraphControls.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,MAAM,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAC,EAAE,EAAC,MAAM,gBAAgB,CAAC;AAElC,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,OAAO,kBAAkB,MAAM,4CAA4C,CAAC;AAC5E,OAAO,iBAAiB,MAAM,2CAA2C,CAAC;AAE1E,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC;AAElC,MAAM,SAAS,GAAG,IAAI,CAAC;AAMvB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAC,KAAK,EAAQ,EAAE,EAAE;IAC5C,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACzC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,WAAW,GAAG,SAAS,EAAC,CAAC,CAAC;IACjD,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,WAAW,GAAG,SAAS,EAAC,CAAC,CAAC;IACjD,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC5C,KAAK,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,CACH,eAAK,SAAS,EAAE,CAAC,CAAC,eAAe,CAAC,aAC9B,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,aAAa,gBAAc,IAAI,CAAC,gBAAgB,CAAC,YAC5E,KAAC,IAAI,IAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,GAAI,GACtC,EACT,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,cAAc,gBAAc,IAAI,CAAC,iBAAiB,CAAC,YAC9E,KAAC,IAAI,IAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,GAAI,GACvC,EACT,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,gBAAgB,oBAEtC,IACP,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Data } from './types';
2
+ import './GravityGraph.scss';
3
+ interface Props<T> {
4
+ data: Data<T>;
5
+ onError: (error: Error) => void;
6
+ theme?: string;
7
+ }
8
+ export declare function GravityGraph<T>({ data, onError, theme }: Props<T>): import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -0,0 +1,122 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { GraphState } from '@gravity-ui/graph';
4
+ import { GraphBlock, GraphCanvas, useGraph, useGraphEvent } from '@gravity-ui/graph/react';
5
+ import { uiFactory } from '../../uiFactory/uiFactory';
6
+ import { cn } from '../../utils/cn';
7
+ const b = cn('ydb-gravity-graph');
8
+ const GRAPH_FIT_PADDING = 40;
9
+ import { ConnectionBlockComponent } from './BlockComponents/ConnectionBlockComponent';
10
+ import { QueryBlockComponent } from './BlockComponents/QueryBlockComponent';
11
+ import { ResultBlockComponent } from './BlockComponents/ResultBlockComponent';
12
+ import { StageBlockComponent } from './BlockComponents/StageBlockComponent';
13
+ import { FullViewportBackground } from './FullViewportBackground';
14
+ import { GraphControls } from './GraphControls';
15
+ import { NonSelectableConnection } from './NonSelectableConnection';
16
+ import { graphColorsConfig } from './colorsConfig';
17
+ import { runTreeLayout } from './runTreeLayout';
18
+ import { parseCustomPropertyValue } from './utils';
19
+ import './GravityGraph.scss';
20
+ const config = {
21
+ settings: {
22
+ background: FullViewportBackground,
23
+ connection: NonSelectableConnection,
24
+ showConnectionArrows: false,
25
+ },
26
+ };
27
+ const createGraphLayoutWorker = () => {
28
+ if (uiFactory.createGraphLayoutWorker) {
29
+ return uiFactory.createGraphLayoutWorker();
30
+ }
31
+ return new Worker(new URL('../../graphLayout.worker', import.meta.url));
32
+ };
33
+ const renderBlockFn = (graph, block) => {
34
+ const map = {
35
+ query: QueryBlockComponent,
36
+ result: ResultBlockComponent,
37
+ stage: StageBlockComponent,
38
+ connection: ConnectionBlockComponent,
39
+ };
40
+ const Component = map[block.is];
41
+ return (_jsx(GraphBlock, { graph: graph, block: block, className: b('block'), children: Component ? (_jsxs(React.Fragment, { children: [_jsx(Component, { graph: graph, block: block, className: b('block-content', block.is) }), block.planNodeId !== undefined && block.is !== 'result' && (_jsxs("div", { className: b('block-id'), children: ["#", block.planNodeId] }))] })) : (block.id) }));
42
+ };
43
+ export function GravityGraph({ data, onError, theme }) {
44
+ const { graph, start } = useGraph(config);
45
+ const cameraSizeRef = React.useRef({ width: 0, height: 0 });
46
+ const graphBlockIdsRef = React.useRef([]);
47
+ const fitFrameRef = React.useRef();
48
+ const fitGraphToViewport = React.useCallback(() => {
49
+ const { width, height } = graph.cameraService.getCameraState();
50
+ if (graph.state !== GraphState.READY ||
51
+ width <= 0 ||
52
+ height <= 0 ||
53
+ graphBlockIdsRef.current.length === 0) {
54
+ return;
55
+ }
56
+ graph.zoomTo(graphBlockIdsRef.current, { padding: GRAPH_FIT_PADDING });
57
+ }, [graph]);
58
+ const scheduleGraphFit = React.useCallback(() => {
59
+ if (fitFrameRef.current !== undefined) {
60
+ globalThis.cancelAnimationFrame(fitFrameRef.current);
61
+ }
62
+ // camera-change is emitted before its new size is committed.
63
+ fitFrameRef.current = globalThis.requestAnimationFrame(() => {
64
+ fitFrameRef.current = undefined;
65
+ fitGraphToViewport();
66
+ });
67
+ }, [fitGraphToViewport]);
68
+ React.useEffect(() => {
69
+ return () => {
70
+ if (fitFrameRef.current !== undefined) {
71
+ globalThis.cancelAnimationFrame(fitFrameRef.current);
72
+ }
73
+ };
74
+ }, []);
75
+ React.useEffect(() => {
76
+ return runTreeLayout({
77
+ request: {
78
+ nodes: data.nodes,
79
+ links: data.links,
80
+ },
81
+ createWorker: createGraphLayoutWorker,
82
+ onResult: ({ layout, edges }) => {
83
+ graphBlockIdsRef.current = layout.map(({ id }) => id);
84
+ graph.setEntities({
85
+ blocks: layout,
86
+ connections: edges,
87
+ });
88
+ scheduleGraphFit();
89
+ },
90
+ onError,
91
+ });
92
+ }, [data.nodes, data.links, graph, onError, scheduleGraphFit]);
93
+ React.useEffect(() => {
94
+ graph.setColors(parseCustomPropertyValue(graphColorsConfig));
95
+ }, [graph, theme]);
96
+ useGraphEvent(graph, 'state-change', ({ state }) => {
97
+ if (state === GraphState.ATTACHED) {
98
+ graph.cameraService.set({
99
+ scale: 1,
100
+ scaleMax: 1.5,
101
+ });
102
+ graph.setConstants({
103
+ block: {
104
+ SCALES: [0.125, 0.225, 0.5], // Detailed view stays until zoom = 0.5
105
+ },
106
+ });
107
+ start();
108
+ }
109
+ else if (state === GraphState.READY) {
110
+ scheduleGraphFit();
111
+ }
112
+ });
113
+ useGraphEvent(graph, 'camera-change', ({ width, height }) => {
114
+ const previousSize = cameraSizeRef.current;
115
+ cameraSizeRef.current = { width, height };
116
+ if (previousSize.width !== width || previousSize.height !== height) {
117
+ scheduleGraphFit();
118
+ }
119
+ });
120
+ return (_jsxs(React.Fragment, { children: [_jsx(GraphCanvas, { graph: graph, renderBlock: renderBlockFn }), _jsx(GraphControls, { graph: graph })] }));
121
+ }
122
+ //# sourceMappingURL=GravityGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GravityGraph.js","sourceRoot":"","sources":["../../../src/components/Graph/GravityGraph.tsx"],"names":[],"mappings":"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"}