@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/odin.c4c4ef6f.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/Dialog/controls/ClusterSelectControl/ClusterSelectControl.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/controls/RoleListControl/utils.ts","webpack://@ytsaurus/ui/./src/ui/components/Dialog/DialogError.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/index.tsx","webpack://@ytsaurus/ui/./src/ui/hocs/withDelayedMount.tsx","webpack://@ytsaurus/ui/./src/ui/components/LoadDataHandler/LoadDataHandler.tsx","webpack://@ytsaurus/ui/./src/ui/components/Message/Message.js","webpack://@ytsaurus/ui/./src/ui/components/common/Datepicker/index.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AppNavigation/TopRowContent/SectionName.tsx","webpack://@ytsaurus/ui/./src/ui/containers/ClustersMenu/HeaderLinks.tsx","webpack://@ytsaurus/ui/./src/ui/utils/hammer/updater.ts","webpack://@ytsaurus/ui/./src/ui/hooks/use-updater.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevron-left.svg","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/Calendar.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/Clock.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/ArrowToggle/ArrowToggle.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/utils/cn.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/CalendarView/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/CalendarView/hooks/useCalendarProps.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/CalendarView/utils.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/CalendarView/CalendarView.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/CalendarView/hooks/useCalendarGridProps.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/CalendarView/hooks/useCalendarCellProps.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/utils/dates.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/utils/useDefaultTimeZone.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/CalendarView/hooks/useCalendarState.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/Calendar/Calendar.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/HiddenInput/HiddenInput.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/DateField/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/DateField/utils.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/DateField/hooks/useDateFieldProps.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/DateField/hooks/useBaseDateFieldState.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/DateField/hooks/useDateFieldState.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/DateField/DateField.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/DatePicker/MobileCalendar.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/DatePicker/StubButton.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/utils/getButtonSizeForInput.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/utils/mergeProps.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/DatePicker/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/DatePicker/utils/getDateTimeValue.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/DatePicker/hooks/useDatePickerState.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/DatePicker/utils/cn.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/DatePicker/DatePicker.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/date-components/dist/esm/components/DatePicker/hooks/useDatePickerProps.js","webpack://@ytsaurus/ui/./src/ui/common/utils/url-ts.ts","webpack://@ytsaurus/ui/./src/ui/pages/odin/_selectors/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/odin/odin-settings.ts","webpack://@ytsaurus/ui/./src/ui/pages/odin/_selectors/odin-overview.ts","webpack://@ytsaurus/ui/./src/ui/pages/odin/_actions/odin-overview.ts","webpack://@ytsaurus/ui/./src/ui/pages/odin/_actions/index.js","webpack://@ytsaurus/ui/./src/ui/pages/odin/controls/OdinOverviewCreatePresetDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/odin/controls/OdinOverview.tsx","webpack://@ytsaurus/ui/./src/ui/pages/odin/controls/OdinToolbar.js","webpack://@ytsaurus/ui/./src/ui/pages/odin/controls/AvailabilityMonitor.js","webpack://@ytsaurus/ui/./src/ui/pages/odin/controls/OdinMonitor.js","webpack://@ytsaurus/ui/./src/ui/containers/RootPage/RootPage.tsx","webpack://@ytsaurus/ui/./src/ui/pages/odin/controls/Odin.js","webpack://@ytsaurus/ui/./src/ui/pages/odin/controls/OdinTopRowContent.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/System/SystemTopRowContent.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevron-right.svg"],"sourcesContent":["import React from 'react';\nimport cn from 'bem-cn-lite';\nimport map_ from 'lodash/map';\nimport filter_ from 'lodash/filter';\n\nimport Select, {YTSelectProps} from '../../../../components/Select/Select';\n\nimport './ClusterSelectControl.scss';\nimport {ClusterConfig} from '../../../../../shared/yt-types';\nimport YT from '../../../../config/yt-config';\n\nconst block = cn('cluster-select-control');\n\ninterface Props {\n className?: string;\n\n value: string;\n onChange: (value: Props['value']) => void;\n\n isLanding?: boolean;\n\n placeholder?: string;\n\n disabled?: boolean;\n\n excludeClusters?: Array<string>;\n\n filterPredicate?: (cluster: ClusterConfig) => boolean;\n\n width?: YTSelectProps['width'];\n}\n\nfunction ClusterSelectControl({\n className,\n excludeClusters,\n onChange,\n value,\n placeholder,\n disabled,\n filterPredicate = () => true,\n width,\n}: Props) {\n const clusters = React.useMemo(() => {\n const res = map_(filter_(YT.clusters, filterPredicate), ({name, id}) => ({\n value: id,\n text: name,\n }));\n\n return res;\n }, [filterPredicate]);\n\n const items = React.useMemo(() => {\n if (!excludeClusters?.length) {\n return clusters;\n }\n\n const toSkip = new Set(excludeClusters);\n return filter_(clusters, ({value}) => {\n return !toSkip.has(value);\n });\n }, [clusters, excludeClusters]);\n\n const handleChange = React.useCallback(\n (value: Array<string>) => {\n onChange(value[0]);\n },\n [onChange],\n );\n\n return (\n <React.Fragment>\n <Select\n value={[value]}\n className={block({empty: !value}, className)}\n onUpdate={handleChange}\n items={items}\n placeholder={placeholder ?? 'Cluster...'}\n disabled={disabled}\n width={width}\n />\n </React.Fragment>\n );\n}\n\nClusterSelectControl.getDefaultValue = () => {\n return '';\n};\n\nClusterSelectControl.isEmpty = (value: string) => {\n return !value;\n};\n\nexport default ClusterSelectControl;\n","import cn from 'bem-cn-lite';\n\nimport filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\n\nimport type {EditableManyListsItemType} from '../../../../components/Dialog';\nimport type {ResponsibleType, RoleConverted, Subject} from '../../../../utils/acl/acl-types';\nimport type {PreparedRole} from '../../../../utils/acl';\nimport {RoleListControlProps} from './RoleListControl';\n\nexport const block = cn('role-list-control');\n\nexport function prepareRoleListValue(roles: Array<PreparedRole>, otherMembers: Array<string> = []) {\n const current: typeof roles = [];\n const toAdd: typeof roles = [];\n const toRemove: typeof roles = [];\n const unrecognized: typeof roles = [];\n forEach_(roles, (item) => {\n const {isUnrecognized, isRequested, isApproved, isDepriving} = item;\n if (isUnrecognized) {\n unrecognized.push(item);\n } else if (isDepriving) {\n toRemove.push(item);\n } else if (isApproved || isRequested) {\n toAdd.push(item);\n } else {\n current.push(item);\n }\n });\n\n const currentArr = current.map((item) => prepareItemOfCurrent(item));\n const otherArr = otherMembers.map((item) => ({\n title: item,\n data: {},\n frozen: true,\n }));\n\n return {\n newItems: [],\n current: {title: 'Current', data: currentArr.concat(otherArr)},\n toAdd: {\n title: 'Will be added',\n itemClassName: block('item-to-add'),\n data: toAdd.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n toRemove: {\n title: 'Will be removed',\n itemClassName: block('item-to-remove'),\n data: toRemove.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n unrecognized: {\n title: 'Unrecognized',\n itemClassName: block('item-unrecognized'),\n data: unrecognized.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n };\n}\n\nfunction prepareItemOfCurrent(role: PreparedRole, extraProps: any = {}) {\n return {\n title: role.text || role.value,\n data: role,\n ...extraProps,\n };\n}\n\nexport function roleListValueToSubjectList(\n value: RoleListControlProps['value'],\n): Array<ResponsibleType> {\n const {current, newItems, toAdd} = value;\n return [\n ...newItems,\n ...manyListDataItemToSubjectList(current),\n ...manyListDataItemToSubjectList(toAdd),\n ];\n}\n\nfunction manyListDataItemToSubjectList(\n manyListDataItem: EditableManyListsItemType<RoleConverted>,\n): Array<ResponsibleType> {\n const {data} = manyListDataItem || {};\n return map_(\n filter_(data, ({removed}) => !removed),\n ({data}) => {\n const {type, value} = data || {};\n return {type: type!, value: value!};\n },\n );\n}\n\nexport function extractChangedSubjects(value: {\n current: EditableManyListsItemType<RoleConverted>;\n newItems: Array<ResponsibleType>;\n}): {\n added: Subject[];\n removed: Subject[];\n} {\n const {current, newItems} = value;\n const added = newItems || [];\n const removed = ((current && current.data) || []).filter(({removed}) => removed);\n return {\n added: added.map(({type, value}) => {\n return type === 'users' ? {user: value} : {group: value};\n }),\n removed: removed.map(({data}) => {\n const {value, type} = data || {};\n return type === 'users' ? {user: value!} : {group: value!};\n }),\n };\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport type {FORM_ERROR as FormErrorType} from './index';\n\nimport {FIX_MY_TYPE, YTError} from '../../types';\nimport Block from '../../components/Block/Block';\n\nimport compact_ from 'lodash/compact';\nimport map_ from 'lodash/map';\n\nconst block = cn('yt-dialog-error');\n\nexport function DialogError(props: FIX_MY_TYPE) {\n return <Block {...props} className={block()} />;\n}\n\nexport function makeErrorFields(errors: Array<YTError | Error | undefined>) {\n return compact_(\n map_(errors, (error, index) => {\n return error\n ? {\n name: `error_${index}`,\n type: 'block' as const,\n extras: {\n children: <DialogError error={error} />,\n },\n }\n : undefined;\n }),\n );\n}\n\nconst FORM_ERROR: typeof FormErrorType = 'FINAL_FORM/form-error';\n\nexport function makeFormSubmitError(error: YTError) {\n return {\n validationErrors: {\n [FORM_ERROR]: <DialogError error={error} />,\n },\n };\n}\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\nimport {withDelayedMount} from '../../hocs/withDelayedMount';\n\nimport type {\n registerDialogControl as RegisterDialogControlFn,\n registerDialogTabControl as RegisterDialogTabControlFn,\n YTDialogType,\n} from './Dialog';\n\nexport type * from './Dialog';\nexport * from './DialogError';\nexport * from './controls/RoleListControl/utils';\n\nexport function importYTDFDialog() {\n return import(/* webpackChunkName: \"yt-df-dialog\" */ './Dialog');\n}\n\nexport const YTDFDialog = withDelayedMount(\n withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).YTDialog};\n }),\n '',\n ),\n) as YTDialogType;\n\nexport function useControlRegistration(\n fn: (params: {\n registerDialogControl: typeof RegisterDialogControlFn;\n registerDialogTabControl: typeof RegisterDialogTabControlFn;\n }) => void,\n) {\n importYTDFDialog().then(({registerDialogControl, registerDialogTabControl}) => {\n fn({registerDialogControl, registerDialogTabControl});\n });\n}\n\nexport type {RoleListControlProps} from './controls/RoleListControl/RoleListControl';\nexport const RoleListControl = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).RoleListControl};\n }),\n '',\n);\n\nexport const EditableList = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).EditableList};\n }),\n '',\n);\n\nexport const TabFieldVertical = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).TabFieldVertical};\n }),\n '',\n);\n","import React from 'react';\n\n/**\n * The hoc allows to delay mounting until `props.visible == true`.\n * The hoc might be useful to wrap components wrapped by React.lazy\n * @param Component\n * @returns\n */\nexport function withDelayedMount<P extends {visible?: boolean}>(Component: React.ComponentType<P>) {\n return function MountOnFirstVisible(props: P) {\n const [mounted, setMounted] = React.useState(false);\n React.useEffect(() => {\n if (!mounted && props.visible) {\n setMounted(true);\n }\n }, [props.visible, mounted]);\n return !mounted ? null : <Component {...props} />;\n };\n}\n","import React, {Component} from 'react';\n\nimport {Toaster} from '@gravity-ui/uikit';\nimport Error from '../../components/Error/Error';\nimport hammer from '../../common/hammer';\n\nimport {showErrorPopup} from '../../utils/utils';\nimport {YTError} from '../../types';\n\nconst toaster = new Toaster();\n\ninterface LoadDataHandlerProps {\n alwaysShowError?: boolean;\n loaded: boolean;\n error: boolean;\n errorData?: YTError;\n children: React.ReactNode;\n}\n\nexport default class LoadDataHandler extends Component<LoadDataHandlerProps> {\n componentDidUpdate() {\n const {error, loaded, errorData} = this.props;\n\n if (error && loaded) {\n toaster.add({\n theme: 'danger',\n name: 'network',\n autoHiding: 500000,\n title: 'Oops! something went wrong.',\n content: errorData ? (errorData as YTError).message : hammer.format.NO_VALUE,\n actions: [\n {\n label: ' view',\n onClick: () => showErrorPopup(errorData as YTError),\n },\n ],\n });\n }\n }\n\n render() {\n const {alwaysShowError = false, error, errorData, loaded, children} = this.props;\n\n const initialLoading = !loaded;\n\n if (error && (alwaysShowError || initialLoading)) {\n return <Error error={errorData} />;\n }\n\n return children;\n }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport Button from '../../components/Button/Button';\nimport Icon from '../../components/Icon/Icon';\n\nconst block = cn('elements-message');\n\nexport default function Message({\n theme = 'default',\n showClose = false,\n dismissCallback,\n content,\n buttons,\n}) {\n return (\n <div className={block({theme})}>\n {showClose && (\n <div className={block('close')}>\n <Button size=\"m\" view=\"flat-secondary\" title=\"Close\" onClick={dismissCallback}>\n <Icon type=\"close\" />\n </Button>\n </div>\n )}\n\n {React.isValidElement(content)\n ? {content}\n : map_(content, (data, index) => (\n <p key={index} className={block('paragraph')}>\n {data}\n </p>\n ))}\n\n {buttons && (\n <div className={block('buttons')}>\n {map_(buttons, (button) => (\n <span className={block('button')} key={button.text}>\n <Button size=\"m\" title={button.text} onClick={button.callback}>\n {button.text}\n </Button>\n </span>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nMessage.propTypes = {\n theme: PropTypes.string,\n showClose: PropTypes.bool,\n dismissCallback: (props, propName, componentName) => {\n if (props.showClose && typeof props[propName] !== 'function') {\n return new Error(\n `You have to provide dismissCallback to ${componentName} when showClose is true`,\n );\n }\n },\n content: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.string)]).isRequired,\n buttons: PropTypes.arrayOf(PropTypes.object),\n};\n","import React, {FC} from 'react';\nimport {Datepicker, DatepickerProps, datepickerDefaultProps} from './Datepicker';\n\nexport * from './Datepicker';\n\nexport const DatePickerWrapper: FC<DatepickerProps> = (props) => <Datepicker {...props} />;\nDatePickerWrapper.defaultProps = datepickerDefaultProps;\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 React from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport partition_ from 'lodash/partition';\n\nimport Link from '../../components/Link/Link';\nimport './ClusterMenuHeader.scss';\nimport {DropdownMenu} from '@gravity-ui/uikit';\nimport Button from '../../components/Button/Button';\nimport Icon from '../../components/Icon/Icon';\nimport {ALL_LINKS_ITEMS, HeaderLinkItem} from './header-links-items';\nimport {wrapApiPromiseByToaster} from '../../utils/utils';\nimport {ActionD} from '../../types';\n\nconst b = block('cluster-menu');\n\nHeaderLinks.propTypes = {\n currentUrl: PropTypes.string,\n showTitle: PropTypes.bool,\n};\n\ninterface Props {\n currentUrl?: string;\n showTitle?: boolean;\n}\n\nfunction getItemVisibilityOrFalse(item: HeaderLinkItem) {\n if (!item.getVisible) {\n return Promise.resolve(false);\n }\n\n return wrapApiPromiseByToaster(item.getVisible(), {\n toasterName: 'link_item_visibility_' + item.href,\n skipSuccessToast: true,\n errorContent: <span>Cannot get visibity for {item.href}. </span>,\n })\n .then((visible) => {\n return visible;\n })\n .catch(() => {\n return false;\n });\n}\n\ninterface LinksVisibilityState {\n visibilityByHref: {[href: string]: boolean};\n requestedHrefs: Set<string>;\n}\nconst linksVisibilityState: LinksVisibilityState = {\n visibilityByHref: {},\n requestedHrefs: new Set(),\n};\n\ntype LinksVisibilityAction =\n | ActionD<'add-visible-items', LinksVisibilityState['visibilityByHref']>\n | ActionD<'add-requested-hrefs', Array<string>>;\n\nfunction reducer(state: LinksVisibilityState, action: LinksVisibilityAction) {\n switch (action.type) {\n case 'add-visible-items':\n return {...state, visibilityByHref: {...state.visibilityByHref, ...action.data}};\n case 'add-requested-hrefs':\n forEach_(action.data, (href) => state.requestedHrefs.add(href));\n return {...state};\n default:\n return state;\n }\n}\n\nfunction useLinkItems(items: Array<HeaderLinkItem>) {\n const [{visibilityByHref, requestedHrefs}, dispatch] = React.useReducer(\n reducer,\n linksVisibilityState,\n );\n\n const [visible, rest] = React.useMemo(() => {\n return partition_(items, (item) => {\n return !item.getVisible || visibilityByHref[item.href];\n });\n }, [items, visibilityByHref]);\n\n React.useEffect(() => {\n const toRequest = filter_(rest, (item) => !requestedHrefs.has(item.href));\n\n if (!toRequest.length) {\n return;\n }\n\n dispatch({type: 'add-requested-hrefs', data: map_(toRequest, (item) => item.href)});\n const collected: typeof visibilityByHref = {};\n Promise.all(\n map_(toRequest, (item) => {\n return getItemVisibilityOrFalse(item).then((value) => {\n collected[item.href] = value;\n });\n }),\n ).then(() => {\n dispatch({type: 'add-visible-items', data: collected});\n });\n }, [rest]);\n\n return visible;\n}\n\nexport function HeaderLinks({currentUrl, showTitle}: Props) {\n const items = useLinkItems(ALL_LINKS_ITEMS);\n const [other, [current]] = React.useMemo(\n () => partition_(items, ({href}) => href !== currentUrl),\n [items, currentUrl],\n );\n\n return (\n <React.Fragment>\n {showTitle && Boolean(current) && <div className={b('page-name')}>{current.text}</div>}\n <div className={b('links', {theme: 'expanded'})}>\n <ul className={b('links-list', block('elements-list')({type: 'unstyled'}))}>\n {map_(other, (link) => (\n <li key={link.text}>\n <Link routed={link.routed} url={link.href} className={b('links-item')}>\n {link.text}\n </Link>\n </li>\n ))}\n </ul>\n </div>\n <div className={b('links', {theme: 'collapsed'})}>\n <DropdownMenu\n popupProps={{className: b('popup')}}\n switcher={\n <Button>\n Links&nbsp;\n <Icon awesome={'chevron-down'} />\n </Button>\n }\n items={map_(items, (item) => {\n return {action() {}, ...item};\n })}\n size={'l'}\n />\n </div>\n </React.Fragment>\n );\n}\n\nHeaderImpl.propTypes = {\n // own Props\n currentUrl: PropTypes.string,\n};\n\nfunction HeaderImpl({currentUrl, showTitle}: {currentUrl?: string; showTitle?: boolean}) {\n return (\n <div className={b('header', 'elements-page__header')}>\n <HeaderLinks currentUrl={currentUrl} showTitle={showTitle} />\n </div>\n );\n}\n\nexport const HeaderWithLinks = React.memo(HeaderImpl);\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","const SvgChevronLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M10.53 2.97a.75.75 0 0 1 0 1.06L6.56 8l3.97 3.97a.75.75 0 1 1-1.06 1.06l-4.5-4.5a.75.75 0 0 1 0-1.06l4.5-4.5a.75.75 0 0 1 1.06 0\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronLeft;","import * as React from 'react';\nconst Calendar = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M5.25 5.497a.75.75 0 0 1-.75-.75V4A1.5 1.5 0 0 0 3 5.5v1h10v-1A1.5 1.5 0 0 0 11.5 4v.75a.75.75 0 0 1-1.5 0V4H6v.747a.75.75 0 0 1-.75.75ZM10 2.5H6v-.752a.75.75 0 1 0-1.5 0V2.5a3 3 0 0 0-3 3v6a3 3 0 0 0 3 3h7a3 3 0 0 0 3-3v-6a3 3 0 0 0-3-3v-.75a.75.75 0 0 0-1.5 0v.75ZM3 8v3.5A1.5 1.5 0 0 0 4.5 13h7a1.5 1.5 0 0 0 1.5-1.5V8H3Z\", clipRule: \"evenodd\" })));\nexport default Calendar;\n","import * as React from 'react';\nconst Clock = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M13.5 8a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0ZM15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM8.75 4.5a.75.75 0 0 0-1.5 0V8a.75.75 0 0 0 .3.6l2 1.5a.75.75 0 1 0 .9-1.2l-1.7-1.275V4.5Z\", clipRule: \"evenodd\" })));\nexport default Clock;\n","import React from 'react';\nimport { ChevronDown } from '@gravity-ui/icons';\nimport { Icon } from '../Icon';\nimport { block } from '../utils/cn';\nimport './ArrowToggle.css';\nconst b = block('arrow-toggle');\nexport function ArrowToggle({ size = 16, direction = 'bottom', className, qa }) {\n return (React.createElement(\"span\", { style: { width: size, height: size }, className: b({ direction }, className), \"data-qa\": qa },\n React.createElement(Icon, { data: ChevronDown, size: size })));\n}\n","import { withNaming } from '@bem-react/classname';\nexport const NAMESPACE = 'g-date-';\nexport const block = withNaming({ n: NAMESPACE, e: '__', m: '_' });\n","import { addComponentKeysets } from '@gravity-ui/uikit/i18n';\nimport { NAMESPACE } from '../../../utils/cn';\nimport en from './en.json';\nimport ru from './ru.json';\nexport const i18n = addComponentKeysets({ en, ru }, `${NAMESPACE}calendar`);\n","import React from 'react';\nimport { useFocusWithin } from '@gravity-ui/uikit';\nimport { i18n } from '../i18n';\nconst buttonDisabledClassName = 'yc-button_disabled g-button_disabled';\n// eslint-disable-next-line complexity\nexport function useCalendarProps(props, state) {\n const title = state.mode === 'years' || state.mode === 'quarters'\n ? `${state.startDate.year()} — ${state.endDate.year()}`\n : state.focusedDate.format(state.mode === 'days' ? 'MMMM YYYY' : 'YYYY');\n const { focusWithinProps } = useFocusWithin({\n onFocusWithin: props.onFocus,\n onBlurWithin: props.onBlur,\n });\n const calendarProps = Object.assign({ role: 'group', id: props.id, 'aria-label': [props['aria-label'], title].filter(Boolean).join(', '), 'aria-labelledby': props['aria-labelledby'] || undefined, 'aria-describedby': props['aria-describedby'] || undefined, 'aria-details': props['aria-details'] || undefined, 'aria-disabled': state.disabled || undefined }, focusWithinProps);\n const modeIndex = state.availableModes.indexOf(state.mode);\n const isModeLast = modeIndex + 1 === state.availableModes.length;\n const isNextModeLast = modeIndex + 2 === state.availableModes.length;\n const modeDisabled = state.disabled || isModeLast;\n const modeButtonProps = {\n disabled: state.disabled,\n // FIXME: do not use button class name\n className: modeDisabled ? buttonDisabledClassName : undefined,\n onClick: modeDisabled\n ? undefined\n : () => {\n state.zoomOut();\n if (isNextModeLast) {\n state.setFocused(true);\n }\n },\n extraProps: {\n 'aria-disabled': modeDisabled ? 'true' : undefined,\n 'aria-description': getAriaDescriptionForModeButton(state.mode, state.availableModes),\n 'aria-live': 'polite',\n },\n children: title,\n };\n const previousFocused = React.useRef(false);\n const previousDisabled = state.disabled || state.isPreviousPageInvalid();\n React.useLayoutEffect(() => {\n if (previousDisabled && previousFocused.current) {\n previousFocused.current = false;\n state.setFocused(true);\n }\n });\n const previousButtonProps = {\n disabled: state.disabled,\n // FIXME: do not use button class name\n className: previousDisabled ? buttonDisabledClassName : undefined,\n onClick: previousDisabled\n ? undefined\n : () => {\n state.focusPreviousPage();\n },\n onFocus: previousDisabled\n ? undefined\n : () => {\n previousFocused.current = true;\n },\n onBlur: previousDisabled\n ? undefined\n : () => {\n previousFocused.current = false;\n },\n extraProps: {\n 'aria-label': i18n('Previous'),\n 'aria-disabled': previousDisabled ? 'true' : undefined,\n },\n };\n const nextFocused = React.useRef(false);\n const nextDisabled = state.disabled || state.isNextPageInvalid();\n React.useLayoutEffect(() => {\n if (nextDisabled && nextFocused.current) {\n nextFocused.current = false;\n state.setFocused(true);\n }\n });\n const nextButtonProps = {\n disabled: state.disabled,\n // FIXME: do not use button class name\n className: nextDisabled ? buttonDisabledClassName : undefined,\n onClick: nextDisabled\n ? undefined\n : () => {\n state.focusNextPage();\n },\n onFocus: nextDisabled\n ? undefined\n : () => {\n nextFocused.current = true;\n },\n onBlur: nextDisabled\n ? undefined\n : () => {\n nextFocused.current = false;\n },\n extraProps: {\n 'aria-label': i18n('Next'),\n 'aria-disabled': previousDisabled ? 'true' : undefined,\n },\n };\n return {\n calendarProps,\n modeButtonProps,\n nextButtonProps,\n previousButtonProps,\n };\n}\nfunction getAriaDescriptionForModeButton(mode, availableModes) {\n const nextModeIndex = availableModes.indexOf(mode) + 1;\n const isModeLast = nextModeIndex === availableModes.length;\n if (isModeLast) {\n return undefined;\n }\n const ariaLabelMap = {\n days: '',\n months: i18n('Switch to months view'),\n quarters: i18n('Switch to quarters view'),\n years: i18n('Switch to years view'),\n };\n const nextMode = availableModes[nextModeIndex];\n return ariaLabelMap[nextMode];\n}\n","import { dateTime } from '@gravity-ui/date-utils';\nexport function constrainValue(value, minValue, maxValue) {\n if (minValue && value.isBefore(minValue)) {\n return minValue;\n }\n if (maxValue && maxValue.isBefore(value)) {\n return maxValue;\n }\n return value;\n}\nexport function getDaysInPeriod(startDate, _endDate, mode) {\n const days = [];\n if (mode === 'days') {\n const currentDate = startDate.startOf('week');\n for (let i = 0; i < 42; i++) {\n days.push(currentDate.add({ days: i }));\n }\n }\n else if (mode === 'quarters') {\n for (let i = 0; i < 16; i++) {\n days.push(startDate.add(i, 'quarters'));\n }\n }\n else {\n for (let i = 0; i < 12; i++) {\n days.push(startDate.add({ [mode]: i }));\n }\n }\n return days;\n}\nexport function getWeekDays() {\n const weekDays = [];\n const weekStart = dateTime().startOf('week');\n for (let i = 0; i < 7; i++) {\n const date = weekStart.add({ days: i });\n weekDays.push(date);\n }\n return weekDays;\n}\nexport const calendarLayouts = ['days', 'months', 'quarters', 'years'];\n","'use client';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React from 'react';\nimport { ChevronLeft, ChevronRight } from '@gravity-ui/icons';\nimport { ArrowToggle, Button } from '@gravity-ui/uikit';\nimport { block } from '../../utils/cn';\nimport { useCalendarCellProps } from './hooks/useCalendarCellProps';\nimport { useCalendarGridProps } from './hooks/useCalendarGridProps';\nimport { useCalendarProps } from './hooks/useCalendarProps';\nimport { calendarLayouts, getDaysInPeriod, getWeekDays } from './utils';\nimport './Calendar.css';\nconst b = block('calendar');\nexport const CalendarView = React.forwardRef(function Calendar(props, ref) {\n const { state } = props;\n const { calendarProps, modeButtonProps, nextButtonProps, previousButtonProps } = useCalendarProps(props, state);\n React.useImperativeHandle(ref, () => ({\n focus() {\n state.setFocused(true);\n },\n }));\n return (_jsxs(\"div\", Object.assign({}, calendarProps, { className: b({ size: props.size }), children: [_jsxs(\"div\", { className: b('header'), children: [_jsx(Button, Object.assign({}, modeButtonProps, { view: \"flat\", size: props.size, children: state.availableModes.indexOf(state.mode) + 1 ===\n state.availableModes.length ? (_jsx(\"span\", { className: b('mode-label', b(`years-label`)), children: modeButtonProps.children }, \"label\")) : ([\n _jsx(\"span\", { className: b('mode-label'), children: modeButtonProps.children }, \"label\"),\n _jsx(Button.Icon, { children: _jsx(ArrowToggle, { direction: \"bottom\" }) }, \"icon\"),\n ]) })), _jsxs(\"div\", { className: b('controls'), children: [_jsx(Button, Object.assign({}, previousButtonProps, { view: \"flat\", size: props.size, children: _jsx(Button.Icon, { children: _jsx(ChevronLeft, { className: b('control-icon') }) }) })), _jsx(Button, Object.assign({}, nextButtonProps, { view: \"flat\", size: props.size, children: _jsx(Button.Icon, { children: _jsx(ChevronRight, { className: b('control-icon') }) }) }))] })] }), _jsx(CalendarGrid, { state: state })] })));\n});\nfunction CalendarGrid({ state }) {\n const [prevState, setPrevState] = React.useState(() => (Object.assign(Object.assign({}, state), { isFocused: false })));\n const modeChanged = state.mode !== prevState.mode;\n const startDateChanged = !state.startDate.isSame(prevState.startDate, 'days');\n let animation;\n if (modeChanged) {\n if (calendarLayouts.indexOf(prevState.mode) > calendarLayouts.indexOf(state.mode)) {\n animation = 'zoom-out';\n }\n else {\n animation = 'zoom-in';\n }\n }\n else if (startDateChanged) {\n if (state.startDate.isBefore(prevState.startDate)) {\n animation = 'forward';\n }\n else {\n animation = 'backward';\n }\n }\n const { gridProps } = useCalendarGridProps(state);\n return (_jsxs(\"div\", Object.assign({ className: b('grid') }, gridProps, { children: [animation && (_jsx(Content, { className: b('previous-state'), state: prevState, animation: animation })), _jsx(Content, { className: b('current-state'), state: state, animation: animation, onAnimationEnd: () => {\n setPrevState(Object.assign(Object.assign({}, state), { isFocused: false }));\n } }, \"current\")] })));\n}\nfunction Content({ className, state, animation, onAnimationEnd }) {\n return (_jsxs(\"div\", { className: b('content', { animation }, className), onAnimationEnd: onAnimationEnd, role: \"presentation\", children: [state.mode === 'days' && _jsx(Weekdays, { state: state }), _jsx(CalendarGridCells, { state: state })] }));\n}\nfunction Weekdays({ state }) {\n const weekdays = getWeekDays();\n return (_jsx(\"div\", { className: b('grid-row'), role: \"row\", children: weekdays.map((date) => {\n return (_jsx(\"div\", { className: b('weekday', { weekend: state.isWeekend(date) }), role: \"columnheader\", \"aria-label\": date.format('dddd'), children: date.format('dd') }, date.day()));\n }) }));\n}\nfunction CalendarGridCells({ state }) {\n const rowsInPeriod = state.mode === 'days' ? 6 : 4;\n const columnsInRow = state.mode === 'days' ? 7 : 3 + (state.mode === 'quarters' ? 1 : 0);\n const days = getDaysInPeriod(state.startDate, state.endDate, state.mode);\n return (_jsx(\"div\", { className: b('grid-rowgroup', { mode: state.mode }), role: \"rowgroup\", children: [...new Array(rowsInPeriod).keys()].map((rowIndex) => (_jsxs(\"div\", { className: b('grid-row'), role: \"row\", children: [state.mode === 'quarters' ? (_jsx(\"span\", { role: \"rowheader\", className: b('grid-rowgroup-header'), children: days[rowIndex * columnsInRow].format('YYYY') })) : null, days\n .slice(rowIndex * columnsInRow, (rowIndex + 1) * columnsInRow)\n .map((date) => {\n return _jsx(CalendarCell, { date: date, state: state }, date.unix());\n })] }, rowIndex))) }));\n}\nfunction CalendarCell({ date, state }) {\n const { cellProps, buttonProps, formattedDate, isDisabled, isSelected, isRangeSelection, isSelectionStart, isSelectionEnd, isOutsideCurrentRange, isUnavailable, isCurrent, isWeekend, } = useCalendarCellProps(date, state);\n return (_jsx(\"div\", Object.assign({}, cellProps, { children: _jsx(\"div\", Object.assign({}, buttonProps, { className: b('button', {\n disabled: isDisabled,\n selected: isSelected,\n 'range-selection': isRangeSelection,\n 'selection-start': isSelectionStart,\n 'selection-end': isSelectionEnd,\n 'out-of-boundary': isOutsideCurrentRange,\n unavailable: isUnavailable,\n current: isCurrent,\n weekend: isWeekend,\n }), children: formattedDate })) })));\n}\n","import { useFocusWithin } from '@gravity-ui/uikit';\nexport function useCalendarGridProps(state) {\n const { focusWithinProps } = useFocusWithin({\n onFocusWithinChange: (isFocused) => {\n state.setFocused(isFocused);\n },\n });\n const gridProps = Object.assign(Object.assign({ role: 'grid', 'aria-label': state.mode === 'years' || state.mode === 'quarters'\n ? `${state.startDate.year()} — ${state.endDate.year()}`\n : state.focusedDate.format(state.mode === 'days' ? 'MMMM YYYY' : 'YYYY'), 'aria-disabled': state.disabled ? 'true' : undefined, 'aria-readonly': state.readOnly ? 'true' : undefined }, focusWithinProps), { onKeyDown: (e) => {\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n state.focusNextCell();\n }\n else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n state.focusPreviousCell();\n }\n else if (e.key === 'ArrowDown') {\n e.preventDefault();\n state.focusNextRow();\n }\n else if (e.key === 'ArrowUp') {\n e.preventDefault();\n state.focusPreviousRow();\n }\n else if (e.key === 'PageDown') {\n e.preventDefault();\n state.focusNextPage(e.shiftKey);\n }\n else if (e.key === 'PageUp') {\n e.preventDefault();\n state.focusPreviousPage(e.shiftKey);\n }\n else if (e.key === 'End') {\n e.preventDefault();\n state.focusSectionEnd();\n }\n else if (e.key === 'Home') {\n e.preventDefault();\n state.focusSectionStart();\n }\n else if (e.code === 'Minus') {\n e.preventDefault();\n state.zoomOut();\n }\n else if (e.code === 'Equal') {\n e.preventDefault();\n state.zoomIn();\n }\n else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n state.selectDate(state.focusedDate);\n }\n } });\n return {\n gridProps,\n };\n}\n","import React from 'react';\nexport function useCalendarCellProps(date, state) {\n const ref = React.useRef(null);\n const isFocused = state.isCellFocused(date);\n React.useEffect(() => {\n var _a;\n if (isFocused) {\n (_a = ref.current) === null || _a === void 0 ? void 0 : _a.focus({ preventScroll: true });\n }\n }, [isFocused]);\n const tabIndex = state.focusedDate.isSame(date, state.mode) ? 0 : -1;\n const isDisabled = state.isCellDisabled(date);\n const isSelected = state.isSelected(date);\n const highlightedRange = 'highlightedRange' in state && state.highlightedRange;\n const isRangeSelection = Boolean(highlightedRange && isSelected);\n const isSelectionStart = isSelected && highlightedRange && date.isSame(highlightedRange.start, state.mode);\n const isSelectionEnd = isSelected && highlightedRange && date.isSame(highlightedRange.end, state.mode);\n const isOutsideCurrentRange = state.mode === 'days' ? !state.focusedDate.isSame(date, 'month') : false;\n const isUnavailable = state.isCellUnavailable(date);\n const isSelectable = !isDisabled && !isUnavailable;\n const isCurrent = state.isCurrent(date);\n const isWeekend = state.isWeekend(date);\n const label = getDateLabel(date, state.mode);\n const cellProps = {\n role: 'gridcell',\n 'aria-selected': isSelected ? 'true' : undefined,\n 'aria-disabled': isDisabled ? 'true' : undefined,\n };\n const buttonProps = {\n ref,\n role: 'button',\n tabIndex: isDisabled ? undefined : tabIndex,\n 'aria-disabled': isSelectable ? undefined : 'true',\n 'aria-label': label,\n onClick: isSelectable\n ? () => {\n state.setFocusedDate(date);\n state.selectDate(date);\n }\n : undefined,\n onPointerEnter() {\n if ('highlightDate' in state && isSelectable) {\n if (isOutsideCurrentRange) {\n const newDate = date.isBefore(state.focusedDate)\n ? state.focusedDate.startOf('month')\n : state.focusedDate.endOf('month').startOf('date');\n state.highlightDate(newDate);\n }\n else {\n state.highlightDate(date);\n }\n }\n },\n };\n let formattedDate = date.format('D');\n if (state.mode === 'months') {\n formattedDate = date.format('MMM');\n }\n else if (state.mode === 'quarters') {\n formattedDate = date.format('[Q]Q');\n }\n else if (state.mode === 'years') {\n formattedDate = date.format('YYYY');\n }\n return {\n cellProps,\n buttonProps,\n formattedDate,\n isDisabled,\n isSelected,\n isRangeSelection,\n isSelectionStart,\n isSelectionEnd,\n isOutsideCurrentRange,\n isUnavailable,\n isCurrent,\n isWeekend,\n };\n}\nfunction getDateLabel(date, mode) {\n let label = '';\n if (mode === 'days') {\n label = `${date.format('dddd')}, ${date.format('LL')}`;\n }\n else if (mode === 'months') {\n label = `${date.format('MMMM YYYY')}`;\n }\n else if (mode === 'quarters') {\n label = `${date.format('[Q]Q YYYY')}`;\n }\n else if (mode === 'years') {\n label = `${date.format('YYYY')}`;\n }\n return label;\n}\n","import { dateTime } from '@gravity-ui/date-utils';\nexport function createPlaceholderValue({ placeholderValue, timeZone }) {\n return (placeholderValue !== null && placeholderValue !== void 0 ? placeholderValue : dateTime({ timeZone }).set('hour', 0).set('minute', 0).set('second', 0));\n}\nexport function isInvalid(value, minValue, maxValue) {\n if (!value) {\n return false;\n }\n if (minValue && value.isBefore(minValue)) {\n return true;\n }\n if (maxValue && maxValue.isBefore(value)) {\n return true;\n }\n return false;\n}\nexport function mergeDateTime(date, time) {\n return date\n .set('hours', time.hour())\n .set('minutes', time.minute())\n .set('seconds', time.second());\n}\n","import React from 'react';\nexport function useDefaultTimeZone(date) {\n const defaultTimeZone = date ? date.timeZone() : 'default';\n const [lastValue, setLastValue] = React.useState(defaultTimeZone);\n if (date && defaultTimeZone !== lastValue) {\n setLastValue(defaultTimeZone);\n }\n const timeZone = date ? defaultTimeZone : lastValue;\n return timeZone;\n}\n","import React from 'react';\nimport { dateTime } from '@gravity-ui/date-utils';\nimport { useControlledState } from '@gravity-ui/uikit';\nimport { createPlaceholderValue, mergeDateTime } from '../../utils/dates';\nimport { useDefaultTimeZone } from '../../utils/useDefaultTimeZone';\nimport { calendarLayouts, constrainValue } from '../utils';\nconst defaultModes = {\n days: true,\n months: true,\n quarters: false,\n years: true,\n};\nexport function useCalendarState(props) {\n var _a, _b, _c;\n const { disabled, readOnly, modes = defaultModes } = props;\n const [value, setValue] = useControlledState(props.value, (_a = props.defaultValue) !== null && _a !== void 0 ? _a : null, props.onUpdate);\n const availableModes = calendarLayouts.filter((l) => modes[l]);\n const minMode = availableModes[0] || 'days';\n const [mode, setMode] = useControlledState(props.mode, (_b = props.defaultMode) !== null && _b !== void 0 ? _b : minMode, props.onUpdateMode);\n const currentMode = mode && availableModes.includes(mode) ? mode : minMode;\n const inputTimeZone = useDefaultTimeZone(props.value || props.defaultValue || props.focusedValue || props.defaultFocusedValue);\n const timeZone = props.timeZone || inputTimeZone;\n const minValue = React.useMemo(() => (props.minValue ? props.minValue.timeZone(timeZone) : undefined), [timeZone, props.minValue]);\n const maxValue = React.useMemo(() => (props.maxValue ? props.maxValue.timeZone(timeZone) : undefined), [timeZone, props.maxValue]);\n const focusedValue = React.useMemo(() => {\n if (!props.focusedValue) {\n return props.focusedValue;\n }\n return constrainValue(props.focusedValue.timeZone(timeZone), minValue, maxValue);\n }, [props.focusedValue, minValue, maxValue, timeZone]);\n const defaultFocusedValue = React.useMemo(() => {\n var _a;\n const defaultValue = ((_a = (props.defaultFocusedValue ? props.defaultFocusedValue : value)) === null || _a === void 0 ? void 0 : _a.timeZone(timeZone)) ||\n createPlaceholderValue({ timeZone }).startOf(minMode);\n return constrainValue(defaultValue, minValue, maxValue);\n }, [maxValue, minValue, props.defaultFocusedValue, timeZone, value, minMode]);\n const [focusedDateInner, setFocusedDate] = useControlledState(focusedValue, defaultFocusedValue, (date) => {\n var _a;\n (_a = props.onFocusUpdate) === null || _a === void 0 ? void 0 : _a.call(props, date.timeZone(inputTimeZone));\n });\n const focusedDate = (_c = focusedDateInner === null || focusedDateInner === void 0 ? void 0 : focusedDateInner.timeZone(timeZone)) !== null && _c !== void 0 ? _c : constrainValue(createPlaceholderValue({ timeZone }), minValue, maxValue);\n if (isInvalid(focusedDate, minValue, maxValue)) {\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n setFocusedDate(constrainValue(focusedDate, minValue, maxValue));\n }\n function focusCell(date) {\n setFocusedDate(constrainValue(date.startOf(currentMode), minValue, maxValue));\n }\n const [isFocused, setFocused] = React.useState(props.autoFocus || false);\n const startDate = getStartDate(focusedDate, currentMode);\n const endDate = getEndDate(focusedDate, currentMode);\n return {\n disabled,\n readOnly,\n value,\n setValue(date) {\n if (!disabled && !readOnly) {\n let newValue = constrainValue(date, minValue, maxValue);\n if (this.isCellUnavailable(newValue)) {\n return;\n }\n if (value) {\n // If there is a date already selected, then we want to keep its time\n newValue = mergeDateTime(newValue, value.timeZone(timeZone));\n }\n setValue(newValue.timeZone(inputTimeZone));\n }\n },\n timeZone,\n selectDate(date, force = false) {\n if (!disabled) {\n if (!readOnly && (force || this.mode === minMode)) {\n this.setValue(date.startOf(minMode));\n if (force && currentMode !== minMode) {\n setMode(minMode);\n }\n }\n else {\n this.zoomIn();\n }\n }\n },\n minValue,\n maxValue,\n focusedDate,\n startDate,\n endDate,\n setFocusedDate(date) {\n focusCell(date);\n setFocused(true);\n },\n focusNextCell() {\n focusCell(focusedDate.add(1, this.mode));\n },\n focusPreviousCell() {\n focusCell(focusedDate.subtract(1, this.mode));\n },\n focusNextRow() {\n if (this.mode === 'days') {\n focusCell(focusedDate.add(1, 'week'));\n }\n else if (this.mode === 'quarters') {\n focusCell(focusedDate.add(1, 'years'));\n }\n else {\n focusCell(focusedDate.add(3, this.mode));\n }\n },\n focusPreviousRow() {\n if (this.mode === 'days') {\n focusCell(focusedDate.subtract(1, 'week'));\n }\n else if (this.mode === 'quarters') {\n focusCell(focusedDate.subtract(1, 'years'));\n }\n else {\n focusCell(focusedDate.subtract(3, this.mode));\n }\n },\n focusNextPage(larger) {\n if (this.mode === 'days') {\n focusCell(focusedDate.add({ months: larger ? 12 : 1 }));\n }\n else if (this.mode === 'quarters') {\n focusCell(focusedDate.add(4, 'years'));\n }\n else {\n focusCell(focusedDate.add(12, this.mode));\n }\n },\n focusPreviousPage(larger) {\n if (this.mode === 'days') {\n focusCell(focusedDate.subtract({ months: larger ? 12 : 1 }));\n }\n else if (this.mode === 'quarters') {\n focusCell(focusedDate.subtract(4, 'years'));\n }\n else {\n focusCell(focusedDate.subtract(12, this.mode));\n }\n },\n focusSectionStart() {\n focusCell(getStartDate(focusedDate, this.mode));\n },\n focusSectionEnd() {\n focusCell(getEndDate(focusedDate, this.mode));\n },\n zoomIn() {\n const nextMode = availableModes[availableModes.indexOf(this.mode) - 1];\n if (nextMode) {\n this.setMode(nextMode);\n }\n },\n zoomOut() {\n const nextMode = availableModes[availableModes.indexOf(this.mode) + 1];\n if (nextMode) {\n this.setMode(nextMode);\n }\n },\n selectFocusedDate() {\n this.selectDate(focusedDate, true);\n },\n isFocused,\n setFocused,\n isInvalid(date) {\n return isInvalid(date, this.minValue, this.maxValue, this.mode);\n },\n isPreviousPageInvalid() {\n const prev = this.startDate.subtract(1, 'day');\n return this.isInvalid(prev);\n },\n isNextPageInvalid() {\n const next = this.endDate.endOf(this.mode).add(1, 'day');\n return this.isInvalid(next);\n },\n isSelected(date) {\n return Boolean(value &&\n date.isSame(value.timeZone(timeZone), currentMode) &&\n !this.isCellDisabled(date));\n },\n isCellUnavailable(date) {\n if (this.mode === minMode) {\n return Boolean(props.isDateUnavailable && props.isDateUnavailable(date));\n }\n else {\n return false;\n }\n },\n isCellFocused(date) {\n return this.isFocused && focusedDate && date.isSame(focusedDate, currentMode);\n },\n isCellDisabled(date) {\n return this.disabled || this.isInvalid(date);\n },\n isWeekend(date) {\n return this.mode === 'days' && [0, 6].includes(date.day());\n },\n isCurrent(date) {\n return dateTime({ timeZone }).isSame(date, this.mode);\n },\n mode: currentMode,\n setMode,\n availableModes,\n };\n}\nfunction getStartDate(date, mode) {\n if (mode === 'days') {\n return date.startOf('month');\n }\n if (mode === 'months') {\n return date.startOf('year');\n }\n if (mode === 'quarters') {\n const year = Math.floor(date.year() / 4) * 4;\n return date.startOf('year').set('year', year);\n }\n const year = Math.floor(date.year() / 12) * 12;\n return date.startOf('year').set('year', year);\n}\nfunction getEndDate(date, mode) {\n if (mode === 'days') {\n return date.endOf('month').startOf('day');\n }\n if (mode === 'months') {\n return date.endOf('year').startOf('month');\n }\n const startDate = getStartDate(date, mode);\n if (mode === 'quarters') {\n return startDate.add(15, 'quarters');\n }\n return startDate.add({ [mode]: 11 });\n}\nfunction isInvalid(date, minValue, maxValue, mode = 'days') {\n const constrainedDate = constrainValue(date, minValue, maxValue);\n return !constrainedDate.isSame(date, mode);\n}\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport React from 'react';\nimport { CalendarView } from '../CalendarView/CalendarView';\nimport { useCalendarState } from '../CalendarView/hooks/useCalendarState';\nimport '../CalendarView/Calendar.css';\nexport const Calendar = React.forwardRef(function Calendar(props, ref) {\n const state = useCalendarState(props);\n return _jsx(CalendarView, Object.assign({ ref: ref }, props, { state: state }));\n});\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport React from 'react';\nexport function HiddenInput({ name, value, onReset, form, disabled, toStringValue, }) {\n const ref = useFormResetHandler({ initialValue: value, onReset });\n if (!name) {\n return null;\n }\n const v = toStringValue ? toStringValue(value) : `${value !== null && value !== void 0 ? value : ''}`;\n return _jsx(\"input\", { ref: ref, type: \"hidden\", name: name, value: v, disabled: disabled, form: form });\n}\nexport function useFormResetHandler({ initialValue, onReset, }) {\n const [formElement, setFormElement] = React.useState(null);\n const resetValue = React.useRef(initialValue);\n React.useEffect(() => {\n if (!formElement || !onReset) {\n return undefined;\n }\n const handleReset = () => {\n onReset(resetValue.current);\n };\n formElement.addEventListener('reset', handleReset);\n return () => {\n formElement.removeEventListener('reset', handleReset);\n };\n }, [formElement, onReset]);\n const ref = React.useCallback((node) => {\n var _a;\n setFormElement((_a = node === null || node === void 0 ? void 0 : node.form) !== null && _a !== void 0 ? _a : null);\n }, []);\n return ref;\n}\n","import { addComponentKeysets } from '@gravity-ui/uikit/i18n';\nimport { NAMESPACE } from '../../../utils/cn';\nimport en from './en.json';\nimport ru from './ru.json';\nexport const i18n = addComponentKeysets({ en, ru }, `${NAMESPACE}date-field`);\n","import React from 'react';\nimport { dateTime, expandFormat, isValid } from '@gravity-ui/date-utils';\nimport { mergeDateTime } from '../utils/dates';\nimport { i18n } from './i18n';\nexport const EDITABLE_SEGMENTS = {\n year: true,\n month: true,\n day: true,\n hour: true,\n minute: true,\n second: true,\n dayPeriod: true,\n weekday: true,\n};\nconst escapedCharacters = { start: '[', end: ']' };\nconst formatTokenMap = {\n // Year\n YY: 'year',\n YYYY: 'year',\n // Month\n M: 'month',\n MM: 'month',\n MMM: { sectionType: 'month', contentType: 'letter' },\n MMMM: { sectionType: 'month', contentType: 'letter' },\n // Day of the month\n D: 'day',\n DD: 'day',\n Do: 'day',\n // Day of the week\n d: 'weekday',\n dd: { sectionType: 'weekday', contentType: 'letter' },\n ddd: { sectionType: 'weekday', contentType: 'letter' },\n dddd: { sectionType: 'weekday', contentType: 'letter' },\n // Day period AM, PM\n A: { sectionType: 'dayPeriod', contentType: 'letter' },\n a: { sectionType: 'dayPeriod', contentType: 'letter' },\n // Hours\n H: 'hour',\n HH: 'hour',\n h: 'hour',\n hh: 'hour',\n // Minutes\n m: 'minute',\n mm: 'minute',\n // Seconds\n s: 'second',\n ss: 'second',\n // Timezone\n z: { sectionType: 'timeZoneName', contentType: 'letter' },\n zzz: { sectionType: 'timeZoneName', contentType: 'letter' },\n Z: { sectionType: 'timeZoneName', contentType: 'letter' },\n ZZ: { sectionType: 'timeZoneName', contentType: 'letter' },\n};\nfunction getDateSectionConfigFromFormatToken(formatToken) {\n const config = formatTokenMap[formatToken];\n if (!config) {\n // eslint-disable-next-line no-console\n console.error([\n `The token \"${formatToken}\" is not supported by the Date field.`,\n 'Please try using another token.',\n ].join('\\n'));\n return {\n type: 'literal',\n contentType: 'letter',\n };\n }\n if (typeof config === 'string') {\n return {\n type: config,\n contentType: 'digit',\n };\n }\n return {\n type: config.sectionType,\n contentType: config.contentType,\n };\n}\nfunction isFourDigitYearFormat(format) {\n return dateTime().format(format).length === 4;\n}\nfunction isHour12(format) {\n return dateTime().set('hour', 15).format(format) !== '15';\n}\nexport function getSectionLimits(section, date) {\n const { type, format } = section;\n switch (type) {\n case 'year': {\n const isFourDigit = isFourDigitYearFormat(format);\n return {\n minValue: isFourDigit ? 1 : 0,\n maxValue: isFourDigit ? 9999 : 99,\n };\n }\n case 'month': {\n return {\n minValue: 0,\n maxValue: 11,\n };\n }\n case 'weekday': {\n return {\n minValue: 0,\n maxValue: 6,\n };\n }\n case 'day': {\n return {\n minValue: 1,\n maxValue: date ? date.daysInMonth() : 31,\n };\n }\n case 'hour': {\n if (isHour12(format)) {\n const isPM = date.hour() >= 12;\n return {\n minValue: isPM ? 12 : 0,\n maxValue: isPM ? 23 : 11,\n };\n }\n return {\n minValue: 0,\n maxValue: 23,\n };\n }\n case 'minute':\n case 'second': {\n return {\n minValue: 0,\n maxValue: 59,\n };\n }\n }\n return {};\n}\nexport function getSectionValue(section, date) {\n const type = section.type;\n switch (type) {\n case 'year': {\n return isFourDigitYearFormat(section.format)\n ? date.year()\n : Number(date.format(section.format));\n }\n case 'month':\n case 'hour':\n case 'minute':\n case 'second': {\n return date[type]();\n }\n case 'day': {\n return date.date();\n }\n case 'weekday': {\n return date.day();\n }\n case 'dayPeriod': {\n return date.hour() >= 12 ? 12 : 0;\n }\n }\n return undefined;\n}\nconst TYPE_MAPPING = {\n weekday: 'day',\n day: 'date',\n dayPeriod: 'hour',\n};\nexport function getDurationUnitFromSectionType(type) {\n if (type === 'literal' || type === 'timeZoneName' || type === 'unknown') {\n throw new Error(`${type} section does not have duration unit.`);\n }\n if (type in TYPE_MAPPING) {\n return TYPE_MAPPING[type];\n }\n return type;\n}\nexport function addSegment(section, date, amount) {\n var _a;\n let val = (_a = section.value) !== null && _a !== void 0 ? _a : 0;\n if (section.type === 'dayPeriod') {\n val = date.hour() + (date.hour() >= 12 ? -12 : 12);\n }\n else {\n val = val + amount;\n const min = section.minValue;\n const max = section.maxValue;\n if (typeof min === 'number' && typeof max === 'number') {\n const length = max - min + 1;\n val = ((val - min + length) % length) + min;\n }\n }\n if (section.type === 'year' && !isFourDigitYearFormat(section.format)) {\n val = dateTime({ input: `${val}`.padStart(2, '0'), format: section.format }).year();\n }\n const type = getDurationUnitFromSectionType(section.type);\n return date.set(type, val);\n}\nexport function setSegment(section, date, amount) {\n const type = section.type;\n switch (type) {\n case 'year': {\n return date.set('year', isFourDigitYearFormat(section.format)\n ? amount\n : dateTime({\n input: `${amount}`.padStart(2, '0'),\n format: section.format,\n }).year());\n }\n case 'day':\n case 'weekday':\n case 'month': {\n return date.set(getDurationUnitFromSectionType(type), amount);\n }\n case 'dayPeriod': {\n const hours = date.hour();\n const wasPM = hours >= 12;\n const isPM = amount >= 12;\n if (isPM === wasPM) {\n return date;\n }\n return date.set('hour', wasPM ? hours - 12 : hours + 12);\n }\n case 'hour': {\n // In 12 hour time, ensure that AM/PM does not change\n let sectionAmount = amount;\n if (section.minValue === 12 || section.maxValue === 11) {\n const hours = date.hour();\n const wasPM = hours >= 12;\n if (!wasPM && sectionAmount === 12) {\n sectionAmount = 0;\n }\n if (wasPM && sectionAmount < 12) {\n sectionAmount += 12;\n }\n }\n return date.set('hour', sectionAmount);\n }\n case 'minute':\n case 'second': {\n return date.set(type, amount);\n }\n }\n return date;\n}\nfunction doesSectionHaveLeadingZeros(contentType, sectionType, format) {\n if (contentType !== 'digit') {\n return false;\n }\n switch (sectionType) {\n case 'year': {\n if (isFourDigitYearFormat(format)) {\n const formatted0001 = dateTime().set('year', 1).format(format);\n return formatted0001 === '0001';\n }\n const formatted2001 = dateTime().set('year', 2001).format(format);\n return formatted2001 === '01';\n }\n case 'month': {\n return dateTime().startOf('year').format(format).length > 1;\n }\n case 'day': {\n return dateTime().startOf('month').format(format).length > 1;\n }\n case 'weekday': {\n return dateTime().startOf('week').format(format).length > 1;\n }\n case 'hour': {\n return dateTime().set('hour', 1).format(format).length > 1;\n }\n case 'minute': {\n return dateTime().set('minute', 1).format(format).length > 1;\n }\n case 'second': {\n return dateTime().set('second', 1).format(format).length > 1;\n }\n default: {\n throw new Error('Invalid section type');\n }\n }\n}\nfunction getSectionPlaceholder(sectionConfig, currentTokenValue) {\n switch (sectionConfig.type) {\n case 'year': {\n return i18n('year_placeholder').repeat(dateTime().format(currentTokenValue).length);\n }\n case 'month': {\n return i18n('month_placeholder').repeat(sectionConfig.contentType === 'letter' ? 4 : 2);\n }\n case 'day': {\n return i18n('day_placeholder').repeat(2);\n }\n case 'weekday': {\n return i18n('weekday_placeholder').repeat(sectionConfig.contentType === 'letter' ? 4 : 2);\n }\n case 'hour': {\n return i18n('hour_placeholder').repeat(2);\n }\n case 'minute': {\n return i18n('minute_placeholder').repeat(2);\n }\n case 'second': {\n return i18n('second_placeholder').repeat(2);\n }\n case 'dayPeriod': {\n return i18n('dayPeriod_placeholder');\n }\n default: {\n return currentTokenValue;\n }\n }\n}\nexport function splitFormatIntoSections(format) {\n const sections = [];\n const expandedFormat = expandFormat(format);\n let currentTokenValue = '';\n let isSeparator = false;\n let isInEscapeBoundary = false;\n for (let i = 0; i < expandedFormat.length; i++) {\n const char = expandedFormat[i] || '';\n if (isInEscapeBoundary) {\n if (char === escapedCharacters.end) {\n isInEscapeBoundary = false;\n continue;\n }\n currentTokenValue += char;\n }\n else if (char.match(/[a-zA-Z]/)) {\n if (isSeparator) {\n addLiteralSection(sections, currentTokenValue);\n currentTokenValue = '';\n }\n isSeparator = false;\n currentTokenValue += char;\n }\n else {\n if (!isSeparator) {\n addFormatSection(sections, currentTokenValue);\n currentTokenValue = '';\n }\n isSeparator = true;\n if (char === escapedCharacters.start) {\n isInEscapeBoundary = true;\n }\n else {\n currentTokenValue += char;\n }\n }\n }\n if (currentTokenValue) {\n if (isSeparator) {\n addLiteralSection(sections, currentTokenValue);\n }\n else {\n addFormatSection(sections, currentTokenValue);\n }\n }\n return sections;\n}\nfunction addFormatSection(sections, token) {\n if (!token) {\n return;\n }\n const sectionConfig = getDateSectionConfigFromFormatToken(token);\n const hasLeadingZeros = doesSectionHaveLeadingZeros(sectionConfig.contentType, sectionConfig.type, token);\n sections.push(Object.assign(Object.assign({}, sectionConfig), { format: token, placeholder: getSectionPlaceholder(sectionConfig, token), options: getSectionOptions(sectionConfig, token), hasLeadingZeros }));\n}\nfunction addLiteralSection(sections, token) {\n if (!token) {\n return;\n }\n sections.push({\n type: 'literal',\n contentType: 'letter',\n format: token,\n placeholder: token,\n hasLeadingZeros: false,\n });\n}\nfunction getSectionOptions(section, token) {\n switch (section.type) {\n case 'month': {\n const format = section.contentType === 'letter' ? token : 'MMMM';\n let date = dateTime().startOf('year');\n const options = [];\n for (let i = 0; i < 12; i++) {\n options.push(date.format(format).toLocaleUpperCase());\n date = date.add(1, 'months');\n }\n return options;\n }\n case 'dayPeriod': {\n const amDayPeriod = dateTime().hour(0);\n const pmDayPeriod = amDayPeriod.hour(12);\n const options = [\n amDayPeriod.format(token).toLocaleUpperCase(),\n pmDayPeriod.format(token).toLocaleUpperCase(),\n ];\n return options;\n }\n case 'weekday': {\n const format = section.contentType === 'letter' ? token : 'dddd';\n let date = dateTime().day(0);\n const options = [];\n for (let i = 0; i < 7; i++) {\n options.push(date.format(format).toLocaleUpperCase());\n date = date.add(1, 'day');\n }\n return options;\n }\n }\n return undefined;\n}\nexport function cleanString(dirtyString) {\n return dirtyString.replace(/[\\u2066\\u2067\\u2068\\u2069]/g, '');\n}\nexport function getEditableSections(sections, value, validSegments) {\n let position = 1;\n const newSections = [];\n let previousEditableSection = -1;\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i];\n if (!section) {\n continue;\n }\n const newSection = toEditableSection(section, value, validSegments, position, previousEditableSection);\n newSections.push(newSection);\n if (isEditableSection(section)) {\n for (let j = Math.max(0, previousEditableSection); j <= i; j++) {\n const prevSection = newSections[j];\n if (prevSection) {\n prevSection.nextEditableSection = i;\n if (prevSection.previousEditableSection === -1) {\n prevSection.previousEditableSection = i;\n }\n }\n }\n previousEditableSection = i;\n }\n position += newSection.textValue.length;\n }\n return newSections;\n}\nexport function isEditableSection(section) {\n var _a;\n return (_a = EDITABLE_SEGMENTS[section.type]) !== null && _a !== void 0 ? _a : false;\n}\nexport function toEditableSection(section, value, validSegments, position, previousEditableSection) {\n const isEditable = isEditableSection(section);\n let renderedValue = section.placeholder;\n if ((isEditable && validSegments[section.type]) || section.type === 'timeZoneName') {\n renderedValue = value.format(section.format);\n if (section.contentType === 'digit' && renderedValue.length < section.placeholder.length) {\n renderedValue = renderedValue.padStart(section.placeholder.length, '0');\n }\n }\n // use bidirectional context to allow the browser autodetect text direction\n renderedValue = '\\u2068' + renderedValue + '\\u2069';\n const sectionLength = renderedValue.length;\n const newSection = Object.assign(Object.assign(Object.assign({}, section), { value: getSectionValue(section, value), textValue: renderedValue, start: position, end: position + sectionLength, modified: false, previousEditableSection, nextEditableSection: previousEditableSection }), getSectionLimits(section, value));\n return newSection;\n}\nexport function getCurrentEditableSectionIndex(sections, selectedSections) {\n const currentIndex = selectedSections === 'all' || selectedSections === -1 ? 0 : selectedSections;\n const section = sections[currentIndex];\n if (section && !EDITABLE_SEGMENTS[section.type]) {\n return section.nextEditableSection;\n }\n return section ? currentIndex : -1;\n}\nexport function formatSections(sections) {\n // use ltr direction context to get predictable navigation inside input\n return '\\u2066' + sections.map((s) => s.textValue).join('') + '\\u2069';\n}\nfunction parseDate(options) {\n let date = dateTime(options);\n if (!isValid(date)) {\n date = dateTime(Object.assign(Object.assign({}, options), { format: undefined }));\n }\n return date;\n}\nfunction isDateStringWithTimeZone(str) {\n return /z$/i.test(str) || /[+-]\\d\\d:\\d\\d$/.test(str);\n}\nexport function parseDateFromString(str, format, timeZone) {\n let date = parseDate({ input: str, format, timeZone });\n if (isValid(date)) {\n if (timeZone && !isDateStringWithTimeZone(str)) {\n const time = parseDate({ input: str, format });\n date = mergeDateTime(date, time);\n }\n }\n return date;\n}\nexport function isAllSegmentsValid(allSegments, validSegments) {\n return Object.keys(allSegments).every((key) => validSegments[key]);\n}\nexport function useFormatSections(format) {\n const usedFormat = format;\n const [sections, setSections] = React.useState(() => splitFormatIntoSections(usedFormat));\n const [previousFormat, setFormat] = React.useState(usedFormat);\n if (usedFormat !== previousFormat) {\n setFormat(usedFormat);\n setSections(splitFormatIntoSections(usedFormat));\n }\n return sections;\n}\n","import React from 'react';\nimport { cleanString } from '../utils';\nexport function useDateFieldProps(state, props) {\n const inputRef = React.useRef(null);\n const [, setInnerState] = React.useState({});\n function setSelectedSections(section) {\n state.setSelectedSections(section);\n setInnerState({});\n }\n React.useLayoutEffect(() => {\n const inputElement = inputRef.current;\n if (!inputElement) {\n return;\n }\n if (state.selectedSectionIndexes === null) {\n if (inputElement.scrollLeft) {\n // Ensure that input content is not marked as selected.\n // setting selection range to 0 causes issues in Safari.\n // https://bugs.webkit.org/show_bug.cgi?id=224425\n inputElement.scrollLeft = 0;\n }\n return;\n }\n const firstSelectedSection = state.sections[state.selectedSectionIndexes.startIndex];\n const lastSelectedSection = state.sections[state.selectedSectionIndexes.endIndex];\n if (firstSelectedSection && lastSelectedSection) {\n const selectionStart = firstSelectedSection.start;\n const selectionEnd = lastSelectedSection.end;\n if (selectionStart !== inputElement.selectionStart ||\n selectionEnd !== inputElement.selectionEnd) {\n inputElement.setSelectionRange(selectionStart, selectionEnd);\n }\n }\n });\n function syncSelectionFromDOM() {\n var _a, _b;\n if (state.readOnly) {\n setSelectedSections(-1);\n return;\n }\n state.focusSectionInPosition((_b = (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.selectionStart) !== null && _b !== void 0 ? _b : 0);\n setInnerState({});\n }\n const inputMode = React.useMemo(() => {\n if (!state.selectedSectionIndexes) {\n return 'text';\n }\n const activeSection = state.sections[state.selectedSectionIndexes.startIndex];\n if (!activeSection || activeSection.contentType === 'letter') {\n return 'text';\n }\n return 'tel';\n }, [state.selectedSectionIndexes, state.sections]);\n return {\n inputProps: {\n value: state.text,\n view: props.view,\n size: props.size,\n disabled: state.disabled,\n hasClear: !state.readOnly && !state.isEmpty && props.hasClear,\n placeholder: props.placeholder,\n id: props.id,\n label: props.label,\n startContent: props.startContent,\n endContent: props.endContent,\n pin: props.pin,\n autoFocus: props.autoFocus,\n controlRef: inputRef,\n autoComplete: 'off',\n type: 'text',\n validationState: state.validationState,\n errorMessage: props.errorMessage,\n errorPlacement: props.errorPlacement,\n onUpdate(value) {\n if (!value) {\n state.clearAll();\n }\n },\n onFocus(e) {\n var _a;\n (_a = props.onFocus) === null || _a === void 0 ? void 0 : _a.call(props, e);\n if (state.selectedSectionIndexes !== null) {\n return;\n }\n const input = e.target;\n const isAutofocus = !inputRef.current;\n setTimeout(() => {\n if (!input || input !== inputRef.current) {\n return;\n }\n if (isAutofocus) {\n state.focusSectionInPosition(0);\n }\n else if (\n // avoid selecting all sections when focusing empty field without value\n input.value.length &&\n Number(input.selectionEnd) - Number(input.selectionStart) ===\n input.value.length) {\n setSelectedSections('all');\n }\n else {\n syncSelectionFromDOM();\n }\n });\n },\n onBlur(e) {\n var _a;\n (_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, e);\n setSelectedSections(-1);\n },\n onKeyDown(e) {\n var _a;\n (_a = props.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(props, e);\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n state.focusPreviousSection();\n }\n else if (e.key === 'ArrowRight') {\n e.preventDefault();\n state.focusNextSection();\n }\n else if (e.key === 'Home') {\n e.preventDefault();\n state.decrementToMin();\n }\n else if (e.key === 'End') {\n e.preventDefault();\n state.incrementToMax();\n }\n else if (e.key === 'ArrowUp' && !e.altKey) {\n e.preventDefault();\n state.increment();\n }\n else if (e.key === 'ArrowDown' && !e.altKey) {\n e.preventDefault();\n state.decrement();\n }\n else if (e.key === 'PageUp') {\n e.preventDefault();\n state.incrementPage();\n }\n else if (e.key === 'PageDown') {\n e.preventDefault();\n state.decrementPage();\n }\n else if (e.key === 'Backspace' || e.key === 'Delete') {\n e.preventDefault();\n state.clearSection();\n }\n else if (e.key === 'a' && (e['ctrlKey'] || e['metaKey'])) {\n e.preventDefault();\n setSelectedSections('all');\n }\n },\n onKeyUp: props.onKeyUp,\n controlProps: {\n 'aria-label': props['aria-label'] || undefined,\n 'aria-labelledby': props['aria-labelledby'] || undefined,\n 'aria-describedby': props['aria-describedby'] || undefined,\n 'aria-details': props['aria-details'] || undefined,\n 'aria-disabled': state.disabled || undefined,\n inputMode,\n onClick() {\n syncSelectionFromDOM();\n },\n onMouseUp(e) {\n e.preventDefault();\n },\n onBeforeInput(e) {\n e.preventDefault();\n // @ts-expect-error\n const key = e.data;\n if (key !== undefined && key !== null) {\n state.onInput(key);\n }\n },\n onPaste(e) {\n e.preventDefault();\n if (state.readOnly) {\n return;\n }\n const pastedValue = cleanString(e.clipboardData.getData('text'));\n if (state.selectedSectionIndexes &&\n state.selectedSectionIndexes.startIndex ===\n state.selectedSectionIndexes.endIndex) {\n const activeSection = state.sections[state.selectedSectionIndexes.startIndex];\n const digitsOnly = /^\\d+$/.test(pastedValue);\n const lettersOnly = /^[a-zA-Z]+$/.test(pastedValue);\n const isValidValue = Boolean(activeSection &&\n ((activeSection.contentType === 'digit' && digitsOnly) ||\n (activeSection.contentType === 'letter' && lettersOnly)));\n if (isValidValue) {\n state.onInput(pastedValue);\n return;\n }\n if (digitsOnly || lettersOnly) {\n return;\n }\n }\n state.setValueFromString(pastedValue);\n },\n },\n },\n };\n}\n","import React from 'react';\nimport { createPlaceholderValue } from '../../utils/dates';\nimport { EDITABLE_SEGMENTS, formatSections, getCurrentEditableSectionIndex, getDurationUnitFromSectionType, } from '../utils';\nconst PAGE_STEP = {\n year: 5,\n month: 2,\n weekday: 3,\n day: 7,\n hour: 2,\n minute: 15,\n second: 15,\n};\nexport function useBaseDateFieldState(props) {\n const { value, validationState, displayValue, editableSections, selectedSectionIndexes, selectedSections, isEmpty, flushAllValidSections, flushValidSection, setSelectedSections, setValue, setDate, adjustSection, setSection, getSectionValue, setSectionValue, createPlaceholder, setValueFromString, } = props;\n const enteredKeys = React.useRef('');\n const { hasDate, hasTime } = React.useMemo(() => {\n let hasDateInner = false;\n let hasTimeInner = false;\n for (const s of editableSections) {\n hasTimeInner || (hasTimeInner = ['hour', 'minute', 'second'].includes(s.type));\n hasDateInner || (hasDateInner = ['day', 'month', 'year'].includes(s.type));\n }\n return {\n hasTime: hasTimeInner,\n hasDate: hasDateInner,\n };\n }, [editableSections]);\n return {\n value,\n isEmpty,\n displayValue,\n setValue,\n setDate,\n text: formatSections(editableSections),\n readOnly: props.readOnly,\n disabled: props.disabled,\n sections: editableSections,\n hasDate,\n hasTime,\n selectedSectionIndexes,\n validationState,\n setSelectedSections(position) {\n enteredKeys.current = '';\n setSelectedSections(position);\n },\n focusSectionInPosition(position) {\n const nextSectionIndex = this.sections.findIndex((s) => s.end >= position);\n const index = nextSectionIndex === -1 ? 0 : nextSectionIndex;\n const nextSection = this.sections[index];\n if (nextSection) {\n this.setSelectedSections(EDITABLE_SEGMENTS[nextSection.type] ? index : nextSection.nextEditableSection);\n }\n },\n focusNextSection() {\n var _a, _b;\n const currentIndex = selectedSections === 'all' ? 0 : selectedSections;\n const newIndex = (_b = (_a = this.sections[currentIndex]) === null || _a === void 0 ? void 0 : _a.nextEditableSection) !== null && _b !== void 0 ? _b : -1;\n if (newIndex !== -1) {\n this.setSelectedSections(newIndex);\n }\n },\n focusPreviousSection() {\n var _a, _b;\n const currentIndex = selectedSections === 'all' ? 0 : selectedSections;\n const newIndex = (_b = (_a = this.sections[currentIndex]) === null || _a === void 0 ? void 0 : _a.previousEditableSection) !== null && _b !== void 0 ? _b : -1;\n if (newIndex !== -1) {\n this.setSelectedSections(newIndex);\n }\n },\n focusFirstSection() {\n var _a, _b;\n const newIndex = (_b = (_a = this.sections[0]) === null || _a === void 0 ? void 0 : _a.previousEditableSection) !== null && _b !== void 0 ? _b : -1;\n if (newIndex !== -1) {\n setSelectedSections(newIndex);\n }\n },\n focusLastSection() {\n var _a, _b;\n const newIndex = (_b = (_a = this.sections[this.sections.length - 1]) === null || _a === void 0 ? void 0 : _a.nextEditableSection) !== null && _b !== void 0 ? _b : -1;\n if (newIndex !== -1) {\n this.setSelectedSections(newIndex);\n }\n },\n increment() {\n if (this.readOnly || this.disabled) {\n return;\n }\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n adjustSection(sectionIndex, 1);\n }\n },\n decrement() {\n if (this.readOnly || this.disabled) {\n return;\n }\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n adjustSection(sectionIndex, -1);\n }\n },\n incrementPage() {\n if (this.readOnly || this.disabled) {\n return;\n }\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n adjustSection(sectionIndex, PAGE_STEP[this.sections[sectionIndex].type] || 1);\n }\n },\n decrementPage() {\n if (this.readOnly || this.disabled) {\n return;\n }\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n adjustSection(sectionIndex, -(PAGE_STEP[this.sections[sectionIndex].type] || 1));\n }\n },\n incrementToMax() {\n if (this.readOnly || this.disabled) {\n return;\n }\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n const section = this.sections[sectionIndex];\n if (typeof section.maxValue === 'number') {\n setSection(sectionIndex, section.maxValue);\n }\n }\n },\n decrementToMin() {\n if (this.readOnly || this.disabled) {\n return;\n }\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n const section = this.sections[sectionIndex];\n if (typeof section.minValue === 'number') {\n setSection(sectionIndex, section.minValue);\n }\n }\n },\n clearSection() {\n if (this.readOnly || this.disabled) {\n return;\n }\n enteredKeys.current = '';\n if (selectedSections === 'all') {\n this.clearAll();\n return;\n }\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex === -1) {\n return;\n }\n flushValidSection(sectionIndex);\n const section = this.sections[sectionIndex];\n const placeholder = createPlaceholderValue({\n placeholderValue: props.placeholderValue,\n timeZone: props.timeZone,\n }).timeZone(props.timeZone);\n const displayPortion = getSectionValue(sectionIndex);\n let currentValue = displayPortion;\n // Reset day period to default without changing the hour.\n if (section.type === 'dayPeriod') {\n const isPM = displayPortion.hour() >= 12;\n const shouldBePM = placeholder.hour() >= 12;\n if (isPM && !shouldBePM) {\n currentValue = displayPortion.set('hour', displayPortion.hour() - 12);\n }\n else if (!isPM && shouldBePM) {\n currentValue = displayPortion.set('hour', displayPortion.hour() + 12);\n }\n }\n else {\n const type = getDurationUnitFromSectionType(section.type);\n currentValue = displayPortion.set(type, placeholder[type]());\n }\n setSectionValue(sectionIndex, currentValue);\n },\n clearAll() {\n if (this.readOnly || this.disabled) {\n return;\n }\n enteredKeys.current = '';\n flushAllValidSections();\n if (value !== null) {\n setDate(null);\n }\n const date = createPlaceholder();\n setValue(date);\n },\n onInput(key) {\n if (this.readOnly || this.disabled) {\n return;\n }\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex === -1) {\n return;\n }\n const section = this.sections[sectionIndex];\n let newValue = enteredKeys.current + key;\n const onInputNumber = (numberValue) => {\n var _a, _b, _c;\n let sectionValue = section.type === 'month' ? numberValue - 1 : numberValue;\n const allowsZero = section.minValue === 0;\n if (section.type === 'hour' &&\n (section.minValue === 12 || section.maxValue === 11)) {\n if (numberValue > 12) {\n sectionValue = Number(key);\n }\n if (section.minValue === 12 && sectionValue > 1) {\n sectionValue += 12;\n }\n }\n else if (sectionValue > ((_a = section.maxValue) !== null && _a !== void 0 ? _a : 0)) {\n sectionValue = Number(key) - (section.type === 'month' ? 1 : 0);\n newValue = key;\n if (sectionValue > ((_b = section.maxValue) !== null && _b !== void 0 ? _b : 0)) {\n enteredKeys.current = '';\n return;\n }\n }\n const shouldSetValue = sectionValue > 0 || (sectionValue === 0 && allowsZero);\n if (shouldSetValue) {\n setSection(sectionIndex, sectionValue);\n }\n if (Number(numberValue + '0') > ((_c = section.maxValue) !== null && _c !== void 0 ? _c : 0) ||\n newValue.length >= String(section.maxValue).length) {\n enteredKeys.current = '';\n if (shouldSetValue) {\n this.focusNextSection();\n }\n }\n else {\n enteredKeys.current = newValue;\n }\n };\n const onInputString = (stringValue) => {\n var _a;\n const options = (_a = section.options) !== null && _a !== void 0 ? _a : [];\n let sectionValue = stringValue.toLocaleUpperCase();\n let foundOptions = options.filter((v) => v.startsWith(sectionValue));\n if (foundOptions.length === 0) {\n if (stringValue !== key) {\n sectionValue = key.toLocaleUpperCase();\n foundOptions = options.filter((v) => v.startsWith(sectionValue));\n }\n if (foundOptions.length === 0) {\n enteredKeys.current = '';\n return;\n }\n }\n const foundValue = foundOptions[0];\n const index = options.indexOf(foundValue);\n if (section.type === 'dayPeriod') {\n setSection(sectionIndex, index === 1 ? 12 : 0);\n }\n else {\n setSection(sectionIndex, index);\n }\n if (foundOptions.length > 1) {\n enteredKeys.current = newValue;\n }\n else {\n enteredKeys.current = '';\n this.focusNextSection();\n }\n };\n switch (section.type) {\n case 'day':\n case 'hour':\n case 'minute':\n case 'second':\n case 'year': {\n if (!Number.isInteger(Number(newValue))) {\n return;\n }\n const numberValue = Number(newValue);\n onInputNumber(numberValue);\n break;\n }\n case 'dayPeriod': {\n onInputString(newValue);\n break;\n }\n case 'weekday':\n case 'month': {\n if (Number.isInteger(Number(newValue))) {\n const numberValue = Number(newValue);\n onInputNumber(numberValue);\n }\n else {\n onInputString(newValue);\n }\n break;\n }\n }\n },\n setValueFromString(str) {\n enteredKeys.current = '';\n return setValueFromString(str);\n },\n };\n}\n","import React from 'react';\nimport { isValid } from '@gravity-ui/date-utils';\nimport { useControlledState } from '@gravity-ui/uikit';\nimport { createPlaceholderValue, isInvalid } from '../../utils/dates';\nimport { useDefaultTimeZone } from '../../utils/useDefaultTimeZone';\nimport { EDITABLE_SEGMENTS, addSegment, getEditableSections, isAllSegmentsValid, parseDateFromString, setSegment, useFormatSections, } from '../utils';\nimport { useBaseDateFieldState } from './useBaseDateFieldState';\nexport function useDateFieldState(props) {\n var _a, _b;\n const [value, setDate] = useControlledState(props.value, (_a = props.defaultValue) !== null && _a !== void 0 ? _a : null, props.onUpdate);\n const inputTimeZone = useDefaultTimeZone(props.value || props.defaultValue || props.placeholderValue);\n const timeZone = props.timeZone || inputTimeZone;\n const handleUpdateDate = (v) => {\n setDate(v ? v.timeZone(inputTimeZone) : v);\n };\n const [placeholderDate, setPlaceholderDate] = React.useState(() => {\n return createPlaceholderValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n });\n const format = props.format || 'L';\n const sections = useFormatSections(format);\n const allSegments = React.useMemo(() => sections\n .filter((seg) => EDITABLE_SEGMENTS[seg.type])\n .reduce((p, seg) => (Object.assign(Object.assign({}, p), { [seg.type]: true })), {}), [sections]);\n const validSegmentsState = React.useState(() => value ? Object.assign({}, allSegments) : {});\n let validSegments = validSegmentsState[0];\n const setValidSegments = validSegmentsState[1];\n if (value && !isAllSegmentsValid(allSegments, validSegments)) {\n setValidSegments(Object.assign({}, allSegments));\n }\n if (!value &&\n isAllSegmentsValid(allSegments, validSegments) &&\n Object.keys(validSegments).length === Object.keys(allSegments).length) {\n validSegments = {};\n setValidSegments(validSegments);\n setPlaceholderDate(createPlaceholderValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n }));\n }\n const displayValue = value && isValid(value) && isAllSegmentsValid(allSegments, validSegments)\n ? value.timeZone(timeZone)\n : placeholderDate.timeZone(timeZone);\n const sectionsState = useSectionsState(sections, displayValue, validSegments);\n const [selectedSections, setSelectedSections] = React.useState(-1);\n const selectedSectionIndexes = React.useMemo(() => {\n if (selectedSections === -1) {\n return null;\n }\n if (selectedSections === 'all') {\n return {\n startIndex: 0,\n endIndex: sectionsState.editableSections.length - 1,\n };\n }\n if (typeof selectedSections === 'number') {\n return { startIndex: selectedSections, endIndex: selectedSections };\n }\n if (typeof selectedSections === 'string') {\n const selectedSectionIndex = sectionsState.editableSections.findIndex((section) => section.type === selectedSections);\n return { startIndex: selectedSectionIndex, endIndex: selectedSectionIndex };\n }\n return selectedSections;\n }, [selectedSections, sectionsState.editableSections]);\n function setValue(newValue) {\n if (props.disabled || props.readOnly) {\n return;\n }\n if (isAllSegmentsValid(allSegments, validSegments)) {\n if (!value || !newValue.isSame(value)) {\n handleUpdateDate(newValue);\n }\n }\n else {\n if (value) {\n handleUpdateDate(null);\n }\n setPlaceholderDate(newValue);\n }\n }\n function markValid(part) {\n validSegments[part] = true;\n if (validSegments.day && validSegments.month && validSegments.year && allSegments.weekday) {\n validSegments.weekday = true;\n }\n if (validSegments.hour && allSegments.dayPeriod) {\n validSegments.dayPeriod = true;\n }\n setValidSegments(Object.assign({}, validSegments));\n }\n function setSection(sectionIndex, amount) {\n const section = sectionsState.editableSections[sectionIndex];\n if (section) {\n markValid(section.type);\n setValue(setSegment(section, displayValue, amount));\n }\n }\n function adjustSection(sectionIndex, amount) {\n const section = sectionsState.editableSections[sectionIndex];\n if (section) {\n if (validSegments[section.type]) {\n setValue(addSegment(section, displayValue, amount));\n }\n else {\n markValid(section.type);\n if (Object.keys(validSegments).length >= Object.keys(allSegments).length) {\n setValue(displayValue);\n }\n }\n }\n }\n function flushValidSection(sectionIndex) {\n const section = sectionsState.editableSections[sectionIndex];\n if (section) {\n delete validSegments[section.type];\n }\n setValidSegments(Object.assign({}, validSegments));\n }\n function flushAllValidSections() {\n validSegments = {};\n setValidSegments({});\n }\n function getSectionValue(_sectionIndex) {\n return displayValue;\n }\n function setSectionValue(_sectionIndex, currentValue) {\n setValue(currentValue);\n }\n function createPlaceholder() {\n return createPlaceholderValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n }).timeZone(timeZone);\n }\n function setValueFromString(str) {\n const date = parseDateFromString(str, format, timeZone);\n if (isValid(date)) {\n handleUpdateDate(date);\n return true;\n }\n return false;\n }\n const validationState = props.validationState ||\n (isInvalid(value, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (value && ((_b = props.isDateUnavailable) === null || _b === void 0 ? void 0 : _b.call(props, value)) ? 'invalid' : undefined);\n return useBaseDateFieldState({\n value,\n displayValue,\n placeholderValue: props.placeholderValue,\n timeZone,\n validationState,\n editableSections: sectionsState.editableSections,\n readOnly: props.readOnly,\n disabled: props.disabled,\n selectedSectionIndexes,\n selectedSections,\n isEmpty: Object.keys(validSegments).length === 0,\n flushAllValidSections,\n flushValidSection,\n setSelectedSections,\n setValue,\n setDate: handleUpdateDate,\n adjustSection,\n setSection,\n getSectionValue,\n setSectionValue,\n createPlaceholder,\n setValueFromString,\n });\n}\nfunction useSectionsState(sections, value, validSegments) {\n const [state, setState] = React.useState(() => {\n return {\n value,\n sections,\n validSegments,\n editableSections: getEditableSections(sections, value, validSegments),\n };\n });\n if (sections !== state.sections ||\n validSegments !== state.validSegments ||\n !value.isSame(state.value) ||\n value.timeZone() !== state.value.timeZone()) {\n setState({\n value,\n sections,\n validSegments,\n editableSections: getEditableSections(sections, value, validSegments),\n });\n }\n return state;\n}\n","'use client';\nimport { __rest } from \"tslib\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React from 'react';\nimport { TextInput, useFocusWithin } from '@gravity-ui/uikit';\nimport { block } from '../../utils/cn';\nimport { HiddenInput } from '../HiddenInput/HiddenInput';\nimport { useDateFieldProps } from './hooks/useDateFieldProps';\nimport { useDateFieldState } from './hooks/useDateFieldState';\nimport './DateField.css';\nconst b = block('date-field');\nexport function DateField(_a) {\n var { className } = _a, props = __rest(_a, [\"className\"]);\n const state = useDateFieldState(props);\n const { inputProps } = useDateFieldProps(state, props);\n const [isActive, setActive] = React.useState(false);\n const { focusWithinProps } = useFocusWithin({\n onFocusWithinChange(isFocusWithin) {\n setActive(isFocusWithin);\n },\n });\n return (_jsxs(\"div\", Object.assign({ className: b(null, className), style: props.style }, focusWithinProps, { children: [_jsx(TextInput, Object.assign({}, inputProps, { value: state.isEmpty && !isActive && props.placeholder ? '' : inputProps.value })), _jsx(HiddenInput, { name: props.name, value: state.value, toStringValue: (value) => { var _a; return (_a = value === null || value === void 0 ? void 0 : value.toISOString()) !== null && _a !== void 0 ? _a : ''; }, onReset: (value) => {\n state.setDate(value);\n }, disabled: state.disabled, form: props.form })] })));\n}\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { dateTime } from '@gravity-ui/date-utils';\nimport { block } from '../../utils/cn';\nimport { createPlaceholderValue, mergeDateTime } from '../utils/dates';\nimport './MobileCalendar.css';\nconst b = block('mobile-calendar');\nexport function MobileCalendar({ props, state }) {\n var _a, _b;\n let type = 'date';\n if (state.hasTime && state.hasDate) {\n type = 'datetime-local';\n }\n else if (state.hasTime) {\n type = 'time';\n }\n return (_jsx(\"input\", { className: b(), disabled: props.disabled, type: type, value: formatNative(state.dateFieldState.displayValue, type), id: props.id, min: formatNative((_a = props.minValue) === null || _a === void 0 ? void 0 : _a.timeZone(state.timeZone), type), max: formatNative((_b = props.maxValue) === null || _b === void 0 ? void 0 : _b.timeZone(state.timeZone), type), tabIndex: -1, onChange: (e) => {\n var _a, _b;\n if (props.readOnly) {\n return;\n }\n const newValue = e.target.value;\n if (newValue) {\n const localDate = dateTime({\n input: newValue,\n format: getDateFormat(type),\n timeZone: 'system',\n }).timeZone(state.timeZone, true);\n let newDate = state.hasDate\n ? localDate\n : createPlaceholderValue({\n placeholderValue: (_a = props.placeholderValue) === null || _a === void 0 ? void 0 : _a.timeZone(state.timeZone),\n timeZone: state.timeZone,\n });\n if (state.hasTime) {\n newDate = mergeDateTime(newDate, localDate);\n }\n else if (state.value) {\n newDate = mergeDateTime(newDate, state.value.timeZone(state.timeZone));\n }\n else {\n newDate = mergeDateTime(newDate, createPlaceholderValue({\n placeholderValue: (_b = props.placeholderValue) === null || _b === void 0 ? void 0 : _b.timeZone(state.timeZone),\n timeZone: state.timeZone,\n }));\n }\n state.setValue(newDate);\n }\n else {\n state.setValue(null);\n }\n } }));\n}\nfunction getDateFormat(type) {\n switch (type) {\n case 'time': {\n return 'HH:mm';\n }\n case 'datetime-local': {\n return 'YYYY-MM-DDTHH:mm';\n }\n default: {\n return 'YYYY-MM-DD';\n }\n }\n}\nfunction formatNative(date, type) {\n if (!date) {\n return '';\n }\n const format = getDateFormat(type);\n return date.format(format);\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Icon } from '@gravity-ui/uikit';\nimport { block } from '../../utils/cn';\nimport './StubButton.css';\nconst b = block('stub-button');\nexport function StubButton({ size, icon }) {\n return (_jsx(\"span\", { className: b({ size }), children: _jsx(\"span\", { className: b('icon'), children: _jsx(Icon, { data: icon }) }) }));\n}\n","export function getButtonSizeForInput(size) {\n switch (size) {\n case 'xl': {\n return 'l';\n }\n case 'l': {\n return 'm';\n }\n case 's': {\n return 'xs';\n }\n default: {\n return 's';\n }\n }\n}\n","export function mergeProps(...args) {\n const result = Object.assign({}, args[0]);\n for (let i = 1; i < args.length; i++) {\n const props = args[i];\n if (!props) {\n continue;\n }\n for (const key of Object.keys(props)) {\n const left = result[key];\n const right = props[key];\n if (typeof left === 'function' &&\n typeof right === 'function' &&\n key.startsWith('on') &&\n key.charCodeAt(2) >= /* A */ 65 &&\n key.charCodeAt(2) <= /* Z */ 90) {\n result[key] = chain(left, right);\n }\n else if (key === 'className' &&\n typeof left === 'string' &&\n typeof right === 'string') {\n result[key] = left + ' ' + right;\n }\n else if (key === 'controlProps' &&\n typeof left === 'object' &&\n typeof right === 'object') {\n result[key] = mergeProps(left, right);\n }\n else {\n result[key] = right === undefined ? left : right;\n }\n }\n }\n return result;\n}\nfunction chain(...fns) {\n return (...args) => {\n for (const fn of fns) {\n if (typeof fn === 'function') {\n fn(...args);\n }\n }\n };\n}\n","import { addComponentKeysets } from '@gravity-ui/uikit/i18n';\nimport { NAMESPACE } from '../../../utils/cn';\nimport en from './en.json';\nimport ru from './ru.json';\nexport const i18n = addComponentKeysets({ en, ru }, `${NAMESPACE}date-picker`);\n","export function getDateTimeValue(value) {\n if (!value) {\n return undefined;\n }\n return 'start' in value && 'end' in value ? value.start : value;\n}\n","import { useDateFieldState } from '../../DateField';\nimport { createPlaceholderValue, mergeDateTime } from '../../utils/dates';\nimport { getDateTimeValue } from '../utils';\nimport { datePickerStateFactory } from './datePickerStateFactory';\nexport const useDatePickerState = datePickerStateFactory({\n getPlaceholderTime,\n mergeDateTime,\n setTimezone: (date, timeZone) => date.timeZone(timeZone),\n getDateTime: getDateTimeValue,\n useDateFieldState,\n});\nfunction getPlaceholderTime(placeholderValue, timeZone) {\n return createPlaceholderValue({ placeholderValue, timeZone });\n}\n","import React from 'react';\nimport { useControlledState } from '@gravity-ui/uikit';\nimport { useDefaultTimeZone } from '../../utils/useDefaultTimeZone';\nexport function datePickerStateFactory({ getPlaceholderTime, mergeDateTime, setTimezone, getDateTime, useDateFieldState, }) {\n return function useDatePickerState(props) {\n var _a;\n const { disabled, readOnly } = props;\n const [isOpen, setOpen] = React.useState(false);\n const [value, setValue] = useControlledState(props.value, (_a = props.defaultValue) !== null && _a !== void 0 ? _a : null, props.onUpdate);\n const [selectedDateInner, setSelectedDate] = React.useState(null);\n const [selectedTimeInner, setSelectedTime] = React.useState(null);\n const inputTimeZone = useDefaultTimeZone(getDateTime(props.value) || getDateTime(props.defaultValue) || props.placeholderValue);\n const timeZone = props.timeZone || inputTimeZone;\n let selectedDate = selectedDateInner;\n let selectedTime = selectedTimeInner;\n const format = props.format || 'L';\n const commitValue = (date, time) => {\n if (disabled || readOnly) {\n return;\n }\n setValue(setTimezone(mergeDateTime(date, time), inputTimeZone));\n setSelectedDate(null);\n setSelectedTime(null);\n };\n const dateFieldState = useDateFieldState(Object.assign(Object.assign({}, props), { value,\n onUpdate(date) {\n if (date) {\n commitValue(date, date);\n }\n else {\n setValue(null);\n }\n },\n disabled,\n readOnly, validationState: props.validationState, minValue: props.minValue, maxValue: props.maxValue, isDateUnavailable: props.isDateUnavailable, format, placeholderValue: props.placeholderValue, timeZone }));\n const timeFormat = React.useMemo(() => {\n const hasSeconds = dateFieldState.sections.some((s) => s.type === 'second');\n return hasSeconds ? 'LTS' : 'LT';\n }, [dateFieldState.sections]);\n if (value) {\n selectedDate = setTimezone(value, timeZone);\n if (dateFieldState.hasTime) {\n selectedTime = setTimezone(value, timeZone);\n }\n }\n // Intercept setValue to make sure the Time section is not changed by date selection in Calendar\n const selectDate = (newValue) => {\n if (disabled || readOnly) {\n return;\n }\n const shouldClose = !dateFieldState.hasTime;\n if (dateFieldState.hasTime) {\n if (selectedTime || shouldClose) {\n commitValue(newValue, selectedTime || newValue);\n }\n else {\n setSelectedDate(newValue);\n }\n }\n else {\n commitValue(newValue, newValue);\n }\n if (shouldClose) {\n setOpen(false);\n }\n };\n const selectTime = (newValue) => {\n if (disabled || readOnly) {\n return;\n }\n const newTime = newValue !== null && newValue !== void 0 ? newValue : getPlaceholderTime(props.placeholderValue, timeZone);\n if (selectedDate) {\n commitValue(selectedDate, newTime);\n }\n else {\n setSelectedTime(newTime);\n }\n };\n if (dateFieldState.hasTime && !selectedTime) {\n selectedTime = dateFieldState.displayValue;\n }\n return {\n value,\n setValue(newDate) {\n if (props.readOnly || props.disabled) {\n return;\n }\n if (newDate) {\n setValue(setTimezone(newDate, inputTimeZone));\n }\n else {\n setValue(null);\n }\n },\n dateValue: selectedDate,\n timeValue: selectedTime,\n setDateValue: selectDate,\n setTimeValue: selectTime,\n disabled,\n readOnly,\n format,\n hasDate: dateFieldState.hasDate,\n hasTime: dateFieldState.hasTime,\n timeFormat,\n timeZone,\n isOpen,\n setOpen(newIsOpen) {\n if (!newIsOpen && !value && selectedDate && dateFieldState.hasTime) {\n commitValue(selectedDate, selectedTime || getPlaceholderTime(props.placeholderValue, props.timeZone));\n }\n setOpen(newIsOpen);\n },\n dateFieldState,\n };\n };\n}\n","import { block } from '../../../utils/cn';\nexport const b = block('date-picker');\n","'use client';\nimport { __rest } from \"tslib\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React from 'react';\nimport { Calendar as CalendarIcon, Clock as ClockIcon } from '@gravity-ui/icons';\nimport { Button, Icon, Popup, TextInput, useMobile } from '@gravity-ui/uikit';\nimport { Calendar } from '../Calendar';\nimport { DateField } from '../DateField';\nimport { HiddenInput } from '../HiddenInput/HiddenInput';\nimport { MobileCalendar } from './MobileCalendar';\nimport { StubButton } from './StubButton';\nimport { useDatePickerProps } from './hooks/useDatePickerProps';\nimport { useDatePickerState } from './hooks/useDatePickerState';\nimport { b } from './utils';\nimport './DatePicker.css';\nexport function DatePicker(_a) {\n var { className } = _a, props = __rest(_a, [\"className\"]);\n const anchorRef = React.useRef(null);\n const state = useDatePickerState(props);\n const { groupProps, fieldProps, calendarButtonProps, popupProps, calendarProps, timeInputProps } = useDatePickerProps(state, props);\n const isMobile = useMobile();\n const isOnlyTime = state.hasTime && !state.hasDate;\n return (_jsxs(\"div\", Object.assign({ className: b(null, className) }, groupProps, { children: [isMobile ? (_jsx(MobileCalendar, { props: props, state: state })) : (!isOnlyTime && (_jsx(\"div\", { ref: anchorRef, className: b('popup-anchor'), children: _jsx(Popup, Object.assign({ anchorRef: anchorRef }, popupProps, { children: _jsxs(\"div\", { className: b('popup-content'), children: [typeof props.children === 'function' ? (props.children(calendarProps)) : (_jsx(Calendar, Object.assign({}, calendarProps))), state.hasTime && (_jsx(\"div\", { className: b('time-field-wrapper'), children: _jsx(DateField, Object.assign({}, timeInputProps)) }))] }) })) }))), _jsx(TextInput, Object.assign({}, fieldProps, { className: b('field', { mobile: isMobile }), hasClear: !isMobile && fieldProps.hasClear, endContent: _jsxs(React.Fragment, { children: [!isMobile && !isOnlyTime && (_jsx(Button, Object.assign({}, calendarButtonProps, { children: _jsx(Icon, { data: CalendarIcon }) }))), !isMobile && isOnlyTime && (_jsx(StubButton, { size: calendarButtonProps.size, icon: ClockIcon })), isMobile && (_jsx(StubButton, { size: calendarButtonProps.size, icon: isOnlyTime ? ClockIcon : CalendarIcon }))] }) })), _jsx(HiddenInput, { name: props.name, value: state.value, toStringValue: (value) => { var _a; return (_a = value === null || value === void 0 ? void 0 : value.toISOString()) !== null && _a !== void 0 ? _a : ''; }, onReset: (value) => {\n state.setValue(value);\n }, disabled: state.disabled, form: props.form })] })));\n}\n","import { __rest } from \"tslib\";\nimport React from 'react';\nimport { useFocusWithin, useForkRef } from '@gravity-ui/uikit';\nimport { useDateFieldProps } from '../../DateField';\nimport { getButtonSizeForInput } from '../../utils/getButtonSizeForInput';\nimport { mergeProps } from '../../utils/mergeProps';\nimport { i18n } from '../i18n';\nimport { getDateTimeValue } from '../utils';\nexport function useDatePickerProps(state, _a) {\n var { onFocus, onBlur } = _a, props = __rest(_a, [\"onFocus\", \"onBlur\"]);\n const [isActive, setActive] = React.useState(false);\n const { focusWithinProps } = useFocusWithin({\n onFocusWithin: onFocus,\n onBlurWithin: onBlur,\n onFocusWithinChange(isFocusWithin) {\n setActive(isFocusWithin);\n if (!isFocusWithin) {\n state.setOpen(false);\n }\n },\n });\n const { inputProps } = useDateFieldProps(state.dateFieldState, props);\n const inputRef = React.useRef(null);\n const handleRef = useForkRef(inputRef, inputProps.controlRef);\n const calendarRef = React.useRef(null);\n const calendarButtonRef = React.useRef(null);\n const groupRef = React.useRef(null);\n function focusInput() {\n setTimeout(() => {\n var _a;\n (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();\n });\n }\n const onlyTime = state.hasTime && !state.hasDate;\n return {\n groupProps: Object.assign(Object.assign({ ref: groupRef, tabIndex: -1, role: 'group' }, focusWithinProps), { style: props.style, 'aria-disabled': state.disabled || undefined, onKeyDown: (e) => {\n if (!onlyTime && e.altKey && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {\n e.preventDefault();\n e.stopPropagation();\n state.setOpen(true);\n }\n } }),\n fieldProps: mergeProps(inputProps, state.dateFieldState.isEmpty && !isActive && props.placeholder\n ? { value: '' }\n : undefined, { controlRef: handleRef }),\n calendarButtonProps: {\n ref: calendarButtonRef,\n size: getButtonSizeForInput(props.size),\n disabled: state.disabled,\n extraProps: {\n 'aria-label': i18n('Calendar'),\n 'aria-haspopup': 'dialog',\n 'aria-expanded': state.isOpen,\n },\n view: 'flat-secondary',\n onClick: () => {\n setActive(true);\n state.setOpen(!state.isOpen);\n },\n },\n popupProps: {\n open: state.isOpen,\n onEscapeKeyDown: () => {\n state.setOpen(false);\n focusInput();\n },\n onOutsideClick: (e) => {\n var _a;\n if (e.target !== calendarButtonRef.current) {\n state.setOpen(false);\n }\n if (e.target && ((_a = groupRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target))) {\n focusInput();\n }\n },\n focusTrap: true,\n },\n calendarProps: {\n ref: calendarRef,\n autoFocus: true,\n size: props.size === 's' ? 'm' : props.size,\n disabled: props.disabled,\n readOnly: props.readOnly,\n onUpdate: (d) => {\n state.setDateValue(d);\n if (!state.hasTime) {\n focusInput();\n }\n },\n value: state.dateFieldState.displayValue,\n minValue: props.minValue,\n maxValue: props.maxValue,\n isDateUnavailable: props.isDateUnavailable,\n timeZone: state.timeZone,\n },\n timeInputProps: {\n value: state.timeValue,\n placeholderValue: getDateTimeValue(state.dateFieldState.displayValue),\n onUpdate: state.setTimeValue,\n format: state.timeFormat,\n readOnly: state.readOnly,\n disabled: state.disabled,\n timeZone: state.timeZone,\n hasClear: props.hasClear,\n size: props.size,\n },\n };\n}\n","export function absolute(relative: string, base?: string) {\n if (relative[0] === '/') {\n return relative;\n }\n\n if (base === undefined) {\n base = window?.location.pathname || '';\n }\n\n const stack = base.split('/');\n const parts = relative.split('/');\n stack.pop();\n for (let i = 0; i < parts.length; i++) {\n if (parts[i] == '.') {\n continue;\n }\n if (parts[i] == '..') {\n stack.pop();\n } else {\n stack.push(parts[i]);\n }\n }\n return stack.join('/');\n}\n","import map_ from 'lodash/map';\n\nimport moment from 'moment';\nimport {createSelector} from 'reselect';\n\nimport Utils, {currentDate} from '../odin-utils';\nimport {COLS_NUMBER} from '../odin-constants';\nimport {makeGetSetting} from '../../../store/selectors/settings';\nimport {ODIN_VISIBLE_METRIC_PRESETS, YA_NAMESPACES} from '../odin-settings';\nimport {OdinRootState} from '../_reducers';\nimport YT from '../../../config/yt-config';\n\nexport const getMetric = (state: OdinRootState) => state.odin.details.metric;\nexport const getUseCurrentDate = (state: OdinRootState) => state.odin.details.useCurrentDate;\nexport const getHours = (state: OdinRootState) => state.odin.details.hours;\nexport const getMinutes = (state: OdinRootState) => state.odin.details.minutes;\nexport const getMetricAvailability = (state: OdinRootState) =>\n state.odin.details.metricAvailability;\n\nexport const getDate = (state: OdinRootState) => {\n if (getUseCurrentDate(state)) {\n return currentDate();\n }\n return state.odin.details.date;\n};\n\nexport const getStat = createSelector([getMetricAvailability], (availability) => {\n return Utils.computeStat(availability);\n});\n\nexport const getExtendedInfo = createSelector(\n [getMetricAvailability, getDate, getHours, getMinutes],\n (availability, date, hours, minutes) => {\n let info;\n if (hours !== -1 && minutes !== -1) {\n const index = hours * COLS_NUMBER + minutes;\n\n info = availability[index];\n if (info) {\n info = {\n ...info,\n date: moment(date)\n .set({hour: hours, minute: minutes})\n .format('DD-MM-YYYY HH:mm'),\n };\n }\n }\n\n return info;\n },\n);\n\nexport const getOdinCluster = (state: OdinRootState) => state.odin.details.odinCluster;\nfunction makeClusterNameItems() {\n const names = map_(YT.clusters, 'id').sort();\n return map_(names, (name) => {\n return {\n key: name,\n value: name,\n title: (YT.clusters[name] || {name}).name,\n };\n });\n}\n\nexport const ODIN_CLUSTER_NAMES_ITEMS = makeClusterNameItems();\n\nexport const getSettingOdinOverviewVisiblePresets = createSelector(makeGetSetting, (getSetting) => {\n return getSetting(ODIN_VISIBLE_METRIC_PRESETS, YA_NAMESPACES.ODIN) || [];\n});\n","import {NAMESPACES} from '../../../shared/constants/settings';\nimport {createNestedNS} from '../../../shared/utils/settings';\nconst ODIN = createNestedNS('odin', NAMESPACES.GLOBAL);\n\nexport const ODIN_VISIBLE_METRIC_PRESETS = 'visibleMetricPresets';\nexport const ODIN_LAST_VISITED_TAB = 'lastVisitedTab';\n\nexport const YA_NAMESPACES = {ODIN};\n","import partition_ from 'lodash/partition';\nimport sortBy_ from 'lodash/sortBy';\n\nimport {createSelector} from 'reselect';\nimport {getSettingOdinOverviewVisiblePresets} from './index';\nimport {OdinRootState} from '../_reducers';\nimport {makeGetSetting} from '../../../store/selectors/settings';\nimport {OdinTab} from '../odin-constants';\nimport {ODIN_LAST_VISITED_TAB} from '../odin-settings';\nimport {NAMESPACES} from '../../../../shared/constants/settings';\n\nexport const getOdinOverviewTimeFromFilter = (state: OdinRootState) =>\n state.odin.overview.timeFromFilter;\nexport const getOdinOverviewTimeFrom = (state: OdinRootState) => state.odin.overview.timeFrom;\nexport const getOdinOverviewTimeTo = (state: OdinRootState) => state.odin.overview.timeTo;\nexport const getOdinOverviewLoading = (state: OdinRootState) => state.odin.overview.loading;\nexport const getOdinOverviewData = (state: OdinRootState) => state.odin.overview.data;\nexport const getOdinOverviewDataCluster = (state: OdinRootState) => state.odin.overview.dataCluster;\nconst getOdinOverviewHiddenMetricsRaw = (state: OdinRootState) => state.odin.overview.hiddenMetrics;\nexport const getOdinOverviewShowCreatePresetDialog = (state: OdinRootState) =>\n state.odin.overview.showCreatePresetDialog;\nexport const getOdinOverviewUseDefaultPreset = (state: OdinRootState) =>\n state.odin.overview.useDefaultPreset;\nexport const getOdinOverviewPresetToRemove = (state: OdinRootState) =>\n state.odin.overview.presetToRemove;\n\nconst getOdinOverviewClusterMetricsRaw = (state: OdinRootState) =>\n state.odin.overview.clusterMetrics;\n\nexport const getOdinOverviewVisiblePresets = createSelector(\n [getSettingOdinOverviewVisiblePresets],\n (res?: Array<OdinOverviewPreset>) => {\n return res || [];\n },\n);\n\nexport const getOdinOverviewDefaultPreset = createSelector(\n [getOdinOverviewVisiblePresets],\n (presets) => {\n return presets.find((item) => item.isDefault);\n },\n);\n\nexport interface OdinOverviewPreset {\n name: string;\n hiddenMetricNames: Array<string>;\n\n isDefault?: boolean;\n}\n\nexport const getOdinOverviewHiddenMetrics = createSelector(\n [\n getOdinOverviewHiddenMetricsRaw,\n getOdinOverviewUseDefaultPreset,\n getOdinOverviewDefaultPreset,\n ],\n (hiddenMetrics, useDefaultPreset, defaultPreset) => {\n if (!defaultPreset || !useDefaultPreset) {\n return hiddenMetrics;\n }\n\n return defaultPreset.hiddenMetricNames.reduce(\n (acc, name) => {\n acc[name] = true;\n return acc;\n },\n {} as typeof hiddenMetrics,\n );\n },\n);\n\nexport const getOdinOverviewClusterMetrics = createSelector(\n [getOdinOverviewClusterMetricsRaw, getOdinOverviewHiddenMetrics],\n (items, hiddenMetrics) => {\n const sorted = sortBy_(items, 'display_name');\n const [hidden, visible] = partition_(sorted, ({name}) => hiddenMetrics[name]);\n return visible.concat(hidden);\n },\n);\n\nexport const getOdinLastVisitedTab = createSelector(\n makeGetSetting,\n (getSetting) => getSetting(ODIN_LAST_VISITED_TAB, NAMESPACES.GLOBAL) || OdinTab.OVERVIEW,\n);\n","import {ThunkAction} from 'redux-thunk';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\n\nimport Utils from '../odin-utils';\nimport {RootState} from '../../../store/reducers';\nimport {OdinOverviewAction, OdinOverviewState} from '../_reducers/odin-overview';\nimport {\n ODIN_OVERVIEW_CANCELLED,\n ODIN_OVERVIEW_FAILED,\n ODIN_OVERVIEW_HIDDEN_METRICS,\n ODIN_OVERVIEW_PARTIAL,\n ODIN_OVERVIEW_REQUEST,\n ODIN_OVERVIEW_SUCCESS,\n} from '../odin-constants';\nimport {\n getOdinLastVisitedTab,\n getOdinOverviewClusterMetrics,\n getOdinOverviewData,\n getOdinOverviewDataCluster,\n getOdinOverviewHiddenMetrics,\n getOdinOverviewTimeFrom,\n getOdinOverviewTimeFromFilter,\n getOdinOverviewTimeTo,\n getOdinOverviewVisiblePresets,\n} from '../_selectors/odin-overview';\nimport {reloadSetting, setSetting} from '../../../store/actions/settings';\nimport {Toaster} from '@gravity-ui/uikit';\nimport {showErrorPopup} from '../../../utils/utils';\nimport {NAMESPACES} from '../../../../shared/constants/settings';\nimport {ODIN_LAST_VISITED_TAB, ODIN_VISIBLE_METRIC_PRESETS, YA_NAMESPACES} from '../odin-settings';\nimport {OdinRootState} from '../_reducers';\n\ntype OdinOverviewThunkAction = ThunkAction<any, OdinRootState & RootState, any, OdinOverviewAction>;\n\nfunction getClusterHelper(gs: () => OdinRootState) {\n return getOdinOverviewDataCluster(gs());\n}\n\nconst COUNT_OF_MINUTES = 30;\n\nexport const ODIN_OVERVIEW_TIME_RANGE = COUNT_OF_MINUTES * 60 * 1000;\n\nlet cancelMetrics: {cancel: () => void} = {cancel: () => {}};\n\nfunction fetchOdinOverview(cluster: string, time?: number): OdinOverviewThunkAction {\n return (dispatch, getState) => {\n cancelMetrics.cancel();\n const data = getOdinOverviewData(getState());\n forEach_(data, (item) => item.cancel?.());\n\n const oldCluster = getClusterHelper(getState);\n\n dispatch({\n type: ODIN_OVERVIEW_REQUEST,\n });\n\n if (oldCluster !== cluster) {\n dispatch({\n type: ODIN_OVERVIEW_PARTIAL,\n data: {data: {}, clusterMetrics: [], dataCluster: cluster},\n });\n }\n\n return Utils.listMetrics(cluster, (c) => {\n cancelMetrics = c;\n })\n .then((clusterMetrics) => {\n if (getClusterHelper(getState) !== cluster) {\n return;\n }\n\n const timeFrom = time ? time : Date.now() - ODIN_OVERVIEW_TIME_RANGE;\n const timeTo = timeFrom + ODIN_OVERVIEW_TIME_RANGE;\n\n dispatch({\n type: ODIN_OVERVIEW_PARTIAL,\n data: {\n clusterMetrics,\n timeFrom,\n timeTo,\n },\n });\n\n const hiddenMetrics = getOdinOverviewHiddenMetrics(getState());\n Promise.all(\n clusterMetrics.map(({name}) => {\n if (!hiddenMetrics[name]) {\n return dispatch(fetchMetricData(cluster, name, timeFrom, timeTo));\n } else {\n return Promise.resolve();\n }\n }),\n ).then(() => {\n dispatch({type: ODIN_OVERVIEW_SUCCESS});\n });\n })\n .catch((error) => {\n if (Utils.isRequestCanceled(error)) {\n dispatch({type: ODIN_OVERVIEW_CANCELLED});\n } else {\n dispatch({type: ODIN_OVERVIEW_FAILED, data: error});\n }\n });\n };\n}\n\nexport function odinOverviewSetPreviousTimeRange(): OdinOverviewThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const timeFromFilter = getOdinOverviewTimeFromFilter(state);\n if (!timeFromFilter) {\n dispatch(setOdinOverviewFromTimeFilter(Date.now() - 2 * ODIN_OVERVIEW_TIME_RANGE));\n } else {\n dispatch(setOdinOverviewFromTimeFilter(timeFromFilter - ODIN_OVERVIEW_TIME_RANGE));\n }\n };\n}\n\nexport function odinOverviewSetNextTimeRange(): OdinOverviewThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const timeFromFilter = getOdinOverviewTimeFromFilter(state);\n if (!timeFromFilter) {\n return;\n } else {\n const nextFilter = timeFromFilter + ODIN_OVERVIEW_TIME_RANGE;\n if (Date.now() - nextFilter < ODIN_OVERVIEW_TIME_RANGE) {\n dispatch(setOdinOverviewFromTimeFilter(undefined));\n } else {\n dispatch(setOdinOverviewFromTimeFilter(nextFilter));\n }\n }\n };\n}\n\nexport function setOdinOverviewFromTimeFilter(time: number | undefined): OdinOverviewAction {\n return {type: ODIN_OVERVIEW_PARTIAL, data: {timeFromFilter: time}};\n}\n\nexport function reloadOdinOverview(\n cluster: string,\n timeFromFilter: number | undefined,\n): OdinOverviewThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const timeFilter = getOdinOverviewTimeFromFilter(state);\n const timeFrom = getOdinOverviewTimeFrom(state);\n\n if (!timeFilter || timeFilter !== timeFrom) {\n dispatch(fetchOdinOverview(cluster, timeFromFilter));\n }\n };\n}\n\nfunction fetchMetricData(\n cluster: string,\n name: string,\n from: number,\n to: number,\n): OdinOverviewThunkAction {\n return (dispatch, getState) => {\n let {cancel} = getOdinOverviewData(getState())[name] || {};\n if (cancel) {\n cancel();\n }\n\n return Utils.getMetric(cluster, name, from, to, (c) => {\n cancel = c.cancel;\n })\n .then((d) => {\n if (getClusterHelper(getState) !== cluster) {\n return;\n }\n\n const data = {\n ...getOdinOverviewData(getState()),\n [name]: {\n cancel,\n metricData: Utils.prepareAvailabilityData(d, COUNT_OF_MINUTES),\n },\n };\n dispatch({type: ODIN_OVERVIEW_PARTIAL, data: {data}});\n })\n .catch((error) => {\n if (!Utils.isRequestCanceled(error)) {\n const data = {\n ...getOdinOverviewData(getState()),\n [name]: {error},\n };\n dispatch({type: ODIN_OVERVIEW_PARTIAL, data: {data}});\n }\n });\n };\n}\n\nexport function reloadOdinOverviewMetricData(metricName: string): OdinOverviewThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const cluster = getOdinOverviewDataCluster(state);\n const from = getOdinOverviewTimeFrom(state);\n const to = getOdinOverviewTimeTo(state);\n if (from && to) {\n dispatch(fetchMetricData(cluster, metricName, from, to));\n }\n };\n}\n\nexport function toggleOdinOverviewMetricVisibility(metricName: string): OdinOverviewThunkAction {\n return (dispatch, getState) => {\n const hiddenMetrics = {...getOdinOverviewHiddenMetrics(getState())};\n if (hiddenMetrics[metricName]) {\n delete hiddenMetrics[metricName];\n } else {\n hiddenMetrics[metricName] = true;\n }\n dispatch({\n type: ODIN_OVERVIEW_HIDDEN_METRICS,\n data: {hiddenMetrics},\n });\n if (!hiddenMetrics[metricName]) {\n dispatch(reloadOdinOverviewMetricData(metricName));\n }\n };\n}\n\nexport function odinOverviewSetAllMetricsVisible(value: boolean): OdinOverviewThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const oldHhiddenMetrics = getOdinOverviewHiddenMetrics(state);\n let toReload: Array<string> = [];\n const hiddenMetrics: typeof oldHhiddenMetrics = {};\n if (!value) {\n const metrics = getOdinOverviewClusterMetrics(state);\n metrics.forEach(({name}) => {\n hiddenMetrics[name] = true;\n });\n } else {\n toReload = map_(oldHhiddenMetrics, (__: boolean, name: string) => name);\n }\n\n dispatch({\n type: ODIN_OVERVIEW_HIDDEN_METRICS,\n data: {hiddenMetrics},\n });\n\n toReload.forEach((name) => {\n dispatch(reloadOdinOverviewMetricData(name));\n });\n };\n}\n\nexport function odinOverviewShowCreatePresetDialog(\n showCreatePresetDialog: boolean,\n): OdinOverviewAction {\n return {type: ODIN_OVERVIEW_PARTIAL, data: {showCreatePresetDialog}};\n}\n\nexport function odinOverviewAddPreset(name: string, isDefault: boolean): OdinOverviewThunkAction {\n return (dispatch, getState) => {\n const toHide = getOdinOverviewHiddenMetrics(getState());\n return dispatch(reloadSetting(ODIN_VISIBLE_METRIC_PRESETS, YA_NAMESPACES.ODIN)).then(() => {\n const presets = [...getOdinOverviewVisiblePresets(getState())];\n presets.push({\n name,\n hiddenMetricNames: map_(toHide, (_, name) => name),\n });\n return dispatch(setSetting(ODIN_VISIBLE_METRIC_PRESETS, YA_NAMESPACES.ODIN, presets))\n .then(() => {\n if (isDefault) {\n return dispatch(odinOverviewToggleDefaultPreset(name));\n }\n })\n .catch((error: any) => {\n const data = error?.response?.data || error;\n const {message} = data;\n\n new Toaster().add({\n name: 'add-preset',\n autoHiding: false,\n theme: 'danger',\n content: message,\n title: 'Failed to crete preset',\n actions: [\n {\n label: ' view',\n onClick: () => showErrorPopup(data),\n },\n ],\n });\n });\n });\n };\n}\n\nexport function odinOverviewSetPresetToRemove(\n name: OdinOverviewState['presetToRemove'],\n): OdinOverviewThunkAction {\n return (dispatch) => {\n dispatch({\n type: ODIN_OVERVIEW_PARTIAL,\n data: {presetToRemove: name},\n });\n };\n}\n\nexport function odinOverviewRemovePreset(name: string): OdinOverviewThunkAction {\n return (dispatch, getState) => {\n return dispatch(reloadSetting(ODIN_VISIBLE_METRIC_PRESETS, YA_NAMESPACES.ODIN))\n .then(() => {\n const oldPresets = getOdinOverviewVisiblePresets(getState());\n const presets = oldPresets.filter((item) => item.name !== name);\n return dispatch(\n setSetting(ODIN_VISIBLE_METRIC_PRESETS, YA_NAMESPACES.ODIN, presets),\n );\n })\n .catch((error: any) => {\n const data = error?.response?.data || error;\n const {message} = data;\n\n new Toaster().add({\n name: 'delete-preset',\n autoHiding: false,\n theme: 'danger',\n content: message,\n title: 'Failed to delete the preset',\n actions: [{label: ' view', onClick: () => showErrorPopup(data)}],\n });\n });\n };\n}\n\nexport function odinOverviewToggleDefaultPreset(name: string): OdinOverviewThunkAction {\n return (dispatch, getState) => {\n return dispatch(reloadSetting(ODIN_VISIBLE_METRIC_PRESETS, YA_NAMESPACES.ODIN)).then(() => {\n const presets = [...getOdinOverviewVisiblePresets(getState())];\n for (let i = 0; i < presets.length; ++i) {\n const item = presets[i];\n if (item.name === name) {\n presets[i] = {...item, isDefault: !item.isDefault};\n } else if (item.isDefault) {\n presets[i] = {...item};\n delete presets[i]['isDefault'];\n }\n }\n return dispatch(\n setSetting(ODIN_VISIBLE_METRIC_PRESETS, YA_NAMESPACES.ODIN, presets),\n ).catch((error: any) => {\n const data = error?.response?.data || error;\n const {message} = data;\n\n new Toaster().add({\n name: 'set-deault-preset',\n autoHiding: false,\n theme: 'danger',\n content: message,\n title: 'Failed to set the preset as default',\n actions: [{label: ' view', onClick: () => showErrorPopup(data)}],\n });\n });\n });\n };\n}\n\nexport function odinOverviewSelectPreset(name: string): OdinOverviewThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const presets = getOdinOverviewVisiblePresets(state);\n const preset = presets.find((item) => item.name === name);\n if (preset) {\n const {hiddenMetricNames} = preset;\n const hiddenMetrics: OdinOverviewState['hiddenMetrics'] = {};\n hiddenMetricNames.forEach((name) => {\n hiddenMetrics[name] = true;\n });\n dispatch({\n type: ODIN_OVERVIEW_HIDDEN_METRICS,\n data: {hiddenMetrics},\n });\n\n const oldHiddenMetrics = getOdinOverviewHiddenMetrics(state);\n forEach_(oldHiddenMetrics, (_, name) => {\n if (!hiddenMetrics[name]) {\n dispatch(reloadOdinOverviewMetricData(name));\n }\n });\n }\n };\n}\n\nexport function setOdinLastVisitedTab(tab: string): ThunkAction<any, any, RootState, any> {\n return (dispatch, getState) => {\n const current = getOdinLastVisitedTab(getState());\n if (current !== tab) {\n dispatch(setSetting(ODIN_LAST_VISITED_TAB, NAMESPACES.GLOBAL, tab));\n }\n };\n}\n","import {\n COLS_NUMBER,\n GET_METRIC_DATA,\n ODIN_DATA_FIELDS,\n ROWS_NUMBER,\n SET_DATE,\n SET_HOURS_MINUTES,\n SET_METRIC,\n TOGGLE_USE_CURRENT_DATE,\n} from '../odin-constants';\nimport {getDate, getMetric} from '../_selectors';\nimport CancelHelper from '../../../utils/cancel-helper';\n\nimport Utils from '../odin-utils';\n\nconst requests = new CancelHelper();\n\nexport function setMetric(metric) {\n return {\n type: SET_METRIC,\n data: {metric},\n };\n}\n\nexport function toggleUseCurrentDate() {\n return {\n type: TOGGLE_USE_CURRENT_DATE,\n };\n}\n\nexport function setDate(date) {\n return {\n type: SET_DATE,\n data: {date},\n };\n}\n\nexport function setShowInfo(hours, minutes) {\n return {\n type: SET_HOURS_MINUTES,\n data: {hours, minutes},\n };\n}\n\nexport function loadMetricAvailability({cluster, metric, date}) {\n return (dispatch) => {\n dispatch({type: GET_METRIC_DATA.REQUEST});\n requests.removeAllRequests();\n\n Utils.getMetricOfThisDay(cluster, metric, date, requests.saveCancelToken)\n .then((data) => {\n const metricAvailability = Utils.prepareAvailabilityData(\n data,\n ROWS_NUMBER * COLS_NUMBER,\n );\n dispatch({\n type: GET_METRIC_DATA.SUCCESS,\n data: {metricAvailability},\n });\n })\n .catch((error) => {\n if (Utils.isRequestCanceled(error)) {\n dispatch({type: GET_METRIC_DATA.CANCELLED});\n } else {\n dispatch({\n type: GET_METRIC_DATA.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function setOdinCluster(odinCluster) {\n return (dispatch, getState) => {\n const state = getState();\n const metric = getMetric(state);\n const date = getDate(state);\n\n dispatch({type: ODIN_DATA_FIELDS, data: {odinCluster}});\n return dispatch(loadMetricAvailability({cluster: odinCluster, metric, date}));\n };\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {getOdinOverviewShowCreatePresetDialog} from '../_selectors/odin-overview';\nimport {YTDFDialog} from '../../../components/Dialog';\nimport {odinOverviewAddPreset, odinOverviewShowCreatePresetDialog} from '../_actions/odin-overview';\nimport {getSettingOdinOverviewVisiblePresets} from '../_selectors';\n\nexport default function OdinOverviewCreatePresetDialog() {\n const dispatch = useDispatch();\n\n const visible = useSelector(getOdinOverviewShowCreatePresetDialog);\n\n const closeDialog = () => dispatch(odinOverviewShowCreatePresetDialog(false));\n\n const presets = useSelector(getSettingOdinOverviewVisiblePresets);\n const validateName = React.useCallback(\n (name: string) => {\n for (let i = 0; i < presets.length; ++i) {\n if (name === presets[i].name) {\n return 'The name must be unique';\n }\n }\n return undefined;\n },\n [presets],\n );\n\n return (\n <YTDFDialog\n visible={visible}\n headerProps={{\n title: 'Create preset',\n }}\n onAdd={(form: any) => {\n const {name, isDefault} = form.getState().values;\n const res = dispatch(odinOverviewAddPreset(name, isDefault));\n return (res as any).then(closeDialog);\n }}\n onClose={closeDialog}\n initialValues={{\n name: '',\n asDefault: false,\n }}\n fields={[\n {\n name: 'name',\n type: 'text',\n caption: 'Preset name',\n required: true,\n validator: validateName,\n },\n {\n name: 'isDefault',\n type: 'tumbler',\n caption: 'Use as default',\n },\n ]}\n />\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport * as d3 from 'd3';\nimport moment from 'moment';\nimport map_ from 'lodash/map';\n\nimport {Button, Dialog, Loader, Popup, Icon as UIKitIcon} from '@gravity-ui/uikit';\n\nimport chevronLeftSvg from '@gravity-ui/icons/svgs/chevron-left.svg';\nimport chevronRightSvg from '@gravity-ui/icons/svgs/chevron-right.svg';\n\nimport {DatePicker} from '@gravity-ui/date-components';\n\nimport {absolute} from '../../../common/utils/url-ts';\n\nimport hammer from '../../../common/hammer';\n\nimport {dateTime} from '@gravity-ui/date-utils';\n\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n ODIN_OVERVIEW_TIME_RANGE,\n odinOverviewRemovePreset,\n odinOverviewSelectPreset,\n odinOverviewSetAllMetricsVisible,\n odinOverviewSetNextTimeRange,\n odinOverviewSetPresetToRemove,\n odinOverviewSetPreviousTimeRange,\n odinOverviewShowCreatePresetDialog,\n odinOverviewToggleDefaultPreset,\n reloadOdinOverview,\n reloadOdinOverviewMetricData,\n setOdinLastVisitedTab,\n setOdinOverviewFromTimeFilter,\n toggleOdinOverviewMetricVisibility,\n} from '../_actions/odin-overview';\nimport {\n OdinOverviewPreset,\n getOdinOverviewClusterMetrics,\n getOdinOverviewData,\n getOdinOverviewHiddenMetrics,\n getOdinOverviewLoading,\n getOdinOverviewPresetToRemove,\n getOdinOverviewTimeFrom,\n getOdinOverviewTimeFromFilter,\n getOdinOverviewTimeTo,\n getOdinOverviewVisiblePresets,\n} from '../_selectors/odin-overview';\nimport {MetricData, MetricListItem} from '../odin-utils';\nimport {OdinOverviewStateDataItem} from '../_reducers/odin-overview';\nimport {ClickableText} from '../../../components/ClickableText/ClickableText';\nimport Link from '../../../components/Link/Link';\n// @ts-ignore\nimport {YTDFDialog} from '../../../components/Dialog';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {setMetric} from '../_actions';\nimport Icon from '../../../components/Icon/Icon';\nimport OdinOverviewCreatePresetDialog from './OdinOverviewCreatePresetDialog';\n\nimport {ODIN_CELL_SIZE, OdinTab} from '../odin-constants';\n\nimport './OdinOverview.scss';\nimport WithStickyToolbar from '../../../components/WithStickyToolbar/WithStickyToolbar';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nconst block = cn('odin-overview');\n\nfunction useOdinOverviewDataLoader(cluster: string) {\n const dispatch = useDispatch();\n\n const timeFromFilter = useSelector(getOdinOverviewTimeFromFilter);\n const updateFn = React.useCallback(() => {\n dispatch(reloadOdinOverview(cluster, timeFromFilter));\n }, [cluster, timeFromFilter, dispatch]);\n\n useUpdater(updateFn, {timeout: 60 * 1000});\n}\n\nconst DATE_FORMAT = 'D MMM ';\nconst TIME_FORMAT = 'HH:mm';\nconst D_O_Y_FORMAT = 'DDD YYYY';\n\nfunction formatByDates(from: Date, to: Date) {\n const isToday = moment(to).format(D_O_Y_FORMAT) === moment().format(D_O_Y_FORMAT);\n return isToday && moment(from).format(DATE_FORMAT) === moment(to).format(DATE_FORMAT)\n ? TIME_FORMAT\n : DATE_FORMAT + TIME_FORMAT;\n}\n\ninterface OdinOverviewProps {\n cluster: string;\n}\n\nexport default function OdinOverviewWithPreset({cluster}: OdinOverviewProps) {\n const dispatch = useDispatch();\n React.useEffect(() => {\n dispatch(setOdinLastVisitedTab(OdinTab.OVERVIEW));\n }, []);\n return (\n <React.Fragment>\n <OdinOverviewPresets />\n <OdinOverview cluster={cluster} />\n <OdinOverviewCreatePresetDialog />\n </React.Fragment>\n );\n}\n\nfunction OdinOverviewPresets() {\n const presets = useSelector(getOdinOverviewVisiblePresets);\n return (\n <div className={block('presets')}>\n {map_(presets, (item) => (\n <OdinOverviewPresetItem key={item.name} {...item} />\n ))}\n </div>\n );\n}\n\nfunction OdinOverviewPresetItem({name, isDefault}: OdinOverviewPreset) {\n const dispatch = useDispatch();\n return (\n <div className={block('preset')} onClick={() => dispatch(odinOverviewSelectPreset(name))}>\n <ClickableText\n className={block('preset-star')}\n color={'secondary'}\n onClick={() => {\n dispatch(odinOverviewToggleDefaultPreset(name));\n }}\n title={isDefault ? 'Unmark as default' : 'Mark as default'}\n >\n <Icon awesome={'star'} face={isDefault ? 'solid' : 'regular'} />\n </ClickableText>\n <span className={block('preset-name')} title={name}>\n {name}\n </span>\n <ClickableText\n className={block('preset-remove')}\n color={'secondary'}\n onClick={(e) => {\n e.stopPropagation();\n dispatch(odinOverviewSetPresetToRemove(name));\n }}\n title={'Remove'}\n >\n <Icon awesome={'times'} />\n </ClickableText>\n </div>\n );\n}\n\nfunction OdinOverviewRemoveConfirmationDialog() {\n const presetToRemove = useSelector(getOdinOverviewPresetToRemove);\n const dispatch = useDispatch();\n\n const handleClose = React.useCallback(() => {\n dispatch(odinOverviewSetPresetToRemove(undefined));\n }, []);\n\n const handleAdd = React.useCallback(async () => {\n if (presetToRemove) {\n await dispatch(odinOverviewRemovePreset(presetToRemove));\n return;\n }\n return Promise.resolve();\n }, [presetToRemove, dispatch]);\n\n return (\n <YTDFDialog\n pristineSubmittable\n visible={Boolean(presetToRemove)}\n onClose={handleClose}\n onAdd={handleAdd}\n fields={[\n {\n type: 'block',\n name: 'text',\n extras: {\n children: (\n <div>\n Are you sure you want to remove\n <span className={block('preset-to-remove')}>\n {' '}\n {presetToRemove}{' '}\n </span>\n preset\n </div>\n ),\n },\n },\n ]}\n headerProps={{\n title: `Remove \"${presetToRemove}\"`,\n }}\n footerProps={{\n textApply: 'Remove',\n }}\n />\n );\n}\n\nfunction OdinOverview(props: OdinOverviewProps) {\n const {cluster} = props;\n useOdinOverviewDataLoader(cluster);\n\n const fromFilter = useSelector(getOdinOverviewTimeFromFilter);\n const from = useSelector(getOdinOverviewTimeFrom);\n const to = useSelector(getOdinOverviewTimeTo);\n const loading = useSelector(getOdinOverviewLoading);\n\n const clusterMetrics = useSelector(getOdinOverviewClusterMetrics);\n const data = useSelector(getOdinOverviewData);\n const hiddenMap = useSelector(getOdinOverviewHiddenMetrics);\n\n const [tooltipData, setTooltip] = React.useState<Partial<TooltipState>>({});\n const [dialogData, setDialogData] = React.useState<DialogData | null>(null);\n\n const onTooltip = React.useCallback(\n (name: string, d?: MetricData, el?: Element, index?: number) => {\n if (el) {\n const {width, height} = el.getBoundingClientRect();\n (el as any).offsetWidth = width;\n (el as any).offsetHeight = height;\n setTooltip({\n metricName: name,\n metricData: d,\n metricDataIndex: index,\n anchor: el,\n });\n } else {\n setTooltip({});\n }\n },\n [setTooltip],\n );\n\n const onClick = React.useCallback(\n (metricName: string, metricData: MetricData, metricDataIndex: number) => {\n setDialogData({metricName, metricData, metricDataIndex});\n },\n [setDialogData],\n );\n\n const onClose = React.useCallback(() => {\n setDialogData(null);\n }, [setDialogData]);\n\n const dispatch = useDispatch();\n\n if (!from || !to) {\n return null;\n }\n\n const fromDate = new Date(from);\n const toDate = new Date(to);\n const format = formatByDates(fromDate, toDate);\n\n return (\n <ErrorBoundary>\n <WithStickyToolbar\n toolbar={\n <div className={block('navigation')}>\n <Button\n view=\"outlined\"\n onClick={() => {\n dispatch(odinOverviewSetPreviousTimeRange());\n }}\n pin=\"round-brick\"\n >\n <UIKitIcon data={chevronLeftSvg} />\n </Button>\n <DatePicker\n className={block('navigation-date-picker')}\n size=\"m\"\n format=\"DD.MM.YYYY HH:mm\"\n maxValue={dateTime({input: Date.now() - ODIN_OVERVIEW_TIME_RANGE})}\n onUpdate={(value) => {\n dispatch(setOdinOverviewFromTimeFilter(value?.valueOf()));\n }}\n value={dateTime({input: Number(fromFilter ?? from)})}\n pin=\"clear-clear\"\n />\n <Button\n view=\"outlined\"\n onClick={() => {\n dispatch(odinOverviewSetNextTimeRange());\n }}\n disabled={fromFilter === undefined}\n pin=\"brick-round\"\n >\n <UIKitIcon data={chevronRightSvg} />\n </Button>\n\n <Button\n view=\"flat-action\"\n disabled={fromFilter === undefined}\n onClick={() => {\n dispatch(setOdinOverviewFromTimeFilter(undefined));\n }}\n className={block('navigation-now')}\n >\n Now\n </Button>\n\n {loading && <Loader />}\n </div>\n }\n content={\n <>\n <div className={block()}>\n <div className={block('grid')}>\n <div className={block('dates')}>\n <div className={block('dates-item')}>\n <span>{moment(from).format(format)}</span>\n </div>\n <div className={block('dates-item')}>\n <span className={block('dates-item-to')}>\n {moment(to).add(-1, 'minute').format(format)}\n </span>\n </div>\n </div>\n <div className={block('show-hide-all')}>\n <ClickableText\n color={'secondary'}\n onClick={() =>\n dispatch(odinOverviewSetAllMetricsVisible(true))\n }\n >\n Show all\n </ClickableText>\n <span> / </span>\n <ClickableText\n color={'secondary'}\n onClick={() =>\n dispatch(odinOverviewSetAllMetricsVisible(false))\n }\n >\n Hide all\n </ClickableText>\n </div>\n <div className={block('save')}>\n <ClickableText\n color={'secondary'}\n onClick={() =>\n dispatch(odinOverviewShowCreatePresetDialog(true))\n }\n >\n <Icon awesome={'save'} />\n </ClickableText>\n </div>\n {clusterMetrics.map((item) => {\n return (\n <OverviewRow\n key={item.name}\n item={item}\n data={data[item.name]}\n onTooltip={onTooltip}\n onClick={onClick}\n hidden={hiddenMap[item.name]}\n />\n );\n })}\n </div>\n </div>\n <OdinOverviewTooltip {...tooltipData} from={new Date(from)} />\n {dialogData && (\n <OdinOverviewDetailsDialog\n {...dialogData}\n from={new Date(from)}\n onClose={onClose}\n />\n )}\n <OdinOverviewRemoveConfirmationDialog />\n </>\n }\n />\n </ErrorBoundary>\n );\n}\n\nfunction dateByIndex(from: Date, index: number) {\n return moment(from)\n .add(index, 'minute')\n .format(DATE_FORMAT + TIME_FORMAT);\n}\n\ninterface TooltipState {\n metricName?: string;\n metricData?: MetricData;\n metricDataIndex?: number;\n anchor?: Element;\n}\n\ninterface DialogData {\n metricName: string;\n metricData: MetricData;\n metricDataIndex: number;\n}\n\nfunction OdinOverviewTooltip(props: TooltipState & {from: Date}) {\n const {anchor, from, metricDataIndex, metricName, metricData} = props;\n if (!anchor || undefined === metricDataIndex) {\n return null;\n }\n return (\n <Popup\n anchorRef={{current: anchor as HTMLElement}}\n placement={['top', 'top-end', 'top-start', 'bottom', 'bottom-end', 'bottom-start']}\n open={true}\n >\n <div>\n <div>\n {dateByIndex(from, metricDataIndex)}\n <span\n className={block('status', {\n state: metricData?.state,\n })}\n >\n {hammer.format.Readable(metricData?.state)}\n </span>\n </div>\n {metricName}\n </div>\n </Popup>\n );\n}\n\nfunction OdinOverviewDetailsDialog(props: DialogData & {from: Date; onClose: () => void}) {\n const {metricName, metricData, metricDataIndex, from, onClose} = props;\n\n const status = (\n <span className={block('status', {state: metricData.state})}>\n {hammer.format.Readable(metricData.state)}\n </span>\n );\n\n return (\n <Dialog onClose={onClose} open={true} className={block('dialog')}>\n <Dialog.Header\n caption={\n <div className={block('dialog-header')}>\n <span className={block('dialog-time')}>\n {dateByIndex(from, metricDataIndex)}\n </span>\n {metricName}\n {status}\n </div>\n }\n />\n <Dialog.Divider />\n <Dialog.Body>\n <pre className={block('dialog-message')}>{metricData.message || status}</pre>\n </Dialog.Body>\n </Dialog>\n );\n}\n\ninterface OverviewRowProps {\n item: MetricListItem;\n data: OdinOverviewStateDataItem;\n onTooltip: (name: string, d?: MetricData, el?: Element, index?: number) => void;\n onClick: (name: string, d: MetricData, index: number) => void;\n hidden: boolean;\n}\n\nfunction OverviewRowImpl(props: OverviewRowProps) {\n const {item, data, onTooltip, onClick, hidden} = props;\n const handleTooltip = React.useCallback(\n (d?: MetricData, el?: Element, index?: number) => {\n onTooltip(item.display_name, d, el, index);\n },\n [item.display_name, onTooltip],\n );\n\n const handleClick = React.useCallback(\n (d: MetricData, index: number) => {\n onClick(item.display_name, d, index);\n },\n [onClick, item.display_name],\n );\n\n const dispatch = useDispatch();\n const handleNameClick = React.useCallback(() => {\n dispatch(setMetric(item.name));\n }, [item.name]);\n\n const handleHide = React.useCallback(() => {\n dispatch(toggleOdinOverviewMetricVisibility(item.name));\n }, [item.name]);\n\n return (\n <React.Fragment>\n <div className={block('graph-cell')}>\n {hidden ? (\n <div className={block('hidden-graph')}>hidden</div>\n ) : (\n <OverviewRowData\n {...data}\n name={item.name}\n handle={{\n tooltip: handleTooltip,\n click: handleClick,\n }}\n />\n )}\n </div>\n <div className={block('name-cell')}>\n <Link\n url={`${absolute('./details')}?metric=${item.name}`}\n onClick={handleNameClick}\n routedPreserveLocation\n routed\n >\n {item.display_name}\n </Link>\n </div>\n <div className={block('actions-cell')}>\n <ClickableText\n color=\"secondary\"\n onClick={handleHide}\n title={'Click to ' + (hidden ? 'display' : 'hide')}\n >\n <Icon awesome={hidden ? 'eye-slash' : 'eye'} />\n </ClickableText>\n </div>\n </React.Fragment>\n );\n}\n\nconst OverviewRow = React.memo(OverviewRowImpl);\n\ninterface OverviewRowDataProps extends OdinOverviewStateDataItem {\n name: string;\n handle: EventHandlers;\n}\n\nfunction OverviewRowData(props: OverviewRowDataProps) {\n const {error, metricData, name, handle} = props;\n\n return (\n <div className={block('row-data')}>\n {error ? (\n <OverviewRowError name={name} error={error} />\n ) : (\n <OverviewRowDataGraph items={metricData} handle={handle} />\n )}\n </div>\n );\n}\n\nfunction OverviewRowError({error, name}: {error: any; name: string}) {\n const dispatch = useDispatch();\n const handleClick = React.useCallback(() => {\n dispatch(reloadOdinOverviewMetricData(name));\n }, [name]);\n return (\n <div className={'error'}>\n <ClickableText onClick={handleClick}>Reload. </ClickableText>\n {String(error)}\n </div>\n );\n}\n\nfunction OverviewRowDataGraph({items, handle}: {items?: Array<MetricData>; handle: EventHandlers}) {\n const ref = React.createRef<HTMLDivElement>();\n useDataRenderer(ref, items, handle);\n return <div className={block('graph')} ref={ref} />;\n}\n\nfunction useDataRenderer(\n ref: React.RefObject<HTMLDivElement>,\n items: Array<MetricData> | undefined,\n handle: EventHandlers,\n) {\n React.useEffect(() => {\n if (ref.current && items) {\n renderData(ref.current, items, handle);\n }\n }, [ref, items]);\n}\n\ninterface EventHandlers {\n click: (d: MetricData, index: number) => void;\n tooltip: (d?: MetricData, el?: Element, index?: number) => void;\n}\n\nfunction renderData(div: HTMLDivElement, items: Array<MetricData>, handle: EventHandlers) {\n const selDiv = d3.select(div);\n selDiv.selectAll('svg').data([null]).enter().append('svg').attr('class', block('svg'));\n\n const svg = selDiv.select<SVGElement>('svg');\n const {width, height} = svg.node()!.getBoundingClientRect();\n const itemW = ODIN_CELL_SIZE;\n const offsetX = width - itemW * items.length;\n\n const rects = svg.selectAll<SVGRectElement, MetricData>('rect').data(items);\n rects.exit().remove();\n const added = rects.enter().append('rect');\n const selection = rects\n .merge(added)\n .attr('width', itemW - 1)\n .attr('height', height - 1)\n .attr('x', (__, index: number) => {\n return offsetX + itemW * index;\n })\n .attr('class', (d: MetricData) => {\n return block('rect', {state: d.state});\n });\n\n selection\n .on('click', function (_event: unknown, d: MetricData) {\n const index = selection.nodes().indexOf(this);\n handle.click(d, index);\n })\n .on('mouseenter', function (_event: unknown, d: MetricData) {\n const index = selection.nodes().indexOf(this);\n handle.tooltip(d, this, index);\n })\n .on('mouseout', () => {\n handle.tooltip();\n });\n}\n","import React, {useCallback, useEffect, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {Checkbox} from '@gravity-ui/uikit';\nimport Select from '../../../components/Select/Select';\nimport {Datepicker} from '../../../components/common/Datepicker';\n\nimport block from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\nimport findIndex_ from 'lodash/findIndex';\n\nimport {getDate, getMetric, getOdinCluster, getStat, getUseCurrentDate} from '../_selectors';\nimport {setDate, setMetric, toggleUseCurrentDate} from '../_actions';\nimport Utils from '../odin-utils';\nimport hammer from '../../../common/hammer';\n\nconst odinCN = block('odin');\n\nconst tbBlock = block('elements-toolbar');\n\nfunction useLoadMetricsList() {\n const [metrics, setMetrics] = useState([]);\n const cluster = useSelector(getOdinCluster);\n\n useEffect(() => {\n Utils.listMetrics(cluster).then((metrics) => {\n setMetrics(\n map_(metrics, ({name, display_name: text}) => ({\n value: name,\n text,\n })),\n );\n });\n }, []);\n\n return metrics;\n}\n\nfunction MetricSelector() {\n const metric = useSelector(getMetric);\n const dispatch = useDispatch();\n const metrics = useLoadMetricsList();\n const handleChange = useCallback((value) => {\n dispatch(setMetric(value));\n }, []);\n\n if (metrics.length > 0 && findIndex_(metrics, ({value}) => value === metric) === -1) {\n dispatch(setMetric(metrics[0].value));\n }\n\n return (\n <Select\n value={[metric]}\n label=\"Check:\"\n items={metrics}\n onUpdate={(vals) => handleChange(vals[0])}\n showSearch={true}\n width=\"max\"\n />\n );\n}\n\nfunction UseCurrentDate() {\n const useCurrentDate = useSelector(getUseCurrentDate);\n const dispatch = useDispatch();\n const handleChange = useCallback(() => {\n dispatch(toggleUseCurrentDate());\n }, []);\n\n return (\n <Checkbox\n size=\"l\"\n content=\"Current date\"\n checked={useCurrentDate}\n onChange={handleChange}\n />\n );\n}\n\nfunction CustomDate() {\n const date = useSelector(getDate);\n const dispatch = useDispatch();\n const handleChange = useCallback(({from}) => {\n dispatch(setDate(from));\n }, []);\n\n return (\n <Datepicker\n range={false}\n from={date}\n to={date}\n scale=\"day\"\n hasClear={false}\n controlWidth={180}\n onUpdate={handleChange}\n />\n );\n}\n\nfunction Toolbar({className}) {\n const stat = useSelector(getStat);\n return (\n <div className={className}>\n <div className={odinCN('toolbar-metric-filter', tbBlock('component'))}>\n <MetricSelector />\n </div>\n <div className={odinCN('toolbar-date-filter', tbBlock('component'))}>\n <CustomDate />\n </div>\n <div className={odinCN('toolbar-current-date', tbBlock('component'))}>\n <UseCurrentDate />\n </div>\n <div className={odinCN('toolbar-availability-message', tbBlock('component'))}>\n <div className=\"elements-message elements-message_theme_info\">\n <p className=\"elements-message__paragraph\">\n We were available from <em>{hammer.format.Percent(stat.from * 100)}</em> to{' '}\n <em>{hammer.format.Percent(stat.to * 100)}</em> of time.\n </p>\n </div>\n </div>\n </div>\n );\n}\n\nexport default Toolbar;\n","import React, {useEffect, useRef, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport * as d3 from 'd3';\n\nimport {COLS_NUMBER, ROWS_NUMBER} from '../odin-constants';\nimport hammer from '../../../common/hammer';\n\nconst size = 19;\nconst pad = 4;\nconst margin = {top: 20, bottom: 20, left: 20, right: 20};\n\nconst width = COLS_NUMBER * size;\nconst height = ROWS_NUMBER * size;\n\nconst isAvailable = function (d) {\n return d.state === 'available';\n};\n\nconst isPartiallyAvailable = function (d) {\n return d.state === 'partially_available';\n};\n\nconst isUnavailable = function (d) {\n return d.state === 'unavailable' || d.state === 'timed_out' || d.state === 'unknown';\n};\n\nconst computeX = function (d, i) {\n return size * (i % COLS_NUMBER);\n};\nconst computeY = function (d, i) {\n return size * Math.floor(i / COLS_NUMBER);\n};\nconst getHours = function (d, i) {\n return Math.floor(i / COLS_NUMBER);\n};\nconst getMinutes = function (d, i) {\n return i % COLS_NUMBER;\n};\n\nfunction init(element) {\n const canvas = d3\n .select(element)\n .append('svg')\n .attr('width', width + margin.left + margin.right)\n .attr('height', height + margin.top + margin.bottom)\n .append('g')\n .attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n\n const rowLabels = canvas\n .selectAll('text.availability-row-label')\n .data(d3.range(0, ROWS_NUMBER))\n .enter()\n .append('text')\n .attr('class', 'availability-row-label')\n .attr('text-anchor', 'end')\n .attr('x', -pad)\n .attr('y', (d) => {\n return size * (1 + d) - pad;\n })\n .text((d) => {\n return d.toString();\n });\n\n const colLabels = canvas\n .selectAll('text.availability-col-label')\n .data(d3.range(0, COLS_NUMBER))\n .enter()\n .append('text')\n .attr('class', 'availability-col-label')\n .attr('text-anchor', 'middle')\n .attr('x', (d) => {\n return size * (0.5 + d);\n })\n .attr('y', -pad)\n .text((d) => {\n return d.toString();\n });\n\n const tooltip = d3\n .select(element)\n .append('div')\n .attr('class', 'd3-tooltip')\n .style('position', 'absolute')\n .style('z-index', '10')\n .style('opacity', 0);\n\n const items = canvas\n .selectAll('rect.availability')\n .data(d3.range(0, COLS_NUMBER * ROWS_NUMBER));\n\n items\n .enter()\n .append('rect')\n .classed('availability', true)\n .attr('width', size)\n .attr('height', size)\n .attr('x', computeX)\n .attr('y', computeY);\n\n return {\n canvas,\n rowLabels,\n colLabels,\n tooltip,\n };\n}\n\nfunction update(domData, data, showInfo) {\n const {canvas, rowLabels, colLabels, tooltip} = domData;\n\n const items = canvas.selectAll('rect.availability').data(data);\n items\n .classed('availability-high', isAvailable)\n .classed('availability-medium', isPartiallyAvailable)\n .classed('availability-low', isUnavailable)\n .on('click', function (e, d) {\n if (typeof showInfo === 'function') {\n const i = items.nodes().indexOf(this);\n showInfo(d, getHours(d, i), getMinutes(d, i));\n }\n })\n .on('mouseout', function () {\n tooltip.style('opacity', 0).style('pointer-events', 'none');\n })\n .on('mouseover', function (e, d) {\n const i = items.nodes().indexOf(this);\n items.classed('availability-mouseover', (p, j) => {\n return (\n Math.floor(i / COLS_NUMBER) === Math.floor(j / COLS_NUMBER) ||\n i % COLS_NUMBER === j % COLS_NUMBER\n );\n });\n\n rowLabels.classed('availability-mouseover', (p, j) => {\n return Math.floor(i / COLS_NUMBER) === j;\n });\n\n colLabels.classed('availability-mouseover', (p, j) => {\n return i % COLS_NUMBER === j;\n });\n\n const row = Math.floor(i / COLS_NUMBER);\n const col = i % COLS_NUMBER;\n const top = row * size + margin.top;\n const left = col * size + size / 2 + margin.left;\n tooltip\n .text(hammer.format.Readable(d.state, {caps: 'all'}))\n .style('opacity', 1)\n .style('pointer-events', 'all')\n .style('top', top + 'px')\n .style('left', left + 'px');\n });\n}\n\nfunction useInitMonitor(ref) {\n const [domData, setDomData] = useState(null);\n\n useEffect(() => {\n const domData = init(ref.current);\n setDomData(domData);\n }, []);\n\n return domData;\n}\n\nfunction useUpdateMonitor(domData, data, showInfo) {\n useEffect(() => {\n if (domData) {\n update(domData, data, showInfo);\n }\n }, [domData, data, showInfo]);\n}\n\nfunction AvailabilityMonitor({data, showInfo}) {\n const monitorRef = useRef();\n const domData = useInitMonitor(monitorRef);\n\n useUpdateMonitor(domData, data, showInfo);\n\n return <div className=\"odin__monitor\" ref={monitorRef} />;\n}\n\nAvailabilityMonitor.propTypes = {\n data: PropTypes.array.isRequired,\n showInfo: PropTypes.func,\n};\n\nexport default AvailabilityMonitor;\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport LoadDataHandler from '../../../components/LoadDataHandler/LoadDataHandler';\nimport AvailabilityMonitor from './AvailabilityMonitor';\n\nimport {getExtendedInfo, getMetricAvailability} from '../_selectors';\nimport {setShowInfo} from '../_actions';\n\nconst block = cn('odin-monitor');\n\nfunction Monitor() {\n const dispatch = useDispatch();\n const availability = useSelector(getMetricAvailability);\n const extendedInfo = useSelector(getExtendedInfo);\n const props = useSelector((state) => {\n const {loading, loaded, error, errorData} = state.odin;\n return {loading, loaded, error, errorData};\n });\n\n const handleShowInfo = useCallback((_, hours, minutes) => {\n dispatch(setShowInfo(hours, minutes));\n }, []);\n\n return (\n <LoadDataHandler {...props}>\n <AvailabilityMonitor data={availability} showInfo={handleShowInfo} />\n {extendedInfo && (\n <div className={block('item-info')}>\n <ul className=\"elements-heading_size_s elements-list_inline_yes elements-list_type_unstyled\">\n <li>\n Date: <span>{extendedInfo.date}</span>\n </li>\n <li>\n State: <span>{extendedInfo.state}</span>\n </li>\n </ul>\n <pre className=\"elements-code elements-code_theme_default\">\n {extendedInfo.message}\n </pre>\n </div>\n )}\n </LoadDataHandler>\n );\n}\n\nexport default Monitor;\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport find_ from 'lodash/find';\n\nimport PageHead from '../../components/PageHead/PageHead';\nimport {HeaderWithLinks} from '../../containers/ClustersMenu/HeaderLinks';\nimport {ALL_LINKS_ITEMS} from '../../containers/ClustersMenu/header-links-items';\n\nimport './RootPage.scss';\nimport UIFactory from '../../UIFactory';\n\nconst block = cn('yt-root-page');\n\ninterface Props {\n title?: string;\n children?: React.ReactNode;\n currentPathname?: string;\n}\n\nfunction RootPage({title, children, currentPathname}: Props) {\n const pathname = currentPathname || window.location.pathname;\n const item = React.useMemo(() => {\n if (title) {\n return {text: title};\n }\n\n return find_(ALL_LINKS_ITEMS, ({href}) => href?.startsWith(pathname));\n }, [title]);\n\n return (\n <React.Fragment>\n <PageHead title={item?.text || ''} />\n <HeaderWithLinks currentUrl={pathname} showTitle />\n <div className={block('content')}>\n <div className={'elements-main-section'}>{children}</div>\n </div>\n {UIFactory.renderAppFooter()}\n </React.Fragment>\n );\n}\n\nexport default React.memo(RootPage);\n","import React, {useEffect, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport {connect, useDispatch, useSelector} from 'react-redux';\nimport block from 'bem-cn-lite';\nimport {Redirect, Route, Switch, useRouteMatch} from 'react-router';\n\nimport Message from '../../../components/Message/Message';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport ClusterSelectControl from '../../../components/Dialog/controls/ClusterSelectControl/ClusterSelectControl';\nimport {setRootPagesCluster} from '../../../store/actions/global';\nimport {getCluster} from '../../../store/selectors/global';\nimport Tabs from '../../../components/Tabs/Tabs';\nimport {ODIN_PAGE_ID, OdinTab} from '../odin-constants';\nimport {makeTabProps} from '../../../utils';\nimport OdinOverview from './OdinOverview';\nimport Toolbar from './OdinToolbar';\nimport Monitor from './OdinMonitor';\n\nimport Utils from '../odin-utils';\nimport {useUpdater} from '../../../hooks/use-updater';\nimport {loadMetricAvailability, setOdinCluster} from '../_actions';\nimport {\n ODIN_CLUSTER_NAMES_ITEMS,\n getDate,\n getMetric,\n getOdinCluster,\n getUseCurrentDate,\n} from '../_selectors';\nimport {GENERIC_ERROR_MESSAGE} from '../../../constants/index';\n\nimport {setOdinLastVisitedTab} from '../_actions/odin-overview';\nimport {getOdinLastVisitedTab} from '../_selectors/odin-overview';\nimport {CreateNotificationButton} from '../../system/System/SystemTopRowContent';\nimport YT from '../../../config/yt-config';\nimport RootPage from '../../../containers/RootPage/RootPage';\nimport WithStickyToolbar from '../../../components/WithStickyToolbar/WithStickyToolbar';\n\nimport './Odin.scss';\nimport {UI_TAB_SIZE} from '../../../constants/global';\n\nconst odinCN = block('odin');\n\nfunction useLoadMetricAvailability(cluster) {\n const dispatch = useDispatch();\n const date = useSelector(getDate);\n const useCurrentDate = useSelector(getUseCurrentDate);\n const metric = useSelector(getMetric);\n\n const updateFn = React.useCallback(() => {\n dispatch(loadMetricAvailability({cluster, metric, date}));\n }, [dispatch, cluster, date, metric]);\n\n useUpdater(updateFn, {timeout: 60 * 1000, onlyOnce: !useCurrentDate});\n}\n\nfunction OdinDetails({cluster}) {\n const dispatch = useDispatch();\n React.useEffect(() => {\n dispatch(setOdinLastVisitedTab(OdinTab.DETAILS));\n }, []);\n useLoadMetricAvailability(cluster);\n\n return (\n <WithStickyToolbar\n toolbar={<Toolbar className={odinCN('toolbar')} />}\n content={<Monitor />}\n />\n );\n}\n\nfunction useCheckOdinStatus(cluster) {\n const [status, setStatus] = useState('');\n\n useEffect(() => {\n if (cluster) {\n Utils.checkStatus(cluster)\n .then((status) => {\n setStatus(status ? 'available' : 'unavailable');\n })\n .catch(() => {\n setStatus('error');\n });\n } else {\n setStatus('');\n }\n }, [cluster]);\n\n return status;\n}\n\nOdinTabs.propTypes = {\n cluster: PropTypes.string,\n};\n\nfunction OdinTabs({cluster}) {\n const match = useRouteMatch();\n const lastVisitedTab = useSelector(getOdinLastVisitedTab);\n\n const props = makeTabProps(match.url, OdinTab);\n\n return (\n <React.Fragment>\n <Tabs\n className={odinCN('tabs')}\n {...props}\n routed\n routedPreserveLocation\n size={UI_TAB_SIZE}\n />\n <Switch>\n <Route path={`${match.path}/details`}>\n <OdinDetails cluster={cluster} />\n </Route>\n <Route path={`${match.path}/overview`}>\n <OdinOverview cluster={cluster} />\n </Route>\n <Redirect from={match.path} to={`${match.path}/${lastVisitedTab}`} />\n </Switch>\n </React.Fragment>\n );\n}\n\nOdin.propTypes = {\n cluster: PropTypes.string,\n clusters: PropTypes.array,\n};\n\nfunction Odin({cluster, clusters}) {\n const status = useCheckOdinStatus(cluster);\n const dispatch = useDispatch();\n\n React.useLayoutEffect(() => {\n setTimeout(() => dispatch(setRootPagesCluster(cluster)), 1);\n return () => {\n dispatch(setRootPagesCluster(''));\n };\n }, [dispatch, cluster]);\n\n return (\n <ErrorBoundary>\n <div className={odinCN(null, 'elements-main-section')}>\n {clusters && (\n <div className={odinCN('cluster-toolbar')}>\n <ClusterSelectControl\n className={odinCN('cluster-picker')}\n value={cluster}\n onChange={(newValue) => dispatch(setOdinCluster(newValue))}\n placeholder={'Enter cluster name'}\n clusters={clusters}\n width=\"max\"\n />\n {cluster && (\n <CreateNotificationButton clusterConfig={YT.clusters[cluster]} />\n )}\n </div>\n )}\n {cluster && status === 'available' && <OdinTabs cluster={cluster} />}\n {cluster && status === 'unavailable' && (\n <Message\n theme=\"warning\"\n content={['Odin is not supported on this cluster.', GENERIC_ERROR_MESSAGE]}\n />\n )}\n {cluster && status === 'error' && (\n <Message\n theme=\"error\"\n content={['Odin could not be reached.', GENERIC_ERROR_MESSAGE]}\n />\n )}\n </div>\n </ErrorBoundary>\n );\n}\n\nIndependentOdinImpl.propTypes = {\n name: PropTypes.string,\n cluster: PropTypes.string,\n clusters: PropTypes.array,\n};\n\nfunction IndependentOdinImpl({clusters, cluster, name}) {\n const title = name ? `Odin - ${name}` : 'Odin';\n\n return (\n <RootPage title={title} currentPathname={`/${ODIN_PAGE_ID}`}>\n <div className={odinCN('landing')}>\n <Odin showClusterControl cluster={cluster} clusters={clusters} />\n </div>\n </RootPage>\n );\n}\n\nconst mapIndependentOdinStateToProps = (state) => {\n const cluster = getOdinCluster(state);\n const {name} = window.YT.clusters[cluster] || {name: cluster};\n return {\n name,\n cluster,\n clusters: ODIN_CLUSTER_NAMES_ITEMS,\n };\n};\n\nexport const IndependentOdin = connect(mapIndependentOdinStateToProps)(IndependentOdinImpl);\n\nfunction OdinWrapper() {\n const cluster = useSelector(getCluster);\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(setOdinCluster(cluster));\n }, []);\n\n return <Odin cluster={cluster} />;\n}\n\nexport default OdinWrapper;\n","import React from 'react';\n\nimport {RowWithName} from '../../../containers/AppNavigation/TopRowContent/SectionName';\nimport {CreateClusterNotificationButton} from '../../system/System/SystemTopRowContent';\n\nimport {ODIN_PAGE_ID} from '../odin-constants';\n\nfunction OdinTopRowContent() {\n return (\n <RowWithName page={ODIN_PAGE_ID} name={'Odin'}>\n <CreateClusterNotificationButton />\n </RowWithName>\n );\n}\n\nexport default React.memo(OdinTopRowContent);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {RowWithName} from '../../../containers/AppNavigation/TopRowContent/SectionName';\nimport {Page} from '../../../constants';\nimport Button from '../../../components/Button/Button';\n\nimport {getCurrentClusterConfig} from '../../../store/selectors/global';\nimport {useSelector} from 'react-redux';\nimport {ClusterConfig} from '../../../../shared/yt-types';\nimport UIFactory from '../../../UIFactory';\n\nimport './SystemTopRowContent.scss';\n\nconst block = cn('system-top-row-content');\n\nfunction SystemTopRowContent() {\n return (\n <RowWithName className={block()} page={Page.SYSTEM}>\n <CreateClusterNotificationButton />\n </RowWithName>\n );\n}\n\nexport function CreateClusterNotificationButton() {\n const clusterConfig = useSelector(getCurrentClusterConfig);\n return <CreateNotificationButton clusterConfig={clusterConfig} />;\n}\n\nexport function CreateNotificationButton({clusterConfig}: {clusterConfig: ClusterConfig}) {\n const url = UIFactory.createNotificationUrl(clusterConfig);\n if (!url) {\n return null;\n }\n\n return (\n <div className={block('create-notification')}>\n <Button view=\"action\" title=\"Create notification\" href={url} target={'_blank'}>\n Create notification\n </Button>\n </div>\n );\n}\n\nexport default React.memo(SystemTopRowContent);\n","const SvgChevronRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M5.47 13.03a.75.75 0 0 1 0-1.06L9.44 8 5.47 4.03a.75.75 0 0 1 1.06-1.06l4.5 4.5a.75.75 0 0 1 0 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronRight;"],"names":["block","cn","ClusterSelectControl","_ref","className","excludeClusters","onChange","value","placeholder","disabled","_ref$filterPredicate","filterPredicate","width","clusters","React","map_","filter_","YT","_ref2","name","id","text","items","length","toSkip","Set","_ref3","has","handleChange","_jsx","children","Select","empty","onUpdate","getDefaultValue","isEmpty","prepareRoleListValue","roles","otherMembers","arguments","undefined","current","toAdd","toRemove","unrecognized","forEach_","item","isUnrecognized","isRequested","isApproved","isDepriving","push","currentArr","map","prepareItemOfCurrent","otherArr","title","data","frozen","newItems","concat","itemClassName","role","extraProps","_objectSpread","roleListValueToSubjectList","_toConsumableArray","manyListDataItemToSubjectList","manyListDataItem","removed","_ref4","type","extractChangedSubjects","added","filter","_ref5","_ref6","user","group","_ref7","_ref8","DialogError","props","Block","makeErrorFields","errors","compact_","error","index","extras","FORM_ERROR","makeFormSubmitError","validationErrors","_defineProperty","importYTDFDialog","Component","YTDFDialog","withLazyLoading","_asyncToGenerator","_regeneratorRuntime","_callee","_context","prev","next","t0","sent","YTDialog","abrupt","stop","_React$useState","_React$useState2","_slicedToArray","mounted","setMounted","visible","_callee2","_context2","RoleListControl","EditableList","_callee3","_context3","TabFieldVertical","_callee4","_context4","toaster","Toaster","LoadDataHandler","_Component","_inherits","_super","_createSuper","_classCallCheck","apply","_createClass","key","_this$props","this","loaded","errorData","add","theme","autoHiding","content","message","hammer","format","NO_VALUE","actions","label","onClick","showErrorPopup","_this$props2","_this$props2$alwaysSh","alwaysShowError","Error","Message","_ref$theme","_ref$showClose","showClose","dismissCallback","buttons","_jsxs","Button","size","view","Icon","button","callback","datepickerDefaultProps","other","Page","CHAOS_CELL_BUNDLES","RowWithName","page","showSplitter","urlParams","cluster","useSelector","getCluster","info","getPagesInfoMapById","url","makeRoutedURL","Link","routed","RowWithNameMemo","SectionName","useRouteMatch","params","b","linksVisibilityState","visibilityByHref","requestedHrefs","reducer","state","action","href","HeaderLinks","currentUrl","showTitle","_React$useReducer","_React$useReducer2","_React$useReducer2$","dispatch","_React$useMemo","partition_","getVisible","_React$useMemo2","rest","toRequest","collected","Promise","all","wrapApiPromiseByToaster","toasterName","skipSuccessToast","errorContent","then","resolve","getItemVisibilityOrFalse","useLinkItems","ALL_LINKS_ITEMS","_React$useMemo3","_React$useMemo4","Boolean","link","DropdownMenu","popupProps","switcher","awesome","HeaderImpl","HeaderWithLinks","Updater","timeout","dynamicOptions","_this","options","inProgress","lastCallTime","timerId","onVisibilityChange","document","hidden","freeze","unfreeze","Date","now","repeat","_this$options","_this$callback","window","clearTimeout","getSkipNextCall","call","setTimeout","finish","Math","max","addEventListener","removeEventListener","DEFAULT_UPDATER_TIMEOUT","useUpdater","fn","_ref$timeout","destructFn","onlyOnce","forceAutoRefresh","useAutoRefresh","getUseAutoRefresh","optionsRef","skipNextCall","allowAutoRefresh","updater","_updater","destroy","useUpdaterWithMemoizedParams","_len","args","Array","_key","useMemoizedIfEqual","_len2","_key2","ref","isEqual_","xmlns","fill","viewBox","fillRule","d","clipRule","Object","assign","height","ArrowToggle","direction","qa","style","I","ChevronDown","NAMESPACE","withNaming","n","e","m","i18n","addComponentKeysets","en","buttonDisabledClassName","getAriaDescriptionForModeButton","mode","availableModes","nextModeIndex","indexOf","days","months","quarters","years","constrainValue","minValue","maxValue","isBefore","calendarLayouts","CalendarView","calendarProps","modeButtonProps","nextButtonProps","previousButtonProps","startDate","year","endDate","focusedDate","focusWithinProps","useFocusWithin","onFocusWithin","onFocus","onBlurWithin","onBlur","join","modeIndex","isModeLast","isNextModeLast","modeDisabled","zoomOut","setFocused","previousFocused","previousDisabled","isPreviousPageInvalid","focusPreviousPage","nextFocused","nextDisabled","isNextPageInvalid","focusNextPage","useCalendarProps","focus","ChevronLeft","ChevronRight","CalendarGrid","prevState","setPrevState","isFocused","modeChanged","startDateChanged","isSame","animation","gridProps","onFocusWithinChange","readOnly","onKeyDown","preventDefault","focusNextCell","focusPreviousCell","focusNextRow","focusPreviousRow","shiftKey","focusSectionEnd","focusSectionStart","code","zoomIn","selectDate","useCalendarGridProps","Content","onAnimationEnd","Weekdays","CalendarGridCells","weekdays","weekDays","weekStart","startOf","i","date","getWeekDays","weekend","isWeekend","day","rowsInPeriod","columnsInRow","_endDate","currentDate","getDaysInPeriod","keys","rowIndex","slice","CalendarCell","unix","cellProps","buttonProps","formattedDate","isDisabled","isSelected","isRangeSelection","isSelectionStart","isSelectionEnd","isOutsideCurrentRange","isUnavailable","isCurrent","isCellFocused","_a","preventScroll","tabIndex","isCellDisabled","highlightedRange","start","end","isCellUnavailable","isSelectable","getDateLabel","setFocusedDate","onPointerEnter","newDate","endOf","highlightDate","useCalendarCellProps","selected","unavailable","createPlaceholderValue","placeholderValue","timeZone","set","mergeDateTime","time","hour","minute","second","useDefaultTimeZone","defaultTimeZone","lastValue","setLastValue","defaultModes","getStartDate","floor","getEndDate","_b","_c","modes","setValue","useControlledState","defaultValue","l","minMode","setMode","defaultMode","onUpdateMode","currentMode","includes","inputTimeZone","focusedValue","defaultFocusedValue","focusedDateInner","onFocusUpdate","focusCell","autoFocus","newValue","force","subtract","larger","nextMode","selectFocusedDate","isInvalid","isDateUnavailable","useCalendarState","HiddenInput","onReset","form","toStringValue","initialValue","formElement","setFormElement","resetValue","handleReset","node","useFormResetHandler","v","EDITABLE_SEGMENTS","month","dayPeriod","weekday","escapedCharacters","formatTokenMap","YY","YYYY","M","MM","MMM","sectionType","contentType","MMMM","D","DD","Do","dd","ddd","dddd","A","a","H","HH","h","hh","mm","s","ss","z","zzz","Z","ZZ","isFourDigitYearFormat","getSectionValue","section","Number","TYPE_MAPPING","getDurationUnitFromSectionType","getSectionPlaceholder","sectionConfig","currentTokenValue","splitFormatIntoSections","sections","expandedFormat","isSeparator","isInEscapeBoundary","char","match","addLiteralSection","addFormatSection","token","formatToken","config","console","getDateSectionConfigFromFormatToken","hasLeadingZeros","doesSectionHaveLeadingZeros","getSectionOptions","toLocaleUpperCase","amDayPeriod","pmDayPeriod","getEditableSections","validSegments","position","newSections","previousEditableSection","newSection","toEditableSection","isEditableSection","j","prevSection","nextEditableSection","textValue","isEditable","renderedValue","padStart","sectionLength","modified","isFourDigit","daysInMonth","isHour12","isPM","getSectionLimits","getCurrentEditableSectionIndex","selectedSections","currentIndex","parseDate","isAllSegmentsValid","allSegments","every","useDateFieldProps","inputRef","setInnerState","setSelectedSections","syncSelectionFromDOM","focusSectionInPosition","selectionStart","inputElement","selectedSectionIndexes","scrollLeft","firstSelectedSection","startIndex","lastSelectedSection","endIndex","selectionEnd","setSelectionRange","inputMode","activeSection","inputProps","hasClear","startContent","endContent","pin","controlRef","autoComplete","validationState","errorMessage","errorPlacement","clearAll","input","target","isAutofocus","focusPreviousSection","focusNextSection","decrementToMin","incrementToMax","altKey","incrementPage","decrementPage","clearSection","decrement","increment","onKeyUp","controlProps","onMouseUp","onBeforeInput","onInput","onPaste","pastedValue","clipboardData","getData","replace","digitsOnly","test","lettersOnly","setValueFromString","PAGE_STEP","useDateFieldState","setDate","handleUpdateDate","placeholderDate","setPlaceholderDate","usedFormat","setSections","previousFormat","setFormat","useFormatSections","seg","reduce","p","validSegmentsState","setValidSegments","displayValue","sectionsState","setState","editableSections","useSectionsState","selectedSectionIndex","findIndex","markValid","part","flushAllValidSections","flushValidSection","adjustSection","setSection","setSectionValue","createPlaceholder","enteredKeys","hasDate","hasTime","hasDateInner","hasTimeInner","nextSectionIndex","nextSection","newIndex","focusFirstSection","focusLastSection","sectionIndex","displayPortion","currentValue","shouldBePM","onInputNumber","numberValue","sectionValue","allowsZero","shouldSetValue","String","onInputString","stringValue","foundOptions","startsWith","foundValue","isInteger","str","useBaseDateFieldState","amount","val","min","addSegment","hours","wasPM","sectionAmount","setSegment","_sectionIndex","isDateStringWithTimeZone","parseDateFromString","DateField","isActive","setActive","isFocusWithin","TextInput","toISOString","MobileCalendar","formatNative","dateFieldState","localDate","getDateFormat","StubButton","icon","getButtonSizeForInput","mergeProps","result","left","right","charCodeAt","chain","fns","getDateTimeValue","useDatePickerState","getPlaceholderTime","setTimezone","getDateTime","isOpen","setOpen","selectedDateInner","setSelectedDate","selectedTimeInner","setSelectedTime","selectedDate","selectedTime","commitValue","timeFormat","some","dateValue","timeValue","setDateValue","shouldClose","setTimeValue","newTime","newIsOpen","datePickerStateFactory","DatePicker","anchorRef","groupProps","fieldProps","calendarButtonProps","timeInputProps","handleRef","useForkRef","calendarRef","calendarButtonRef","groupRef","focusInput","onlyTime","stopPropagation","open","onEscapeKeyDown","onOutsideClick","contains","focusTrap","useDatePickerProps","isMobile","useMobile","isOnlyTime","Popup","mobile","absolute","relative","base","_window","location","pathname","stack","split","parts","pop","names","ODIN","createNestedNS","NAMESPACES","GLOBAL","ODIN_VISIBLE_METRIC_PRESETS","ODIN_LAST_VISITED_TAB","YA_NAMESPACES","getMetric","odin","details","metric","getUseCurrentDate","useCurrentDate","getMetricAvailability","metricAvailability","getDate","getStat","createSelector","availability","Utils","computeStat","getExtendedInfo","minutes","COLS_NUMBER","moment","getOdinCluster","odinCluster","ODIN_CLUSTER_NAMES_ITEMS","sort","getSettingOdinOverviewVisiblePresets","makeGetSetting","getSetting","getOdinOverviewTimeFromFilter","overview","timeFromFilter","getOdinOverviewTimeFrom","timeFrom","getOdinOverviewTimeTo","timeTo","getOdinOverviewLoading","loading","getOdinOverviewData","getOdinOverviewDataCluster","dataCluster","getOdinOverviewShowCreatePresetDialog","showCreatePresetDialog","getOdinOverviewPresetToRemove","presetToRemove","getOdinOverviewVisiblePresets","res","getOdinOverviewDefaultPreset","presets","find","isDefault","getOdinOverviewHiddenMetrics","hiddenMetrics","useDefaultPreset","defaultPreset","hiddenMetricNames","acc","getOdinOverviewClusterMetrics","clusterMetrics","sorted","sortBy_","_partition_","_partition_2","getOdinLastVisitedTab","OdinTab","OVERVIEW","getClusterHelper","gs","COUNT_OF_MINUTES","ODIN_OVERVIEW_TIME_RANGE","cancelMetrics","cancel","setOdinOverviewFromTimeFilter","ODIN_OVERVIEW_PARTIAL","fetchMetricData","from","to","getState","c","metricData","prepareAvailabilityData","isRequestCanceled","reloadOdinOverviewMetricData","metricName","odinOverviewSetAllMetricsVisible","oldHhiddenMetrics","toReload","__","forEach","ODIN_OVERVIEW_HIDDEN_METRICS","odinOverviewShowCreatePresetDialog","odinOverviewSetPresetToRemove","odinOverviewRemovePreset","reloadSetting","setSetting","_error$response2","response","odinOverviewToggleDefaultPreset","_error$response3","setOdinLastVisitedTab","tab","requests","CancelHelper","setMetric","SET_METRIC","loadMetricAvailability","GET_METRIC_DATA","REQUEST","removeAllRequests","getMetricOfThisDay","saveCancelToken","ROWS_NUMBER","SUCCESS","CANCELLED","FAILURE","setOdinCluster","ODIN_DATA_FIELDS","OdinOverviewCreatePresetDialog","useDispatch","closeDialog","validateName","headerProps","onAdd","_form$getState$values","values","toHide","_","_error$response","odinOverviewAddPreset","onClose","initialValues","asDefault","fields","caption","required","validator","DATE_FORMAT","TIME_FORMAT","D_O_Y_FORMAT","OdinOverviewWithPreset","OdinOverviewPresets","OdinOverview","OdinOverviewPresetItem","preset","oldHiddenMetrics","odinOverviewSelectPreset","ClickableText","color","face","OdinOverviewRemoveConfirmationDialog","handleClose","handleAdd","pristineSubmittable","footerProps","textApply","updateFn","timeFilter","_item$cancel","oldCluster","ODIN_OVERVIEW_REQUEST","listMetrics","ODIN_OVERVIEW_SUCCESS","ODIN_OVERVIEW_CANCELLED","ODIN_OVERVIEW_FAILED","fetchOdinOverview","reloadOdinOverview","useOdinOverviewDataLoader","fromFilter","hiddenMap","tooltipData","setTooltip","_React$useState3","_React$useState4","dialogData","setDialogData","onTooltip","el","_el$getBoundingClient","getBoundingClientRect","offsetWidth","offsetHeight","metricDataIndex","anchor","formatByDates","ErrorBoundary","WithStickyToolbar","toolbar","UIKitIcon","chevronLeftSvg","dateTime","valueOf","nextFilter","chevronRightSvg","Loader","_Fragment","OverviewRow","OdinOverviewTooltip","OdinOverviewDetailsDialog","dateByIndex","placement","Readable","status","Dialog","Header","Divider","Body","OverviewRowImpl","handleTooltip","display_name","handleClick","handleNameClick","handleHide","OverviewRowData","handle","tooltip","click","routedPreserveLocation","OverviewRowError","OverviewRowDataGraph","div","selDiv","d3","selectAll","enter","append","attr","svg","select","_getBoundingClientRec","itemW","ODIN_CELL_SIZE","offsetX","rects","exit","remove","selection","merge","on","_event","nodes","renderData","useDataRenderer","odinCN","tbBlock","MetricSelector","metrics","_useState","useState","_useState2","setMetrics","useEffect","useLoadMetricsList","useCallback","findIndex_","vals","showSearch","UseCurrentDate","TOGGLE_USE_CURRENT_DATE","Checkbox","checked","CustomDate","SET_DATE","Datepicker","range","scale","controlWidth","stat","Percent","margin","isAvailable","isPartiallyAvailable","computeX","computeY","useUpdateMonitor","domData","showInfo","canvas","rowLabels","colLabels","classed","getHours","getMinutes","row","col","top","caps","update","setDomData","monitorRef","useRef","element","toString","extendedInfo","_state$odin","handleShowInfo","SET_HOURS_MINUTES","setShowInfo","AvailabilityMonitor","RootPage","currentPathname","find_","PageHead","UIFactory","renderAppFooter","OdinDetails","DETAILS","useLoadMetricAvailability","Toolbar","Monitor","OdinTabs","lastVisitedTab","makeTabProps","Tabs","UI_TAB_SIZE","Switch","Route","path","Redirect","Odin","setStatus","checkStatus","useCheckOdinStatus","setRootPagesCluster","CreateNotificationButton","clusterConfig","GENERIC_ERROR_MESSAGE","IndependentOdin","connect","ODIN_PAGE_ID","showClusterControl","OdinTopRowContent","CreateClusterNotificationButton","SystemTopRowContent","SYSTEM","getCurrentClusterConfig","createNotificationUrl"],"sourceRoot":""}