@ytsaurus/ui 1.75.1 → 1.77.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 (108) hide show
  1. package/dist/public/build/assets-manifest.json +75 -75
  2. package/dist/public/build/css/{job.c7c99207.chunk.css → job.9757ff68.chunk.css} +2 -2
  3. package/dist/public/build/css/job.9757ff68.chunk.css.map +1 -0
  4. package/dist/public/build/css/main.0efa9da5.css +10 -0
  5. package/dist/public/build/css/main.0efa9da5.css.map +1 -0
  6. package/dist/public/build/css/navigation.c199c4f2.chunk.css +2 -0
  7. package/dist/public/build/css/navigation.c199c4f2.chunk.css.map +1 -0
  8. package/dist/public/build/js/{1260.534f3f75.chunk.js → 1260.a1e22005.chunk.js} +2 -2
  9. package/dist/public/build/js/{1260.534f3f75.chunk.js.map → 1260.a1e22005.chunk.js.map} +1 -1
  10. package/dist/public/build/js/{1879.23423388.chunk.js → 1879.3975650a.chunk.js} +3 -3
  11. package/dist/public/build/js/{1879.23423388.chunk.js.map → 1879.3975650a.chunk.js.map} +1 -1
  12. package/dist/public/build/js/{1983.666923be.chunk.js → 1983.64a2e22f.chunk.js} +2 -2
  13. package/dist/public/build/js/{1983.666923be.chunk.js.map → 1983.64a2e22f.chunk.js.map} +1 -1
  14. package/dist/public/build/js/{2447.b2877275.chunk.js → 2447.eb8fde89.chunk.js} +2 -2
  15. package/dist/public/build/js/{2447.b2877275.chunk.js.map → 2447.eb8fde89.chunk.js.map} +1 -1
  16. package/dist/public/build/js/3724.3e5848f0.chunk.js +2 -0
  17. package/dist/public/build/js/{3724.425d01ec.chunk.js.map → 3724.3e5848f0.chunk.js.map} +1 -1
  18. package/dist/public/build/js/6729.39d7cf60.chunk.js +2 -0
  19. package/dist/public/build/js/6729.39d7cf60.chunk.js.map +1 -0
  20. package/dist/public/build/js/{7959.95ebd185.chunk.js → 7959.faac2ff8.chunk.js} +2 -2
  21. package/dist/public/build/js/{7959.95ebd185.chunk.js.map → 7959.faac2ff8.chunk.js.map} +1 -1
  22. package/dist/public/build/js/{8390.83f4531a.chunk.js → 8390.c3d2de6a.chunk.js} +2 -2
  23. package/dist/public/build/js/{8390.83f4531a.chunk.js.map → 8390.c3d2de6a.chunk.js.map} +1 -1
  24. package/dist/public/build/js/{8460.2d4d237e.chunk.js → 8460.fc8e2238.chunk.js} +2 -2
  25. package/dist/public/build/js/{8460.2d4d237e.chunk.js.map → 8460.fc8e2238.chunk.js.map} +1 -1
  26. package/dist/public/build/js/{8778.e18e655b.chunk.js → 8778.f3ea089f.chunk.js} +2 -2
  27. package/dist/public/build/js/{8778.e18e655b.chunk.js.map → 8778.f3ea089f.chunk.js.map} +1 -1
  28. package/dist/public/build/js/{9558.a6ea64c9.chunk.js → 9558.6a4bf9a9.chunk.js} +2 -2
  29. package/dist/public/build/js/{9558.a6ea64c9.chunk.js.map → 9558.6a4bf9a9.chunk.js.map} +1 -1
  30. package/dist/public/build/js/9569.aac48f3b.chunk.js +2 -0
  31. package/dist/public/build/js/9569.aac48f3b.chunk.js.map +1 -0
  32. package/dist/public/build/js/{accounts.2ba221c2.chunk.js → accounts.aa7ed73f.chunk.js} +2 -2
  33. package/dist/public/build/js/accounts.aa7ed73f.chunk.js.map +1 -0
  34. package/dist/public/build/js/{acl.c948c339.chunk.js → acl.4cd54663.chunk.js} +2 -2
  35. package/dist/public/build/js/{acl.c948c339.chunk.js.map → acl.4cd54663.chunk.js.map} +1 -1
  36. package/dist/public/build/js/{app-navigation.b062662b.chunk.js → app-navigation.13c65573.chunk.js} +2 -2
  37. package/dist/public/build/js/app-navigation.13c65573.chunk.js.map +1 -0
  38. package/dist/public/build/js/chyt.0ee6bfa2.chunk.js +2 -0
  39. package/dist/public/build/js/chyt.0ee6bfa2.chunk.js.map +1 -0
  40. package/dist/public/build/js/cluster-page-wrapper.bdc8607f.chunk.js +2 -0
  41. package/dist/public/build/js/cluster-page-wrapper.bdc8607f.chunk.js.map +1 -0
  42. package/dist/public/build/js/{components.bbe331cb.chunk.js → components.b39828bc.chunk.js} +2 -2
  43. package/dist/public/build/js/components.b39828bc.chunk.js.map +1 -0
  44. package/dist/public/build/js/job.ea2ba82d.chunk.js +2 -0
  45. package/dist/public/build/js/job.ea2ba82d.chunk.js.map +1 -0
  46. package/dist/public/build/js/main.6375dbc6.js +3 -0
  47. package/dist/public/build/js/main.6375dbc6.js.map +1 -0
  48. package/dist/public/build/js/manage-tokens.e1e791fc.chunk.js +2 -0
  49. package/dist/public/build/js/manage-tokens.e1e791fc.chunk.js.map +1 -0
  50. package/dist/public/build/js/{navigation-flow.eeb01518.chunk.js → navigation-flow.6d67215a.chunk.js} +2 -2
  51. package/dist/public/build/js/{navigation-flow.eeb01518.chunk.js.map → navigation-flow.6d67215a.chunk.js.map} +1 -1
  52. package/dist/public/build/js/navigation.529208de.chunk.js +2 -0
  53. package/dist/public/build/js/navigation.529208de.chunk.js.map +1 -0
  54. package/dist/public/build/js/odin.c4c4ef6f.chunk.js +2 -0
  55. package/dist/public/build/js/odin.c4c4ef6f.chunk.js.map +1 -0
  56. package/dist/public/build/js/{path-viewer.b1b3328d.chunk.js → path-viewer.c091d9f4.chunk.js} +2 -2
  57. package/dist/public/build/js/{path-viewer.b1b3328d.chunk.js.map → path-viewer.c091d9f4.chunk.js.map} +1 -1
  58. package/dist/public/build/js/{query-navigation.9964bfcf.chunk.js → query-navigation.b1574290.chunk.js} +2 -2
  59. package/dist/public/build/js/{query-navigation.9964bfcf.chunk.js.map → query-navigation.b1574290.chunk.js.map} +1 -1
  60. package/dist/public/build/js/{query-results.733b1795.chunk.js → query-results.0a05cc41.chunk.js} +2 -2
  61. package/dist/public/build/js/{query-results.733b1795.chunk.js.map → query-results.0a05cc41.chunk.js.map} +1 -1
  62. package/dist/public/build/js/query-tracker.515069f6.chunk.js +2 -0
  63. package/dist/public/build/js/query-tracker.515069f6.chunk.js.map +1 -0
  64. package/dist/public/build/js/{runtime.481a6d3a.js → runtime.09217c31.js} +2 -2
  65. package/dist/public/build/js/{runtime.481a6d3a.js.map → runtime.09217c31.js.map} +1 -1
  66. package/dist/public/build/js/{scheduling.b70d4627.chunk.js → scheduling.6448eabd.chunk.js} +2 -2
  67. package/dist/public/build/js/{scheduling.b70d4627.chunk.js.map → scheduling.6448eabd.chunk.js.map} +1 -1
  68. package/dist/public/build/js/system.1114aa96.chunk.js +2 -0
  69. package/dist/public/build/js/system.1114aa96.chunk.js.map +1 -0
  70. package/dist/public/build/js/{yt-df-dialog.9ddda260.chunk.js → yt-df-dialog.4ad719bf.chunk.js} +2 -2
  71. package/dist/public/build/js/yt-df-dialog.4ad719bf.chunk.js.map +1 -0
  72. package/dist/public/build/manifest.json +70 -70
  73. package/dist/shared/constants/settings-types.d.ts +1 -0
  74. package/package.json +3 -2
  75. package/dist/public/build/css/job.c7c99207.chunk.css.map +0 -1
  76. package/dist/public/build/css/main.2d3cbfcd.css +0 -10
  77. package/dist/public/build/css/main.2d3cbfcd.css.map +0 -1
  78. package/dist/public/build/css/navigation.0a9042b3.chunk.css +0 -2
  79. package/dist/public/build/css/navigation.0a9042b3.chunk.css.map +0 -1
  80. package/dist/public/build/js/3724.425d01ec.chunk.js +0 -2
  81. package/dist/public/build/js/5177.b4cec253.chunk.js +0 -2
  82. package/dist/public/build/js/5177.b4cec253.chunk.js.map +0 -1
  83. package/dist/public/build/js/6729.da9aa02f.chunk.js +0 -2
  84. package/dist/public/build/js/6729.da9aa02f.chunk.js.map +0 -1
  85. package/dist/public/build/js/accounts.2ba221c2.chunk.js.map +0 -1
  86. package/dist/public/build/js/app-navigation.b062662b.chunk.js.map +0 -1
  87. package/dist/public/build/js/chyt.7f99f87d.chunk.js +0 -2
  88. package/dist/public/build/js/chyt.7f99f87d.chunk.js.map +0 -1
  89. package/dist/public/build/js/cluster-page-wrapper.894fbacc.chunk.js +0 -2
  90. package/dist/public/build/js/cluster-page-wrapper.894fbacc.chunk.js.map +0 -1
  91. package/dist/public/build/js/components.bbe331cb.chunk.js.map +0 -1
  92. package/dist/public/build/js/job.4fc50056.chunk.js +0 -2
  93. package/dist/public/build/js/job.4fc50056.chunk.js.map +0 -1
  94. package/dist/public/build/js/main.7981a440.js +0 -3
  95. package/dist/public/build/js/main.7981a440.js.map +0 -1
  96. package/dist/public/build/js/manage-tokens.286a4da9.chunk.js +0 -2
  97. package/dist/public/build/js/manage-tokens.286a4da9.chunk.js.map +0 -1
  98. package/dist/public/build/js/navigation.d891266d.chunk.js +0 -2
  99. package/dist/public/build/js/navigation.d891266d.chunk.js.map +0 -1
  100. package/dist/public/build/js/odin.df1cfe56.chunk.js +0 -2
  101. package/dist/public/build/js/odin.df1cfe56.chunk.js.map +0 -1
  102. package/dist/public/build/js/query-tracker.06cc4fdc.chunk.js +0 -2
  103. package/dist/public/build/js/query-tracker.06cc4fdc.chunk.js.map +0 -1
  104. package/dist/public/build/js/system.f759d3f0.chunk.js +0 -2
  105. package/dist/public/build/js/system.f759d3f0.chunk.js.map +0 -1
  106. package/dist/public/build/js/yt-df-dialog.9ddda260.chunk.js.map +0 -1
  107. /package/dist/public/build/js/{1879.23423388.chunk.js.LICENSE.txt → 1879.3975650a.chunk.js.LICENSE.txt} +0 -0
  108. /package/dist/public/build/js/{main.7981a440.js.LICENSE.txt → main.6375dbc6.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/cluster-page-wrapper.bdc8607f.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/ClusterIcon/ClusterIcon.tsx","webpack://@ytsaurus/ui/./node_modules/split.js/dist/split.es.js","webpack://@ytsaurus/ui/./src/ui/components/FlexSplitPane/FlexSplitPane.js","webpack://@ytsaurus/ui/./src/ui/components/Linkify/Linkify.tsx","webpack://@ytsaurus/ui/./src/ui/components/SubjectLink/SubjectLink.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AppNavigation/TopRowContent/SectionName.tsx","webpack://@ytsaurus/ui/./src/ui/containers/ClusterPageHeader/ClusterColor.ts","webpack://@ytsaurus/ui/./src/ui/containers/ClusterPageHeader/HeadSpacer.tsx","webpack://@ytsaurus/ui/./src/ui/containers/BanPage/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/components/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/accounts/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/dashboard/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/path-viewer/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/groups/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/users/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/job/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/chyt/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AppNavigation/TopRowContent/TopRowContent.tsx","webpack://@ytsaurus/ui/./src/ui/containers/ClusterPage/ExtraClusterPageRoutes.tsx","webpack://@ytsaurus/ui/./src/ui/containers/ClusterPageHeader/ClustersPanel.tsx","webpack://@ytsaurus/ui/./src/ui/containers/ClusterPageHeader/ClusterPicker.tsx","webpack://@ytsaurus/ui/./src/ui/containers/ClusterPageHeader/helpers/makeClusterUrl.ts","webpack://@ytsaurus/ui/./src/ui/hocs/withBlockedNavigation.js","webpack://@ytsaurus/ui/./src/ui/containers/MaintenancePage/MaintenancePage.tsx","webpack://@ytsaurus/ui/./src/ui/utils/maintenance.ts","webpack://@ytsaurus/ui/./src/ui/containers/MaintenancePage/HandleMaintenance.tsx","webpack://@ytsaurus/ui/./src/ui/containers/ClusterPageHeader/ClusterPageHeader.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/menu.js","webpack://@ytsaurus/ui/./src/ui/containers/ClusterPage/PageTracker.js","webpack://@ytsaurus/ui/./src/ui/containers/PreloadError/PreloadError.tsx","webpack://@ytsaurus/ui/./src/ui/common/yt-api-init.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/cluster-params.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/global/supported-features.ts","webpack://@ytsaurus/ui/./src/ui/containers/ClusterPage/SupportedFeaturesUpdater.tsx","webpack://@ytsaurus/ui/./src/ui/containers/ClusterPage/ClusterPage.js","webpack://@ytsaurus/ui/./src/ui/containers/ClusterPageWrapper/ClusterPageWrapper.tsx","webpack://@ytsaurus/ui/./src/ui/utils/hammer/updater.ts","webpack://@ytsaurus/ui/./src/ui/hooks/use-updater.ts","webpack://@ytsaurus/ui/./src/ui/rum/rum-measure-types.ts"],"sourcesContent":["import React from 'react';\n\nimport './ClusterIcon.scss';\n\nimport cn from 'bem-cn-lite';\nconst block = cn('cluster-icon');\n\nexport interface Props {\n icon?: string;\n className?: string;\n name?: string;\n forwardRef?: React.RefObject<HTMLImageElement>;\n}\n\nexport default function ClusterIcon({icon, className, forwardRef, name}: Props) {\n const placeholder = name ? name.substring(0, 2).toUpperCase() : 'YT';\n return (\n <div className={block('wrapper', className)} ref={forwardRef}>\n {icon ? (\n <img src={icon} />\n ) : (\n <span className={block('placeholder')}>{placeholder}</span>\n )}\n </div>\n );\n}\n","// The programming goals of Split.js are to deliver readable, understandable and\n// maintainable code, while at the same time manually optimizing for tiny minified file size,\n// browser compatibility without additional requirements\n// and very few assumptions about the user's page layout.\nvar global = typeof window !== 'undefined' ? window : null;\nvar ssr = global === null;\nvar document = !ssr ? global.document : undefined;\n\n// Save a couple long function names that are used frequently.\n// This optimization saves around 400 bytes.\nvar addEventListener = 'addEventListener';\nvar removeEventListener = 'removeEventListener';\nvar getBoundingClientRect = 'getBoundingClientRect';\nvar gutterStartDragging = '_a';\nvar aGutterSize = '_b';\nvar bGutterSize = '_c';\nvar HORIZONTAL = 'horizontal';\nvar NOOP = function () { return false; };\n\n// Helper function determines which prefixes of CSS calc we need.\n// We only need to do this once on startup, when this anonymous function is called.\n//\n// Tests -webkit, -moz and -o prefixes. Modified from StackOverflow:\n// http://stackoverflow.com/questions/16625140/js-feature-detection-to-detect-the-usage-of-webkit-calc-over-calc/16625167#16625167\nvar calc = ssr\n ? 'calc'\n : ((['', '-webkit-', '-moz-', '-o-']\n .filter(function (prefix) {\n var el = document.createElement('div');\n el.style.cssText = \"width:\" + prefix + \"calc(9px)\";\n\n return !!el.style.length\n })\n .shift()) + \"calc\");\n\n// Helper function checks if its argument is a string-like type\nvar isString = function (v) { return typeof v === 'string' || v instanceof String; };\n\n// Helper function allows elements and string selectors to be used\n// interchangeably. In either case an element is returned. This allows us to\n// do `Split([elem1, elem2])` as well as `Split(['#id1', '#id2'])`.\nvar elementOrSelector = function (el) {\n if (isString(el)) {\n var ele = document.querySelector(el);\n if (!ele) {\n throw new Error((\"Selector \" + el + \" did not match a DOM element\"))\n }\n return ele\n }\n\n return el\n};\n\n// Helper function gets a property from the properties object, with a default fallback\nvar getOption = function (options, propName, def) {\n var value = options[propName];\n if (value !== undefined) {\n return value\n }\n return def\n};\n\nvar getGutterSize = function (gutterSize, isFirst, isLast, gutterAlign) {\n if (isFirst) {\n if (gutterAlign === 'end') {\n return 0\n }\n if (gutterAlign === 'center') {\n return gutterSize / 2\n }\n } else if (isLast) {\n if (gutterAlign === 'start') {\n return 0\n }\n if (gutterAlign === 'center') {\n return gutterSize / 2\n }\n }\n\n return gutterSize\n};\n\n// Default options\nvar defaultGutterFn = function (i, gutterDirection) {\n var gut = document.createElement('div');\n gut.className = \"gutter gutter-\" + gutterDirection;\n return gut\n};\n\nvar defaultElementStyleFn = function (dim, size, gutSize) {\n var style = {};\n\n if (!isString(size)) {\n style[dim] = calc + \"(\" + size + \"% - \" + gutSize + \"px)\";\n } else {\n style[dim] = size;\n }\n\n return style\n};\n\nvar defaultGutterStyleFn = function (dim, gutSize) {\n var obj;\n\n return (( obj = {}, obj[dim] = (gutSize + \"px\"), obj ));\n};\n\n// The main function to initialize a split. Split.js thinks about each pair\n// of elements as an independant pair. Dragging the gutter between two elements\n// only changes the dimensions of elements in that pair. This is key to understanding\n// how the following functions operate, since each function is bound to a pair.\n//\n// A pair object is shaped like this:\n//\n// {\n// a: DOM element,\n// b: DOM element,\n// aMin: Number,\n// bMin: Number,\n// dragging: Boolean,\n// parent: DOM element,\n// direction: 'horizontal' | 'vertical'\n// }\n//\n// The basic sequence:\n//\n// 1. Set defaults to something sane. `options` doesn't have to be passed at all.\n// 2. Initialize a bunch of strings based on the direction we're splitting.\n// A lot of the behavior in the rest of the library is paramatized down to\n// rely on CSS strings and classes.\n// 3. Define the dragging helper functions, and a few helpers to go with them.\n// 4. Loop through the elements while pairing them off. Every pair gets an\n// `pair` object and a gutter.\n// 5. Actually size the pair elements, insert gutters and attach event listeners.\nvar Split = function (idsOption, options) {\n if ( options === void 0 ) options = {};\n\n if (ssr) { return {} }\n\n var ids = idsOption;\n var dimension;\n var clientAxis;\n var position;\n var positionEnd;\n var clientSize;\n var elements;\n\n // Allow HTMLCollection to be used as an argument when supported\n if (Array.from) {\n ids = Array.from(ids);\n }\n\n // All DOM elements in the split should have a common parent. We can grab\n // the first elements parent and hope users read the docs because the\n // behavior will be whacky otherwise.\n var firstElement = elementOrSelector(ids[0]);\n var parent = firstElement.parentNode;\n var parentStyle = getComputedStyle ? getComputedStyle(parent) : null;\n var parentFlexDirection = parentStyle ? parentStyle.flexDirection : null;\n\n // Set default options.sizes to equal percentages of the parent element.\n var sizes = getOption(options, 'sizes') || ids.map(function () { return 100 / ids.length; });\n\n // Standardize minSize and maxSize to an array if it isn't already.\n // This allows minSize and maxSize to be passed as a number.\n var minSize = getOption(options, 'minSize', 100);\n var minSizes = Array.isArray(minSize) ? minSize : ids.map(function () { return minSize; });\n var maxSize = getOption(options, 'maxSize', Infinity);\n var maxSizes = Array.isArray(maxSize) ? maxSize : ids.map(function () { return maxSize; });\n\n // Get other options\n var expandToMin = getOption(options, 'expandToMin', false);\n var gutterSize = getOption(options, 'gutterSize', 10);\n var gutterAlign = getOption(options, 'gutterAlign', 'center');\n var snapOffset = getOption(options, 'snapOffset', 30);\n var snapOffsets = Array.isArray(snapOffset) ? snapOffset : ids.map(function () { return snapOffset; });\n var dragInterval = getOption(options, 'dragInterval', 1);\n var direction = getOption(options, 'direction', HORIZONTAL);\n var cursor = getOption(\n options,\n 'cursor',\n direction === HORIZONTAL ? 'col-resize' : 'row-resize'\n );\n var gutter = getOption(options, 'gutter', defaultGutterFn);\n var elementStyle = getOption(\n options,\n 'elementStyle',\n defaultElementStyleFn\n );\n var gutterStyle = getOption(options, 'gutterStyle', defaultGutterStyleFn);\n\n // 2. Initialize a bunch of strings based on the direction we're splitting.\n // A lot of the behavior in the rest of the library is paramatized down to\n // rely on CSS strings and classes.\n if (direction === HORIZONTAL) {\n dimension = 'width';\n clientAxis = 'clientX';\n position = 'left';\n positionEnd = 'right';\n clientSize = 'clientWidth';\n } else if (direction === 'vertical') {\n dimension = 'height';\n clientAxis = 'clientY';\n position = 'top';\n positionEnd = 'bottom';\n clientSize = 'clientHeight';\n }\n\n // 3. Define the dragging helper functions, and a few helpers to go with them.\n // Each helper is bound to a pair object that contains its metadata. This\n // also makes it easy to store references to listeners that that will be\n // added and removed.\n //\n // Even though there are no other functions contained in them, aliasing\n // this to self saves 50 bytes or so since it's used so frequently.\n //\n // The pair object saves metadata like dragging state, position and\n // event listener references.\n\n function setElementSize(el, size, gutSize, i) {\n // Split.js allows setting sizes via numbers (ideally), or if you must,\n // by string, like '300px'. This is less than ideal, because it breaks\n // the fluid layout that `calc(% - px)` provides. You're on your own if you do that,\n // make sure you calculate the gutter size by hand.\n var style = elementStyle(dimension, size, gutSize, i);\n\n Object.keys(style).forEach(function (prop) {\n // eslint-disable-next-line no-param-reassign\n el.style[prop] = style[prop];\n });\n }\n\n function setGutterSize(gutterElement, gutSize, i) {\n var style = gutterStyle(dimension, gutSize, i);\n\n Object.keys(style).forEach(function (prop) {\n // eslint-disable-next-line no-param-reassign\n gutterElement.style[prop] = style[prop];\n });\n }\n\n function getSizes() {\n return elements.map(function (element) { return element.size; })\n }\n\n // Supports touch events, but not multitouch, so only the first\n // finger `touches[0]` is counted.\n function getMousePosition(e) {\n if ('touches' in e) { return e.touches[0][clientAxis] }\n return e[clientAxis]\n }\n\n // Actually adjust the size of elements `a` and `b` to `offset` while dragging.\n // calc is used to allow calc(percentage + gutterpx) on the whole split instance,\n // which allows the viewport to be resized without additional logic.\n // Element a's size is the same as offset. b's size is total size - a size.\n // Both sizes are calculated from the initial parent percentage,\n // then the gutter size is subtracted.\n function adjust(offset) {\n var a = elements[this.a];\n var b = elements[this.b];\n var percentage = a.size + b.size;\n\n a.size = (offset / this.size) * percentage;\n b.size = percentage - (offset / this.size) * percentage;\n\n setElementSize(a.element, a.size, this[aGutterSize], a.i);\n setElementSize(b.element, b.size, this[bGutterSize], b.i);\n }\n\n // drag, where all the magic happens. The logic is really quite simple:\n //\n // 1. Ignore if the pair is not dragging.\n // 2. Get the offset of the event.\n // 3. Snap offset to min if within snappable range (within min + snapOffset).\n // 4. Actually adjust each element in the pair to offset.\n //\n // ---------------------------------------------------------------------\n // | | <- a.minSize || b.minSize -> | |\n // | | | <- this.snapOffset || this.snapOffset -> | | |\n // | | | || | | |\n // | | | || | | |\n // ---------------------------------------------------------------------\n // | <- this.start this.size -> |\n function drag(e) {\n var offset;\n var a = elements[this.a];\n var b = elements[this.b];\n\n if (!this.dragging) { return }\n\n // Get the offset of the event from the first side of the\n // pair `this.start`. Then offset by the initial position of the\n // mouse compared to the gutter size.\n offset =\n getMousePosition(e) -\n this.start +\n (this[aGutterSize] - this.dragOffset);\n\n if (dragInterval > 1) {\n offset = Math.round(offset / dragInterval) * dragInterval;\n }\n\n // If within snapOffset of min or max, set offset to min or max.\n // snapOffset buffers a.minSize and b.minSize, so logic is opposite for both.\n // Include the appropriate gutter sizes to prevent overflows.\n if (offset <= a.minSize + a.snapOffset + this[aGutterSize]) {\n offset = a.minSize + this[aGutterSize];\n } else if (\n offset >=\n this.size - (b.minSize + b.snapOffset + this[bGutterSize])\n ) {\n offset = this.size - (b.minSize + this[bGutterSize]);\n }\n\n if (offset >= a.maxSize - a.snapOffset + this[aGutterSize]) {\n offset = a.maxSize + this[aGutterSize];\n } else if (\n offset <=\n this.size - (b.maxSize - b.snapOffset + this[bGutterSize])\n ) {\n offset = this.size - (b.maxSize + this[bGutterSize]);\n }\n\n // Actually adjust the size.\n adjust.call(this, offset);\n\n // Call the drag callback continously. Don't do anything too intensive\n // in this callback.\n getOption(options, 'onDrag', NOOP)(getSizes());\n }\n\n // Cache some important sizes when drag starts, so we don't have to do that\n // continously:\n //\n // `size`: The total size of the pair. First + second + first gutter + second gutter.\n // `start`: The leading side of the first element.\n //\n // ------------------------------------------------\n // | aGutterSize -> ||| |\n // | ||| |\n // | ||| |\n // | ||| <- bGutterSize |\n // ------------------------------------------------\n // | <- start size -> |\n function calculateSizes() {\n // Figure out the parent size minus padding.\n var a = elements[this.a].element;\n var b = elements[this.b].element;\n\n var aBounds = a[getBoundingClientRect]();\n var bBounds = b[getBoundingClientRect]();\n\n this.size =\n aBounds[dimension] +\n bBounds[dimension] +\n this[aGutterSize] +\n this[bGutterSize];\n this.start = aBounds[position];\n this.end = aBounds[positionEnd];\n }\n\n function innerSize(element) {\n // Return nothing if getComputedStyle is not supported (< IE9)\n // Or if parent element has no layout yet\n if (!getComputedStyle) { return null }\n\n var computedStyle = getComputedStyle(element);\n\n if (!computedStyle) { return null }\n\n var size = element[clientSize];\n\n if (size === 0) { return null }\n\n if (direction === HORIZONTAL) {\n size -=\n parseFloat(computedStyle.paddingLeft) +\n parseFloat(computedStyle.paddingRight);\n } else {\n size -=\n parseFloat(computedStyle.paddingTop) +\n parseFloat(computedStyle.paddingBottom);\n }\n\n return size\n }\n\n // When specifying percentage sizes that are less than the computed\n // size of the element minus the gutter, the lesser percentages must be increased\n // (and decreased from the other elements) to make space for the pixels\n // subtracted by the gutters.\n function trimToMin(sizesToTrim) {\n // Try to get inner size of parent element.\n // If it's no supported, return original sizes.\n var parentSize = innerSize(parent);\n if (parentSize === null) {\n return sizesToTrim\n }\n\n if (minSizes.reduce(function (a, b) { return a + b; }, 0) > parentSize) {\n return sizesToTrim\n }\n\n // Keep track of the excess pixels, the amount of pixels over the desired percentage\n // Also keep track of the elements with pixels to spare, to decrease after if needed\n var excessPixels = 0;\n var toSpare = [];\n\n var pixelSizes = sizesToTrim.map(function (size, i) {\n // Convert requested percentages to pixel sizes\n var pixelSize = (parentSize * size) / 100;\n var elementGutterSize = getGutterSize(\n gutterSize,\n i === 0,\n i === sizesToTrim.length - 1,\n gutterAlign\n );\n var elementMinSize = minSizes[i] + elementGutterSize;\n\n // If element is too smal, increase excess pixels by the difference\n // and mark that it has no pixels to spare\n if (pixelSize < elementMinSize) {\n excessPixels += elementMinSize - pixelSize;\n toSpare.push(0);\n return elementMinSize\n }\n\n // Otherwise, mark the pixels it has to spare and return it's original size\n toSpare.push(pixelSize - elementMinSize);\n return pixelSize\n });\n\n // If nothing was adjusted, return the original sizes\n if (excessPixels === 0) {\n return sizesToTrim\n }\n\n return pixelSizes.map(function (pixelSize, i) {\n var newPixelSize = pixelSize;\n\n // While there's still pixels to take, and there's enough pixels to spare,\n // take as many as possible up to the total excess pixels\n if (excessPixels > 0 && toSpare[i] - excessPixels > 0) {\n var takenPixels = Math.min(\n excessPixels,\n toSpare[i] - excessPixels\n );\n\n // Subtract the amount taken for the next iteration\n excessPixels -= takenPixels;\n newPixelSize = pixelSize - takenPixels;\n }\n\n // Return the pixel size adjusted as a percentage\n return (newPixelSize / parentSize) * 100\n })\n }\n\n // stopDragging is very similar to startDragging in reverse.\n function stopDragging() {\n var self = this;\n var a = elements[self.a].element;\n var b = elements[self.b].element;\n\n if (self.dragging) {\n getOption(options, 'onDragEnd', NOOP)(getSizes());\n }\n\n self.dragging = false;\n\n // Remove the stored event listeners. This is why we store them.\n global[removeEventListener]('mouseup', self.stop);\n global[removeEventListener]('touchend', self.stop);\n global[removeEventListener]('touchcancel', self.stop);\n global[removeEventListener]('mousemove', self.move);\n global[removeEventListener]('touchmove', self.move);\n\n // Clear bound function references\n self.stop = null;\n self.move = null;\n\n a[removeEventListener]('selectstart', NOOP);\n a[removeEventListener]('dragstart', NOOP);\n b[removeEventListener]('selectstart', NOOP);\n b[removeEventListener]('dragstart', NOOP);\n\n a.style.userSelect = '';\n a.style.webkitUserSelect = '';\n a.style.MozUserSelect = '';\n a.style.pointerEvents = '';\n\n b.style.userSelect = '';\n b.style.webkitUserSelect = '';\n b.style.MozUserSelect = '';\n b.style.pointerEvents = '';\n\n self.gutter.style.cursor = '';\n self.parent.style.cursor = '';\n document.body.style.cursor = '';\n }\n\n // startDragging calls `calculateSizes` to store the inital size in the pair object.\n // It also adds event listeners for mouse/touch events,\n // and prevents selection while dragging so avoid the selecting text.\n function startDragging(e) {\n // Right-clicking can't start dragging.\n if ('button' in e && e.button !== 0) {\n return\n }\n\n // Alias frequently used variables to save space. 200 bytes.\n var self = this;\n var a = elements[self.a].element;\n var b = elements[self.b].element;\n\n // Call the onDragStart callback.\n if (!self.dragging) {\n getOption(options, 'onDragStart', NOOP)(getSizes());\n }\n\n // Don't actually drag the element. We emulate that in the drag function.\n e.preventDefault();\n\n // Set the dragging property of the pair object.\n self.dragging = true;\n\n // Create two event listeners bound to the same pair object and store\n // them in the pair object.\n self.move = drag.bind(self);\n self.stop = stopDragging.bind(self);\n\n // All the binding. `window` gets the stop events in case we drag out of the elements.\n global[addEventListener]('mouseup', self.stop);\n global[addEventListener]('touchend', self.stop);\n global[addEventListener]('touchcancel', self.stop);\n global[addEventListener]('mousemove', self.move);\n global[addEventListener]('touchmove', self.move);\n\n // Disable selection. Disable!\n a[addEventListener]('selectstart', NOOP);\n a[addEventListener]('dragstart', NOOP);\n b[addEventListener]('selectstart', NOOP);\n b[addEventListener]('dragstart', NOOP);\n\n a.style.userSelect = 'none';\n a.style.webkitUserSelect = 'none';\n a.style.MozUserSelect = 'none';\n a.style.pointerEvents = 'none';\n\n b.style.userSelect = 'none';\n b.style.webkitUserSelect = 'none';\n b.style.MozUserSelect = 'none';\n b.style.pointerEvents = 'none';\n\n // Set the cursor at multiple levels\n self.gutter.style.cursor = cursor;\n self.parent.style.cursor = cursor;\n document.body.style.cursor = cursor;\n\n // Cache the initial sizes of the pair.\n calculateSizes.call(self);\n\n // Determine the position of the mouse compared to the gutter\n self.dragOffset = getMousePosition(e) - self.end;\n }\n\n // adjust sizes to ensure percentage is within min size and gutter.\n sizes = trimToMin(sizes);\n\n // 5. Create pair and element objects. Each pair has an index reference to\n // elements `a` and `b` of the pair (first and second elements).\n // Loop through the elements while pairing them off. Every pair gets a\n // `pair` object and a gutter.\n //\n // Basic logic:\n //\n // - Starting with the second element `i > 0`, create `pair` objects with\n // `a = i - 1` and `b = i`\n // - Set gutter sizes based on the _pair_ being first/last. The first and last\n // pair have gutterSize / 2, since they only have one half gutter, and not two.\n // - Create gutter elements and add event listeners.\n // - Set the size of the elements, minus the gutter sizes.\n //\n // -----------------------------------------------------------------------\n // | i=0 | i=1 | i=2 | i=3 |\n // | | | | |\n // | pair 0 pair 1 pair 2 |\n // | | | | |\n // -----------------------------------------------------------------------\n var pairs = [];\n elements = ids.map(function (id, i) {\n // Create the element object.\n var element = {\n element: elementOrSelector(id),\n size: sizes[i],\n minSize: minSizes[i],\n maxSize: maxSizes[i],\n snapOffset: snapOffsets[i],\n i: i,\n };\n\n var pair;\n\n if (i > 0) {\n // Create the pair object with its metadata.\n pair = {\n a: i - 1,\n b: i,\n dragging: false,\n direction: direction,\n parent: parent,\n };\n\n pair[aGutterSize] = getGutterSize(\n gutterSize,\n i - 1 === 0,\n false,\n gutterAlign\n );\n pair[bGutterSize] = getGutterSize(\n gutterSize,\n false,\n i === ids.length - 1,\n gutterAlign\n );\n\n // if the parent has a reverse flex-direction, switch the pair elements.\n if (\n parentFlexDirection === 'row-reverse' ||\n parentFlexDirection === 'column-reverse'\n ) {\n var temp = pair.a;\n pair.a = pair.b;\n pair.b = temp;\n }\n }\n\n // Determine the size of the current element. IE8 is supported by\n // staticly assigning sizes without draggable gutters. Assigns a string\n // to `size`.\n //\n // Create gutter elements for each pair.\n if (i > 0) {\n var gutterElement = gutter(i, direction, element.element);\n setGutterSize(gutterElement, gutterSize, i);\n\n // Save bound event listener for removal later\n pair[gutterStartDragging] = startDragging.bind(pair);\n\n // Attach bound event listener\n gutterElement[addEventListener](\n 'mousedown',\n pair[gutterStartDragging]\n );\n gutterElement[addEventListener](\n 'touchstart',\n pair[gutterStartDragging]\n );\n\n parent.insertBefore(gutterElement, element.element);\n\n pair.gutter = gutterElement;\n }\n\n setElementSize(\n element.element,\n element.size,\n getGutterSize(\n gutterSize,\n i === 0,\n i === ids.length - 1,\n gutterAlign\n ),\n i\n );\n\n // After the first iteration, and we have a pair object, append it to the\n // list of pairs.\n if (i > 0) {\n pairs.push(pair);\n }\n\n return element\n });\n\n function adjustToMin(element) {\n var isLast = element.i === pairs.length;\n var pair = isLast ? pairs[element.i - 1] : pairs[element.i];\n\n calculateSizes.call(pair);\n\n var size = isLast\n ? pair.size - element.minSize - pair[bGutterSize]\n : element.minSize + pair[aGutterSize];\n\n adjust.call(pair, size);\n }\n\n elements.forEach(function (element) {\n var computedSize = element.element[getBoundingClientRect]()[dimension];\n\n if (computedSize < element.minSize) {\n if (expandToMin) {\n adjustToMin(element);\n } else {\n // eslint-disable-next-line no-param-reassign\n element.minSize = computedSize;\n }\n }\n });\n\n function setSizes(newSizes) {\n var trimmed = trimToMin(newSizes);\n trimmed.forEach(function (newSize, i) {\n if (i > 0) {\n var pair = pairs[i - 1];\n\n var a = elements[pair.a];\n var b = elements[pair.b];\n\n a.size = trimmed[i - 1];\n b.size = newSize;\n\n setElementSize(a.element, a.size, pair[aGutterSize], a.i);\n setElementSize(b.element, b.size, pair[bGutterSize], b.i);\n }\n });\n }\n\n function destroy(preserveStyles, preserveGutter) {\n pairs.forEach(function (pair) {\n if (preserveGutter !== true) {\n pair.parent.removeChild(pair.gutter);\n } else {\n pair.gutter[removeEventListener](\n 'mousedown',\n pair[gutterStartDragging]\n );\n pair.gutter[removeEventListener](\n 'touchstart',\n pair[gutterStartDragging]\n );\n }\n\n if (preserveStyles !== true) {\n var style = elementStyle(\n dimension,\n pair.a.size,\n pair[aGutterSize]\n );\n\n Object.keys(style).forEach(function (prop) {\n elements[pair.a].element.style[prop] = '';\n elements[pair.b].element.style[prop] = '';\n });\n }\n });\n }\n\n return {\n setSizes: setSizes,\n getSizes: getSizes,\n collapse: function collapse(i) {\n adjustToMin(elements[i]);\n },\n destroy: destroy,\n parent: parent,\n pairs: pairs,\n }\n};\n\nexport default Split;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport split from 'split.js';\n\nimport './FlexSplitPane.scss';\n\nconst b = cn('flex-split');\n\nclass FlexSplitPane extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n paneClassNames: PropTypes.array,\n direction: PropTypes.string,\n minSize: PropTypes.number,\n children: PropTypes.node,\n getInitialSizes: PropTypes.func,\n onResize: PropTypes.func,\n onResizeEnd: PropTypes.func,\n onSplit: PropTypes.func,\n onUnSplit: PropTypes.func,\n id: PropTypes.string,\n };\n\n static defaultProps = {\n onSplit: null,\n onUnSplit: null,\n };\n\n static VERTICAL = 'vertical';\n static HORIZONTAL = 'horizontal';\n\n componentDidMount() {\n this.checkSplit();\n }\n\n componentDidUpdate() {\n this.checkSplit();\n }\n\n componentWillUnmount() {\n this.destroySplit();\n }\n\n _ref = (node) => {\n this.pane = node;\n };\n _refFirst = (node) => {\n this.paneFirst = node;\n };\n _refSecond = (node) => {\n this.paneSecond = node;\n };\n\n checkSplit() {\n if (\n this.paneFirst &&\n this.paneSecond &&\n this.paneFirst.children.length &&\n this.paneSecond.children.length\n ) {\n this.split();\n } else {\n this.destroySplit();\n }\n }\n\n getInitialSizes() {\n const {getInitialSizes} = this.props;\n if (typeof getInitialSizes !== 'function') {\n return undefined;\n }\n const sizes = getInitialSizes();\n if (\n Array.isArray(sizes) &&\n Math.abs(sizes.reduce((acc, size) => acc + size, 0) - 100) < 1\n ) {\n return sizes;\n }\n return undefined;\n }\n\n split() {\n const {direction, minSize, onSplit} = this.props;\n\n if (!this.splitInstance) {\n this.splitInstance = split([this.paneFirst, this.paneSecond], {\n direction,\n sizes: this.getInitialSizes(),\n minSize,\n snapOffset: 0,\n elementStyle: function (dimension, size, gutterSize) {\n return {\n 'flex-basis': `calc(${size}% - ${gutterSize}px)`,\n };\n },\n gutterStyle: function (dimension, gutterSize) {\n return {\n 'flex-basis': `${gutterSize}px`,\n };\n },\n onDrag: this.props.onResize,\n onDragEnd: () => {\n if (typeof this.props.onResizeEnd === 'function') {\n this.props.onResizeEnd(this.splitInstance.getSizes());\n }\n },\n });\n\n if (typeof onSplit === 'function') {\n onSplit();\n }\n }\n }\n\n destroySplit() {\n const {onUnSplit} = this.props;\n\n if (this.splitInstance) {\n this.splitInstance.destroy();\n this.splitInstance = null;\n\n if (typeof onUnSplit === 'function') {\n onUnSplit();\n }\n }\n }\n\n render() {\n const {direction, id, paneClassNames = []} = this.props;\n const [firstChild, ...restChildren] = this.props.children;\n return (\n <div ref={this._ref} className={b({direction}, this.props.className)}>\n <div ref={this._refFirst} className={b('pane', paneClassNames[0])}>\n {firstChild}\n </div>\n <div className={b('pane', paneClassNames[1])} ref={this._refSecond} id={id}>\n {restChildren}\n </div>\n </div>\n );\n }\n}\n\nexport default FlexSplitPane;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {Link} from '@gravity-ui/uikit';\nimport {uiSettings} from '../../config/ui-settings';\n\nconst {trackerBaseUrl} = uiSettings;\n\nconst HREF_RE = /(https?:\\/\\/\\S+[^?.,!\\s]|\\[A-Z\\]{2,}-\\d+)/;\nconst STARTREK_KEY_RE = /^[A-Z]{2,}-\\d+$/;\n\nconst getUrl = (text: string) => {\n if (trackerBaseUrl && STARTREK_KEY_RE.test(text)) {\n return `${trackerBaseUrl}/${text}`;\n }\n return text;\n};\n\ninterface Props {\n className?: string;\n text: string;\n}\n\nexport class Linkify extends React.PureComponent<Props> {\n static propTypes = {\n className: PropTypes.string,\n text: PropTypes.string.isRequired,\n };\n\n static renderText(text = '', re: RegExp) {\n const parts = String(text).split(re);\n const res: Array<React.ReactNode> = parts.slice();\n for (let i = 1; i < parts.length; i += 2) {\n const url = getUrl(parts[i]);\n res[i] = (\n <Link key={i} target=\"_blank\" href={url}>\n {parts[i]}\n </Link>\n );\n }\n return res;\n }\n\n render() {\n const {text, className} = this.props;\n return <span className={className}>{Linkify.renderText(text, HREF_RE)}</span>;\n }\n}\n","import {SubjectGroupType} from '../../utils/acl';\nimport UIFactory from '../../UIFactory';\n\nexport type SubjectCardProps = {\n className?: string;\n noLink?: boolean;\n showIcon?: boolean;\n\n internal?: boolean;\n url?: string;\n\n name: string | number;\n type?: 'user' | 'group' | 'tvm';\n groupType?: SubjectGroupType;\n};\n\nexport function SubjectCard(props: SubjectCardProps) {\n return UIFactory.renderSubjectCard(props);\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {useSelector} from 'react-redux';\nimport {useRouteMatch} from 'react-router';\nimport {getPagesInfoMapById} from '../../../store/selectors/slideoutMenu';\n\nimport Link from '../../../components/Link/Link';\nimport {getCluster} from '../../../store/selectors/global';\nimport {makeRoutedURL} from '../../../store/location';\nimport {Page} from '../../../../shared/constants/settings';\n\nimport './SectionName.scss';\nconst block = cn('top-row-section');\n\ninterface Props {\n page: string;\n name?: string;\n className?: string;\n children?: React.ReactNode;\n urlParams?: object;\n showSplitter?: boolean;\n}\n\nconst other: Record<string, {name: string}> = {\n [Page.CHAOS_CELL_BUNDLES]: {name: 'Bundles'},\n};\n\nexport function RowWithName({page, name, className, children, showSplitter, urlParams}: Props) {\n const cluster = useSelector(getCluster);\n const info = useSelector(getPagesInfoMapById)[page] || other[page];\n const title = name || info?.name;\n const url = makeRoutedURL(`/${cluster}/${page}`, urlParams);\n return (\n <div className={block(null, className)}>\n {title && (\n <h1 className={block('name')}>\n <Link routed theme={'primary'} url={url}>\n {title}\n </Link>\n </h1>\n )}\n {showSplitter && <div className={block('spacer')} />}\n {children}\n </div>\n );\n}\n\nconst RowWithNameMemo = React.memo(RowWithName);\n\nexport default function SectionName({\n className,\n children,\n}: {\n className?: string;\n children: React.ReactNode;\n}) {\n const {\n params: {page},\n } = useRouteMatch<{page: string}>();\n\n return (\n <RowWithNameMemo className={className} page={page}>\n {children}\n </RowWithNameMemo>\n );\n}\n","import cn from 'bem-cn-lite';\nimport YT from '../../config/yt-config';\n\nimport './ClusterColor.scss';\nconst clusterColorBlock = cn('cluster-color');\n\nexport function useClusterColorClassName(cluster?: string) {\n const {theme} = YT.clusters[cluster ?? ''] || {};\n return clusterColorBlock({theme});\n}\n","import React, {FC} from 'react';\nimport './HeadSpacer.scss';\nimport cn from 'bem-cn-lite';\n\nconst block = cn('yt-head-spacer');\n\nexport const HeadSpacer: FC = () => {\n return <div className={block()} />;\n};\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nexport const BanPageLazy = withLazyLoading(\n React.lazy(() => import(/* webpackChunkName: \"ban-page\" */ './BanPage')),\n);\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nfunction importComponents() {\n return import(/* webpackChunkName: \"components\" */ './Components');\n}\n\nexport const ComponentsLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importComponents()).Components};\n }),\n);\n\nexport const ComponentsTopRowLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importComponents()).ComponentsTopRow};\n }),\n '',\n);\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nexport const OperationsLazy = withLazyLoading(\n React.lazy(async () => import(/* webpackChunkName: \"operations\" */ './Operations/Operations')),\n);\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nfunction importPage() {\n return import(/* webpackChunkName: \"accounts\" */ './index');\n}\n\nexport const AccountsLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).Accounts};\n }),\n);\n\nexport const AccountsTopRowLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).AccountsTopRowContent};\n }),\n '',\n);\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nfunction importPage() {\n return import(/* webpackChunkName: \"dashboard\" */ './index');\n}\n\nexport const DashboardLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).Dashboard};\n }),\n);\n\nexport const DashboardTopRowLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).DashboardTopRow};\n }),\n '',\n);\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nfunction importPage() {\n return import(/* webpackChunkName: \"system\" */ './index');\n}\n\nexport const SystemLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).System};\n }),\n);\n\nexport const SystemTopRowLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).SystemTopRow};\n }),\n '',\n);\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nfunction importPage() {\n return import(/* webpackChunkName: \"navigation\" */ './index');\n}\n\nexport const NavigationLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).Navigation};\n }),\n);\n\nexport const NavigationTopRowLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).NavigationTopRow};\n }),\n '',\n);\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nexport const PathViewerLazy = withLazyLoading(\n React.lazy(async () => await import(/* webpackChunkName: \"path-viewer\" */ './PathViewer')),\n);\n","import React from 'react';\n\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nfunction importPage() {\n return import(/* webpackChunkName: \"tablet\" */ './index');\n}\n\nexport const TabletLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).Tablet};\n }),\n);\n\nexport const TabletTopRowLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).TabletTopRow};\n }),\n '',\n);\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nfunction importPage() {\n return import(/* webpackChunkName: \"bundles\" */ './index');\n}\n\nexport const TabletCellBundlesLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).TabletCellBundles};\n }),\n);\n\nexport const TabletCellBundlesTopRowLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).TabletCellBundlesTopRow};\n }),\n);\n\nexport const ChaosCellBundlesTopRowLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).ChaosCellBundlesTopRow};\n }),\n '',\n);\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nfunction importPage() {\n return import(/* webpackChunkName: \"groups\" */ './index');\n}\n\nexport const GroupsPageLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).GroupsPage};\n }),\n);\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nfunction importPage() {\n return import(/* webpackChunkName: \"users\" */ './index');\n}\n\nexport const UsersPageLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).UsersPage};\n }),\n);\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nfunction importPage() {\n return import(/* webpackChunkName: \"scheduling\" */ './index');\n}\n\nexport const SchedulingLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).Scheduling};\n }),\n);\n\nexport const SchedulingTopRowLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).SchedulingTopRow};\n }),\n '',\n);\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nfunction importQT() {\n return import(/* webpackChunkName: \"query-tracker\" */ './index');\n}\n\nexport const QueryTrackerLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importQT()).QueryTracker};\n }),\n);\n\nexport const QueryTrackerTopRowLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importQT()).QueryTrackerTopRow};\n }),\n '',\n);\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nexport const JobLazy = withLazyLoading(\n React.lazy(async () => import(/* webpackChunkName: \"job\" */ './Job')),\n);\n","import React from 'react';\n\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nfunction importPage() {\n return import(/* webpackChunkName: \"chyt\" */ './index');\n}\n\nexport const ChytPageLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).ChytPage};\n }),\n);\n\nexport const ChytPageTopRowLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).ChytPageTopRow};\n }),\n '',\n);\n","import React from 'react';\n\nimport {useSelector} from 'react-redux';\n\nimport {getGlobalLoadState} from '../../../store/selectors/global';\nimport {isQueryTrackerAllowed} from '../../../store/selectors/global/experimental-pages';\n\nimport {LOADING_STATUS, Page} from '../../../constants/index';\nimport {Route, Switch} from 'react-router';\nimport SectionName from './SectionName';\nimport {TabletTopRowLazy} from '../../../pages/tablet/lazy';\nimport {\n ChaosCellBundlesTopRowLazy,\n TabletCellBundlesTopRowLazy,\n} from '../../../pages/tablet_cell_bundles/lazy';\nimport {AccountsTopRowLazy} from '../../../pages/accounts/lazy';\nimport {SchedulingTopRowLazy} from '../../../pages/scheduling/lazy';\nimport {NavigationTopRowLazy} from '../../../pages/navigation/lazy';\nimport {SystemTopRowLazy} from '../../../pages/system/lazy';\nimport {DashboardTopRowLazy} from '../../../pages/dashboard/lazy';\nimport {ComponentsTopRowLazy} from '../../../pages/components/lazy';\nimport {makeExtraPageTopRowRoutes} from '../../../containers/ClusterPage/ExtraClusterPageRoutes';\n\nimport {odinPageInfo} from '../../../pages/odin/lazy';\nimport {hasOdinPage} from '../../../config';\nimport withLazyLoading from '../../../hocs/withLazyLoading';\n\nimport {ChytPageTopRowLazy} from '../../../pages/chyt/lazy';\nimport {QueryTrackerTopRowLazy} from '../../../pages/query-tracker/lazy';\n\nexport default function TopRowContent() {\n const loadState = useSelector(getGlobalLoadState);\n const allowQT = useSelector(isQueryTrackerAllowed);\n\n return loadState !== LOADING_STATUS.LOADED ? null : (\n <Switch>\n <Route path={`/:cluster/${Page.SYSTEM}`} component={SystemTopRowLazy} />\n <Route path={`/:cluster/${Page.NAVIGATION}`} component={NavigationTopRowLazy} />\n <Route path={`/:cluster/${Page.SCHEDULING}`} component={SchedulingTopRowLazy} />\n <Route path={`/:cluster/${Page.ACCOUNTS}`} component={AccountsTopRowLazy} />\n <Route path={`/:cluster/${Page.TABLET}/:id`} component={TabletTopRowLazy} />\n <Route\n path={`/:cluster/${Page.TABLET_CELL_BUNDLES}`}\n component={TabletCellBundlesTopRowLazy}\n />\n <Route\n path={`/:cluster/${Page.CHAOS_CELL_BUNDLES}`}\n component={ChaosCellBundlesTopRowLazy}\n />\n <Route path={`/:cluster/${Page.DASHBOARD}`} component={DashboardTopRowLazy} />\n <Route path={`/:cluster/${Page.COMPONENTS}`} component={ComponentsTopRowLazy} />\n <Route path={`/:cluster/${Page.CHYT}`} component={ChytPageTopRowLazy} />\n {allowQT && (\n <Route\n path={`/:cluster/${Page.QUERIES}`}\n component={withLazyLoading(QueryTrackerTopRowLazy)}\n />\n )}\n {hasOdinPage() && (\n <Route\n path={`/:cluster/${odinPageInfo.pageId}`}\n component={odinPageInfo.topRowComponent}\n />\n )}\n {makeExtraPageTopRowRoutes()}\n <Route path={'/:cluster/:page'} component={SectionName} />\n </Switch>\n );\n}\n","import React from 'react';\nimport {Route} from 'react-router';\nimport UIFactory from '../../UIFactory';\n\nexport function makeExtraPageRoutes() {\n const res: Array<React.ReactNode> = [];\n UIFactory.getExtaClusterPages().forEach(({pageId, reactComponent}, index) => {\n res.push(<Route key={index} path={`/:cluster/${pageId}`} component={reactComponent} />);\n });\n return res;\n}\n\nexport function makeExtraPageTopRowRoutes() {\n const res: Array<React.ReactNode> = [];\n UIFactory.getExtaClusterPages().forEach(({pageId, topRowComponent}, index) => {\n if (topRowComponent) {\n res.push(\n <Route key={index} path={`/:cluster/${pageId}`} component={topRowComponent} />,\n );\n }\n });\n return res;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport filter_ from 'lodash/filter';\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\nimport some_ from 'lodash/some';\n\nimport {TextInput} from '@gravity-ui/uikit';\n\nimport {getGroupedClusters} from '../../config/yt-config';\nimport {getClusterAppearance} from '../../appearance';\nimport ClusterIcon from '../../components/ClusterIcon/ClusterIcon';\nimport {CLUSTER_GROUPS, CLUSTER_GROUPS_ORDER, DEFAULT_GROUP} from '../../constants/cluster-menu';\n\nimport {useSelector} from 'react-redux';\nimport {getRecentClustersInfo} from '../../store/selectors/slideoutMenu';\nimport {isRecentClustersFirst} from '../../store/selectors/settings';\nimport {useClusterColorClassName} from './ClusterColor';\nimport {ClusterConfig} from '../../../shared/yt-types';\nimport Link from '../../components/Link/Link';\nimport Icon from '../../components/Icon/Icon';\nimport {getCluster} from '../../store/selectors/global';\n\nimport './ClustersPanel.scss';\n\nconst block = cn('clusters-panel');\n\ninterface Props {\n className: string;\n onSelectCluster: (cluster: string) => void;\n}\n\nfunction f(e: React.MouseEvent) {\n e.stopPropagation();\n e.preventDefault();\n}\n\nexport default function ClustersPanel({className, onSelectCluster}: Props) {\n const [filter, setFilter] = React.useState('');\n\n const onChange = React.useCallback(\n (value: string) => {\n setFilter(value);\n },\n [setFilter],\n );\n\n const onClusterClick = React.useCallback(\n (cluster: string) => {\n onSelectCluster(cluster);\n },\n [onSelectCluster],\n );\n\n const onRef = React.useCallback((input: HTMLInputElement | null) => {\n input?.focus();\n }, []);\n\n const lowerFilter = filter?.toLowerCase() || '';\n\n const recentInfo = useSelector(getRecentClustersInfo);\n const showRecent = useSelector(isRecentClustersFirst);\n const groups = React.useMemo(() => {\n const {recent, rest} = recentInfo;\n if (showRecent && (recent?.length || rest?.length)) {\n return getFilteredClusterGroups(lowerFilter, {\n recent,\n [DEFAULT_GROUP]: rest,\n });\n } else {\n const allGroups = getGroupedClusters();\n return getFilteredClusterGroups(lowerFilter, allGroups);\n }\n }, [lowerFilter, showRecent, recentInfo]);\n\n const handleKey = React.useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n let firstItem: ClusterConfig | undefined;\n\n if (event.key !== 'Enter') {\n return;\n }\n\n const groupKeys = [...CLUSTER_GROUPS_ORDER];\n\n some_(groupKeys, (key) => {\n if (groups[key] && groups[key].length) {\n firstItem = groups[key][0];\n return true;\n }\n return false;\n });\n\n if (!firstItem) {\n return;\n }\n\n onClusterClick(firstItem.id);\n },\n [groups, onClusterClick],\n );\n\n const currentCluster = useSelector(getCluster);\n const {pathname, search} = window.location;\n let clusterState = '';\n if (currentCluster && pathname.startsWith(`/${currentCluster}/`)) {\n clusterState = pathname.substr(currentCluster.length + 1) + search;\n }\n\n return (\n <div className={block(null, className)} onClick={f}>\n <div className={block('input')}>\n <TextInput\n controlRef={onRef}\n onKeyDown={handleKey}\n placeholder={'Cluster search'}\n onUpdate={onChange}\n value={filter}\n autoFocus\n />\n </div>\n <div className={block('groups')}>\n {isEmpty_(groups) ? (\n <div className={block('no-items')}>No matching clusters</div>\n ) : (\n map_(CLUSTER_GROUPS, ({caption}, key) => {\n if (!groups[key]) {\n return null;\n }\n return (\n <ClusterGroup\n key={key}\n name={caption}\n items={groups[key]}\n onClusterClick={onClusterClick}\n clusterState={clusterState}\n />\n );\n })\n )}\n </div>\n </div>\n );\n}\n\ninterface ClusterGroupProps {\n name: string;\n items: Array<ClusterConfig>;\n\n clusterState?: string;\n onClusterClick?: (cluster: string) => void;\n}\n\nfunction ClusterGroup(props: ClusterGroupProps) {\n const {name, items, onClusterClick, clusterState} = props;\n\n return !items.length ? null : (\n <div className={block('group')}>\n <div className={block('group-name')}>{name}</div>\n {map_(items, (item) => {\n return (\n <ClusterGroupItem\n key={item.id}\n className={block('group-item')}\n onClick={onClusterClick}\n {...item}\n clusterState={clusterState}\n />\n );\n })}\n </div>\n );\n}\n\ninterface ClusterInfoProps extends ClusterConfig {\n className?: string;\n onClick?: (cluster: string) => void;\n forwardImageRef?: React.RefObject<HTMLElement>;\n}\n\nconst SHORT_ENV = {\n production: 'prod',\n testing: 'test',\n development: 'dev',\n prestable: 'pre',\n localmode: undefined,\n};\n\nexport function ClusterGroupItem(\n props: ClusterInfoProps & {\n shortEnv?: boolean;\n clusterState?: string;\n },\n) {\n const {\n forwardImageRef,\n className,\n id,\n name,\n environment,\n onClick = () => {},\n shortEnv,\n clusterState,\n } = props;\n\n const allowLink = !shortEnv;\n\n const handleClick = React.useCallback(() => {\n onClick(id);\n }, [onClick, id]);\n\n return (\n <div className={block('cluster', className)} onClick={handleClick}>\n <ClusterImage cluster={id} name={name} forwardRef={forwardImageRef} />\n <div className={block('cluster-name')}>{name}</div>\n <div className={block('cluster-env')}>\n {shortEnv ? SHORT_ENV[environment] : environment}\n </div>\n {allowLink && (\n <Link\n className={block('link')}\n url={`${location.origin}/${id}${clusterState || ''}`}\n onClick={(e) => {\n e.stopPropagation();\n }}\n >\n <Icon awesome={'external-link'} />\n </Link>\n )}\n </div>\n );\n}\n\nexport function ClusterImage(props: {\n cluster: string;\n name: string;\n forwardRef?: React.RefObject<HTMLElement>;\n}) {\n const {cluster, name, forwardRef} = props;\n const clusterAppearance = getClusterAppearance(cluster);\n const clusterColorClassName = useClusterColorClassName(cluster);\n\n return (\n <ClusterIcon\n className={block('cluster-image', clusterColorClassName)}\n icon={clusterAppearance.icon2x}\n name={name}\n forwardRef={forwardRef as React.RefObject<HTMLImageElement>}\n />\n );\n}\n\nfunction getFilteredClusterGroups(filter: string, groups: Record<string, Array<ClusterConfig>>) {\n if (!filter) {\n return groups;\n }\n\n const res = reduce_(\n groups,\n (acc, items, key) => {\n const filtered = !filter\n ? items\n : filter_(items, (item) => {\n const {name, environment} = item;\n return (\n name.toLowerCase().indexOf(filter) !== -1 ||\n environment.toLowerCase().indexOf(filter) !== -1\n );\n });\n if (filtered.length) {\n acc[key] = filtered;\n }\n return acc;\n },\n {} as typeof groups,\n );\n return res;\n}\n","import React, {FC, useCallback} from 'react';\nimport ClustersPanel, {ClusterGroupItem} from './ClustersPanel';\nimport Icon from '../../components/Icon/Icon';\nimport {ClusterConfig} from '../../../shared/yt-types';\nimport cn from 'bem-cn-lite';\nimport './ClusterPageHeader.scss';\nimport {Popup} from '@gravity-ui/uikit';\nimport {makeClusterUrl} from './helpers/makeClusterUrl';\nimport {getAppBrowserHistory} from '../../store/window-store';\n\nconst block = cn('cluster-page-header');\n\ntype Props = {\n cluster: string;\n clusterConfig: ClusterConfig;\n};\n\nexport const ClusterPicker: FC<Props> = ({clusterConfig}) => {\n const [visible, setVisible] = React.useState(false);\n\n const toggleVisibility = useCallback(() => {\n setVisible((prevState) => !prevState);\n }, [setVisible]);\n\n const handleClosePopup = useCallback(() => {\n setVisible(false);\n }, [setVisible]);\n\n const handleSelectCluster = useCallback(\n (cluster: string) => {\n const url = makeClusterUrl(cluster);\n if (url) {\n getAppBrowserHistory().push(url);\n }\n handleClosePopup();\n },\n [handleClosePopup],\n );\n\n const iconRef = React.useRef<HTMLDivElement>(null);\n\n return (\n <div className={block('cluster')} onClick={toggleVisibility}>\n <ClusterGroupItem forwardImageRef={iconRef} {...clusterConfig} shortEnv />\n <Icon awesome={'chevron-down'} size=\"l\" />\n <Popup\n className={block('popup')}\n placement={['bottom-start', 'top-start']}\n anchorRef={iconRef}\n open={visible}\n onClose={handleClosePopup}\n offset={[0, 5]}\n >\n {visible && (\n <ClustersPanel\n className={block('popup-content')}\n onSelectCluster={handleSelectCluster}\n />\n )}\n </Popup>\n </div>\n );\n};\n","import {makeRoutedURL} from '../../../store/location';\n\nexport const makeClusterUrl = (cluster: string): string | null => {\n const oldUrl = makeRoutedURL(window.location.pathname);\n const [empty, oldCluster, ...rest] = oldUrl.split('/');\n if (oldCluster === cluster) {\n return null;\n }\n\n return [empty, cluster, ...rest].join('/');\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {connect, useDispatch} from 'react-redux';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\n\nimport {addNavigationBlocker, removeNavigationBlocker} from '../store/actions/global';\nimport {getDisplayName} from '../utils';\n\nexport default function withBlockedNavigation(Component) {\n const ResComponent = class WithBlockedNavigation extends React.Component {\n static propTypes = {\n addNavigationBlocker: PropTypes.func.isRequired,\n removeNavigationBlocker: PropTypes.func.isRequired,\n };\n\n static displayName = `WithBlockedNavigation(${getDisplayName(Component)})`;\n\n render() {\n return (\n <React.Fragment>\n <BlockNavigation />\n <Component {...this.props} />\n </React.Fragment>\n );\n }\n };\n\n // https://reactjs.org/docs/higher-order-components.html#static-methods-must-be-copied-over\n hoistNonReactStatics(ResComponent, Component);\n\n return connect(null, {addNavigationBlocker, removeNavigationBlocker})(ResComponent);\n}\n\nexport function BlockNavigation() {\n const dispatch = useDispatch();\n\n React.useEffect(() => {\n dispatch(addNavigationBlocker());\n return () => {\n dispatch(removeNavigationBlocker());\n };\n });\n\n return null;\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\nimport moment from 'moment';\n\n// @ts-ignore\nimport hammer from '@ytsaurus/interface-helpers/lib/hammer';\n\nimport {SubjectCard} from '../../components/SubjectLink/SubjectLink';\nimport {BlockNavigation} from '../../hocs/withBlockedNavigation';\nimport Icon from '../../components/Icon/Icon';\nimport Button from '../../components/Button/Button';\nimport {Linkify} from '../../components/Linkify/Linkify';\nimport {uiSettings} from '../../config/ui-settings';\n\nimport './MaintenancePage.scss';\n\nconst b = block('maintenance');\n\nconst EVENT_TYPE = {\n ISSUE: 'issue',\n MAINTENANCE: 'maintenance',\n};\n\ntype Props = {\n cluster: string;\n onProceed: () => void;\n maintenancePageEvent: {\n type: string;\n startTime: string;\n finishTime: string;\n severity: string;\n title: string;\n description: string;\n createdBy: string;\n };\n};\n\nexport class MaintenancePage extends React.Component<Props> {\n get title() {\n const {type} = this.props.maintenancePageEvent;\n\n switch (type) {\n case 'maintenance':\n return 'Maintenance is under way';\n case 'issue':\n return 'Cluster experiences problems';\n default:\n return 'Oops! Something went wrong';\n }\n }\n\n renderTimeLine(notification: Props['maintenancePageEvent']) {\n const {startTime, finishTime} = notification;\n\n if ([EVENT_TYPE.ISSUE, EVENT_TYPE.MAINTENANCE].indexOf(notification.type) > -1) {\n const finishTimeString = finishTime && moment(finishTime).format('D MMM YYYY H:mm');\n const startTimeString = moment(startTime).format('D MMM YYYY H:mm');\n\n return finishTimeString ? (\n <p className={b('time-line')}>\n <time>{startTimeString}</time>\n &mdash;\n <time>{finishTimeString}</time>\n </p>\n ) : (\n <p className={b('time-line')}>\n <time>{startTimeString}</time>\n </p>\n );\n }\n\n return null;\n }\n\n render() {\n const {maintenancePageEvent, onProceed} = this.props;\n if (!maintenancePageEvent) {\n return null;\n }\n\n const {severity, title, description, createdBy} = maintenancePageEvent;\n\n const {announcesMailListUrl} = uiSettings;\n\n return (\n <div className={b()}>\n <BlockNavigation />\n <div className={b('content')}>\n <div className={b('info')}>\n <h2 className={b('title')}>{this.title}</h2>\n\n <div className={b('severity', {type: severity})}>\n <Icon awesome=\"exclamation-triangle\" />\n <span>{hammer.format['Readable'](severity)}</span>\n </div>\n\n <h3 className={b('user-title')}>{title}</h3>\n\n <div className={b('user-description')}>\n <Linkify text={description} />\n </div>\n\n {this.renderTimeLine(maintenancePageEvent)}\n\n <SubjectCard className={b('author')} name={createdBy} />\n\n <ul className={b('links')}>\n {announcesMailListUrl && (\n <li className={b('link')}>\n <Button\n href={announcesMailListUrl}\n target=\"_blank\"\n view=\"action\"\n size=\"m\"\n >\n Subscribe to YT announces\n </Button>\n </li>\n )}\n\n <li className={b('link')}>\n <Button size=\"m\" onClick={onProceed}>\n Proceed to cluster anyway\n </Button>\n </li>\n </ul>\n </div>\n\n <div className={b('illustration')}></div>\n </div>\n </div>\n );\n }\n}\n","import Cookies from 'js-cookie';\nimport moment from 'moment';\n\nconst getCookiesClusterName = (cluster: string) => `override_${cluster}_maintenance`;\n\nexport function setMaintenanceIgnored(cluster: string) {\n const name = getCookiesClusterName(cluster);\n\n Cookies.set(name, cluster, {\n expires: moment().add(3, 'hours').toDate(),\n });\n}\n\nexport function isMaintenanceIgnored(cluster: string) {\n const name = getCookiesClusterName(cluster);\n\n return Cookies.get(name) === cluster;\n}\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport {MaintenancePage} from '../../containers/MaintenancePage/MaintenancePage';\nimport {RootState} from '../../store/reducers';\nimport {isMaintenanceIgnored, setMaintenanceIgnored} from '../../utils/maintenance';\n\ntype Props = {\n cluster: string;\n children: React.ReactNode;\n maintenanceContent?: React.ReactNode;\n};\n\ntype ReduxProps = ConnectedProps<typeof connector>;\n\nclass HandleMaintenance extends React.Component<Props & ReduxProps> {\n render() {\n const {cluster, maintenancePageEvent, maintenanceContent, children} = this.props;\n\n if (maintenancePageEvent) {\n const isIgnored = isMaintenanceIgnored(cluster);\n\n if (!isIgnored) {\n return maintenanceContent !== undefined ? (\n maintenanceContent\n ) : (\n <MaintenancePage\n cluster={cluster}\n maintenancePageEvent={maintenancePageEvent}\n onProceed={() => {\n setMaintenanceIgnored(cluster);\n this.forceUpdate();\n }}\n />\n );\n }\n }\n\n return children;\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {maintenancePageEvent, eventsFirstUpdate} = state.global;\n\n return {maintenancePageEvent, eventsFirstUpdate};\n};\n\nconst connector = connect(mapStateToProps);\n\nexport default connector(HandleMaintenance);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport TopRowContent from '../AppNavigation/TopRowContent/TopRowContent';\nimport './ClusterPageHeader.scss';\nimport {ClusterPicker} from './ClusterPicker';\nimport {HeadSpacer} from './HeadSpacer';\nimport {getClusterConfigByName} from '../../store/selectors/global';\nimport HandleMaintenance from '../../containers/MaintenancePage/HandleMaintenance';\n\nconst block = cn('cluster-page-header');\n\nfunction ClusterPageHeader({cluster}: {cluster: string}) {\n const clusterConfig = getClusterConfigByName(cluster);\n\n return (\n <div className={block()}>\n <ClusterPicker cluster={cluster} clusterConfig={clusterConfig} />\n <HeadSpacer />\n <HandleMaintenance cluster={cluster} maintenanceContent={null}>\n <TopRowContent />\n </HandleMaintenance>\n </div>\n );\n}\n\nexport default React.memo(ClusterPageHeader);\n","import moment from 'moment';\n\nimport {JOIN_MENU_ITEMS, SPLIT_MENU_ITEMS} from '../../constants/index';\nimport {mergeScreen, updateTitle} from '../../store/actions/global';\nimport {setSetting} from '../../store/actions/settings';\nimport {\n getKnownPages,\n getRecentClustersInfo,\n getRecentPagesInfo,\n} from '../../store/selectors/slideoutMenu';\nimport metrics from '../../common/utils/metrics';\nimport {NAMESPACES, SettingName} from '../../../shared/constants/settings';\nimport {getClusterNS, getLastVisitedTabs} from '../../store/selectors/settings';\nimport {getPath} from '../../../shared/utils/settings';\nimport {getCluster, getCurrentUserName} from '../../store/selectors/global';\n\nfunction getNSName(itemName) {\n return {\n cluster: NAMESPACES.LAST_VISITED_CLUSTER,\n page: NAMESPACES.LAST_VISITED_PAGE,\n }[itemName];\n}\n\nfunction getLastVisitedSettingName(itemName, id) {\n const nsName = getNSName(itemName);\n return getPath(id, nsName);\n}\n\nexport function splitMenuItemsAction(itemName) {\n const collectionName = itemName + 's';\n return (dispatch, getState) => {\n const state = getState();\n const clusters = getRecentClustersInfo(state);\n const pages = getRecentPagesInfo(state);\n const {\n settings: {data},\n } = getState();\n dispatch({\n type: SPLIT_MENU_ITEMS,\n data: {\n collectionName,\n items: collectionName === 'pages' ? pages.all : clusters.all,\n getLastVisitedSetting: (item) => getLastVisitedSettingName(itemName, item.id),\n settings: data,\n currentTime: moment().unix(),\n },\n });\n };\n}\n\nexport function joinMenuItemsAction(collectionName) {\n return {\n type: JOIN_MENU_ITEMS,\n data: collectionName,\n };\n}\n\nexport function trackVisit(itemName, id) {\n return (dispatch) => {\n const ns = getNSName(itemName);\n const currentTime = moment().unix();\n\n dispatch(setSetting(id, ns, currentTime));\n dispatch(splitMenuItemsAction(itemName));\n };\n}\n\nexport function trackPageVisit(page) {\n return (dispatch, getState) => {\n const state = getState();\n const cluster = getCluster(state);\n const login = getCurrentUserName(state);\n const known = getKnownPages(state);\n dispatch(trackVisit('page', page));\n dispatch(updateTitle({page: known[page]}));\n\n dispatch(mergeScreen());\n\n window.setTimeout(() => {\n metrics.countHit({page, cluster, login});\n }, 200);\n };\n}\n\nexport function trackTabVisit(page, tab) {\n return (dispatch, getState) => {\n const state = getState();\n const clusterNS = getClusterNS(state);\n const lastVisitedTabs = getLastVisitedTabs(state);\n const newLastVisitedTabs = {...lastVisitedTabs, [page]: tab};\n\n dispatch(setSetting(SettingName.LOCAL.LAST_VISITED_TAB, clusterNS, newLastVisitedTabs));\n\n // add metrics there\n };\n}\n","import {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\n\nimport {trackPageVisit, trackTabVisit} from '../../store/actions/menu';\n\nclass PageTracker extends Component {\n static propTypes = {\n match: PropTypes.shape({\n params: PropTypes.object,\n }),\n trackTabVisit: PropTypes.func.isRequired,\n trackPageVisit: PropTypes.func.isRequired,\n };\n\n componentDidMount() {\n const {match, trackPageVisit, trackTabVisit} = this.props;\n\n const page = this.getPage(match);\n const tab = this.getTab(match);\n trackPageVisit(page);\n if (tab) {\n trackTabVisit(page, tab);\n }\n }\n\n componentDidUpdate(prevProps) {\n const {match, trackPageVisit, trackTabVisit} = this.props;\n\n const currentPage = this.getPage(match);\n const prevPage = this.getPage(prevProps.match);\n\n const currentTab = this.getTab(match);\n const prevTab = this.getTab(prevProps.match);\n\n if (prevPage !== currentPage) {\n trackPageVisit(currentPage);\n }\n\n if (currentTab && prevTab !== currentTab) {\n trackTabVisit(currentPage, currentTab);\n }\n }\n\n getPage = (match) => match.params.page;\n getTab = (match) => match.params.tab;\n render = () => null;\n}\n\nconst mapDispatchToProps = {\n trackPageVisit,\n trackTabVisit,\n};\n\nexport default connect(null, mapDispatchToProps)(PageTracker);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport block from 'bem-cn-lite';\n\nimport withBlockedNavigation from '../../hocs/withBlockedNavigation';\nimport {getGlobalError, getGlobalErrorType} from '../../store/selectors/global';\nimport {showErrorPopup} from '../../utils/utils';\nimport UIFactory from '../../UIFactory';\nimport {ClickableText} from '../../components/ClickableText/ClickableText';\nimport {PRELOAD_ERROR} from '../../constants';\nimport {useClusterFromLocation} from '../../hooks/use-cluster';\n\nimport './PreloadError.scss';\n\nconst b = block('yt-preload-error');\n\nfunction PreloadError() {\n const cluster = useClusterFromLocation();\n const error = useSelector(getGlobalError);\n const errorType = useSelector(getGlobalErrorType);\n\n const {title, message} = getErrorData({\n errorType,\n cluster,\n });\n\n return (\n <section className={b('error')}>\n <h2 className={b('title')}>{title}</h2>\n\n <p className={b('text')}>\n {message}\n <ClickableText className={b('details')} onClick={() => showErrorPopup(error)}>\n {' '}\n Details\n </ClickableText>\n </p>\n\n {UIFactory.renderCustomPreloaderError({cluster, errorType, error})}\n </section>\n );\n}\n\nfunction getErrorData({errorType, cluster}: {errorType: string; cluster: string}): {\n title: string;\n message: string;\n} {\n switch (errorType) {\n case PRELOAD_ERROR.CONNECTION: {\n return {\n title: `${cluster.toUpperCase()} couldn’t be reached`,\n message:\n 'Failed to fetch version of the cluster. Usually it means UI cannot establish connection to the cluster’s proxy.',\n };\n }\n case PRELOAD_ERROR.AUTHENTICATION: {\n return {\n title: 'Error',\n message:\n 'Could not fetch the XSRF token, therefore preventing further operations. Sometimes ' +\n 'token fetching fails due to the network issues. If the problem persists, please report it.',\n };\n }\n case PRELOAD_ERROR.GENERAL:\n default: {\n return {\n title: 'Error',\n message:\n 'An error occurred while fetching the necessary information about the cluster.',\n };\n }\n }\n}\n\nexport default withBlockedNavigation(PreloadError);\n","import Cookies from 'js-cookie';\n// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {Toaster} from '@gravity-ui/uikit';\n\nimport {getWindowStore} from '../store/window-store';\nimport {getClusterConfig, getXsrfCookieName} from '../utils';\nimport {BAN_USER, BLOCK_USER} from '../constants/index';\nimport YT from '../config/yt-config';\nimport {getClusterProxy} from '../store/selectors/global';\nimport {getConfigData} from '../config/ui-settings';\n\nexport function initYTApiClusterParams(cluster: string) {\n const {clusters} = YT;\n const config = getClusterConfig(clusters, cluster);\n\n yt.setup.setGlobalOption('suppressAccessTracking', true);\n yt.setup.setGlobalOption('useEncodedParameters', true);\n yt.setup.setGlobalOption('proxy', getClusterProxy(config));\n\n const allowYtTvm = !getConfigData().ytApiUseCORS;\n\n if (allowYtTvm) {\n config.secure = window.location.protocol === 'https:';\n }\n\n yt.setup.setGlobalOption('useHeavyProxy', false);\n\n yt.setup.setGlobalOption('xsrf', true);\n yt.setup.setGlobalOption('xsrfCookieName', getXsrfCookieName(config.id));\n\n if (typeof config.secure === 'boolean') {\n yt.setup.setGlobalOption('secure', config.secure);\n } else {\n yt.setup.setGlobalOption('secure', true);\n }\n\n yt.setup.setGlobalOption('authentication', {type: config.authentication || 'none'});\n\n yt.subscribe('error', onError);\n}\n\nfunction onError(error: any) {\n const code = error && error.code;\n\n if (code === yt.codes.USER_IS_BANNED) {\n getWindowStore().dispatch({type: BAN_USER});\n } else if (code === yt.codes.USER_EXCEEDED_RPS) {\n getWindowStore().dispatch({type: BLOCK_USER});\n } else if (code == yt.codes.XSRF_TOKEN_EXPIRED) {\n const content = `Your CSRF-token '${getToken()}' has expired. Please reaload the page`;\n console.log(content);\n\n new Toaster().add({\n name: 'xsrf-expired',\n theme: 'info',\n autoHiding: false,\n title: 'CSRF-toke expired',\n content: content,\n });\n }\n}\n\nfunction getToken() {\n const cluster = YT.cluster;\n const tokenName = cluster && getXsrfCookieName(cluster);\n return tokenName && Cookies.get(tokenName);\n}\n","import axios, {AxiosResponse} from 'axios';\n\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport Cookies from 'js-cookie';\n\nimport ypath from '../../common/thor/ypath';\nimport {checkIsDeveloper} from '../../../shared/utils/check-permission';\nimport {INIT_CLUSTER_PARAMS, PRELOAD_ERROR, UPDATE_CLUSTER} from '../../constants/index';\nimport {getCurrentUserName} from '../../store/selectors/global';\nimport {getXsrfCookieName} from '../../utils';\nimport {RESET_STORE_BEFORE_CLUSTER_CHANGE} from '../../constants/utils';\nimport {\n isRecentClustersFirst,\n isRecentPagesFirst,\n isRedirectToBetaSwitched,\n shouldUsePreserveState,\n} from '../../store/selectors/settings';\nimport {rumLogError} from '../../rum/rum-counter';\nimport {Toaster} from '@gravity-ui/uikit';\nimport {RumWrapper, YTApiId} from '../../rum/rum-wrap-api';\nimport {RumMeasureTypes} from '../../rum/rum-measure-types';\nimport {getBatchError, wrapApiPromiseByToaster} from '../../utils/utils';\nimport {BatchResultsItem} from '../../../shared/yt-types';\nimport {ThunkAction} from 'redux-thunk';\nimport {RootState} from '../../store/reducers';\nimport YT from '../../config/yt-config';\nimport {GLOBAL_PARTIAL} from '../../constants/global';\nimport {FIX_MY_TYPE, YTError} from '../../../@types/types';\nimport {initYTApiClusterParams} from '../../common/yt-api-init';\nimport {NAMESPACES, SettingName} from '../../../shared/constants/settings';\nimport {updateTitle} from './global';\nimport {reloadUserSettings, setSetting} from './settings';\nimport {joinMenuItemsAction, splitMenuItemsAction, trackVisit} from './menu';\n\nfunction handleUiConfigError(path: string, error: any, type?: string) {\n rumLogError(\n {\n level: 'warn',\n type,\n message: `${path} cannot be loaded, some ui features might be not available`,\n block: path,\n },\n error,\n );\n}\n\nconst toast = new Toaster();\n\nfunction prepareClusterUiConfig(uiConfig: BatchResultsItem, uiDevConfig: BatchResultsItem) {\n if (uiConfig.error && uiConfig.error.code !== yt.codes.NODE_DOES_NOT_EXIST) {\n handleUiConfigError('//sys/@ui_config', uiConfig.error);\n toast.add({\n name: 'get-ui_config',\n theme: 'danger',\n autoHiding: false,\n title: 'Failed to load //sys/@ui_config',\n content:\n 'Some UI features might be not available. ' +\n 'Try to reload the page. ' +\n 'If the problem persists please report it via Bug Reporter.',\n });\n }\n if (uiDevConfig.error && uiDevConfig.error.code !== yt.codes.NODE_DOES_NOT_EXIST) {\n handleUiConfigError('//sys/@ui_config_dev_overrides', uiDevConfig.error);\n }\n return [uiConfig.output || {}, uiDevConfig.output || {}];\n}\n\ntype GlobalThunkAction<T = unknown> = ThunkAction<T, RootState, any, FIX_MY_TYPE>;\n\nexport function initClusterParams(cluster: string): GlobalThunkAction<Promise<void>> {\n return (dispatch, getState) => {\n initYTApiClusterParams(cluster);\n\n dispatch({\n type: INIT_CLUSTER_PARAMS.REQUEST,\n });\n\n const login = getCurrentUserName(getState());\n\n const rumId = new RumWrapper(cluster, RumMeasureTypes.CLUSTER_PARAMS);\n return wrapApiPromiseByToaster(\n rumId.fetch(\n YTApiId.clusterParams,\n axios.request({\n url: '/api/cluster-params/' + cluster,\n method: 'GET',\n }),\n ),\n {\n skipSuccessToast: true,\n toasterName: 'cluster_initialization_failure',\n errorTitle: 'Cluster initialization failure',\n errorContent: 'An error occured',\n },\n )\n .then(({data}) => {\n const {mediumList, schedulerVersion, masterVersion, uiConfig, uiDevConfig} = data;\n const error = getBatchError([mediumList], 'Cluster initialization failure');\n if (error) {\n throw error;\n }\n const [uiConfigOutput, uiDevConfigOutput] = prepareClusterUiConfig(\n uiConfig,\n uiDevConfig,\n );\n dispatch({\n type: INIT_CLUSTER_PARAMS.SUCCESS,\n data: {\n cluster,\n mediumList: ypath.getValue(mediumList.output),\n isDeveloper: false,\n clusterUiConfig: uiConfigOutput,\n schedulerVersion: schedulerVersion.output,\n masterVersion: masterVersion.output,\n },\n });\n\n return rumId\n .fetch(\n YTApiId.clusterParamsIsDeveloper,\n checkIsDeveloper(\n login,\n undefined,\n YTApiId[YTApiId.clusterParamsIsDeveloper],\n ),\n )\n .then((isDeveloper) => {\n if (isDeveloper) {\n const clusterUiConfig = isDeveloper\n ? Object.assign({}, uiConfigOutput, uiDevConfigOutput)\n : uiConfigOutput;\n dispatch({type: GLOBAL_PARTIAL, data: {isDeveloper, clusterUiConfig}});\n }\n })\n .catch((e) => {\n console.error('Failed to check if current user is admin', e);\n });\n })\n .catch((e) => {\n dispatch({\n type: INIT_CLUSTER_PARAMS.FAILURE,\n data: e,\n });\n });\n };\n}\n\nfunction initClusterAndUserSettingsAfterClusterChanging(params: {\n cluster: string;\n login: string;\n}): GlobalThunkAction<Promise<void>> {\n return async (dispatch, getState) => {\n await dispatch(initClusterParams(params.cluster));\n await dispatch(updateTitle({cluster: params.cluster, path: '', page: ''}));\n await dispatch(reloadUserSettings(params.login));\n\n const state = getState();\n // todo: get rid of redirectToBetaSwitched setting.\n // It`s exist for set default value of redirectToBeta setting, when settings document is empty yet.\n // Set redirectToBeta on server after get all user settings (home.js). Or get rid of this logic at all.\n if (!isRedirectToBetaSwitched(state)) {\n dispatch(\n setSetting(\n SettingName.DEVELOPMENT.REDIRECT_TO_BETA_SWITCHED,\n NAMESPACES.DEVELOPMENT,\n true,\n ),\n );\n dispatch(\n setSetting(SettingName.DEVELOPMENT.REDIRECT_TO_BETA, NAMESPACES.DEVELOPMENT, true),\n );\n }\n\n if (isRecentClustersFirst(state)) {\n dispatch(splitMenuItemsAction('cluster'));\n } else {\n dispatch(joinMenuItemsAction('clusters'));\n }\n\n if (isRecentPagesFirst(state)) {\n dispatch(splitMenuItemsAction('page'));\n } else {\n dispatch(joinMenuItemsAction('pages'));\n }\n\n dispatch(trackVisit('cluster', params.cluster));\n };\n}\ninterface ClusterInfoData {\n version?: string;\n versionError?: YTError;\n token?: {\n login: string;\n csrf_token?: string;\n };\n tokenError?: YTError;\n}\n\nlet count = 0;\nexport function updateCluster(cluster: string): GlobalThunkAction {\n return (dispatch, getState) => {\n const dispatchError = (error: any) => {\n if (error instanceof Error) {\n console.error(error);\n }\n dispatch({\n type: UPDATE_CLUSTER.FAILURE,\n data: {error: error?.response?.data || error},\n });\n };\n\n dispatch({\n type: UPDATE_CLUSTER.REQUEST,\n });\n\n const rumId = new RumWrapper(cluster, RumMeasureTypes.CLUSTER_PARAMS);\n return rumId\n .fetch<AxiosResponse<ClusterInfoData>>(\n YTApiId.ui_clusterInfo,\n axios.request({\n url: '/api/cluster-info/' + cluster,\n method: 'GET',\n }),\n )\n .then(({data}) => {\n const {token, tokenError, version, versionError} = data;\n\n if (count++) {\n dispatch({\n type: RESET_STORE_BEFORE_CLUSTER_CHANGE,\n data: {\n shouldUsePreserveState: shouldUsePreserveState(getState()),\n },\n });\n }\n\n if (!version || versionError) {\n dispatch({\n type: UPDATE_CLUSTER.FAILURE,\n data: {errorType: PRELOAD_ERROR.CONNECTION, error: versionError},\n });\n } else {\n dispatch({\n type: UPDATE_CLUSTER.SUCCESS,\n data: {version},\n });\n\n YT.parameters.version = version;\n YT.cluster = cluster;\n\n if (!token?.csrf_token || tokenError) {\n Cookies.remove(getXsrfCookieName(cluster));\n dispatch({\n type: UPDATE_CLUSTER.FAILURE,\n data: {\n errorType: PRELOAD_ERROR.AUTHENTICATION,\n error: tokenError || new Error('Failed to get CSRF-token'),\n },\n });\n } else {\n const {login, csrf_token} = token;\n YT.parameters.login = login;\n dispatch({type: GLOBAL_PARTIAL, data: {login}});\n Cookies.set(getXsrfCookieName(cluster), csrf_token);\n\n return dispatch(\n initClusterAndUserSettingsAfterClusterChanging({cluster, login}),\n )\n .then(() =>\n dispatch({\n type: UPDATE_CLUSTER.FINAL_SUCCESS,\n }),\n )\n .catch(dispatchError);\n }\n }\n\n return Promise.resolve();\n })\n .catch(dispatchError);\n };\n}\n\nexport function unmountCluster(): GlobalThunkAction {\n return (dispatch) => {\n YT.parameters.version = '';\n YT.cluster = '';\n\n dispatch({\n type: GLOBAL_PARTIAL,\n data: {\n cluster: undefined,\n },\n });\n };\n}\n","import {ThunkAction} from 'redux-thunk';\n\nimport {RootState} from '../../../store/reducers';\nimport {\n SupportedFeaturesAction,\n SupportedFeaturesState,\n} from '../../../store/reducers/global/supported-features';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {ytApiV3} from '../../../rum/rum-wrap-api';\nimport {\n SUPPORTED_FEATURES_FAILURE,\n SUPPORTED_FEATURES_REQUEST,\n SUPPORTED_FEATURES_SUCCESS,\n} from '../../../constants/global';\nimport {getCluster} from '../../../store/selectors/global';\n\ntype SupportedFeaturesThunkAction = ThunkAction<any, RootState, any, SupportedFeaturesAction>;\n\nconst cancelHelper = new CancelHelper();\n\nexport function fetchSupportedFeatures(): SupportedFeaturesThunkAction {\n return (dispatch, getState) => {\n const featuresCluster = getCluster(getState());\n if (!featuresCluster) {\n return undefined;\n }\n\n dispatch({type: SUPPORTED_FEATURES_REQUEST});\n return ytApiV3\n .getSupportedFeatures({}, cancelHelper.removeAllAndSave)\n .then(({features}: Pick<SupportedFeaturesState, 'features'>) => {\n dispatch({\n type: SUPPORTED_FEATURES_SUCCESS,\n data: {featuresCluster, features},\n });\n })\n .catch((error) => {\n if (!isCancelled(error)) {\n dispatch({\n type: SUPPORTED_FEATURES_FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n","import React from 'react';\nimport {useUpdater} from '../../hooks/use-updater';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {getCluster} from '../../store/selectors/global';\nimport {fetchSupportedFeatures} from '../../store/actions/global/supported-features';\n\nfunction SupportedFeaturesUpdater() {\n const dispatch = useDispatch();\n const cluster = useSelector(getCluster);\n\n const updateFn = React.useCallback(() => {\n dispatch(fetchSupportedFeatures());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [cluster, dispatch]);\n\n useUpdater(updateFn, {timeout: 600000});\n\n return null;\n}\n\nexport default React.memo(SupportedFeaturesUpdater);\n","import React, {Component, Fragment} from 'react';\nimport {Redirect, Route, Switch, useLocation} from 'react-router';\nimport {connect, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport {BanPageLazy} from '../BanPage/lazy';\nimport {ComponentsLazy} from '../../pages/components/lazy';\nimport {OperationsLazy} from '../../pages/operations/lazy';\nimport {AccountsLazy} from '../../pages/accounts/lazy';\nimport {DashboardLazy} from '../../pages/dashboard/lazy';\nimport {SystemLazy} from '../../pages/system/lazy';\nimport {NavigationLazy} from '../../pages/navigation/lazy';\nimport {PathViewerLazy} from '../../pages/path-viewer/lazy';\nimport {TabletLazy} from '../../pages/tablet/lazy';\nimport {TabletCellBundlesLazy} from '../../pages/tablet_cell_bundles/lazy';\nimport {GroupsPageLazy} from '../../pages/groups/lazy';\nimport {UsersPageLazy} from '../../pages/users/lazy';\nimport {SchedulingLazy} from '../../pages/scheduling/lazy';\nimport {QueryTrackerLazy} from '../../pages/query-tracker/lazy';\nimport {JobLazy} from '../../pages/job/lazy';\nimport {ChytPageLazy} from '../../pages/chyt/lazy';\n\nimport ClusterPageHeader from '../ClusterPageHeader/ClusterPageHeader';\nimport PageTracker from './PageTracker';\n\nimport {PageHeadByCluster} from '../../components/PageHead/PageHead';\n\nimport FlexSplitPane from '../../components/FlexSplitPane/FlexSplitPane';\nimport ErrorBlock from '../../components/Error/Error';\nimport HandleMaintenance from '../../containers/MaintenancePage/HandleMaintenance';\nimport PreloadError from '../../containers/PreloadError/PreloadError';\n\nimport {LOADING_STATUS, Page, SPLIT_PANE_ID} from '../../constants/index';\nimport {joinMenuItemsAction, splitMenuItemsAction, trackVisit} from '../../store/actions/menu';\nimport {setSetting} from '../../store/actions/settings';\nimport {unmountCluster, updateCluster} from '../../store/actions/cluster-params';\nimport {updateTitle} from '../../store/actions/global';\nimport {getClusterUiConfig} from '../../store/selectors/global';\nimport {\n isExperimentalPagesReady,\n isQueryTrackerAllowed,\n} from '../../store/selectors/global/experimental-pages';\nimport {getClusterConfig} from '../../utils';\nimport {NAMESPACES, SettingName} from '../../../shared/constants/settings';\nimport {getClusterPagePaneSizes, getStartingPage} from '../../store/selectors/settings';\nimport SupportedFeaturesUpdater from './SupportedFeaturesUpdater';\nimport {useRumMeasureStart, useRumMeasureStop} from '../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../rum/rum-measure-types';\nimport {useClusterFromLocation} from '../../hooks/use-cluster';\nimport {makeExtraPageRoutes} from './ExtraClusterPageRoutes';\nimport {odinPageInfo} from '../../pages/odin/lazy';\nimport {hasOdinPage} from '../../config';\n\nimport './ClusterPage.scss';\nimport UIFactory from '../../UIFactory';\n\nconst b = cn('cluster-page');\n\nconst RedirectToBanIfNeededMemo = React.memo(RedirectToBanIfNeeded);\n\nclass ClusterPage extends Component {\n static propTypes = {\n cluster: PropTypes.string,\n\n // from connect\n clusters: PropTypes.object.isRequired,\n clusterPagePaneSizes: PropTypes.array,\n login: PropTypes.string,\n queriesPageAllowed: PropTypes.bool,\n maintenancePageEvent: PropTypes.object,\n startingPage: PropTypes.string.isRequired,\n isLoaded: PropTypes.bool.isRequired,\n hasError: PropTypes.bool.isRequired,\n error: PropTypes.shape({\n errorType: PropTypes.string,\n }).isRequired,\n paramsError: PropTypes.any,\n splitScreen: PropTypes.shape({\n isSplit: PropTypes.bool.isRequired,\n paneClassNames: PropTypes.array.isRequired,\n }).isRequired,\n\n splitMenuItemsAction: PropTypes.func.isRequired,\n setSetting: PropTypes.func.isRequired,\n joinMenuItemsAction: PropTypes.func.isRequired,\n updateCluster: PropTypes.func.isRequired,\n updateTitle: PropTypes.func.isRequired,\n unmountCluster: PropTypes.func.isRequired,\n trackVisit: PropTypes.func.isRequired,\n\n allowChyt: PropTypes.bool,\n allowQueryTracker: PropTypes.bool,\n allowStartPageRedirect: PropTypes.bool,\n };\n\n state = {\n width: 'large',\n };\n\n componentDidMount() {\n const {cluster} = this.props;\n this.props.updateCluster(cluster);\n }\n\n getSnapshotBeforeUpdate(prevProps) {\n if (prevProps.splitScreen.isSplit !== this.props.splitScreen.isSplit) {\n return this.props.splitScreen.isSplit\n ? window.pageYOffset\n : this.contentPaneRef.current.scrollTop;\n }\n\n return null;\n }\n\n componentDidUpdate(prevProps, prevState, prevScroll) {\n if (prevScroll !== null) {\n if (this.props.splitScreen.isSplit) {\n this.contentPaneRef.current.scrollTop = prevScroll;\n }\n\n window.scrollBy(0, prevScroll);\n }\n\n const {cluster: prevCluster} = prevProps;\n const {cluster} = this.props;\n\n if (cluster !== prevCluster) {\n this.props.updateCluster(cluster);\n }\n }\n\n componentWillUnmount() {\n this.props.updateTitle({path: '', page: ''});\n this.props.unmountCluster();\n }\n\n contentPaneRef = React.createRef();\n\n onResize = () => {\n const {splitScreen} = this.props;\n const toolbar = document.querySelector('#elements-toolbar');\n\n if (splitScreen.isSplit && toolbar) {\n const gutterWidth = 10;\n const offset = document.getElementById(SPLIT_PANE_ID).clientWidth + gutterWidth;\n toolbar.style.right = `${offset}px`;\n } else if (toolbar) {\n toolbar.style.right = '0';\n }\n\n window.dispatchEvent(new Event('resize'));\n };\n\n handleSplit = () => {\n this.onResize();\n // fight the table toolbar becoming invisible after toggling YQLWidget and before first scroll\n window.dispatchEvent(new Event('scroll'));\n this.updateWidthModifier();\n };\n\n updateWidthModifier() {\n const currentWidth = this.contentPaneRef.current?.clientWidth || Infinity;\n if (currentWidth <= 720) {\n this.setState({width: 'small'});\n } else if (currentWidth <= 1024) {\n this.setState({width: 'medium'});\n } else {\n this.setState({width: 'large'});\n }\n }\n\n onResizeEnd = (sizes) => {\n this.props.setSetting(\n SettingName.NAVIGATION.CLUSTER_PAGE_PANE_SIZES,\n NAMESPACES.NAVIGATION,\n sizes,\n );\n this.updateWidthModifier();\n };\n\n getInitialSizes = () => {\n return this.props.clusterPagePaneSizes;\n };\n\n isParamsLoading() {\n const {cluster, paramsCluster} = this.props;\n return cluster !== paramsCluster;\n }\n\n renderContent(clusterConfig) {\n const {\n cluster,\n startingPage,\n isLoaded,\n hasError,\n paramsError,\n allowChyt,\n allowQueryTracker,\n allowStartPageRedirect,\n } = this.props;\n\n return isLoaded && !this.isParamsLoading() ? (\n <Fragment>\n <SupportedFeaturesUpdater />\n <RedirectToBanIfNeededMemo to={`/${cluster}/${Page.BAN}`} />\n <Switch>\n <Route path={`/:cluster/${Page.BAN}`} component={BanPageLazy} />\n <Route path={`/:cluster/${Page.COMPONENTS}`} component={ComponentsLazy} />\n <Route path={`/:cluster/${Page.OPERATIONS}`} component={OperationsLazy} />\n <Route path={`/:cluster/${Page.JOB}`} component={JobLazy} />\n <Route path={`/:cluster/${Page.DASHBOARD}`} component={DashboardLazy} />\n <Route path={`/:cluster/${Page.SYSTEM}`} component={SystemLazy} />\n <Route path={`/:cluster/${Page.ACCOUNTS}`} component={AccountsLazy} />\n <Route\n path={[\n `/:cluster/${Page.TABLET_CELL_BUNDLES}`,\n `/:cluster/${Page.CHAOS_CELL_BUNDLES}`,\n ]}\n component={TabletCellBundlesLazy}\n />\n <Route path={`/:cluster/${Page.NAVIGATION}`} component={NavigationLazy} />\n <Route path={`/:cluster/${Page.PATH_VIEWER}`} component={PathViewerLazy} />\n <Route path={`/:cluster/${Page.TABLET}`} component={TabletLazy} />\n <Route path={`/:cluster/${Page.USERS}`} component={UsersPageLazy} />\n <Route path={`/:cluster/${Page.GROUPS}`} component={GroupsPageLazy} />\n <Route path={`/:cluster/${Page.SCHEDULING}`} component={SchedulingLazy} />\n {allowChyt && (\n <Route path={`/:cluster/${Page.CHYT}`} component={ChytPageLazy} />\n )}\n {allowQueryTracker && (\n <Route path={`/:cluster/${Page.QUERIES}`} component={QueryTrackerLazy} />\n )}\n {hasOdinPage() && (\n <Route\n path={`/:cluster/${odinPageInfo.pageId}`}\n component={odinPageInfo.reactComponent}\n />\n )}\n\n <Redirect\n from={`/:cluster/${Page.VERSIONS}`}\n to={`/:cluster/${Page.COMPONENTS}/versions`}\n />\n {makeExtraPageRoutes()}\n {allowStartPageRedirect && (\n <Redirect from={`/${cluster}/`} to={`/${cluster}/${startingPage}`} />\n )}\n </Switch>\n\n <Route path=\"/:cluster/:page/:tab?\" component={PageTracker} />\n </Fragment>\n ) : (\n <React.Fragment>\n <div className={b('preloader')}>\n {hasError ? (\n <PreloadError />\n ) : (\n <p className={b('loading-text')}>Loading {clusterConfig?.id}...</p>\n )}\n </div>\n <div className={b('error')}>\n {paramsError && <ErrorBlock error={paramsError} />}\n </div>\n </React.Fragment>\n );\n }\n\n render() {\n const {cluster, splitScreen, clusters} = this.props;\n const footer = UIFactory.renderAppFooter();\n\n // TODO: put current cluster config into redux state to avoid doing things like these here\n const clusterConfig = getClusterConfig(clusters, cluster);\n\n // FIXME: handle case when clusterConfig is undefined due to wrong cluster name\n return (\n <Fragment>\n <ClusterPageStopRumMeasure />\n <PageHeadByCluster cluster={cluster} />\n\n <ClusterPageHeader cluster={cluster} />\n\n <FlexSplitPane\n className={b('panes-wrapper', {\n 'with-pane': splitScreen.isSplit,\n 'with-footer': Boolean(footer),\n })}\n paneClassNames={splitScreen.paneClassNames}\n direction={FlexSplitPane.HORIZONTAL}\n onResize={this.onResize}\n onResizeEnd={this.onResizeEnd}\n onSplit={this.handleSplit}\n onUnSplit={this.handleSplit}\n minSize={600}\n getInitialSizes={this.getInitialSizes}\n id={SPLIT_PANE_ID}\n >\n <div\n ref={this.contentPaneRef}\n className={b('content-pane', {\n split: splitScreen.isSplit && 'yes',\n width: this.state.width,\n })}\n >\n <HandleMaintenance cluster={cluster}>\n {this.renderContent(clusterConfig)}\n </HandleMaintenance>\n </div>\n\n {null}\n </FlexSplitPane>\n {footer}\n </Fragment>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n const {\n login,\n maintenancePageEvent,\n splitScreen,\n loadState,\n error,\n paramsCluster,\n paramsLoading,\n paramsError,\n } = state.global;\n\n const clusters = state.clustersMenu.clusters;\n\n return {\n clusters,\n isLoaded: !paramsLoading && loadState === LOADING_STATUS.LOADED,\n hasError: loadState === LOADING_STATUS.ERROR,\n error,\n paramsError,\n login,\n splitScreen,\n maintenancePageEvent,\n clusterPagePaneSizes: getClusterPagePaneSizes(state),\n startingPage: getStartingPage(state),\n paramsCluster,\n allowQueryTracker: isQueryTrackerAllowed(state),\n allowChyt: Boolean(getClusterUiConfig(state).chyt_controller_base_url),\n allowStartPageRedirect: isExperimentalPagesReady(state),\n };\n}\n\nconst mapDispatchToProps = {\n setSetting,\n trackVisit,\n splitMenuItemsAction,\n joinMenuItemsAction,\n updateTitle,\n updateCluster,\n unmountCluster,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ClusterPage);\n\nfunction RedirectToBanIfNeeded({to}) {\n const {blocked, banned} = useSelector((state) => state.global);\n const {pathname} = useLocation();\n const enableRedirect = (banned || blocked) && !pathname.endsWith('/ban');\n\n if (!enableRedirect) {\n return null;\n }\n\n return <Redirect to={to} />;\n}\n\nfunction ClusterPageStopRumMeasure() {\n const loadState = useSelector((state) => state.global.loadState);\n const paramsLoading = useSelector((state) => state.global.paramsLoading);\n\n const isLoaded =\n loadState === LOADING_STATUS.ERROR ||\n (!paramsLoading && loadState === LOADING_STATUS.LOADED);\n\n const cluster = useClusterFromLocation();\n\n useRumMeasureStart({\n type: RumMeasureTypes.CLUSTER_PARAMS,\n subPage: `ui.${cluster}`,\n allowStop: ([isLoaded]) => !isLoaded,\n startDeps: [isLoaded],\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.CLUSTER_PARAMS,\n allowStop: ([isLoaded]) => isLoaded,\n stopDeps: [isLoaded],\n });\n return null;\n}\n","import React from 'react';\nimport {Route, Switch} from 'react-router';\n\nimport map_ from 'lodash/map';\n\nimport ClusterPage from '../ClusterPage/ClusterPage';\nimport UIFactory from '../../UIFactory';\nimport {odinRootPageInfo} from '../../pages/odin/lazy';\nimport {hasOdinPage} from '../../config';\n\nexport default class ClusterPageWrapper extends React.PureComponent {\n render() {\n return (\n <Switch>\n {map_(UIFactory.getExtraRootPages(), ({pageId, reactComponent}, index) => {\n return reactComponent ? (\n <Route key={index} path={`/${pageId}`} component={reactComponent} />\n ) : null;\n })}\n {hasOdinPage() && (\n <Route\n path={`/${odinRootPageInfo.pageId}`}\n component={odinRootPageInfo.reactComponent}\n />\n )}\n\n <Route\n path=\"/:cluster/\"\n render={(props) => {\n const {cluster} = props.match.params;\n return <ClusterPage key={cluster} cluster={cluster} />;\n }}\n />\n </Switch>\n );\n }\n}\n","export type UpdaterOptions = {\n getSkipNextCall: () => boolean;\n};\n\nexport class Updater {\n private callback?: () => unknown;\n private timeout: number;\n private options?: UpdaterOptions;\n\n private inProgress = false;\n private lastCallTime = 0;\n private frozen = false;\n private timerId?: number;\n\n constructor(callback: () => unknown, timeout: number, dynamicOptions?: UpdaterOptions) {\n this.callback = callback;\n this.timeout = Math.max(3000, timeout);\n this.options = dynamicOptions;\n\n document.addEventListener('visibilitychange', this.onVisibilityChange);\n\n this.repeat();\n }\n\n destroy() {\n document.removeEventListener('visibilitychange', this.onVisibilityChange);\n window.clearTimeout(this.timerId);\n delete this.callback;\n delete this.options;\n }\n\n private onVisibilityChange = () => {\n if (document.hidden) {\n this.freeze();\n } else {\n this.unfreeze();\n }\n };\n\n private freeze = () => {\n this.frozen = true;\n };\n\n private unfreeze = () => {\n this.frozen = false;\n if (!this.inProgress && Date.now() - this.lastCallTime >= this.timeout) {\n this.repeat();\n }\n };\n\n private repeat = async () => {\n window.clearTimeout(this.timerId);\n\n if (this.frozen) {\n return;\n }\n\n try {\n this.inProgress = true;\n if (this.lastCallTime === 0 || !this.options?.getSkipNextCall()) {\n await this.callback?.();\n }\n } finally {\n this.inProgress = false;\n this.lastCallTime = Date.now();\n this.timerId = window.setTimeout(this.repeat, this.timeout);\n }\n };\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport isEqual_ from 'lodash/isEqual';\n\nimport {Updater} from '../utils/hammer/updater';\nimport {getUseAutoRefresh} from '../store/selectors/settings';\n\nexport const DEFAULT_UPDATER_TIMEOUT = 30 * 1000;\n\nexport type UseUpdaterOptions = {\n /**\n * polling interval\n */\n timeout?: number;\n /**\n * a callback that will be called at destruction stage of React.useEffect(...)\n */\n destructFn?: () => void;\n /**\n * if `true` then `fn()` will be called only once\n */\n onlyOnce?: boolean;\n /**\n * Enforces to ignore 'Use auto refresh' user option\n */\n forceAutoRefresh?: boolean;\n};\n\nexport function useUpdater(\n fn?: () => unknown,\n {\n timeout = DEFAULT_UPDATER_TIMEOUT,\n destructFn,\n onlyOnce,\n forceAutoRefresh,\n }: UseUpdaterOptions = {},\n) {\n const useAutoRefresh = useSelector(getUseAutoRefresh) as boolean;\n const optionsRef = React.useRef({skipNextCall: !useAutoRefresh});\n\n const allowAutoRefresh = forceAutoRefresh ?? useAutoRefresh;\n\n optionsRef.current.skipNextCall = !allowAutoRefresh;\n\n React.useEffect(() => {\n let updater: Updater | undefined;\n if (onlyOnce) {\n fn?.();\n } else {\n updater = fn\n ? new Updater(fn, timeout, {\n getSkipNextCall() {\n return optionsRef.current.skipNextCall;\n },\n })\n : undefined;\n }\n\n return () => {\n updater?.destroy();\n destructFn?.();\n };\n }, [fn, timeout, destructFn, onlyOnce]);\n}\n\nexport function useUpdaterWithMemoizedParams<ArgsT extends Array<unknown>>(\n fn: undefined | ((...args: ArgsT) => unknown),\n options?: UseUpdaterOptions,\n ...args: ArgsT\n) {\n const params = useMemoizedIfEqual(...args);\n\n const updateFn = React.useCallback(() => {\n fn?.(...params);\n }, [fn, params]);\n\n useUpdater(updateFn, options);\n}\n\nexport function useMemoizedIfEqual<ArgsT extends Array<unknown>>(...args: ArgsT) {\n const ref = React.useRef<ArgsT>(args);\n\n const params = React.useMemo(() => {\n if (!isEqual_(ref.current, args)) {\n ref.current = args;\n }\n return ref.current;\n }, [args]);\n\n return params;\n}\n","export const RumMeasureTypes = {\n CLUSTER_PARAMS: 'CLUSTER_PARAMS',\n\n ACCOUNTS: 'ACCOUNTS_',\n\n NAVIGATION_PRELOAD: 'NAVIGATION_PRELOAD',\n\n NAVIGATION_CONTENT_DOCUMENT: 'NAVIGATION_CONTENT_DOCUMENT',\n NAVIGATION_CONTENT_FILE: 'NAVIGATION_CONTENT_FILE',\n NAVIGATION_CONTENT_LINK: 'NAVIGATION_CONTENT_LINK',\n NAVIGATION_CONTENT_MAP_NODE: 'NAVIGATION_CONTENT_MAP_NODE_',\n NAVIGATION_CONTENT_REPLICATED_TABLE: 'NAVIGATION_CONTENT_REPLICATED_TABLE',\n NAVIGATION_CONTENT_TABLE_STATIC: 'NAVIGATION_CONTENT_TABLE_STATIC',\n NAVIGATION_CONTENT_TABLE_DYNAMIC: 'NAVIGATION_CONTENT_TABLE_DYNAMIC',\n NAVIGATION_CONTENT_TRANSACTION: 'NAVIGATION_CONTENT_TRANSACTION',\n NAVIGATION_CONTENT_TRANSACTION_MAP: 'NAVIGATION_CONTENT_TRANSACTION_MAP',\n\n NAVIGATION_TAB_ACL: 'NAVIGATION_TAB_ACL',\n NAVIGATION_TAB_ACL_ACCESS: 'NAVIGATION_TAB_ACL_ACCESS',\n NAVIGATION_TAB_ANNOTATION: 'NAVIGATION_TAB_ANNOTATION',\n NAVIGATION_TAB_ATTRIBUTES: 'NAVIGATION_TAB_ATTRIBUTES',\n NAVIGATION_TAB_USER_ATTRIBUTES: 'NAVIGATION_TAB_USER_ATTRIBUTES',\n NAVIGATION_TAB_LOCKS: 'NAVIGATION_TAB_LOCKS',\n NAVIGATION_TAB_SCHEMA: 'NAVIGATION_TAB_SCHEMA',\n NAVIGATION_TAB_TABLETS: 'NAVIGATION_TAB_TABLETS',\n NAVIGATION_TAB_TABLET_ERRORS: 'NAVIGATION_TAB_TABLET_ERRORS',\n\n OPERATIONS_LIST: 'OPERATIONS_LIST_',\n\n OPERATION: 'OPERATION',\n OPERATION_TAB_DETAILS: 'OPERATION_TAB_DETAILS',\n OPERATION_TAB_ATTRIBUTES: 'OPERATION_TAB_ATTRIBUTES',\n OPERATION_TAB_SPECIFICATION: 'OPERATION_TAB_SPECIFICATION',\n OPERATION_TAB_STATISTICS: 'OPERATION_TAB_STATISTICS',\n OPERATION_TAB_MONITOR: 'OPERATION_TAB_MONITOR',\n OPERATION_TAB_PARTITION_SIZES: 'OPERATION_TAB_PARTITION_SIZES',\n OPERATION_TAB_JOB_SIZES: 'OPERATION_TAB_JOB_SIZES',\n OPERATION_TAB_JOBS: 'OPERATION_TAB_JOBS',\n\n SCHEDULING: 'SCHEDULING_',\n SCHEDULING_OVERVIEW: 'SCHEDULING_OVERVIEW',\n SCHEDULING_DETAILS: 'SCHEDULING_DETAILS',\n SCHEDULING_MONITOR: 'SCHEDULING_MONITOR',\n SCHEDULING_ACL: 'SCHEDULING_ACL',\n\n YQL_KIT_WIDGET: 'YQL_KIT_WIDGET',\n} as const;\n"],"names":["block","cn","ClusterIcon","_ref","icon","className","forwardRef","name","placeholder","substring","toUpperCase","_jsx","ref","children","src","global","window","ssr","undefined","document","addEventListener","removeEventListener","getBoundingClientRect","gutterStartDragging","aGutterSize","bGutterSize","HORIZONTAL","NOOP","calc","filter","prefix","el","createElement","style","cssText","length","shift","isString","v","String","elementOrSelector","ele","querySelector","Error","getOption","options","propName","def","value","getGutterSize","gutterSize","isFirst","isLast","gutterAlign","defaultGutterFn","i","gutterDirection","gut","defaultElementStyleFn","dim","size","gutSize","defaultGutterStyleFn","obj","idsOption","dimension","clientAxis","position","positionEnd","clientSize","elements","ids","Array","from","parent","parentNode","parentStyle","getComputedStyle","parentFlexDirection","flexDirection","sizes","map","minSize","minSizes","isArray","maxSize","Infinity","maxSizes","expandToMin","snapOffset","snapOffsets","dragInterval","direction","cursor","gutter","elementStyle","gutterStyle","setElementSize","Object","keys","forEach","prop","getSizes","element","getMousePosition","e","touches","adjust","offset","a","this","b","percentage","drag","dragging","start","dragOffset","Math","round","call","calculateSizes","aBounds","bBounds","end","trimToMin","sizesToTrim","parentSize","computedStyle","parseFloat","paddingLeft","paddingRight","paddingTop","paddingBottom","innerSize","reduce","excessPixels","toSpare","pixelSizes","pixelSize","elementGutterSize","elementMinSize","push","newPixelSize","takenPixels","min","stopDragging","self","stop","move","userSelect","webkitUserSelect","MozUserSelect","pointerEvents","body","startDragging","button","preventDefault","bind","pairs","adjustToMin","pair","id","temp","gutterElement","setGutterSize","insertBefore","computedSize","setSizes","newSizes","trimmed","newSize","collapse","destroy","preserveStyles","preserveGutter","removeChild","FlexSplitPane","_React$Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","args","_key","apply","concat","node","pane","_refFirst","paneFirst","_refSecond","paneSecond","_createClass","key","checkSplit","destroySplit","split","getInitialSizes","props","abs","acc","_this2","_this$props","onSplit","splitInstance","onDrag","onResize","onDragEnd","onResizeEnd","onUnSplit","_this$props2","_this$props2$paneClas","paneClassNames","_this$props$children","_toArray","firstChild","restChildren","slice","_jsxs","React","defaultProps","VERTICAL","trackerBaseUrl","uiSettings","HREF_RE","STARTREK_KEY_RE","Linkify","_React$PureComponent","text","renderText","re","parts","res","url","test","Link","target","href","SubjectCard","UIFactory","renderSubjectCard","other","_defineProperty","Page","CHAOS_CELL_BUNDLES","RowWithName","page","showSplitter","urlParams","cluster","useSelector","getCluster","info","getPagesInfoMapById","title","makeRoutedURL","routed","theme","RowWithNameMemo","SectionName","_ref2","useRouteMatch","params","clusterColorBlock","useClusterColorClassName","YT","clusters","HeadSpacer","BanPageLazy","withLazyLoading","importComponents","ComponentsLazy","_asyncToGenerator","_regeneratorRuntime","_callee","_context","prev","next","t0","sent","Components","abrupt","ComponentsTopRowLazy","_callee2","_context2","ComponentsTopRow","OperationsLazy","importPage","AccountsLazy","Accounts","AccountsTopRowLazy","AccountsTopRowContent","DashboardLazy","Dashboard","DashboardTopRowLazy","DashboardTopRow","SystemLazy","System","SystemTopRowLazy","SystemTopRow","NavigationLazy","Navigation","NavigationTopRowLazy","NavigationTopRow","PathViewerLazy","TabletLazy","Tablet","TabletTopRowLazy","TabletTopRow","TabletCellBundlesLazy","TabletCellBundles","TabletCellBundlesTopRowLazy","TabletCellBundlesTopRow","ChaosCellBundlesTopRowLazy","_callee3","_context3","ChaosCellBundlesTopRow","GroupsPageLazy","GroupsPage","UsersPageLazy","UsersPage","SchedulingLazy","Scheduling","SchedulingTopRowLazy","SchedulingTopRow","importQT","QueryTrackerLazy","QueryTracker","QueryTrackerTopRowLazy","QueryTrackerTopRow","JobLazy","ChytPageLazy","ChytPage","ChytPageTopRowLazy","ChytPageTopRow","TopRowContent","loadState","getGlobalLoadState","allowQT","isQueryTrackerAllowed","LOADING_STATUS","LOADED","Switch","Route","path","SYSTEM","component","NAVIGATION","SCHEDULING","ACCOUNTS","TABLET","TABLET_CELL_BUNDLES","DASHBOARD","COMPONENTS","CHYT","QUERIES","hasOdinPage","odinPageInfo","pageId","topRowComponent","getExtaClusterPages","index","f","stopPropagation","ClustersPanel","onSelectCluster","_React$useState","_React$useState2","_slicedToArray","setFilter","onChange","onClusterClick","onRef","input","focus","lowerFilter","toLowerCase","recentInfo","getRecentClustersInfo","showRecent","isRecentClustersFirst","groups","recent","rest","getFilteredClusterGroups","DEFAULT_GROUP","allGroups","getGroupedClusters","handleKey","event","firstItem","groupKeys","_toConsumableArray","CLUSTER_GROUPS_ORDER","some_","currentCluster","_window$location","location","pathname","search","clusterState","startsWith","substr","onClick","TextInput","controlRef","onKeyDown","onUpdate","autoFocus","isEmpty_","map_","CLUSTER_GROUPS","caption","ClusterGroup","items","item","ClusterGroupItem","_objectSpread","SHORT_ENV","production","testing","development","prestable","localmode","forwardImageRef","environment","_props$onClick","shortEnv","allowLink","handleClick","ClusterImage","origin","Icon","awesome","clusterAppearance","getClusterAppearance","clusterColorClassName","icon2x","reduce_","filtered","filter_","indexOf","ClusterPicker","clusterConfig","visible","setVisible","toggleVisibility","useCallback","prevState","handleClosePopup","handleSelectCluster","_oldUrl$split","_oldUrl$split2","empty","oldCluster","join","makeClusterUrl","getAppBrowserHistory","iconRef","Popup","placement","anchorRef","open","onClose","BlockNavigation","dispatch","useDispatch","addNavigationBlocker","removeNavigationBlocker","EVENT_TYPE","ISSUE","MAINTENANCE","MaintenancePage","get","maintenancePageEvent","type","notification","startTime","finishTime","finishTimeString","moment","format","startTimeString","onProceed","severity","description","createdBy","announcesMailListUrl","hammer","renderTimeLine","Button","view","getCookiesClusterName","HandleMaintenance","maintenanceContent","isIgnored","Cookies","isMaintenanceIgnored","expires","add","toDate","setMaintenanceIgnored","forceUpdate","connect","state","_state$global","eventsFirstUpdate","ClusterPageHeader","getClusterConfigByName","getNSName","itemName","NAMESPACES","LAST_VISITED_CLUSTER","LAST_VISITED_PAGE","splitMenuItemsAction","collectionName","getState","pages","getRecentPagesInfo","data","settings","SPLIT_MENU_ITEMS","all","getLastVisitedSetting","nsName","getPath","getLastVisitedSettingName","currentTime","unix","joinMenuItemsAction","JOIN_MENU_ITEMS","trackVisit","ns","setSetting","PageTracker","_Component","getPage","match","getTab","tab","render","trackPageVisit","trackTabVisit","prevProps","currentPage","prevPage","currentTab","prevTab","Component","mapDispatchToProps","login","getCurrentUserName","known","getKnownPages","updateTitle","mergeScreen","setTimeout","metrics","countHit","clusterNS","getClusterNS","lastVisitedTabs","getLastVisitedTabs","newLastVisitedTabs","SettingName","LOCAL","LAST_VISITED_TAB","useClusterFromLocation","error","getGlobalError","errorType","getGlobalErrorType","_getErrorData","PRELOAD_ERROR","CONNECTION","message","AUTHENTICATION","GENERAL","getErrorData","ClickableText","showErrorPopup","renderCustomPreloaderError","_WithBlockedNavigation","WithBlockedNavigation","displayName","getDisplayName","ResComponent","hoistNonReactStatics","onError","tokenName","code","yt","USER_IS_BANNED","getWindowStore","BAN_USER","USER_EXCEEDED_RPS","BLOCK_USER","XSRF_TOKEN_EXPIRED","content","getXsrfCookieName","console","log","Toaster","autoHiding","handleUiConfigError","rumLogError","level","toast","initClusterParams","config","getClusterConfig","setGlobalOption","getClusterProxy","getConfigData","ytApiUseCORS","secure","protocol","authentication","initYTApiClusterParams","INIT_CLUSTER_PARAMS","REQUEST","rumId","RumWrapper","RumMeasureTypes","CLUSTER_PARAMS","wrapApiPromiseByToaster","fetch","YTApiId","clusterParams","axios","request","method","skipSuccessToast","toasterName","errorTitle","errorContent","then","mediumList","schedulerVersion","masterVersion","uiConfig","uiDevConfig","getBatchError","_prepareClusterUiConf","NODE_DOES_NOT_EXIST","output","prepareClusterUiConfig","_prepareClusterUiConf2","uiConfigOutput","uiDevConfigOutput","SUCCESS","ypath","getValue","isDeveloper","clusterUiConfig","clusterParamsIsDeveloper","checkIsDeveloper","assign","GLOBAL_PARTIAL","FAILURE","count","cancelHelper","CancelHelper","SupportedFeaturesUpdater","updateFn","featuresCluster","SUPPORTED_FEATURES_REQUEST","ytApiV3","getSupportedFeatures","removeAllAndSave","features","SUPPORTED_FEATURES_SUCCESS","isCancelled","SUPPORTED_FEATURES_FAILURE","useUpdater","timeout","RedirectToBanIfNeededMemo","RedirectToBanIfNeeded","ClusterPage","width","contentPaneRef","splitScreen","toolbar","isSplit","getElementById","SPLIT_PANE_ID","clientWidth","right","dispatchEvent","Event","handleSplit","updateWidthModifier","CLUSTER_PAGE_PANE_SIZES","clusterPagePaneSizes","updateCluster","pageYOffset","current","scrollTop","prevScroll","scrollBy","prevCluster","unmountCluster","_this$contentPaneRef$","currentWidth","setState","paramsCluster","startingPage","isLoaded","hasError","paramsError","allowChyt","allowQueryTracker","allowStartPageRedirect","isParamsLoading","Fragment","to","BAN","OPERATIONS","JOB","PATH_VIEWER","USERS","GROUPS","reactComponent","Redirect","VERSIONS","PreloadError","ErrorBlock","_this$props3","footer","renderAppFooter","ClusterPageStopRumMeasure","PageHeadByCluster","Boolean","renderContent","dispatchError","_error$response","UPDATE_CLUSTER","response","ui_clusterInfo","_ref3","token","tokenError","version","versionError","RESET_STORE_BEFORE_CLUSTER_CHANGE","shouldUsePreserveState","parameters","csrf_token","reloadUserSettings","isRedirectToBetaSwitched","DEVELOPMENT","REDIRECT_TO_BETA_SWITCHED","REDIRECT_TO_BETA","isRecentPagesFirst","_x","_x2","FINAL_SUCCESS","Promise","resolve","paramsLoading","clustersMenu","ERROR","getClusterPagePaneSizes","getStartingPage","getClusterUiConfig","chyt_controller_base_url","isExperimentalPagesReady","_useSelector","blocked","banned","useLocation","endsWith","useRumMeasureStart","subPage","allowStop","startDeps","useRumMeasureStop","_ref4","stopDeps","ClusterPageWrapper","getExtraRootPages","odinRootPageInfo","Updater","callback","dynamicOptions","inProgress","lastCallTime","frozen","timerId","onVisibilityChange","hidden","freeze","unfreeze","Date","now","repeat","_this$options","_this$callback","clearTimeout","getSkipNextCall","finish","max","DEFAULT_UPDATER_TIMEOUT","fn","_ref$timeout","destructFn","onlyOnce","forceAutoRefresh","useAutoRefresh","getUseAutoRefresh","optionsRef","skipNextCall","allowAutoRefresh","updater","_updater","useUpdaterWithMemoizedParams","useMemoizedIfEqual","_len2","_key2","isEqual_","NAVIGATION_PRELOAD","NAVIGATION_CONTENT_DOCUMENT","NAVIGATION_CONTENT_FILE","NAVIGATION_CONTENT_LINK","NAVIGATION_CONTENT_MAP_NODE","NAVIGATION_CONTENT_REPLICATED_TABLE","NAVIGATION_CONTENT_TABLE_STATIC","NAVIGATION_CONTENT_TABLE_DYNAMIC","NAVIGATION_CONTENT_TRANSACTION","NAVIGATION_CONTENT_TRANSACTION_MAP","NAVIGATION_TAB_ACL","NAVIGATION_TAB_ACL_ACCESS","NAVIGATION_TAB_ANNOTATION","NAVIGATION_TAB_ATTRIBUTES","NAVIGATION_TAB_USER_ATTRIBUTES","NAVIGATION_TAB_LOCKS","NAVIGATION_TAB_SCHEMA","NAVIGATION_TAB_TABLETS","NAVIGATION_TAB_TABLET_ERRORS","OPERATIONS_LIST","OPERATION","OPERATION_TAB_DETAILS","OPERATION_TAB_ATTRIBUTES","OPERATION_TAB_SPECIFICATION","OPERATION_TAB_STATISTICS","OPERATION_TAB_MONITOR","OPERATION_TAB_PARTITION_SIZES","OPERATION_TAB_JOB_SIZES","OPERATION_TAB_JOBS","SCHEDULING_OVERVIEW","SCHEDULING_DETAILS","SCHEDULING_MONITOR","SCHEDULING_ACL","YQL_KIT_WIDGET"],"sourceRoot":""}