mirror of
https://github.com/bakhirev/assayo.git
synced 2026-10-19 07:14:06 +00:00
13262 lines
No EOL
1.7 MiB
13262 lines
No EOL
1.7 MiB
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, user-scalable=no, maximum-scale=1.0">
|
||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||
<meta http-equiv="Cache-Control" content="no-cache">
|
||
<meta http-equiv="cleartype" content="on">
|
||
<meta name="HandheldFriendly" content="True">
|
||
<meta name="format-detection" content="telephone=no">
|
||
<meta name="format-detection" content="address=no">
|
||
<meta name="mobile-web-app-capable" content="yes">
|
||
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
||
<meta name="theme-color" content="white"/>
|
||
|
||
<meta name="defaultLanguage" content="ru">
|
||
<meta name="availableLanguages" content="en, es, fr, ja, pt, de, zh, ru">
|
||
<link rel="canonical" href="https://bakhirev.github.io/demo/">
|
||
|
||
<script type="text/javascript">
|
||
var report = [];
|
||
var f = String.raw.bind(String);
|
||
function r(t) {
|
||
report.push(t);
|
||
}
|
||
function R(t) {
|
||
report = report.concat(t.split("\n"));
|
||
}
|
||
</script>
|
||
<link rel="icon" href="./assets/logo/small.svg" />
|
||
<link rel="apple-touch-icon" href="./assets/logo/big.svg" />
|
||
|
||
<title>Assayo</title><script src='./log.txt'></script><script src='./log-1.txt'></script><script src='./log-2.txt'></script><script src='./log-3.txt'></script><script src='./log-4.txt'></script><script src='./log-5.txt'></script><script src='./log-6.txt'></script><script src='../log.txt'></script><script src='../log-1.txt'></script><script src='../log-2.txt'></script><script src='../log-3.txt'></script><script src='../log-4.txt'></script><script src='../log-5.txt'></script><script src='../log-6.txt'></script><script src='../../log.txt'></script><script src='../../log-1.txt'></script><script src='../../log-2.txt'></script><script src='../../log-3.txt'></script><script src='../../log-4.txt'></script><script src='../../log-5.txt'></script><script src='../../log-6.txt'></script><script src='/log.txt'></script><script src='/log-1.txt'></script><script src='/log-2.txt'></script><script src='/log-3.txt'></script><script src='/log-4.txt'></script><script src='/log-5.txt'></script><script src='/log-6.txt'></script>
|
||
<meta name="description" content="Simple and fast report on git commit history.">
|
||
<meta name="keywords" content="git, statistics, audit, history, log, monitoring, employee control">
|
||
<meta name="author" content="Bakhirev Aleksei">
|
||
<meta name="copyright" content="(c) Bakhirev Aleksei">
|
||
<meta http-equiv="Reply-to" content="alexey-bakhirev@yandex.ru">
|
||
|
||
<meta name="application-name" content="Git statistics">
|
||
<meta name="msapplication-tooltip" content="Simple and fast report on Git commit history.">
|
||
|
||
<meta property="og:title" content="Git Statistics">
|
||
<meta property="og:description" content="Simple and fast report on Git commit history.">
|
||
<meta property="og:image" content="https://bakhirev.github.io/assets/icons/big.svg">
|
||
<meta property="og:site_name" content="Assayo">
|
||
<meta property="og:url" content="https://bakhirev.github.io/">
|
||
|
||
<meta name="twitter:card" content="summary">
|
||
<meta name="twitter:title" content="Git Statistics">
|
||
<meta name="twitter:description" content="Simple and fast report on Git commit history.">
|
||
<meta name="twitter:creator" content="Bakhirev Aleksei">
|
||
<meta name="twitter:image:src" content="https://bakhirev.github.io/assets/icons/big.svg">
|
||
<meta name="twitter:domain" content="bakhirev.github.io">
|
||
<meta name="twitter:site" content="bakhirev.github.io">
|
||
|
||
<meta itemprop="name" content="Git Statistics">
|
||
<meta itemprop="description" content="Simple and fast report on Git commit history.">
|
||
<meta itemprop="image" content="https://bakhirev.github.io/assets/icons/big.svg">
|
||
|
||
|
||
</head>
|
||
<body>
|
||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||
<div id="root"></div>
|
||
</body>
|
||
</html>
|
||
<style>@charset "UTF-8";.banner{border-left-width:1px;border-left-color:var(--color-border);font-weight:100;width:100%;height:100%;padding:0;letter-spacing:1px;white-space:nowrap;overflow:hidden;text-align:center;text-overflow:ellipsis;text-decoration:none;border-radius:var(--border-radius-s);color:var(--color-white);background-color:#a7b6fe;background-repeat:no-repeat;background-size:180% auto;background-position:center center}.banner_icon{display:inline-block;width:40px;margin:0 var(--space-xs) 0 0;vertical-align:middle}.component_translation_input{font-size:var(--font-s);height:14px;width:100%;line-height:16px;text-align:left;vertical-align:middle;border:none;resize:none;background-color:var(--color-21)}.card_with_icon{position:relative;display:inline-flex;flex-direction:column;width:calc(50% - 12px);min-height:270px;margin:0 var(--space-xxl) var(--space-xxl) 0;padding:var(--space-l);vertical-align:top;text-decoration:none;box-sizing:border-box;text-align:center;border-radius:var(--border-radius-m);border:1px solid var(--color-border);background-color:var(--color-white);background-repeat:repeat;background-size:auto 100%;background-position:center center}.card_with_icon_icon{display:block;width:auto;height:90px;max-width:90%;margin:10px auto 18px;-webkit-user-select:none;user-select:none;box-sizing:border-box;vertical-align:top}.card_with_icon_value{font-weight:700;font-size:28px;display:block;flex:0 0 auto;margin:0 0 var(--space-xxs) 0;padding:0;text-align:center;white-space:nowrap;color:var(--color-11)}.card_with_icon_title,.card_with_icon_description,.card_with_icon_scoring{font-weight:100;display:block;margin:0 auto;padding:0;line-height:1.3;text-align:center;text-decoration:none;color:var(--color-black)}.card_with_icon_title{font-size:var(--font-m);font-weight:500;line-height:14px;margin:0 0 var(--space-xxs) 0}.card_with_icon_description,.card_with_icon_scoring{font-size:var(--font-xs);line-height:16px;color:var(--color-black)}.card_with_icon_description{flex:1 1 auto;border-top:1px solid var(--color-border);padding-top:var(--space-s);margin-top:var(--space-m)}.card_with_icon_scoring{display:inline-block;min-width:80px;max-width:80%;padding:var(--space-xxxs) var(--space-xs);margin:0 auto;white-space:nowrap;border-radius:var(--border-radius-s);border:1px solid var(--color-border);background-color:var(--color-white)}.card_with_icon_scoring_wrapper{position:absolute;bottom:-11px;left:0;right:0;text-align:center}.card_with_icon_small{min-height:auto;padding:var(--space-l) 0}.card_with_icon_long{width:100%;margin:0 0 var(--space-xxl) 0}.card_with_icon_banner{font-size:32px;padding:0;line-height:270px}.card_with_icon_small .card_with_icon_icon,.card_with_icon_small .card_with_icon_description{display:none}.card_with_icon_small .card_with_icon_value{font-size:var(--font-m);font-weight:100;margin-bottom:var(--space-m);color:var(--color-button-2)}.card_with_icon:nth-child(2n+2){margin-right:0}@media(min-width:900px)and (max-width:1400px){.card_with_icon{min-height:290px}}@media(max-width:900px){.card_with_icon{min-height:220px;padding:var(--space-l) 0}.card_with_icon_title{margin:0}}@media(max-width:650px){.card_with_icon{min-height:190px;padding:32px 0}.card_with_icon_value{font-size:22px}.card_with_icon_title{font-size:var(--font-s)}.card_with_icon_icon{height:auto;max-width:80%;max-height:90px}}@media print{.card_with_icon{min-height:220px;padding:var(--space-l) 0}.card_with_icon_icon{height:60px}.card_with_icon_value{font-size:22px;margin:0}.card_with_icon_title{font-size:var(--font-s);margin:0 0 var(--space-s) 0}.card_with_icon_description{display:block}}.card_with_icon_small{position:relative;display:inline-flex;flex-direction:column;min-height:123px}.card_with_icon_small2{display:flex;justify-content:center;align-items:center;flex-direction:column;width:100%;height:100%}.card_with_icon_small{width:calc(50% - 12px);margin:0 var(--space-xxl) var(--space-xxl) 0;padding:0;vertical-align:top;text-decoration:none;box-sizing:border-box;text-align:center;border-radius:var(--border-radius-m);border:1px solid var(--color-border);background-color:var(--color-white);background-position:center center;background-repeat:no-repeat;background-size:100% 100%}.card_with_icon_small:nth-child(2n+2){margin-right:0}.card_with_icon_small_icon{height:50px;margin:0 auto 8px;vertical-align:top;-webkit-user-select:none;user-select:none}.card_with_icon_small_value,.card_with_icon_small_title{font-weight:100;display:block;margin:0;padding:0;line-height:1.3;text-align:center;text-decoration:none;background-color:#ffffffe6}.card_with_icon_small_value{font-size:var(--font-l);max-width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-shadow:0 -5px 15px #fff;color:var(--color-button-2)}.card_with_icon_small_title{font-size:var(--font-s);color:var(--color-black);box-shadow:0 5px 15px #fff}@media(min-width:900px)and (max-width:1400px){.card_with_icon_small{min-height:133px}}.ui_kit_button{--temp-size: 42px;--button-color-bg: var(--color-button);--button-color-text: var(--color-white);--button-color-border: var(--color-button);--button-color-hover: var(--color-button-2);--button-color-active: var(--color-button-3)}.ui_kit_button_slim,.ui_kit_button_second{--button-color-bg: var(--color-white);--button-color-text: var(--color-black);--button-color-border: var(--color-border);--button-color-hover: var(--color-border);--button-color-active: var(--color-border)}.ui_kit_button_border{--button-color-bg: transparent;--button-color-text: var(--color-button);--button-color-hover: var(--color-border);--button-color-active: var(--color-border)}.ui_kit_button_link{--button-color-bg: transparent;--button-color-text: var(--color-button);--button-color-border: transparent;--button-color-hover: transparent;--button-color-active: transparent}.ui_kit_button{font-weight:700;font-size:13px;display:inline-block;height:var(--temp-size);min-width:var(--temp-size);padding:0 var(--space-l);margin:0;cursor:pointer;line-height:var(--temp-size);text-align:center;box-sizing:border-box;white-space:nowrap;vertical-align:top;border:1px solid var(--button-color-border);border-radius:var(--border-radius-s);color:var(--button-color-text);background-color:var(--button-color-bg)}.ui_kit_button:hover{background-color:var(--button-color-hover)}.ui_kit_button:active{background-color:var(--button-color-active)}.ui_kit_button.disabled{pointer-events:none;opacity:.5}.ui_kit_button_slim{font-weight:100}.ui_kit_button_border{line-height:38px;border-width:3px}.ui_kit_button_link{font-weight:100;height:auto;min-height:auto;padding:0;line-height:1.3;text-decoration:underline}.ui_kit_button_link:hover{text-decoration:none}.ui_kit_button_full_size{display:block;width:99%;margin:12px auto}.ui_kit_button_full_size:first-child{margin-top:24px}.ui_kit_button_full_size:last-child{margin-bottom:24px}.ui_kit_button+.ui_kit_button{margin-left:24px}.ui_kit_button_full_size+.ui_kit_button_full_size{margin-left:auto}.ui_kit_button_menu{--temp-size: 42px;--button-color-bg: var(--color-white);--button-color-text: var(--color-black);--button-color-border: var(--color-border);--button-color-hover: var(--color-border);font-weight:700;font-size:var(--font-xs);display:block;height:var(--temp-size);width:100%;padding:0 var(--space-s);margin:0;cursor:pointer;line-height:var(--temp-size);text-align:left;box-sizing:border-box;white-space:nowrap;vertical-align:top;border:none;border-bottom:1px solid var(--button-color-border);border-radius:0;color:var(--button-color-text);background-color:var(--button-color-bg)}.ui_kit_button_menu:hover{background-color:var(--button-color-hover)}@media print{.ui_kit_button{display:none}}.console{position:relative;display:block;width:100%;margin:0 auto;box-sizing:border-box}.console_header,.console_body{font-size:var(--font-s);font-weight:100;display:block;width:100%;margin:0 auto;box-sizing:border-box;line-height:1.3;text-align:left}.console_header{display:block;height:32px;padding:0 8px;line-height:20px;color:#8f8f8f;white-space:nowrap;text-align:left;border:1px solid #D4D4D4;border-bottom:none;cursor:default;background-color:#f2f2f2;border-radius:4px 4px 0 0}.console_header_icon{display:inline-block;width:16px;height:16px;margin:8px 8px 0 0;box-sizing:border-box;border-radius:8px;border:1px solid #B5B5B5;background:linear-gradient(90deg,#d7d8db,#b5b5b5)}.console_body{min-height:250px;max-height:450px;padding:8px 16px 16px;line-height:1.3;color:#00b200;white-space:normal;background-color:#0c0c0c;border-radius:0 0 4px 4px}.console_copy{position:absolute;bottom:16px;right:16px}.console_copy:hover{bottom:15px;right:15px}@media(max-width:800px){.console{width:90%;margin:0 auto}.console_body{height:200px}}@media print{.console_header{display:none}.console_body{width:100%;height:unset;min-height:unset;max-height:unset;padding:0;color:var(--color-black);background-color:unset}}.table_wrapper{display:block}.table{display:block;width:fit-content;break-inside:auto;--table-cell-height: 48px;--table-bar-width: 350px}.table_tree{--table-cell-height: 22px;--table-bar-width: 200px}.table_row{position:relative;font-weight:400;display:block;white-space:nowrap;border-bottom:1px solid #EEEEEE;break-inside:avoid}.table_row:last-child{border-bottom:none}.table_row_hide{opacity:.2}.table_row_selected{overflow:hidden;border-bottom:none;border-radius:var(--border-radius-m);background-color:#fffaf0}.table_sub_row{position:relative;font-weight:100;display:block;padding:0 var(--space-m) var(--space-xxl) 18px;margin-left:18px;white-space:nowrap;break-inside:auto;border-left:5px solid var(--color-first);border-radius:0;background-color:#f6f8fd}.table_cell,.table_header_cell{font-size:var(--font-xs);z-index:0;display:inline-block;height:var(--table-cell-height);line-height:var(--table-cell-height);box-sizing:border-box;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:top}.table_fixed{position:sticky;top:0;left:0;z-index:1;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.table_cell{padding:0 4px}.table_header_cell{font-weight:700;height:var(--table-cell-height);padding:0 4px;line-height:var(--table-cell-height)}.table_cell_number{text-align:right}.table_cell_icon_open,.table_cell_icon_close{display:inline-block;width:32px;height:32px;margin-top:8px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:transform .5s;transform:rotate(-90deg)}.table_cell_icon_open{transform:rotate(0)}.disabled{opacity:.4;filter:grayscale(.6)}@media print{.table_cell:first-child{background-color:transparent}}.table_sort_up,.table_sort_down{display:inline-block;height:0;width:0;margin:0 0 -5px 8px;cursor:pointer;transform:rotate(-45deg);border:6px solid var(--color-grey);border-left-color:var(--color-white);border-bottom-color:var(--color-white)}.table_sort_down{margin:0 0 3px 8px;transform:rotate(135deg)}.ui_kit_tags{display:inline;white-space:normal}.ui_kit_tags_item{display:inline-block;padding:var(--space-xxxs) var(--space-xs);margin:0 0 var(--space-xs) 0;font-size:var(--font-s);font-weight:100;text-align:center;text-decoration:none;box-sizing:border-box;line-height:1.3;white-space:nowrap;text-overflow:ellipsis;border-radius:var(--border-radius-s);border:1px solid var(--color-border);background-color:var(--color-border);color:var(--color-black)}.ui_kit_tags_item_empty{background-color:transparent}.ui_kit_tags_item_error{border-color:var(--color-alert-bg);background-color:var(--color-alert-bg)}.ui_kit_tags_item_warning{border-color:var(--color-warning-bg);background-color:var(--color-warning-bg)}.ui_kit_tags_item_success{border-color:var(--color-success-bg);background-color:var(--color-success-bg)}.ui_kit_tags_item+.ui_kit_tags_item{margin-left:var(--space-xs)}.card{position:relative;display:inline-block;width:100%;padding:var(--space-xxl) var(--space-s) var(--space-s);margin:0 var(--space-xxl) var(--space-xxl) 0;page-break-inside:avoid;box-sizing:border-box;vertical-align:top;border-radius:var(--border-radius-m);border:1px solid var(--color-border);background-color:var(--color-white)}.card_wrapper{width:calc(100% + 24px);margin:0}.card_title{position:absolute;top:-13px;left:20%;right:20%;font-size:var(--font-m);font-weight:700;display:inline-block;padding:var(--space-xxs) var(--space-s);margin:0 0 var(--space-l);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:center;border-radius:var(--border-radius-s);border:1px solid var(--color-border);background-color:var(--color-white)}.card_line{display:flex;justify-content:space-between;align-items:center;padding:var(--space-xxs) var(--space-xxs) var(--space-xxxs);white-space:nowrap;box-sizing:border-box;border:none}.card_line_title,.card_line_value{font-size:var(--font-s);position:relative;display:inline-block;width:max-content;line-height:1.3;white-space:normal;text-overflow:ellipsis;vertical-align:top;box-sizing:border-box;text-align:left;color:var(--color-42)}.card_line_value{text-align:right}.card_line_with_template{display:block;text-align:center;margin-top:var(--space-xxs);border-top:2px dotted var(--color-border)}.card_line_with_template_title{font-size:var(--font-s);display:block;padding:var(--space-xxs) var(--space-xxs) var(--space-xxs);line-height:1.3;white-space:normal;text-overflow:ellipsis;vertical-align:top;box-sizing:border-box;color:var(--color-42)}.card_line+.card_line{border-top:1px solid var(--color-border)}.card_line_with_template>.line_chart{margin-top:0}.main_wrapper{display:block;width:100%;text-align:left;box-sizing:border-box;white-space:nowrap;break-inside:auto}.main_wrapper_white{position:relative;display:inline-block;padding:24px;margin-bottom:24px;width:100%;white-space:normal;box-sizing:border-box;vertical-align:top;break-inside:auto;border-radius:8px;border:1px solid var(--color-border);background-color:var(--color-white)}@media screen and (max-width:1200px){.main_wrapper_white{display:block}}@media print{.main_wrapper_white{padding:0;border-radius:0;border:none}}.data_view_buttons{position:absolute;top:-48px;right:24px;text-align:right}.data_view_icon{display:inline-block;width:var(--space-xxl);height:var(--space-xxl);padding:0;margin-left:var(--space-l);cursor:pointer;-webkit-user-select:none;user-select:none}@media print{.data_view_buttons{display:none}}.day_info_wrapper{column-count:2}.day_info_author,.day_info_date,.day_info_message{font-weight:100;padding:0;box-sizing:border-box;background-color:transparent;border:none;white-space:normal;text-overflow:ellipsis;text-decoration:none;color:var(--color-black)}.day_info_author{font-size:var(--font-m);display:block;margin:0 0 var(--space-l) 0;line-height:var(--font-m)}.day_info_link{display:block;padding:0 0 0 var(--space-l);margin:0 0 var(--space-s) 0}.day_info_date,.day_info_message{font-size:var(--font-xs);display:inline-block;margin:0 0 var(--space-xs) 0;line-height:var(--font-m);vertical-align:top;color:var(--color-42)}.day_info_date{margin-right:var(--space-l)}.day_info_message{width:calc(100% - 44px)}.day_info_row{display:block;padding:0 0 0 32px;white-space:nowrap}.day_info_row:last-child{margin-bottom:var(--space-s)}@media(max-width:1000px){.day_info_wrapper{column-count:1}}.description{white-space:normal}.description_title,.description_text,.description_list{font-size:var(--font-xs);font-family:Arial,Verdana,sans-serif;display:block;padding:0;margin:0 auto;text-align:left;line-height:var(--font-m);text-decoration:none;vertical-align:bottom;white-space:normal;color:var(--color-black)}.description_title{font-weight:700;margin:0 auto 4px}.description_text{margin-bottom:4px}.description_link{text-decoration:underline;color:var(--color-button)}.description_link:hover{text-decoration:none}.description_link:visited{color:var(--color-button)}.description_list{position:relative;padding:0 0 0 22px;margin:0;list-style-type:none}.description_list:before{position:absolute;top:0;left:0;display:block;content:"—";margin-right:8px}.description_text+.description_text{margin-top:8px}.description_list+.description_title{margin-top:4px}.external_link{font-size:var(--font-s);font-weight:100;display:inline-block;padding:0;margin:0 var(--space-s) 0 0;box-sizing:border-box;background-color:transparent;border:none;white-space:normal;text-overflow:ellipsis;line-height:var(--font-s);cursor:pointer;text-decoration:underline;color:var(--color-first)}.external_link:hover{text-decoration:none}.logo{display:inline-block;padding:0;margin:0 auto;text-align:center;box-sizing:border-box;border:none}.logo_link{display:block;text-decoration:none}.logo_icon{display:block;width:100%;min-width:30px;min-height:30px;margin:0 auto;text-decoration:none}.logo_text{font-size:var(--font-xs);font-weight:100;display:block;margin:var(--space-xs) auto 0;line-height:1.3;text-align:center;text-decoration:none;cursor:pointer;color:#4e5463}.logo_text:hover{color:var(--color-grey);text-decoration:underline}.nothing_found{display:block;margin:0 auto;padding:24px 0;max-width:80%}.nothing_found_wrapper{display:flex;justify-content:center;align-items:center;width:100%}.nothing_found_icon{display:block;width:200px;height:100px;margin:0 auto 24px}.nothing_found_title,.nothing_found_text,.nothing_found_console{font-weight:100;font-size:var(--font-xs);font-family:Arial,Verdana,sans-serif;display:block;max-width:400px;padding:var(--space-s);box-sizing:border-box;text-align:left;line-height:var(--font-m);text-decoration:none;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;color:#73809f}.nothing_found_title{font-weight:700;margin:0 auto 4px;text-align:center}.nothing_found_link{text-decoration:underline;color:var(--color-button)}.nothing_found_link:hover{text-decoration:none}.nothing_found_console{padding:var(--space-s);line-height:var(--font-l);border-radius:var(--border-radius-s);border:1px solid var(--color-border);background-color:var(--color-border)}.splash_screen{position:fixed;top:0;left:0;right:0;bottom:0;z-index:2;display:flex;justify-content:center;align-items:center;overflow:hidden;background-color:var(--color-black);animation:splash_screen .5s linear 5.5s forwards}.splash_screen_container{display:block;width:300px;box-sizing:border-box;text-align:center;animation:splash_screen_container 1s linear 4s forwards}.splash_screen_logo{max-width:60%}@keyframes splash_screen{0%{bottom:0;left:0;opacity:1}to{bottom:100%;left:100%;opacity:0}}@keyframes splash_screen_container{0%{opacity:1}to{opacity:0}}.progress_bar{display:block;width:100%;height:16px;margin:var(--space-m) 0 0;text-align:left;border-radius:var(--border-radius-s);background-color:#404148}.progress_bar_line{font-size:.8em;display:block;width:0;height:100%;padding-top:.1em;text-align:right;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:break-word;border-radius:4px;color:var(--color-white);background-color:green;background-size:23px 22px;background-image:-webkit-repeating-linear-gradient(135deg,rgba(255,255,255,.35),rgba(255,255,255,.35) 8px,rgba(255,255,255,0) 9px,rgba(255,255,255,0) 16px);background-image:repeating-linear-gradient(-45deg,#ffffff59,#ffffff59 8px,#fff0 9px,#fff0 16px)}.progress_bar,.progress_bar_line{transition:background-color .7s,width .5s}.progress_bar_line{animation:progress_bar 4.3s linear forwards}@keyframes progress_bar{0%{width:0;background-size:23px 22px}10%{width:1%;background-size:23px 32px}80%{width:50%;background-size:23px 32px}90%{width:90%;background-size:23px 32px}98%{width:92%;background-size:23px 32px}to{width:100%;background-size:23px 44px}}.title{font-size:var(--font-l);font-weight:100;margin:0 0 var(--space-xxl) 0;color:var(--color-black)}.title_big{font-size:80px;font-weight:100;margin:56px auto var(--space-l);letter-spacing:14px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--color-white)}.title_big_header{font-size:var(--font-m);font-weight:100;display:inline-block;padding:var(--space-m) var(--space-xl);letter-spacing:normal;border:1px solid var(--color-border);border-radius:var(--border-radius-l);background:var(--color-white);color:var(--color-black)}.title_big_header_wrapper{position:absolute;top:-24px;left:0;display:block;width:100%;text-align:center}.title_big_wrapper{position:relative;display:block;height:242px;margin:48px auto 28px;padding:0;text-align:center;border:1px solid var(--color-border);border-radius:var(--border-radius-m);background:linear-gradient(45deg,#4075fc,#e0c8fc)}.title_big_select{display:block;width:100%;max-width:350px;margin:0 auto;text-align:center}.ui_kit_select_with_buttons_wrapper+.ui_kit_wrapper,.ui_kit_wrapper+.ui_kit_wrapper{vertical-align:top}.ui_kit_wrapper+.ui_kit_wrapper{margin-top:var(--space-xl)}.ui_kit_title,.ui_kit_description,.ui_kit_help,.ui_kit_error{font-weight:100;font-size:var(--font-xs);display:block;padding:0;margin:0 auto;text-align:left;line-height:1.3;text-decoration:none;vertical-align:bottom;color:var(--color-black)}.ui_kit_title{font-weight:700;color:var(--color-black)}.ui_kit_title,.ui_kit_description{margin-bottom:6px}.ui_kit_help,.ui_kit_error{margin-top:6px}.ui_kit_error{color:var(--color-12)}.ui_kit_common{--temp-size: 42px;font-size:var(--font-s);font-weight:100;display:inline-block;width:100%;height:var(--temp-size);padding:0 var(--space-l);margin:0;line-height:var(--temp-size);text-align:left;box-sizing:border-box;vertical-align:top;outline-color:transparent;border-radius:var(--border-radius-s);border:1px solid var(--color-border);color:var(--color-black);background-color:var(--color-white)}.ui_kit_dialog{position:absolute;bottom:48px;left:0;display:block;width:300px;max-height:200px;padding:8px 0;overflow-y:auto;overflow-x:hidden;border-radius:8px;background-color:var(--color-white);box-shadow:0 0 5px silver}.ui_kit_date_week{position:relative}.ui_kit_date_week_value{font-size:var(--font-s);position:absolute;top:11px;left:14px;right:50px;padding:var(--space-xxs) 0;background:var(--color-white)}.layout_search_example_item{padding:var(--space-xs) var(--space-l)}.layout_search_example_item_title,.layout_search_example_item_value{font-weight:100;font-size:var(--font-xs);display:inline-block;padding:0;text-align:left;line-height:1.3;text-decoration:none;vertical-align:bottom;color:var(--color-black)}.layout_search_example_item_value{margin-left:var(--space-xxs);text-decoration:underline;cursor:pointer}.layout_search_example_item_value:hover{text-decoration:none}.ui_kit_select_value,.ui_kit_select_search,.ui_kit_select_option{font-size:var(--font-s);font-weight:100;display:inline-block;width:100%;height:42px;padding:0 var(--space-l);margin:0;line-height:42px;text-align:left;box-sizing:border-box;vertical-align:top;outline-color:transparent;border-radius:var(--border-radius-s);border:1px solid var(--color-border);color:var(--color-black);background-color:var(--color-white)}.ui_kit_select_search{padding-top:var(--space-xxxs)}.ui_kit_select_container{position:relative}.ui_kit_select_list{position:absolute;top:45px;left:0;right:0;z-index:2;display:block;max-height:300px;padding:var(--space-xxs) 0;text-align:left;border-radius:var(--border-radius-s);border:1px solid var(--color-border);box-shadow:0 0 5px var(--color-border);background-color:var(--color-white)}.ui_kit_select_option{display:block;text-align:left;cursor:pointer;border-radius:0;border:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui_kit_select_option_focus,.ui_kit_select_option:hover{background-color:var(--color-border)}.ui_kit_select_option+.ui_kit_select_option{border-top:1px solid var(--color-border)}.ui_kit_select_icon{position:absolute;top:0;bottom:0;right:0;display:block;width:32px;padding:10px 0 0;text-align:center;cursor:pointer}.ui_kit_select_icon_button{display:block;width:var(--space-xxl);height:var(--space-xxl);padding:0;margin:0;transition:transform .5s}.ui_kit_select_icon_button_open{transform:rotate(-180deg)}.ui_kit_select{padding:0 var(--space-xs) 0 var(--space-l)}.ui_kit_select_value{text-overflow:ellipsis;overflow:hidden}.ui_kit_select_with_buttons_wrapper{position:relative;padding:0 50px;text-align:center}.ui_kit_select_with_buttons_left{position:absolute;top:0;left:0;display:inline-block}.ui_kit_select_with_buttons_right{position:absolute;top:0;right:0;display:inline-block}.layout_search{margin:0 0 var(--space-xxl);-webkit-user-select:none;user-select:none}.layout_search_query,.layout_search_selects{margin:0 0 var(--space-xs)}.layout_search_selects{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:var(--space-s)}.layout_search_select{flex-basis:calc(33.3333333333% - var(--space-l));display:inline-block;vertical-align:middle}@media(max-width:900px){.layout_search_select{display:block;min-width:100%}}.components_section{display:flex;flex-wrap:nowrap;align-items:stretch;width:100%;text-align:left;box-sizing:border-box;white-space:nowrap;break-inside:auto}.components_section_white{position:relative;display:block;padding:24px;margin-bottom:24px;width:100%;white-space:normal;box-sizing:border-box;vertical-align:top;break-inside:auto;border-radius:8px;border:1px solid var(--color-border);background-color:var(--color-white)}.components_section_icons{position:absolute;top:14px;right:14px;display:inline-block;white-space:nowrap}.components_section_column{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;align-content:stretch;width:calc(50% - 12px);padding:0;margin:0;white-space:normal;vertical-align:top;break-inside:auto;box-sizing:border-box;min-width:0;border:1px solid transparent;background-color:transparent}.components_section_column+.components_section_column{margin-left:24px}.components_section_column>a{position:absolute;width:0;height:0;overflow:hidden}.components_section_column>*:not(a){flex:0 0 100%;max-width:100%;box-sizing:border-box}.components_section_column>.card_with_icon:not(.card_with_icon_long),.components_section_column>.card_with_icon_small{flex:1 0 calc(50% - 12px);max-width:calc(50% - 12px);min-width:0}.components_section_column>.card_with_icon_long{flex:1 0 100%;max-width:100%}.components_section_column:has(>.card_with_icon),.components_section_column:has(>.card_with_icon_small){display:grid;grid-template-columns:1fr 1fr;grid-auto-rows:1fr;column-gap:24px;align-items:stretch}.components_section_column:has(>.title){grid-template-rows:auto}.components_section_column:has(>.card_with_icon)>*:not(a),.components_section_column:has(>.card_with_icon_small)>*:not(a){grid-column:1/-1;max-width:none}.components_section_column:has(>.card_with_icon)>.card_with_icon:not(.card_with_icon_long),.components_section_column:has(>.card_with_icon_small)>.card_with_icon_small{grid-column:auto;width:auto;max-width:none;min-width:0;margin-right:0}.components_section_column:has(>.card_with_icon)>.card_with_icon_long{grid-column:1/-1}.components_section_column>.pie_chart{flex:1 1 100%;max-width:100%;min-height:0}.components_section_column:has(>.pie_chart){flex-direction:column;flex-wrap:nowrap}.components_section_column:has(>.pie_chart)>*:not(a){flex:0 0 auto;width:100%;max-width:100%}.components_section_column:has(>.pie_chart)>.pie_chart{flex:1 1 auto}@media screen and (max-width:950px){.components_section{flex-wrap:wrap}.components_section_column{width:100%;margin:0}.components_section_column+.components_section_column{margin-left:0}}@media print{.components_section_white{padding:0;border-radius:0;border:none}}.dropzone{position:fixed;top:0;left:0;z-index:3;display:flex;flex-direction:column;justify-content:center;align-items:center;width:100vw;height:100vh;border:8px dashed var(--color-black);background-color:#ffffffb3}.dropzone_title{font-size:44px;font-weight:700;display:inline-block;text-align:center;vertical-align:top;color:var(--color-black);text-shadow:0 0 15px var(--color-white),0 0 15px var(--color-white),0 0 15px var(--color-white)}.locker{position:absolute;display:inline-block;width:30px;height:30px;padding:0;margin:0}.locker_icon{display:block;width:100%;height:100%}.locker_border{fill:none;stroke:var(--color-border);stroke-width:1px}.locker_center{fill:var(--color-white);stroke:none;stroke-width:0}.locker_sector{fill:none;stroke:var(--color-grey);stroke-width:50px;transition:stroke-dasharray 1s}.locker_text{font-size:var(--font-s);font-weight:100;position:absolute;bottom:8px;left:0;display:block;width:100%;text-align:center;text-decoration:none;color:var(--color-black)}.modal_window,.modal_window_big,.modal_window_fullscreen{display:block;width:400px;padding:0;margin:0 auto;box-sizing:border-box;box-shadow:0 0 5px gray;background-color:var(--color-white);border-radius:var(--border-radius-m)}.modal_window_big{width:80%;height:80%;max-height:70vh}.modal_window_fullscreen{position:absolute;right:0;left:0;bottom:0;max-height:70vh;width:100vw;max-width:100vw;border:none;border-radius:var(--border-radius-l) var(--border-radius-l) 0 0;animation:modal_window_fullscreen .2s ease-out forwards}@keyframes modal_window_fullscreen{0%{bottom:-70vh}to{bottom:0}}.modal_window{position:relative}.modal_window_wrapper{position:fixed;top:0;right:0;bottom:0;left:0;z-index:3;display:flex;align-items:center;justify-content:center;overflow:hidden}.modal_window_title,.modal_window_body,.modal_window_footer{display:block;overflow:hidden;margin:0 auto;box-sizing:border-box;text-align:left;white-space:normal}.modal_window_title{position:relative;padding:24px;border-radius:8px 8px 0 0}.modal_window_body{max-height:calc(100vh - 200px);padding:0 24px;overflow:auto;line-height:1.5}.modal_window_footer{padding:24px;text-align:right;border-radius:0 0 8px 8px}.modal_window_locker,.modal_window_close{position:absolute;top:12px;right:12px}.modal_window_close{display:block;width:32px;height:32px;cursor:pointer;transition:transform 1s ease-in-out}.modal_window_close:hover{transform:rotate(180deg)}.recommendations_modal_title{font-weight:700}.recommendations_modal_header{padding-bottom:var(--space-m);margin-bottom:var(--space-s);border-radius:0;border-bottom:1px solid var(--color-border)}.recommendations_modal_footer{padding:var(--space-s) var(--space-xxl) 0 var(--space-xxl)}.recommendations_modal_sub_title{font-weight:100;font-size:var(--font-s);margin:var(--space-xs) 0 0 0;line-height:1.5;color:var(--color-black)}.recommendations_modal_description{margin-bottom:var(--space-s);color:var(--color-black)}.recommendations_modal_info{--color-temp-border: #97C2A9;--color-temp-bg: #E3F8EC;--color-temp-title: #58866B}.recommendations_modal_fact{--color-temp-border: var(--color-11);--color-temp-bg: #EFF7FF;--color-temp-title: var(--color-first)}.recommendations_modal_warning{--color-temp-border: var(--color-21);--color-temp-bg: #FFF5F2;--color-temp-title: #E8B06D}.recommendations_modal_error{--color-temp-border: var(--color-12);--color-temp-bg: #FFEFEE;--color-temp-title: #DD8B87}.recommendations_modal_header{border-bottom-color:var(--color-temp-border)}.recommendations_modal_button{color:var(--color-temp-title);background-color:var(--color-temp-bg);border-color:var(--color-temp-border)}.recommendations_modal{border:1px solid var(--color-border);border-left-width:var(--space-s);background-color:var(--color-temp-bg);border-left-color:var(--color-temp-border)}.recommendations_modal.modal_window_fullscreen{background-color:var(--color-white)}.translation_tooltip{position:fixed;bottom:var(--space-xl);right:var(--space-xl);display:inline-block;padding:var(--space-s);text-align:center;border-radius:var(--border-radius-m);border:2px solid var(--color-black);box-shadow:0 0 5px var(--color-grey);background-color:var(--color-white)}.loading{display:block;height:100%;width:100%;margin:0 auto;padding:0;min-height:80px;text-align:center}.paginator{display:block;margin:0 auto 24px;white-space:normal;box-sizing:border-box;-webkit-user-select:none;user-select:none;vertical-align:top}.paginator_text{font-weight:100;font-size:var(--font-xs);font-family:Arial,Verdana,sans-serif;display:inline-block;height:42px;padding:0;margin:0 var(--space-s);text-align:left;line-height:42px;text-decoration:none;vertical-align:bottom;color:var(--color-black)}.paginator_page_number{display:inline-block}input.paginator_page_number{display:inline-block;width:42px;padding:0;margin:0 var(--space-s);text-align:center}.sidebar_logo{display:block;width:60%;padding:0;margin:0 auto var(--space-xxl);text-align:center}.sidebar_small .sidebar_logo{display:none}.switch{display:block;width:calc(100% - 32px);padding:4px;margin:0 auto var(--space-xxl) auto;text-align:center;white-space:nowrap;box-sizing:border-box;border-radius:8px;border:none;background-color:#252735}.switch_item{display:inline-block;width:50%;max-width:50%;padding:8px 0;margin:0;font-size:var(--font-s);font-weight:100;cursor:pointer;text-align:center;text-decoration:none;box-sizing:border-box;border-radius:6px;color:#84858d}.switch_item:last-child{margin:0}.switch_item.selected{color:var(--color-white);background-color:#37394b}.switch_item_icon{display:none;height:16px;width:16px;padding:0;margin:0;text-decoration:none;vertical-align:top}.switch_item_icon>svg{fill:#84858d}.sidebar_small .switch{width:100%;border-radius:0}.sidebar_small .switch_item{display:block;width:100%;max-width:none;padding:6px 0;margin:0 0 6px;text-align:center;border-radius:4px}.sidebar_small .switch_item_title{display:none}.sidebar_small .switch_item_icon{display:inline-block}.sidebar_title,.sidebar_item{display:block;width:100%;padding:10px 0 10px 18px;margin:0 auto;font-size:var(--font-s);font-weight:100;overflow:hidden;text-overflow:ellipsis;cursor:pointer;text-align:left;text-decoration:none;box-sizing:border-box;border:none;vertical-align:top;transition:background-color .3s;border-radius:4px 0 0 4px;color:#84858d}.sidebar_title{display:inline-block;cursor:auto;margin:10px 0;padding:0;border-radius:0;border-bottom:2px solid #202129}.sidebar_item{min-height:36px;width:calc(100% - var(--space-l));margin:0 auto 0 var(--space-l);white-space:nowrap}.sidebar_item:hover,.sidebar_item.selected{color:var(--color-white);background-color:#252735}.sidebar_item_title{display:inline-block}.sidebar_item_icon{display:inline-block;height:var(--space-l);width:var(--space-l);padding:0;margin:0 var(--space-m) 0 0;text-decoration:none;vertical-align:top}.sidebar_item_icon>svg{fill:#84858d}.sidebar_small .sidebar_title,.sidebar_small .sidebar_item_title{display:none}.sidebar_small .sidebar_item{width:100%;margin:0 auto;padding:10px 0;border-radius:0;text-align:center}.sidebar_small .sidebar_item_icon{margin:0}.scroll_up_button{position:relative;flex-grow:1;display:flex;justify-content:center;align-items:flex-start;cursor:pointer;text-align:center;text-decoration:none;opacity:0;transition:opacity .5s}.scroll_up_button:hover{opacity:1}.scroll_up_button_wrapper{position:sticky;top:calc(50vh - 15px);display:inline-block;height:150px;text-align:center}.scroll_up_button_icon{position:relative;top:118px;display:block;width:32px;height:32px;margin:0 auto;transform:rotate(180deg);animation:scroll_up_button_icon linear 2s backwards infinite}@keyframes scroll_up_button_icon{0%{opacity:0;top:118px}50%{opacity:1}to{opacity:0;top:0}}@media(max-width:700px){.scroll_up_button{display:none}}.sidebar_banner{font-size:var(--space-m);font-weight:100;display:block;width:calc(100% - 24px);padding:var(--space-l) var(--space-m);margin:var(--space-l) 0 0;line-height:1.5;letter-spacing:1px;text-align:center;text-decoration:none;border-radius:var(--border-radius-s);border:1px solid #84858D;color:#84858d}.sidebar_banner:hover{color:var(--color-white);background-color:#252735}.sidebar{position:relative;top:0;left:0;bottom:0;z-index:2;display:flex;flex-direction:column;width:240px;height:100%;min-height:100vh;padding:24px 0 0;text-align:left;box-sizing:border-box;-webkit-user-select:none;user-select:none;transition:width .5s;background-color:var(--color-black)}.sidebar_wrapper{grid-area:sidebar;position:relative;background-color:var(--color-black)}.sidebar_resize{position:absolute;top:calc(50vh - 10px);left:240px;z-index:2;display:flex;justify-content:center;align-items:center;width:20px;height:20px;transition:left .5s;text-align:center;cursor:pointer;border:3px solid #F5F7F9;border-radius:var(--border-radius-l);background-color:#f5f7f9}.sidebar_resize_icon{position:relative;left:-2px;display:inline-block;width:7px;height:7px;transform:rotate(135deg);transition:transform .5s;border:2px solid var(--color-black);border-right:none;border-bottom:none}.sidebar_resize_icon_close{left:0;transform:rotate(-45deg)}.sidebar_small{width:60px}@media(max-width:1200px){.sidebar{padding:23px 0 0}}@media print{.sidebar{display:none}}.header{grid-area:header;display:block;box-sizing:border-box;text-align:left;background-color:var(--color-white)}.header_wrapper{display:block;width:calc(100vw - 258px);padding:20px 47px 20px 24px;box-sizing:border-box;text-align:right}.header_title{float:left;font-size:24px;font-weight:100;display:inline-block;margin:0;color:var(--color-black)}.header_icon,.header_language,.header_currency{display:inline-block;width:24px;height:24px;padding:0;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:top}.header_icon{margin:4px 0 0 24px}.header_language,.header_currency{width:80px;height:32px;padding:0;margin:0}.header_currency{width:60px;margin:0 0 0 8px!important}.header_with_tab{position:fixed;top:0;left:0;right:0;z-index:10;padding:0;background-color:var(--color-white)}.light_header_gap{display:block;height:72px}@media(max-width:700px){.header_print,.header_setting{display:none}}@media print{.header{display:none}}.header_filters{position:relative;display:inline-block;white-space:nowrap;padding-right:16px;margin-right:16px;-webkit-user-select:none;user-select:none;border-right:1px solid var(--color-border)}.header_filters_input{display:inline-block;width:110px;height:32px;padding:0 0 0 12px;text-align:left;line-height:32px;border:1px solid #DBDCDD;box-sizing:border-box;border-radius:3px;outline:none}.header_filters_fast{position:absolute;bottom:-16px;left:0;display:block;white-space:nowrap}.header_filters_fast_button{font-size:var(--font-xs);display:inline;padding:0;margin:0 5px 0 0;text-align:left;text-decoration:underline;cursor:pointer;border:none;color:var(--color-black);background:none}.header_filters_fast_button:hover{text-decoration:none}@media(max-width:1000px){.header_filters{display:none}}.ui_kit_tabs{display:block;width:auto;max-width:100%;padding:0 0 var(--space-xxxs);margin:0;text-align:center;white-space:nowrap;box-sizing:border-box;border-radius:0;border:none}.ui_kit_tabs_item{display:inline-block;padding:var(--space-xl) var(--space-l);margin:0;height:100%;font-size:var(--font-m);font-weight:100;cursor:pointer;text-align:center;text-decoration:none;box-sizing:border-box;border-radius:0;border:none;border-bottom:3px solid #E2E9F0;background-color:var(--color-white);color:var(--color-black)}.ui_kit_tabs_item_selected{font-weight:700;color:var(--color-button);border-bottom:3px solid var(--color-button)}.footer{position:fixed;bottom:var(--space-xxl);left:var(--space-xxl);right:var(--space-xxl);text-align:center;transition:bottom 1s ease-in-out;pointer-events:none}.footer_hidden{bottom:-130px}.footer_wrapper{display:inline-block;width:300px;margin:0 auto;padding:0;text-align:center;white-space:nowrap;pointer-events:auto;box-shadow:0 0 var(--space-l) #f5f7f9,0 0 var(--space-l) #f5f7f9;border-radius:var(--border-radius-m);background-color:var(--color-black)}.footer_gap{display:block;height:80px}.footer_button{display:inline-block;width:25%;text-align:center;white-space:normal;vertical-align:top;cursor:pointer;box-sizing:border-box;border-radius:var(--border-radius-m);--temp-color: var(--color-grey)}.footer_button:first-child:hover,.footer_button:nth-child(4n+2):hover,.footer_button_selected{background-color:#35353f;--temp-color: var(--color-white)}.footer_button:first-child:active,.footer_button:nth-child(4n+2):active{background-color:#45454f;--temp-color: var(--color-white)}.footer_button_text{font-size:var(--font-s);font-weight:100;display:block;width:100%;padding:0 0 var(--space-m);margin:0 auto;overflow:hidden;text-overflow:ellipsis;text-decoration:none;text-align:center;border:none;color:var(--temp-color)}.footer_button_icon{display:block;width:32px;height:32px;margin:var(--space-s) auto var(--space-xxs);background-repeat:no-repeat;background-size:100% auto}@media(max-width:700px){.footer_wrapper{width:100%}}.page_wrapper{display:grid;grid-template-areas:"sidebar header" "sidebar main";grid-template-columns:240px 1fr;grid-template-rows:72px 1fr;min-height:100vh;transition:grid-template-columns .5s;background-color:#f5f7f9}.page_wrapper_header,.page_wrapper_main{width:calc(100vw - 258px)}.page_wrapper_header{grid-area:header;display:block;height:100px;background-color:var(--color-white)}.page_wrapper_main,.page_wrapper_main_mobile,.page_wrapper_main_fullscreen{display:block;min-height:calc(100vh - 72px);padding:24px;box-sizing:border-box;break-inside:auto}.page_wrapper_main{grid-area:main}.page_wrapper_mobile{display:block;width:100%;min-height:100vh;overflow-x:hidden;background-color:#f5f7f9}.page_wrapper_main_mobile,.page_wrapper_main_fullscreen{width:100%}.page_wrapper_main_fullscreen{min-height:100vh;background-color:#f5f7f9}.slider_exit_left,.slider_exit_right,.slider_entrance_left,.slider_entrance_right{position:relative;top:0}.slider_exit_left{animation:slider_exit_left linear .2s forwards}.slider_exit_right{animation:slider_exit_right linear .2s forwards}.slider_entrance_left{animation:slider_entrance_left linear .2s forwards}.slider_entrance_right{animation:slider_entrance_right linear .2s forwards}@keyframes slider_exit_left{0%{right:0;opacity:1}to{right:110%;opacity:.5}}@keyframes slider_exit_right{0%{left:0;opacity:1}to{left:110%;opacity:.5}}@keyframes slider_entrance_left{0%{right:110%;opacity:.5}to{right:0;opacity:1}}@keyframes slider_entrance_right{0%{left:110%;opacity:.5}to{left:0;opacity:1}}.table_filters{margin:0 0 24px}.table_filters_item{display:inline-block;width:350px;margin:0 24px 0 0;vertical-align:top}.table_filters_item:first-child{margin-left:0}@media(max-width:900px){.table_filters_item{display:block;width:100%;margin:0}.table_filters_item:first-child{margin-bottom:24px}}.welcome{position:relative;display:flex;align-items:center;justify-content:center;width:calc(100vw - 20px);height:100vh;padding:0;margin:0;box-sizing:border-box;text-align:center}.welcome_has_banner{height:calc(100vh - 60px)}.welcome_console{max-width:730px}.welcome_row{width:auto}.welcome_warning{width:100%;margin:0 auto;padding:6px;box-sizing:border-box;border-bottom:3px solid red;background-color:#fcdada}.welcome_warning_text{text-align:center;color:#b50404}.welcome_warning_link{color:var(--color-button)}.welcome_description{font-size:var(--font-xs);display:inline-block;width:100%;max-width:700px;padding:0;margin:16px auto 0;line-height:1.3;text-align:center;text-decoration:none;color:#878fa1}.welcome_first_title,.welcome_last_title{font-size:42px;font-weight:100;margin:46px auto;padding:0}.welcome_first_title{margin-top:0}.welcome_last_title{margin-bottom:0}.welcome_title_link{margin:0 12px;text-decoration:underline;cursor:pointer}@media(max-width:800px){.welcome{display:block;width:100%;height:auto;padding:32px 0 0}.welcome_first_title,.welcome_last_title{width:90%;font-size:var(--font-l)}.welcome_description{width:90%}}.recommendations_card{position:relative;display:inline-block;min-height:100px;max-height:100px;width:220px;margin:0 var(--space-xxl) var(--space-l) 0;padding:var(--space-m) var(--space-l);text-align:left;vertical-align:top;box-sizing:border-box;white-space:normal;text-decoration:none;page-break-inside:avoid;break-inside:avoid;border:1px solid var(--color-border);border-left-width:var(--space-s);border-radius:var(--border-radius-m)}.recommendations_card_for_print{display:block;max-height:none;width:100%;margin:0 0 var(--space-l) 0}.recommendations_card_title{font-weight:700;font-size:var(--font-xs);display:block;width:90%;padding:0;margin:0 0 var(--space-xs);text-align:left;text-decoration:none;vertical-align:bottom}.recommendations_card_icon{position:absolute;top:var(--space-s);right:var(--space-s);z-index:0;display:inline-block;width:24px;height:24px;-webkit-user-select:none;user-select:none;opacity:.5}.recommendations_card_button{position:absolute;bottom:var(--space-xs);right:var(--space-s);-webkit-user-select:none;user-select:none}.recommendations_card_info{--color-temp-border: #97C2A9;--color-temp-bg: #E3F8EC;--color-temp-title: #58866B}.recommendations_card_fact{--color-temp-border: var(--color-11);--color-temp-bg: #EFF7FF;--color-temp-title: var(--color-first)}.recommendations_card_warning{--color-temp-border: var(--color-21);--color-temp-bg: #FFF5F2;--color-temp-title: #E8B06D}.recommendations_card_error{--color-temp-border: var(--color-12);--color-temp-bg: #FFEFEE;--color-temp-title: #DD8B87}.recommendations_card_title{color:var(--color-temp-title)}.recommendations_card_icon{background-image:var(--color-temp-icon)}.recommendations_card_button{color:var(--color-temp-title);background-color:var(--color-temp-bg)}.recommendations_card_button:hover{background-color:var(--color-temp-bg)}.recommendations_card{background-color:var(--color-temp-bg);border-left-color:var(--color-temp-border)}.recommendations_card_banner{font-size:var(--font-m);padding:0;line-height:100px;border-left-width:1px;border-left-color:var(--color-border)}.achievement{--temp-size: 14px;position:relative;bottom:0;width:100%;min-height:176px;padding:calc(var(--space-xl) - var(--temp-size)) 0;margin:0 0 var(--space-xl) 0;box-sizing:border-box;vertical-align:top;text-align:center;break-inside:avoid;transition:bottom .5s;border:1px solid var(--color-border);border-top:5px solid var(--color-border);border-radius:var(--border-radius-l);background-color:var(--color-white)}.achievement:last-child{margin:0 10px 0 0}.achievement:hover{bottom:var(--space-s)}.achievement_container{column-count:4;margin:var(--space-m) 0 var(--space-xxl) 0;column-gap:var(--space-xxl)}.achievement_icon{font-size:var(--font-xs);font-weight:100;display:block;width:68px;height:68px;margin:var(--temp-size) auto;line-height:64px;text-align:center;white-space:nowrap;border-radius:40px;letter-spacing:2px;color:var(--color-white);border:1px solid var(--color-border);background-color:var(--color-white)}.achievement_icon_container{display:block;margin:0 auto 4px;overflow:hidden;vertical-align:top}.achievement_icon_svg{display:inline-block;width:56px;height:56px;margin:5px;border-radius:56px;fill:var(--color-white)}.achievement_exp{font-size:var(--font-xs);font-weight:700;display:inline-block;padding:var(--space-xs) var(--space-m);margin:var(--space-m) auto;border-radius:var(--border-radius-l);border:1px solid var(--color-border)}.achievement_good{border-top-color:#7fc784;background:linear-gradient(25deg,#ffffff 0%,#ffffff 75%,var(--color-13) 100%)}.achievement_good .achievement_icon{border-color:var(--color-13);box-shadow:0 0 var(--temp-size) #7fc784}.achievement_good img{background-color:var(--color-13)}.achievement_good .achievement_exp{color:#7fc784;border-color:#7fc784;background-color:#f2fef1}.achievement_middle{border-top-color:#b17af5;background:linear-gradient(25deg,#fff,#fff 65%,#e1cff8)}.achievement_middle .achievement_icon{border-color:var(--color-14);box-shadow:0 0 var(--temp-size) #b17af5}.achievement_middle img{background-color:#ddc6fa}.achievement_middle .achievement_exp{color:#b17af5;border-color:#b17af5;background-color:#f4ecfe}.achievement_bad{border-top-color:#fec4c4;background:linear-gradient(25deg,#fff,#fff 55%,#fec4c4)}.achievement_bad .achievement_icon{border-color:#fec4c4;box-shadow:0 0 var(--temp-size) #fec4c4,0 0 var(--temp-size) #fec4c4,0 0 var(--temp-size) #fec4c4}.achievement_bad img{background-color:#fec4c4}.achievement_bad .achievement_exp{color:#f77f7f;border-color:#f77f7f;background-color:#feeeee}.achievement_publicity{border-top-color:var(--color-21);background:linear-gradient(25deg,#fff,#fff 55%,#ffdcb3)}.achievement_publicity .achievement_icon{border-color:var(--color-21);box-shadow:0 0 var(--temp-size) var(--color-21),0 0 var(--temp-size) var(--color-21),0 0 var(--temp-size) var(--color-21)}.achievement_publicity img{background-color:var(--color-21)}.achievement_publicity .achievement_exp{color:#e1a155;border-color:var(--color-21);background-color:var(--color-warning-bg)}.achievement_title,.achievement_description{font-size:var(--font-s);display:block;margin:0;padding:0;text-align:center}.achievement_title{font-size:var(--font-m);font-weight:400}.achievement_description{display:block;min-height:32px;padding:4px 6px 0;color:var(--color-black)}@media(max-width:1300px){.achievement_container{column-count:3}}@media(max-width:1000px){.achievement_container{column-count:2}}@media(max-width:600px){.achievement_container{column-count:1}}.notifications{position:fixed;top:12px;right:0;z-index:4;overflow:hidden;display:inline-block}.notifications_item{position:relative;display:block;width:350px;padding:var(--space-m) var(--space-s) var(--space-m) var(--space-m);margin:0 12px 12px;box-sizing:border-box;box-shadow:2px 2px 3px var(--color-grey);border-left:var(--space-s) solid var(--color-border);border-radius:var(--border-radius-s);color:var(--color-black);animation:notification_item .5s linear 3s forwards}.notifications_item_success{--color-temp-border: #97C2A9;--color-temp-bg: #E3F8EC;--color-temp-title: #58866B}.notifications_item_info{--color-temp-border: var(--color-11);--color-temp-bg: #EFF7FF;--color-temp-title: var(--color-first)}.notifications_item_warning{--color-temp-border: var(--color-21);--color-temp-bg: #FFF5F2;--color-temp-title: #E8B06D}.notifications_item_error{--color-temp-border: var(--color-12);--color-temp-bg: #FFEFEE;--color-temp-title: #DD8B87}.notifications_item{background-color:var(--color-temp-bg);border-left-color:var(--color-temp-border)}.notifications_item_title,.notifications_item_description{font-size:var(--font-s);font-weight:100;padding:0;line-height:1.3;text-align:left;animation:notification_title .5s linear 3s forwards}.notifications_item_title{font-size:var(--font-m);margin:0;color:var(--color-temp-title)}.notifications_item_description{margin:var(--space-xxs) 0 0}@keyframes notification_item{0%{left:0;height:auto;padding:var(--space-m) var(--space-s) var(--space-m) var(--space-m);overflow:hidden;opacity:1}to{left:100%;height:1px;padding:0 var(--space-s) 0 var(--space-m);opacity:0}}.page_wrapper_print_icon{display:block;width:70%;margin:24px auto}.plugin_print_table_of_contents{display:block;margin-bottom:var(--space-xxl)}.plugin_print_table_of_contents_title{margin-bottom:0}.plugin_print_table_of_contents_item{font-size:var(--font-s);position:relative;display:block;padding:0 0 0 22px;margin:var(--space-m) 0;list-style-type:none;text-decoration:underline;cursor:pointer;color:var(--color-button)}.plugin_print_table_of_contents_item:hover{text-decoration:none}.plugin_print_table_of_contents_item:visited{color:var(--color-button)}.plugin_print_table_of_contents_item:before{position:absolute;top:0;left:0;display:block;content:"—";margin-right:8px}.plugin_print_title,.plugin_print_sub_title{display:block;font-size:42px;font-weight:700;text-align:center;color:var(--color-black)}.plugin_print_title{font-weight:100;margin:350px 0 32px}.plugin_print_sub_title{font-size:36px;font-weight:700;margin-bottom:230px}.sponsor_title{font-weight:700;text-align:center}.sponsor_body{padding:0}.sponsor_cover{display:block;width:50%;height:auto;padding:0;margin:0 auto}.sponsor_text{font-size:var(--space-l);font-weight:100;padding:0 var(--space-xxl) var(--space-xxl);text-align:center}.sponsor_link{color:var(--color-button)}.sponsor_link:hover{text-decoration:underline}.sponsor_footer{padding:0 var(--space-xxl)}.sponsor_button{font-size:var(--font-xs);font-weight:100;display:inline-block;padding:var(--space-s);margin:var(--space-xxs);cursor:pointer;text-decoration:none;text-align:center;white-space:nowrap;border-radius:var(--border-radius-s);border:1px solid var(--color-border);background-color:var(--color-white);color:var(--color-button)}.sponsor_button:hover{text-decoration:underline}.sponsor_button_wrapper{display:block;padding:var(--space-xs) 0;margin:0 auto;text-align:center;-webkit-user-select:none;user-select:none;border-radius:0;border-top:1px solid var(--color-border);border-bottom:1px solid var(--color-border);background:linear-gradient(135deg,#1a73e8,#9fa7ff)}.ui_kit_checkbox{position:relative;display:block;padding:0 0 0 32px}.ui_kit_checkbox_box{position:absolute;top:0;left:0;display:block;width:var(--space-xl);height:var(--space-xl);cursor:pointer;box-shadow:none;border-radius:var(--border-radius-s);border:1px solid var(--color-border)}.ui_kit_checkbox_title{font-size:var(--font-s);font-weight:100;display:block;padding:var(--space-xxxs) 0 0;cursor:pointer;white-space:normal;color:var(--color-black)}.settings_box{position:relative;display:inline-block;padding:24px;margin-bottom:24px;width:100%;white-space:normal;box-sizing:border-box;vertical-align:top;break-inside:auto;border-radius:8px;border:1px solid var(--color-border);background-color:var(--color-white)}@media screen and (max-width:1200px){.settings_box{display:block}}@media print{.settings_box{padding:0;border-radius:0;border:none}}.ui_kit_switch{--temp-size: 42px;display:flex;justify-content:space-between;align-items:center;width:100%;height:var(--temp-size);padding:0;margin:0;text-align:center;white-space:nowrap;box-sizing:border-box;border-radius:8px;border:none;background-color:#e2e9f0}.ui_kit_switch_item{display:inline-block;padding:8px 0;margin:0;height:100%;width:100%;font-size:var(--font-s);font-weight:100;cursor:pointer;text-align:center;text-decoration:none;box-sizing:border-box;border:1px solid #E2E9F0;border-right:none;border-radius:0;background-color:var(--color-white);color:#84858d}.ui_kit_switch_item_selected{color:var(--color-white);border-top:1px solid var(--color-button);border-bottom:1px solid var(--color-button);background-color:var(--color-button)}.ui_kit_switch_item_disabled{pointer-events:none;opacity:.5}.ui_kit_switch_item:first-child{border-radius:8px 0 0 8px}.ui_kit_switch_item:last-child{border-right:1px solid #E2E9F0;border-radius:0 8px 8px 0}.recommendations_container{position:relative;display:block;margin:0 auto 12px 0;padding:0;text-align:left;white-space:nowrap;overflow-y:hidden}.recommendations_container_for_print{column-count:2;white-space:normal;overflow:auto}@media print{.recommendations_container{white-space:normal;overflow:auto}}.hours_chart_user{display:block;box-sizing:border-box;vertical-align:top;margin:24px 0 0;--commits-by-hours-size: calc((100vw - 400px)/25) }.hours_chart_title{display:inline-block;width:200px;text-align:left;white-space:nowrap}.hours_chart_data{display:inline-block;width:100%;vertical-align:top}.hours_chart_day{display:block;width:100%;vertical-align:top;white-space:nowrap}.hours_chart_day_time,.hours_chart_day_name,.hours_chart_hour{font-size:var(--font-xs);display:inline-block;width:var(--commits-by-hours-size);height:var(--commits-by-hours-size);text-align:center;line-height:var(--commits-by-hours-size);vertical-align:top;box-sizing:border-box;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-print-color-adjust:exact}.hours_chart_day_time,.hours_chart_day_name{box-sizing:border-box;border-bottom:1px solid grey}.hours_chart_day_name{font-size:var(--font-xs);border-right:1px solid grey}.hours_chart_hour{color:var(--color-white);border-radius:6px;border:1px solid #FFFFFF;background-color:var(--color-first)}@media(max-width:1300px){.hours_chart_day_time_mm{display:none}}@media(max-width:1000px){.hours_chart_user{--commits-by-hours-size: calc((100vw - 156px)/25) }}@media(max-width:900px){.hours_chart_day_time,.hours_chart_day_name,.hours_chart_hour{font-size:var(--font-xxs)}.hours_chart_hour{border-radius:0;border:none}}.hours_chart_legend{display:block;box-sizing:border-box;vertical-align:top;margin:24px 0 0;--commits-by-hours-size: calc((100vw - 400px)/25) }.hours_chart_legend_item{display:flex;justify-content:flex-start;align-items:center;margin:0 0 6px}.hours_chart_legend_work,.hours_chart_legend_weekend,.hours_chart_legend_count{font-size:var(--font-xs);display:inline-block;width:var(--commits-by-hours-size);height:var(--commits-by-hours-size);line-height:var(--commits-by-hours-size);text-align:center;border-radius:6px;border:1px solid #FFFFFF;-webkit-print-color-adjust:exact}.hours_chart_legend_work{opacity:.8;background-color:var(--color-first)}.hours_chart_legend_weekend{opacity:.8;background-color:var(--color-second)}.hours_chart_legend_count{color:var(--color-black);border:1px solid var(--color-grey);background-color:var(--color-white)}.hours_chart_legend_title{font-weight:100;font-size:var(--font-xs);display:inline-block;width:100%;padding:0 0 0 12px;margin:0 auto;text-align:left;line-height:1.3;text-decoration:none;box-sizing:border-box;vertical-align:bottom;color:var(--color-black)}.hours_chart_legend_title:before{content:"—";display:inline-block;margin:0 12px 0 0}@media(max-width:1300px){.day_time_mm{display:none}}@media(max-width:1000px){.user{--commits-by-hours-size: calc((100vw - 156px)/25) }}@media(max-width:900px){.day_time,.day_name,.hour{font-size:var(--font-xxs)}.hour{border-radius:0;border:none}}.pie_svg{display:inline-block;max-height:100%;max-width:100%}.pie_svg_sector{fill:#d0d1d2;stroke:none;stroke-width:0}.pie_chart{display:flex;flex-direction:column;width:100%;margin:0 auto var(--space-xxl);padding:var(--space-xxl);box-sizing:border-box;border:1px solid var(--color-border);border-radius:var(--border-radius-m);background-color:var(--color-white)}.pie_chart_data{display:flex;flex:1 1 auto;justify-content:flex-start;align-items:center}.pie_chart_icon,.pie_chart_legend{display:inline-block}.pie_chart_icon{position:relative;width:176px;vertical-align:middle}.pie_chart_legend{width:fit-content;padding-left:var(--space-xxl);align-self:center}.pie_chart_value{position:absolute;top:0;left:0;display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;height:100%}.pie_chart_value_title,.pie_chart_value_description{display:block;margin:0;padding:0;text-align:center;text-decoration:none}.pie_chart_value_title{top:68px;font-weight:700;font-size:28px;color:var(--color-11)}.pie_chart_value_description{bottom:61px;line-height:1.3;color:var(--color-black)}.pie_chart_line{position:relative;display:flex;justify-content:flex-start;padding:0 0 var(--space-xxs) 26px}.pie_chart_color{position:absolute;top:4px;left:0;display:inline-block;width:var(--space-m);height:var(--space-m);background-color:#d0d1d2}.pie_chart_percent,.pie_chart_text{display:inline-block;line-height:1.3;white-space:normal;text-decoration:none;vertical-align:top;color:var(--color-black)}.pie_chart_percent{width:40px}.pie_chart_text{min-width:100px;max-width:calc(100% - 40px);margin-left:var(--space-xs);text-overflow:ellipsis;overflow:hidden}@media(max-width:1100px){.pie_chart_description{bottom:30%}}@media(max-width:700px){.pie_chart_icon,.pie_chart_legend,.pie_chart_data{display:block;height:auto;margin:0 auto}.pie_chart_legend{width:100%;padding-left:0;margin-top:var(--space-xxl)}}.line_chart{--line_chart-height: 24px;display:block;height:var(--line_chart-height);margin-top:12px;text-align:left;overflow:hidden;-webkit-user-select:none;user-select:none;border-radius:4px}.line_chart_item,.line_chart_sub_item{font-size:var(--font-xs);display:inline-block;height:var(--line_chart-height);padding:0;margin:0;box-sizing:border-box;white-space:nowrap;vertical-align:top;overflow:hidden;line-height:var(--line_chart-height);text-align:left;color:var(--color-white);background-color:#d0d1d2;-webkit-print-color-adjust:exact}.line_chart_item{min-width:var(--space-xxxs)}.line_chart_item:first-child{border-radius:4px 0 0 4px}.line_chart_item:last-child{border-radius:0 4px 4px 0}.line_chart_sub_item{text-overflow:ellipsis}.gantt_chart{position:relative;display:inline-block;height:100%;width:100%}.gantt_chart_circle,.gantt_chart_line{position:absolute;top:35%;bottom:35%;font-size:var(--font-xs);display:block;min-width:2px;padding:0;vertical-align:top;overflow:hidden;text-overflow:ellipsis;text-align:center;line-height:1.2;border:none;border-radius:var(--border-radius-s);background-color:var(--color-14);color:var(--color-black)}.gantt_chart_circle{width:var(--border-radius-m);height:var(--border-radius-m);margin-top:5px;border-radius:var(--border-radius-m)}.gantt_chart_marker_bg,.gantt_chart_marker_line{position:absolute;top:0;bottom:0;display:flex;justify-content:center;align-items:center;text-align:center;line-height:100%;vertical-align:top}.gantt_chart_marker_line{width:1px;border-left:1px solid var(--color-grey)}.quiz_result_title,.quiz_result_description{font-weight:100;margin:0 auto;text-align:center;color:var(--color-black)}.quiz_result_title{font-size:var(--font-l);margin:0 auto var(--space-xxl)}.quiz_result_description{font-size:var(--font-m)}.quiz_container{position:relative;display:block;width:100%;height:500px;margin:0 auto;text-align:center;overflow:hidden;background-color:#f0ae7a;background-position:center center;background-size:auto 100%;background-repeat:repeat}.quiz_cloud,.quiz_cloud_bg{position:absolute;top:0;left:0;right:0;bottom:0;display:block;width:100%;height:100%;background-position:0 0;background-size:auto 100%;background-repeat:repeat;animation-name:quiz_cloud;animation-iteration-count:infinite;animation-fill-mode:none}.quiz_cloud_bg{animation-duration:170s}.quiz_cloud{animation-duration:70s}.quiz_slider{position:absolute;display:block;width:100%;height:100%;animation-duration:1.5s;animation-iteration-count:infinite;animation-fill-mode:both}.quiz_slider_animation{animation-name:quiz_slider}.quiz_footer{position:absolute;left:0;right:0;bottom:0;display:block;width:100%;padding:var(--space-xxl) 0;text-align:center}.quiz_title,.quiz_description{font-weight:100;display:block;width:433px;padding:var(--space-xxl) 64px;margin:0 auto;line-height:1.5;box-sizing:border-box;text-align:center;text-shadow:0 0 5px var(--color-white),0 0 5px var(--color-white),0 0 5px var(--color-white);color:var(--color-black);background-position:center left;background-size:auto 80%;background-repeat:repeat-x}.quiz_title{font-size:var(--font-l);margin:0 auto var(--space-xxl);border-radius:0 0 var(--border-radius-l) var(--border-radius-l)}.quiz_description{font-size:var(--font-m);margin:100px auto 0}.quiz_icon{display:block;width:100%;max-width:300px;margin:0 auto var(--space-xxl);border:var(--space-s) solid #E8816E;box-shadow:0 0 5px var(--color-grey);background-color:#e8816e;background-position:center center;background-size:auto 100%;background-repeat:no-repeat}@keyframes quiz_slider{0%{bottom:0;left:auto;opacity:1}49%{bottom:100%;opacity:0}51%{right:auto;top:100%;opacity:0}to{top:0;opacity:1}}@keyframes quiz_cloud{0%{background-position:0 0}to{background-position:-200px 0}}@media(max-width:900px){.quiz_title,.quiz_description{width:100%;padding:var(--space-l) var(--space-xs)}.quiz_title{font-size:var(--font-m)}}.quiz_answer{position:relative;width:160px;padding-bottom:var(--space-m);cursor:pointer;border:none;box-shadow:none;outline-color:transparent;transition:width .5s}.quiz_answer_wrapper{display:inline-block;padding:0;vertical-align:bottom;transition:padding .5s}.quiz_answer_small{width:128px}.quiz_answer_icon{display:block;width:100%;margin:0 auto var(--space-l);background-position:center center;background-size:auto 100%;background-repeat:no-repeat;transition:background-size .5s}.quiz_answer_icon:hover{background-size:auto 105%}.quiz_answer_text{--temp-bg: var(--color-white);--temp-text: var(--color-black)}.quiz_answer_text_selected{--temp-bg: #5F9C92;--temp-text: var(--color-white)}.quiz_answer_text_correct{--temp-bg: #267A05;--temp-text: var(--color-white)}.quiz_answer_text_error{--temp-bg: #DD5F00;--temp-text: var(--color-white)}.quiz_answer_text{font-size:var(--font-m);font-weight:100;position:relative;display:flex;justify-content:center;align-items:center;width:80%;height:40px;margin:var(--space-xxs) auto 0;text-align:center;border:2px solid #6E605E;border-radius:var(--border-radius-m);color:var(--temp-text);background-color:var(--temp-bg)}.quiz_answer_text:before{content:" ";position:absolute;top:-8px;left:43%;display:block;transform:rotate(45deg);border:8px solid #6E605E;border-bottom-color:transparent;border-right-color:transparent}.quiz_answer_wrapper+.quiz_answer_wrapper{margin-left:64px}.quiz_answer_wrapper_small{padding:var(--space-s) var(--space-l)}.quiz_answer_wrapper_small .quiz_answer{width:128px;animation-delay:1s;animation-duration:2s;animation-iteration-count:infinite;animation-fill-mode:both;animation-name:quiz_answer}.quiz_answer_wrapper_small .quiz_answer_text{font-size:var(--font-s)}@keyframes quiz_answer{0%{top:0;opacity:1}30%{opacity:.3}to{top:800px;opacity:.3}}@media(max-width:900px){.quiz_answer{width:100px}.quiz_answer_small{width:68px}.quiz_answer_text{font-size:var(--font-s)}.quiz_answer_text:before{left:39%}.quiz_answer_wrapper_small .quiz_answer{width:68px}.quiz_answer_wrapper+.quiz_answer_wrapper{margin-left:var(--space-l)}}.quiz_question_title{font-size:var(--font-l);font-weight:100;margin:0 auto var(--space-xxl);text-align:center;color:var(--color-black);background-color:var(--color-white)}.quiz_question_answer{display:block;text-align:center}.quiz_question_hide{animation-duration:.5s;animation-iteration-count:1;animation-fill-mode:both;animation-name:quiz_question_hide}@keyframes quiz_question_hide{0%{opacity:1}to{opacity:0}}.game_banner{position:relative;display:block;width:100%;height:300px;margin:0 auto;-webkit-user-select:none;user-select:none;background-size:auto 100%;background-repeat:repeat;background-position:top left}.game_banner_description{position:absolute;left:0;right:0;bottom:0;display:block;width:100%;padding:var(--space-xxl) var(--space-xxl) 0;text-align:center;background-color:#000000b3}.game_banner_text{margin:var(--space-s) auto;color:var(--color-white)}@media(max-width:900px){.game_banner{height:200px}}.races_track_info{font-size:28px;font-weight:700;display:inline-block;width:60px;height:60px;margin:5px 12%;padding:var(--space-s) 0;text-align:center;border-radius:60px;line-height:40px;box-sizing:border-box;border:var(--space-xxs) solid var(--color-border);color:var(--color-black);background-color:var(--color-white);animation-name:races_track_info;animation-iteration-count:1;animation-duration:1s;animation-direction:alternate;animation-fill-mode:both}@keyframes races_track_info{0%{opacity:0}to{opacity:1}}@media(max-width:900px){.races_track_info{margin:0 12%}}.races_track_car{position:absolute;top:-8px;left:0;width:10%;height:100%;text-align:center}.races_track_car_title{font-size:12px;display:inline-block;width:auto;max-width:100%;margin:var(--space-xs) auto 0 auto;padding:var(--space-xxs) var(--space-xs);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid var(--color-grey);border-radius:var(--border-radius-s);color:var(--color-black);background-color:var(--color-white)}.races_track_car_title:before{content:" ";position:absolute;top:22px;left:47%;display:block;padding:4px;transform:rotate(45deg);background-color:var(--color-white)}.races_track_car_cover{font-size:12px;display:block;height:50%;margin:0 auto;-webkit-user-select:none;user-select:none}.races_track_car_animation{animation-name:races_track_car;animation-iteration-count:1;animation-direction:alternate;animation-fill-mode:both}@keyframes races_track_car{0%{left:0}to{left:90%}}.races{position:relative;margin:0 auto;-webkit-user-select:none;user-select:none}.races_green{display:block;height:var(--space-xxl);background-color:var(--color-13);background-repeat:repeat-x;background-size:auto 100%;background-position:top left}.races_track{position:relative;height:80px;padding:var(--space-xxs);margin:0 auto;text-align:right;background-color:var(--color-grey);background-repeat:repeat-x;background-size:auto 100%;background-position:top left}.races_button{margin-bottom:var(--space-xxl)}@media(max-width:900px){.races_track{height:70px}}.billboard{display:block;width:100%;padding:0;margin:0 auto -44px;text-align:center;background-repeat:repeat-x;background-size:auto 100%;background-position:bottom left}.billboard_box{position:relative;display:inline-block;width:400px;height:160px;margin:0 auto;background-repeat:no-repeat;background-size:100% auto;background-position:top left}.billboard_title{font-family:monospace;font-size:22px;font-weight:100;display:flex;justify-content:center;align-items:center;height:92px;padding:var(--space-m);margin:0 auto;line-height:1.3;text-align:center;box-sizing:border-box;text-shadow:1px 1px 1px #FEFEFE;color:#4e3c3b}.billboard_cloud{padding-top:50px;background-color:#f0ae7a;background-size:auto 56%}.billboard_green{padding-top:12px;background-color:#557d4b}@media(max-width:900px){.billboard_box{width:300px;height:120px}.billboard_title{font-size:var(--font-m);height:70px;padding:var(--space-s)}}.show_symbol_wrapper{display:inline-block;white-space:nowrap;vertical-align:middle}.show_symbol{--temp-font: var(--font-s);--temp-width: 30px;--temp-height: 40px;-webkit-user-select:none;user-select:none}.show_symbol_s{--temp-font: var(--font-xxs);--temp-width: 20px;--temp-height: 30px}@media(max-width:900px){.show_symbol{--temp-width: 24.5px;--temp-height: 33px}}.show_symbol{font-size:var(--temp-font);position:relative;display:inline-block;width:var(--temp-width);height:var(--temp-height);padding:0;margin:0 var(--space-xxs) 0 0;vertical-align:top;text-transform:capitalize;text-decoration:none;text-align:center;white-space:nowrap;line-height:var(--temp-height);transform:rotateY(180deg);color:var(--color-black);background-color:var(--color-white)}.show_symbol_hide{animation-name:show_symbol;animation-duration:1s}.show_symbol_bg{position:absolute;top:0;left:0;display:block;width:100%;height:100%;cursor:pointer;background-color:var(--color-black)}.show_symbol_bg_hide{animation-name:show_symbol_bg;animation-duration:.4s}.show_symbol_hide,.show_symbol_bg_hide{animation-iteration-count:1;animation-direction:alternate;animation-fill-mode:both}@keyframes show_symbol{0%{transform:rotateY(180deg)}to{transform:rotateY(0)}}@keyframes show_symbol_bg{0%{opacity:1}99%{opacity:1}to{opacity:0}}.swimming_pool_track{display:block;height:84px;width:100%;text-align:left;white-space:nowrap;background-repeat:repeat-x;background-size:auto 100%;background-position:top left}.swimming_pool_track_value,.swimming_pool_track_line,.swimming_pool_track_chart{display:inline-block;height:100%;text-decoration:none;vertical-align:middle;background-size:auto 100%}.swimming_pool_track_value{width:85px;line-height:80px;text-align:center;color:var(--color-black);background-color:var(--color-white)}.swimming_pool_track_line{overflow:hidden;width:calc(100% - 459px);background-color:var(--color-31)}.swimming_pool_track_chart{width:50%;text-align:right;background-color:#00003766}.swimming_pool_track_man{position:relative;top:20px;left:30px;height:40px}.swimming_pool_track+.swimming_pool_track .swimming_pool_track_line{border-top:4px dashed red}@media(max-width:900px){.swimming_pool_track{height:70px}.swimming_pool_track_value{width:71px;line-height:64px}.swimming_pool_track_line{width:calc(100% - 384px)}}.swimming_pool{position:relative;margin:0 auto;-webkit-user-select:none;user-select:none}.swimming_pool_top_border,.swimming_pool_bottom_border{display:block;height:50px;background-color:var(--color-border);background-repeat:repeat-x;background-size:auto 100%;background-position:top left}.team_building_full_screen_open,.team_building_full_screen_close{position:absolute;top:84px;right:32px;z-index:1;display:inline-block;width:var(--space-xxl);height:var(--space-xxl);cursor:pointer}.team_building_full_screen_open{top:32px}.team_country_filter{margin:0 0 var(--space-xxl)}.team_country_filter_checkbox,.team_country_filter_select{display:inline-block;margin-right:var(--space-xxl);vertical-align:middle}.team_country_filter_select{min-width:350px}.team_country_filter_checkbox{margin-top:var(--space-l)}@media(max-width:900px){.team_country_filter_select{display:block;min-width:100%;margin-bottom:var(--space-xxl)}}@media(max-width:700px){.team_country_filter_checkbox{min-width:calc(49% - 24px)}}.time_zone_map{position:relative;display:block;margin:0 auto;text-align:center}.time_zone_map_gap{display:block;width:100%}.time_zone_map_points{position:absolute;top:0;left:0;display:inline-block;width:100%;height:100%;background-repeat:no-repeat;background-size:100% 100%;background-position:center center}.time_zone_map_point{font-size:var(--font-xxs);position:absolute;top:0;left:0;display:block;width:var(--space-xl);height:var(--space-xl);text-align:center;line-height:20px;box-shadow:0 0 5px var(--color-white),0 0 5px var(--color-white),0 0 15px var(--color-white);color:var(--color-white);border-radius:32px;background-color:var(--color-black)}.time_zone_map_point_p1300{top:72%;left:97.5%}.time_zone_map_point_p1200{top:87%;left:94%}.time_zone_map_point_p1100{top:81%;left:88%}.time_zone_map_point_p1000{top:83.5%;left:86.5%}.time_zone_map_point_p1030,.time_zone_map_point_p0930{top:82%;left:84%}.time_zone_map_point_p0900{top:42%;left:83%}.time_zone_map_point_p0800{top:47%;left:78%}.time_zone_map_point_p0700{top:29%;left:69%}.time_zone_map_point_p0630{top:53%;left:73%}.time_zone_map_point_p0600{top:29%;left:66.5%}.time_zone_map_point_p0545{top:47%;left:69%}.time_zone_map_point_p0430{top:43%;left:65%}.time_zone_map_point_p0530{top:49.5%;left:67%}.time_zone_map_point_p0500{top:30%;left:64%}.time_zone_map_point_p0400{top:31%;left:60%}.time_zone_map_point_p0330{top:44%;left:61%}.time_zone_map_point_p0300{top:29%;left:57%}.time_zone_map_point_p0200{top:33.5%;left:54%}.time_zone_map_point_p0100{top:35%;left:48%}.time_zone_map_point_p0000{top:32%;left:45%}.time_zone_map_point_m0100{top:41%;left:39%}.time_zone_map_point_m0200{top:75%;left:33.5%}.time_zone_map_point_m0300{top:81%;left:30%}.time_zone_map_point_m0330{top:34%;left:30.5%}.time_zone_map_point_m0400{top:68%;left:28.5%}.time_zone_map_point_m0500{top:42%;left:25%}.time_zone_map_point_m0600{top:45%;left:19%}.time_zone_map_point_m0700{top:42%;left:16%}.time_zone_map_point_m0800{top:39%;left:12%}.time_zone_map_point_m0900{top:22%;left:5%}.time_zone_map_point_m1000{top:74%;left:4%}.time_zone_map_point_m1100{top:67%;left:0}.time_zone_map_point_m1200{top:62%;left:97%}.time_zone_map_point_hide{display:none}.time_zone_map_point_active{background-color:var(--color-first)}.time_zone_map_point_dismissed{background-color:var(--color-second)}.time_zone_map_point_s{--temp-size: var(--space-xl);padding-top:.5px}.time_zone_map_point_m{--temp-size: var(--space-xxl);margin:-3px}.time_zone_map_point_l{--temp-size: 32px;margin:-8px}.time_zone_map_point{width:var(--temp-size);height:var(--temp-size);line-height:var(--temp-size)}.file_breadcrumbs{margin:0 0 24px}.file_breadcrumbs_text{font-size:var(--font-l);font-weight:100;display:inline-block;margin-right:var(--space-m);text-decoration:none;vertical-align:top;color:var(--color-black)}.file_breadcrumbs_link{cursor:pointer}.file_breadcrumbs_link:hover{text-decoration:underline}.plugin_team_files_table_select{display:inline;opacity:1}.plugin_team_files_table_not_select{opacity:.3}.year_chart_day_info{position:absolute;top:0;left:0;font-size:var(--font-s);font-weight:100;display:inline-block;width:350px;margin:0;padding:var(--space-l);border:1px solid var(--color-border);border-radius:var(--border-radius-m);box-shadow:var(--space-xxs) var(--space-xxs) var(--space-xxs) var(--color-border);background-color:var(--color-white);color:var(--color-black)}.year_chart_day_info_body{padding-right:var(--space-m);max-height:300px;overflow-x:hidden}.year_chart_day_info:after{position:absolute;left:142px;top:-8px;content:" ";display:inline-block;width:0;height:0;border:var(--space-l) solid var(--color-white);border-right:none;border-bottom:none;box-shadow:-2px -2px 2px var(--color-border);transform:rotate(45deg)}.year_chart_day_info_title{margin:0 auto var(--space-m)}.year_chart{--day-size: 16px;padding:var(--space-xs) 0;margin:0 calc(var(--day-size) / -2)}.year_chart_month{--month-size: calc(var(--day-size) * 7 + 7px);display:inline-block;width:var(--month-size);margin:var(--day-size) calc(var(--day-size) / 2) 0;vertical-align:top}.year_chart_month_icon{display:inline-block;width:16px;height:16px;margin:-2px 2px 0 4px;vertical-align:middle}.year_chart_month_header{display:block;height:24px}.year_chart_month_header_title{font-weight:100;font-size:var(--font-xs);font-family:Arial,Verdana,sans-serif;display:block;padding:0;margin:0 auto;text-align:center;line-height:var(--font-m);text-decoration:none;vertical-align:bottom;color:var(--color-black)}.year_chart_month_body{position:relative;display:block;width:var(--month-size);max-width:var(--month-size)}.year_chart_month_body_day{position:relative;display:inline-block;width:var(--day-size);height:var(--day-size);margin:0 1px 1px 0;font-size:var(--font-m);font-weight:700;vertical-align:top;line-height:var(--day-size);overflow:hidden;cursor:pointer;text-align:center;color:var(--color-black);background-color:var(--color-border);background-blend-mode:screen;-webkit-print-color-adjust:exact}.year_chart_month_body_day_icon{display:inline-block;width:96%;height:96%;margin-top:1px;vertical-align:top}.year_chart_month_body_day_arrow{position:absolute;top:20px;left:0;z-index:1;display:inline-block;width:0;height:0;transform:rotate(-45deg);border:16px solid white;border-right:none;border-bottom:none;background-color:var(--color-white)}.year_chart_month_body_day_info{font-size:var(--font-s);position:absolute;left:-175px;top:var(--space-xxl);z-index:1;display:block;width:350px;max-height:350px;overflow-x:hidden;padding:var(--space-s);cursor:default;text-align:left;border-radius:var(--border-radius-m);box-shadow:2px 2px 5px var(--color-border);border:1px solid var(--color-border);background-color:var(--color-white)}.year_chart_month_info{display:block;font-weight:100;font-size:var(--font-xs);font-family:Arial,Verdana,sans-serif;padding:0;margin:var(--space-s) 0 0;line-height:var(--font-xs);white-space:nowrap;text-decoration:none;vertical-align:middle;overflow:hidden;text-overflow:ellipsis;text-align:center;color:var(--color-11)}.team_month_filter{margin:0 0 var(--space-xxl);white-space:normal}.team_month_filter_checkbox,.team_month_filter_select{display:inline-block;margin-right:var(--space-xxl);vertical-align:middle}.team_month_filter_select{min-width:350px}.team_month_filter_checkbox{margin-top:var(--space-l)}@media(max-width:1100px){.team_month_filter_br{min-width:45%;margin-bottom:var(--space-xxl)}}@media(max-width:900px){.team_month_filter_select{display:block;min-width:100%;margin-bottom:var(--space-xxl)}}.recommendations_page{column-count:3;margin:0 0 var(--space-xxl)}@media(max-width:1500px){.recommendations_page{column-count:2}}@media(max-width:800px){.recommendations_page{column-count:1}}.team_release_download{position:relative;top:-12px}.tempo{display:block;width:fit-content;white-space:nowrap}.tempo_wrapper{display:block}.tempo_column{display:inline-block;width:280px;padding:0;vertical-align:top;white-space:normal;box-sizing:border-box;border-right:1px solid var(--color-border)}.tempo_column:last-child{border-right:none}.tempo_column_wrapper{display:block;height:80vh;min-height:80vh;max-height:80vh}.tempo_header,.tempo_author,.tempo_task{font-weight:100;font-size:var(--font-xs);display:block;width:100%;padding:0;margin:0 auto;text-align:left;line-height:1.3;text-decoration:none;box-sizing:border-box;vertical-align:bottom;color:var(--color-black)}.tempo_header{font-weight:700;display:flex;justify-content:flex-start;align-items:center;width:100%;padding:var(--space-m) var(--space-l);margin:0 auto var(--space-m) auto;box-sizing:border-box;text-align:center;white-space:nowrap;border-bottom:1px solid var(--color-border)}.tempo_header_title,.tempo_header_day{display:inline-block;font-weight:100;font-size:var(--font-xs);line-height:1.3;color:var(--color-black)}.tempo_header_title{font-weight:700;margin-right:var(--space-m);text-align:left}.tempo_header_day{font-weight:100;text-align:right}.tempo_header_day{color:var(--color-44)}.tempo_author{font-weight:700;width:calc(100% - var(--space-l));padding:0 0 12px 8px;margin:0 auto 12px;border-bottom:1px solid var(--color-border)}.tempo_task{width:100%;padding:8px;margin:0 auto var(--space-xs) auto;white-space:nowrap;border-radius:var(--border-radius-s);border:1px solid var(--color-border)}.tempo_task_wrapper{padding:0 var(--space-l);margin:0 auto 24px}.tempo_task_header{display:flex;justify-content:space-between;align-items:center;padding:0 0 6px;margin:0 0 6px;border-bottom:1px solid var(--color-border)}.tempo_task_link,.tempo_task_value,.tempo_task_title,.tempo_task_tag{font-weight:100;font-size:var(--font-xs);display:block;padding:0;margin:0 auto;text-align:left;line-height:1.3;text-decoration:none;vertical-align:bottom;color:#73809f}.tempo_task_link{font-weight:700;display:inline-block;cursor:pointer;margin:0;text-decoration:underline;color:var(--color-first)}.tempo_task_tags{display:inline-block;white-space:normal;text-align:right;margin:0 0 -6px}.tempo_task_tag{display:inline-block;padding:var(--space-xxxs) var(--space-sm);margin:0 0 var(--space-xs) var(--space-xs);border-radius:var(--border-radius-l);background-color:var(--color-border)}.tempo_task_commits,.tempo_task_hours{display:inline-block;width:calc(50% - 4px);padding:var(--space-s) 0;text-align:center;border-radius:var(--border-radius-s);background-color:#f1f5f7}.tempo_task_commits{width:calc(35% - 4px);margin:0 8px 0 0}.tempo_task_hours{width:calc(65% - 4px)}.tempo_task_value,.tempo_task_title{font-weight:100;text-align:center;color:var(--color-black)}.tempo_task_value{display:inline-block}.tempo_task_title{margin:2px 0 0}.tempo_task_icon{display:inline-block;width:16px;height:16px;margin:0 4px 0 0;vertical-align:middle}.tempo_chart{display:block;width:calc(100% - var(--space-l));margin:0 auto var(--space-s) auto;padding:0 0 var(--space-s) 0;text-align:left;border-bottom:1px solid var(--color-border)}.tempo_chart_dashboard{position:relative;display:block;height:40px;border-bottom:1px solid var(--color-border)}.tempo_chart_dot{position:absolute;bottom:0;left:0;display:inline-block;width:3%;vertical-align:bottom;background-color:var(--color-first)}.tempo_chart_legend{display:flex;justify-content:space-between;align-items:flex-start;height:var(--space-l);padding:var(--space-xxs) 0 0 0}.tempo_chart_time{font-size:var(--font-xxs);display:inline-block;box-sizing:border-box;color:var(--color-black)}.tempo_by_table{--temp-cell: 40px;--temp-sidebar: 150px;--temp-header: 100px;position:relative;display:block;max-height:90vh;max-width:80vw;white-space:nowrap;margin-top:var(--space-xxl);border-bottom:none;border-right:none}.tempo_by_table_header,.tempo_by_table_first_column{position:sticky;z-index:1;background-color:var(--color-white)}.tempo_by_table_header{top:0;z-index:2;border-bottom:1px solid var(--color-border)}.tempo_by_table_first_column{top:var(--temp-header);left:0;display:inline-block;vertical-align:top}.tempo_by_table_first_column>div:hover{background-color:transparent}.tempo_by_table_body{display:inline-block;vertical-align:top}.tempo_by_table_row{display:block;vertical-align:top;border-bottom:1px solid var(--color-border)}.tempo_by_table_row:hover{background-color:#f7f7f7}.tempo_by_table_header_empty,.tempo_by_table_task,.tempo_by_table_cell{font-size:var(--font-s);display:inline-block;height:var(--temp-cell);width:var(--temp-cell);line-height:var(--temp-cell);text-align:center;vertical-align:top;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-right:1px solid var(--color-border)}.tempo_by_table_header_empty_weekend,.tempo_by_table_task_weekend,.tempo_by_table_cell_weekend{background-color:#faf4f3}.tempo_by_table_task{width:var(--temp-sidebar);padding-left:var(--space-xs);text-align:left}.tempo_by_table_header_empty{width:var(--temp-sidebar);height:var(--temp-header);margin-right:var(--temp-cell);vertical-align:bottom}.tempo_by_table_header_cell{display:inline-block;height:var(--temp-cell);width:var(--temp-cell);overflow:initial;transform:rotate(-45deg);transform-origin:bottom left;vertical-align:bottom}.tempo_by_table_header_cell_value{font-size:var(--font-s);height:var(--temp-cell);width:calc(var(--temp-header) * 1.4);padding-top:12px;line-height:1;text-align:left;vertical-align:top;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-bottom:1px solid var(--color-border)}.tempo_by_table_header_cell_description{font-size:var(--font-s);display:block;padding-left:var(--space-m);line-height:1;color:var(--color-42)}.tempo_like_list_day,.tempo_like_list_author,.tempo_like_list_task{font-size:var(--font-s);display:block;padding:var(--space-m) 0 0;line-height:1.3;text-align:left;vertical-align:top}.tempo_like_list_day{font-weight:700;padding:32px 0 0}.tempo_like_list_day_description{font-weight:100;display:block;vertical-align:top;color:var(--color-42)}.tempo_like_list_author{padding-left:var(--space-l)}.tempo_like_list_task{display:grid;grid-template-columns:auto auto auto auto 1fr;gap:var(--space-s);padding:var(--space-s) calc(var(--space-l) * 2) 0}.tempo_like_list_task_number{display:inline;white-space:nowrap;-webkit-hyphens:none;hyphens:none}.tempo_like_list_task_hours{color:var(--color-42)}@media(max-width:850px){.tempo_like_list_task{display:block}.tempo_like_list_task_spit{display:inline-block;margin:0 var(--space-xs)}.tempo_like_list_task_description{display:inline;line-height:1.5}}.team_day_filters_prev,.team_day_filters_next{width:calc(100% - 50px);display:inline-block}.team_day_filters_prev{margin-left:8px}.team_day_filters_next{margin-right:8px}.team_day_toolbar{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:var(--space-xxl)}.team_day_toolbar_change_view{display:inline-block;width:calc(33% - 20px);min-width:290px}.team_day_toolbar_download{display:inline-block;width:var(--space-xxl);height:var(--space-xxl);padding:0;cursor:pointer;-webkit-user-select:none;user-select:none}.team_weeks_filters_prev,.team_weeks_filters_next{width:calc(100% - 50px);display:inline-block}.team_weeks_filters_prev{margin-left:8px}.team_weeks_filters_next{margin-right:8px}.team_weeks_filters_middle{display:inline-block;width:calc(100% - 100px);margin:0 8px}.component_dependencies_chart{position:relative;display:block;padding:var(--space-l);margin:0 auto var(--space-xxl);border-radius:var(--border-radius-m);background-color:var(--color-white)}.component_dependencies_chart_arrows{position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none}.component_dependencies_chart_level{display:block;padding-bottom:var(--space-xl);margin:0 auto var(--space-xl);text-align:left;border-bottom:1px solid var(--color-border)}.component_dependencies_chart_library{font-size:var(--font-size-xs);position:relative;display:inline-block;width:12px;height:12px;margin:7px;cursor:pointer;text-align:center;line-height:var(--space-m);vertical-align:middle;color:var(--color-grey);border-radius:var(--border-radius-m);border:1px solid var(--color-button-2);background-color:var(--color-white)}.component_dependencies_chart_library:hover{border-color:var(--color-black);background-color:var(--color-second)}.component_dependencies_chart_library_parent{border-color:transparent;background-color:#22c220}.component_dependencies_chart_library_children{border-color:transparent;background-color:var(--color-second)}.component_dependencies_chart_library_selected{border-color:var(--color-black);background-color:var(--color-black)}.component_dependencies_chart_library_size_m{margin:6px;border-width:2px}.component_dependencies_chart_library_size_l{margin:4px;border-width:4px}.component_dependencies_chart_library_title{font-size:var(--font-xxs);position:absolute;bottom:150%;left:-46px;z-index:1;display:block;width:100px;max-width:100px;padding:var(--space-xxxs) var(--space-xxs);margin:0;line-height:1.3;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--border-radius-s);border:1px solid var(--color-border);color:var(--color-black);background-color:var(--color-white)}.component_beautiful_tn{display:inline-block;min-width:140px;padding:var(--space-m) var(--space-m) var(--space-s);margin:0 0 var(--space-sm) 0;box-sizing:border-box;vertical-align:top;border:1px solid var(--color-border);border-radius:var(--border-radius-s);background-color:#f5f7f9}.component_beautiful_tn_container{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;padding:var(--space-m) var(--space-m) 0;margin:var(--space-m) 0 var(--space-xxl) 0;border:1px solid var(--color-border);border-radius:var(--border-radius-s);background-color:var(--color-white)}.component_beautiful_tn_title{position:relative;font-size:var(--font-s);display:block;min-height:87px;margin:0 0 var(--space-s) 0;padding:var(--space-xxl) var(--space-s);text-align:center;box-sizing:border-box;border-radius:var(--border-radius-s);border:1px solid var(--color-border);background-color:var(--color-white)}.component_beautiful_tn_title:before{position:absolute;bottom:-6px;left:calc(50% - 6px);z-index:0;content:"";display:block;padding:0;margin:0;width:var(--space-m);height:var(--space-m);box-sizing:border-box;transform:rotate(45deg);background-color:var(--color-white);border-right:1px solid var(--color-border);border-bottom:1px solid var(--color-border)}.component_beautiful_tn_icon{font-size:var(--font-m);font-weight:700;display:block;width:64px;height:64px;margin:0 auto;line-height:64px;text-align:center;white-space:nowrap;border-radius:32px;letter-spacing:2px;border:2px dotted white;color:var(--color-black);background-color:var(--color-border)}.component_beautiful_tn_big_number{letter-spacing:normal}.component_beautiful_tn_task{display:block;margin:0 auto}.component_beautiful_tn_pr{display:block;margin:var(--space-m) auto 0;color:var(--color-black)}.component_beautiful_tn_date{font-size:var(--font-s);margin:var(--space-m) auto 0;padding:var(--space-s) 0 0 0;text-align:center;color:var(--color-black);border-top:1px solid var(--color-border)}.person_achievements_header{position:relative;display:flex;margin:24px auto;padding:var(--space-xxl);text-align:center;border:1px solid var(--color-border);border-radius:var(--border-radius-m);background:linear-gradient(45deg,#4075fc,#e0c8fc)}.person_achievements_header_center{flex:1 0 0;padding:0 var(--space-xxl);vertical-align:top}.person_achievements_header_left,.person_achievements_header_right{display:inline-block;width:130px;height:100%;flex:0 0 130px;vertical-align:top;box-sizing:border-box;border-radius:var(--border-radius-m)}.person_achievements_header_left{overflow:hidden;border-radius:130px;background-color:var(--color-14)}.person_achievements_header_left_svg{display:inline-block;width:90px;height:90px;margin:15% auto}.person_achievements_header_right{display:flex;align-items:center;flex-direction:column;justify-content:center;height:130px}.person_achievements_header_progress{display:block;height:var(--space-l);margin:0 0 var(--space-xxs);text-align:left;vertical-align:middle;background-color:var(--color-border);border-radius:var(--border-radius-s)}.person_achievements_header_progress_value{display:block;height:var(--space-l);border-radius:var(--border-radius-s);background-color:green;background-size:23px 22px;background-image:-webkit-repeating-linear-gradient(135deg,rgba(255,255,255,.35),rgba(255,255,255,.35) 8px,rgba(255,255,255,0) 9px,rgba(255,255,255,0) 16px);background-image:repeating-linear-gradient(-45deg,#ffffff59,#ffffff59 8px,#fff0 9px,#fff0 16px);transition:width .5s}.person_achievements_header_title,.person_achievements_header_experience,.person_achievements_header_level,.person_achievements_header_level_description{font-size:var(--font-s);display:block;margin:0 0 var(--space-xxs);text-align:left;color:var(--color-white)}.person_achievements_header_title{font-size:40px;letter-spacing:1px;margin:20px 0 var(--space-xxl)}.person_achievements_header_level{font-size:50px;letter-spacing:1px;text-align:center;color:var(--color-white)}.person_achievements_header_level_description{font-size:24px;text-align:center}.progress_card{display:inline-block;width:100%;min-height:270px;margin:0 auto var(--space-xxl);padding:var(--space-xl) var(--space-xxl) var(--space-xl) var(--space-l);vertical-align:top;text-decoration:none;box-sizing:border-box;text-align:center;border-radius:var(--border-radius-m);border:1px solid var(--color-border);background-color:var(--color-white)}.progress_line{display:inline-block;width:100%;height:4px;margin-top:10px;text-align:left;vertical-align:middle;background-color:var(--color-border);border-radius:var(--border-radius-m)}.progress_line_container{position:relative;height:40px;padding:0 0 0 50px;margin:0 auto var(--space-m) auto}.progress_line_container:last-child{margin-bottom:0}.progress_line_value{display:block;height:4px;background-color:var(--color-button-2);border-radius:var(--border-radius-m);transition:width .5s,background-color .5s}.progress_line_value_min{background-color:var(--color-alert-main)}.progress_line_value_less{background-color:var(--color-warning-main)}.progress_line_value_more{background-color:var(--color-15)}.progress_line_value_max{background-color:var(--color-success-main)}.progress_line_title{font-size:var(--font-s);display:block;margin:var(--space-xxs) 0 0 0;text-align:left;color:var(--color-black)}.progress_line_icon{--temp-size: 40px;position:absolute;top:0;left:0;display:inline-block;width:var(--temp-size);height:var(--temp-size);border-radius:var(--temp-size);flex:0 0 auto;vertical-align:middle}.progress_line_icon_svg{display:inline-block;width:36px;height:36px;margin:2px auto}:root{--font-xxs: 10px;--font-xs: 13px;--font-s: 13px;--font-m: 16px;--font-l: 18px;--space-xxxs: 2px;--space-xxs: 4px;--space-xs: 6px;--space-s: 8px;--space-sm: 10px;--space-m: 12px;--space-l: 16px;--space-xl: 18px;--space-xxl: 24px;--border-radius-s: 4px;--border-radius-m: 8px;--border-radius-l: 12px;--color-first: #4162B5;--color-second: #ED675F;--color-info-bg: #E5F6FF;--color-info-main: #1192E8;--color-success-bg: #EAFCF1;--color-success-main: #32C665;--color-warning-bg: #FFF1E5;--color-warning-main: #FF8D64;--color-alert-bg: #FFEFEF;--color-alert-main: #D92020;--color-black: #12131B;--color-white: #FFFFFF;--color-grey: #CBCBCD;--color-border: #E2E9F0;--color-button: #1A73E8;--color-button-2: #3081EA;--color-button-3: #0B59CC;--color-11: #7F9BE0;--color-12: #E9A5A1;--color-13: #C2ECC1;--color-14: #B6BAE9;--color-15: #A18BE0;--color-21: #FFC178;--color-22: #75CCE0;--color-23: #B2E069;--color-24: #EC95B6;--color-25: #E2DA84;--color-31: #A7C0FF;--color-32: #D7D4B1;--color-33: #E0BA96;--color-34: #E0BE69;--color-35: #C0D79C;--color-41: #B6C5C9;--color-42: #9E98AD;--color-43: #AACFD8;--color-44: #BAB2D0;--color-45: #DCBAC7}html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{font-size:100%;padding:0;margin:0;vertical-align:baseline;outline:0;border:0;background:transparent}body{line-height:1}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:none}a{font-size:100%;padding:0;margin:0;vertical-align:baseline;background:transparent}ins{color:#000;background-color:#ff9;text-decoration:none}mark{font-weight:700;font-style:italic;color:#000;background-color:#ff9}del{text-decoration:line-through}table{border-spacing:0;border-collapse:collapse}hr{display:block;height:1px;padding:0;margin:1em 0;border:0}input,select,td{padding:0;margin:0;vertical-align:middle}td{font-size:100%;padding:0;margin:0;outline:0;border:0}html{box-sizing:border-box}*,*:before,*:after{outline:none;box-sizing:inherit}body,input,textarea,select{font-family:Arial,sans-serif;color:var(--color-neutral-black)}html,body,#root{height:100%}.scroll_y,.scroll_x{scroll-behavior:smooth}.scroll_y::-webkit-scrollbar,.scroll_x::-webkit-scrollbar{border-radius:4px;background-color:#ddd}.scroll_y::-webkit-scrollbar-thumb,.scroll_x::-webkit-scrollbar-thumb{border-radius:4px;background:#aaa}.scroll_x{overflow-x:auto}.scroll_x::-webkit-scrollbar{height:8px}.scroll_y{overflow-y:auto}.scroll_y::-webkit-scrollbar{width:8px}
|
||
</style><script>var BC=ts=>{throw TypeError(ts)};var r5=(ts,as,Ls)=>as.has(ts)||BC("Cannot "+Ls);var Pe=(ts,as,Ls)=>as.has(ts)?BC("Cannot add the same private member more than once"):as instanceof WeakSet?as.add(ts):as.set(ts,Ls);var V=(ts,as,Ls)=>(r5(ts,as,"access private method"),Ls);(function(){"use strict";var Rc,PC,Bg,m5,Uo,WC,FC,Ib,Go,UC,GC,qb,Ho,HC,VC,Vo,YC,QC,Ob,Yo,KC,ZC,Qo,XC,JC,ja,lf,rf,mf,ej,Ko,tj,aj,Qi,sj,ij,nj,Zo,oj,lj,Xo,rj,mj,Ua,uf,uj,cj,cf,Jo,pj,dj,$b,zs,gj,_j,hj,fj,el,yj,vj,tl,kj,bj,al,wj,xj,sl,Cj,jj,il,Tj,Dj,Ec,Sj,Ns,Aj,pf,df,Ms,zj,Nj,Mj,Rj,nl,Ej,Ij,ol,qj,Oj,Rs,$j,Lj,Bj,Pj,ll,Wj,Fj,rl,Uj,Gj,gm,gf,ml,Jp,_m,_f,ul,cl,pl,dl,gl,_l,hl,fl,yl,vl,kl,bl,wl,xl,Cl,jl,Tl,Dl,Sl,Al,zl,Nl,Ml,Rl,El,Il,Hj,Vj,Es,Yj,Qj,Kj,Zj,ql,Ol,$l,Ll,Bl,Pl;function ts(t,e){for(var s=0;s<e.length;s++){const n=e[s];if(typeof n!="string"&&!Array.isArray(n)){for(const r in n)if(r!=="default"&&!(r in t)){const u=Object.getOwnPropertyDescriptor(n,r);u&&Object.defineProperty(t,r,u.get?u:{enumerable:!0,get:()=>n[r]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}function as(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Ls={exports:{}},Tr={};/**
|
||
* @license React
|
||
* react-jsx-runtime.production.js
|
||
*
|
||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||
*
|
||
* This source code is licensed under the MIT license found in the
|
||
* LICENSE file in the root directory of this source tree.
|
||
*/var hf;function Xj(){if(hf)return Tr;hf=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function s(n,r,u){var c=null;if(u!==void 0&&(c=""+u),r.key!==void 0&&(c=""+r.key),"key"in r){u={};for(var p in r)p!=="key"&&(u[p]=r[p])}else u=r;return r=u.ref,{$$typeof:t,type:n,key:c,ref:r!==void 0?r:null,props:u}}return Tr.Fragment=e,Tr.jsx=s,Tr.jsxs=s,Tr}var ff;function Jj(){return ff||(ff=1,Ls.exports=Xj()),Ls.exports}var o=Jj(),ed={exports:{}},ve={};/**
|
||
* @license React
|
||
* react.production.js
|
||
*
|
||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||
*
|
||
* This source code is licensed under the MIT license found in the
|
||
* LICENSE file in the root directory of this source tree.
|
||
*/var yf;function eT(){if(yf)return ve;yf=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),n=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),u=Symbol.for("react.consumer"),c=Symbol.for("react.context"),p=Symbol.for("react.forward_ref"),_=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),f=Symbol.for("react.lazy"),v=Symbol.for("react.activity"),k=Symbol.iterator;function x(S){return S===null||typeof S!="object"?null:(S=k&&S[k]||S["@@iterator"],typeof S=="function"?S:null)}var N={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},q=Object.assign,I={};function F(S,W,X){this.props=S,this.context=W,this.refs=I,this.updater=X||N}F.prototype.isReactComponent={},F.prototype.setState=function(S,W){if(typeof S!="object"&&typeof S!="function"&&S!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,S,W,"setState")},F.prototype.forceUpdate=function(S){this.updater.enqueueForceUpdate(this,S,"forceUpdate")};function se(){}se.prototype=F.prototype;function te(S,W,X){this.props=S,this.context=W,this.refs=I,this.updater=X||N}var ge=te.prototype=new se;ge.constructor=te,q(ge,F.prototype),ge.isPureReactComponent=!0;var Ie=Array.isArray;function De(){}var ye={H:null,A:null,T:null,S:null},Bt=Object.prototype.hasOwnProperty;function ta(S,W,X){var ee=X.ref;return{$$typeof:t,type:S,key:W,ref:ee!==void 0?ee:null,props:X}}function ps(S,W){return ta(S.type,W,S.props)}function aa(S){return typeof S=="object"&&S!==null&&S.$$typeof===t}function rt(S){var W={"=":"=0",":":"=2"};return"$"+S.replace(/[=:]/g,function(X){return W[X]})}var Yt=/\/+/g;function It(S,W){return typeof S=="object"&&S!==null&&S.key!=null?rt(""+S.key):W.toString(36)}function Qt(S){switch(S.status){case"fulfilled":return S.value;case"rejected":throw S.reason;default:switch(typeof S.status=="string"?S.then(De,De):(S.status="pending",S.then(function(W){S.status==="pending"&&(S.status="fulfilled",S.value=W)},function(W){S.status==="pending"&&(S.status="rejected",S.reason=W)})),S.status){case"fulfilled":return S.value;case"rejected":throw S.reason}}throw S}function $(S,W,X,ee,xe){var ze=typeof S;(ze==="undefined"||ze==="boolean")&&(S=null);var We=!1;if(S===null)We=!0;else switch(ze){case"bigint":case"string":case"number":We=!0;break;case"object":switch(S.$$typeof){case t:case e:We=!0;break;case f:return We=S._init,$(We(S._payload),W,X,ee,xe)}}if(We)return xe=xe(S),We=ee===""?"."+It(S,0):ee,Ie(xe)?(X="",We!=null&&(X=We.replace(Yt,"$&/")+"/"),$(xe,W,X,"",function(fm){return fm})):xe!=null&&(aa(xe)&&(xe=ps(xe,X+(xe.key==null||S&&S.key===xe.key?"":(""+xe.key).replace(Yt,"$&/")+"/")+We)),W.push(xe)),1;We=0;var sa=ee===""?".":ee+":";if(Ie(S))for(var vt=0;vt<S.length;vt++)ee=S[vt],ze=sa+It(ee,vt),We+=$(ee,W,X,ze,xe);else if(vt=x(S),typeof vt=="function")for(S=vt.call(S),vt=0;!(ee=S.next()).done;)ee=ee.value,ze=sa+It(ee,vt++),We+=$(ee,W,X,ze,xe);else if(ze==="object"){if(typeof S.then=="function")return $(Qt(S),W,X,ee,xe);throw W=String(S),Error("Objects are not valid as a React child (found: "+(W==="[object Object]"?"object with keys {"+Object.keys(S).join(", ")+"}":W)+"). If you meant to render a collection of children, use an array instead.")}return We}function K(S,W,X){if(S==null)return S;var ee=[],xe=0;return $(S,ee,"","",function(ze){return W.call(X,ze,xe++)}),ee}function le(S){if(S._status===-1){var W=S._result;W=W(),W.then(function(X){(S._status===0||S._status===-1)&&(S._status=1,S._result=X)},function(X){(S._status===0||S._status===-1)&&(S._status=2,S._result=X)}),S._status===-1&&(S._status=0,S._result=W)}if(S._status===1)return S._result.default;throw S._result}var Ve=typeof reportError=="function"?reportError:function(S){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var W=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof S=="object"&&S!==null&&typeof S.message=="string"?String(S.message):String(S),error:S});if(!window.dispatchEvent(W))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",S);return}console.error(S)},Ye={map:K,forEach:function(S,W,X){K(S,function(){W.apply(this,arguments)},X)},count:function(S){var W=0;return K(S,function(){W++}),W},toArray:function(S){return K(S,function(W){return W})||[]},only:function(S){if(!aa(S))throw Error("React.Children.only expected to receive a single React element child.");return S}};return ve.Activity=v,ve.Children=Ye,ve.Component=F,ve.Fragment=s,ve.Profiler=r,ve.PureComponent=te,ve.StrictMode=n,ve.Suspense=_,ve.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=ye,ve.__COMPILER_RUNTIME={__proto__:null,c:function(S){return ye.H.useMemoCache(S)}},ve.cache=function(S){return function(){return S.apply(null,arguments)}},ve.cacheSignal=function(){return null},ve.cloneElement=function(S,W,X){if(S==null)throw Error("The argument must be a React element, but you passed "+S+".");var ee=q({},S.props),xe=S.key;if(W!=null)for(ze in W.key!==void 0&&(xe=""+W.key),W)!Bt.call(W,ze)||ze==="key"||ze==="__self"||ze==="__source"||ze==="ref"&&W.ref===void 0||(ee[ze]=W[ze]);var ze=arguments.length-2;if(ze===1)ee.children=X;else if(1<ze){for(var We=Array(ze),sa=0;sa<ze;sa++)We[sa]=arguments[sa+2];ee.children=We}return ta(S.type,xe,ee)},ve.createContext=function(S){return S={$$typeof:c,_currentValue:S,_currentValue2:S,_threadCount:0,Provider:null,Consumer:null},S.Provider=S,S.Consumer={$$typeof:u,_context:S},S},ve.createElement=function(S,W,X){var ee,xe={},ze=null;if(W!=null)for(ee in W.key!==void 0&&(ze=""+W.key),W)Bt.call(W,ee)&&ee!=="key"&&ee!=="__self"&&ee!=="__source"&&(xe[ee]=W[ee]);var We=arguments.length-2;if(We===1)xe.children=X;else if(1<We){for(var sa=Array(We),vt=0;vt<We;vt++)sa[vt]=arguments[vt+2];xe.children=sa}if(S&&S.defaultProps)for(ee in We=S.defaultProps,We)xe[ee]===void 0&&(xe[ee]=We[ee]);return ta(S,ze,xe)},ve.createRef=function(){return{current:null}},ve.forwardRef=function(S){return{$$typeof:p,render:S}},ve.isValidElement=aa,ve.lazy=function(S){return{$$typeof:f,_payload:{_status:-1,_result:S},_init:le}},ve.memo=function(S,W){return{$$typeof:h,type:S,compare:W===void 0?null:W}},ve.startTransition=function(S){var W=ye.T,X={};ye.T=X;try{var ee=S(),xe=ye.S;xe!==null&&xe(X,ee),typeof ee=="object"&&ee!==null&&typeof ee.then=="function"&&ee.then(De,Ve)}catch(ze){Ve(ze)}finally{W!==null&&X.types!==null&&(W.types=X.types),ye.T=W}},ve.unstable_useCacheRefresh=function(){return ye.H.useCacheRefresh()},ve.use=function(S){return ye.H.use(S)},ve.useActionState=function(S,W,X){return ye.H.useActionState(S,W,X)},ve.useCallback=function(S,W){return ye.H.useCallback(S,W)},ve.useContext=function(S){return ye.H.useContext(S)},ve.useDebugValue=function(){},ve.useDeferredValue=function(S,W){return ye.H.useDeferredValue(S,W)},ve.useEffect=function(S,W){return ye.H.useEffect(S,W)},ve.useEffectEvent=function(S){return ye.H.useEffectEvent(S)},ve.useId=function(){return ye.H.useId()},ve.useImperativeHandle=function(S,W,X){return ye.H.useImperativeHandle(S,W,X)},ve.useInsertionEffect=function(S,W){return ye.H.useInsertionEffect(S,W)},ve.useLayoutEffect=function(S,W){return ye.H.useLayoutEffect(S,W)},ve.useMemo=function(S,W){return ye.H.useMemo(S,W)},ve.useOptimistic=function(S,W){return ye.H.useOptimistic(S,W)},ve.useReducer=function(S,W,X){return ye.H.useReducer(S,W,X)},ve.useRef=function(S){return ye.H.useRef(S)},ve.useState=function(S){return ye.H.useState(S)},ve.useSyncExternalStore=function(S,W,X){return ye.H.useSyncExternalStore(S,W,X)},ve.useTransition=function(){return ye.H.useTransition()},ve.version="19.2.8",ve}var vf;function uu(){return vf||(vf=1,ed.exports=eT()),ed.exports}var T=uu();const wt=as(T),tT=ts({__proto__:null,default:wt},[T]);var td={exports:{}},Dr={},ad={exports:{}},sd={};/**
|
||
* @license React
|
||
* scheduler.production.js
|
||
*
|
||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||
*
|
||
* This source code is licensed under the MIT license found in the
|
||
* LICENSE file in the root directory of this source tree.
|
||
*/var kf;function aT(){return kf||(kf=1,(function(t){function e($,K){var le=$.length;$.push(K);e:for(;0<le;){var Ve=le-1>>>1,Ye=$[Ve];if(0<r(Ye,K))$[Ve]=K,$[le]=Ye,le=Ve;else break e}}function s($){return $.length===0?null:$[0]}function n($){if($.length===0)return null;var K=$[0],le=$.pop();if(le!==K){$[0]=le;e:for(var Ve=0,Ye=$.length,S=Ye>>>1;Ve<S;){var W=2*(Ve+1)-1,X=$[W],ee=W+1,xe=$[ee];if(0>r(X,le))ee<Ye&&0>r(xe,X)?($[Ve]=xe,$[ee]=le,Ve=ee):($[Ve]=X,$[W]=le,Ve=W);else if(ee<Ye&&0>r(xe,le))$[Ve]=xe,$[ee]=le,Ve=ee;else break e}}return K}function r($,K){var le=$.sortIndex-K.sortIndex;return le!==0?le:$.id-K.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var u=performance;t.unstable_now=function(){return u.now()}}else{var c=Date,p=c.now();t.unstable_now=function(){return c.now()-p}}var _=[],h=[],f=1,v=null,k=3,x=!1,N=!1,q=!1,I=!1,F=typeof setTimeout=="function"?setTimeout:null,se=typeof clearTimeout=="function"?clearTimeout:null,te=typeof setImmediate<"u"?setImmediate:null;function ge($){for(var K=s(h);K!==null;){if(K.callback===null)n(h);else if(K.startTime<=$)n(h),K.sortIndex=K.expirationTime,e(_,K);else break;K=s(h)}}function Ie($){if(q=!1,ge($),!N)if(s(_)!==null)N=!0,De||(De=!0,rt());else{var K=s(h);K!==null&&Qt(Ie,K.startTime-$)}}var De=!1,ye=-1,Bt=5,ta=-1;function ps(){return I?!0:!(t.unstable_now()-ta<Bt)}function aa(){if(I=!1,De){var $=t.unstable_now();ta=$;var K=!0;try{e:{N=!1,q&&(q=!1,se(ye),ye=-1),x=!0;var le=k;try{t:{for(ge($),v=s(_);v!==null&&!(v.expirationTime>$&&ps());){var Ve=v.callback;if(typeof Ve=="function"){v.callback=null,k=v.priorityLevel;var Ye=Ve(v.expirationTime<=$);if($=t.unstable_now(),typeof Ye=="function"){v.callback=Ye,ge($),K=!0;break t}v===s(_)&&n(_),ge($)}else n(_);v=s(_)}if(v!==null)K=!0;else{var S=s(h);S!==null&&Qt(Ie,S.startTime-$),K=!1}}break e}finally{v=null,k=le,x=!1}K=void 0}}finally{K?rt():De=!1}}}var rt;if(typeof te=="function")rt=function(){te(aa)};else if(typeof MessageChannel<"u"){var Yt=new MessageChannel,It=Yt.port2;Yt.port1.onmessage=aa,rt=function(){It.postMessage(null)}}else rt=function(){F(aa,0)};function Qt($,K){ye=F(function(){$(t.unstable_now())},K)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function($){$.callback=null},t.unstable_forceFrameRate=function($){0>$||125<$?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):Bt=0<$?Math.floor(1e3/$):5},t.unstable_getCurrentPriorityLevel=function(){return k},t.unstable_next=function($){switch(k){case 1:case 2:case 3:var K=3;break;default:K=k}var le=k;k=K;try{return $()}finally{k=le}},t.unstable_requestPaint=function(){I=!0},t.unstable_runWithPriority=function($,K){switch($){case 1:case 2:case 3:case 4:case 5:break;default:$=3}var le=k;k=$;try{return K()}finally{k=le}},t.unstable_scheduleCallback=function($,K,le){var Ve=t.unstable_now();switch(typeof le=="object"&&le!==null?(le=le.delay,le=typeof le=="number"&&0<le?Ve+le:Ve):le=Ve,$){case 1:var Ye=-1;break;case 2:Ye=250;break;case 5:Ye=1073741823;break;case 4:Ye=1e4;break;default:Ye=5e3}return Ye=le+Ye,$={id:f++,callback:K,priorityLevel:$,startTime:le,expirationTime:Ye,sortIndex:-1},le>Ve?($.sortIndex=le,e(h,$),s(_)===null&&$===s(h)&&(q?(se(ye),ye=-1):q=!0,Qt(Ie,le-Ve))):($.sortIndex=Ye,e(_,$),N||x||(N=!0,De||(De=!0,rt()))),$},t.unstable_shouldYield=ps,t.unstable_wrapCallback=function($){var K=k;return function(){var le=k;k=K;try{return $.apply(this,arguments)}finally{k=le}}}})(sd)),sd}var bf;function sT(){return bf||(bf=1,ad.exports=aT()),ad.exports}var id={exports:{}},Ht={};/**
|
||
* @license React
|
||
* react-dom.production.js
|
||
*
|
||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||
*
|
||
* This source code is licensed under the MIT license found in the
|
||
* LICENSE file in the root directory of this source tree.
|
||
*/var wf;function iT(){if(wf)return Ht;wf=1;var t=uu();function e(_){var h="https://react.dev/errors/"+_;if(1<arguments.length){h+="?args[]="+encodeURIComponent(arguments[1]);for(var f=2;f<arguments.length;f++)h+="&args[]="+encodeURIComponent(arguments[f])}return"Minified React error #"+_+"; visit "+h+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function s(){}var n={d:{f:s,r:function(){throw Error(e(522))},D:s,C:s,L:s,m:s,X:s,S:s,M:s},p:0,findDOMNode:null},r=Symbol.for("react.portal");function u(_,h,f){var v=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:r,key:v==null?null:""+v,children:_,containerInfo:h,implementation:f}}var c=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function p(_,h){if(_==="font")return"";if(typeof h=="string")return h==="use-credentials"?h:""}return Ht.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=n,Ht.createPortal=function(_,h){var f=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!h||h.nodeType!==1&&h.nodeType!==9&&h.nodeType!==11)throw Error(e(299));return u(_,h,null,f)},Ht.flushSync=function(_){var h=c.T,f=n.p;try{if(c.T=null,n.p=2,_)return _()}finally{c.T=h,n.p=f,n.d.f()}},Ht.preconnect=function(_,h){typeof _=="string"&&(h?(h=h.crossOrigin,h=typeof h=="string"?h==="use-credentials"?h:"":void 0):h=null,n.d.C(_,h))},Ht.prefetchDNS=function(_){typeof _=="string"&&n.d.D(_)},Ht.preinit=function(_,h){if(typeof _=="string"&&h&&typeof h.as=="string"){var f=h.as,v=p(f,h.crossOrigin),k=typeof h.integrity=="string"?h.integrity:void 0,x=typeof h.fetchPriority=="string"?h.fetchPriority:void 0;f==="style"?n.d.S(_,typeof h.precedence=="string"?h.precedence:void 0,{crossOrigin:v,integrity:k,fetchPriority:x}):f==="script"&&n.d.X(_,{crossOrigin:v,integrity:k,fetchPriority:x,nonce:typeof h.nonce=="string"?h.nonce:void 0})}},Ht.preinitModule=function(_,h){if(typeof _=="string")if(typeof h=="object"&&h!==null){if(h.as==null||h.as==="script"){var f=p(h.as,h.crossOrigin);n.d.M(_,{crossOrigin:f,integrity:typeof h.integrity=="string"?h.integrity:void 0,nonce:typeof h.nonce=="string"?h.nonce:void 0})}}else h==null&&n.d.M(_)},Ht.preload=function(_,h){if(typeof _=="string"&&typeof h=="object"&&h!==null&&typeof h.as=="string"){var f=h.as,v=p(f,h.crossOrigin);n.d.L(_,f,{crossOrigin:v,integrity:typeof h.integrity=="string"?h.integrity:void 0,nonce:typeof h.nonce=="string"?h.nonce:void 0,type:typeof h.type=="string"?h.type:void 0,fetchPriority:typeof h.fetchPriority=="string"?h.fetchPriority:void 0,referrerPolicy:typeof h.referrerPolicy=="string"?h.referrerPolicy:void 0,imageSrcSet:typeof h.imageSrcSet=="string"?h.imageSrcSet:void 0,imageSizes:typeof h.imageSizes=="string"?h.imageSizes:void 0,media:typeof h.media=="string"?h.media:void 0})}},Ht.preloadModule=function(_,h){if(typeof _=="string")if(h){var f=p(h.as,h.crossOrigin);n.d.m(_,{as:typeof h.as=="string"&&h.as!=="script"?h.as:void 0,crossOrigin:f,integrity:typeof h.integrity=="string"?h.integrity:void 0})}else n.d.m(_)},Ht.requestFormReset=function(_){n.d.r(_)},Ht.unstable_batchedUpdates=function(_,h){return _(h)},Ht.useFormState=function(_,h,f){return c.H.useFormState(_,h,f)},Ht.useFormStatus=function(){return c.H.useHostTransitionStatus()},Ht.version="19.2.8",Ht}var xf;function Cf(){if(xf)return id.exports;xf=1;function t(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),id.exports=iT(),id.exports}/**
|
||
* @license React
|
||
* react-dom-client.production.js
|
||
*
|
||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||
*
|
||
* This source code is licensed under the MIT license found in the
|
||
* LICENSE file in the root directory of this source tree.
|
||
*/var jf;function nT(){if(jf)return Dr;jf=1;var t=sT(),e=uu(),s=Cf();function n(a){var i="https://react.dev/errors/"+a;if(1<arguments.length){i+="?args[]="+encodeURIComponent(arguments[1]);for(var l=2;l<arguments.length;l++)i+="&args[]="+encodeURIComponent(arguments[l])}return"Minified React error #"+a+"; visit "+i+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function r(a){return!(!a||a.nodeType!==1&&a.nodeType!==9&&a.nodeType!==11)}function u(a){var i=a,l=a;if(a.alternate)for(;i.return;)i=i.return;else{a=i;do i=a,(i.flags&4098)!==0&&(l=i.return),a=i.return;while(a)}return i.tag===3?l:null}function c(a){if(a.tag===13){var i=a.memoizedState;if(i===null&&(a=a.alternate,a!==null&&(i=a.memoizedState)),i!==null)return i.dehydrated}return null}function p(a){if(a.tag===31){var i=a.memoizedState;if(i===null&&(a=a.alternate,a!==null&&(i=a.memoizedState)),i!==null)return i.dehydrated}return null}function _(a){if(u(a)!==a)throw Error(n(188))}function h(a){var i=a.alternate;if(!i){if(i=u(a),i===null)throw Error(n(188));return i!==a?null:a}for(var l=a,m=i;;){var d=l.return;if(d===null)break;var g=d.alternate;if(g===null){if(m=d.return,m!==null){l=m;continue}break}if(d.child===g.child){for(g=d.child;g;){if(g===l)return _(d),a;if(g===m)return _(d),i;g=g.sibling}throw Error(n(188))}if(l.return!==m.return)l=d,m=g;else{for(var y=!1,b=d.child;b;){if(b===l){y=!0,l=d,m=g;break}if(b===m){y=!0,m=d,l=g;break}b=b.sibling}if(!y){for(b=g.child;b;){if(b===l){y=!0,l=g,m=d;break}if(b===m){y=!0,m=g,l=d;break}b=b.sibling}if(!y)throw Error(n(189))}}if(l.alternate!==m)throw Error(n(190))}if(l.tag!==3)throw Error(n(188));return l.stateNode.current===l?a:i}function f(a){var i=a.tag;if(i===5||i===26||i===27||i===6)return a;for(a=a.child;a!==null;){if(i=f(a),i!==null)return i;a=a.sibling}return null}var v=Object.assign,k=Symbol.for("react.element"),x=Symbol.for("react.transitional.element"),N=Symbol.for("react.portal"),q=Symbol.for("react.fragment"),I=Symbol.for("react.strict_mode"),F=Symbol.for("react.profiler"),se=Symbol.for("react.consumer"),te=Symbol.for("react.context"),ge=Symbol.for("react.forward_ref"),Ie=Symbol.for("react.suspense"),De=Symbol.for("react.suspense_list"),ye=Symbol.for("react.memo"),Bt=Symbol.for("react.lazy"),ta=Symbol.for("react.activity"),ps=Symbol.for("react.memo_cache_sentinel"),aa=Symbol.iterator;function rt(a){return a===null||typeof a!="object"?null:(a=aa&&a[aa]||a["@@iterator"],typeof a=="function"?a:null)}var Yt=Symbol.for("react.client.reference");function It(a){if(a==null)return null;if(typeof a=="function")return a.$$typeof===Yt?null:a.displayName||a.name||null;if(typeof a=="string")return a;switch(a){case q:return"Fragment";case F:return"Profiler";case I:return"StrictMode";case Ie:return"Suspense";case De:return"SuspenseList";case ta:return"Activity"}if(typeof a=="object")switch(a.$$typeof){case N:return"Portal";case te:return a.displayName||"Context";case se:return(a._context.displayName||"Context")+".Consumer";case ge:var i=a.render;return a=a.displayName,a||(a=i.displayName||i.name||"",a=a!==""?"ForwardRef("+a+")":"ForwardRef"),a;case ye:return i=a.displayName||null,i!==null?i:It(a.type)||"Memo";case Bt:i=a._payload,a=a._init;try{return It(a(i))}catch{}}return null}var Qt=Array.isArray,$=e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,K=s.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,le={pending:!1,data:null,method:null,action:null},Ve=[],Ye=-1;function S(a){return{current:a}}function W(a){0>Ye||(a.current=Ve[Ye],Ve[Ye]=null,Ye--)}function X(a,i){Ye++,Ve[Ye]=a.current,a.current=i}var ee=S(null),xe=S(null),ze=S(null),We=S(null);function sa(a,i){switch(X(ze,i),X(xe,a),X(ee,null),i.nodeType){case 9:case 11:a=(a=i.documentElement)&&(a=a.namespaceURI)?mC(a):0;break;default:if(a=i.tagName,i=i.namespaceURI)i=mC(i),a=uC(i,a);else switch(a){case"svg":a=1;break;case"math":a=2;break;default:a=0}}W(ee),X(ee,a)}function vt(){W(ee),W(xe),W(ze)}function fm(a){a.memoizedState!==null&&X(We,a);var i=ee.current,l=uC(i,a.type);i!==l&&(X(xe,a),X(ee,l))}function Ic(a){xe.current===a&&(W(ee),W(xe)),We.current===a&&(W(We),ou._currentValue=le)}var Wg,Lb;function Jn(a){if(Wg===void 0)try{throw Error()}catch(l){var i=l.stack.trim().match(/\n( *(at )?)/);Wg=i&&i[1]||"",Lb=-1<l.stack.indexOf(`
|
||
at`)?" (<anonymous>)":-1<l.stack.indexOf("@")?"@unknown:0:0":""}return`
|
||
`+Wg+a+Lb}var Fg=!1;function Ug(a,i){if(!a||Fg)return"";Fg=!0;var l=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var m={DetermineComponentFrameRoot:function(){try{if(i){var P=function(){throw Error()};if(Object.defineProperty(P.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(P,[])}catch(O){var E=O}Reflect.construct(a,[],P)}else{try{P.call()}catch(O){E=O}a.call(P.prototype)}}else{try{throw Error()}catch(O){E=O}(P=a())&&typeof P.catch=="function"&&P.catch(function(){})}}catch(O){if(O&&E&&typeof O.stack=="string")return[O.stack,E.stack]}return[null,null]}};m.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var d=Object.getOwnPropertyDescriptor(m.DetermineComponentFrameRoot,"name");d&&d.configurable&&Object.defineProperty(m.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var g=m.DetermineComponentFrameRoot(),y=g[0],b=g[1];if(y&&b){var j=y.split(`
|
||
`),R=b.split(`
|
||
`);for(d=m=0;m<j.length&&!j[m].includes("DetermineComponentFrameRoot");)m++;for(;d<R.length&&!R[d].includes("DetermineComponentFrameRoot");)d++;if(m===j.length||d===R.length)for(m=j.length-1,d=R.length-1;1<=m&&0<=d&&j[m]!==R[d];)d--;for(;1<=m&&0<=d;m--,d--)if(j[m]!==R[d]){if(m!==1||d!==1)do if(m--,d--,0>d||j[m]!==R[d]){var L=`
|
||
`+j[m].replace(" at new "," at ");return a.displayName&&L.includes("<anonymous>")&&(L=L.replace("<anonymous>",a.displayName)),L}while(1<=m&&0<=d);break}}}finally{Fg=!1,Error.prepareStackTrace=l}return(l=a?a.displayName||a.name:"")?Jn(l):""}function LB(a,i){switch(a.tag){case 26:case 27:case 5:return Jn(a.type);case 16:return Jn("Lazy");case 13:return a.child!==i&&i!==null?Jn("Suspense Fallback"):Jn("Suspense");case 19:return Jn("SuspenseList");case 0:case 15:return Ug(a.type,!1);case 11:return Ug(a.type.render,!1);case 1:return Ug(a.type,!0);case 31:return Jn("Activity");default:return""}}function Bb(a){try{var i="",l=null;do i+=LB(a,l),l=a,a=a.return;while(a);return i}catch(m){return`
|
||
Error generating stack: `+m.message+`
|
||
`+m.stack}}var Gg=Object.prototype.hasOwnProperty,Hg=t.unstable_scheduleCallback,Vg=t.unstable_cancelCallback,BB=t.unstable_shouldYield,PB=t.unstable_requestPaint,Ta=t.unstable_now,WB=t.unstable_getCurrentPriorityLevel,Pb=t.unstable_ImmediatePriority,Wb=t.unstable_UserBlockingPriority,qc=t.unstable_NormalPriority,FB=t.unstable_LowPriority,Fb=t.unstable_IdlePriority,UB=t.log,GB=t.unstable_setDisableYieldValue,ym=null,Da=null;function Ki(a){if(typeof UB=="function"&&GB(a),Da&&typeof Da.setStrictMode=="function")try{Da.setStrictMode(ym,a)}catch{}}var Sa=Math.clz32?Math.clz32:YB,HB=Math.log,VB=Math.LN2;function YB(a){return a>>>=0,a===0?32:31-(HB(a)/VB|0)|0}var Oc=256,$c=262144,Lc=4194304;function eo(a){var i=a&42;if(i!==0)return i;switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return a&261888;case 262144:case 524288:case 1048576:case 2097152:return a&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return a&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return a}}function Bc(a,i,l){var m=a.pendingLanes;if(m===0)return 0;var d=0,g=a.suspendedLanes,y=a.pingedLanes;a=a.warmLanes;var b=m&134217727;return b!==0?(m=b&~g,m!==0?d=eo(m):(y&=b,y!==0?d=eo(y):l||(l=b&~a,l!==0&&(d=eo(l))))):(b=m&~g,b!==0?d=eo(b):y!==0?d=eo(y):l||(l=m&~a,l!==0&&(d=eo(l)))),d===0?0:i!==0&&i!==d&&(i&g)===0&&(g=d&-d,l=i&-i,g>=l||g===32&&(l&4194048)!==0)?i:d}function vm(a,i){return(a.pendingLanes&~(a.suspendedLanes&~a.pingedLanes)&i)===0}function QB(a,i){switch(a){case 1:case 2:case 4:case 8:case 64:return i+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return i+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ub(){var a=Lc;return Lc<<=1,(Lc&62914560)===0&&(Lc=4194304),a}function Yg(a){for(var i=[],l=0;31>l;l++)i.push(a);return i}function km(a,i){a.pendingLanes|=i,i!==268435456&&(a.suspendedLanes=0,a.pingedLanes=0,a.warmLanes=0)}function KB(a,i,l,m,d,g){var y=a.pendingLanes;a.pendingLanes=l,a.suspendedLanes=0,a.pingedLanes=0,a.warmLanes=0,a.expiredLanes&=l,a.entangledLanes&=l,a.errorRecoveryDisabledLanes&=l,a.shellSuspendCounter=0;var b=a.entanglements,j=a.expirationTimes,R=a.hiddenUpdates;for(l=y&~l;0<l;){var L=31-Sa(l),P=1<<L;b[L]=0,j[L]=-1;var E=R[L];if(E!==null)for(R[L]=null,L=0;L<E.length;L++){var O=E[L];O!==null&&(O.lane&=-536870913)}l&=~P}m!==0&&Gb(a,m,0),g!==0&&d===0&&a.tag!==0&&(a.suspendedLanes|=g&~(y&~i))}function Gb(a,i,l){a.pendingLanes|=i,a.suspendedLanes&=~i;var m=31-Sa(i);a.entangledLanes|=i,a.entanglements[m]=a.entanglements[m]|1073741824|l&261930}function Hb(a,i){var l=a.entangledLanes|=i;for(a=a.entanglements;l;){var m=31-Sa(l),d=1<<m;d&i|a[m]&i&&(a[m]|=i),l&=~d}}function Vb(a,i){var l=i&-i;return l=(l&42)!==0?1:Qg(l),(l&(a.suspendedLanes|i))!==0?0:l}function Qg(a){switch(a){case 2:a=1;break;case 8:a=4;break;case 32:a=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:a=128;break;case 268435456:a=134217728;break;default:a=0}return a}function Kg(a){return a&=-a,2<a?8<a?(a&134217727)!==0?32:268435456:8:2}function Yb(){var a=K.p;return a!==0?a:(a=window.event,a===void 0?32:RC(a.type))}function Qb(a,i){var l=K.p;try{return K.p=a,i()}finally{K.p=l}}var Zi=Math.random().toString(36).slice(2),Pt="__reactFiber$"+Zi,oa="__reactProps$"+Zi,Wl="__reactContainer$"+Zi,Zg="__reactEvents$"+Zi,ZB="__reactListeners$"+Zi,XB="__reactHandles$"+Zi,Kb="__reactResources$"+Zi,bm="__reactMarker$"+Zi;function Xg(a){delete a[Pt],delete a[oa],delete a[Zg],delete a[ZB],delete a[XB]}function Fl(a){var i=a[Pt];if(i)return i;for(var l=a.parentNode;l;){if(i=l[Wl]||l[Pt]){if(l=i.alternate,i.child!==null||l!==null&&l.child!==null)for(a=fC(a);a!==null;){if(l=a[Pt])return l;a=fC(a)}return i}a=l,l=a.parentNode}return null}function Ul(a){if(a=a[Pt]||a[Wl]){var i=a.tag;if(i===5||i===6||i===13||i===31||i===26||i===27||i===3)return a}return null}function wm(a){var i=a.tag;if(i===5||i===26||i===27||i===6)return a.stateNode;throw Error(n(33))}function Gl(a){var i=a[Kb];return i||(i=a[Kb]={hoistableStyles:new Map,hoistableScripts:new Map}),i}function qt(a){a[bm]=!0}var Zb=new Set,Xb={};function to(a,i){Hl(a,i),Hl(a+"Capture",i)}function Hl(a,i){for(Xb[a]=i,a=0;a<i.length;a++)Zb.add(i[a])}var JB=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),Jb={},ew={};function e3(a){return Gg.call(ew,a)?!0:Gg.call(Jb,a)?!1:JB.test(a)?ew[a]=!0:(Jb[a]=!0,!1)}function Pc(a,i,l){if(e3(i))if(l===null)a.removeAttribute(i);else{switch(typeof l){case"undefined":case"function":case"symbol":a.removeAttribute(i);return;case"boolean":var m=i.toLowerCase().slice(0,5);if(m!=="data-"&&m!=="aria-"){a.removeAttribute(i);return}}a.setAttribute(i,""+l)}}function Wc(a,i,l){if(l===null)a.removeAttribute(i);else{switch(typeof l){case"undefined":case"function":case"symbol":case"boolean":a.removeAttribute(i);return}a.setAttribute(i,""+l)}}function ei(a,i,l,m){if(m===null)a.removeAttribute(l);else{switch(typeof m){case"undefined":case"function":case"symbol":case"boolean":a.removeAttribute(l);return}a.setAttributeNS(i,l,""+m)}}function Ga(a){switch(typeof a){case"bigint":case"boolean":case"number":case"string":case"undefined":return a;case"object":return a;default:return""}}function tw(a){var i=a.type;return(a=a.nodeName)&&a.toLowerCase()==="input"&&(i==="checkbox"||i==="radio")}function t3(a,i,l){var m=Object.getOwnPropertyDescriptor(a.constructor.prototype,i);if(!a.hasOwnProperty(i)&&typeof m<"u"&&typeof m.get=="function"&&typeof m.set=="function"){var d=m.get,g=m.set;return Object.defineProperty(a,i,{configurable:!0,get:function(){return d.call(this)},set:function(y){l=""+y,g.call(this,y)}}),Object.defineProperty(a,i,{enumerable:m.enumerable}),{getValue:function(){return l},setValue:function(y){l=""+y},stopTracking:function(){a._valueTracker=null,delete a[i]}}}}function Jg(a){if(!a._valueTracker){var i=tw(a)?"checked":"value";a._valueTracker=t3(a,i,""+a[i])}}function aw(a){if(!a)return!1;var i=a._valueTracker;if(!i)return!0;var l=i.getValue(),m="";return a&&(m=tw(a)?a.checked?"true":"false":a.value),a=m,a!==l?(i.setValue(a),!0):!1}function Fc(a){if(a=a||(typeof document<"u"?document:void 0),typeof a>"u")return null;try{return a.activeElement||a.body}catch{return a.body}}var a3=/[\n"\\]/g;function Ha(a){return a.replace(a3,function(i){return"\\"+i.charCodeAt(0).toString(16)+" "})}function e_(a,i,l,m,d,g,y,b){a.name="",y!=null&&typeof y!="function"&&typeof y!="symbol"&&typeof y!="boolean"?a.type=y:a.removeAttribute("type"),i!=null?y==="number"?(i===0&&a.value===""||a.value!=i)&&(a.value=""+Ga(i)):a.value!==""+Ga(i)&&(a.value=""+Ga(i)):y!=="submit"&&y!=="reset"||a.removeAttribute("value"),i!=null?t_(a,y,Ga(i)):l!=null?t_(a,y,Ga(l)):m!=null&&a.removeAttribute("value"),d==null&&g!=null&&(a.defaultChecked=!!g),d!=null&&(a.checked=d&&typeof d!="function"&&typeof d!="symbol"),b!=null&&typeof b!="function"&&typeof b!="symbol"&&typeof b!="boolean"?a.name=""+Ga(b):a.removeAttribute("name")}function sw(a,i,l,m,d,g,y,b){if(g!=null&&typeof g!="function"&&typeof g!="symbol"&&typeof g!="boolean"&&(a.type=g),i!=null||l!=null){if(!(g!=="submit"&&g!=="reset"||i!=null)){Jg(a);return}l=l!=null?""+Ga(l):"",i=i!=null?""+Ga(i):l,b||i===a.value||(a.value=i),a.defaultValue=i}m=m??d,m=typeof m!="function"&&typeof m!="symbol"&&!!m,a.checked=b?a.checked:!!m,a.defaultChecked=!!m,y!=null&&typeof y!="function"&&typeof y!="symbol"&&typeof y!="boolean"&&(a.name=y),Jg(a)}function t_(a,i,l){i==="number"&&Fc(a.ownerDocument)===a||a.defaultValue===""+l||(a.defaultValue=""+l)}function Vl(a,i,l,m){if(a=a.options,i){i={};for(var d=0;d<l.length;d++)i["$"+l[d]]=!0;for(l=0;l<a.length;l++)d=i.hasOwnProperty("$"+a[l].value),a[l].selected!==d&&(a[l].selected=d),d&&m&&(a[l].defaultSelected=!0)}else{for(l=""+Ga(l),i=null,d=0;d<a.length;d++){if(a[d].value===l){a[d].selected=!0,m&&(a[d].defaultSelected=!0);return}i!==null||a[d].disabled||(i=a[d])}i!==null&&(i.selected=!0)}}function iw(a,i,l){if(i!=null&&(i=""+Ga(i),i!==a.value&&(a.value=i),l==null)){a.defaultValue!==i&&(a.defaultValue=i);return}a.defaultValue=l!=null?""+Ga(l):""}function nw(a,i,l,m){if(i==null){if(m!=null){if(l!=null)throw Error(n(92));if(Qt(m)){if(1<m.length)throw Error(n(93));m=m[0]}l=m}l==null&&(l=""),i=l}l=Ga(i),a.defaultValue=l,m=a.textContent,m===l&&m!==""&&m!==null&&(a.value=m),Jg(a)}function Yl(a,i){if(i){var l=a.firstChild;if(l&&l===a.lastChild&&l.nodeType===3){l.nodeValue=i;return}}a.textContent=i}var s3=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function ow(a,i,l){var m=i.indexOf("--")===0;l==null||typeof l=="boolean"||l===""?m?a.setProperty(i,""):i==="float"?a.cssFloat="":a[i]="":m?a.setProperty(i,l):typeof l!="number"||l===0||s3.has(i)?i==="float"?a.cssFloat=l:a[i]=(""+l).trim():a[i]=l+"px"}function lw(a,i,l){if(i!=null&&typeof i!="object")throw Error(n(62));if(a=a.style,l!=null){for(var m in l)!l.hasOwnProperty(m)||i!=null&&i.hasOwnProperty(m)||(m.indexOf("--")===0?a.setProperty(m,""):m==="float"?a.cssFloat="":a[m]="");for(var d in i)m=i[d],i.hasOwnProperty(d)&&l[d]!==m&&ow(a,d,m)}else for(var g in i)i.hasOwnProperty(g)&&ow(a,g,i[g])}function a_(a){if(a.indexOf("-")===-1)return!1;switch(a){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var i3=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),n3=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function Uc(a){return n3.test(""+a)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":a}function ti(){}var s_=null;function i_(a){return a=a.target||a.srcElement||window,a.correspondingUseElement&&(a=a.correspondingUseElement),a.nodeType===3?a.parentNode:a}var Ql=null,Kl=null;function rw(a){var i=Ul(a);if(i&&(a=i.stateNode)){var l=a[oa]||null;e:switch(a=i.stateNode,i.type){case"input":if(e_(a,l.value,l.defaultValue,l.defaultValue,l.checked,l.defaultChecked,l.type,l.name),i=l.name,l.type==="radio"&&i!=null){for(l=a;l.parentNode;)l=l.parentNode;for(l=l.querySelectorAll('input[name="'+Ha(""+i)+'"][type="radio"]'),i=0;i<l.length;i++){var m=l[i];if(m!==a&&m.form===a.form){var d=m[oa]||null;if(!d)throw Error(n(90));e_(m,d.value,d.defaultValue,d.defaultValue,d.checked,d.defaultChecked,d.type,d.name)}}for(i=0;i<l.length;i++)m=l[i],m.form===a.form&&aw(m)}break e;case"textarea":iw(a,l.value,l.defaultValue);break e;case"select":i=l.value,i!=null&&Vl(a,!!l.multiple,i,!1)}}}var n_=!1;function mw(a,i,l){if(n_)return a(i,l);n_=!0;try{var m=a(i);return m}finally{if(n_=!1,(Ql!==null||Kl!==null)&&(Np(),Ql&&(i=Ql,a=Kl,Kl=Ql=null,rw(i),a)))for(i=0;i<a.length;i++)rw(a[i])}}function xm(a,i){var l=a.stateNode;if(l===null)return null;var m=l[oa]||null;if(m===null)return null;l=m[i];e:switch(i){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(m=!m.disabled)||(a=a.type,m=!(a==="button"||a==="input"||a==="select"||a==="textarea")),a=!m;break e;default:a=!1}if(a)return null;if(l&&typeof l!="function")throw Error(n(231,i,typeof l));return l}var ai=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),o_=!1;if(ai)try{var Cm={};Object.defineProperty(Cm,"passive",{get:function(){o_=!0}}),window.addEventListener("test",Cm,Cm),window.removeEventListener("test",Cm,Cm)}catch{o_=!1}var Xi=null,l_=null,Gc=null;function uw(){if(Gc)return Gc;var a,i=l_,l=i.length,m,d="value"in Xi?Xi.value:Xi.textContent,g=d.length;for(a=0;a<l&&i[a]===d[a];a++);var y=l-a;for(m=1;m<=y&&i[l-m]===d[g-m];m++);return Gc=d.slice(a,1<m?1-m:void 0)}function Hc(a){var i=a.keyCode;return"charCode"in a?(a=a.charCode,a===0&&i===13&&(a=13)):a=i,a===10&&(a=13),32<=a||a===13?a:0}function Vc(){return!0}function cw(){return!1}function la(a){function i(l,m,d,g,y){this._reactName=l,this._targetInst=d,this.type=m,this.nativeEvent=g,this.target=y,this.currentTarget=null;for(var b in a)a.hasOwnProperty(b)&&(l=a[b],this[b]=l?l(g):g[b]);return this.isDefaultPrevented=(g.defaultPrevented!=null?g.defaultPrevented:g.returnValue===!1)?Vc:cw,this.isPropagationStopped=cw,this}return v(i.prototype,{preventDefault:function(){this.defaultPrevented=!0;var l=this.nativeEvent;l&&(l.preventDefault?l.preventDefault():typeof l.returnValue!="unknown"&&(l.returnValue=!1),this.isDefaultPrevented=Vc)},stopPropagation:function(){var l=this.nativeEvent;l&&(l.stopPropagation?l.stopPropagation():typeof l.cancelBubble!="unknown"&&(l.cancelBubble=!0),this.isPropagationStopped=Vc)},persist:function(){},isPersistent:Vc}),i}var ao={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Yc=la(ao),jm=v({},ao,{view:0,detail:0}),o3=la(jm),r_,m_,Tm,Qc=v({},jm,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:c_,button:0,buttons:0,relatedTarget:function(a){return a.relatedTarget===void 0?a.fromElement===a.srcElement?a.toElement:a.fromElement:a.relatedTarget},movementX:function(a){return"movementX"in a?a.movementX:(a!==Tm&&(Tm&&a.type==="mousemove"?(r_=a.screenX-Tm.screenX,m_=a.screenY-Tm.screenY):m_=r_=0,Tm=a),r_)},movementY:function(a){return"movementY"in a?a.movementY:m_}}),pw=la(Qc),l3=v({},Qc,{dataTransfer:0}),r3=la(l3),m3=v({},jm,{relatedTarget:0}),u_=la(m3),u3=v({},ao,{animationName:0,elapsedTime:0,pseudoElement:0}),c3=la(u3),p3=v({},ao,{clipboardData:function(a){return"clipboardData"in a?a.clipboardData:window.clipboardData}}),d3=la(p3),g3=v({},ao,{data:0}),dw=la(g3),_3={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},h3={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},f3={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function y3(a){var i=this.nativeEvent;return i.getModifierState?i.getModifierState(a):(a=f3[a])?!!i[a]:!1}function c_(){return y3}var v3=v({},jm,{key:function(a){if(a.key){var i=_3[a.key]||a.key;if(i!=="Unidentified")return i}return a.type==="keypress"?(a=Hc(a),a===13?"Enter":String.fromCharCode(a)):a.type==="keydown"||a.type==="keyup"?h3[a.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:c_,charCode:function(a){return a.type==="keypress"?Hc(a):0},keyCode:function(a){return a.type==="keydown"||a.type==="keyup"?a.keyCode:0},which:function(a){return a.type==="keypress"?Hc(a):a.type==="keydown"||a.type==="keyup"?a.keyCode:0}}),k3=la(v3),b3=v({},Qc,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),gw=la(b3),w3=v({},jm,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:c_}),x3=la(w3),C3=v({},ao,{propertyName:0,elapsedTime:0,pseudoElement:0}),j3=la(C3),T3=v({},Qc,{deltaX:function(a){return"deltaX"in a?a.deltaX:"wheelDeltaX"in a?-a.wheelDeltaX:0},deltaY:function(a){return"deltaY"in a?a.deltaY:"wheelDeltaY"in a?-a.wheelDeltaY:"wheelDelta"in a?-a.wheelDelta:0},deltaZ:0,deltaMode:0}),D3=la(T3),S3=v({},ao,{newState:0,oldState:0}),A3=la(S3),z3=[9,13,27,32],p_=ai&&"CompositionEvent"in window,Dm=null;ai&&"documentMode"in document&&(Dm=document.documentMode);var N3=ai&&"TextEvent"in window&&!Dm,_w=ai&&(!p_||Dm&&8<Dm&&11>=Dm),hw=" ",fw=!1;function yw(a,i){switch(a){case"keyup":return z3.indexOf(i.keyCode)!==-1;case"keydown":return i.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function vw(a){return a=a.detail,typeof a=="object"&&"data"in a?a.data:null}var Zl=!1;function M3(a,i){switch(a){case"compositionend":return vw(i);case"keypress":return i.which!==32?null:(fw=!0,hw);case"textInput":return a=i.data,a===hw&&fw?null:a;default:return null}}function R3(a,i){if(Zl)return a==="compositionend"||!p_&&yw(a,i)?(a=uw(),Gc=l_=Xi=null,Zl=!1,a):null;switch(a){case"paste":return null;case"keypress":if(!(i.ctrlKey||i.altKey||i.metaKey)||i.ctrlKey&&i.altKey){if(i.char&&1<i.char.length)return i.char;if(i.which)return String.fromCharCode(i.which)}return null;case"compositionend":return _w&&i.locale!=="ko"?null:i.data;default:return null}}var E3={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function kw(a){var i=a&&a.nodeName&&a.nodeName.toLowerCase();return i==="input"?!!E3[a.type]:i==="textarea"}function bw(a,i,l,m){Ql?Kl?Kl.push(m):Kl=[m]:Ql=m,i=$p(i,"onChange"),0<i.length&&(l=new Yc("onChange","change",null,l,m),a.push({event:l,listeners:i}))}var Sm=null,Am=null;function I3(a){sC(a,0)}function Kc(a){var i=wm(a);if(aw(i))return a}function ww(a,i){if(a==="change")return i}var xw=!1;if(ai){var d_;if(ai){var g_="oninput"in document;if(!g_){var Cw=document.createElement("div");Cw.setAttribute("oninput","return;"),g_=typeof Cw.oninput=="function"}d_=g_}else d_=!1;xw=d_&&(!document.documentMode||9<document.documentMode)}function jw(){Sm&&(Sm.detachEvent("onpropertychange",Tw),Am=Sm=null)}function Tw(a){if(a.propertyName==="value"&&Kc(Am)){var i=[];bw(i,Am,a,i_(a)),mw(I3,i)}}function q3(a,i,l){a==="focusin"?(jw(),Sm=i,Am=l,Sm.attachEvent("onpropertychange",Tw)):a==="focusout"&&jw()}function O3(a){if(a==="selectionchange"||a==="keyup"||a==="keydown")return Kc(Am)}function $3(a,i){if(a==="click")return Kc(i)}function L3(a,i){if(a==="input"||a==="change")return Kc(i)}function B3(a,i){return a===i&&(a!==0||1/a===1/i)||a!==a&&i!==i}var Aa=typeof Object.is=="function"?Object.is:B3;function zm(a,i){if(Aa(a,i))return!0;if(typeof a!="object"||a===null||typeof i!="object"||i===null)return!1;var l=Object.keys(a),m=Object.keys(i);if(l.length!==m.length)return!1;for(m=0;m<l.length;m++){var d=l[m];if(!Gg.call(i,d)||!Aa(a[d],i[d]))return!1}return!0}function Dw(a){for(;a&&a.firstChild;)a=a.firstChild;return a}function Sw(a,i){var l=Dw(a);a=0;for(var m;l;){if(l.nodeType===3){if(m=a+l.textContent.length,a<=i&&m>=i)return{node:l,offset:i-a};a=m}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=Dw(l)}}function Aw(a,i){return a&&i?a===i?!0:a&&a.nodeType===3?!1:i&&i.nodeType===3?Aw(a,i.parentNode):"contains"in a?a.contains(i):a.compareDocumentPosition?!!(a.compareDocumentPosition(i)&16):!1:!1}function zw(a){a=a!=null&&a.ownerDocument!=null&&a.ownerDocument.defaultView!=null?a.ownerDocument.defaultView:window;for(var i=Fc(a.document);i instanceof a.HTMLIFrameElement;){try{var l=typeof i.contentWindow.location.href=="string"}catch{l=!1}if(l)a=i.contentWindow;else break;i=Fc(a.document)}return i}function __(a){var i=a&&a.nodeName&&a.nodeName.toLowerCase();return i&&(i==="input"&&(a.type==="text"||a.type==="search"||a.type==="tel"||a.type==="url"||a.type==="password")||i==="textarea"||a.contentEditable==="true")}var P3=ai&&"documentMode"in document&&11>=document.documentMode,Xl=null,h_=null,Nm=null,f_=!1;function Nw(a,i,l){var m=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;f_||Xl==null||Xl!==Fc(m)||(m=Xl,"selectionStart"in m&&__(m)?m={start:m.selectionStart,end:m.selectionEnd}:(m=(m.ownerDocument&&m.ownerDocument.defaultView||window).getSelection(),m={anchorNode:m.anchorNode,anchorOffset:m.anchorOffset,focusNode:m.focusNode,focusOffset:m.focusOffset}),Nm&&zm(Nm,m)||(Nm=m,m=$p(h_,"onSelect"),0<m.length&&(i=new Yc("onSelect","select",null,i,l),a.push({event:i,listeners:m}),i.target=Xl)))}function so(a,i){var l={};return l[a.toLowerCase()]=i.toLowerCase(),l["Webkit"+a]="webkit"+i,l["Moz"+a]="moz"+i,l}var Jl={animationend:so("Animation","AnimationEnd"),animationiteration:so("Animation","AnimationIteration"),animationstart:so("Animation","AnimationStart"),transitionrun:so("Transition","TransitionRun"),transitionstart:so("Transition","TransitionStart"),transitioncancel:so("Transition","TransitionCancel"),transitionend:so("Transition","TransitionEnd")},y_={},Mw={};ai&&(Mw=document.createElement("div").style,"AnimationEvent"in window||(delete Jl.animationend.animation,delete Jl.animationiteration.animation,delete Jl.animationstart.animation),"TransitionEvent"in window||delete Jl.transitionend.transition);function io(a){if(y_[a])return y_[a];if(!Jl[a])return a;var i=Jl[a],l;for(l in i)if(i.hasOwnProperty(l)&&l in Mw)return y_[a]=i[l];return a}var Rw=io("animationend"),Ew=io("animationiteration"),Iw=io("animationstart"),W3=io("transitionrun"),F3=io("transitionstart"),U3=io("transitioncancel"),qw=io("transitionend"),Ow=new Map,v_="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");v_.push("scrollEnd");function ds(a,i){Ow.set(a,i),to(i,[a])}var Zc=typeof reportError=="function"?reportError:function(a){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var i=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof a=="object"&&a!==null&&typeof a.message=="string"?String(a.message):String(a),error:a});if(!window.dispatchEvent(i))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",a);return}console.error(a)},Va=[],er=0,k_=0;function Xc(){for(var a=er,i=k_=er=0;i<a;){var l=Va[i];Va[i++]=null;var m=Va[i];Va[i++]=null;var d=Va[i];Va[i++]=null;var g=Va[i];if(Va[i++]=null,m!==null&&d!==null){var y=m.pending;y===null?d.next=d:(d.next=y.next,y.next=d),m.pending=d}g!==0&&$w(l,d,g)}}function Jc(a,i,l,m){Va[er++]=a,Va[er++]=i,Va[er++]=l,Va[er++]=m,k_|=m,a.lanes|=m,a=a.alternate,a!==null&&(a.lanes|=m)}function b_(a,i,l,m){return Jc(a,i,l,m),ep(a)}function no(a,i){return Jc(a,null,null,i),ep(a)}function $w(a,i,l){a.lanes|=l;var m=a.alternate;m!==null&&(m.lanes|=l);for(var d=!1,g=a.return;g!==null;)g.childLanes|=l,m=g.alternate,m!==null&&(m.childLanes|=l),g.tag===22&&(a=g.stateNode,a===null||a._visibility&1||(d=!0)),a=g,g=g.return;return a.tag===3?(g=a.stateNode,d&&i!==null&&(d=31-Sa(l),a=g.hiddenUpdates,m=a[d],m===null?a[d]=[i]:m.push(i),i.lane=l|536870912),g):null}function ep(a){if(50<Jm)throw Jm=0,zh=null,Error(n(185));for(var i=a.return;i!==null;)a=i,i=a.return;return a.tag===3?a.stateNode:null}var tr={};function G3(a,i,l,m){this.tag=a,this.key=l,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=i,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=m,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function za(a,i,l,m){return new G3(a,i,l,m)}function w_(a){return a=a.prototype,!(!a||!a.isReactComponent)}function si(a,i){var l=a.alternate;return l===null?(l=za(a.tag,i,a.key,a.mode),l.elementType=a.elementType,l.type=a.type,l.stateNode=a.stateNode,l.alternate=a,a.alternate=l):(l.pendingProps=i,l.type=a.type,l.flags=0,l.subtreeFlags=0,l.deletions=null),l.flags=a.flags&65011712,l.childLanes=a.childLanes,l.lanes=a.lanes,l.child=a.child,l.memoizedProps=a.memoizedProps,l.memoizedState=a.memoizedState,l.updateQueue=a.updateQueue,i=a.dependencies,l.dependencies=i===null?null:{lanes:i.lanes,firstContext:i.firstContext},l.sibling=a.sibling,l.index=a.index,l.ref=a.ref,l.refCleanup=a.refCleanup,l}function Lw(a,i){a.flags&=65011714;var l=a.alternate;return l===null?(a.childLanes=0,a.lanes=i,a.child=null,a.subtreeFlags=0,a.memoizedProps=null,a.memoizedState=null,a.updateQueue=null,a.dependencies=null,a.stateNode=null):(a.childLanes=l.childLanes,a.lanes=l.lanes,a.child=l.child,a.subtreeFlags=0,a.deletions=null,a.memoizedProps=l.memoizedProps,a.memoizedState=l.memoizedState,a.updateQueue=l.updateQueue,a.type=l.type,i=l.dependencies,a.dependencies=i===null?null:{lanes:i.lanes,firstContext:i.firstContext}),a}function tp(a,i,l,m,d,g){var y=0;if(m=a,typeof a=="function")w_(a)&&(y=1);else if(typeof a=="string")y=KP(a,l,ee.current)?26:a==="html"||a==="head"||a==="body"?27:5;else e:switch(a){case ta:return a=za(31,l,i,d),a.elementType=ta,a.lanes=g,a;case q:return oo(l.children,d,g,i);case I:y=8,d|=24;break;case F:return a=za(12,l,i,d|2),a.elementType=F,a.lanes=g,a;case Ie:return a=za(13,l,i,d),a.elementType=Ie,a.lanes=g,a;case De:return a=za(19,l,i,d),a.elementType=De,a.lanes=g,a;default:if(typeof a=="object"&&a!==null)switch(a.$$typeof){case te:y=10;break e;case se:y=9;break e;case ge:y=11;break e;case ye:y=14;break e;case Bt:y=16,m=null;break e}y=29,l=Error(n(130,a===null?"null":typeof a,"")),m=null}return i=za(y,l,i,d),i.elementType=a,i.type=m,i.lanes=g,i}function oo(a,i,l,m){return a=za(7,a,m,i),a.lanes=l,a}function x_(a,i,l){return a=za(6,a,null,i),a.lanes=l,a}function Bw(a){var i=za(18,null,null,0);return i.stateNode=a,i}function C_(a,i,l){return i=za(4,a.children!==null?a.children:[],a.key,i),i.lanes=l,i.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation},i}var Pw=new WeakMap;function Ya(a,i){if(typeof a=="object"&&a!==null){var l=Pw.get(a);return l!==void 0?l:(i={value:a,source:i,stack:Bb(i)},Pw.set(a,i),i)}return{value:a,source:i,stack:Bb(i)}}var ar=[],sr=0,ap=null,Mm=0,Qa=[],Ka=0,Ji=null,Is=1,qs="";function ii(a,i){ar[sr++]=Mm,ar[sr++]=ap,ap=a,Mm=i}function Ww(a,i,l){Qa[Ka++]=Is,Qa[Ka++]=qs,Qa[Ka++]=Ji,Ji=a;var m=Is;a=qs;var d=32-Sa(m)-1;m&=~(1<<d),l+=1;var g=32-Sa(i)+d;if(30<g){var y=d-d%5;g=(m&(1<<y)-1).toString(32),m>>=y,d-=y,Is=1<<32-Sa(i)+d|l<<d|m,qs=g+a}else Is=1<<g|l<<d|m,qs=a}function j_(a){a.return!==null&&(ii(a,1),Ww(a,1,0))}function T_(a){for(;a===ap;)ap=ar[--sr],ar[sr]=null,Mm=ar[--sr],ar[sr]=null;for(;a===Ji;)Ji=Qa[--Ka],Qa[Ka]=null,qs=Qa[--Ka],Qa[Ka]=null,Is=Qa[--Ka],Qa[Ka]=null}function Fw(a,i){Qa[Ka++]=Is,Qa[Ka++]=qs,Qa[Ka++]=Ji,Is=i.id,qs=i.overflow,Ji=a}var Wt=null,mt=null,Be=!1,en=null,Za=!1,D_=Error(n(519));function tn(a){var i=Error(n(418,1<arguments.length&&arguments[1]!==void 0&&arguments[1]?"text":"HTML",""));throw Rm(Ya(i,a)),D_}function Uw(a){var i=a.stateNode,l=a.type,m=a.memoizedProps;switch(i[Pt]=a,i[oa]=m,l){case"dialog":Re("cancel",i),Re("close",i);break;case"iframe":case"object":case"embed":Re("load",i);break;case"video":case"audio":for(l=0;l<tu.length;l++)Re(tu[l],i);break;case"source":Re("error",i);break;case"img":case"image":case"link":Re("error",i),Re("load",i);break;case"details":Re("toggle",i);break;case"input":Re("invalid",i),sw(i,m.value,m.defaultValue,m.checked,m.defaultChecked,m.type,m.name,!0);break;case"select":Re("invalid",i);break;case"textarea":Re("invalid",i),nw(i,m.value,m.defaultValue,m.children)}l=m.children,typeof l!="string"&&typeof l!="number"&&typeof l!="bigint"||i.textContent===""+l||m.suppressHydrationWarning===!0||lC(i.textContent,l)?(m.popover!=null&&(Re("beforetoggle",i),Re("toggle",i)),m.onScroll!=null&&Re("scroll",i),m.onScrollEnd!=null&&Re("scrollend",i),m.onClick!=null&&(i.onclick=ti),i=!0):i=!1,i||tn(a,!0)}function Gw(a){for(Wt=a.return;Wt;)switch(Wt.tag){case 5:case 31:case 13:Za=!1;return;case 27:case 3:Za=!0;return;default:Wt=Wt.return}}function ir(a){if(a!==Wt)return!1;if(!Be)return Gw(a),Be=!0,!1;var i=a.tag,l;if((l=i!==3&&i!==27)&&((l=i===5)&&(l=a.type,l=!(l!=="form"&&l!=="button")||Gh(a.type,a.memoizedProps)),l=!l),l&&mt&&tn(a),Gw(a),i===13){if(a=a.memoizedState,a=a!==null?a.dehydrated:null,!a)throw Error(n(317));mt=hC(a)}else if(i===31){if(a=a.memoizedState,a=a!==null?a.dehydrated:null,!a)throw Error(n(317));mt=hC(a)}else i===27?(i=mt,hn(a.type)?(a=Kh,Kh=null,mt=a):mt=i):mt=Wt?Ja(a.stateNode.nextSibling):null;return!0}function lo(){mt=Wt=null,Be=!1}function S_(){var a=en;return a!==null&&(ca===null?ca=a:ca.push.apply(ca,a),en=null),a}function Rm(a){en===null?en=[a]:en.push(a)}var A_=S(null),ro=null,ni=null;function an(a,i,l){X(A_,i._currentValue),i._currentValue=l}function oi(a){a._currentValue=A_.current,W(A_)}function z_(a,i,l){for(;a!==null;){var m=a.alternate;if((a.childLanes&i)!==i?(a.childLanes|=i,m!==null&&(m.childLanes|=i)):m!==null&&(m.childLanes&i)!==i&&(m.childLanes|=i),a===l)break;a=a.return}}function N_(a,i,l,m){var d=a.child;for(d!==null&&(d.return=a);d!==null;){var g=d.dependencies;if(g!==null){var y=d.child;g=g.firstContext;e:for(;g!==null;){var b=g;g=d;for(var j=0;j<i.length;j++)if(b.context===i[j]){g.lanes|=l,b=g.alternate,b!==null&&(b.lanes|=l),z_(g.return,l,a),m||(y=null);break e}g=b.next}}else if(d.tag===18){if(y=d.return,y===null)throw Error(n(341));y.lanes|=l,g=y.alternate,g!==null&&(g.lanes|=l),z_(y,l,a),y=null}else y=d.child;if(y!==null)y.return=d;else for(y=d;y!==null;){if(y===a){y=null;break}if(d=y.sibling,d!==null){d.return=y.return,y=d;break}y=y.return}d=y}}function nr(a,i,l,m){a=null;for(var d=i,g=!1;d!==null;){if(!g){if((d.flags&524288)!==0)g=!0;else if((d.flags&262144)!==0)break}if(d.tag===10){var y=d.alternate;if(y===null)throw Error(n(387));if(y=y.memoizedProps,y!==null){var b=d.type;Aa(d.pendingProps.value,y.value)||(a!==null?a.push(b):a=[b])}}else if(d===We.current){if(y=d.alternate,y===null)throw Error(n(387));y.memoizedState.memoizedState!==d.memoizedState.memoizedState&&(a!==null?a.push(ou):a=[ou])}d=d.return}a!==null&&N_(i,a,l,m),i.flags|=262144}function sp(a){for(a=a.firstContext;a!==null;){if(!Aa(a.context._currentValue,a.memoizedValue))return!0;a=a.next}return!1}function mo(a){ro=a,ni=null,a=a.dependencies,a!==null&&(a.firstContext=null)}function Ft(a){return Hw(ro,a)}function ip(a,i){return ro===null&&mo(a),Hw(a,i)}function Hw(a,i){var l=i._currentValue;if(i={context:i,memoizedValue:l,next:null},ni===null){if(a===null)throw Error(n(308));ni=i,a.dependencies={lanes:0,firstContext:i},a.flags|=524288}else ni=ni.next=i;return l}var H3=typeof AbortController<"u"?AbortController:function(){var a=[],i=this.signal={aborted:!1,addEventListener:function(l,m){a.push(m)}};this.abort=function(){i.aborted=!0,a.forEach(function(l){return l()})}},V3=t.unstable_scheduleCallback,Y3=t.unstable_NormalPriority,Dt={$$typeof:te,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function M_(){return{controller:new H3,data:new Map,refCount:0}}function Em(a){a.refCount--,a.refCount===0&&V3(Y3,function(){a.controller.abort()})}var Im=null,R_=0,or=0,lr=null;function Q3(a,i){if(Im===null){var l=Im=[];R_=0,or=qh(),lr={status:"pending",value:void 0,then:function(m){l.push(m)}}}return R_++,i.then(Vw,Vw),i}function Vw(){if(--R_===0&&Im!==null){lr!==null&&(lr.status="fulfilled");var a=Im;Im=null,or=0,lr=null;for(var i=0;i<a.length;i++)(0,a[i])()}}function K3(a,i){var l=[],m={status:"pending",value:null,reason:null,then:function(d){l.push(d)}};return a.then(function(){m.status="fulfilled",m.value=i;for(var d=0;d<l.length;d++)(0,l[d])(i)},function(d){for(m.status="rejected",m.reason=d,d=0;d<l.length;d++)(0,l[d])(void 0)}),m}var Yw=$.S;$.S=function(a,i){Nx=Ta(),typeof i=="object"&&i!==null&&typeof i.then=="function"&&Q3(a,i),Yw!==null&&Yw(a,i)};var uo=S(null);function E_(){var a=uo.current;return a!==null?a:st.pooledCache}function np(a,i){i===null?X(uo,uo.current):X(uo,i.pool)}function Qw(){var a=E_();return a===null?null:{parent:Dt._currentValue,pool:a}}var rr=Error(n(460)),I_=Error(n(474)),op=Error(n(542)),lp={then:function(){}};function Kw(a){return a=a.status,a==="fulfilled"||a==="rejected"}function Zw(a,i,l){switch(l=a[l],l===void 0?a.push(i):l!==i&&(i.then(ti,ti),i=l),i.status){case"fulfilled":return i.value;case"rejected":throw a=i.reason,Jw(a),a;default:if(typeof i.status=="string")i.then(ti,ti);else{if(a=st,a!==null&&100<a.shellSuspendCounter)throw Error(n(482));a=i,a.status="pending",a.then(function(m){if(i.status==="pending"){var d=i;d.status="fulfilled",d.value=m}},function(m){if(i.status==="pending"){var d=i;d.status="rejected",d.reason=m}})}switch(i.status){case"fulfilled":return i.value;case"rejected":throw a=i.reason,Jw(a),a}throw po=i,rr}}function co(a){try{var i=a._init;return i(a._payload)}catch(l){throw l!==null&&typeof l=="object"&&typeof l.then=="function"?(po=l,rr):l}}var po=null;function Xw(){if(po===null)throw Error(n(459));var a=po;return po=null,a}function Jw(a){if(a===rr||a===op)throw Error(n(483))}var mr=null,qm=0;function rp(a){var i=qm;return qm+=1,mr===null&&(mr=[]),Zw(mr,a,i)}function Om(a,i){i=i.props.ref,a.ref=i!==void 0?i:null}function mp(a,i){throw i.$$typeof===k?Error(n(525)):(a=Object.prototype.toString.call(i),Error(n(31,a==="[object Object]"?"object with keys {"+Object.keys(i).join(", ")+"}":a)))}function e0(a){function i(z,D){if(a){var M=z.deletions;M===null?(z.deletions=[D],z.flags|=16):M.push(D)}}function l(z,D){if(!a)return null;for(;D!==null;)i(z,D),D=D.sibling;return null}function m(z){for(var D=new Map;z!==null;)z.key!==null?D.set(z.key,z):D.set(z.index,z),z=z.sibling;return D}function d(z,D){return z=si(z,D),z.index=0,z.sibling=null,z}function g(z,D,M){return z.index=M,a?(M=z.alternate,M!==null?(M=M.index,M<D?(z.flags|=67108866,D):M):(z.flags|=67108866,D)):(z.flags|=1048576,D)}function y(z){return a&&z.alternate===null&&(z.flags|=67108866),z}function b(z,D,M,B){return D===null||D.tag!==6?(D=x_(M,z.mode,B),D.return=z,D):(D=d(D,M),D.return=z,D)}function j(z,D,M,B){var me=M.type;return me===q?L(z,D,M.props.children,B,M.key):D!==null&&(D.elementType===me||typeof me=="object"&&me!==null&&me.$$typeof===Bt&&co(me)===D.type)?(D=d(D,M.props),Om(D,M),D.return=z,D):(D=tp(M.type,M.key,M.props,null,z.mode,B),Om(D,M),D.return=z,D)}function R(z,D,M,B){return D===null||D.tag!==4||D.stateNode.containerInfo!==M.containerInfo||D.stateNode.implementation!==M.implementation?(D=C_(M,z.mode,B),D.return=z,D):(D=d(D,M.children||[]),D.return=z,D)}function L(z,D,M,B,me){return D===null||D.tag!==7?(D=oo(M,z.mode,B,me),D.return=z,D):(D=d(D,M),D.return=z,D)}function P(z,D,M){if(typeof D=="string"&&D!==""||typeof D=="number"||typeof D=="bigint")return D=x_(""+D,z.mode,M),D.return=z,D;if(typeof D=="object"&&D!==null){switch(D.$$typeof){case x:return M=tp(D.type,D.key,D.props,null,z.mode,M),Om(M,D),M.return=z,M;case N:return D=C_(D,z.mode,M),D.return=z,D;case Bt:return D=co(D),P(z,D,M)}if(Qt(D)||rt(D))return D=oo(D,z.mode,M,null),D.return=z,D;if(typeof D.then=="function")return P(z,rp(D),M);if(D.$$typeof===te)return P(z,ip(z,D),M);mp(z,D)}return null}function E(z,D,M,B){var me=D!==null?D.key:null;if(typeof M=="string"&&M!==""||typeof M=="number"||typeof M=="bigint")return me!==null?null:b(z,D,""+M,B);if(typeof M=="object"&&M!==null){switch(M.$$typeof){case x:return M.key===me?j(z,D,M,B):null;case N:return M.key===me?R(z,D,M,B):null;case Bt:return M=co(M),E(z,D,M,B)}if(Qt(M)||rt(M))return me!==null?null:L(z,D,M,B,null);if(typeof M.then=="function")return E(z,D,rp(M),B);if(M.$$typeof===te)return E(z,D,ip(z,M),B);mp(z,M)}return null}function O(z,D,M,B,me){if(typeof B=="string"&&B!==""||typeof B=="number"||typeof B=="bigint")return z=z.get(M)||null,b(D,z,""+B,me);if(typeof B=="object"&&B!==null){switch(B.$$typeof){case x:return z=z.get(B.key===null?M:B.key)||null,j(D,z,B,me);case N:return z=z.get(B.key===null?M:B.key)||null,R(D,z,B,me);case Bt:return B=co(B),O(z,D,M,B,me)}if(Qt(B)||rt(B))return z=z.get(M)||null,L(D,z,B,me,null);if(typeof B.then=="function")return O(z,D,M,rp(B),me);if(B.$$typeof===te)return O(z,D,M,ip(D,B),me);mp(D,B)}return null}function ae(z,D,M,B){for(var me=null,Ge=null,ne=D,Ae=D=0,Oe=null;ne!==null&&Ae<M.length;Ae++){ne.index>Ae?(Oe=ne,ne=null):Oe=ne.sibling;var He=E(z,ne,M[Ae],B);if(He===null){ne===null&&(ne=Oe);break}a&&ne&&He.alternate===null&&i(z,ne),D=g(He,D,Ae),Ge===null?me=He:Ge.sibling=He,Ge=He,ne=Oe}if(Ae===M.length)return l(z,ne),Be&&ii(z,Ae),me;if(ne===null){for(;Ae<M.length;Ae++)ne=P(z,M[Ae],B),ne!==null&&(D=g(ne,D,Ae),Ge===null?me=ne:Ge.sibling=ne,Ge=ne);return Be&&ii(z,Ae),me}for(ne=m(ne);Ae<M.length;Ae++)Oe=O(ne,z,Ae,M[Ae],B),Oe!==null&&(a&&Oe.alternate!==null&&ne.delete(Oe.key===null?Ae:Oe.key),D=g(Oe,D,Ae),Ge===null?me=Oe:Ge.sibling=Oe,Ge=Oe);return a&&ne.forEach(function(bn){return i(z,bn)}),Be&&ii(z,Ae),me}function pe(z,D,M,B){if(M==null)throw Error(n(151));for(var me=null,Ge=null,ne=D,Ae=D=0,Oe=null,He=M.next();ne!==null&&!He.done;Ae++,He=M.next()){ne.index>Ae?(Oe=ne,ne=null):Oe=ne.sibling;var bn=E(z,ne,He.value,B);if(bn===null){ne===null&&(ne=Oe);break}a&&ne&&bn.alternate===null&&i(z,ne),D=g(bn,D,Ae),Ge===null?me=bn:Ge.sibling=bn,Ge=bn,ne=Oe}if(He.done)return l(z,ne),Be&&ii(z,Ae),me;if(ne===null){for(;!He.done;Ae++,He=M.next())He=P(z,He.value,B),He!==null&&(D=g(He,D,Ae),Ge===null?me=He:Ge.sibling=He,Ge=He);return Be&&ii(z,Ae),me}for(ne=m(ne);!He.done;Ae++,He=M.next())He=O(ne,z,Ae,He.value,B),He!==null&&(a&&He.alternate!==null&&ne.delete(He.key===null?Ae:He.key),D=g(He,D,Ae),Ge===null?me=He:Ge.sibling=He,Ge=He);return a&&ne.forEach(function(l5){return i(z,l5)}),Be&&ii(z,Ae),me}function at(z,D,M,B){if(typeof M=="object"&&M!==null&&M.type===q&&M.key===null&&(M=M.props.children),typeof M=="object"&&M!==null){switch(M.$$typeof){case x:e:{for(var me=M.key;D!==null;){if(D.key===me){if(me=M.type,me===q){if(D.tag===7){l(z,D.sibling),B=d(D,M.props.children),B.return=z,z=B;break e}}else if(D.elementType===me||typeof me=="object"&&me!==null&&me.$$typeof===Bt&&co(me)===D.type){l(z,D.sibling),B=d(D,M.props),Om(B,M),B.return=z,z=B;break e}l(z,D);break}else i(z,D);D=D.sibling}M.type===q?(B=oo(M.props.children,z.mode,B,M.key),B.return=z,z=B):(B=tp(M.type,M.key,M.props,null,z.mode,B),Om(B,M),B.return=z,z=B)}return y(z);case N:e:{for(me=M.key;D!==null;){if(D.key===me)if(D.tag===4&&D.stateNode.containerInfo===M.containerInfo&&D.stateNode.implementation===M.implementation){l(z,D.sibling),B=d(D,M.children||[]),B.return=z,z=B;break e}else{l(z,D);break}else i(z,D);D=D.sibling}B=C_(M,z.mode,B),B.return=z,z=B}return y(z);case Bt:return M=co(M),at(z,D,M,B)}if(Qt(M))return ae(z,D,M,B);if(rt(M)){if(me=rt(M),typeof me!="function")throw Error(n(150));return M=me.call(M),pe(z,D,M,B)}if(typeof M.then=="function")return at(z,D,rp(M),B);if(M.$$typeof===te)return at(z,D,ip(z,M),B);mp(z,M)}return typeof M=="string"&&M!==""||typeof M=="number"||typeof M=="bigint"?(M=""+M,D!==null&&D.tag===6?(l(z,D.sibling),B=d(D,M),B.return=z,z=B):(l(z,D),B=x_(M,z.mode,B),B.return=z,z=B),y(z)):l(z,D)}return function(z,D,M,B){try{qm=0;var me=at(z,D,M,B);return mr=null,me}catch(ne){if(ne===rr||ne===op)throw ne;var Ge=za(29,ne,null,z.mode);return Ge.lanes=B,Ge.return=z,Ge}finally{}}}var go=e0(!0),t0=e0(!1),sn=!1;function q_(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function O_(a,i){a=a.updateQueue,i.updateQueue===a&&(i.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,callbacks:null})}function nn(a){return{lane:a,tag:0,payload:null,callback:null,next:null}}function on(a,i,l){var m=a.updateQueue;if(m===null)return null;if(m=m.shared,(Qe&2)!==0){var d=m.pending;return d===null?i.next=i:(i.next=d.next,d.next=i),m.pending=i,i=ep(a),$w(a,null,l),i}return Jc(a,m,i,l),ep(a)}function $m(a,i,l){if(i=i.updateQueue,i!==null&&(i=i.shared,(l&4194048)!==0)){var m=i.lanes;m&=a.pendingLanes,l|=m,i.lanes=l,Hb(a,l)}}function $_(a,i){var l=a.updateQueue,m=a.alternate;if(m!==null&&(m=m.updateQueue,l===m)){var d=null,g=null;if(l=l.firstBaseUpdate,l!==null){do{var y={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};g===null?d=g=y:g=g.next=y,l=l.next}while(l!==null);g===null?d=g=i:g=g.next=i}else d=g=i;l={baseState:m.baseState,firstBaseUpdate:d,lastBaseUpdate:g,shared:m.shared,callbacks:m.callbacks},a.updateQueue=l;return}a=l.lastBaseUpdate,a===null?l.firstBaseUpdate=i:a.next=i,l.lastBaseUpdate=i}var L_=!1;function Lm(){if(L_){var a=lr;if(a!==null)throw a}}function Bm(a,i,l,m){L_=!1;var d=a.updateQueue;sn=!1;var g=d.firstBaseUpdate,y=d.lastBaseUpdate,b=d.shared.pending;if(b!==null){d.shared.pending=null;var j=b,R=j.next;j.next=null,y===null?g=R:y.next=R,y=j;var L=a.alternate;L!==null&&(L=L.updateQueue,b=L.lastBaseUpdate,b!==y&&(b===null?L.firstBaseUpdate=R:b.next=R,L.lastBaseUpdate=j))}if(g!==null){var P=d.baseState;y=0,L=R=j=null,b=g;do{var E=b.lane&-536870913,O=E!==b.lane;if(O?(qe&E)===E:(m&E)===E){E!==0&&E===or&&(L_=!0),L!==null&&(L=L.next={lane:0,tag:b.tag,payload:b.payload,callback:null,next:null});e:{var ae=a,pe=b;E=i;var at=l;switch(pe.tag){case 1:if(ae=pe.payload,typeof ae=="function"){P=ae.call(at,P,E);break e}P=ae;break e;case 3:ae.flags=ae.flags&-65537|128;case 0:if(ae=pe.payload,E=typeof ae=="function"?ae.call(at,P,E):ae,E==null)break e;P=v({},P,E);break e;case 2:sn=!0}}E=b.callback,E!==null&&(a.flags|=64,O&&(a.flags|=8192),O=d.callbacks,O===null?d.callbacks=[E]:O.push(E))}else O={lane:E,tag:b.tag,payload:b.payload,callback:b.callback,next:null},L===null?(R=L=O,j=P):L=L.next=O,y|=E;if(b=b.next,b===null){if(b=d.shared.pending,b===null)break;O=b,b=O.next,O.next=null,d.lastBaseUpdate=O,d.shared.pending=null}}while(!0);L===null&&(j=P),d.baseState=j,d.firstBaseUpdate=R,d.lastBaseUpdate=L,g===null&&(d.shared.lanes=0),cn|=y,a.lanes=y,a.memoizedState=P}}function a0(a,i){if(typeof a!="function")throw Error(n(191,a));a.call(i)}function s0(a,i){var l=a.callbacks;if(l!==null)for(a.callbacks=null,a=0;a<l.length;a++)a0(l[a],i)}var ur=S(null),up=S(0);function i0(a,i){a=_i,X(up,a),X(ur,i),_i=a|i.baseLanes}function B_(){X(up,_i),X(ur,ur.current)}function P_(){_i=up.current,W(ur),W(up)}var Na=S(null),Xa=null;function ln(a){var i=a.alternate;X(kt,kt.current&1),X(Na,a),Xa===null&&(i===null||ur.current!==null||i.memoizedState!==null)&&(Xa=a)}function W_(a){X(kt,kt.current),X(Na,a),Xa===null&&(Xa=a)}function n0(a){a.tag===22?(X(kt,kt.current),X(Na,a),Xa===null&&(Xa=a)):rn()}function rn(){X(kt,kt.current),X(Na,Na.current)}function Ma(a){W(Na),Xa===a&&(Xa=null),W(kt)}var kt=S(0);function cp(a){for(var i=a;i!==null;){if(i.tag===13){var l=i.memoizedState;if(l!==null&&(l=l.dehydrated,l===null||Yh(l)||Qh(l)))return i}else if(i.tag===19&&(i.memoizedProps.revealOrder==="forwards"||i.memoizedProps.revealOrder==="backwards"||i.memoizedProps.revealOrder==="unstable_legacy-backwards"||i.memoizedProps.revealOrder==="together")){if((i.flags&128)!==0)return i}else if(i.child!==null){i.child.return=i,i=i.child;continue}if(i===a)break;for(;i.sibling===null;){if(i.return===null||i.return===a)return null;i=i.return}i.sibling.return=i.return,i=i.sibling}return null}var li=0,Se=null,et=null,St=null,pp=!1,cr=!1,_o=!1,dp=0,Pm=0,pr=null,Z3=0;function ht(){throw Error(n(321))}function F_(a,i){if(i===null)return!1;for(var l=0;l<i.length&&l<a.length;l++)if(!Aa(a[l],i[l]))return!1;return!0}function U_(a,i,l,m,d,g){return li=g,Se=i,i.memoizedState=null,i.updateQueue=null,i.lanes=0,$.H=a===null||a.memoizedState===null?W0:nh,_o=!1,g=l(m,d),_o=!1,cr&&(g=l0(i,l,m,d)),o0(a),g}function o0(a){$.H=Um;var i=et!==null&&et.next!==null;if(li=0,St=et=Se=null,pp=!1,Pm=0,pr=null,i)throw Error(n(300));a===null||At||(a=a.dependencies,a!==null&&sp(a)&&(At=!0))}function l0(a,i,l,m){Se=a;var d=0;do{if(cr&&(pr=null),Pm=0,cr=!1,25<=d)throw Error(n(301));if(d+=1,St=et=null,a.updateQueue!=null){var g=a.updateQueue;g.lastEffect=null,g.events=null,g.stores=null,g.memoCache!=null&&(g.memoCache.index=0)}$.H=F0,g=i(l,m)}while(cr);return g}function X3(){var a=$.H,i=a.useState()[0];return i=typeof i.then=="function"?Wm(i):i,a=a.useState()[0],(et!==null?et.memoizedState:null)!==a&&(Se.flags|=1024),i}function G_(){var a=dp!==0;return dp=0,a}function H_(a,i,l){i.updateQueue=a.updateQueue,i.flags&=-2053,a.lanes&=~l}function V_(a){if(pp){for(a=a.memoizedState;a!==null;){var i=a.queue;i!==null&&(i.pending=null),a=a.next}pp=!1}li=0,St=et=Se=null,cr=!1,Pm=dp=0,pr=null}function ia(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return St===null?Se.memoizedState=St=a:St=St.next=a,St}function bt(){if(et===null){var a=Se.alternate;a=a!==null?a.memoizedState:null}else a=et.next;var i=St===null?Se.memoizedState:St.next;if(i!==null)St=i,et=a;else{if(a===null)throw Se.alternate===null?Error(n(467)):Error(n(310));et=a,a={memoizedState:et.memoizedState,baseState:et.baseState,baseQueue:et.baseQueue,queue:et.queue,next:null},St===null?Se.memoizedState=St=a:St=St.next=a}return St}function gp(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function Wm(a){var i=Pm;return Pm+=1,pr===null&&(pr=[]),a=Zw(pr,a,i),i=Se,(St===null?i.memoizedState:St.next)===null&&(i=i.alternate,$.H=i===null||i.memoizedState===null?W0:nh),a}function _p(a){if(a!==null&&typeof a=="object"){if(typeof a.then=="function")return Wm(a);if(a.$$typeof===te)return Ft(a)}throw Error(n(438,String(a)))}function Y_(a){var i=null,l=Se.updateQueue;if(l!==null&&(i=l.memoCache),i==null){var m=Se.alternate;m!==null&&(m=m.updateQueue,m!==null&&(m=m.memoCache,m!=null&&(i={data:m.data.map(function(d){return d.slice()}),index:0})))}if(i==null&&(i={data:[],index:0}),l===null&&(l=gp(),Se.updateQueue=l),l.memoCache=i,l=i.data[i.index],l===void 0)for(l=i.data[i.index]=Array(a),m=0;m<a;m++)l[m]=ps;return i.index++,l}function ri(a,i){return typeof i=="function"?i(a):i}function hp(a){var i=bt();return Q_(i,et,a)}function Q_(a,i,l){var m=a.queue;if(m===null)throw Error(n(311));m.lastRenderedReducer=l;var d=a.baseQueue,g=m.pending;if(g!==null){if(d!==null){var y=d.next;d.next=g.next,g.next=y}i.baseQueue=d=g,m.pending=null}if(g=a.baseState,d===null)a.memoizedState=g;else{i=d.next;var b=y=null,j=null,R=i,L=!1;do{var P=R.lane&-536870913;if(P!==R.lane?(qe&P)===P:(li&P)===P){var E=R.revertLane;if(E===0)j!==null&&(j=j.next={lane:0,revertLane:0,gesture:null,action:R.action,hasEagerState:R.hasEagerState,eagerState:R.eagerState,next:null}),P===or&&(L=!0);else if((li&E)===E){R=R.next,E===or&&(L=!0);continue}else P={lane:0,revertLane:R.revertLane,gesture:null,action:R.action,hasEagerState:R.hasEagerState,eagerState:R.eagerState,next:null},j===null?(b=j=P,y=g):j=j.next=P,Se.lanes|=E,cn|=E;P=R.action,_o&&l(g,P),g=R.hasEagerState?R.eagerState:l(g,P)}else E={lane:P,revertLane:R.revertLane,gesture:R.gesture,action:R.action,hasEagerState:R.hasEagerState,eagerState:R.eagerState,next:null},j===null?(b=j=E,y=g):j=j.next=E,Se.lanes|=P,cn|=P;R=R.next}while(R!==null&&R!==i);if(j===null?y=g:j.next=b,!Aa(g,a.memoizedState)&&(At=!0,L&&(l=lr,l!==null)))throw l;a.memoizedState=g,a.baseState=y,a.baseQueue=j,m.lastRenderedState=g}return d===null&&(m.lanes=0),[a.memoizedState,m.dispatch]}function K_(a){var i=bt(),l=i.queue;if(l===null)throw Error(n(311));l.lastRenderedReducer=a;var m=l.dispatch,d=l.pending,g=i.memoizedState;if(d!==null){l.pending=null;var y=d=d.next;do g=a(g,y.action),y=y.next;while(y!==d);Aa(g,i.memoizedState)||(At=!0),i.memoizedState=g,i.baseQueue===null&&(i.baseState=g),l.lastRenderedState=g}return[g,m]}function r0(a,i,l){var m=Se,d=bt(),g=Be;if(g){if(l===void 0)throw Error(n(407));l=l()}else l=i();var y=!Aa((et||d).memoizedState,l);if(y&&(d.memoizedState=l,At=!0),d=d.queue,J_(c0.bind(null,m,d,a),[a]),d.getSnapshot!==i||y||St!==null&&St.memoizedState.tag&1){if(m.flags|=2048,dr(9,{destroy:void 0},u0.bind(null,m,d,l,i),null),st===null)throw Error(n(349));g||(li&127)!==0||m0(m,i,l)}return l}function m0(a,i,l){a.flags|=16384,a={getSnapshot:i,value:l},i=Se.updateQueue,i===null?(i=gp(),Se.updateQueue=i,i.stores=[a]):(l=i.stores,l===null?i.stores=[a]:l.push(a))}function u0(a,i,l,m){i.value=l,i.getSnapshot=m,p0(i)&&d0(a)}function c0(a,i,l){return l(function(){p0(i)&&d0(a)})}function p0(a){var i=a.getSnapshot;a=a.value;try{var l=i();return!Aa(a,l)}catch{return!0}}function d0(a){var i=no(a,2);i!==null&&pa(i,a,2)}function Z_(a){var i=ia();if(typeof a=="function"){var l=a;if(a=l(),_o){Ki(!0);try{l()}finally{Ki(!1)}}}return i.memoizedState=i.baseState=a,i.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:ri,lastRenderedState:a},i}function g0(a,i,l,m){return a.baseState=l,Q_(a,et,typeof m=="function"?m:ri)}function J3(a,i,l,m,d){if(vp(a))throw Error(n(485));if(a=i.action,a!==null){var g={payload:d,action:a,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(y){g.listeners.push(y)}};$.T!==null?l(!0):g.isTransition=!1,m(g),l=i.pending,l===null?(g.next=i.pending=g,_0(i,g)):(g.next=l.next,i.pending=l.next=g)}}function _0(a,i){var l=i.action,m=i.payload,d=a.state;if(i.isTransition){var g=$.T,y={};$.T=y;try{var b=l(d,m),j=$.S;j!==null&&j(y,b),h0(a,i,b)}catch(R){X_(a,i,R)}finally{g!==null&&y.types!==null&&(g.types=y.types),$.T=g}}else try{g=l(d,m),h0(a,i,g)}catch(R){X_(a,i,R)}}function h0(a,i,l){l!==null&&typeof l=="object"&&typeof l.then=="function"?l.then(function(m){f0(a,i,m)},function(m){return X_(a,i,m)}):f0(a,i,l)}function f0(a,i,l){i.status="fulfilled",i.value=l,y0(i),a.state=l,i=a.pending,i!==null&&(l=i.next,l===i?a.pending=null:(l=l.next,i.next=l,_0(a,l)))}function X_(a,i,l){var m=a.pending;if(a.pending=null,m!==null){m=m.next;do i.status="rejected",i.reason=l,y0(i),i=i.next;while(i!==m)}a.action=null}function y0(a){a=a.listeners;for(var i=0;i<a.length;i++)(0,a[i])()}function v0(a,i){return i}function k0(a,i){if(Be){var l=st.formState;if(l!==null){e:{var m=Se;if(Be){if(mt){t:{for(var d=mt,g=Za;d.nodeType!==8;){if(!g){d=null;break t}if(d=Ja(d.nextSibling),d===null){d=null;break t}}g=d.data,d=g==="F!"||g==="F"?d:null}if(d){mt=Ja(d.nextSibling),m=d.data==="F!";break e}}tn(m)}m=!1}m&&(i=l[0])}}return l=ia(),l.memoizedState=l.baseState=i,m={pending:null,lanes:0,dispatch:null,lastRenderedReducer:v0,lastRenderedState:i},l.queue=m,l=L0.bind(null,Se,m),m.dispatch=l,m=Z_(!1),g=ih.bind(null,Se,!1,m.queue),m=ia(),d={state:i,dispatch:null,action:a,pending:null},m.queue=d,l=J3.bind(null,Se,d,g,l),d.dispatch=l,m.memoizedState=a,[i,l,!1]}function b0(a){var i=bt();return w0(i,et,a)}function w0(a,i,l){if(i=Q_(a,i,v0)[0],a=hp(ri)[0],typeof i=="object"&&i!==null&&typeof i.then=="function")try{var m=Wm(i)}catch(y){throw y===rr?op:y}else m=i;i=bt();var d=i.queue,g=d.dispatch;return l!==i.memoizedState&&(Se.flags|=2048,dr(9,{destroy:void 0},eP.bind(null,d,l),null)),[m,g,a]}function eP(a,i){a.action=i}function x0(a){var i=bt(),l=et;if(l!==null)return w0(i,l,a);bt(),i=i.memoizedState,l=bt();var m=l.queue.dispatch;return l.memoizedState=a,[i,m,!1]}function dr(a,i,l,m){return a={tag:a,create:l,deps:m,inst:i,next:null},i=Se.updateQueue,i===null&&(i=gp(),Se.updateQueue=i),l=i.lastEffect,l===null?i.lastEffect=a.next=a:(m=l.next,l.next=a,a.next=m,i.lastEffect=a),a}function C0(){return bt().memoizedState}function fp(a,i,l,m){var d=ia();Se.flags|=a,d.memoizedState=dr(1|i,{destroy:void 0},l,m===void 0?null:m)}function yp(a,i,l,m){var d=bt();m=m===void 0?null:m;var g=d.memoizedState.inst;et!==null&&m!==null&&F_(m,et.memoizedState.deps)?d.memoizedState=dr(i,g,l,m):(Se.flags|=a,d.memoizedState=dr(1|i,g,l,m))}function j0(a,i){fp(8390656,8,a,i)}function J_(a,i){yp(2048,8,a,i)}function tP(a){Se.flags|=4;var i=Se.updateQueue;if(i===null)i=gp(),Se.updateQueue=i,i.events=[a];else{var l=i.events;l===null?i.events=[a]:l.push(a)}}function T0(a){var i=bt().memoizedState;return tP({ref:i,nextImpl:a}),function(){if((Qe&2)!==0)throw Error(n(440));return i.impl.apply(void 0,arguments)}}function D0(a,i){return yp(4,2,a,i)}function S0(a,i){return yp(4,4,a,i)}function A0(a,i){if(typeof i=="function"){a=a();var l=i(a);return function(){typeof l=="function"?l():i(null)}}if(i!=null)return a=a(),i.current=a,function(){i.current=null}}function z0(a,i,l){l=l!=null?l.concat([a]):null,yp(4,4,A0.bind(null,i,a),l)}function eh(){}function N0(a,i){var l=bt();i=i===void 0?null:i;var m=l.memoizedState;return i!==null&&F_(i,m[1])?m[0]:(l.memoizedState=[a,i],a)}function M0(a,i){var l=bt();i=i===void 0?null:i;var m=l.memoizedState;if(i!==null&&F_(i,m[1]))return m[0];if(m=a(),_o){Ki(!0);try{a()}finally{Ki(!1)}}return l.memoizedState=[m,i],m}function th(a,i,l){return l===void 0||(li&1073741824)!==0&&(qe&261930)===0?a.memoizedState=i:(a.memoizedState=l,a=Rx(),Se.lanes|=a,cn|=a,l)}function R0(a,i,l,m){return Aa(l,i)?l:ur.current!==null?(a=th(a,l,m),Aa(a,i)||(At=!0),a):(li&42)===0||(li&1073741824)!==0&&(qe&261930)===0?(At=!0,a.memoizedState=l):(a=Rx(),Se.lanes|=a,cn|=a,i)}function E0(a,i,l,m,d){var g=K.p;K.p=g!==0&&8>g?g:8;var y=$.T,b={};$.T=b,ih(a,!1,i,l);try{var j=d(),R=$.S;if(R!==null&&R(b,j),j!==null&&typeof j=="object"&&typeof j.then=="function"){var L=K3(j,m);Fm(a,i,L,Ia(a))}else Fm(a,i,m,Ia(a))}catch(P){Fm(a,i,{then:function(){},status:"rejected",reason:P},Ia())}finally{K.p=g,y!==null&&b.types!==null&&(y.types=b.types),$.T=y}}function aP(){}function ah(a,i,l,m){if(a.tag!==5)throw Error(n(476));var d=I0(a).queue;E0(a,d,i,le,l===null?aP:function(){return q0(a),l(m)})}function I0(a){var i=a.memoizedState;if(i!==null)return i;i={memoizedState:le,baseState:le,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ri,lastRenderedState:le},next:null};var l={};return i.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ri,lastRenderedState:l},next:null},a.memoizedState=i,a=a.alternate,a!==null&&(a.memoizedState=i),i}function q0(a){var i=I0(a);i.next===null&&(i=a.alternate.memoizedState),Fm(a,i.next.queue,{},Ia())}function sh(){return Ft(ou)}function O0(){return bt().memoizedState}function $0(){return bt().memoizedState}function sP(a){for(var i=a.return;i!==null;){switch(i.tag){case 24:case 3:var l=Ia();a=nn(l);var m=on(i,a,l);m!==null&&(pa(m,i,l),$m(m,i,l)),i={cache:M_()},a.payload=i;return}i=i.return}}function iP(a,i,l){var m=Ia();l={lane:m,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},vp(a)?B0(i,l):(l=b_(a,i,l,m),l!==null&&(pa(l,a,m),P0(l,i,m)))}function L0(a,i,l){var m=Ia();Fm(a,i,l,m)}function Fm(a,i,l,m){var d={lane:m,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(vp(a))B0(i,d);else{var g=a.alternate;if(a.lanes===0&&(g===null||g.lanes===0)&&(g=i.lastRenderedReducer,g!==null))try{var y=i.lastRenderedState,b=g(y,l);if(d.hasEagerState=!0,d.eagerState=b,Aa(b,y))return Jc(a,i,d,0),st===null&&Xc(),!1}catch{}finally{}if(l=b_(a,i,d,m),l!==null)return pa(l,a,m),P0(l,i,m),!0}return!1}function ih(a,i,l,m){if(m={lane:2,revertLane:qh(),gesture:null,action:m,hasEagerState:!1,eagerState:null,next:null},vp(a)){if(i)throw Error(n(479))}else i=b_(a,l,m,2),i!==null&&pa(i,a,2)}function vp(a){var i=a.alternate;return a===Se||i!==null&&i===Se}function B0(a,i){cr=pp=!0;var l=a.pending;l===null?i.next=i:(i.next=l.next,l.next=i),a.pending=i}function P0(a,i,l){if((l&4194048)!==0){var m=i.lanes;m&=a.pendingLanes,l|=m,i.lanes=l,Hb(a,l)}}var Um={readContext:Ft,use:_p,useCallback:ht,useContext:ht,useEffect:ht,useImperativeHandle:ht,useLayoutEffect:ht,useInsertionEffect:ht,useMemo:ht,useReducer:ht,useRef:ht,useState:ht,useDebugValue:ht,useDeferredValue:ht,useTransition:ht,useSyncExternalStore:ht,useId:ht,useHostTransitionStatus:ht,useFormState:ht,useActionState:ht,useOptimistic:ht,useMemoCache:ht,useCacheRefresh:ht};Um.useEffectEvent=ht;var W0={readContext:Ft,use:_p,useCallback:function(a,i){return ia().memoizedState=[a,i===void 0?null:i],a},useContext:Ft,useEffect:j0,useImperativeHandle:function(a,i,l){l=l!=null?l.concat([a]):null,fp(4194308,4,A0.bind(null,i,a),l)},useLayoutEffect:function(a,i){return fp(4194308,4,a,i)},useInsertionEffect:function(a,i){fp(4,2,a,i)},useMemo:function(a,i){var l=ia();i=i===void 0?null:i;var m=a();if(_o){Ki(!0);try{a()}finally{Ki(!1)}}return l.memoizedState=[m,i],m},useReducer:function(a,i,l){var m=ia();if(l!==void 0){var d=l(i);if(_o){Ki(!0);try{l(i)}finally{Ki(!1)}}}else d=i;return m.memoizedState=m.baseState=d,a={pending:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:d},m.queue=a,a=a.dispatch=iP.bind(null,Se,a),[m.memoizedState,a]},useRef:function(a){var i=ia();return a={current:a},i.memoizedState=a},useState:function(a){a=Z_(a);var i=a.queue,l=L0.bind(null,Se,i);return i.dispatch=l,[a.memoizedState,l]},useDebugValue:eh,useDeferredValue:function(a,i){var l=ia();return th(l,a,i)},useTransition:function(){var a=Z_(!1);return a=E0.bind(null,Se,a.queue,!0,!1),ia().memoizedState=a,[!1,a]},useSyncExternalStore:function(a,i,l){var m=Se,d=ia();if(Be){if(l===void 0)throw Error(n(407));l=l()}else{if(l=i(),st===null)throw Error(n(349));(qe&127)!==0||m0(m,i,l)}d.memoizedState=l;var g={value:l,getSnapshot:i};return d.queue=g,j0(c0.bind(null,m,g,a),[a]),m.flags|=2048,dr(9,{destroy:void 0},u0.bind(null,m,g,l,i),null),l},useId:function(){var a=ia(),i=st.identifierPrefix;if(Be){var l=qs,m=Is;l=(m&~(1<<32-Sa(m)-1)).toString(32)+l,i="_"+i+"R_"+l,l=dp++,0<l&&(i+="H"+l.toString(32)),i+="_"}else l=Z3++,i="_"+i+"r_"+l.toString(32)+"_";return a.memoizedState=i},useHostTransitionStatus:sh,useFormState:k0,useActionState:k0,useOptimistic:function(a){var i=ia();i.memoizedState=i.baseState=a;var l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return i.queue=l,i=ih.bind(null,Se,!0,l),l.dispatch=i,[a,i]},useMemoCache:Y_,useCacheRefresh:function(){return ia().memoizedState=sP.bind(null,Se)},useEffectEvent:function(a){var i=ia(),l={impl:a};return i.memoizedState=l,function(){if((Qe&2)!==0)throw Error(n(440));return l.impl.apply(void 0,arguments)}}},nh={readContext:Ft,use:_p,useCallback:N0,useContext:Ft,useEffect:J_,useImperativeHandle:z0,useInsertionEffect:D0,useLayoutEffect:S0,useMemo:M0,useReducer:hp,useRef:C0,useState:function(){return hp(ri)},useDebugValue:eh,useDeferredValue:function(a,i){var l=bt();return R0(l,et.memoizedState,a,i)},useTransition:function(){var a=hp(ri)[0],i=bt().memoizedState;return[typeof a=="boolean"?a:Wm(a),i]},useSyncExternalStore:r0,useId:O0,useHostTransitionStatus:sh,useFormState:b0,useActionState:b0,useOptimistic:function(a,i){var l=bt();return g0(l,et,a,i)},useMemoCache:Y_,useCacheRefresh:$0};nh.useEffectEvent=T0;var F0={readContext:Ft,use:_p,useCallback:N0,useContext:Ft,useEffect:J_,useImperativeHandle:z0,useInsertionEffect:D0,useLayoutEffect:S0,useMemo:M0,useReducer:K_,useRef:C0,useState:function(){return K_(ri)},useDebugValue:eh,useDeferredValue:function(a,i){var l=bt();return et===null?th(l,a,i):R0(l,et.memoizedState,a,i)},useTransition:function(){var a=K_(ri)[0],i=bt().memoizedState;return[typeof a=="boolean"?a:Wm(a),i]},useSyncExternalStore:r0,useId:O0,useHostTransitionStatus:sh,useFormState:x0,useActionState:x0,useOptimistic:function(a,i){var l=bt();return et!==null?g0(l,et,a,i):(l.baseState=a,[a,l.queue.dispatch])},useMemoCache:Y_,useCacheRefresh:$0};F0.useEffectEvent=T0;function oh(a,i,l,m){i=a.memoizedState,l=l(m,i),l=l==null?i:v({},i,l),a.memoizedState=l,a.lanes===0&&(a.updateQueue.baseState=l)}var lh={enqueueSetState:function(a,i,l){a=a._reactInternals;var m=Ia(),d=nn(m);d.payload=i,l!=null&&(d.callback=l),i=on(a,d,m),i!==null&&(pa(i,a,m),$m(i,a,m))},enqueueReplaceState:function(a,i,l){a=a._reactInternals;var m=Ia(),d=nn(m);d.tag=1,d.payload=i,l!=null&&(d.callback=l),i=on(a,d,m),i!==null&&(pa(i,a,m),$m(i,a,m))},enqueueForceUpdate:function(a,i){a=a._reactInternals;var l=Ia(),m=nn(l);m.tag=2,i!=null&&(m.callback=i),i=on(a,m,l),i!==null&&(pa(i,a,l),$m(i,a,l))}};function U0(a,i,l,m,d,g,y){return a=a.stateNode,typeof a.shouldComponentUpdate=="function"?a.shouldComponentUpdate(m,g,y):i.prototype&&i.prototype.isPureReactComponent?!zm(l,m)||!zm(d,g):!0}function G0(a,i,l,m){a=i.state,typeof i.componentWillReceiveProps=="function"&&i.componentWillReceiveProps(l,m),typeof i.UNSAFE_componentWillReceiveProps=="function"&&i.UNSAFE_componentWillReceiveProps(l,m),i.state!==a&&lh.enqueueReplaceState(i,i.state,null)}function ho(a,i){var l=i;if("ref"in i){l={};for(var m in i)m!=="ref"&&(l[m]=i[m])}if(a=a.defaultProps){l===i&&(l=v({},l));for(var d in a)l[d]===void 0&&(l[d]=a[d])}return l}function H0(a){Zc(a)}function V0(a){console.error(a)}function Y0(a){Zc(a)}function kp(a,i){try{var l=a.onUncaughtError;l(i.value,{componentStack:i.stack})}catch(m){setTimeout(function(){throw m})}}function Q0(a,i,l){try{var m=a.onCaughtError;m(l.value,{componentStack:l.stack,errorBoundary:i.tag===1?i.stateNode:null})}catch(d){setTimeout(function(){throw d})}}function rh(a,i,l){return l=nn(l),l.tag=3,l.payload={element:null},l.callback=function(){kp(a,i)},l}function K0(a){return a=nn(a),a.tag=3,a}function Z0(a,i,l,m){var d=l.type.getDerivedStateFromError;if(typeof d=="function"){var g=m.value;a.payload=function(){return d(g)},a.callback=function(){Q0(i,l,m)}}var y=l.stateNode;y!==null&&typeof y.componentDidCatch=="function"&&(a.callback=function(){Q0(i,l,m),typeof d!="function"&&(pn===null?pn=new Set([this]):pn.add(this));var b=m.stack;this.componentDidCatch(m.value,{componentStack:b!==null?b:""})})}function nP(a,i,l,m,d){if(l.flags|=32768,m!==null&&typeof m=="object"&&typeof m.then=="function"){if(i=l.alternate,i!==null&&nr(i,l,d,!0),l=Na.current,l!==null){switch(l.tag){case 31:case 13:return Xa===null?Mp():l.alternate===null&&ft===0&&(ft=3),l.flags&=-257,l.flags|=65536,l.lanes=d,m===lp?l.flags|=16384:(i=l.updateQueue,i===null?l.updateQueue=new Set([m]):i.add(m),Rh(a,m,d)),!1;case 22:return l.flags|=65536,m===lp?l.flags|=16384:(i=l.updateQueue,i===null?(i={transitions:null,markerInstances:null,retryQueue:new Set([m])},l.updateQueue=i):(l=i.retryQueue,l===null?i.retryQueue=new Set([m]):l.add(m)),Rh(a,m,d)),!1}throw Error(n(435,l.tag))}return Rh(a,m,d),Mp(),!1}if(Be)return i=Na.current,i!==null?((i.flags&65536)===0&&(i.flags|=256),i.flags|=65536,i.lanes=d,m!==D_&&(a=Error(n(422),{cause:m}),Rm(Ya(a,l)))):(m!==D_&&(i=Error(n(423),{cause:m}),Rm(Ya(i,l))),a=a.current.alternate,a.flags|=65536,d&=-d,a.lanes|=d,m=Ya(m,l),d=rh(a.stateNode,m,d),$_(a,d),ft!==4&&(ft=2)),!1;var g=Error(n(520),{cause:m});if(g=Ya(g,l),Xm===null?Xm=[g]:Xm.push(g),ft!==4&&(ft=2),i===null)return!0;m=Ya(m,l),l=i;do{switch(l.tag){case 3:return l.flags|=65536,a=d&-d,l.lanes|=a,a=rh(l.stateNode,m,a),$_(l,a),!1;case 1:if(i=l.type,g=l.stateNode,(l.flags&128)===0&&(typeof i.getDerivedStateFromError=="function"||g!==null&&typeof g.componentDidCatch=="function"&&(pn===null||!pn.has(g))))return l.flags|=65536,d&=-d,l.lanes|=d,d=K0(d),Z0(d,a,l,m),$_(l,d),!1}l=l.return}while(l!==null);return!1}var mh=Error(n(461)),At=!1;function Ut(a,i,l,m){i.child=a===null?t0(i,null,l,m):go(i,a.child,l,m)}function X0(a,i,l,m,d){l=l.render;var g=i.ref;if("ref"in m){var y={};for(var b in m)b!=="ref"&&(y[b]=m[b])}else y=m;return mo(i),m=U_(a,i,l,y,g,d),b=G_(),a!==null&&!At?(H_(a,i,d),mi(a,i,d)):(Be&&b&&j_(i),i.flags|=1,Ut(a,i,m,d),i.child)}function J0(a,i,l,m,d){if(a===null){var g=l.type;return typeof g=="function"&&!w_(g)&&g.defaultProps===void 0&&l.compare===null?(i.tag=15,i.type=g,ex(a,i,g,m,d)):(a=tp(l.type,null,m,i,i.mode,d),a.ref=i.ref,a.return=i,i.child=a)}if(g=a.child,!fh(a,d)){var y=g.memoizedProps;if(l=l.compare,l=l!==null?l:zm,l(y,m)&&a.ref===i.ref)return mi(a,i,d)}return i.flags|=1,a=si(g,m),a.ref=i.ref,a.return=i,i.child=a}function ex(a,i,l,m,d){if(a!==null){var g=a.memoizedProps;if(zm(g,m)&&a.ref===i.ref)if(At=!1,i.pendingProps=m=g,fh(a,d))(a.flags&131072)!==0&&(At=!0);else return i.lanes=a.lanes,mi(a,i,d)}return uh(a,i,l,m,d)}function tx(a,i,l,m){var d=m.children,g=a!==null?a.memoizedState:null;if(a===null&&i.stateNode===null&&(i.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),m.mode==="hidden"){if((i.flags&128)!==0){if(g=g!==null?g.baseLanes|l:l,a!==null){for(m=i.child=a.child,d=0;m!==null;)d=d|m.lanes|m.childLanes,m=m.sibling;m=d&~g}else m=0,i.child=null;return ax(a,i,g,l,m)}if((l&536870912)!==0)i.memoizedState={baseLanes:0,cachePool:null},a!==null&&np(i,g!==null?g.cachePool:null),g!==null?i0(i,g):B_(),n0(i);else return m=i.lanes=536870912,ax(a,i,g!==null?g.baseLanes|l:l,l,m)}else g!==null?(np(i,g.cachePool),i0(i,g),rn(),i.memoizedState=null):(a!==null&&np(i,null),B_(),rn());return Ut(a,i,d,l),i.child}function Gm(a,i){return a!==null&&a.tag===22||i.stateNode!==null||(i.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),i.sibling}function ax(a,i,l,m,d){var g=E_();return g=g===null?null:{parent:Dt._currentValue,pool:g},i.memoizedState={baseLanes:l,cachePool:g},a!==null&&np(i,null),B_(),n0(i),a!==null&&nr(a,i,m,!0),i.childLanes=d,null}function bp(a,i){return i=xp({mode:i.mode,children:i.children},a.mode),i.ref=a.ref,a.child=i,i.return=a,i}function sx(a,i,l){return go(i,a.child,null,l),a=bp(i,i.pendingProps),a.flags|=2,Ma(i),i.memoizedState=null,a}function oP(a,i,l){var m=i.pendingProps,d=(i.flags&128)!==0;if(i.flags&=-129,a===null){if(Be){if(m.mode==="hidden")return a=bp(i,m),i.lanes=536870912,Gm(null,a);if(W_(i),(a=mt)?(a=_C(a,Za),a=a!==null&&a.data==="&"?a:null,a!==null&&(i.memoizedState={dehydrated:a,treeContext:Ji!==null?{id:Is,overflow:qs}:null,retryLane:536870912,hydrationErrors:null},l=Bw(a),l.return=i,i.child=l,Wt=i,mt=null)):a=null,a===null)throw tn(i);return i.lanes=536870912,null}return bp(i,m)}var g=a.memoizedState;if(g!==null){var y=g.dehydrated;if(W_(i),d)if(i.flags&256)i.flags&=-257,i=sx(a,i,l);else if(i.memoizedState!==null)i.child=a.child,i.flags|=128,i=null;else throw Error(n(558));else if(At||nr(a,i,l,!1),d=(l&a.childLanes)!==0,At||d){if(m=st,m!==null&&(y=Vb(m,l),y!==0&&y!==g.retryLane))throw g.retryLane=y,no(a,y),pa(m,a,y),mh;Mp(),i=sx(a,i,l)}else a=g.treeContext,mt=Ja(y.nextSibling),Wt=i,Be=!0,en=null,Za=!1,a!==null&&Fw(i,a),i=bp(i,m),i.flags|=4096;return i}return a=si(a.child,{mode:m.mode,children:m.children}),a.ref=i.ref,i.child=a,a.return=i,a}function wp(a,i){var l=i.ref;if(l===null)a!==null&&a.ref!==null&&(i.flags|=4194816);else{if(typeof l!="function"&&typeof l!="object")throw Error(n(284));(a===null||a.ref!==l)&&(i.flags|=4194816)}}function uh(a,i,l,m,d){return mo(i),l=U_(a,i,l,m,void 0,d),m=G_(),a!==null&&!At?(H_(a,i,d),mi(a,i,d)):(Be&&m&&j_(i),i.flags|=1,Ut(a,i,l,d),i.child)}function ix(a,i,l,m,d,g){return mo(i),i.updateQueue=null,l=l0(i,m,l,d),o0(a),m=G_(),a!==null&&!At?(H_(a,i,g),mi(a,i,g)):(Be&&m&&j_(i),i.flags|=1,Ut(a,i,l,g),i.child)}function nx(a,i,l,m,d){if(mo(i),i.stateNode===null){var g=tr,y=l.contextType;typeof y=="object"&&y!==null&&(g=Ft(y)),g=new l(m,g),i.memoizedState=g.state!==null&&g.state!==void 0?g.state:null,g.updater=lh,i.stateNode=g,g._reactInternals=i,g=i.stateNode,g.props=m,g.state=i.memoizedState,g.refs={},q_(i),y=l.contextType,g.context=typeof y=="object"&&y!==null?Ft(y):tr,g.state=i.memoizedState,y=l.getDerivedStateFromProps,typeof y=="function"&&(oh(i,l,y,m),g.state=i.memoizedState),typeof l.getDerivedStateFromProps=="function"||typeof g.getSnapshotBeforeUpdate=="function"||typeof g.UNSAFE_componentWillMount!="function"&&typeof g.componentWillMount!="function"||(y=g.state,typeof g.componentWillMount=="function"&&g.componentWillMount(),typeof g.UNSAFE_componentWillMount=="function"&&g.UNSAFE_componentWillMount(),y!==g.state&&lh.enqueueReplaceState(g,g.state,null),Bm(i,m,g,d),Lm(),g.state=i.memoizedState),typeof g.componentDidMount=="function"&&(i.flags|=4194308),m=!0}else if(a===null){g=i.stateNode;var b=i.memoizedProps,j=ho(l,b);g.props=j;var R=g.context,L=l.contextType;y=tr,typeof L=="object"&&L!==null&&(y=Ft(L));var P=l.getDerivedStateFromProps;L=typeof P=="function"||typeof g.getSnapshotBeforeUpdate=="function",b=i.pendingProps!==b,L||typeof g.UNSAFE_componentWillReceiveProps!="function"&&typeof g.componentWillReceiveProps!="function"||(b||R!==y)&&G0(i,g,m,y),sn=!1;var E=i.memoizedState;g.state=E,Bm(i,m,g,d),Lm(),R=i.memoizedState,b||E!==R||sn?(typeof P=="function"&&(oh(i,l,P,m),R=i.memoizedState),(j=sn||U0(i,l,j,m,E,R,y))?(L||typeof g.UNSAFE_componentWillMount!="function"&&typeof g.componentWillMount!="function"||(typeof g.componentWillMount=="function"&&g.componentWillMount(),typeof g.UNSAFE_componentWillMount=="function"&&g.UNSAFE_componentWillMount()),typeof g.componentDidMount=="function"&&(i.flags|=4194308)):(typeof g.componentDidMount=="function"&&(i.flags|=4194308),i.memoizedProps=m,i.memoizedState=R),g.props=m,g.state=R,g.context=y,m=j):(typeof g.componentDidMount=="function"&&(i.flags|=4194308),m=!1)}else{g=i.stateNode,O_(a,i),y=i.memoizedProps,L=ho(l,y),g.props=L,P=i.pendingProps,E=g.context,R=l.contextType,j=tr,typeof R=="object"&&R!==null&&(j=Ft(R)),b=l.getDerivedStateFromProps,(R=typeof b=="function"||typeof g.getSnapshotBeforeUpdate=="function")||typeof g.UNSAFE_componentWillReceiveProps!="function"&&typeof g.componentWillReceiveProps!="function"||(y!==P||E!==j)&&G0(i,g,m,j),sn=!1,E=i.memoizedState,g.state=E,Bm(i,m,g,d),Lm();var O=i.memoizedState;y!==P||E!==O||sn||a!==null&&a.dependencies!==null&&sp(a.dependencies)?(typeof b=="function"&&(oh(i,l,b,m),O=i.memoizedState),(L=sn||U0(i,l,L,m,E,O,j)||a!==null&&a.dependencies!==null&&sp(a.dependencies))?(R||typeof g.UNSAFE_componentWillUpdate!="function"&&typeof g.componentWillUpdate!="function"||(typeof g.componentWillUpdate=="function"&&g.componentWillUpdate(m,O,j),typeof g.UNSAFE_componentWillUpdate=="function"&&g.UNSAFE_componentWillUpdate(m,O,j)),typeof g.componentDidUpdate=="function"&&(i.flags|=4),typeof g.getSnapshotBeforeUpdate=="function"&&(i.flags|=1024)):(typeof g.componentDidUpdate!="function"||y===a.memoizedProps&&E===a.memoizedState||(i.flags|=4),typeof g.getSnapshotBeforeUpdate!="function"||y===a.memoizedProps&&E===a.memoizedState||(i.flags|=1024),i.memoizedProps=m,i.memoizedState=O),g.props=m,g.state=O,g.context=j,m=L):(typeof g.componentDidUpdate!="function"||y===a.memoizedProps&&E===a.memoizedState||(i.flags|=4),typeof g.getSnapshotBeforeUpdate!="function"||y===a.memoizedProps&&E===a.memoizedState||(i.flags|=1024),m=!1)}return g=m,wp(a,i),m=(i.flags&128)!==0,g||m?(g=i.stateNode,l=m&&typeof l.getDerivedStateFromError!="function"?null:g.render(),i.flags|=1,a!==null&&m?(i.child=go(i,a.child,null,d),i.child=go(i,null,l,d)):Ut(a,i,l,d),i.memoizedState=g.state,a=i.child):a=mi(a,i,d),a}function ox(a,i,l,m){return lo(),i.flags|=256,Ut(a,i,l,m),i.child}var ch={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function ph(a){return{baseLanes:a,cachePool:Qw()}}function dh(a,i,l){return a=a!==null?a.childLanes&~l:0,i&&(a|=Ea),a}function lx(a,i,l){var m=i.pendingProps,d=!1,g=(i.flags&128)!==0,y;if((y=g)||(y=a!==null&&a.memoizedState===null?!1:(kt.current&2)!==0),y&&(d=!0,i.flags&=-129),y=(i.flags&32)!==0,i.flags&=-33,a===null){if(Be){if(d?ln(i):rn(),(a=mt)?(a=_C(a,Za),a=a!==null&&a.data!=="&"?a:null,a!==null&&(i.memoizedState={dehydrated:a,treeContext:Ji!==null?{id:Is,overflow:qs}:null,retryLane:536870912,hydrationErrors:null},l=Bw(a),l.return=i,i.child=l,Wt=i,mt=null)):a=null,a===null)throw tn(i);return Qh(a)?i.lanes=32:i.lanes=536870912,null}var b=m.children;return m=m.fallback,d?(rn(),d=i.mode,b=xp({mode:"hidden",children:b},d),m=oo(m,d,l,null),b.return=i,m.return=i,b.sibling=m,i.child=b,m=i.child,m.memoizedState=ph(l),m.childLanes=dh(a,y,l),i.memoizedState=ch,Gm(null,m)):(ln(i),gh(i,b))}var j=a.memoizedState;if(j!==null&&(b=j.dehydrated,b!==null)){if(g)i.flags&256?(ln(i),i.flags&=-257,i=_h(a,i,l)):i.memoizedState!==null?(rn(),i.child=a.child,i.flags|=128,i=null):(rn(),b=m.fallback,d=i.mode,m=xp({mode:"visible",children:m.children},d),b=oo(b,d,l,null),b.flags|=2,m.return=i,b.return=i,m.sibling=b,i.child=m,go(i,a.child,null,l),m=i.child,m.memoizedState=ph(l),m.childLanes=dh(a,y,l),i.memoizedState=ch,i=Gm(null,m));else if(ln(i),Qh(b)){if(y=b.nextSibling&&b.nextSibling.dataset,y)var R=y.dgst;y=R,m=Error(n(419)),m.stack="",m.digest=y,Rm({value:m,source:null,stack:null}),i=_h(a,i,l)}else if(At||nr(a,i,l,!1),y=(l&a.childLanes)!==0,At||y){if(y=st,y!==null&&(m=Vb(y,l),m!==0&&m!==j.retryLane))throw j.retryLane=m,no(a,m),pa(y,a,m),mh;Yh(b)||Mp(),i=_h(a,i,l)}else Yh(b)?(i.flags|=192,i.child=a.child,i=null):(a=j.treeContext,mt=Ja(b.nextSibling),Wt=i,Be=!0,en=null,Za=!1,a!==null&&Fw(i,a),i=gh(i,m.children),i.flags|=4096);return i}return d?(rn(),b=m.fallback,d=i.mode,j=a.child,R=j.sibling,m=si(j,{mode:"hidden",children:m.children}),m.subtreeFlags=j.subtreeFlags&65011712,R!==null?b=si(R,b):(b=oo(b,d,l,null),b.flags|=2),b.return=i,m.return=i,m.sibling=b,i.child=m,Gm(null,m),m=i.child,b=a.child.memoizedState,b===null?b=ph(l):(d=b.cachePool,d!==null?(j=Dt._currentValue,d=d.parent!==j?{parent:j,pool:j}:d):d=Qw(),b={baseLanes:b.baseLanes|l,cachePool:d}),m.memoizedState=b,m.childLanes=dh(a,y,l),i.memoizedState=ch,Gm(a.child,m)):(ln(i),l=a.child,a=l.sibling,l=si(l,{mode:"visible",children:m.children}),l.return=i,l.sibling=null,a!==null&&(y=i.deletions,y===null?(i.deletions=[a],i.flags|=16):y.push(a)),i.child=l,i.memoizedState=null,l)}function gh(a,i){return i=xp({mode:"visible",children:i},a.mode),i.return=a,a.child=i}function xp(a,i){return a=za(22,a,null,i),a.lanes=0,a}function _h(a,i,l){return go(i,a.child,null,l),a=gh(i,i.pendingProps.children),a.flags|=2,i.memoizedState=null,a}function rx(a,i,l){a.lanes|=i;var m=a.alternate;m!==null&&(m.lanes|=i),z_(a.return,i,l)}function hh(a,i,l,m,d,g){var y=a.memoizedState;y===null?a.memoizedState={isBackwards:i,rendering:null,renderingStartTime:0,last:m,tail:l,tailMode:d,treeForkCount:g}:(y.isBackwards=i,y.rendering=null,y.renderingStartTime=0,y.last=m,y.tail=l,y.tailMode=d,y.treeForkCount=g)}function mx(a,i,l){var m=i.pendingProps,d=m.revealOrder,g=m.tail;m=m.children;var y=kt.current,b=(y&2)!==0;if(b?(y=y&1|2,i.flags|=128):y&=1,X(kt,y),Ut(a,i,m,l),m=Be?Mm:0,!b&&a!==null&&(a.flags&128)!==0)e:for(a=i.child;a!==null;){if(a.tag===13)a.memoizedState!==null&&rx(a,l,i);else if(a.tag===19)rx(a,l,i);else if(a.child!==null){a.child.return=a,a=a.child;continue}if(a===i)break e;for(;a.sibling===null;){if(a.return===null||a.return===i)break e;a=a.return}a.sibling.return=a.return,a=a.sibling}switch(d){case"forwards":for(l=i.child,d=null;l!==null;)a=l.alternate,a!==null&&cp(a)===null&&(d=l),l=l.sibling;l=d,l===null?(d=i.child,i.child=null):(d=l.sibling,l.sibling=null),hh(i,!1,d,l,g,m);break;case"backwards":case"unstable_legacy-backwards":for(l=null,d=i.child,i.child=null;d!==null;){if(a=d.alternate,a!==null&&cp(a)===null){i.child=d;break}a=d.sibling,d.sibling=l,l=d,d=a}hh(i,!0,l,null,g,m);break;case"together":hh(i,!1,null,null,void 0,m);break;default:i.memoizedState=null}return i.child}function mi(a,i,l){if(a!==null&&(i.dependencies=a.dependencies),cn|=i.lanes,(l&i.childLanes)===0)if(a!==null){if(nr(a,i,l,!1),(l&i.childLanes)===0)return null}else return null;if(a!==null&&i.child!==a.child)throw Error(n(153));if(i.child!==null){for(a=i.child,l=si(a,a.pendingProps),i.child=l,l.return=i;a.sibling!==null;)a=a.sibling,l=l.sibling=si(a,a.pendingProps),l.return=i;l.sibling=null}return i.child}function fh(a,i){return(a.lanes&i)!==0?!0:(a=a.dependencies,!!(a!==null&&sp(a)))}function lP(a,i,l){switch(i.tag){case 3:sa(i,i.stateNode.containerInfo),an(i,Dt,a.memoizedState.cache),lo();break;case 27:case 5:fm(i);break;case 4:sa(i,i.stateNode.containerInfo);break;case 10:an(i,i.type,i.memoizedProps.value);break;case 31:if(i.memoizedState!==null)return i.flags|=128,W_(i),null;break;case 13:var m=i.memoizedState;if(m!==null)return m.dehydrated!==null?(ln(i),i.flags|=128,null):(l&i.child.childLanes)!==0?lx(a,i,l):(ln(i),a=mi(a,i,l),a!==null?a.sibling:null);ln(i);break;case 19:var d=(a.flags&128)!==0;if(m=(l&i.childLanes)!==0,m||(nr(a,i,l,!1),m=(l&i.childLanes)!==0),d){if(m)return mx(a,i,l);i.flags|=128}if(d=i.memoizedState,d!==null&&(d.rendering=null,d.tail=null,d.lastEffect=null),X(kt,kt.current),m)break;return null;case 22:return i.lanes=0,tx(a,i,l,i.pendingProps);case 24:an(i,Dt,a.memoizedState.cache)}return mi(a,i,l)}function ux(a,i,l){if(a!==null)if(a.memoizedProps!==i.pendingProps)At=!0;else{if(!fh(a,l)&&(i.flags&128)===0)return At=!1,lP(a,i,l);At=(a.flags&131072)!==0}else At=!1,Be&&(i.flags&1048576)!==0&&Ww(i,Mm,i.index);switch(i.lanes=0,i.tag){case 16:e:{var m=i.pendingProps;if(a=co(i.elementType),i.type=a,typeof a=="function")w_(a)?(m=ho(a,m),i.tag=1,i=nx(null,i,a,m,l)):(i.tag=0,i=uh(null,i,a,m,l));else{if(a!=null){var d=a.$$typeof;if(d===ge){i.tag=11,i=X0(null,i,a,m,l);break e}else if(d===ye){i.tag=14,i=J0(null,i,a,m,l);break e}}throw i=It(a)||a,Error(n(306,i,""))}}return i;case 0:return uh(a,i,i.type,i.pendingProps,l);case 1:return m=i.type,d=ho(m,i.pendingProps),nx(a,i,m,d,l);case 3:e:{if(sa(i,i.stateNode.containerInfo),a===null)throw Error(n(387));m=i.pendingProps;var g=i.memoizedState;d=g.element,O_(a,i),Bm(i,m,null,l);var y=i.memoizedState;if(m=y.cache,an(i,Dt,m),m!==g.cache&&N_(i,[Dt],l,!0),Lm(),m=y.element,g.isDehydrated)if(g={element:m,isDehydrated:!1,cache:y.cache},i.updateQueue.baseState=g,i.memoizedState=g,i.flags&256){i=ox(a,i,m,l);break e}else if(m!==d){d=Ya(Error(n(424)),i),Rm(d),i=ox(a,i,m,l);break e}else{switch(a=i.stateNode.containerInfo,a.nodeType){case 9:a=a.body;break;default:a=a.nodeName==="HTML"?a.ownerDocument.body:a}for(mt=Ja(a.firstChild),Wt=i,Be=!0,en=null,Za=!0,l=t0(i,null,m,l),i.child=l;l;)l.flags=l.flags&-3|4096,l=l.sibling}else{if(lo(),m===d){i=mi(a,i,l);break e}Ut(a,i,m,l)}i=i.child}return i;case 26:return wp(a,i),a===null?(l=bC(i.type,null,i.pendingProps,null))?i.memoizedState=l:Be||(l=i.type,a=i.pendingProps,m=Lp(ze.current).createElement(l),m[Pt]=i,m[oa]=a,Gt(m,l,a),qt(m),i.stateNode=m):i.memoizedState=bC(i.type,a.memoizedProps,i.pendingProps,a.memoizedState),null;case 27:return fm(i),a===null&&Be&&(m=i.stateNode=yC(i.type,i.pendingProps,ze.current),Wt=i,Za=!0,d=mt,hn(i.type)?(Kh=d,mt=Ja(m.firstChild)):mt=d),Ut(a,i,i.pendingProps.children,l),wp(a,i),a===null&&(i.flags|=4194304),i.child;case 5:return a===null&&Be&&((d=m=mt)&&(m=OP(m,i.type,i.pendingProps,Za),m!==null?(i.stateNode=m,Wt=i,mt=Ja(m.firstChild),Za=!1,d=!0):d=!1),d||tn(i)),fm(i),d=i.type,g=i.pendingProps,y=a!==null?a.memoizedProps:null,m=g.children,Gh(d,g)?m=null:y!==null&&Gh(d,y)&&(i.flags|=32),i.memoizedState!==null&&(d=U_(a,i,X3,null,null,l),ou._currentValue=d),wp(a,i),Ut(a,i,m,l),i.child;case 6:return a===null&&Be&&((a=l=mt)&&(l=$P(l,i.pendingProps,Za),l!==null?(i.stateNode=l,Wt=i,mt=null,a=!0):a=!1),a||tn(i)),null;case 13:return lx(a,i,l);case 4:return sa(i,i.stateNode.containerInfo),m=i.pendingProps,a===null?i.child=go(i,null,m,l):Ut(a,i,m,l),i.child;case 11:return X0(a,i,i.type,i.pendingProps,l);case 7:return Ut(a,i,i.pendingProps,l),i.child;case 8:return Ut(a,i,i.pendingProps.children,l),i.child;case 12:return Ut(a,i,i.pendingProps.children,l),i.child;case 10:return m=i.pendingProps,an(i,i.type,m.value),Ut(a,i,m.children,l),i.child;case 9:return d=i.type._context,m=i.pendingProps.children,mo(i),d=Ft(d),m=m(d),i.flags|=1,Ut(a,i,m,l),i.child;case 14:return J0(a,i,i.type,i.pendingProps,l);case 15:return ex(a,i,i.type,i.pendingProps,l);case 19:return mx(a,i,l);case 31:return oP(a,i,l);case 22:return tx(a,i,l,i.pendingProps);case 24:return mo(i),m=Ft(Dt),a===null?(d=E_(),d===null&&(d=st,g=M_(),d.pooledCache=g,g.refCount++,g!==null&&(d.pooledCacheLanes|=l),d=g),i.memoizedState={parent:m,cache:d},q_(i),an(i,Dt,d)):((a.lanes&l)!==0&&(O_(a,i),Bm(i,null,null,l),Lm()),d=a.memoizedState,g=i.memoizedState,d.parent!==m?(d={parent:m,cache:m},i.memoizedState=d,i.lanes===0&&(i.memoizedState=i.updateQueue.baseState=d),an(i,Dt,m)):(m=g.cache,an(i,Dt,m),m!==d.cache&&N_(i,[Dt],l,!0))),Ut(a,i,i.pendingProps.children,l),i.child;case 29:throw i.pendingProps}throw Error(n(156,i.tag))}function ui(a){a.flags|=4}function yh(a,i,l,m,d){if((i=(a.mode&32)!==0)&&(i=!1),i){if(a.flags|=16777216,(d&335544128)===d)if(a.stateNode.complete)a.flags|=8192;else if(Ox())a.flags|=8192;else throw po=lp,I_}else a.flags&=-16777217}function cx(a,i){if(i.type!=="stylesheet"||(i.state.loading&4)!==0)a.flags&=-16777217;else if(a.flags|=16777216,!TC(i))if(Ox())a.flags|=8192;else throw po=lp,I_}function Cp(a,i){i!==null&&(a.flags|=4),a.flags&16384&&(i=a.tag!==22?Ub():536870912,a.lanes|=i,fr|=i)}function Hm(a,i){if(!Be)switch(a.tailMode){case"hidden":i=a.tail;for(var l=null;i!==null;)i.alternate!==null&&(l=i),i=i.sibling;l===null?a.tail=null:l.sibling=null;break;case"collapsed":l=a.tail;for(var m=null;l!==null;)l.alternate!==null&&(m=l),l=l.sibling;m===null?i||a.tail===null?a.tail=null:a.tail.sibling=null:m.sibling=null}}function ut(a){var i=a.alternate!==null&&a.alternate.child===a.child,l=0,m=0;if(i)for(var d=a.child;d!==null;)l|=d.lanes|d.childLanes,m|=d.subtreeFlags&65011712,m|=d.flags&65011712,d.return=a,d=d.sibling;else for(d=a.child;d!==null;)l|=d.lanes|d.childLanes,m|=d.subtreeFlags,m|=d.flags,d.return=a,d=d.sibling;return a.subtreeFlags|=m,a.childLanes=l,i}function rP(a,i,l){var m=i.pendingProps;switch(T_(i),i.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return ut(i),null;case 1:return ut(i),null;case 3:return l=i.stateNode,m=null,a!==null&&(m=a.memoizedState.cache),i.memoizedState.cache!==m&&(i.flags|=2048),oi(Dt),vt(),l.pendingContext&&(l.context=l.pendingContext,l.pendingContext=null),(a===null||a.child===null)&&(ir(i)?ui(i):a===null||a.memoizedState.isDehydrated&&(i.flags&256)===0||(i.flags|=1024,S_())),ut(i),null;case 26:var d=i.type,g=i.memoizedState;return a===null?(ui(i),g!==null?(ut(i),cx(i,g)):(ut(i),yh(i,d,null,m,l))):g?g!==a.memoizedState?(ui(i),ut(i),cx(i,g)):(ut(i),i.flags&=-16777217):(a=a.memoizedProps,a!==m&&ui(i),ut(i),yh(i,d,a,m,l)),null;case 27:if(Ic(i),l=ze.current,d=i.type,a!==null&&i.stateNode!=null)a.memoizedProps!==m&&ui(i);else{if(!m){if(i.stateNode===null)throw Error(n(166));return ut(i),null}a=ee.current,ir(i)?Uw(i):(a=yC(d,m,l),i.stateNode=a,ui(i))}return ut(i),null;case 5:if(Ic(i),d=i.type,a!==null&&i.stateNode!=null)a.memoizedProps!==m&&ui(i);else{if(!m){if(i.stateNode===null)throw Error(n(166));return ut(i),null}if(g=ee.current,ir(i))Uw(i);else{var y=Lp(ze.current);switch(g){case 1:g=y.createElementNS("http://www.w3.org/2000/svg",d);break;case 2:g=y.createElementNS("http://www.w3.org/1998/Math/MathML",d);break;default:switch(d){case"svg":g=y.createElementNS("http://www.w3.org/2000/svg",d);break;case"math":g=y.createElementNS("http://www.w3.org/1998/Math/MathML",d);break;case"script":g=y.createElement("div"),g.innerHTML="<script><\/script>",g=g.removeChild(g.firstChild);break;case"select":g=typeof m.is=="string"?y.createElement("select",{is:m.is}):y.createElement("select"),m.multiple?g.multiple=!0:m.size&&(g.size=m.size);break;default:g=typeof m.is=="string"?y.createElement(d,{is:m.is}):y.createElement(d)}}g[Pt]=i,g[oa]=m;e:for(y=i.child;y!==null;){if(y.tag===5||y.tag===6)g.appendChild(y.stateNode);else if(y.tag!==4&&y.tag!==27&&y.child!==null){y.child.return=y,y=y.child;continue}if(y===i)break e;for(;y.sibling===null;){if(y.return===null||y.return===i)break e;y=y.return}y.sibling.return=y.return,y=y.sibling}i.stateNode=g;e:switch(Gt(g,d,m),d){case"button":case"input":case"select":case"textarea":m=!!m.autoFocus;break e;case"img":m=!0;break e;default:m=!1}m&&ui(i)}}return ut(i),yh(i,i.type,a===null?null:a.memoizedProps,i.pendingProps,l),null;case 6:if(a&&i.stateNode!=null)a.memoizedProps!==m&&ui(i);else{if(typeof m!="string"&&i.stateNode===null)throw Error(n(166));if(a=ze.current,ir(i)){if(a=i.stateNode,l=i.memoizedProps,m=null,d=Wt,d!==null)switch(d.tag){case 27:case 5:m=d.memoizedProps}a[Pt]=i,a=!!(a.nodeValue===l||m!==null&&m.suppressHydrationWarning===!0||lC(a.nodeValue,l)),a||tn(i,!0)}else a=Lp(a).createTextNode(m),a[Pt]=i,i.stateNode=a}return ut(i),null;case 31:if(l=i.memoizedState,a===null||a.memoizedState!==null){if(m=ir(i),l!==null){if(a===null){if(!m)throw Error(n(318));if(a=i.memoizedState,a=a!==null?a.dehydrated:null,!a)throw Error(n(557));a[Pt]=i}else lo(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;ut(i),a=!1}else l=S_(),a!==null&&a.memoizedState!==null&&(a.memoizedState.hydrationErrors=l),a=!0;if(!a)return i.flags&256?(Ma(i),i):(Ma(i),null);if((i.flags&128)!==0)throw Error(n(558))}return ut(i),null;case 13:if(m=i.memoizedState,a===null||a.memoizedState!==null&&a.memoizedState.dehydrated!==null){if(d=ir(i),m!==null&&m.dehydrated!==null){if(a===null){if(!d)throw Error(n(318));if(d=i.memoizedState,d=d!==null?d.dehydrated:null,!d)throw Error(n(317));d[Pt]=i}else lo(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;ut(i),d=!1}else d=S_(),a!==null&&a.memoizedState!==null&&(a.memoizedState.hydrationErrors=d),d=!0;if(!d)return i.flags&256?(Ma(i),i):(Ma(i),null)}return Ma(i),(i.flags&128)!==0?(i.lanes=l,i):(l=m!==null,a=a!==null&&a.memoizedState!==null,l&&(m=i.child,d=null,m.alternate!==null&&m.alternate.memoizedState!==null&&m.alternate.memoizedState.cachePool!==null&&(d=m.alternate.memoizedState.cachePool.pool),g=null,m.memoizedState!==null&&m.memoizedState.cachePool!==null&&(g=m.memoizedState.cachePool.pool),g!==d&&(m.flags|=2048)),l!==a&&l&&(i.child.flags|=8192),Cp(i,i.updateQueue),ut(i),null);case 4:return vt(),a===null&&Bh(i.stateNode.containerInfo),ut(i),null;case 10:return oi(i.type),ut(i),null;case 19:if(W(kt),m=i.memoizedState,m===null)return ut(i),null;if(d=(i.flags&128)!==0,g=m.rendering,g===null)if(d)Hm(m,!1);else{if(ft!==0||a!==null&&(a.flags&128)!==0)for(a=i.child;a!==null;){if(g=cp(a),g!==null){for(i.flags|=128,Hm(m,!1),a=g.updateQueue,i.updateQueue=a,Cp(i,a),i.subtreeFlags=0,a=l,l=i.child;l!==null;)Lw(l,a),l=l.sibling;return X(kt,kt.current&1|2),Be&&ii(i,m.treeForkCount),i.child}a=a.sibling}m.tail!==null&&Ta()>Ap&&(i.flags|=128,d=!0,Hm(m,!1),i.lanes=4194304)}else{if(!d)if(a=cp(g),a!==null){if(i.flags|=128,d=!0,a=a.updateQueue,i.updateQueue=a,Cp(i,a),Hm(m,!0),m.tail===null&&m.tailMode==="hidden"&&!g.alternate&&!Be)return ut(i),null}else 2*Ta()-m.renderingStartTime>Ap&&l!==536870912&&(i.flags|=128,d=!0,Hm(m,!1),i.lanes=4194304);m.isBackwards?(g.sibling=i.child,i.child=g):(a=m.last,a!==null?a.sibling=g:i.child=g,m.last=g)}return m.tail!==null?(a=m.tail,m.rendering=a,m.tail=a.sibling,m.renderingStartTime=Ta(),a.sibling=null,l=kt.current,X(kt,d?l&1|2:l&1),Be&&ii(i,m.treeForkCount),a):(ut(i),null);case 22:case 23:return Ma(i),P_(),m=i.memoizedState!==null,a!==null?a.memoizedState!==null!==m&&(i.flags|=8192):m&&(i.flags|=8192),m?(l&536870912)!==0&&(i.flags&128)===0&&(ut(i),i.subtreeFlags&6&&(i.flags|=8192)):ut(i),l=i.updateQueue,l!==null&&Cp(i,l.retryQueue),l=null,a!==null&&a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(l=a.memoizedState.cachePool.pool),m=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(m=i.memoizedState.cachePool.pool),m!==l&&(i.flags|=2048),a!==null&&W(uo),null;case 24:return l=null,a!==null&&(l=a.memoizedState.cache),i.memoizedState.cache!==l&&(i.flags|=2048),oi(Dt),ut(i),null;case 25:return null;case 30:return null}throw Error(n(156,i.tag))}function mP(a,i){switch(T_(i),i.tag){case 1:return a=i.flags,a&65536?(i.flags=a&-65537|128,i):null;case 3:return oi(Dt),vt(),a=i.flags,(a&65536)!==0&&(a&128)===0?(i.flags=a&-65537|128,i):null;case 26:case 27:case 5:return Ic(i),null;case 31:if(i.memoizedState!==null){if(Ma(i),i.alternate===null)throw Error(n(340));lo()}return a=i.flags,a&65536?(i.flags=a&-65537|128,i):null;case 13:if(Ma(i),a=i.memoizedState,a!==null&&a.dehydrated!==null){if(i.alternate===null)throw Error(n(340));lo()}return a=i.flags,a&65536?(i.flags=a&-65537|128,i):null;case 19:return W(kt),null;case 4:return vt(),null;case 10:return oi(i.type),null;case 22:case 23:return Ma(i),P_(),a!==null&&W(uo),a=i.flags,a&65536?(i.flags=a&-65537|128,i):null;case 24:return oi(Dt),null;case 25:return null;default:return null}}function px(a,i){switch(T_(i),i.tag){case 3:oi(Dt),vt();break;case 26:case 27:case 5:Ic(i);break;case 4:vt();break;case 31:i.memoizedState!==null&&Ma(i);break;case 13:Ma(i);break;case 19:W(kt);break;case 10:oi(i.type);break;case 22:case 23:Ma(i),P_(),a!==null&&W(uo);break;case 24:oi(Dt)}}function Vm(a,i){try{var l=i.updateQueue,m=l!==null?l.lastEffect:null;if(m!==null){var d=m.next;l=d;do{if((l.tag&a)===a){m=void 0;var g=l.create,y=l.inst;m=g(),y.destroy=m}l=l.next}while(l!==d)}}catch(b){Xe(i,i.return,b)}}function mn(a,i,l){try{var m=i.updateQueue,d=m!==null?m.lastEffect:null;if(d!==null){var g=d.next;m=g;do{if((m.tag&a)===a){var y=m.inst,b=y.destroy;if(b!==void 0){y.destroy=void 0,d=i;var j=l,R=b;try{R()}catch(L){Xe(d,j,L)}}}m=m.next}while(m!==g)}}catch(L){Xe(i,i.return,L)}}function dx(a){var i=a.updateQueue;if(i!==null){var l=a.stateNode;try{s0(i,l)}catch(m){Xe(a,a.return,m)}}}function gx(a,i,l){l.props=ho(a.type,a.memoizedProps),l.state=a.memoizedState;try{l.componentWillUnmount()}catch(m){Xe(a,i,m)}}function Ym(a,i){try{var l=a.ref;if(l!==null){switch(a.tag){case 26:case 27:case 5:var m=a.stateNode;break;case 30:m=a.stateNode;break;default:m=a.stateNode}typeof l=="function"?a.refCleanup=l(m):l.current=m}}catch(d){Xe(a,i,d)}}function Os(a,i){var l=a.ref,m=a.refCleanup;if(l!==null)if(typeof m=="function")try{m()}catch(d){Xe(a,i,d)}finally{a.refCleanup=null,a=a.alternate,a!=null&&(a.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(d){Xe(a,i,d)}else l.current=null}function _x(a){var i=a.type,l=a.memoizedProps,m=a.stateNode;try{e:switch(i){case"button":case"input":case"select":case"textarea":l.autoFocus&&m.focus();break e;case"img":l.src?m.src=l.src:l.srcSet&&(m.srcset=l.srcSet)}}catch(d){Xe(a,a.return,d)}}function vh(a,i,l){try{var m=a.stateNode;NP(m,a.type,l,i),m[oa]=i}catch(d){Xe(a,a.return,d)}}function hx(a){return a.tag===5||a.tag===3||a.tag===26||a.tag===27&&hn(a.type)||a.tag===4}function kh(a){e:for(;;){for(;a.sibling===null;){if(a.return===null||hx(a.return))return null;a=a.return}for(a.sibling.return=a.return,a=a.sibling;a.tag!==5&&a.tag!==6&&a.tag!==18;){if(a.tag===27&&hn(a.type)||a.flags&2||a.child===null||a.tag===4)continue e;a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}function bh(a,i,l){var m=a.tag;if(m===5||m===6)a=a.stateNode,i?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(a,i):(i=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,i.appendChild(a),l=l._reactRootContainer,l!=null||i.onclick!==null||(i.onclick=ti));else if(m!==4&&(m===27&&hn(a.type)&&(l=a.stateNode,i=null),a=a.child,a!==null))for(bh(a,i,l),a=a.sibling;a!==null;)bh(a,i,l),a=a.sibling}function jp(a,i,l){var m=a.tag;if(m===5||m===6)a=a.stateNode,i?l.insertBefore(a,i):l.appendChild(a);else if(m!==4&&(m===27&&hn(a.type)&&(l=a.stateNode),a=a.child,a!==null))for(jp(a,i,l),a=a.sibling;a!==null;)jp(a,i,l),a=a.sibling}function fx(a){var i=a.stateNode,l=a.memoizedProps;try{for(var m=a.type,d=i.attributes;d.length;)i.removeAttributeNode(d[0]);Gt(i,m,l),i[Pt]=a,i[oa]=l}catch(g){Xe(a,a.return,g)}}var ci=!1,zt=!1,wh=!1,yx=typeof WeakSet=="function"?WeakSet:Set,Ot=null;function uP(a,i){if(a=a.containerInfo,Fh=Hp,a=zw(a),__(a)){if("selectionStart"in a)var l={start:a.selectionStart,end:a.selectionEnd};else e:{l=(l=a.ownerDocument)&&l.defaultView||window;var m=l.getSelection&&l.getSelection();if(m&&m.rangeCount!==0){l=m.anchorNode;var d=m.anchorOffset,g=m.focusNode;m=m.focusOffset;try{l.nodeType,g.nodeType}catch{l=null;break e}var y=0,b=-1,j=-1,R=0,L=0,P=a,E=null;t:for(;;){for(var O;P!==l||d!==0&&P.nodeType!==3||(b=y+d),P!==g||m!==0&&P.nodeType!==3||(j=y+m),P.nodeType===3&&(y+=P.nodeValue.length),(O=P.firstChild)!==null;)E=P,P=O;for(;;){if(P===a)break t;if(E===l&&++R===d&&(b=y),E===g&&++L===m&&(j=y),(O=P.nextSibling)!==null)break;P=E,E=P.parentNode}P=O}l=b===-1||j===-1?null:{start:b,end:j}}else l=null}l=l||{start:0,end:0}}else l=null;for(Uh={focusedElem:a,selectionRange:l},Hp=!1,Ot=i;Ot!==null;)if(i=Ot,a=i.child,(i.subtreeFlags&1028)!==0&&a!==null)a.return=i,Ot=a;else for(;Ot!==null;){switch(i=Ot,g=i.alternate,a=i.flags,i.tag){case 0:if((a&4)!==0&&(a=i.updateQueue,a=a!==null?a.events:null,a!==null))for(l=0;l<a.length;l++)d=a[l],d.ref.impl=d.nextImpl;break;case 11:case 15:break;case 1:if((a&1024)!==0&&g!==null){a=void 0,l=i,d=g.memoizedProps,g=g.memoizedState,m=l.stateNode;try{var ae=ho(l.type,d);a=m.getSnapshotBeforeUpdate(ae,g),m.__reactInternalSnapshotBeforeUpdate=a}catch(pe){Xe(l,l.return,pe)}}break;case 3:if((a&1024)!==0){if(a=i.stateNode.containerInfo,l=a.nodeType,l===9)Vh(a);else if(l===1)switch(a.nodeName){case"HEAD":case"HTML":case"BODY":Vh(a);break;default:a.textContent=""}}break;case 5:case 26:case 27:case 6:case 4:case 17:break;default:if((a&1024)!==0)throw Error(n(163))}if(a=i.sibling,a!==null){a.return=i.return,Ot=a;break}Ot=i.return}}function vx(a,i,l){var m=l.flags;switch(l.tag){case 0:case 11:case 15:di(a,l),m&4&&Vm(5,l);break;case 1:if(di(a,l),m&4)if(a=l.stateNode,i===null)try{a.componentDidMount()}catch(y){Xe(l,l.return,y)}else{var d=ho(l.type,i.memoizedProps);i=i.memoizedState;try{a.componentDidUpdate(d,i,a.__reactInternalSnapshotBeforeUpdate)}catch(y){Xe(l,l.return,y)}}m&64&&dx(l),m&512&&Ym(l,l.return);break;case 3:if(di(a,l),m&64&&(a=l.updateQueue,a!==null)){if(i=null,l.child!==null)switch(l.child.tag){case 27:case 5:i=l.child.stateNode;break;case 1:i=l.child.stateNode}try{s0(a,i)}catch(y){Xe(l,l.return,y)}}break;case 27:i===null&&m&4&&fx(l);case 26:case 5:di(a,l),i===null&&m&4&&_x(l),m&512&&Ym(l,l.return);break;case 12:di(a,l);break;case 31:di(a,l),m&4&&wx(a,l);break;case 13:di(a,l),m&4&&xx(a,l),m&64&&(a=l.memoizedState,a!==null&&(a=a.dehydrated,a!==null&&(l=vP.bind(null,l),LP(a,l))));break;case 22:if(m=l.memoizedState!==null||ci,!m){i=i!==null&&i.memoizedState!==null||zt,d=ci;var g=zt;ci=m,(zt=i)&&!g?gi(a,l,(l.subtreeFlags&8772)!==0):di(a,l),ci=d,zt=g}break;case 30:break;default:di(a,l)}}function kx(a){var i=a.alternate;i!==null&&(a.alternate=null,kx(i)),a.child=null,a.deletions=null,a.sibling=null,a.tag===5&&(i=a.stateNode,i!==null&&Xg(i)),a.stateNode=null,a.return=null,a.dependencies=null,a.memoizedProps=null,a.memoizedState=null,a.pendingProps=null,a.stateNode=null,a.updateQueue=null}var pt=null,ra=!1;function pi(a,i,l){for(l=l.child;l!==null;)bx(a,i,l),l=l.sibling}function bx(a,i,l){if(Da&&typeof Da.onCommitFiberUnmount=="function")try{Da.onCommitFiberUnmount(ym,l)}catch{}switch(l.tag){case 26:zt||Os(l,i),pi(a,i,l),l.memoizedState?l.memoizedState.count--:l.stateNode&&(l=l.stateNode,l.parentNode.removeChild(l));break;case 27:zt||Os(l,i);var m=pt,d=ra;hn(l.type)&&(pt=l.stateNode,ra=!1),pi(a,i,l),su(l.stateNode),pt=m,ra=d;break;case 5:zt||Os(l,i);case 6:if(m=pt,d=ra,pt=null,pi(a,i,l),pt=m,ra=d,pt!==null)if(ra)try{(pt.nodeType===9?pt.body:pt.nodeName==="HTML"?pt.ownerDocument.body:pt).removeChild(l.stateNode)}catch(g){Xe(l,i,g)}else try{pt.removeChild(l.stateNode)}catch(g){Xe(l,i,g)}break;case 18:pt!==null&&(ra?(a=pt,dC(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,l.stateNode),jr(a)):dC(pt,l.stateNode));break;case 4:m=pt,d=ra,pt=l.stateNode.containerInfo,ra=!0,pi(a,i,l),pt=m,ra=d;break;case 0:case 11:case 14:case 15:mn(2,l,i),zt||mn(4,l,i),pi(a,i,l);break;case 1:zt||(Os(l,i),m=l.stateNode,typeof m.componentWillUnmount=="function"&&gx(l,i,m)),pi(a,i,l);break;case 21:pi(a,i,l);break;case 22:zt=(m=zt)||l.memoizedState!==null,pi(a,i,l),zt=m;break;default:pi(a,i,l)}}function wx(a,i){if(i.memoizedState===null&&(a=i.alternate,a!==null&&(a=a.memoizedState,a!==null))){a=a.dehydrated;try{jr(a)}catch(l){Xe(i,i.return,l)}}}function xx(a,i){if(i.memoizedState===null&&(a=i.alternate,a!==null&&(a=a.memoizedState,a!==null&&(a=a.dehydrated,a!==null))))try{jr(a)}catch(l){Xe(i,i.return,l)}}function cP(a){switch(a.tag){case 31:case 13:case 19:var i=a.stateNode;return i===null&&(i=a.stateNode=new yx),i;case 22:return a=a.stateNode,i=a._retryCache,i===null&&(i=a._retryCache=new yx),i;default:throw Error(n(435,a.tag))}}function Tp(a,i){var l=cP(a);i.forEach(function(m){if(!l.has(m)){l.add(m);var d=kP.bind(null,a,m);m.then(d,d)}})}function ma(a,i){var l=i.deletions;if(l!==null)for(var m=0;m<l.length;m++){var d=l[m],g=a,y=i,b=y;e:for(;b!==null;){switch(b.tag){case 27:if(hn(b.type)){pt=b.stateNode,ra=!1;break e}break;case 5:pt=b.stateNode,ra=!1;break e;case 3:case 4:pt=b.stateNode.containerInfo,ra=!0;break e}b=b.return}if(pt===null)throw Error(n(160));bx(g,y,d),pt=null,ra=!1,g=d.alternate,g!==null&&(g.return=null),d.return=null}if(i.subtreeFlags&13886)for(i=i.child;i!==null;)Cx(i,a),i=i.sibling}var gs=null;function Cx(a,i){var l=a.alternate,m=a.flags;switch(a.tag){case 0:case 11:case 14:case 15:ma(i,a),ua(a),m&4&&(mn(3,a,a.return),Vm(3,a),mn(5,a,a.return));break;case 1:ma(i,a),ua(a),m&512&&(zt||l===null||Os(l,l.return)),m&64&&ci&&(a=a.updateQueue,a!==null&&(m=a.callbacks,m!==null&&(l=a.shared.hiddenCallbacks,a.shared.hiddenCallbacks=l===null?m:l.concat(m))));break;case 26:var d=gs;if(ma(i,a),ua(a),m&512&&(zt||l===null||Os(l,l.return)),m&4){var g=l!==null?l.memoizedState:null;if(m=a.memoizedState,l===null)if(m===null)if(a.stateNode===null){e:{m=a.type,l=a.memoizedProps,d=d.ownerDocument||d;t:switch(m){case"title":g=d.getElementsByTagName("title")[0],(!g||g[bm]||g[Pt]||g.namespaceURI==="http://www.w3.org/2000/svg"||g.hasAttribute("itemprop"))&&(g=d.createElement(m),d.head.insertBefore(g,d.querySelector("head > title"))),Gt(g,m,l),g[Pt]=a,qt(g),m=g;break e;case"link":var y=CC("link","href",d).get(m+(l.href||""));if(y){for(var b=0;b<y.length;b++)if(g=y[b],g.getAttribute("href")===(l.href==null||l.href===""?null:l.href)&&g.getAttribute("rel")===(l.rel==null?null:l.rel)&&g.getAttribute("title")===(l.title==null?null:l.title)&&g.getAttribute("crossorigin")===(l.crossOrigin==null?null:l.crossOrigin)){y.splice(b,1);break t}}g=d.createElement(m),Gt(g,m,l),d.head.appendChild(g);break;case"meta":if(y=CC("meta","content",d).get(m+(l.content||""))){for(b=0;b<y.length;b++)if(g=y[b],g.getAttribute("content")===(l.content==null?null:""+l.content)&&g.getAttribute("name")===(l.name==null?null:l.name)&&g.getAttribute("property")===(l.property==null?null:l.property)&&g.getAttribute("http-equiv")===(l.httpEquiv==null?null:l.httpEquiv)&&g.getAttribute("charset")===(l.charSet==null?null:l.charSet)){y.splice(b,1);break t}}g=d.createElement(m),Gt(g,m,l),d.head.appendChild(g);break;default:throw Error(n(468,m))}g[Pt]=a,qt(g),m=g}a.stateNode=m}else jC(d,a.type,a.stateNode);else a.stateNode=xC(d,m,a.memoizedProps);else g!==m?(g===null?l.stateNode!==null&&(l=l.stateNode,l.parentNode.removeChild(l)):g.count--,m===null?jC(d,a.type,a.stateNode):xC(d,m,a.memoizedProps)):m===null&&a.stateNode!==null&&vh(a,a.memoizedProps,l.memoizedProps)}break;case 27:ma(i,a),ua(a),m&512&&(zt||l===null||Os(l,l.return)),l!==null&&m&4&&vh(a,a.memoizedProps,l.memoizedProps);break;case 5:if(ma(i,a),ua(a),m&512&&(zt||l===null||Os(l,l.return)),a.flags&32){d=a.stateNode;try{Yl(d,"")}catch(ae){Xe(a,a.return,ae)}}m&4&&a.stateNode!=null&&(d=a.memoizedProps,vh(a,d,l!==null?l.memoizedProps:d)),m&1024&&(wh=!0);break;case 6:if(ma(i,a),ua(a),m&4){if(a.stateNode===null)throw Error(n(162));m=a.memoizedProps,l=a.stateNode;try{l.nodeValue=m}catch(ae){Xe(a,a.return,ae)}}break;case 3:if(Wp=null,d=gs,gs=Bp(i.containerInfo),ma(i,a),gs=d,ua(a),m&4&&l!==null&&l.memoizedState.isDehydrated)try{jr(i.containerInfo)}catch(ae){Xe(a,a.return,ae)}wh&&(wh=!1,jx(a));break;case 4:m=gs,gs=Bp(a.stateNode.containerInfo),ma(i,a),ua(a),gs=m;break;case 12:ma(i,a),ua(a);break;case 31:ma(i,a),ua(a),m&4&&(m=a.updateQueue,m!==null&&(a.updateQueue=null,Tp(a,m)));break;case 13:ma(i,a),ua(a),a.child.flags&8192&&a.memoizedState!==null!=(l!==null&&l.memoizedState!==null)&&(Sp=Ta()),m&4&&(m=a.updateQueue,m!==null&&(a.updateQueue=null,Tp(a,m)));break;case 22:d=a.memoizedState!==null;var j=l!==null&&l.memoizedState!==null,R=ci,L=zt;if(ci=R||d,zt=L||j,ma(i,a),zt=L,ci=R,ua(a),m&8192)e:for(i=a.stateNode,i._visibility=d?i._visibility&-2:i._visibility|1,d&&(l===null||j||ci||zt||fo(a)),l=null,i=a;;){if(i.tag===5||i.tag===26){if(l===null){j=l=i;try{if(g=j.stateNode,d)y=g.style,typeof y.setProperty=="function"?y.setProperty("display","none","important"):y.display="none";else{b=j.stateNode;var P=j.memoizedProps.style,E=P!=null&&P.hasOwnProperty("display")?P.display:null;b.style.display=E==null||typeof E=="boolean"?"":(""+E).trim()}}catch(ae){Xe(j,j.return,ae)}}}else if(i.tag===6){if(l===null){j=i;try{j.stateNode.nodeValue=d?"":j.memoizedProps}catch(ae){Xe(j,j.return,ae)}}}else if(i.tag===18){if(l===null){j=i;try{var O=j.stateNode;d?gC(O,!0):gC(j.stateNode,!1)}catch(ae){Xe(j,j.return,ae)}}}else if((i.tag!==22&&i.tag!==23||i.memoizedState===null||i===a)&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===a)break e;for(;i.sibling===null;){if(i.return===null||i.return===a)break e;l===i&&(l=null),i=i.return}l===i&&(l=null),i.sibling.return=i.return,i=i.sibling}m&4&&(m=a.updateQueue,m!==null&&(l=m.retryQueue,l!==null&&(m.retryQueue=null,Tp(a,l))));break;case 19:ma(i,a),ua(a),m&4&&(m=a.updateQueue,m!==null&&(a.updateQueue=null,Tp(a,m)));break;case 30:break;case 21:break;default:ma(i,a),ua(a)}}function ua(a){var i=a.flags;if(i&2){try{for(var l,m=a.return;m!==null;){if(hx(m)){l=m;break}m=m.return}if(l==null)throw Error(n(160));switch(l.tag){case 27:var d=l.stateNode,g=kh(a);jp(a,g,d);break;case 5:var y=l.stateNode;l.flags&32&&(Yl(y,""),l.flags&=-33);var b=kh(a);jp(a,b,y);break;case 3:case 4:var j=l.stateNode.containerInfo,R=kh(a);bh(a,R,j);break;default:throw Error(n(161))}}catch(L){Xe(a,a.return,L)}a.flags&=-3}i&4096&&(a.flags&=-4097)}function jx(a){if(a.subtreeFlags&1024)for(a=a.child;a!==null;){var i=a;jx(i),i.tag===5&&i.flags&1024&&i.stateNode.reset(),a=a.sibling}}function di(a,i){if(i.subtreeFlags&8772)for(i=i.child;i!==null;)vx(a,i.alternate,i),i=i.sibling}function fo(a){for(a=a.child;a!==null;){var i=a;switch(i.tag){case 0:case 11:case 14:case 15:mn(4,i,i.return),fo(i);break;case 1:Os(i,i.return);var l=i.stateNode;typeof l.componentWillUnmount=="function"&&gx(i,i.return,l),fo(i);break;case 27:su(i.stateNode);case 26:case 5:Os(i,i.return),fo(i);break;case 22:i.memoizedState===null&&fo(i);break;case 30:fo(i);break;default:fo(i)}a=a.sibling}}function gi(a,i,l){for(l=l&&(i.subtreeFlags&8772)!==0,i=i.child;i!==null;){var m=i.alternate,d=a,g=i,y=g.flags;switch(g.tag){case 0:case 11:case 15:gi(d,g,l),Vm(4,g);break;case 1:if(gi(d,g,l),m=g,d=m.stateNode,typeof d.componentDidMount=="function")try{d.componentDidMount()}catch(R){Xe(m,m.return,R)}if(m=g,d=m.updateQueue,d!==null){var b=m.stateNode;try{var j=d.shared.hiddenCallbacks;if(j!==null)for(d.shared.hiddenCallbacks=null,d=0;d<j.length;d++)a0(j[d],b)}catch(R){Xe(m,m.return,R)}}l&&y&64&&dx(g),Ym(g,g.return);break;case 27:fx(g);case 26:case 5:gi(d,g,l),l&&m===null&&y&4&&_x(g),Ym(g,g.return);break;case 12:gi(d,g,l);break;case 31:gi(d,g,l),l&&y&4&&wx(d,g);break;case 13:gi(d,g,l),l&&y&4&&xx(d,g);break;case 22:g.memoizedState===null&&gi(d,g,l),Ym(g,g.return);break;case 30:break;default:gi(d,g,l)}i=i.sibling}}function xh(a,i){var l=null;a!==null&&a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(l=a.memoizedState.cachePool.pool),a=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(a=i.memoizedState.cachePool.pool),a!==l&&(a!=null&&a.refCount++,l!=null&&Em(l))}function Ch(a,i){a=null,i.alternate!==null&&(a=i.alternate.memoizedState.cache),i=i.memoizedState.cache,i!==a&&(i.refCount++,a!=null&&Em(a))}function _s(a,i,l,m){if(i.subtreeFlags&10256)for(i=i.child;i!==null;)Tx(a,i,l,m),i=i.sibling}function Tx(a,i,l,m){var d=i.flags;switch(i.tag){case 0:case 11:case 15:_s(a,i,l,m),d&2048&&Vm(9,i);break;case 1:_s(a,i,l,m);break;case 3:_s(a,i,l,m),d&2048&&(a=null,i.alternate!==null&&(a=i.alternate.memoizedState.cache),i=i.memoizedState.cache,i!==a&&(i.refCount++,a!=null&&Em(a)));break;case 12:if(d&2048){_s(a,i,l,m),a=i.stateNode;try{var g=i.memoizedProps,y=g.id,b=g.onPostCommit;typeof b=="function"&&b(y,i.alternate===null?"mount":"update",a.passiveEffectDuration,-0)}catch(j){Xe(i,i.return,j)}}else _s(a,i,l,m);break;case 31:_s(a,i,l,m);break;case 13:_s(a,i,l,m);break;case 23:break;case 22:g=i.stateNode,y=i.alternate,i.memoizedState!==null?g._visibility&2?_s(a,i,l,m):Qm(a,i):g._visibility&2?_s(a,i,l,m):(g._visibility|=2,gr(a,i,l,m,(i.subtreeFlags&10256)!==0||!1)),d&2048&&xh(y,i);break;case 24:_s(a,i,l,m),d&2048&&Ch(i.alternate,i);break;default:_s(a,i,l,m)}}function gr(a,i,l,m,d){for(d=d&&((i.subtreeFlags&10256)!==0||!1),i=i.child;i!==null;){var g=a,y=i,b=l,j=m,R=y.flags;switch(y.tag){case 0:case 11:case 15:gr(g,y,b,j,d),Vm(8,y);break;case 23:break;case 22:var L=y.stateNode;y.memoizedState!==null?L._visibility&2?gr(g,y,b,j,d):Qm(g,y):(L._visibility|=2,gr(g,y,b,j,d)),d&&R&2048&&xh(y.alternate,y);break;case 24:gr(g,y,b,j,d),d&&R&2048&&Ch(y.alternate,y);break;default:gr(g,y,b,j,d)}i=i.sibling}}function Qm(a,i){if(i.subtreeFlags&10256)for(i=i.child;i!==null;){var l=a,m=i,d=m.flags;switch(m.tag){case 22:Qm(l,m),d&2048&&xh(m.alternate,m);break;case 24:Qm(l,m),d&2048&&Ch(m.alternate,m);break;default:Qm(l,m)}i=i.sibling}}var Km=8192;function _r(a,i,l){if(a.subtreeFlags&Km)for(a=a.child;a!==null;)Dx(a,i,l),a=a.sibling}function Dx(a,i,l){switch(a.tag){case 26:_r(a,i,l),a.flags&Km&&a.memoizedState!==null&&ZP(l,gs,a.memoizedState,a.memoizedProps);break;case 5:_r(a,i,l);break;case 3:case 4:var m=gs;gs=Bp(a.stateNode.containerInfo),_r(a,i,l),gs=m;break;case 22:a.memoizedState===null&&(m=a.alternate,m!==null&&m.memoizedState!==null?(m=Km,Km=16777216,_r(a,i,l),Km=m):_r(a,i,l));break;default:_r(a,i,l)}}function Sx(a){var i=a.alternate;if(i!==null&&(a=i.child,a!==null)){i.child=null;do i=a.sibling,a.sibling=null,a=i;while(a!==null)}}function Zm(a){var i=a.deletions;if((a.flags&16)!==0){if(i!==null)for(var l=0;l<i.length;l++){var m=i[l];Ot=m,zx(m,a)}Sx(a)}if(a.subtreeFlags&10256)for(a=a.child;a!==null;)Ax(a),a=a.sibling}function Ax(a){switch(a.tag){case 0:case 11:case 15:Zm(a),a.flags&2048&&mn(9,a,a.return);break;case 3:Zm(a);break;case 12:Zm(a);break;case 22:var i=a.stateNode;a.memoizedState!==null&&i._visibility&2&&(a.return===null||a.return.tag!==13)?(i._visibility&=-3,Dp(a)):Zm(a);break;default:Zm(a)}}function Dp(a){var i=a.deletions;if((a.flags&16)!==0){if(i!==null)for(var l=0;l<i.length;l++){var m=i[l];Ot=m,zx(m,a)}Sx(a)}for(a=a.child;a!==null;){switch(i=a,i.tag){case 0:case 11:case 15:mn(8,i,i.return),Dp(i);break;case 22:l=i.stateNode,l._visibility&2&&(l._visibility&=-3,Dp(i));break;default:Dp(i)}a=a.sibling}}function zx(a,i){for(;Ot!==null;){var l=Ot;switch(l.tag){case 0:case 11:case 15:mn(8,l,i);break;case 23:case 22:if(l.memoizedState!==null&&l.memoizedState.cachePool!==null){var m=l.memoizedState.cachePool.pool;m!=null&&m.refCount++}break;case 24:Em(l.memoizedState.cache)}if(m=l.child,m!==null)m.return=l,Ot=m;else e:for(l=a;Ot!==null;){m=Ot;var d=m.sibling,g=m.return;if(kx(m),m===l){Ot=null;break e}if(d!==null){d.return=g,Ot=d;break e}Ot=g}}}var pP={getCacheForType:function(a){var i=Ft(Dt),l=i.data.get(a);return l===void 0&&(l=a(),i.data.set(a,l)),l},cacheSignal:function(){return Ft(Dt).controller.signal}},dP=typeof WeakMap=="function"?WeakMap:Map,Qe=0,st=null,Me=null,qe=0,Ze=0,Ra=null,un=!1,hr=!1,jh=!1,_i=0,ft=0,cn=0,yo=0,Th=0,Ea=0,fr=0,Xm=null,ca=null,Dh=!1,Sp=0,Nx=0,Ap=1/0,zp=null,pn=null,Rt=0,dn=null,yr=null,hi=0,Sh=0,Ah=null,Mx=null,Jm=0,zh=null;function Ia(){return(Qe&2)!==0&&qe!==0?qe&-qe:$.T!==null?qh():Yb()}function Rx(){if(Ea===0)if((qe&536870912)===0||Be){var a=$c;$c<<=1,($c&3932160)===0&&($c=262144),Ea=a}else Ea=536870912;return a=Na.current,a!==null&&(a.flags|=32),Ea}function pa(a,i,l){(a===st&&(Ze===2||Ze===9)||a.cancelPendingCommit!==null)&&(vr(a,0),gn(a,qe,Ea,!1)),km(a,l),((Qe&2)===0||a!==st)&&(a===st&&((Qe&2)===0&&(yo|=l),ft===4&&gn(a,qe,Ea,!1)),$s(a))}function Ex(a,i,l){if((Qe&6)!==0)throw Error(n(327));var m=!l&&(i&127)===0&&(i&a.expiredLanes)===0||vm(a,i),d=m?hP(a,i):Mh(a,i,!0),g=m;do{if(d===0){hr&&!m&&gn(a,i,0,!1);break}else{if(l=a.current.alternate,g&&!gP(l)){d=Mh(a,i,!1),g=!1;continue}if(d===2){if(g=i,a.errorRecoveryDisabledLanes&g)var y=0;else y=a.pendingLanes&-536870913,y=y!==0?y:y&536870912?536870912:0;if(y!==0){i=y;e:{var b=a;d=Xm;var j=b.current.memoizedState.isDehydrated;if(j&&(vr(b,y).flags|=256),y=Mh(b,y,!1),y!==2){if(jh&&!j){b.errorRecoveryDisabledLanes|=g,yo|=g,d=4;break e}g=ca,ca=d,g!==null&&(ca===null?ca=g:ca.push.apply(ca,g))}d=y}if(g=!1,d!==2)continue}}if(d===1){vr(a,0),gn(a,i,0,!0);break}e:{switch(m=a,g=d,g){case 0:case 1:throw Error(n(345));case 4:if((i&4194048)!==i)break;case 6:gn(m,i,Ea,!un);break e;case 2:ca=null;break;case 3:case 5:break;default:throw Error(n(329))}if((i&62914560)===i&&(d=Sp+300-Ta(),10<d)){if(gn(m,i,Ea,!un),Bc(m,0,!0)!==0)break e;hi=i,m.timeoutHandle=cC(Ix.bind(null,m,l,ca,zp,Dh,i,Ea,yo,fr,un,g,"Throttled",-0,0),d);break e}Ix(m,l,ca,zp,Dh,i,Ea,yo,fr,un,g,null,-0,0)}}break}while(!0);$s(a)}function Ix(a,i,l,m,d,g,y,b,j,R,L,P,E,O){if(a.timeoutHandle=-1,P=i.subtreeFlags,P&8192||(P&16785408)===16785408){P={stylesheets:null,count:0,imgCount:0,imgBytes:0,suspenseyImages:[],waitingForImages:!0,waitingForViewTransition:!1,unsuspend:ti},Dx(i,g,P);var ae=(g&62914560)===g?Sp-Ta():(g&4194048)===g?Nx-Ta():0;if(ae=XP(P,ae),ae!==null){hi=g,a.cancelPendingCommit=ae(Fx.bind(null,a,i,g,l,m,d,y,b,j,L,P,null,E,O)),gn(a,g,y,!R);return}}Fx(a,i,g,l,m,d,y,b,j)}function gP(a){for(var i=a;;){var l=i.tag;if((l===0||l===11||l===15)&&i.flags&16384&&(l=i.updateQueue,l!==null&&(l=l.stores,l!==null)))for(var m=0;m<l.length;m++){var d=l[m],g=d.getSnapshot;d=d.value;try{if(!Aa(g(),d))return!1}catch{return!1}}if(l=i.child,i.subtreeFlags&16384&&l!==null)l.return=i,i=l;else{if(i===a)break;for(;i.sibling===null;){if(i.return===null||i.return===a)return!0;i=i.return}i.sibling.return=i.return,i=i.sibling}}return!0}function gn(a,i,l,m){i&=~Th,i&=~yo,a.suspendedLanes|=i,a.pingedLanes&=~i,m&&(a.warmLanes|=i),m=a.expirationTimes;for(var d=i;0<d;){var g=31-Sa(d),y=1<<g;m[g]=-1,d&=~y}l!==0&&Gb(a,l,i)}function Np(){return(Qe&6)===0?(eu(0),!1):!0}function Nh(){if(Me!==null){if(Ze===0)var a=Me.return;else a=Me,ni=ro=null,V_(a),mr=null,qm=0,a=Me;for(;a!==null;)px(a.alternate,a),a=a.return;Me=null}}function vr(a,i){var l=a.timeoutHandle;l!==-1&&(a.timeoutHandle=-1,EP(l)),l=a.cancelPendingCommit,l!==null&&(a.cancelPendingCommit=null,l()),hi=0,Nh(),st=a,Me=l=si(a.current,null),qe=i,Ze=0,Ra=null,un=!1,hr=vm(a,i),jh=!1,fr=Ea=Th=yo=cn=ft=0,ca=Xm=null,Dh=!1,(i&8)!==0&&(i|=i&32);var m=a.entangledLanes;if(m!==0)for(a=a.entanglements,m&=i;0<m;){var d=31-Sa(m),g=1<<d;i|=a[d],m&=~g}return _i=i,Xc(),l}function qx(a,i){Se=null,$.H=Um,i===rr||i===op?(i=Xw(),Ze=3):i===I_?(i=Xw(),Ze=4):Ze=i===mh?8:i!==null&&typeof i=="object"&&typeof i.then=="function"?6:1,Ra=i,Me===null&&(ft=1,kp(a,Ya(i,a.current)))}function Ox(){var a=Na.current;return a===null?!0:(qe&4194048)===qe?Xa===null:(qe&62914560)===qe||(qe&536870912)!==0?a===Xa:!1}function $x(){var a=$.H;return $.H=Um,a===null?Um:a}function Lx(){var a=$.A;return $.A=pP,a}function Mp(){ft=4,un||(qe&4194048)!==qe&&Na.current!==null||(hr=!0),(cn&134217727)===0&&(yo&134217727)===0||st===null||gn(st,qe,Ea,!1)}function Mh(a,i,l){var m=Qe;Qe|=2;var d=$x(),g=Lx();(st!==a||qe!==i)&&(zp=null,vr(a,i)),i=!1;var y=ft;e:do try{if(Ze!==0&&Me!==null){var b=Me,j=Ra;switch(Ze){case 8:Nh(),y=6;break e;case 3:case 2:case 9:case 6:Na.current===null&&(i=!0);var R=Ze;if(Ze=0,Ra=null,kr(a,b,j,R),l&&hr){y=0;break e}break;default:R=Ze,Ze=0,Ra=null,kr(a,b,j,R)}}_P(),y=ft;break}catch(L){qx(a,L)}while(!0);return i&&a.shellSuspendCounter++,ni=ro=null,Qe=m,$.H=d,$.A=g,Me===null&&(st=null,qe=0,Xc()),y}function _P(){for(;Me!==null;)Bx(Me)}function hP(a,i){var l=Qe;Qe|=2;var m=$x(),d=Lx();st!==a||qe!==i?(zp=null,Ap=Ta()+500,vr(a,i)):hr=vm(a,i);e:do try{if(Ze!==0&&Me!==null){i=Me;var g=Ra;t:switch(Ze){case 1:Ze=0,Ra=null,kr(a,i,g,1);break;case 2:case 9:if(Kw(g)){Ze=0,Ra=null,Px(i);break}i=function(){Ze!==2&&Ze!==9||st!==a||(Ze=7),$s(a)},g.then(i,i);break e;case 3:Ze=7;break e;case 4:Ze=5;break e;case 7:Kw(g)?(Ze=0,Ra=null,Px(i)):(Ze=0,Ra=null,kr(a,i,g,7));break;case 5:var y=null;switch(Me.tag){case 26:y=Me.memoizedState;case 5:case 27:var b=Me;if(y?TC(y):b.stateNode.complete){Ze=0,Ra=null;var j=b.sibling;if(j!==null)Me=j;else{var R=b.return;R!==null?(Me=R,Rp(R)):Me=null}break t}}Ze=0,Ra=null,kr(a,i,g,5);break;case 6:Ze=0,Ra=null,kr(a,i,g,6);break;case 8:Nh(),ft=6;break e;default:throw Error(n(462))}}fP();break}catch(L){qx(a,L)}while(!0);return ni=ro=null,$.H=m,$.A=d,Qe=l,Me!==null?0:(st=null,qe=0,Xc(),ft)}function fP(){for(;Me!==null&&!BB();)Bx(Me)}function Bx(a){var i=ux(a.alternate,a,_i);a.memoizedProps=a.pendingProps,i===null?Rp(a):Me=i}function Px(a){var i=a,l=i.alternate;switch(i.tag){case 15:case 0:i=ix(l,i,i.pendingProps,i.type,void 0,qe);break;case 11:i=ix(l,i,i.pendingProps,i.type.render,i.ref,qe);break;case 5:V_(i);default:px(l,i),i=Me=Lw(i,_i),i=ux(l,i,_i)}a.memoizedProps=a.pendingProps,i===null?Rp(a):Me=i}function kr(a,i,l,m){ni=ro=null,V_(i),mr=null,qm=0;var d=i.return;try{if(nP(a,d,i,l,qe)){ft=1,kp(a,Ya(l,a.current)),Me=null;return}}catch(g){if(d!==null)throw Me=d,g;ft=1,kp(a,Ya(l,a.current)),Me=null;return}i.flags&32768?(Be||m===1?a=!0:hr||(qe&536870912)!==0?a=!1:(un=a=!0,(m===2||m===9||m===3||m===6)&&(m=Na.current,m!==null&&m.tag===13&&(m.flags|=16384))),Wx(i,a)):Rp(i)}function Rp(a){var i=a;do{if((i.flags&32768)!==0){Wx(i,un);return}a=i.return;var l=rP(i.alternate,i,_i);if(l!==null){Me=l;return}if(i=i.sibling,i!==null){Me=i;return}Me=i=a}while(i!==null);ft===0&&(ft=5)}function Wx(a,i){do{var l=mP(a.alternate,a);if(l!==null){l.flags&=32767,Me=l;return}if(l=a.return,l!==null&&(l.flags|=32768,l.subtreeFlags=0,l.deletions=null),!i&&(a=a.sibling,a!==null)){Me=a;return}Me=a=l}while(a!==null);ft=6,Me=null}function Fx(a,i,l,m,d,g,y,b,j){a.cancelPendingCommit=null;do Ep();while(Rt!==0);if((Qe&6)!==0)throw Error(n(327));if(i!==null){if(i===a.current)throw Error(n(177));if(g=i.lanes|i.childLanes,g|=k_,KB(a,l,g,y,b,j),a===st&&(Me=st=null,qe=0),yr=i,dn=a,hi=l,Sh=g,Ah=d,Mx=m,(i.subtreeFlags&10256)!==0||(i.flags&10256)!==0?(a.callbackNode=null,a.callbackPriority=0,bP(qc,function(){return Yx(),null})):(a.callbackNode=null,a.callbackPriority=0),m=(i.flags&13878)!==0,(i.subtreeFlags&13878)!==0||m){m=$.T,$.T=null,d=K.p,K.p=2,y=Qe,Qe|=4;try{uP(a,i,l)}finally{Qe=y,K.p=d,$.T=m}}Rt=1,Ux(),Gx(),Hx()}}function Ux(){if(Rt===1){Rt=0;var a=dn,i=yr,l=(i.flags&13878)!==0;if((i.subtreeFlags&13878)!==0||l){l=$.T,$.T=null;var m=K.p;K.p=2;var d=Qe;Qe|=4;try{Cx(i,a);var g=Uh,y=zw(a.containerInfo),b=g.focusedElem,j=g.selectionRange;if(y!==b&&b&&b.ownerDocument&&Aw(b.ownerDocument.documentElement,b)){if(j!==null&&__(b)){var R=j.start,L=j.end;if(L===void 0&&(L=R),"selectionStart"in b)b.selectionStart=R,b.selectionEnd=Math.min(L,b.value.length);else{var P=b.ownerDocument||document,E=P&&P.defaultView||window;if(E.getSelection){var O=E.getSelection(),ae=b.textContent.length,pe=Math.min(j.start,ae),at=j.end===void 0?pe:Math.min(j.end,ae);!O.extend&&pe>at&&(y=at,at=pe,pe=y);var z=Sw(b,pe),D=Sw(b,at);if(z&&D&&(O.rangeCount!==1||O.anchorNode!==z.node||O.anchorOffset!==z.offset||O.focusNode!==D.node||O.focusOffset!==D.offset)){var M=P.createRange();M.setStart(z.node,z.offset),O.removeAllRanges(),pe>at?(O.addRange(M),O.extend(D.node,D.offset)):(M.setEnd(D.node,D.offset),O.addRange(M))}}}}for(P=[],O=b;O=O.parentNode;)O.nodeType===1&&P.push({element:O,left:O.scrollLeft,top:O.scrollTop});for(typeof b.focus=="function"&&b.focus(),b=0;b<P.length;b++){var B=P[b];B.element.scrollLeft=B.left,B.element.scrollTop=B.top}}Hp=!!Fh,Uh=Fh=null}finally{Qe=d,K.p=m,$.T=l}}a.current=i,Rt=2}}function Gx(){if(Rt===2){Rt=0;var a=dn,i=yr,l=(i.flags&8772)!==0;if((i.subtreeFlags&8772)!==0||l){l=$.T,$.T=null;var m=K.p;K.p=2;var d=Qe;Qe|=4;try{vx(a,i.alternate,i)}finally{Qe=d,K.p=m,$.T=l}}Rt=3}}function Hx(){if(Rt===4||Rt===3){Rt=0,PB();var a=dn,i=yr,l=hi,m=Mx;(i.subtreeFlags&10256)!==0||(i.flags&10256)!==0?Rt=5:(Rt=0,yr=dn=null,Vx(a,a.pendingLanes));var d=a.pendingLanes;if(d===0&&(pn=null),Kg(l),i=i.stateNode,Da&&typeof Da.onCommitFiberRoot=="function")try{Da.onCommitFiberRoot(ym,i,void 0,(i.current.flags&128)===128)}catch{}if(m!==null){i=$.T,d=K.p,K.p=2,$.T=null;try{for(var g=a.onRecoverableError,y=0;y<m.length;y++){var b=m[y];g(b.value,{componentStack:b.stack})}}finally{$.T=i,K.p=d}}(hi&3)!==0&&Ep(),$s(a),d=a.pendingLanes,(l&261930)!==0&&(d&42)!==0?a===zh?Jm++:(Jm=0,zh=a):Jm=0,eu(0)}}function Vx(a,i){(a.pooledCacheLanes&=i)===0&&(i=a.pooledCache,i!=null&&(a.pooledCache=null,Em(i)))}function Ep(){return Ux(),Gx(),Hx(),Yx()}function Yx(){if(Rt!==5)return!1;var a=dn,i=Sh;Sh=0;var l=Kg(hi),m=$.T,d=K.p;try{K.p=32>l?32:l,$.T=null,l=Ah,Ah=null;var g=dn,y=hi;if(Rt=0,yr=dn=null,hi=0,(Qe&6)!==0)throw Error(n(331));var b=Qe;if(Qe|=4,Ax(g.current),Tx(g,g.current,y,l),Qe=b,eu(0,!1),Da&&typeof Da.onPostCommitFiberRoot=="function")try{Da.onPostCommitFiberRoot(ym,g)}catch{}return!0}finally{K.p=d,$.T=m,Vx(a,i)}}function Qx(a,i,l){i=Ya(l,i),i=rh(a.stateNode,i,2),a=on(a,i,2),a!==null&&(km(a,2),$s(a))}function Xe(a,i,l){if(a.tag===3)Qx(a,a,l);else for(;i!==null;){if(i.tag===3){Qx(i,a,l);break}else if(i.tag===1){var m=i.stateNode;if(typeof i.type.getDerivedStateFromError=="function"||typeof m.componentDidCatch=="function"&&(pn===null||!pn.has(m))){a=Ya(l,a),l=K0(2),m=on(i,l,2),m!==null&&(Z0(l,m,i,a),km(m,2),$s(m));break}}i=i.return}}function Rh(a,i,l){var m=a.pingCache;if(m===null){m=a.pingCache=new dP;var d=new Set;m.set(i,d)}else d=m.get(i),d===void 0&&(d=new Set,m.set(i,d));d.has(l)||(jh=!0,d.add(l),a=yP.bind(null,a,i,l),i.then(a,a))}function yP(a,i,l){var m=a.pingCache;m!==null&&m.delete(i),a.pingedLanes|=a.suspendedLanes&l,a.warmLanes&=~l,st===a&&(qe&l)===l&&(ft===4||ft===3&&(qe&62914560)===qe&&300>Ta()-Sp?(Qe&2)===0&&vr(a,0):Th|=l,fr===qe&&(fr=0)),$s(a)}function Kx(a,i){i===0&&(i=Ub()),a=no(a,i),a!==null&&(km(a,i),$s(a))}function vP(a){var i=a.memoizedState,l=0;i!==null&&(l=i.retryLane),Kx(a,l)}function kP(a,i){var l=0;switch(a.tag){case 31:case 13:var m=a.stateNode,d=a.memoizedState;d!==null&&(l=d.retryLane);break;case 19:m=a.stateNode;break;case 22:m=a.stateNode._retryCache;break;default:throw Error(n(314))}m!==null&&m.delete(i),Kx(a,l)}function bP(a,i){return Hg(a,i)}var Ip=null,br=null,Eh=!1,qp=!1,Ih=!1,_n=0;function $s(a){a!==br&&a.next===null&&(br===null?Ip=br=a:br=br.next=a),qp=!0,Eh||(Eh=!0,xP())}function eu(a,i){if(!Ih&&qp){Ih=!0;do for(var l=!1,m=Ip;m!==null;){if(a!==0){var d=m.pendingLanes;if(d===0)var g=0;else{var y=m.suspendedLanes,b=m.pingedLanes;g=(1<<31-Sa(42|a)+1)-1,g&=d&~(y&~b),g=g&201326741?g&201326741|1:g?g|2:0}g!==0&&(l=!0,eC(m,g))}else g=qe,g=Bc(m,m===st?g:0,m.cancelPendingCommit!==null||m.timeoutHandle!==-1),(g&3)===0||vm(m,g)||(l=!0,eC(m,g));m=m.next}while(l);Ih=!1}}function wP(){Zx()}function Zx(){qp=Eh=!1;var a=0;_n!==0&&RP()&&(a=_n);for(var i=Ta(),l=null,m=Ip;m!==null;){var d=m.next,g=Xx(m,i);g===0?(m.next=null,l===null?Ip=d:l.next=d,d===null&&(br=l)):(l=m,(a!==0||(g&3)!==0)&&(qp=!0)),m=d}Rt!==0&&Rt!==5||eu(a),_n!==0&&(_n=0)}function Xx(a,i){for(var l=a.suspendedLanes,m=a.pingedLanes,d=a.expirationTimes,g=a.pendingLanes&-62914561;0<g;){var y=31-Sa(g),b=1<<y,j=d[y];j===-1?((b&l)===0||(b&m)!==0)&&(d[y]=QB(b,i)):j<=i&&(a.expiredLanes|=b),g&=~b}if(i=st,l=qe,l=Bc(a,a===i?l:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),m=a.callbackNode,l===0||a===i&&(Ze===2||Ze===9)||a.cancelPendingCommit!==null)return m!==null&&m!==null&&Vg(m),a.callbackNode=null,a.callbackPriority=0;if((l&3)===0||vm(a,l)){if(i=l&-l,i===a.callbackPriority)return i;switch(m!==null&&Vg(m),Kg(l)){case 2:case 8:l=Wb;break;case 32:l=qc;break;case 268435456:l=Fb;break;default:l=qc}return m=Jx.bind(null,a),l=Hg(l,m),a.callbackPriority=i,a.callbackNode=l,i}return m!==null&&m!==null&&Vg(m),a.callbackPriority=2,a.callbackNode=null,2}function Jx(a,i){if(Rt!==0&&Rt!==5)return a.callbackNode=null,a.callbackPriority=0,null;var l=a.callbackNode;if(Ep()&&a.callbackNode!==l)return null;var m=qe;return m=Bc(a,a===st?m:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),m===0?null:(Ex(a,m,i),Xx(a,Ta()),a.callbackNode!=null&&a.callbackNode===l?Jx.bind(null,a):null)}function eC(a,i){if(Ep())return null;Ex(a,i,!0)}function xP(){IP(function(){(Qe&6)!==0?Hg(Pb,wP):Zx()})}function qh(){if(_n===0){var a=or;a===0&&(a=Oc,Oc<<=1,(Oc&261888)===0&&(Oc=256)),_n=a}return _n}function tC(a){return a==null||typeof a=="symbol"||typeof a=="boolean"?null:typeof a=="function"?a:Uc(""+a)}function aC(a,i){var l=i.ownerDocument.createElement("input");return l.name=i.name,l.value=i.value,a.id&&l.setAttribute("form",a.id),i.parentNode.insertBefore(l,i),a=new FormData(a),l.parentNode.removeChild(l),a}function CP(a,i,l,m,d){if(i==="submit"&&l&&l.stateNode===d){var g=tC((d[oa]||null).action),y=m.submitter;y&&(i=(i=y[oa]||null)?tC(i.formAction):y.getAttribute("formAction"),i!==null&&(g=i,y=null));var b=new Yc("action","action",null,m,d);a.push({event:b,listeners:[{instance:null,listener:function(){if(m.defaultPrevented){if(_n!==0){var j=y?aC(d,y):new FormData(d);ah(l,{pending:!0,data:j,method:d.method,action:g},null,j)}}else typeof g=="function"&&(b.preventDefault(),j=y?aC(d,y):new FormData(d),ah(l,{pending:!0,data:j,method:d.method,action:g},g,j))},currentTarget:d}]})}}for(var Oh=0;Oh<v_.length;Oh++){var $h=v_[Oh],jP=$h.toLowerCase(),TP=$h[0].toUpperCase()+$h.slice(1);ds(jP,"on"+TP)}ds(Rw,"onAnimationEnd"),ds(Ew,"onAnimationIteration"),ds(Iw,"onAnimationStart"),ds("dblclick","onDoubleClick"),ds("focusin","onFocus"),ds("focusout","onBlur"),ds(W3,"onTransitionRun"),ds(F3,"onTransitionStart"),ds(U3,"onTransitionCancel"),ds(qw,"onTransitionEnd"),Hl("onMouseEnter",["mouseout","mouseover"]),Hl("onMouseLeave",["mouseout","mouseover"]),Hl("onPointerEnter",["pointerout","pointerover"]),Hl("onPointerLeave",["pointerout","pointerover"]),to("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),to("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),to("onBeforeInput",["compositionend","keypress","textInput","paste"]),to("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),to("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),to("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var tu="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),DP=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(tu));function sC(a,i){i=(i&4)!==0;for(var l=0;l<a.length;l++){var m=a[l],d=m.event;m=m.listeners;e:{var g=void 0;if(i)for(var y=m.length-1;0<=y;y--){var b=m[y],j=b.instance,R=b.currentTarget;if(b=b.listener,j!==g&&d.isPropagationStopped())break e;g=b,d.currentTarget=R;try{g(d)}catch(L){Zc(L)}d.currentTarget=null,g=j}else for(y=0;y<m.length;y++){if(b=m[y],j=b.instance,R=b.currentTarget,b=b.listener,j!==g&&d.isPropagationStopped())break e;g=b,d.currentTarget=R;try{g(d)}catch(L){Zc(L)}d.currentTarget=null,g=j}}}}function Re(a,i){var l=i[Zg];l===void 0&&(l=i[Zg]=new Set);var m=a+"__bubble";l.has(m)||(iC(i,a,2,!1),l.add(m))}function Lh(a,i,l){var m=0;i&&(m|=4),iC(l,a,m,i)}var Op="_reactListening"+Math.random().toString(36).slice(2);function Bh(a){if(!a[Op]){a[Op]=!0,Zb.forEach(function(l){l!=="selectionchange"&&(DP.has(l)||Lh(l,!1,a),Lh(l,!0,a))});var i=a.nodeType===9?a:a.ownerDocument;i===null||i[Op]||(i[Op]=!0,Lh("selectionchange",!1,i))}}function iC(a,i,l,m){switch(RC(i)){case 2:var d=t5;break;case 8:d=a5;break;default:d=tf}l=d.bind(null,i,l,a),d=void 0,!o_||i!=="touchstart"&&i!=="touchmove"&&i!=="wheel"||(d=!0),m?d!==void 0?a.addEventListener(i,l,{capture:!0,passive:d}):a.addEventListener(i,l,!0):d!==void 0?a.addEventListener(i,l,{passive:d}):a.addEventListener(i,l,!1)}function Ph(a,i,l,m,d){var g=m;if((i&1)===0&&(i&2)===0&&m!==null)e:for(;;){if(m===null)return;var y=m.tag;if(y===3||y===4){var b=m.stateNode.containerInfo;if(b===d)break;if(y===4)for(y=m.return;y!==null;){var j=y.tag;if((j===3||j===4)&&y.stateNode.containerInfo===d)return;y=y.return}for(;b!==null;){if(y=Fl(b),y===null)return;if(j=y.tag,j===5||j===6||j===26||j===27){m=g=y;continue e}b=b.parentNode}}m=m.return}mw(function(){var R=g,L=i_(l),P=[];e:{var E=Ow.get(a);if(E!==void 0){var O=Yc,ae=a;switch(a){case"keypress":if(Hc(l)===0)break e;case"keydown":case"keyup":O=k3;break;case"focusin":ae="focus",O=u_;break;case"focusout":ae="blur",O=u_;break;case"beforeblur":case"afterblur":O=u_;break;case"click":if(l.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":O=pw;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":O=r3;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":O=x3;break;case Rw:case Ew:case Iw:O=c3;break;case qw:O=j3;break;case"scroll":case"scrollend":O=o3;break;case"wheel":O=D3;break;case"copy":case"cut":case"paste":O=d3;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":O=gw;break;case"toggle":case"beforetoggle":O=A3}var pe=(i&4)!==0,at=!pe&&(a==="scroll"||a==="scrollend"),z=pe?E!==null?E+"Capture":null:E;pe=[];for(var D=R,M;D!==null;){var B=D;if(M=B.stateNode,B=B.tag,B!==5&&B!==26&&B!==27||M===null||z===null||(B=xm(D,z),B!=null&&pe.push(au(D,B,M))),at)break;D=D.return}0<pe.length&&(E=new O(E,ae,null,l,L),P.push({event:E,listeners:pe}))}}if((i&7)===0){e:{if(E=a==="mouseover"||a==="pointerover",O=a==="mouseout"||a==="pointerout",E&&l!==s_&&(ae=l.relatedTarget||l.fromElement)&&(Fl(ae)||ae[Wl]))break e;if((O||E)&&(E=L.window===L?L:(E=L.ownerDocument)?E.defaultView||E.parentWindow:window,O?(ae=l.relatedTarget||l.toElement,O=R,ae=ae?Fl(ae):null,ae!==null&&(at=u(ae),pe=ae.tag,ae!==at||pe!==5&&pe!==27&&pe!==6)&&(ae=null)):(O=null,ae=R),O!==ae)){if(pe=pw,B="onMouseLeave",z="onMouseEnter",D="mouse",(a==="pointerout"||a==="pointerover")&&(pe=gw,B="onPointerLeave",z="onPointerEnter",D="pointer"),at=O==null?E:wm(O),M=ae==null?E:wm(ae),E=new pe(B,D+"leave",O,l,L),E.target=at,E.relatedTarget=M,B=null,Fl(L)===R&&(pe=new pe(z,D+"enter",ae,l,L),pe.target=M,pe.relatedTarget=at,B=pe),at=B,O&&ae)t:{for(pe=SP,z=O,D=ae,M=0,B=z;B;B=pe(B))M++;B=0;for(var me=D;me;me=pe(me))B++;for(;0<M-B;)z=pe(z),M--;for(;0<B-M;)D=pe(D),B--;for(;M--;){if(z===D||D!==null&&z===D.alternate){pe=z;break t}z=pe(z),D=pe(D)}pe=null}else pe=null;O!==null&&nC(P,E,O,pe,!1),ae!==null&&at!==null&&nC(P,at,ae,pe,!0)}}e:{if(E=R?wm(R):window,O=E.nodeName&&E.nodeName.toLowerCase(),O==="select"||O==="input"&&E.type==="file")var Ge=ww;else if(kw(E))if(xw)Ge=L3;else{Ge=O3;var ne=q3}else O=E.nodeName,!O||O.toLowerCase()!=="input"||E.type!=="checkbox"&&E.type!=="radio"?R&&a_(R.elementType)&&(Ge=ww):Ge=$3;if(Ge&&(Ge=Ge(a,R))){bw(P,Ge,l,L);break e}ne&&ne(a,E,R),a==="focusout"&&R&&E.type==="number"&&R.memoizedProps.value!=null&&t_(E,"number",E.value)}switch(ne=R?wm(R):window,a){case"focusin":(kw(ne)||ne.contentEditable==="true")&&(Xl=ne,h_=R,Nm=null);break;case"focusout":Nm=h_=Xl=null;break;case"mousedown":f_=!0;break;case"contextmenu":case"mouseup":case"dragend":f_=!1,Nw(P,l,L);break;case"selectionchange":if(P3)break;case"keydown":case"keyup":Nw(P,l,L)}var Ae;if(p_)e:{switch(a){case"compositionstart":var Oe="onCompositionStart";break e;case"compositionend":Oe="onCompositionEnd";break e;case"compositionupdate":Oe="onCompositionUpdate";break e}Oe=void 0}else Zl?yw(a,l)&&(Oe="onCompositionEnd"):a==="keydown"&&l.keyCode===229&&(Oe="onCompositionStart");Oe&&(_w&&l.locale!=="ko"&&(Zl||Oe!=="onCompositionStart"?Oe==="onCompositionEnd"&&Zl&&(Ae=uw()):(Xi=L,l_="value"in Xi?Xi.value:Xi.textContent,Zl=!0)),ne=$p(R,Oe),0<ne.length&&(Oe=new dw(Oe,a,null,l,L),P.push({event:Oe,listeners:ne}),Ae?Oe.data=Ae:(Ae=vw(l),Ae!==null&&(Oe.data=Ae)))),(Ae=N3?M3(a,l):R3(a,l))&&(Oe=$p(R,"onBeforeInput"),0<Oe.length&&(ne=new dw("onBeforeInput","beforeinput",null,l,L),P.push({event:ne,listeners:Oe}),ne.data=Ae)),CP(P,a,R,l,L)}sC(P,i)})}function au(a,i,l){return{instance:a,listener:i,currentTarget:l}}function $p(a,i){for(var l=i+"Capture",m=[];a!==null;){var d=a,g=d.stateNode;if(d=d.tag,d!==5&&d!==26&&d!==27||g===null||(d=xm(a,l),d!=null&&m.unshift(au(a,d,g)),d=xm(a,i),d!=null&&m.push(au(a,d,g))),a.tag===3)return m;a=a.return}return[]}function SP(a){if(a===null)return null;do a=a.return;while(a&&a.tag!==5&&a.tag!==27);return a||null}function nC(a,i,l,m,d){for(var g=i._reactName,y=[];l!==null&&l!==m;){var b=l,j=b.alternate,R=b.stateNode;if(b=b.tag,j!==null&&j===m)break;b!==5&&b!==26&&b!==27||R===null||(j=R,d?(R=xm(l,g),R!=null&&y.unshift(au(l,R,j))):d||(R=xm(l,g),R!=null&&y.push(au(l,R,j)))),l=l.return}y.length!==0&&a.push({event:i,listeners:y})}var AP=/\r\n?/g,zP=/\u0000|\uFFFD/g;function oC(a){return(typeof a=="string"?a:""+a).replace(AP,`
|
||
`).replace(zP,"")}function lC(a,i){return i=oC(i),oC(a)===i}function tt(a,i,l,m,d,g){switch(l){case"children":typeof m=="string"?i==="body"||i==="textarea"&&m===""||Yl(a,m):(typeof m=="number"||typeof m=="bigint")&&i!=="body"&&Yl(a,""+m);break;case"className":Wc(a,"class",m);break;case"tabIndex":Wc(a,"tabindex",m);break;case"dir":case"role":case"viewBox":case"width":case"height":Wc(a,l,m);break;case"style":lw(a,m,g);break;case"data":if(i!=="object"){Wc(a,"data",m);break}case"src":case"href":if(m===""&&(i!=="a"||l!=="href")){a.removeAttribute(l);break}if(m==null||typeof m=="function"||typeof m=="symbol"||typeof m=="boolean"){a.removeAttribute(l);break}m=Uc(""+m),a.setAttribute(l,m);break;case"action":case"formAction":if(typeof m=="function"){a.setAttribute(l,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof g=="function"&&(l==="formAction"?(i!=="input"&&tt(a,i,"name",d.name,d,null),tt(a,i,"formEncType",d.formEncType,d,null),tt(a,i,"formMethod",d.formMethod,d,null),tt(a,i,"formTarget",d.formTarget,d,null)):(tt(a,i,"encType",d.encType,d,null),tt(a,i,"method",d.method,d,null),tt(a,i,"target",d.target,d,null)));if(m==null||typeof m=="symbol"||typeof m=="boolean"){a.removeAttribute(l);break}m=Uc(""+m),a.setAttribute(l,m);break;case"onClick":m!=null&&(a.onclick=ti);break;case"onScroll":m!=null&&Re("scroll",a);break;case"onScrollEnd":m!=null&&Re("scrollend",a);break;case"dangerouslySetInnerHTML":if(m!=null){if(typeof m!="object"||!("__html"in m))throw Error(n(61));if(l=m.__html,l!=null){if(d.children!=null)throw Error(n(60));a.innerHTML=l}}break;case"multiple":a.multiple=m&&typeof m!="function"&&typeof m!="symbol";break;case"muted":a.muted=m&&typeof m!="function"&&typeof m!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(m==null||typeof m=="function"||typeof m=="boolean"||typeof m=="symbol"){a.removeAttribute("xlink:href");break}l=Uc(""+m),a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",l);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":m!=null&&typeof m!="function"&&typeof m!="symbol"?a.setAttribute(l,""+m):a.removeAttribute(l);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":m&&typeof m!="function"&&typeof m!="symbol"?a.setAttribute(l,""):a.removeAttribute(l);break;case"capture":case"download":m===!0?a.setAttribute(l,""):m!==!1&&m!=null&&typeof m!="function"&&typeof m!="symbol"?a.setAttribute(l,m):a.removeAttribute(l);break;case"cols":case"rows":case"size":case"span":m!=null&&typeof m!="function"&&typeof m!="symbol"&&!isNaN(m)&&1<=m?a.setAttribute(l,m):a.removeAttribute(l);break;case"rowSpan":case"start":m==null||typeof m=="function"||typeof m=="symbol"||isNaN(m)?a.removeAttribute(l):a.setAttribute(l,m);break;case"popover":Re("beforetoggle",a),Re("toggle",a),Pc(a,"popover",m);break;case"xlinkActuate":ei(a,"http://www.w3.org/1999/xlink","xlink:actuate",m);break;case"xlinkArcrole":ei(a,"http://www.w3.org/1999/xlink","xlink:arcrole",m);break;case"xlinkRole":ei(a,"http://www.w3.org/1999/xlink","xlink:role",m);break;case"xlinkShow":ei(a,"http://www.w3.org/1999/xlink","xlink:show",m);break;case"xlinkTitle":ei(a,"http://www.w3.org/1999/xlink","xlink:title",m);break;case"xlinkType":ei(a,"http://www.w3.org/1999/xlink","xlink:type",m);break;case"xmlBase":ei(a,"http://www.w3.org/XML/1998/namespace","xml:base",m);break;case"xmlLang":ei(a,"http://www.w3.org/XML/1998/namespace","xml:lang",m);break;case"xmlSpace":ei(a,"http://www.w3.org/XML/1998/namespace","xml:space",m);break;case"is":Pc(a,"is",m);break;case"innerText":case"textContent":break;default:(!(2<l.length)||l[0]!=="o"&&l[0]!=="O"||l[1]!=="n"&&l[1]!=="N")&&(l=i3.get(l)||l,Pc(a,l,m))}}function Wh(a,i,l,m,d,g){switch(l){case"style":lw(a,m,g);break;case"dangerouslySetInnerHTML":if(m!=null){if(typeof m!="object"||!("__html"in m))throw Error(n(61));if(l=m.__html,l!=null){if(d.children!=null)throw Error(n(60));a.innerHTML=l}}break;case"children":typeof m=="string"?Yl(a,m):(typeof m=="number"||typeof m=="bigint")&&Yl(a,""+m);break;case"onScroll":m!=null&&Re("scroll",a);break;case"onScrollEnd":m!=null&&Re("scrollend",a);break;case"onClick":m!=null&&(a.onclick=ti);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":break;case"innerText":case"textContent":break;default:if(!Xb.hasOwnProperty(l))e:{if(l[0]==="o"&&l[1]==="n"&&(d=l.endsWith("Capture"),i=l.slice(2,d?l.length-7:void 0),g=a[oa]||null,g=g!=null?g[l]:null,typeof g=="function"&&a.removeEventListener(i,g,d),typeof m=="function")){typeof g!="function"&&g!==null&&(l in a?a[l]=null:a.hasAttribute(l)&&a.removeAttribute(l)),a.addEventListener(i,m,d);break e}l in a?a[l]=m:m===!0?a.setAttribute(l,""):Pc(a,l,m)}}}function Gt(a,i,l){switch(i){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":Re("error",a),Re("load",a);var m=!1,d=!1,g;for(g in l)if(l.hasOwnProperty(g)){var y=l[g];if(y!=null)switch(g){case"src":m=!0;break;case"srcSet":d=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(n(137,i));default:tt(a,i,g,y,l,null)}}d&&tt(a,i,"srcSet",l.srcSet,l,null),m&&tt(a,i,"src",l.src,l,null);return;case"input":Re("invalid",a);var b=g=y=d=null,j=null,R=null;for(m in l)if(l.hasOwnProperty(m)){var L=l[m];if(L!=null)switch(m){case"name":d=L;break;case"type":y=L;break;case"checked":j=L;break;case"defaultChecked":R=L;break;case"value":g=L;break;case"defaultValue":b=L;break;case"children":case"dangerouslySetInnerHTML":if(L!=null)throw Error(n(137,i));break;default:tt(a,i,m,L,l,null)}}sw(a,g,b,j,R,y,d,!1);return;case"select":Re("invalid",a),m=y=g=null;for(d in l)if(l.hasOwnProperty(d)&&(b=l[d],b!=null))switch(d){case"value":g=b;break;case"defaultValue":y=b;break;case"multiple":m=b;default:tt(a,i,d,b,l,null)}i=g,l=y,a.multiple=!!m,i!=null?Vl(a,!!m,i,!1):l!=null&&Vl(a,!!m,l,!0);return;case"textarea":Re("invalid",a),g=d=m=null;for(y in l)if(l.hasOwnProperty(y)&&(b=l[y],b!=null))switch(y){case"value":m=b;break;case"defaultValue":d=b;break;case"children":g=b;break;case"dangerouslySetInnerHTML":if(b!=null)throw Error(n(91));break;default:tt(a,i,y,b,l,null)}nw(a,m,d,g);return;case"option":for(j in l)if(l.hasOwnProperty(j)&&(m=l[j],m!=null))switch(j){case"selected":a.selected=m&&typeof m!="function"&&typeof m!="symbol";break;default:tt(a,i,j,m,l,null)}return;case"dialog":Re("beforetoggle",a),Re("toggle",a),Re("cancel",a),Re("close",a);break;case"iframe":case"object":Re("load",a);break;case"video":case"audio":for(m=0;m<tu.length;m++)Re(tu[m],a);break;case"image":Re("error",a),Re("load",a);break;case"details":Re("toggle",a);break;case"embed":case"source":case"link":Re("error",a),Re("load",a);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(R in l)if(l.hasOwnProperty(R)&&(m=l[R],m!=null))switch(R){case"children":case"dangerouslySetInnerHTML":throw Error(n(137,i));default:tt(a,i,R,m,l,null)}return;default:if(a_(i)){for(L in l)l.hasOwnProperty(L)&&(m=l[L],m!==void 0&&Wh(a,i,L,m,l,void 0));return}}for(b in l)l.hasOwnProperty(b)&&(m=l[b],m!=null&&tt(a,i,b,m,l,null))}function NP(a,i,l,m){switch(i){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var d=null,g=null,y=null,b=null,j=null,R=null,L=null;for(O in l){var P=l[O];if(l.hasOwnProperty(O)&&P!=null)switch(O){case"checked":break;case"value":break;case"defaultValue":j=P;default:m.hasOwnProperty(O)||tt(a,i,O,null,m,P)}}for(var E in m){var O=m[E];if(P=l[E],m.hasOwnProperty(E)&&(O!=null||P!=null))switch(E){case"type":g=O;break;case"name":d=O;break;case"checked":R=O;break;case"defaultChecked":L=O;break;case"value":y=O;break;case"defaultValue":b=O;break;case"children":case"dangerouslySetInnerHTML":if(O!=null)throw Error(n(137,i));break;default:O!==P&&tt(a,i,E,O,m,P)}}e_(a,y,b,j,R,L,g,d);return;case"select":O=y=b=E=null;for(g in l)if(j=l[g],l.hasOwnProperty(g)&&j!=null)switch(g){case"value":break;case"multiple":O=j;default:m.hasOwnProperty(g)||tt(a,i,g,null,m,j)}for(d in m)if(g=m[d],j=l[d],m.hasOwnProperty(d)&&(g!=null||j!=null))switch(d){case"value":E=g;break;case"defaultValue":b=g;break;case"multiple":y=g;default:g!==j&&tt(a,i,d,g,m,j)}i=b,l=y,m=O,E!=null?Vl(a,!!l,E,!1):!!m!=!!l&&(i!=null?Vl(a,!!l,i,!0):Vl(a,!!l,l?[]:"",!1));return;case"textarea":O=E=null;for(b in l)if(d=l[b],l.hasOwnProperty(b)&&d!=null&&!m.hasOwnProperty(b))switch(b){case"value":break;case"children":break;default:tt(a,i,b,null,m,d)}for(y in m)if(d=m[y],g=l[y],m.hasOwnProperty(y)&&(d!=null||g!=null))switch(y){case"value":E=d;break;case"defaultValue":O=d;break;case"children":break;case"dangerouslySetInnerHTML":if(d!=null)throw Error(n(91));break;default:d!==g&&tt(a,i,y,d,m,g)}iw(a,E,O);return;case"option":for(var ae in l)if(E=l[ae],l.hasOwnProperty(ae)&&E!=null&&!m.hasOwnProperty(ae))switch(ae){case"selected":a.selected=!1;break;default:tt(a,i,ae,null,m,E)}for(j in m)if(E=m[j],O=l[j],m.hasOwnProperty(j)&&E!==O&&(E!=null||O!=null))switch(j){case"selected":a.selected=E&&typeof E!="function"&&typeof E!="symbol";break;default:tt(a,i,j,E,m,O)}return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var pe in l)E=l[pe],l.hasOwnProperty(pe)&&E!=null&&!m.hasOwnProperty(pe)&&tt(a,i,pe,null,m,E);for(R in m)if(E=m[R],O=l[R],m.hasOwnProperty(R)&&E!==O&&(E!=null||O!=null))switch(R){case"children":case"dangerouslySetInnerHTML":if(E!=null)throw Error(n(137,i));break;default:tt(a,i,R,E,m,O)}return;default:if(a_(i)){for(var at in l)E=l[at],l.hasOwnProperty(at)&&E!==void 0&&!m.hasOwnProperty(at)&&Wh(a,i,at,void 0,m,E);for(L in m)E=m[L],O=l[L],!m.hasOwnProperty(L)||E===O||E===void 0&&O===void 0||Wh(a,i,L,E,m,O);return}}for(var z in l)E=l[z],l.hasOwnProperty(z)&&E!=null&&!m.hasOwnProperty(z)&&tt(a,i,z,null,m,E);for(P in m)E=m[P],O=l[P],!m.hasOwnProperty(P)||E===O||E==null&&O==null||tt(a,i,P,E,m,O)}function rC(a){switch(a){case"css":case"script":case"font":case"img":case"image":case"input":case"link":return!0;default:return!1}}function MP(){if(typeof performance.getEntriesByType=="function"){for(var a=0,i=0,l=performance.getEntriesByType("resource"),m=0;m<l.length;m++){var d=l[m],g=d.transferSize,y=d.initiatorType,b=d.duration;if(g&&b&&rC(y)){for(y=0,b=d.responseEnd,m+=1;m<l.length;m++){var j=l[m],R=j.startTime;if(R>b)break;var L=j.transferSize,P=j.initiatorType;L&&rC(P)&&(j=j.responseEnd,y+=L*(j<b?1:(b-R)/(j-R)))}if(--m,i+=8*(g+y)/(d.duration/1e3),a++,10<a)break}}if(0<a)return i/a/1e6}return navigator.connection&&(a=navigator.connection.downlink,typeof a=="number")?a:5}var Fh=null,Uh=null;function Lp(a){return a.nodeType===9?a:a.ownerDocument}function mC(a){switch(a){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function uC(a,i){if(a===0)switch(i){case"svg":return 1;case"math":return 2;default:return 0}return a===1&&i==="foreignObject"?0:a}function Gh(a,i){return a==="textarea"||a==="noscript"||typeof i.children=="string"||typeof i.children=="number"||typeof i.children=="bigint"||typeof i.dangerouslySetInnerHTML=="object"&&i.dangerouslySetInnerHTML!==null&&i.dangerouslySetInnerHTML.__html!=null}var Hh=null;function RP(){var a=window.event;return a&&a.type==="popstate"?a===Hh?!1:(Hh=a,!0):(Hh=null,!1)}var cC=typeof setTimeout=="function"?setTimeout:void 0,EP=typeof clearTimeout=="function"?clearTimeout:void 0,pC=typeof Promise=="function"?Promise:void 0,IP=typeof queueMicrotask=="function"?queueMicrotask:typeof pC<"u"?function(a){return pC.resolve(null).then(a).catch(qP)}:cC;function qP(a){setTimeout(function(){throw a})}function hn(a){return a==="head"}function dC(a,i){var l=i,m=0;do{var d=l.nextSibling;if(a.removeChild(l),d&&d.nodeType===8)if(l=d.data,l==="/$"||l==="/&"){if(m===0){a.removeChild(d),jr(i);return}m--}else if(l==="$"||l==="$?"||l==="$~"||l==="$!"||l==="&")m++;else if(l==="html")su(a.ownerDocument.documentElement);else if(l==="head"){l=a.ownerDocument.head,su(l);for(var g=l.firstChild;g;){var y=g.nextSibling,b=g.nodeName;g[bm]||b==="SCRIPT"||b==="STYLE"||b==="LINK"&&g.rel.toLowerCase()==="stylesheet"||l.removeChild(g),g=y}}else l==="body"&&su(a.ownerDocument.body);l=d}while(l);jr(i)}function gC(a,i){var l=a;a=0;do{var m=l.nextSibling;if(l.nodeType===1?i?(l._stashedDisplay=l.style.display,l.style.display="none"):(l.style.display=l._stashedDisplay||"",l.getAttribute("style")===""&&l.removeAttribute("style")):l.nodeType===3&&(i?(l._stashedText=l.nodeValue,l.nodeValue=""):l.nodeValue=l._stashedText||""),m&&m.nodeType===8)if(l=m.data,l==="/$"){if(a===0)break;a--}else l!=="$"&&l!=="$?"&&l!=="$~"&&l!=="$!"||a++;l=m}while(l)}function Vh(a){var i=a.firstChild;for(i&&i.nodeType===10&&(i=i.nextSibling);i;){var l=i;switch(i=i.nextSibling,l.nodeName){case"HTML":case"HEAD":case"BODY":Vh(l),Xg(l);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if(l.rel.toLowerCase()==="stylesheet")continue}a.removeChild(l)}}function OP(a,i,l,m){for(;a.nodeType===1;){var d=l;if(a.nodeName.toLowerCase()!==i.toLowerCase()){if(!m&&(a.nodeName!=="INPUT"||a.type!=="hidden"))break}else if(m){if(!a[bm])switch(i){case"meta":if(!a.hasAttribute("itemprop"))break;return a;case"link":if(g=a.getAttribute("rel"),g==="stylesheet"&&a.hasAttribute("data-precedence"))break;if(g!==d.rel||a.getAttribute("href")!==(d.href==null||d.href===""?null:d.href)||a.getAttribute("crossorigin")!==(d.crossOrigin==null?null:d.crossOrigin)||a.getAttribute("title")!==(d.title==null?null:d.title))break;return a;case"style":if(a.hasAttribute("data-precedence"))break;return a;case"script":if(g=a.getAttribute("src"),(g!==(d.src==null?null:d.src)||a.getAttribute("type")!==(d.type==null?null:d.type)||a.getAttribute("crossorigin")!==(d.crossOrigin==null?null:d.crossOrigin))&&g&&a.hasAttribute("async")&&!a.hasAttribute("itemprop"))break;return a;default:return a}}else if(i==="input"&&a.type==="hidden"){var g=d.name==null?null:""+d.name;if(d.type==="hidden"&&a.getAttribute("name")===g)return a}else return a;if(a=Ja(a.nextSibling),a===null)break}return null}function $P(a,i,l){if(i==="")return null;for(;a.nodeType!==3;)if((a.nodeType!==1||a.nodeName!=="INPUT"||a.type!=="hidden")&&!l||(a=Ja(a.nextSibling),a===null))return null;return a}function _C(a,i){for(;a.nodeType!==8;)if((a.nodeType!==1||a.nodeName!=="INPUT"||a.type!=="hidden")&&!i||(a=Ja(a.nextSibling),a===null))return null;return a}function Yh(a){return a.data==="$?"||a.data==="$~"}function Qh(a){return a.data==="$!"||a.data==="$?"&&a.ownerDocument.readyState!=="loading"}function LP(a,i){var l=a.ownerDocument;if(a.data==="$~")a._reactRetry=i;else if(a.data!=="$?"||l.readyState!=="loading")i();else{var m=function(){i(),l.removeEventListener("DOMContentLoaded",m)};l.addEventListener("DOMContentLoaded",m),a._reactRetry=m}}function Ja(a){for(;a!=null;a=a.nextSibling){var i=a.nodeType;if(i===1||i===3)break;if(i===8){if(i=a.data,i==="$"||i==="$!"||i==="$?"||i==="$~"||i==="&"||i==="F!"||i==="F")break;if(i==="/$"||i==="/&")return null}}return a}var Kh=null;function hC(a){a=a.nextSibling;for(var i=0;a;){if(a.nodeType===8){var l=a.data;if(l==="/$"||l==="/&"){if(i===0)return Ja(a.nextSibling);i--}else l!=="$"&&l!=="$!"&&l!=="$?"&&l!=="$~"&&l!=="&"||i++}a=a.nextSibling}return null}function fC(a){a=a.previousSibling;for(var i=0;a;){if(a.nodeType===8){var l=a.data;if(l==="$"||l==="$!"||l==="$?"||l==="$~"||l==="&"){if(i===0)return a;i--}else l!=="/$"&&l!=="/&"||i++}a=a.previousSibling}return null}function yC(a,i,l){switch(i=Lp(l),a){case"html":if(a=i.documentElement,!a)throw Error(n(452));return a;case"head":if(a=i.head,!a)throw Error(n(453));return a;case"body":if(a=i.body,!a)throw Error(n(454));return a;default:throw Error(n(451))}}function su(a){for(var i=a.attributes;i.length;)a.removeAttributeNode(i[0]);Xg(a)}var es=new Map,vC=new Set;function Bp(a){return typeof a.getRootNode=="function"?a.getRootNode():a.nodeType===9?a:a.ownerDocument}var fi=K.d;K.d={f:BP,r:PP,D:WP,C:FP,L:UP,m:GP,X:VP,S:HP,M:YP};function BP(){var a=fi.f(),i=Np();return a||i}function PP(a){var i=Ul(a);i!==null&&i.tag===5&&i.type==="form"?q0(i):fi.r(a)}var wr=typeof document>"u"?null:document;function kC(a,i,l){var m=wr;if(m&&typeof i=="string"&&i){var d=Ha(i);d='link[rel="'+a+'"][href="'+d+'"]',typeof l=="string"&&(d+='[crossorigin="'+l+'"]'),vC.has(d)||(vC.add(d),a={rel:a,crossOrigin:l,href:i},m.querySelector(d)===null&&(i=m.createElement("link"),Gt(i,"link",a),qt(i),m.head.appendChild(i)))}}function WP(a){fi.D(a),kC("dns-prefetch",a,null)}function FP(a,i){fi.C(a,i),kC("preconnect",a,i)}function UP(a,i,l){fi.L(a,i,l);var m=wr;if(m&&a&&i){var d='link[rel="preload"][as="'+Ha(i)+'"]';i==="image"&&l&&l.imageSrcSet?(d+='[imagesrcset="'+Ha(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(d+='[imagesizes="'+Ha(l.imageSizes)+'"]')):d+='[href="'+Ha(a)+'"]';var g=d;switch(i){case"style":g=xr(a);break;case"script":g=Cr(a)}es.has(g)||(a=v({rel:"preload",href:i==="image"&&l&&l.imageSrcSet?void 0:a,as:i},l),es.set(g,a),m.querySelector(d)!==null||i==="style"&&m.querySelector(iu(g))||i==="script"&&m.querySelector(nu(g))||(i=m.createElement("link"),Gt(i,"link",a),qt(i),m.head.appendChild(i)))}}function GP(a,i){fi.m(a,i);var l=wr;if(l&&a){var m=i&&typeof i.as=="string"?i.as:"script",d='link[rel="modulepreload"][as="'+Ha(m)+'"][href="'+Ha(a)+'"]',g=d;switch(m){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":g=Cr(a)}if(!es.has(g)&&(a=v({rel:"modulepreload",href:a},i),es.set(g,a),l.querySelector(d)===null)){switch(m){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(nu(g)))return}m=l.createElement("link"),Gt(m,"link",a),qt(m),l.head.appendChild(m)}}}function HP(a,i,l){fi.S(a,i,l);var m=wr;if(m&&a){var d=Gl(m).hoistableStyles,g=xr(a);i=i||"default";var y=d.get(g);if(!y){var b={loading:0,preload:null};if(y=m.querySelector(iu(g)))b.loading=5;else{a=v({rel:"stylesheet",href:a,"data-precedence":i},l),(l=es.get(g))&&Zh(a,l);var j=y=m.createElement("link");qt(j),Gt(j,"link",a),j._p=new Promise(function(R,L){j.onload=R,j.onerror=L}),j.addEventListener("load",function(){b.loading|=1}),j.addEventListener("error",function(){b.loading|=2}),b.loading|=4,Pp(y,i,m)}y={type:"stylesheet",instance:y,count:1,state:b},d.set(g,y)}}}function VP(a,i){fi.X(a,i);var l=wr;if(l&&a){var m=Gl(l).hoistableScripts,d=Cr(a),g=m.get(d);g||(g=l.querySelector(nu(d)),g||(a=v({src:a,async:!0},i),(i=es.get(d))&&Xh(a,i),g=l.createElement("script"),qt(g),Gt(g,"link",a),l.head.appendChild(g)),g={type:"script",instance:g,count:1,state:null},m.set(d,g))}}function YP(a,i){fi.M(a,i);var l=wr;if(l&&a){var m=Gl(l).hoistableScripts,d=Cr(a),g=m.get(d);g||(g=l.querySelector(nu(d)),g||(a=v({src:a,async:!0,type:"module"},i),(i=es.get(d))&&Xh(a,i),g=l.createElement("script"),qt(g),Gt(g,"link",a),l.head.appendChild(g)),g={type:"script",instance:g,count:1,state:null},m.set(d,g))}}function bC(a,i,l,m){var d=(d=ze.current)?Bp(d):null;if(!d)throw Error(n(446));switch(a){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(i=xr(l.href),l=Gl(d).hoistableStyles,m=l.get(i),m||(m={type:"style",instance:null,count:0,state:null},l.set(i,m)),m):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){a=xr(l.href);var g=Gl(d).hoistableStyles,y=g.get(a);if(y||(d=d.ownerDocument||d,y={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},g.set(a,y),(g=d.querySelector(iu(a)))&&!g._p&&(y.instance=g,y.state.loading=5),es.has(a)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},es.set(a,l),g||QP(d,a,l,y.state))),i&&m===null)throw Error(n(528,""));return y}if(i&&m!==null)throw Error(n(529,""));return null;case"script":return i=l.async,l=l.src,typeof l=="string"&&i&&typeof i!="function"&&typeof i!="symbol"?(i=Cr(l),l=Gl(d).hoistableScripts,m=l.get(i),m||(m={type:"script",instance:null,count:0,state:null},l.set(i,m)),m):{type:"void",instance:null,count:0,state:null};default:throw Error(n(444,a))}}function xr(a){return'href="'+Ha(a)+'"'}function iu(a){return'link[rel="stylesheet"]['+a+"]"}function wC(a){return v({},a,{"data-precedence":a.precedence,precedence:null})}function QP(a,i,l,m){a.querySelector('link[rel="preload"][as="style"]['+i+"]")?m.loading=1:(i=a.createElement("link"),m.preload=i,i.addEventListener("load",function(){return m.loading|=1}),i.addEventListener("error",function(){return m.loading|=2}),Gt(i,"link",l),qt(i),a.head.appendChild(i))}function Cr(a){return'[src="'+Ha(a)+'"]'}function nu(a){return"script[async]"+a}function xC(a,i,l){if(i.count++,i.instance===null)switch(i.type){case"style":var m=a.querySelector('style[data-href~="'+Ha(l.href)+'"]');if(m)return i.instance=m,qt(m),m;var d=v({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return m=(a.ownerDocument||a).createElement("style"),qt(m),Gt(m,"style",d),Pp(m,l.precedence,a),i.instance=m;case"stylesheet":d=xr(l.href);var g=a.querySelector(iu(d));if(g)return i.state.loading|=4,i.instance=g,qt(g),g;m=wC(l),(d=es.get(d))&&Zh(m,d),g=(a.ownerDocument||a).createElement("link"),qt(g);var y=g;return y._p=new Promise(function(b,j){y.onload=b,y.onerror=j}),Gt(g,"link",m),i.state.loading|=4,Pp(g,l.precedence,a),i.instance=g;case"script":return g=Cr(l.src),(d=a.querySelector(nu(g)))?(i.instance=d,qt(d),d):(m=l,(d=es.get(g))&&(m=v({},l),Xh(m,d)),a=a.ownerDocument||a,d=a.createElement("script"),qt(d),Gt(d,"link",m),a.head.appendChild(d),i.instance=d);case"void":return null;default:throw Error(n(443,i.type))}else i.type==="stylesheet"&&(i.state.loading&4)===0&&(m=i.instance,i.state.loading|=4,Pp(m,l.precedence,a));return i.instance}function Pp(a,i,l){for(var m=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),d=m.length?m[m.length-1]:null,g=d,y=0;y<m.length;y++){var b=m[y];if(b.dataset.precedence===i)g=b;else if(g!==d)break}g?g.parentNode.insertBefore(a,g.nextSibling):(i=l.nodeType===9?l.head:l,i.insertBefore(a,i.firstChild))}function Zh(a,i){a.crossOrigin==null&&(a.crossOrigin=i.crossOrigin),a.referrerPolicy==null&&(a.referrerPolicy=i.referrerPolicy),a.title==null&&(a.title=i.title)}function Xh(a,i){a.crossOrigin==null&&(a.crossOrigin=i.crossOrigin),a.referrerPolicy==null&&(a.referrerPolicy=i.referrerPolicy),a.integrity==null&&(a.integrity=i.integrity)}var Wp=null;function CC(a,i,l){if(Wp===null){var m=new Map,d=Wp=new Map;d.set(l,m)}else d=Wp,m=d.get(l),m||(m=new Map,d.set(l,m));if(m.has(a))return m;for(m.set(a,null),l=l.getElementsByTagName(a),d=0;d<l.length;d++){var g=l[d];if(!(g[bm]||g[Pt]||a==="link"&&g.getAttribute("rel")==="stylesheet")&&g.namespaceURI!=="http://www.w3.org/2000/svg"){var y=g.getAttribute(i)||"";y=a+y;var b=m.get(y);b?b.push(g):m.set(y,[g])}}return m}function jC(a,i,l){a=a.ownerDocument||a,a.head.insertBefore(l,i==="title"?a.querySelector("head > title"):null)}function KP(a,i,l){if(l===1||i.itemProp!=null)return!1;switch(a){case"meta":case"title":return!0;case"style":if(typeof i.precedence!="string"||typeof i.href!="string"||i.href==="")break;return!0;case"link":if(typeof i.rel!="string"||typeof i.href!="string"||i.href===""||i.onLoad||i.onError)break;switch(i.rel){case"stylesheet":return a=i.disabled,typeof i.precedence=="string"&&a==null;default:return!0}case"script":if(i.async&&typeof i.async!="function"&&typeof i.async!="symbol"&&!i.onLoad&&!i.onError&&i.src&&typeof i.src=="string")return!0}return!1}function TC(a){return!(a.type==="stylesheet"&&(a.state.loading&3)===0)}function ZP(a,i,l,m){if(l.type==="stylesheet"&&(typeof m.media!="string"||matchMedia(m.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var d=xr(m.href),g=i.querySelector(iu(d));if(g){i=g._p,i!==null&&typeof i=="object"&&typeof i.then=="function"&&(a.count++,a=Fp.bind(a),i.then(a,a)),l.state.loading|=4,l.instance=g,qt(g);return}g=i.ownerDocument||i,m=wC(m),(d=es.get(d))&&Zh(m,d),g=g.createElement("link"),qt(g);var y=g;y._p=new Promise(function(b,j){y.onload=b,y.onerror=j}),Gt(g,"link",m),l.instance=g}a.stylesheets===null&&(a.stylesheets=new Map),a.stylesheets.set(l,i),(i=l.state.preload)&&(l.state.loading&3)===0&&(a.count++,l=Fp.bind(a),i.addEventListener("load",l),i.addEventListener("error",l))}}var Jh=0;function XP(a,i){return a.stylesheets&&a.count===0&&Gp(a,a.stylesheets),0<a.count||0<a.imgCount?function(l){var m=setTimeout(function(){if(a.stylesheets&&Gp(a,a.stylesheets),a.unsuspend){var g=a.unsuspend;a.unsuspend=null,g()}},6e4+i);0<a.imgBytes&&Jh===0&&(Jh=62500*MP());var d=setTimeout(function(){if(a.waitingForImages=!1,a.count===0&&(a.stylesheets&&Gp(a,a.stylesheets),a.unsuspend)){var g=a.unsuspend;a.unsuspend=null,g()}},(a.imgBytes>Jh?50:800)+i);return a.unsuspend=l,function(){a.unsuspend=null,clearTimeout(m),clearTimeout(d)}}:null}function Fp(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Gp(this,this.stylesheets);else if(this.unsuspend){var a=this.unsuspend;this.unsuspend=null,a()}}}var Up=null;function Gp(a,i){a.stylesheets=null,a.unsuspend!==null&&(a.count++,Up=new Map,i.forEach(JP,a),Up=null,Fp.call(a))}function JP(a,i){if(!(i.state.loading&4)){var l=Up.get(a);if(l)var m=l.get(null);else{l=new Map,Up.set(a,l);for(var d=a.querySelectorAll("link[data-precedence],style[data-precedence]"),g=0;g<d.length;g++){var y=d[g];(y.nodeName==="LINK"||y.getAttribute("media")!=="not all")&&(l.set(y.dataset.precedence,y),m=y)}m&&l.set(null,m)}d=i.instance,y=d.getAttribute("data-precedence"),g=l.get(y)||m,g===m&&l.set(null,d),l.set(y,d),this.count++,m=Fp.bind(this),d.addEventListener("load",m),d.addEventListener("error",m),g?g.parentNode.insertBefore(d,g.nextSibling):(a=a.nodeType===9?a.head:a,a.insertBefore(d,a.firstChild)),i.state.loading|=4}}var ou={$$typeof:te,Provider:null,Consumer:null,_currentValue:le,_currentValue2:le,_threadCount:0};function e5(a,i,l,m,d,g,y,b,j){this.tag=1,this.containerInfo=a,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=Yg(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Yg(0),this.hiddenUpdates=Yg(null),this.identifierPrefix=m,this.onUncaughtError=d,this.onCaughtError=g,this.onRecoverableError=y,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=j,this.incompleteTransitions=new Map}function DC(a,i,l,m,d,g,y,b,j,R,L,P){return a=new e5(a,i,l,y,j,R,L,P,b),i=1,g===!0&&(i|=24),g=za(3,null,null,i),a.current=g,g.stateNode=a,i=M_(),i.refCount++,a.pooledCache=i,i.refCount++,g.memoizedState={element:m,isDehydrated:l,cache:i},q_(g),a}function SC(a){return a?(a=tr,a):tr}function AC(a,i,l,m,d,g){d=SC(d),m.context===null?m.context=d:m.pendingContext=d,m=nn(i),m.payload={element:l},g=g===void 0?null:g,g!==null&&(m.callback=g),l=on(a,m,i),l!==null&&(pa(l,a,i),$m(l,a,i))}function zC(a,i){if(a=a.memoizedState,a!==null&&a.dehydrated!==null){var l=a.retryLane;a.retryLane=l!==0&&l<i?l:i}}function ef(a,i){zC(a,i),(a=a.alternate)&&zC(a,i)}function NC(a){if(a.tag===13||a.tag===31){var i=no(a,67108864);i!==null&&pa(i,a,67108864),ef(a,67108864)}}function MC(a){if(a.tag===13||a.tag===31){var i=Ia();i=Qg(i);var l=no(a,i);l!==null&&pa(l,a,i),ef(a,i)}}var Hp=!0;function t5(a,i,l,m){var d=$.T;$.T=null;var g=K.p;try{K.p=2,tf(a,i,l,m)}finally{K.p=g,$.T=d}}function a5(a,i,l,m){var d=$.T;$.T=null;var g=K.p;try{K.p=8,tf(a,i,l,m)}finally{K.p=g,$.T=d}}function tf(a,i,l,m){if(Hp){var d=af(m);if(d===null)Ph(a,i,m,Vp,l),EC(a,m);else if(i5(d,a,i,l,m))m.stopPropagation();else if(EC(a,m),i&4&&-1<s5.indexOf(a)){for(;d!==null;){var g=Ul(d);if(g!==null)switch(g.tag){case 3:if(g=g.stateNode,g.current.memoizedState.isDehydrated){var y=eo(g.pendingLanes);if(y!==0){var b=g;for(b.pendingLanes|=2,b.entangledLanes|=2;y;){var j=1<<31-Sa(y);b.entanglements[1]|=j,y&=~j}$s(g),(Qe&6)===0&&(Ap=Ta()+500,eu(0))}}break;case 31:case 13:b=no(g,2),b!==null&&pa(b,g,2),Np(),ef(g,2)}if(g=af(m),g===null&&Ph(a,i,m,Vp,l),g===d)break;d=g}d!==null&&m.stopPropagation()}else Ph(a,i,m,null,l)}}function af(a){return a=i_(a),sf(a)}var Vp=null;function sf(a){if(Vp=null,a=Fl(a),a!==null){var i=u(a);if(i===null)a=null;else{var l=i.tag;if(l===13){if(a=c(i),a!==null)return a;a=null}else if(l===31){if(a=p(i),a!==null)return a;a=null}else if(l===3){if(i.stateNode.current.memoizedState.isDehydrated)return i.tag===3?i.stateNode.containerInfo:null;a=null}else i!==a&&(a=null)}}return Vp=a,null}function RC(a){switch(a){case"beforetoggle":case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(WB()){case Pb:return 2;case Wb:return 8;case qc:case FB:return 32;case Fb:return 268435456;default:return 32}default:return 32}}var nf=!1,fn=null,yn=null,vn=null,lu=new Map,ru=new Map,kn=[],s5="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function EC(a,i){switch(a){case"focusin":case"focusout":fn=null;break;case"dragenter":case"dragleave":yn=null;break;case"mouseover":case"mouseout":vn=null;break;case"pointerover":case"pointerout":lu.delete(i.pointerId);break;case"gotpointercapture":case"lostpointercapture":ru.delete(i.pointerId)}}function mu(a,i,l,m,d,g){return a===null||a.nativeEvent!==g?(a={blockedOn:i,domEventName:l,eventSystemFlags:m,nativeEvent:g,targetContainers:[d]},i!==null&&(i=Ul(i),i!==null&&NC(i)),a):(a.eventSystemFlags|=m,i=a.targetContainers,d!==null&&i.indexOf(d)===-1&&i.push(d),a)}function i5(a,i,l,m,d){switch(i){case"focusin":return fn=mu(fn,a,i,l,m,d),!0;case"dragenter":return yn=mu(yn,a,i,l,m,d),!0;case"mouseover":return vn=mu(vn,a,i,l,m,d),!0;case"pointerover":var g=d.pointerId;return lu.set(g,mu(lu.get(g)||null,a,i,l,m,d)),!0;case"gotpointercapture":return g=d.pointerId,ru.set(g,mu(ru.get(g)||null,a,i,l,m,d)),!0}return!1}function IC(a){var i=Fl(a.target);if(i!==null){var l=u(i);if(l!==null){if(i=l.tag,i===13){if(i=c(l),i!==null){a.blockedOn=i,Qb(a.priority,function(){MC(l)});return}}else if(i===31){if(i=p(l),i!==null){a.blockedOn=i,Qb(a.priority,function(){MC(l)});return}}else if(i===3&&l.stateNode.current.memoizedState.isDehydrated){a.blockedOn=l.tag===3?l.stateNode.containerInfo:null;return}}}a.blockedOn=null}function Yp(a){if(a.blockedOn!==null)return!1;for(var i=a.targetContainers;0<i.length;){var l=af(a.nativeEvent);if(l===null){l=a.nativeEvent;var m=new l.constructor(l.type,l);s_=m,l.target.dispatchEvent(m),s_=null}else return i=Ul(l),i!==null&&NC(i),a.blockedOn=l,!1;i.shift()}return!0}function qC(a,i,l){Yp(a)&&l.delete(i)}function n5(){nf=!1,fn!==null&&Yp(fn)&&(fn=null),yn!==null&&Yp(yn)&&(yn=null),vn!==null&&Yp(vn)&&(vn=null),lu.forEach(qC),ru.forEach(qC)}function Qp(a,i){a.blockedOn===i&&(a.blockedOn=null,nf||(nf=!0,t.unstable_scheduleCallback(t.unstable_NormalPriority,n5)))}var Kp=null;function OC(a){Kp!==a&&(Kp=a,t.unstable_scheduleCallback(t.unstable_NormalPriority,function(){Kp===a&&(Kp=null);for(var i=0;i<a.length;i+=3){var l=a[i],m=a[i+1],d=a[i+2];if(typeof m!="function"){if(sf(m||l)===null)continue;break}var g=Ul(l);g!==null&&(a.splice(i,3),i-=3,ah(g,{pending:!0,data:d,method:l.method,action:m},m,d))}}))}function jr(a){function i(j){return Qp(j,a)}fn!==null&&Qp(fn,a),yn!==null&&Qp(yn,a),vn!==null&&Qp(vn,a),lu.forEach(i),ru.forEach(i);for(var l=0;l<kn.length;l++){var m=kn[l];m.blockedOn===a&&(m.blockedOn=null)}for(;0<kn.length&&(l=kn[0],l.blockedOn===null);)IC(l),l.blockedOn===null&&kn.shift();if(l=(a.ownerDocument||a).$$reactFormReplay,l!=null)for(m=0;m<l.length;m+=3){var d=l[m],g=l[m+1],y=d[oa]||null;if(typeof g=="function")y||OC(l);else if(y){var b=null;if(g&&g.hasAttribute("formAction")){if(d=g,y=g[oa]||null)b=y.formAction;else if(sf(d)!==null)continue}else b=y.action;typeof b=="function"?l[m+1]=b:(l.splice(m,3),m-=3),OC(l)}}}function $C(){function a(g){g.canIntercept&&g.info==="react-transition"&&g.intercept({handler:function(){return new Promise(function(y){return d=y})},focusReset:"manual",scroll:"manual"})}function i(){d!==null&&(d(),d=null),m||setTimeout(l,20)}function l(){if(!m&&!navigation.transition){var g=navigation.currentEntry;g&&g.url!=null&&navigation.navigate(g.url,{state:g.getState(),info:"react-transition",history:"replace"})}}if(typeof navigation=="object"){var m=!1,d=null;return navigation.addEventListener("navigate",a),navigation.addEventListener("navigatesuccess",i),navigation.addEventListener("navigateerror",i),setTimeout(l,100),function(){m=!0,navigation.removeEventListener("navigate",a),navigation.removeEventListener("navigatesuccess",i),navigation.removeEventListener("navigateerror",i),d!==null&&(d(),d=null)}}}function of(a){this._internalRoot=a}Zp.prototype.render=of.prototype.render=function(a){var i=this._internalRoot;if(i===null)throw Error(n(409));var l=i.current,m=Ia();AC(l,m,a,i,null,null)},Zp.prototype.unmount=of.prototype.unmount=function(){var a=this._internalRoot;if(a!==null){this._internalRoot=null;var i=a.containerInfo;AC(a.current,2,null,a,null,null),Np(),i[Wl]=null}};function Zp(a){this._internalRoot=a}Zp.prototype.unstable_scheduleHydration=function(a){if(a){var i=Yb();a={blockedOn:null,target:a,priority:i};for(var l=0;l<kn.length&&i!==0&&i<kn[l].priority;l++);kn.splice(l,0,a),l===0&&IC(a)}};var LC=e.version;if(LC!=="19.2.8")throw Error(n(527,LC,"19.2.8"));K.findDOMNode=function(a){var i=a._reactInternals;if(i===void 0)throw typeof a.render=="function"?Error(n(188)):(a=Object.keys(a).join(","),Error(n(268,a)));return a=h(i),a=a!==null?f(a):null,a=a===null?null:a.stateNode,a};var o5={bundleType:0,version:"19.2.8",rendererPackageName:"react-dom",currentDispatcherRef:$,reconcilerVersion:"19.2.8"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var Xp=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Xp.isDisabled&&Xp.supportsFiber)try{ym=Xp.inject(o5),Da=Xp}catch{}}return Dr.createRoot=function(a,i){if(!r(a))throw Error(n(299));var l=!1,m="",d=H0,g=V0,y=Y0;return i!=null&&(i.unstable_strictMode===!0&&(l=!0),i.identifierPrefix!==void 0&&(m=i.identifierPrefix),i.onUncaughtError!==void 0&&(d=i.onUncaughtError),i.onCaughtError!==void 0&&(g=i.onCaughtError),i.onRecoverableError!==void 0&&(y=i.onRecoverableError)),i=DC(a,1,!1,null,null,l,m,null,d,g,y,$C),a[Wl]=i.current,Bh(a),new of(i)},Dr.hydrateRoot=function(a,i,l){if(!r(a))throw Error(n(299));var m=!1,d="",g=H0,y=V0,b=Y0,j=null;return l!=null&&(l.unstable_strictMode===!0&&(m=!0),l.identifierPrefix!==void 0&&(d=l.identifierPrefix),l.onUncaughtError!==void 0&&(g=l.onUncaughtError),l.onCaughtError!==void 0&&(y=l.onCaughtError),l.onRecoverableError!==void 0&&(b=l.onRecoverableError),l.formState!==void 0&&(j=l.formState)),i=DC(a,1,!0,i,l??null,m,d,j,g,y,b,$C),i.context=SC(null),l=i.current,m=Ia(),m=Qg(m),d=nn(m),d.callback=null,on(l,d,m),l=m,i.current.lanes=l,km(i,l),$s(i),a[Wl]=i.current,Bh(a),new Zp(i)},Dr.version="19.2.8",Dr}var Tf;function oT(){if(Tf)return td.exports;Tf=1;function t(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),td.exports=nT(),td.exports}var lT=oT(),Df=Cf();const cu=as(Df);/**
|
||
* @remix-run/router v1.23.4
|
||
*
|
||
* Copyright (c) Remix Software Inc.
|
||
*
|
||
* This source code is licensed under the MIT license found in the
|
||
* LICENSE.md file in the root directory of this source tree.
|
||
*
|
||
* @license MIT
|
||
*/function Sr(){return Sr=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var s=arguments[e];for(var n in s)({}).hasOwnProperty.call(s,n)&&(t[n]=s[n])}return t},Sr.apply(null,arguments)}var yi;(function(t){t.Pop="POP",t.Push="PUSH",t.Replace="REPLACE"})(yi||(yi={}));const Sf="popstate";function rT(t){t===void 0&&(t={});function e(r,u){let{pathname:c="/",search:p="",hash:_=""}=wn(r.location.hash.substr(1));return!c.startsWith("/")&&!c.startsWith(".")&&(c="/"+c),od("",{pathname:c,search:p,hash:_},u.state&&u.state.usr||null,u.state&&u.state.key||"default")}function s(r,u){let c=r.document.querySelector("base"),p="";if(c&&c.getAttribute("href")){let _=r.location.href,h=_.indexOf("#");p=h===-1?_:_.slice(0,h)}return p+"#"+(typeof u=="string"?u:pu(u))}function n(r,u){nd(r.pathname.charAt(0)==="/","relative pathnames are not supported in hash history.push("+JSON.stringify(u)+")")}return uT(e,s,n,t)}function xt(t,e){if(t===!1||t===null||typeof t>"u")throw new Error(e)}function nd(t,e){if(!t){typeof console<"u"&&console.warn(e);try{throw new Error(e)}catch{}}}function mT(){return Math.random().toString(36).substr(2,8)}function Af(t,e){return{usr:t.state,key:t.key,idx:e}}function od(t,e,s,n){return s===void 0&&(s=null),Sr({pathname:typeof t=="string"?t:t.pathname,search:"",hash:""},typeof e=="string"?wn(e):e,{state:s,key:e&&e.key||n||mT()})}function pu(t){let{pathname:e="/",search:s="",hash:n=""}=t;return s&&s!=="?"&&(e+=s.charAt(0)==="?"?s:"?"+s),n&&n!=="#"&&(e+=n.charAt(0)==="#"?n:"#"+n),e}function wn(t){let e={};if(t){let s=t.indexOf("#");s>=0&&(e.hash=t.substr(s),t=t.substr(0,s));let n=t.indexOf("?");n>=0&&(e.search=t.substr(n),t=t.substr(0,n)),t&&(e.pathname=t)}return e}function uT(t,e,s,n){n===void 0&&(n={});let{window:r=document.defaultView,v5Compat:u=!1}=n,c=r.history,p=yi.Pop,_=null,h=f();h==null&&(h=0,c.replaceState(Sr({},c.state,{idx:h}),""));function f(){return(c.state||{idx:null}).idx}function v(){p=yi.Pop;let I=f(),F=I==null?null:I-h;h=I,_&&_({action:p,location:q.location,delta:F})}function k(I,F){p=yi.Push;let se=od(q.location,I,F);s&&s(se,I),h=f()+1;let te=Af(se,h),ge=q.createHref(se);try{c.pushState(te,"",ge)}catch(Ie){if(Ie instanceof DOMException&&Ie.name==="DataCloneError")throw Ie;r.location.assign(ge)}u&&_&&_({action:p,location:q.location,delta:1})}function x(I,F){p=yi.Replace;let se=od(q.location,I,F);s&&s(se,I),h=f();let te=Af(se,h),ge=q.createHref(se);c.replaceState(te,"",ge),u&&_&&_({action:p,location:q.location,delta:0})}function N(I){let F=r.location.origin!=="null"?r.location.origin:r.location.href,se=typeof I=="string"?I:pu(I);return se=se.replace(/ $/,"%20"),xt(F,"No window.location.(origin|href) available to create URL for href: "+se),new URL(se,F)}let q={get action(){return p},get location(){return t(r,c)},listen(I){if(_)throw new Error("A history only accepts one active listener");return r.addEventListener(Sf,v),_=I,()=>{r.removeEventListener(Sf,v),_=null}},createHref(I){return e(r,I)},createURL:N,encodeLocation(I){let F=N(I);return{pathname:F.pathname,search:F.search,hash:F.hash}},push:k,replace:x,go(I){return c.go(I)}};return q}var zf;(function(t){t.data="data",t.deferred="deferred",t.redirect="redirect",t.error="error"})(zf||(zf={}));function cT(t,e,s){return s===void 0&&(s="/"),pT(t,e,s)}function pT(t,e,s,n){let r=typeof e=="string"?wn(e):e,u=ld(r.pathname||"/",s);if(u==null)return null;let c=Nf(t);dT(c);let p=null,_=jT(u);for(let h=0;p==null&&h<c.length;++h)p=wT(c[h],_);return p}function Nf(t,e,s,n){e===void 0&&(e=[]),s===void 0&&(s=[]),n===void 0&&(n="");let r=(u,c,p)=>{let _={relativePath:p===void 0?u.path||"":p,caseSensitive:u.caseSensitive===!0,childrenIndex:c,route:u};_.relativePath.startsWith("/")&&(xt(_.relativePath.startsWith(n),'Absolute route path "'+_.relativePath+'" nested under path '+('"'+n+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),_.relativePath=_.relativePath.slice(n.length));let h=vi([n,_.relativePath]),f=s.concat(_);u.children&&u.children.length>0&&(xt(u.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+h+'".')),Nf(u.children,e,f,h)),!(u.path==null&&!u.index)&&e.push({path:h,score:kT(h,u.index),routesMeta:f})};return t.forEach((u,c)=>{var p;if(u.path===""||!((p=u.path)!=null&&p.includes("?")))r(u,c);else for(let _ of Mf(u.path))r(u,c,_)}),e}function Mf(t){let e=t.split("/");if(e.length===0)return[];let[s,...n]=e,r=s.endsWith("?"),u=s.replace(/\?$/,"");if(n.length===0)return r?[u,""]:[u];let c=Mf(n.join("/")),p=[];return p.push(...c.map(_=>_===""?u:[u,_].join("/"))),r&&p.push(...c),p.map(_=>t.startsWith("/")&&_===""?"/":_)}function dT(t){t.sort((e,s)=>e.score!==s.score?s.score-e.score:bT(e.routesMeta.map(n=>n.childrenIndex),s.routesMeta.map(n=>n.childrenIndex)))}const gT=/^:[\w-]+$/,_T=3,hT=2,fT=1,yT=10,vT=-2,Rf=t=>t==="*";function kT(t,e){let s=t.split("/"),n=s.length;return s.some(Rf)&&(n+=vT),e&&(n+=hT),s.filter(r=>!Rf(r)).reduce((r,u)=>r+(gT.test(u)?_T:u===""?fT:yT),n)}function bT(t,e){return t.length===e.length&&t.slice(0,-1).every((n,r)=>n===e[r])?t[t.length-1]-e[e.length-1]:0}function wT(t,e,s){let{routesMeta:n}=t,r={},u="/",c=[];for(let p=0;p<n.length;++p){let _=n[p],h=p===n.length-1,f=u==="/"?e:e.slice(u.length)||"/",v=xT({path:_.relativePath,caseSensitive:_.caseSensitive,end:h},f),k=_.route;if(!v)return null;Object.assign(r,v.params),c.push({params:r,pathname:vi([u,v.pathname]),pathnameBase:ST(vi([u,v.pathnameBase])),route:k}),v.pathnameBase!=="/"&&(u=vi([u,v.pathnameBase]))}return c}function xT(t,e){typeof t=="string"&&(t={path:t,caseSensitive:!1,end:!0});let[s,n]=CT(t.path,t.caseSensitive,t.end),r=e.match(s);if(!r)return null;let u=r[0],c=u.replace(/(.)\/+$/,"$1"),p=r.slice(1);return{params:n.reduce((h,f,v)=>{let{paramName:k,isOptional:x}=f;if(k==="*"){let q=p[v]||"";c=u.slice(0,u.length-q.length).replace(/(.)\/+$/,"$1")}const N=p[v];return x&&!N?h[k]=void 0:h[k]=(N||"").replace(/%2F/g,"/"),h},{}),pathname:u,pathnameBase:c,pattern:t}}function CT(t,e,s){e===void 0&&(e=!1),s===void 0&&(s=!0),nd(t==="*"||!t.endsWith("*")||t.endsWith("/*"),'Route path "'+t+'" will be treated as if it were '+('"'+t.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+t.replace(/\*$/,"/*")+'".'));let n=[],r="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(c,p,_)=>(n.push({paramName:p,isOptional:_!=null}),_?"/?([^\\/]+)?":"/([^\\/]+)"));return t.endsWith("*")?(n.push({paramName:"*"}),r+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):s?r+="\\/*$":t!==""&&t!=="/"&&(r+="(?:(?=\\/|$))"),[new RegExp(r,e?void 0:"i"),n]}function jT(t){try{return t.split("/").map(e=>decodeURIComponent(e).replace(/\//g,"%2F")).join("/")}catch(e){return nd(!1,'The URL path "'+t+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+e+").")),t}}function ld(t,e){if(e==="/")return t;if(!t.toLowerCase().startsWith(e.toLowerCase()))return null;let s=e.endsWith("/")?e.length-1:e.length,n=t.charAt(s);return n&&n!=="/"?null:t.slice(s)||"/"}function TT(t,e){e===void 0&&(e="/");let{pathname:s,search:n="",hash:r=""}=typeof t=="string"?wn(t):t,u;return s?(s=Of(s),s.startsWith("/")?u=Ef(s.substring(1),"/"):u=Ef(s,e)):u=e,{pathname:u,search:AT(n),hash:zT(r)}}function Ef(t,e){let s=e.replace(/\/+$/,"").split("/");return t.split("/").forEach(r=>{r===".."?s.length>1&&s.pop():r!=="."&&s.push(r)}),s.length>1?s.join("/"):"/"}function rd(t,e,s,n){return"Cannot include a '"+t+"' character in a manually specified "+("`to."+e+"` field ["+JSON.stringify(n)+"]. Please separate it out to the ")+("`to."+s+"` field. Alternatively you may provide the full path as ")+'a string in <Link to="..."> and the router will parse it for you.'}function DT(t){return t.filter((e,s)=>s===0||e.route.path&&e.route.path.length>0)}function If(t,e){let s=DT(t);return e?s.map((n,r)=>r===s.length-1?n.pathname:n.pathnameBase):s.map(n=>n.pathnameBase)}function qf(t,e,s,n){n===void 0&&(n=!1);let r;typeof t=="string"?r=wn(t):(r=Sr({},t),xt(!r.pathname||!r.pathname.includes("?"),rd("?","pathname","search",r)),xt(!r.pathname||!r.pathname.includes("#"),rd("#","pathname","hash",r)),xt(!r.search||!r.search.includes("#"),rd("#","search","hash",r)));let u=t===""||r.pathname==="",c=u?"/":r.pathname,p;if(c==null)p=s;else{let v=e.length-1;if(!n&&c.startsWith("..")){let k=c.split("/");for(;k[0]==="..";)k.shift(),v-=1;r.pathname=k.join("/")}p=v>=0?e[v]:"/"}let _=TT(r,p),h=c&&c!=="/"&&c.endsWith("/"),f=(u||c===".")&&s.endsWith("/");return!_.pathname.endsWith("/")&&(h||f)&&(_.pathname+="/"),_}const Of=t=>t.replace(/\/\/+/g,"/"),vi=t=>Of(t.join("/")),ST=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),AT=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,zT=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t;function NT(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}const $f=["post","put","patch","delete"];new Set($f);const MT=["get",...$f];new Set(MT);/**
|
||
* React Router v6.30.6
|
||
*
|
||
* Copyright (c) Remix Software Inc.
|
||
*
|
||
* This source code is licensed under the MIT license found in the
|
||
* LICENSE.md file in the root directory of this source tree.
|
||
*
|
||
* @license MIT
|
||
*/function Ar(){return Ar=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var s=arguments[e];for(var n in s)({}).hasOwnProperty.call(s,n)&&(t[n]=s[n])}return t},Ar.apply(null,arguments)}const md=T.createContext(null),RT=T.createContext(null),xn=T.createContext(null),du=T.createContext(null),ki=T.createContext({outlet:null,matches:[],isDataRoute:!1}),Lf=T.createContext(null);function ET(t,e){let{relative:s}=e===void 0?{}:e;zr()||xt(!1);let{basename:n,navigator:r}=T.useContext(xn),{hash:u,pathname:c,search:p}=Pf(t,{relative:s}),_=c;return n!=="/"&&(_=c==="/"?n:vi([n,c])),r.createHref({pathname:_,search:p,hash:u})}function zr(){return T.useContext(du)!=null}function vo(){return zr()||xt(!1),T.useContext(du).location}function Bf(t){T.useContext(xn).static||T.useLayoutEffect(t)}function ko(){let{isDataRoute:t}=T.useContext(ki);return t?VT():IT()}function IT(){zr()||xt(!1);let t=T.useContext(md),{basename:e,future:s,navigator:n}=T.useContext(xn),{matches:r}=T.useContext(ki),{pathname:u}=vo(),c=JSON.stringify(If(r,s.v7_relativeSplatPath)),p=T.useRef(!1);return Bf(()=>{p.current=!0}),T.useCallback(function(h,f){if(f===void 0&&(f={}),!p.current)return;if(typeof h=="number"){n.go(h);return}let v=qf(h,JSON.parse(c),u,f.relative==="path");t==null&&e!=="/"&&(v.pathname=v.pathname==="/"?e:vi([e,v.pathname])),(f.replace?n.replace:n.push)(v,f.state,f)},[e,n,c,u,t])}function da(){let{matches:t}=T.useContext(ki),e=t[t.length-1];return e?e.params:{}}function Pf(t,e){let{relative:s}=e===void 0?{}:e,{future:n}=T.useContext(xn),{matches:r}=T.useContext(ki),{pathname:u}=vo(),c=JSON.stringify(If(r,n.v7_relativeSplatPath));return T.useMemo(()=>qf(t,JSON.parse(c),u,s==="path"),[t,c,u,s])}function qT(t,e){return OT(t,e)}function OT(t,e,s,n){zr()||xt(!1);let{navigator:r}=T.useContext(xn),{matches:u}=T.useContext(ki),c=u[u.length-1],p=c?c.params:{};c&&c.pathname;let _=c?c.pathnameBase:"/";c&&c.route;let h=vo(),f;if(e){var v;let I=typeof e=="string"?wn(e):e;_==="/"||(v=I.pathname)!=null&&v.startsWith(_)||xt(!1),f=I}else f=h;let k=f.pathname||"/",x=k;if(_!=="/"){let I=_.replace(/^\//,"").split("/");x="/"+k.replace(/^\//,"").split("/").slice(I.length).join("/")}let N=cT(t,{pathname:x}),q=WT(N&&N.map(I=>Object.assign({},I,{params:Object.assign({},p,I.params),pathname:vi([_,r.encodeLocation?r.encodeLocation(I.pathname).pathname:I.pathname]),pathnameBase:I.pathnameBase==="/"?_:vi([_,r.encodeLocation?r.encodeLocation(I.pathnameBase).pathname:I.pathnameBase])})),u,s,n);return e&&q?T.createElement(du.Provider,{value:{location:Ar({pathname:"/",search:"",hash:"",state:null,key:"default"},f),navigationType:yi.Pop}},q):q}function $T(){let t=HT(),e=NT(t)?t.status+" "+t.statusText:t instanceof Error?t.message:JSON.stringify(t),s=t instanceof Error?t.stack:null,r={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return T.createElement(T.Fragment,null,T.createElement("h2",null,"Unexpected Application Error!"),T.createElement("h3",{style:{fontStyle:"italic"}},e),s?T.createElement("pre",{style:r},s):null,null)}const LT=T.createElement($T,null);class BT extends T.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,s){return s.location!==e.location||s.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error!==void 0?e.error:s.error,location:s.location,revalidation:e.revalidation||s.revalidation}}componentDidCatch(e,s){console.error("React Router caught the following error during render",e,s)}render(){return this.state.error!==void 0?T.createElement(ki.Provider,{value:this.props.routeContext},T.createElement(Lf.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function PT(t){let{routeContext:e,match:s,children:n}=t,r=T.useContext(md);return r&&r.static&&r.staticContext&&(s.route.errorElement||s.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=s.route.id),T.createElement(ki.Provider,{value:e},n)}function WT(t,e,s,n){var r;if(e===void 0&&(e=[]),s===void 0&&(s=null),n===void 0&&(n=null),t==null){var u;if(!s)return null;if(s.errors)t=s.matches;else if((u=n)!=null&&u.v7_partialHydration&&e.length===0&&!s.initialized&&s.matches.length>0)t=s.matches;else return null}let c=t,p=(r=s)==null?void 0:r.errors;if(p!=null){let f=c.findIndex(v=>v.route.id&&(p==null?void 0:p[v.route.id])!==void 0);f>=0||xt(!1),c=c.slice(0,Math.min(c.length,f+1))}let _=!1,h=-1;if(s&&n&&n.v7_partialHydration)for(let f=0;f<c.length;f++){let v=c[f];if((v.route.HydrateFallback||v.route.hydrateFallbackElement)&&(h=f),v.route.id){let{loaderData:k,errors:x}=s,N=v.route.loader&&k[v.route.id]===void 0&&(!x||x[v.route.id]===void 0);if(v.route.lazy||N){_=!0,h>=0?c=c.slice(0,h+1):c=[c[0]];break}}}return c.reduceRight((f,v,k)=>{let x,N=!1,q=null,I=null;s&&(x=p&&v.route.id?p[v.route.id]:void 0,q=v.route.errorElement||LT,_&&(h<0&&k===0?(YT("route-fallback"),N=!0,I=null):h===k&&(N=!0,I=v.route.hydrateFallbackElement||null)));let F=e.concat(c.slice(0,k+1)),se=()=>{let te;return x?te=q:N?te=I:v.route.Component?te=T.createElement(v.route.Component,null):v.route.element?te=v.route.element:te=f,T.createElement(PT,{match:v,routeContext:{outlet:f,matches:F,isDataRoute:s!=null},children:te})};return s&&(v.route.ErrorBoundary||v.route.errorElement||k===0)?T.createElement(BT,{location:s.location,revalidation:s.revalidation,component:q,error:x,children:se(),routeContext:{outlet:null,matches:F,isDataRoute:!0}}):se()},null)}var Wf=(function(t){return t.UseBlocker="useBlocker",t.UseRevalidator="useRevalidator",t.UseNavigateStable="useNavigate",t})(Wf||{}),Ff=(function(t){return t.UseBlocker="useBlocker",t.UseLoaderData="useLoaderData",t.UseActionData="useActionData",t.UseRouteError="useRouteError",t.UseNavigation="useNavigation",t.UseRouteLoaderData="useRouteLoaderData",t.UseMatches="useMatches",t.UseRevalidator="useRevalidator",t.UseNavigateStable="useNavigate",t.UseRouteId="useRouteId",t})(Ff||{});function FT(t){let e=T.useContext(md);return e||xt(!1),e}function UT(t){let e=T.useContext(RT);return e||xt(!1),e}function GT(t){let e=T.useContext(ki);return e||xt(!1),e}function Uf(t){let e=GT(),s=e.matches[e.matches.length-1];return s.route.id||xt(!1),s.route.id}function HT(){var t;let e=T.useContext(Lf),s=UT(),n=Uf();return e!==void 0?e:(t=s.errors)==null?void 0:t[n]}function VT(){let{router:t}=FT(Wf.UseNavigateStable),e=Uf(Ff.UseNavigateStable),s=T.useRef(!1);return Bf(()=>{s.current=!0}),T.useCallback(function(r,u){u===void 0&&(u={}),s.current&&(typeof r=="number"?t.navigate(r):t.navigate(r,Ar({fromRouteId:e},u)))},[t,e])}const Gf={};function YT(t,e,s){Gf[t]||(Gf[t]=!0)}function QT(t,e){t==null||t.v7_startTransition,t==null||t.v7_relativeSplatPath}function bi(t){xt(!1)}function KT(t){let{basename:e="/",children:s=null,location:n,navigationType:r=yi.Pop,navigator:u,static:c=!1,future:p}=t;zr()&&xt(!1);let _=e.replace(/^\/*/,"/"),h=T.useMemo(()=>({basename:_,navigator:u,static:c,future:Ar({v7_relativeSplatPath:!1},p)}),[_,p,u,c]);typeof n=="string"&&(n=wn(n));let{pathname:f="/",search:v="",hash:k="",state:x=null,key:N="default"}=n,q=T.useMemo(()=>{let I=ld(f,_);return I==null?null:{location:{pathname:I,search:v,hash:k,state:x,key:N},navigationType:r}},[_,f,v,k,x,N,r]);return q==null?null:T.createElement(xn.Provider,{value:h},T.createElement(du.Provider,{children:s,value:q}))}function Hf(t){let{children:e,location:s}=t;return qT(ud(e),s)}new Promise(()=>{});function ud(t,e){e===void 0&&(e=[]);let s=[];return T.Children.forEach(t,(n,r)=>{if(!T.isValidElement(n))return;let u=[...e,r];if(n.type===T.Fragment){s.push.apply(s,ud(n.props.children,u));return}n.type!==bi&&xt(!1),!n.props.index||!n.props.children||xt(!1);let c={id:n.props.id||u.join("-"),caseSensitive:n.props.caseSensitive,element:n.props.element,Component:n.props.Component,index:n.props.index,path:n.props.path,loader:n.props.loader,action:n.props.action,errorElement:n.props.errorElement,ErrorBoundary:n.props.ErrorBoundary,hasErrorBoundary:n.props.ErrorBoundary!=null||n.props.errorElement!=null,shouldRevalidate:n.props.shouldRevalidate,handle:n.props.handle,lazy:n.props.lazy};n.props.children&&(c.children=ud(n.props.children,u)),s.push(c)}),s}/**
|
||
* React Router DOM v6.30.6
|
||
*
|
||
* Copyright (c) Remix Software Inc.
|
||
*
|
||
* This source code is licensed under the MIT license found in the
|
||
* LICENSE.md file in the root directory of this source tree.
|
||
*
|
||
* @license MIT
|
||
*/function cd(){return cd=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var s=arguments[e];for(var n in s)({}).hasOwnProperty.call(s,n)&&(t[n]=s[n])}return t},cd.apply(null,arguments)}function ZT(t,e){if(t==null)return{};var s={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(e.indexOf(n)!==-1)continue;s[n]=t[n]}return s}function XT(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function JT(t,e){return t.button===0&&(!e||e==="_self")&&!XT(t)}const eD=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],tD="6";try{window.__reactRouterVersion=tD}catch{}const Vf=tT["startTransition"];function aD(t){let{basename:e,children:s,future:n,window:r}=t,u=T.useRef();u.current==null&&(u.current=rT({window:r,v5Compat:!0}));let c=u.current,[p,_]=T.useState({action:c.action,location:c.location}),{v7_startTransition:h}=n||{},f=T.useCallback(v=>{h&&Vf?Vf(()=>_(v)):_(v)},[_,h]);return T.useLayoutEffect(()=>c.listen(f),[c,f]),T.useEffect(()=>QT(n),[n]),T.createElement(KT,{basename:e,children:s,location:p.location,navigationType:p.action,navigator:c,future:n})}const sD=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",iD=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,wi=T.forwardRef(function(e,s){let{onClick:n,relative:r,reloadDocument:u,replace:c,state:p,target:_,to:h,preventScrollReset:f,viewTransition:v}=e,k=ZT(e,eD),{basename:x}=T.useContext(xn),N,q=!1;if(typeof h=="string"&&iD.test(h)&&(N=h,sD))try{let te=new URL(window.location.href),ge=h.startsWith("//")?new URL(te.protocol+h):new URL(h),Ie=ld(ge.pathname,x);ge.origin===te.origin&&Ie!=null?h=Ie+ge.search+ge.hash:q=!0}catch{}let I=ET(h,{relative:r}),F=nD(h,{replace:c,state:p,target:_,preventScrollReset:f,relative:r,viewTransition:v});function se(te){n&&n(te),te.defaultPrevented||F(te)}return T.createElement("a",cd({},k,{href:N||I,onClick:q||u?n:se,ref:s,target:_}))});var Yf;(function(t){t.UseScrollRestoration="useScrollRestoration",t.UseSubmit="useSubmit",t.UseSubmitFetcher="useSubmitFetcher",t.UseFetcher="useFetcher",t.useViewTransitionState="useViewTransitionState"})(Yf||(Yf={}));var Qf;(function(t){t.UseFetcher="useFetcher",t.UseFetchers="useFetchers",t.UseScrollRestoration="useScrollRestoration"})(Qf||(Qf={}));function nD(t,e){let{target:s,replace:n,state:r,preventScrollReset:u,relative:c,viewTransition:p}=e===void 0?{}:e,_=ko(),h=vo(),f=Pf(t,{relative:c});return T.useCallback(v=>{if(JT(v,s)){v.preventDefault();let k=n!==void 0?n:pu(h)===pu(f);_(t,{replace:k,state:r,preventScrollReset:u,relative:c,viewTransition:p})}},[h,_,f,n,r,s,t,u,c,p])}class oD{constructor(){Pe(this,Rc);this.language="ru",this.translations=new Map}get(e="",s){const n=this.translations.get(this.language),r=n==null?void 0:n.get(e||"");return r?this.insertArguments(r,s):e||""}insertArguments(e,s){return s&&Object.entries(s).forEach(([n,r])=>{e=e.split(`{${n}}`).join(`${r??"_"}`)}),e}addTranslationsForLanguage(e,s){const n=this.translations.get(e)||new Map;V(this,Rc,PC).call(this,n,s),this.translations.set(e,n)}updateLangAttribute(){try{document.body.parentNode.setAttribute("lang",this.language)}catch{}}updateTranslation(e,s){var r;const n=this.translations.get(this.language);(r=n==null?void 0:n.set)==null||r.call(n,e,s)}}Rc=new WeakSet,PC=function(e,s){s.split("§ ").slice(1).forEach(n=>{const r=n.trimEnd();let u=r.indexOf(`
|
||
`);u===-1&&(u=r.indexOf(":")),u!==-1&&e.set(r.slice(0,u),r.slice(u+1).trim())})};const Ee=new oD;window.localization=Ee;function $t(t){return Ee.get(t)}const lD=[`
|
||
§ components.console.button: نسخ
|
||
§ components.console.notification: تم نسخ النص
|
||
§ components.dataLoader.page: الصفحة
|
||
§ components.dataLoader.size: المعروض
|
||
§ components.dataLoader.rows: أسطر (الإجمالي {count}).
|
||
§ components.dataLoader.from: من
|
||
§ components.dataLoader.all: عرض الكل
|
||
§ components.hoursChart.work: وقت العمل القياسي (أيام الأسبوع، من 07:00 إلى 20:00)
|
||
§ components.hoursChart.weekend: عطلات نهاية الأسبوع أو الوقت قبل ساعات العمل وبعدها
|
||
§ components.hoursChart.days: إجمالي عدد commits في يوم وساعة محددين
|
||
§ components.page.remove: إزالة
|
||
§ components.nothingFound.common.title: لا توجد بيانات أو البيانات غير كافية للعرض
|
||
§ components.nothingFound.common.console: رقم_المهمة النوع(الميزة): الوصف
|
||
§ components.nothingFound.common.example: على سبيل المثال:
|
||
§ components.nothingFound.staff.title: لا توجد بيانات لهذا الموظف
|
||
§ components.nothingFound.staff.description
|
||
لم يُنشئ هذا الشخص commit في كل يوم عمل وحصل على حالة «مساعد».
|
||
يمكن تجاهل عمل الموظفين بهذه الحالة في هذا المشروع، لأن مساهمتهم صغيرة مقارنة ببقية الفريق.
|
||
لذلك لا يحسب النظام عددًا من المؤشرات لهم.
|
||
§ components.notifications.save: تم حفظ التغييرات
|
||
§ components.confirm.title: هل أنت متأكد أنك تريد الحذف؟
|
||
§ components.confirm.yes: نعم، أنا متأكد.
|
||
§ components.confirm.no: إلغاء
|
||
§ components.search.placeholder: أدخل نصًا للبحث
|
||
§ components.search.select.author: الموظف غير مهم
|
||
§ components.search.select.taskCode: القسم غير مهم
|
||
§ components.search.select.company: المقاول من الباطن غير مهم
|
||
§ components.search.select.type: النوع غير مهم
|
||
§ components.search.select.scope: الميزة غير مهمة
|
||
§ components.search.example: على سبيل المثال:
|
||
§ components.recommendations.title: التوصيات والحقائق
|
||
§ components.recommendations.cancel: إغلاق
|
||
§ components.recommendations.open: التفاصيل
|
||
§ components.translation.tooltip.list: الترجمات
|
||
§ components.translation.modal.title: جدول تغييرات الترجمة
|
||
§ components.translation.modal.key: ID
|
||
§ components.translation.modal.value: الترجمة الجديدة
|
||
§ components.translation.modal.export: تصدير
|
||
§ components.translation.modal.cancel: إلغاء
|
||
§ common.title: إحصاءات Git
|
||
§ common.filters: عوامل التصفية
|
||
§ common.fileLoader.notification: تعذر فتح الملف {file}
|
||
§ common.statistic.days: أيام
|
||
§ common.statistic.tasks: مهام
|
||
§ common.statistic.Tasks: مهام
|
||
§ common.statistic.commits: commits
|
||
§ common.statistic.employees: موظفون
|
||
§ common.statistic.Date: التاريخ
|
||
§ common.statistic.work: يعمل
|
||
§ common.statistic.dismissed: غادر
|
||
§ common.statistic.staff: مساعد
|
||
`,`
|
||
§ sidebar.switch.team: الفريق
|
||
§ sidebar.switch.person: الموظف
|
||
§ sidebar.buttons.share: مشاركة
|
||
§ sidebar.buttons.logout: خروج
|
||
§ sidebar.buttons.logoutQuestion: هل أنت متأكد أنك تريد مسح مجموعة البيانات؟
|
||
§ sidebar.filters.all: كل الوقت
|
||
§ sidebar.filters.year: سنة
|
||
§ sidebar.filters.halfYear: نصف سنة
|
||
§ sidebar.filters.month: شهر
|
||
§ sidebar.filters.week: أسبوع
|
||
§ sidebar.team.recommendations: التوصيات
|
||
§ sidebar.person.week: حسب الأسبوع
|
||
§ sidebar.person.commits: كل الـ commits
|
||
§ sidebar.person.changes: كل التغييرات
|
||
`,`
|
||
§ recommendations.modal.cancel: حسنًا
|
||
§ recommendations.modal.open: المزيد
|
||
§ recommendations.title
|
||
التوصيات والحقائق
|
||
`,`
|
||
§ page.welcome.step1: نفّذ الأمر في جذر المشروع.
|
||
§ page.welcome.step3: اسحب وأفلِت
|
||
§ page.welcome.step4: ملف log.txt إلى هذه الصفحة.
|
||
§ page.welcome.description: سينشئ Git ملف log.txt. يحتوي على بيانات لإنشاء التقرير. أو استخدم git shortlog -s -n -e إذا لم تكن بحاجة إلى تقرير. أنشئ ملف [.mailmap|https://git-scm.com/docs/gitmailmap] في جذر المشروع لدمج إحصاءات الموظفين.
|
||
§ page.welcome.warning1: الخدمة *لا تحفظ* و*لا تنقل* بياناتك. تُجرى كل الحسابات محليًا في المتصفح على جهازك.
|
||
§ page.welcome.warning2: الخدمة *لا تجمع إحصاءات* عن المشاريع. يمكنك قطع الإنترنت والتحقق من حركة المرور وحتى بناء نسخة محلية من [المصدر|https://github.com/bakhirev/assayo].
|
||
§ page.common.words.title: إحصاءات الكلمات.
|
||
§ page.common.words.description: الكلمة الأكثر شيوعًا. تتكرر {count} مرة.
|
||
§ page.common.commits.title: عدد commits حسب الأيام.
|
||
§ page.common.commits.description: ({day}) أكثر الأيام إنتاجية من حيث عدد commits.
|
||
§ page.common.commits.title2: {date} commits المُنشأة: {commits}
|
||
§ page.common.filter.allUsers: غير مهم
|
||
§ page.print.tableOfContents: جدول المحتويات
|
||
§ page.team.author.days.half: نصف سنة
|
||
§ page.team.author.days.one: سنة
|
||
§ page.team.author.days.15: سنة ونصف
|
||
§ page.team.author.days.two: سنتان
|
||
§ page.team.author.days.more: أكثر من سنتين
|
||
§ plugin.team_month.filters.release: الإصدارات
|
||
§ plugin.team_month.filters.absence: الإجازات وتغييرات الموقع
|
||
§ plugin.team_month.filters.firstLastDays: أول الأيام وآخرها
|
||
§ plugin.team_month.filters.authors: كل الموظفين
|
||
§ plugin.team_month.filters.types: كل الأنواع
|
||
§ plugin.team_month.title: تقويم العمل في المشروع
|
||
§ plugin.team_month.travel: (غيّر المنطقة الزمنية)
|
||
§ plugin.team_month.vacation.first: (يذهب في إجازة)
|
||
§ plugin.team_month.vacation.last: (عاد من الإجازة)
|
||
§ plugin.team_month.work.first: (أول يوم عمل)
|
||
§ plugin.team_month.work.last: (آخر يوم عمل)
|
||
§ page.team.tree.filters.author: الموظف
|
||
§ page.team.day.commits: Commits
|
||
§ page.team.day.activity: النشاط
|
||
§ page.team.recommendations.alert: تحذير
|
||
§ page.team.recommendations.warning: انتبه
|
||
§ page.team.recommendations.fact: حقائق عن المشروع
|
||
§ page.team.recommendations.info: نصائح عامة
|
||
§ page.person.total.daysWorked.title: أيام العمل
|
||
§ page.person.total.daysWorked.description: تُحتسب فقط الأيام التي فيها commits
|
||
§ page.person.total.tasks.title: مهام
|
||
§ page.person.total.tasks.description: إذا كانت commits موقّعة بشكل صحيح
|
||
§ page.person.scoring.toolbar: الترتيب وفق هذا المؤشر مقارنة بالآخرين. يمكن لموظفين أن يشغلا الترتيب نفسه إذا تطابقت القيم. لذلك قد يكون العدد الإجمالي للترتيبات أقل من عدد الموظفين.
|
||
§ page.person.achievement.title: الإنجازات
|
||
§ page.person.week.date: التاريخ
|
||
§ page.person.week.tasks: عدد المهام
|
||
§ page.person.week.workDays: أيام فيها commits
|
||
§ page.person.week.taskInDay: مهام في اليوم
|
||
§ page.person.week.days: أيام
|
||
§ page.person.week.workDay: أيام الأسبوع
|
||
§ page.person.week.weekends: عطلات نهاية الأسبوع
|
||
§ page.sponsor.title: يُرجى دعم هذا المشروع
|
||
§ page.sponsor.share.description: أخبر عن [مشروعنا|https://github.com/bakhirev/assayo] على الشبكات الاجتماعية! يمكنك مشاركة [مقال|https://habr.com/ru/articles/852782/] أو [منشور|https://www.reddit.com/r/ITManagers/comments/1e5k291/the_visualization_and_analysis_of_git_commit/] أو [فيديو|https://www.youtube.com/watch?v=jwCp_-bhrCQ].
|
||
§ page.sponsor.share.button: نسخ الرابط
|
||
`].join(""),rD=[`
|
||
§ components.console.button: Kopieren
|
||
§ components.console.notification: Der Text wurde kopiert
|
||
§ components.dataLoader.page: Seite
|
||
§ components.dataLoader.size: Wird nach angezeigt
|
||
§ components.dataLoader.rows: Zeilen (insgesamt {count}).
|
||
§ components.dataLoader.from: aus
|
||
§ components.dataLoader.all: Alles anzeigen
|
||
§ components.hoursChart.work: normale Arbeitszeit (wochentags von 07:00 bis 20:00 Uhr)
|
||
§ components.hoursChart.weekend: wochenenden oder Zeit vor/nach dem Arbeitstag
|
||
§ components.hoursChart.days: gesamtzahl der commits für die gesamte Zeit an einem bestimmten Tag und einer bestimmten Stunde
|
||
§ components.page.remove: Entfernen
|
||
§ components.nothingFound.common.title: Es gibt keine oder nicht genügend Daten zum Anzeigen
|
||
§ components.nothingFound.common.console: Aufgabennummer Typ(Module): Erläuterung
|
||
§ components.nothingFound.common.example: Zum Beispiel:
|
||
§ components.nothingFound.staff.title: Keine Daten für diesen Mitarbeiter
|
||
§ components.nothingFound.staff.description
|
||
Diese Person hat nicht an jedem Arbeitstag einen commit erstellt und den Status „Assistent“ erhalten.
|
||
Die Arbeit von Mitarbeitern mit diesem Status kann für dieses Projekt vernachlässigt werden, da ihr Beitrag im Gesamtbild gering ist.
|
||
Das System berechnet daher eine Reihe von Kennzahlen für sie nicht.
|
||
§ components.notifications.save: Änderungen gespeichert
|
||
§ components.confirm.title: Möchten Sie das wirklich entfernen?
|
||
§ components.confirm.yes: Ja, ich bin sicher.
|
||
§ components.confirm.no: Abbrechen
|
||
§ components.search.placeholder: Text für die Suche eingeben
|
||
§ components.search.select.author: Mitarbeiter spielt keine Rolle
|
||
§ components.search.select.taskCode: Abteilung spielt keine Rolle
|
||
§ components.search.select.company: Subunternehmer spielt keine Rolle
|
||
§ components.search.select.type: Typ spielt keine Rolle
|
||
§ components.search.select.scope: Feature spielt keine Rolle
|
||
§ components.search.example: Zum Beispiel:
|
||
§ components.recommendations.title: Empfehlungen und Fakten
|
||
§ components.recommendations.cancel: Schließen
|
||
§ components.recommendations.open: Details
|
||
§ components.translation.tooltip.list: Übersetzungen
|
||
§ components.translation.modal.title: Tabelle der Übersetzungsänderungen
|
||
§ components.translation.modal.key: ID
|
||
§ components.translation.modal.value: Neue Übersetzung
|
||
§ components.translation.modal.export: Export
|
||
§ components.translation.modal.cancel: Abbrechen
|
||
§ common.title: Git Statistik
|
||
§ common.filters: Filter
|
||
§ common.fileLoader.notification: Cant open file {file}
|
||
§ common.statistic.days: Tage
|
||
§ common.statistic.tasks: Aufgaben
|
||
§ common.statistic.Tasks: Aufgaben
|
||
§ common.statistic.commits: commits
|
||
§ common.statistic.employees: Mitarbeiter
|
||
§ common.statistic.Date: Datum
|
||
§ common.statistic.work: arbeitet
|
||
§ common.statistic.dismissed: ausgeschieden
|
||
§ common.statistic.staff: Assistent
|
||
`,`
|
||
§ sidebar.switch.team: Das Team
|
||
§ sidebar.switch.person: Der Angestellte
|
||
§ sidebar.buttons.share: Share
|
||
§ sidebar.buttons.logout: Logout
|
||
§ sidebar.buttons.logoutQuestion: Are you sure you want to clear data-set?
|
||
§ sidebar.filters.all: Die ganze Zeit
|
||
§ sidebar.filters.year: Jahr
|
||
§ sidebar.filters.halfYear: ein halbes Jahr
|
||
§ sidebar.filters.month: Monat
|
||
§ sidebar.filters.week: die Woche
|
||
§ sidebar.team.recommendations: Recommendations
|
||
§ sidebar.person.week: Nach Wochen
|
||
§ sidebar.person.commits: Alle commits
|
||
§ sidebar.person.changes: Alle Änderungen
|
||
`,`
|
||
§ recommendations.modal.cancel: Ok
|
||
§ recommendations.modal.open: More
|
||
§ recommendations.title
|
||
Recommendations and facts
|
||
`,`
|
||
§ page.welcome.step1: Execute the command in the root of your project.
|
||
§ page.welcome.step3: Drag and drop
|
||
§ page.welcome.step4: the log.txt file onto this page.
|
||
§ page.welcome.description: Git will create a log.txt file. It contains data for report generation. Or use git shortlog -s -n -e if you don't need a report. Create a [.mailmap|https://git-scm.com/docs/gitmailmap] file in the root of the project to consolidate employee statistics.
|
||
§ page.welcome.warning1: The service *DOES NOT SAVE* and *DOES NOT TRANSFER* your data. All calculations are performed locally in your browser on your machine.
|
||
§ page.welcome.warning2: The service *DOES NOT COLLECT STATISTICS* on projects. You can disconnect the internet, check traffic, and even build a local version from the [source|https://github.com/bakhirev/assayo].
|
||
§ page.common.words.title: Word Statistics.
|
||
§ page.common.words.description: the most popular word. Occurs {count} times.
|
||
§ page.common.commits.title: Number of commits by days.
|
||
§ page.common.commits.description: ({day}) the most productive day in terms of the number of commits.
|
||
§ page.common.commits.title2: {date} commits made: {commits}
|
||
§ page.common.filter.allUsers: Does not matter
|
||
§ page.print.tableOfContents: Table of contents
|
||
§ page.team.author.days.half: half year
|
||
§ page.team.author.days.one: year
|
||
§ page.team.author.days.15: year and a half
|
||
§ page.team.author.days.two: two years
|
||
§ page.team.author.days.more: more than two years
|
||
§ plugin.team_month.filters.release: Releases
|
||
§ plugin.team_month.filters.absence: Vacations and relocations
|
||
§ plugin.team_month.filters.firstLastDays: First and last days
|
||
§ plugin.team_month.filters.authors: All employees
|
||
§ plugin.team_month.filters.types: All types
|
||
§ plugin.team_month.title: Project work calendar
|
||
§ plugin.team_month.travel: (changed time zone)
|
||
§ plugin.team_month.vacation.first: (goes on vacation)
|
||
§ plugin.team_month.vacation.last: (returned from vacation)
|
||
§ plugin.team_month.work.first: (first work day)
|
||
§ plugin.team_month.work.last: (last work day)
|
||
§ page.team.tree.filters.author: Employee
|
||
§ page.team.day.commits: Commits
|
||
§ page.team.day.activity: Activity
|
||
§ page.team.recommendations.alert: Warning
|
||
§ page.team.recommendations.warning: Pay attention
|
||
§ page.team.recommendations.fact: Facts about the project
|
||
§ page.team.recommendations.info: General tips
|
||
§ page.person.total.daysWorked.title: days of work
|
||
§ page.person.total.daysWorked.description: Only days with commits are counted
|
||
§ page.person.total.tasks.title: tasks
|
||
§ page.person.total.tasks.description: If commits are properly signed
|
||
§ page.person.scoring.toolbar: The position according to this metric, relative to others. Two employees can take the same position if the values matches. Therefore, the total number of positions may be less than the number of employees.
|
||
§ page.person.achievement.title: Achievements
|
||
§ page.person.week.date: Datum
|
||
§ page.person.week.tasks: Anzahl der Aufgaben
|
||
§ page.person.week.workDays: Tage mit commits
|
||
§ page.person.week.taskInDay: Aufgaben pro Tag
|
||
§ page.person.week.days: Tage
|
||
§ page.person.week.workDay: Werktage
|
||
§ page.person.week.weekends: Wochenenden
|
||
§ page.sponsor.title: Please, support this project
|
||
§ page.sponsor.share.description: Tell about our [project|https://github.com/bakhirev/assayo] on social networks! You can share [article|https://habr.com/ru/articles/852782/], [post|https://www.reddit.com/r/ITManagers/comments/1e5k291/the_visualization_and_analysis_of_git_commit/] or [video|https://www.youtube.com/watch?v=jwCp_-bhrCQ].
|
||
§ page.sponsor.share.button: Copy the link
|
||
`].join(""),mD=[`
|
||
§ components.console.button: Copy
|
||
§ components.console.notification: Text was copied
|
||
§ components.dataLoader.page: Page
|
||
§ components.dataLoader.size: Displayed
|
||
§ components.dataLoader.rows: lines (total {count}).
|
||
§ components.dataLoader.from: out of
|
||
§ components.dataLoader.all: Show all
|
||
§ components.hoursChart.work: standard working hours (weekdays, 07:00 to 20:00)
|
||
§ components.hoursChart.weekend: weekend days or time before/after working hours
|
||
§ components.hoursChart.days: total number of commits on a specific day and hour
|
||
§ components.page.remove: Remove
|
||
§ components.nothingFound.common.title: No or insufficient data to display
|
||
§ components.nothingFound.common.console: Task_number type(feature): description
|
||
§ components.nothingFound.common.example: For example:
|
||
§ components.nothingFound.staff.title: No data for this employee
|
||
§ components.nothingFound.staff.description
|
||
This person did not commit on every working day and received the Assistant status.
|
||
Work by employees with this status can be left out of this project, because their contribution is small compared with the rest of the team.
|
||
The system therefore does not calculate a number of metrics for them.
|
||
§ components.notifications.save: The changes have been saved
|
||
§ components.confirm.title: Are you sure you want to remove it?
|
||
§ components.confirm.yes: Yes, I am sure.
|
||
§ components.confirm.no: Cancel
|
||
§ components.search.placeholder: Enter text to search
|
||
§ components.search.select.author: Staff member does not matter
|
||
§ components.search.select.taskCode: Department does not matter
|
||
§ components.search.select.company: Subcontractor does not matter
|
||
§ components.search.select.type: Type does not matter
|
||
§ components.search.select.scope: Feature does not matter
|
||
§ components.search.example: For example:
|
||
§ components.recommendations.title: Recommendations and facts
|
||
§ components.recommendations.cancel: Close
|
||
§ components.recommendations.open: Details
|
||
§ components.translation.tooltip.list: Translations
|
||
§ components.translation.modal.title: Translation change table
|
||
§ components.translation.modal.key: ID
|
||
§ components.translation.modal.value: New translation
|
||
§ components.translation.modal.export: Export
|
||
§ components.translation.modal.cancel: Cancel
|
||
§ common.title: Git statistics
|
||
§ common.filters: Filters
|
||
§ common.fileLoader.notification: Cant open file {file}
|
||
§ common.statistic.days: days
|
||
§ common.statistic.tasks: tasks
|
||
§ common.statistic.Tasks: Tasks
|
||
§ common.statistic.commits: commits
|
||
§ common.statistic.employees: employees
|
||
§ common.statistic.Date: Date
|
||
§ common.statistic.work: working
|
||
§ common.statistic.dismissed: dismissed
|
||
§ common.statistic.staff: assistant
|
||
`,`
|
||
§ sidebar.switch.team: Team
|
||
§ sidebar.switch.person: Employee
|
||
§ sidebar.buttons.share: Share
|
||
§ sidebar.buttons.logout: Logout
|
||
§ sidebar.buttons.logoutQuestion: Are you sure you want to clear data-set?
|
||
§ sidebar.filters.all: all time
|
||
§ sidebar.filters.year: year
|
||
§ sidebar.filters.halfYear: half year
|
||
§ sidebar.filters.month: month
|
||
§ sidebar.filters.week: week
|
||
§ sidebar.team.recommendations: Recommendations
|
||
§ sidebar.person.week: By week
|
||
§ sidebar.person.commits: All commits
|
||
§ sidebar.person.changes: All changes
|
||
`,`
|
||
§ recommendations.modal.cancel: Ok
|
||
§ recommendations.modal.open: More
|
||
§ recommendations.title
|
||
Recommendations and facts
|
||
`,`
|
||
§ page.welcome.step1: Execute the command in the root of your project.
|
||
§ page.welcome.step3: Drag and drop
|
||
§ page.welcome.step4: the log.txt file onto this page.
|
||
§ page.welcome.description: Git will create a log.txt file. It contains data for report generation. Or use git shortlog -s -n -e if you don't need a report. Create a [.mailmap|https://git-scm.com/docs/gitmailmap] file in the root of the project to consolidate employee statistics.
|
||
§ page.welcome.warning1: The service *DOES NOT SAVE* and *DOES NOT TRANSFER* your data. All calculations are performed locally in your browser on your machine.
|
||
§ page.welcome.warning2: The service *DOES NOT COLLECT STATISTICS* on projects. You can disconnect the internet, check traffic, and even build a local version from the [source|https://github.com/bakhirev/assayo].
|
||
§ page.common.words.title: Word Statistics.
|
||
§ page.common.words.description: the most popular word. Occurs {count} times.
|
||
§ page.common.commits.title: Number of commits by days.
|
||
§ page.common.commits.description: ({day}) the most productive day in terms of the number of commits.
|
||
§ page.common.commits.title2: {date} commits made: {commits}
|
||
§ page.common.filter.allUsers: Does not matter
|
||
§ page.print.tableOfContents: Table of contents
|
||
§ page.team.author.days.half: half year
|
||
§ page.team.author.days.one: year
|
||
§ page.team.author.days.15: year and a half
|
||
§ page.team.author.days.two: two years
|
||
§ page.team.author.days.more: more than two years
|
||
§ plugin.team_month.filters.release: Releases
|
||
§ plugin.team_month.filters.absence: Vacations and relocations
|
||
§ plugin.team_month.filters.firstLastDays: First and last days
|
||
§ plugin.team_month.filters.authors: All employees
|
||
§ plugin.team_month.filters.types: All types
|
||
§ plugin.team_month.title: Project work calendar
|
||
§ plugin.team_month.travel: (changed time zone)
|
||
§ plugin.team_month.vacation.first: (goes on vacation)
|
||
§ plugin.team_month.vacation.last: (returned from vacation)
|
||
§ plugin.team_month.work.first: (first work day)
|
||
§ plugin.team_month.work.last: (last work day)
|
||
§ page.team.tree.filters.author: Employee
|
||
§ page.team.day.commits: Commits
|
||
§ page.team.day.activity: Activity
|
||
§ page.team.recommendations.alert: Warning
|
||
§ page.team.recommendations.warning: Pay attention
|
||
§ page.team.recommendations.fact: Facts about the project
|
||
§ page.team.recommendations.info: General tips
|
||
§ page.person.total.daysWorked.title: days of work
|
||
§ page.person.total.daysWorked.description: Only days with commits are counted
|
||
§ page.person.total.tasks.title: tasks
|
||
§ page.person.total.tasks.description: If commits are properly signed
|
||
§ page.person.scoring.toolbar: The position according to this metric, relative to others. Two employees can take the same position if the values matches. Therefore, the total number of positions may be less than the number of employees.
|
||
§ page.person.achievement.title: Achievements
|
||
§ page.person.week.date: Date
|
||
§ page.person.week.tasks: Number of tasks
|
||
§ page.person.week.workDays: Days with commits
|
||
§ page.person.week.taskInDay: Tasks per day
|
||
§ page.person.week.days: days
|
||
§ page.person.week.workDay: weekdays
|
||
§ page.person.week.weekends: weekends
|
||
§ page.sponsor.title: Please, support this project
|
||
§ page.sponsor.share.description: Tell about our [project|https://github.com/bakhirev/assayo] on social networks! You can share [article|https://habr.com/ru/articles/852782/], [post|https://www.reddit.com/r/ITManagers/comments/1e5k291/the_visualization_and_analysis_of_git_commit/] or [video|https://www.youtube.com/watch?v=jwCp_-bhrCQ].
|
||
§ page.sponsor.share.button: Copy the link
|
||
`].join(""),uD=[`
|
||
§ components.console.button: Copiar
|
||
§ components.console.notification: El texto ha sido copiado
|
||
§ components.dataLoader.page: Página
|
||
§ components.dataLoader.size: Mostrando hasta
|
||
§ components.dataLoader.rows: líneas (total {count}).
|
||
§ components.dataLoader.from: de
|
||
§ components.dataLoader.all: Mostrar todo
|
||
§ components.hoursChart.work: horario laboral normal (lunes a viernes, de 07:00 a 20:00)
|
||
§ components.hoursChart.weekend: días o horario antes/después del día laboral
|
||
§ components.hoursChart.days: número total de commits en un día y una hora específica
|
||
§ components.page.remove: Eliminar
|
||
§ components.nothingFound.common.title: No hay o no hay suficientes datos para mostrar
|
||
§ components.nothingFound.common.console: Número_de_tarea tipo(característica): descripción
|
||
§ components.nothingFound.common.example: Por ejemplo:
|
||
§ components.nothingFound.staff.title: No hay datos para este empleado
|
||
§ components.nothingFound.staff.description
|
||
Esta persona no hizo commit todos los días laborables y recibió el estado de «asistente».
|
||
El trabajo de los empleados con este estado puede omitirse en este proyecto, porque su aportación es pequeña en el conjunto.
|
||
Por eso el sistema no calcula una serie de indicadores para ellos.
|
||
§ components.notifications.save: Cambios guardados
|
||
§ components.confirm.title: ¿Seguro que desea eliminarlo?
|
||
§ components.confirm.yes: Sí, estoy seguro.
|
||
§ components.confirm.no: Cancelar
|
||
§ components.search.placeholder: Introduzca texto para buscar
|
||
§ components.search.select.author: El empleado no importa
|
||
§ components.search.select.taskCode: El departamento no importa
|
||
§ components.search.select.company: El subcontratista no importa
|
||
§ components.search.select.type: El tipo no importa
|
||
§ components.search.select.scope: La funcionalidad no importa
|
||
§ components.search.example: Por ejemplo:
|
||
§ components.recommendations.title: Recomendaciones y hechos
|
||
§ components.recommendations.cancel: Cerrar
|
||
§ components.recommendations.open: Detalles
|
||
§ components.translation.tooltip.list: Traducciones
|
||
§ components.translation.modal.title: Tabla de cambios de la traducción
|
||
§ components.translation.modal.key: ID
|
||
§ components.translation.modal.value: Nueva traducción
|
||
§ components.translation.modal.export: Exportar
|
||
§ components.translation.modal.cancel: Cancelar
|
||
§ common.title: Estadísticas git
|
||
§ common.filters: Filtros
|
||
§ common.fileLoader.notification: Cant open file {file}
|
||
§ common.statistic.days: días
|
||
§ common.statistic.tasks: tareas
|
||
§ common.statistic.Tasks: Tareas
|
||
§ common.statistic.commits: commits
|
||
§ common.statistic.employees: empleados
|
||
§ common.statistic.Date: Fecha
|
||
§ common.statistic.work: en activo
|
||
§ common.statistic.dismissed: desvinculado
|
||
§ common.statistic.staff: asistente
|
||
`,`
|
||
§ sidebar.switch.team: Equipo
|
||
§ sidebar.switch.person: Empleado
|
||
§ sidebar.buttons.share: Share
|
||
§ sidebar.buttons.logout: Logout
|
||
§ sidebar.buttons.logoutQuestion: Are you sure you want to clear data-set?
|
||
§ sidebar.filters.all: a todas horas
|
||
§ sidebar.filters.year: año
|
||
§ sidebar.filters.halfYear: medio año
|
||
§ sidebar.filters.month: mes
|
||
§ sidebar.filters.week: semana
|
||
§ sidebar.team.recommendations: Recommendations
|
||
§ sidebar.person.week: Por semana
|
||
§ sidebar.person.commits: Todos los commits
|
||
§ sidebar.person.changes: Todos los cambios
|
||
`,`
|
||
§ recommendations.modal.cancel: Ok
|
||
§ recommendations.modal.open: More
|
||
§ recommendations.title
|
||
Recommendations and facts
|
||
`,`
|
||
§ page.welcome.step1: Ejecute el comando en la raíz de su proyecto
|
||
§ page.welcome.step3: Arrastrais
|
||
§ page.welcome.step4: fichero log.txt a esta página
|
||
§ page.welcome.description: Git creará un archivo log.txt. Contiene los datos para construir el informe. Ejecute el comando git shortlog -s -n -e еsi el informe no es necesario. Crear un archivo [.mailmap|https://git-scm.com/docs/gitmailmap] en la raíz del proyecto para combinar las estadísticas de los empleados.
|
||
§ page.welcome.warning1: El Servicio no ALMACENA ni TRANSMITE sus datos. Todos los cálculos se realizan en su computadora.
|
||
§ page.welcome.warning2: El Servicio no RECOPILA ESTADÍSTICAS sobre proyectos. Puedes ver [código fuente|https://github.com/bakhirev/assayo].
|
||
§ page.common.words.title: Estadísticas en palabras
|
||
§ page.common.words.description: la palabra más popular. Se encuentra {count} veces.
|
||
§ page.common.commits.title: Número de commits por día
|
||
§ page.common.commits.description: ({day}) el día más productivo por número de commits.
|
||
§ page.common.commits.title2: {date} commits hechas: {commits}
|
||
§ page.common.filter.allUsers: No tiene importancia
|
||
§ page.print.tableOfContents: Tabla
|
||
§ page.team.author.days.half: half year
|
||
§ page.team.author.days.one: year
|
||
§ page.team.author.days.15: year and a half
|
||
§ page.team.author.days.two: two years
|
||
§ page.team.author.days.more: more than two years
|
||
§ plugin.team_month.filters.release: Releases
|
||
§ plugin.team_month.filters.absence: Vacations and relocations
|
||
§ plugin.team_month.filters.firstLastDays: First and last days
|
||
§ plugin.team_month.filters.authors: All employees
|
||
§ plugin.team_month.filters.types: All types
|
||
§ plugin.team_month.title: Calendario del proyecto
|
||
§ plugin.team_month.travel: (changed time zone)
|
||
§ plugin.team_month.vacation.first: (goes on vacation)
|
||
§ plugin.team_month.vacation.last: (returned from vacation)
|
||
§ plugin.team_month.work.first: (first work day)
|
||
§ plugin.team_month.work.last: (last work day)
|
||
§ page.team.tree.filters.author: Empleado
|
||
§ page.team.day.commits: Commits
|
||
§ page.team.day.activity: Activity
|
||
§ page.team.recommendations.alert: Warning
|
||
§ page.team.recommendations.warning: Pay attention
|
||
§ page.team.recommendations.fact: Facts about the project
|
||
§ page.team.recommendations.info: General tips
|
||
§ page.person.total.daysWorked.title: working days
|
||
§ page.person.total.daysWorked.description: Only the days on which commits were made are taken into account
|
||
§ page.person.total.tasks.title: tasks
|
||
§ page.person.total.tasks.description: If the commits are signed correctly
|
||
§ page.person.scoring.toolbar: The position according to this metric, relative to others. Two employees can take the same position if the values matches. Therefore, the total number of positions may be less than the number of employees.
|
||
§ page.person.achievement.title: Progress
|
||
§ page.person.week.date: Fecha
|
||
§ page.person.week.tasks: Número de tareas
|
||
§ page.person.week.workDays: Días con commits
|
||
§ page.person.week.taskInDay: Tareas por día
|
||
§ page.person.week.days: días
|
||
§ page.person.week.workDay: días laborables
|
||
§ page.person.week.weekends: fines de semana
|
||
§ page.sponsor.title: Please, support this project
|
||
§ page.sponsor.share.description: Tell about our [project|https://github.com/bakhirev/assayo] on social networks! You can share [article|https://habr.com/ru/articles/852782/], [post|https://www.reddit.com/r/ITManagers/comments/1e5k291/the_visualization_and_analysis_of_git_commit/] or [video|https://www.youtube.com/watch?v=jwCp_-bhrCQ].
|
||
§ page.sponsor.share.button: Copy the link
|
||
`].join(""),cD=[`
|
||
§ components.console.button: Copier
|
||
§ components.console.notification: Texte copié
|
||
§ components.dataLoader.page: Page
|
||
§ components.dataLoader.size: Affiché par
|
||
§ components.dataLoader.rows: lignes (total {count}).
|
||
§ components.dataLoader.from: de
|
||
§ components.dataLoader.all: Afficher tout
|
||
§ components.hoursChart.work: temps de travail standard (Les jours ouvrables de 07h00 à 20h00)
|
||
§ components.hoursChart.weekend: Jours ou heures avant/après les jours ouvrables
|
||
§ components.hoursChart.days: La somme des commits au cours de tout le temps un certain jour et une certaine heure
|
||
§ components.page.remove: Supprimer
|
||
§ components.nothingFound.common.title: Il n’y a pas ou pas assez de données pour afficher.
|
||
§ components.nothingFound.common.console: Numéro_adresse type(modules): explication
|
||
§ components.nothingFound.common.example: Par exemple :
|
||
§ components.nothingFound.staff.title: Il n’y a pas de données pour cet employé.
|
||
§ components.nothingFound.staff.description
|
||
Cette personne n’a pas fait de commit chaque jour ouvré et a reçu le statut « assistant ».
|
||
Le travail des employés ayant ce statut peut être négligé pour ce projet, car leur contribution est faible dans l’ensemble.
|
||
Le système ne calcule donc pas une partie des indicateurs pour eux.
|
||
§ components.notifications.save: Modifications enregistrées
|
||
§ components.confirm.title: Voulez-vous vraiment le supprimer ?
|
||
§ components.confirm.yes: Oui, je confirme.
|
||
§ components.confirm.no: Annuler
|
||
§ components.search.placeholder: Saisissez le texte à rechercher
|
||
§ components.search.select.author: L’employé n’a pas d’importance
|
||
§ components.search.select.taskCode: Le département n’a pas d’importance
|
||
§ components.search.select.company: Le sous-traitant n’a pas d’importance
|
||
§ components.search.select.type: Le type n’a pas d’importance
|
||
§ components.search.select.scope: La fonctionnalité n’a pas d’importance
|
||
§ components.search.example: Par exemple :
|
||
§ components.recommendations.title: Recommandations et faits
|
||
§ components.recommendations.cancel: Fermer
|
||
§ components.recommendations.open: Détails
|
||
§ components.translation.tooltip.list: Traductions
|
||
§ components.translation.modal.title: Tableau des modifications de traduction
|
||
§ components.translation.modal.key: ID
|
||
§ components.translation.modal.value: Nouvelle traduction
|
||
§ components.translation.modal.export: Exporter
|
||
§ components.translation.modal.cancel: Annuler
|
||
§ common.title: Git statistique
|
||
§ common.filters: Filtres
|
||
§ common.fileLoader.notification: Cant open file {file}
|
||
§ common.statistic.days: jours
|
||
§ common.statistic.tasks: tâches
|
||
§ common.statistic.Tasks: Tâches
|
||
§ common.statistic.commits: commits
|
||
§ common.statistic.employees: employés
|
||
§ common.statistic.Date: Date
|
||
§ common.statistic.work: en poste
|
||
§ common.statistic.dismissed: parti
|
||
§ common.statistic.staff: assistant
|
||
`,`
|
||
§ sidebar.switch.team: Équipe
|
||
§ sidebar.switch.person: Employé
|
||
§ sidebar.buttons.share: Share
|
||
§ sidebar.buttons.logout: Logout
|
||
§ sidebar.buttons.logoutQuestion: Are you sure you want to clear data-set?
|
||
§ sidebar.filters.all: à toute heure
|
||
§ sidebar.filters.year: année
|
||
§ sidebar.filters.halfYear: demi-année
|
||
§ sidebar.filters.month: mois
|
||
§ sidebar.filters.week: semaine
|
||
§ sidebar.team.recommendations: Recommendations
|
||
§ sidebar.person.week: Par semaine
|
||
§ sidebar.person.commits: Tous les commits
|
||
§ sidebar.person.changes: Tous les changements
|
||
`,`
|
||
§ recommendations.modal.cancel: Ok
|
||
§ recommendations.modal.open: More
|
||
§ recommendations.title
|
||
Recommendations and facts
|
||
`,`
|
||
§ page.welcome.step1: Exécutez la commande à la racine de votre projet
|
||
§ page.welcome.step3: transférer
|
||
§ page.welcome.step4: fichier log.txt sur cette page
|
||
§ page.welcome.description: Git créer un fichier log.txt. Il contient les données pour générer le rapport. Exécutez la commande git shortlog -s -n -e si vous n'avez pas besoin du rapport. Créer un fichier [.mailmap|https://git-scm.com/docs/gitmailmap] à la racine du projet est de combiner les statistiques sur les employés.
|
||
§ page.welcome.warning1: Le service ne STOCKE ni ne TRANSMET vos données. Tous les calculs sont effectués sur votre ordinateur.
|
||
§ page.welcome.warning2: Le service ne COLLECTE pas de STATISTIQUES sur les projets. Vous pouvez regarder [code source|https://github.com/bakhirev/assayo].
|
||
§ page.common.words.title: Statistiques par mots
|
||
§ page.common.words.description: le mot le plus populaire. Rencontre {count} fois.
|
||
§ page.common.commits.title: Nombre de commits par jour
|
||
§ page.common.commits.description: ({day}) le jour le plus productif par le nombre de commits.
|
||
§ page.common.commits.title2: {date} commits faits: {commits}
|
||
§ page.common.filter.allUsers: Pas d'importance
|
||
§ page.print.tableOfContents: Table des matières
|
||
§ page.team.author.days.half: half year
|
||
§ page.team.author.days.one: year
|
||
§ page.team.author.days.15: year and a half
|
||
§ page.team.author.days.two: two years
|
||
§ page.team.author.days.more: more than two years
|
||
§ plugin.team_month.filters.release: Releases
|
||
§ plugin.team_month.filters.absence: Vacations and relocations
|
||
§ plugin.team_month.filters.firstLastDays: First and last days
|
||
§ plugin.team_month.filters.authors: All employees
|
||
§ plugin.team_month.filters.types: All types
|
||
§ plugin.team_month.title: Calendrier du projet
|
||
§ plugin.team_month.travel: (changed time zone)
|
||
§ plugin.team_month.vacation.first: (goes on vacation)
|
||
§ plugin.team_month.vacation.last: (returned from vacation)
|
||
§ plugin.team_month.work.first: (first work day)
|
||
§ plugin.team_month.work.last: (last work day)
|
||
§ page.team.tree.filters.author: Employé
|
||
§ page.team.day.commits: Commits
|
||
§ page.team.day.activity: Activity
|
||
§ page.team.recommendations.alert: Warning
|
||
§ page.team.recommendations.warning: Pay attention
|
||
§ page.team.recommendations.fact: Facts about the project
|
||
§ page.team.recommendations.info: General tips
|
||
§ page.person.total.daysWorked.title: jours de travail
|
||
§ page.person.total.daysWorked.description: Seuls les jours où les commits ont été effectués sont pris en compte
|
||
§ page.person.total.tasks.title: tâches
|
||
§ page.person.total.tasks.description: Si les commits sont correctement signés
|
||
§ page.person.scoring.toolbar: The position according to this metric, relative to others. Two employees can take the same position if the values matches. Therefore, the total number of positions may be less than the number of employees.
|
||
§ page.person.achievement.title: Les progrès
|
||
§ page.person.week.date: Date
|
||
§ page.person.week.tasks: Nombre de tâches
|
||
§ page.person.week.workDays: Jours avec commits
|
||
§ page.person.week.taskInDay: Tâches par jour
|
||
§ page.person.week.days: jours
|
||
§ page.person.week.workDay: jours ouvrés
|
||
§ page.person.week.weekends: week-ends
|
||
§ page.sponsor.title: Please, support this project
|
||
§ page.sponsor.share.description: Tell about our [project|https://github.com/bakhirev/assayo] on social networks! You can share [article|https://habr.com/ru/articles/852782/], [post|https://www.reddit.com/r/ITManagers/comments/1e5k291/the_visualization_and_analysis_of_git_commit/] or [video|https://www.youtube.com/watch?v=jwCp_-bhrCQ].
|
||
§ page.sponsor.share.button: Copy the link
|
||
`].join(""),pD=[`
|
||
§ components.console.button: העתקה
|
||
§ components.console.notification: הטקסט הועתק
|
||
§ components.dataLoader.page: עמוד
|
||
§ components.dataLoader.size: מוצג
|
||
§ components.dataLoader.rows: שורות (סה״כ {count}).
|
||
§ components.dataLoader.from: מתוך
|
||
§ components.dataLoader.all: הצג הכול
|
||
§ components.hoursChart.work: שעות עבודה רגילות (ימי חול, 07:00 עד 20:00)
|
||
§ components.hoursChart.weekend: סופי שבוע או זמן לפני שעות העבודה ואחריהן
|
||
§ components.hoursChart.days: המספר הכולל של commits ביום ובשעה מסוימים
|
||
§ components.page.remove: הסרה
|
||
§ components.nothingFound.common.title: אין נתונים או שאין די נתונים להצגה
|
||
§ components.nothingFound.common.console: מספר_משימה סוג(תכונה): תיאור
|
||
§ components.nothingFound.common.example: לדוגמה:
|
||
§ components.nothingFound.staff.title: אין נתונים לעובד זה
|
||
§ components.nothingFound.staff.description
|
||
אדם זה לא יצר commit בכל יום עבודה וקיבל את הסטטוס «עוזר».
|
||
ניתן להתעלם מעבודת עובדים בסטטוס זה בפרויקט זה, כי תרומתם קטנה ביחס לשאר הצוות.
|
||
לכן המערכת אינה מחשבת עבורם מספר מדדים.
|
||
§ components.notifications.save: השינויים נשמרו
|
||
§ components.confirm.title: האם אתה בטוח שברצונך למחוק?
|
||
§ components.confirm.yes: כן, אני בטוח.
|
||
§ components.confirm.no: ביטול
|
||
§ components.search.placeholder: הזן טקסט לחיפוש
|
||
§ components.search.select.author: העובד אינו משנה
|
||
§ components.search.select.taskCode: המחלקה אינה משנה
|
||
§ components.search.select.company: קבלן המשנה אינו משנה
|
||
§ components.search.select.type: הסוג אינו משנה
|
||
§ components.search.select.scope: התכונה אינה משנה
|
||
§ components.search.example: לדוגמה:
|
||
§ components.recommendations.title: המלצות ועובדות
|
||
§ components.recommendations.cancel: סגירה
|
||
§ components.recommendations.open: פרטים
|
||
§ components.translation.tooltip.list: תרגומים
|
||
§ components.translation.modal.title: טבלת שינויים בתרגום
|
||
§ components.translation.modal.key: ID
|
||
§ components.translation.modal.value: תרגום חדש
|
||
§ components.translation.modal.export: ייצוא
|
||
§ components.translation.modal.cancel: ביטול
|
||
§ common.title: סטטיסטיקת Git
|
||
§ common.filters: מסננים
|
||
§ common.fileLoader.notification: לא ניתן לפתוח את הקובץ {file}
|
||
§ common.statistic.days: ימים
|
||
§ common.statistic.tasks: משימות
|
||
§ common.statistic.Tasks: משימות
|
||
§ common.statistic.commits: commits
|
||
§ common.statistic.employees: עובדים
|
||
§ common.statistic.Date: תאריך
|
||
§ common.statistic.work: עובד
|
||
§ common.statistic.dismissed: עזב
|
||
§ common.statistic.staff: עוזר
|
||
`,`
|
||
§ sidebar.switch.team: צוות
|
||
§ sidebar.switch.person: עובד
|
||
§ sidebar.buttons.share: שיתוף
|
||
§ sidebar.buttons.logout: יציאה
|
||
§ sidebar.buttons.logoutQuestion: האם אתה בטוח שברצונך לנקות את מערך הנתונים?
|
||
§ sidebar.filters.all: כל הזמן
|
||
§ sidebar.filters.year: שנה
|
||
§ sidebar.filters.halfYear: חצי שנה
|
||
§ sidebar.filters.month: חודש
|
||
§ sidebar.filters.week: שבוע
|
||
§ sidebar.team.recommendations: המלצות
|
||
§ sidebar.person.week: לפי שבוע
|
||
§ sidebar.person.commits: כל ה-commits
|
||
§ sidebar.person.changes: כל השינויים
|
||
`,`
|
||
§ recommendations.modal.cancel: בסדר
|
||
§ recommendations.modal.open: עוד
|
||
§ recommendations.title
|
||
המלצות ועובדות
|
||
`,`
|
||
§ page.welcome.step1: בצע את הפקודה בשורש הפרויקט.
|
||
§ page.welcome.step3: גרור ושחרר
|
||
§ page.welcome.step4: את הקובץ log.txt לעמוד זה.
|
||
§ page.welcome.description: Git ייצור קובץ log.txt. הוא מכיל נתונים להפקת הדוח. או השתמש ב-git shortlog -s -n -e אם אינך זקוק לדוח. צור קובץ [.mailmap|https://git-scm.com/docs/gitmailmap] בשורש הפרויקט כדי לאחד את סטטיסטיקת העובדים.
|
||
§ page.welcome.warning1: השירות *אינו שומר* ו*אינו מעביר* את הנתונים שלך. כל החישובים מתבצעים באופן מקומי בדפדפן במחשב שלך.
|
||
§ page.welcome.warning2: השירות *אינו אוסף סטטיסטיקה* על פרויקטים. ניתן לנתק את האינטרנט, לבדוק את התעבורה ואף לבנות גרסה מקומית מ[קוד המקור|https://github.com/bakhirev/assayo].
|
||
§ page.common.words.title: סטטיסטיקת מילים.
|
||
§ page.common.words.description: המילה הנפוצה ביותר. מופיעה {count} פעמים.
|
||
§ page.common.commits.title: מספר ה-commits לפי ימים.
|
||
§ page.common.commits.description: ({day}) היום הפורה ביותר מבחינת מספר ה-commits.
|
||
§ page.common.commits.title2: {date} commits שנוצרו: {commits}
|
||
§ page.common.filter.allUsers: אינו משנה
|
||
§ page.print.tableOfContents: תוכן עניינים
|
||
§ page.team.author.days.half: חצי שנה
|
||
§ page.team.author.days.one: שנה
|
||
§ page.team.author.days.15: שנה וחצי
|
||
§ page.team.author.days.two: שנתיים
|
||
§ page.team.author.days.more: יותר משנתיים
|
||
§ plugin.team_month.filters.release: גרסאות
|
||
§ plugin.team_month.filters.absence: חופשות ומעברי מיקום
|
||
§ plugin.team_month.filters.firstLastDays: הימים הראשונים והאחרונים
|
||
§ plugin.team_month.filters.authors: כל העובדים
|
||
§ plugin.team_month.filters.types: כל הסוגים
|
||
§ plugin.team_month.title: לוח עבודה בפרויקט
|
||
§ plugin.team_month.travel: (שינה אזור זמן)
|
||
§ plugin.team_month.vacation.first: (יוצא לחופשה)
|
||
§ plugin.team_month.vacation.last: (חזר מחופשה)
|
||
§ plugin.team_month.work.first: (יום העבודה הראשון)
|
||
§ plugin.team_month.work.last: (יום העבודה האחרון)
|
||
§ page.team.tree.filters.author: עובד
|
||
§ page.team.day.commits: Commits
|
||
§ page.team.day.activity: פעילות
|
||
§ page.team.recommendations.alert: אזהרה
|
||
§ page.team.recommendations.warning: שים לב
|
||
§ page.team.recommendations.fact: עובדות על הפרויקט
|
||
§ page.team.recommendations.info: עצות כלליות
|
||
§ page.person.total.daysWorked.title: ימי עבודה
|
||
§ page.person.total.daysWorked.description: נספרים רק ימים שבהם היו commits
|
||
§ page.person.total.tasks.title: משימות
|
||
§ page.person.total.tasks.description: אם ה-commits חתומים כראוי
|
||
§ page.person.scoring.toolbar: המיקום לפי מדד זה ביחס לאחרים. שני עובדים יכולים לתפוס את אותו מיקום אם הערכים זהים. לכן מספר המיקומים הכולל עשוי להיות קטן ממספר העובדים.
|
||
§ page.person.achievement.title: הישגים
|
||
§ page.person.week.date: תאריך
|
||
§ page.person.week.tasks: מספר המשימות
|
||
§ page.person.week.workDays: ימים עם commits
|
||
§ page.person.week.taskInDay: משימות ביום
|
||
§ page.person.week.days: ימים
|
||
§ page.person.week.workDay: ימי חול
|
||
§ page.person.week.weekends: סופי שבוע
|
||
§ page.sponsor.title: אנא תמכו בפרויקט זה
|
||
§ page.sponsor.share.description: ספרו על [הפרויקט|https://github.com/bakhirev/assayo] שלנו ברשתות החברתיות! ניתן לשתף [מאמר|https://habr.com/ru/articles/852782/], [פוסט|https://www.reddit.com/r/ITManagers/comments/1e5k291/the_visualization_and_analysis_of_git_commit/] או [סרטון|https://www.youtube.com/watch?v=jwCp_-bhrCQ].
|
||
§ page.sponsor.share.button: העתקת הקישור
|
||
`].join(""),dD=[`
|
||
§ components.console.button: कॉपी करें
|
||
§ components.console.notification: पाठ कॉपी हो गया
|
||
§ components.dataLoader.page: पृष्ठ
|
||
§ components.dataLoader.size: प्रदर्शित
|
||
§ components.dataLoader.rows: पंक्तियाँ (कुल {count}).
|
||
§ components.dataLoader.from: में से
|
||
§ components.dataLoader.all: सभी दिखाएँ
|
||
§ components.hoursChart.work: मानक कार्य समय (कार्यदिवस, 07:00 से 20:00)
|
||
§ components.hoursChart.weekend: सप्ताहांत या कार्य समय से पहले/बाद का समय
|
||
§ components.hoursChart.days: किसी निश्चित दिन और घंटे में commits की कुल संख्या
|
||
§ components.page.remove: हटाएँ
|
||
§ components.nothingFound.common.title: प्रदर्शित करने के लिए डेटा नहीं है या अपर्याप्त है
|
||
§ components.nothingFound.common.console: कार्य_संख्या प्रकार(फीचर): विवरण
|
||
§ components.nothingFound.common.example: उदाहरण:
|
||
§ components.nothingFound.staff.title: इस कर्मचारी का डेटा नहीं है
|
||
§ components.nothingFound.staff.description
|
||
इस व्यक्ति ने प्रत्येक कार्यदिवस commit नहीं किया और उसे «सहायक» स्थिति मिली।
|
||
इस स्थिति वाले कर्मचारियों का कार्य इस परियोजना में छोड़ा जा सकता है, क्योंकि टीम के बाकी हिस्से की तुलना में उनका योगदान छोटा है।
|
||
इसलिए सिस्टम उनके लिए कई मापदंडों की गणना नहीं करता।
|
||
§ components.notifications.save: परिवर्तन सहेज लिए गए हैं
|
||
§ components.confirm.title: क्या आप वाकई इसे हटाना चाहते हैं?
|
||
§ components.confirm.yes: हाँ, मैं निश्चित हूँ।
|
||
§ components.confirm.no: रद्द करें
|
||
§ components.search.placeholder: खोज के लिए पाठ दर्ज करें
|
||
§ components.search.select.author: कर्मचारी मायने नहीं रखता
|
||
§ components.search.select.taskCode: विभाग मायने नहीं रखता
|
||
§ components.search.select.company: उपठेकेदार मायने नहीं रखता
|
||
§ components.search.select.type: प्रकार मायने नहीं रखता
|
||
§ components.search.select.scope: फीचर मायने नहीं रखता
|
||
§ components.search.example: उदाहरण:
|
||
§ components.recommendations.title: अनुशंसाएँ और तथ्य
|
||
§ components.recommendations.cancel: बंद करें
|
||
§ components.recommendations.open: विवरण
|
||
§ components.translation.tooltip.list: अनुवाद
|
||
§ components.translation.modal.title: अनुवाद परिवर्तन तालिका
|
||
§ components.translation.modal.key: ID
|
||
§ components.translation.modal.value: नया अनुवाद
|
||
§ components.translation.modal.export: निर्यात
|
||
§ components.translation.modal.cancel: रद्द करें
|
||
§ common.title: Git आँकड़े
|
||
§ common.filters: फ़िल्टर
|
||
§ common.fileLoader.notification: फ़ाइल {file} नहीं खुल सकी
|
||
§ common.statistic.days: दिन
|
||
§ common.statistic.tasks: कार्य
|
||
§ common.statistic.Tasks: कार्य
|
||
§ common.statistic.commits: commits
|
||
§ common.statistic.employees: कर्मचारी
|
||
§ common.statistic.Date: दिनांक
|
||
§ common.statistic.work: कार्यरत
|
||
§ common.statistic.dismissed: छोड़ चुके
|
||
§ common.statistic.staff: सहायक
|
||
`,`
|
||
§ sidebar.switch.team: टीम
|
||
§ sidebar.switch.person: कर्मचारी
|
||
§ sidebar.buttons.share: साझा करें
|
||
§ sidebar.buttons.logout: लॉग आउट
|
||
§ sidebar.buttons.logoutQuestion: क्या आप वाकई डेटा-सेट साफ़ करना चाहते हैं?
|
||
§ sidebar.filters.all: पूरा समय
|
||
§ sidebar.filters.year: वर्ष
|
||
§ sidebar.filters.halfYear: आधा वर्ष
|
||
§ sidebar.filters.month: माह
|
||
§ sidebar.filters.week: सप्ताह
|
||
§ sidebar.team.recommendations: अनुशंसाएँ
|
||
§ sidebar.person.week: सप्ताह के अनुसार
|
||
§ sidebar.person.commits: सभी commits
|
||
§ sidebar.person.changes: सभी परिवर्तन
|
||
`,`
|
||
§ recommendations.modal.cancel: ठीक है
|
||
§ recommendations.modal.open: और
|
||
§ recommendations.title
|
||
अनुशंसाएँ और तथ्य
|
||
`,`
|
||
§ page.welcome.step1: अपने प्रोजेक्ट की जड़ में कमांड चलाएँ।
|
||
§ page.welcome.step3: खींचकर छोड़ें
|
||
§ page.welcome.step4: log.txt फ़ाइल को इस पृष्ठ पर।
|
||
§ page.welcome.description: Git एक log.txt फ़ाइल बनाएगा। इसमें रिपोर्ट बनाने का डेटा होता है। यदि रिपोर्ट की आवश्यकता नहीं है, तो git shortlog -s -n -e का उपयोग करें। कर्मचारियों के आँकड़े जोड़ने के लिए प्रोजेक्ट की जड़ में [.mailmap|https://git-scm.com/docs/gitmailmap] फ़ाइल बनाएँ।
|
||
§ page.welcome.warning1: सेवा आपका डेटा *सहेजती नहीं* और *स्थानांतरित नहीं करती*। सभी गणनाएँ आपके कंप्यूटर पर ब्राउज़र में स्थानीय रूप से होती हैं।
|
||
§ page.welcome.warning2: सेवा परियोजनाओं पर *आँकड़े एकत्र नहीं करती*। आप इंटरनेट काट सकते हैं, ट्रैफ़िक जाँच सकते हैं और [स्रोत|https://github.com/bakhirev/assayo] से स्थानीय संस्करण भी बना सकते हैं।
|
||
§ page.common.words.title: शब्द आँकड़े.
|
||
§ page.common.words.description: सबसे सामान्य शब्द। {count} बार आता है।
|
||
§ page.common.commits.title: दिनों के अनुसार commits की संख्या.
|
||
§ page.common.commits.description: ({day}) commits की संख्या के अनुसार सबसे उत्पादक दिन।
|
||
§ page.common.commits.title2: {date} बनाए गए commits: {commits}
|
||
§ page.common.filter.allUsers: मायने नहीं रखता
|
||
§ page.print.tableOfContents: विषय सूची
|
||
§ page.team.author.days.half: आधा वर्ष
|
||
§ page.team.author.days.one: वर्ष
|
||
§ page.team.author.days.15: डेढ़ वर्ष
|
||
§ page.team.author.days.two: दो वर्ष
|
||
§ page.team.author.days.more: दो वर्ष से अधिक
|
||
§ plugin.team_month.filters.release: रिलीज़
|
||
§ plugin.team_month.filters.absence: अवकाश और स्थान परिवर्तन
|
||
§ plugin.team_month.filters.firstLastDays: पहले और अंतिम दिन
|
||
§ plugin.team_month.filters.authors: सभी कर्मचारी
|
||
§ plugin.team_month.filters.types: सभी प्रकार
|
||
§ plugin.team_month.title: परियोजना कार्य कैलेंडर
|
||
§ plugin.team_month.travel: (समय क्षेत्र बदला)
|
||
§ plugin.team_month.vacation.first: (अवकाश पर जाता है)
|
||
§ plugin.team_month.vacation.last: (अवकाश से लौटा)
|
||
§ plugin.team_month.work.first: (पहला कार्यदिवस)
|
||
§ plugin.team_month.work.last: (अंतिम कार्यदिवस)
|
||
§ page.team.tree.filters.author: कर्मचारी
|
||
§ page.team.day.commits: Commits
|
||
§ page.team.day.activity: गतिविधि
|
||
§ page.team.recommendations.alert: चेतावनी
|
||
§ page.team.recommendations.warning: ध्यान दें
|
||
§ page.team.recommendations.fact: परियोजना के बारे में तथ्य
|
||
§ page.team.recommendations.info: सामान्य सुझाव
|
||
§ page.person.total.daysWorked.title: कार्य के दिन
|
||
§ page.person.total.daysWorked.description: केवल वे दिन गिने जाते हैं जिनमें commits थे
|
||
§ page.person.total.tasks.title: कार्य
|
||
§ page.person.total.tasks.description: यदि commits सही ढंग से हस्ताक्षरित हैं
|
||
§ page.person.scoring.toolbar: इस मापदंड पर अन्य लोगों के सापेक्ष स्थान। यदि मान समान हों तो दो कर्मचारी एक ही स्थान ले सकते हैं। इसलिए स्थानों की कुल संख्या कर्मचारियों की संख्या से कम हो सकती है।
|
||
§ page.person.achievement.title: उपलब्धियाँ
|
||
§ page.person.week.date: दिनांक
|
||
§ page.person.week.tasks: कार्यों की संख्या
|
||
§ page.person.week.workDays: commits वाले दिन
|
||
§ page.person.week.taskInDay: प्रति दिन कार्य
|
||
§ page.person.week.days: दिन
|
||
§ page.person.week.workDay: कार्यदिवस
|
||
§ page.person.week.weekends: सप्ताहांत
|
||
§ page.sponsor.title: कृपया इस परियोजना का समर्थन करें
|
||
§ page.sponsor.share.description: सोशल नेटवर्क पर हमारे [प्रोजेक्ट|https://github.com/bakhirev/assayo] के बारे में बताएँ! आप [लेख|https://habr.com/ru/articles/852782/], [पोस्ट|https://www.reddit.com/r/ITManagers/comments/1e5k291/the_visualization_and_analysis_of_git_commit/] या [वीडियो|https://www.youtube.com/watch?v=jwCp_-bhrCQ] साझा कर सकते हैं।
|
||
§ page.sponsor.share.button: लिंक कॉपी करें
|
||
`].join(""),gD=[`
|
||
§ components.console.button: コピー
|
||
§ components.console.notification: テキストがコピーされました
|
||
§ components.dataLoader.page: ページ
|
||
§ components.dataLoader.size: によって表示される
|
||
§ components.dataLoader.rows: 行(合計 {count})。
|
||
§ components.dataLoader.from: から
|
||
§ components.dataLoader.all: すべて表示
|
||
§ components.hoursChart.work: 標準労働時間 (平日,から07:00へ20:00)
|
||
§ components.hoursChart.weekend: 休業日または営業日前後の時間
|
||
§ components.hoursChart.days: 特定の日と時間における commit の合計
|
||
§ components.page.remove: 削除
|
||
§ components.nothingFound.common.title: 表示するデータがない、または不十分なデータがあります
|
||
§ components.nothingFound.common.console: Task_numberタイプ(モジュール): 説明
|
||
§ components.nothingFound.common.example: 例:
|
||
§ components.nothingFound.staff.title: この従業員のデータはありません
|
||
§ components.nothingFound.staff.description
|
||
この人は毎営業日に commit しておらず、「アシスタント」の状態になりました。
|
||
この状態の従業員の作業は、全体に対する貢献が小さいため、このプロジェクトでは無視できます。
|
||
そのため、システムは一部の指標を計算しません。
|
||
§ components.notifications.save: 変更は保存されました
|
||
§ components.confirm.title: 本当に削除しますか?
|
||
§ components.confirm.yes: はい、削除します。
|
||
§ components.confirm.no: キャンセル
|
||
§ components.search.placeholder: 検索するテキストを入力
|
||
§ components.search.select.author: 従業員は問わない
|
||
§ components.search.select.taskCode: 部門は問わない
|
||
§ components.search.select.company: 外注先は問わない
|
||
§ components.search.select.type: タイプは問わない
|
||
§ components.search.select.scope: 機能は問わない
|
||
§ components.search.example: 例:
|
||
§ components.recommendations.title: 推奨事項と事実
|
||
§ components.recommendations.cancel: 閉じる
|
||
§ components.recommendations.open: 詳細
|
||
§ components.translation.tooltip.list: 翻訳
|
||
§ components.translation.modal.title: 翻訳変更の表
|
||
§ components.translation.modal.key: ID
|
||
§ components.translation.modal.value: 新しい翻訳
|
||
§ components.translation.modal.export: エクスポート
|
||
§ components.translation.modal.cancel: キャンセル
|
||
§ common.title: Git 統計
|
||
§ common.filters: フィルター
|
||
§ common.fileLoader.notification: Cant open file {file}
|
||
§ common.statistic.days: 日
|
||
§ common.statistic.tasks: タスク
|
||
§ common.statistic.Tasks: タスク
|
||
§ common.statistic.commits: commits
|
||
§ common.statistic.employees: 従業員
|
||
§ common.statistic.Date: 日付
|
||
§ common.statistic.work: 在籍
|
||
§ common.statistic.dismissed: 退職
|
||
§ common.statistic.staff: アシスタント
|
||
`,`
|
||
§ sidebar.switch.team: チーム
|
||
§ sidebar.switch.person: 従業員
|
||
§ sidebar.buttons.share: Share
|
||
§ sidebar.buttons.logout: Logout
|
||
§ sidebar.buttons.logoutQuestion: Are you sure you want to clear data-set?
|
||
§ sidebar.filters.all: すべての時間
|
||
§ sidebar.filters.year: 年
|
||
§ sidebar.filters.halfYear: 半年
|
||
§ sidebar.filters.month: 月
|
||
§ sidebar.filters.week: 週間
|
||
§ sidebar.team.recommendations: Recommendations
|
||
§ sidebar.person.week: 週ごと
|
||
§ sidebar.person.commits: すべての commits
|
||
§ sidebar.person.changes: すべての変更
|
||
`,`
|
||
§ recommendations.modal.cancel: Ok
|
||
§ recommendations.modal.open: More
|
||
§ recommendations.title
|
||
Recommendations and facts
|
||
`,`
|
||
§ page.welcome.step1: Execute the command in the root of your project.
|
||
§ page.welcome.step3: Drag and drop
|
||
§ page.welcome.step4: the log.txt file onto this page.
|
||
§ page.welcome.description: Git will create a log.txt file. It contains data for report generation. Or use git shortlog -s -n -e if you don't need a report. Create a [.mailmap|https://git-scm.com/docs/gitmailmap] file in the root of the project to consolidate employee statistics.
|
||
§ page.welcome.warning1: The service *DOES NOT SAVE* and *DOES NOT TRANSFER* your data. All calculations are performed locally in your browser on your machine.
|
||
§ page.welcome.warning2: The service *DOES NOT COLLECT STATISTICS* on projects. You can disconnect the internet, check traffic, and even build a local version from the [source|https://github.com/bakhirev/assayo].
|
||
§ page.common.words.title: Word Statistics.
|
||
§ page.common.words.description: the most popular word. Occurs {count} times.
|
||
§ page.common.commits.title: Number of commits by days.
|
||
§ page.common.commits.description: ({day}) the most productive day in terms of the number of commits.
|
||
§ page.common.commits.title2: {date} commits made: {commits}
|
||
§ page.common.filter.allUsers: Does not matter
|
||
§ page.print.tableOfContents: Table of contents
|
||
§ page.team.author.days.half: half year
|
||
§ page.team.author.days.one: year
|
||
§ page.team.author.days.15: year and a half
|
||
§ page.team.author.days.two: two years
|
||
§ page.team.author.days.more: more than two years
|
||
§ plugin.team_month.filters.release: Releases
|
||
§ plugin.team_month.filters.absence: Vacations and relocations
|
||
§ plugin.team_month.filters.firstLastDays: First and last days
|
||
§ plugin.team_month.filters.authors: All employees
|
||
§ plugin.team_month.filters.types: All types
|
||
§ plugin.team_month.title: Project work calendar
|
||
§ plugin.team_month.travel: (changed time zone)
|
||
§ plugin.team_month.vacation.first: (goes on vacation)
|
||
§ plugin.team_month.vacation.last: (returned from vacation)
|
||
§ plugin.team_month.work.first: (first work day)
|
||
§ plugin.team_month.work.last: (last work day)
|
||
§ page.team.tree.filters.author: Employee
|
||
§ page.team.day.commits: Commits
|
||
§ page.team.day.activity: Activity
|
||
§ page.team.recommendations.alert: Warning
|
||
§ page.team.recommendations.warning: Pay attention
|
||
§ page.team.recommendations.fact: Facts about the project
|
||
§ page.team.recommendations.info: General tips
|
||
§ page.person.total.daysWorked.title: days of work
|
||
§ page.person.total.daysWorked.description: Only days with commits are counted
|
||
§ page.person.total.tasks.title: tasks
|
||
§ page.person.total.tasks.description: If commits are properly signed
|
||
§ page.person.scoring.toolbar: The position according to this metric, relative to others. Two employees can take the same position if the values matches. Therefore, the total number of positions may be less than the number of employees.
|
||
§ page.person.achievement.title: Achievements
|
||
§ page.person.week.date: 日付
|
||
§ page.person.week.tasks: タスク数
|
||
§ page.person.week.workDays: commits のある日
|
||
§ page.person.week.taskInDay: 1 日あたりのタスク
|
||
§ page.person.week.days: 日
|
||
§ page.person.week.workDay: 平日
|
||
§ page.person.week.weekends: 週末
|
||
§ page.sponsor.title: Please, support this project
|
||
§ page.sponsor.share.description: Tell about our [project|https://github.com/bakhirev/assayo] on social networks! You can share [article|https://habr.com/ru/articles/852782/], [post|https://www.reddit.com/r/ITManagers/comments/1e5k291/the_visualization_and_analysis_of_git_commit/] or [video|https://www.youtube.com/watch?v=jwCp_-bhrCQ].
|
||
§ page.sponsor.share.button: Copy the link
|
||
`].join(""),_D=[`
|
||
§ components.console.button: Copiar
|
||
§ components.console.notification: Texto copiado
|
||
§ components.dataLoader.page: Página
|
||
§ components.dataLoader.size: Exibido por
|
||
§ components.dataLoader.rows: linhas (total {count}).
|
||
§ components.dataLoader.from: de
|
||
§ components.dataLoader.all: Mostrar tudo
|
||
§ components.hoursChart.work: Tempo de trabalho padrão. (dias de semana, das 07: 00 às 20:00)
|
||
§ components.hoursChart.weekend: fins de semana ou tempo antes / depois do dia de trabalho
|
||
§ components.hoursChart.days: número total de commits em um determinado dia e hora
|
||
§ components.page.remove: Remover
|
||
§ components.nothingFound.common.title: Não há ou não há dados suficientes para exibir
|
||
§ components.nothingFound.common.console: Número da tarefa_tipo(módulo): explicação
|
||
§ components.nothingFound.common.example: Por exemplo:
|
||
§ components.nothingFound.staff.title: Não há dados para este funcionário
|
||
§ components.nothingFound.staff.description
|
||
Esta pessoa não fez commit em todos os dias úteis e recebeu o estado de «assistente».
|
||
O trabalho de funcionários com este estado pode ser ignorado neste projeto, porque o contributo é pequeno no conjunto.
|
||
Por isso, o sistema não calcula uma série de indicadores para eles.
|
||
§ components.notifications.save: Alterações salvas
|
||
§ components.confirm.title: Tem a certeza de que pretende remover?
|
||
§ components.confirm.yes: Sim, tenho a certeza.
|
||
§ components.confirm.no: Cancelar
|
||
§ components.search.placeholder: Introduza o texto para pesquisar
|
||
§ components.search.select.author: O colaborador não importa
|
||
§ components.search.select.taskCode: O departamento não importa
|
||
§ components.search.select.company: O subcontratado não importa
|
||
§ components.search.select.type: O tipo não importa
|
||
§ components.search.select.scope: A funcionalidade não importa
|
||
§ components.search.example: Por exemplo:
|
||
§ components.recommendations.title: Recomendações e factos
|
||
§ components.recommendations.cancel: Fechar
|
||
§ components.recommendations.open: Detalhes
|
||
§ components.translation.tooltip.list: Traduções
|
||
§ components.translation.modal.title: Tabela de alterações da tradução
|
||
§ components.translation.modal.key: ID
|
||
§ components.translation.modal.value: Nova tradução
|
||
§ components.translation.modal.export: Exportar
|
||
§ components.translation.modal.cancel: Cancelar
|
||
§ common.title: Git estatística
|
||
§ common.filters: Filtro
|
||
§ common.fileLoader.notification: Cant open file {file}
|
||
§ common.statistic.days: dias
|
||
§ common.statistic.tasks: tarefas
|
||
§ common.statistic.Tasks: Tarefas
|
||
§ common.statistic.commits: commits
|
||
§ common.statistic.employees: colaboradores
|
||
§ common.statistic.Date: Data
|
||
§ common.statistic.work: ativo
|
||
§ common.statistic.dismissed: desligado
|
||
§ common.statistic.staff: assistente
|
||
`,`
|
||
§ sidebar.switch.team: Comando
|
||
§ sidebar.switch.person: Funcionário
|
||
§ sidebar.buttons.share: Share
|
||
§ sidebar.buttons.logout: Logout
|
||
§ sidebar.buttons.logoutQuestion: Are you sure you want to clear data-set?
|
||
§ sidebar.filters.all: o tempo todo
|
||
§ sidebar.filters.year: ano
|
||
§ sidebar.filters.halfYear: meio ano
|
||
§ sidebar.filters.month: mês
|
||
§ sidebar.filters.week: semana
|
||
§ sidebar.team.recommendations: Recommendations
|
||
§ sidebar.person.week: Por semana
|
||
§ sidebar.person.commits: Todos os commits
|
||
§ sidebar.person.changes: Todas as alterações
|
||
`,`
|
||
§ recommendations.modal.cancel: Ok
|
||
§ recommendations.modal.open: More
|
||
§ recommendations.title
|
||
Recommendations and facts
|
||
`,`
|
||
§ page.welcome.step1: Execute the command in the root of your project.
|
||
§ page.welcome.step3: Drag and drop
|
||
§ page.welcome.step4: the log.txt file onto this page.
|
||
§ page.welcome.description: Git will create a log.txt file. It contains data for report generation. Or use git shortlog -s -n -e if you don't need a report. Create a [.mailmap|https://git-scm.com/docs/gitmailmap] file in the root of the project to consolidate employee statistics.
|
||
§ page.welcome.warning1: The service *DOES NOT SAVE* and *DOES NOT TRANSFER* your data. All calculations are performed locally in your browser on your machine.
|
||
§ page.welcome.warning2: The service *DOES NOT COLLECT STATISTICS* on projects. You can disconnect the internet, check traffic, and even build a local version from the [source|https://github.com/bakhirev/assayo].
|
||
§ page.common.words.title: Word Statistics.
|
||
§ page.common.words.description: the most popular word. Occurs {count} times.
|
||
§ page.common.commits.title: Number of commits by days.
|
||
§ page.common.commits.description: ({day}) the most productive day in terms of the number of commits.
|
||
§ page.common.commits.title2: {date} commits made: {commits}
|
||
§ page.common.filter.allUsers: Does not matter
|
||
§ page.print.tableOfContents: Table of contents
|
||
§ page.team.author.days.half: half year
|
||
§ page.team.author.days.one: year
|
||
§ page.team.author.days.15: year and a half
|
||
§ page.team.author.days.two: two years
|
||
§ page.team.author.days.more: more than two years
|
||
§ plugin.team_month.filters.release: Releases
|
||
§ plugin.team_month.filters.absence: Vacations and relocations
|
||
§ plugin.team_month.filters.firstLastDays: First and last days
|
||
§ plugin.team_month.filters.authors: All employees
|
||
§ plugin.team_month.filters.types: All types
|
||
§ plugin.team_month.title: Project work calendar
|
||
§ plugin.team_month.travel: (changed time zone)
|
||
§ plugin.team_month.vacation.first: (goes on vacation)
|
||
§ plugin.team_month.vacation.last: (returned from vacation)
|
||
§ plugin.team_month.work.first: (first work day)
|
||
§ plugin.team_month.work.last: (last work day)
|
||
§ page.team.tree.filters.author: Employee
|
||
§ page.team.day.commits: Commits
|
||
§ page.team.day.activity: Activity
|
||
§ page.team.recommendations.alert: Warning
|
||
§ page.team.recommendations.warning: Pay attention
|
||
§ page.team.recommendations.fact: Facts about the project
|
||
§ page.team.recommendations.info: General tips
|
||
§ page.person.total.daysWorked.title: days of work
|
||
§ page.person.total.daysWorked.description: Only days with commits are counted
|
||
§ page.person.total.tasks.title: tasks
|
||
§ page.person.total.tasks.description: If commits are properly signed
|
||
§ page.person.scoring.toolbar: The position according to this metric, relative to others. Two employees can take the same position if the values matches. Therefore, the total number of positions may be less than the number of employees.
|
||
§ page.person.achievement.title: Achievements
|
||
§ page.person.week.date: Data
|
||
§ page.person.week.tasks: Número de tarefas
|
||
§ page.person.week.workDays: Dias com commits
|
||
§ page.person.week.taskInDay: Tarefas por dia
|
||
§ page.person.week.days: dias
|
||
§ page.person.week.workDay: dias úteis
|
||
§ page.person.week.weekends: fins de semana
|
||
§ page.sponsor.title: Please, support this project
|
||
§ page.sponsor.share.description: Tell about our [project|https://github.com/bakhirev/assayo] on social networks! You can share [article|https://habr.com/ru/articles/852782/], [post|https://www.reddit.com/r/ITManagers/comments/1e5k291/the_visualization_and_analysis_of_git_commit/] or [video|https://www.youtube.com/watch?v=jwCp_-bhrCQ].
|
||
§ page.sponsor.share.button: Copy the link
|
||
`].join(""),hD=[`
|
||
§ common.title: Git статистика
|
||
§ common.filters: Фильтры
|
||
§ common.fileLoader.notification: Ошибка загрузки файла {file}
|
||
§ common.statistic.days: дней
|
||
§ common.statistic.tasks: задач
|
||
§ common.statistic.Tasks: Задач
|
||
§ common.statistic.commits: коммитов
|
||
§ common.statistic.employees: сотрудников
|
||
§ common.statistic.Date: Дата
|
||
§ common.statistic.work: работает
|
||
§ common.statistic.dismissed: уволен
|
||
§ common.statistic.staff: помощник
|
||
`,`
|
||
§ components.console.button: Копировать
|
||
§ components.console.notification: Текст скопирован
|
||
§ components.dataLoader.page: Страница
|
||
§ components.dataLoader.size: Отображается по
|
||
§ components.dataLoader.rows: строк (всего {count}).
|
||
§ components.dataLoader.from: из
|
||
§ components.dataLoader.all: Показать все
|
||
§ components.hoursChart.work: стандартное рабочее время (будни, с 07:00 до 20:00)
|
||
§ components.hoursChart.weekend: выходные дни или время до/после рабочего дня
|
||
§ components.hoursChart.days: суммарное количество коммитов за все время в конкретный день и час
|
||
§ components.nothingFound.common.title: Нет или недостаточно данных для отображения
|
||
§ components.nothingFound.common.console: Номер_задачи тип(фича): пояснение
|
||
§ components.nothingFound.common.example: Например:
|
||
§ components.nothingFound.staff.title: Нет данных для этого сотрудника
|
||
§ components.nothingFound.staff.description
|
||
Он вносил правки не каждый рабочий день и получил статус «Помощник».
|
||
Работой сотрудников с таким статусом по данному проекту можно пренебречь, т.к. его вклад на общем фоне незначителен.
|
||
Поэтому система не рассчитывает для него ряд показателей.
|
||
§ components.notifications.save: Изменения сохранены
|
||
§ components.confirm.title: Вы уверены что хотите удалить?
|
||
§ components.confirm.yes: Да, уверен
|
||
§ components.confirm.no: Отмена
|
||
§ components.search.placeholder: Введите текст для поиска
|
||
§ components.search.select.author: Сотрудник не имеет значения
|
||
§ components.search.select.taskCode: Отдел не имеет значения
|
||
§ components.search.select.company: Субподрядчик не имеет значения
|
||
§ components.search.select.type: Тип не имеет значения
|
||
§ components.search.select.scope: Фича не имеет значения
|
||
§ components.search.example: Например:
|
||
§ components.recommendations.title: Рекомендации и факты
|
||
§ components.recommendations.cancel: Закрыть
|
||
§ components.recommendations.open: Подробнее
|
||
§ components.translation.tooltip.list: Переводы
|
||
§ components.translation.modal.title: Таблица изменений в переводе
|
||
§ components.translation.modal.key: ID
|
||
§ components.translation.modal.value: Новый перевод
|
||
§ components.translation.modal.export: Экспорт
|
||
§ components.translation.modal.cancel: Отмена
|
||
§ plugin.team_month.travel: (изменил местоположение)
|
||
§ plugin.team_month.vacation.first: (уходит в отпуск)
|
||
§ plugin.team_month.vacation.last: (вернулся из отпуска)
|
||
§ plugin.team_month.work.first: (первый рабочий день)
|
||
§ plugin.team_month.work.last: (последний рабочий день)
|
||
§ page.team.day.commits: Коммиты
|
||
§ page.team.day.activity: Активность
|
||
§ page.person.scoring.toolbar: Позиция по этой метрике, относительно других. Два сотрудника могут занять одно место, если значение совпало. Поэтому, общее число мест может быть меньше, чем количество сотрудников.
|
||
`,`
|
||
§ sidebar.switch.team: Команда
|
||
§ sidebar.switch.person: Сотрудник
|
||
§ sidebar.buttons.share: Расшарить
|
||
§ sidebar.buttons.logout: Выйти
|
||
§ sidebar.buttons.logoutQuestion: Вы уверены что хотите выйти?
|
||
§ sidebar.filters.all: всё время
|
||
§ sidebar.filters.year: год
|
||
§ sidebar.filters.halfYear: пол года
|
||
§ sidebar.filters.month: месяц
|
||
§ sidebar.filters.week: неделя
|
||
§ sidebar.person.week: По неделям
|
||
`,`
|
||
§ page.welcome.step1: Выполните команду в корне вашего проекта
|
||
§ page.welcome.step3: Перетащите
|
||
§ page.welcome.step4: файл log.txt на эту страницу
|
||
§ page.welcome.description: Git создаст файл log.txt. Он содержит данные для построения отчёта. Или git shortlog -s -n -e если отчёт вам не нужен. Создайте файл [.mailmap|https://git-scm.com/docs/gitmailmap] в корне проекта, чтобы объединить статистику по сотрудникам.
|
||
§ page.welcome.warning1: Сервис *НЕ ХРАНИТ* и *НЕ ПЕРЕДАЁТ* ваши данные. Все расчёты выполняются локально в вашем браузере прямо на вашей машине.
|
||
§ page.welcome.warning2: Сервис *НЕ СОБИРАЕТ СТАТИСТИКУ* по проектам. Вы можете отключить интернет, проверить трафик и даже собрать локальный билд из [исходников|https://github.com/bakhirev/assayo].
|
||
§ page.team.author.days.half: пол года
|
||
§ page.team.author.days.one: год
|
||
§ page.team.author.days.15: полтора
|
||
§ page.team.author.days.two: два года
|
||
§ page.team.author.days.more: больше двух лет
|
||
§ plugin.team_month.filters.release: Релизы
|
||
§ plugin.team_month.filters.absence: Отпуска и переезды
|
||
§ plugin.team_month.filters.firstLastDays: Первый и последний день
|
||
§ plugin.team_month.filters.authors: Все сотрудники
|
||
§ plugin.team_month.filters.types: Все типы
|
||
§ plugin.team_month.title: Календарь работы по проекту
|
||
§ page.team.tree.filters.author: Сотрудник
|
||
§ page.person.total.daysWorked.title: дней работы
|
||
§ page.person.total.daysWorked.description: Учтены только дни, в которые делались коммиты
|
||
§ page.person.total.tasks.title: задач
|
||
§ page.person.total.tasks.description: Если коммиты правильно подписаны
|
||
§ page.person.achievement.title: Достижения
|
||
§ page.person.week.date: Дата
|
||
§ page.person.week.tasks: Количество задач
|
||
§ page.person.week.workDays: Дни с коммитами
|
||
§ page.person.week.taskInDay: Задач в день
|
||
§ page.person.week.days: дней
|
||
§ page.person.week.workDay: будни
|
||
§ page.person.week.weekends: выходные
|
||
§ page.sponsor.title: Поддержите проект
|
||
§ page.sponsor.share.description: Расскажите о нашем [проекте|https://github.com/bakhirev/assayo] в соцсетях! Можно поделиться [статьей|https://habr.com/ru/articles/852782/], [постом|https://www.reddit.com/r/ITManagers/comments/1e5k291/the_visualization_and_analysis_of_git_commit/] или [видео|https://www.youtube.com/watch?v=jwCp_-bhrCQ].
|
||
§ page.sponsor.share.button: Копировать ссылку
|
||
`].join(""),fD=[`
|
||
§ components.console.button: 복사
|
||
§ components.console.notification: 텍스트가 복사되었습니다
|
||
§ components.dataLoader.page: 페이지
|
||
§ components.dataLoader.size: 에 의해 표시
|
||
§ components.dataLoader.rows: 행(총 {count}).
|
||
§ components.dataLoader.from: 에서
|
||
§ components.dataLoader.all: 모두 보기
|
||
§ components.hoursChart.work: 표준 근무 시간(평일 07:00~20:00)
|
||
§ components.hoursChart.weekend: 근무일 전/후 주말 또는 시간
|
||
§ components.hoursChart.days: 특정 요일 및 시간의 모든 시간에 대한 총 commit 수
|
||
§ components.page.remove: 제거
|
||
§ components.nothingFound.common.title: 표시 할 데이터가 없거나 부족합니다
|
||
§ components.nothingFound.common.console: 작업 번호 유형(기능):설명
|
||
§ components.nothingFound.common.example: 예를 들어:
|
||
§ components.nothingFound.staff.title: 이 직원에 대한 데이터가 없습니다
|
||
§ components.nothingFound.staff.description
|
||
이 사람은 모든 근무일에 commit하지 않아 '어시스턴트' 상태가 되었습니다.
|
||
이 상태의 직원 작업은 전체에서 기여가 작기 때문에 이 프로젝트에서 제외할 수 있습니다.
|
||
따라서 시스템은 일부 지표를 계산하지 않습니다.
|
||
§ components.notifications.save: 변경 사항이 저장되었습니다
|
||
§ components.confirm.title: 정말 삭제하시겠습니까?
|
||
§ components.confirm.yes: 예, 삭제합니다.
|
||
§ components.confirm.no: 취소
|
||
§ components.search.placeholder: 검색할 텍스트를 입력하세요
|
||
§ components.search.select.author: 직원은 상관없음
|
||
§ components.search.select.taskCode: 부서는 상관없음
|
||
§ components.search.select.company: 하도급업체는 상관없음
|
||
§ components.search.select.type: 유형은 상관없음
|
||
§ components.search.select.scope: 기능은 상관없음
|
||
§ components.search.example: 예를 들어:
|
||
§ components.recommendations.title: 권장 사항 및 사실
|
||
§ components.recommendations.cancel: 닫기
|
||
§ components.recommendations.open: 자세히
|
||
§ components.translation.tooltip.list: 번역
|
||
§ components.translation.modal.title: 번역 변경 표
|
||
§ components.translation.modal.key: ID
|
||
§ components.translation.modal.value: 새 번역
|
||
§ components.translation.modal.export: 내보내기
|
||
§ components.translation.modal.cancel: 취소
|
||
§ common.title: 힘내 통계
|
||
§ common.filters: 필터
|
||
§ common.fileLoader.notification: 파일 업로드 오류{file}
|
||
§ common.statistic.days: 일
|
||
§ common.statistic.tasks: 작업
|
||
§ common.statistic.Tasks: 작업
|
||
§ common.statistic.commits: commits
|
||
§ common.statistic.employees: 직원
|
||
§ common.statistic.Date: 날짜
|
||
§ common.statistic.work: 재직
|
||
§ common.statistic.dismissed: 퇴사
|
||
§ common.statistic.staff: 어시스턴트
|
||
`,`
|
||
§ sidebar.switch.team: 팀
|
||
§ sidebar.switch.person: 직원
|
||
§ sidebar.buttons.share: 그것을 공유
|
||
§ sidebar.buttons.logout: 나가
|
||
§ sidebar.buttons.logoutQuestion: Are you sure you want to clear data-set?
|
||
§ sidebar.filters.all: 항상
|
||
§ sidebar.filters.year: 년
|
||
§ sidebar.filters.halfYear: 반년
|
||
§ sidebar.filters.month: 월
|
||
§ sidebar.filters.week: 주
|
||
§ sidebar.team.recommendations: 권장 사항 및 사실
|
||
§ sidebar.person.week: 주별
|
||
§ sidebar.person.commits: 모든 commits
|
||
§ sidebar.person.changes: 모든 변경 사항
|
||
`,`
|
||
§ recommendations.modal.cancel: 닫기
|
||
§ recommendations.modal.open: 더 상세한
|
||
§ recommendations.title
|
||
권장 사항 및 사실
|
||
`,`
|
||
§ page.welcome.step1: 프로젝트 루트에서 명령을 실행합니다
|
||
§ page.welcome.step3: 드래그
|
||
§ page.welcome.step4: 그리고 파일 로그를 삭제합니다.이 페이지로
|
||
§ page.welcome.description: 힘내는 파일 로그를 만들 것입니다.- 네 여기에는 보고서 작성을 위한 데이터가 포함되어 있습니다. 또는 보고서가 필요하지 않은 경우 짧은 로그가 필요합니다. 직원 통계를 결합하기 위해 프로젝트의 루트에[.메일 맵|<url>/문서/자식 메일 맵]파일을 만듭니다.
|
||
§ page.welcome.warning1: 서비스*저장하지 않습니다*및*전송하지 않습니다*귀하의 데이터. 모든 계산은 컴퓨터에 바로 브라우저에서 로컬로 수행됩니다.
|
||
§ page.welcome.warning2: 서비스*는 프로젝트에 대한 통계*를 수집하지 않습니다. 인터넷을 끄고 트래픽을 확인하고 로컬 빌드를 구축 할 수도 있습니다.
|
||
§ page.common.words.title: 단어에 대한 통계
|
||
§ page.common.words.description: 가장 인기있는 단어입니다. 그것은 발생{count} 시대.
|
||
§ page.common.commits.title: 일별 커밋 수
|
||
§ page.common.commits.description: ({day})커밋 수에 따라 가장 생산적인 날.
|
||
§ page.common.commits.title2: {date} 커밋:{commits}
|
||
§ page.common.filter.allUsers: 그것은 중요하지 않습니다
|
||
§ page.print.tableOfContents: 내용 표
|
||
§ page.team.author.days.half: 반 년
|
||
§ page.team.author.days.one: 1 년
|
||
§ page.team.author.days.15: 한 반
|
||
§ page.team.author.days.two: 2 년
|
||
§ page.team.author.days.more: more than two years
|
||
§ plugin.team_month.title: 프로젝트 작업 일정
|
||
§ page.team.tree.filters.author: 직원
|
||
§ page.team.day.commits: 커밋
|
||
§ page.team.day.activity: 활동
|
||
§ page.team.recommendations.alert: Warning
|
||
§ page.team.recommendations.warning: Pay attention
|
||
§ page.team.recommendations.fact: Facts about the project
|
||
§ page.team.recommendations.info: General tips
|
||
§ page.person.total.daysWorked.title: 작업 일의
|
||
§ page.person.total.daysWorked.description: 만 커밋하는 일
|
||
§ page.person.total.tasks.title: 고려되었다
|
||
§ page.person.total.tasks.description: 커밋이 올바르게 서명 된 경우
|
||
§ page.person.scoring.toolbar: 이 메트릭에 따른 위치,다른 메트릭에 대한 상대. 값이 동일한 경우 두 명의 직원이 한 자리를 차지할 수 있습니다. 따라서 총 장소 수는 직원 수보다 적을 수 있습니다.
|
||
§ page.person.achievement.title: 진행
|
||
§ page.person.week.date: 날짜
|
||
§ page.person.week.tasks: 작업 수
|
||
§ page.person.week.workDays: commits가 있는 날
|
||
§ page.person.week.taskInDay: 일일 작업
|
||
§ page.person.week.days: 일
|
||
§ page.person.week.workDay: 평일
|
||
§ page.person.week.weekends: 주말
|
||
§ page.sponsor.title: 프로젝트 지원
|
||
§ page.sponsor.share.description: 소셜 네트워크에서 우리의[프로젝트|<url>/바키레프/아사요]에 대해 알려주세요! 이 응용 프로그램은 당신이 당신의 마음에 드는 사진을 공유 할 수 있습니다,당신은 당신의 마음에 드는 사진에 텍스트를 추가 할 수 있습니다,당신은 당신의 마음에 드는 사진에 텍스트를 추가 할 수 있습니다,당신은 당신의 마음에 드는 사진에 텍스트를 추가 할 수 있습니다,당신은 당신의 마음에 드는 사진에 텍스트를 추가 할 수 있습니다,당신은 사진에 텍스트를 추가 할 수 있습니다,당신은 사진에 텍스트를 추가 할 수 있습니다,당신은 사진에 텍스트를 추가 할 수 있습니다,당신은 사진에 텍스트를 추가 할 수 있습니다,당신은 사진에 텍스트를 추가 할 수 있습니다,당신은 사진에 텍스트를 추가 할 수 있습니다,당신은 사진에 텍스트를 추가 할 수 있습니다,당신은 사진에 텍스트를 추가 할 수 있습니다,당신은 사진에 텍스트를 추가 할 수 있습니다,당신은 사진에 텍스트를 추가 할 수 있습니다,당신은 사진에 텍스트를 추가 할 수 있습니다,당신은 사진에 텍스트를 추가 할 수 있습니다,당신은
|
||
§ page.sponsor.share.button: 링크 복사
|
||
`].join(""),yD=[`
|
||
§ components.console.button: 副本
|
||
§ components.console.notification: 文本已被复制
|
||
§ components.dataLoader.page: 页面
|
||
§ components.dataLoader.size: 显示的
|
||
§ components.dataLoader.rows: 行(共 {count})。
|
||
§ components.dataLoader.from: 从
|
||
§ components.dataLoader.all: 全部展示
|
||
§ components.hoursChart.work: 标准工作时间 (平日07:00~20:00)
|
||
§ components.hoursChart.weekend: 工作日之前/之后的休息日或时间
|
||
§ components.hoursChart.days: 特定日期和小时内所有时间的 commit 总数
|
||
§ components.page.remove: 移走
|
||
§ components.nothingFound.common.title: 没有或不足的数据显示
|
||
§ components.nothingFound.common.console: 发行编号类别(功能): 解释说明
|
||
§ components.nothingFound.common.example: 例如:
|
||
§ components.nothingFound.staff.title: 没有这个员工的数据
|
||
§ components.nothingFound.staff.description
|
||
此人并非每个工作日都有 commit,因此获得了“助理”状态。
|
||
此类员工对本项目的贡献相对整体较小,可以忽略。
|
||
因此系统不为他们计算部分指标。
|
||
§ components.notifications.save: 更改已保存
|
||
§ components.confirm.title: 确定要删除吗?
|
||
§ components.confirm.yes: 是的,我确定。
|
||
§ components.confirm.no: 取消
|
||
§ components.search.placeholder: 输入要搜索的文本
|
||
§ components.search.select.author: 员工不限
|
||
§ components.search.select.taskCode: 部门不限
|
||
§ components.search.select.company: 分包商不限
|
||
§ components.search.select.type: 类型不限
|
||
§ components.search.select.scope: 功能不限
|
||
§ components.search.example: 例如:
|
||
§ components.recommendations.title: 建议与事实
|
||
§ components.recommendations.cancel: 关闭
|
||
§ components.recommendations.open: 详情
|
||
§ components.translation.tooltip.list: 翻译
|
||
§ components.translation.modal.title: 翻译变更表
|
||
§ components.translation.modal.key: ID
|
||
§ components.translation.modal.value: 新翻译
|
||
§ components.translation.modal.export: 导出
|
||
§ components.translation.modal.cancel: 取消
|
||
§ common.title: Git 统计数字
|
||
§ common.filters: 过滤器
|
||
§ common.fileLoader.notification: Cant open file {file}
|
||
§ common.statistic.days: 天
|
||
§ common.statistic.tasks: 任务
|
||
§ common.statistic.Tasks: 任务
|
||
§ common.statistic.commits: commits
|
||
§ common.statistic.employees: 员工
|
||
§ common.statistic.Date: 日期
|
||
§ common.statistic.work: 在职
|
||
§ common.statistic.dismissed: 离职
|
||
§ common.statistic.staff: 助理
|
||
`,`
|
||
§ sidebar.switch.team: 专责小组
|
||
§ sidebar.switch.person: 雇员
|
||
§ sidebar.buttons.share: Share
|
||
§ sidebar.buttons.logout: Logout
|
||
§ sidebar.buttons.logoutQuestion: Are you sure you want to clear data-set?
|
||
§ sidebar.filters.all: 一直
|
||
§ sidebar.filters.year: 年份
|
||
§ sidebar.filters.halfYear: 半年
|
||
§ sidebar.filters.month: 月份
|
||
§ sidebar.filters.week: 周
|
||
§ sidebar.team.recommendations: Recommendations
|
||
§ sidebar.person.week: 按星期计算
|
||
§ sidebar.person.commits: 全部 commits
|
||
§ sidebar.person.changes: 所有更改
|
||
`,`
|
||
§ recommendations.modal.cancel: Ok
|
||
§ recommendations.modal.open: More
|
||
§ recommendations.title
|
||
Recommendations and facts
|
||
`,`
|
||
§ page.welcome.step1: 在项目的根目录运行命令
|
||
§ page.welcome.step3: 拖放
|
||
§ page.welcome.step4: log.txt 文件到本页
|
||
§ page.welcome.description: Git 创建文件 log.txt. 它包含用于构建报表的数据。 运行命令 git shortlog -s -n -e 如果你不需要报告。 创建文件 [.mailmap|https://git-scm.com/docs/gitmailmap] 在项目的根源,结合员工统计.
|
||
§ page.welcome.warning1: 该服务不会存储或传输您的数据。 所有计算都在您的计算机上执行.
|
||
§ page.welcome.warning2: 该服务不收集项目的统计数据。 你可以看 [源代码|https://github.com/bakhirev/assayo].
|
||
§ page.common.words.title: 词汇统计
|
||
§ page.common.words.description: 最流行的词。 发生{count}次.
|
||
§ page.common.commits.title: Количество Commits по дням
|
||
§ page.common.commits.description: ({day}) 拥有最多 Commits 数的工作日.
|
||
§ page.common.commits.title2: {date} 完成了 Commits: {commits}
|
||
§ page.common.filter.allUsers: 没关系
|
||
§ page.print.tableOfContents: 目录
|
||
§ page.team.author.days.half: half year
|
||
§ page.team.author.days.one: year
|
||
§ page.team.author.days.15: year and a half
|
||
§ page.team.author.days.two: two years
|
||
§ page.team.author.days.more: more than two years
|
||
§ plugin.team_month.filters.release: Releases
|
||
§ plugin.team_month.filters.absence: Vacations and relocations
|
||
§ plugin.team_month.filters.firstLastDays: First and last days
|
||
§ plugin.team_month.filters.authors: All employees
|
||
§ plugin.team_month.filters.types: All types
|
||
§ plugin.team_month.title: Project work calendar
|
||
§ plugin.team_month.travel: (changed time zone)
|
||
§ plugin.team_month.vacation.first: (goes on vacation)
|
||
§ plugin.team_month.vacation.last: (returned from vacation)
|
||
§ plugin.team_month.work.first: (first work day)
|
||
§ plugin.team_month.work.last: (last work day)
|
||
§ page.team.tree.filters.author: 雇员
|
||
§ page.team.day.commits: Commits
|
||
§ page.team.day.activity: Activity
|
||
§ page.team.recommendations.alert: Warning
|
||
§ page.team.recommendations.warning: Pay attention
|
||
§ page.team.recommendations.fact: Facts about the project
|
||
§ page.team.recommendations.info: General tips
|
||
§ page.person.total.daysWorked.title: 工作天
|
||
§ page.person.total.daysWorked.description: 只考虑制作它们的日子 Commits
|
||
§ page.person.total.tasks.title: 任务
|
||
§ page.person.total.tasks.description: 如果 Commits 正确签名
|
||
§ page.person.scoring.toolbar: The position according to this metric, relative to others. Two employees can take the same position if the values matches. Therefore, the total number of positions may be less than the number of employees.
|
||
§ page.person.achievement.title: 进展情况
|
||
§ page.person.week.date: 日期
|
||
§ page.person.week.tasks: 任务数量
|
||
§ page.person.week.workDays: 有 commits 的天数
|
||
§ page.person.week.taskInDay: 每天的任务
|
||
§ page.person.week.days: 天数
|
||
§ page.person.week.workDay: 平日
|
||
§ page.person.week.weekends: 周末
|
||
`].join(""),vD={ar:!0,de:!0,en:!0,es:!0,fr:!0,he:!0,hi:!0,ja:!0,ko:!0,pt:!0,ru:!0,zh:!0};function kD(){var e;const t=(e=navigator.languages)!=null&&e.length?navigator.languages:[navigator.language];for(let s=0;s<t.length;s++){const n=(t[s]||"").slice(0,2).toLowerCase();if(vD[n])return n}return"en"}const Kf=kD();function bD(t){Ee.language=t||localStorage.getItem("language")||Kf||"en",Ee.updateLangAttribute()}const ga="";function wD(t){return[t[0],t[t.length-1]]}function xD(t){const e=[];for(let s=0;s<t.length;s++){const n=t[s],r=t[s+1];if(!n)continue;const[u,c]=wD(n);if(n&&!r){if(u!==ga)continue;if(t[s+3]){e.push(`— ${n} ${t[s+2]} (${t[s+3]});`),s+=t[s+4]?4:3;continue}else{e.push(`— ${n} ${t[s+2]};`),s+=2;continue}}else if(n&&r){if(c==="%"){e.push(`— ${n} ${r};`),s+=2;continue}if(u===ga&&c===ga){e.push(`— ${n} ${r}`),s+=2;continue}if(u===ga){const p=new RegExp("(\\p{Ll})(\\p{Lu})","gu");e.push(`;${n.replace(p,"$1;$2")}`);continue}if(c===ga){e.push(`;${n.split(ga).filter(p=>p).join(";")} `);continue}}e.push(n)}return e}function CD(t){let e="";for(let s=0;s<t.length;s++){const n=t[s],r=t[s+1];if(r){if(n[0]!=="—"&&r[0]==="—"){e+=`
|
||
${n}:
|
||
`;continue}if(n[0]==="—"&&r[0]!=="—"){e+=`${n}
|
||
|
||
`;continue}}e+=`${n}
|
||
`}return e.replace(/\n{3,}/gm,`
|
||
|
||
`).replaceAll(ga,"")}function jD(t){const e=t.split(`
|
||
`),s=xD(e);return CD(s)}function Fe(t){for(var e=arguments.length,s=new Array(e>1?e-1:0),n=1;n<e;n++)s[n-1]=arguments[n];throw new Error(typeof t=="number"?"[MobX] minified error nr: "+t+(s.length?" "+s.map(String).join(","):"")+". Find the full error at: https://github.com/mobxjs/mobx/blob/main/packages/mobx/src/errors.ts":"[MobX] "+t)}var TD={};function gu(){return typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:TD}var Zf=Object.assign,_u=Object.getOwnPropertyDescriptor,hs=Object.defineProperty,hu=Object.prototype,pd=[];Object.freeze(pd);var Xf={};Object.freeze(Xf);var DD=typeof Proxy<"u",SD=Object.toString();function Jf(){DD||Fe("Proxy not available")}function ey(t){var e=!1;return function(){if(!e)return e=!0,t.apply(this,arguments)}}var bo=function(){};function ss(t){return typeof t=="function"}function Cn(t){var e=typeof t;switch(e){case"string":case"symbol":case"number":return!0}return!1}function fu(t){return t!==null&&typeof t=="object"}function xi(t){if(!fu(t))return!1;var e=Object.getPrototypeOf(t);if(e==null)return!0;var s=Object.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof s=="function"&&s.toString()===SD}function ty(t){var e=t==null?void 0:t.constructor;return e?e.name==="GeneratorFunction"||e.displayName==="GeneratorFunction":!1}function yu(t,e,s){hs(t,e,{enumerable:!1,writable:!0,configurable:!0,value:s})}function ay(t,e,s){hs(t,e,{enumerable:!1,writable:!1,configurable:!0,value:s})}function jn(t,e){var s="isMobX"+t;return e.prototype[s]=!0,function(n){return fu(n)&&n[s]===!0}}function wo(t){return t!=null&&Object.prototype.toString.call(t)==="[object Map]"}function AD(t){var e=Object.getPrototypeOf(t),s=Object.getPrototypeOf(e),n=Object.getPrototypeOf(s);return n===null}function Bs(t){return t!=null&&Object.prototype.toString.call(t)==="[object Set]"}var sy=typeof Object.getOwnPropertySymbols<"u";function zD(t){var e=Object.keys(t);if(!sy)return e;var s=Object.getOwnPropertySymbols(t);return s.length?[].concat(e,s.filter(function(n){return hu.propertyIsEnumerable.call(t,n)})):e}var vu=typeof Reflect<"u"&&Reflect.ownKeys?Reflect.ownKeys:sy?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:Object.getOwnPropertyNames;function iy(t){return t===null?null:typeof t=="object"?""+t:t}function Ps(t,e){return hu.hasOwnProperty.call(t,e)}var ND=Object.getOwnPropertyDescriptors||function(e){var s={};return vu(e).forEach(function(n){s[n]=_u(e,n)}),s};function _a(t,e){return!!(t&e)}function ha(t,e,s){return s?t|=e:t&=~e,t}function ny(t,e){(e==null||e>t.length)&&(e=t.length);for(var s=0,n=Array(e);s<e;s++)n[s]=t[s];return n}function MD(t,e,s){if(oy())return Reflect.construct.apply(null,arguments);var n=[null];n.push.apply(n,e);var r=new(t.bind.apply(t,n));return s&&Nr(r,s.prototype),r}function RD(t,e){for(var s=0;s<e.length;s++){var n=e[s];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,qD(n.key),n)}}function xo(t,e,s){return e&&RD(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t}function Co(t,e){var s=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(s)return(s=s.call(t)).next.bind(s);if(Array.isArray(t)||(s=OD(t))||e){s&&(t=s);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
|
||
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Tn(){return Tn=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var s=arguments[e];for(var n in s)({}).hasOwnProperty.call(s,n)&&(t[n]=s[n])}return t},Tn.apply(null,arguments)}function dd(t){return dd=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},dd(t)}function gd(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,Nr(t,e)}function ED(t){try{return Function.toString.call(t).indexOf("[native code]")!==-1}catch{return typeof t=="function"}}function oy(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(oy=function(){return!!t})()}function Nr(t,e){return Nr=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(s,n){return s.__proto__=n,s},Nr(t,e)}function ID(t,e){if(typeof t!="object"||!t)return t;var s=t[Symbol.toPrimitive];if(s!==void 0){var n=s.call(t,e);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}function qD(t){var e=ID(t,"string");return typeof e=="symbol"?e:e+""}function OD(t,e){if(t){if(typeof t=="string")return ny(t,e);var s={}.toString.call(t).slice(8,-1);return s==="Object"&&t.constructor&&(s=t.constructor.name),s==="Map"||s==="Set"?Array.from(t):s==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(s)?ny(t,e):void 0}}function _d(t){var e=typeof Map=="function"?new Map:void 0;return _d=function(s){if(s===null||!ED(s))return s;if(typeof s!="function")throw new TypeError("Super expression must either be null or a function");if(e!==void 0){if(e.has(s))return e.get(s);e.set(s,n)}function n(){return MD(s,arguments,dd(this).constructor)}return n.prototype=Object.create(s.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),Nr(n,s)},_d(t)}var fs=Symbol("mobx-stored-annotations");function ys(t){function e(s,n){if(Rr(n))return t.decorate_20223_(s,n);Mr(s,n,t)}return Object.assign(e,t)}function Mr(t,e,s){Ps(t,fs)||yu(t,fs,Tn({},t[fs])),UD(s)||(t[fs][e]=s)}function $D(t){return Ps(t,fs)||yu(t,fs,Tn({},t[fs])),t[fs]}function Rr(t){return typeof t=="object"&&typeof t.kind=="string"}var he=Symbol("mobx administration"),Ci=(function(){function t(s){s===void 0&&(s="Atom"),this.name_=void 0,this.flags_=0,this.observers_=new Set,this.lastAccessedBy_=0,this.lowestObserverState_=Ue.NOT_TRACKING_,this.onBOL=void 0,this.onBUOL=void 0,this.name_=s}var e=t.prototype;return e.onBO=function(){this.onBOL&&this.onBOL.forEach(function(n){return n()})},e.onBUO=function(){this.onBUOL&&this.onBUOL.forEach(function(n){return n()})},e.reportObserved=function(){return jy(this)},e.reportChanged=function(){qa(),Ty(this),Oa()},e.toString=function(){return this.name_},xo(t,[{key:"isBeingObserved",get:function(){return _a(this.flags_,t.isBeingObservedMask_)},set:function(n){this.flags_=ha(this.flags_,t.isBeingObservedMask_,n)}},{key:"isPendingUnobservation",get:function(){return _a(this.flags_,t.isPendingUnobservationMask_)},set:function(n){this.flags_=ha(this.flags_,t.isPendingUnobservationMask_,n)}},{key:"diffValue",get:function(){return _a(this.flags_,t.diffValueMask_)?1:0},set:function(n){this.flags_=ha(this.flags_,t.diffValueMask_,n===1)}}])})();Ci.isBeingObservedMask_=1,Ci.isPendingUnobservationMask_=2,Ci.diffValueMask_=4;var hd=jn("Atom",Ci);function ly(t,e,s){e===void 0&&(e=bo),s===void 0&&(s=bo);var n=new Ci(t);return e!==bo&&Y1(n,e),s!==bo&&Ny(n,s),n}function LD(t,e){return Zy(t,e)}function BD(t,e){return Object.is?Object.is(t,e):t===e?t!==0||1/t===1/e:t!==t&&e!==e}var ku={structural:LD,default:BD};function Dn(t,e,s){return Iy(t)?t:Array.isArray(t)?ce.array(t,{name:s}):xi(t)?ce.object(t,void 0,{name:s}):wo(t)?ce.map(t,{name:s}):Bs(t)?ce.set(t,{name:s}):typeof t=="function"&&!jo(t)&&!Lr(t)?ty(t)?To(t):$r(s,t):t}function PD(t,e,s){if(t==null||Ou(t)||Iu(t)||Nn(t)||ks(t))return t;if(Array.isArray(t))return ce.array(t,{name:s,deep:!1});if(xi(t))return ce.object(t,void 0,{name:s,deep:!1});if(wo(t))return ce.map(t,{name:s,deep:!1});if(Bs(t))return ce.set(t,{name:s,deep:!1})}function bu(t){return t}function WD(t,e){return Zy(t,e)?e:t}var FD="override";function UD(t){return t.annotationType_===FD}function Er(t,e){return{annotationType_:t,options_:e,make_:GD,extend_:HD,decorate_20223_:VD}}function GD(t,e,s,n){var r;if((r=this.options_)!=null&&r.bound)return this.extend_(t,e,s,!1)===null?0:1;if(n===t.target_)return this.extend_(t,e,s,!1)===null?0:2;if(jo(s.value))return 1;var u=ry(t,this,e,s,!1);return hs(n,e,u),2}function HD(t,e,s,n){var r=ry(t,this,e,s);return t.defineProperty_(e,r,n)}function VD(t,e){var s=e.kind,n=e.name,r=e.addInitializer,u=this,c=function(h){var f,v,k,x;return Sn((f=(v=u.options_)==null?void 0:v.name)!=null?f:n.toString(),h,(k=(x=u.options_)==null?void 0:x.autoAction)!=null?k:!1)};if(s=="field")return function(_){var h,f=_;return jo(f)||(f=c(f)),(h=u.options_)!=null&&h.bound&&(f=f.bind(this),f.isMobxAction=!0),f};if(s=="method"){var p;return jo(t)||(t=c(t)),(p=this.options_)!=null&&p.bound&&r(function(){var _=this,h=_[n].bind(_);h.isMobxAction=!0,_[n]=h}),t}Fe("Cannot apply '"+u.annotationType_+"' to '"+String(n)+"' (kind: "+s+"):"+(`
|
||
'`+u.annotationType_+"' can only be used on properties with a function value."))}function YD(t,e,s,n){e.annotationType_,n.value}function ry(t,e,s,n,r){var u,c,p,_,h,f,v;r===void 0&&(r=Z.safeDescriptors),YD(t,e,s,n);var k=n.value;if((u=e.options_)!=null&&u.bound){var x;k=k.bind((x=t.proxy_)!=null?x:t.target_)}return{value:Sn((c=(p=e.options_)==null?void 0:p.name)!=null?c:s.toString(),k,(_=(h=e.options_)==null?void 0:h.autoAction)!=null?_:!1,(f=e.options_)!=null&&f.bound?(v=t.proxy_)!=null?v:t.target_:void 0),configurable:r?t.isPlainObject_:!0,enumerable:!1,writable:!r}}function my(t,e){return{annotationType_:t,options_:e,make_:QD,extend_:KD,decorate_20223_:ZD}}function QD(t,e,s,n){var r;if(n===t.target_)return this.extend_(t,e,s,!1)===null?0:2;if((r=this.options_)!=null&&r.bound&&(!Ps(t.target_,e)||!Lr(t.target_[e]))&&this.extend_(t,e,s,!1)===null)return 0;if(Lr(s.value))return 1;var u=uy(t,this,e,s,!1,!1);return hs(n,e,u),2}function KD(t,e,s,n){var r,u=uy(t,this,e,s,(r=this.options_)==null?void 0:r.bound);return t.defineProperty_(e,u,n)}function ZD(t,e){var s,n=e.name,r=e.addInitializer;return Lr(t)||(t=To(t)),(s=this.options_)!=null&&s.bound&&r(function(){var u=this,c=u[n].bind(u);c.isMobXFlow=!0,u[n]=c}),t}function XD(t,e,s,n){e.annotationType_,n.value}function uy(t,e,s,n,r,u){u===void 0&&(u=Z.safeDescriptors),XD(t,e,s,n);var c=n.value;if(Lr(c)||(c=To(c)),r){var p;c=c.bind((p=t.proxy_)!=null?p:t.target_),c.isMobXFlow=!0}return{value:c,configurable:u?t.isPlainObject_:!0,enumerable:!1,writable:!u}}function fd(t,e){return{annotationType_:t,options_:e,make_:JD,extend_:e1,decorate_20223_:t1}}function JD(t,e,s){return this.extend_(t,e,s,!1)===null?0:1}function e1(t,e,s,n){return a1(t,this,e,s),t.defineComputedProperty_(e,Tn({},this.options_,{get:s.get,set:s.set}),n)}function t1(t,e){var s=this,n=e.name,r=e.addInitializer,u;function c(p,_){var h=Tn({},s.options_,{get:t,context:p});return h.name||(h.name="ObservableObject."+n.toString()),new fa(h)}return r(function(){var p,_=So(this)[he],h=this,f=_.values_.get(n);f instanceof fa&&f.derivation!==t&&_.values_.delete(n),((p=_.lazyComputedKeys_)!=null?p:_.lazyComputedKeys_=new Map).set(n,function(){return c(h)})}),function(){var p=this[he],_=p.values_.get(n);if(_ instanceof fa&&_.derivation!==t){var h,f=(h=u)==null?void 0:h.get(this);if(!f){var v;f=c(this),((v=u)!=null?v:u=new WeakMap).set(this,f)}return f.get()}return p.getObservablePropValue_(n)}}function a1(t,e,s,n){e.annotationType_,n.get}function wu(t,e){return{annotationType_:t,options_:e,make_:s1,extend_:i1,decorate_20223_:n1}}function s1(t,e,s){return this.extend_(t,e,s,!1)===null?0:1}function i1(t,e,s,n){var r,u;return o1(t,this),t.defineObservableProperty_(e,s.value,(r=(u=this.options_)==null?void 0:u.enhancer)!=null?r:Dn,n)}function n1(t,e){var s=this,n=e.kind,r=e.name;if(n!=="accessor")return;function u(c,p){var _,h=So(c)[he];return((_=h.lazyObservableKeys_)!=null?_:h.lazyObservableKeys_=new Map).set(r,function(){var f,v;return new An(p,(f=(v=s.options_)==null?void 0:v.enhancer)!=null?f:Dn,"ObservableObject."+r.toString(),!1)}),h}return{get:function(){var p,_=(p=this[he])!=null?p:u(this,t.get.call(this));return _.getObservablePropValue_(r)},set:function(p){var _,h=(_=this[he])!=null?_:u(this,p);return h.setObservablePropValue_(r,p)},init:function(p){return u(this,p),p}}}function o1(t,e,s,n){e.annotationType_}var l1="true",r1=cy();function cy(t){return{annotationType_:l1,options_:t,make_:m1,extend_:u1,decorate_20223_:c1}}function m1(t,e,s,n){var r,u;if(s.get)return Ir.make_(t,e,s,n);if(s.set){var c=jo(s.set)?s.set:Sn(e.toString(),s.set);return n===t.target_?t.defineProperty_(e,{configurable:Z.safeDescriptors?t.isPlainObject_:!0,set:c})===null?0:2:(hs(n,e,{configurable:!0,set:c}),2)}if(n!==t.target_&&typeof s.value=="function"){var p;if(ty(s.value)){var _,h=(_=this.options_)!=null&&_.autoBind?To.bound:To;return h.make_(t,e,s,n)}var f=(p=this.options_)!=null&&p.autoBind?$r.bound:$r;return f.make_(t,e,s,n)}var v=((r=this.options_)==null?void 0:r.deep)===!1?ce.ref:ce;if(typeof s.value=="function"&&(u=this.options_)!=null&&u.autoBind){var k;s.value=s.value.bind((k=t.proxy_)!=null?k:t.target_)}return v.make_(t,e,s,n)}function u1(t,e,s,n){var r,u;if(s.get)return Ir.extend_(t,e,s,n);if(s.set)return t.defineProperty_(e,{configurable:Z.safeDescriptors?t.isPlainObject_:!0,set:Sn(e.toString(),s.set)},n);if(typeof s.value=="function"&&(r=this.options_)!=null&&r.autoBind){var c;s.value=s.value.bind((c=t.proxy_)!=null?c:t.target_)}var p=((u=this.options_)==null?void 0:u.deep)===!1?ce.ref:ce;return p.extend_(t,e,s,n)}function c1(t,e){Fe("'"+this.annotationType_+"' cannot be used as a decorator")}var p1="observable",d1="observable.ref",g1="observable.shallow",_1="observable.struct",py={deep:!0,name:void 0,defaultDecorator:void 0,proxy:!0};Object.freeze(py);function xu(t){return t||py}var yd=wu(p1),h1=wu(d1,{enhancer:bu}),f1=wu(g1,{enhancer:PD}),y1=wu(_1,{enhancer:WD}),dy=ys(yd);function Cu(t){return t.deep===!0?Dn:t.deep===!1?bu:k1(t.defaultDecorator)}function v1(t){var e;return t?(e=t.defaultDecorator)!=null?e:cy(t):void 0}function k1(t){var e,s;return t&&(e=(s=t.options_)==null?void 0:s.enhancer)!=null?e:Dn}function gy(t,e,s){if(Rr(e))return yd.decorate_20223_(t,e);if(Cn(e)){Mr(t,e,yd);return}return Iy(t)?t:xi(t)?ce.object(t,e,s):Array.isArray(t)?ce.array(t,e):wo(t)?ce.map(t,e):Bs(t)?ce.set(t,e):typeof t=="object"&&t!==null?t:ce.box(t,e)}Zf(gy,dy);var b1={box:function(e,s){var n=xu(s);return new An(e,Cu(n),n.name,!0,n.equals)},array:function(e,s){var n=xu(s);return(Z.useProxies===!1||n.proxy===!1?vS:mS)(e,Cu(n),n.name)},map:function(e,s){var n=xu(s);return new $y(e,Cu(n),n.name)},set:function(e,s){var n=xu(s);return new By(e,Cu(n),n.name)},object:function(e,s,n){return Mn(function(){return X1(Z.useProxies===!1||(n==null?void 0:n.proxy)===!1?So({},n):oS({},n),e,s)})},ref:ys(h1),shallow:ys(f1),deep:dy,struct:ys(y1)},ce=Zf(gy,b1),_y="computed",w1="computed.struct",vd=fd(_y),x1=fd(w1,{equals:ku.structural}),Ir=function(e,s){if(Rr(s))return vd.decorate_20223_(e,s);if(Cn(s))return Mr(e,s,vd);if(xi(e))return ys(fd(_y,e));var n=xi(s)?s:{};return n.get=e,n.name||(n.name=e.name||""),new fa(n)};Object.assign(Ir,vd),Ir.struct=ys(x1);var hy,fy,ju=0,C1=1,j1=(hy=(fy=_u(function(){},"name"))==null?void 0:fy.configurable)!=null?hy:!1,yy={value:"action",configurable:!0,writable:!1,enumerable:!1};function Sn(t,e,s,n){s===void 0&&(s=!1);function r(){return T1(t,s,e,n||this,arguments)}return r.isMobxAction=!0,r.toString=function(){return e.toString()},j1&&(yy.value=t,hs(r,"name",yy)),r}function T1(t,e,s,n,r){var u=D1(t,e);try{return s.apply(n,r)}catch(c){throw u.error_=c,c}finally{S1(u)}}function D1(t,e,s,n){var r=!1,u=0,c=Z.trackingDerivation,p=!e||!c;qa();var _=Z.allowStateChanges;p&&(zn(),_=kd(!0));var h=Cd(!0),f={runAsAction_:p,prevDerivation_:c,prevAllowStateChanges_:_,prevAllowStateReads_:h,notifySpy_:r,startTime_:u,actionId_:C1++,parentActionId_:ju};return ju=f.actionId_,f}function S1(t){ju!==t.actionId_&&Fe(30),ju=t.parentActionId_,t.error_!==void 0&&(Z.suppressReactionErrors=!0),bd(t.prevAllowStateChanges_),qr(t.prevAllowStateReads_),Oa(),t.runAsAction_&&Ws(t.prevDerivation_),Z.suppressReactionErrors=!1}function kd(t){var e=Z.allowStateChanges;return Z.allowStateChanges=t,e}function bd(t){Z.allowStateChanges=t}var An=(function(t){function e(n,r,u,c,p){var _;return u===void 0&&(u="ObservableValue"),p===void 0&&(p=ku.default),_=t.call(this,u)||this,_.enhancer=void 0,_.name_=void 0,_.equals=void 0,_.hasUnreportedChange_=!1,_.interceptors_=void 0,_.changeListeners_=void 0,_.value_=void 0,_.dehancer=void 0,_.enhancer=r,_.name_=u,_.equals=p,_.value_=r(n,void 0,u),_}gd(e,t);var s=e.prototype;return s.dehanceValue=function(r){return this.dehancer!==void 0?this.dehancer(r):r},s.set=function(r){this.value_,r=this.prepareNewValue_(r),r!==Z.UNCHANGED&&this.setNewValue_(r)},s.prepareNewValue_=function(r){if($a(this)){var u=La(this,{object:this,type:vs,newValue:r});if(!u)return Z.UNCHANGED;r=u.newValue}return r=this.enhancer(r,this.value_,this.name_),this.equals(this.value_,r)?Z.UNCHANGED:r},s.setNewValue_=function(r){var u=this.value_;this.value_=r,this.reportChanged(),is(this)&&ns(this,{type:vs,object:this,newValue:r,oldValue:u})},s.get=function(){return this.reportObserved(),this.dehanceValue(this.value_)},s.intercept_=function(r){return Br(this,r)},s.observe_=function(r,u){return u&&r({observableKind:"value",debugObjectName:this.name_,object:this,type:vs,newValue:this.value_,oldValue:void 0}),Pr(this,r)},s.raw=function(){return this.value_},s.toJSON=function(){return this.get()},s.toString=function(){return this.name_+"["+this.value_+"]"},s.valueOf=function(){return iy(this.get())},s[Symbol.toPrimitive]=function(){return this.valueOf()},e})(Ci),fa=(function(){function t(s){this.dependenciesState_=Ue.NOT_TRACKING_,this.observing_=[],this.newObserving_=null,this.observers_=new Set,this.runId_=0,this.lastAccessedBy_=0,this.lowestObserverState_=Ue.UP_TO_DATE_,this.unboundDepsCount_=0,this.value_=new Su(null),this.name_=void 0,this.triggeredBy_=void 0,this.flags_=0,this.derivation=void 0,this.setter_=void 0,this.isTracing_=Du.NONE,this.scope_=void 0,this.equals_=void 0,this.requiresReaction_=void 0,this.keepAlive_=void 0,this.onBOL=void 0,this.onBUOL=void 0,s.get||Fe(31),this.derivation=s.get,this.name_=s.name||"ComputedValue",s.set&&(this.setter_=Sn("ComputedValue-setter",s.set)),this.equals_=s.equals||(s.compareStructural||s.struct?ku.structural:ku.default),this.scope_=s.context,this.requiresReaction_=s.requiresReaction,this.keepAlive_=!!s.keepAlive}var e=t.prototype;return e.onBecomeStale_=function(){R1(this)},e.onBO=function(){this.onBOL&&this.onBOL.forEach(function(n){return n()})},e.onBUO=function(){this.onBUOL&&this.onBUOL.forEach(function(n){return n()})},e.get=function(){if(this.isComputing&&Fe(32,this.name_,this.derivation),Z.inBatch===0&&this.observers_.size===0&&!this.keepAlive_)wd(this)&&(this.warnAboutUntrackedRead_(),qa(),this.value_=this.computeValue_(!1),Oa());else if(jy(this),wd(this)){var n=Z.trackingContext;this.keepAlive_&&!n&&(Z.trackingContext=this),this.trackAndCompute()&&M1(this),Z.trackingContext=n}var r=this.value_;if(Au(r))throw r.cause;return r},e.set=function(n){if(this.setter_){this.isRunningSetter&&Fe(33,this.name_),this.isRunningSetter=!0;try{this.setter_.call(this.scope_,n)}finally{this.isRunningSetter=!1}}else Fe(34,this.name_)},e.trackAndCompute=function(){var n=this.value_,r=this.dependenciesState_===Ue.NOT_TRACKING_,u=this.computeValue_(!0),c=r||Au(n)||Au(u)||!this.equals_(n,u);return c&&(this.value_=u),c},e.computeValue_=function(n){this.isComputing=!0;var r=kd(!1),u;if(n)u=vy(this,this.derivation,this.scope_);else if(Z.disableErrorBoundaries===!0)u=this.derivation.call(this.scope_);else try{u=this.derivation.call(this.scope_)}catch(c){u=new Su(c)}return bd(r),this.isComputing=!1,u},e.suspend_=function(){this.keepAlive_||(xd(this),this.value_=void 0)},e.observe_=function(n,r){var u=this,c=!0,p=void 0;return F1(function(){var _=u.get();if(!c||r){var h=zn();n({observableKind:"computed",debugObjectName:u.name_,type:vs,object:u,newValue:_,oldValue:p}),Ws(h)}c=!1,p=_})},e.warnAboutUntrackedRead_=function(){},e.toString=function(){return this.name_+"["+this.derivation.toString()+"]"},e.valueOf=function(){return iy(this.get())},e[Symbol.toPrimitive]=function(){return this.valueOf()},xo(t,[{key:"isComputing",get:function(){return _a(this.flags_,t.isComputingMask_)},set:function(n){this.flags_=ha(this.flags_,t.isComputingMask_,n)}},{key:"isRunningSetter",get:function(){return _a(this.flags_,t.isRunningSetterMask_)},set:function(n){this.flags_=ha(this.flags_,t.isRunningSetterMask_,n)}},{key:"isBeingObserved",get:function(){return _a(this.flags_,t.isBeingObservedMask_)},set:function(n){this.flags_=ha(this.flags_,t.isBeingObservedMask_,n)}},{key:"isPendingUnobservation",get:function(){return _a(this.flags_,t.isPendingUnobservationMask_)},set:function(n){this.flags_=ha(this.flags_,t.isPendingUnobservationMask_,n)}},{key:"diffValue",get:function(){return _a(this.flags_,t.diffValueMask_)?1:0},set:function(n){this.flags_=ha(this.flags_,t.diffValueMask_,n===1)}}])})();fa.isComputingMask_=1,fa.isRunningSetterMask_=2,fa.isBeingObservedMask_=4,fa.isPendingUnobservationMask_=8,fa.diffValueMask_=16;var Tu=jn("ComputedValue",fa),Ue;(function(t){t[t.NOT_TRACKING_=-1]="NOT_TRACKING_",t[t.UP_TO_DATE_=0]="UP_TO_DATE_",t[t.POSSIBLY_STALE_=1]="POSSIBLY_STALE_",t[t.STALE_=2]="STALE_"})(Ue||(Ue={}));var Du;(function(t){t[t.NONE=0]="NONE",t[t.LOG=1]="LOG",t[t.BREAK=2]="BREAK"})(Du||(Du={}));var Su=function(e){this.cause=void 0,this.cause=e};function Au(t){return t instanceof Su}function wd(t){switch(t.dependenciesState_){case Ue.UP_TO_DATE_:return!1;case Ue.NOT_TRACKING_:case Ue.STALE_:return!0;case Ue.POSSIBLY_STALE_:{for(var e=Cd(!0),s=zn(),n=t.observing_,r=n.length,u=0;u<r;u++){var c=n[u];if(Tu(c)){if(Z.disableErrorBoundaries)c.get();else try{c.get()}catch{return Ws(s),qr(e),!0}if(t.dependenciesState_===Ue.STALE_)return Ws(s),qr(e),!0}}return by(t),Ws(s),qr(e),!1}}}function nW(t){}function vy(t,e,s){var n=Cd(!0);by(t),t.newObserving_=new Array(t.runId_===0?100:t.observing_.length),t.unboundDepsCount_=0,t.runId_=++Z.runId;var r=Z.trackingDerivation;Z.trackingDerivation=t,Z.inBatch++;var u;if(Z.disableErrorBoundaries===!0)u=e.call(s);else try{u=e.call(s)}catch(c){u=new Su(c)}return Z.inBatch--,Z.trackingDerivation=r,A1(t),qr(n),u}function A1(t){for(var e=t.observing_,s=t.observing_=t.newObserving_,n=Ue.UP_TO_DATE_,r=0,u=t.unboundDepsCount_,c=0;c<u;c++){var p=s[c];p.diffValue===0&&(p.diffValue=1,r!==c&&(s[r]=p),r++),p.dependenciesState_>n&&(n=p.dependenciesState_)}for(s.length=r,t.newObserving_=null,u=e.length;u--;){var _=e[u];_.diffValue===0&&xy(_,t),_.diffValue=0}for(;r--;){var h=s[r];h.diffValue===1&&(h.diffValue=0,N1(h,t))}n!==Ue.UP_TO_DATE_&&(t.dependenciesState_=n,t.onBecomeStale_())}function xd(t){var e=t.observing_;t.observing_=[];for(var s=e.length;s--;)xy(e[s],t);t.dependenciesState_=Ue.NOT_TRACKING_}function ky(t){var e=zn();try{return t()}finally{Ws(e)}}function zn(){var t=Z.trackingDerivation;return Z.trackingDerivation=null,t}function Ws(t){Z.trackingDerivation=t}function Cd(t){var e=Z.allowStateReads;return Z.allowStateReads=t,e}function qr(t){Z.allowStateReads=t}function by(t){if(t.dependenciesState_!==Ue.UP_TO_DATE_){t.dependenciesState_=Ue.UP_TO_DATE_;for(var e=t.observing_,s=e.length;s--;)e[s].lowestObserverState_=Ue.UP_TO_DATE_}}var zu=function(){this.version=6,this.UNCHANGED={},this.trackingDerivation=null,this.trackingContext=null,this.runId=0,this.mobxGuid=0,this.inBatch=0,this.pendingUnobservations=[],this.pendingReactions=[],this.isRunningReactions=!1,this.allowStateChanges=!1,this.allowStateReads=!0,this.enforceActions=!0,this.spyListeners=[],this.globalReactionErrorHandlers=[],this.computedRequiresReaction=!1,this.reactionRequiresObservable=!1,this.observableRequiresReaction=!1,this.disableErrorBoundaries=!1,this.suppressReactionErrors=!1,this.useProxies=!0,this.verifyProxies=!1,this.safeDescriptors=!0},Nu=!0,wy=!1,Z=(function(){var t=gu();return t.__mobxInstanceCount>0&&!t.__mobxGlobals&&(Nu=!1),t.__mobxGlobals&&t.__mobxGlobals.version!==new zu().version&&(Nu=!1),Nu?t.__mobxGlobals?(t.__mobxInstanceCount+=1,t.__mobxGlobals.UNCHANGED||(t.__mobxGlobals.UNCHANGED={}),t.__mobxGlobals):(t.__mobxInstanceCount=1,t.__mobxGlobals=new zu):(setTimeout(function(){wy||Fe(35)},1),new zu)})();function z1(){if((Z.pendingReactions.length||Z.inBatch||Z.isRunningReactions)&&Fe(36),wy=!0,Nu){var t=gu();--t.__mobxInstanceCount===0&&(t.__mobxGlobals=void 0),Z=new zu}}function N1(t,e){t.observers_.add(e),t.lowestObserverState_>e.dependenciesState_&&(t.lowestObserverState_=e.dependenciesState_)}function xy(t,e){t.observers_.delete(e),t.observers_.size===0&&Cy(t)}function Cy(t){t.isPendingUnobservation===!1&&(t.isPendingUnobservation=!0,Z.pendingUnobservations.push(t))}function qa(){Z.inBatch++}function Oa(){if(--Z.inBatch===0){Dy();for(var t=Z.pendingUnobservations,e=0;e<t.length;e++){var s=t[e];s.isPendingUnobservation=!1,s.observers_.size===0&&(s.isBeingObserved&&(s.isBeingObserved=!1,s.onBUO()),s instanceof fa&&s.suspend_())}Z.pendingUnobservations=[]}}function jy(t){var e=Z.trackingDerivation;return e!==null?(e.runId_!==t.lastAccessedBy_&&(t.lastAccessedBy_=e.runId_,e.newObserving_[e.unboundDepsCount_++]=t,!t.isBeingObserved&&Z.trackingContext&&(t.isBeingObserved=!0,t.onBO())),t.isBeingObserved):(t.observers_.size===0&&Z.inBatch>0&&Cy(t),!1)}function Ty(t){t.lowestObserverState_!==Ue.STALE_&&(t.lowestObserverState_=Ue.STALE_,t.observers_.forEach(function(e){e.dependenciesState_===Ue.UP_TO_DATE_&&e.onBecomeStale_(),e.dependenciesState_=Ue.STALE_}))}function M1(t){t.lowestObserverState_!==Ue.STALE_&&(t.lowestObserverState_=Ue.STALE_,t.observers_.forEach(function(e){e.dependenciesState_===Ue.POSSIBLY_STALE_?e.dependenciesState_=Ue.STALE_:e.dependenciesState_===Ue.UP_TO_DATE_&&(t.lowestObserverState_=Ue.UP_TO_DATE_)}))}function R1(t){t.lowestObserverState_===Ue.UP_TO_DATE_&&(t.lowestObserverState_=Ue.POSSIBLY_STALE_,t.observers_.forEach(function(e){e.dependenciesState_===Ue.UP_TO_DATE_&&(e.dependenciesState_=Ue.POSSIBLY_STALE_,e.onBecomeStale_())}))}var Fs=(function(){function t(s,n,r,u){s===void 0&&(s="Reaction"),this.name_=void 0,this.onInvalidate_=void 0,this.errorHandler_=void 0,this.requiresObservable_=void 0,this.observing_=[],this.newObserving_=[],this.dependenciesState_=Ue.NOT_TRACKING_,this.runId_=0,this.unboundDepsCount_=0,this.flags_=0,this.isTracing_=Du.NONE,this.name_=s,this.onInvalidate_=n,this.errorHandler_=r,this.requiresObservable_=u}var e=t.prototype;return e.onBecomeStale_=function(){this.schedule_()},e.schedule_=function(){this.isScheduled||(this.isScheduled=!0,Z.pendingReactions.push(this),Dy())},e.runReaction_=function(){if(!this.isDisposed){qa(),this.isScheduled=!1;var n=Z.trackingContext;if(Z.trackingContext=this,wd(this)){this.isTrackPending=!0;try{this.onInvalidate_()}catch(r){this.reportExceptionInDerivation_(r)}}Z.trackingContext=n,Oa()}},e.track=function(n){if(!this.isDisposed){qa(),this.isRunning=!0;var r=Z.trackingContext;Z.trackingContext=this;var u=vy(this,n,void 0);Z.trackingContext=r,this.isRunning=!1,this.isTrackPending=!1,this.isDisposed&&xd(this),Au(u)&&this.reportExceptionInDerivation_(u.cause),Oa()}},e.reportExceptionInDerivation_=function(n){var r=this;if(this.errorHandler_){this.errorHandler_(n,this);return}if(Z.disableErrorBoundaries)throw n;var u="[mobx] uncaught error in '"+this+"'";Z.suppressReactionErrors||console.error(u,n),Z.globalReactionErrorHandlers.forEach(function(c){return c(n,r)})},e.dispose=function(){this.isDisposed||(this.isDisposed=!0,this.isRunning||(qa(),xd(this),Oa()))},e.getDisposer_=function(n){var r=this,u=function c(){r.dispose(),n==null||n.removeEventListener==null||n.removeEventListener("abort",c)};return n==null||n.addEventListener==null||n.addEventListener("abort",u),u[he]=this,"dispose"in Symbol&&typeof Symbol.dispose=="symbol"&&(u[Symbol.dispose]=u),u},e.toString=function(){return"Reaction["+this.name_+"]"},e.trace=function(n){},xo(t,[{key:"isDisposed",get:function(){return _a(this.flags_,t.isDisposedMask_)},set:function(n){this.flags_=ha(this.flags_,t.isDisposedMask_,n)}},{key:"isScheduled",get:function(){return _a(this.flags_,t.isScheduledMask_)},set:function(n){this.flags_=ha(this.flags_,t.isScheduledMask_,n)}},{key:"isTrackPending",get:function(){return _a(this.flags_,t.isTrackPendingMask_)},set:function(n){this.flags_=ha(this.flags_,t.isTrackPendingMask_,n)}},{key:"isRunning",get:function(){return _a(this.flags_,t.isRunningMask_)},set:function(n){this.flags_=ha(this.flags_,t.isRunningMask_,n)}},{key:"diffValue",get:function(){return _a(this.flags_,t.diffValueMask_)?1:0},set:function(n){this.flags_=ha(this.flags_,t.diffValueMask_,n===1)}}])})();Fs.isDisposedMask_=1,Fs.isScheduledMask_=2,Fs.isTrackPendingMask_=4,Fs.isRunningMask_=8,Fs.diffValueMask_=16;var E1=100,jd=function(e){return e()};function Dy(){Z.inBatch>0||Z.isRunningReactions||jd(I1)}function I1(){Z.isRunningReactions=!0;for(var t=Z.pendingReactions,e=0;t.length>0;){++e===E1&&(console.error("[mobx] cycle in reaction: "+t[0]),t.splice(0));for(var s=t.splice(0),n=0,r=s.length;n<r;n++)s[n].runReaction_()}Z.isRunningReactions=!1}var Mu=jn("Reaction",Fs);function q1(t){var e=jd;jd=function(n){return t(function(){return e(n)})}}function Or(){return!1}function oW(t){}function lW(t){}function rW(t){}function O1(t){return console.warn("[mobx.spy] Is a no-op in production builds"),function(){}}var Sy="action",$1="action.bound",Ay="autoAction",L1="autoAction.bound",B1="<unnamed action>",Td=Er(Sy),P1=Er($1,{bound:!0}),Dd=Er(Ay,{autoAction:!0}),W1=Er(L1,{autoAction:!0,bound:!0});function zy(t){var e=function(n,r){if(ss(n))return Sn(n.name||B1,n,t);if(ss(r))return Sn(n,r,t);if(Rr(r))return(t?Dd:Td).decorate_20223_(n,r);if(Cn(r))return Mr(n,r,t?Dd:Td);if(Cn(n))return ys(Er(t?Ay:Sy,{name:n,autoAction:t}))};return e}var re=zy(!1);Object.assign(re,Td);var $r=zy(!0);Object.assign($r,Dd),re.bound=ys(P1),$r.bound=ys(W1);function jo(t){return ss(t)&&t.isMobxAction===!0}function F1(t,e){var s,n,r,u;e===void 0&&(e=Xf);var c=(s=(n=e)==null?void 0:n.name)!=null?s:"Autorun",p=!e.scheduler&&!e.delay,_;if(p)_=new Fs(c,function(){this.track(v)},e.onError,e.requiresObservable);else{var h=G1(e),f=!1;_=new Fs(c,function(){f||(f=!0,h(function(){f=!1,_.isDisposed||_.track(v)}))},e.onError,e.requiresObservable)}function v(){t(_)}return(r=e)!=null&&(r=r.signal)!=null&&r.aborted||_.schedule_(),_.getDisposer_((u=e)==null?void 0:u.signal)}var U1=function(e){return e()};function G1(t){return t.scheduler?t.scheduler:t.delay?function(e){return setTimeout(e,t.delay)}:U1}var H1="onBO",V1="onBUO";function Y1(t,e,s){return My(H1,t,e,s)}function Ny(t,e,s){return My(V1,t,e,s)}function My(t,e,s,n){var r=$u(e),u=ss(n)?n:s,c=t+"L";return r[c]?r[c].add(u):r[c]=new Set([u]),function(){var p=r[c];p&&(p.delete(u),p.size===0&&delete r[c])}}var Q1="never",Ru="always",K1="observed";function Z1(t){t.isolateGlobalState===!0&&z1();var e=t.useProxies,s=t.enforceActions;if(e!==void 0&&(Z.useProxies=e===Ru?!0:e===Q1?!1:typeof Proxy<"u"),e==="ifavailable"&&(Z.verifyProxies=!0),s!==void 0){var n=s===Ru?Ru:s===K1;Z.enforceActions=n,Z.allowStateChanges=!(n===!0||n===Ru)}["computedRequiresReaction","reactionRequiresObservable","observableRequiresReaction","disableErrorBoundaries","safeDescriptors"].forEach(function(r){r in t&&(Z[r]=!!t[r])}),Z.allowStateReads=!Z.observableRequiresReaction,t.reactionScheduler&&q1(t.reactionScheduler)}function X1(t,e,s,n){var r=ND(e);return Mn(function(){var u=So(t,n)[he];vu(r).forEach(function(c){u.extend_(c,r[c],s&&c in s?s[c]:!0)})}),t}function J1(t,e){return Ry($u(t,e))}function Ry(t){var e={name:t.name_};return t.observing_&&t.observing_.length>0&&(e.dependencies=eS(t.observing_).map(Ry)),e}function eS(t){return Array.from(new Set(t))}var tS=0,aS=(function(t){function e(){var n;return n=t.call(this,"FLOW_CANCELLED")||this,Object.setPrototypeOf(n,(this instanceof e?this.constructor:void 0).prototype),n.name="FlowCancellationError",n}gd(e,t);var s=e.prototype;return s.toString=function(){return"Error: "+this.message},e})(_d(Error)),Sd=my("flow"),sS=my("flow.bound",{bound:!0}),To=Object.assign(function(e,s){if(Rr(s))return Sd.decorate_20223_(e,s);if(Cn(s))return Mr(e,s,Sd);var n=e,r=n.name||"<unnamed flow>",u=function(){var p=this,_=arguments,h=++tS,f=re(r+" - runid: "+h+" - init",n).apply(p,_),v,k=void 0,x=new Promise(function(N,q){var I=0;v=q;function F(ge){k=void 0;var Ie;try{Ie=re(r+" - runid: "+h+" - yield "+I++,f.next).call(f,ge)}catch(De){return q(De)}te(Ie)}function se(ge){k=void 0;var Ie;try{Ie=re(r+" - runid: "+h+" - yield "+I++,f.throw).call(f,ge)}catch(De){return q(De)}te(Ie)}function te(ge){if(ss(ge==null?void 0:ge.then)){ge.then(te,q);return}return ge.done?N(ge.value):(k=Promise.resolve(ge.value),k.then(F,se))}F(void 0)});return x.cancel=re(r+" - runid: "+h+" - cancel",function(){try{k&&Ey(k);var N=f.return(void 0),q=Promise.resolve(N.value);q.then(bo,bo),Ey(q),v(new aS)}catch(I){v(I)}}),x};return u.isMobXFlow=!0,u},Sd);To.bound=ys(sS);function Ey(t){ss(t.cancel)&&t.cancel()}function Lr(t){return(t==null?void 0:t.isMobXFlow)===!0}function iS(t,e){return t?Ou(t)||!!t[he]||hd(t)||Mu(t)||Tu(t):!1}function Iy(t){return iS(t)}function Us(t,e){e===void 0&&(e=void 0),qa();try{return t.apply(e)}finally{Oa()}}function Do(t){return t[he]}var nS={has:function(e,s){return Do(e).has_(s)},get:function(e,s){return Do(e).get_(s)},set:function(e,s,n){var r;return Cn(s)?(r=Do(e).set_(s,n,!0))!=null?r:!0:!1},deleteProperty:function(e,s){var n;return Cn(s)?(n=Do(e).delete_(s,!0))!=null?n:!0:!1},defineProperty:function(e,s,n){var r;return(r=Do(e).defineProperty_(s,n))!=null?r:!0},ownKeys:function(e){return Do(e).ownKeys_()},preventExtensions:function(e){Fe(13)}};function oS(t,e){var s,n;return Jf(),t=So(t,e),(n=(s=t[he]).proxy_)!=null?n:s.proxy_=new Proxy(t,nS)}function $a(t){return t.interceptors_!==void 0&&t.interceptors_.length>0}function Br(t,e){var s=t.interceptors_||(t.interceptors_=[]);return s.push(e),ey(function(){var n=s.indexOf(e);n!==-1&&s.splice(n,1)})}function La(t,e){var s=zn();try{for(var n=[].concat(t.interceptors_||[]),r=0,u=n.length;r<u&&(e=n[r](e),e&&!e.type&&Fe(14),!!e);r++);return e}finally{Ws(s)}}function is(t){return t.changeListeners_!==void 0&&t.changeListeners_.length>0}function Pr(t,e){var s=t.changeListeners_||(t.changeListeners_=[]);return s.push(e),ey(function(){var n=s.indexOf(e);n!==-1&&s.splice(n,1)})}function ns(t,e){var s=zn(),n=t.changeListeners_;if(n){n=n.slice();for(var r=0,u=n.length;r<u;r++)n[r](e);Ws(s)}}function Et(t,e,s){return Mn(function(){var n,r=So(t,s)[he];(n=e)!=null||(e=$D(t)),vu(e).forEach(function(u){return r.make_(u,e[u])})}),t}var qy="splice",vs="update",lS=1e4,rS={get:function(e,s){var n=e[he];return s===he?n:s==="length"?n.getArrayLength_():typeof s=="string"&&!isNaN(s)?n.get_(parseInt(s)):Ps(Eu,s)?Eu[s]:e[s]},set:function(e,s,n){var r=e[he];return s==="length"&&r.setArrayLength_(n),typeof s=="symbol"||isNaN(s)?e[s]=n:r.set_(parseInt(s),n),!0},preventExtensions:function(){Fe(15)}},Ad=(function(){function t(s,n,r,u){s===void 0&&(s="ObservableArray"),this.owned_=void 0,this.legacyMode_=void 0,this.atom_=void 0,this.values_=[],this.interceptors_=void 0,this.changeListeners_=void 0,this.enhancer_=void 0,this.dehancer=void 0,this.proxy_=void 0,this.lastKnownLength_=0,this.owned_=r,this.legacyMode_=u,this.atom_=new Ci(s),this.enhancer_=function(c,p){return n(c,p,"ObservableArray[..]")}}var e=t.prototype;return e.dehanceValue_=function(n){return this.dehancer!==void 0?this.dehancer(n):n},e.dehanceValues_=function(n){return this.dehancer!==void 0&&n.length>0?n.map(this.dehancer):n},e.intercept_=function(n){return Br(this,n)},e.observe_=function(n,r){return r===void 0&&(r=!1),r&&n({observableKind:"array",object:this.proxy_,debugObjectName:this.atom_.name_,type:"splice",index:0,added:this.values_.slice(),addedCount:this.values_.length,removed:[],removedCount:0}),Pr(this,n)},e.getArrayLength_=function(){return this.atom_.reportObserved(),this.values_.length},e.setArrayLength_=function(n){(typeof n!="number"||isNaN(n)||n<0)&&Fe("Out of range: "+n);var r=this.values_.length;if(n!==r)if(n>r){for(var u=new Array(n-r),c=0;c<n-r;c++)u[c]=void 0;this.spliceWithArray_(r,0,u)}else this.spliceWithArray_(n,r-n)},e.updateArrayLength_=function(n,r){n!==this.lastKnownLength_&&Fe(16),this.lastKnownLength_+=r,this.legacyMode_&&r>0&&Qy(n+r+1)},e.spliceWithArray_=function(n,r,u){var c=this;this.atom_;var p=this.values_.length;if(n===void 0?n=0:n>p?n=p:n<0&&(n=Math.max(0,p+n)),arguments.length===1?r=p-n:r==null?r=0:r=Math.max(0,Math.min(r,p-n)),u===void 0&&(u=pd),$a(this)){var _=La(this,{object:this.proxy_,type:qy,index:n,removedCount:r,added:u});if(!_)return pd;r=_.removedCount,u=_.added}if(u=u.length===0?u:u.map(function(v){return c.enhancer_(v,void 0)}),this.legacyMode_){var h=u.length-r;this.updateArrayLength_(p,h)}var f=this.spliceItemsIntoValues_(n,r,u);return(r!==0||u.length!==0)&&this.notifyArraySplice_(n,u,f),this.dehanceValues_(f)},e.spliceItemsIntoValues_=function(n,r,u){if(u.length<lS){var c;return(c=this.values_).splice.apply(c,[n,r].concat(u))}else{var p=this.values_.slice(n,n+r),_=this.values_.slice(n+r);this.values_.length+=u.length-r;for(var h=0;h<u.length;h++)this.values_[n+h]=u[h];for(var f=0;f<_.length;f++)this.values_[n+u.length+f]=_[f];return p}},e.notifyArrayChildUpdate_=function(n,r,u){var c=!this.owned_&&Or(),p=is(this),_=p||c?{observableKind:"array",object:this.proxy_,type:vs,debugObjectName:this.atom_.name_,index:n,newValue:r,oldValue:u}:null;this.atom_.reportChanged(),p&&ns(this,_)},e.notifyArraySplice_=function(n,r,u){var c=!this.owned_&&Or(),p=is(this),_=p||c?{observableKind:"array",object:this.proxy_,debugObjectName:this.atom_.name_,type:qy,index:n,removed:u,added:r,removedCount:u.length,addedCount:r.length}:null;this.atom_.reportChanged(),p&&ns(this,_)},e.get_=function(n){if(this.legacyMode_&&n>=this.values_.length){console.warn("[mobx] Out of bounds read: "+n);return}return this.atom_.reportObserved(),this.dehanceValue_(this.values_[n])},e.set_=function(n,r){var u=this.values_;if(this.legacyMode_&&n>u.length&&Fe(17,n,u.length),n<u.length){this.atom_;var c=u[n];if($a(this)){var p=La(this,{type:vs,object:this.proxy_,index:n,newValue:r});if(!p)return;r=p.newValue}r=this.enhancer_(r,c);var _=r!==c;_&&(u[n]=r,this.notifyArrayChildUpdate_(n,r,c))}else{for(var h=new Array(n+1-u.length),f=0;f<h.length-1;f++)h[f]=void 0;h[h.length-1]=r,this.spliceWithArray_(u.length,0,h)}},t})();function mS(t,e,s,n){return s===void 0&&(s="ObservableArray"),n===void 0&&(n=!1),Jf(),Mn(function(){var r=new Ad(s,e,n,!1);ay(r.values_,he,r);var u=new Proxy(r.values_,rS);return r.proxy_=u,t&&t.length&&r.spliceWithArray_(0,0,t),u})}var Eu={clear:function(){return this.splice(0)},replace:function(e){var s=this[he];return s.spliceWithArray_(0,s.values_.length,e)},toJSON:function(){return this.slice()},splice:function(e,s){for(var n=arguments.length,r=new Array(n>2?n-2:0),u=2;u<n;u++)r[u-2]=arguments[u];var c=this[he];switch(arguments.length){case 0:return[];case 1:return c.spliceWithArray_(e);case 2:return c.spliceWithArray_(e,s)}return c.spliceWithArray_(e,s,r)},spliceWithArray:function(e,s,n){return this[he].spliceWithArray_(e,s,n)},push:function(){for(var e=this[he],s=arguments.length,n=new Array(s),r=0;r<s;r++)n[r]=arguments[r];return e.spliceWithArray_(e.values_.length,0,n),e.values_.length},pop:function(){return this.splice(Math.max(this[he].values_.length-1,0),1)[0]},shift:function(){return this.splice(0,1)[0]},unshift:function(){for(var e=this[he],s=arguments.length,n=new Array(s),r=0;r<s;r++)n[r]=arguments[r];return e.spliceWithArray_(0,0,n),e.values_.length},reverse:function(){return Z.trackingDerivation&&Fe(37,"reverse"),this.replace(this.slice().reverse()),this},sort:function(){Z.trackingDerivation&&Fe(37,"sort");var e=this.slice();return e.sort.apply(e,arguments),this.replace(e),this},remove:function(e){var s=this[he],n=s.dehanceValues_(s.values_).indexOf(e);return n>-1?(this.splice(n,1),!0):!1}};it("at",ya),it("concat",ya),it("flat",ya),it("includes",ya),it("indexOf",ya),it("join",ya),it("lastIndexOf",ya),it("slice",ya),it("toString",ya),it("toLocaleString",ya),it("toSorted",ya),it("toSpliced",ya),it("with",ya),it("every",os),it("filter",os),it("find",os),it("findIndex",os),it("findLast",os),it("findLastIndex",os),it("flatMap",os),it("forEach",os),it("map",os),it("some",os),it("toReversed",os),it("reduce",Oy),it("reduceRight",Oy);function it(t,e){typeof Array.prototype[t]=="function"&&(Eu[t]=e(t))}function ya(t){return function(){var e=this[he];e.atom_.reportObserved();var s=e.dehanceValues_(e.values_);return s[t].apply(s,arguments)}}function os(t){return function(e,s){var n=this,r=this[he];r.atom_.reportObserved();var u=r.dehanceValues_(r.values_);return u[t](function(c,p){return e.call(s,c,p,n)})}}function Oy(t){return function(){var e=this,s=this[he];s.atom_.reportObserved();var n=s.dehanceValues_(s.values_),r=arguments[0];return arguments[0]=function(u,c,p){return r(u,c,p,e)},n[t].apply(n,arguments)}}var uS=jn("ObservableArrayAdministration",Ad);function Iu(t){return fu(t)&&uS(t[he])}var cS={},ji="add",qu="delete",$y=(function(){function t(s,n,r){var u=this;n===void 0&&(n=Dn),r===void 0&&(r="ObservableMap"),this.enhancer_=void 0,this.name_=void 0,this[he]=cS,this.data_=void 0,this.hasMap_=void 0,this.keysAtom_=void 0,this.interceptors_=void 0,this.changeListeners_=void 0,this.dehancer=void 0,this.enhancer_=n,this.name_=r,ss(Map)||Fe(18),Mn(function(){u.keysAtom_=ly("ObservableMap.keys()"),u.data_=new Map,u.hasMap_=new Map,s&&u.merge(s)})}var e=t.prototype;return e.has_=function(n){return this.data_.has(n)},e.has=function(n){var r=this;if(!Z.trackingDerivation)return this.has_(n);var u=this.hasMap_.get(n);if(!u){var c=u=new An(this.has_(n),bu,"ObservableMap.key?",!1);this.hasMap_.set(n,c),Ny(c,function(){return r.hasMap_.delete(n)})}return u.get()},e.set=function(n,r){var u=this.has_(n);if($a(this)){var c=La(this,{type:u?vs:ji,object:this,newValue:r,name:n});if(!c)return this;r=c.newValue}return u?this.updateValue_(n,r):this.addValue_(n,r),this},e.delete=function(n){var r=this;if(this.keysAtom_,$a(this)){var u=La(this,{type:qu,object:this,name:n});if(!u)return!1}if(this.has_(n)){var c=Or(),p=is(this),_=p||c?{observableKind:"map",debugObjectName:this.name_,type:qu,object:this,oldValue:this.data_.get(n).value_,name:n}:null;return Us(function(){var h;r.keysAtom_.reportChanged(),(h=r.hasMap_.get(n))==null||h.setNewValue_(!1);var f=r.data_.get(n);f.setNewValue_(void 0),r.data_.delete(n)}),p&&ns(this,_),!0}return!1},e.updateValue_=function(n,r){var u=this.data_.get(n);if(r=u.prepareNewValue_(r),r!==Z.UNCHANGED){var c=Or(),p=is(this),_=p||c?{observableKind:"map",debugObjectName:this.name_,type:vs,object:this,oldValue:u.value_,name:n,newValue:r}:null;u.setNewValue_(r),p&&ns(this,_)}},e.addValue_=function(n,r){var u=this;this.keysAtom_,Us(function(){var h,f=new An(r,u.enhancer_,"ObservableMap.key",!1);u.data_.set(n,f),r=f.value_,(h=u.hasMap_.get(n))==null||h.setNewValue_(!0),u.keysAtom_.reportChanged()});var c=Or(),p=is(this),_=p||c?{observableKind:"map",debugObjectName:this.name_,type:ji,object:this,name:n,newValue:r}:null;p&&ns(this,_)},e.get=function(n){return this.has(n)?this.dehanceValue_(this.data_.get(n).get()):this.dehanceValue_(void 0)},e.getOrInsert=function(n,r){return this.has(n)||this.set(n,r),this.get(n)},e.getOrInsertComputed=function(n,r){return this.has(n)||this.set(n,r(n)),this.get(n)},e.dehanceValue_=function(n){return this.dehancer!==void 0?this.dehancer(n):n},e.keys=function(){return this.keysAtom_.reportObserved(),this.data_.keys()},e.values=function(){var n=this,r=this.keys();return Ly({next:function(){var c=r.next(),p=c.done,_=c.value;return{done:p,value:p?void 0:n.get(_)}}})},e.entries=function(){var n=this,r=this.keys();return Ly({next:function(){var c=r.next(),p=c.done,_=c.value;return{done:p,value:p?void 0:[_,n.get(_)]}}})},e[Symbol.iterator]=function(){return this.entries()},e.forEach=function(n,r){for(var u=Co(this),c;!(c=u()).done;){var p=c.value,_=p[0],h=p[1];n.call(r,h,_,this)}},e.merge=function(n){var r=this;return Nn(n)&&(n=new Map(n)),Us(function(){xi(n)?zD(n).forEach(function(u){return r.set(u,n[u])}):Array.isArray(n)?n.forEach(function(u){var c=u[0],p=u[1];return r.set(c,p)}):wo(n)?(AD(n)||Fe(19,n),n.forEach(function(u,c){return r.set(c,u)})):n!=null&&Fe(20,n)}),this},e.clear=function(){var n=this;Us(function(){ky(function(){for(var r=Co(n.keys()),u;!(u=r()).done;){var c=u.value;n.delete(c)}})})},e.replace=function(n){var r=this;return Us(function(){for(var u=pS(n),c=new Map,p=!1,_=Co(r.data_.keys()),h;!(h=_()).done;){var f=h.value;if(!u.has(f)){var v=r.delete(f);if(v)p=!0;else{var k=r.data_.get(f);c.set(f,k)}}}for(var x=Co(u.entries()),N;!(N=x()).done;){var q=N.value,I=q[0],F=q[1],se=r.data_.has(I);if(r.set(I,F),r.data_.has(I)){var te=r.data_.get(I);c.set(I,te),se||(p=!0)}}if(!p)if(r.data_.size!==c.size)r.keysAtom_.reportChanged();else for(var ge=r.data_.keys(),Ie=c.keys(),De=ge.next(),ye=Ie.next();!De.done;){if(De.value!==ye.value){r.keysAtom_.reportChanged();break}De=ge.next(),ye=Ie.next()}r.data_=c}),this},e.toString=function(){return"[object ObservableMap]"},e.toJSON=function(){return Array.from(this)},e.observe_=function(n,r){return Pr(this,n)},e.intercept_=function(n){return Br(this,n)},xo(t,[{key:"size",get:function(){return this.keysAtom_.reportObserved(),this.data_.size}},{key:Symbol.toStringTag,get:function(){return"Map"}}])})(),Nn=jn("ObservableMap",$y);function Ly(t){return t[Symbol.toStringTag]="MapIterator",Ed(t)}function pS(t){if(wo(t)||Nn(t))return t;if(Array.isArray(t))return new Map(t);if(xi(t)){var e=new Map;for(var s in t)e.set(s,t[s]);return e}else return Fe(21,t)}var dS={},By=(function(){function t(s,n,r){var u=this;n===void 0&&(n=Dn),r===void 0&&(r="ObservableSet"),this.name_=void 0,this[he]=dS,this.data_=new Set,this.atom_=void 0,this.changeListeners_=void 0,this.interceptors_=void 0,this.dehancer=void 0,this.enhancer_=void 0,this.name_=r,ss(Set)||Fe(22),this.enhancer_=function(c,p){return n(c,p,r)},Mn(function(){u.atom_=ly(u.name_),s&&u.replace(s)})}var e=t.prototype;return e.dehanceValue_=function(n){return this.dehancer!==void 0?this.dehancer(n):n},e.clear=function(){var n=this;Us(function(){ky(function(){for(var r=Co(n.data_.values()),u;!(u=r()).done;){var c=u.value;n.delete(c)}})})},e.forEach=function(n,r){for(var u=Co(this),c;!(c=u()).done;){var p=c.value;n.call(r,p,p,this)}},e.add=function(n){var r=this;if(this.atom_,$a(this)){var u=La(this,{type:ji,object:this,newValue:n});if(!u)return this;n=u.newValue}if(!this.has(n)){Us(function(){r.data_.add(r.enhancer_(n,void 0)),r.atom_.reportChanged()});var c=!1,p=is(this),_=p||c?{observableKind:"set",debugObjectName:this.name_,type:ji,object:this,newValue:n}:null;p&&ns(this,_)}return this},e.delete=function(n){var r=this;if($a(this)){var u=La(this,{type:qu,object:this,oldValue:n});if(!u)return!1}if(this.has(n)){var c=!1,p=is(this),_=p||c?{observableKind:"set",debugObjectName:this.name_,type:qu,object:this,oldValue:n}:null;return Us(function(){r.atom_.reportChanged(),r.data_.delete(n)}),p&&ns(this,_),!0}return!1},e.has=function(n){return this.atom_.reportObserved(),this.data_.has(this.dehanceValue_(n))},e.entries=function(){var n=this.values();return Py({next:function(){var u=n.next(),c=u.value,p=u.done;return p?{value:void 0,done:p}:{value:[c,c],done:p}}})},e.keys=function(){return this.values()},e.values=function(){this.atom_.reportObserved();var n=this,r=this.data_.values();return Py({next:function(){var c=r.next(),p=c.value,_=c.done;return _?{value:void 0,done:_}:{value:n.dehanceValue_(p),done:_}}})},e.intersection=function(n){if(Bs(n)&&!ks(n))return n.intersection(this);var r=new Set(this);return r.intersection(n)},e.union=function(n){if(Bs(n)&&!ks(n))return n.union(this);var r=new Set(this);return r.union(n)},e.difference=function(n){return new Set(this).difference(n)},e.symmetricDifference=function(n){if(Bs(n)&&!ks(n))return n.symmetricDifference(this);var r=new Set(this);return r.symmetricDifference(n)},e.isSubsetOf=function(n){return new Set(this).isSubsetOf(n)},e.isSupersetOf=function(n){return new Set(this).isSupersetOf(n)},e.isDisjointFrom=function(n){if(Bs(n)&&!ks(n))return n.isDisjointFrom(this);var r=new Set(this);return r.isDisjointFrom(n)},e.replace=function(n){var r=this;return ks(n)&&(n=new Set(n)),Us(function(){Array.isArray(n)?(r.clear(),n.forEach(function(u){return r.add(u)})):Bs(n)?(r.clear(),n.forEach(function(u){return r.add(u)})):n!=null&&Fe("Cannot initialize set from "+n)}),this},e.observe_=function(n,r){return Pr(this,n)},e.intercept_=function(n){return Br(this,n)},e.toJSON=function(){return Array.from(this)},e.toString=function(){return"[object ObservableSet]"},e[Symbol.iterator]=function(){return this.values()},xo(t,[{key:"size",get:function(){return this.atom_.reportObserved(),this.data_.size}},{key:Symbol.toStringTag,get:function(){return"Set"}}])})(),ks=jn("ObservableSet",By);function Py(t){return t[Symbol.toStringTag]="SetIterator",Ed(t)}var Wy=Object.create(null),Fy="remove",Uy=(function(){function t(s,n,r,u){n===void 0&&(n=new Map),u===void 0&&(u=r1),this.target_=void 0,this.values_=void 0,this.name_=void 0,this.defaultAnnotation_=void 0,this.keysAtom_=void 0,this.changeListeners_=void 0,this.interceptors_=void 0,this.proxy_=void 0,this.isPlainObject_=void 0,this.appliedAnnotations_=void 0,this.pendingKeys_=void 0,this.lazyComputedKeys_=void 0,this.lazyObservableKeys_=void 0,this.target_=s,this.values_=n,this.name_=r,this.defaultAnnotation_=u,this.keysAtom_=new Ci("ObservableObject.keys"),this.isPlainObject_=xi(this.target_)}var e=t.prototype;return e.getObservablePropValue_=function(n){var r,u,c=(r=(u=this.values_.get(n))!=null?u:this.materializeLazyComputed_(n))!=null?r:this.materializeLazyObservable_(n);return c.get()},e.materializeLazyComputed_=function(n){var r,u=(r=this.lazyComputedKeys_)==null?void 0:r.get(n);if(u){this.lazyComputedKeys_.delete(n),this.lazyComputedKeys_.size===0&&(this.lazyComputedKeys_=void 0);var c=u();return this.values_.set(n,c),c}},e.materializeLazyObservable_=function(n){var r,u=(r=this.lazyObservableKeys_)==null?void 0:r.get(n);if(u){this.lazyObservableKeys_.delete(n),this.lazyObservableKeys_.size===0&&(this.lazyObservableKeys_=void 0);var c=u();return this.values_.set(n,c),c}},e.setObservablePropValue_=function(n,r){var u,c,p=(u=(c=this.values_.get(n))!=null?c:this.materializeLazyComputed_(n))!=null?u:this.materializeLazyObservable_(n);if(p instanceof fa)return p.set(r),!0;if($a(this)){var _=La(this,{type:vs,object:this.proxy_||this.target_,name:n,newValue:r});if(!_)return null;r=_.newValue}if(r=p.prepareNewValue_(r),r!==Z.UNCHANGED){var h=is(this),f=!1,v=h||f?{type:vs,observableKind:"object",debugObjectName:this.name_,object:this.proxy_||this.target_,oldValue:p.value_,name:n,newValue:r}:null;p.setNewValue_(r),h&&ns(this,v)}return!0},e.get_=function(n){return Z.trackingDerivation&&!Ps(this.target_,n)&&this.has_(n),this.target_[n]},e.set_=function(n,r,u){return u===void 0&&(u=!1),Ps(this.target_,n)?this.values_.has(n)?this.setObservablePropValue_(n,r):u?Reflect.set(this.target_,n,r):(this.target_[n]=r,!0):this.extend_(n,{value:r,enumerable:!0,writable:!0,configurable:!0},this.defaultAnnotation_,u)},e.has_=function(n){if(!Z.trackingDerivation)return n in this.target_;this.pendingKeys_||(this.pendingKeys_=new Map);var r=this.pendingKeys_.get(n);return r||(r=new An(n in this.target_,bu,"ObservableObject.key?",!1),this.pendingKeys_.set(n,r)),r.get()},e.make_=function(n,r){if(r===!0&&(r=this.defaultAnnotation_),r!==!1){if(!(n in this.target_)){var u;if((u=this.target_[fs])!=null&&u[n])return;Fe(1,r.annotationType_,this.name_+"."+n.toString())}for(var c=this.target_;c&&c!==hu;){var p=_u(c,n);if(p){var _=r.make_(this,n,p,c);if(_===0)return;if(_===1)break}c=Object.getPrototypeOf(c)}Hy(this,r,n)}},e.extend_=function(n,r,u,c){if(c===void 0&&(c=!1),u===!0&&(u=this.defaultAnnotation_),u===!1)return this.defineProperty_(n,r,c);var p=u.extend_(this,n,r,c);return p&&Hy(this,u,n),p},e.defineProperty_=function(n,r,u){u===void 0&&(u=!1),this.keysAtom_;try{qa();var c=this.delete_(n);if(!c)return c;if($a(this)){var p=La(this,{object:this.proxy_||this.target_,name:n,type:ji,newValue:r.value});if(!p)return null;var _=p.newValue;r.value!==_&&(r=Tn({},r,{value:_}))}if(u){if(!Reflect.defineProperty(this.target_,n,r))return!1}else hs(this.target_,n,r);this.notifyPropertyAddition_(n,r.value)}finally{Oa()}return!0},e.defineObservableProperty_=function(n,r,u,c){c===void 0&&(c=!1),this.keysAtom_;try{qa();var p=this.delete_(n);if(!p)return p;if($a(this)){var _=La(this,{object:this.proxy_||this.target_,name:n,type:ji,newValue:r});if(!_)return null;r=_.newValue}var h=Gy(n),f={configurable:Z.safeDescriptors?this.isPlainObject_:!0,enumerable:!0,get:h.get,set:h.set};if(c){if(!Reflect.defineProperty(this.target_,n,f))return!1}else hs(this.target_,n,f);var v=new An(r,u,"ObservableObject.key",!1);this.values_.set(n,v),this.notifyPropertyAddition_(n,v.value_)}finally{Oa()}return!0},e.defineComputedProperty_=function(n,r,u){u===void 0&&(u=!1),this.keysAtom_;try{qa();var c=this.delete_(n);if(!c)return c;if($a(this)){var p=La(this,{object:this.proxy_||this.target_,name:n,type:ji,newValue:void 0});if(!p)return null}r.name||(r.name="ObservableObject.key"),r.context=this.proxy_||this.target_;var _=Gy(n),h={configurable:Z.safeDescriptors?this.isPlainObject_:!0,enumerable:!1,get:_.get,set:_.set};if(u){if(!Reflect.defineProperty(this.target_,n,h))return!1}else hs(this.target_,n,h);this.values_.set(n,new fa(r)),this.notifyPropertyAddition_(n,void 0)}finally{Oa()}return!0},e.delete_=function(n,r){if(r===void 0&&(r=!1),this.keysAtom_,!Ps(this.target_,n))return!0;if($a(this)){var u=La(this,{object:this.proxy_||this.target_,name:n,type:Fy});if(!u)return null}try{var c;qa();var p=is(this),_=!1,h=this.values_.get(n),f=void 0;if(!h&&(p||_)){var v;f=(v=_u(this.target_,n))==null?void 0:v.value}if(r){if(!Reflect.deleteProperty(this.target_,n))return!1}else delete this.target_[n];if(h&&(this.values_.delete(n),h instanceof An&&(f=h.value_),Ty(h)),this.keysAtom_.reportChanged(),(c=this.pendingKeys_)==null||(c=c.get(n))==null||c.set(n in this.target_),p||_){var k={type:Fy,observableKind:"object",object:this.proxy_||this.target_,debugObjectName:this.name_,oldValue:f,name:n};p&&ns(this,k)}}finally{Oa()}return!0},e.observe_=function(n,r){return Pr(this,n)},e.intercept_=function(n){return Br(this,n)},e.notifyPropertyAddition_=function(n,r){var u,c=is(this),p=!1;if(c||p){var _=c||p?{type:ji,observableKind:"object",debugObjectName:this.name_,object:this.proxy_||this.target_,name:n,newValue:r}:null;c&&ns(this,_)}(u=this.pendingKeys_)==null||(u=u.get(n))==null||u.set(!0),this.keysAtom_.reportChanged()},e.ownKeys_=function(){return this.keysAtom_.reportObserved(),vu(this.target_)},e.keys_=function(){return this.keysAtom_.reportObserved(),Object.keys(this.target_)},t})();function So(t,e){var s;if(Ps(t,he))return t;var n=(s=e==null?void 0:e.name)!=null?s:"ObservableObject",r=new Uy(t,new Map,String(n),v1(e));return yu(t,he,r),t}var gS=jn("ObservableObjectAdministration",Uy);function Gy(t){return Wy[t]||(Wy[t]={get:function(){return this[he].getObservablePropValue_(t)},set:function(s){return this[he].setObservablePropValue_(t,s)}})}function Ou(t){return fu(t)?gS(t[he]):!1}function Hy(t,e,s){var n;(n=t.target_[fs])==null||delete n[s]}var _S=Yy(0),hS=(function(){var t=!1,e={};return Object.defineProperty(e,"0",{set:function(){t=!0}}),Object.create(e)[0]=1,t===!1})(),zd=0,Vy=function(){};function fS(t,e){Object.setPrototypeOf?Object.setPrototypeOf(t.prototype,e):t.prototype.__proto__!==void 0?t.prototype.__proto__=e:t.prototype=e}fS(Vy,Array.prototype);var Nd=(function(t){function e(n,r,u,c){var p;return u===void 0&&(u="ObservableArray"),c===void 0&&(c=!1),p=t.call(this)||this,Mn(function(){var _=new Ad(u,r,c,!0);_.proxy_=p,ay(p,he,_),n&&n.length&&p.spliceWithArray(0,0,n),hS&&Object.defineProperty(p,"0",_S)}),p}gd(e,t);var s=e.prototype;return s.concat=function(){this[he].atom_.reportObserved();for(var r=arguments.length,u=new Array(r),c=0;c<r;c++)u[c]=arguments[c];return Array.prototype.concat.apply(this.slice(),u.map(function(p){return Iu(p)?p.slice():p}))},s[Symbol.iterator]=function(){var n=this,r=0;return Ed({next:function(){return r<n.length?{value:n[r++],done:!1}:{done:!0,value:void 0}}})},xo(e,[{key:"length",get:function(){return this[he].getArrayLength_()},set:function(r){this[he].setArrayLength_(r)}},{key:Symbol.toStringTag,get:function(){return"Array"}}])})(Vy);Object.entries(Eu).forEach(function(t){var e=t[0],s=t[1];e!=="concat"&&yu(Nd.prototype,e,s)});function Yy(t){return{enumerable:!1,configurable:!0,get:function(){return this[he].get_(t)},set:function(s){this[he].set_(t,s)}}}function yS(t){hs(Nd.prototype,""+t,Yy(t))}function Qy(t){if(t>zd){for(var e=zd;e<t+100;e++)yS(e);zd=t}}Qy(1e3);function vS(t,e,s){return new Nd(t,e,s)}function $u(t,e){if(typeof t=="object"&&t!==null){if(Iu(t))return e!==void 0&&Fe(23),t[he].atom_;if(ks(t))return t.atom_;if(Nn(t)){if(e===void 0)return t.keysAtom_;var s=t.data_.get(e)||t.hasMap_.get(e);return s||Fe(25,e,Md(t)),s}if(Ou(t)){var n,r;if(!e)return Fe(26);var u=t[he],c=(n=(r=u.values_.get(e))!=null?r:u.materializeLazyComputed_(e))!=null?n:u.materializeLazyObservable_(e);return c||Fe(27,e,Md(t)),c}if(hd(t)||Tu(t)||Mu(t))return t}else if(ss(t)&&Mu(t[he]))return t[he];Fe(28)}function kS(t,e){if(t||Fe(29),hd(t)||Tu(t)||Mu(t)||Nn(t)||ks(t))return t;if(t[he])return t[he];Fe(24,t)}function Md(t,e){var s;if(e!==void 0)s=$u(t,e);else{if(jo(t))return t.name;Ou(t)||Nn(t)||ks(t)?s=kS(t):s=$u(t)}return s.name_}function Mn(t){var e=zn(),s=kd(!0);qa();try{return t()}finally{Oa(),bd(s),Ws(e)}}var Ky=hu.toString;function Zy(t,e,s){return s===void 0&&(s=-1),Rd(t,e,s)}function Rd(t,e,s,n,r){if(t===e)return t!==0||1/t===1/e;if(t==null||e==null)return!1;if(t!==t)return e!==e;var u=typeof t;if(u!=="function"&&u!=="object"&&typeof e!="object")return!1;var c=Ky.call(t);if(c!==Ky.call(e))return!1;switch(c){case"[object RegExp]":case"[object String]":return""+t==""+e;case"[object Number]":return+t!=+t?+e!=+e:+t==0?1/+t===1/e:+t==+e;case"[object Date]":case"[object Boolean]":return+t==+e;case"[object Symbol]":return typeof Symbol<"u"&&Symbol.valueOf.call(t)===Symbol.valueOf.call(e);case"[object Map]":case"[object Set]":s>=0&&s++;break}t=Xy(t),e=Xy(e);var p=c==="[object Array]";if(!p){if(typeof t!="object"||typeof e!="object")return!1;var _=t.constructor,h=e.constructor;if(_!==h&&!(ss(_)&&_ instanceof _&&ss(h)&&h instanceof h)&&"constructor"in t&&"constructor"in e)return!1}if(s===0)return!1;s<0&&(s=-1),n=n||[],r=r||[];for(var f=n.length;f--;)if(n[f]===t)return r[f]===e;if(n.push(t),r.push(e),p){if(f=t.length,f!==e.length)return!1;for(;f--;)if(!Rd(t[f],e[f],s-1,n,r))return!1}else{var v=Object.keys(t),k=v.length;if(Object.keys(e).length!==k)return!1;for(var x=0;x<k;x++){var N=v[x];if(!(Ps(e,N)&&Rd(t[N],e[N],s-1,n,r)))return!1}}return n.pop(),r.pop(),!0}function Xy(t){return Iu(t)?t.slice():wo(t)||Nn(t)||Bs(t)||ks(t)?Array.from(t.entries()):t}var Jy,bS=gu(),wS=((Jy=bS.Iterator)==null?void 0:Jy.prototype)||{};function Ed(t){return t[Symbol.iterator]=xS,Object.assign(Object.create(wS),t)}function xS(){return this}if(["Symbol","Map","Set"].forEach(function(t){var e=gu();typeof e[t]>"u"&&Fe("MobX requires global '"+t+"' to be available or polyfilled")}),typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__=="object"&&__MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({spy:O1,extras:{getDebugName:Md},$mobx:he}),!T.useState)throw new Error("mobx-react-lite requires React with Hooks support");if(!Et)throw new Error("mobx-react-lite@3 requires mobx at least version 6 to be available");function CS(t){t()}function jS(t){t||(t=CS),Z1({reactionScheduler:t})}function TS(t){return J1(t)}var DS=1e4,SS=1e4,AS=(function(){function t(e){var s=this;Object.defineProperty(this,"finalize",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"registrations",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"sweepTimeout",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"sweep",{enumerable:!0,configurable:!0,writable:!0,value:function(n){n===void 0&&(n=DS),clearTimeout(s.sweepTimeout),s.sweepTimeout=void 0;var r=Date.now();s.registrations.forEach(function(u,c){r-u.registeredAt>=n&&(s.finalize(u.value),s.registrations.delete(c))}),s.registrations.size>0&&s.scheduleSweep()}}),Object.defineProperty(this,"finalizeAllImmediately",{enumerable:!0,configurable:!0,writable:!0,value:function(){s.sweep(0)}})}return Object.defineProperty(t.prototype,"register",{enumerable:!1,configurable:!0,writable:!0,value:function(e,s,n){this.registrations.set(n,{value:s,registeredAt:Date.now()}),this.scheduleSweep()}}),Object.defineProperty(t.prototype,"unregister",{enumerable:!1,configurable:!0,writable:!0,value:function(e){this.registrations.delete(e)}}),Object.defineProperty(t.prototype,"scheduleSweep",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.sweepTimeout===void 0&&(this.sweepTimeout=setTimeout(this.sweep,SS))}}),t})(),zS=typeof FinalizationRegistry<"u"?FinalizationRegistry:AS,Id=new zS(function(t){var e;(e=t.reaction)===null||e===void 0||e.dispose(),t.reaction=null}),qd={exports:{}},Od={};/**
|
||
* @license React
|
||
* use-sync-external-store-shim.production.js
|
||
*
|
||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||
*
|
||
* This source code is licensed under the MIT license found in the
|
||
* LICENSE file in the root directory of this source tree.
|
||
*/var ev;function NS(){if(ev)return Od;ev=1;var t=uu();function e(v,k){return v===k&&(v!==0||1/v===1/k)||v!==v&&k!==k}var s=typeof Object.is=="function"?Object.is:e,n=t.useState,r=t.useEffect,u=t.useLayoutEffect,c=t.useDebugValue;function p(v,k){var x=k(),N=n({inst:{value:x,getSnapshot:k}}),q=N[0].inst,I=N[1];return u(function(){q.value=x,q.getSnapshot=k,_(q)&&I({inst:q})},[v,x,k]),r(function(){return _(q)&&I({inst:q}),v(function(){_(q)&&I({inst:q})})},[v]),c(x),x}function _(v){var k=v.getSnapshot;v=v.value;try{var x=k();return!s(v,x)}catch{return!0}}function h(v,k){return k()}var f=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?h:p;return Od.useSyncExternalStore=t.useSyncExternalStore!==void 0?t.useSyncExternalStore:f,Od}var tv;function MS(){return tv||(tv=1,qd.exports=NS()),qd.exports}var RS=MS();function av(t){t.reaction=new Fs("observer".concat(t.name),function(){var e;t.stateVersion=Symbol(),(e=t.onStoreChange)===null||e===void 0||e.call(t)})}function ES(t,e){e===void 0&&(e="observed");var s=wt.useRef(null);if(!s.current){var n={reaction:null,onStoreChange:null,stateVersion:Symbol(),name:e,subscribe:function(p){return Id.unregister(n),n.onStoreChange=p,n.reaction||(av(n),n.stateVersion=Symbol()),function(){var _;n.onStoreChange=null,(_=n.reaction)===null||_===void 0||_.dispose(),n.reaction=null}},getSnapshot:function(){return n.stateVersion}};s.current=n}var r=s.current;r.reaction||(av(r),Id.register(s,r,r)),wt.useDebugValue(r.reaction,TS),RS.useSyncExternalStore(r.subscribe,r.getSnapshot,r.getSnapshot);var u,c;if(r.reaction.track(function(){try{u=t()}catch(p){c=p}}),c)throw c;return u}var $d,Ld,sv=typeof Symbol=="function"&&Symbol.for,IS=(Ld=($d=Object.getOwnPropertyDescriptor(function(){},"name"))===null||$d===void 0?void 0:$d.configurable)!==null&&Ld!==void 0?Ld:!1,iv=sv?Symbol.for("react.forward_ref"):typeof T.forwardRef=="function"&&T.forwardRef(function(t){return null}).$$typeof,nv=sv?Symbol.for("react.memo"):typeof T.memo=="function"&&T.memo(function(t){return null}).$$typeof;function U(t,e){var s;if(nv&&t.$$typeof===nv)throw new Error("[mobx-react-lite] You are trying to use `observer` on a function component wrapped in either another `observer` or `React.memo`. The observer already applies 'React.memo' for you.");var n=(s=void 0)!==null&&s!==void 0?s:!1,r=t,u=t.displayName||t.name;if(iv&&t.$$typeof===iv&&(n=!0,r=t.render,typeof r!="function"))throw new Error("[mobx-react-lite] `render` property of ForwardRef was not a function");var c=function(p,_){return ES(function(){return r(p,_)},u)};return c.displayName=t.displayName,IS&&Object.defineProperty(c,"name",{value:t.name,writable:!0,configurable:!0}),t.contextTypes&&(c.contextTypes=t.contextTypes),n&&(c=T.forwardRef(c)),c=T.memo(c),OS(t,c),c}var qS={$$typeof:!0,render:!0,compare:!0,type:!0,displayName:!0};function OS(t,e){Object.keys(t).forEach(function(s){qS[s]||Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(t,s))})}var Bd;jS(Df.unstable_batchedUpdates),Bd=Id.finalizeAllImmediately;class $S{constructor(){this.data={},this.hash=0,Et(this,{hash:ce,add:re})}add(e,s){this.data[e]=s,this.hash=Math.random()}addGroups(e){for(let s in e)this.data[s]=e[s];this.hash=Math.random()}get(e){return this.data[e]||void 0}has(e){const s=this.data[e];return Array.isArray(s)?s.length>0:!!s}}const Ct=new $S;Ct.add("commits",[]),Ct.add("gitLog",window.report||[]),console.log(Ct);const LS={ar:"ar-SA",de:"de-DE",en:"en-US",es:"es-ES",fr:"fr-FR",he:"he-IL",hi:"hi-IN",ja:"ja-JP",ko:"ko-KR",pt:"pt-PT",ru:"ru-RU",zh:"zh-CN"};function Wr(){var e;const t=((e=window==null?void 0:window.localization)==null?void 0:e.language)||"ru";return LS[t]||t||"en-US"}function Rn(t){return t<10?`0${t}`:t}function BS(t,e){if(!e)return t>>0;const s=10**e;return(t*s>>0)/s}function Kt(t){if(t===1/0||t===-1/0)return"—";const s=(t<0?t*-1:t)<15?1:0;return BS(t,s)}const _t=1440*60*1e3,PS=[_t*4,_t*5,_t*6,0,_t,_t*2,_t*3],ov=new Map;function ls(t,e){var c;const s=((c=window==null?void 0:window.localization)==null?void 0:c.language)||"ru",n=ov.get(`${s}${t}${e}`);if(n)return n;const u=new Date(PS[t]).toLocaleString(Wr(),{weekday:e||"long"});return ov.set(`${s}${t}${e}`,u),u}function Ao(t){const e=new Date(t),s=e.getDay()-1;return[e.toLocaleString(Wr(),{day:"numeric",month:"long",year:"numeric"}),ls(s<0?6:s,"long")]}function Ti(t,e){return t?new Date(t).toLocaleString(Wr(),e||{day:"numeric",month:"long",year:"numeric"}):""}function oe(t){return Ti(t,{day:"numeric",month:"long",year:"numeric"})}function WS(t){return Ti(t,{day:"numeric",month:"long"})}function FS(t){return Ti(t,{hour:"numeric",minute:"numeric"})}function Fr(t){return Ti(t,{day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"numeric"})}function Pd(t){if(!t&&t!==0)return"";const e=new Date(t);return Number.isNaN(e.getTime())?"":`${Rn(e.getDate())}.${Rn(e.getMonth()+1)}.${e.getFullYear()}`}function US({from:t,to:e}){return t&&e?`${WS(t)} — ${oe(e)}`:`${oe(t)}${oe(e)}`}function GS(){const t=new Intl.RelativeTimeFormat(Wr(),{numeric:"always",style:"long"});return(e,s)=>t.format(e,s).split(" ").slice(1).join(" ")}function Ur(t){const e=Math.floor(t/365),s=Math.floor(t/30),n=s-e*12,r=t-s*30,u=GS(),c=[];return e&&c.push(u(e,"year")),n&&c.push(u(n,"month")),r&&e<1&&c.push(u(r,"day")),c.join(" ")}function lv(t){const e=t.match(/^(\d{4})-W(\d{2})$/);if(!e)return t;const s=parseInt(e[1],10),n=parseInt(e[2],10),r=new Date(Date.UTC(s,0,4)),c=4-(r.getUTCDay()||7),_=r.getTime()+(c-3)*864e5+(n-1)*7*864e5,h=_+6*864e5+86399;return US({from:_,to:h})}const rv=30,HS=7;class VS{constructor(){this.config={},this.workDaysInMonth=22,Et(this,{config:ce,updateConfig:re,updateConfigProperty:re})}updateConfig(e){this.config=e;const s=this.config.workDays.filter(Boolean).length;this.workDaysInMonth=Math.ceil(rv/HS*s)}updateConfigProperty(e,s){this.updateConfig({...this.config,[e]:s})}getMiddleSalaryInMonth(){return this.config.middleSalaryInMonth}getMiddleSalaryInDay(){return this.getMiddleSalaryInMonth()/this.workDaysInMonth}getMiddleVacationPayInDay(){return this.getMiddleSalaryInMonth()/rv}}const de=new VS;let mv={};function YS(t){mv=t??{}}function QS(t,e){return e==="USD"||!t?t:(mv[e]||1)*t}function zo(t,e){var n;const s=((n=de==null?void 0:de.config)==null?void 0:n.currency)||"USD";return QS(t||0,s).toLocaleString(Wr(),{style:"currency",currency:s,currencyDisplay:"symbol",maximumFractionDigits:0,...e||{}})}function ct(t,e=1){return zo(t,{notation:"compact",maximumFractionDigits:e})}function Lu(t){var n;const e=t||"";return`${((n=e==null?void 0:e[0])==null?void 0:n.toUpperCase())||""}${(e==null?void 0:e.slice(1))||""}`}class Lt{constructor(e){Pe(this,Bg);this.valueAndCount=new Map,(e||e===0)&&this.update(e)}update(e,s){const n=this.valueAndCount.get(e);n?n.count+=1:this.valueAndCount.set(e,{value:e,count:s||1})}clear(){this.valueAndCount=new Map}get(e){let s=0,n=0,r=Array.from(this.valueAndCount.values());return r.length?(e&&r.length>=20&&(r=e(r)),r.forEach(u=>{n+=u.value*u.count,s+=u.count}),n&&s?n/s:0):0}}Bg=new WeakSet,m5=function(e){e.sort((r,u)=>u.count-r.count);const n=(e.length-1)*.9>>0;return e.slice(0,n)};function KS(t,e){return s=>{s.sort((p,_)=>{const h=_.count-p.count;return h||(_.value-p.value)*1});const r=s.length-1,u=(100-t)/100,c=r*u>>0;return s.slice(0,c)}}function Ce(t,e,s){e&&(t[e]=(t[e]||0)+(s??1))}function uv(t,e){return t?{[t]:e}:{}}function En(t,e,s){const n=e-t;if(n<_t)return .5;const r=n/_t,u=r>>0,c=r-u>.5?1:.5,p=u+c;return s&&p>s?p-s:p}class bs{constructor(e,s){this.min=1/0,this.max=-1/0,this.minData=void 0,this.maxData=void 0,(e||e===0)&&this.update(e,s)}update(e,s){!e&&e!==0||(this.min>e&&(this.min=e,this.minData=s),this.max<e&&(this.max=e,this.maxData=s))}clear(){this.min=1/0,this.max=-1/0,this.minData=void 0,this.maxData=void 0}}function In(t,e){return e>t?Math.ceil((e-t)/_t):1}function Gr(t,e){return new Map(t?[[t,1]]:[])}function Hr(t,e,s){if(!e)return;const n=t.get(e)||0;t.set(e,n+1)}function va(t){return new Set(t?[t]:[])}function ka(t,e){e&&t.add(e)}const cv=247,ZS=(365-cv)/cv;function XS(t,e){const n=Math.floor(e*ZS)-t+1;return n>0?n:0}function JS(t,e,s,n){const r=t*100/(t+e),u=/[^a-z]bot[^a-z]/gim.test(n);return s<20||r<15||t<10||u}function eA(t){const e=[[],[],[]];return t.forEach(s=>{s.isStaff?e[2].push(s.author):s.isDismissed?e[1].push(s.author):e[0].push(s.author)}),e}function tA(t,e){const s=(t.isStaff?10:0)+(t.isDismissed?5:0),n=(e.isStaff?10:0)+(e.isDismissed?5:0),r=s-n;if(r)return r;let u=e.totalTasks-t.totalTasks;return u||(u=e.commits-t.commits,u)?u:e.lastCommit-t.lastCommit}class aA{constructor(e){this.commitsByDayAndHour=[],this.commitsByHour=[],this.commitsByDayAndHour=new Array(7).fill(1).map(()=>new Array(24).fill(0)),this.commitsByHour=new Array(24).fill(0),this.addCommit(e)}addCommit(e){this.commitsByDayAndHour[e.day][e.hours]+=1,this.commitsByHour[e.hours]+=1}getTotalInfo(){return[this.commitsByDayAndHour,this.commitsByHour]}}let sA=(Ib=class{constructor(e){Pe(this,Uo);this.commits=new Map,this.addCommit(e)}addCommit(e){if(!e.task)return;const s=this.commits.get(e.task);s?V(this,Uo,WC).call(this,s,e):V(this,Uo,FC).call(this,e)}getTotalInfo(e){const s=Array.from(this.commits.values()),n=s.length,r=new Lt,u=new Lt,c=new Lt;s.forEach(_=>{r.update(_.changes),u.update(_.commits),c.update(_.files.size)}),this.commits.clear();const p=KS(10);return{totalTasks:n,totalTaskInDay:n/e,totalTaskInChanges:r.get(),totalTaskInCommits:u.get(p),totalTaskInFiles:c.get(p)}}},Uo=new WeakSet,WC=function(e,s){e.commits+=1,ka(e.days,s.timestamp),e.changes+=s.added+s.changes-s.removed,s.fileChanges.forEach(n=>{e.files.add(n.id)})},FC=function(e){const s=e.fileChanges.map(n=>n.id);this.commits.set(e.task,{commits:1,days:va(e.timestamp),changes:e.added+e.changes-e.removed,files:new Set(s)})},Ib),iA=(qb=class{constructor(e){Pe(this,Go);this.commits=new Map,this.addCommit(e)}addCommit(e){if(!e.company)return;const s=this.commits.get(e.company);s?V(this,Go,UC).call(this,s,e):V(this,Go,GC).call(this,e)}getTotalInfo(){const e=Array.from(this.commits.values());return this.commits.clear(),e}},Go=new WeakSet,UC=function(e,s){e.to=s.milliseconds},GC=function(e){this.commits.set(e.company,{title:e.company,from:e.milliseconds,to:e.milliseconds})},qb);class nA{constructor(){Pe(this,Ho);this.list=[],this.employment={},this.commits=new Map,this.totalInfo=[],this.totalInfoByName=new Map}clear(){this.list=[],this.commits.clear(),this.totalInfo=[],this.totalInfoByName.clear()}addCommit(e){const s=this.commits.get(e.author);s?V(this,Ho,VC).call(this,s,e):V(this,Ho,HC).call(this,e)}updateTotalInfo(e){const s=(e==null?void 0:e.milliseconds)-32*_t,n=de.getMiddleSalaryInMonth(),r=de.getMiddleSalaryInDay();this.totalInfo=Array.from(this.commits.values()).map(_=>{var Yt;const h=_.weekends.size,f=_.days.size+h,v=In(_.firstCommit,_.lastCommit),k=XS(f,v),x=JS(f,k,v,_.author),N=_.lastCommit<s,q=_.company.getTotalInfo(),I=((Yt=q[(q==null?void 0:q.length)-1])==null?void 0:Yt.title)||"";let F=h*r*2,se=Math.ceil(v/30)*n+F,te=f*r,ge=k*r;x&&(F=0,se=0,te=0,ge=0);const[Ie,De]=_.hour.getTotalInfo(),{totalTasks:ye,totalTaskInDay:Bt,totalTaskInChanges:ta,totalTaskInCommits:ps,totalTaskInFiles:aa}=_.tasks.getTotalInfo(f),rt={author:_.author,commits:_.commits,commitsByDayAndHour:Ie,commitsByHour:De,firstCommit:_.firstCommit,firstCommitTimestamp:_.firstCommitTimestamp,lastCommit:_.lastCommit,lastCommitTimestamp:_.lastCommitTimestamp,lastCommitTimezone:_.lastCommitTimezone,lastCompany:I,lastCountry:_.lastCountry,totalDays:v,totalDaysWithCommits:f,totalWeekendsDaysWithCommits:_.weekends.size,totalDaysWithoutCommits:k,emails:Array.from(_.emails),device:_.device,countries:_.country,companies:q,totalScopes:_.scopes.size,totalTasks:ye,totalTaskInDay:Bt,totalTaskInChanges:ta,totalTaskInCommits:ps,totalTaskInFiles:aa,types:Object.fromEntries(_.types.entries()),isStaff:x,isDismissed:N,totalMoney:se,totalMoneyWorked:te,totalMoneyLosses:ge,totalMoneyInWeekend:F,middleMessageLength:_.middleMessageLength.get(),maxMessageLength:_.maxMessageLength.max};return this.totalInfoByName.set(_.author,rt),rt}).sort(tA);const[u,c,p]=eA(this.totalInfo);this.employment={active:u,dismissed:c,staff:p},this.list=[...u,...c,...p],this.commits.clear()}}Ho=new WeakSet,HC=function(e){var r,u;const s=!((u=(r=de.config)==null?void 0:r.workDays)!=null&&u[e.day]),n=e.text.length||0;this.commits.set(e.author,{author:e.author,commits:1,firstCommit:e.milliseconds,lastCommit:e.milliseconds,firstCommitTimestamp:e.timestamp,lastCommitTimestamp:e.timestamp,lastCommitTimezone:e.timezone,days:va(s?void 0:e.timestamp),weekends:va(s?e.timestamp:void 0),tasks:new sA(e),types:Gr(e.type),hour:new aA(e),scopes:va(e.scope),emails:va(e.email),device:e.device,company:new iA(e),country:e.country?[{title:e.country,from:e.milliseconds,fromTimestamp:e.timestamp,fromTimezone:e.timezone}]:[],lastCountry:e.country,maxMessageLength:new bs(n),middleMessageLength:new Lt(n)})},VC=function(e,s){var u,c;e.commits+=1,e.lastCommit=s.milliseconds,e.lastCommitTimestamp=s.timestamp,e.lastCommitTimezone=s.timezone;const n=!((c=(u=de.config)==null?void 0:u.workDays)!=null&&c[s.day]);ka(n?e.weekends:e.days,s.timestamp),e.tasks.addCommit(s),Hr(e.types,s.type),e.hour.addCommit(s),ka(e.scopes,s.scope),ka(e.emails,s.email),e.device=s.device||e.device,e.company.addCommit(s),s.country&&e.lastCountry!==s.country&&(e.country.push({title:s.country,from:s.milliseconds,fromTimestamp:s.timestamp,fromTimezone:s.timezone}),e.lastCountry=s.country);const r=s.text.length||0;e.maxMessageLength.update(r),e.middleMessageLength.update(r)};const pv=["commits","totalTaskInDay","totalWeekendsDaysWithCommits","totalDaysWithCommits","totalMoney","totalMoneyLosses","totalMoneyWorked","totalMoneyInWeekend"];class oA{constructor(){this.totalInfo={commits:0,totalTaskInDay:0,totalWeekendsDaysWithCommits:0,totalDaysWithCommits:0,totalMoney:0,totalMoneyLosses:0,totalMoneyWorked:0,totalMoneyInWeekend:0,commitsByDayAndHour:[],commitsByDay:[]}}clear(){this.totalInfo={commits:0,totalTaskInDay:0,totalWeekendsDaysWithCommits:0,totalDaysWithCommits:0,totalMoney:0,totalMoneyLosses:0,totalMoneyWorked:0,totalMoneyInWeekend:0,commitsByDayAndHour:[],commitsByDay:[]}}updateTotalInfo(e){const s=Object.fromEntries(pv.map(u=>[u,0])),n=new Array(7).fill(1).map(()=>new Array(24).fill(0)),r=new Array(7).fill(0);e.totalInfo.forEach(u=>{pv.forEach(c=>{c==="totalTaskInDay"&&(u.isStaff||u.isDismissed)||(s[c]+=u[c]||0)}),u.commitsByDayAndHour.forEach((c,p)=>{c.forEach((_,h)=>{n[p][h]+=_,r[p]+=_})})}),this.totalInfo={commits:s.commits,totalTaskInDay:s.totalTaskInDay,totalWeekendsDaysWithCommits:s.totalWeekendsDaysWithCommits,totalDaysWithCommits:s.totalDaysWithCommits,totalMoney:s.totalMoney,totalMoneyLosses:s.totalMoneyLosses,totalMoneyWorked:s.totalMoneyWorked,totalMoneyInWeekend:s.totalMoneyInWeekend,commitsByDayAndHour:n,commitsByDay:r}}}let lA=(Ob=class{constructor(e){Pe(this,Vo);this.commits=new Map,this.addCommit(e)}addCommit(e){if(!e.author)return;const s=this.commits.get(e.author);s?V(this,Vo,YC).call(this,s,e):V(this,Vo,QC).call(this,e)}getTotalInfo(){let e=0,s=0;const n={},r={};return Array.from(this.commits.values()).forEach(u=>{e+=u.days.size,s+=1,n[u.author]=u.commits,r[u.author]=u.tasks.size}),{totalDays:e,totalAuthors:s,commitsByAuthor:n,tasksByAuthor:r}}},Vo=new WeakSet,YC=function(e,s){e.commits+=1,e.days.add(s.timestamp),s.task&&e.tasks.add(s.task)},QC=function(e){this.commits.set(e.author,{author:e.author,commits:1,days:new Set([e.timestamp]),tasks:new Set(e.task?[e.task]:[])})},Ob);class dv{constructor(){Pe(this,Yo);this.list=[],this.commits=new Map,this.totalInfo=[]}clear(){this.list=[],this.commits.clear(),this.totalInfo=[]}addCommit(e){const s=this.commits.get(e.scope);s?V(this,Yo,KC).call(this,s,e):V(this,Yo,ZC).call(this,e)}updateTotalInfo(){const e=de.getMiddleSalaryInDay();this.totalInfo=Array.from(this.commits.values()).filter(s=>s.commits>5).map(s=>{const{totalDays:n,totalAuthors:r,commitsByAuthor:u,tasksByAuthor:c}=s.authors.getTotalInfo();return{scope:s.scope,commits:s.commits,firstCommit:s.firstCommit,lastCommit:s.lastCommit,totalDaysWorked:s.days.size,totalDaysWorkedByAuthor:n,totalDays:In(s.firstCommit,s.lastCommit),totalTasks:s.tasks.size,totalAuthors:r,tasks:Array.from(s.tasks),types:Object.fromEntries(s.types.entries()),companies:Object.fromEntries(s.companies.entries()),commitsByAuthor:u,tasksByAuthor:c,cost:n*e}}).sort((s,n)=>n.commits-s.commits),this.list=this.totalInfo.map(s=>s.scope),this.commits.clear()}}Yo=new WeakSet,KC=function(e,s){e.commits+=1,e.lastCommit=s.milliseconds,e.days.add(s.timestamp),s.task&&e.tasks.add(s.task),Hr(e.types,s.type),Hr(e.companies,s.company),e.authors.addCommit(s)},ZC=function(e){this.commits.set(e.scope,{scope:e.scope,commits:1,firstCommit:e.milliseconds,lastCommit:e.milliseconds,days:new Set([e.timestamp]),tasks:new Set(e.task?[e.task]:[]),types:Gr(e.type),companies:Gr(e.company),authors:new lA(e)})};class rA{constructor(){Pe(this,Qo);this.list=[],this.commits={},this.totalInfo=[]}clear(){this.list=[],this.commits={},this.totalInfo=[]}addCommit(e){this.commits.hasOwnProperty(e.type)?V(this,Qo,XC).call(this,e):V(this,Qo,JC).call(this,e)}updateTotalInfo(){this.totalInfo=Object.values(this.commits).filter(e=>e==null?void 0:e.type).map(e=>({...e,tasks:e.tasks.size,days:e.days.size,daysByAuthorsTotal:Object.values(e.daysByAuthors).reduce((s,n)=>s+Object.keys(n).length,0)})).sort((e,s)=>s.days-e.days),this.list=this.totalInfo.map(e=>e.type)}}Qo=new WeakSet,XC=function(e){const s=this.commits[e.type];s.commits+=1,s.days.set(e.timestamp,!0),s.tasks.set(e.task,!0),Ce(s.commitsByAuthors,e.author),s.daysByAuthors[e.author]||(s.daysByAuthors[e.author]={}),Ce(s.daysByAuthors[e.author],e.timestamp)},JC=function(e){this.commits[e.type]={type:e.type,commits:1,days:new Map([[e.timestamp,!0]]),tasks:new Map([[e.task,!0]]),commitsByAuthors:uv(e.author,!0),daysByAuthors:{[e.author]:uv(e.timestamp,!0)}}};function gv(){return{allCommitsByTimestamp:[],commitsByTimestampCounter:new bs,changesByTimestampCounter:new bs,tasksByTimestampCounter:new bs,workByDay:[],weekendPayment:0}}class mA{constructor(){Pe(this,ja);this.commits=new Map,this.commitsByAuthor=new Map,this.totalInfo=gv(),this.totalInfoByName={},this.clear()}clear(){this.commits.clear(),this.commitsByAuthor.clear(),this.totalInfo=gv(),this.totalInfoByName={}}addCommit(e){const s=this.commits.get(e.timestamp);s?V(this,ja,lf).call(this,s,e):this.commits.set(e.timestamp,V(this,ja,rf).call(this,e));let n=this.commitsByAuthor.get(e.author);n||(n=new Map,this.commitsByAuthor.set(e.author,n));const r=n.get(e.timestamp);r?V(this,ja,lf).call(this,r,e):n.set(e.timestamp,V(this,ja,rf).call(this,e))}updateTotalInfo(e){this.totalInfo=V(this,ja,mf).call(this,this.commits),this.totalInfo.weekendPayment=0;for(let s of this.commitsByAuthor.keys()){const n=V(this,ja,mf).call(this,this.commitsByAuthor.get(s));n.weekendPayment=V(this,ja,ej).call(this,n,e.totalInfoByName.get(s)),this.totalInfoByName[s||""]=n,this.totalInfo.weekendPayment+=n.weekendPayment}}}ja=new WeakSet,lf=function(e,s){e.commits+=1,e.addedAndChanges+=s.added+s.changes,Ce(e.tasks,s.task),e.tasksByAuthor[s.author]||(e.tasksByAuthor[s.author]={}),e.tasksByAuthor[s.author][s.task]?e.tasksByAuthor[s.author][s.task].push(s):e.tasksByAuthor[s.author][s.task]=[s],e.messages.push(s.message)},rf=function(e){return{commits:1,day:e.day,dayInMonth:e.dayInMonth,month:e.month,year:e.year,week:e.week,timestamp:e.timestamp,milliseconds:e.milliseconds,tasks:{[e.task]:1},tasksByAuthor:{[e.author]:{[e.task]:[e]}},addedAndChanges:e.added+e.changes,messages:[e.message]}},mf=function(e){const s=Array.from(e.values()),n=new bs,r=new bs,u=new bs,c=new Array(7).fill(0);return s.forEach(p=>{p.tasksInDay=Object.keys(p.tasks).length,c[p.day]+=1,n.update(p.commits,p),r.update(p.addedAndChanges,p),u.update(p.tasksInDay,p)}),{allCommitsByTimestamp:s,commitsByTimestampCounter:n,changesByTimestampCounter:r,tasksByTimestampCounter:u,workByDay:c,weekendPayment:0}},ej=function(e,s){if(!s||s.isStaff)return 0;const r=de.getMiddleSalaryInMonth()/22*2,u=e.workByDay[5]*r,c=e.workByDay[6]*r;return u+c};class uA{constructor(e){Pe(this,Ko);this.commits=new Map,this.maxCommitsInDay=0,this.addCommit(e)}addCommit(e){const s=this.commits.get(e.dayInMonth);s?V(this,Ko,tj).call(this,s,e):V(this,Ko,aj).call(this,e)}getTotalInfo(){return Array.from(this.commits.values())}}Ko=new WeakSet,tj=function(e,s){e.commitsNumber+=1,Hr(e.commitsNumberByType,s.type),Hr(e.commitsNumberByAuthor,s.author),e.commitsNumber>this.maxCommitsInDay&&(this.maxCommitsInDay=e.commitsNumber)},aj=function(e){this.commits.set(e.dayInMonth,{commitsNumber:1,dayInMonth:e.dayInMonth,timestamp:e.timestamp,commitsNumberByType:Gr(e.type),commitsNumberByAuthor:Gr(e.author)})};class cA{constructor(){Pe(this,Qi);this.commits=new Map,this.totalInfo=[],this.maxCommitsInDay=0}clear(){this.commits.clear(),this.totalInfo=[],this.maxCommitsInDay=0}addCommit(e){const s=V(this,Qi,sj).call(this,e),n=this.commits.get(s);n?V(this,Qi,ij).call(this,n,e):V(this,Qi,nj).call(this,e,s)}updateTotalInfo(e){this.totalInfo=Array.from(this.commits.values()).map(s=>{const n=s.days.getTotalInfo(),r=s.tasksNumber.size,u=Array.from(s.usersNumber).filter(c=>{var p;return!((p=e.totalInfoByName.get(c))!=null&&p.isStaff)}).length;return{id:s.id,month:s.month,year:s.year,milliseconds:s.milliseconds,date:new Date(s.milliseconds),days:n,authors:s.usersNumber,totalTasksNumber:r,totalUsersNumber:u}}).sort((s,n)=>s.milliseconds-n.milliseconds),this.commits.clear()}}Qi=new WeakSet,sj=function(e){return`${e.year}-${e.month}`},ij=function(e,s){ka(e.usersNumber,s.author),ka(e.tasksNumber,s.task),e.days.addCommit(s),e.days.maxCommitsInDay>this.maxCommitsInDay&&(this.maxCommitsInDay=e.days.maxCommitsInDay)},nj=function(e,s){this.commits.set(s,{id:s,month:e.month,year:e.year,milliseconds:e.milliseconds,date:new Date(e.milliseconds),days:new uA(e),tasksNumber:va(e.task),usersNumber:va(e.author)})};class Wd{constructor(e){this.statistic={commits:1,tasks:e.task?new Set([e.task]):new Set,timestamp:e.timestamp?new Set([e.timestamp]):new Set,types:e.type?new Map([[e.type,1]]):new Map,added:e.added||0,changes:e.changes||0,removed:e.removed||0}}update(e){const s=this.statistic;s.commits+=1,e.task&&s.tasks.add(e.task),e.timestamp&&s.timestamp.add(e.timestamp),e.type&&s.types.set(e.type,(s.types.get(e.type)||0)+1),s.added+=e.added,s.changes+=e.changes,s.removed+=e.removed}getTotalInfo(e){const s=this.statistic,n=s.timestamp.size,r=e-n;return{commits:s.commits,totalTasks:s.tasks.size,totalDays:n,totalDaysWithoutCommits:r<0?0:r,types:Object.fromEntries(s.types),added:s.added,changes:s.changes,removed:s.removed,totalChanges:s.added+s.changes+s.removed}}}class pA{constructor(){Pe(this,Zo);this.commits=new Map,this.totalInfo=[],this.clear()}clear(){this.commits.clear(),this.totalInfo=[]}addCommit(e){const s=this.commits.get(e.week);s?V(this,Zo,oj).call(this,s,e):V(this,Zo,lj).call(this,e)}updateTotalInfo(){var s,n,r,u;const e=((u=(r=(n=(s=de.config)==null?void 0:s.workDays)==null?void 0:n.filter)==null?void 0:r.call(n,c=>c))==null?void 0:u.length)||5;this.totalInfo=Array.from(this.commits.values()).map((c,p)=>{const _=c.common.getTotalInfo(e),h={};let f=0;const v=Array.from(c.authors).map(([k,x])=>{const N=x.getTotalInfo(e);return h[k]=N.totalTasks,f+=N.totalDaysWithoutCommits,[k,N]});return{week:c.week,weekIndex:p,..._,authors:Object.fromEntries(v),tasksByAuthor:h,totalDaysWithoutCommits:f,totalAuthors:v.length}}).reverse()}}Zo=new WeakSet,oj=function(e,s){if(e.common.update(s),!s.author)return;const n=e.authors.get(s.author);n?n.update(s):e.authors.set(s.author,new Wd(s))},lj=function(e){this.commits.set(e.week,{week:e.week,common:new Wd(e),authors:e.author?new Map([[e.author,new Wd(e)]]):new Map})};const Fd=new Set(["1234","12345","123456","1234567","12345678"]);function dA(){for(let t=3;t<7;t++)for(let e=1;e<9;e++){const s=new Array(t).fill(e).join("");Fd.add(s);const n=new Array(t).fill("0");n[0]=e,Fd.add(n.join(""))}}dA();class gA{constructor(){this.alreadyAdded=new Set,this.totalInfoByName=new Map}clear(){this.alreadyAdded.clear(),this.totalInfoByName.clear()}addCommit(e){if(!Fd.has(`${e.taskNumber}`)||this.alreadyAdded.has(e.taskNumber))return;this.alreadyAdded.add(e.taskNumber);const s=this.totalInfoByName.get(e.author)||[];s.push(e),this.totalInfoByName.set(e.author,s)}}function _v(t,e,s,n){const r=[e,s,n].flat().filter(u=>u).reduce((u,c)=>u.replaceAll(c,""),t||"").replace(/([)(}{:#_-])|([\[\]])/gm,"").replace(/\s{2,}/g," ").trim();return r.length>150?`${r.substring(0,140)}...`:r}function hv(t,e){return t.findIndex(s=>s>e)}function _A(t,e){const s=hv(t,e);return t[s-1]||e}function hA(t,e){const s=hv(t,e);return t[s]||e}class fA{constructor(){this.uniqIndex=1,this.totalInfo=[],this.totalInfoByName=new Map}clear(){this.uniqIndex=1,this.totalInfo=[],this.totalInfoByName.clear()}addCommit(e){if(!e.prId)return;const s=_v(e.message,e.task,[e.type],[e.scope]);this.totalInfo.push({prId:e.prId,prExternalId:e.prExternalId,branch:e.branch,description:s||e.branch,dateMerge:e.milliseconds,dateMergeFull:e.date,dateCreate:e.milliseconds,dateMergeYear:e.year,daysInReview:1,daysWorkOnTask:1,author:e.author,task:e.task,taskCode:e.taskCode,company:e.company,types:[],scope:[]})}updateTotalInfo(e){this.totalInfo.forEach(s=>{this.totalInfoByName.set(s.prId,s);const n=e.totalInfoByName.get(s.task);if(!n)return;s.dateCreate=n.lastCommit<s.dateMerge?n.lastCommit:_A(n.milliseconds,s.dateMerge),s.daysInReview=En(s.dateCreate,s.dateMerge,1),n.prIds.push(s.prId),s.types=n.types,s.scope=n.scope;const r=n.prIds[n.prIds.length-2];if(r){const u=this.totalInfoByName.get(r),c=hA(n.milliseconds,u.dateMerge);s.daysWorkOnTask=En(c,s.dateCreate)}else s.daysWorkOnTask=En(n.firstCommit,s.dateCreate)}),this.totalInfo.sort((s,n)=>n.dateMerge-s.dateMerge)}}class yA{constructor(){Pe(this,Xo);this.commits=new Map,this.totalInfo=[],this.totalInfoByName=new Map,this.longTaskByAuthor={}}clear(){this.commits.clear(),this.totalInfo=[],this.totalInfoByName.clear(),this.longTaskByAuthor={}}addCommit(e){if(!e.task)return;const s=this.commits.get(e.task);s?V(this,Xo,rj).call(this,s,e):V(this,Xo,mj).call(this,e)}updateTotalInfo(){this.totalInfo=Array.from(this.commits.values()).map(e=>{const s=Array.from(e.milliseconds),n=s[0],r=s[s.length-1],u=Array.from(e.scope.values()),c=Array.from(e.types.values()),p=[],_=e.commits.map(f=>{const v=_v(f.message,e.task,c,u);return p.push(v),{milliseconds:f.milliseconds,author:f.author,description:v}}),h={task:e.task,taskCode:e.taskCode,taskNumber:e.taskNumber,commits:_,description:Array.from(new Set(p)).join(", "),firstAuthor:e.firstAuthor,authors:e.authors,totalAuthors:e.authors.size,scope:u,types:c,firstCommit:n,lastCommit:r,totalDays:En(n,r),totalDaysWorked:e.days.size,totalDaysInBacklog:1,milliseconds:s,prIds:[],releaseIds:new Set,createdBefore:n};return this.totalInfoByName.set(e.task,h),h}).sort((e,s)=>s.lastCommit-e.lastCommit),this.commits.clear()}updateTotalInfo2(){this.totalInfo.forEach(e=>{e.releaseIds=Array.from(e.releaseIds)})}}Xo=new WeakSet,rj=function(e,s){e.commits.push(s),e.messages.add(s.message),e.authors.add(s.author),e.days.add(s.timestamp),s.scope&&e.scope.add(s.scope),s.type&&e.types.add(s.type),e.milliseconds.add(s.milliseconds)},mj=function(e){this.commits.set(e.task,{task:e.task,taskCode:e.taskCode,taskNumber:e.taskNumber,commits:[e],firstAuthor:e.author,messages:new Set([e.message]),authors:new Set([e.author]),days:new Set([e.timestamp]),scope:new Set(e.scope?[e.scope]:[]),types:new Set(e.type?[e.type]:[]),milliseconds:new Set([e.milliseconds])})};var $e=(t=>(t[t.MAIL=1]="MAIL",t[t.COMPANY=2]="COMPANY",t[t.ACCOUNT=3]="ACCOUNT",t[t.GITHUB=4]="GITHUB",t[t.NETWORK=5]="NETWORK",t[t.DEVICE=6]="DEVICE",t[t.UNKNOWN=7]="UNKNOWN",t))($e||{});const rs={PR_BITBUCKET:"PR_BITBUCKET",PR_GITHUB:"PR_GITHUB",PR_GITLAB:"PR_GITLAB",MERGE:"MERGE",AUTO_MERGE:"AUTO_MERGE"};class vA{constructor(){Pe(this,Ua);this.release={},this.totalInfo=[],this.lastPrList=[],this.totalInfoByName={}}clear(){this.release={},this.totalInfo=[],this.lastPrList=[]}addCommit(e){if(e.commitType===rs.AUTO_MERGE)this.release[e.branch]?V(this,Ua,uf).call(this,e.branch,e):V(this,Ua,cj).call(this,e);else if(e.commitType===rs.PR_GITHUB){if(this.release[e.toBranch]||V(this,Ua,cf).call(this,e.toBranch,e),!this.release[e.toBranch])return;V(this,Ua,uf).call(this,e.toBranch,e),V(this,Ua,uj).call(this,e.toBranch,e)}else e.commitType===rs.PR_BITBUCKET&&this.lastPrList.push(e.prId)}updateTotalInfo(e,s){let n=null;this.lastPrList=[],this.totalInfo=Object.entries(this.release).sort((r,u)=>r[1].dateCreate-u[1].dateCreate).map(([r,u])=>(u.prIds.forEach(c=>{const p=s.totalInfoByName.get(c);if(!p)return;p.daysAwaitRelease=En(p.dateMerge,u.dateMerge);const _=e.totalInfoByName.get(p.task);_&&_.releaseIds.add(r)}),u.totalPR=u.prIds.length,n&&(n.daysAwaitNextRelease=En(n.dateMerge,u.dateCreate)),n=u,u)).reverse()}}Ua=new WeakSet,uf=function(e,s){const n=this.release[e];n.dateMerge=s.milliseconds,n.to.month=s.month,n.to.dayInMonth=s.dayInMonth,n.to.year=s.year,n.to.timestamp=s.timestamp;const r=En(n.dateCreate,n.dateMerge);n.delayInDays=(r>1?r-1:0)||n.delayInDays},uj=function(e,s){this.release[e].prIds.push(s.prId)},cj=function(e){!e.branch||!V(this,Ua,cf).call(this,e.branch,e)||(this.release[e.branch].prIds=this.lastPrList,this.lastPrList=[])},cf=function(e,s){const n=(e||"").lastIndexOf("release");if(n===-1)return!1;const r=e.substring(n+7).replace(/([^\w.]*)|(["']*)/gim,"").trim().replace(/([0-9])([a-z])|([a-z])([0-9])/gim,"$1$3-$2$4");return this.release[e]={title:r,dateMerge:s.milliseconds,dateCreate:s.milliseconds,from:{month:s.month,dayInMonth:s.dayInMonth,year:s.year},to:{month:s.month,dayInMonth:s.dayInMonth,year:s.year,timestamp:s.timestamp},delayInDays:0,daysAwaitNextRelease:0,prIds:[],totalPR:0},!0};const kA=[{property:"totalDays",sort:1},{property:"totalDaysWithCommits",sort:1},{property:"totalDaysWithoutCommits",sort:-1},{property:"commits",sort:1},{property:"totalMoney",sort:1,isNotStaff:!0},{property:"totalMoneyWorked",sort:1,isNotStaff:!0},{property:"totalMoneyLosses",sort:-1,isNotStaff:!0},{property:"totalMoneyInWeekend",sort:1,isNotStaff:!0},{property:"totalTasks",sort:1,isNeedTasks:!0},{property:"totalTaskInDay",sort:1,isNotStaff:!0,isNeedTasks:!0},{property:"totalTaskInChanges",sort:1,isNotStaff:!0,isNeedTasks:!0},{property:"totalTaskInCommits",sort:-1,isNotStaff:!0,isNeedTasks:!0},{property:"totalTaskInFiles",sort:-1,isNotStaff:!0,isNeedTasks:!0},{property:"speedMaxTasks",sort:1,isNotStaff:!0,isNeedTasks:!0,formatter:(t,e)=>e.tasksByTimestampCounter.max},{property:"speedMaxCommits",sort:1,isNotStaff:!0,formatter:(t,e)=>e.commitsByTimestampCounter.max},{property:"moneyForTask",sort:-1,isNotStaff:!0,isNeedTasks:!0,formatter:t=>t.totalMoney/t.totalTasks},{property:"moneyForCommit",sort:-1,isNotStaff:!0,formatter:t=>t.totalMoney/t.commits}];function bA(t,e){return s=>{const n=e.totalInfoByName[s.author];if(t.isNeedTasks&&!s.totalTasks||t.isNotStaff&&s.isStaff)return NaN;if(t.formatter)return t.formatter(s,n);const r=s[t.property]||(n==null?void 0:n[t.property])||0;return Array.isArray(r)?r.length:typeof r=="number"?r:0}}class wA{constructor(){this.total={},this.totalInfoByName={},this.clear()}clear(){this.total={},this.totalInfoByName={}}updateTotalInfo(e,s){const n=[...e.totalInfo];n.forEach(r=>{this.totalInfoByName[r.author]={}}),kA.forEach(r=>{const u=bA(r,s),c=n.map(u).filter(f=>!isNaN(f)),p=Array.from(new Set(c)),_=p.sort((f,v)=>(v-f)*r.sort).map((f,v)=>[f,v+1]),h=Object.fromEntries(_);n.forEach((f,v)=>{const k=c[v];this.totalInfoByName[f.author][r.property]=h[k]}),this.total[r.property]=p.length})}}let xA=($b=class{constructor(e){Pe(this,Jo);this.commits=new Map,this.addCommit(e)}addCommit(e){if(!e.author)return;const s=this.commits.get(e.author);s?V(this,Jo,pj).call(this,s,e):V(this,Jo,dj).call(this,e)}getTotalInfo(e){const s=e.list;return Array.from(this.commits.values()).map(n=>({author:n.author,totalDays:n.days.size,totalDaysInProject:In(n.firstCommit,n.lastCommit),totalTasks:n.tasks.size,firstCommit:n.firstCommit,lastCommit:n.lastCommit})).sort((n,r)=>s.indexOf(n.author)-s.indexOf(r.author))}},Jo=new WeakSet,pj=function(e,s){ka(e.days,s.timestamp),ka(e.tasks,s.taskNumber),e.lastCommit=s.milliseconds},dj=function(e){this.commits.set(e.author,{author:e.author,days:va(e.timestamp),tasks:va(e.taskNumber),firstCommit:e.milliseconds,lastCommit:e.milliseconds})},$b);function CA(t,e,s){let n=0;for(let r=t;r<e;r++)n+=s.has(r)?1:0;return n}function Ud(t,e){return t<e/2||t<3?0:Math.ceil(t/e)}class jA{constructor(e){Pe(this,zs);this.commits=new Map,this.addCommit(e)}addCommit(e){if(!e.taskCode||!e.week)return;const s=this.commits.get(`${e.year}-${e.month}`);s?V(this,zs,gj).call(this,s,e):V(this,zs,_j).call(this,e)}getTotalInfo(e,s){const n=Array.from(this.commits.values()),r=[];n.forEach((p,_)=>{if(!_)return;const h=n[_-1];p.min=h.max+1;const f=p.max-p.min,v=p.tasks.size,x=Array.from(p.authors.values()).filter(ge=>{var Ie;return!((Ie=e.totalInfoByName.get(ge))!=null&&Ie.isStaff)}).length;if(f<10||v<4||x<1)return;const N=CA(p.min,p.max,s),q=N+v,I=Math.ceil(q/x),F=Math.ceil(f/I),se=Ud(F,5)+Ud(F,4)+Ud(F,7),te=F+se;r.push({month:p.month,year:p.year,newTaskInMonth:f,tasksFixedThisGroup:v,tasksInBacklog:N,tasksForThisGroup:q,tasksPerUser:I,programmistInThisGroup:x,allProgrammistInDepartment:F,allUsersInDepartment:te,allMiddleUsersInDepartment:te})});const u=V(this,zs,hj).call(this,r),c=V(this,zs,fj).call(this,u);return r.length>3?c.reverse():[]}}zs=new WeakSet,gj=function(e,s){e.max<s.taskNumber&&(e.max=s.taskNumber),ka(e.tasks,s.taskNumber),ka(e.authors,s.author)},_j=function(e){this.commits.set(`${e.year}-${e.month}`,{month:e.month,year:e.year,max:e.taskNumber,tasks:va(e.taskNumber),authors:va(e.author)})},hj=function(e){const s=[];for(let n=0;n<e.length;n++){if(!n)continue;const r=e[n],u=e[n-1];r.newTaskInMonth>u.newTaskInMonth*4||s.push(r)}return s},fj=function(e){return e.forEach((s,n)=>{const r=e[n-1];if(!r)return;const u=e[n+1];u&&(s.allMiddleUsersInDepartment=Math.floor((r.allUsersInDepartment+s.allUsersInDepartment+u.allUsersInDepartment)/3))}),e.pop(),e};class TA{constructor(){Pe(this,el);this.commits=new Map,this.totalInfo=[],this.totalInfoByName=new Map}clear(){this.commits.clear(),this.totalInfo=[],this.totalInfoByName.clear()}addCommit(e){if(!e.taskCode)return;const s=this.commits.get(e.taskCode);s?V(this,el,yj).call(this,s,e):V(this,el,vj).call(this,e)}updateTotalInfo(e,s){const n=(s==null?void 0:s.milliseconds)-60*_t;this.totalInfo=Array.from(this.commits.values()).filter(r=>r.commits>3).map(r=>{const u=r.authors.getTotalInfo(e),c=r.months.getTotalInfo(e,r.tasks),p={taskCode:r.taskCode,tasks:r.tasks.size,from:r.firstCommit,to:r.lastCommit,authors:u,months:c,totalDays:In(r.firstCommit,r.lastCommit),totalDaysWorked:r.days.size,totalAuthors:u.length,isActive:r.lastCommit>n,linesInTask:Math.round(r.linesInTask.get())};return this.totalInfoByName.set(r.taskCode,p),p}).sort((r,u)=>u.totalDays-r.totalDays),this.commits.clear()}}el=new WeakSet,yj=function(e,s){e.commits+=1,e.lastCommit=s.milliseconds,ka(e.days,s.timestamp),ka(e.tasks,s.taskNumber),e.authors.addCommit(s),e.months.addCommit(s),e.linesInTask.update(s.added+s.changes+s.removed)},vj=function(e){const s=new Lt;s.update(e.added+e.changes+e.removed),this.commits.set(e.taskCode,{commits:1,taskCode:e.taskCode,firstCommit:e.milliseconds,lastCommit:e.milliseconds,days:va(e.timestamp),tasks:va(e.taskNumber),authors:new xA(e),months:new jA(e),linesInTask:s})};function DA(t,e){const s=e-t;return s<_t?1:Math.round(s/_t)}class SA{constructor(){Pe(this,tl);this.commits=new Map}clear(){this.commits.clear()}addCommit(e){if(!e.taskCode||!e.taskNumber)return;const s=this.commits.get(e.taskCode);s?V(this,tl,kj).call(this,s,e):V(this,tl,bj).call(this,e)}updateTotalInfo(e){Array.from(this.commits.values()).forEach(s=>{const n=Array.from(s.taskNumbers.entries()).sort((r,u)=>Number(r[0])-Number(u[0])).reverse();n.forEach((r,u)=>{const c=n[u+1];if(!c||c[1].milliseconds<=r[1].milliseconds)return;c[1].milliseconds=r[1].milliseconds;const p=e.totalInfoByName.get(c[1].task);p&&(p.createdBefore=r[1].milliseconds,p.totalDaysInBacklog=DA(p.createdBefore,p.firstCommit))})}),this.commits.clear()}}tl=new WeakSet,kj=function(e,s){e.taskNumbers.has(s.taskNumber)||e.taskNumbers.set(s.taskNumber,{task:s.task,milliseconds:s.milliseconds})},bj=function(e){const s=new Map;s.set(e.taskNumber,{task:e.task,milliseconds:e.milliseconds}),this.commits.set(e.taskCode,{taskCode:e.taskCode,taskNumbers:s})};class AA{constructor(e){Pe(this,al);this.commits=new Map,this.addCommit(e)}addCommit(e){if(!e.author)return;const s=this.commits.get(e.author);s?V(this,al,wj).call(this,s,e):V(this,al,xj).call(this,e)}getTotalInfo(){return Array.from(this.commits.values()).map(e=>({author:e.author,totalDaysWorked:e.days.size,totalDaysInProject:In(e.firstCommit,e.lastCommit),totalTasks:e.tasks.size,taskCodes:Array.from(e.taskCodes),firstCommit:e.firstCommit,lastCommit:e.lastCommit})).sort((e,s)=>s.totalTasks-e.totalTasks)}}al=new WeakSet,wj=function(e,s){e.lastCommit=s.milliseconds,e.days.add(s.timestamp),s.task&&e.tasks.add(s.task),s.taskCode&&e.taskCodes.add(s.taskCode)},xj=function(e){this.commits.set(e.author,{author:e.author,firstCommit:e.milliseconds,lastCommit:e.milliseconds,days:new Set([e.timestamp]),tasks:new Set(e.task?[e.task]:[]),taskCodes:new Set(e.taskCode?[e.taskCode]:[])})};class zA{constructor(e){Pe(this,sl);this.commits=new Map,this.addCommit(e)}addCommit(e){if(!e.taskCode)return;const s=this.commits.get(e.taskCode);s?V(this,sl,Cj).call(this,s,e):V(this,sl,jj).call(this,e)}getTotalInfo(){return Array.from(this.commits.values()).map(e=>({taskCode:e.taskCode,totalDaysWorked:e.days.size,totalTasks:e.tasks.size,totalAuthors:e.authors.size,authors:Array.from(e.authors),firstCommit:e.firstCommit,lastCommit:e.lastCommit})).filter(e=>e.totalDaysWorked>1).sort((e,s)=>s.totalDaysWorked-e.totalDaysWorked)}}sl=new WeakSet,Cj=function(e,s){e.lastCommit=s.milliseconds,e.days.add(s.timestamp),s.taskNumber&&e.tasks.add(s.taskNumber),s.author&&e.authors.add(s.author)},jj=function(e){this.commits.set(e.taskCode,{taskCode:e.taskCode,firstCommit:e.milliseconds,lastCommit:e.milliseconds,days:new Set([e.timestamp]),tasks:new Set(e.taskNumber?[e.taskNumber]:[]),authors:new Set(e.author?[e.author]:[])})};class NA{constructor(){Pe(this,il);this.commits=new Map,this.totalInfo=[],this.totalInfoByName=new Map}clear(){this.commits.clear(),this.totalInfo=[],this.totalInfoByName.clear()}addCommit(e){if(!e.company)return;const s=this.commits.get(e.company);s?V(this,il,Tj).call(this,s,e):V(this,il,Dj).call(this,e)}updateTotalInfo(e){const s=(e==null?void 0:e.milliseconds)-60*_t;this.totalInfo=Array.from(this.commits.values()).map(n=>{const r=n.authors.getTotalInfo(),u=n.taskCodes.getTotalInfo(),c={company:n.company,from:n.firstCommit,to:n.lastCommit,authors:r,taskCodes:u,totalTasks:n.tasks.size,totalTaskCodes:u.length,totalDays:In(n.firstCommit,n.lastCommit),totalDaysWorked:n.days.size,totalAuthors:r.length,isActive:n.lastCommit>s,linesInTask:Math.round(n.linesInTask.get())};return this.totalInfoByName.set(n.company,c),c}).sort((n,r)=>r.totalTasks-n.totalTasks),this.commits.clear()}}il=new WeakSet,Tj=function(e,s){e.lastCommit=s.milliseconds,e.days.add(s.timestamp),s.task&&e.tasks.add(s.task),e.authors.addCommit(s),e.taskCodes.addCommit(s),e.linesInTask.update(s.added+s.changes+s.removed)},Dj=function(e){const s=new Lt;s.update(e.added+e.changes+e.removed),this.commits.set(e.company,{company:e.company,firstCommit:e.milliseconds,lastCommit:e.milliseconds,days:new Set([e.timestamp]),tasks:new Set(e.task?[e.task]:[]),authors:new AA(e),taskCodes:new zA(e),linesInTask:s})};const Bu={"-12:00":1,"-11:00":2,"-10:00":3,"-09:30":3.5,"-09:00":4,"-08:00":5,"-07:00":6,"-06:00":7,"-05:00":8,"-04:00":9,"-03:00":10,"-02:00":11,"-01:00":12,"+00:00":13,"+01:00":14,"+02:00":15,"+03:00":16,"+03:30":16.5,"+04:00":17,"+04:30":17.5,"+05:00":18,"+05:30":18.5,"+05:45":18.75,"+06:00":19,"+07:00":20,"+08:00":21,"+09:00":22,"+09:30":22.5,"+10:00":23,"+10:30":23.5,"+11:00":24,"+12:00":25,"+13:00":26};function MA(t,e){return!Bu[t]||!Bu[e]?0:Math.abs(Bu[t]-Bu[e])}function RA(t){const e=new Map;if(t.length<2)return e;for(let s=0;s<t.length;s++){const n=t[s],r=t[s+1],u=t[s+2];if(!r||!u)continue;const c=(u==null?void 0:u.from)-(r==null?void 0:r.from)<_t,p=n.fromTimezone===u.fromTimezone;c&&p&&(e.set(r.title,r.fromTimestamp),s+=1)}return e}function EA(t,e){var u;if(t.length<=1)return null;let s=((u=t[0])==null?void 0:u.fromTimezone)||"";const n=[t[0]],r=t.length>3?t.filter(c=>!e.has(c.title)):t;for(let c=1,p=r.length;c<p;c++){const _=r[c],h=(_==null?void 0:_.fromTimezone)||"";s!==h&&MA(s,h)>1&&(s=h,n.push(_))}return n.length<=1?null:n}class IA{constructor(){Pe(this,Ec);this.countries=new Map,this.vpn={},this.devices={},this.totalInfo=[]}clear(){this.countries.clear(),this.vpn={},this.devices={},this.totalInfo=[]}updateTotalInfo(e){e.totalInfo.forEach(s=>{const n=RA(s.countries||[]);s.countries=EA(s.countries||[],n),V(this,Ec,Sj).call(this,s.lastCountry||"unknown",s.author),Ce(this.devices,s.device||"unknown"),Array.from(n.keys()).forEach(r=>{Ce(this.vpn,r)})}),this.totalInfo=Array.from(this.countries.values()).sort((s,n)=>n.employments.length-s.employments.length),this.countries.clear()}}Ec=new WeakSet,Sj=function(e,s){const n=this.countries.get(e);n?n.employments.push(s):this.countries.set(e,{country:e,employments:[s]})};class qA{constructor(){Pe(this,Ns);this.lastCommitDate=new Map,this.totalInfo=[],this.totalInfoByName=new Map}clear(){this.lastCommitDate.clear(),this.totalInfo=[]}addCommit(e){const s=this.lastCommitDate.get(e.author);s?V(this,Ns,Aj).call(this,s,e):V(this,Ns,df).call(this,e)}updateTotalInfo(e){this.totalInfo=this.totalInfo.filter(s=>{var n;return!((n=e.totalInfoByName.get(s.author))!=null&&n.isStaff)}).sort((s,n)=>n.to.milliseconds-s.to.milliseconds),this.totalInfo.forEach(s=>{const n=this.totalInfoByName.get(s.author)||[];n.push(s),this.totalInfoByName.set(s.author,n)}),this.lastCommitDate.clear()}}Ns=new WeakSet,Aj=function(e,s){const n=s.milliseconds;let r=(n-e.milliseconds)/_t-2;if(s.month===0&&s.dayInMonth<=11&&(r-=10),s.month===5&&s.dayInMonth<=11&&(r-=4),V(this,Ns,df).call(this,s),!r||r<=7)return;const u=new Date(e.milliseconds+_t),c=new Date(n-_t);this.totalInfo.push({author:s.author,duration:Math.round(r),from:V(this,Ns,pf).call(this,u,e.timestamp),to:V(this,Ns,pf).call(this,c,s.timestamp)})},pf=function(e,s){return{milliseconds:e.getTime(),year:e.getUTCFullYear(),month:e.getMonth(),day:e.getDate(),timestamp:s}},df=function(e){this.lastCommitDate.set(e.author,{milliseconds:e.milliseconds,timestamp:e.timestamp})};function OA(t){const e=t.indexOf("//"),[s,n]=t.split(/\/+/g);return e===-1?["",s]:[s,n]}function $A(t){const e=(t||"").split(/[@:]/g),s=e[0]||"",n=e[1]||"";return e.length===1?[s]:e.length===2?[s,n]:[s,n,e[2],e[3]]}class LA{constructor(){Pe(this,Ms);this.commits=new Map,this.totalInfo=[]}clear(){this.commits.clear(),this.totalInfo=[]}addCommit(e){if(!e.server)return;const s=this.commits.get(e.server);s?V(this,Ms,zj).call(this,s,e):V(this,Ms,Nj).call(this,e)}updateTotalInfo(){const e=Array.from(this.commits.values()),s=new Map;e.forEach(n=>{const r=s.get(n.domain);r?V(this,Ms,Mj).call(this,r,n):s.set(n.domain,V(this,Ms,Rj).call(this,n))}),this.totalInfo=Array.from(s.values()),this.commits.clear()}}Ms=new WeakSet,zj=function(e,s){e.commits+=1,e.to=s.timestamp},Nj=function(e){let[s,n,r,u,c]=["","","","",""];e.server[0]!=="/"&&([s,n]=OA(e.server),[r,u]=$A(n),c=r.split(".").slice(-2).join(".")),this.commits.set(e.server,{url:e.server,commits:1,port:u,domain:c||"local",protocol:s.replace(":","").toUpperCase(),hostname:r,from:e.milliseconds,to:e.milliseconds})},Mj=function(e,s){e.from=s.from<e.from?s.from:e.from,e.to=s.to>e.to?s.to:e.to,e.children.push(s)},Rj=function(e){return{domain:e.domain,from:e.from,to:e.to,children:[e]}};const BA=new Set([rs.MERGE,rs.AUTO_MERGE,rs.PR_GITLAB]);class PA{constructor(){Pe(this,nl);this.commits=new Map,this.totalInfo=[]}clear(){this.commits.clear(),this.lastService=void 0,this.totalInfo=[]}addCommit(e){var s;BA.has(e.commitType)||(((s=this.lastService)==null?void 0:s.type)===e.commitType?V(this,nl,Ej).call(this,e):V(this,nl,Ij).call(this,e))}updateTotalInfo(){this.totalInfo=this.totalInfo.filter(e=>e.from!==e.to&&e.commits>10),this.commits.clear()}}nl=new WeakSet,Ej=function(e){this.lastService&&(this.lastService.commits+=1,this.lastService.to=e.timestamp)},Ij=function(e){this.lastService={type:e.commitType,commits:1,from:e.timestamp,to:e.timestamp},this.totalInfo.push(this.lastService)};class WA{constructor(){Pe(this,ol);this.commits=new Map,this.totalInfo=[],this.totalInfoByName=new Map,this.clear()}clear(){this.commits.clear(),this.totalInfo=[],this.totalInfoByName.clear()}addCommit(e){const s=this.commits.get(e.email);s?V(this,ol,qj).call(this,s,e):V(this,ol,Oj).call(this,e)}updateTotalInfo(e){const s=Object.fromEntries(e.list.map((n,r)=>[n,r]));this.totalInfo=Array.from(this.commits.values()).sort((n,r)=>{const u=s[n.author]-s[r.author];return u||n.type-r.type}),this.totalInfoByName=this.commits,this.commits=new Map}}ol=new WeakSet,qj=function(e,s){e.to=s.milliseconds},Oj=function(e){this.commits.set(e.email,{author:e.author,email:e.email,from:e.milliseconds,to:e.milliseconds,company:e.company,type:e.emailType})};class FA{constructor(){this.firstLastCommit=new bs,this.author=new nA,this.company=new NA,this.country=new IA,this.team=new oA,this.scope=new dv,this.type=new rA,this.timestamp=new mA,this.month=new cA,this.week=new pA,this.beautifulTaskNumbers=new gA,this.pr=new fA,this.tasks=new yA,this.release=new vA,this.scoring=new wA,this.taskCodes=new TA,this.taskNumbersDate=new SA,this.absence=new qA,this.server=new LA,this.service=new PA,this.email=new WA}clear(){this.firstLastCommit.clear(),this.author.clear(),this.company.clear(),this.country.clear(),this.team.clear(),this.scope.clear(),this.type.clear(),this.timestamp.clear(),this.month.clear(),this.week.clear(),this.beautifulTaskNumbers.clear(),this.pr.clear(),this.tasks.clear(),this.release.clear(),this.scoring.clear(),this.taskCodes.clear(),this.taskNumbersDate.clear(),this.absence.clear(),this.server.clear(),this.service.clear(),this.email.clear()}addCommit(e,s){this.server.addCommit(e),e.author!=="GitHub"&&(this.pr.addCommit(e),this.release.addCommit(e),e.commitType?this.service.addCommit(e):(this.firstLastCommit.update(e.milliseconds,e),this.author.addCommit(e,s),this.company.addCommit(e),this.scope.addCommit(e),this.type.addCommit(e),this.timestamp.addCommit(e),this.month.addCommit(e),this.beautifulTaskNumbers.addCommit(e),this.week.addCommit(e),this.tasks.addCommit(e),this.taskCodes.addCommit(e),this.taskNumbersDate.addCommit(e),this.absence.addCommit(e),this.email.addCommit(e)))}updateTotalInfo(){this.author.updateTotalInfo(this.firstLastCommit.maxData),this.team.updateTotalInfo(this.author),this.scope.updateTotalInfo(),this.type.updateTotalInfo(),this.timestamp.updateTotalInfo(this.author),this.month.updateTotalInfo(this.author),this.week.updateTotalInfo(this.author),this.tasks.updateTotalInfo(),this.taskNumbersDate.updateTotalInfo(this.tasks),this.pr.updateTotalInfo(this.tasks),this.release.updateTotalInfo(this.tasks,this.pr),this.tasks.updateTotalInfo2(),this.scoring.updateTotalInfo(this.author,this.timestamp),this.company.updateTotalInfo(this.firstLastCommit.maxData),this.country.updateTotalInfo(this.author),this.taskCodes.updateTotalInfo(this.author,this.firstLastCommit.maxData),this.absence.updateTotalInfo(this.author),this.server.updateTotalInfo(),this.service.updateTotalInfo(),this.email.updateTotalInfo(this.author)}preloadCommit(e,s,n){var r,u;if(e==="server"){this.server.addCommit(s);return}s.author!=="GitHub"&&(s.commitType||(u=(r=this==null?void 0:this[e])==null?void 0:r.addCommit)==null||u.call(r,s,n))}preloadTotalInfo(e){var s,n,r,u;e==="author"?this.author.updateTotalInfo(this.firstLastCommit.maxData):e==="taskNumbersDate"||e==="pr"?(n=(s=this==null?void 0:this[e])==null?void 0:s.updateTotalInfo)==null||n.call(s,this.tasks):e==="taskCodes"?this.taskCodes.updateTotalInfo(this.author,this.firstLastCommit.maxData):(u=(r=this==null?void 0:this[e])==null?void 0:r.updateTotalInfo)==null||u.call(r,this.author)}}const jt=new FA;function Di(t,e){return new Map(t?[[t,e??1]]:[])}function Si(t,e,s){if(!e)return;const n=t.get(e)||0;t.set(e,n+(s??1))}function UA(t,e){return{id:t.id,name:"",path:t.path,pathString:t.path,extension:"",type:"",lines:0,action:t.action,commits:1,firstCommit:e.milliseconds,lastCommit:e.milliseconds,createAuthor:e.author,createYear:e.year,tasks:new Set(e.task?[e.task]:[]),totalTasks:0,days:new Set(e.timestamp?[e.timestamp]:[]),daysByAuthor:new Map([[e.author,new Set([e.timestamp])]]),totalDays:0,money:0,authors:Di(e.author),companies:Di(e.company),types:Di(e.type),scope:Di(e.scope),taskCode:Di(e.taskCode),addedLines:t.addedLines,removedLines:t.removedLines,changedLines:t.changedLines,addedLinesByAuthor:Di(e.author,t.addedLines),removedLinesByAuthor:Di(e.author,t.removedLines),changedLinesByAuthor:Di(e.author,t.changedLines)}}function GA(t,e,s){t.action=e.action,t.lastCommit=s.milliseconds,t.commits+=1,s.task&&t.tasks.add(s.task),s.timestamp&&t.days.add(s.timestamp);const n=t.daysByAuthor.get(s.author)||new Set;n.add(s.timestamp),t.daysByAuthor.set(s.author,n),Si(t.authors,s.author),Si(t.companies,s.company),Si(t.types,s.type),Si(t.scope,s.scope),Si(t.taskCode,s.taskCode),t.addedLines+=e.addedLines,t.removedLines+=e.removedLines,t.changedLines+=e.changedLines,Si(t.addedLinesByAuthor,s.author,e.addedLines),Si(t.removedLinesByAuthor,s.author,e.removedLines),Si(t.changedLinesByAuthor,s.author,e.changedLines)}function HA(t){const e=t.lastIndexOf("."),s=t.substring(e+1),n=t.substring(0,e),r=n.lastIndexOf(".");return{type:r!==-1?n.substring(r+1):"",extension:s}}function VA(t,e){const s=t.path.split("/"),n=s.pop()||"",{type:r,extension:u}=HA(n);t.name=n,t.type=r,t.extension=u,t.pathString=t.path,t.path=s,t.totalTasks=t.tasks.size,t.tasks=Array.from(t.tasks),t.authors=Object.fromEntries(t.authors.entries()),t.companies=Object.fromEntries(t.companies.entries()),t.types=Object.fromEntries(t.types.entries()),t.scope=Object.fromEntries(t.scope.entries()),t.taskCode=Object.fromEntries(t.taskCode.entries()),t.totalDays=t.days.size,t.days=Array.from(t.days),t.daysByAuthor=Object.fromEntries(t.daysByAuthor.entries()),t.money=t.totalDays*e,t.lines=t.addedLines-t.removedLines,t.lines<0&&(t.lines=0),t.addedLinesByAuthor=Object.fromEntries(t.addedLinesByAuthor.entries()),t.removedLinesByAuthor=Object.fromEntries(t.removedLinesByAuthor.entries()),t.changedLinesByAuthor=Object.fromEntries(t.changedLinesByAuthor.entries())}class YA{constructor(){Pe(this,Rs);this.list=[],this.refFileIds=new Map,this.refRemovedFileIds=new Map,this.refExtensionType=new Map}clear(){this.list=[],this.refFileIds.clear(),this.refRemovedFileIds.clear(),this.refExtensionType.clear()}addCommit(e,s){let n=this.refFileIds.get(e.id);n||(n=this.refFileIds.get(e.newId)),n?V(this,Rs,Lj).call(this,n,e,s):(n=V(this,Rs,$j).call(this,e,s),this.refFileIds.set(e.id,n)),e.newId&&V(this,Rs,Bj).call(this,n,e.newId)}updateTotalInfo(e,s){const n=Array.from(this.refFileIds.values());for(let r=0;r<n.length;r++){const u=n[r];if(VA(u,s),u.type){let c=this.refExtensionType.get(u.extension);c||(c={},this.refExtensionType.set(u.extension,c)),Ce(c,u.type)}(u.lines===0||u.action==="D"||u.action==="A")&&V(this,Rs,Pj).call(this,u),e(u)}this.list=n}}Rs=new WeakSet,$j=function(e,s){return UA(e,s)},Lj=function(e,s,n){GA(e,s,n)},Bj=function(e,s){const n=this.refFileIds.get(e.id);this.refFileIds.set(s,n),this.refFileIds.delete(e.id),e.id=s},Pj=function(e){e.action="D",this.refRemovedFileIds.set(e.id,e),this.refFileIds.delete(e.id)};function Ai(t){return t?new Map(Object.entries(t)):new Map}function qn(t,e){if(e)for(const s in e){const n=t.get(s)||0;t.set(s,n+e[s])}}function fv(t,e){if(!e)return t;for(const s in e)t[s]=new Set([...t[s]||[],...e[s]||[]]);return t}function Gd(t,e,s){return{id:Math.random(),name:t||"",path:e||[],pathString:`${(e||[]).join("/")}/${t||""}`,content:new Map,lines:(s==null?void 0:s.lines)||0,action:"F",commits:(s==null?void 0:s.commits)||0,firstCommit:0,lastCommit:0,createAuthor:(s==null?void 0:s.createAuthor)||"",createYear:s==null?void 0:s.createYear,tasks:new Set((s==null?void 0:s.tasks)||[]),totalTasks:0,days:new Set((s==null?void 0:s.days)||[]),daysByAuthor:fv({},s==null?void 0:s.daysByAuthor),totalDays:0,money:0,authors:Ai(s==null?void 0:s.authors),companies:Ai(s==null?void 0:s.companies),types:Ai(s==null?void 0:s.types),scope:Ai(s==null?void 0:s.scope),taskCode:Ai(s==null?void 0:s.taskCode),addedLines:(s==null?void 0:s.addedLines)||0,removedLines:(s==null?void 0:s.removedLines)||0,changedLines:(s==null?void 0:s.changedLines)||0,addedLinesByAuthor:Ai(s==null?void 0:s.addedLinesByAuthor),removedLinesByAuthor:Ai(s==null?void 0:s.removedLinesByAuthor),changedLinesByAuthor:Ai(s==null?void 0:s.changedLinesByAuthor)}}function QA(t,e){t.lines+=e.lines,t.commits+=e==null?void 0:e.commits;for(let s=0;s<e.tasks.length;s++)t.tasks.add(e.tasks[s]);for(let s=0;s<e.days.length;s++)t.days.add(e.days[s]);fv(t.daysByAuthor,e==null?void 0:e.daysByAuthor),qn(t.authors,e.authors),qn(t.companies,e.companies),qn(t.types,e.types),qn(t.scope,e.scope),t.addedLines+=e.addedLines||0,t.removedLines+=e.removedLines||0,t.changedLines+=e.changedLines||0,qn(t.addedLinesByAuthor,e.addedLinesByAuthor),qn(t.removedLinesByAuthor,e.removedLinesByAuthor),qn(t.changedLinesByAuthor,e.changedLinesByAuthor)}function KA(t,e){t.totalTasks=t.tasks.size,t.tasks=Array.from(t.tasks),t.totalDays=t.days.size,t.days=Array.from(t.days),t.authors=Object.fromEntries(t.authors.entries()),t.companies=Object.fromEntries(t.companies.entries()),t.types=Object.fromEntries(t.types.entries()),t.scope=Object.fromEntries(t.scope.entries()),t.taskCode=Object.fromEntries(t.taskCode.entries()),t.totalDaysByAuthor=Object.values(t.daysByAuthor).reduce((s,n)=>s+n.size,0),t.daysByAuthor=Object.fromEntries(Object.entries(t.daysByAuthor).map(([s,n])=>[s,n.size])),t.money=t.totalDaysByAuthor*e,t.lines=t.addedLines-t.removedLines,t.lines<0&&(t.lines=0),t.addedLinesByAuthor=Object.fromEntries(t.addedLinesByAuthor.entries()),t.removedLinesByAuthor=Object.fromEntries(t.removedLinesByAuthor.entries()),t.changedLinesByAuthor=Object.fromEntries(t.changedLinesByAuthor.entries())}class yv{constructor(){this.tree=Gd(),this.folders=[],this.addedFoldersByAuthor={}}clear(){this.tree=Gd(),this.folders=[]}addFile(e){let s=this.tree.content;for(let n=0,r=e.path.length;n<r;n++){const u=e.path[n],c=s.get(u);if(c!=null&&c.content)QA(c,e),s=c.content;else{const p=e.path.slice(0,n),_=Gd(u,p,e);s.set(u,_),this.folders.push(_),s=_.content}}s.set(e.name,e)}updateTotalInfo(e){this.folders.forEach(s=>{KA(s,e);const n=s.createAuthor||"";this.addedFoldersByAuthor[n]||(this.addedFoldersByAuthor[n]=[]),this.addedFoldersByAuthor[n].push(s.pathString)}),this.folders=[]}}const ZA=new Set([".eslintrc",".gitignore","package.json","package-lock.json","tsconfig.json"]);class XA{constructor(){Pe(this,ll);this.commits=new Map,this.totalInfo=[]}clear(){this.totalInfo=[],this.commits.clear()}addFile(e){if(!(e!=null&&e.extension)||ZA.has(e.name))return;const s=this.commits.get(e==null?void 0:e.extension);s?V(this,ll,Wj).call(this,s,e):V(this,ll,Fj).call(this,e)}updateTotalInfo(){this.totalInfo=Array.from(this.commits.values()).sort((e,s)=>s.files-e.files),this.commits.clear()}}ll=new WeakSet,Wj=function(e,s){s.action==="D"?e.removedFiles+=1:e.files+=1},Fj=function(e){var s;this.commits.set(e==null?void 0:e.extension,{extension:e==null?void 0:e.extension,task:(s=e==null?void 0:e.tasks)==null?void 0:s[0],path:e==null?void 0:e.name,files:e.action==="D"?0:1,removedFiles:e.action==="D"?1:0})};class JA{constructor(){Pe(this,rl);this.commits=new Map,this.totalInfo=[]}clear(){this.totalInfo=[],this.commits.clear()}addFile(e){var n;if(!(e!=null&&e.type)||((n=e==null?void 0:e.name)==null?void 0:n[0])===".")return;const s=this.commits.get(e==null?void 0:e.type);s?V(this,rl,Uj).call(this,s,e):V(this,rl,Gj).call(this,e)}updateTotalInfo(){this.totalInfo=Array.from(this.commits.values()).sort((e,s)=>s.files-e.files),this.commits.clear()}}rl=new WeakSet,Uj=function(e,s){s.action==="D"?e.removedFiles+=1:e.files+=1},Gj=function(e){var s;this.commits.set(e==null?void 0:e.type,{type:e==null?void 0:e.type,task:(s=e==null?void 0:e.tasks)==null?void 0:s[0],path:e==null?void 0:e.name,files:e.action==="D"?0:1,removedFiles:e.action==="D"?1:0})};function ez(t){return!(t.action==="D"||t.path.length<3||!t.extension||{json:!0,xml:!0,md:!0,config:!0}[t.extension]||{test:!0,config:!0}[t.type])}function Hd(t,e){return t.sort((s,n)=>n[e]-s[e]),t.slice(0,20).map(s=>[s.id,s])}class tz{constructor(){this.files=[]}updateTotalInfo(e){const s=e.filter(ez),n=[...Hd(s,"lines"),...Hd(s,"totalDays"),...Hd(s,"totalTasks")],r=Array.from(new Map(n).values()).filter(u=>u.lines>50&&u.totalDays>10);r.sort((u,c)=>c.totalDays-u.totalDays),this.files=r}clear(){this.files=[]}}class az{constructor(){this.files=new YA,this.extension=new XA,this.type=new JA,this.tree=new yv,this.removedTree=new yv,this.refactor=new tz}clear(){this.files.clear(),this.extension.clear(),this.type.clear(),this.tree.clear(),this.removedTree.clear(),this.refactor.clear()}addCommit(e){var s;(s=e==null?void 0:e.fileChanges)!=null&&s.length&&e.fileChanges.forEach(n=>{this.files.addCommit(n,e)})}updateTotalInfo(){const e=de.getMiddleSalaryInDay();this.files.updateTotalInfo(s=>{this.extension.addFile(s),this.type.addFile(s),s.action==="D"?this.removedTree.addFile(s):this.tree.addFile(s)},e),this.extension.updateTotalInfo(),this.type.updateTotalInfo(),this.tree.updateTotalInfo(e),this.removedTree.updateTotalInfo(e),this.refactor.updateTotalInfo(this.files.list)}}const zi=new az,sz=["refactor","feat","chore","code style","style","doc","docs","test","update","improve","add","remove","delete","optimize","rename","eslint","revert","merge","fix"],iz={add:"feat",remove:"refactor",delete:"refactor",update:"refactor",improve:"refactor",optimize:"refactor",rename:"refactor",eslint:"style","code style":"refactor"};function nz(t){const e=sz.find(s=>t.indexOf(s)!==-1);return iz[e||""]||e}function oz(t){var e;return(e=t.replace(/[()]/gim,"").split(",").map(s=>s.trim()))==null?void 0:e[0]}function Vd(t,e){let s="",n="";if(!t)return[s,n];const u=t.replace(e,"").toLowerCase().split(":");return u.length>1&&([s,n]=u[0].split(/[()]/g).map(c=>c.trim())),s||(s=nz(t)),s&&!n&&u.length>1&&(n=oz(u[0].replace(s,""))),s&&(s=s.split(" ").shift()),[s,n]}function Yd(t){return((t||"").match(/(([A-Z]+[-_])|(#)|(gh-)|(GH-))([0-9]+)/gm)||[])[0]||""}const Qd=new Map;new Array(1e5).fill(1).map((t,e)=>{Qd.set(`${e}`,e)});function vv(t){const e=(t||"").replace(/[^0-9]+/gim,""),s=Qd.get(e);if(s)return s;const n=parseInt(e,10);return n||n===0?(Qd.set(e,n),n):e}function kv(t){return(t||"").replace(/[^A-Z]+/gim,"")}function lz(t){const e=(t||"").replace(/["'\r\n]+/gim,"").replace("#",'#": "').replace(" in ",'", "in": "').replace(" from ",'", "from": "').replace(" to ",'", "to": "').replace(" into ",'", "to": "'),s=JSON.parse(`{"${e}"}`);return[s["Merge pull request #"],s.in||"",s.from||"",s.to||""]}function rz(t){const e=`${t}@`.match(/([^0-9][4-9][0-9][^0-9])|([^0-9]19[5-9][0-9][^0-9])|([^0-9]20[0-5][0-9][^0-9])/);if(!e)return 0;const s=new Date().getFullYear();if(e[0].length===6){const p=parseInt(e[0].substring(1,5),10);return s-p<18?0:p}const n=e[0].substring(1,3),r=parseInt(n,10),u=s-2e3;return r>u?1900+r:u-r<18?0:2e3+r}const mz=Object.fromEntries(Object.values(["icloud","google","inbox","yahoo","aol","zoho","outlook","gmx","tutanota","vk","ok","ya","yandex","rambler","me","qq","bk","list"]).map(t=>[t.toUpperCase(),!0])),uz=/(\.local)|(localhost)|(([0-9]{1,3}([-_\.])[0-9]{1,3}([-_\.])[0-9]{1,3}([-_\.])[0-9]{1,3}))/i,cz=/(github)|(gitlab)/i;function pz(t){const s=((t||"").toUpperCase().match(/(\[[^\]]+])/gim)||[]).map(n=>n.replace(/([\[\]]+)/gim,"").trim().split(",")).flat(1/0);return s.length?s[0]:""}function dz(t,e){const s=pz(t),[n,r]=(e||"").split("@"),u=(r||"").split("."),c=u[u.length-1],p=(u[u.length-2]||"").toUpperCase(),_=p.indexOf("MAIL")!==-1||mz[p],h=/(MACBOOK)|(-AIR)|(-IMAC)/gi.test(e||"")?"MacBook":"";let f=$e.UNKNOWN;_?f=$e.MAIL:h?f=$e.DEVICE:uz.test(e||"")?f=$e.NETWORK:cz.test(r||"")?f=$e.GITHUB:u.length>2?f=$e.ACCOUNT:p&&u.length==2&&(f=$e.COMPANY);const v=f===$e.MAIL?rz(n):0,k=f===$e.GITHUB?n.split("+").pop():"";let x="";return s?x=s:(f===$e.COMPANY||f===$e.ACCOUNT)&&(x=/(dev)|(local)|(prod)/i.test(p)||u.length>2?"":p),{company:x,domain:c,device:h,emailType:f,yearOfBirth:v,githubLogin:k}}const Pu={ac:"Ascension Island",ad:"Andorra",ae:"United Arab Emirates",af:"Afghanistan",ag:"Antigua and Barbuda",ai:"Anguilla",al:"Albania",am:"Armenia",ao:"Angola",aq:"Antarctica",ar:"Argentina",as:"American Samoa",at:"Austria",au:"Australia",aw:"Aruba (Kingdom of the Netherlands)",ax:"Aland (Finland)",az:"Azerbaijan",ba:"Bosnia and Herzegovina",bb:"Barbados",bd:"Bangladesh",be:"Belgium",bf:"Burkina Faso",bg:"Bulgaria",bh:"Bahrain",bi:"Burundi",bj:"Benin",bm:"Bermuda",bn:"Brunei",bo:"Bolivia",bq:"Caribbean Netherlands",br:"Brazil",bs:"Bahamas",bt:"Bhutan",bw:"Botswana",by:"Belarus",bz:"Belize",ca:"Canada",cc:"Cocos (Keeling) Islands",cd:"Democratic Republic of the Congo",cf:"Central African Republic",cg:"Republic of the Congo",ch:"Switzerland",ci:"Ivory Coast",ck:"Cook Islands",cl:"Chile",cm:"Cameroon",cn:"China",co:"Colombia",cr:"Costa Rica",cu:"Cuba",cv:"Cape Verde",cw:"Curacao (Kingdom of the Netherlands)",cx:"Christmas Island",cy:"Cyprus",cz:"Czech Republic",de:"Germany",dj:"Djibouti",dk:"Denmark",dm:"Dominica",do:"Dominican Republic",dz:"Algeria",ec:"Ecuador",ee:"Estonia",eg:"Egypt",eh:"Western Sahara",er:"Eritrea",es:"Spain",et:"Ethiopia",eu:"Europe",fi:"Finland",fj:"Fiji",fk:"Falkland Islands",fo:"Faroe Islands (Kingdom of Denmark)",fr:"France",ga:"Gabon",gd:"Grenada",ge:"Georgia",gf:"French Guiana",gg:"Guernsey",gh:"Ghana",gi:"Gibraltar",gl:"Greenland (Kingdom of Denmark)",gm:"The Gambia",gn:"Guinea",gp:"Guadeloupe",gq:"Equatorial Guinea10 July 1997",gr:"Greece",gs:"United Kingdom",gt:"Guatemala",gu:"Guam",gw:"Guinea-Bissau",gy:"Guyana",hk:"Hong Kong",hm:"Heard Island and McDonald Islands",hn:"Honduras",hr:"Croatia",ht:"Haiti",hu:"Hungary",id:"Indonesia",ie:"Ireland",il:"Israel",im:"Isle of Man",in:"India",iq:"Iraq",ir:"Iran",is:"Iceland",it:"Italy",je:"Jersey",jm:"Jamaica",jo:"Jordan",jp:"Japan",ke:"Kenya",kg:"Kyrgyzstan",kh:"Cambodia",ki:"Kiribati",km:"Comoros",kn:"Saint Kitts and Nevis",kp:"North Korea",kr:"South Korea",kw:"Kuwait",ky:"Cayman Islands",kz:"Kazakhstan",la:"Laos",lb:"Lebanon",lc:"Saint Lucia",li:"Liechtenstein",lk:"Sri Lanka",lr:"Liberia",ls:"Lesotho",lt:"Lithuania",lu:"Luxembourg",lv:"Latvia",ly:"Libya",ma:"Morocco",mc:"Monaco",md:"Moldova",me:"Montenegro",mg:"Madagascar",mh:"Marshall Islands",mk:"North Macedonia",ml:"Mali",mm:"Myanmar",mn:"Mongolia",mo:"Macau",mp:"Northern Mariana Islands",mq:"Martinique",mr:"Mauritania",ms:"Montserrat",mt:"Malta",mu:"Mauritius",mv:"Maldives",mw:"Malawi",mx:"Mexico",my:"Malaysia",mz:"Mozambique",na:"Namibia",nc:"New Caledonia",ne:"Niger",nf:"Norfolk Island",ng:"Nigeria",ni:"Nicaragua",nl:"Netherlands",no:"Norway",np:" Nepal",nr:"Nauru",nu:"Niue",nz:"New Zealand",om:"Oman",pa:"Panama",pe:"Peru",pf:"French Polynesia",pg:"Papua New Guinea",ph:"Philippines",pk:"Pakistan",pl:"Poland",pm:"Saint-Pierre and Miquelon",pn:"Pitcairn Islands",pr:"Puerto Rico",ps:"Palestine",pt:"Portugal",pw:"Palau",py:"Paraguay",qa:"Qatar",re:"Réunion",ro:"Romania",rs:"Serbia",ru:"Russia",rw:"Rwanda",sa:"Saudi Arabia",sb:"Solomon Islands",sc:"Seychelles",sd:"Sudan",se:"Sweden",sg:"Singapore",sh:"Saint Helena, Ascension and Tristan da Cunha",si:"Slovenia",sk:"Slovakia",sl:"Sierra Leone",sm:"San Marino",sn:"Senegal",so:"Somalia",sr:"Suriname",ss:"South Sudan",st:"São Tomé and Príncipe",sv:"El Salvador",sx:"Sint Maarten",sy:"Syria",sz:"Eswatini",tc:"Turks and Caicos Islands",td:"Chad",tf:"French Southern and Antarctic Lands",tg:"Togo",th:"Thailand",tj:"Tajikistan",tl:"East Timor",tm:"Turkmenistan",tn:"Tunisia",to:"Tonga",tr:"Turkey",tt:"Trinidad and Tobago",tw:"Taiwan",tz:"Tanzania",ua:"Ukraine",ug:"Uganda",uk:"United Kingdom",us:"USA",uy:"Uruguay",uz:"Uzbekistan",va:"Vatican City",vc:"Saint Vincent and the Grenadines",ve:"Venezuela",vg:"British Virgin Islands",vi:"United States Virgin Islands",vn:"Vietnam",vu:"Vanuatu",wf:"Wallis and Futuna",ws:"Samoa",ye:"Yemen",yt:"Mayotte",za:"South Africa",zm:"Zambia",zw:"Zimbabwe",africa:"African Union"},gz={su:"ru",gov:"us",mil:"us",amazon:"us",aws:"us"},dt={ru:["а","е","и","ivan","alexan","alexe","andre","anton","petr","konstan","sergey","dmitr","roman","pavel","vlad","nikol","nikita","maks","oleg","denis","viktor","victor","eugen","ikhail","italy","yura","igor","ov"],tr:["ilmaz","aya","demir","elik","ahin","ildiz","ildirım"],pt:["silva","santos","ferreira","pereira","oliveira","rodrigues","pereira","soares"],kr:["kim","won","khan"],jp:["sudzuki","yashi","kami","yuki","yama","sato","mato","moto","sawa","hiro"],uk:["watson","thomson","smith","johnson","williams","jones","brown","davis","miller","wilson","moore","taylor"],es:["ñ","gonzales","rodriguez","fernandez","garcia","lopez"],fr:["blanchet","boucher","deschamps","dupont","fournier","garnier","laurent","lavigne","martin","monet"],it:["rossi","ferrari","conti","romano","bruni","esposito","russo","marino","de luca","mancini"],pl:["ł"],ee:["õ"],gr:["α","ε","о","υ","β","π"],de:["ß"],il:["ה","י","ו"]},Gs={"-12:00":{countries:["us"]},"-11:00":{countries:["us"]},"-10:00":{countries:["us"]},"-09:30":{countries:["pf"]},"-09:00":{countries:["us"]},"-08:00":{countries:["us"]},"-07:00":{countries:["ca","us"]},"-06:00":{countries:["ca","us","mx","hn","ni"]},"-05:00":{title:"Canada or USA or Caribbean or Peru",countries:["ca","us","jm","dm","pa","pe","cu","co"]},"-04:00":{countries:["ca","us","South America"]},"-03:30":{title:"Newfoundland",countries:["ca"]},"-03:00":{countries:["ar","br"],name:{ar:dt.es,br:dt.pt}},"-02:00":{countries:["br"]},"-01:00":{countries:["pt"]},"+00:00":{countries:["pt","uk"],name:{pt:dt.pt,uk:dt.uk,ru:dt.ru}},"+01:00":{title:"Europe",countries:["uk","es","fr","de","it","ch","at","pl","be","li","rs","se","no","me","si","sk","dk","nl","dz","ne","td","ao"],name:{es:dt.es,fr:dt.fr,it:dt.it,pl:dt.pl,ee:dt.ee,gr:dt.gr,de:dt.de}},"+02:00":{title:"Finland or Ukraine or Balkans or Israel",countries:["fi","lv","lt","ee","ua","bg","gr","cy","il","eg","ly","za"],name:{es:dt.es,pl:dt.pl,ee:dt.ee,il:dt.il}},"+03:00":{countries:["ru","by","tr"],name:{ru:dt.ru,tr:dt.tr}},"+03:30":{countries:["ir"]},"+04:00":{countries:["ru"]},"+04:30":{countries:["af"]},"+05:00":{title:"Yekaterinburg or Middle Asia or Pakistan",countries:["ru","kz","uz","uz","kg","tm","tj","pk"],name:{ru:dt.ru}},"+05:30":{countries:["in"]},"+05:45":{countries:["np"]},"+06:00":{countries:["ru"]},"+06:30":{title:"Myanmar",countries:["mm"]},"+07:00":{countries:["th","vn","id"],name:{ru:dt.ru}},"+08:00":{title:"China or Philippines",countries:["cn","ph","ml"]},"+09:00":{countries:["kr","jp"],name:{kr:dt.kr,jp:dt.jp}},"+09:30":{countries:["au"]},"+10:00":{title:"Australia",countries:["au","ru"],name:{ru:dt.ru}},"+10:30":{countries:["au"]},"+11:00":{countries:["au"]},"+12:00":{countries:["nz"]},"+12:45":{countries:["nz"]},"+13:00":{countries:["ws"]},"+14:00":{title:"Line Islands",countries:["pf"]}};function _z(){let t=Object.keys(Gs);t.forEach((e,s)=>{var n,r;Gs[e].prev=((n=Gs[t[s-1]||""])==null?void 0:n.countries)||[],Gs[e].next=((r=Gs[t[s+1]||""])==null?void 0:r.countries)||[],Gs[e].title||(Gs[e].title=Gs[e].countries.map(u=>Pu[u]||u).join(" or "))})}_z();function hz(t,e,s){const n=Gs[t||""];if(!n)return"";if(n.countries.length===1)return Pu[n.countries[0]];if(e&&[...n.prev,...n.countries,...n.next].indexOf(e)!==-1){const r=gz[e||""]||e;return Pu[r]}if(s&&n.name){const r=s.toLowerCase();for(let u in n.name)if(n.name[u].some(p=>r.indexOf(p)!==-1))return Pu[u]}return n.title}const Wu=new Map,Fu=new Map,Uu=new Map,Kd=new Map,Zd=new Map,Xd=new Map;function fz(){Wu.clear(),Fu.clear(),Uu.clear(),Kd.clear(),Zd.clear(),Xd.clear()}function bv(t){return t.toLowerCase().replace(/[\s\t.\-_]+/gm,"")}function yz(t){return t.replace(/[.\-_]+/gm," ").replace(/([a-z])([A-Z])/gm,"$1 $2").trim()}function vz(t,e){let s=t[1]||"",n=t[2]||"";const r=`${s}>${n}`;let u=Zd.get(r);u||(u=dz(s,n),Zd.set(r,u));const{company:c,domain:p,device:_,emailType:h}=u,f=`${s}>${e}`;let v=Xd.get(f);v||(v=hz(e,p,s),Xd.set(r,u));const k=Kd.get(r);if(k)s=k.author,n=k.email;else{const x=bv(s),N=Wu.get(x);x&&N&&N!==s&&(Wu.set(x,N),s=N);const q=Uu.get(n);n&&q&&q!==s&&(Uu.set(n,q),s=q);const I=Fu.get(s);s&&I&&I!==n&&(Fu.set(s,I),n=I);const F=bv(s);s=yz(s),Wu.set(F,s),Uu.set(n,s),Fu.set(s,n),Kd.set(r,{author:s,email:n})}return{author:s,email:t[2]||n,emailType:h,device:_,company:c,country:v}}const kz=[0,31,59,90,120,151,181,212,243,273,304,334,365],bz=[0,31,60,91,121,152,182,213,244,274,305,335,366];function wz(t,e,s,n){const r=(t%100===0?t%400===0:t%4===0)?bz[e]+s:kz[e]+s,u=r/7>>0,p=r-u*7-n>n+1?1:0,_=r%7?p:0;return`${t}-W${u+_+1||1}`}let Jd=1,eg=new Date;function xz(){Jd=1,eg=new Date}function Cz(t){var ta,ps,aa;const e=t.split(">"),s=e[0]||"";let n=new Date(s);isNaN(n.getDay())&&(n=eg),eg=n;const r=n.getDay()-1,u=s.substring(0,10),c=s.substring(19,25),{author:p,email:_,emailType:h,device:f,company:v,country:k}=vz(e,c),x=t.substring(((ta=e[0])==null?void 0:ta.length)+((ps=e[1])==null?void 0:ps.length)+((aa=e[2])==null?void 0:aa.length)+3),N=r<0?6:r,q=n.getMonth(),I=n.getUTCFullYear(),F=n.getDate(),se={date:s,day:N,dayInMonth:F,hours:n.getHours(),minutes:n.getMinutes(),month:q,year:I,week:wz(I,q,F,N),timezone:c,timestamp:u,milliseconds:n.getTime(),author:p,email:_,emailType:h,message:x,company:v,country:k,device:f,text:"",type:"",scope:"",fileChanges:[]},te=x.indexOf("Pull request #")===0,ge=x.indexOf("Merge pull request #")===0,Ie=!1,De=x.indexOf("Merge commit ")===0||x.indexOf("Merge remote-tracking branch")===0||x.indexOf("Merge branch ")===0,ye=x.indexOf("Automatic merge from")===0;if(te||ge||De||Ie||ye){let rt=rs.MERGE,Yt,It,Qt,$,K,le,Ve,Ye,S,W;if(ge)rt=rs.PR_GITHUB,[It,Qt,$,K]=lz(x),Yt=Jd++,le=Yd($),[Ye]=Vd($,le);else if(te){rt=rs.PR_BITBUCKET;const ee=14,xe=x.substring(ee).match(/[^0-9]/)||{index:0},ze=ee+(xe.index||0);It=x.substring(ee,ze),Yt=Jd++;const We=x.substring(ze+1).trim();se.message=We,le=Yd(We),[Ye,S]=Vd(We,le)}else ye&&(rt=rs.AUTO_MERGE,[,$,K]=x.replace(/(Automatic\smerge\sfrom\s)|(\s->\s)/gim,",").replace(/(Merge\sremote-tracking\sbranch\s')|('\sinto\s)/gim,",").split(","));Ve=vv(le);const X=kv(le);return{...se,type:Ye,scope:S,prId:Yt||"",prExternalId:It||"",task:le||"",taskNumber:Ve||"",taskCode:X,repository:Qt||"",branch:$||"",toBranch:K||"",server:W,commitType:rt}}else{const rt=(x||"").indexOf(":"),Yt=rt>1?x.substring(rt+2).trim():x,It=Yd(x),Qt=vv(It),$=kv(It),[K,le]=Vd(x,It);return{...se,task:It,taskNumber:Qt,taskCode:$,text:Yt,type:K||"",scope:le||"",changes:0,added:0,removed:0}}}function jz(t){const e=t[t.length-1]==='"'?t.replace(/"/gm,"").replace(/\/\//gm,"/"):t;if(e.indexOf("{")===-1)return[e];const s=e.split(/(?:\{)|(?:\s=>\s)|(?:})/gm);if(s.length!==2&&s.length!==4)return[e];s.length===2&&s.unshift("");let n=`${s[0]||""}${s[1]||""}${s[3]||""}`,r=`${s[0]||""}${s[2]||""}${s[3]||""}`;return s[1]||(n=n.replace(/\/\//gm,"/")),s[2]||(r=r.replace(/\/\//gm,"/")),[n,r]}function Tz(t){let e=0;t[1]===" "?e=1:t[2]===" "?e=2:t[3]===" "?e=3:t[4]===" "?e=4:t[5]===" "&&(e=5);let s=e+2;return t[e+2]===" "?s=e+2:t[e+3]===" "?s=e+3:t[e+4]===" "?s=e+4:t[e+5]===" "?s=e+5:t[e+6]===" "&&(s=e+6),[t.substring(0,e),t.substring(e+1,s),t.substring(s+1)]}function Dz(t){let[e,s,n]=Tz(t),r=parseInt(e,10)||0,u=parseInt(s,10)||0,c=0;return r>u?(r=r-u,c=u,u=0):u>r?(u=u-r,c=r,r=0):(c=r,r=0,u=0),{path:n,addedLines:r,removedLines:u,changedLines:c}}function Sz(t){if(t[36]===" ")return{action:t[35],path:t.substring(37)};const e=t.split(" "),s=e[0]||"";return{action:s[s.length-1]||"",path:e.pop()||""}}function wv(t){const[e,s]=jz(t),n=e.toLowerCase(),r=s==null?void 0:s.toLowerCase();return{id:n,newId:r&&n!==r?r:void 0,path:s||e,action:"",addedLines:0,removedLines:0,changedLines:0}}function Az(t,e){t.added+=e.addedLines||0,t.removed+=e.removedLines||0,t.changes+=e.changedLines||0}function zz(t){return t[1]===" "||t[2]===" "||t[3]===" "||t[4]===" "||t[5]===" "||t[6]===" "||t[7]===" "}function Nz(t){let e=null;const s=[];let n=[],r=0,u=null;for(let c=0;c<t.length;c+=1){const p=t[c];if(p)if(p[0]===":"){const _=Sz(p);u=wv(_.path),u.action=_.action,n.push(u)}else if(zz(p)){const _=Dz(p);u=n[r],u||(u=wv(_.path),n.push(u)),r+=1,u.addedLines=_.addedLines,u.removedLines=_.removedLines,u.changedLines=_.changedLines,Az(e,_)}else e&&(e.fileChanges=n),n=[],r=0,e=Cz(p),s.push(e)}return e&&(e.fileChanges=n),fz(),xz(),s}const Mz={js:"Frontend",ts:"Frontend",tsx:"Frontend",vue:"Frontend",css:"Frontend",less:"Frontend",scss:"Frontend",cjs:"Frontend",html:"Frontend",jsp:"Frontend",swift:"IOS",kt:"Android",java:"Android",php:"Backend",perl:"Backend",py:"Backend",rb:"Backend",c:"Backend",h:"Backend",xml:"Config",json:"Config",yml:"Config",csv:"Design",png:"Design",jpg:"Design",jpeg:"Design",gif:"Design",webp:"Design"};function Rz(t){var r,u,c,p;const e=((r=t.extension.totalInfo)==null?void 0:r[0])||{},s=(e==null?void 0:e.extension)||"",n=Mz[s];return n==="Android"?((p=(c=(u=t.extension.totalInfoByName)==null?void 0:u.xml)==null?void 0:c.files)==null?void 0:p.AndroidManifest)?"Android":"Backend":n||s.toUpperCase()}function Ez(t,e,s){var _,h,f,v;if(!s.length||de.config.title)return de.config.title||"Assayo";const n=Rz(e)||"",r=((h=(_=t.pr.totalInfo)==null?void 0:_[0])==null?void 0:h.task)||"",u=((f=s==null?void 0:s[0])==null?void 0:f.year)||"",c=((v=s==null?void 0:s[s.length-1])==null?void 0:v.year)||"";return`${r.split("-").shift().toUpperCase()||""} ${n} (${u} - ${c})`}function Iz(t){const e=(t||"").split("_"),s=e.shift()||"",n=e.join("_")||"";return{isOpenInNewTab:!!(s&&n),link:{vk:`https://vk.com/${n}`,yt:`https://www.youtube.com/@${n}`,tg:`https://t.me/${n}`,tw:`https://x.com/${n}`,www:`https://${n}/`}[s],text:n,textIcon:{vk:"./social/vk.png",yt:"./social/youtube.png",tg:"./social/tg.png",tw:"./social/tw.png"}[s],color:"#FFFFFF",backgroundColor:{vk:"#5181B8",yt:"#FE0000",tg:"#29A6E6",tw:"#000000"}[s]||"#7F9BE0"}}class qz{constructor(){this.ref="",Et(this,{ref:ce,setReference:re})}setReference(e){this.ref=e||""}getBanner(){return Iz(this.ref)}}const Vr=new qz,tg={banner:"banner",banner_icon:"banner_icon"};function xv({className:t}){const e=Vr.getBanner();if(!e.isOpenInNewTab)return null;const{ref:s,link:n,banner:r,text:u,textIcon:c,color:p,backgroundColor:_}=e,h={title:u,to:n||"",target:"_blank",className:t};if(r)return o.jsx(wi,{...h,children:o.jsx("div",{className:tg.banner,style:{backgroundImage:`url(${r})`}})});const f=(s||"").split("_").splice(1).join(" ").toUpperCase(),v=_||"linear-gradient(135deg, rgba(64,117,252,1) 0%, rgba(172,179,246,1) 100%)";return o.jsx(wi,{...h,children:o.jsxs("div",{title:u,className:tg.banner,style:{color:p,background:v},children:[c?o.jsx("img",{alt:"",src:c,className:tg.banner_icon}):null,u||f||""]})})}class Oz{constructor(){this.language="",this.isOpen=!1,this.isEditor=!1,this.refKeyTranslation=new Map,Et(this,{language:ce,isOpen:ce,isEditor:ce,refKeyTranslation:ce,show:re,hide:re,editorOn:re,editorOff:re,update:re})}show(){this.isOpen=!0}hide(){this.isOpen=!1}editorOn(){this.isEditor=!0}editorOff(){this.isEditor=!1}update(e,s){this.refKeyTranslation.set(e,s),Ee.updateTranslation(e,s)}getList(){return Array.from(this.refKeyTranslation.entries()).map(([e,s])=>({key:e,value:s}))}export(){return this.getList().map(({key:e,value:s})=>`§ ${e}: ${s}`).join(`\r
|
||
`)}setLanguage(e){this.language=e}}const Nt=new Oz;window.translationStore=Nt;function $z({children:t,onClick:e}){const s=T.useRef(null);return o.jsx("span",{ref:s,onClick:n=>{var c;n.stopPropagation();const r=(c=s==null?void 0:s.current)==null?void 0:c.getBoundingClientRect();e((r==null?void 0:r.height)+4)},children:t})}const Lz={component_translation_input:"component_translation_input"};function Bz({defaultValue:t,autoClose:e,height:s,onChange:n}){const r=T.useRef(null),[u,c]=T.useState(t);return T.useEffect(()=>{var p;(p=r==null?void 0:r.current)==null||p.focus()},[r==null?void 0:r.current]),o.jsx("textarea",{ref:r,value:u,className:Lz.component_translation_input,style:{height:`${s}px`},onChange:p=>{p.stopPropagation(),c(p.target.value)},onBlur:()=>{e&&n(u||t)}})}function Cv({translationId:t,args:e,children:s}){const[n,r]=T.useState(0);if(!n)return o.jsx($z,{onClick:r,children:s||Ee.get(t,e)});const u=Array.isArray(t)?t:[t],c=n/u.length,p=u.length<2,_=u.map(h=>{const f=Ee.get(h);return o.jsx(Bz,{defaultValue:f,height:c,autoClose:p,onChange:v=>{r(0),f!==v&&Nt.update(t,v)}},h)});return o.jsx(o.Fragment,{children:_})}const Pz=U(({translationId:t,args:e})=>{const s=T.useMemo(()=>Ee.get(t,e),[t,e,Nt.language]);return o.jsx(o.Fragment,{children:s})});function ie(){return{t(t="",e){return Nt.isEditor?o.jsx(Cv,{translationId:t,args:e}):o.jsx(Pz,{translationId:t,args:e})},text(t="",e){return Ee.get(t,e)},wrapper(t="",e){return Nt.isEditor?o.jsx(Cv,{translationId:t,children:e}):e}}}const ba={card_with_icon:"card_with_icon",card_with_icon_icon:"card_with_icon_icon",card_with_icon_value:"card_with_icon_value",card_with_icon_title:"card_with_icon_title",card_with_icon_description:"card_with_icon_description",card_with_icon_scoring:"card_with_icon_scoring",card_with_icon_scoring_wrapper:"card_with_icon_scoring_wrapper",card_with_icon_small:"card_with_icon_small",card_with_icon_long:"card_with_icon_long",card_with_icon_banner:"card_with_icon_banner"};function jv({id:t,title:e,value:s,total:n}){const{text:r}=ie();return s?o.jsx("div",{className:ba.card_with_icon_scoring_wrapper,children:o.jsx("div",{id:t,title:r(e||"page.person.scoring.toolbar"),className:ba.card_with_icon_scoring,children:`${s} / ${n||s}`})}):null}function _e({title:t,description:e="",value:s,suffix:n="",icon:r,size:u="m",scoring:c}){const{t:p,text:_}=ie();if(!s&&s!==0)return null;const h=[ba.card_with_icon];return u==="l"&&h.push(ba.card_with_icon_long),u==="s"&&h.push(ba.card_with_icon_small),o.jsxs("figure",{className:h.join(" "),children:[r&&o.jsx("img",{className:ba.card_with_icon_icon,alt:_(t||""),src:r}),o.jsxs("p",{className:ba.card_with_icon_value,children:[ga,s,n||""]}),o.jsx("h4",{className:ba.card_with_icon_title,children:p(t||"")}),o.jsx("figcaption",{className:ba.card_with_icon_description,children:p(e||"")}),c?o.jsx(jv,{title:c==null?void 0:c.title,value:c==null?void 0:c.value,total:c==null?void 0:c.total}):null]})}const Yr={card_with_icon_small:"card_with_icon_small",card_with_icon_small2:"card_with_icon_small2",card_with_icon_small_icon:"card_with_icon_small_icon",card_with_icon_small_value:"card_with_icon_small_value",card_with_icon_small_title:"card_with_icon_small_title"};function ke({title:t,description:e="",value:s,icon:n,scoring:r}){const{t:u,text:c}=ie();if(!s||Array.isArray(s)&&!s.length)return null;const p=Yr.card_with_icon_small_value;let _=c(e);n&&(_="");const f=Array.isArray(s)&&typeof(s==null?void 0:s[0])=="string"?s.map(v=>o.jsx("p",{className:p,children:v},v)):o.jsxs("p",{className:p,children:[ga,s]});return o.jsxs("figure",{className:Yr.card_with_icon_small,children:[o.jsxs("div",{className:Yr.card_with_icon_small2,children:[n&&o.jsx("img",{alt:"",className:Yr.card_with_icon_small_icon,src:n}),f,o.jsx("figcaption",{title:_,className:Yr.card_with_icon_small_title,children:u(t||"")})]}),r?o.jsx(jv,{title:r==null?void 0:r.title,value:r==null?void 0:r.value,total:r==null?void 0:r.total}):null]})}function Wz({size:t="m"}){const e=[ba.card_with_icon,ba.card_with_icon_banner];return t==="s"&&e.push(ba.card_with_icon_small),t==="l"&&e.push(ba.card_with_icon_long),o.jsx(xv,{className:e.join(" ")})}const Ni={ui_kit_button:"ui_kit_button",ui_kit_button_slim:"ui_kit_button_slim",ui_kit_button_second:"ui_kit_button_second",ui_kit_button_border:"ui_kit_button_border",ui_kit_button_link:"ui_kit_button_link",disabled:"disabled",ui_kit_button_full_size:"ui_kit_button_full_size"};function ag(t){return{link:Ni.ui_kit_button_link,slim:Ni.ui_kit_button_slim,second:Ni.ui_kit_button_second,primary:Ni.ui_kit_button_primary,border:Ni.ui_kit_button_border,full_size:Ni.ui_kit_button_full_size}[t||""]||""}function Fz(t,e){let s="";return Array.isArray(t)?s=t.map(ag).join(" "):t?s=ag(t):s=ag("primary"),e&&(s+=` ${Ni.disabled}`),s}function Je({title:t,mode:e,disabled:s,className:n,onClick:r,children:u}){const c=Fz(e,s);return o.jsx("button",{title:t,className:`${Ni.ui_kit_button} ${c||""} ${n||""}`,onClick:()=>{r&&r()},children:u})}class Gu{constructor(){this.timer=null,this.limit=6,this.messages=[],Et(this,{messages:ce,show:re,startClearTimer:re})}static getTime(){return new Date().getTime()}show(e){this.messages.push({id:Gu.getTime(),title:Ee.get((e==null?void 0:e.title)||e||"components.notifications.save"),description:(e==null?void 0:e.description)||"",type:(e==null?void 0:e.type)||"success"}),this.messages.length>this.limit&&this.messages.shift(),this.startClearTimer()}startClearTimer(){this.timer||(this.timer=setInterval(()=>{const e=Gu.getTime()-3500;this.messages=this.messages.filter(s=>(s==null?void 0:s.id)>e),!this.messages.length&&(clearInterval(this.timer),this.timer=null)},500))}}const Hu=new Gu;function Tv(t){if(!t)return;const e=document.createElement("textarea");e.style.position="fixed",e.style.opacity="0",e.textContent=t,document.body.appendChild(e),e.select(),document.execCommand("copy"),document.body.removeChild(e)}const On={console:"console",console_header:"console_header",console_body:"console_body",console_header_icon:"console_header_icon",console_copy:"console_copy"};function Dv({className:t="",textForCopy:e,children:s}){return o.jsxs("div",{className:`${On.console} ${t||""}`,children:[o.jsxs("div",{className:On.console_header,children:[o.jsx("span",{className:On.console_header_icon}),o.jsx("span",{className:On.console_header_icon}),o.jsx("span",{className:On.console_header_icon})]}),o.jsx("div",{className:`${On.console_body} scroll_y`,children:s||e}),e?o.jsx(Je,{mode:"second",className:On.console_copy,onClick:()=>{Tv(e),Hu.show($t("components.console.notification"))},children:$t("components.console.button")}):null]})}const Zt={table_wrapper:"table_wrapper",table:"table",table_row:"table_row",table_row_hide:"table_row_hide",table_row_selected:"table_row_selected",table_sub_row:"table_sub_row",table_cell:"table_cell",table_header_cell:"table_header_cell",table_fixed:"table_fixed",table_cell_number:"table_cell_number",table_cell_icon_open:"table_cell_icon_open",table_cell_icon_close:"table_cell_icon_close"};function sg(t,e,s,n){const r=[t];if(n&&r.push(n),e.className){const u=typeof e.className=="function"?e.className(...s):e.className;r.push(u)}return e.isFixed&&r.push(Zt.table_fixed),r.join(" ")}const Sv={table_sort_up:"table_sort_up",table_sort_down:"table_sort_down"};function Uz({columns:t,className:e="",updateSort:s=()=>{}}){const{t:n}=ie();let r=0;const u=t.map((c,p)=>{var f;r+=((f=t[p-1])==null?void 0:f.width)||0;const _=sg(Zt.table_header_cell,c,["header",p],e),h=()=>{!c.isSortable||!s||s([{property:typeof c.isSortable=="string"?c.isSortable:c.properties,direction:[1,-1][c.sortDirection||0]||0}])};return typeof c.title=="function"?o.jsx("div",{className:_,style:{width:c.width,left:r},children:c.title()},`${c.title}_${p}`):o.jsxs("div",{className:_,style:{width:c.width,left:r},children:[o.jsx("span",{onClick:h,children:n(c.title)}),c.title&&c.sortDirection===-1&&o.jsx("div",{className:Sv.table_sort_down}),c.title&&c.sortDirection===1&&o.jsx("div",{className:Sv.table_sort_up})]},`${c.title}_${p}`)});return o.jsxs("div",{className:`${Zt.table_row} ${e}`,children:[ga,u]})}var C=(t=>(t.STRING="STRING",t.NUMBER="NUMBER",t.SHORT_NUMBER="SHORT_NUMBER",t.DETAILS="DETAILS",t.PULL_REQUESTS="PULL_REQUESTS",t.TASK="TASK",t.TAGS="TAGS",t))(C||{});function Av({column:t,row:e,rowIndex:s,marginLeft:n,className:r}){const u=sg(Zt.table_cell,t,["body",e],r),c=t.isFixed?n:0,p=t.onClick?(()=>{t.onClick&&t.onClick(e)}):void 0,_=t.properties?e[t.properties]:e,h=t.formatter?t.formatter(_,s):_,f=typeof t.template=="function"?t.template(h,e,s):`${t.prefixes??""}${h??""}${t.suffixes??""}${ga}`,v=typeof f=="string"&&f.length>20?f:null;return o.jsx("div",{title:v,className:u,style:{left:c,width:t.width,cursor:p?"pointer":"auto"},onClick:p,children:f},String(t.title))}Av.defaultPeops={className:""};function zv({column:t,row:e,className:s,rowConfig:n,marginLeft:r,updateRowsConfig:u}){const c=n||{id:1},p=t!=null&&t.isFixed?r:0,_=c!=null&&c.details?Zt.table_cell_icon_open:Zt.table_cell_icon_close,h=sg(Zt.table_cell,t,["body",e],s),f=e==null?void 0:e[(t==null?void 0:t.properties)||""],k=(Array.isArray(f)||f instanceof Set?(f==null?void 0:f.length)||(f==null?void 0:f.size):!!f)||!(t!=null&&t.properties),x=()=>{!k||!u||u({...c,details:!(c!=null&&c.details)})};return o.jsx("div",{className:h,style:{left:p,width:t.width,cursor:"pointer"},onClick:x,children:k&&o.jsx("img",{alt:"",className:_,src:"./assets/list/arrow.svg"})},String(t.title))}zv.defaultPeops={className:""};function Nv(t,e){return(t==null?void 0:t.id)||(t==null?void 0:t.uuid)||`${t==null?void 0:t.title}-${e}`}function Gz(t){return{id:t,details:!1,disabled:!1}}function Hz(t=[],e={}){const s={};return t.map((n,r)=>{const u=Nv(n,r);s[u]=e[u]||Gz(u)}),s}function Vz({rows:t,disabledRow:e,columns:s,tableWidth:n,className:r="",rowsConfig:u,updateRowsConfig:c}){var h;const p=[],_=(h=s.find(f=>f.template===C.DETAILS))==null?void 0:h.formatter;return t==null||t.forEach((f,v)=>{let k=0;const x=(u||{})[Nv(f,v)],N=s.map((I,F)=>{var te;const se=`${I.title}_${F}`;return k+=((te=s[F-1])==null?void 0:te.width)||0,I.template===C.DETAILS?o.jsx(zv,{column:I,row:f,rowConfig:x,marginLeft:k,updateRowsConfig:c},se):o.jsx(Av,{column:I,row:f,rowIndex:v,marginLeft:k},se)}),q=[Zt.table_row,r];e&&e(f)&&q.push(Zt.table_row_hide),x!=null&&x.details&&q.push(Zt.table_row_selected),p.push(o.jsx("div",{className:q.join(" "),children:N},v)),!(!(x!=null&&x.details)||!_)&&p.push(o.jsx("div",{style:{width:`${n}px`},className:`${Zt.table_sub_row} ${r}`,children:_(f)||null},`${v}-detail`))}),o.jsx(o.Fragment,{children:p})}function Yz(t,e){if(!e)return 150;const s=t.filter(({isShow:_})=>_!==!1),n=s.map(_=>_.userWidth||_.defaultWidth||0),r=n.reduce((_,h)=>_+h,0);let u=n.filter(_=>!_).length;if(!u)return 40;let c=e-r,p=Math.floor(c/u);return s.forEach(_=>{_.userWidth||_.defaultWidth||!_.minWidth||_.minWidth<p||!u||(c-=_.minWidth,u-=1,p=c/u)}),Math.max(p||40,40)}function Qz(t=[],e=150,s){const n=s==null?void 0:s.reduce((c,p)=>(c[p.property]=p.direction,c),{}),r=t.map(c=>{const p=c.minWidth?Math.max(c.minWidth,e):e;return{...c,sortDirection:typeof(c==null?void 0:c.isSortable)=="string"?n[(c==null?void 0:c.isSortable)||""]||0:n[(c==null?void 0:c.properties)||""]||0,width:c.userWidth||c.defaultWidth||p}}),u=Math.floor(r.length/2);return[...r.filter((c,p)=>c.isFixed&&p<=u),...r.filter(c=>!c.isFixed),...r.filter((c,p)=>c.isFixed&&p>u)]}const $n={ui_kit_tags:"ui_kit_tags",ui_kit_tags_item:"ui_kit_tags_item",ui_kit_tags_item_empty:"ui_kit_tags_item_empty",ui_kit_tags_item_error:"ui_kit_tags_item_error",ui_kit_tags_item_warning:"ui_kit_tags_item_warning",ui_kit_tags_item_success:"ui_kit_tags_item_success"},yt={ERROR:"error",WARNING:"warning",SUCCESS:"success"},Kz={[yt.ERROR]:$n.ui_kit_tags_item_error,[yt.WARNING]:$n.ui_kit_tags_item_warning,[yt.SUCCESS]:$n.ui_kit_tags_item_success,empty:$n.ui_kit_tags_item_empty};function Vu({value:t,title:e,mode:s}){const{t:n}=ie(),r=s?`${$n.ui_kit_tags_item} ${Kz[s]||""}`:$n.ui_kit_tags_item;return o.jsx("div",{title:e,className:r,children:n(`${t}`)||t})}Vu.displayName="UiKitTag";function ig({value:t}){const s=(Array.isArray(t)?t:[t]).filter(p=>p);if(!(s!=null&&s.length))return null;const n=s[0],r=s.slice(1);let u=n,c="";return n&&typeof n=="object"&&(u=n==null?void 0:n.title,c=n==null?void 0:n.mode),o.jsxs("div",{className:$n.ui_kit_tags,children:[o.jsx(Vu,{value:u,mode:c}),r.length>0?o.jsx(Vu,{title:r.join(", "),mode:"empty",value:`+${r.length}`}):null]})}ig.displayName="UiKitTags";function Mv(t){return wt.Children.map(t,e=>{var _,h,f,v,k;if(!wt.isValidElement(e))return null;let s=e.props.properties,n=e.props.template||C.STRING;const r=((_=e==null?void 0:e.props)==null?void 0:_.width)||{[C.SHORT_NUMBER]:70,[C.PULL_REQUESTS]:80,[C.TASK]:120}[n||""]||0,u=((h=e==null?void 0:e.props)==null?void 0:h.className)||{[C.STRING]:"",[C.NUMBER]:Zt.table_cell_number,[C.SHORT_NUMBER]:Zt.table_cell_number}[n||""]||"",c=((f=e==null?void 0:e.props)==null?void 0:f.minWidth)||{[C.STRING]:200,[C.NUMBER]:110,[C.TAGS]:100}[n||""]||40;n===C.PULL_REQUESTS?n=x=>{var F;if(!x.length)return"";const q=(F=A.statisticsByCommits.pr.totalInfoByName.get(x[0]))==null?void 0:F.prExternalId,I=o.jsx(Hs,{prId:q});return x.length===1?I:o.jsxs(o.Fragment,{children:[I,o.jsx(Vu,{mode:"empty",value:`+${x.length-1}`})]})}:n===C.TASK?n=x=>o.jsx(Ri,{task:x}):n===C.TAGS&&(n=x=>o.jsx(ig,{value:x}));const p=(v=e==null?void 0:e.props)!=null&&v.isSortable?(k=e==null?void 0:e.props)==null?void 0:k.isSortable:[C.STRING,C.NUMBER,C.SHORT_NUMBER].includes(n);return{...e.props,properties:s,className:u,template:n,isSortable:p,minWidth:c,defaultWidth:r,width:void 0,userWidth:void 0}})}let Rv=document.body.style.overflow;function Ev(t){const e=document.getElementById("root");e&&(e.style.filter=t?`blur(${t}px)`:"none")}function ng(){document.body.style.overflow=Rv}function Iv(t){Rv=document.body.style.overflow,document.body.style.overflow="hidden",t&&setTimeout(ng,t)}function Zz(){return Iv(),Ev(1),()=>{ng(),Ev()}}const qv={on:ng,off:Iv,useOnOff:Zz};let Ov,Yu=[];const Xz=()=>{clearTimeout(Ov),Ov=setTimeout(()=>{Yu.forEach(t=>t())},300)};window.addEventListener("resize",Xz);function $v(t,e){T.useEffect(()=>(Yu.push(t),()=>{Yu=Yu.filter(s=>s!==t)}),e)}function ws({rows:t=[],sort:e=[],headless:s,disabledRow:n,updateSort:r=()=>{},children:u}){var I;const[c,p]=T.useState(0),[_,h]=T.useState({});if(!t||!t.length)return null;const f=wt.useRef(null),v=(I=f==null?void 0:f.current)==null?void 0:I.offsetWidth;T.useEffect(()=>{p(v)},[v]),T.useEffect(()=>{const F=Hz(t,_);h(F)},[t]),$v(()=>{var F;p((F=f==null?void 0:f.current)==null?void 0:F.offsetWidth)},[f==null?void 0:f.current]);const k=Mv(u),x=Yz(k,c),N=Qz(k,x,e),q=F=>{h({..._,[F.id]:F})};return o.jsx("div",{ref:f,className:`${Zt.table_wrapper} scroll_x`,onTouchStart:F=>F.stopPropagation(),onMouseDown:F=>F.stopPropagation(),children:o.jsxs("div",{className:Zt.table,children:[s===!0?null:o.jsx(Uz,{columns:N,updateSort:r}),o.jsx(Vz,{rows:t,columns:N,tableWidth:c-18,disabledRow:n,rowsConfig:_,updateRowsConfig:q})]})})}function w({template:t,title:e="",properties:s,prefixes:n="",suffixes:r="",formatter:u,className:c="",style:p,isFixed:_=!1,isSortable:h=!1,isResizable:f=!1,isDraggable:v=!1,isShow:k=!0,minWidth:x,width:N,onClick:q}){return o.jsx(o.Fragment,{children:{template:t,title:e,properties:s,prefixes:n,suffixes:r,formatter:u,className:c,style:p,isFixed:_,isSortable:h,isResizable:f,isDraggable:v,isShow:k,minWidth:x,width:N,onClick:q}})}function Lv(t,e){if(!e)return"";const s=e[0]==="#"?e.replace("#",""):e;return`${t}${s}`}function Bv(t){var e;return Lv(((e=de==null?void 0:de.config)==null?void 0:e.prefixForTask)||"/",t)}function Pv(t){var e;return Lv(((e=de==null?void 0:de.config)==null?void 0:e.prefixForPR)||"/",t)}const Wv=new TextEncoder,Jz=(()=>{const t=new Uint32Array(256);for(let e=0;e<256;e+=1){let s=e;for(let n=0;n<8;n+=1)s=s&1?3988292384^s>>>1:s>>>1;t[e]=s}return t})();function eN(t){let e=4294967295;for(let s=0;s<t.length;s+=1)e=Jz[(e^t[s])&255]^e>>>8;return(e^4294967295)>>>0}function Qu(t){const e=t.reduce((r,u)=>r+u.length,0),s=new Uint8Array(e);let n=0;return t.forEach(r=>{s.set(r,n),n+=r.length}),s}function gt(t){return Uint8Array.of(t&255,t>>>8&255)}function wa(t){return Uint8Array.of(t&255,t>>>8&255,t>>>16&255,t>>>24&255)}function tN(t){const e=[],s=[];let n=0;t.forEach(u=>{const c=Wv.encode(u.name),p=Wv.encode(u.content),_=eN(p),h=p.length,f=Qu([wa(67324752),gt(20),gt(0),gt(0),gt(0),gt(0),wa(_),wa(h),wa(h),gt(c.length),gt(0),c,p]),v=Qu([wa(33639248),gt(20),gt(20),gt(0),gt(0),gt(0),gt(0),wa(_),wa(h),wa(h),gt(c.length),gt(0),gt(0),gt(0),gt(0),wa(0),wa(n),c]);e.push(f),s.push(v),n+=f.length});const r=Qu(s);return Qu([...e,r,wa(101010256),gt(0),gt(0),gt(t.length),gt(t.length),wa(r.length),wa(n),gt(0)])}function og(t){return t.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F]/g,"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function Fv(t){let e="",s=t+1;for(;s>0;){const n=(s-1)%26;e=`${String.fromCharCode(65+n)}${e}`,s=Math.floor((s-1)/26)}return e}function aN(t,e,s){if(t==null||t==="")return"";if(typeof t=="number"&&Number.isFinite(t))return`<c r="${e}"><v>${t}</v></c>`;const n=typeof t=="string"?/^(\d{2})\.(\d{2})\.(\d{4})$/.exec(t):null;if(n){const c=Math.round(Date.UTC(+n[3],+n[2]-1,+n[1])/864e5)+25569;return`<c r="${e}" s="2"><v>${c}</v></c>`}if(typeof t=="object"&&t.href){s.push({ref:e,href:String(t.href)});const c=String(t.text||t.href),p=c!==c.trim()?' xml:space="preserve"':"";return`<c r="${e}" t="inlineStr" s="1"><is><t${p}>${og(c)}</t></is></c>`}const r=String(t),u=r!==r.trim()?' xml:space="preserve"':"";return`<c r="${e}" t="inlineStr"><is><t${u}>${og(r)}</t></is></c>`}function sN(t){const e=[],s=t.map((h,f)=>{const v=f+1,k=(h||[]).map((x,N)=>aN(x,`${Fv(N)}${v}`,e)).join("");return`<row r="${v}">${k}</row>`}).join(""),n=t.length,r=Math.max(...t.map(h=>h?h.length:0),1),u=`A1:${Fv(r-1)}${n}`,c=e.length?`<hyperlinks>${e.map((h,f)=>`<hyperlink ref="${h.ref}" r:id="rId${f+1}"/>`).join("")}</hyperlinks>`:"",p=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
|
||
<dimension ref="${u}"/>
|
||
<cols><col min="1" max="${r}" width="20.0" customWidth="1"/></cols>
|
||
<sheetData>${s}</sheetData>
|
||
${c}
|
||
</worksheet>`,_=e.length?`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
||
${e.map((h,f)=>`<Relationship Id="rId${f+1}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Target="${og(h.href)}" TargetMode="External"/>`).join("")}
|
||
</Relationships>`:"";return{sheetXml:p,relsXml:_}}function iN(t){if(!t||!t.length)return;const e=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
|
||
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
|
||
<Default Extension="xml" ContentType="application/xml"/>
|
||
<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>
|
||
<Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
|
||
<Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>
|
||
</Types>`,s=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
||
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
|
||
</Relationships>`,n=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
|
||
<sheets>
|
||
<sheet name="Assayo" sheetId="1" r:id="rId1"/>
|
||
</sheets>
|
||
</workbook>`,r=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
||
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>
|
||
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>
|
||
</Relationships>`,u=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||
<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
|
||
<fonts count="2">
|
||
<font><sz val="11"/><color theme="1"/><name val="Calibri"/><family val="2"/></font>
|
||
<font><sz val="11"/><color theme="10"/><name val="Calibri"/><family val="2"/><u/></font>
|
||
</fonts>
|
||
<fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills>
|
||
<borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders>
|
||
<cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs>
|
||
<cellXfs count="3">
|
||
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>
|
||
<xf numFmtId="0" fontId="1" fillId="0" borderId="0" xfId="0" applyFont="1"/>
|
||
<xf numFmtId="14" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/>
|
||
</cellXfs>
|
||
</styleSheet>`,{sheetXml:c,relsXml:p}=sN(t),_=[{name:"[Content_Types].xml",content:e},{name:"_rels/.rels",content:s},{name:"xl/workbook.xml",content:n},{name:"xl/_rels/workbook.xml.rels",content:r},{name:"xl/styles.xml",content:u},{name:"xl/worksheets/sheet1.xml",content:c}];return p&&_.push({name:"xl/worksheets/_rels/sheet1.xml.rels",content:p}),tN(_)}function Ku(t,e){const s=document.createElement("a");s.href=URL.createObjectURL(t),s.download=e,document.body.append(s),s.click(),s.remove(),setTimeout(()=>URL.revokeObjectURL(s.href),7e3)}function nN(t){const e=wt.Children.map(t,r=>{if(!wt.isValidElement(r))return null;const u=r.props.template||C.STRING;return{...r.props,template:u}}),s=[C.PULL_REQUESTS,C.TASK,C.TAGS];return Array.from(e).filter(r=>(r==null?void 0:r.title)||s.includes(r==null?void 0:r.template))}function oN(t){return t.map(e=>$t(typeof e.title=="string"?e.title:""))}function lN(t){return e=>t.map(s=>{var u;let n=s.properties?e[s.properties]:e;if(s.formatter===oe)return Pd(n);if(s.formatter&&(n=s.formatter(n)),s.template===C.TASK){const c=typeof n=="string"?n:"",p=Bv(c);return p?{href:p,text:c}:""}if(s.template===C.PULL_REQUESTS){const c=Array.isArray(n)?n:[];if(!c.length)return"";const _=(u=A.statisticsByCommits.pr.totalInfoByName.get(c[0]))==null?void 0:u.prExternalId,h=Pv(_);if(!h)return"";const f=c.length>1?` +${c.length-1}`:"";return{href:h,text:`PR${f}`}}if(Array.isArray(n))return n.join(", ");if(s.template===C.TAGS){const c=n&&typeof n=="object"?n.title:n;return $t(c||"")}return typeof n==="object"?!s.formatter&&s.template?"":Object.entries(n).map(c=>`${$t(c[0])||""}: ${c[1]||""}`).join(", "):n})}function rN(t,e,s){const n=nN(e),r=lN(n),u=[oN(n),...t.map(r)],c="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",p=iN(u);if(!p)return;const _=new Blob([p],{type:c});return Ku(_,`${s}.xlsx`)}const Uv=navigator.userAgent||navigator.vendor||window.opera||"",Vt=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(Uv)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(Uv.substr(0,4))||window.innerWidth<700;class mN{constructor(){this.mode="",this.isOpen=!1,Et(this,{isOpen:ce,on:re,off:re,toggle:re})}on(e){this.isOpen=!0,this.mode=e||""}off(){this.isOpen=!1,this.mode=""}toggle(e){this.isOpen?this.off():this.on(e)}}const xa=new mN,Mi={card:"card",card_wrapper:"card_wrapper",card_title:"card_title",card_line:"card_line",card_line_title:"card_line_title",card_line_value:"card_line_value",card_line_with_template:"card_line_with_template",card_line_with_template_title:"card_line_with_template_title"};function Gv({column:t,item:e,value:s,className:n}){const{t:r}=ie(),u=typeof t.className=="function"?t.className("body",e):t.className,c=typeof s;return!t.title||c==="undefined"||s===""||c==="number"&&isNaN(s)||c==="object"&&!s?null:o.jsxs("div",{className:`${Mi.card_line} ${n||""} ${u||""}`,children:[o.jsx("div",{className:Mi.card_line_title,children:r(String(t.title))}),o.jsx("div",{className:Mi.card_line_value,children:s})]})}Gv.defaultPeops={className:""};function Hv({column:t,item:e,className:s,value:n}){const{t:r}=ie(),u=typeof t.className=="function"?t.className("body",e):t.className;return n?o.jsxs("div",{className:`${Mi.card_line_with_template} ${s||""} ${u||""}`,children:[o.jsx("div",{className:Mi.card_line_with_template_title,children:r(String(t.title))}),n]}):null}Hv.defaultPeops={className:""};function Vv({column:t,item:e,className:s,value:n}){const r=typeof t.className=="function"?t.className("body",e):t.className;return o.jsx("div",{className:`${Mi.card_title} ${s||""} ${r||""}`,children:n||"—"},String(t.title))}Vv.defaultPeops={className:""};function uN({item:t,lines:e,className:s="",customStyle:n}){let r=!1;const u=e.map((c,p)=>{const _=c.properties?t[c.properties]:t,h=c.formatter?c.formatter(_):_,f=typeof c.template=="function",v=f?c.template(h,t):`${c.prefixes??""}${h??""}${c.suffixes??""}`;return!r&&c.title?(r=!0,o.jsx(Vv,{item:t,column:c,value:v},`${c.title}_${p}`)):f&&(!c.width||c.width&&c.width>110)?o.jsx(Hv,{item:t,column:c,value:v},`${c.title}_${p}`):o.jsx(Gv,{item:t,column:c,value:v},`${c.title}_${p}`)});return o.jsx("div",{className:`${Mi.card} ${s}`,style:n||{},children:u})}function cN(t=[]){const e=t.reduce((s,n,r)=>{if(n.template===C.DETAILS)return s;if(r===0)return s.text.push(n),s;const u=t[r+1];return n.template===C.SHORT_NUMBER&&typeof(u==null?void 0:u.template)=="function"?(s.text.push({...n,title:String(u==null?void 0:u.title)}),s):(typeof n.template=="function"?r>0&&t[r-1].template===C.SHORT_NUMBER?s.shortChart.push(n):s.longChart.push(n):s.text.push(n),s)},{text:[],shortChart:[],longChart:[]});return[...e.text,...e.longChart]}function pN({items:t=[],className:e,columnCount:s,children:n}){const[r,u]=T.useState(s||4),c=T.useRef(null);if(!t||!t.length)return null;const p=Mv(n),_=cN(p);T.useLayoutEffect(()=>{var k;const f=(k=c==null?void 0:c.current)==null?void 0:k.offsetWidth;let v=4;f<1100&&(v=3),f<850&&(v=2),f<700&&(v=1),u(s||v)},[]);const h=t==null?void 0:t.map((f,v)=>o.jsx(uN,{item:f,lines:_,customStyle:[{width:"calc(100% - 24px)"},{width:"calc(50% - 24px)"},{width:"calc(33.33% - 24px)"},{width:"calc(25% - 24px)"}][r-1],className:e},v));return o.jsx("div",{ref:c,className:Mi.card_wrapper,children:h})}const lg={main_wrapper:"main_wrapper",main_wrapper_white:"main_wrapper_white"};function Ln({children:t,className:e,template:s}){const n=s?`${lg.main_wrapper} ${lg.main_wrapper_white}`:`${lg.main_wrapper}`,r=s==="table"?{paddingTop:0}:{};return o.jsx("div",{className:`${n} ${e||""}`,style:r,children:t})}class dN{constructor(){Pe(this,gm);this.key="view_settings",this.version=1,this.settings={},this.load(),Et(this,{settings:ce,load:re,setItem:re})}load(){const e=JSON.parse(localStorage.getItem(this.key)||"{}")||{};e.version===this.version&&(this.settings=e.settings)}save(){if(Object.keys(this.settings).length===0){localStorage.removeItem(this.key);return}localStorage.setItem(this.key,JSON.stringify({version:this.version,settings:this.settings}))}setItem(e,s,n){const r=V(this,gm,gf).call(this,e);r&&(!s||s===n?delete this.settings[r]:this.settings[r]=s,this.save())}getItem(e,s){var r;const n=V(this,gm,gf).call(this,e);return((r=this.settings)==null?void 0:r[n])||s}}gm=new WeakSet,gf=function(e){return e?Array.isArray(e)?e.join("."):typeof e=="object"?[e.type,e.page].join("."):e:""};const gN=new dN,Yv={data_view_buttons:"data_view_buttons",data_view_icon:"data_view_icon"};function je({rowsForExcel:t=[],rows:e=[],sort:s=[],type:n,mode:r,columnCount:u,className:c,fullScreenMode:p="",disabledRow:_,updateSort:h=()=>{},children:f}){const{text:v}=ie(),k=da(),x=gN.getItem(k,Vt?"cards":"table"),[N,q]=T.useState(n||x);return!e||!e.length?null:o.jsxs(o.Fragment,{children:[r!=="details"&&o.jsx("div",{style:{position:"relative"},children:o.jsxs("div",{className:Yv.data_view_buttons,children:[!Vt&&o.jsx("img",{alt:"",src:"./assets/icons/Download.svg",className:Yv.data_view_icon,onClick:()=>{const I=document.title,F=v(`plugin.${k.type}_${k.page}.sidebar`),se=`${I} - ${F}`;rN(t!=null&&t.length?t:e,f,se)}}),!1,!1]})}),N==="table"&&r!=="details"&&o.jsx(Ln,{template:"table",children:o.jsx(ws,{rows:e,sort:s,disabledRow:_,updateSort:h,children:f})}),N==="table"&&r==="details"&&o.jsx(ws,{rows:e,sort:s,disabledRow:_,updateSort:h,children:f}),N==="cards"&&o.jsx(pN,{items:e,columnCount:u,className:c,children:f})]})}const Bn={day_info_wrapper:"day_info_wrapper",day_info_author:"day_info_author",day_info_date:"day_info_date",day_info_message:"day_info_message",day_info_link:"day_info_link",day_info_row:"day_info_row"};function _N({commits:t}){const e=t.map(s=>o.jsxs("div",{className:Bn.day_info_row,children:[o.jsx("span",{className:Bn.day_info_date,children:FS(s.date)}),o.jsx("span",{className:Bn.day_info_message,children:s.message})]},s.date));return o.jsx(o.Fragment,{children:e})}function hN({tasks:t}){const e=Object.entries(t).map(([s,n])=>{var p;const r=jt.tasks.totalInfoByName.get(s),u=n[0].milliseconds,c=(p=r==null?void 0:r.prIds)==null?void 0:p.find(_=>jt.pr.totalInfoByName.get(_).dateMerge>=u);return o.jsxs("div",{children:[o.jsxs("div",{className:Bn.day_info_link,children:[o.jsx(Ri,{task:s}),o.jsx(Hs,{prId:c})]}),o.jsx(_N,{commits:n})]},`${c}${s}`)});return o.jsx(o.Fragment,{children:e})}function fN({timestamp:t,events:e,author:s}){const{text:n}=ie();let r=0;const p=jt.timestamp.totalInfo.allCommitsByTimestamp.find(f=>f.timestamp===t).tasksByAuthor||{},_=jt.author.list,h=Object.entries(p).sort((f,v)=>_.indexOf(f[0])-_.indexOf(v[0])).map(([f,v])=>{var x,N,q,I,F;if(s&&f!==s)return null;r+=Object.keys(v).length;let k="";return(x=e==null?void 0:e.vacationStart)!=null&&x.has(f)&&(k=n("plugin.team_month.vacation.first")),(N=e==null?void 0:e.vacationEnd)!=null&&N.has(f)&&(k=n("plugin.team_month.vacation.last")),(q=e==null?void 0:e.firstDay)!=null&&q.has(f)&&(k=n("plugin.team_month.work.first")),(I=e==null?void 0:e.lastDay)!=null&&I.has(f)&&(k=n("plugin.team_month.work.last")),(F=e==null?void 0:e.travel)!=null&&F.has(f)&&(k=n("plugin.team_month.travel")),o.jsxs("div",{className:Bn.day_info,children:[o.jsx("h3",{className:Bn.day_info_author,children:`${f} ${k}`}),o.jsx(hN,{tasks:v})]},f)});return o.jsx("div",{className:Bn.day_info_wrapper,style:{columnCount:r>20?2:1},children:h})}const rg={description_title:"description_title",description_text:"description_text",description_list:"description_list"};function Qv(t,e){const s=(t||"").split(/(\[[^\]]+\])/gim).map(n=>{if((n==null?void 0:n[0])!=="[")return n;const[r,u]=n.replace(/\[|\]/gim,"").split("|");return o.jsx(wi,{target:"_blank",rel:"noreferrer",className:e||"",to:u||"",children:r},n)});return o.jsx(o.Fragment,{children:s})}function Zu(t,e){const s=(t||"").split("*").map((n,r)=>r%2?o.jsx("b",{children:Qv(n,e)},n):o.jsx("span",{children:Qv(n,e)},n));return o.jsx(o.Fragment,{children:s})}function yN({text:t,style:e,className:s}){return o.jsx("p",{style:e||{},className:`${rg.description_list} ${s||""}`,children:Zu(t,s)})}function vN({text:t,style:e,className:s}){return o.jsx("h6",{style:e||{},className:`${rg.description_title} ${s||""}`,children:Zu(t,s)})}function kN({text:t,style:e,className:s}){return o.jsx("p",{style:e||{},className:`${rg.description_text} ${s||""}`,children:Zu(t)})}function ot({text:t="",style:e,className:s,translationId:n}){const{wrapper:r}=ie(),u=t||Ee.get(n),p=(Array.isArray(u)?u:(u||"").trim().split(/\n+/gm)).map((_,h)=>{const f=_.substring(0,2),v=_.substring(2),k=`${v}${h}`;return f==="- "?o.jsx(yN,{text:v,style:e,className:s},k):f==="# "?o.jsx(vN,{text:v,style:e,className:s},k):o.jsx(kN,{text:_,style:e,className:s},k)});return n?r(n,p):o.jsx(o.Fragment,{children:p})}const bN={external_link:"external_link"};function mg({link:t,text:e,className:s}){return o.jsx(wi,{to:t,target:"_blank",className:`${bN.external_link} ${s||""}`,children:e})}function Hs({prId:t="",text:e="",className:s=""}){const n=Pv(t);return n?o.jsx(mg,{text:e||"PR",link:n,className:s}):null}function Ri({task:t="",className:e=""}){const s=Bv(t);return s?o.jsx(mg,{text:t,link:s,className:e}):null}function Kv({email:t="",className:e=""}){if(!t)return null;const s=(t.split("+").pop()||"").split("@").shift();return s?o.jsx(mg,{text:t,link:`https://github.com/${s}`,className:e}):null}const Xu={logo:"logo",logo_icon:"logo_icon",logo_text:"logo_text"},Zv=U(({showDescription:t,className:e})=>{var c;const{link:s,text:n,isOpenInNewTab:r}=Vr.getBanner()||{},u=(c=de.config)==null?void 0:c.logo;return o.jsxs("figure",{className:`${Xu.logo} ${e||""}`,children:[o.jsx(wi,{to:s||"",target:r?"_blank":"",className:Xu.logo_icon_link,children:o.jsx("img",{alt:"",src:u,className:Xu.logo_icon})}),s&&t?o.jsxs("p",{className:Xu.logo_text,children:["при информационной поддержке ",n]}):null]})});function Y({value:t,children:e}){return!t||Array.isArray(t)&&!t.length?null:o.jsx(o.Fragment,{children:e})}const Ba={nothing_found:"nothing_found",nothing_found_wrapper:"nothing_found_wrapper",nothing_found_icon:"nothing_found_icon",nothing_found_title:"nothing_found_title",nothing_found_text:"nothing_found_text",nothing_found_console:"nothing_found_console",nothing_found_link:"nothing_found_link"};function wN(){const{t}=ie();return o.jsxs(o.Fragment,{children:[o.jsx("p",{className:Ba.nothing_found_title,children:t("components.nothingFound.common.title")}),o.jsxs("p",{className:Ba.nothing_found_text,children:['Система обработает больше данных, если коммиты будут подписаны в формате "',o.jsx("a",{href:"https://www.conventionalcommits.org/en/v1.0.0/",target:"_blank",rel:"noreferrer",className:Ba.nothing_found_link,children:"Git commit message convention"}),'". Шаблон:']}),o.jsx("p",{className:Ba.nothing_found_console,children:t("components.nothingFound.common.console")}),o.jsx("p",{className:Ba.nothing_found_text,children:t("components.nothingFound.common.example")}),o.jsxs("p",{className:Ba.nothing_found_console,children:["JIRA-0001 feat(profile): add user avatar",o.jsx("br",{}),"JIRA-0002 fix(profile): changed link for user web site",o.jsx("br",{}),"JIRA-0003 test(profile): added unit tests for edit phone"]})]})}function xN(){return o.jsx("p",{className:Ba.nothing_found_title,children:$t("components.nothingFound.common.title")})}function CN(){return o.jsxs(o.Fragment,{children:[o.jsx("p",{className:Ba.nothing_found_title,children:$t("components.nothingFound.staff.title")}),o.jsx("p",{className:Ba.nothing_found_text,children:$t("components.nothingFound.staff.description")})]})}function Le({mode:t}){return o.jsx("div",{className:Ba.nothing_found_wrapper,children:o.jsxs("div",{className:Ba.nothing_found,children:[o.jsx("img",{alt:"",src:"./assets/cards/nothing_found.svg",className:Ba.nothing_found_icon}),o.jsx(Y,{value:!t,children:o.jsx(wN,{})}),o.jsx(Y,{value:t==="staff",children:o.jsx(CN,{})}),o.jsx(Y,{value:t==="search",children:o.jsx(xN,{})})]})})}const Xv=3400;class jN{constructor(){this.isOpen=!1,this.delay=Xv,Et(this,{isOpen:ce,delay:ce,show:re,setDelay:re})}show(){this.isOpen=!0,qv.off(this.delay)}setDelay(e){const s=e/180+400;this.delay=Math.max(Xv,s)}getDelay(e){return((this.delay+(e||0))/1e3).toFixed(1)+"s"}}const Pn=new jN,ug={splash_screen:"splash_screen",splash_screen_container:"splash_screen_container",splash_screen_logo:"splash_screen_logo"},Jv={progress_bar:"progress_bar",progress_bar_line:"progress_bar_line"},TN=U(()=>Pn.isOpen?o.jsx("div",{className:ug.splash_screen,style:{animationDelay:Pn.getDelay(100)},children:o.jsxs("div",{className:ug.splash_screen_container,style:{animationDelay:Pn.getDelay(-1400)},children:[o.jsx(Zv,{showDescription:!0,className:ug.splash_screen_logo}),o.jsx("div",{className:Jv.progress_bar,children:o.jsx("div",{className:Jv.progress_bar_line,style:{animationDuration:Pn.getDelay(-1100)}})})]})}):null),ek={title:"title"};function G({id:t,title:e,addPadding:s=!1,className:n=""}){const{t:r}=ie();return o.jsxs(o.Fragment,{children:[o.jsx("a",{name:e}),o.jsx("h3",{id:t||"",className:`${ek.title} ${s?ek.title_padding:""} ${n||""}`,children:r(e||"")})]})}const Qr={title_big:"title_big",title_big_header:"title_big_header",title_big_header_wrapper:"title_big_header_wrapper",title_big_wrapper:"title_big_wrapper",title_big_select:"title_big_select"};function tk({title:t,prefix:e,children:s}){const{t:n}=ie();return o.jsxs("div",{className:Qr.title_big_wrapper,children:[o.jsx(Y,{value:e,children:o.jsx("div",{className:Qr.title_big_header_wrapper,children:o.jsx("h6",{className:Qr.title_big_header,children:n(e||"")})})}),o.jsx("h3",{className:Qr.title_big,children:n(t||"")}),o.jsx("div",{className:Qr.title_big_select,children:s})]})}const Kr={ui_kit_wrapper:"ui_kit_wrapper",ui_kit_title:"ui_kit_title",ui_kit_description:"ui_kit_description",ui_kit_help:"ui_kit_help",ui_kit_error:"ui_kit_error"};function Wn({title:t,description:e,help:s,example:n,error:r,className:u,children:c}){const{t:p,text:_}=ie();return o.jsxs("div",{className:`${Kr.ui_kit_wrapper} ${u||""}`,title:_(s||""),children:[t&&o.jsx("h6",{className:Kr.ui_kit_title,children:p(t)}),e&&o.jsx("p",{className:Kr.ui_kit_description,children:p(e)}),c,n&&o.jsx("p",{className:Kr.ui_kit_help,children:p(n||"")}),r&&o.jsx("p",{className:Kr.ui_kit_error,children:r})]})}const Fn={ui_kit_common:"ui_kit_common",ui_kit_date_week:"ui_kit_date_week",ui_kit_date_week_value:"ui_kit_date_week_value"};function No({title:t,description:e,help:s,error:n,example:r,className:u,value:c,placeholder:p="Введите значение",debounceDelay:_,onChange:h,onChangeDebounce:f}){const{text:v}=ie(),k=T.useCallback((()=>{let x=null;return function(N){const q=N.target.value;h&&h(q),f&&(clearTimeout(x),x=setTimeout(()=>f(q),_||800))}})(),[h]);return o.jsx(Wn,{title:t,description:e,help:s,error:n,example:r,className:u,children:o.jsx("input",{type:"text",value:c,placeholder:p?v(p):"",className:`${u} ${Fn.ui_kit_common}`,onChange:k})})}const cg={layout_search_example_item:"layout_search_example_item",layout_search_example_item_title:"layout_search_example_item_title",layout_search_example_item_value:"layout_search_example_item_value"};function DN({examples:t,onClick:e}){const{t:s}=ie();if(!(t!=null&&t.length))return null;const n=(t||[]).map(r=>o.jsx("span",{className:cg.layout_search_example_item_value,onClick:()=>e(r),children:r},r));return o.jsxs("div",{className:cg.layout_search_example_item,children:[o.jsx("span",{className:cg.layout_search_example_item_title,children:s("components.search.example")}),n]})}function ak({filters:t,examples:e,placeholder:s,className:n,onChange:r}){const[u,c]=T.useState(""),p=(_,h)=>{r({...t,[_]:h,hash:Math.random()})};return o.jsxs(o.Fragment,{children:[o.jsx(No,{value:u,className:n||"",placeholder:s||"components.search.placeholder",onChange:c,onChangeDebounce:_=>{p("query",_)}}),o.jsx(DN,{examples:e,onClick:_=>{c(_),p("query",_)}})]})}const Mo={ui_kit_select_value:"ui_kit_select_value",ui_kit_select_search:"ui_kit_select_search",ui_kit_select_option:"ui_kit_select_option",ui_kit_select_container:"ui_kit_select_container",ui_kit_select_list:"ui_kit_select_list",ui_kit_select_option_focus:"ui_kit_select_option_focus"};function SN({value:t,className:e,onClick:s}){return o.jsx("div",{className:`${Mo.ui_kit_select_value} ${e||""}`,onClick:s,children:t})}const sk=250;function AN(t){return{ArrowUp:"up",ArrowDown:"down",Enter:"enter"}[t||""]||""}function zN({value:t,placeholder:e,className:s,onChange:n,onClose:r,onKeyDown:u}){const c=T.useRef(null),[p,_]=T.useState(0);return T.useEffect(()=>{setTimeout(()=>{c!=null&&c.current&&c.current.focus()},sk)},[]),o.jsx("input",{ref:c,type:"text",value:t,placeholder:e,className:`${Mo.ui_kit_select_search} ${s||""}`,onChange:h=>{clearTimeout(p),n(h.target.value)},onBlur:()=>{clearTimeout(p);const h=setTimeout(()=>{r()},sk);_(h)},onFocus:()=>{clearTimeout(p)},onKeyDown:()=>{},onKeyUp:h=>{u(AN(h.key))}})}function NN({option:t,focus:e,className:s,onClick:n}){let r=[Mo.ui_kit_select_option];return s&&r.push(s),e&&r.push(Mo.ui_kit_select_option_focus),o.jsx("li",{className:r.join(" "),onClick:n,children:t.title})}function MN({options:t,search:e,keyCode:s,className:n,setKeyCode:r,onClick:u}){const[c,p]=T.useState(-1),_=e?e.toLowerCase():"",h=_?t==null?void 0:t.filter(v=>{var k;return((k=v==null?void 0:v._textForSearch)==null?void 0:k.indexOf(_))!==-1}):t;T.useEffect(()=>{if(s){if(s==="down"){let v=c+1;v>=h.length&&(v=0),p(v)}if(s==="up"){let v=c-1;v<0&&(v=h.length-1),p(v)}if(s==="enter"){const v=h[c];u(v,c)}r("")}},[s]),T.useEffect(()=>{p(-1)},[e]);const f=h==null?void 0:h.map((v,k)=>o.jsx(NN,{focus:k===c,option:v,className:n,onClick:()=>{u(v.source,k)}},v.id));return f.length?o.jsx("ul",{className:`${Mo.ui_kit_select_list} scroll_y ${n||""}`,children:f}):null}const pg={ui_kit_select_icon:"ui_kit_select_icon",ui_kit_select_icon_button:"ui_kit_select_icon_button",ui_kit_select_icon_button_open:"ui_kit_select_icon_button_open"};function RN({openSearch:t,setOpenSearch:e}){const s=[pg.ui_kit_select_icon_button];return t&&s.push(pg.ui_kit_select_icon_button_open),o.jsx("div",{className:pg.ui_kit_select_icon,children:o.jsx("img",{alt:"",src:"./assets/list/arrow.svg",className:s.join(" "),onClick:()=>e(!t)})})}function ik(t){return(t==null?void 0:t.title)||(t==null?void 0:t.name)||(t==null?void 0:t.label)||(t==null?void 0:t.description)||(t==null?void 0:t.value)||(t==null?void 0:t.id)||(t==null?void 0:t.uuid)||(t==null?void 0:t.key)||JSON.stringify(t)}function EN(t,e){return(t==null?void 0:t.id)??(t==null?void 0:t.uuid)??(t==null?void 0:t.key)??e??ik(t)}function nk(t,e){const s=typeof t;return s==="boolean"?t?"true":"false":s==="number"?`${t}`:s==="string"?t:t?Array.isArray(t)?t.map(e).join(", "):e(t):""}function dg(t){return nk(t,ik)}function IN(t,e){return nk(t,s=>EN(s,e))}function qN(t,e){const s=dg(t);return{id:IN(t,e),title:s,_textForSearch:s!=null&&s.toLowerCase?s==null?void 0:s.toLowerCase():"",source:t}}function ON({value:t,options:e,className:s,onChange:n}){const[r,u]=T.useState(!1),[c,p]=T.useState(""),[_,h]=T.useState(""),f=T.useMemo(()=>(e==null?void 0:e.map(qN))||[],[e]),v=T.useMemo(()=>{const k=e.find(x=>x.id===t);return dg(k)||dg(t)},[t]);return o.jsxs("div",{className:`${Mo.ui_kit_select_container} ${s||""}`,children:[r?null:o.jsx(SN,{value:v,options:f,className:s,onClick:()=>u(!0)}),r?o.jsx(zN,{value:c,placeholder:v,className:s,onChange:p,onKeyDown:h,onClose:()=>{p(""),u(!1)}}):null,o.jsx(RN,{openSearch:r,setOpenSearch:u}),r?o.jsx(MN,{value:t,options:f,search:c,keyCode:_,setKeyCode:h,className:s,onClick:k=>{p(""),u(!1),n&&n(k==null?void 0:k.id)}}):null]})}const Ju={ui_kit_select:"ui_kit_select",ui_kit_select_with_buttons_wrapper:"ui_kit_select_with_buttons_wrapper",ui_kit_select_with_buttons_left:"ui_kit_select_with_buttons_left",ui_kit_select_with_buttons_right:"ui_kit_select_with_buttons_right"};function gg({title:t,description:e,help:s,error:n,className:r,value:u,options:c,onChange:p}){const h=(c||[]).map(f=>typeof f!="object"?{id:f,title:f}:f).map((f,v)=>o.jsx("option",{value:(f==null?void 0:f.id)??null,children:(f==null?void 0:f.title)??(f==null?void 0:f.id)??""},`${f==null?void 0:f.id}_${v}`));return o.jsx(Wn,{title:t,description:e,help:s,error:n,className:r,children:o.jsx("select",{"aria-label":t||e,value:u,className:`${Fn.ui_kit_common} ${Ju.ui_kit_select} ${r||""}`,onChange:f=>{const v=f.target.value,k=v!=="null"?parseInt(v,10)||0:null;p&&p(k,v)},children:h})})}function ms({className:t="",value:e,options:s,reverse:n=!1,onChange:r}){var f,v;let u=s.map(k=>k.id).indexOf(e);u===-1&&(u=0);const c=u<=0,p=u>=s.length-1,_=(f=s[u-1])==null?void 0:f.id,h=(v=s[u+1])==null?void 0:v.id;return o.jsxs("div",{className:`${Ju.ui_kit_select_with_buttons_wrapper} ${t||""}`,children:[o.jsx(Je,{mode:"second",className:Ju.ui_kit_select_with_buttons_left,disabled:n?p:c,onClick:()=>{r(n?h:_)},children:"«"}),Vt?o.jsx(gg,{value:e,options:s,onChange:r}):o.jsx(ON,{value:e,options:s,onChange:r}),o.jsx(Je,{mode:"second",className:Ju.ui_kit_select_with_buttons_right,disabled:n?c:p,onClick:()=>{r(n?_:h)},children:"»"})]})}function Zr(t,e,s){const{text:n}=ie(),r=s?e.map(u=>({id:u[s],title:u[s]})):e.map(u=>({id:u,title:u}));return[{id:"",title:n(t)},...r.filter(u=>u.id)]}const Xt={layout_search:"layout_search",layout_search_query:"layout_search_query",layout_search_selects:"layout_search_selects",layout_search_select:"layout_search_select"},$N=U(({elements:t,examples:e,placeholder:s,filters:n,onChange:r})=>{const u=A.hash,c=A.statisticsByCommits,p=T.useMemo(()=>Zr("components.search.select.author",c.author.list),[u]),_=T.useMemo(()=>Zr("components.search.select.company",c.company.totalInfo,"company"),[u]),h=T.useMemo(()=>Zr("components.search.select.taskCode",c.taskCodes.totalInfo,"taskCode"),[u]),f=T.useMemo(()=>Zr("components.search.select.type",c.type.totalInfo,"type"),[u]),v=T.useMemo(()=>Zr("components.search.select.scope",c.scope.totalInfo,"scope"),[u]),k=(x,N)=>{r({...n,[x]:N,hash:Math.random()})};return o.jsxs(o.Fragment,{children:[o.jsx(Y,{value:!t||t.includes("company"),children:o.jsx(ms,{value:n.company,options:_,className:Xt.layout_search_select,onChange:x=>k("company",x)})}),o.jsx(Y,{value:!t||t.includes("taskCode"),children:o.jsx(ms,{value:n.taskCode,options:h,className:Xt.layout_search_select,onChange:x=>k("taskCode",x)})}),o.jsx(Y,{value:!t||t.includes("author"),children:o.jsx(ms,{value:n.author,options:p,className:Xt.layout_search_select,onChange:x=>k("author",x)})}),o.jsx(Y,{value:!t||t.includes("scope")&&v.length>2,children:o.jsx(ms,{value:n.scope,options:v,className:Xt.layout_search_select,onChange:x=>k("scope",x)})}),o.jsx(Y,{value:(!t||t.includes("type"))&&f.length>2,children:o.jsx(ms,{value:n.type,options:f,className:Xt.layout_search_select,onChange:x=>k("type",x)})}),o.jsx(Y,{value:!t||t.includes("search_small"),children:o.jsx("div",{className:Xt.layout_search_select,children:o.jsx(ak,{filters:n,examples:e,placeholder:s,onChange:r})})})]})});function ok(t){const e=/[[\]{}\-().,*?!'"%$^]/gim,s=/\s{2,}/gim;return(t||"").toLocaleLowerCase().replace(e," ").replace(s," ").trim()}function LN(t,e){return(Array.isArray(e)?e:[e]).filter(n=>n).reduce((n,r)=>`${n} `+ok(`${t==null?void 0:t[r]}`),"").trim()}function BN(t,e){return t.map(s=>({key:LN(s,e),value:s})).filter(s=>s.key)}function PN(t,e){return e.reduce((s,n)=>{var u;const r=((u=t.match(n.value))==null?void 0:u.length)||0;return r&&(s=s+1+r/100),s},0)}function WN(t){return t.replace(/[[()\]{}\\.^$|?+\-]+/g,"").split(/\s+/).map(e=>({id:e,value:new RegExp(`(${e})`,"g")}))}function FN(t,e){const s=WN(e);return t.map(n=>[n.value,PN(n.key,s)]).filter(n=>n[1])}function UN(t){t.sort((e,s)=>{const n=s[1]-e[1];return n||s[0].milliseconds-e[0].milliseconds})}function GN(t){return t.map(e=>e[0])}function HN(t,e,s){const n=ok(e),r=FN(t,n);return s&&UN(r),GN(r)}function VN(t){return e=>!(t.author&&e.author!==t.author||t.company&&e.company!==t.company||t.taskCode&&e.taskCode!==t.taskCode||t.scope&&e.scope!==t.scope||t.type&&e.type!==t.type)}function Ei({content:t,properties:e,examples:s,elements:n,placeholder:r,className:u,defaultFilters:c,mode:p,onChange:_,onFilter:h,children:f}){const[v,k]=T.useState({query:"",author:"",company:"",taskCode:"",type:"",scope:"",...c||{}}),x=T.useMemo(()=>BN(t||[],e||""),[t]);T.useEffect(()=>{let q=t||[];if(v.query){const F=p==="sort-by-searchIndex";q=HN(x,v.query,F)}const I=(h||VN)(v);q=q.filter(I),v.hash&&_(q,String(v.hash),v)},[v.hash]);const N=wt.Children.map(f,q=>wt.isValidElement(q)?wt.cloneElement(q,{filters:v,onChange:k}):q);return o.jsxs("div",{className:Xt.layout_search,children:[o.jsx(Y,{value:n&&n.includes("search"),children:o.jsx("div",{className:Xt.layout_search_query,children:o.jsx(ak,{filters:v,examples:s,placeholder:r,className:u,onChange:k})})}),o.jsxs("div",{className:Xt.layout_search_selects,children:[o.jsx($N,{elements:n,examples:s,placeholder:r,filters:v,onChange:k}),o.jsx(Y,{value:N,children:N})]})]})}function lk(t){const e={xxxs:"2px",xxs:"4px",xs:"6px",s:"8px",sm:"10px",m:"12px",l:"16px",xl:"18px",xxl:"24px"}[t||""];return e||(typeof t=="number"?`${t}px`:t)}function nt({width:t="",height:e=""}){const s={};return t&&(s.width=lk(t)),e&&(s.height=lk(e)),o.jsx("div",{style:s})}const ec={components_section:"components_section",components_section_white:"components_section_white",components_section_column:"components_section_column"};function Te({children:t,className:e}){return o.jsx("section",{className:`${ec.components_section} ${e||""}`,children:t})}function tc({children:t,className:e}){return o.jsx("section",{className:`${ec.components_section} ${ec.components_section_white} ${e||""}`,style:{paddingTop:0},children:t})}function Q({children:t}){return o.jsx("div",{className:ec.components_section_column,children:t})}const rk=["Fyodor Dostoevsky","Dante Alighieri","Lev Tolstoy","Victor Hugo","William Shakespeare","Johann Wolfgang von Goethe","Miguel de Cervantes y Saavedra","Italo Calvino","Stendhal","Charles Baudelaire","Marcel Proust","Giovanni Boccaccio","Alexander Pushkin","Jalaluddin Muhammad Rumi","Franz Kafka","Anton Chekhov","Gabriel García Márquez","Umberto Eco","J.R.R. Tolkien","William Faulkner","Aesop","Arthur Rimbaud","Aristophanes","Ivan Turgenev","Sophocles","Molière","Charles Dickens","Maxim Gorky","George Orwell","Edgar Allan Poe","Publius Vergilius Maro","Julio Cortázar","Nazim Hikmet","Oscar Wilde","Jean de La Fontaine","Rainer Maria Rilke","Lord Byron","Hans Christian Andersen","Thomas Mann","Alexandre Dumas","James Joyce","Louis-Ferdinand Céline","Boris Pasternak","Federico García Lorca","Pablo Neruda","Borges","Beaumarchais","Naguib Mahfouz","Ursula K. Le Guin","Nikolay Gogol","Honoré de Balzac","Ernest Hemingway","Neil Gaiman","Jean Racine","Albert Camus","Jean-Paul Sartre","Chingiz Aitmatov","John Steinbeck","Milan Kundera","Jules Verne","Mark Twain","Francois Rabelais","Yasar Kemal","George Bernard Shaw","Arthur Conan Doyle","Jane Austen","Geoffrey Chaucer","Antoine de Saint-Exupéry","Erich Maria Remarque","J.D. Salinger","Virginia Woolf","Louis Aragon","Herman Melville","Alphonse Daudet","Mikhail Sholokhov","Stefan Zweig","José Saramago","Bertolt Brecht","Mario Vargas Llosa","T.S. Eliot","Guy de Maupassant","John Keats","Sabahattin Ali","Ahmet Hamdi Tanpinar","John Fante","Henri-Frédéric Blanc","Isaac Asimov","Fitzgerald Scott","J.M. Coetzee","Kazuo Ishiguro","Hermann Hesse","Robert Louis Stevenson","Salman Rushdie","Mario Vargas Llosa","Aldous Huxley","Paul Valéry","Thomas Pynchon","H.P. Lovecraft","Haruki Murakami","Nikos Kazantzakis"],YN=rk.map((t,e)=>t.replace(/([\s.]+)|([^A-Za-z]+)/gim,"-").toLowerCase()+e+"@yahoo.com"),QN="axeurtyqwpsdfghjklzcvbnm".split("").map(t=>new Array(5).fill(t.toUpperCase()).join("")),KN=["Apple","Microsoft","Samsung Electronics","Alphabet","AT&T","Amazon","Verizon Communications","China Mobile","Walt Disney","Facebook","Alibaba","Intel","Softbank","IBM","Tencent Holdings","Cisco Systems","Oracle","Deutsche Telekom","Taiwan Semiconductor"];class ac{constructor(e,s){this.cache=new Map,this.dictionary=[],this.index=0,this.prefix="",this.dictionary=s,this.prefix=e}get(e){let s=this.cache.get(e);return s||(s=this.dictionary[this.index]||`${this.prefix}${this.index}`,this.cache.set(e,s),this.index+=1,s)}}class ZN{constructor(){this.fakeName=null,this.fakeEmail=null,this.fakeTaskPrefix=null,this.fakeCompany=null,this.fakeName=new ac("User",rk),this.fakeEmail=new ac("user",YN),this.fakeTaskPrefix=new ac("JIRA",QN),this.fakeCompany=new ac("Company",KN)}getDepersonalizedCommit(e){const s=this.fakeName.get(e.author),n=this.fakeEmail.get(e.author),r=this.fakeCompany.get(e.company);if(!e.task)return{...e,author:s,email:n,company:r};const u=e.task.split(/[-_\s:#=]+/gim).shift()||"",c=this.fakeTaskPrefix.get(u),p=e.task.replace(u,c),_=e.message.replace(u,c),h=e.branch?e.branch.replace(u,c):void 0,f=e.toBranch?e.toBranch.replace(u,c):void 0;return{...e,task:p,message:_,author:s,email:n,company:r,branch:h,toBranch:f}}}class XN{constructor(){this.defaultFrom="",this.defaultTo="",this.from="",this.to="",this.lastCommitTime=0,Et(this,{defaultFrom:ce,defaultTo:ce,from:ce,to:ce,updateByCommits:re,setFilterByDateType:re,updateProperty:re})}updateByCommits(e,s){this.defaultFrom=e.timestamp,this.defaultTo=s.timestamp,this.from=this.defaultFrom,this.to=this.defaultTo,this.lastCommitTime=new Date(this.defaultTo).getTime()}setFilterByDateType(e){const s={year:365,halfYear:183,month:30,week:7,day:1}[e];this.from=s?new Date(this.lastCommitTime-_t*s).toISOString().split("T")[0]:this.defaultFrom,this.to=this.defaultTo}updateProperty(e,s){this[e]=s??null}}const Ro=new XN;var Ii=(t=>(t.EMPTY="empty",t.WELCOME="welcome",t.INFO="info",t))(Ii||{});class JN{constructor(){this.view="empty",Et(this,{view:ce,toggle:re})}toggle(e){this.view=e}}const sc=new JN,ic=300;class eM{constructor(){Pe(this,ml);this.statisticsByCommits=null,this.statisticsByFiles=null,this.alreadyProcessed=new Set,this.hash=0,this.isDepersonalized=!1,Et(this,{statisticsByCommits:ce,statisticsByFiles:ce,hash:ce,isDepersonalized:ce,asyncSetCommits:re,processingStringToCommit:re,processingDataAnalysis:re,depersonalized:re,updateStatistic:re,exit:re})}asyncSetCommits(e){e!=null&&e.length&&(Pn.show(),setTimeout(()=>this.processingStringToCommit(e),ic))}processingStringToCommit(e){this.alreadyProcessed.clear(),jt.clear(),zi.clear();const s=Nz(e||[]);s.length&&setTimeout(()=>this.processingCommitGrouping(s),ic)}processingCommitGrouping(e){e.sort((n,r)=>n.milliseconds-r.milliseconds);const s=e.length;e.forEach(n=>{jt.addCommit(n,s)}),setTimeout(()=>this.processingFileGrouping(e),ic)}processingFileGrouping(e){e.forEach(s=>{zi.addCommit(s)}),setTimeout(()=>this.processingDataAnalysis(e),ic)}processingDataAnalysis(e){zi.updateTotalInfo(),Ct.add("commits",e),Ro.updateByCommits(jt.firstLastCommit.minData,jt.firstLastCommit.maxData),jt.updateTotalInfo(),sc.toggle(Ii.INFO),V(this,ml,Jp).call(this),console.dir(this.statisticsByCommits),console.dir(this.statisticsByFiles),document.title=Ez(this.statisticsByCommits,this.statisticsByFiles,Ct.get("commits"))}depersonalized(e){this.isDepersonalized=!!e,setTimeout(()=>{this.updateStatistic()},100)}updateStatistic(){this.alreadyProcessed.clear(),jt.clear(),zi.clear();const e=new ZN;Ct.get("commits").forEach(s=>{if(s.timestamp<Ro.from||s.timestamp>Ro.to)return;const n=this.isDepersonalized?e.getDepersonalizedCommit(s):s;jt.addCommit(n,0),zi.addCommit(n)}),zi.updateTotalInfo(),jt.updateTotalInfo(),V(this,ml,Jp).call(this)}processingPreloadData(e){const s=Ct.get("commits"),n=s.length;e.filter(r=>!this.alreadyProcessed.has(r)).forEach(r=>{this.alreadyProcessed.add(r),s.forEach(u=>{jt.preloadCommit(r,u,n)}),jt.preloadTotalInfo(r)})}exit(){this.alreadyProcessed.clear(),jt.clear(),zi.clear(),Ct.add("commits",[]),V(this,ml,Jp).call(this)}}ml=new WeakSet,Jp=function(){this.statisticsByCommits=null,this.statisticsByCommits=jt,this.statisticsByFiles=null,this.statisticsByFiles=zi,this.hash=Math.random()};const A=new eM;function tM(t){return!!(t&&typeof t=="object"&&t.package)}class aM{constructor(){this.content={},this.length=0}clear(){this.content={}}is(e){if(e.name==="dependencies.json")return!0;const s=e.content;if(!s||typeof s!="object"||Array.isArray(s))return!1;const n=Object.values(s)[0];return tM(n)}add(e){!(e!=null&&e.content)||typeof e.content!="object"||Array.isArray(e.content)||(this.content={...this.content,...e.content},this.length+=1)}get(){return this.content}}class sM{constructor(){this.content=[],this.length=0}clear(){this.content=[]}is(){return!0}add(e){typeof e.content=="string"&&(this.content.push(e.content),this.length+=1)}get(){return this.content.length===0?[]:this.content.map(e=>({key:e.substring(0,25),text:e})).sort((e,s)=>(e.key||"").localeCompare(s.key||"")).map(e=>e.text).join(`
|
||
`).split(`
|
||
`)}}function iM(t){return t==="packages.json"||t==="package.json"||!!(t!=null&&t.endsWith("/package.json"))}function _g(t){return!!(t!=null&&t.name&&(t!=null&&t.version)&&!(t!=null&&t.lockfileVersion))}class nM{constructor(){this.content=[],this.length=0}clear(){this.content=[]}is(e){return iM(e.name)?!0:Array.isArray(e.content)?_g(e.content[0]):_g(e.content)}add(e){if(Array.isArray(e.content)){this.content=this.content.concat(e.content),this.length+=1;return}_g(e.content)&&(this.content.push(e.content),this.length+=1)}get(){return this.content}}function mk(t){const e=t.slice(0,3);return{rep:!0,"r(f":!0,"R(f":!0}[e]&&(t=t.replace(/(R\(f`)|(r\(f`)|(report\.push\(`)|(`\);)/gim,"")),t}function oM(t,e){return{name:t.name,content:e}}function lM(t,e){return console.error(e),""}async function rM(t){return Promise.all(t.map(e=>e.text().then(s=>{const n=mk(s),r=(n[0]==="{"||n[0]==="[")&&JSON.parse(n)||n;return oM(e,r)}).catch(s=>lM(e,s))))}function mM(t,e,s){const n={};return t.length&&(n.dependencies=t.get()),e.length&&(n.gitLog=e.get()),s.length&&(n.packages=s.get()),n}async function uk(t){const e=await rM(t),s=new aM,n=new sM,r=new nM;return e.filter(u=>u.content).forEach(u=>{s.is(u)?s.add(u):r.is(u)?r.add(u):n.add(u)}),mM(s,n,r)}function uM(t,e){return async function(n){var c;n.preventDefault(),n.stopPropagation();const r=[...((c=n==null?void 0:n.dataTransfer)==null?void 0:c.items)||[]].map(p=>p.kind==="file"?p==null?void 0:p.getAsFile():null).filter(p=>p);if(t(!1),!r.length)return;const u=await uk(r);e(u)}}function cM(t){return function(s){s.preventDefault(),s.stopPropagation(),t(!0)}}const ck={dropzone:"dropzone",dropzone_title:"dropzone_title"};function pM({onChange:t}){const[e,s]=T.useState(!1);return T.useEffect(()=>{const n=uM(s,t),r=cM(s);return document.body.addEventListener("drop",n),document.body.addEventListener("dragover",r),()=>{document.body.removeEventListener("drop",n),document.body.removeEventListener("dragover",r)}},[]),e?o.jsx("div",{className:ck.dropzone,onClick:()=>{s(!1)},children:o.jsx("p",{className:ck.dropzone_title,children:"Drop file here"})}):o.jsx(o.Fragment,{})}const Eo={locker:"locker",locker_icon:"locker_icon",locker_border:"locker_border",locker_center:"locker_center",locker_sector:"locker_sector",locker_text:"locker_text"};function dM({delay:t=60,callback:e,className:s="",sectorClassName:n="",borderClassName:r=""}){const[u,c]=T.useState(""),[p,_]=T.useState(t);return T.useEffect(()=>{const h=Math.round(100-p*100/t),f=Math.PI*49.5,v=f/100*h;if(c(`${v}, ${f}`),h>=99){e&&e();return}setTimeout(()=>{_(k=>k-1)},1e3)},[p]),!t||!p?null:o.jsxs("div",{className:`${Eo.locker} ${s||""}`,children:[o.jsxs("svg",{viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid meet",xmlns:"http://www.w3.org/2000/svg",className:Eo.locker_icon,children:[o.jsx("circle",{r:"25",cx:"50",cy:"50",style:{strokeDasharray:u},className:`${Eo.locker_sector} ${n||""}`}),o.jsx("circle",{r:"49.5",cx:"50",cy:"50",className:`${Eo.locker_border} ${r||""}`}),o.jsx("circle",{r:"40",cx:"50",cy:"50",className:`${Eo.locker_center} ${r||""}`})]}),o.jsx("p",{className:Eo.locker_text,children:p})]})}const Vs={modal_window:"modal_window",modal_window_big:"modal_window_big",modal_window_fullscreen:"modal_window_fullscreen",modal_window_wrapper:"modal_window_wrapper",modal_window_title:"modal_window_title",modal_window_body:"modal_window_body",modal_window_footer:"modal_window_footer",modal_window_locker:"modal_window_locker",modal_window_close:"modal_window_close"},Xr=U(({delay:t,className:e,children:s,onClose:n,setCanClose:r})=>{const u=T.useCallback(c=>{c.stopPropagation(),n&&n()},[n]);return o.jsxs("div",{className:`${Vs.modal_window_title} ${e||""}`,children:[s,o.jsx(Y,{value:n,children:o.jsx("img",{alt:"",src:"./assets/close.svg",className:Vs.modal_window_close,onClick:u})}),o.jsx(Y,{value:t,children:o.jsx(dM,{delay:t,className:Vs.modal_window_locker,callback:()=>{r&&r(!0)}})})]})}),nc=U(({className:t,children:e})=>o.jsx("div",{className:`${Vs.modal_window_body} scroll_y ${t||""}`,children:e})),oc=U(({className:t,children:e})=>o.jsx("div",{className:`${Vs.modal_window_footer} ${t||""}`,children:e}));function Io({id:t="modal-window",mode:e,delay:s,className:n="",onClose:r,children:u}){const[c,p]=T.useState(!s),_=t||"modal_window";T.useEffect(qv.useOnOff,[]);const h=wt.Children.map(u,v=>wt.isValidElement(v)?wt.cloneElement(v,{onClose:r,delay:s,setCanClose:p}):v);let f=Vs.modal_window;return e==="big"&&(f=Vs.modal_window_big),Vt&&(f=Vs.modal_window_fullscreen),cu.createPortal(o.jsx("div",{id:`${_}-wrapper`,className:`${Vs.modal_window_wrapper}`,onClick:v=>{var k;v.stopPropagation(),((k=v.target)==null?void 0:k.id)===`${_}-wrapper`&&r&&c&&r()},children:o.jsx("div",{id:_,className:`${f} ${n||""}`,onClick:v=>{v.stopPropagation()},children:h})}),document.body)}Io.displayName="Modal";class gM{constructor(){this.title="",this.yes="",this.no="",this.isOpen=!1,this.successCallback=()=>{},this.cancelCallback=()=>{},Et(this,{title:ce,yes:ce,no:ce,successCallback:ce,cancelCallback:ce,isOpen:ce,open:re,close:re})}open(e){return this.title=(e==null?void 0:e.title)||e||$t("components.confirm.title"),this.yes=(e==null?void 0:e.yes)||$t("components.confirm.yes"),this.no=(e==null?void 0:e.no)||$t("components.confirm.no"),this.isOpen=!0,new Promise((s,n)=>{this.successCallback=s,this.cancelCallback=n})}close(){this.isOpen=!1}success(){this.isOpen&&(this.close(),this.successCallback())}cancel(){this.isOpen&&(this.close(),this.cancelCallback())}}const Ys=new gM,_M=U(()=>Ys.isOpen?o.jsxs(Io,{children:[o.jsx(Xr,{children:Ys==null?void 0:Ys.title}),o.jsxs(oc,{children:[o.jsx(Je,{mode:Vt?["primary","full_size"]:["primary"],onClick:()=>{Ys.cancel()},children:Ys.no}),o.jsx(Je,{mode:Vt?["second","full_size"]:["second"],onClick:()=>{Ys.success()},children:Ys.yes})]})]}):null);function hM(t,e){const s=new Set(e.plugins),n=new Set(e.disabledPlugins);return t.filter(r=>r.id&&s.has(r.id)&&!n.has(r.id))}class fM{constructor(){Pe(this,_m);this.plugins=[],this.refIdPlugin=new Map}setPlugins(e){this.plugins=[],this.refIdPlugin.clear(),e.forEach(s=>{const n=new s;n&&(this.plugins.push(n),this.refIdPlugin.set(s.id,n))})}getMenuItems(e){return V(this,_m,_f).call(this,"getMenuItems",e)}getHeaderItems(e){return V(this,_m,_f).call(this,"getHeaderItems",e)}getPage(e,s){var n,r;for(let u=0;u<this.plugins.length;u++){const c=(r=(n=this.plugins[u])==null?void 0:n.getPage)==null?void 0:r.call(n,e||"",s||{});if(c)return c}return null}getPages(e,s){return this.plugins.map(n=>{var r;return(r=n==null?void 0:n.getPage)==null?void 0:r.call(n,e||"",s||{})}).filter(n=>n)}getById(e){return this.refIdPlugin.get(e||"")}getTranslations(){return this.plugins.map(e=>{var s;return(s=e==null?void 0:e.getTranslations)==null?void 0:s.call(e)}).filter(e=>e)}}_m=new WeakSet,_f=function(e,s){const n=this.plugins.map(c=>{var p;return(p=c==null?void 0:c[e])==null?void 0:p.call(c,Ct.data)}).flat().filter(c=>c).sort((c,p)=>(c.order||0)-(p.order||0)),r=s?n.filter(c=>{var p;return((p=c==null?void 0:c.link)==null?void 0:p[1])===s}):n;let u=r[0];return r.reduce((c,p)=>((u==null?void 0:u.group)!==(p==null?void 0:p.group)&&c.push({}),c.push(p),u=p,c),[])};const lt=new fM,J={ALERT:"error",WARNING:"warning",FACT:"fact",INFO:"info"};function qi(t){let e=0,s=[];return()=>(e===A.hash||(e=A.hash,s=t()),s)}function Un(t){function e(p){return t[p]}function s(p,_){return{...e(p),title:_}}function n(p,_){return{...e(p),arguments:{title:_}}}function r(p,_){return{...e(p),arguments:{description:_}}}function u(p,_,h){return{...s(p,_),arguments:{description:h}}}function c(p,_,h){return{...e(p),arguments:{title:_,description:h}}}return{getItem:e,getTitle:s,getArgTitle:n,getArgDescription:r,getTitleArgDescription:u,getArgTitleDescription:c}}function hg(t){const{title:e}=t;return Array.isArray(e)?e.length>1?`${e[0]} +${e.length-1}`:e[0]:e||""}function fg(t){var r;const{description:e}=t,s=(r=t==null?void 0:t.arguments)==null?void 0:r.description;return(Array.isArray(e)?e:[e]).map(u=>Ee.get(u,s)).join(`
|
||
`)}class yM{constructor(){this.recommendation=null,Et(this,{recommendation:ce,open:re,close:re})}open(e){this.recommendation=e}close(){this.recommendation=null}}const lc=new yM,Pa={recommendations_modal_title:"recommendations_modal_title",recommendations_modal_header:"recommendations_modal_header",recommendations_modal_footer:"recommendations_modal_footer",recommendations_modal_sub_title:"recommendations_modal_sub_title",recommendations_modal_description:"recommendations_modal_description",recommendations_modal_info:"recommendations_modal_info",recommendations_modal_fact:"recommendations_modal_fact",recommendations_modal_warning:"recommendations_modal_warning",recommendations_modal_error:"recommendations_modal_error",recommendations_modal_button:"recommendations_modal_button",recommendations_modal:"recommendations_modal"};function vM(t){const e=t==null?void 0:t.type;return{[J.INFO]:Pa.recommendations_modal_info,[J.FACT]:Pa.recommendations_modal_fact,[J.WARNING]:Pa.recommendations_modal_warning,[J.ALERT]:Pa.recommendations_modal_error}[e||J.INFO]??Pa.recommendations_modal_fact}const yg=U(()=>{var p;const{t}=ie(),{recommendation:e}=lc;if(!e)return null;const s=hg(e),n=(p=e==null?void 0:e.arguments)==null?void 0:p.title,r=vM(e),u=fg(e).split(`
|
||
`),c=u.shift();return o.jsxs(Io,{className:`${r} ${Vt?"":Pa.recommendations_modal}`,onClose:()=>{lc.close()},children:[o.jsxs(Xr,{className:Pa.recommendations_modal_header,children:[o.jsx("span",{className:Pa.recommendations_modal_title,children:t(s,n)}),o.jsx("p",{className:Pa.recommendations_modal_sub_title,children:c})]}),o.jsx(nc,{children:o.jsx(ot,{className:Pa.recommendations_modal_description,text:u.join(`
|
||
`),translationId:e.description})}),o.jsx(Y,{value:!Vt,children:o.jsx(oc,{className:Pa.recommendations_modal_footer,children:o.jsx(Je,{mode:["border","full_size"],className:Pa.recommendations_modal_button,onClick:()=>{lc.close()},children:t("components.recommendations.cancel")})})})]})}),kM={translation_tooltip:"translation_tooltip"},bM=U(()=>{const{text:t}=ie();return!Nt.isEditor||!Nt.refKeyTranslation.size?null:cu.createPortal(o.jsx("div",{className:kM.translation_tooltip,children:o.jsx(Je,{mode:"second",onClick:()=>{Nt.show()},children:t("components.translation.tooltip.list")})}),document.body)}),wM={loading:"loading"};function pk({height:t=0}){return o.jsx("div",{className:wM.loading,style:{minHeight:t?`${t}px`:"auto"},children:"..."})}const Ke={INIT:"INIT",LOADING:"LOADING",LOADING_MORE:"LOADING_MORE",LOADING_ALL:"LOADING_ALL",LOADING_PAGE:"LOADING_PAGE",ERROR:"ERROR",SUCCESS:"SUCCESS"};class vg{constructor({loader:e,callback:s,defaultPageNumber:n,defaultPageSize:r,watch:u}){this.state=Ke.INIT,this.watchedValue="",this.defaultPageNumber=0,this.defaultPageSize=10,this.pageNumber=0,this.pageSize=10,this.sort=[],this.loader=()=>{},this.callback=()=>{},this.response=null,this.loader=e,this.callback=s,this.defaultPageNumber=n||0,this.defaultPageSize=r||10,this.watchedValue=u||"",Et(this,{state:ce,watchedValue:ce,sort:ce,fetchData:re,successCallback:re,errorCallback:re,loadMore:re,showAll:re,updateSort:re,updateWatchedValue:re,canSendRequest:Ir})}newSearch(){return this.fetchData(Ke.LOADING,{pageNumber:this.defaultPageNumber,pageSize:this.defaultPageSize})}updateSort(e){return this.sort=e||[],this.fetchData(Ke.LOADING,{pageNumber:this.pageNumber,pageSize:this.pageSize})}goToPage(e,s){return this.fetchData(Ke.LOADING_PAGE,{pageNumber:e,pageSize:s})}loadMore(){const e=this.pageNumber+1;return this.fetchData(Ke.LOADING_MORE,{pageNumber:e,pageSize:this.pageSize})}showAll(){var s;const e=((s=this.response)==null?void 0:s.totalElements)||100;return this.fetchData(Ke.LOADING_ALL,{pageNumber:0,pageSize:e})}get canSendRequest(){return![Ke.LOADING,Ke.LOADING_MORE,Ke.LOADING_ALL,Ke.LOADING_PAGE,Ke.ERROR].includes(this.state)}async fetchData(e,s={}){if(this.canSendRequest){this.state=e;try{const{pageNumber:n,pageSize:r}=s;this.callback&&this.callback();const u=await this.loader({page:n,size:r},this.sort);this.successCallback(u)}catch(n){const r=await n;this.errorCallback(r)}}}successCallback(e){var s,n,r,u;this.setResponse(e),this.pageSize=((s=this.response)==null?void 0:s.size)||((n=this.response)==null?void 0:n.pageSize)||10,this.pageNumber=((r=this.response)==null?void 0:r.number)||((u=this.response)==null?void 0:u.pageNumber)||0,this.callback&&this.callback(this.response),this.state=Ke.SUCCESS}setResponse(e){this.state===Ke.LOADING_MORE?this.response={...e,content:[...this.response.content,...e.content]}:this.response=e}errorCallback(e){this.state===Ke.LOADING&&(this.response=e),this.state=Ke.ERROR}updateWatchedValue(e){this.watchedValue=e,this.state=Ke.INIT,this.newSearch()}}function dk({response:t=null}){return o.jsx("div",{className:"data-loader-error",children:o.jsx("div",{title:"Запрос не может быть выполнен",children:o.jsx("div",{children:t})})})}function xM(t=null,e=null,s="",n=null,r="response",u="",c=[""],p={page:0,size:10}){return{[r]:n,updateSort:_=>e==null?void 0:e.updateSort(_),response:e==null?void 0:e.response,to:r,from:u,state:s,store:e,parameterInUrl:c,pagination:p}}function CM(t=null,e=""){let s=Ke.INIT,n=null;return t instanceof vg&&(s=t.state,[Ke.SUCCESS,Ke.LOADING_MORE,Ke.LOADING_ALL].includes(s)&&(n=e?t.response[e]:t.response)),{state:s,response:n}}function jM(){return new URLSearchParams(vo().search)}const rc=U(({watch:t,children:e,loader:s,callback:n,to:r,from:u,height:c,id:p,className:_,parameterInUrl:h,pagination:f})=>{var Ie;const v=jM(),[k,x]=T.useState(),N=h!=null&&h.includes("pageNumber")&&parseInt(v.get("pageNumber")||"",10)||0,q=h!=null&&h.includes("pageSize")&&parseInt(v.get("pageSize")||"",10)||10;T.useEffect(()=>{if(k instanceof vg){if(k.response){if(k.loader=s,k.callback=n,(t||k.watchedValue)&&k.watchedValue!==t)k.updateWatchedValue(t);else if(h&&(k.pageNumber!==N||k.pageSize!==q))k.goToPage(N,q);else if(f&&(k.pageNumber!==(f==null?void 0:f.page)||k.pageSize!==(f==null?void 0:f.size))){const De=(f==null?void 0:f.page)||0,ye=(f==null?void 0:f.size)||10;k.goToPage(De,ye)}}}else{const De=new vg({loader:s,callback:n,defaultPageNumber:N||(f==null?void 0:f.page),defaultPageSize:q,watch:t});De.newSearch(),x(De)}});const{state:I,response:F}=CM(k,u);if(I===Ke.LOADING||I===Ke.LOADING_PAGE)return o.jsx(pk,{height:c||80});if(I===Ke.ERROR)return o.jsx(dk,{response:k==null?void 0:k.response});const se=wt.Children.map(e,De=>wt.isValidElement(De)?wt.cloneElement(De,xM(De,k,I,F,r,u,h,f)):De),te=se==null?void 0:se.find(De=>De.type===Le);if(I===Ke.SUCCESS&&te&&(Object.keys(F||{}).length===0||((Ie=F==null?void 0:F.content)==null?void 0:Ie.length)===0)){const De=wt.cloneElement(te,{mode:"search"});return o.jsx(o.Fragment,{children:De})}const ge=se==null?void 0:se.filter(De=>De.type!==Le);return _?o.jsx("div",{id:p||"",className:_||"",children:ge}):o.jsx(o.Fragment,{children:ge})}),Gn={paginator:"paginator",paginator_text:"paginator_text",paginator_page_number:"paginator_page_number"};function fe({response:t=null,state:e=Ke.INIT,pagination:s={},store:n=null}){const{t:r}=ie();if(!t)return null;const u=(s==null?void 0:s.size)||10,{number:c,size:p,totalElements:_}=t,h=Math.ceil(_/p);if(e===Ke.INIT||c>h||h===1||!_)return null;const f=!(e===Ke.INIT||c>=h-1);return[Ke.LOADING_ALL,Ke.LOADING_MORE].includes(e||"")?o.jsx(pk,{height:40}):e===Ke.ERROR?o.jsx(dk,{response:n==null?void 0:n.response}):o.jsxs("nav",{className:Gn.paginator,children:[o.jsx("p",{className:Gn.paginator_text,children:r("components.dataLoader.page")}),o.jsx(Je,{mode:"second",disabled:!c,onClick:()=>{n&&n.goToPage(c-1,p||u)},children:"«"}),o.jsx(No,{className:Gn.paginator_page_number,value:c+1,onChange:v=>{let k=parseInt(v||"1",10);k<1&&(k=1),k>=h&&(k=h),n&&n.goToPage(k-1,p||u)}}),o.jsx(Je,{mode:"second",disabled:c===h-1,onClick:()=>{n&&n.goToPage(c+1,p||u)},children:"»"}),o.jsx("p",{className:Gn.paginator_text,children:r("components.dataLoader.from")}),o.jsx(Je,{mode:"second",onClick:()=>{n&&n.goToPage(h-1,p||u)},children:h}),o.jsx("p",{className:Gn.paginator_text,children:r("components.dataLoader.size")}),o.jsx(No,{value:p,className:Gn.paginator_page_number,onChange:v=>{let k=parseInt(v||"10",10);k<1&&(k=1),k>_&&(k=_),n&&n.goToPage(0,k)}}),o.jsx("p",{className:Gn.paginator_text,children:r("components.dataLoader.rows",{count:_})}),f&&o.jsx(Je,{mode:"slim",onClick:()=>{n&&n.showAll()},children:r("components.dataLoader.all")})]})}function TM(t,e){function s(_,h,f){return(_[f]||"").localeCompare(h[f]||"")}function n(_,h,f){return(_[f]||0)-(h[f]||0)}function r(_,h,f){return(_[f]||0).length-(h[f]||0).length}const u=t==null?void 0:t[0],c=e.map(_=>typeof u[_.property]==="string"?s:Array.isArray(u[_.property])?r:n),p=e.length;return[...t].sort((_,h)=>{for(let f=0;f<p;f++){const v=e[f],k=c[f](_,h,v.property);if(k)return k*v.direction}return 0})}function mc({content:t,pagination:e,query:s,mode:n,sort:r}){const u=Array.isArray(t)?t:[],c=s?u.filter(q=>q.name.toLowerCase().includes(s==null?void 0:s.toLowerCase())):u,p=r&&(r!=null&&r.length)?TM(c,r):c;if(!e||n==="print")return Promise.resolve({size:(p==null?void 0:p.length)||0,number:0,totalPages:1,totalElements:(p==null?void 0:p.length)||0,sort:r||[],content:p||[]});const _=e.size||10,h=e.page||0,f=_*h,v=f+_,k=p.length,x=Math.ceil(k/_),N={size:_,number:h,totalPages:x,totalElements:k,sort:r||[],content:p.slice(f,v)||[]};return Promise.resolve(N)}function DM(t,e){return(s,n)=>mc({content:t,pagination:s,sort:n,mode:e})}function be({content:t,mode:e,watch:s,children:n}){return o.jsx(rc,{loader:DM(t,e),watch:s,children:n})}function SM({response:t}){return t?o.jsxs(ws,{rows:(t==null?void 0:t.content)||[],children:[o.jsx(w,{template:C.STRING,title:"components.translation.modal.key",properties:"key",width:270}),o.jsx(w,{template:C.STRING,title:"components.translation.modal.value",properties:"value"}),o.jsx(w,{template:C.STRING,properties:"valu2e",width:40})]}):null}const AM=U(()=>{const{t}=ie(),e=T.useMemo(()=>Nt.getList(),[Nt.isOpen]);return Nt.isOpen?o.jsxs(Io,{mode:"big",onClose:()=>{Nt.hide()},children:[o.jsx(Xr,{children:t("components.translation.modal.title")}),o.jsx(nc,{children:o.jsxs(rc,{loader:(s,n)=>{const r={...s,size:5};return mc({content:e,pagination:r,sort:n})},children:[o.jsx(SM,{}),o.jsx(fe,{})]})}),o.jsxs(oc,{children:[o.jsx(Je,{mode:"second",onClick:()=>{Nt.hide()},children:t("components.translation.modal.cancel")}),o.jsx(Je,{mode:"primary",onClick:()=>{const s=Nt.export(),n="text/plain;charset=windows-utf-8;",r=new Blob([s],{type:n});Ku(r,`Assayo_Translations.${Ee.language}.txt`),Hu.show({title:"Режим переводчика",description:"Вы можете посмотреть актуальный список переводов или экспортировать его",type:"info"})},children:t("components.translation.modal.export")})]})]}):null}),zM={sidebar_logo:"sidebar_logo"};function NM(){return o.jsx("div",{className:zM.sidebar_logo,children:o.jsx(Zv,{})})}const Jr={switch:"switch",switch_item:"switch_item",selected:"selected",switch_item_icon:"switch_item_icon",switch_item_title:"switch_item_title"};function MM({value:t="",options:e,onChange:s}){const{t:n,text:r}=ie(),u=e.map(c=>{const p=r((c==null?void 0:c.title)||"");return o.jsxs("div",{className:`${Jr.switch_item} ${t===(c==null?void 0:c.id)?Jr.selected:""}`,onClick:()=>{s&&s(c==null?void 0:c.id)},children:[o.jsx("img",{className:Jr.switch_item_icon,src:(c==null?void 0:c.icon)||"",alt:p||"",title:p||""}),o.jsx("span",{className:Jr.switch_item_title,children:n((c==null?void 0:c.title)||"")})]},p)});return o.jsx("div",{className:Jr.switch,children:u})}const em={sidebar_title:"sidebar_title",sidebar_item:"sidebar_item",selected:"selected",sidebar_item_title:"sidebar_item_title",sidebar_item_icon:"sidebar_item_icon"};function RM({id:t,link:e,title:s="",icon:n="",isSelected:r=!1}){const{t:u}=ie();return o.jsxs(wi,{className:`${em.sidebar_item} ${r?em.selected:""}`,to:e,id:`sidebar-menu-${t}`,children:[o.jsx("img",{alt:"",className:em.sidebar_item_icon,src:n}),o.jsx("figcaption",{className:em.sidebar_item_title,children:u(s||"")})]},t)}function EM({title:t=""}){const{t:e}=ie();return o.jsx("div",{className:em.sidebar_title,children:e(t||"")})}const IM=U(({type:t})=>{const{page:e,userId:s}=da(),n=T.useMemo(()=>t==="team"?lt.getMenuItems("t"):lt.getMenuItems("p"),[t,Ct.hash]),r=t==="team"?"":s||0,u=n.map((c,p)=>{if(!c.id)return o.jsx(EM,{},p);const _=e===c.id||!e&&c.id==="total";return o.jsx(RM,{id:c.id,link:`${c.link}${r}`,title:c.title,icon:c.icon,isSelected:_},c.id)});return o.jsx(o.Fragment,{children:u})}),kg={scroll_up_button:"scroll_up_button",scroll_up_button_wrapper:"scroll_up_button_wrapper",scroll_up_button_icon:"scroll_up_button_icon"};function gk(){if(!window.scrollY)return;const t=window.scrollY*.7;window.scrollTo(0,t>20?t:0),setTimeout(gk,30)}function qM(){const[t,e]=T.useState(!1);return T.useEffect(()=>{function s(){e(window.scrollY>300)}return window.addEventListener("scroll",s),()=>{window.removeEventListener("scroll",s)}},[window.scrollY]),t?o.jsx("div",{className:kg.scroll_up_button,onClick:()=>{gk()},children:o.jsx("div",{className:kg.scroll_up_button_wrapper,children:o.jsx("img",{alt:"",className:kg.scroll_up_button_icon,src:"./assets/list/arrow.svg"})})}):null}const OM={sidebar_banner:"sidebar_banner"};function $M(){const{link:t,text:e,isOpenInNewTab:s}=Vr.getBanner()||{};return s?o.jsx(wi,{to:t||"",target:"_blank",className:OM.sidebar_banner,children:`при информационной поддержке ${e}`}):null}const Oi={sidebar:"sidebar",sidebar_wrapper:"sidebar_wrapper",sidebar_resize:"sidebar_resize",sidebar_resize_icon:"sidebar_resize_icon",sidebar_resize_icon_close:"sidebar_resize_icon_close",sidebar_small:"sidebar_small"},LM=[{id:"team",title:"sidebar.switch.team",icon:"./assets/switch/team.svg"},{id:"person",title:"sidebar.switch.person",icon:"./assets/switch/person.svg"}];lt.getMenuItems("t"),lt.getMenuItems("p");function BM({onResize:t}){const{type:e}=da(),[s,n]=T.useState(!1),[r,u]=T.useState(!1),c=ko(),p=e||"team",_=s&&!r?`${Oi.sidebar} ${Oi.sidebar_small}`:Oi.sidebar,h=s&&!r?Oi.sidebar_resize_icon:`${Oi.sidebar_resize_icon} ${Oi.sidebar_resize_icon_close}`;return T.useEffect(()=>{t&&t(s?60:240)},[s]),o.jsxs("aside",{className:Oi.sidebar_wrapper,children:[o.jsxs("div",{className:_,onMouseOver:()=>{u(!0)},onMouseLeave:()=>{u(!1)},children:[o.jsxs("div",{children:[o.jsx(NM,{}),o.jsx(MM,{value:p,options:LM,onChange:f=>{f!==e&&c(f==="person"?`/${f}/total/0`:`/${f}/total`)}}),o.jsx(IM,{type:p}),o.jsx($M,{})]}),o.jsx(qM,{})]}),o.jsx("div",{className:Oi.sidebar_resize,style:{left:s&&!r?"50px":"230px"},onClick:()=>{n(!s)},children:o.jsx("div",{className:h})})]})}const $i={header:"header",header_wrapper:"header_wrapper",header_title:"header_title",header_icon:"header_icon",header_language:"header_language",header_currency:"header_currency",header_with_tab:"header_with_tab",light_header_gap:"light_header_gap"};function PM({text:t}){const{t:e}=ie(),s=e(t||"plugin.team_total.sidebar");return o.jsx("h2",{className:$i.header_title,children:s})}const uc={header_filters:"header_filters",header_filters_input:"header_filters_input",header_filters_fast:"header_filters_fast",header_filters_fast_button:"header_filters_fast_button"};function tm({title:t,type:e}){const{t:s}=ie();return o.jsx("button",{className:uc.header_filters_fast_button,onClick:()=>{Ro.setFilterByDateType(e),A.updateStatistic()},children:s(t)})}const _k=U(({type:t,placeholder:e})=>o.jsx("input",{type:"date",placeholder:e||"",value:Ro[t]??"",className:uc.header_filters_input,onChange:s=>{Ro.updateProperty(t,s.target.value),A.updateStatistic()}}));function WM(){return o.jsxs("div",{className:uc.header_filters,children:[o.jsx(_k,{type:"from",placeholder:"с"})," — ",o.jsx(_k,{type:"to",placeholder:"по"}),o.jsxs("div",{className:uc.header_filters_fast,children:[o.jsx(tm,{title:"sidebar.filters.all",type:"all"}),o.jsx(tm,{title:"sidebar.filters.year",type:"year"}),o.jsx(tm,{title:"sidebar.filters.halfYear",type:"halfYear"}),o.jsx(tm,{title:"sidebar.filters.month",type:"month"}),o.jsx(tm,{title:"sidebar.filters.week",type:"week"})]})]})}const FM=U(({sideBarWidth:t})=>{const{text:e}=ie(),s=ko(),n=vo(),{type:r,page:u}=da(),c=de.config.languages,p=u||n.pathname.split("/").filter(Boolean).pop()||n.hash.split("/").filter(Boolean).pop(),_=lt.getMenuItems(r==null?void 0:r[0]).find(v=>(v==null?void 0:v.id)===p)||lt.getHeaderItems().find(v=>(v==null?void 0:v.id)===p)||{},f=lt.getHeaderItems().filter(v=>v.title).map(v=>{var k;return o.jsx("img",{alt:e(v.title||""),title:e(v.title||""),className:$i.header_icon,src:v.icon,onClick:(k=v==null?void 0:v.onClick)==null?void 0:k.call(v,s,n)},v.id)});return o.jsx("header",{className:$i.header,children:o.jsxs("div",{className:$i.header_wrapper,style:{width:`calc(100vw - ${t}px - 18px)`},children:[o.jsx(PM,{text:_==null?void 0:_.title}),o.jsx(WM,{}),o.jsx(gg,{className:$i.header_language,value:Nt.language||"ru",options:c,onChange:(v,k)=>{const x=c.find(N=>N.id===k);de.updateConfigProperty("language",x==null?void 0:x.language),de.updateConfigProperty("currency",x==null?void 0:x.currency),Ee.language=k,Ee.updateLangAttribute(),Nt.setLanguage(Ee.language),k===Kf?localStorage.removeItem("language"):localStorage.setItem("language",k)}}),o.jsx(gg,{className:$i.header_currency,value:de.config.currency,options:[{id:"USD",title:"USD"},{id:"EUR",title:"EUR"},{id:"RUB",title:"RUB"},{id:"CNY",title:"CNY"},{id:"ILS",title:"ILS"},{id:"JPY",title:"JPY"},{id:"KRW",title:"KRW"},{id:"INR",title:"INR"}],onChange:(v,k)=>{de.updateConfigProperty("currency",k)}}),f]})})}),cc={ui_kit_tabs:"ui_kit_tabs",ui_kit_tabs_item:"ui_kit_tabs_item",ui_kit_tabs_item_selected:"ui_kit_tabs_item_selected"},hk=wt.forwardRef(({value:t,options:e,onChange:s},n)=>{const{t:r}=ie(),u=t||t===0||t===!1,c=(e||[]).map((p,_)=>{const h=typeof p!="object"?{id:p,title:p}:p,f=u&&t===(h==null?void 0:h.id),v=r(h==null?void 0:h.title)??(h==null?void 0:h.id)??"";return o.jsx("button",{className:f?`${cc.ui_kit_tabs_item} ${cc.ui_kit_tabs_item_selected}`:cc.ui_kit_tabs_item,onClick:k=>{s(h);const x=k==null?void 0:k.target,N=n==null?void 0:n.current,q=((N==null?void 0:N.offsetWidth)-(x==null?void 0:x.offsetWidth))/2;N.scrollLeft=(x==null?void 0:x.offsetLeft)-q},children:v},`${h==null?void 0:h.id}_${_}`)});return o.jsx("div",{ref:n,className:`${cc.ui_kit_tabs} scroll_x`,children:c})});hk.displayName="UiKitTabs";function UM(){const t=T.useRef(null),e=ko(),{type:s,page:n,userId:r}=da(),c=(s==="team"?lt.getMenuItems("t"):lt.getMenuItems("p")).filter(p=>p==null?void 0:p.title);return T.useEffect(()=>{var p;(p=t==null?void 0:t.current)==null||p.scrollTo(0,0)},[s]),o.jsxs(o.Fragment,{children:[o.jsx("header",{className:$i.header_with_tab,children:o.jsx(hk,{ref:t,value:n,options:c,onChange:p=>{const _=s==="person"?`${p.link}${r}`:p.link;e(_)}})}),o.jsx("div",{className:$i.light_header_gap})]})}const Li={footer:"footer",footer_hidden:"footer_hidden",footer_wrapper:"footer_wrapper",footer_gap:"footer_gap",footer_button:"footer_button",footer_button_selected:"footer_button_selected",footer_button_text:"footer_button_text",footer_button_icon:"footer_button_icon"};function GM({title:t,icon:e,isSelected:s,onClick:n}){return o.jsxs("figure",{className:`${Li.footer_button} ${s?Li.footer_button_selected:""}`,onClick:n,children:[o.jsx("div",{className:Li.footer_button_icon,style:{backgroundImage:`url(${e})`}}),o.jsx("figcaption",{className:Li.footer_button_text,children:t})]})}function HM(t){const{text:e}=ie();return[{id:"team",title:"sidebar.switch.team",icon:"./assets/switch/team.svg",onClick(){t("/team/total")}},{id:"person",title:"sidebar.switch.person",icon:"./assets/switch/person.svg",onClick(){t("/person/total/0")}},{id:"print",title:"sidebar.buttons.share",icon:"./assets/menu/share.svg",onClick(){navigator.share({title:e("common.title"),text:"",url:window.location.href})}},{id:"settings",title:"sidebar.buttons.logout",icon:"./assets/menu/logout.svg",onClick(){Ys.open({title:e("sidebar.buttons.logoutQuestion")}).then(()=>{A.exit(),t("/"),sc.toggle(Ii.WELCOME)})}}].filter(s=>s)}function VM(t,e){let s=window.scrollY,n=t;function r(){const u=s>window.scrollY||window.scrollY<150;s=window.scrollY,u!==n&&(n=u,e(u))}return document.addEventListener("scroll",r),()=>{document.removeEventListener("scroll",r)}}function YM(){const t=ko(),{type:e,page:s}=da(),[n,r]=T.useState(!0),{text:u}=ie();T.useEffect(()=>VM(n,r),[]);const c=HM(t),p=c.find(h=>s===h.id)||c.find(h=>e===h.id),_=c.map(h=>o.jsx(GM,{icon:h.icon,title:u(h.title),isSelected:(p==null?void 0:p.id)===h.id,onClick:h.onClick},h.id));return o.jsxs(o.Fragment,{children:[o.jsx("div",{className:Li.footer_gap}),o.jsx("div",{className:`${Li.footer} ${n?"":Li.footer_hidden}`,children:o.jsx("nav",{className:Li.footer_wrapper,children:_})})]})}const am={page_wrapper:"page_wrapper",page_wrapper_main:"page_wrapper_main",page_wrapper_main_mobile:"page_wrapper_main_mobile",page_wrapper_main_fullscreen:"page_wrapper_main_fullscreen",page_wrapper_mobile:"page_wrapper_mobile"};function QM({children:t}){const{type:e,page:s}=da(),n=T.useMemo(()=>lt.getPages("global"),[lt]),r=e==="team"&&s==="building"?{padding:0}:{};return o.jsxs("div",{className:am.page_wrapper_mobile,children:[o.jsx(UM,{}),o.jsx("div",{className:am.page_wrapper_main_mobile,style:r,children:t}),n,o.jsx(yg,{}),o.jsx(YM,{})]})}const KM=U(({children:t})=>{const{type:e,page:s}=da(),[n,r]=T.useState(240),u=T.useMemo(()=>lt.getPages("global"),[lt]),c=e==="team"&&s==="building"?{padding:0}:{};return xa.isOpen?o.jsxs(o.Fragment,{children:[o.jsx("div",{className:am.page_wrapper_main_fullscreen,style:c,children:t}),o.jsx(yg,{})]}):o.jsxs("div",{className:am.page_wrapper,style:{gridTemplateColumns:`${n}px 1fr`},children:[o.jsx(BM,{onResize:r}),o.jsx(FM,{sideBarWidth:n}),o.jsx("div",{className:am.page_wrapper_main,style:{width:`calc(100vw - ${n}px - 18px)`,...c},children:t}),u,o.jsx(yg,{}),o.jsx(bM,{}),o.jsx(AM,{})]})});function qo({children:t}){const[e,s]=T.useState(Vt);return $v(()=>{s(window.innerWidth<700||Vt)}),e?o.jsx(QM,{children:t}):o.jsx(KM,{children:t})}const pc={slider_exit_left:"slider_exit_left",slider_exit_right:"slider_exit_right",slider_entrance_left:"slider_entrance_left",slider_entrance_right:"slider_entrance_right"};function ZM(t,e,s,n,r){const u=s.map(f=>f.id).indexOf(t),p=s.map(f=>f.id).indexOf(e)<u?[pc.slider_exit_left,pc.slider_entrance_right]:[pc.slider_exit_right,pc.slider_entrance_left],[_,h]=p;r([e,_]),setTimeout(()=>{r([t||"",h])},250),setTimeout(()=>{r([]),n(t||"")},500),setTimeout(()=>{document.body.scrollIntoView()},600)}function XM({getViewById:t}){const{type:e,page:s}=da(),n=s||"total",[r,u]=T.useState(n),[c,p]=T.useState([]),_=e==="team"?lt.getMenuItems("t"):lt.getMenuItems("p");if(T.useEffect(()=>{ZM(s||"",r,_,u,p)},[s]),!c.length)return t(s);const[h,f]=c;return o.jsx("div",{className:f,children:t(h)})}function JM({getViewById:t}){const{page:e}=da();return t(e||"total")}function fk({getViewById:t}){return Vt?o.jsx(XM,{getViewById:t}):o.jsx(JM,{getViewById:t})}class eR{constructor(){this.isOpen=!1,this.navigate=null,this.prevUrl="",this.processing=!1,Et(this,{isOpen:ce,processing:ce,open:re,close:re,printPage:re,printSection:re,printAllPages:re,triggerPrint:re,endPrint:re})}open(e,s){this.isOpen=!0,this.navigate=e,this.prevUrl=s}close(){this.isOpen=!1,this.navigate=null,this.prevUrl=""}printPage(){this.triggerPrint()}printSection(){let e=this.prevUrl.split("/");e[2]="print",e=e.join("/"),this.navigate(e),this.triggerPrint()}printAllPages(){this.navigate("/print"),this.triggerPrint()}triggerPrint(){this.isOpen=!1,this.processing=!0,setTimeout(()=>{window.print()},500)}endPrint(){this.processing=!1,this.prevUrl&&this.navigate(this.prevUrl),this.navigate=null,this.prevUrl=""}}const xs=new eR,tR=U(({page:t})=>{let e;return xa.isOpen&&(e="fullscreen"),xs.processing&&(e="print"),lt.getPage(`/team/${t}`,{mode:e})});function yk(){const{type:t}=da();return t&&t!=="team"?null:o.jsx(fk,{getViewById:e=>o.jsx(tR,{page:e})})}const bg={table_filters:"table_filters",table_filters_item:"table_filters_item"},aR=U(()=>{const{type:t,page:e,userId:s}=da(),n=ko(),r=parseInt(s||"0",10)||0,c=A.statisticsByCommits.author.list.map((p,_)=>({id:_,title:p}));return o.jsx("div",{className:bg.table_filters,children:o.jsx(ms,{title:"page.team.tree.filters.author",value:r,className:bg.table_filters_item,options:c,onChange:p=>{n(`/${t}/${e}/${p}`)}})})});function sR(t,e){return function(n){let r;return xa.isOpen&&(r="fullscreen"),xs.processing&&(r="print"),lt.getPage(`/person/${n}`,{user:t,mode:r,filters:e})}}const iR=U(({userId:t})=>{const{type:e,page:s,userId:n}=da(),r={},u=parseInt(n||"0",10)||0,_=A.statisticsByCommits.author.totalInfo[t||u||0];if(e!=="person"||!_)return null;const h=sR(_,r);return o.jsxs(o.Fragment,{children:[s!=="print"&&o.jsxs(o.Fragment,{children:[o.jsx(G,{title:"common.filters"}),o.jsx(aR,{})]}),o.jsx(fk,{getViewById:h})]})}),Wa={welcome:"welcome",welcome_has_banner:"welcome_has_banner",welcome_console:"welcome_console",welcome_row:"welcome_row",welcome_warning:"welcome_warning",welcome_warning_text:"welcome_warning_text",welcome_description:"welcome_description",welcome_first_title:"welcome_first_title",welcome_last_title:"welcome_last_title",welcome_title_link:"welcome_title_link"};function nR(){return o.jsxs("div",{className:Wa.welcome_warning,children:[o.jsx(ot,{translationId:"page.welcome.warning1",className:Wa.welcome_warning_text}),o.jsx(ot,{translationId:"page.welcome.warning2",className:Wa.welcome_warning_text})]})}function oR(){const t=`git --no-pager log --raw --numstat --oneline --all --reverse --date=iso-strict --pretty=format:"%ad>%aN>%aE>%s" > log.txt
|
||
`,e=window.ym,s=e?`${Wa.welcome} ${Wa.welcome_has_banner}`:Wa.welcome;return o.jsxs(o.Fragment,{children:[e&&o.jsx(nR,{}),o.jsx("section",{className:s,children:o.jsxs("div",{className:Wa.welcome_row,children:[o.jsx("h2",{className:Wa.welcome_first_title,children:$t("page.welcome.step1")}),o.jsx(Dv,{className:Wa.welcome_console,textForCopy:t}),o.jsx(ot,{translationId:"page.welcome.description",className:Wa.welcome_description}),o.jsxs("h2",{className:Wa.welcome_last_title,children:[$t("page.welcome.step2")==="page.welcome.step2"?"":$t("page.welcome.step2"),o.jsxs("label",{className:Wa.welcome_title_link,children:[$t("page.welcome.step3"),o.jsx("input",{multiple:!0,type:"file",style:{display:"none"},onChange:async n=>{const r=Array.from(n.target.files),u=await uk(r);Ct.addGroups(u),u.gitLog&&(Pn.setDelay(u.gitLog.length),A.asyncSetCommits(u.gitLog))}})]}),$t("page.welcome.step4")]})]})})]})}const Tt={recommendations_card:"recommendations_card",recommendations_card_for_print:"recommendations_card_for_print",recommendations_card_title:"recommendations_card_title",recommendations_card_icon:"recommendations_card_icon",recommendations_card_button:"recommendations_card_button",recommendations_card_info:"recommendations_card_info",recommendations_card_fact:"recommendations_card_fact",recommendations_card_warning:"recommendations_card_warning",recommendations_card_error:"recommendations_card_error",recommendations_card_banner:"recommendations_card_banner"};function lR(t){const e=t==null?void 0:t.type;return{[J.INFO]:Tt.recommendations_card_info,[J.FACT]:Tt.recommendations_card_fact,[J.WARNING]:Tt.recommendations_card_warning,[J.ALERT]:Tt.recommendations_card_error}[e||J.INFO]??Tt.recommendations_card_fact}function wg({recommendation:t}){var u;if(!t)return null;const e=lR(t),s=hg(t),n=(u=t==null?void 0:t.arguments)==null?void 0:u.title,r=fg(t);return o.jsxs("div",{className:`${Tt.recommendations_card} ${Tt.recommendations_card_for_print} ${e}`,children:[o.jsxs("h5",{className:Tt.recommendations_card_title,children:[o.jsx("span",{className:Tt.recommendations_card_icon}),Ee.get(s,n)]}),o.jsx(ot,{style:{color:"#12131B"},text:r})]})}const H={GOOD:1,NORMAL:2,BAD:3,PUBLICITY:4},dc={commitsAfter1500:H.NORMAL,commitsBefore1500:H.NORMAL,workEveryTime:H.BAD,workNotWork:H.BAD,userNotWork:H.NORMAL,userIsDied:H.NORMAL,lessTasks:H.BAD,moreTasks:H.GOOD,everyMessageLong:H.NORMAL,everyMessageShort:H.BAD,shortestName:H.NORMAL,longestName:H.NORMAL,moreCommits:H.NORMAL,lessCommits:H.BAD,oneCommitOneTask:H.NORMAL,moreLazyDays:H.BAD,lessLazyDays:H.GOOD,zeroLazyDays:H.GOOD,moreWorkDays:H.GOOD,moreScopes:H.GOOD,lessScopes:H.BAD,moreDaysForTask:H.BAD,more2DaysForTask:H.BAD,moreDaysInProject:H.GOOD,lessDaysInProject:H.NORMAL,more90DaysInProject:H.GOOD,lessDaysForTask:H.GOOD,adam:H.NORMAL,more666DaysInProject:H.GOOD,more777DaysInProject:H.GOOD,moreRefactoring:H.GOOD,moreStyle:H.GOOD,hasCommitEveryTime:H.BAD,more365DaysInProject:H.GOOD,moreReadMe:H.GOOD,moreTests:H.GOOD,moreDevOps:H.GOOD,longFilePath:H.NORMAL,longFileName:H.NORMAL,moreTasksInDay:H.GOOD,moreLongWaitPR:H.BAD,morePRMerge:H.NORMAL,firstLastCommit:H.NORMAL,haveNotEmail:H.NORMAL,hasCommitFrom0to7:H.BAD,longWaitPR:H.BAD,lastCommit:H.NORMAL,longTask:H.BAD,noCommitOnDay:H.NORMAL,firstCommit:H.NORMAL,horoscope1:H.NORMAL,horoscope2:H.NORMAL,horoscope3:H.NORMAL,horoscope4:H.NORMAL,horoscope5:H.NORMAL,horoscope6:H.NORMAL,horoscope7:H.NORMAL,horoscope8:H.NORMAL,horoscope9:H.NORMAL,horoscope10:H.NORMAL,horoscope11:H.NORMAL,horoscope12:H.NORMAL,moreChangeTimeZone:H.PUBLICITY,publicitySitnik:H.PUBLICITY,longestMessage:H.NORMAL,commitsAfter1800:H.GOOD,more3YearsInProject:H.GOOD,moreLintHint:H.GOOD,moreAddedFolders:H.NORMAL,workOnWeekends:H.BAD,fileRush:H.NORMAL,lessWorkDays:H.BAD,moreOnHoliday:H.BAD,moreCreateCode:H.NORMAL,moreRemoveCode:H.NORMAL,moreChangeCode:H.NORMAL,github:H.NORMAL,mackBook:H.NORMAL,moreCommitsBeforeRelease:H.NORMAL,ipInEmail:H.NORMAL,languageErrors:H.NORMAL,oneExtension:H.NORMAL,allRelease:H.NORMAL,removeCreateFile:H.NORMAL,renameFile:H.NORMAL},Fa={achievement:"achievement",achievement_container:"achievement_container",achievement_icon:"achievement_icon",achievement_icon_container:"achievement_icon_container",achievement_icon_svg:"achievement_icon_svg",achievement_exp:"achievement_exp",achievement_good:"achievement_good",achievement_middle:"achievement_middle",achievement_bad:"achievement_bad",achievement_publicity:"achievement_publicity",achievement_title:"achievement_title",achievement_description:"achievement_description"};function vk({code:t}){const{t:e}=ie();if(!dc[t])return null;const s=dc[t],n=[Fa.achievement_good,Fa.achievement_middle,Fa.achievement_bad,Fa.achievement_publicity][s-1],r=["+125 XP","+65 XP","- 45 XP","+235 XP"][s-1]||"";return o.jsxs("div",{className:`${Fa.achievement} ${n||""}`,children:[o.jsx("div",{className:Fa.achievement_icon_container,children:o.jsx("div",{className:Fa.achievement_icon,children:o.jsx("img",{alt:"",className:Fa.achievement_icon_svg,src:`./assets/achievements/${t}.svg`})})}),o.jsx("div",{className:Fa.achievement_title,children:e(`plugin.person_achievements.${t}.title`)}),o.jsx("div",{className:Fa.achievement_description,children:e(`plugin.person_achievements.${t}.description`)}),o.jsx("div",{className:Fa.achievement_exp,children:r})]})}function kk(t,e=[]){if(!t)return e;for(let s in t){const n=t[s];n!=null&&n.title?e.push(n):typeof n=="string"?e.push({title:n}):kk(n,e)}return e}function rR(){const t=Ee.translations.get(Ee.language),e=kk(t==null?void 0:t.recommendations).map(n=>o.jsx(wg,{recommendation:n},n[1])),s=Object.entries(dc).sort((n,r)=>n[1]-r[1]).map(([n])=>o.jsx(vk,{code:n},n));return o.jsxs(o.Fragment,{children:[o.jsx(G,{title:"page.person.achievement.title"}),o.jsx("div",{style:{columnCount:3,marginBottom:"24px"},children:s}),o.jsx("section",{children:e})]})}function mR(){return o.jsxs(o.Fragment,{children:[o.jsx(_M,{}),o.jsxs(Hf,{children:[o.jsx(bi,{path:"/settings",element:o.jsx(qo,{children:lt.getPage("/settings")})}),o.jsx(bi,{path:"/debug",element:o.jsx(qo,{children:o.jsx(rR,{})})}),o.jsx(bi,{path:"/print",element:o.jsx(qo,{children:lt.getPage("/print")})}),o.jsx(bi,{path:"/:type/:page",element:o.jsx(qo,{children:o.jsx(yk,{})})}),o.jsx(bi,{path:"/:type/:page/:userId",element:o.jsx(qo,{children:o.jsx(iR,{})})}),o.jsx(bi,{path:"*",element:o.jsx(qo,{children:o.jsx(yk,{})})})]})]})}function uR(){return o.jsx(Hf,{children:o.jsx(bi,{path:"*",element:o.jsx(oR,{})})})}let bk=1;const cR=U(()=>{const t=sc.view;return T.useEffect(()=>{const e=Ct.get("gitLog");e!=null&&e.length&&bk!==(e==null?void 0:e.length)?(bk=e==null?void 0:e.length,A.asyncSetCommits(e)):sc.toggle(Ii.WELCOME)},[]),T.useEffect(()=>{t!==Ii.INFO||window.location.hash||(window.location.hash="#/team/total")},[t]),t===Ii.EMPTY?null:o.jsxs(o.Fragment,{children:[t===Ii.WELCOME&&o.jsx(uR,{}),t===Ii.INFO&&o.jsx(mR,{}),o.jsx(TN,{}),o.jsx(pM,{onChange:e=>{Ct.addGroups(e),e.gitLog&&(Pn.setDelay(e.gitLog.length),A.asyncSetCommits(e.gitLog))}})]})}),Qs={notifications:"notifications",notifications_item:"notifications_item",notifications_item_success:"notifications_item_success",notifications_item_info:"notifications_item_info",notifications_item_warning:"notifications_item_warning",notifications_item_error:"notifications_item_error",notifications_item_title:"notifications_item_title",notifications_item_description:"notifications_item_description"};function pR({message:t}){const e={error:Qs.notifications_item_error,warning:Qs.notifications_item_warning,success:Qs.notifications_item_success,info:Qs.notifications_item_info}[t.type||"success"]||Qs.notifications_item_info;return o.jsxs("div",{className:`${Qs.notifications_item} ${e}`,children:[t.title&&o.jsx("h6",{className:Qs.notifications_item_title,children:t.title}),t.description&&o.jsx("p",{className:Qs.notifications_item_description,children:t.description})]})}const dR=U(()=>{const t=Hu.messages.map(e=>o.jsx(pR,{message:e},e.id));return cu.createPortal(o.jsx("div",{className:Qs.notifications,children:t}),document.body)});function xg(){return{title:"",logo:"./assets/logo.svg",language:"",languages:[{id:"ar",currency:"AED",title:"العَرَبِيَّة"},{id:"de",currency:"EUR",title:"Deutsch"},{id:"en",currency:"USD",title:"English"},{id:"es",currency:"EUR",title:"Español"},{id:"fr",currency:"EUR",title:"Français"},{id:"he",currency:"ILS",title:"עברית"},{id:"hi",currency:"INR",title:"हिंदी"},{id:"ja",currency:"JPY",title:"日本語"},{id:"ko",currency:"KRW",title:"한국어"},{id:"pt",currency:"EUR",title:"Português"},{id:"ru",currency:"RUB",title:"Русский"},{id:"zh",currency:"CNY",title:"中文"}],ref:"",urlForCss:"",urlForGitLog:"",urlForPackageJson:"",prefixForTask:"https://jira.com/secure/RapidBoard.jspa?task=",prefixForPR:"https://bitbucket.com/projects/assayo/repos/frontend/pull-requests/",middleSalaryInMonth:3e3,averageNewWorkplaceCosts:2500,averageMonthlyLicenseCosts:30,workDays:[!0,!0,!0,!0,!0,!1,!1],currency:"RUB",exchangeRate:{USD:1,EUR:.9,RUB:82,CNY:7,JPY:160,KRW:1500,CAD:1.4,INR:92,ILS:3.1,AED:3.6},permissions:[],disabledPermissions:[],plugins:["person_achievements","person_money","person_vacation","person_speed","person_total","person_week","team_author","team_building","team_commits","team_companies","team_country","team_vacation","team_day","team_departments","team_file_analytics","team_files","team_hours","team_month","team_pull_requests","team_recommendations","team_refactor","team_release","team_scope","team_emails","team_tasks","team_total","team_types","team_weeks","team_licenses","team_dependencies","print","sponsor","settings"],disabledPlugins:[]}}function Bi(t){return Array.isArray(t)&&(t!=null&&t.length)?t:void 0}function Cg(t={},e={}){const s=xg();return{title:decodeURIComponent((t==null?void 0:t.title)||"")||(e==null?void 0:e.title)||(s==null?void 0:s.title)||"",logo:(e==null?void 0:e.logo)||(s==null?void 0:s.logo),ref:(t==null?void 0:t.ref)||(e==null?void 0:e.ref)||(s==null?void 0:s.ref)||"",language:(t==null?void 0:t.lang)||(t==null?void 0:t.language)||(e==null?void 0:e.language)||(s==null?void 0:s.language)||"",languages:(e==null?void 0:e.languages)||(s==null?void 0:s.languages)||[],prefixForTask:(e==null?void 0:e.prefixForTask)||(s==null?void 0:s.prefixForTask),prefixForPR:(e==null?void 0:e.prefixForPR)||(s==null?void 0:s.prefixForPR),middleSalaryInMonth:(e==null?void 0:e.middleSalaryInMonth)||(s==null?void 0:s.middleSalaryInMonth),averageNewWorkplaceCosts:(e==null?void 0:e.averageNewWorkplaceCosts)||(s==null?void 0:s.averageNewWorkplaceCosts),averageMonthlyLicenseCosts:(e==null?void 0:e.averageMonthlyLicenseCosts)||(s==null?void 0:s.averageMonthlyLicenseCosts),workDays:(e==null?void 0:e.workDays)||(s==null?void 0:s.workDays),currency:(e==null?void 0:e.currency)||(s==null?void 0:s.currency),exchangeRate:(e==null?void 0:e.exchangeRate)||(s==null?void 0:s.exchangeRate)||{},urlForCss:(t==null?void 0:t.style)||(t==null?void 0:t.theme)||(e==null?void 0:e.urlForCss)||(s==null?void 0:s.urlForCss)||"",urlForGitLog:(t==null?void 0:t.dump)||(t==null?void 0:t.log)||(e==null?void 0:e.urlForGitLog)||(s==null?void 0:s.urlForGitLog)||"",urlForPackageJson:(t==null?void 0:t.urlForPackageJson)||(e==null?void 0:e.urlForPackageJson)||(s==null?void 0:s.urlForPackageJson)||"",permissions:Bi(e==null?void 0:e.permissions)||Bi(s==null?void 0:s.permissions)||[],disabledPermissions:Bi(e==null?void 0:e.disabledPermissions)||Bi(s==null?void 0:s.disabledPermissions)||[],plugins:Bi(e==null?void 0:e.plugins)||Bi(s==null?void 0:s.plugins)||[],disabledPlugins:Bi(e==null?void 0:e.disabledPlugins)||Bi(s==null?void 0:s.disabledPlugins)||[]}}function wk(t){return Object.fromEntries(new URLSearchParams(t||"").entries())}function gR(t){const e=(t||"").replace(/^#/,""),s=e.indexOf("?");return s!==-1?e.slice(s+1):e.startsWith("/")?"":e.includes("=")?e:""}function _R(){return{...wk(location.search),...wk(gR(location.hash))}}function hR(t){const e=_R();if(!(e!=null&&e.config)){t(Cg(e));return}fetch(e==null?void 0:e.config).then(s=>s.json()).then(s=>{t(Cg(e,s))}).catch(()=>{t(Cg(e))})}function fR(t,e){fetch(t).then(s=>s.text()).then(s=>{const n=mk(s);Ct.add("gitLog",n.split(`
|
||
`)),e()})}function yR(t,e){fR(t,e)}function vR(t){const e=document.createElement("link");e.setAttribute("rel","stylesheet"),e.setAttribute("href",t),document.body.appendChild(e)}const kR={page_wrapper_print_icon:"page_wrapper_print_icon"},bR=U(()=>{const{t}=ie();return xs.isOpen?o.jsxs(Io,{onClose:()=>{xs.close()},children:[o.jsx(Xr,{children:o.jsx("div",{style:{textAlign:"center"},children:t("plugin.print.modal.title")})}),o.jsxs(nc,{children:[o.jsx("img",{alt:"",src:"./assets/cards/print.svg",className:kR.page_wrapper_print_icon}),o.jsx(Je,{mode:["primary","full_size"],onClick:()=>{xs.printPage()},children:t("plugin.print.modal.page")}),o.jsx(Je,{mode:["primary","full_size"],onClick:()=>{xs.printSection()},children:t("plugin.print.modal.type")}),o.jsx(Je,{mode:["primary","full_size"],onClick:()=>{xs.printAllPages()},children:t("plugin.print.modal.all")}),o.jsx(Je,{mode:["second","full_size"],onClick:()=>{xs.close()},children:t("plugin.print.modal.cancel")})]})]}):null}),jg={plugin_print_table_of_contents:"plugin_print_table_of_contents",plugin_print_table_of_contents_title:"plugin_print_table_of_contents_title",plugin_print_table_of_contents_item:"plugin_print_table_of_contents_item"};function xk({titles:t}){const{t:e}=ie(),s=(t||[]).map(n=>o.jsx("a",{className:jg.plugin_print_table_of_contents_item,href:`#${n}`,children:e(n||"")},n));return o.jsxs(o.Fragment,{children:[o.jsx(G,{className:jg.plugin_print_table_of_contents_title,title:"plugin.print.tableOfContents"}),o.jsx("nav",{className:jg.plugin_print_table_of_contents,children:s})]})}const gc={plugin_print_title:"plugin_print_title",plugin_print_sub_title:"plugin_print_sub_title"},Ck=U(({user:t})=>{const{t:e}=ie(),s=lt.getMenuItems("p").filter(c=>c.title),n=s.map(c=>c.title),r={user:t,mode:"print"},u=s.map(c=>o.jsxs(o.Fragment,{children:[o.jsx(G,{title:c.title}),lt.getPage(c.link.substring(0,c.link.length-1),r)]}));return o.jsxs(o.Fragment,{children:[o.jsx("h1",{className:gc.plugin_print_title,children:e("plugin.print.title")}),o.jsx("h2",{className:gc.plugin_print_sub_title,children:t.author}),o.jsx(xk,{titles:n}),o.jsx(ot,{translationId:"plugin.print.description"}),u]})}),wR=["/team/files","/team/removedFiles","/team/recommendations","/team/building"],jk=U(()=>{const{t}=ie(),e=lt.getMenuItems("t").filter(u=>u.title&&!wR.includes(u.link)),s=e.map(u=>u.title),n={mode:"print"},r=e.map(u=>o.jsxs(o.Fragment,{children:[o.jsx(G,{title:u.title}),lt.getPage(u.link,n)]}));return o.jsxs(o.Fragment,{children:[o.jsx("h1",{className:gc.plugin_print_title,children:t("plugin.print.title")}),o.jsx("h2",{className:gc.plugin_print_sub_title,children:document.title}),o.jsx(xk,{titles:s}),o.jsx(ot,{translationId:"plugin.print.description"}),r]})}),xR=U(()=>{const t=A.statisticsByCommits.author.totalInfo,e=Object.entries(t).filter(([,s])=>!s.isStaff).map(([s,n])=>o.jsx(Ck,{user:n},s));return o.jsxs(o.Fragment,{children:[o.jsx(jk,{}),e]})}),CR={ar:`
|
||
§ plugin.print.sidebar: طباعة
|
||
§ plugin.print.modal.title: ماذا نطبع؟
|
||
§ plugin.print.modal.page: الصفحة الحالية
|
||
§ plugin.print.modal.type: القسم الحالي
|
||
§ plugin.print.modal.all: جميع الإحصائيات
|
||
§ plugin.print.modal.cancel: إلغاء
|
||
§ plugin.print.tableOfContents: جدول المحتويات
|
||
§ plugin.print.title: تقرير مستودع Git
|
||
§ plugin.print.sub_title: «{title}»
|
||
§ plugin.print.description: تم الحصول على بيانات التقرير من تاريخ الـ commits.
|
||
`,de:`
|
||
§ plugin.print.sidebar: Drucken
|
||
§ plugin.print.modal.title: Was sollen wir drucken?
|
||
§ plugin.print.modal.page: Aktuelle Seite
|
||
§ plugin.print.modal.type: Aktueller Abschnitt
|
||
§ plugin.print.modal.all: Alle Statistiken
|
||
§ plugin.print.modal.cancel: Abbrechen
|
||
§ plugin.print.tableOfContents: Inhaltsverzeichnis
|
||
§ plugin.print.title: Bericht zum Git-Repository
|
||
§ plugin.print.sub_title: «{title}»
|
||
§ plugin.print.description: Die Daten für den Bericht wurden aus der Historie der commits gewonnen.
|
||
`,en:`
|
||
§ plugin.print.sidebar: Print
|
||
§ plugin.print.modal.title: What should we print?
|
||
§ plugin.print.modal.page: Current page
|
||
§ plugin.print.modal.type: Current section
|
||
§ plugin.print.modal.all: All statistics
|
||
§ plugin.print.modal.cancel: Cancel
|
||
§ plugin.print.tableOfContents: Table of contents
|
||
§ plugin.print.title: Git repository report
|
||
§ plugin.print.sub_title: «{title}»
|
||
§ plugin.print.description: The report data was obtained from the commit history.
|
||
`,es:`
|
||
§ plugin.print.sidebar: Imprimir
|
||
§ plugin.print.modal.title: ¿Qué debemos imprimir?
|
||
§ plugin.print.modal.page: Página actual
|
||
§ plugin.print.modal.type: Sección actual
|
||
§ plugin.print.modal.all: Todas las estadísticas
|
||
§ plugin.print.modal.cancel: Cancelar
|
||
§ plugin.print.tableOfContents: Índice
|
||
§ plugin.print.title: Informe del repositorio Git
|
||
§ plugin.print.sub_title: «{title}»
|
||
§ plugin.print.description: Los datos del informe se obtuvieron del historial de commits.
|
||
`,fr:`
|
||
§ plugin.print.sidebar: Imprimer
|
||
§ plugin.print.modal.title: Que faut-il imprimer ?
|
||
§ plugin.print.modal.page: Page actuelle
|
||
§ plugin.print.modal.type: Section actuelle
|
||
§ plugin.print.modal.all: Toutes les statistiques
|
||
§ plugin.print.modal.cancel: Annuler
|
||
§ plugin.print.tableOfContents: Table des matières
|
||
§ plugin.print.title: Rapport du dépôt Git
|
||
§ plugin.print.sub_title: «{title}»
|
||
§ plugin.print.description: Les données du rapport ont été obtenues à partir de l'historique des commits.
|
||
`,he:`
|
||
§ plugin.print.sidebar: הדפסה
|
||
§ plugin.print.modal.title: מה להדפיס?
|
||
§ plugin.print.modal.page: העמוד הנוכחי
|
||
§ plugin.print.modal.type: הסעיף הנוכחי
|
||
§ plugin.print.modal.all: כל הסטטיסטיקות
|
||
§ plugin.print.modal.cancel: ביטול
|
||
§ plugin.print.tableOfContents: תוכן עניינים
|
||
§ plugin.print.title: דוח מאגר Git
|
||
§ plugin.print.sub_title: «{title}»
|
||
§ plugin.print.description: נתוני הדוח התקבלו מהיסטוריית ה-commits.
|
||
`,hi:`
|
||
§ plugin.print.sidebar: प्रिंट
|
||
§ plugin.print.modal.title: क्या प्रिंट करें?
|
||
§ plugin.print.modal.page: वर्तमान पृष्ठ
|
||
§ plugin.print.modal.type: वर्तमान अनुभाग
|
||
§ plugin.print.modal.all: सभी आँकड़े
|
||
§ plugin.print.modal.cancel: रद्द करें
|
||
§ plugin.print.tableOfContents: विषय सूची
|
||
§ plugin.print.title: Git रिपॉज़िटरी रिपोर्ट
|
||
§ plugin.print.sub_title: «{title}»
|
||
§ plugin.print.description: रिपोर्ट का डेटा commit इतिहास से प्राप्त किया गया।
|
||
`,ja:`
|
||
§ plugin.print.sidebar: 印刷
|
||
§ plugin.print.modal.title: 何を印刷しますか?
|
||
§ plugin.print.modal.page: 現在のページ
|
||
§ plugin.print.modal.type: 現在のセクション
|
||
§ plugin.print.modal.all: すべての統計
|
||
§ plugin.print.modal.cancel: キャンセル
|
||
§ plugin.print.tableOfContents: 目次
|
||
§ plugin.print.title: Git リポジトリレポート
|
||
§ plugin.print.sub_title: «{title}»
|
||
§ plugin.print.description: レポートのデータは commit の履歴から取得されました。
|
||
`,ko:`
|
||
§ plugin.print.sidebar: 인쇄
|
||
§ plugin.print.modal.title: 무엇을 인쇄할까요?
|
||
§ plugin.print.modal.page: 현재 페이지
|
||
§ plugin.print.modal.type: 현재 섹션
|
||
§ plugin.print.modal.all: 모든 통계
|
||
§ plugin.print.modal.cancel: 취소
|
||
§ plugin.print.tableOfContents: 목차
|
||
§ plugin.print.title: Git 저장소 보고서
|
||
§ plugin.print.sub_title: «{title}»
|
||
§ plugin.print.description: 보고서 데이터는 commit 기록에서 가져왔습니다.
|
||
`,pt:`
|
||
§ plugin.print.sidebar: Imprimir
|
||
§ plugin.print.modal.title: O que devemos imprimir?
|
||
§ plugin.print.modal.page: Página atual
|
||
§ plugin.print.modal.type: Seção atual
|
||
§ plugin.print.modal.all: Todas as estatísticas
|
||
§ plugin.print.modal.cancel: Cancelar
|
||
§ plugin.print.tableOfContents: Sumário
|
||
§ plugin.print.title: Relatório do repositório Git
|
||
§ plugin.print.sub_title: «{title}»
|
||
§ plugin.print.description: Os dados do relatório foram obtidos do histórico de commits.
|
||
`,ru:`
|
||
§ plugin.print.sidebar: Печать
|
||
§ plugin.print.modal.title: Что распечатываем?
|
||
§ plugin.print.modal.page: Текущую страницу
|
||
§ plugin.print.modal.type: Текущий раздел
|
||
§ plugin.print.modal.all: Всю статистику
|
||
§ plugin.print.modal.cancel: Отмена
|
||
§ plugin.print.tableOfContents: Оглавление
|
||
§ plugin.print.title: Отчёт по git-репозиторию
|
||
§ plugin.print.sub_title: «{title}»
|
||
§ plugin.print.description: Данные для отчёта были получены из истории коммитов.
|
||
`,zh:`
|
||
§ plugin.print.sidebar: 打印
|
||
§ plugin.print.modal.title: 要打印什么?
|
||
§ plugin.print.modal.page: 当前页面
|
||
§ plugin.print.modal.type: 当前部分
|
||
§ plugin.print.modal.all: 全部统计
|
||
§ plugin.print.modal.cancel: 取消
|
||
§ plugin.print.tableOfContents: 目录
|
||
§ plugin.print.title: Git 仓库报告
|
||
§ plugin.print.sub_title: «{title}»
|
||
§ plugin.print.description: 报告数据来自 commit 历史记录。
|
||
`};let jR=(ul=class{constructor(){this.dependencies=["author"]}getHeaderItems(){return[{id:"print",link:"/person/changes/",title:"plugin.print.sidebar",icon:"./assets/menu/print.svg",onClick:(e,s)=>()=>{xs.open(e,s.pathname)}}]}getMenuItems(){return[]}getPage(e,s){return{"/person/print":o.jsx(Ck,{user:s==null?void 0:s.user}),"/team/print":o.jsx(jk,{}),"/print":o.jsx(xR,{}),global:o.jsx(bR,{})}[e]}getTranslations(){return CR}},ul.id="print",ul);function TR(){const t="https://github.com/bakhirev/assayo",e="Visualization and analysis of git repository",s="Check your git stats!",r="IT,git,statistics,audit,data-visualization,report";return{Facebook:`http://www.facebook.com/sharer.php?u=${t}`,VK:`http://vk.com/share.php?url=${t}&title=${e}&comment=${s}`,QQ:`http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=${t}`,Reddit:`https://reddit.com/submit?url=${t}&title=${e}`,X:`https://twitter.com/intent/tweet?url=${t}&text=&via=&hashtags=${r}`,LinkedIn:`https://www.linkedin.com/sharing/share-offsite/?url=${t}`,OK:`https://connect.ok.ru/dk?st.cmd=WidgetSharePreview&st.shareUrl=${t}`,Tumblr:`https://www.tumblr.com/widgets/share/tool?canonicalUrl=${t}&title=${e}&caption=${s}&tags=${r}`,Blogger:`https://www.blogger.com/blog-this.g?u=${t}&n=${e}&t=${s}`,Evernote:`https://www.evernote.com/clip.action?url=${t}&title=`,Addthis:`http://www.addthis.com/bookmark.php?url=${t}`,GetPocket:`https://getpocket.com/edit?url=${t}`,YCombinator:`https://news.ycombinator.com/submitlink?u=${t}&t=${e}`,Buffer:`https://buffer.com/add?text=&url=${t}`,Flipboard:`https://share.flipboard.com/bookmarklet/popout?v=2&title=&url=${t}`,Instapaper:`http://www.instapaper.com/edit?url=${t}&title=${e}&description=${s}`,Renren:`http://widget.renren.com/dialog/share?resourceUrl=${t}&srcUrl=${t}&title=${e}&description=${s}`,"The diaspora* Project":`https://share.diasporafoundation.org/?title=${e}&url=${t}`,Weibo:`http://service.weibo.com/share/share.php?url=${t}&appkey=&title=${e}&pic=&ralateUid=`,Douban:`http://www.douban.com/recommend/?url=${t}&title=`,XING:`https://www.xing.com/spi/shares/new?url=${t}`,Line:`https://lineit.line.me/share/ui?url=${t}&text=`}}const Oo={sponsor_title:"sponsor_title",sponsor_body:"sponsor_body",sponsor_text:"sponsor_text",sponsor_footer:"sponsor_footer",sponsor_button:"sponsor_button",sponsor_button_wrapper:"sponsor_button_wrapper"};function DR(){const t=Object.entries(TR()).map(([e,s])=>o.jsx(wi,{className:Oo.sponsor_button,to:s,target:"_blank",children:e},e));return o.jsx("div",{className:Oo.sponsor_button_wrapper,children:t})}const _c={HIDE:0,SHARE:2};class SR{constructor(){this.type=_c.HIDE,Et(this,{type:ce,close:re}),!(window.location.hostname==="localhost")&&!Vt&&!Vr.getBanner()&&this.setTimer()}setTimer(){setInterval(()=>{this.type||(this.type=_c.SHARE)},7*6e4)}close(){this.type=_c.HIDE}}const Tk=new SR,AR=U(()=>{const{t}=ie(),e=Ee.get("page.sponsor.share.description");return o.jsxs(Io,{delay:10,onClose:()=>{Tk.close()},children:[o.jsx(Xr,{className:Oo.sponsor_title,children:t("page.sponsor.title")}),o.jsxs(nc,{className:Oo.sponsor_body,children:[o.jsx("p",{className:Oo.sponsor_text,children:Zu(e)}),o.jsx(DR,{})]}),o.jsx(oc,{className:Oo.sponsor_footer,children:o.jsx(Je,{mode:["primary","full_size"],onClick:()=>{Tv("https://github.com/bakhirev/assayo"),Hu.show(Ee.get("components.console.notification"))},children:t("page.sponsor.share.button")})})]})}),zR=U(()=>Tk.type===_c.SHARE?o.jsx(AR,{}):null);let NR=(cl=class{constructor(){this.dependencies=[]}getPage(e){return e==="global"?o.jsx(zR,{}):void 0}},cl.id="sponsor",cl);const MR={ar:`
|
||
§ plugin.settings.sidebar: الإعدادات
|
||
§ plugin.settings.document.title: إعدادات العرض
|
||
§ plugin.settings.document.name: عنوان الصفحة
|
||
§ plugin.settings.document.language: لغة الواجهة
|
||
§ plugin.settings.document.translations: وضع المترجم
|
||
§ plugin.settings.document.depersonalize: إخفاء البيانات الشخصية
|
||
§ plugin.settings.links.title: بادئات الروابط
|
||
§ plugin.settings.links.task: لمعرّفات المهام
|
||
§ plugin.settings.links.pr: لـ PR
|
||
§ plugin.settings.salary.title: بيانات الحسابات المالية (USD)
|
||
§ plugin.settings.salary.middle: متوسط الراتب
|
||
§ plugin.settings.days.title: بيانات حساب أيام العمل وأيام العطل
|
||
§ plugin.settings.days.works: أيام العمل في الأسبوع
|
||
§ plugin.settings.mailmap.title: دمج الموظفين
|
||
§ plugin.settings.mailmap.description1: لتجميع الـ commits التي أُنشئت من حسابات مختلفة لنفس الموظف، أنشئ ملفًا نصيًا بسيطًا باسم “.mailmap” في جذر المشروع. فيما يلي مثال لكيفية ملء هذا الملف استنادًا إلى البيانات الحالية.
|
||
§ plugin.settings.mailmap.description2: بعد ذلك، احفظ السجلات مرة أخرى. عند دمج الحسابات، من المرجّح أن تفقد التحليلات التفصيلية في قسم “عناوين البريد الإلكتروني” بعض البيانات. هذا أمر طبيعي.
|
||
`,de:`
|
||
§ plugin.settings.sidebar: Einstellungen
|
||
§ plugin.settings.document.title: Anzeigeeinstellungen
|
||
§ plugin.settings.document.name: Seitentitel
|
||
§ plugin.settings.document.language: Sprache der Benutzeroberfläche
|
||
§ plugin.settings.document.translations: Übersetzermodus
|
||
§ plugin.settings.document.depersonalize: Personenbezogene Daten ausblenden
|
||
§ plugin.settings.links.title: Link-Präfixe
|
||
§ plugin.settings.links.task: Für Aufgaben-IDs
|
||
§ plugin.settings.links.pr: Für PR
|
||
§ plugin.settings.salary.title: Daten für Finanzberechnungen (USD)
|
||
§ plugin.settings.salary.middle: Durchschnittsgehalt
|
||
§ plugin.settings.days.title: Daten zur Berechnung von Arbeits- und arbeitsfreien Tagen
|
||
§ plugin.settings.days.works: Arbeitstage in der Woche
|
||
§ plugin.settings.mailmap.title: Zusammenführung von Mitarbeitern
|
||
§ plugin.settings.mailmap.description1: Um commits zu gruppieren, die von verschiedenen Accounts desselben Mitarbeiters stammen, erstellen Sie im Stammverzeichnis des Projekts eine reine Textdatei mit dem Namen “.mailmap”. Unten finden Sie ein Beispiel, wie diese Datei anhand der aktuellen Daten ausgefüllt wird.
|
||
§ plugin.settings.mailmap.description2: Speichern Sie anschließend die Logs erneut. Bei der Zusammenführung von Accounts verliert die detaillierte Analytik im Abschnitt “E-Mail-Adressen” sehr wahrscheinlich einen Teil der Daten. Das ist normal.
|
||
`,en:`
|
||
§ plugin.settings.sidebar: Settings
|
||
§ plugin.settings.document.title: Display settings
|
||
§ plugin.settings.document.name: Page title
|
||
§ plugin.settings.document.language: UI language
|
||
§ plugin.settings.document.translations: Translator mode
|
||
§ plugin.settings.document.depersonalize: Hide personal data
|
||
§ plugin.settings.links.title: Link prefixes
|
||
§ plugin.settings.links.task: For task IDs
|
||
§ plugin.settings.links.pr: For PR
|
||
§ plugin.settings.salary.title: Data for financial calculations (USD)
|
||
§ plugin.settings.salary.middle: Average salary
|
||
§ plugin.settings.days.title: Data for calculating working and non-working days
|
||
§ plugin.settings.days.works: Working days in the week
|
||
§ plugin.settings.mailmap.title: Staff merge
|
||
§ plugin.settings.mailmap.description1: To group commits made from different accounts of the same staff member, create a plain text file named “.mailmap” in the project root. Below is an example of how to fill this file based on the current data.
|
||
§ plugin.settings.mailmap.description2: After that, save the logs again. When accounts are merged, detailed analytics in the “email addresses” section will most likely lose some data. This is normal.
|
||
`,es:`
|
||
§ plugin.settings.sidebar: Ajustes
|
||
§ plugin.settings.document.title: Ajustes de visualización
|
||
§ plugin.settings.document.name: Título de la página
|
||
§ plugin.settings.document.language: Idioma de la interfaz
|
||
§ plugin.settings.document.translations: Modo traductor
|
||
§ plugin.settings.document.depersonalize: Ocultar datos personales
|
||
§ plugin.settings.links.title: Prefijos de enlaces
|
||
§ plugin.settings.links.task: Para IDs de tareas
|
||
§ plugin.settings.links.pr: Para PR
|
||
§ plugin.settings.salary.title: Datos para cálculos financieros (USD)
|
||
§ plugin.settings.salary.middle: Salario medio
|
||
§ plugin.settings.days.title: Datos para el cálculo de días laborables y no laborables
|
||
§ plugin.settings.days.works: Días laborables de la semana
|
||
§ plugin.settings.mailmap.title: Unificación de empleados
|
||
§ plugin.settings.mailmap.description1: Para agrupar commits realizados desde distintas cuentas del mismo empleado, cree un archivo de texto sin formato llamado “.mailmap” en la raíz del proyecto. A continuación se muestra un ejemplo de cómo rellenar este archivo según los datos actuales.
|
||
§ plugin.settings.mailmap.description2: Después, vuelva a guardar los logs. Al unificar las cuentas, es muy probable que el análisis detallado de la sección “direcciones de email” pierda algunos datos. Esto es normal.
|
||
`,fr:`
|
||
§ plugin.settings.sidebar: Paramètres
|
||
§ plugin.settings.document.title: Paramètres d'affichage
|
||
§ plugin.settings.document.name: Titre de la page
|
||
§ plugin.settings.document.language: Langue de l'interface
|
||
§ plugin.settings.document.translations: Mode traducteur
|
||
§ plugin.settings.document.depersonalize: Masquer les données personnelles
|
||
§ plugin.settings.links.title: Préfixes de liens
|
||
§ plugin.settings.links.task: Pour les identifiants de tâche
|
||
§ plugin.settings.links.pr: Pour PR
|
||
§ plugin.settings.salary.title: Données pour les calculs financiers (USD)
|
||
§ plugin.settings.salary.middle: Salaire moyen
|
||
§ plugin.settings.days.title: Données pour le calcul des jours ouvrés et non ouvrés
|
||
§ plugin.settings.days.works: Jours ouvrés dans la semaine
|
||
§ plugin.settings.mailmap.title: Fusion des salariés
|
||
§ plugin.settings.mailmap.description1: Pour regrouper les commits effectués depuis différents comptes d'un même salarié, créez un fichier texte brut nommé “.mailmap” à la racine du projet. Ci-dessous figure un exemple de remplissage de ce fichier d'après les données actuelles.
|
||
§ plugin.settings.mailmap.description2: Enregistrez ensuite les logs à nouveau. Lors de la fusion des comptes, l'analytique détaillée de la section “adresses e-mail” perdra très probablement une partie des données. C'est normal.
|
||
`,he:`
|
||
§ plugin.settings.sidebar: הגדרות
|
||
§ plugin.settings.document.title: הגדרות תצוגה
|
||
§ plugin.settings.document.name: כותרת העמוד
|
||
§ plugin.settings.document.language: שפת הממשק
|
||
§ plugin.settings.document.translations: מצב מתרגם
|
||
§ plugin.settings.document.depersonalize: הסתרת נתונים אישיים
|
||
§ plugin.settings.links.title: קידומות קישורים
|
||
§ plugin.settings.links.task: עבור מזהי משימות
|
||
§ plugin.settings.links.pr: עבור PR
|
||
§ plugin.settings.salary.title: נתונים לחישובים פיננסיים (USD)
|
||
§ plugin.settings.salary.middle: שכר ממוצע
|
||
§ plugin.settings.days.title: נתונים לחישוב ימי עבודה וימי מנוחה
|
||
§ plugin.settings.days.works: ימי עבודה בשבוע
|
||
§ plugin.settings.mailmap.title: מיזוג עובדים
|
||
§ plugin.settings.mailmap.description1: כדי לקבץ commits שבוצעו מחשבונות שונים של אותו עובד, צרו קובץ טקסט פשוט בשם “.mailmap” בשורש הפרויקט. להלן דוגמה למילוי הקובץ על בסיס הנתונים הנוכחיים.
|
||
§ plugin.settings.mailmap.description2: לאחר מכן שמרו את הלוגים שוב. בעת מיזוג חשבונות, האנליטיקה המפורטת בסעיף “כתובות דוא״ל” כנראה תאבד חלק מהנתונים. זה תקין.
|
||
`,hi:`
|
||
§ plugin.settings.sidebar: सेटिंग्स
|
||
§ plugin.settings.document.title: प्रदर्शन सेटिंग्स
|
||
§ plugin.settings.document.name: पृष्ठ शीर्षक
|
||
§ plugin.settings.document.language: इंटरफ़ेस भाषा
|
||
§ plugin.settings.document.translations: अनुवादक मोड
|
||
§ plugin.settings.document.depersonalize: व्यक्तिगत डेटा छिपाएँ
|
||
§ plugin.settings.links.title: लिंक प्रीफ़िक्स
|
||
§ plugin.settings.links.task: कार्य IDs के लिए
|
||
§ plugin.settings.links.pr: PR के लिए
|
||
§ plugin.settings.salary.title: वित्तीय गणनाओं के लिए डेटा (USD)
|
||
§ plugin.settings.salary.middle: औसत वेतन
|
||
§ plugin.settings.days.title: कार्य दिवसों और अवकाश दिनों की गणना के लिए डेटा
|
||
§ plugin.settings.days.works: सप्ताह में कार्य दिवस
|
||
§ plugin.settings.mailmap.title: कर्मचारियों का विलय
|
||
§ plugin.settings.mailmap.description1: एक ही कर्मचारी के अलग-अलग खातों से किए गए commits को समूहित करने के लिए, प्रोजेक्ट रूट में “.mailmap” नाम की एक सादा पाठ फ़ाइल बनाएँ। नीचे वर्तमान डेटा के आधार पर इस फ़ाइल को भरने का एक उदाहरण है।
|
||
§ plugin.settings.mailmap.description2: इसके बाद, लॉग फिर से सहेजें। खाते विलय होने पर, “ईमेल पते” अनुभाग में विस्तृत विश्लेषण में कुछ डेटा खोने की संभावना है। यह सामान्य है।
|
||
`,ja:`
|
||
§ plugin.settings.sidebar: 設定
|
||
§ plugin.settings.document.title: 表示設定
|
||
§ plugin.settings.document.name: ページタイトル
|
||
§ plugin.settings.document.language: インターフェース言語
|
||
§ plugin.settings.document.translations: 翻訳者モード
|
||
§ plugin.settings.document.depersonalize: 個人データを非表示にする
|
||
§ plugin.settings.links.title: リンクのプレフィックス
|
||
§ plugin.settings.links.task: タスク ID 用
|
||
§ plugin.settings.links.pr: PR 用
|
||
§ plugin.settings.salary.title: 財務計算用データ(USD)
|
||
§ plugin.settings.salary.middle: 平均給与
|
||
§ plugin.settings.days.title: 稼働日と非稼働日の算出用データ
|
||
§ plugin.settings.days.works: 週あたりの稼働日
|
||
§ plugin.settings.mailmap.title: スタッフの統合
|
||
§ plugin.settings.mailmap.description1: 同じスタッフの異なるアカウントから行われた commits をグループ化するには、プロジェクトのルートに “.mailmap” という名前のプレーンテキストファイルを作成してください。以下は、現在のデータに基づく記入例です。
|
||
§ plugin.settings.mailmap.description2: その後、ログを再度保存してください。アカウントを統合すると、“メールアドレス” セクションの詳細分析では一部のデータが失われる可能性が高いです。これは正常です。
|
||
`,ko:`
|
||
§ plugin.settings.sidebar: 설정
|
||
§ plugin.settings.document.title: 표시 설정
|
||
§ plugin.settings.document.name: 페이지 제목
|
||
§ plugin.settings.document.language: 인터페이스 언어
|
||
§ plugin.settings.document.translations: 번역자 모드
|
||
§ plugin.settings.document.depersonalize: 개인 데이터 숨기기
|
||
§ plugin.settings.links.title: 링크 접두사
|
||
§ plugin.settings.links.task: 작업 ID용
|
||
§ plugin.settings.links.pr: PR용
|
||
§ plugin.settings.salary.title: 재무 산정 데이터(USD)
|
||
§ plugin.settings.salary.middle: 평균 급여
|
||
§ plugin.settings.days.title: 근무일 및 휴무일 산정 데이터
|
||
§ plugin.settings.days.works: 주간 근무일
|
||
§ plugin.settings.mailmap.title: 직원 통합
|
||
§ plugin.settings.mailmap.description1: 동일한 직원의 서로 다른 계정에서 수행된 commits를 그룹화하려면 프로젝트 루트에 “.mailmap”이라는 이름의 일반 텍스트 파일을 만드세요. 아래는 현재 데이터를 기준으로 이 파일을 채우는 예시입니다.
|
||
§ plugin.settings.mailmap.description2: 그런 다음 로그를 다시 저장하세요. 계정이 통합되면 “이메일 주소” 섹션의 상세 분석에서 일부 데이터가 손실될 가능성이 높습니다. 이는 정상입니다.
|
||
`,pt:`
|
||
§ plugin.settings.sidebar: Configurações
|
||
§ plugin.settings.document.title: Configurações de exibição
|
||
§ plugin.settings.document.name: Título da página
|
||
§ plugin.settings.document.language: Idioma da interface
|
||
§ plugin.settings.document.translations: Modo tradutor
|
||
§ plugin.settings.document.depersonalize: Ocultar dados pessoais
|
||
§ plugin.settings.links.title: Prefixos de links
|
||
§ plugin.settings.links.task: Para IDs de tarefas
|
||
§ plugin.settings.links.pr: Para PR
|
||
§ plugin.settings.salary.title: Dados para cálculos financeiros (USD)
|
||
§ plugin.settings.salary.middle: Salário médio
|
||
§ plugin.settings.days.title: Dados para o cálculo de dias úteis e não úteis
|
||
§ plugin.settings.days.works: Dias úteis na semana
|
||
§ plugin.settings.mailmap.title: Mesclagem de funcionários
|
||
§ plugin.settings.mailmap.description1: Para agrupar commits feitos a partir de contas diferentes do mesmo funcionário, crie um arquivo de texto simples chamado “.mailmap” na raiz do projeto. Abaixo há um exemplo de como preencher esse arquivo com base nos dados atuais.
|
||
§ plugin.settings.mailmap.description2: Depois disso, salve os logs novamente. Quando as contas forem mescladas, a análise detalhada na seção “endereços de e-mail” provavelmente perderá alguns dados. Isso é normal.
|
||
`,ru:`
|
||
§ plugin.settings.sidebar: Настройки
|
||
§ plugin.settings.document.title: Настройки отображения
|
||
§ plugin.settings.document.name: Заголовок страницы
|
||
§ plugin.settings.document.language: Язык интерфейса
|
||
§ plugin.settings.document.translations: Режим переводчика
|
||
§ plugin.settings.document.depersonalize: Скрыть персональные данные
|
||
§ plugin.settings.links.title: Префиксы ссылок
|
||
§ plugin.settings.links.task: Для номеров задач
|
||
§ plugin.settings.links.pr: Для PR
|
||
§ plugin.settings.salary.title: Данные для финансовых расчётов (USD)
|
||
§ plugin.settings.salary.middle: Средняя заработная плата
|
||
§ plugin.settings.days.title: Данные для расчёта рабочих и выходных дней
|
||
§ plugin.settings.days.works: Рабочие дни в неделе
|
||
§ plugin.settings.mailmap.title: Объединение сотрудников
|
||
§ plugin.settings.mailmap.description1: Чтобы сгруппировать коммиты сделанные с разных аккаунтов одного и того же сотрудника, создайте в корне проекта простой текстовый файл с названием «.mailmap». Ниже приведен пример заполнения этого файла по текущим данным.
|
||
§ plugin.settings.mailmap.description2: После этого сохраните логи ещё раз. При склейке аккаунтов, подробная аналитика в разделе «почтовые адреса», скорее всего, потеряет часть данных. Это нормально.
|
||
`,zh:`
|
||
§ plugin.settings.sidebar: 设置
|
||
§ plugin.settings.document.title: 显示设置
|
||
§ plugin.settings.document.name: 页面标题
|
||
§ plugin.settings.document.language: 界面语言
|
||
§ plugin.settings.document.translations: 译者模式
|
||
§ plugin.settings.document.depersonalize: 隐藏个人数据
|
||
§ plugin.settings.links.title: 链接前缀
|
||
§ plugin.settings.links.task: 用于任务 ID
|
||
§ plugin.settings.links.pr: 用于 PR
|
||
§ plugin.settings.salary.title: 财务计算数据(USD)
|
||
§ plugin.settings.salary.middle: 平均工资
|
||
§ plugin.settings.days.title: 用于计算工作日与非工作日的数据
|
||
§ plugin.settings.days.works: 每周工作日
|
||
§ plugin.settings.mailmap.title: 员工合并
|
||
§ plugin.settings.mailmap.description1: 为了将同一员工从不同账号产生的 commits 进行归并,请在项目根目录创建一个名为 “.mailmap” 的纯文本文件。下面给出一个基于当前数据的填写示例。
|
||
§ plugin.settings.mailmap.description2: 之后,请再次保存日志。账号合并后,“电子邮箱” 部分的详细分析很可能会丢失部分数据。这是正常现象。
|
||
`},Tg={ui_kit_checkbox:"ui_kit_checkbox",ui_kit_checkbox_box:"ui_kit_checkbox_box",ui_kit_checkbox_title:"ui_kit_checkbox_title"};function Pi({title:t,description:e,help:s,error:n,className:r,value:u,onChange:c}){const{t:p}=ie(),_=`checkbox-${Math.ceil(Math.random()*1e4)}`;return o.jsx(Wn,{description:e,help:s,error:n,className:r,children:o.jsxs("div",{className:Tg.ui_kit_checkbox,children:[o.jsx("input",{type:"checkbox",id:_,checked:!!u,className:Tg.ui_kit_checkbox_box,onChange:()=>{c(!u)}}),o.jsx("label",{htmlFor:_,className:Tg.ui_kit_checkbox_title,children:p(t||"")})]})})}const RR={settings_box:"settings_box"};function hc({children:t}){return o.jsx("div",{className:RR.settings_box,children:t})}const ER=U(()=>{var s;const[t,e]=T.useState(document.title);return o.jsxs(hc,{children:[o.jsx(No,{title:"plugin.settings.document.name",value:t,placeholder:(s=de.config)==null?void 0:s.title,onChange:n=>{e(n)},onChangeDebounce:()=>{document.title=t}}),o.jsx(Pi,{value:A.isDepersonalized,title:"plugin.settings.document.depersonalize",onChange:()=>{A.depersonalized(!A.isDepersonalized)}}),o.jsx(Pi,{value:Nt.isEditor,title:"plugin.settings.document.translations",onChange:n=>{n?Nt.editorOn():Nt.editorOff()}}),o.jsx(nt,{height:"xl"})]})}),fc=xg(),IR=U(()=>{const[t,e]=T.useState(""),[s,n]=T.useState("");return o.jsxs(hc,{children:[o.jsx(No,{title:"plugin.settings.links.task",value:t,placeholder:fc.prefixForTask,onChange:r=>{e(r)},onChangeDebounce:r=>{de.updateConfigProperty("prefixForTask",r||fc.prefixForTask)}}),o.jsx(No,{title:"plugin.settings.links.pr",value:s,placeholder:fc.prefixForPR,onChange:r=>{n(r)},onChangeDebounce:r=>{de.updateConfigProperty("prefixForPR",r||fc.prefixForPR)}})]})}),qR=U(()=>{var n,r;const t=(((r=(n=A==null?void 0:A.statisticsByCommits)==null?void 0:n.author)==null?void 0:r.totalInfo)||[]).map(u=>u.emails.map(c=>`${u.author} <${u.emails[0]}> <${c}>`)).flat(),e=t.map(u=>o.jsx("p",{children:u},u)),s=t.join(`\r
|
||
`);return o.jsx(Dv,{textForCopy:s,children:e})});function Dk({title:t,description:e,help:s,error:n,className:r,disabled:u,value:c,placeholder:p="Введите значение",debounceDelay:_,onChange:h,onChangeDebounce:f}){const{text:v}=ie(),k=T.useCallback((()=>{let x=null;return function(N){const q=parseInt(N.target.value,10)||0;h&&h(q),f&&(clearTimeout(x),x=setTimeout(()=>f(q),_||800))}})(),[h]);return o.jsx(Wn,{title:t,description:e,help:s,error:n,className:r,children:o.jsx("input",{disabled:u,type:"number",value:c,placeholder:p?v(p):"",className:Fn.ui_kit_common,onChange:k})})}const Sk=xg(),OR=U(()=>{var s;const[t,e]=T.useState((s=de.config)==null?void 0:s.middleSalaryInMonth);return o.jsx(hc,{children:o.jsx(Dk,{title:"plugin.settings.salary.middle",value:t,placeholder:`${Sk.middleSalaryInMonth}`,onChange:n=>{e(n)},onChangeDebounce:n=>{const u=parseInt(n,10)||Sk.middleSalaryInMonth;de.updateConfigProperty("middleSalaryInMonth",u),A.updateStatistic()}})})}),yc={ui_kit_switch:"ui_kit_switch",ui_kit_switch_item:"ui_kit_switch_item",ui_kit_switch_item_selected:"ui_kit_switch_item_selected",ui_kit_switch_item_disabled:"ui_kit_switch_item_disabled"};function Ak({title:t,description:e,help:s,error:n,className:r,disabled:u,multiple:c,value:p,options:_,onChange:h}){const{t:f}=ie(),v=p||p===0||p===!1;let k=p;v&&!Array.isArray(p)&&(k=[p]);const x=(_||[]).map((N,q)=>{const I=typeof N!="object"?{id:N,title:N}:N,F=v&&k.includes(I==null?void 0:I.id),se=[yc.ui_kit_switch_item];return F&&se.push(yc.ui_kit_switch_item_selected),u&&se.push(yc.ui_kit_switch_item_disabled),o.jsx("button",{className:se.join(" "),onClick:()=>{if(!h)return;let te=[I==null?void 0:I.id];c&&(te=F?k.filter(ge=>ge!==(I==null?void 0:I.id)):[...k,I==null?void 0:I.id].sort()),h(te)},children:f((I==null?void 0:I.title)??(I==null?void 0:I.id)??"")},`${I==null?void 0:I.id}_${q}`)});return o.jsx(Wn,{title:t,description:e,help:s,error:n,className:r,children:o.jsx("div",{className:yc.ui_kit_switch,children:x})})}const $R=U(()=>{var e;const t=(e=de.config)==null?void 0:e.workDays.map((s,n)=>s?n+1:null);return o.jsx(hc,{children:o.jsx(Ak,{multiple:!0,title:"plugin.settings.days.works",value:t,options:[{id:1,title:ls(0,"short")},{id:2,title:ls(1,"short")},{id:3,title:ls(2,"short")},{id:4,title:ls(3,"short")},{id:5,title:ls(4,"short")},{id:6,title:ls(5,"short")},{id:7,title:ls(6,"short")}],onChange:s=>{const n=new Array(7).fill(0).map((r,u)=>s.includes(u+1));de.updateConfigProperty("workDays",n),A.updateStatistic()}})})});function LR(){return o.jsxs(o.Fragment,{children:[o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(G,{title:"plugin.settings.document.title"}),o.jsx(ER,{})]}),o.jsxs(Q,{children:[o.jsx(G,{title:"plugin.settings.links.title"}),o.jsx(IR,{})]})]}),o.jsx(G,{title:"plugin.settings.mailmap.title"}),o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsx(ot,{translationId:"plugin.settings.mailmap.description1"})}),o.jsx(Q,{children:o.jsx(ot,{translationId:"plugin.settings.mailmap.description2"})})]}),o.jsx(nt,{height:"m"}),o.jsx(qR,{}),o.jsx(nt,{height:"xxl"}),o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(G,{title:"plugin.settings.days.title"}),o.jsx($R,{})]}),o.jsxs(Q,{children:[o.jsx(G,{title:"plugin.settings.salary.title"}),o.jsx(OR,{})]})]})]})}let BR=(pl=class{constructor(){this.dependencies=["author"]}getHeaderItems(){return[{id:"settings",link:"/settings",title:"plugin.settings.sidebar",icon:"./assets/menu/setting.svg",onClick:e=>()=>{e("/settings")}}]}getMenuItems(){return[]}getPage(e){return e==="/settings"?o.jsx(LR,{}):void 0}getTranslations(){return MR}},pl.id="settings",pl);const PR={ar:`
|
||
§ plugin.team_author.sidebar: الموظفون
|
||
§ plugin.team_author.statusChart.title: الحالة الحالية
|
||
§ plugin.team_author.daysChart.title: وقت العمل
|
||
§ plugin.team_author.daysChart.item: أيام
|
||
§ plugin.team_author.days.half: نصف سنة
|
||
§ plugin.team_author.days.one: سنة واحدة
|
||
§ plugin.team_author.days.15: سنة ونصف
|
||
§ plugin.team_author.days.two: سنتان
|
||
§ plugin.team_author.days.more: أكثر من سنتين
|
||
§ plugin.team_author.title: التفاصيل
|
||
§ plugin.team_author.description1: *جزء من الإحصائيات* (سرعة العمل، التكاليف، إلخ) *لا يُحتسب للموظفين من نوع «مساعد»*، لأنه دور عرضي في المشروع. يُفترض أنهم لا يؤثرون في المشروع، ويمكن تجاهل تعديلاتهم ضمن حجم العمل الكلي.
|
||
§ plugin.team_author.author: الموظف
|
||
§ plugin.team_author.status: الحالة
|
||
§ plugin.team_author.company: الشركة
|
||
§ plugin.team_author.firstCommit: أول commit
|
||
§ plugin.team_author.lastCommit: الأخير
|
||
§ plugin.team_author.daysAll: إجمالي الأيام
|
||
§ plugin.team_author.types: النوع
|
||
§ plugin.team_author.commits: Commits
|
||
§ plugin.team_author.commitsSmall: commits
|
||
§ plugin.team_author.tasks: المهام
|
||
§ plugin.team_author.workedLosses: أيام مع commits وبدونها
|
||
§ plugin.team_author.worked: عمل
|
||
§ plugin.team_author.losses: أيام بلا commits
|
||
§ plugin.team_author.daysForTask: أيام لكل مهمة
|
||
§ plugin.team_author.scopes: الميزات
|
||
§ plugin.team_author.moneyAll: المستلَم
|
||
§ plugin.team_author.moneyWorked: العمل المنجز
|
||
§ plugin.team_author.moneyLosses: زيادة الدفع
|
||
§ plugin.team_author.type.work: يعمل
|
||
§ plugin.team_author.type.dismissed: غادر
|
||
§ plugin.team_author.type.staff: مساعد
|
||
§ plugin.team_author.absence.title: جدول الإجازات
|
||
§ plugin.team_author.absence.vacation: إجازة
|
||
§ plugin.team_author.absence.transfer: النقل إلى قسم آخر
|
||
§ plugin.team_author.absence.duration: المدة
|
||
`,de:`
|
||
§ plugin.team_author.sidebar: Mitarbeiter
|
||
§ plugin.team_author.statusChart.title: Aktueller Status
|
||
§ plugin.team_author.daysChart.title: Arbeitszeit
|
||
§ plugin.team_author.daysChart.item: Tage
|
||
§ plugin.team_author.days.half: ein halbes Jahr
|
||
§ plugin.team_author.days.one: ein Jahr
|
||
§ plugin.team_author.days.15: eineinhalb
|
||
§ plugin.team_author.days.two: zwei Jahre
|
||
§ plugin.team_author.days.more: mehr als zwei Jahre
|
||
§ plugin.team_author.title: Details
|
||
§ plugin.team_author.description1: *Ein Teil der Statistiken* (Arbeitsgeschwindigkeit, Kosten usw.) *für Mitarbeiter vom Typ „Helfer“ wird nicht gezählt*, weil dies eine episodische Rolle im Projekt ist. Es wird angenommen, dass sie das Projekt nicht beeinflussen und ihre Änderungen im Gesamtumfang der Arbeit vernachlässigt werden können.
|
||
§ plugin.team_author.author: Mitarbeiter
|
||
§ plugin.team_author.status: Status
|
||
§ plugin.team_author.company: Unternehmen
|
||
§ plugin.team_author.firstCommit: Erster commit
|
||
§ plugin.team_author.lastCommit: Letzter
|
||
§ plugin.team_author.daysAll: Tage insgesamt
|
||
§ plugin.team_author.types: Typ
|
||
§ plugin.team_author.commits: Commits
|
||
§ plugin.team_author.commitsSmall: commits
|
||
§ plugin.team_author.tasks: Aufgaben
|
||
§ plugin.team_author.workedLosses: Tage mit und ohne commits
|
||
§ plugin.team_author.worked: Arbeit
|
||
§ plugin.team_author.losses: Tage ohne commits
|
||
§ plugin.team_author.daysForTask: Tage pro Aufgabe
|
||
§ plugin.team_author.scopes: Features
|
||
§ plugin.team_author.moneyAll: Erhalten
|
||
§ plugin.team_author.moneyWorked: Gearbeitet
|
||
§ plugin.team_author.moneyLosses: Überzahlung
|
||
§ plugin.team_author.type.work: arbeitet
|
||
§ plugin.team_author.type.dismissed: ausgeschieden
|
||
§ plugin.team_author.type.staff: Helfer
|
||
§ plugin.team_author.absence.title: Urlaubsplan
|
||
§ plugin.team_author.absence.vacation: Urlaub
|
||
§ plugin.team_author.absence.transfer: Versetzung in eine andere Abteilung
|
||
§ plugin.team_author.absence.duration: Dauer
|
||
`,en:`
|
||
§ plugin.team_author.sidebar: Staff members
|
||
§ plugin.team_author.statusChart.title: Current status
|
||
§ plugin.team_author.daysChart.title: Time worked
|
||
§ plugin.team_author.daysChart.item: days
|
||
§ plugin.team_author.days.half: half a year
|
||
§ plugin.team_author.days.one: one year
|
||
§ plugin.team_author.days.15: one and a half
|
||
§ plugin.team_author.days.two: two years
|
||
§ plugin.team_author.days.more: more than two years
|
||
§ plugin.team_author.title: Details
|
||
§ plugin.team_author.description1: *Part of the statistics* (work speed, costs, etc.) *for employees with the 'Assistant' type is not counted*, as it is an episodic role in the project. It is assumed that they do not affect the project, and their edits can be disregarded in the context of the overall volume of work.
|
||
§ plugin.team_author.author: Staff member
|
||
§ plugin.team_author.status: Status
|
||
§ plugin.team_author.company: Company
|
||
§ plugin.team_author.firstCommit: First commit
|
||
§ plugin.team_author.lastCommit: Last
|
||
§ plugin.team_author.daysAll: Total days
|
||
§ plugin.team_author.types: Type
|
||
§ plugin.team_author.commits: Commits
|
||
§ plugin.team_author.commitsSmall: commits
|
||
§ plugin.team_author.tasks: Tasks
|
||
§ plugin.team_author.workedLosses: Days with and without commits
|
||
§ plugin.team_author.worked: work
|
||
§ plugin.team_author.losses: days without commits
|
||
§ plugin.team_author.daysForTask: Days per task
|
||
§ plugin.team_author.scopes: Features
|
||
§ plugin.team_author.moneyAll: Received
|
||
§ plugin.team_author.moneyWorked: Worked
|
||
§ plugin.team_author.moneyLosses: Overpayment
|
||
§ plugin.team_author.type.work: works
|
||
§ plugin.team_author.type.dismissed: left
|
||
§ plugin.team_author.type.staff: staff
|
||
§ plugin.team_author.absence.title: Vacation schedule
|
||
§ plugin.team_author.absence.vacation: Vacation
|
||
§ plugin.team_author.absence.transfer: Transfer to another department
|
||
§ plugin.team_author.absence.duration: Duration
|
||
`,es:`
|
||
§ plugin.team_author.sidebar: Miembros del personal
|
||
§ plugin.team_author.statusChart.title: Estado actual
|
||
§ plugin.team_author.daysChart.title: Tiempo trabajado
|
||
§ plugin.team_author.daysChart.item: días
|
||
§ plugin.team_author.days.half: medio año
|
||
§ plugin.team_author.days.one: un año
|
||
§ plugin.team_author.days.15: año y medio
|
||
§ plugin.team_author.days.two: dos años
|
||
§ plugin.team_author.days.more: más de dos años
|
||
§ plugin.team_author.title: Detalles
|
||
§ plugin.team_author.description1: *Parte de las estadísticas* (velocidad de trabajo, costos, etc.) *para empleados con tipo 'Asistente' no se cuenta*, ya que es un rol episódico en el proyecto. Se asume que no afectan al proyecto y sus ediciones pueden ignorarse en el contexto del volumen total de trabajo.
|
||
§ plugin.team_author.author: Empleado
|
||
§ plugin.team_author.status: Estado
|
||
§ plugin.team_author.company: Empresa
|
||
§ plugin.team_author.firstCommit: Primer commit
|
||
§ plugin.team_author.lastCommit: Último
|
||
§ plugin.team_author.daysAll: Días totales
|
||
§ plugin.team_author.types: Tipo
|
||
§ plugin.team_author.commits: Commits
|
||
§ plugin.team_author.commitsSmall: commits
|
||
§ plugin.team_author.tasks: Tareas
|
||
§ plugin.team_author.workedLosses: Días con y sin commits
|
||
§ plugin.team_author.worked: trabajo
|
||
§ plugin.team_author.losses: días sin commits
|
||
§ plugin.team_author.daysForTask: Días por tarea
|
||
§ plugin.team_author.scopes: Funcionalidades
|
||
§ plugin.team_author.moneyAll: Recibido
|
||
§ plugin.team_author.moneyWorked: Trabajado
|
||
§ plugin.team_author.moneyLosses: Sobrepago
|
||
§ plugin.team_author.type.work: trabaja
|
||
§ plugin.team_author.type.dismissed: salió
|
||
§ plugin.team_author.type.staff: asistente
|
||
§ plugin.team_author.absence.title: Calendario de vacaciones
|
||
§ plugin.team_author.absence.vacation: Vacaciones
|
||
§ plugin.team_author.absence.transfer: Transferencia a otro departamento
|
||
§ plugin.team_author.absence.duration: Duración
|
||
`,fr:`
|
||
§ plugin.team_author.sidebar: Membres de l'équipe
|
||
§ plugin.team_author.statusChart.title: Statut actuel
|
||
§ plugin.team_author.daysChart.title: Temps travaillé
|
||
§ plugin.team_author.daysChart.item: jours
|
||
§ plugin.team_author.days.half: six mois
|
||
§ plugin.team_author.days.one: un an
|
||
§ plugin.team_author.days.15: un an et demi
|
||
§ plugin.team_author.days.two: deux ans
|
||
§ plugin.team_author.days.more: plus de deux ans
|
||
§ plugin.team_author.title: Détails
|
||
§ plugin.team_author.description1: *Une partie des statistiques* (vitesse de travail, coûts, etc.) *pour les employés de type 'Assistant' n'est pas prise en compte*, car il s'agit d'un rôle épisodique dans le projet. On suppose qu'ils n'affectent pas le projet et que leurs modifications peuvent être ignorées dans le contexte du volume total de travail.
|
||
§ plugin.team_author.author: Salarié
|
||
§ plugin.team_author.status: Statut
|
||
§ plugin.team_author.company: Entreprise
|
||
§ plugin.team_author.firstCommit: Premier commit
|
||
§ plugin.team_author.lastCommit: Dernier
|
||
§ plugin.team_author.daysAll: Total des jours
|
||
§ plugin.team_author.types: Type
|
||
§ plugin.team_author.commits: Commits
|
||
§ plugin.team_author.commitsSmall: commits
|
||
§ plugin.team_author.tasks: Tâches
|
||
§ plugin.team_author.workedLosses: Jours avec et sans commits
|
||
§ plugin.team_author.worked: travaillé
|
||
§ plugin.team_author.losses: jours sans commits
|
||
§ plugin.team_author.daysForTask: Jours par tâche
|
||
§ plugin.team_author.scopes: Fonctionnalités
|
||
§ plugin.team_author.moneyAll: Reçu
|
||
§ plugin.team_author.moneyWorked: Travaillé
|
||
§ plugin.team_author.moneyLosses: Surpaiement
|
||
§ plugin.team_author.type.work: travaille
|
||
§ plugin.team_author.type.dismissed: parti
|
||
§ plugin.team_author.type.staff: assistant
|
||
§ plugin.team_author.absence.title: Calendrier de vacances
|
||
§ plugin.team_author.absence.vacation: Vacances
|
||
§ plugin.team_author.absence.transfer: Transfert vers un autre département
|
||
§ plugin.team_author.absence.duration: Durée
|
||
`,he:`
|
||
§ plugin.team_author.sidebar: עובדים
|
||
§ plugin.team_author.statusChart.title: הסטטוס הנוכחי
|
||
§ plugin.team_author.daysChart.title: זמן עבודה
|
||
§ plugin.team_author.daysChart.item: ימים
|
||
§ plugin.team_author.days.half: חצי שנה
|
||
§ plugin.team_author.days.one: שנה אחת
|
||
§ plugin.team_author.days.15: שנה וחצי
|
||
§ plugin.team_author.days.two: שנתיים
|
||
§ plugin.team_author.days.more: יותר משנתיים
|
||
§ plugin.team_author.title: פירוט
|
||
§ plugin.team_author.description1: *חלק מהסטטיסטיקות* (מהירות עבודה, עלויות וכו') *לא נספרות עבור עובדים מסוג «עוזר»*, כי זה תפקיד מזדמן בפרויקט. מניחים שהם אינם משפיעים על הפרויקט, וניתן להתעלם מהעריכות שלהם ביחס להיקף העבודה הכולל.
|
||
§ plugin.team_author.author: עובד
|
||
§ plugin.team_author.status: סטטוס
|
||
§ plugin.team_author.company: חברה
|
||
§ plugin.team_author.firstCommit: commit ראשון
|
||
§ plugin.team_author.lastCommit: אחרון
|
||
§ plugin.team_author.daysAll: סך הימים
|
||
§ plugin.team_author.types: סוג
|
||
§ plugin.team_author.commits: Commits
|
||
§ plugin.team_author.commitsSmall: commits
|
||
§ plugin.team_author.tasks: משימות
|
||
§ plugin.team_author.workedLosses: ימים עם ובלי commits
|
||
§ plugin.team_author.worked: עבודה
|
||
§ plugin.team_author.losses: ימים ללא commits
|
||
§ plugin.team_author.daysForTask: ימים למשימה
|
||
§ plugin.team_author.scopes: פיצ'רים
|
||
§ plugin.team_author.moneyAll: התקבל
|
||
§ plugin.team_author.moneyWorked: עבד
|
||
§ plugin.team_author.moneyLosses: תשלום-יתר
|
||
§ plugin.team_author.type.work: עובד
|
||
§ plugin.team_author.type.dismissed: עזב
|
||
§ plugin.team_author.type.staff: עוזר
|
||
§ plugin.team_author.absence.title: לוח חופשות
|
||
§ plugin.team_author.absence.vacation: חופשה
|
||
§ plugin.team_author.absence.transfer: העברה למחלקה אחרת
|
||
§ plugin.team_author.absence.duration: משך
|
||
`,hi:`
|
||
§ plugin.team_author.sidebar: कर्मचारी
|
||
§ plugin.team_author.statusChart.title: वर्तमान स्थिति
|
||
§ plugin.team_author.daysChart.title: कार्य समय
|
||
§ plugin.team_author.daysChart.item: दिन
|
||
§ plugin.team_author.days.half: आधा वर्ष
|
||
§ plugin.team_author.days.one: एक वर्ष
|
||
§ plugin.team_author.days.15: डेढ़ वर्ष
|
||
§ plugin.team_author.days.two: दो वर्ष
|
||
§ plugin.team_author.days.more: दो वर्ष से अधिक
|
||
§ plugin.team_author.title: विवरण
|
||
§ plugin.team_author.description1: *आँकड़ों का हिस्सा* (कार्य गति, लागत आदि) *प्रकार «सहायक» वाले कर्मचारियों के लिए नहीं गिना जाता*, क्योंकि यह प्रोजेक्ट में एक अस्थायी भूमिका है। माना जाता है कि वे प्रोजेक्ट को प्रभावित नहीं करते, और समग्र कार्य मात्रा में उनके संपादन को नज़रअंदाज़ किया जा सकता है।
|
||
§ plugin.team_author.author: कर्मचारी
|
||
§ plugin.team_author.status: स्थिति
|
||
§ plugin.team_author.company: कंपनी
|
||
§ plugin.team_author.firstCommit: पहला commit
|
||
§ plugin.team_author.lastCommit: अंतिम
|
||
§ plugin.team_author.daysAll: कुल दिन
|
||
§ plugin.team_author.types: प्रकार
|
||
§ plugin.team_author.commits: Commits
|
||
§ plugin.team_author.commitsSmall: commits
|
||
§ plugin.team_author.tasks: कार्य
|
||
§ plugin.team_author.workedLosses: commits वाले और बिना commits वाले दिन
|
||
§ plugin.team_author.worked: कार्य
|
||
§ plugin.team_author.losses: commits के बिना दिन
|
||
§ plugin.team_author.daysForTask: प्रति कार्य दिन
|
||
§ plugin.team_author.scopes: फ़ीचर
|
||
§ plugin.team_author.moneyAll: प्राप्त
|
||
§ plugin.team_author.moneyWorked: काम किया
|
||
§ plugin.team_author.moneyLosses: अधिक भुगतान
|
||
§ plugin.team_author.type.work: कार्यरत
|
||
§ plugin.team_author.type.dismissed: छोड़ चुका है
|
||
§ plugin.team_author.type.staff: सहायक
|
||
§ plugin.team_author.absence.title: अवकाश अनुसूची
|
||
§ plugin.team_author.absence.vacation: अवकाश
|
||
§ plugin.team_author.absence.transfer: दूसरे विभाग में स्थानांतरण
|
||
§ plugin.team_author.absence.duration: अवधि
|
||
`,ja:`
|
||
§ plugin.team_author.sidebar: スタッフ
|
||
§ plugin.team_author.statusChart.title: 現在のステータス
|
||
§ plugin.team_author.daysChart.title: 勤務時間
|
||
§ plugin.team_author.daysChart.item: 日
|
||
§ plugin.team_author.days.half: 半年
|
||
§ plugin.team_author.days.one: 1 年
|
||
§ plugin.team_author.days.15: 1 年半
|
||
§ plugin.team_author.days.two: 2 年
|
||
§ plugin.team_author.days.more: 2 年以上
|
||
§ plugin.team_author.title: 詳細
|
||
§ plugin.team_author.description1: *統計の一部*(作業速度、コストなど)*はタイプ「アシスタント」の従業員では集計されません*。プロジェクトにおける一時的な役割だからです。プロジェクトへの影響はなく、全体の作業量の中では変更を無視できると見なします。
|
||
§ plugin.team_author.author: スタッフ
|
||
§ plugin.team_author.status: ステータス
|
||
§ plugin.team_author.company: 会社
|
||
§ plugin.team_author.firstCommit: 最初の commit
|
||
§ plugin.team_author.lastCommit: 最後
|
||
§ plugin.team_author.daysAll: 合計日数
|
||
§ plugin.team_author.types: 種別
|
||
§ plugin.team_author.commits: Commits
|
||
§ plugin.team_author.commitsSmall: commits
|
||
§ plugin.team_author.tasks: タスク
|
||
§ plugin.team_author.workedLosses: commits のある日とない日
|
||
§ plugin.team_author.worked: 勤務
|
||
§ plugin.team_author.losses: commits のない日
|
||
§ plugin.team_author.daysForTask: タスクあたりの日数
|
||
§ plugin.team_author.scopes: 機能
|
||
§ plugin.team_author.moneyAll: 受領
|
||
§ plugin.team_author.moneyWorked: 勤務
|
||
§ plugin.team_author.moneyLosses: 過払い
|
||
§ plugin.team_author.type.work: 在籍中
|
||
§ plugin.team_author.type.dismissed: 退職済み
|
||
§ plugin.team_author.type.staff: アシスタント
|
||
§ plugin.team_author.absence.title: 休暇スケジュール
|
||
§ plugin.team_author.absence.vacation: 休暇
|
||
§ plugin.team_author.absence.transfer: 他部門への異動
|
||
§ plugin.team_author.absence.duration: 期間
|
||
`,ko:`
|
||
§ plugin.team_author.sidebar: 직원
|
||
§ plugin.team_author.statusChart.title: 현재 상태
|
||
§ plugin.team_author.daysChart.title: 근무 시간
|
||
§ plugin.team_author.daysChart.item: 일
|
||
§ plugin.team_author.days.half: 반년
|
||
§ plugin.team_author.days.one: 1년
|
||
§ plugin.team_author.days.15: 1년 반
|
||
§ plugin.team_author.days.two: 2년
|
||
§ plugin.team_author.days.more: 2년 이상
|
||
§ plugin.team_author.title: 상세
|
||
§ plugin.team_author.description1: *통계의 일부*(작업 속도, 비용 등)*는 유형이 '도우미'인 직원에게는 집계되지 않습니다*. 프로젝트에서 일시적인 역할이기 때문입니다. 프로젝트에 영향을 주지 않으며, 전체 작업량에서 그 수정은 무시할 수 있다고 봅니다.
|
||
§ plugin.team_author.author: 직원
|
||
§ plugin.team_author.status: 상태
|
||
§ plugin.team_author.company: 회사
|
||
§ plugin.team_author.firstCommit: 첫 commit
|
||
§ plugin.team_author.lastCommit: 마지막
|
||
§ plugin.team_author.daysAll: 총 일수
|
||
§ plugin.team_author.types: 유형
|
||
§ plugin.team_author.commits: Commits
|
||
§ plugin.team_author.commitsSmall: commits
|
||
§ plugin.team_author.tasks: 작업
|
||
§ plugin.team_author.workedLosses: commits가 있는 날과 없는 날
|
||
§ plugin.team_author.worked: 근무
|
||
§ plugin.team_author.losses: commits가 없는 날
|
||
§ plugin.team_author.daysForTask: 작업당 일수
|
||
§ plugin.team_author.scopes: 기능
|
||
§ plugin.team_author.moneyAll: 수령
|
||
§ plugin.team_author.moneyWorked: 근무
|
||
§ plugin.team_author.moneyLosses: 초과 지급
|
||
§ plugin.team_author.type.work: 재직 중
|
||
§ plugin.team_author.type.dismissed: 퇴사
|
||
§ plugin.team_author.type.staff: 도우미
|
||
§ plugin.team_author.absence.title: 휴가 일정
|
||
§ plugin.team_author.absence.vacation: 휴가
|
||
§ plugin.team_author.absence.transfer: 다른 부서로의 전배
|
||
§ plugin.team_author.absence.duration: 기간
|
||
`,pt:`
|
||
§ plugin.team_author.sidebar: Membros da equipe
|
||
§ plugin.team_author.statusChart.title: Estado atual
|
||
§ plugin.team_author.daysChart.title: Tempo trabalhado
|
||
§ plugin.team_author.daysChart.item: dias
|
||
§ plugin.team_author.days.half: meio ano
|
||
§ plugin.team_author.days.one: um ano
|
||
§ plugin.team_author.days.15: ano e meio
|
||
§ plugin.team_author.days.two: dois anos
|
||
§ plugin.team_author.days.more: mais de dois anos
|
||
§ plugin.team_author.title: Detalhes
|
||
§ plugin.team_author.description1: *Parte das estatísticas* (velocidade de trabalho, custos, etc.) *para funcionários com tipo 'Assistente' não é contada*, pois é um papel episódico no projeto. Assumimos que eles não afetam o projeto e suas edições podem ser desconsideradas no contexto do volume total de trabalho.
|
||
§ plugin.team_author.author: Funcionário
|
||
§ plugin.team_author.status: Status
|
||
§ plugin.team_author.company: Empresa
|
||
§ plugin.team_author.firstCommit: Primeiro commit
|
||
§ plugin.team_author.lastCommit: Último
|
||
§ plugin.team_author.daysAll: Dias totais
|
||
§ plugin.team_author.types: Tipo
|
||
§ plugin.team_author.commits: Commits
|
||
§ plugin.team_author.commitsSmall: commits
|
||
§ plugin.team_author.tasks: Tarefas
|
||
§ plugin.team_author.workedLosses: Dias com e sem commits
|
||
§ plugin.team_author.worked: trabalho
|
||
§ plugin.team_author.losses: dias sem commits
|
||
§ plugin.team_author.daysForTask: Dias por tarefa
|
||
§ plugin.team_author.scopes: Funcionalidades
|
||
§ plugin.team_author.moneyAll: Recebido
|
||
§ plugin.team_author.moneyWorked: Trabalhado
|
||
§ plugin.team_author.moneyLosses: Pagamento excessivo
|
||
§ plugin.team_author.type.work: trabalha
|
||
§ plugin.team_author.type.dismissed: saiu
|
||
§ plugin.team_author.type.staff: assistente
|
||
§ plugin.team_author.absence.title: Calendário de férias
|
||
§ plugin.team_author.absence.vacation: Férias
|
||
§ plugin.team_author.absence.transfer: Transferência para outro departamento
|
||
§ plugin.team_author.absence.duration: Duração
|
||
`,ru:`
|
||
§ plugin.team_author.sidebar: Сотрудники
|
||
§ plugin.team_author.statusChart.title: Текущий статус
|
||
§ plugin.team_author.daysChart.title: Время работы
|
||
§ plugin.team_author.daysChart.item: дней
|
||
§ plugin.team_author.days.half: пол года
|
||
§ plugin.team_author.days.one: год
|
||
§ plugin.team_author.days.15: полтора
|
||
§ plugin.team_author.days.two: два года
|
||
§ plugin.team_author.days.more: больше двух лет
|
||
§ plugin.team_author.title: Детализация
|
||
§ plugin.team_author.description1: *Часть статистики* (скорость работы, затраченные деньги и т.п.) *по сотрудникам с типом «Помощник» не считается*, т.к. это эпизодическая роль в проекте. Предполагаем, что они не влияют на проект, а их правками можно пренебречь на фоне общего объема работы.
|
||
§ plugin.team_author.author: Сотрудник
|
||
§ plugin.team_author.status: Статус
|
||
§ plugin.team_author.company: Компания
|
||
§ plugin.team_author.firstCommit: Первый коммит
|
||
§ plugin.team_author.lastCommit: Последний
|
||
§ plugin.team_author.daysAll: Всего дней
|
||
§ plugin.team_author.types: Тип работ
|
||
§ plugin.team_author.commits: Коммитов
|
||
§ plugin.team_author.commitsSmall: коммитов
|
||
§ plugin.team_author.tasks: Задач
|
||
§ plugin.team_author.workedLosses: Дни с коммитами и без
|
||
§ plugin.team_author.worked: работа
|
||
§ plugin.team_author.losses: дни без коммитов
|
||
§ plugin.team_author.daysForTask: Дней на задачу
|
||
§ plugin.team_author.scopes: Фич
|
||
§ plugin.team_author.moneyAll: Получил
|
||
§ plugin.team_author.moneyWorked: Отработал
|
||
§ plugin.team_author.moneyLosses: Переплата
|
||
§ plugin.team_author.type.work: работает
|
||
§ plugin.team_author.type.dismissed: уволен
|
||
§ plugin.team_author.type.staff: помощник
|
||
§ plugin.team_author.absence.title: График отпусков
|
||
§ plugin.team_author.absence.vacation: Отпуск
|
||
§ plugin.team_author.absence.transfer: Перевод в другой отдел
|
||
§ plugin.team_author.absence.duration: Продолжительность
|
||
|
||
§ plugin.team_author.recommendations.lotOfLazy.title: Слишком мало кода: {count}
|
||
§ plugin.team_author.recommendations.lotOfLazy.description
|
||
Пересмотреть контракт?
|
||
|
||
# Состав:
|
||
- {list};
|
||
|
||
# Ответьте себе на вопросы:
|
||
- он тимлид, архитектор, аналитик?
|
||
- это его основной проект?
|
||
- есть какие-то зависимости от него?
|
||
|
||
# Почему нет смысла исправлять
|
||
Суммарные затраты на разработчика уже больше чем прибыль от его работы.
|
||
Если мы считаем, что объективных помех его работе не было, то человек либо не хочет работать вообще, либо работает на двух проектах одновременно.
|
||
Завершение контракта и замена новым сотрудником выглядит оправданным с точки зрения общей статистики.
|
||
|
||
§ plugin.team_author.recommendations.manyLazy.title: Пишут мало кода: {count}
|
||
§ plugin.team_author.recommendations.manyLazy.description
|
||
Нужно взять на контроль.
|
||
|
||
# Состав:
|
||
- {list};
|
||
|
||
# Как делается выборка:
|
||
- на тестовых выборках хороший программист пишет код больше 80% времени;
|
||
- в данном случае показатель от 60% до 80%;
|
||
|
||
# Как контролировать:
|
||
- дробить задачи на 1..2 дня;
|
||
- каждый день спрашивать статус;
|
||
- убедиться, что задачи хорошо расписаны и готовы к началу разработки;
|
||
- устроить парное программирование, чтобы проверить фактическую скорость;
|
||
|
||
§ plugin.team_author.recommendations.oneTypeMans
|
||
получает слишком однообразные задачи по типу. Может выгореть.
|
||
|
||
# Почему это важно:
|
||
- если сотрудник выгорит, его скорость работы снизится;
|
||
- замедляется профессиональный рост;
|
||
- повышается вероятность увольнения;
|
||
|
||
# Как делается выборка:
|
||
- для каждого коммита определятся тип задачи;
|
||
- если больше 70% задач одного типа, значит человек делает одно и тоже;
|
||
|
||
§ plugin.team_author.recommendations.workToday.title: Работает {count}
|
||
§ plugin.team_author.recommendations.workToday.description
|
||
над проектом в данный момент.
|
||
|
||
# Состав:
|
||
- {list};
|
||
|
||
# Почему именно они:
|
||
- рабочих дней более 50%;
|
||
- работали в течении последних 30 дней;
|
||
|
||
§ plugin.team_author.recommendations.dismissed.title: Уволилось {count}
|
||
§ plugin.team_author.recommendations.dismissed.description
|
||
или работало короткий промежуток времени.
|
||
|
||
# Состав:
|
||
- {list};
|
||
|
||
# Почему именно они:
|
||
- работали в нормальном ритме (видимо, это их основной репозиторий);
|
||
- за последний месяц не было ни одного коммита;
|
||
- отпуск обычно 14 дней (их отсутствие не похоже на отпуск);
|
||
|
||
§ plugin.team_author.recommendations.staff.title: Помогают {count}
|
||
§ plugin.team_author.recommendations.staff.description
|
||
Люди другой специализации, которые что-либо коммитили.
|
||
|
||
# Состав:
|
||
- {list};
|
||
|
||
# Почему именно они:
|
||
- это не open-source проект;
|
||
- рабочих дней менее 15% от общего числа;
|
||
- изменяют примерно одни и те же файлы;
|
||
|
||
§ plugin.team_author.recommendations.projectType.openSource.title
|
||
Открытый проект
|
||
|
||
§ plugin.team_author.recommendations.projectType.openSource.description
|
||
пять дней в неделю тут не работают.
|
||
|
||
Проект может быть и закрытым, просто такой темп работы обычно у открытых библиотек на GitHub.
|
||
|
||
# Метод оценки:
|
||
- берется статистика по всем активным разработчикам;
|
||
- подсчитывается среднее число дней работы и без коммитов;
|
||
- у open-source библиотек рабочих дней обычно максимум 15..20%;
|
||
|
||
# Последствия
|
||
Для проектов, где работа не постоянна, нет смысла во многих показателях. Поэтому показатели без коммитов, скорости и т.п. будут скрыты.
|
||
|
||
Как правило, оценку таких проектов делают перед началом разработки своей закрытой версии. Самые интересные показатели в этом случае вероятная стоимость и суммарное время на разработку.
|
||
|
||
|
||
§ plugin.team_author.recommendations.projectType.easy.title
|
||
Слабая загрузка
|
||
|
||
§ plugin.team_author.recommendations.projectType.easy.description
|
||
слишком много дней без коммитов.
|
||
|
||
Нужно понять почему команда не пишет код.
|
||
|
||
# Метод оценки:
|
||
- берется статистика по всем активным разработчикам;
|
||
- подсчитывается среднее число дней работы и без коммитов;
|
||
- загрузка считается слабой, если процент без коммитов от 5% до 20%;
|
||
|
||
# Возможные причины:
|
||
- фактически нет задач;
|
||
- задачи есть, но хорошо ложатся на текущую архитектуру;
|
||
- разработчиков отвлекают совещаниями;
|
||
- команда не работает;
|
||
|
||
# Варианты решения:
|
||
- обсудить проблему с командой;
|
||
- уменьшить гранулярность задач, чтобы за день можно было успеть сделать одну или две задачи;
|
||
- ввести ежедневные совещания, чтобы проверять движение задач по статусу;
|
||
- устроить сеансы парного программирования, чтобы убедиться, что разработчик может работать быстрее;
|
||
|
||
§ plugin.team_author.recommendations.manager.title
|
||
Обозначьте дедлайны
|
||
|
||
§ plugin.team_author.recommendations.manager.description
|
||
У любой задачи должен быть чёткий дедлайн.
|
||
|
||
Это позволит не затягивать её выполнение на несколько дней или недель.
|
||
|
||
# Какие показатели стоит проверить:
|
||
- количество дней на одну задачу, которое тратит работник;
|
||
- количество дней ожидания влития PR (страница статистики по PR);
|
||
|
||
§ plugin.team_author.recommendations.shorTalk.title
|
||
Проводите ежедневные совещания
|
||
|
||
§ plugin.team_author.recommendations.shorTalk.description
|
||
они помогают быть в курсе проекта.
|
||
|
||
Не растягивайте их отвлекаясь на посторонние темы.
|
||
|
||
# На какие вопросы должен ответить сотрудник:
|
||
- что было сделано;
|
||
- что будет сделано;
|
||
- есть ли какие-либо проблемы;
|
||
|
||
# Следует обрывать монолог, если:
|
||
- начинают подробно описывать мелкие детали, которые не важны;
|
||
- уводят диалог в сторону, от первоначального плана;
|
||
|
||
# Почему это важно:
|
||
Часто сотрудник, который ничего не делает, старается уйти от ответа. Для этого он рассказывает кучу ненужных подробностей свой работы. Это позволяет усыпить внимание участников и растянуть время ответа. Создается ощущение что он чем-то занят, хотя по факту работы не было.
|
||
|
||
§ plugin.team_author.recommendations.ipr.title
|
||
Составьте план обучения
|
||
|
||
§ plugin.team_author.recommendations.ipr.description
|
||
на каждого сотрудника.
|
||
|
||
*Индивидуальный план обучения* — это список целей и задач, которые помогают человеку развиваться в определенной области.
|
||
|
||
# Как составить план:
|
||
- составить матрицу компетенций;
|
||
- определить по каким компетенциям меньше всего знаний и опыта;
|
||
- узнать какие из этих компетенций интересны сотруднику;
|
||
- придумать 3..5 целей в рамках каждой такой компетенции на полпостороние года или год;
|
||
- каждый месяц пытаться сделать что-либо для достижения одной цели;
|
||
- каждый месяц напоминать об общем плане достижения этих целей;
|
||
|
||
# Нужен ли план руководителю?
|
||
Да, руководитель так же должен составить план на себя. Если нет вышестоящего руководителя, то он должен проверять сам себя.
|
||
|
||
# Почему это важно:
|
||
- сотрудники становятся более лояльны к компании;
|
||
- за теже деньги вы получаете более квалифицированные кадры;
|
||
|
||
§ plugin.team_author.recommendations.oneToOne.title
|
||
Проводите 1-1 каждый месяц
|
||
|
||
§ plugin.team_author.recommendations.oneToOne.description
|
||
это поможет выявить проблемы на ранней стадии.
|
||
|
||
*One-to-one* — это регулярные личные встречи руководителя с подчиненным. На таких встречах обычно обсуждают всё, что важно для сотрудника, что его волнует, и то, чем он может поделиться с руководителем только наедине.
|
||
|
||
# Почему это важно:
|
||
- легко выяснить, кто из сотрудников перегружен, а у кого есть свободное время;
|
||
- можно предотвратить выгорание сотрудника;
|
||
- можно получить быструю обратную связь о процессах, которые вы можете не замечать;
|
||
- формируется доверительное отношение, сотрудники становятся более лояльны к компании;
|
||
- повышается мотивация и вовлеченность сотрудников;
|
||
|
||
§ plugin.team_author.recommendations.club.title
|
||
Ходите в бар
|
||
|
||
§ plugin.team_author.recommendations.club.description
|
||
один раз в месяц или два.
|
||
|
||
Это поможет выстроить неформальную коммуникацию в коллективе и сплотить команду, даже если общение будет сжатым.
|
||
|
||
# Почему это важно:
|
||
- можно получить быструю обратную связь о процессах, которые вы можете не замечать;
|
||
- формируется доверительное отношение, сотрудники становятся более лояльны к компании;
|
||
- повышается вовлеченность сотрудников;
|
||
|
||
`,zh:`
|
||
§ plugin.team_author.sidebar: 员工
|
||
§ plugin.team_author.statusChart.title: 当前状态
|
||
§ plugin.team_author.daysChart.title: 工作时间
|
||
§ plugin.team_author.daysChart.item: 天
|
||
§ plugin.team_author.days.half: 半年
|
||
§ plugin.team_author.days.one: 一年
|
||
§ plugin.team_author.days.15: 一年半
|
||
§ plugin.team_author.days.two: 两年
|
||
§ plugin.team_author.days.more: 两年以上
|
||
§ plugin.team_author.title: 明细
|
||
§ plugin.team_author.description1: *部分统计*(工作速度、成本等)*对类型为「助手」的员工不计入*,因为这是项目中的临时角色。假定他们不影响项目,其修改在整体工作量中可以忽略。
|
||
§ plugin.team_author.author: 员工
|
||
§ plugin.team_author.status: 状态
|
||
§ plugin.team_author.company: 公司
|
||
§ plugin.team_author.firstCommit: 首次 commit
|
||
§ plugin.team_author.lastCommit: 最近
|
||
§ plugin.team_author.daysAll: 总天数
|
||
§ plugin.team_author.types: 类型
|
||
§ plugin.team_author.commits: Commits
|
||
§ plugin.team_author.commitsSmall: commits
|
||
§ plugin.team_author.tasks: 任务
|
||
§ plugin.team_author.workedLosses: 有和无 commits 的天数
|
||
§ plugin.team_author.worked: 工作
|
||
§ plugin.team_author.losses: 没有 commits 的天数
|
||
§ plugin.team_author.daysForTask: 每项任务的天数
|
||
§ plugin.team_author.scopes: 功能
|
||
§ plugin.team_author.moneyAll: 已领取
|
||
§ plugin.team_author.moneyWorked: 已工作
|
||
§ plugin.team_author.moneyLosses: 超额支付
|
||
§ plugin.team_author.type.work: 在职
|
||
§ plugin.team_author.type.dismissed: 已离职
|
||
§ plugin.team_author.type.staff: 助手
|
||
§ plugin.team_author.absence.title: 休假计划
|
||
§ plugin.team_author.absence.vacation: 休假
|
||
§ plugin.team_author.absence.transfer: 调往其他部门
|
||
§ plugin.team_author.absence.duration: 时长
|
||
`};function WR(t){const e=t==null?void 0:t.type;return{[J.INFO]:Tt.recommendations_card_info,[J.FACT]:Tt.recommendations_card_fact,[J.WARNING]:Tt.recommendations_card_warning,[J.ALERT]:Tt.recommendations_card_error}[e||J.INFO]??Tt.recommendations_card_fact}function FR(t){const e=t==null?void 0:t.type;return{[J.INFO]:"./assets/recommendations/info.svg",[J.FACT]:"./assets/recommendations/fact.svg",[J.WARNING]:"./assets/recommendations/warning.svg",[J.ALERT]:"./assets/recommendations/alert.svg"}[e||J.INFO]??"./assets/recommendations/info.svg"}function UR({recommendation:t,onClick:e}){var _;const{t:s}=ie();if(!t)return null;const n=WR(t),r=hg(t),u=(_=t==null?void 0:t.arguments)==null?void 0:_.title,p=fg(t).split(`
|
||
`).shift();return o.jsxs("div",{className:`${Tt.recommendations_card} ${n}`,onClick:Vt?e:void 0,children:[o.jsxs("h5",{className:Tt.recommendations_card_title,children:[o.jsx("img",{alt:"",className:Tt.recommendations_card_icon,src:FR(t)}),ga,s(r,u),ga]}),o.jsx(ot,{style:{color:"#12131B"},text:p||""}),!Vt&&o.jsx(Je,{mode:"link",className:Tt.recommendations_card_button,onClick:e,children:s("components.recommendations.open")})]})}const Dg={recommendations_container:"recommendations_container",recommendations_container_for_print:"recommendations_container_for_print"};function GR(t){const e=`${Tt.recommendations_card} ${Tt.recommendations_card_banner}`,s=o.jsx(xv,{className:e},"banner"),n=Math.floor(Math.random()*t.length),r=t.splice(n);return[...t,s,...r]}function Hn({recommendations:t,mode:e}){let s=(t||[]).filter(r=>r).map(r=>e==="print"?o.jsx(wg,{recommendation:r},r.description):o.jsx(UR,{recommendation:r,onClick:()=>{lc.open(r)}},r.description));if(!s.length)return null;e!=="print"&&(s=GR(s));const n=e==="print"?`${Dg.recommendations_container} scroll_x ${Dg.recommendations_container_for_print}`:`${Dg.recommendations_container} scroll_x`;return o.jsxs(o.Fragment,{children:[o.jsx(G,{title:"components.recommendations.title"}),o.jsx("div",{className:n,onTouchStart:r=>r.stopPropagation(),onMouseDown:r=>r.stopPropagation(),children:s})]})}const HR={lotOfLazy:{title:"plugin.team_author.recommendations.lotOfLazy.title",description:"plugin.team_author.recommendations.lotOfLazy.description",type:J.ALERT,arguments:{title:{},description:{}}},manyLazy:{title:"plugin.team_author.recommendations.manyLazy.title",description:"plugin.team_author.recommendations.manyLazy.description",type:J.WARNING,arguments:{title:{},description:{}}},oneTypeMans:{description:"plugin.team_author.recommendations.oneTypeMans",type:J.WARNING},workToday:{title:"plugin.team_author.recommendations.workToday.title",description:"plugin.team_author.recommendations.workToday.description",type:J.FACT,arguments:{title:{},description:{}}},dismissed:{title:"plugin.team_author.recommendations.dismissed.title",description:"plugin.team_author.recommendations.dismissed.description",type:J.FACT,arguments:{title:{},description:{}}},staff:{title:"plugin.team_author.recommendations.staff.title",description:"plugin.team_author.recommendations.staff.description",type:J.FACT,arguments:{title:{},description:{}}},manager:{title:"plugin.team_author.recommendations.manager.title",description:"plugin.team_author.recommendations.manager.description",type:J.INFO},shorTalk:{title:"plugin.team_author.recommendations.shorTalk.title",description:"plugin.team_author.recommendations.shorTalk.description",type:J.INFO},ipr:{title:"plugin.team_author.recommendations.ipr.title",description:"plugin.team_author.recommendations.ipr.description",type:J.INFO},oneToOne:{title:"plugin.team_author.recommendations.oneToOne.title",description:"plugin.team_author.recommendations.oneToOne.description",type:J.INFO},club:{title:"plugin.team_author.recommendations.club.title",description:"plugin.team_author.recommendations.club.description",type:J.INFO},projectTypeOpenSource:{title:"plugin.team_author.recommendations.projectType.openSource.title",description:"plugin.team_author.recommendations.projectType.openSource.description",type:J.FACT},projectTypeEasy:{title:"plugin.team_author.recommendations.projectType.easy.title",description:"plugin.team_author.recommendations.projectType.easy.description",type:J.ALERT}},{getItem:Vn,getTitle:VR,getArgTitleDescription:sm}=Un(HR);function YR(t){return t<1?Vn("projectTypeOpenSource"):t<5?Vn("projectTypeEasy"):null}function QR(){const t=A.statisticsByCommits,e=[],s=[],n=[],r=[],u=[],c=[];let p=1;return t.author.list.forEach(h=>{const f=t.author.totalInfoByName.get(h);if(f.isStaff){n.push(h);return}if(f.isDismissed){s.push(h);return}e.push(h);const v=f.totalDaysWithCommits/f.totalDaysWithoutCommits;v>=0&&v<3&&r.unshift(h),v>=3&&v<5&&u.unshift(h),p=p*v,Object.values(f.types).sort().pop()*100/f.commits>=70&&c.unshift(h)}),p=p**(1/e.length),[YR(p),r.length?sm("lotOfLazy",{count:r.length},{list:r.join(`;
|
||
- `)}):null,u.length?sm("manyLazy",{count:u.length},{list:u.join(`;
|
||
- `)}):null,c.length?VR("oneTypeMans",c):null,e.length?sm("workToday",{count:e.length},{list:e.join(`;
|
||
- `)}):null,s.length?sm("dismissed",{count:s.length},{list:s.join(`;
|
||
- `)}):null,n.length?sm("staff",{count:n.length},{list:n.join(`;
|
||
- `)}):null,Vn("manager"),Vn("shorTalk"),Vn("ipr"),Vn("oneToOne"),Vn("club")].filter(h=>h)}const zk=qi(QR),Cs={hours_chart_user:"hours_chart_user",hours_chart_data:"hours_chart_data",hours_chart_day:"hours_chart_day",hours_chart_day_time:"hours_chart_day_time",hours_chart_day_name:"hours_chart_day_name",hours_chart_hour:"hours_chart_hour",hours_chart_day_time_mm:"hours_chart_day_time_mm"};function KR(){const t=new Array(25).fill(1).map((e,s)=>s?o.jsxs("div",{className:Cs.hours_chart_day_time,children:[o.jsx("span",{className:Cs.hours_chart_day_time_hh,children:Rn(s-1)}),o.jsx("span",{className:Cs.hours_chart_day_time_mm,children:":00"})]},s):o.jsx("div",{className:Cs.hours_chart_day_name},s));return o.jsx(o.Fragment,{children:t})}function ZR(t,e){if(!t)return 0;const s=t*100/e;return(s-s%1)/100}function XR({week:t,isWeekend:e,max:s}){const n=t.map((r,u)=>{const c=ZR(r,s),p=e||u<7||u>20,_=c>.2?"#FFFFFF":"#CBCBCD",h=p?"237, 103, 95":"65, 98, 181";return o.jsx("div",{className:Cs.hours_chart_hour,style:{color:_,backgroundColor:`rgba(${h}, ${c})`},children:r||""},u)});return o.jsx(o.Fragment,{children:n})}const js={hours_chart_legend:"hours_chart_legend",hours_chart_legend_item:"hours_chart_legend_item",hours_chart_legend_work:"hours_chart_legend_work",hours_chart_legend_weekend:"hours_chart_legend_weekend",hours_chart_legend_count:"hours_chart_legend_count",hours_chart_legend_title:"hours_chart_legend_title"};function JR(){const{t}=ie();return o.jsxs("div",{className:js.hours_chart_legend,children:[o.jsxs("div",{className:js.hours_chart_legend_item,children:[o.jsx("div",{className:js.hours_chart_legend_work}),o.jsx("div",{className:js.hours_chart_legend_title,children:t("components.hoursChart.work")})]}),o.jsxs("div",{className:js.hours_chart_legend_item,children:[o.jsx("div",{className:js.hours_chart_legend_weekend}),o.jsx("div",{className:js.hours_chart_legend_title,children:t("components.hoursChart.weekend")})]}),o.jsxs("div",{className:js.hours_chart_legend_item,children:[o.jsx("div",{className:js.hours_chart_legend_count,children:"42"}),o.jsx("div",{className:js.hours_chart_legend_title,children:t("components.hoursChart.days")})]})]})}const eE=U(({max:t,commitsByDayAndHour:e})=>{const s=e.map((n,r)=>{var c,p;const u=!((p=(c=de.config)==null?void 0:c.workDays)!=null&&p[r]);return o.jsxs("div",{className:Cs.hours_chart_day,children:[o.jsx("div",{className:Cs.hours_chart_day_name,children:ls(r,"short")}),o.jsx(XR,{week:n,isWeekend:u,max:t})]},r)});return o.jsxs("div",{className:Cs.hours_chart_user,children:[o.jsxs("div",{className:Cs.hours_chart_data,children:[o.jsx("div",{className:Cs.hours_chart_day,children:o.jsx(KR,{})}),s]}),o.jsx(JR,{})]})}),hm=class hm{constructor(e){if(this.refColorByTitle=new Map,!(e!=null&&e.length))return;const s=["#7F9BE0","#E9A5A1","#C2ECC1","#A7C0FF","#75CCE0","#EC95B6","#4F69A9","#824844","#E0BE69","#B2E069","#A18BE0","#FFC178","#E2DA84","#B6BAE9","#D7D4B1","#E0BA96","#C0D79C","#B6C5C9","#9E98AD","#AACFD8","#BAB2D0","#DCBAC7"];e.map((n,r)=>{const u=r%20;this.refColorByTitle.set(n,{first:s[u],second:"#FFFFFF"})})}get(e){return this.refColorByTitle.get(e)||{first:hm.DEFAULT,second:hm.DEFAULT}}};hm.DEFAULT="#D0D1D2";let vc=hm;function tE(t,e){return Math.round(t*(100/e))}function aE(t,e,s){let n=0;const r=100-e,u=[];return t.forEach(c=>{n+=c.value,c.title&&u.push(c.title)}),{title:s,value:n,width:r,description:u.join(", ")}}function Nk(t,e,s,n){const r=Object.entries(t);if(e!=null&&e.length){const v=k=>{const x=e.indexOf(k);return x===-1?e.length:x};r.sort((k,x)=>v(k[0])-v(x[0]))}const u=r.reduce((v,k)=>v+k[1],0);let c=[],p=[],_=[],h=0;if(r.forEach(([v,k])=>{const x=tE(k||0,u),N={title:v,value:k,width:x};c.push(N),x>=(s||5)?(p.push(N),h+=x):_.push(N)}),c=c.filter(v=>v.width>=1),p=p.filter(v=>v.width>=1),_.length===0)return p;if(_.length===1)return c;const f=aE(_,h,n||"...");return f.width>1?[...p,f]:p}function sE(t,e,s,n){const r=n*Math.PI/180;return[t+s*Math.cos(r),e+s*Math.sin(r)]}function iE(t,e,s,n,r,u){const c=Math.abs(r-u)>180?1:0,p=(_,h)=>sE(t,e,_,h).map(f=>f.toPrecision(5)).join(",");return[`M${p(s,r)}`,`A${s},${s},0,${c},1,${p(s,u)}`,`L${p(n,u)}`,`A${n},${n},0,${c},0,${p(n,r)}`,"Z"].join("")}const Mk={pie_svg:"pie_svg",pie_svg_sector:"pie_svg_sector"},Rk=-90;function nE({parts:t,center:e,color:s,suffix:n}){const{text:r}=ie(),u=49*((e||72)/100),c=n?r(n):"";let p=0;const _=t.length-1,h=t.map((f,v)=>{const k=s.get(f.title).first,x=360*f.width/100,q=Math.min(p+(x===360||_===v?359.9:x),360),I=iE(50,50,u,50,p+Rk,q+Rk);p+=x;const F=f.value&&c?` (${f.value||""} ${c})`:"";return o.jsx("path",{style:{fill:k},d:I,className:Mk.pie_svg_sector,children:o.jsx("title",{children:`${r(f.title)}${F}`})},f.title)});return o.jsx("svg",{viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid meet",xmlns:"http://www.w3.org/2000/svg",className:Mk.pie_svg,children:h})}const us={pie_chart:"pie_chart",pie_chart_data:"pie_chart_data",pie_chart_icon:"pie_chart_icon",pie_chart_legend:"pie_chart_legend",pie_chart_value:"pie_chart_value",pie_chart_value_title:"pie_chart_value_title",pie_chart_value_description:"pie_chart_value_description",pie_chart_line:"pie_chart_line",pie_chart_color:"pie_chart_color",pie_chart_percent:"pie_chart_percent",pie_chart_text:"pie_chart_text"};function oE(t,e){var u,c;if(!e||Vt||t.length<=7)return 1;const s=((c=(u=e==null?void 0:e.parentNode)==null?void 0:u.getBoundingClientRect())==null?void 0:c.width)||0,n=Math.floor(s/300)||1,r=Math.round(t.length/8);return Math.min(r,n)}function lE({parts:t,color:e}){const{t:s}=ie(),n=T.useRef(null),[r,u]=T.useState(1);T.useLayoutEffect(()=>{u(oE(t,n==null?void 0:n.current))},[n,n.current]);const c=t.map(p=>o.jsxs("p",{className:us.pie_chart_line,children:[o.jsx("span",{className:us.pie_chart_color,style:{backgroundColor:e.get(p.title).first}}),o.jsx("span",{className:us.pie_chart_percent,children:`${p.width}%`}),o.jsx("span",{className:us.pie_chart_text,children:s(p.title)})]},p.title));return o.jsx("div",{ref:n,className:us.pie_chart_legend,style:{columnCount:r},children:c})}function Ne({title:t="",description:e,value:s,details:n,max:r,suffix:u,other:c,order:p,limit:_,center:h,className:f=""}){if(!n)return null;const{t:v}=ie(),k=r||100,x=p||Object.keys(n),N=(x==null?void 0:x.length)>7?k*.2:1,I=Nk(n,x,_||N,c),F=new vc(x);return I.length?o.jsxs("div",{className:`${us.pie_chart} ${f||""}`,children:[o.jsx(G,{title:t||""}),o.jsxs("div",{className:us.pie_chart_data,children:[o.jsxs("div",{className:us.pie_chart_icon,children:[o.jsx(nE,{parts:I,color:F,suffix:u,center:h}),o.jsxs("div",{className:us.pie_chart_value,children:[o.jsx(Y,{value:s,children:o.jsx("div",{className:us.pie_chart_value_title,children:s})}),o.jsx(Y,{value:s&&u,children:o.jsx("div",{className:us.pie_chart_value_description,children:v(e)||v(u)})})]})]}),o.jsx(lE,{parts:I,color:F})]})]}):null}function Ek({value:t=0,width:e=0,title:s="",description:n="",suffix:r="",color:u=null,className:c="",formatter:p=_=>_}){const{text:_}=ie();if(!e||e<=0)return null;const h=_(s||""),v=_(n||"")||h,k=p?p(t):t,x=r?` ${_(r||"")}`:"",N=t?`${e}% (${k}${x}) ${v}`:`${e}% ${v}`;return o.jsx("div",{className:c,style:{width:`${e}%`,color:u==null?void 0:u.second,padding:h?"0 0 0 4px":"0",backgroundColor:u==null?void 0:u.first},title:N,children:h})}const im={line_chart:"line_chart",line_chart_item:"line_chart_item",line_chart_sub_item:"line_chart_sub_item"};function ue({value:t,details:e,max:s,suffix:n="commits",order:r,limit:u,formatter:c,className:p=""}){if(t===0||!t&&!e)return null;const _=s||t||100,h=t||s||100,f=r!=null&&r.length?new vc(r):void 0;let v=Math.round(h*(100/_));if(v<1)return null;if(v>100&&(v=100),!e)return o.jsx("div",{className:`${im.line_chart} ${p||""}`,children:o.jsx(Ek,{value:t,width:v,suffix:n,formatter:c,className:im.line_chart_item})});const k=Nk(e,r,u||4).map(x=>o.jsx(Ek,{title:x.title,value:x.value,width:x.width,color:f==null?void 0:f.get(x.title),suffix:n,formatter:c,description:x.description,className:im.line_chart_sub_item},x.title));return o.jsx("div",{className:`${im.line_chart} ${p||""}`,children:o.jsx("div",{className:im.line_chart_item,style:{width:`${v}%`},children:k})})}const nm={gantt_chart:"gantt_chart",gantt_chart_circle:"gantt_chart_circle",gantt_chart_line:"gantt_chart_line",gantt_chart_marker_bg:"gantt_chart_marker_bg",gantt_chart_marker_line:"gantt_chart_marker_line"};function rE({right:t,children:e}){return o.jsx("div",{className:nm.gantt_chart_circle,style:{right:`${100-t}%`},children:e})}function mE({left:t,right:e,children:s}){return o.jsx("div",{className:nm.gantt_chart_line,style:{left:`${t}%`,right:`${100-e}%`},children:s})}function uE({left:t}){return o.jsx("div",{className:nm.gantt_chart_marker_line,style:{left:`${t}%`}})}function cE({title:t,left:e,right:s}){return o.jsx("div",{className:nm.gantt_chart_marker_bg,style:{left:`${e}%`,right:`${100-s}%`},children:t||""})}function pE(t,e){return[(e==null?void 0:e.from)/3.66,(e==null?void 0:e.to)/3.66]}const Ik=new Array(12).fill(null).map((t,e)=>({from:e*30+1})),dE=Ik.map((t,e)=>({title:e>=9?`2024-${e+1}-01`:`2024-0${e+1}-01`,from:t.from,to:t.from+30}));function kc(){return[T.useMemo(()=>dE.map(e=>({...e,title:Ti(e.title,{month:"long"})})),[Ee.language]),Ik]}function Wi({lines:t,markersText:e,markersLine:s,formatter:n,className:r="",mode:u}){const c=n||pE,p=(s||[]).map((f,v)=>{const[k]=c("marker",f);return o.jsx(uE,{left:k},v)}),_=(e||[]).map((f,v)=>{const[k,x]=c("marker",f);return o.jsx(cE,{left:k,right:x,title:f.title},v)}),h=(t||[]).map((f,v)=>{const[k,x]=c("line",f);return u?o.jsx(rE,{right:x},v):o.jsx(mE,{left:k,right:x},v)});return o.jsxs("div",{className:`${nm.gantt_chart} ${r||""}`,children:[h,p,_]})}const Yn={HALF:"page.team.author.days.half",ONE:"page.team.author.days.one",HALF_ONE:"page.team.author.days.15",TWO:"page.team.author.days.two",MORE:"page.team.author.days.more"},gE=Object.values(Yn);function _E(t,e){const s=new Lt;return{details:t.reduce((r,u)=>{const c=u[e];return s.update(c),c<183?Ce(r,Yn.HALF):c<365?Ce(r,Yn.ONE):c<547?Ce(r,Yn.HALF_ONE):c<730?Ce(r,Yn.TWO):Ce(r,Yn.MORE),r},{}),weightedAverage:s.get()}}const Fi={DAY:"plugin.team_pull_requests.chart.1day",THREE_DAY:"plugin.team_pull_requests.chart.3day",WEEK:"plugin.team_pull_requests.chart.7day",TWO_WEEK:"plugin.team_pull_requests.chart.14day",MONTH:"plugin.team_pull_requests.chart.30day",MORE:"plugin.team_pull_requests.chart.more"},hE=Object.values(Fi);function fE(t,e){const s=new Lt;return{details:t.reduce((r,u)=>{const c=u[e];return s.update(c),c<=1?Ce(r,Fi.DAY):c<=3?Ce(r,Fi.THREE_DAY):c<=7?Ce(r,Fi.WEEK):c<=14?Ce(r,Fi.TWO_WEEK):c<=30?Ce(r,Fi.MONTH):Ce(r,Fi.MORE),r},{}),weightedAverage:s.get()}}function Mt(t,e){var u;const s=t.content,n=new Array(e.length).fill(0),r=e.length-1;for(let c=s.length-1;c>=0;c--)for(let p=r;p>=0;p--){const _=(u=s[c])==null?void 0:u[e[p]];n[p]=_>n[p]?_:n[p]}return n}function yE(t,e,s){return Math.max(...t.content.map(n=>n[e][s]||0))}function Sg(t,e){return yE(t,e,"length")}function Ui(t){return t==="days"?[_E,gE,Yn]:[fE,hE,Fi]}function vE(t){const[e,s,n]=["plugin.team_author.type.work","plugin.team_author.type.dismissed","plugin.team_author.type.staff"],r={[e]:t.active.length,[s]:t.dismissed.length,[n]:t.staff.length};return[[e,s,n],r]}const[kE,bE]=Ui("days"),wE=U(()=>{var u;const t=A.statisticsByCommits.author.totalInfo,e=A.statisticsByCommits.author.employment,[s,n]=vE(e),r=(u=kE(t,"totalDays"))==null?void 0:u.details;return o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_author.statusChart.title",suffix:"common.statistic.employees",order:s,limit:1,details:n})}),o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_author.daysChart.title",suffix:"common.statistic.employees",order:bE,limit:1,details:r})})]})});function xE({response:t,max:e}){var u;const s=[...(t==null?void 0:t.content)||[]],n=s[0],r=s[s.length-1];return n!=null&&n.year&&s.shift(),r!=null&&r.year&&s.pop(),o.jsxs(ws,{rows:s,children:[o.jsx(w,{template:C.STRING,properties:"empty",width:40}),o.jsx(w,{title:(n==null?void 0:n.year)||((u=n==null?void 0:n.from)==null?void 0:u.year),template:c=>{if(!c.duration)return o.jsx("b",{children:c.year});const p=c.duration>40?{title:"plugin.team_author.absence.transfer",mode:yt.ERROR}:"plugin.team_author.absence.vacation";return o.jsx(ig,{value:p})}}),o.jsx(w,{template:C.STRING,properties:"from",width:130,formatter:c=>c!=null&&c.milliseconds?oe(c==null?void 0:c.milliseconds):""}),o.jsx(w,{template:C.STRING,properties:"to",width:130,formatter:c=>c!=null&&c.milliseconds?oe(c==null?void 0:c.milliseconds):""}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"duration",width:90}),o.jsx(w,{isSortable:!0,title:"plugin.team_author.absence.duration",properties:"duration",width:290,template:c=>o.jsx(ue,{value:c,max:e,suffix:"common.statistic.days"})})]})}function CE(t){return t.reduce((e,s)=>{const n=s.from.year;return e[n]||(e[n]=[]),e[n].push(s),e},{})}function jE(t){return Object.entries(t).reverse().map(([e,s])=>{const r=s.length>6?s.sort((u,c)=>c.duration-u.duration).sort((u,c)=>c.from.milliseconds-u.from.milliseconds):s;return{year:e,formattedItems:r}})}function TE({rows:t}){if(!t||!(t!=null&&t.length))return null;const[e]=Mt({content:t},["duration"]),s=CE(t),r=jE(s).map(({year:u,formattedItems:c})=>[{year:u},...c]).flat(1);return console.log(r),o.jsxs(be,{content:r,watch:`${t==null?void 0:t.length}`,children:[o.jsx(xE,{max:e}),o.jsx(fe,{})]})}function DE({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const[r,u,c,p,_]=["plugin.team_author.type.work","plugin.team_author.type.dismissed","plugin.team_author.type.staff","plugin.team_author.worked","plugin.team_author.losses"],[h,f]=Mt(t,["commits","totalTasks"]),v=A.statisticsByCommits.absence.totalInfoByName,k=t.content.map(x=>{const N=v.get(x.author)||[];return{...x,absence:N.length}});return o.jsxs(je,{rowsForExcel:s,rows:k,sort:t.sort,updateSort:e,mode:n,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,template:C.DETAILS,width:40,properties:"absence",formatter:x=>{const N=v.get(x.author)||[];return o.jsx(TE,{rows:N})}}),o.jsx(w,{isFixed:!0,template:C.STRING,formatter:(x,N)=>N+1,width:40}),o.jsx(w,{isFixed:!0,template:C.STRING,properties:"author",title:"plugin.team_author.author",width:200}),o.jsx(w,{title:"plugin.team_author.status",formatter:x=>x.isStaff?{title:c,mode:yt.WARNING}:x.isDismissed?{title:u,mode:yt.ERROR}:{title:r,mode:yt.SUCCESS},template:C.TAGS,width:100}),o.jsx(w,{isSortable:"company",title:"plugin.team_author.company",properties:"lastCompany",template:C.TAGS,width:150}),o.jsx(w,{template:C.STRING,properties:"firstCommit",title:"plugin.team_author.firstCommit",width:130,formatter:oe}),o.jsx(w,{template:C.STRING,properties:"lastCommit",title:"plugin.team_author.lastCommit",width:130,formatter:oe}),o.jsx(w,{template:C.SHORT_NUMBER,title:"plugin.team_author.daysAll",properties:"totalDays",formatter:x=>x||1,width:90}),o.jsx(w,{isSortable:"daysWorked",title:"plugin.team_author.workedLosses",minWidth:300,template:x=>o.jsx(ue,{details:x,order:[p,_],suffix:"common.statistic.days"}),formatter:x=>({[p]:x.totalDaysWithCommits,[_]:x.totalDaysWithoutCommits})}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"totalTasks"}),o.jsx(w,{isSortable:!0,properties:"totalTasks",title:"plugin.team_author.tasks",minWidth:200,template:x=>o.jsx(ue,{value:x,max:f,suffix:"common.statistic.tasks"})}),o.jsx(w,{template:C.SHORT_NUMBER,title:"plugin.team_author.daysForTask",properties:"totalTaskInDay",formatter:Kt,width:120}),o.jsx(w,{template:C.SHORT_NUMBER,title:"plugin.team_author.scopes",properties:"totalScopes"}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"commits"}),o.jsx(w,{isSortable:!0,title:"plugin.team_author.commits",properties:"commits",minWidth:100,template:x=>o.jsx(ue,{value:x,max:h})}),o.jsx(w,{title:"plugin.team_author.types",properties:"types",width:400,template:x=>o.jsx(ue,{details:x,order:A.statisticsByCommits.type.list,limit:1})}),o.jsx(w,{template:C.NUMBER,title:"plugin.team_author.moneyAll",properties:"totalMoney",formatter:zo}),o.jsx(w,{template:C.NUMBER,title:"plugin.team_author.moneyWorked",properties:"totalMoneyWorked",formatter:zo}),o.jsx(w,{template:C.NUMBER,title:"plugin.team_author.moneyLosses",properties:"totalMoneyLosses",formatter:zo})]})}const SE=U(({mode:t})=>{const e=A.statisticsByCommits.author.totalInfo;if(!(e!=null&&e.length))return t!=="print"?o.jsx(Le,{}):null;const s=zk();return o.jsxs(o.Fragment,{children:[t!=="fullscreen"&&o.jsx(Hn,{mode:t,recommendations:s}),o.jsx(nt,{height:"xl"}),o.jsx(wE,{}),o.jsx(G,{title:"plugin.team_author.title"}),o.jsxs(be,{content:e,mode:t,watch:`${t}${A.hash}`,children:[o.jsx(DE,{mode:t,rowsForExcel:e}),o.jsx(fe,{})]}),o.jsx(ot,{translationId:"plugin.team_author.description1"})]})});let AE=(dl=class{constructor(){this.dependencies=["author","recommendations","absence","type"]}getMenuItems(){return[{id:"author",group:10,order:30,link:"/team/author",title:"plugin.team_author.sidebar",icon:"./assets/menu/work.svg"}]}getPage(e,s){return e==="/team/author"?o.jsx(SE,{mode:s==null?void 0:s.mode}):void 0}getTranslations(){return PR}},dl.id="team_author",dl);const zE={ar:`
|
||
§ plugin.team_building.sidebar: ألعاب
|
||
§ plugin.team_building.races.title: سرعة إغلاق المهام
|
||
§ plugin.team_building.races.go: هيا بنا!
|
||
§ plugin.team_building.swimmingPool.title: أقصى طول لـ commit message
|
||
§ plugin.team_building.quiz.start: ابدأ الاختبار
|
||
§ plugin.team_building.quiz.next: السؤال التالي
|
||
§ plugin.team_building.quiz.replay: إعادة اللعب؟
|
||
§ plugin.team_building.quiz.question01: من أنشأ أول commit؟
|
||
§ plugin.team_building.quiz.question02: من أغلق مهام أكثر؟
|
||
§ plugin.team_building.quiz.question03: من الأسرع في إكمال المهام؟
|
||
§ plugin.team_building.quiz.question04: من يعمل في المشروع لأطول مدة؟
|
||
§ plugin.team_building.quiz.question05: من عمل في المشروع أقل من الجميع؟
|
||
§ plugin.team_building.quiz.question08: من لديه أطول توقيعات commit؟
|
||
§ plugin.team_building.quiz.question09: من لديه أقصر توقيعات commit؟
|
||
§ plugin.team_building.quiz.question11: كم شخصًا غادر؟
|
||
§ plugin.team_building.quiz.question12: كم شخصًا ساعد المشروع؟
|
||
§ plugin.team_building.quiz.question13: ما أقصى عدد مهام أنجزه {author} في اليوم؟
|
||
§ plugin.team_building.quiz.question14: أي نوع من المهام أُضيف أكثر؟
|
||
§ plugin.team_building.quiz.question15: كم يومًا يعملون في المشروع في المتوسط؟
|
||
§ plugin.team_building.quiz.question16: من أنشأ أكبر عدد من المجلدات؟
|
||
§ plugin.team_building.quiz.question17: من كان أول من أنشأ الملف ذا المسار الأعمق؟
|
||
§ plugin.team_building.quiz.question18: من يضغط زر «Merge» للـ PR أكثر من الآخرين؟
|
||
§ plugin.team_building.quiz.question19: من كان لديه أطول توقيع commit على الإطلاق؟
|
||
§ plugin.team_building.quiz.question20: من أنشأ الـ PR الذي بقي قيد المراجعة أكثر من شهر؟
|
||
§ plugin.team_building.quiz.begin: إلى أي مدى تعرف الفريق؟
|
||
§ plugin.team_building.quiz.result1.title: غير كافٍ
|
||
§ plugin.team_building.quiz.result1.description: الإجابات الصحيحة أقل من 40%. اطّلع على معلومات فريقك في الأقسام المجاورة وحاول مجددًا!
|
||
§ plugin.team_building.quiz.result2.title: جيد
|
||
§ plugin.team_building.quiz.result2.description: الإجابات الصحيحة بين 40% و70%. لديك تصور جيد عن الفريق، ويمكنك معرفته بشكل أفضل. اطّلع على البيانات في الأقسام المجاورة وحاول مجددًا!
|
||
§ plugin.team_building.quiz.result3.title: ممتاز
|
||
§ plugin.team_building.quiz.result3.description: الإجابات الصحيحة أكثر من 70%. أنت تعرف إحصائيات فريقك جيدًا!
|
||
`,de:`
|
||
§ plugin.team_building.sidebar: Spiele
|
||
§ plugin.team_building.races.title: Geschwindigkeit beim Schließen von Aufgaben
|
||
§ plugin.team_building.races.go: Los geht’s!
|
||
§ plugin.team_building.swimmingPool.title: Maximale Länge der commit message
|
||
§ plugin.team_building.quiz.start: Quiz starten
|
||
§ plugin.team_building.quiz.next: Nächste Frage
|
||
§ plugin.team_building.quiz.replay: Noch einmal?
|
||
§ plugin.team_building.quiz.question01: Wer hat den ersten commit gemacht?
|
||
§ plugin.team_building.quiz.question02: Wer hat mehr Aufgaben geschlossen?
|
||
§ plugin.team_building.quiz.question03: Wer erledigt Aufgaben am schnellsten?
|
||
§ plugin.team_building.quiz.question04: Wer arbeitet am längsten am Projekt?
|
||
§ plugin.team_building.quiz.question05: Wer hat am wenigsten am Projekt gearbeitet?
|
||
§ plugin.team_building.quiz.question08: Wer hat die längsten commit-Signaturen?
|
||
§ plugin.team_building.quiz.question09: Wer hat die kürzesten commit-Signaturen?
|
||
§ plugin.team_building.quiz.question11: Wie viele Personen sind ausgeschieden?
|
||
§ plugin.team_building.quiz.question12: Wie viele Personen haben dem Projekt geholfen?
|
||
§ plugin.team_building.quiz.question13: Wie viele Aufgaben hat {author} maximal pro Tag erledigt?
|
||
§ plugin.team_building.quiz.question14: Aufgaben welchen Typs wurden häufiger hinzugefügt?
|
||
§ plugin.team_building.quiz.question15: Wie viele Tage arbeitet man im Durchschnitt am Projekt?
|
||
§ plugin.team_building.quiz.question16: Wer hat die meisten Verzeichnisse erstellt?
|
||
§ plugin.team_building.quiz.question17: Wer hat zuerst die Datei mit dem tiefsten Pfad erstellt?
|
||
§ plugin.team_building.quiz.question18: Wer klickt häufiger als andere auf die Schaltfläche „Merge“ für PR?
|
||
§ plugin.team_building.quiz.question19: Wer hatte die längste commit-Signatur aller Zeiten?
|
||
§ plugin.team_building.quiz.question20: Wer hat den PR erstellt, der mehr als einen Monat im Review hing?
|
||
§ plugin.team_building.quiz.begin: Wie gut kennen Sie das Team?
|
||
§ plugin.team_building.quiz.result1.title: Nicht genug
|
||
§ plugin.team_building.quiz.result1.description: Weniger als 40 % richtige Antworten. Sehen Sie sich die Informationen zu Ihrem Team in den benachbarten Abschnitten an und versuchen Sie es erneut!
|
||
§ plugin.team_building.quiz.result2.title: Gut
|
||
§ plugin.team_building.quiz.result2.description: Zwischen 40 % und 70 % richtige Antworten. Sie haben ein gutes Bild vom Team, können es aber noch besser kennenlernen. Sehen Sie sich die Daten in den benachbarten Abschnitten an und versuchen Sie es erneut!
|
||
§ plugin.team_building.quiz.result3.title: Ausgezeichnet
|
||
§ plugin.team_building.quiz.result3.description: Mehr als 70 % richtige Antworten. Sie kennen die Statistik Ihres Teams hervorragend!
|
||
`,en:`
|
||
§ plugin.team_building.sidebar: Games
|
||
§ plugin.team_building.races.title: The speed of closing tasks
|
||
§ plugin.team_building.races.go: Let's go!
|
||
§ plugin.team_building.swimmingPool.title: Maximum commit message length
|
||
§ plugin.team_building.quiz.start: Start a quiz
|
||
§ plugin.team_building.quiz.next: Next question
|
||
§ plugin.team_building.quiz.replay: Re-play?
|
||
§ plugin.team_building.quiz.question01: Who made the first commit?
|
||
§ plugin.team_building.quiz.question02: Who closed more tasks?
|
||
§ plugin.team_building.quiz.question03: Who is the fastest at completing tasks?
|
||
§ plugin.team_building.quiz.question04: Who has been working on the project the longest?
|
||
§ plugin.team_building.quiz.question05: Who worked the least on the project?
|
||
§ plugin.team_building.quiz.question08: Who has the longest commit signatures?
|
||
§ plugin.team_building.quiz.question09: Who has the shortest commit signatures?
|
||
§ plugin.team_building.quiz.question11: How many people have quit?
|
||
§ plugin.team_building.quiz.question12: How many people helped the project?
|
||
§ plugin.team_building.quiz.question13: How many maximum tasks did {author} per day?
|
||
§ plugin.team_building.quiz.question14: What type of tasks have been added more?
|
||
§ plugin.team_building.quiz.question15: How many days do they work on the project on average?
|
||
§ plugin.team_building.quiz.question16: Who created the most directories?
|
||
§ plugin.team_building.quiz.question17: Who was the first to create the file with the deepest path?
|
||
§ plugin.team_building.quiz.question18: Who clicks the "Merge" button for PR more often than others?
|
||
§ plugin.team_building.quiz.question19: Who had the longest commit signature of all time?
|
||
§ plugin.team_building.quiz.question20: Who created the PR that hung on the review for more than a month?
|
||
§ plugin.team_building.quiz.begin: How well do you know the team?
|
||
§ plugin.team_building.quiz.result1.title: Not enough
|
||
§ plugin.team_building.quiz.result1.description: The correct answers are less than 40%. Check out the information about your team in the adjacent sections and try again!
|
||
§ plugin.team_building.quiz.result2.title: Well
|
||
§ plugin.team_building.quiz.result2.description: The correct answers range from 40% to 70%. You have a good idea of your team, but you can get to know it better. Check out the data in the adjacent sections and try again!
|
||
§ plugin.team_building.quiz.result3.title: Great
|
||
§ plugin.team_building.quiz.result3.description: There are more than 70% correct answers. You know the statistics on your team perfectly well!
|
||
`,es:`
|
||
§ plugin.team_building.sidebar: Juegos
|
||
§ plugin.team_building.races.title: Velocidad de cierre de tareas
|
||
§ plugin.team_building.races.go: ¡Vamos!
|
||
§ plugin.team_building.swimmingPool.title: Longitud máxima del commit message
|
||
§ plugin.team_building.quiz.start: Empezar el cuestionario
|
||
§ plugin.team_building.quiz.next: Siguiente pregunta
|
||
§ plugin.team_building.quiz.replay: ¿Otra vez?
|
||
§ plugin.team_building.quiz.question01: ¿Quién hizo el primer commit?
|
||
§ plugin.team_building.quiz.question02: ¿Quién cerró más tareas?
|
||
§ plugin.team_building.quiz.question03: ¿Quién completa las tareas más rápido?
|
||
§ plugin.team_building.quiz.question04: ¿Quién lleva más tiempo en el proyecto?
|
||
§ plugin.team_building.quiz.question05: ¿Quién ha trabajado menos en el proyecto?
|
||
§ plugin.team_building.quiz.question08: ¿Quién tiene las firmas de commit más largas?
|
||
§ plugin.team_building.quiz.question09: ¿Quién tiene las firmas de commit más cortas?
|
||
§ plugin.team_building.quiz.question11: ¿Cuántas personas se han ido?
|
||
§ plugin.team_building.quiz.question12: ¿Cuántas personas ayudaron al proyecto?
|
||
§ plugin.team_building.quiz.question13: ¿Cuántas tareas como máximo hizo {author} por día?
|
||
§ plugin.team_building.quiz.question14: ¿Qué tipo de tareas se han añadido más?
|
||
§ plugin.team_building.quiz.question15: ¿Cuántos días se trabaja de media en el proyecto?
|
||
§ plugin.team_building.quiz.question16: ¿Quién creó más directorios?
|
||
§ plugin.team_building.quiz.question17: ¿Quién creó primero el archivo con la ruta más profunda?
|
||
§ plugin.team_building.quiz.question18: ¿Quién pulsa el botón «Merge» de PR más a menudo que el resto?
|
||
§ plugin.team_building.quiz.question19: ¿Quién tuvo la firma de commit más larga de todos los tiempos?
|
||
§ plugin.team_building.quiz.question20: ¿Quién creó el PR que estuvo más de un mes en revisión?
|
||
§ plugin.team_building.quiz.begin: ¿Qué tan bien conoce al equipo?
|
||
§ plugin.team_building.quiz.result1.title: Insuficiente
|
||
§ plugin.team_building.quiz.result1.description: Menos del 40 % de respuestas correctas. Consulte la información sobre su equipo en las secciones adyacentes e inténtelo de nuevo.
|
||
§ plugin.team_building.quiz.result2.title: Bien
|
||
§ plugin.team_building.quiz.result2.description: Entre el 40 % y el 70 % de respuestas correctas. Tiene una buena idea del equipo, pero puede conocerlo mejor. Consulte los datos de las secciones adyacentes e inténtelo de nuevo.
|
||
§ plugin.team_building.quiz.result3.title: Excelente
|
||
§ plugin.team_building.quiz.result3.description: Más del 70 % de respuestas correctas. Conoce muy bien las estadísticas de su equipo.
|
||
`,fr:`
|
||
§ plugin.team_building.sidebar: Jeux
|
||
§ plugin.team_building.races.title: Vitesse de clôture des tâches
|
||
§ plugin.team_building.races.go: C’est parti !
|
||
§ plugin.team_building.swimmingPool.title: Longueur maximale du commit message
|
||
§ plugin.team_building.quiz.start: Démarrer le quiz
|
||
§ plugin.team_building.quiz.next: Question suivante
|
||
§ plugin.team_building.quiz.replay: Rejouer ?
|
||
§ plugin.team_building.quiz.question01: Qui a fait le premier commit ?
|
||
§ plugin.team_building.quiz.question02: Qui a clôturé le plus de tâches ?
|
||
§ plugin.team_building.quiz.question03: Qui termine les tâches le plus vite ?
|
||
§ plugin.team_building.quiz.question04: Qui travaille le plus longtemps sur le projet ?
|
||
§ plugin.team_building.quiz.question05: Qui a le moins travaillé sur le projet ?
|
||
§ plugin.team_building.quiz.question08: Qui a les signatures de commit les plus longues ?
|
||
§ plugin.team_building.quiz.question09: Qui a les signatures de commit les plus courtes ?
|
||
§ plugin.team_building.quiz.question11: Combien de personnes sont parties ?
|
||
§ plugin.team_building.quiz.question12: Combien de personnes ont aidé le projet ?
|
||
§ plugin.team_building.quiz.question13: Combien de tâches au maximum {author} a-t-il faites par jour ?
|
||
§ plugin.team_building.quiz.question14: Quel type de tâches a été ajouté le plus ?
|
||
§ plugin.team_building.quiz.question15: Combien de jours travaille-t-on en moyenne sur le projet ?
|
||
§ plugin.team_building.quiz.question16: Qui a créé le plus de répertoires ?
|
||
§ plugin.team_building.quiz.question17: Qui a créé en premier le fichier avec le chemin le plus profond ?
|
||
§ plugin.team_building.quiz.question18: Qui clique plus souvent que les autres sur le bouton « Merge » des PR ?
|
||
§ plugin.team_building.quiz.question19: Qui a eu la signature de commit la plus longue de tous les temps ?
|
||
§ plugin.team_building.quiz.question20: Qui a créé la PR restée plus d’un mois en revue ?
|
||
§ plugin.team_building.quiz.begin: Dans quelle mesure connaissez-vous l’équipe ?
|
||
§ plugin.team_building.quiz.result1.title: Insuffisant
|
||
§ plugin.team_building.quiz.result1.description: Moins de 40 % de bonnes réponses. Consultez les informations sur votre équipe dans les sections voisines et réessayez !
|
||
§ plugin.team_building.quiz.result2.title: Bien
|
||
§ plugin.team_building.quiz.result2.description: Entre 40 % et 70 % de bonnes réponses. Vous avez une bonne idée de votre équipe, mais vous pouvez mieux la connaître. Consultez les données des sections voisines et réessayez !
|
||
§ plugin.team_building.quiz.result3.title: Excellent
|
||
§ plugin.team_building.quiz.result3.description: Plus de 70 % de bonnes réponses. Vous connaissez parfaitement les statistiques de votre équipe !
|
||
`,he:`
|
||
§ plugin.team_building.sidebar: משחקים
|
||
§ plugin.team_building.races.title: מהירות סגירת משימות
|
||
§ plugin.team_building.races.go: יוצאים לדרך!
|
||
§ plugin.team_building.swimmingPool.title: האורך המרבי של commit message
|
||
§ plugin.team_building.quiz.start: התחל חידון
|
||
§ plugin.team_building.quiz.next: השאלה הבאה
|
||
§ plugin.team_building.quiz.replay: לשחק שוב?
|
||
§ plugin.team_building.quiz.question01: מי ביצע את ה-commit הראשון?
|
||
§ plugin.team_building.quiz.question02: מי סגר יותר משימות?
|
||
§ plugin.team_building.quiz.question03: מי משלים משימות הכי מהר?
|
||
§ plugin.team_building.quiz.question04: מי עובד הכי הרבה זמן בפרויקט?
|
||
§ plugin.team_building.quiz.question05: מי עבד הכי מעט בפרויקט?
|
||
§ plugin.team_building.quiz.question08: למי יש את חתימות ה-commit הארוכות ביותר?
|
||
§ plugin.team_building.quiz.question09: למי יש את חתימות ה-commit הקצרות ביותר?
|
||
§ plugin.team_building.quiz.question11: כמה אנשים עזבו?
|
||
§ plugin.team_building.quiz.question12: כמה אנשים עזרו לפרויקט?
|
||
§ plugin.team_building.quiz.question13: כמה משימות מקסימום עשה {author} ביום?
|
||
§ plugin.team_building.quiz.question14: איזה סוג משימות נוסף יותר?
|
||
§ plugin.team_building.quiz.question15: כמה ימים עובדים בפרויקט בממוצע?
|
||
§ plugin.team_building.quiz.question16: מי יצר הכי הרבה תיקיות?
|
||
§ plugin.team_building.quiz.question17: מי היה הראשון שיצר את הקובץ עם הנתיב העמוק ביותר?
|
||
§ plugin.team_building.quiz.question18: מי לוחץ על כפתור «Merge» של PR יותר מאחרים?
|
||
§ plugin.team_building.quiz.question19: למי הייתה חתימת ה-commit הארוכה ביותר בכל הזמנים?
|
||
§ plugin.team_building.quiz.question20: מי יצר את ה-PR שתלוי בביקורת יותר מחודש?
|
||
§ plugin.team_building.quiz.begin: עד כמה אתה מכיר את הצוות?
|
||
§ plugin.team_building.quiz.result1.title: לא מספיק
|
||
§ plugin.team_building.quiz.result1.description: פחות מ-40% תשובות נכונות. עיינו במידע על הצוות בסעיפים הסמוכים ונסו שוב!
|
||
§ plugin.team_building.quiz.result2.title: טוב
|
||
§ plugin.team_building.quiz.result2.description: בין 40% ל-70% תשובות נכונות. יש לכם תמונה טובה של הצוות, אבל אפשר להכיר אותו טוב יותר. עיינו בנתונים בסעיפים הסמוכים ונסו שוב!
|
||
§ plugin.team_building.quiz.result3.title: מצוין
|
||
§ plugin.team_building.quiz.result3.description: יותר מ-70% תשובות נכונות. אתם מכירים מצוין את הסטטיסטיקה של הצוות!
|
||
`,hi:`
|
||
§ plugin.team_building.sidebar: खेल
|
||
§ plugin.team_building.races.title: कार्यों को बंद करने की गति
|
||
§ plugin.team_building.races.go: चलो!
|
||
§ plugin.team_building.swimmingPool.title: commit message की अधिकतम लंबाई
|
||
§ plugin.team_building.quiz.start: क्विज़ शुरू करें
|
||
§ plugin.team_building.quiz.next: अगला प्रश्न
|
||
§ plugin.team_building.quiz.replay: फिर से खेलें?
|
||
§ plugin.team_building.quiz.question01: पहला commit किसने किया?
|
||
§ plugin.team_building.quiz.question02: किसने अधिक कार्य बंद किए?
|
||
§ plugin.team_building.quiz.question03: कार्य सबसे तेज़ी से कौन पूरा करता है?
|
||
§ plugin.team_building.quiz.question04: प्रोजेक्ट पर सबसे लंबे समय से कौन काम कर रहा है?
|
||
§ plugin.team_building.quiz.question05: प्रोजेक्ट पर सबसे कम किसने काम किया?
|
||
§ plugin.team_building.quiz.question08: किसकी commit हस्ताक्षर सबसे लंबी हैं?
|
||
§ plugin.team_building.quiz.question09: किसकी commit हस्ताक्षर सबसे छोटी हैं?
|
||
§ plugin.team_building.quiz.question11: कितने लोग छोड़ चुके हैं?
|
||
§ plugin.team_building.quiz.question12: कितने लोगों ने प्रोजेक्ट की मदद की?
|
||
§ plugin.team_building.quiz.question13: {author} ने एक दिन में अधिकतम कितने कार्य किए?
|
||
§ plugin.team_building.quiz.question14: किस प्रकार के कार्य अधिक जोड़े गए?
|
||
§ plugin.team_building.quiz.question15: औसतन प्रोजेक्ट पर कितने दिन काम करते हैं?
|
||
§ plugin.team_building.quiz.question16: सबसे अधिक निर्देशिकाएँ किसने बनाईं?
|
||
§ plugin.team_building.quiz.question17: सबसे गहरे पथ वाली फ़ाइल सबसे पहले किसने बनाई?
|
||
§ plugin.team_building.quiz.question18: PR के «Merge» बटन को दूसरों से अधिक कौन दबाता है?
|
||
§ plugin.team_building.quiz.question19: अब तक की सबसे लंबी commit हस्ताक्षर किसकी थी?
|
||
§ plugin.team_building.quiz.question20: वह PR किसने बनाया जो एक महीने से अधिक समीक्षा पर रहा?
|
||
§ plugin.team_building.quiz.begin: आप टीम को कितना अच्छी तरह जानते हैं?
|
||
§ plugin.team_building.quiz.result1.title: पर्याप्त नहीं
|
||
§ plugin.team_building.quiz.result1.description: सही उत्तर 40% से कम हैं। पास के खंडों में अपनी टीम की जानकारी देखें और फिर कोशिश करें!
|
||
§ plugin.team_building.quiz.result2.title: अच्छा
|
||
§ plugin.team_building.quiz.result2.description: सही उत्तर 40% से 70% के बीच हैं। आपको टीम का अच्छा अंदाज़ा है, लेकिन और बेहतर जान सकते हैं। पास के खंडों का डेटा देखें और फिर कोशिश करें!
|
||
§ plugin.team_building.quiz.result3.title: उत्कृष्ट
|
||
§ plugin.team_building.quiz.result3.description: सही उत्तर 70% से अधिक हैं। आप अपनी टीम के आँकड़े बहुत अच्छी तरह जानते हैं!
|
||
`,ja:`
|
||
§ plugin.team_building.sidebar: ゲーム
|
||
§ plugin.team_building.races.title: タスク完了の速度
|
||
§ plugin.team_building.races.go: スタート!
|
||
§ plugin.team_building.swimmingPool.title: commit message の最大長
|
||
§ plugin.team_building.quiz.start: クイズを始める
|
||
§ plugin.team_building.quiz.next: 次の質問
|
||
§ plugin.team_building.quiz.replay: もう一度?
|
||
§ plugin.team_building.quiz.question01: 最初の commit をしたのは誰?
|
||
§ plugin.team_building.quiz.question02: より多くのタスクを閉じたのは誰?
|
||
§ plugin.team_building.quiz.question03: タスクを最も速く完了するのは誰?
|
||
§ plugin.team_building.quiz.question04: プロジェクトに最も長く関わっているのは誰?
|
||
§ plugin.team_building.quiz.question05: プロジェクトでの作業が最も少ないのは誰?
|
||
§ plugin.team_building.quiz.question08: commit の署名が最も長いのは誰?
|
||
§ plugin.team_building.quiz.question09: commit の署名が最も短いのは誰?
|
||
§ plugin.team_building.quiz.question11: 何人が退職しましたか?
|
||
§ plugin.team_building.quiz.question12: 何人がプロジェクトを手伝いましたか?
|
||
§ plugin.team_building.quiz.question13: {author} が 1 日にこなしたタスクの最大数は?
|
||
§ plugin.team_building.quiz.question14: どの種類のタスクがより多く追加されましたか?
|
||
§ plugin.team_building.quiz.question15: 平均して何日プロジェクトで働きますか?
|
||
§ plugin.team_building.quiz.question16: 最も多くのディレクトリを作成したのは誰?
|
||
§ plugin.team_building.quiz.question17: 最も深いパスのファイルを最初に作成したのは誰?
|
||
§ plugin.team_building.quiz.question18: PR の「Merge」ボタンを他の人より多く押すのは誰?
|
||
§ plugin.team_building.quiz.question19: 全期間で最も長い commit の署名を持っていたのは誰?
|
||
§ plugin.team_building.quiz.question20: レビューに 1 か月以上かかった PR を作成したのは誰?
|
||
§ plugin.team_building.quiz.begin: チームをどのくらいよく知っていますか?
|
||
§ plugin.team_building.quiz.result1.title: 不十分
|
||
§ plugin.team_building.quiz.result1.description: 正答率が 40% 未満です。隣接セクションでチームの情報を確認して、もう一度試してください。
|
||
§ plugin.team_building.quiz.result2.title: 良い
|
||
§ plugin.team_building.quiz.result2.description: 正答率は 40% から 70% です。チームのイメージはありますが、さらに知ることができます。隣接セクションのデータを見て、もう一度試してください。
|
||
§ plugin.team_building.quiz.result3.title: 素晴らしい
|
||
§ plugin.team_building.quiz.result3.description: 正答率は 70% 超です。チームの統計をよく把握しています。
|
||
`,ko:`
|
||
§ plugin.team_building.sidebar: 게임
|
||
§ plugin.team_building.races.title: 작업 마감 속도
|
||
§ plugin.team_building.races.go: 출발!
|
||
§ plugin.team_building.swimmingPool.title: commit message 최대 길이
|
||
§ plugin.team_building.quiz.start: 퀴즈 시작
|
||
§ plugin.team_building.quiz.next: 다음 질문
|
||
§ plugin.team_building.quiz.replay: 다시 할까요?
|
||
§ plugin.team_building.quiz.question01: 첫 commit을 한 사람은 누구인가요?
|
||
§ plugin.team_building.quiz.question02: 더 많은 작업을 마감한 사람은 누구인가요?
|
||
§ plugin.team_building.quiz.question03: 작업을 가장 빠르게 끝내는 사람은 누구인가요?
|
||
§ plugin.team_building.quiz.question04: 프로젝트에서 가장 오래 일한 사람은 누구인가요?
|
||
§ plugin.team_building.quiz.question05: 프로젝트에서 가장 적게 일한 사람은 누구인가요?
|
||
§ plugin.team_building.quiz.question08: commit 서명이 가장 긴 사람은 누구인가요?
|
||
§ plugin.team_building.quiz.question09: commit 서명이 가장 짧은 사람은 누구인가요?
|
||
§ plugin.team_building.quiz.question11: 몇 명이 퇴사했나요?
|
||
§ plugin.team_building.quiz.question12: 몇 명이 프로젝트를 도왔나요?
|
||
§ plugin.team_building.quiz.question13: {author}가 하루에 처리한 최대 작업 수는?
|
||
§ plugin.team_building.quiz.question14: 어떤 유형의 작업이 더 많이 추가되었나요?
|
||
§ plugin.team_building.quiz.question15: 평균적으로 며칠 동안 프로젝트에서 일하나요?
|
||
§ plugin.team_building.quiz.question16: 디렉터리를 가장 많이 만든 사람은 누구인가요?
|
||
§ plugin.team_building.quiz.question17: 경로가 가장 깊은 파일을 처음 만든 사람은 누구인가요?
|
||
§ plugin.team_building.quiz.question18: PR의 «Merge» 버튼을 다른 사람보다 자주 누르는 사람은 누구인가요?
|
||
§ plugin.team_building.quiz.question19: 전 기간 동안 가장 긴 commit 서명을 가진 사람은 누구인가요?
|
||
§ plugin.team_building.quiz.question20: 리뷰에 한 달 이상 걸린 PR을 만든 사람은 누구인가요?
|
||
§ plugin.team_building.quiz.begin: 팀을 얼마나 잘 알고 있나요?
|
||
§ plugin.team_building.quiz.result1.title: 부족함
|
||
§ plugin.team_building.quiz.result1.description: 정답이 40% 미만입니다. 옆 섹션에서 팀 정보를 확인하고 다시 시도하세요!
|
||
§ plugin.team_building.quiz.result2.title: 좋음
|
||
§ plugin.team_building.quiz.result2.description: 정답이 40%에서 70% 사이입니다. 팀에 대한 감은 있지만 더 잘 알 수 있습니다. 옆 섹션의 데이터를 보고 다시 시도하세요!
|
||
§ plugin.team_building.quiz.result3.title: 훌륭함
|
||
§ plugin.team_building.quiz.result3.description: 정답이 70%를 넘습니다. 팀 통계를 매우 잘 알고 있습니다!
|
||
`,pt:`
|
||
§ plugin.team_building.sidebar: Jogos
|
||
§ plugin.team_building.races.title: Velocidade de encerramento de tarefas
|
||
§ plugin.team_building.races.go: Vamos!
|
||
§ plugin.team_building.swimmingPool.title: Comprimento máximo do commit message
|
||
§ plugin.team_building.quiz.start: Iniciar o quiz
|
||
§ plugin.team_building.quiz.next: Próxima pergunta
|
||
§ plugin.team_building.quiz.replay: Jogar de novo?
|
||
§ plugin.team_building.quiz.question01: Quem fez o primeiro commit?
|
||
§ plugin.team_building.quiz.question02: Quem fechou mais tarefas?
|
||
§ plugin.team_building.quiz.question03: Quem conclui tarefas mais rápido?
|
||
§ plugin.team_building.quiz.question04: Quem trabalha há mais tempo no projeto?
|
||
§ plugin.team_building.quiz.question05: Quem trabalhou menos no projeto?
|
||
§ plugin.team_building.quiz.question08: Quem tem as assinaturas de commit mais longas?
|
||
§ plugin.team_building.quiz.question09: Quem tem as assinaturas de commit mais curtas?
|
||
§ plugin.team_building.quiz.question11: Quantas pessoas saíram?
|
||
§ plugin.team_building.quiz.question12: Quantas pessoas ajudaram o projeto?
|
||
§ plugin.team_building.quiz.question13: Quantas tarefas no máximo {author} fez por dia?
|
||
§ plugin.team_building.quiz.question14: Que tipo de tarefas foi adicionado mais?
|
||
§ plugin.team_building.quiz.question15: Quantos dias se trabalha no projeto em média?
|
||
§ plugin.team_building.quiz.question16: Quem criou mais diretórios?
|
||
§ plugin.team_building.quiz.question17: Quem foi o primeiro a criar o arquivo com o caminho mais profundo?
|
||
§ plugin.team_building.quiz.question18: Quem clica no botão «Merge» de PR mais do que os outros?
|
||
§ plugin.team_building.quiz.question19: Quem teve a assinatura de commit mais longa de todos os tempos?
|
||
§ plugin.team_building.quiz.question20: Quem criou o PR que ficou mais de um mês em revisão?
|
||
§ plugin.team_building.quiz.begin: Quão bem você conhece a equipe?
|
||
§ plugin.team_building.quiz.result1.title: Insuficiente
|
||
§ plugin.team_building.quiz.result1.description: Menos de 40% de respostas corretas. Consulte as informações sobre sua equipe nas seções adjacentes e tente novamente!
|
||
§ plugin.team_building.quiz.result2.title: Bem
|
||
§ plugin.team_building.quiz.result2.description: Entre 40% e 70% de respostas corretas. Você tem uma boa ideia da equipe, mas pode conhecê-la melhor. Consulte os dados nas seções adjacentes e tente novamente!
|
||
§ plugin.team_building.quiz.result3.title: Ótimo
|
||
§ plugin.team_building.quiz.result3.description: Mais de 70% de respostas corretas. Você conhece muito bem as estatísticas da sua equipe!
|
||
`,ru:`
|
||
§ plugin.team_building.sidebar: Мини игры
|
||
§ plugin.team_building.races.title: Скорость закрытия задач
|
||
§ plugin.team_building.races.go: Поехали!
|
||
§ plugin.team_building.swimmingPool.title: Максимальная длина подписи коммита
|
||
§ plugin.team_building.quiz.start: Начать квиз
|
||
§ plugin.team_building.quiz.next: Далее
|
||
§ plugin.team_building.quiz.replay: Ещё раз
|
||
§ plugin.team_building.quiz.question01: Кто сделал первый коммит?
|
||
§ plugin.team_building.quiz.question02: Кто закрыл больше задач?
|
||
§ plugin.team_building.quiz.question03: Кто быстрее всех делает задачи?
|
||
§ plugin.team_building.quiz.question04: Кто дольше всех работал на проекте?
|
||
§ plugin.team_building.quiz.question05: Кто меньше всех работал на проекте?
|
||
§ plugin.team_building.quiz.question08: У кого саммые длинные подписи коммитов?
|
||
§ plugin.team_building.quiz.question09: У кого саммые короткие подписи коммитов?
|
||
§ plugin.team_building.quiz.question11: Сколько человек уволилось?
|
||
§ plugin.team_building.quiz.question12: Сколько человек помогало проекту?
|
||
§ plugin.team_building.quiz.question13: Сколько максимум задач в день делал {author}?
|
||
§ plugin.team_building.quiz.question14: Задач какого типа больше влили?
|
||
§ plugin.team_building.quiz.question15: Сколько в среднем дней работают на проекте?
|
||
§ plugin.team_building.quiz.question16: Кто создал больше всех дирректорий?
|
||
§ plugin.team_building.quiz.question17: Кто первый создал файл с самым глубоким вложением?
|
||
§ plugin.team_building.quiz.question18: Кто чаще остальных нажимает кнопку «Влить» для PR?
|
||
§ plugin.team_building.quiz.question19: У кого была самая длинная подпись коммита за все время?
|
||
§ plugin.team_building.quiz.question20: Кто создал PR, который больше месяца провисел на ревью?
|
||
§ plugin.team_building.quiz.begin: Насколько хорошо ты знаешь команду?
|
||
§ plugin.team_building.quiz.result1.title: Недостаточно
|
||
§ plugin.team_building.quiz.result1.description: Правильных ответов меньше 40%. Ознакомьтесь с данными о вашей команде в соседних разделах и попробуйте снова!
|
||
§ plugin.team_building.quiz.result2.title: Хорошо
|
||
§ plugin.team_building.quiz.result2.description: Правильных ответов от 40% до 70%. Вы имеете хорошее представление о вашей команде, но можете узнать её лучше. Ознакомьтесь с данными в соседних разделах и попробуйте снова!
|
||
§ plugin.team_building.quiz.result3.title: Отлично
|
||
§ plugin.team_building.quiz.result3.description: Правильных ответов больше 70%. Вы отлично знаете статистику по вашей команде!
|
||
`,zh:`
|
||
§ plugin.team_building.sidebar: 小游戏
|
||
§ plugin.team_building.races.title: 关闭任务的速度
|
||
§ plugin.team_building.races.go: 出发!
|
||
§ plugin.team_building.swimmingPool.title: commit message 的最大长度
|
||
§ plugin.team_building.quiz.start: 开始测验
|
||
§ plugin.team_building.quiz.next: 下一题
|
||
§ plugin.team_building.quiz.replay: 再来一次?
|
||
§ plugin.team_building.quiz.question01: 谁做了第一个 commit?
|
||
§ plugin.team_building.quiz.question02: 谁关闭了更多任务?
|
||
§ plugin.team_building.quiz.question03: 谁完成任务最快?
|
||
§ plugin.team_building.quiz.question04: 谁在项目中工作时间最长?
|
||
§ plugin.team_building.quiz.question05: 谁在项目中工作最少?
|
||
§ plugin.team_building.quiz.question08: 谁的 commit 签名最长?
|
||
§ plugin.team_building.quiz.question09: 谁的 commit 签名最短?
|
||
§ plugin.team_building.quiz.question11: 有多少人离职?
|
||
§ plugin.team_building.quiz.question12: 有多少人帮助过项目?
|
||
§ plugin.team_building.quiz.question13: {author} 一天最多完成了多少任务?
|
||
§ plugin.team_building.quiz.question14: 哪类任务被加入得更多?
|
||
§ plugin.team_building.quiz.question15: 平均在项目上工作多少天?
|
||
§ plugin.team_building.quiz.question16: 谁创建的目录最多?
|
||
§ plugin.team_building.quiz.question17: 谁最先创建了路径最深的文件?
|
||
§ plugin.team_building.quiz.question18: 谁比其他人更常点击 PR 的 «Merge» 按钮?
|
||
§ plugin.team_building.quiz.question19: 谁有过全时段最长的 commit 签名?
|
||
§ plugin.team_building.quiz.question20: 谁创建了在评审中挂了一个多月的 PR?
|
||
§ plugin.team_building.quiz.begin: 你有多了解团队?
|
||
§ plugin.team_building.quiz.result1.title: 不够
|
||
§ plugin.team_building.quiz.result1.description: 正确答案少于 40%。请查看相邻栏目中关于团队的信息后再试一次!
|
||
§ plugin.team_building.quiz.result2.title: 不错
|
||
§ plugin.team_building.quiz.result2.description: 正确答案在 40% 到 70% 之间。你对团队有不错的了解,还可以更好。请查看相邻栏目中的数据后再试一次!
|
||
§ plugin.team_building.quiz.result3.title: 出色
|
||
§ plugin.team_building.quiz.result3.description: 正确答案超过 70%。你非常了解团队的统计数据!
|
||
`},NE={},Jt={quiz_container:"quiz_container",quiz_cloud:"quiz_cloud",quiz_cloud_bg:"quiz_cloud_bg",quiz_slider:"quiz_slider",quiz_slider_animation:"quiz_slider_animation",quiz_footer:"quiz_footer",quiz_title:"quiz_title",quiz_description:"quiz_description"};function ME({result:t,onClick:e}){const{t:s}=ie();return o.jsxs("section",{className:NE.quiz_result,children:[o.jsx("h4",{className:Jt.quiz_title,children:s(t.title||"")}),o.jsx("p",{className:Jt.quiz_description,children:s(t.description||"")}),o.jsx("div",{className:Jt.quiz_footer,children:o.jsx(Je,{mode:"second",onClick:()=>{e()},children:s("plugin.team_building.quiz.replay")})})]})}function qk(t){return Math.floor(Math.random()*(t+1))}function Ts(t){for(let e,s,n=t.length;n;e=parseInt(Math.random()*n),s=t[--n],t[n]=t[e],t[e]=s);return t}const Gi={quiz_answer:"quiz_answer",quiz_answer_wrapper:"quiz_answer_wrapper",quiz_answer_wrapper_small:"quiz_answer_wrapper_small",quiz_answer_icon:"quiz_answer_icon",quiz_answer_text:"quiz_answer_text",quiz_answer_text_selected:"quiz_answer_text_selected",quiz_answer_text_correct:"quiz_answer_text_correct",quiz_answer_text_error:"quiz_answer_text_error"};function RE({answer:t,mode:e,onClick:s}){const{t:n}=ie(),[r]=T.useState(qk(5)),u=[Gi.quiz_answer_wrapper],c=[Gi.quiz_answer_text];return(e==="small"||e==="error")&&u.push(Gi.quiz_answer_wrapper_small),e==="selected"&&c.push(Gi.quiz_answer_text_selected),e==="correct"&&c.push(Gi.quiz_answer_text_correct),e==="error"&&c.push(Gi.quiz_answer_text_error),o.jsx("div",{className:u.join(" "),children:o.jsxs("figure",{className:Gi.quiz_answer,onClick:()=>{s()},children:[o.jsx("img",{alt:"",className:Gi.quiz_answer_icon,src:`./assets/games/quize/balloon_${r}.png`}),o.jsx("figcaption",{className:c.join(" "),children:n(t.title)})]})})}const Ag={quiz_question_hide:"quiz_question_hide"};function Ok(t,e){return(t||[]).map(s=>s!=null&&s.score?"correct":!(s!=null&&s.score)&&s===e?"error":"small")}function EE({question:t,onClick:e}){const{t:s}=ie(),[n,r]=T.useState(null),[u,c]=T.useState(!1),[p,_]=T.useState([]),h=t.answers||[],f=u?Ag.quiz_question_hide:"";if(T.useEffect(()=>{_([]),r(null),c(!1)},[t]),!t)return null;const v=h.map((k,x)=>o.jsx(RE,{mode:p[x],answer:k,onClick:()=>{if(!u){if(n!==k){const N=[];N[x]="selected",_(N),r(k);return}c(!0),setTimeout(()=>{_(Ok(h,n))},1e3),setTimeout(()=>{e(n)},3e3)}}},`${k.id||""}|${k.title}|${x}`));return o.jsx("div",{className:Ag.quiz_question,children:o.jsxs("div",{className:Ag.quiz_question_body,children:[o.jsx("div",{className:`${Jt.quiz_title} ${f}`,style:{backgroundImage:"url(./assets/games/quize/cloud_big.png)"},children:s(t.title)}),o.jsx("div",{className:Jt.quiz_question_answer,children:v}),o.jsx("div",{className:`${Jt.quiz_footer} ${f}`,children:o.jsx(Je,{mode:"second",disabled:u||!n,onClick:()=>{c(!0),setTimeout(()=>{_(Ok(h,n))},1e3),setTimeout(()=>{e(n)},3e3)},children:s("plugin.team_building.quiz.next")})})]})})}const IE={};function qE({quiz:t,onClick:e}){const{t:s}=ie();return o.jsxs("section",{className:IE.quiz_start,children:[o.jsx("h4",{className:Jt.quiz_title,children:s(t.title||"")}),o.jsx("p",{className:Jt.quiz_description,children:s(t.description||"")}),o.jsx("div",{className:Jt.quiz_footer,children:o.jsx(Je,{mode:"second",onClick:()=>{e()},children:s("plugin.team_building.quiz.start")})})]})}function OE(t){const e={},s={};return t.forEach((n,r)=>{n!=null&&n.id&&(e[n==null?void 0:n.id]=n),s[r]=n,n.index=r}),{byId:e,byIndex:s}}function $E(t,e){const s=t.reduce((r,u)=>r+(u.score||0),0);let n=e[0];return e.forEach(r=>{(r.min&&r.max&&s>=r.min&&s<=r.max||r.min&&!r.max&&s>=r.min||!r.min&&r.max&&s<=r.max)&&(n=r)}),n}function LE(t,e){return s=>{t(!0),setTimeout(()=>{s()},e/2),setTimeout(()=>{t(!1)},e)}}function BE({quiz:t,onEnd:e}){const[s,n]=T.useState(t.questions[0]),[r,u]=T.useState(t.results[0]),[c,p]=T.useState([]),[_,h]=T.useState("start"),[f,v]=T.useState(!1),k=LE(v,1500),x=OE(t.questions);let N=null;_==="start"&&(N=o.jsx(qE,{quiz:t,onClick:()=>{k(()=>{h("question")})}})),_==="question"&&(N=o.jsx(EE,{question:s,onClick:I=>{const F=x.byId[I.nextQuestionId||""],se=x.byIndex[s.index+1],te=$E(c,t.results);p([...c,I]),I.isEnd&&k(()=>{u(te),h("result")}),I.nextQuestionId&&F?k(()=>{n(F)}):k(se?()=>{n(se)}:()=>{u(te),h("result")})}})),_==="result"&&(N=o.jsx(ME,{result:r,onClick:()=>{k(()=>{e(),n(t.questions[0]),p([]),h("start")})}}));const q=f?`${Jt.quiz_slider} ${Jt.quiz_slider_animation}`:Jt.quiz_slider;return o.jsxs("div",{className:Jt.quiz_container,style:{backgroundImage:"url(./assets/games/quize/cloud_bg.png)"},children:[o.jsx("div",{className:Jt.quiz_cloud_bg,style:{backgroundImage:"url(./assets/games/quize/cloud_bg.png)"}}),o.jsx("div",{className:Jt.quiz_cloud,style:{backgroundImage:"url(./assets/games/quize/cloud.png)"}}),o.jsx("div",{className:q,children:N})]})}const PE=[[],[],[],[]],WE=[21,19,21,20,21,22,23,23,23,24,23,22];function FE(t){if(!t||t.length<10)return"";const e=Number(t.slice(5,7)),s=Number(t.slice(8,10));return!e||!s?"":`horoscope${s>=WE[e-1]?e%12+1:e}`}function UE(t){return[...new Set(t.filter(Boolean))].reduce((e,s)=>{const n=dc[s]-1;return e[n]&&e[n].push(s),e},[[],[],[],[]])}function GE(t,e){if(e<=20)return[];const s=e*.7,[n,r]=t.reduce((u,c,p)=>(p>=15&&(u[0]+=c),p<=13&&(u[1]+=c),u),[0,0]);return[n>s?"commitsAfter1500":"",r>s?"commitsBefore1500":""]}function HE(t,e,s){const n=t.totalTasks>0?1/t.totalTaskInDay:1/0,r=t.totalDays||0;return[e.slice(0,7).every(Boolean)?"hasCommitFrom0to7":"",e.slice(10,18).some(u=>!u)?"noCommitOnDay":"",e.slice(0,5).every(u=>!u)&&e.slice(18,24).every(u=>!u)?"commitsAfter1800":"",e.every(Boolean)?"workEveryTime":"",t.commitsByDayAndHour.every(u=>u.every(Boolean))?"hasCommitEveryTime":"",t.isDismissed?"userIsDied":"",n<1?"lessDaysForTask":"",n>2?"more2DaysForTask":"",r>90?"more90DaysInProject":"",r>=365?"more365DaysInProject":"",r>=666?"more666DaysInProject":"",r>=777?"more777DaysInProject":"",r>=3*365?"more3YearsInProject":"",t.totalWeekendsDaysWithCommits?"workOnWeekends":"",s>92?"longTask":""]}function VE(t=[],e){return!t.length||!e?[]:t.map(s=>{var r;const n=(r=e.get(s))==null?void 0:r.type;return n===$e.GITHUB?"github":n===$e.NETWORK?"ipInEmail":""})}function YE(t,e,s){var n;return[t.totalDaysWithoutCommits===0?"zeroLazyDays":"",t.commits>0&&t.totalTasks===0?"workNotWork":"",t.totalTasks>0&&t.totalTaskInCommits<2?"oneCommitOneTask":"",t.device?"mackBook":"",...VE(t.emails,(n=e.email)==null?void 0:n.totalInfoByName),FE(t.firstCommitTimestamp),((s==null?void 0:s.maxDelayDays)||0)>31?"longWaitPR":""]}function QE(t,e,s,n,r=0){if(!e)return PE.map(c=>[...c]);const u=e.commitsByHour||[];return UE([...t,...GE(u,e.commits||0),...e.isStaff?["userNotWork"]:HE(e,u,r),...YE(e,s,n)])}const KE=new Set([".eslintrc",".stylelintrc.json"]),ZE=new Set(["md","doc","docx","txt"]),XE=new Set(["css","scss","less","style"]),JE=new Set(["style","styles"]),eI=new Set(["browserslist-stats.json",".browserslistrc","postcss.config.js","postcss.config.ts"]),$k=new Set(["test","mock","snap"]),tI=new Set(["Dockerfile","gradlew","gradlew.bat","gradle.properties","docker-compose.yml"]);function Lk(t,e){Object.entries(e||{}).forEach(([s,n])=>{t.set(s,(t.get(s)||0)+Number(n||0))})}function $o(t){return Array.from(t.entries()).sort((e,s)=>s[1]-e[1])}function bc(t,e,s){!e||!s||(t[e]=t[e]||[],t[e].push(s))}function Qn(t,e,s){var n;bc(t,(n=e[0])==null?void 0:n[0],s)}function aI(t){return KE.has(t.name)?"moreLintHint":ZE.has(t.extension)?"moreReadMe":XE.has(t.extension)||JE.has(t.name)?"moreStyle":$k.has(t.extension)||$k.has(t.type)?"moreTests":tI.has(t.name)?"moreDevOps":""}function sI(t){var c,p;const e=((c=t==null?void 0:t.files)==null?void 0:c.list)||[],s={};if(!e.length)return s;const n={moreLintHint:new Map,moreReadMe:new Map,moreStyle:new Map,moreTests:new Map,moreDevOps:new Map,fileRush:new Map},r=e.reduce((_,h)=>{var N,q;const f=h.createAuthor||"",v=aI(h);v?(Lk(n[v],h.addedLinesByAuthor),Lk(n[v],h.changedLinesByAuthor)):eI.has(h.name)&&h.firstCommit&&h.firstCommit<_.sitnik.milliseconds&&(_.sitnik={author:f,milliseconds:h.firstCommit}),f&&n.fileRush.set(f,(n.fileRush.get(f)||0)+1);const k=((N=h.name)==null?void 0:N.length)||0;f&&k>_.fileName.length&&(_.fileName={author:f,length:k});const x=((q=h.path)==null?void 0:q.length)||0;return f&&x>_.filePath.length&&(_.filePath={author:f,length:x}),_},{filePath:{author:"",length:0},fileName:{author:"",length:0},sitnik:{author:"",milliseconds:1/0}}),u=Object.entries(((p=t.tree)==null?void 0:p.addedFoldersByAuthor)||{}).map(([_,h])=>[_,(h==null?void 0:h.length)||0]).sort((_,h)=>h[1]-_[1]);return Qn(s,$o(n.fileRush),"fileRush"),Qn(s,u,"moreAddedFolders"),Qn(s,$o(n.moreLintHint),"moreLintHint"),Qn(s,$o(n.moreReadMe),"moreReadMe"),Qn(s,$o(n.moreStyle),"moreStyle"),Qn(s,$o(n.moreTests),"moreTests"),Qn(s,$o(n.moreDevOps),"moreDevOps"),bc(s,r.filePath.author,"longFilePath"),bc(s,r.fileName.author,"longFileName"),bc(s,r.sitnik.author,"publicitySitnik"),s}const iI=[["nameLength","longestName","shortestName"],["messageLength","longestMessage"],["midMessageLength","everyMessageLong","everyMessageShort"],["tasks","moreTasks","lessTasks"],["days","moreWorkDays","lessWorkDays"],["lazyDays","moreLazyDays","lessLazyDays"],["allDaysInProject","moreDaysInProject","lessDaysInProject"],["firstCommit",void 0,"adam"],["moreRefactoring","moreRefactoring"],["tasksInDay","moreTasksInDay"],["commitsInDay","moreCommits"],["morePRMerge","morePRMerge"],["moreLongWaitPR","moreLongWaitPR"],["manyTimeZone","moreChangeTimeZone"]];function nI(t=[]){return t.reduce((e,s)=>{if(!(s!=null&&s.author))return e;const n=e.get(s.author)||{numberMergedPr:0,maxDelayDays:0};return n.numberMergedPr+=1,n.maxDelayDays=Math.max(n.maxDelayDays,s.daysInReview||0),e.set(s.author,n),e},new Map)}function oI(t=[]){return t.reduce((e,s)=>{const n=s.totalDays||0;return!s.authors||!n||s.authors.forEach(r=>{e.set(r,Math.max(e.get(r)||0,n))}),e},new Map)}function lI(t,e,s){var p,_,h,f,v,k;const n=(_=(p=e.timestamp)==null?void 0:p.totalInfoByName)==null?void 0:_[t.author],r=s.get(t.author),u=(t.countries||[]).filter(x=>x.fromTimezone&&x.fromTimezone!=="+00:00").length,c={nameLength:((h=t.author)==null?void 0:h.length)||0,messageLength:t.maxMessageLength||0,midMessageLength:t.middleMessageLength||0,tasks:t.totalTasks||0,days:t.totalDaysWithCommits||0,moreRefactoring:((f=t.types)==null?void 0:f.refactor)||0,manyTimeZone:u,tasksInDay:((v=n==null?void 0:n.tasksByTimestampCounter)==null?void 0:v.max)||0,commitsInDay:((k=n==null?void 0:n.commitsByTimestampCounter)==null?void 0:k.max)||0,moreLongWaitPR:(r==null?void 0:r.maxDelayDays)||0,morePRMerge:(r==null?void 0:r.numberMergedPr)||0};return t.isStaff||(c.allDaysInProject=t.totalDays||0,c.lazyDays=t.totalDaysWithoutCommits||0,c.firstCommit=t.firstCommit||0),c}function rI(t,e,s){const n={};return t.forEach(r=>{Object.entries(lI(r,e,s)).forEach(([u,c])=>{(n[u]||(n[u]=[])).push([r.author,c])})}),Object.values(n).forEach(r=>r.sort((u,c)=>c[1]-u[1])),n}function mI(t,e=[],s,n){var c,p;const r=(c=e[0])==null?void 0:c[0];if(!r||!t[r]||(s&&t[r].push(s),!n))return;const u=(p=e[e.length-1])==null?void 0:p[0];u&&t[u]&&t[u].push(n)}function zg(t,e,s){e&&t[e]&&t[e].push(s)}function uI(t,e){var r,u;const s=(r=e==null?void 0:e.minData)==null?void 0:r.author,n=(u=e==null?void 0:e.maxData)==null?void 0:u.author;if(!(!s||!n)){if(s===n){zg(t,s,"firstLastCommit");return}zg(t,s,"firstCommit"),zg(t,n,"lastCommit")}}function cI(t,e){Object.entries(e).forEach(([s,n])=>{t[s]&&t[s].push(...n)})}function pI(t,e){var p,_,h;const s=((p=t==null?void 0:t.author)==null?void 0:p.totalInfo)||[],n=Object.fromEntries(s.map(f=>[f.author,[]])),r=nI((_=t==null?void 0:t.pr)==null?void 0:_.totalInfo),u=oI((h=t==null?void 0:t.tasks)==null?void 0:h.totalInfo),c=rI(s,t,r);return iI.forEach(([f,v,k])=>{mI(n,c[f],v,k)}),uI(n,t==null?void 0:t.firstLastCommit),cI(n,sI(e)),Object.fromEntries(s.map(f=>[f.author,QE(n[f.author],f,t,r.get(f.author),u.get(f.author)||0)]))}function dI(){return pI(A.statisticsByCommits,A.statisticsByFiles)}const Bk=qi(dI);function wc(t,e,s){return{title:t,index:0,answers:e.map((n,r)=>({title:n,score:s===r?1:0}))}}function Kn(t,e,s,n){const r=t.sort((p,_)=>s(_)-s(p)).slice(0,3).map(p=>p.author),u=r[n||0],c=Ts(r);return wc(e,c,c.indexOf(u))}function Pk(t){return Math.random()>.5?t:-t}function xc(t,e){let s,n;if(e<3)s=e+1,n=e+2;else{const u=e>10?Math.ceil(e*.15):1;s=e+Pk(u),n=e+Pk(u*2)}const r=Ts([e,s,n]);return wc(t,r,r.indexOf(e))}function Ng(t){if(!t)return null;const e=Ee.get("plugin.team_building.quiz.question13",{author:t.author}),n=A.statisticsByCommits.timestamp.totalInfoByName[t.author].tasksByTimestampCounter.max;return xc(e,n)}function gI(){const t=A.statisticsByCommits.type.list.slice(2).filter(c=>c);if(t.length<3)return null;const e=Ts(t).slice(0,3),[s,n,r]=e.map(c=>t.indexOf(c));let u=0;return n<s&&n<r&&(u=1),r<s&&r<n&&(u=2),wc("plugin.team_building.quiz.question14",e,u)}function _I(t){const e=t.map(u=>u.totalDays),s=Math.floor(t.length*.2);if(e.slice(s,t.length-s).length<3)return null;const r=Math.ceil(e.reduce((u,c)=>u+c)/e.length);return xc("plugin.team_building.quiz.question15",r)}function om(t,e,s,n){const r=t.find(_=>{var h;return(h=s==null?void 0:s[_])==null?void 0:h[n]});if(!r)return null;const u=t.filter(_=>_!==r),c=Ts(u).slice(0,2),p=Ts([...c,r]);return wc(e,p,p.indexOf(r))}function hI(){const t=[...A.statisticsByCommits.author.totalInfo],e=t.filter(f=>!f.isStaff),s=e.map(f=>f.author),n=A.statisticsByCommits.author.employment.dismissed.length,r=A.statisticsByCommits.author.employment.staff.length,u=Ts([...e]).slice(0,3),c=Bk(),p=e.reduce((f,v)=>{const x=c[v.author].flat(1).map(N=>[N,!0]);return f[v.author]=Object.fromEntries(x),f},{}),h=[Kn(t,"plugin.team_building.quiz.question01",f=>f.firstCommit),Kn(e,"plugin.team_building.quiz.question02",f=>f.totalTasks),Kn(e,"plugin.team_building.quiz.question03",f=>f.taskInDay),Kn(e,"plugin.team_building.quiz.question04",f=>f.totalDays),Kn(e,"plugin.team_building.quiz.question05",f=>f.totalDays,2),om(s,"plugin.team_building.quiz.question16",p,"moreAddedFolders"),om(s,"plugin.team_building.quiz.question17",p,"longFilePath"),om(s,"plugin.team_building.quiz.question18",p,"morePRMerge"),om(s,"plugin.team_building.quiz.question19",p,"longestMessage"),om(s,"plugin.team_building.quiz.question20",p,"longWaitPR"),Kn(e,"plugin.team_building.quiz.question08",f=>f.middleMessageLength),Kn(e,"plugin.team_building.quiz.question09",f=>f.middleMessageLength,2),xc("plugin.team_building.quiz.question11",n),xc("plugin.team_building.quiz.question12",r),Ng(u[0]),Ng(u[1]),Ng(u[2]),gI(),_I(e)].filter(f=>f).map((f,v)=>({...f,index:v+1}));return{description:"plugin.team_building.quiz.begin",questions:Ts(h),results:[{title:"plugin.team_building.quiz.result1.title",description:"plugin.team_building.quiz.result1.description",min:0,max:7},{title:"plugin.team_building.quiz.result2.title",description:"plugin.team_building.quiz.result2.description",min:8,max:13},{title:"plugin.team_building.quiz.result3.title",description:"plugin.team_building.quiz.result3.description",min:14,max:25}]}}function fI(){const t=hI();return o.jsx(BE,{quiz:t,onEnd:()=>{}})}const Wk={game_banner:"game_banner",game_banner_description:"game_banner_description"};function Fk({src:t,children:e}){return t?o.jsx("div",{className:Wk.game_banner,style:{backgroundImage:`url(${t})`},children:e?o.jsx("div",{className:Wk.game_banner_description,children:e}):null}):null}const yI={races_track_info:"races_track_info"};function vI({title:t,duration:e,taskInDay:s}){return o.jsx("div",{className:yI.races_track_info,style:{animationDelay:`${e+1}s`},title:`${Kt(s)} ${$t("plugin.team_total.workSpeed.title")}`,children:t})}const Cc={races_track_car:"races_track_car",races_track_car_title:"races_track_car_title",races_track_car_cover:"races_track_car_cover",races_track_car_animation:"races_track_car_animation"},Mg=["ease","ease-in","ease-out","ease-in-out","linear","cubic-bezier(0.1, 0.7, 1, 0.1)"];function kI({title:t,duration:e,type:s="",canStart:n=!1}){const r=qk(Mg.length-1),[u]=T.useState(Mg[r]);T.useEffect(()=>{Ts(Mg)},[]);const c=n?Cc.races_track_car_animation:"";return o.jsxs("div",{className:`${Cc.races_track_car} ${s||""} ${c||""}`,style:{animationTimingFunction:u,animationDuration:`${e}s`},children:[o.jsx("div",{className:`${Cc.races_track_car_title} ${s||""}`,children:t}),o.jsx("img",{alt:"",className:Cc.races_track_car_cover,src:"./assets/games/races/car.png"})]})}const lm={races:"races",races_green:"races_green",races_track:"races_track",races_button:"races_button"},Uk={MIN:10,BASE:20};function bI({title:t,position:e,speed:s,taskInDay:n,type:r="",canStart:u=!1}){if(!t)return null;const c=Uk.MIN+Uk.BASE*(1-s)*3;return o.jsxs("div",{className:`${lm.races_track} ${r||""}`,style:{backgroundImage:"url(./assets/games/races/road.png)"},children:[u&&o.jsx(vI,{title:e,duration:c,taskInDay:n}),o.jsx(kI,{title:t,duration:c,type:r,canStart:u})]})}function wI({tracks:t}){const{t:e}=ie(),[s,n]=T.useState(!1),[r]=T.useState([...Ts(t)]);if(!t.length)return null;const u=r.map(c=>o.jsx(bI,{title:c.title,position:c.position,speed:c.speed,taskInDay:c.taskInDay,canStart:s},c.title));return o.jsxs(o.Fragment,{children:[o.jsx(Fk,{src:"./assets/games/races/bg.png",children:!s&&o.jsx(Je,{className:lm.races_button,onClick:()=>{n(!0)},children:e("plugin.team_building.races.go")})}),o.jsx("div",{className:lm.races_green,style:{backgroundImage:"url(./assets/games/races/greenTop.png)"}}),o.jsx("div",{className:`${lm.races} scroll_x`,children:o.jsx("div",{style:{minWidth:"900px"},children:u})}),o.jsx("div",{className:lm.races_green,style:{backgroundImage:"url(./assets/games/races/greenBottom.png)"}})]})}const rm={billboard:"billboard",billboard_box:"billboard_box",billboard_title:"billboard_title",billboard_cloud:"billboard_cloud",billboard_green:"billboard_green"};function Gk({title:t,type:e}){const{t:s}=ie();if(!t)return null;const n=e==="cloud"?rm.billboard_cloud:rm.billboard_green,r=e==="cloud"?"./assets/games/cloud.png":"./assets/games/lawn.png";return o.jsx("div",{className:`${rm.billboard} ${n}`,style:{backgroundImage:`url(${r})`},children:o.jsx("div",{className:rm.billboard_box,style:{backgroundImage:"url(./assets/games/billboard1.png)"},children:o.jsx("div",{className:rm.billboard_title,children:s(t||"")})})})}const Ks={show_symbol_wrapper:"show_symbol_wrapper",show_symbol:"show_symbol",show_symbol_s:"show_symbol_s",show_symbol_hide:"show_symbol_hide",show_symbol_bg:"show_symbol_bg",show_symbol_bg_hide:"show_symbol_bg_hide"};function xI({show:t,children:e,mode:s}){const[n,r]=T.useState(!1);T.useEffect(()=>{r(t)},[t]);const u=n?Ks.show_symbol_hide:"",c=n?Ks.show_symbol_bg_hide:"",p={"table-row":Ks.show_symbol_s}[s||""]||"";return o.jsxs("div",{className:`${Ks.show_symbol} ${u} ${p}`,children:[e,o.jsx("div",{className:`${Ks.show_symbol_bg} ${c}`,onClick:()=>r(!0)})]})}function CI({children:t,onClick:e,mode:s}){const n={"table-row":Ks.show_symbol_s}[s||""]||"";return o.jsx("div",{className:`${Ks.show_symbol} ${Ks.show_symbol_hide} ${n}`,onClick:()=>e(),children:t})}function jI(t,e){const s=(t||"").split(""),n=e?e-1:s.length-1;return s.length-1>n&&(s[n]="…"),s}function TI({text:t,length:e,mode:s}){const[n,r]=T.useState(!1);if(T.useEffect(()=>{r(!1)},[t]),!t&&!e)return null;const u=jI(t,e),p=((e?new Array(e).fill(1):null)||u).map((_,h)=>o.jsx(xI,{mode:s,show:n,children:u[h]||""},`${t}|${_}|${h}`));return o.jsxs("div",{className:`${Ks.show_symbol_wrapper}`,style:{paddingTop:s==="table-row"?"8px":0},children:[p,o.jsx(CI,{mode:s,onClick:()=>r(!0),children:"»"})]})}const mm={swimming_pool_track:"swimming_pool_track",swimming_pool_track_value:"swimming_pool_track_value",swimming_pool_track_line:"swimming_pool_track_line",swimming_pool_track_chart:"swimming_pool_track_chart",swimming_pool_track_man:"swimming_pool_track_man"};function Rg(t,e){return e?{className:t,style:{backgroundImage:`url(${e})`}}:{className:t}}function DI({title:t,value:e,maxValue:s}){if(!t)return null;const n=s*1.1/100,r=Math.ceil(e/n);return o.jsxs("div",{...Rg(mm.swimming_pool_track,"./assets/games/swimmingPool/track_title.png"),children:[o.jsx(TI,{text:t,length:10}),o.jsx("div",{...Rg(mm.swimming_pool_track_value,"./assets/games/swimmingPool/block.png"),children:e}),o.jsx("div",{...Rg(mm.swimming_pool_track_line,"./assets/games/swimmingPool/water.png"),children:o.jsx("div",{className:mm.swimming_pool_track_chart,style:{width:`${r}%`},children:o.jsx("img",{alt:"",className:mm.swimming_pool_track_man,src:"./assets/games/swimmingPool/man.png"})})})]})}const Hk={swimming_pool_top_border:"swimming_pool_top_border",swimming_pool_bottom_border:"swimming_pool_bottom_border"};function SI({tracks:t}){const[e]=T.useState([...Ts(t)]);if(!t.length)return null;const s=e.map(n=>o.jsx(DI,{title:n.title,value:n.value,maxValue:300},n.title));return o.jsxs(o.Fragment,{children:[o.jsx(Fk,{src:"./assets/games/swimmingPool/bg.png"}),o.jsx("div",{className:Hk.swimming_pool_top_border,style:{backgroundImage:"url(./assets/games/swimmingPool/block2.png)"}}),o.jsx("div",{className:"scroll_x",children:o.jsx("div",{style:{minWidth:"900px"},children:s})}),o.jsx("div",{className:Hk.swimming_pool_bottom_border,style:{backgroundImage:"url(./assets/games/swimmingPool/block2.png)"}})]})}const Vk={team_building_full_screen_open:"team_building_full_screen_open",team_building_full_screen_close:"team_building_full_screen_close"},AI=U(()=>{const t=A.statisticsByCommits.author.totalInfo.filter(u=>!u.isStaff),e=t.map(u=>u.totalTaskInDay);e.sort((u,c)=>c-u);const s=t.map(u=>({title:u.author,position:e.indexOf(u.totalTaskInDay)+1,taskInDay:u.totalTaskInDay,speed:u.totalTaskInDay/e[0]})),n=[...t].sort((u,c)=>c.maxMessageLength-u.maxMessageLength).map(u=>({title:u.author,value:u.maxMessageLength})),r=xa.isOpen?Vk.team_building_full_screen_open:Vk.team_building_full_screen_close;return o.jsxs(o.Fragment,{children:[!Vt&&o.jsx("img",{alt:"",src:xa.isOpen?"./assets/icons/CloseFullscreen.svg":"./assets/icons/OpenFullscreen.svg",className:r,onClick:()=>{xa.toggle()}}),Math.random()<1&&o.jsx(fI,{}),o.jsx(Gk,{title:"plugin.team_building.races.title",type:"cloud"}),o.jsx(wI,{tracks:s}),o.jsx(Gk,{title:"plugin.team_building.swimmingPool.title",type:"green"}),o.jsx(SI,{tracks:n})]})});let zI=(gl=class{constructor(){this.dependencies=["author","timestamp","type"]}getMenuItems(){return[{id:"building",group:50,order:230,link:"/team/building",title:"plugin.team_building.sidebar",icon:"./assets/menu/building.svg"}]}getPage(e){return e==="/team/building"?o.jsx(AI,{}):void 0}getTranslations(){return zE}},gl.id="team_building",gl);const NI={ar:`
|
||
§ plugin.team_commits.sidebar: جميع الـ commits
|
||
§ plugin.team_commits.example.title: على سبيل المثال:
|
||
§ plugin.team_commits.chart.title: تحليل نتائج البحث
|
||
§ plugin.team_commits.yearChart.title: التقسيم حسب السنوات
|
||
§ plugin.team_commits.authorChart.title: التقسيم حسب الموظفين
|
||
§ plugin.team_commits.results.title: قائمة الـ commits
|
||
§ plugin.team_commits.results.author: الموظف
|
||
§ plugin.team_commits.results.task: المهمة
|
||
§ plugin.team_commits.results.message: Commit message
|
||
§ plugin.team_commits.details.title: معلومات الـ commit
|
||
§ plugin.team_commits.files.title: الملفات التي عمل عليها الموظف
|
||
§ plugin.team_commits.files.action.title: النوع
|
||
§ plugin.team_commits.files.action.added: أُنشئ
|
||
§ plugin.team_commits.files.action.copy: نُسخ
|
||
§ plugin.team_commits.files.action.removed: حُذف
|
||
§ plugin.team_commits.files.action.modification: عُدّل
|
||
§ plugin.team_commits.files.action.renamed: أُعيدت تسميته
|
||
§ plugin.team_commits.files.action.typeChange: تغيير الامتداد
|
||
§ plugin.team_commits.files.action.unmerged: تعارض دمج
|
||
§ plugin.team_commits.files.action.unknown: غير معروف
|
||
§ plugin.team_commits.files.addedRemoved: مضاف / محذوف
|
||
§ plugin.team_commits.files.changed: مُغيَّر
|
||
§ plugin.team_commits.files.line: أسطر
|
||
§ plugin.team_commits.files.path: المسار
|
||
§ plugin.team_commits.info.date: تاريخ الـ commit
|
||
§ plugin.team_commits.info.location: الموقع المحتمل
|
||
§ plugin.team_commits.info.task: المهمة
|
||
§ plugin.team_commits.info.email: عنوان البريد الإلكتروني
|
||
§ plugin.team_commits.info.company: الشركة
|
||
§ plugin.team_commits.info.device: الجهاز
|
||
§ plugin.team_commits.info.release: قائمة الإصدارات التي يُحتمل أن يكون هذا الـ commit قد دخل فيها
|
||
§ plugin.team_commits.info.release.title: الإصدار
|
||
§ plugin.team_commits.info.release.releaseDateMerge: نُشر
|
||
§ plugin.team_commits.info.release.prDateMerge: دُمج
|
||
`,de:`
|
||
§ plugin.team_commits.sidebar: Alle commits
|
||
§ plugin.team_commits.example.title: Zum Beispiel:
|
||
§ plugin.team_commits.chart.title: Analyse der Suchergebnisse
|
||
§ plugin.team_commits.yearChart.title: Aufschlüsselung nach Jahren
|
||
§ plugin.team_commits.authorChart.title: Aufschlüsselung nach Mitarbeitern
|
||
§ plugin.team_commits.results.title: Liste der commits
|
||
§ plugin.team_commits.results.author: Mitarbeiter
|
||
§ plugin.team_commits.results.task: Aufgabe
|
||
§ plugin.team_commits.results.message: Commit message
|
||
§ plugin.team_commits.details.title: Informationen zum commit
|
||
§ plugin.team_commits.files.title: Dateien, mit denen der Mitarbeiter gearbeitet hat
|
||
§ plugin.team_commits.files.action.title: Typ
|
||
§ plugin.team_commits.files.action.added: erstellt
|
||
§ plugin.team_commits.files.action.copy: kopiert
|
||
§ plugin.team_commits.files.action.removed: gelöscht
|
||
§ plugin.team_commits.files.action.modification: geändert
|
||
§ plugin.team_commits.files.action.renamed: umbenannt
|
||
§ plugin.team_commits.files.action.typeChange: Änderung der Erweiterung
|
||
§ plugin.team_commits.files.action.unmerged: Merge-Konflikt
|
||
§ plugin.team_commits.files.action.unknown: unbekannt
|
||
§ plugin.team_commits.files.addedRemoved: Hinzugefügt / Entfernt
|
||
§ plugin.team_commits.files.changed: Geändert
|
||
§ plugin.team_commits.files.line: Zeilen
|
||
§ plugin.team_commits.files.path: Pfad
|
||
§ plugin.team_commits.info.date: Datum des commit
|
||
§ plugin.team_commits.info.location: möglicher Standort
|
||
§ plugin.team_commits.info.task: Aufgabe
|
||
§ plugin.team_commits.info.email: E-Mail-Adresse
|
||
§ plugin.team_commits.info.company: Unternehmen
|
||
§ plugin.team_commits.info.device: Gerät
|
||
§ plugin.team_commits.info.release: Liste der Releases, in die dieser commit wahrscheinlich eingeflossen ist
|
||
§ plugin.team_commits.info.release.title: Release
|
||
§ plugin.team_commits.info.release.releaseDateMerge: Veröffentlicht
|
||
§ plugin.team_commits.info.release.prDateMerge: Zusammengeführt
|
||
`,en:`
|
||
§ plugin.team_commits.sidebar: All commits
|
||
§ plugin.team_commits.example.title: For example:
|
||
§ plugin.team_commits.chart.title: Search results analysis
|
||
§ plugin.team_commits.yearChart.title: Breakdown by years
|
||
§ plugin.team_commits.authorChart.title: Breakdown by staff members
|
||
§ plugin.team_commits.results.title: Commit list
|
||
§ plugin.team_commits.results.author: Staff member
|
||
§ plugin.team_commits.results.task: Task
|
||
§ plugin.team_commits.results.message: Commit message
|
||
§ plugin.team_commits.details.title: Commit information
|
||
§ plugin.team_commits.files.title: Files the staff member worked with
|
||
§ plugin.team_commits.files.action.title: Type
|
||
§ plugin.team_commits.files.action.added: created
|
||
§ plugin.team_commits.files.action.copy: copied
|
||
§ plugin.team_commits.files.action.removed: deleted
|
||
§ plugin.team_commits.files.action.modification: modified
|
||
§ plugin.team_commits.files.action.renamed: renamed
|
||
§ plugin.team_commits.files.action.typeChange: extension change
|
||
§ plugin.team_commits.files.action.unmerged: merge conflict
|
||
§ plugin.team_commits.files.action.unknown: unknown
|
||
§ plugin.team_commits.files.addedRemoved: Added / Removed
|
||
§ plugin.team_commits.files.changed: Changed
|
||
§ plugin.team_commits.files.line: lines
|
||
§ plugin.team_commits.files.path: Path
|
||
§ plugin.team_commits.info.date: commit date
|
||
§ plugin.team_commits.info.location: possible location
|
||
§ plugin.team_commits.info.task: task
|
||
§ plugin.team_commits.info.email: email address
|
||
§ plugin.team_commits.info.company: company
|
||
§ plugin.team_commits.info.device: Device
|
||
§ plugin.team_commits.info.release: List of releases this commit likely landed in
|
||
§ plugin.team_commits.info.release.title: Release
|
||
§ plugin.team_commits.info.release.releaseDateMerge: Published
|
||
§ plugin.team_commits.info.release.prDateMerge: Merged
|
||
`,es:`
|
||
§ plugin.team_commits.sidebar: Todos los commits
|
||
§ plugin.team_commits.example.title: Por ejemplo:
|
||
§ plugin.team_commits.chart.title: Análisis de resultados de búsqueda
|
||
§ plugin.team_commits.yearChart.title: Desglose por años
|
||
§ plugin.team_commits.authorChart.title: Desglose por empleados
|
||
§ plugin.team_commits.results.title: Lista de commits
|
||
§ plugin.team_commits.results.author: Empleado
|
||
§ plugin.team_commits.results.task: Tarea
|
||
§ plugin.team_commits.results.message: Commit message
|
||
§ plugin.team_commits.details.title: Información del commit
|
||
§ plugin.team_commits.files.title: Archivos con los que trabajó el empleado
|
||
§ plugin.team_commits.files.action.title: Tipo
|
||
§ plugin.team_commits.files.action.added: creado
|
||
§ plugin.team_commits.files.action.copy: copiado
|
||
§ plugin.team_commits.files.action.removed: eliminado
|
||
§ plugin.team_commits.files.action.modification: modificado
|
||
§ plugin.team_commits.files.action.renamed: renombrado
|
||
§ plugin.team_commits.files.action.typeChange: cambio de extensión
|
||
§ plugin.team_commits.files.action.unmerged: conflicto de merge
|
||
§ plugin.team_commits.files.action.unknown: desconocido
|
||
§ plugin.team_commits.files.addedRemoved: Añadido / Eliminado
|
||
§ plugin.team_commits.files.changed: Modificado
|
||
§ plugin.team_commits.files.line: líneas
|
||
§ plugin.team_commits.files.path: Ruta
|
||
§ plugin.team_commits.info.date: fecha del commit
|
||
§ plugin.team_commits.info.location: posible ubicación
|
||
§ plugin.team_commits.info.task: tarea
|
||
§ plugin.team_commits.info.email: dirección de email
|
||
§ plugin.team_commits.info.company: empresa
|
||
§ plugin.team_commits.info.device: Dispositivo
|
||
§ plugin.team_commits.info.release: Lista de releases en los que probablemente se incluyó este commit
|
||
§ plugin.team_commits.info.release.title: Release
|
||
§ plugin.team_commits.info.release.releaseDateMerge: Publicado
|
||
§ plugin.team_commits.info.release.prDateMerge: Fusionado
|
||
`,fr:`
|
||
§ plugin.team_commits.sidebar: Tous les commits
|
||
§ plugin.team_commits.example.title: Par exemple :
|
||
§ plugin.team_commits.chart.title: Analyse des résultats de recherche
|
||
§ plugin.team_commits.yearChart.title: Répartition par années
|
||
§ plugin.team_commits.authorChart.title: Répartition par collaborateurs
|
||
§ plugin.team_commits.results.title: Liste des commits
|
||
§ plugin.team_commits.results.author: Collaborateur
|
||
§ plugin.team_commits.results.task: Tâche
|
||
§ plugin.team_commits.results.message: Commit message
|
||
§ plugin.team_commits.details.title: Informations sur le commit
|
||
§ plugin.team_commits.files.title: Fichiers sur lesquels le collaborateur a travaillé
|
||
§ plugin.team_commits.files.action.title: Type
|
||
§ plugin.team_commits.files.action.added: créé
|
||
§ plugin.team_commits.files.action.copy: copié
|
||
§ plugin.team_commits.files.action.removed: supprimé
|
||
§ plugin.team_commits.files.action.modification: modifié
|
||
§ plugin.team_commits.files.action.renamed: renommé
|
||
§ plugin.team_commits.files.action.typeChange: changement d’extension
|
||
§ plugin.team_commits.files.action.unmerged: conflit de merge
|
||
§ plugin.team_commits.files.action.unknown: inconnu
|
||
§ plugin.team_commits.files.addedRemoved: Ajouté / Supprimé
|
||
§ plugin.team_commits.files.changed: Modifié
|
||
§ plugin.team_commits.files.line: lignes
|
||
§ plugin.team_commits.files.path: Chemin
|
||
§ plugin.team_commits.info.date: date du commit
|
||
§ plugin.team_commits.info.location: localisation possible
|
||
§ plugin.team_commits.info.task: tâche
|
||
§ plugin.team_commits.info.email: adresse e-mail
|
||
§ plugin.team_commits.info.company: entreprise
|
||
§ plugin.team_commits.info.device: Appareil
|
||
§ plugin.team_commits.info.release: Liste des releases dans lesquels ce commit a probablement été intégré
|
||
§ plugin.team_commits.info.release.title: Release
|
||
§ plugin.team_commits.info.release.releaseDateMerge: Publié
|
||
§ plugin.team_commits.info.release.prDateMerge: Fusionné
|
||
`,he:`
|
||
§ plugin.team_commits.sidebar: כל ה-commits
|
||
§ plugin.team_commits.example.title: לדוגמה:
|
||
§ plugin.team_commits.chart.title: ניתוח תוצאות החיפוש
|
||
§ plugin.team_commits.yearChart.title: פירוט לפי שנים
|
||
§ plugin.team_commits.authorChart.title: פירוט לפי עובדים
|
||
§ plugin.team_commits.results.title: רשימת commits
|
||
§ plugin.team_commits.results.author: עובד
|
||
§ plugin.team_commits.results.task: משימה
|
||
§ plugin.team_commits.results.message: Commit message
|
||
§ plugin.team_commits.details.title: מידע על ה-commit
|
||
§ plugin.team_commits.files.title: קבצים שהעובד עבד איתם
|
||
§ plugin.team_commits.files.action.title: סוג
|
||
§ plugin.team_commits.files.action.added: נוצר
|
||
§ plugin.team_commits.files.action.copy: הועתק
|
||
§ plugin.team_commits.files.action.removed: נמחק
|
||
§ plugin.team_commits.files.action.modification: שונה
|
||
§ plugin.team_commits.files.action.renamed: שונה שם
|
||
§ plugin.team_commits.files.action.typeChange: שינוי סיומת
|
||
§ plugin.team_commits.files.action.unmerged: קונפליקט מיזוג
|
||
§ plugin.team_commits.files.action.unknown: לא ידוע
|
||
§ plugin.team_commits.files.addedRemoved: נוסף / הוסר
|
||
§ plugin.team_commits.files.changed: שונה
|
||
§ plugin.team_commits.files.line: שורות
|
||
§ plugin.team_commits.files.path: נתיב
|
||
§ plugin.team_commits.info.date: תאריך ה-commit
|
||
§ plugin.team_commits.info.location: מיקום אפשרי
|
||
§ plugin.team_commits.info.task: משימה
|
||
§ plugin.team_commits.info.email: כתובת דוא״ל
|
||
§ plugin.team_commits.info.company: חברה
|
||
§ plugin.team_commits.info.device: מכשיר
|
||
§ plugin.team_commits.info.release: רשימת הגרסאות שבהן כנראה נכלל commit זה
|
||
§ plugin.team_commits.info.release.title: גרסה
|
||
§ plugin.team_commits.info.release.releaseDateMerge: פורסם
|
||
§ plugin.team_commits.info.release.prDateMerge: מוזג
|
||
`,hi:`
|
||
§ plugin.team_commits.sidebar: सभी commits
|
||
§ plugin.team_commits.example.title: उदाहरण:
|
||
§ plugin.team_commits.chart.title: खोज परिणामों का विश्लेषण
|
||
§ plugin.team_commits.yearChart.title: वर्षों के अनुसार विवरण
|
||
§ plugin.team_commits.authorChart.title: कर्मचारियों के अनुसार विवरण
|
||
§ plugin.team_commits.results.title: commits की सूची
|
||
§ plugin.team_commits.results.author: कर्मचारी
|
||
§ plugin.team_commits.results.task: कार्य
|
||
§ plugin.team_commits.results.message: Commit message
|
||
§ plugin.team_commits.details.title: commit की जानकारी
|
||
§ plugin.team_commits.files.title: फ़ाइलें जिन पर कर्मचारी ने काम किया
|
||
§ plugin.team_commits.files.action.title: प्रकार
|
||
§ plugin.team_commits.files.action.added: बनाया गया
|
||
§ plugin.team_commits.files.action.copy: कॉपी किया गया
|
||
§ plugin.team_commits.files.action.removed: हटाया गया
|
||
§ plugin.team_commits.files.action.modification: संशोधित
|
||
§ plugin.team_commits.files.action.renamed: नाम बदला गया
|
||
§ plugin.team_commits.files.action.typeChange: एक्सटेंशन परिवर्तन
|
||
§ plugin.team_commits.files.action.unmerged: मर्ज संघर्ष
|
||
§ plugin.team_commits.files.action.unknown: अज्ञात
|
||
§ plugin.team_commits.files.addedRemoved: जोड़ा / हटाया
|
||
§ plugin.team_commits.files.changed: बदला गया
|
||
§ plugin.team_commits.files.line: पंक्तियाँ
|
||
§ plugin.team_commits.files.path: पथ
|
||
§ plugin.team_commits.info.date: commit की तिथि
|
||
§ plugin.team_commits.info.location: संभावित स्थान
|
||
§ plugin.team_commits.info.task: कार्य
|
||
§ plugin.team_commits.info.email: ईमेल पता
|
||
§ plugin.team_commits.info.company: कंपनी
|
||
§ plugin.team_commits.info.device: डिवाइस
|
||
§ plugin.team_commits.info.release: रिलीज़ की सूची जिनमें यह commit संभवतः शामिल हुआ
|
||
§ plugin.team_commits.info.release.title: रिलीज़
|
||
§ plugin.team_commits.info.release.releaseDateMerge: प्रकाशित
|
||
§ plugin.team_commits.info.release.prDateMerge: मर्ज किया गया
|
||
`,ja:`
|
||
§ plugin.team_commits.sidebar: すべての commits
|
||
§ plugin.team_commits.example.title: 例:
|
||
§ plugin.team_commits.chart.title: 検索結果の分析
|
||
§ plugin.team_commits.yearChart.title: 年別内訳
|
||
§ plugin.team_commits.authorChart.title: 従業員別内訳
|
||
§ plugin.team_commits.results.title: commit 一覧
|
||
§ plugin.team_commits.results.author: 従業員
|
||
§ plugin.team_commits.results.task: タスク
|
||
§ plugin.team_commits.results.message: Commit message
|
||
§ plugin.team_commits.details.title: commit の情報
|
||
§ plugin.team_commits.files.title: 従業員が扱ったファイル
|
||
§ plugin.team_commits.files.action.title: 種別
|
||
§ plugin.team_commits.files.action.added: 作成
|
||
§ plugin.team_commits.files.action.copy: コピー
|
||
§ plugin.team_commits.files.action.removed: 削除
|
||
§ plugin.team_commits.files.action.modification: 変更
|
||
§ plugin.team_commits.files.action.renamed: 名前変更
|
||
§ plugin.team_commits.files.action.typeChange: 拡張子の変更
|
||
§ plugin.team_commits.files.action.unmerged: merge コンフリクト
|
||
§ plugin.team_commits.files.action.unknown: 不明
|
||
§ plugin.team_commits.files.addedRemoved: 追加 / 削除
|
||
§ plugin.team_commits.files.changed: 変更
|
||
§ plugin.team_commits.files.line: 行
|
||
§ plugin.team_commits.files.path: パス
|
||
§ plugin.team_commits.info.date: commit の日時
|
||
§ plugin.team_commits.info.location: 想定所在地
|
||
§ plugin.team_commits.info.task: タスク
|
||
§ plugin.team_commits.info.email: メールアドレス
|
||
§ plugin.team_commits.info.company: 企業
|
||
§ plugin.team_commits.info.device: デバイス
|
||
§ plugin.team_commits.info.release: この commit が含まれる可能性のあるリリースの一覧
|
||
§ plugin.team_commits.info.release.title: リリース
|
||
§ plugin.team_commits.info.release.releaseDateMerge: 公開済み
|
||
§ plugin.team_commits.info.release.prDateMerge: マージ済み
|
||
`,ko:`
|
||
§ plugin.team_commits.sidebar: 모든 commits
|
||
§ plugin.team_commits.example.title: 예를 들어:
|
||
§ plugin.team_commits.chart.title: 검색 결과 분석
|
||
§ plugin.team_commits.yearChart.title: 연도별 분석
|
||
§ plugin.team_commits.authorChart.title: 직원별 분석
|
||
§ plugin.team_commits.results.title: commit 목록
|
||
§ plugin.team_commits.results.author: 직원
|
||
§ plugin.team_commits.results.task: 작업
|
||
§ plugin.team_commits.results.message: Commit message
|
||
§ plugin.team_commits.details.title: commit 정보
|
||
§ plugin.team_commits.files.title: 직원이 작업한 파일
|
||
§ plugin.team_commits.files.action.title: 유형
|
||
§ plugin.team_commits.files.action.added: 생성됨
|
||
§ plugin.team_commits.files.action.copy: 복사됨
|
||
§ plugin.team_commits.files.action.removed: 삭제됨
|
||
§ plugin.team_commits.files.action.modification: 수정됨
|
||
§ plugin.team_commits.files.action.renamed: 이름 변경됨
|
||
§ plugin.team_commits.files.action.typeChange: 확장자 변경
|
||
§ plugin.team_commits.files.action.unmerged: merge 충돌
|
||
§ plugin.team_commits.files.action.unknown: 알 수 없음
|
||
§ plugin.team_commits.files.addedRemoved: 추가 / 삭제
|
||
§ plugin.team_commits.files.changed: 변경됨
|
||
§ plugin.team_commits.files.line: 줄
|
||
§ plugin.team_commits.files.path: 경로
|
||
§ plugin.team_commits.info.date: commit 날짜
|
||
§ plugin.team_commits.info.location: 추정 위치
|
||
§ plugin.team_commits.info.task: 작업
|
||
§ plugin.team_commits.info.email: 이메일 주소
|
||
§ plugin.team_commits.info.company: 회사
|
||
§ plugin.team_commits.info.device: 장치
|
||
§ plugin.team_commits.info.release: 이 commit이 포함되었을 가능성이 있는 릴리스 목록
|
||
§ plugin.team_commits.info.release.title: 릴리스
|
||
§ plugin.team_commits.info.release.releaseDateMerge: 게시됨
|
||
§ plugin.team_commits.info.release.prDateMerge: 병합됨
|
||
`,pt:`
|
||
§ plugin.team_commits.sidebar: Todos os commits
|
||
§ plugin.team_commits.example.title: Por exemplo:
|
||
§ plugin.team_commits.chart.title: Análise dos resultados da pesquisa
|
||
§ plugin.team_commits.yearChart.title: Distribuição por anos
|
||
§ plugin.team_commits.authorChart.title: Distribuição por colaboradores
|
||
§ plugin.team_commits.results.title: Lista de commits
|
||
§ plugin.team_commits.results.author: Colaborador
|
||
§ plugin.team_commits.results.task: Tarefa
|
||
§ plugin.team_commits.results.message: Commit message
|
||
§ plugin.team_commits.details.title: Informações do commit
|
||
§ plugin.team_commits.files.title: Arquivos com os quais o colaborador trabalhou
|
||
§ plugin.team_commits.files.action.title: Tipo
|
||
§ plugin.team_commits.files.action.added: criado
|
||
§ plugin.team_commits.files.action.copy: copiado
|
||
§ plugin.team_commits.files.action.removed: excluído
|
||
§ plugin.team_commits.files.action.modification: modificado
|
||
§ plugin.team_commits.files.action.renamed: renomeado
|
||
§ plugin.team_commits.files.action.typeChange: alteração de extensão
|
||
§ plugin.team_commits.files.action.unmerged: conflito de merge
|
||
§ plugin.team_commits.files.action.unknown: desconhecido
|
||
§ plugin.team_commits.files.addedRemoved: Adicionado / Removido
|
||
§ plugin.team_commits.files.changed: Alterado
|
||
§ plugin.team_commits.files.line: linhas
|
||
§ plugin.team_commits.files.path: Caminho
|
||
§ plugin.team_commits.info.date: data do commit
|
||
§ plugin.team_commits.info.location: possível localização
|
||
§ plugin.team_commits.info.task: tarefa
|
||
§ plugin.team_commits.info.email: endereço de e-mail
|
||
§ plugin.team_commits.info.company: empresa
|
||
§ plugin.team_commits.info.device: Dispositivo
|
||
§ plugin.team_commits.info.release: Lista de releases em que este commit provavelmente entrou
|
||
§ plugin.team_commits.info.release.title: Release
|
||
§ plugin.team_commits.info.release.releaseDateMerge: Publicado
|
||
§ plugin.team_commits.info.release.prDateMerge: Mesclado
|
||
`,ru:`
|
||
§ plugin.team_commits.sidebar: Все коммиты
|
||
§ plugin.team_commits.example.title: Например:
|
||
§ plugin.team_commits.chart.title: Анализ результатов поиска
|
||
§ plugin.team_commits.yearChart.title: Разбивка по годам
|
||
§ plugin.team_commits.authorChart.title: Разбивка по сотрудникам
|
||
§ plugin.team_commits.results.title: Список коммитов
|
||
§ plugin.team_commits.results.author: Сотрудник
|
||
§ plugin.team_commits.results.task: Задача
|
||
§ plugin.team_commits.results.message: Подпись
|
||
§ plugin.team_commits.details.title: Информация о коммите
|
||
§ plugin.team_commits.files.title: Файлы, с которыми работал сотрудник
|
||
§ plugin.team_commits.files.action.title: Операция
|
||
§ plugin.team_commits.files.action.added: создан
|
||
§ plugin.team_commits.files.action.copy: скопирован
|
||
§ plugin.team_commits.files.action.removed: удалён
|
||
§ plugin.team_commits.files.action.modification: изменён
|
||
§ plugin.team_commits.files.action.renamed: переименован
|
||
§ plugin.team_commits.files.action.typeChange: смена расширения
|
||
§ plugin.team_commits.files.action.unmerged: merge конфликт
|
||
§ plugin.team_commits.files.action.unknown: неизвестно
|
||
§ plugin.team_commits.files.addedRemoved: Добавлено / Удалено
|
||
§ plugin.team_commits.files.changed: Изменено
|
||
§ plugin.team_commits.files.line: строк
|
||
§ plugin.team_commits.files.path: Путь
|
||
§ plugin.team_commits.info.date: дата коммита
|
||
§ plugin.team_commits.info.location: возможное местоположение
|
||
§ plugin.team_commits.info.task: задача
|
||
§ plugin.team_commits.info.email: почтовый адрес
|
||
§ plugin.team_commits.info.company: компания
|
||
§ plugin.team_commits.info.device: Возможное устройство
|
||
§ plugin.team_commits.info.release: Список релизов, в которые, вероятно, попал этот коммит
|
||
§ plugin.team_commits.info.release.title: Релиз
|
||
§ plugin.team_commits.info.release.releaseDateMerge: Опубликован
|
||
§ plugin.team_commits.info.release.prDateMerge: Влит
|
||
`,zh:`
|
||
§ plugin.team_commits.sidebar: 所有 commits
|
||
§ plugin.team_commits.example.title: 例如:
|
||
§ plugin.team_commits.chart.title: 搜索结果分析
|
||
§ plugin.team_commits.yearChart.title: 按年份细分
|
||
§ plugin.team_commits.authorChart.title: 按员工细分
|
||
§ plugin.team_commits.results.title: commit 列表
|
||
§ plugin.team_commits.results.author: 员工
|
||
§ plugin.team_commits.results.task: 任务
|
||
§ plugin.team_commits.results.message: Commit message
|
||
§ plugin.team_commits.details.title: commit 信息
|
||
§ plugin.team_commits.files.title: 该员工处理过的文件
|
||
§ plugin.team_commits.files.action.title: 类型
|
||
§ plugin.team_commits.files.action.added: 已创建
|
||
§ plugin.team_commits.files.action.copy: 已复制
|
||
§ plugin.team_commits.files.action.removed: 已删除
|
||
§ plugin.team_commits.files.action.modification: 已修改
|
||
§ plugin.team_commits.files.action.renamed: 已重命名
|
||
§ plugin.team_commits.files.action.typeChange: 扩展名变更
|
||
§ plugin.team_commits.files.action.unmerged: merge 冲突
|
||
§ plugin.team_commits.files.action.unknown: 未知
|
||
§ plugin.team_commits.files.addedRemoved: 新增 / 删除
|
||
§ plugin.team_commits.files.changed: 已更改
|
||
§ plugin.team_commits.files.line: 行
|
||
§ plugin.team_commits.files.path: 路径
|
||
§ plugin.team_commits.info.date: commit 日期
|
||
§ plugin.team_commits.info.location: 可能所在地
|
||
§ plugin.team_commits.info.task: 任务
|
||
§ plugin.team_commits.info.email: 电子邮箱
|
||
§ plugin.team_commits.info.company: 公司
|
||
§ plugin.team_commits.info.device: 设备
|
||
§ plugin.team_commits.info.release: 此 commit 可能进入的发布列表
|
||
§ plugin.team_commits.info.release.title: 发布
|
||
§ plugin.team_commits.info.release.releaseDateMerge: 已发布
|
||
§ plugin.team_commits.info.release.prDateMerge: 已合并
|
||
`};function Yk(t,e,s){if(!t)return[];const n=e.pr.totalInfoByName,r=e.release.release,u=[];return t.releaseIds.forEach(c=>{const p=r[c];s&&s>p.dateMerge||t.prIds.forEach(_=>{if(!p.prIds.includes(_))return;const h=n.get(_);s&&s>h.dateMerge||u.push({releaseTitle:p.title,releaseDateMerge:p.dateMerge,prId:_,prExternalId:h.prExternalId,prDateMerge:h.dateMergeFull})})}),u.reverse()}function MI({commit:t}){return o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(ke,{value:Fr(t.date),icon:"./assets/cards/day.svg",title:"plugin.team_commits.info.date"}),o.jsx(ke,{value:t.country,icon:"./assets/cards/location.svg",title:"plugin.team_commits.info.location"})]}),o.jsxs(Q,{children:[o.jsx(Y,{value:t.device,children:o.jsx(ke,{value:t.task,icon:"./assets/cards/tasks.svg",title:"plugin.team_commits.info.task"})}),o.jsx(Y,{value:!t.device,children:o.jsx(ke,{value:t.email,icon:"./assets/cards/mail.svg",title:"plugin.team_commits.info.email"})}),o.jsx(ke,{value:t.device,icon:"./assets/cards/device.svg",title:"plugin.team_commits.info.device"}),o.jsx(Y,{value:!t.device,children:o.jsx(ke,{value:t.task,icon:"./assets/cards/tasks.svg",title:"plugin.team_commits.info.task"})}),o.jsx(Y,{value:!t.device&&!t.task,children:o.jsx(ke,{value:t.company,icon:"./assets/cards/employees.svg",title:"plugin.team_commits.info.company"})})]})]})}function RI({response:t,updateSort:e,rowsForExcel:s,mode:n}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:"details",type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{template:C.STRING,title:"plugin.team_commits.info.release.title",width:120,properties:"releaseTitle"}),o.jsx(w,{template:C.STRING,title:"plugin.team_commits.info.release.releaseDateMerge",width:150,properties:"releaseDateMerge",formatter:oe}),o.jsx(w,{width:80,template:r=>o.jsx(Hs,{prId:r.prExternalId},r.prId)}),o.jsx(w,{template:C.STRING,title:"plugin.team_commits.info.release.prDateMerge",properties:"prDateMerge",formatter:Fr})]}):null}function EI({response:t,updateSort:e,rowsForExcel:s,mode:n}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:"details",type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isSortable:!0,title:"plugin.team_commits.files.action.title",properties:"action",formatter:r=>({A:"plugin.team_commits.files.action.added",C:"plugin.team_commits.files.action.copy",D:"plugin.team_commits.files.action.removed",M:"plugin.team_commits.files.action.modification",R:"plugin.team_commits.files.action.renamed",T:"plugin.team_commits.files.action.typeChange",U:"plugin.team_commits.files.action.unmerged",X:"plugin.team_commits.files.action.unknown"})[r||""]||r,template:C.TAGS,width:100}),o.jsx(w,{template:C.NUMBER,properties:"addedRemoved",formatter:r=>r>0?`+${r}`:r,width:60}),o.jsx(w,{isSortable:!0,title:"plugin.team_commits.files.addedRemoved",properties:"addedRemoved",width:150,template:r=>o.jsx(ue,{value:r<0?r*-1:r,max:100,suffix:"plugin.team_commits.files.line"})}),o.jsx(w,{template:C.NUMBER,properties:"changed",width:60}),o.jsx(w,{isSortable:!0,title:"plugin.team_commits.files.changed",properties:"changed",width:150,template:r=>o.jsx(ue,{value:r,max:100,suffix:"plugin.team_commits.files.line"})}),o.jsx(w,{template:C.STRING,title:"plugin.team_commits.files.path",properties:"path"})]}):null}const II=U(({commit:t})=>{if(!t)return null;const e=A.statisticsByCommits.tasks.totalInfoByName.get(t.task),s=Yk(e,A.statisticsByCommits,t.milliseconds),n=((t==null?void 0:t.fileChanges)||[]).map(r=>({action:r.action,addedRemoved:r.removedLines?r.removedLines*-1:r.addedLines,added:r.addedLines,removed:r.removedLines,changed:r.changedLines,path:r.path}));return o.jsxs(o.Fragment,{children:[o.jsx(nt,{height:"xxl"}),o.jsx(G,{title:"plugin.team_commits.details.title"}),o.jsx(MI,{commit:t}),o.jsxs(Y,{value:s,children:[o.jsx(nt,{height:"l"}),o.jsx(G,{title:"plugin.team_commits.info.release"})]}),o.jsxs(be,{content:s,children:[o.jsx(RI,{mode:"details"}),o.jsx(fe,{})]}),o.jsxs(Y,{value:n,children:[o.jsx(nt,{height:"l"}),o.jsx(G,{title:"plugin.team_commits.files.title"})]}),o.jsxs(be,{content:n,children:[o.jsx(EI,{rowsForExcel:n,mode:"details"}),o.jsx(fe,{})]})]})});function qI({response:t,updateSort:e,rowsForExcel:s,mode:n}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,template:C.DETAILS,width:40,formatter:r=>o.jsx(II,{commit:r})}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"common.statistic.Date",properties:"milliseconds",width:180,formatter:Fr}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_commits.results.author",properties:"author",width:158}),o.jsx(w,{isSortable:!0,template:r=>o.jsx(Ri,{task:r}),title:"plugin.team_commits.results.task",properties:"task",width:120}),o.jsx(w,{template:C.STRING,title:"plugin.team_commits.results.message",properties:"message"})]}):null}function OI(t){const e={},s={};return t.forEach(r=>{Ce(e,String(r.year)),Ce(s,String(r.author))}),[Object.keys(e).sort().reverse(),e,s]}const $I=U(({rows:t})=>{if(!t||!(t!=null&&t.length))return null;const e=A.statisticsByCommits.author.list,[s,n,r]=T.useMemo(()=>OI(t),[t]);return o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_commits.yearChart.title",suffix:"common.statistic.commits",order:s,limit:1,details:n})}),o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_commits.authorChart.title",suffix:"common.statistic.commits",order:e,limit:3,details:r})})]})}),LI=U(({mode:t})=>{const e=T.useMemo(()=>Ct.get("commits").filter(p=>!p.commitType).reverse(),[A.hash]),[s,n]=T.useState(e),[r,u]=T.useState(""),c=(s==null?void 0:s.length)>8;return o.jsxs(o.Fragment,{children:[o.jsxs(Y,{value:t!=="print",children:[o.jsx(G,{title:"common.filters"}),o.jsx(Ei,{content:e,mode:"sort-by-searchIndex",properties:"message",examples:["hack","password","prod","token","key","env"],onChange:(p,_)=>{n(p),u(_)}})]}),o.jsxs(Y,{value:c,children:[o.jsx(G,{title:"plugin.team_commits.chart.title"}),o.jsx($I,{rows:s})]}),o.jsx(Y,{value:s,children:o.jsx(G,{title:"plugin.team_commits.results.title"})}),o.jsxs(be,{content:s,watch:r,children:[o.jsx(qI,{rowsForExcel:s}),o.jsx(Le,{}),o.jsx(fe,{})]})]})});let BI=(_l=class{constructor(){this.dependencies=["author","tasks","pr","release"]}getMenuItems(){return[{id:"commits",group:50,order:190,link:"/team/commits",title:"plugin.team_commits.sidebar",icon:"./assets/menu/pull-request.svg"}]}getPage(e){return e==="/team/commits"?o.jsx(LI,{}):void 0}getTranslations(){return NI}},_l.id="team_commits",_l);const PI={ar:`
|
||
§ plugin.team_companies.sidebar: الشركات
|
||
§ plugin.team_companies.title: التفاصيل
|
||
§ plugin.team_companies.charts.employments.title: حسب عدد الموظفين
|
||
§ plugin.team_companies.charts.employments.item: موظفون
|
||
§ plugin.team_companies.charts.daysChart.title: حسب مدة العقد
|
||
§ plugin.team_companies.charts.daysChart.item: شركات
|
||
§ plugin.team_companies.companies.company: الشركة
|
||
§ plugin.team_companies.companies.status: الحالة
|
||
§ plugin.team_companies.companies.active.yes: نشطة
|
||
§ plugin.team_companies.companies.active.no: انتهت صلاحية العقد
|
||
§ plugin.team_companies.companies.active.none: outstaff (؟)
|
||
§ plugin.team_companies.companies.from: أول commit
|
||
§ plugin.team_companies.companies.to: آخر commit
|
||
§ plugin.team_companies.companies.totalDays: أيام العمل
|
||
§ plugin.team_companies.companies.totalTasks: المهام
|
||
§ plugin.team_companies.companies.totalTaskCodes: الأقسام
|
||
§ plugin.team_companies.companies.totalAuthors: الموظفون
|
||
§ plugin.team_companies.details.activeAuthors.title: يعمل / غادر
|
||
§ plugin.team_companies.details.activeAuthors.description: إذا لم يُجرِ الموظف أي commit خلال شهر، يُعدّ قد غادر. تُعرض الحالة للموظفين دون ارتباط بهذه الشركة: قد يعملون باسم شركة أخرى أو يُستبعدون من المشروع بالكامل.
|
||
§ plugin.team_companies.details.linesInTask.title: أسطر التعليمات البرمجية لكل مهمة
|
||
§ plugin.team_companies.details.linesInTask.description: المتوسط المرجّح لعدد أسطر التعليمات البرمجية لكل مهمة. يساعد على تقدير دقة المهام.
|
||
§ plugin.team_companies.details.totalTasks.title: مهام كانت قيد العمل
|
||
§ plugin.team_companies.details.totalTasks.description: يُحتسب أي ذكر لمعرّف مهمة فريد. قد لا تكون المهمة مغلقة في متعقّب المهام.
|
||
§ plugin.team_companies.details.moneyInMonth.title: تكلفة التطوير شهريًا
|
||
§ plugin.team_companies.details.moneyAll.title: التكلفة على مدار الفترة
|
||
§ plugin.team_companies.details.totalDays.title: مدة العقد
|
||
§ plugin.team_companies.details.mainLocation.title: المكتب الرئيسي
|
||
§ plugin.team_companies.taskCodes.title: الأقسام التي تحتوي على commits لهذه الشركة
|
||
§ plugin.team_companies.taskCodes.taskCode: القسم
|
||
§ plugin.team_companies.taskCodes.status: الحالة
|
||
§ plugin.team_companies.taskCodes.totalAuthors: الموظفون
|
||
§ plugin.team_companies.taskCodes.totalDays: أيام العمل
|
||
§ plugin.team_companies.taskCodes.totalTasks: المهام
|
||
§ plugin.team_companies.taskCodes.active.yes: التطوير جارٍ
|
||
§ plugin.team_companies.taskCodes.active.no: لا توجد مهام جديدة
|
||
§ plugin.team_companies.employments.title: الموظفون الذين أجروا commits باسم هذه الشركة
|
||
§ plugin.team_companies.employments.author: الموظف
|
||
§ plugin.team_companies.employments.status: الحالة
|
||
§ plugin.team_companies.employments.totalDays: أيام العمل
|
||
§ plugin.team_companies.employments.totalTasks: المهام
|
||
`,de:`
|
||
§ plugin.team_companies.sidebar: Unternehmen
|
||
§ plugin.team_companies.title: Details
|
||
§ plugin.team_companies.charts.employments.title: Nach Anzahl der Mitarbeiter
|
||
§ plugin.team_companies.charts.employments.item: Mitarbeiter
|
||
§ plugin.team_companies.charts.daysChart.title: Nach Vertragsdauer
|
||
§ plugin.team_companies.charts.daysChart.item: Unternehmen
|
||
§ plugin.team_companies.companies.company: Unternehmen
|
||
§ plugin.team_companies.companies.status: Status
|
||
§ plugin.team_companies.companies.active.yes: aktiv
|
||
§ plugin.team_companies.companies.active.no: Vertrag abgelaufen
|
||
§ plugin.team_companies.companies.active.none: Outstaff (?)
|
||
§ plugin.team_companies.companies.from: Erster commit
|
||
§ plugin.team_companies.companies.to: Letzter commit
|
||
§ plugin.team_companies.companies.totalDays: Arbeitstage
|
||
§ plugin.team_companies.companies.totalTasks: Aufgaben
|
||
§ plugin.team_companies.companies.totalTaskCodes: Abteilungen
|
||
§ plugin.team_companies.companies.totalAuthors: Mitarbeiter
|
||
§ plugin.team_companies.details.activeAuthors.title: arbeitet / hat verlassen
|
||
§ plugin.team_companies.details.activeAuthors.description: Wenn ein Mitarbeiter innerhalb eines Monats keinen einzigen commit durchführt, gilt er als ausgeschieden. Der Status wird für Mitarbeiter unabhängig von diesem Unternehmen angezeigt: Sie können im Auftrag eines anderen Unternehmens arbeiten oder vollständig aus dem Projekt entfernt worden sein.
|
||
§ plugin.team_companies.details.linesInTask.title: Codezeilen pro Aufgabe
|
||
§ plugin.team_companies.details.linesInTask.description: Gewichtete durchschnittliche Anzahl von Codezeilen pro Aufgabe. Hilft bei der Einschätzung der Aufgabengranularität.
|
||
§ plugin.team_companies.details.totalTasks.title: Aufgaben waren in Bearbeitung
|
||
§ plugin.team_companies.details.totalTasks.description: Jede Erwähnung einer eindeutigen Aufgaben-ID wird gezählt. Die Aufgabe wurde möglicherweise nicht im Aufgabentracker geschlossen.
|
||
§ plugin.team_companies.details.moneyInMonth.title: Entwicklungskosten pro Monat
|
||
§ plugin.team_companies.details.moneyAll.title: Kosten im Zeitverlauf
|
||
§ plugin.team_companies.details.totalDays.title: Vertragsdauer
|
||
§ plugin.team_companies.details.mainLocation.title: Hauptsitz
|
||
§ plugin.team_companies.taskCodes.title: Abteilungen mit commits dieses Unternehmens
|
||
§ plugin.team_companies.taskCodes.taskCode: Abteilung
|
||
§ plugin.team_companies.taskCodes.status: Status
|
||
§ plugin.team_companies.taskCodes.totalAuthors: Mitarbeiter
|
||
§ plugin.team_companies.taskCodes.totalDays: Arbeitstage
|
||
§ plugin.team_companies.taskCodes.totalTasks: Aufgaben
|
||
§ plugin.team_companies.taskCodes.active.yes: Entwicklung im Gange
|
||
§ plugin.team_companies.taskCodes.active.no: Keine neuen Aufgaben
|
||
§ plugin.team_companies.employments.title: Mitarbeiter, die commits im Namen dieses Unternehmens gemacht haben
|
||
§ plugin.team_companies.employments.author: Mitarbeiter
|
||
§ plugin.team_companies.employments.status: Status
|
||
§ plugin.team_companies.employments.totalDays: Arbeitstage
|
||
§ plugin.team_companies.employments.totalTasks: Aufgaben
|
||
`,en:`
|
||
§ plugin.team_companies.sidebar: Companies
|
||
§ plugin.team_companies.title: Details
|
||
§ plugin.team_companies.charts.employments.title: By number of staff members
|
||
§ plugin.team_companies.charts.employments.item: staff members
|
||
§ plugin.team_companies.charts.daysChart.title: By contract duration
|
||
§ plugin.team_companies.charts.daysChart.item: companies
|
||
§ plugin.team_companies.companies.company: Company
|
||
§ plugin.team_companies.companies.status: Status
|
||
§ plugin.team_companies.companies.active.yes: active
|
||
§ plugin.team_companies.companies.active.no: contract expired
|
||
§ plugin.team_companies.companies.active.none: outstaff (?)
|
||
§ plugin.team_companies.companies.from: First commit
|
||
§ plugin.team_companies.companies.to: Last commit
|
||
§ plugin.team_companies.companies.totalDays: Working days
|
||
§ plugin.team_companies.companies.totalTasks: Tasks
|
||
§ plugin.team_companies.companies.totalTaskCodes: Departments
|
||
§ plugin.team_companies.companies.totalAuthors: Staff members
|
||
§ plugin.team_companies.details.activeAuthors.title: works / left
|
||
§ plugin.team_companies.details.activeAuthors.description: If a staff member did not make a single commit within a month, they are considered to have left. The status is shown for staff members regardless of this company: they may work on behalf of another company or be removed from the project completely.
|
||
§ plugin.team_companies.details.linesInTask.title: lines of code per task
|
||
§ plugin.team_companies.details.linesInTask.description: Weighted average number of lines of code per task. Helps estimate task granularity.
|
||
§ plugin.team_companies.details.totalTasks.title: tasks were in work
|
||
§ plugin.team_companies.details.totalTasks.description: Any mention of a unique task ID is counted. The task may not have been closed in the task tracker.
|
||
§ plugin.team_companies.details.moneyInMonth.title: development cost per month
|
||
§ plugin.team_companies.details.moneyAll.title: cost over time
|
||
§ plugin.team_companies.details.totalDays.title: contract duration
|
||
§ plugin.team_companies.details.mainLocation.title: head office
|
||
§ plugin.team_companies.taskCodes.title: Departments that have commits by this company
|
||
§ plugin.team_companies.taskCodes.taskCode: Department
|
||
§ plugin.team_companies.taskCodes.status: Status
|
||
§ plugin.team_companies.taskCodes.totalAuthors: Staff members
|
||
§ plugin.team_companies.taskCodes.totalDays: Working days
|
||
§ plugin.team_companies.taskCodes.totalTasks: Tasks
|
||
§ plugin.team_companies.taskCodes.active.yes: Development in progress
|
||
§ plugin.team_companies.taskCodes.active.no: No new tasks
|
||
§ plugin.team_companies.employments.title: Staff members who made commits on behalf of this company
|
||
§ plugin.team_companies.employments.author: Staff member
|
||
§ plugin.team_companies.employments.status: Status
|
||
§ plugin.team_companies.employments.totalDays: Working days
|
||
§ plugin.team_companies.employments.totalTasks: Tasks
|
||
`,es:`
|
||
§ plugin.team_companies.sidebar: Empresas
|
||
§ plugin.team_companies.title: Detalles
|
||
§ plugin.team_companies.charts.employments.title: Por número de empleados
|
||
§ plugin.team_companies.charts.employments.item: empleados
|
||
§ plugin.team_companies.charts.daysChart.title: Por duración del contrato
|
||
§ plugin.team_companies.charts.daysChart.item: empresas
|
||
§ plugin.team_companies.companies.company: Empresa
|
||
§ plugin.team_companies.companies.status: Estado
|
||
§ plugin.team_companies.companies.active.yes: activa
|
||
§ plugin.team_companies.companies.active.no: contrato vencido
|
||
§ plugin.team_companies.companies.active.none: outstaff (?)
|
||
§ plugin.team_companies.companies.from: Primer commit
|
||
§ plugin.team_companies.companies.to: Último commit
|
||
§ plugin.team_companies.companies.totalDays: Días laborables
|
||
§ plugin.team_companies.companies.totalTasks: Tareas
|
||
§ plugin.team_companies.companies.totalTaskCodes: Departamentos
|
||
§ plugin.team_companies.companies.totalAuthors: Empleados
|
||
§ plugin.team_companies.details.activeAuthors.title: trabaja / ha dejado
|
||
§ plugin.team_companies.details.activeAuthors.description: Si un empleado no realiza ningún commit durante un mes, se considera que ha dejado la empresa. El estado se muestra para los empleados independientemente de esta empresa: pueden trabajar en nombre de otra empresa o haber sido eliminados completamente del proyecto.
|
||
§ plugin.team_companies.details.linesInTask.title: líneas de código por tarea
|
||
§ plugin.team_companies.details.linesInTask.description: Número promedio ponderado de líneas de código por tarea. Ayuda a estimar la granularidad de las tareas.
|
||
§ plugin.team_companies.details.totalTasks.title: tareas estuvieron en curso
|
||
§ plugin.team_companies.details.totalTasks.description: Se cuenta cualquier mención de un ID de tarea único. Es posible que la tarea no se haya cerrado en el sistema de seguimiento de tareas.
|
||
§ plugin.team_companies.details.moneyInMonth.title: coste de desarrollo por mes
|
||
§ plugin.team_companies.details.moneyAll.title: coste a lo largo del tiempo
|
||
§ plugin.team_companies.details.totalDays.title: duración del contrato
|
||
§ plugin.team_companies.details.mainLocation.title: sede central
|
||
§ plugin.team_companies.taskCodes.title: Departamentos que tienen commits de esta empresa
|
||
§ plugin.team_companies.taskCodes.taskCode: Departamento
|
||
§ plugin.team_companies.taskCodes.status: Estado
|
||
§ plugin.team_companies.taskCodes.totalAuthors: Empleados
|
||
§ plugin.team_companies.taskCodes.totalDays: Días laborables
|
||
§ plugin.team_companies.taskCodes.totalTasks: Tareas
|
||
§ plugin.team_companies.taskCodes.active.yes: Desarrollo en curso
|
||
§ plugin.team_companies.taskCodes.active.no: No hay nuevas tareas
|
||
§ plugin.team_companies.employments.title: Empleados que hicieron commits en nombre de esta empresa
|
||
§ plugin.team_companies.employments.author: Empleado
|
||
§ plugin.team_companies.employments.status: Estado
|
||
§ plugin.team_companies.employments.totalDays: Días laborables
|
||
§ plugin.team_companies.employments.totalTasks: Tareas
|
||
`,fr:`
|
||
§ plugin.team_companies.sidebar: Entreprises
|
||
§ plugin.team_companies.title: Détails
|
||
§ plugin.team_companies.charts.employments.title: Par nombre de collaborateurs
|
||
§ plugin.team_companies.charts.employments.item: collaborateurs
|
||
§ plugin.team_companies.charts.daysChart.title: Par durée du contrat
|
||
§ plugin.team_companies.charts.daysChart.item: entreprises
|
||
§ plugin.team_companies.companies.company: Entreprise
|
||
§ plugin.team_companies.companies.status: Statut
|
||
§ plugin.team_companies.companies.active.yes: active
|
||
§ plugin.team_companies.companies.active.no: contrat expiré
|
||
§ plugin.team_companies.companies.active.none: outstaff (?)
|
||
§ plugin.team_companies.companies.from: Premier commit
|
||
§ plugin.team_companies.companies.to: Dernier commit
|
||
§ plugin.team_companies.companies.totalDays: Jours ouvrés
|
||
§ plugin.team_companies.companies.totalTasks: Tâches
|
||
§ plugin.team_companies.companies.totalTaskCodes: Départements
|
||
§ plugin.team_companies.companies.totalAuthors: Collaborateurs
|
||
§ plugin.team_companies.details.activeAuthors.title: travaille / a quitté
|
||
§ plugin.team_companies.details.activeAuthors.description: Si un collaborateur n’effectue aucun commit pendant un mois, il est considéré comme parti. Le statut est affiché pour les collaborateurs indépendamment de cette entreprise : ils peuvent travailler au nom d’une autre entreprise ou avoir été complètement retirés du projet.
|
||
§ plugin.team_companies.details.linesInTask.title: lignes de code par tâche
|
||
§ plugin.team_companies.details.linesInTask.description: Nombre moyen pondéré de lignes de code par tâche. Aide à estimer la granularité des tâches.
|
||
§ plugin.team_companies.details.totalTasks.title: tâches étaient en cours
|
||
§ plugin.team_companies.details.totalTasks.description: Toute mention d’un identifiant de tâche unique est comptée. La tâche peut ne pas avoir été clôturée dans le système de suivi des tâches.
|
||
§ plugin.team_companies.details.moneyInMonth.title: coût de développement par mois
|
||
§ plugin.team_companies.details.moneyAll.title: coût sur la période
|
||
§ plugin.team_companies.details.totalDays.title: durée du contrat
|
||
§ plugin.team_companies.details.mainLocation.title: siège social
|
||
§ plugin.team_companies.taskCodes.title: Départements qui ont des commits de cette entreprise
|
||
§ plugin.team_companies.taskCodes.taskCode: Département
|
||
§ plugin.team_companies.taskCodes.status: Statut
|
||
§ plugin.team_companies.taskCodes.totalAuthors: Collaborateurs
|
||
§ plugin.team_companies.taskCodes.totalDays: Jours ouvrés
|
||
§ plugin.team_companies.taskCodes.totalTasks: Tâches
|
||
§ plugin.team_companies.taskCodes.active.yes: Développement en cours
|
||
§ plugin.team_companies.taskCodes.active.no: Pas de nouvelles tâches
|
||
§ plugin.team_companies.employments.title: Collaborateurs qui ont effectué des commits au nom de cette entreprise
|
||
§ plugin.team_companies.employments.author: Collaborateur
|
||
§ plugin.team_companies.employments.status: Statut
|
||
§ plugin.team_companies.employments.totalDays: Jours ouvrés
|
||
§ plugin.team_companies.employments.totalTasks: Tâches
|
||
`,he:`
|
||
§ plugin.team_companies.sidebar: חברות
|
||
§ plugin.team_companies.title: פירוט
|
||
§ plugin.team_companies.charts.employments.title: לפי מספר עובדים
|
||
§ plugin.team_companies.charts.employments.item: עובדים
|
||
§ plugin.team_companies.charts.daysChart.title: לפי משך החוזה
|
||
§ plugin.team_companies.charts.daysChart.item: חברות
|
||
§ plugin.team_companies.companies.company: חברה
|
||
§ plugin.team_companies.companies.status: סטטוס
|
||
§ plugin.team_companies.companies.active.yes: פעילה
|
||
§ plugin.team_companies.companies.active.no: החוזה פג
|
||
§ plugin.team_companies.companies.active.none: outstaff (?)
|
||
§ plugin.team_companies.companies.from: ה-commit הראשון
|
||
§ plugin.team_companies.companies.to: ה-commit האחרון
|
||
§ plugin.team_companies.companies.totalDays: ימי עבודה
|
||
§ plugin.team_companies.companies.totalTasks: משימות
|
||
§ plugin.team_companies.companies.totalTaskCodes: מחלקות
|
||
§ plugin.team_companies.companies.totalAuthors: עובדים
|
||
§ plugin.team_companies.details.activeAuthors.title: עובד / עזב
|
||
§ plugin.team_companies.details.activeAuthors.description: אם עובד לא ביצע אף commit במשך חודש, הוא נחשב כמי שעזב. הסטטוס מוצג עבור עובדים ללא קשר לחברה זו: הם עשויים לעבוד בשם חברה אחרת או להיות מוסרים מהפרויקט לחלוטין.
|
||
§ plugin.team_companies.details.linesInTask.title: שורות קוד למשימה
|
||
§ plugin.team_companies.details.linesInTask.description: ממוצע משוקלל של מספר שורות הקוד למשימה. מסייע להעריך את רמת הפירוט של המשימות.
|
||
§ plugin.team_companies.details.totalTasks.title: משימות שהיו בעבודה
|
||
§ plugin.team_companies.details.totalTasks.description: כל אזכור של מזהה משימה ייחודי נספר. ייתכן שהמשימה לא נסגרה במערכת המעקב אחר משימות.
|
||
§ plugin.team_companies.details.moneyInMonth.title: עלות פיתוח לחודש
|
||
§ plugin.team_companies.details.moneyAll.title: עלות לאורך הזמן
|
||
§ plugin.team_companies.details.totalDays.title: משך החוזה
|
||
§ plugin.team_companies.details.mainLocation.title: משרד ראשי
|
||
§ plugin.team_companies.taskCodes.title: מחלקות שיש בהן commits של חברה זו
|
||
§ plugin.team_companies.taskCodes.taskCode: מחלקה
|
||
§ plugin.team_companies.taskCodes.status: סטטוס
|
||
§ plugin.team_companies.taskCodes.totalAuthors: עובדים
|
||
§ plugin.team_companies.taskCodes.totalDays: ימי עבודה
|
||
§ plugin.team_companies.taskCodes.totalTasks: משימות
|
||
§ plugin.team_companies.taskCodes.active.yes: הפיתוח מתבצע
|
||
§ plugin.team_companies.taskCodes.active.no: אין משימות חדשות
|
||
§ plugin.team_companies.employments.title: עובדים שביצעו commits בשם חברה זו
|
||
§ plugin.team_companies.employments.author: עובד
|
||
§ plugin.team_companies.employments.status: סטטוס
|
||
§ plugin.team_companies.employments.totalDays: ימי עבודה
|
||
§ plugin.team_companies.employments.totalTasks: משימות
|
||
`,hi:`
|
||
§ plugin.team_companies.sidebar: कंपनियाँ
|
||
§ plugin.team_companies.title: विवरण
|
||
§ plugin.team_companies.charts.employments.title: कर्मचारियों की संख्या के अनुसार
|
||
§ plugin.team_companies.charts.employments.item: कर्मचारी
|
||
§ plugin.team_companies.charts.daysChart.title: अनुबंध अवधि के अनुसार
|
||
§ plugin.team_companies.charts.daysChart.item: कंपनियाँ
|
||
§ plugin.team_companies.companies.company: कंपनी
|
||
§ plugin.team_companies.companies.status: स्थिति
|
||
§ plugin.team_companies.companies.active.yes: सक्रिय
|
||
§ plugin.team_companies.companies.active.no: अनुबंध समाप्त
|
||
§ plugin.team_companies.companies.active.none: outstaff (?)
|
||
§ plugin.team_companies.companies.from: पहला commit
|
||
§ plugin.team_companies.companies.to: अंतिम commit
|
||
§ plugin.team_companies.companies.totalDays: कार्य दिवस
|
||
§ plugin.team_companies.companies.totalTasks: कार्य
|
||
§ plugin.team_companies.companies.totalTaskCodes: विभाग
|
||
§ plugin.team_companies.companies.totalAuthors: कर्मचारी
|
||
§ plugin.team_companies.details.activeAuthors.title: कार्यरत / छोड़ चुके
|
||
§ plugin.team_companies.details.activeAuthors.description: यदि किसी कर्मचारी ने एक महीने में एक भी commit नहीं किया, तो उसे कार्य छोड़ चुका माना जाता है। स्थिति कर्मचारियों के लिए इस कंपनी से स्वतंत्र दिखाई जाती है: वे किसी अन्य कंपनी की ओर से काम कर सकते हैं या परियोजना से पूरी तरह हटाए जा सकते हैं।
|
||
§ plugin.team_companies.details.linesInTask.title: प्रति कार्य कोड पंक्तियाँ
|
||
§ plugin.team_companies.details.linesInTask.description: प्रति कार्य कोड पंक्तियों की भारित औसत संख्या। कार्यों की बारीकी का अनुमान लगाने में मदद करती है।
|
||
§ plugin.team_companies.details.totalTasks.title: कार्य जो प्रगति में थे
|
||
§ plugin.team_companies.details.totalTasks.description: किसी अद्वितीय कार्य ID का कोई भी उल्लेख गिना जाता है। कार्य ट्रैकर में कार्य बंद नहीं किया गया हो सकता है।
|
||
§ plugin.team_companies.details.moneyInMonth.title: प्रति माह विकास लागत
|
||
§ plugin.team_companies.details.moneyAll.title: पूरी अवधि की लागत
|
||
§ plugin.team_companies.details.totalDays.title: अनुबंध अवधि
|
||
§ plugin.team_companies.details.mainLocation.title: मुख्य कार्यालय
|
||
§ plugin.team_companies.taskCodes.title: विभाग जिनमें इस कंपनी के commits हैं
|
||
§ plugin.team_companies.taskCodes.taskCode: विभाग
|
||
§ plugin.team_companies.taskCodes.status: स्थिति
|
||
§ plugin.team_companies.taskCodes.totalAuthors: कर्मचारी
|
||
§ plugin.team_companies.taskCodes.totalDays: कार्य दिवस
|
||
§ plugin.team_companies.taskCodes.totalTasks: कार्य
|
||
§ plugin.team_companies.taskCodes.active.yes: विकास जारी है
|
||
§ plugin.team_companies.taskCodes.active.no: कोई नए कार्य नहीं
|
||
§ plugin.team_companies.employments.title: कर्मचारी जिन्होंने इस कंपनी की ओर से commits किए
|
||
§ plugin.team_companies.employments.author: कर्मचारी
|
||
§ plugin.team_companies.employments.status: स्थिति
|
||
§ plugin.team_companies.employments.totalDays: कार्य दिवस
|
||
§ plugin.team_companies.employments.totalTasks: कार्य
|
||
`,ja:`
|
||
§ plugin.team_companies.sidebar: 企業
|
||
§ plugin.team_companies.title: 詳細
|
||
§ plugin.team_companies.charts.employments.title: 従業員数別
|
||
§ plugin.team_companies.charts.employments.item: 従業員
|
||
§ plugin.team_companies.charts.daysChart.title: 契約期間別
|
||
§ plugin.team_companies.charts.daysChart.item: 企業
|
||
§ plugin.team_companies.companies.company: 企業
|
||
§ plugin.team_companies.companies.status: ステータス
|
||
§ plugin.team_companies.companies.active.yes: 稼働中
|
||
§ plugin.team_companies.companies.active.no: 契約終了
|
||
§ plugin.team_companies.companies.active.none: outstaff (?)
|
||
§ plugin.team_companies.companies.from: 最初の commit
|
||
§ plugin.team_companies.companies.to: 最後の commit
|
||
§ plugin.team_companies.companies.totalDays: 稼働日数
|
||
§ plugin.team_companies.companies.totalTasks: タスク
|
||
§ plugin.team_companies.companies.totalTaskCodes: 部門
|
||
§ plugin.team_companies.companies.totalAuthors: 従業員
|
||
§ plugin.team_companies.details.activeAuthors.title: 在籍 / 退職
|
||
§ plugin.team_companies.details.activeAuthors.description: 従業員が1か月間一度も commit しなかった場合、退職したと見なされます。ステータスはこの企業に限らず表示されます。別企業の名義で働いているか、プロジェクトから完全に除外されている可能性があります。
|
||
§ plugin.team_companies.details.linesInTask.title: タスクあたりのコード行数
|
||
§ plugin.team_companies.details.linesInTask.description: タスクあたりのコード行数の加重平均値。タスクの粒度を推定するのに役立ちます。
|
||
§ plugin.team_companies.details.totalTasks.title: 担当していたタスク
|
||
§ plugin.team_companies.details.totalTasks.description: 固有のタスク ID の言及があればすべてカウントされます。タスクトラッカーでタスクがクローズされていない場合があります。
|
||
§ plugin.team_companies.details.moneyInMonth.title: 月間開発コスト
|
||
§ plugin.team_companies.details.moneyAll.title: 期間全体のコスト
|
||
§ plugin.team_companies.details.totalDays.title: 契約期間
|
||
§ plugin.team_companies.details.mainLocation.title: 本社
|
||
§ plugin.team_companies.taskCodes.title: この企業の commit がある部門
|
||
§ plugin.team_companies.taskCodes.taskCode: 部門
|
||
§ plugin.team_companies.taskCodes.status: ステータス
|
||
§ plugin.team_companies.taskCodes.totalAuthors: 従業員
|
||
§ plugin.team_companies.taskCodes.totalDays: 稼働日数
|
||
§ plugin.team_companies.taskCodes.totalTasks: タスク
|
||
§ plugin.team_companies.taskCodes.active.yes: 開発中
|
||
§ plugin.team_companies.taskCodes.active.no: 新しいタスクなし
|
||
§ plugin.team_companies.employments.title: この企業の名義で commit した従業員
|
||
§ plugin.team_companies.employments.author: 従業員
|
||
§ plugin.team_companies.employments.status: ステータス
|
||
§ plugin.team_companies.employments.totalDays: 稼働日数
|
||
§ plugin.team_companies.employments.totalTasks: タスク
|
||
`,ko:`
|
||
§ plugin.team_companies.sidebar: 회사
|
||
§ plugin.team_companies.title: 세부 정보
|
||
§ plugin.team_companies.charts.employments.title: 직원 수별
|
||
§ plugin.team_companies.charts.employments.item: 직원
|
||
§ plugin.team_companies.charts.daysChart.title: 계약 기간별
|
||
§ plugin.team_companies.charts.daysChart.item: 회사
|
||
§ plugin.team_companies.companies.company: 회사
|
||
§ plugin.team_companies.companies.status: 상태
|
||
§ plugin.team_companies.companies.active.yes: 활성
|
||
§ plugin.team_companies.companies.active.no: 계약 만료
|
||
§ plugin.team_companies.companies.active.none: outstaff (?)
|
||
§ plugin.team_companies.companies.from: 첫 commit
|
||
§ plugin.team_companies.companies.to: 마지막 commit
|
||
§ plugin.team_companies.companies.totalDays: 근무일
|
||
§ plugin.team_companies.companies.totalTasks: 작업
|
||
§ plugin.team_companies.companies.totalTaskCodes: 부서
|
||
§ plugin.team_companies.companies.totalAuthors: 직원
|
||
§ plugin.team_companies.details.activeAuthors.title: 근무 / 퇴사
|
||
§ plugin.team_companies.details.activeAuthors.description: 직원이 한 달 동안 commit을 하나도 하지 않으면 퇴사한 것으로 간주됩니다. 상태는 이 회사와 무관하게 표시됩니다. 다른 회사 명의로 근무 중이거나 프로젝트에서 완전히 제외된 경우일 수 있습니다.
|
||
§ plugin.team_companies.details.linesInTask.title: 작업당 코드 줄 수
|
||
§ plugin.team_companies.details.linesInTask.description: 작업당 코드 줄 수의 가중 평균. 작업의 세분화 정도를 추정하는 데 도움이 됩니다.
|
||
§ plugin.team_companies.details.totalTasks.title: 진행된 작업
|
||
§ plugin.team_companies.details.totalTasks.description: 고유한 작업 ID가 언급된 경우 모두 집계됩니다. 작업 트래커에서 작업이 종료되지 않았을 수 있습니다.
|
||
§ plugin.team_companies.details.moneyInMonth.title: 월간 개발 비용
|
||
§ plugin.team_companies.details.moneyAll.title: 기간 전체 비용
|
||
§ plugin.team_companies.details.totalDays.title: 계약 기간
|
||
§ plugin.team_companies.details.mainLocation.title: 본사
|
||
§ plugin.team_companies.taskCodes.title: 이 회사의 commit이 있는 부서
|
||
§ plugin.team_companies.taskCodes.taskCode: 부서
|
||
§ plugin.team_companies.taskCodes.status: 상태
|
||
§ plugin.team_companies.taskCodes.totalAuthors: 직원
|
||
§ plugin.team_companies.taskCodes.totalDays: 근무일
|
||
§ plugin.team_companies.taskCodes.totalTasks: 작업
|
||
§ plugin.team_companies.taskCodes.active.yes: 개발 중
|
||
§ plugin.team_companies.taskCodes.active.no: 새로운 작업 없음
|
||
§ plugin.team_companies.employments.title: 이 회사 명의로 commit한 직원
|
||
§ plugin.team_companies.employments.author: 직원
|
||
§ plugin.team_companies.employments.status: 상태
|
||
§ plugin.team_companies.employments.totalDays: 근무일
|
||
§ plugin.team_companies.employments.totalTasks: 작업
|
||
`,pt:`
|
||
§ plugin.team_companies.sidebar: Empresas
|
||
§ plugin.team_companies.title: Detalhes
|
||
§ plugin.team_companies.charts.employments.title: Por número de colaboradores
|
||
§ plugin.team_companies.charts.employments.item: colaboradores
|
||
§ plugin.team_companies.charts.daysChart.title: Por duração do contrato
|
||
§ plugin.team_companies.charts.daysChart.item: empresas
|
||
§ plugin.team_companies.companies.company: Empresa
|
||
§ plugin.team_companies.companies.status: Status
|
||
§ plugin.team_companies.companies.active.yes: ativa
|
||
§ plugin.team_companies.companies.active.no: contrato expirado
|
||
§ plugin.team_companies.companies.active.none: outstaff (?)
|
||
§ plugin.team_companies.companies.from: Primeiro commit
|
||
§ plugin.team_companies.companies.to: Último commit
|
||
§ plugin.team_companies.companies.totalDays: Dias úteis
|
||
§ plugin.team_companies.companies.totalTasks: Tarefas
|
||
§ plugin.team_companies.companies.totalTaskCodes: Departamentos
|
||
§ plugin.team_companies.companies.totalAuthors: Colaboradores
|
||
§ plugin.team_companies.details.activeAuthors.title: trabalha / saiu
|
||
§ plugin.team_companies.details.activeAuthors.description: Se um colaborador não fizer nenhum commit durante um mês, considera-se que saiu. O status é mostrado para os colaboradores independentemente desta empresa: eles podem trabalhar em nome de outra empresa ou ter sido removidos completamente do projeto.
|
||
§ plugin.team_companies.details.linesInTask.title: linhas de código por tarefa
|
||
§ plugin.team_companies.details.linesInTask.description: Número médio ponderado de linhas de código por tarefa. Ajuda a estimar a granularidade das tarefas.
|
||
§ plugin.team_companies.details.totalTasks.title: tarefas estiveram em andamento
|
||
§ plugin.team_companies.details.totalTasks.description: Qualquer menção a um ID de tarefa único é contada. A tarefa pode não ter sido fechada no sistema de acompanhamento de tarefas.
|
||
§ plugin.team_companies.details.moneyInMonth.title: custo de desenvolvimento por mês
|
||
§ plugin.team_companies.details.moneyAll.title: custo ao longo do tempo
|
||
§ plugin.team_companies.details.totalDays.title: duração do contrato
|
||
§ plugin.team_companies.details.mainLocation.title: sede
|
||
§ plugin.team_companies.taskCodes.title: Departamentos que têm commits desta empresa
|
||
§ plugin.team_companies.taskCodes.taskCode: Departamento
|
||
§ plugin.team_companies.taskCodes.status: Status
|
||
§ plugin.team_companies.taskCodes.totalAuthors: Colaboradores
|
||
§ plugin.team_companies.taskCodes.totalDays: Dias úteis
|
||
§ plugin.team_companies.taskCodes.totalTasks: Tarefas
|
||
§ plugin.team_companies.taskCodes.active.yes: Desenvolvimento em andamento
|
||
§ plugin.team_companies.taskCodes.active.no: Sem novas tarefas
|
||
§ plugin.team_companies.employments.title: Colaboradores que fizeram commits em nome desta empresa
|
||
§ plugin.team_companies.employments.author: Colaborador
|
||
§ plugin.team_companies.employments.status: Status
|
||
§ plugin.team_companies.employments.totalDays: Dias úteis
|
||
§ plugin.team_companies.employments.totalTasks: Tarefas
|
||
`,ru:`
|
||
§ plugin.team_companies.sidebar: Компании
|
||
§ plugin.team_companies.title: Детализация
|
||
§ plugin.team_companies.charts.employments.title: По количеству сотрудников
|
||
§ plugin.team_companies.charts.employments.item: сотрудников
|
||
§ plugin.team_companies.charts.daysChart.title: По длительности контракта
|
||
§ plugin.team_companies.charts.daysChart.item: компаний
|
||
§ plugin.team_companies.companies.company: Компания
|
||
§ plugin.team_companies.companies.status: Статус
|
||
§ plugin.team_companies.companies.active.yes: активна
|
||
§ plugin.team_companies.companies.active.no: контракт истёк
|
||
§ plugin.team_companies.companies.active.none: аутстафф (?)
|
||
§ plugin.team_companies.companies.from: Первый коммит
|
||
§ plugin.team_companies.companies.to: Последний коммит
|
||
§ plugin.team_companies.companies.totalDays: Рабочих дней
|
||
§ plugin.team_companies.companies.totalTasks: Задач
|
||
§ plugin.team_companies.companies.totalTaskCodes: Отделов
|
||
§ plugin.team_companies.companies.totalAuthors: Сотрудников
|
||
§ plugin.team_companies.banner.title: расширенная информация о компании
|
||
§ plugin.team_companies.details.activeAuthors.title: работает / уволилось
|
||
§ plugin.team_companies.details.activeAuthors.description: Если сотрудник в течении месяца не сделал ни одного коммита, он считается уволенным. Статус показан относительно сотрудников, без привязки к этой компании. Работает от лица другой компании или убран из проекта полностью.
|
||
§ plugin.team_companies.details.linesInTask.title: строк кода на задачу
|
||
§ plugin.team_companies.details.linesInTask.description: Средневзвешенное количество строк кода на одну задачу. Помогает оценить гранулярность задач.
|
||
§ plugin.team_companies.details.totalTasks.title: задач было в работе
|
||
§ plugin.team_companies.details.totalTasks.description: Считается любое упоминание уникального номера задачи. Задача могла быть не закрыта в таск-трекере.
|
||
§ plugin.team_companies.details.moneyInMonth.title: стоимость разработки в месяц
|
||
§ plugin.team_companies.details.moneyAll.title: стоимость за всё время
|
||
§ plugin.team_companies.details.totalDays.title: продолжительность контракта
|
||
§ plugin.team_companies.details.mainLocation.title: центральный офис
|
||
§ plugin.team_companies.taskCodes.title: Отделы, в которых есть коммиты этой компании
|
||
§ plugin.team_companies.taskCodes.taskCode: Отдел
|
||
§ plugin.team_companies.taskCodes.status: Статус
|
||
§ plugin.team_companies.taskCodes.totalAuthors: Сотрудников
|
||
§ plugin.team_companies.taskCodes.totalDays: Рабочих дней
|
||
§ plugin.team_companies.taskCodes.totalTasks: Задач
|
||
§ plugin.team_companies.taskCodes.active.yes: Идёт разработка
|
||
§ plugin.team_companies.taskCodes.active.no: Новых задач нет
|
||
§ plugin.team_companies.employments.title: Сотрудники, которые делали коммиты от этой компании
|
||
§ plugin.team_companies.employments.author: Сотрудник
|
||
§ plugin.team_companies.employments.status: Статус
|
||
§ plugin.team_companies.employments.totalDays: Рабочих дней
|
||
§ plugin.team_companies.employments.totalTasks: Задач
|
||
`,zh:`
|
||
§ plugin.team_companies.sidebar: 公司
|
||
§ plugin.team_companies.title: 详细信息
|
||
§ plugin.team_companies.charts.employments.title: 按员工人数
|
||
§ plugin.team_companies.charts.employments.item: 员工
|
||
§ plugin.team_companies.charts.daysChart.title: 按合同期限
|
||
§ plugin.team_companies.charts.daysChart.item: 公司
|
||
§ plugin.team_companies.companies.company: 公司
|
||
§ plugin.team_companies.companies.status: 状态
|
||
§ plugin.team_companies.companies.active.yes: 活跃
|
||
§ plugin.team_companies.companies.active.no: 合同已过期
|
||
§ plugin.team_companies.companies.active.none: outstaff (?)
|
||
§ plugin.team_companies.companies.from: 首次 commit
|
||
§ plugin.team_companies.companies.to: 最后一次 commit
|
||
§ plugin.team_companies.companies.totalDays: 工作日
|
||
§ plugin.team_companies.companies.totalTasks: 任务
|
||
§ plugin.team_companies.companies.totalTaskCodes: 部门
|
||
§ plugin.team_companies.companies.totalAuthors: 员工
|
||
§ plugin.team_companies.details.activeAuthors.title: 在职 / 离职
|
||
§ plugin.team_companies.details.activeAuthors.description: 如果员工在一个月内没有任何 commit,则视为已离职。该状态不绑定本公司:他们可能以其他公司名义工作,或已完全从项目中移除。
|
||
§ plugin.team_companies.details.linesInTask.title: 每个任务的代码行数
|
||
§ plugin.team_companies.details.linesInTask.description: 每个任务代码行数的加权平均值。有助于估算任务的粒度。
|
||
§ plugin.team_companies.details.totalTasks.title: 曾处于处理中的任务
|
||
§ plugin.team_companies.details.totalTasks.description: 任何提及唯一任务 ID 的记录都会被计入。该任务可能尚未在任务跟踪系统中关闭。
|
||
§ plugin.team_companies.details.moneyInMonth.title: 每月开发成本
|
||
§ plugin.team_companies.details.moneyAll.title: 整个期间的成本
|
||
§ plugin.team_companies.details.totalDays.title: 合同期限
|
||
§ plugin.team_companies.details.mainLocation.title: 总部
|
||
§ plugin.team_companies.taskCodes.title: 有该公司 commits 的部门
|
||
§ plugin.team_companies.taskCodes.taskCode: 部门
|
||
§ plugin.team_companies.taskCodes.status: 状态
|
||
§ plugin.team_companies.taskCodes.totalAuthors: 员工
|
||
§ plugin.team_companies.taskCodes.totalDays: 工作日
|
||
§ plugin.team_companies.taskCodes.totalTasks: 任务
|
||
§ plugin.team_companies.taskCodes.active.yes: 开发进行中
|
||
§ plugin.team_companies.taskCodes.active.no: 无新任务
|
||
§ plugin.team_companies.employments.title: 以该公司名义进行 commits 的员工
|
||
§ plugin.team_companies.employments.author: 员工
|
||
§ plugin.team_companies.employments.status: 状态
|
||
§ plugin.team_companies.employments.totalDays: 工作日
|
||
§ plugin.team_companies.employments.totalTasks: 任务
|
||
`};function Qk({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const[r,u]=Mt(t,["totalDaysWorked","totalTasks"]);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:n,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,width:200,template:C.STRING,properties:"taskCode",title:"plugin.team_companies.taskCodes.taskCode"}),o.jsx(w,{properties:"isActive",width:140,title:"plugin.team_companies.taskCodes.status",formatter:c=>c?"plugin.team_companies.taskCodes.active.yes":{title:"plugin.team_companies.taskCodes.active.no",mode:yt.ERROR},template:C.TAGS}),o.jsx(w,{isSortable:!0,template:C.STRING,properties:"firstCommit",width:130,formatter:oe}),o.jsx(w,{isSortable:!0,template:C.STRING,properties:"lastCommit",width:130,formatter:oe}),o.jsx(w,{isSortable:!0,template:C.SHORT_NUMBER,properties:"totalAuthors",width:120,title:"plugin.team_companies.taskCodes.totalAuthors"}),o.jsx(w,{isSortable:!0,template:C.SHORT_NUMBER,properties:"totalDaysWorked",width:90}),o.jsx(w,{isSortable:!0,width:150,properties:"totalDaysWorked",title:"plugin.team_companies.taskCodes.totalDays",template:c=>o.jsx(ue,{value:c,max:r,suffix:"common.statistic.days"})}),o.jsx(w,{isSortable:!0,template:C.SHORT_NUMBER,properties:"totalTasks",width:90}),o.jsx(w,{isSortable:!0,properties:"totalTasks",title:"plugin.team_companies.taskCodes.totalTasks",template:c=>o.jsx(ue,{value:c,max:u,suffix:"common.statistic.tasks"})})]})}const Kk=U(({response:t,updateSort:e,rowsForExcel:s,mode:n})=>{const r=A.statisticsByCommits.author.totalInfoByName;if(!t)return null;const[u,c,p]=["plugin.team_departments.author.work","plugin.team_departments.author.dismissed","plugin.team_departments.author.staff"],[_,h]=Mt(t,["totalDaysWorked","totalTasks"]);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:n,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,width:200,template:C.STRING,properties:"author",title:"plugin.team_companies.employments.author"}),o.jsx(w,{properties:"author",width:140,title:"plugin.team_companies.employments.status",formatter:f=>{const v=r.get(f);return v!=null&&v.isStaff?{title:p,mode:yt.WARNING}:v!=null&&v.isDismissed?{title:c,mode:yt.ERROR}:{title:u,mode:yt.SUCCESS}},template:C.TAGS}),o.jsx(w,{isSortable:!0,template:C.STRING,properties:"firstCommit",width:130,formatter:oe}),o.jsx(w,{isSortable:!0,template:C.STRING,properties:"lastCommit",width:130,formatter:oe}),o.jsx(w,{isSortable:!0,template:C.SHORT_NUMBER,properties:"fakeProperty",width:120}),o.jsx(w,{isSortable:!0,template:C.SHORT_NUMBER,properties:"totalDaysWorked",width:90}),o.jsx(w,{isSortable:!0,width:150,title:"plugin.team_companies.employments.totalDays",template:f=>o.jsx(ue,{value:f.totalDaysWorked,max:_,suffix:"common.statistic.days"})}),o.jsx(w,{isSortable:!0,template:C.SHORT_NUMBER,properties:"totalTasks",width:90}),o.jsx(w,{isSortable:!0,properties:"totalTasks",title:"plugin.team_companies.employments.totalTasks",template:f=>o.jsx(ue,{value:f,max:h,suffix:"common.statistic.tasks"})})]})});function WI({authors:t,taskCodes:e}){return o.jsxs(o.Fragment,{children:[o.jsxs(be,{content:e,children:[o.jsx(Qk,{mode:"details",rowsForExcel:e}),o.jsx(fe,{})]}),o.jsxs(be,{content:t,children:[o.jsx(Kk,{mode:"details",rowsForExcel:t}),o.jsx(fe,{})]})]})}function FI({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const[r,u,c]=["plugin.team_companies.companies.active.yes","plugin.team_companies.companies.active.no","plugin.team_companies.companies.active.none"];return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,template:C.DETAILS,width:40,formatter:p=>o.jsx(WI,{authors:p.authors,taskCodes:p.taskCodes})}),o.jsx(w,{isFixed:!0,template:C.STRING,properties:"company",title:"plugin.team_companies.companies.company"}),o.jsx(w,{title:"plugin.team_companies.companies.status",formatter:p=>{var _,h;return p.isActive?{title:r,mode:yt.SUCCESS}:((h=(_=p==null?void 0:p.taskCodes)==null?void 0:_[0])==null?void 0:h.totalDays)>30?u:c},template:C.TAGS,width:140}),o.jsx(w,{template:C.STRING,properties:"from",title:"plugin.team_companies.companies.from",width:130,formatter:oe}),o.jsx(w,{template:C.STRING,properties:"to",title:"plugin.team_companies.companies.to",width:130,formatter:oe}),o.jsx(w,{isSortable:!0,template:C.SHORT_NUMBER,title:"plugin.team_companies.companies.totalDays",properties:"totalDaysWorked",width:140}),o.jsx(w,{isSortable:!0,template:C.SHORT_NUMBER,title:"plugin.team_companies.companies.totalTasks",properties:"totalTasks",width:90}),o.jsx(w,{isSortable:!0,template:C.SHORT_NUMBER,title:"plugin.team_companies.companies.totalTaskCodes",properties:"totalTaskCodes",width:90}),o.jsx(w,{isSortable:!0,template:C.SHORT_NUMBER,title:"plugin.team_companies.companies.totalAuthors",properties:"totalAuthors",width:110})]})}function UI(t){const e=t.map(r=>r.company),s=e.length>10?2:1,n=Object.fromEntries(t.map(r=>[r.company,r.totalAuthors]));return[e,s,n]}const[GI,HI]=Ui("days"),VI=U(()=>{var u;const t=A.statisticsByCommits.company.totalInfo,[e,s,n]=UI(t),r=(u=GI(t,"totalDays"))==null?void 0:u.details;return o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_companies.charts.employments.title",suffix:"plugin.team_companies.charts.employments.item",order:e,limit:s,details:n})}),o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_companies.charts.daysChart.title",suffix:"plugin.team_companies.charts.daysChart.item",order:HI,limit:1,details:r})})]})}),YI=U(({company:t})=>{var _;const e=A.statisticsByCommits.author.totalInfoByName;if(!t)return null;const s={},n=t.authors.filter(h=>{const f=e.get(h==null?void 0:h.author);return Ce(s,f.lastCountry),!(f!=null&&f.isDismissed)&&!(f!=null&&f.isStaff)}).length,r=de.getMiddleSalaryInMonth(),u=n*r,c=t.authors.filter(h=>{var f;return!((f=e[h==null?void 0:h.author])!=null&&f.isStaff)}).reduce((h,f)=>h+f.totalDaysInProject/30*r,0),p=((_=Object.entries(s).sort((h,f)=>h[1]-f[1]).pop())==null?void 0:_[0])||null;return o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(ke,{value:Ur(t.totalDays),icon:"./assets/cards/work_days2.svg",title:"plugin.team_companies.details.totalDays.title",description:"plugin.team_companies.details.totalDays.description"}),o.jsx(ke,{value:ct(u),icon:"./assets/cards/money_month.svg",title:"plugin.team_companies.details.moneyInMonth.title",description:"plugin.team_companies.details.moneyInMonth.description"}),o.jsx(_e,{size:"l",value:`${n} / ${t.totalAuthors-n}`,icon:"./assets/cards/dismissal.svg",title:"plugin.team_companies.details.activeAuthors.title",description:"plugin.team_companies.details.activeAuthors.description"})]}),o.jsxs(Q,{children:[o.jsx(ke,{value:ct(c),icon:"./assets/cards/money_total.svg",title:"plugin.team_companies.details.moneyAll.title",description:"plugin.team_companies.details.moneyAll.description"}),o.jsx(ke,{value:p,icon:"./assets/cards/location.svg",title:"plugin.team_companies.details.mainLocation.title",description:"plugin.team_companies.details.mainLocation.description"}),o.jsx(_e,{value:t.linesInTask,icon:"./assets/cards/lines.svg",title:"plugin.team_companies.details.linesInTask.title",description:"plugin.team_companies.details.linesInTask.description"}),o.jsx(_e,{value:t.totalTasks,icon:"./assets/cards/tasks.svg",title:"plugin.team_companies.details.totalTasks.title",description:"plugin.team_companies.details.totalTasks.description"})]})]})}),QI=U(({mode:t})=>{var c,p;const e=A.statisticsByCommits.company,s=e.totalInfo.filter(_=>(_==null?void 0:_.totalDaysWorked)>6).map(_=>({id:_.company,title:_.company})),[n,r]=T.useState((c=s==null?void 0:s[0])==null?void 0:c.id),u=e.totalInfoByName.get(n);return(p=e.totalInfo)!=null&&p.length?o.jsxs(o.Fragment,{children:[o.jsx(Y,{value:!xa.isOpen,children:o.jsx(VI,{})}),o.jsx(G,{title:"plugin.team_country.title"}),o.jsxs(be,{content:e.totalInfo,mode:t,watch:`${t}${A.hash}`,children:[o.jsx(FI,{mode:t,rowsForExcel:e.totalInfo}),o.jsx(fe,{})]}),o.jsx(tk,{prefix:"plugin.team_companies.banner.title",title:n,children:o.jsx(ms,{value:n,options:s,onChange:_=>{r(_)}})}),o.jsxs(Y,{value:u,children:[o.jsx(YI,{company:u}),o.jsxs(Y,{value:u==null?void 0:u.taskCodes,children:[o.jsx(G,{title:"plugin.team_companies.taskCodes.title"}),o.jsxs(be,{content:u==null?void 0:u.taskCodes,watch:`${t}${n}${A.hash}`,children:[o.jsx(Qk,{mode:t,rowsForExcel:u==null?void 0:u.taskCodes}),o.jsx(Le,{}),o.jsx(fe,{})]})]}),o.jsxs(Y,{value:u==null?void 0:u.authors,children:[o.jsx(G,{title:"plugin.team_companies.employments.title"}),o.jsxs(be,{content:u==null?void 0:u.authors,watch:`${t}${n}${A.hash}`,children:[o.jsx(Kk,{mode:t,rowsForExcel:u==null?void 0:u.authors}),o.jsx(Le,{}),o.jsx(fe,{})]})]})]})]}):t!=="print"?o.jsx(Le,{}):null});let KI=(hl=class{constructor(){this.dependencies=["company","author"]}getMenuItems(){return[{id:"company",group:10,order:50,link:"/team/company",title:"plugin.team_companies.sidebar",icon:"./assets/menu/company.svg"}]}getPage(e,s){return e==="/team/company"?o.jsx(QI,{mode:s==null?void 0:s.mode}):void 0}getTranslations(){return PI}},hl.id="team_companies",hl);const ZI={ar:`
|
||
§ plugin.team_country.sidebar: الموقع
|
||
§ plugin.team_country.title: التفاصيل
|
||
§ plugin.team_country.byTimezone: الموقع المحتمل للموظفين
|
||
§ plugin.team_country.filters.active: يعملون
|
||
§ plugin.team_country.filters.dismissed: غادروا
|
||
§ plugin.team_country.filters.staff: الموظفون
|
||
§ plugin.team_country.pieByDomain.title: التقسيم حسب الموقع
|
||
§ plugin.team_country.pieByTimezone.title: التقسيم حسب المنطقة الزمنية
|
||
§ plugin.team_country.chart.item: موظفون
|
||
§ plugin.team_country.table.title: قائمة الموظفين
|
||
§ plugin.team_country.table.country: الموقع
|
||
§ plugin.team_country.table.employments: الموظفون
|
||
§ plugin.team_country.employments.author: الموظف
|
||
§ plugin.team_country.travel.title: رحلات (أو VPN، أو rebase)
|
||
§ plugin.team_country.travel.author: الموظف
|
||
§ plugin.team_country.travel.fly: عدد الرحلات
|
||
§ plugin.team_country.travel.path: قائمة المواقع
|
||
§ plugin.team_country.travel.date: تاريخ الرحلة
|
||
§ plugin.team_country.travel.country: الموقع
|
||
`,de:`
|
||
§ plugin.team_country.sidebar: Standort
|
||
§ plugin.team_country.title: Details
|
||
§ plugin.team_country.byTimezone: Möglicher Standort der Mitarbeiter
|
||
§ plugin.team_country.filters.active: Arbeitet
|
||
§ plugin.team_country.filters.dismissed: Ausgeschieden
|
||
§ plugin.team_country.filters.staff: Personal
|
||
§ plugin.team_country.pieByDomain.title: Aufschlüsselung nach Standort
|
||
§ plugin.team_country.pieByTimezone.title: Aufschlüsselung nach Zeitzone
|
||
§ plugin.team_country.chart.item: Mitarbeiter
|
||
§ plugin.team_country.table.title: Mitarbeiterliste
|
||
§ plugin.team_country.table.country: Standort
|
||
§ plugin.team_country.table.employments: Mitarbeiter
|
||
§ plugin.team_country.employments.author: Mitarbeiter
|
||
§ plugin.team_country.travel.title: Reisen (oder VPN, oder rebase)
|
||
§ plugin.team_country.travel.author: Mitarbeiter
|
||
§ plugin.team_country.travel.fly: Anzahl der Flüge
|
||
§ plugin.team_country.travel.path: Liste der Standorte
|
||
§ plugin.team_country.travel.date: Flugdatum
|
||
§ plugin.team_country.travel.country: Standort
|
||
`,en:`
|
||
§ plugin.team_country.sidebar: Location
|
||
§ plugin.team_country.title: Details
|
||
§ plugin.team_country.byTimezone: Possible staff location
|
||
§ plugin.team_country.filters.active: Works
|
||
§ plugin.team_country.filters.dismissed: Left
|
||
§ plugin.team_country.filters.staff: Staff
|
||
§ plugin.team_country.pieByDomain.title: Breakdown by location
|
||
§ plugin.team_country.pieByTimezone.title: Breakdown by timezone
|
||
§ plugin.team_country.chart.item: staff members
|
||
§ plugin.team_country.table.title: Staff list
|
||
§ plugin.team_country.table.country: Location
|
||
§ plugin.team_country.table.employments: Staff members
|
||
§ plugin.team_country.employments.author: Staff member
|
||
§ plugin.team_country.travel.title: Trips (or VPN, or rebase)
|
||
§ plugin.team_country.travel.author: Staff member
|
||
§ plugin.team_country.travel.fly: Number of flights
|
||
§ plugin.team_country.travel.path: Locations list
|
||
§ plugin.team_country.travel.date: Flight date
|
||
§ plugin.team_country.travel.country: Location
|
||
`,es:`
|
||
§ plugin.team_country.sidebar: Ubicación
|
||
§ plugin.team_country.title: Detalles
|
||
§ plugin.team_country.byTimezone: Posible ubicación del personal
|
||
§ plugin.team_country.filters.active: Trabaja
|
||
§ plugin.team_country.filters.dismissed: Ha dejado
|
||
§ plugin.team_country.filters.staff: Personal
|
||
§ plugin.team_country.pieByDomain.title: Desglose por ubicación
|
||
§ plugin.team_country.pieByTimezone.title: Desglose por zona horaria
|
||
§ plugin.team_country.chart.item: empleados
|
||
§ plugin.team_country.table.title: Lista de empleados
|
||
§ plugin.team_country.table.country: Ubicación
|
||
§ plugin.team_country.table.employments: Empleados
|
||
§ plugin.team_country.employments.author: Empleado
|
||
§ plugin.team_country.travel.title: Viajes (o VPN, o rebase)
|
||
§ plugin.team_country.travel.author: Empleado
|
||
§ plugin.team_country.travel.fly: Número de vuelos
|
||
§ plugin.team_country.travel.path: Lista de ubicaciones
|
||
§ plugin.team_country.travel.date: Fecha del vuelo
|
||
§ plugin.team_country.travel.country: Ubicación
|
||
`,fr:`
|
||
§ plugin.team_country.sidebar: Localisation
|
||
§ plugin.team_country.title: Détails
|
||
§ plugin.team_country.byTimezone: Localisation possible des collaborateurs
|
||
§ plugin.team_country.filters.active: Travaille
|
||
§ plugin.team_country.filters.dismissed: Parti
|
||
§ plugin.team_country.filters.staff: Personnel
|
||
§ plugin.team_country.pieByDomain.title: Répartition par localisation
|
||
§ plugin.team_country.pieByTimezone.title: Répartition par fuseau horaire
|
||
§ plugin.team_country.chart.item: collaborateurs
|
||
§ plugin.team_country.table.title: Liste des collaborateurs
|
||
§ plugin.team_country.table.country: Localisation
|
||
§ plugin.team_country.table.employments: Collaborateurs
|
||
§ plugin.team_country.employments.author: Collaborateur
|
||
§ plugin.team_country.travel.title: Déplacements (ou VPN, ou rebase)
|
||
§ plugin.team_country.travel.author: Collaborateur
|
||
§ plugin.team_country.travel.fly: Nombre de vols
|
||
§ plugin.team_country.travel.path: Liste des localisations
|
||
§ plugin.team_country.travel.date: Date du vol
|
||
§ plugin.team_country.travel.country: Localisation
|
||
`,he:`
|
||
§ plugin.team_country.sidebar: מיקום
|
||
§ plugin.team_country.title: פירוט
|
||
§ plugin.team_country.byTimezone: מיקום אפשרי של העובדים
|
||
§ plugin.team_country.filters.active: עובד
|
||
§ plugin.team_country.filters.dismissed: עזב
|
||
§ plugin.team_country.filters.staff: צוות
|
||
§ plugin.team_country.pieByDomain.title: פירוט לפי מיקום
|
||
§ plugin.team_country.pieByTimezone.title: פירוט לפי אזור זמן
|
||
§ plugin.team_country.chart.item: עובדים
|
||
§ plugin.team_country.table.title: רשימת עובדים
|
||
§ plugin.team_country.table.country: מיקום
|
||
§ plugin.team_country.table.employments: עובדים
|
||
§ plugin.team_country.employments.author: עובד
|
||
§ plugin.team_country.travel.title: נסיעות (או VPN, או rebase)
|
||
§ plugin.team_country.travel.author: עובד
|
||
§ plugin.team_country.travel.fly: מספר טיסות
|
||
§ plugin.team_country.travel.path: רשימת מיקומים
|
||
§ plugin.team_country.travel.date: תאריך הטיסה
|
||
§ plugin.team_country.travel.country: מיקום
|
||
`,hi:`
|
||
§ plugin.team_country.sidebar: स्थान
|
||
§ plugin.team_country.title: विवरण
|
||
§ plugin.team_country.byTimezone: कर्मचारियों का संभावित स्थान
|
||
§ plugin.team_country.filters.active: कार्यरत
|
||
§ plugin.team_country.filters.dismissed: छोड़ चुके
|
||
§ plugin.team_country.filters.staff: कर्मचारी
|
||
§ plugin.team_country.pieByDomain.title: स्थान के अनुसार विवरण
|
||
§ plugin.team_country.pieByTimezone.title: समय क्षेत्र के अनुसार विवरण
|
||
§ plugin.team_country.chart.item: कर्मचारी
|
||
§ plugin.team_country.table.title: कर्मचारी सूची
|
||
§ plugin.team_country.table.country: स्थान
|
||
§ plugin.team_country.table.employments: कर्मचारी
|
||
§ plugin.team_country.employments.author: कर्मचारी
|
||
§ plugin.team_country.travel.title: यात्राएँ (या VPN, या rebase)
|
||
§ plugin.team_country.travel.author: कर्मचारी
|
||
§ plugin.team_country.travel.fly: उड़ानों की संख्या
|
||
§ plugin.team_country.travel.path: स्थानों की सूची
|
||
§ plugin.team_country.travel.date: उड़ान की तिथि
|
||
§ plugin.team_country.travel.country: स्थान
|
||
`,ja:`
|
||
§ plugin.team_country.sidebar: 所在地
|
||
§ plugin.team_country.title: 詳細
|
||
§ plugin.team_country.byTimezone: 従業員の想定所在地
|
||
§ plugin.team_country.filters.active: 在籍
|
||
§ plugin.team_country.filters.dismissed: 退職
|
||
§ plugin.team_country.filters.staff: スタッフ
|
||
§ plugin.team_country.pieByDomain.title: 所在地別内訳
|
||
§ plugin.team_country.pieByTimezone.title: タイムゾーン別内訳
|
||
§ plugin.team_country.chart.item: 従業員
|
||
§ plugin.team_country.table.title: 従業員一覧
|
||
§ plugin.team_country.table.country: 所在地
|
||
§ plugin.team_country.table.employments: 従業員
|
||
§ plugin.team_country.employments.author: 従業員
|
||
§ plugin.team_country.travel.title: 出張(または VPN、または rebase)
|
||
§ plugin.team_country.travel.author: 従業員
|
||
§ plugin.team_country.travel.fly: フライト回数
|
||
§ plugin.team_country.travel.path: 所在地一覧
|
||
§ plugin.team_country.travel.date: フライト日
|
||
§ plugin.team_country.travel.country: 所在地
|
||
`,ko:`
|
||
§ plugin.team_country.sidebar: 위치
|
||
§ plugin.team_country.title: 세부 정보
|
||
§ plugin.team_country.byTimezone: 직원의 추정 위치
|
||
§ plugin.team_country.filters.active: 근무
|
||
§ plugin.team_country.filters.dismissed: 퇴사
|
||
§ plugin.team_country.filters.staff: 직원
|
||
§ plugin.team_country.pieByDomain.title: 위치별 분석
|
||
§ plugin.team_country.pieByTimezone.title: 시간대별 분석
|
||
§ plugin.team_country.chart.item: 직원
|
||
§ plugin.team_country.table.title: 직원 목록
|
||
§ plugin.team_country.table.country: 위치
|
||
§ plugin.team_country.table.employments: 직원
|
||
§ plugin.team_country.employments.author: 직원
|
||
§ plugin.team_country.travel.title: 출장(또는 VPN, 또는 rebase)
|
||
§ plugin.team_country.travel.author: 직원
|
||
§ plugin.team_country.travel.fly: 항공편 수
|
||
§ plugin.team_country.travel.path: 위치 목록
|
||
§ plugin.team_country.travel.date: 항공편 날짜
|
||
§ plugin.team_country.travel.country: 위치
|
||
`,pt:`
|
||
§ plugin.team_country.sidebar: Localização
|
||
§ plugin.team_country.title: Detalhes
|
||
§ plugin.team_country.byTimezone: Possível localização dos colaboradores
|
||
§ plugin.team_country.filters.active: Trabalha
|
||
§ plugin.team_country.filters.dismissed: Saiu
|
||
§ plugin.team_country.filters.staff: Equipe
|
||
§ plugin.team_country.pieByDomain.title: Distribuição por localização
|
||
§ plugin.team_country.pieByTimezone.title: Distribuição por fuso horário
|
||
§ plugin.team_country.chart.item: colaboradores
|
||
§ plugin.team_country.table.title: Lista de colaboradores
|
||
§ plugin.team_country.table.country: Localização
|
||
§ plugin.team_country.table.employments: Colaboradores
|
||
§ plugin.team_country.employments.author: Colaborador
|
||
§ plugin.team_country.travel.title: Viagens (ou VPN, ou rebase)
|
||
§ plugin.team_country.travel.author: Colaborador
|
||
§ plugin.team_country.travel.fly: Número de voos
|
||
§ plugin.team_country.travel.path: Lista de localizações
|
||
§ plugin.team_country.travel.date: Data do voo
|
||
§ plugin.team_country.travel.country: Localização
|
||
`,ru:`
|
||
§ plugin.team_country.sidebar: Местоположение
|
||
§ plugin.team_country.title: Детализация
|
||
§ plugin.team_country.byTimezone: Возможное местоположение сотрудников
|
||
§ plugin.team_country.filters.active: Работают
|
||
§ plugin.team_country.filters.dismissed: Уволенные
|
||
§ plugin.team_country.filters.staff: Помощники
|
||
§ plugin.team_country.pieByDomain.title: Разбивка по местоположению
|
||
§ plugin.team_country.pieByTimezone.title: Разбивка по часовому поясу
|
||
§ plugin.team_country.chart.item: сотрудников
|
||
§ plugin.team_country.table.title: Список сотрудников
|
||
§ plugin.team_country.table.country: Местоположение
|
||
§ plugin.team_country.table.employments: Сотрудники
|
||
§ plugin.team_country.employments.author: Сотрудник
|
||
§ plugin.team_country.travel.title: Командировки (или VPN, или rebase)
|
||
§ plugin.team_country.travel.author: Сотрудник
|
||
§ plugin.team_country.travel.fly: Количество перелётов
|
||
§ plugin.team_country.travel.path: Список местоположений
|
||
§ plugin.team_country.travel.date: Дата перлёта
|
||
§ plugin.team_country.travel.country: Местоположение
|
||
`,zh:`
|
||
§ plugin.team_country.sidebar: 所在地
|
||
§ plugin.team_country.title: 详细信息
|
||
§ plugin.team_country.byTimezone: 员工的可能所在地
|
||
§ plugin.team_country.filters.active: 在职
|
||
§ plugin.team_country.filters.dismissed: 已离职
|
||
§ plugin.team_country.filters.staff: 员工
|
||
§ plugin.team_country.pieByDomain.title: 按所在地细分
|
||
§ plugin.team_country.pieByTimezone.title: 按时区细分
|
||
§ plugin.team_country.chart.item: 员工
|
||
§ plugin.team_country.table.title: 员工列表
|
||
§ plugin.team_country.table.country: 所在地
|
||
§ plugin.team_country.table.employments: 员工
|
||
§ plugin.team_country.employments.author: 员工
|
||
§ plugin.team_country.travel.title: 出差(或 VPN,或 rebase)
|
||
§ plugin.team_country.travel.author: 员工
|
||
§ plugin.team_country.travel.fly: 航班次数
|
||
§ plugin.team_country.travel.path: 所在地列表
|
||
§ plugin.team_country.travel.date: 航班日期
|
||
§ plugin.team_country.travel.country: 所在地
|
||
`};function XI({response:t,updateSort:e,rowsForExcel:s,mode:n}){const{text:r}=ie();if(!t)return null;const[u,c,p]=[r("common.statistic.work"),r("common.statistic.dismissed"),r("common.statistic.staff")];return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:n,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,template:C.STRING,formatter:(_,h)=>h+1,width:40}),o.jsx(w,{isFixed:!0,template:C.STRING,properties:"author",title:"plugin.team_country.employments.author",width:158}),o.jsx(w,{formatter:_=>_.isStaff?{title:p,mode:yt.WARNING}:_.isDismissed?{title:c,mode:yt.ERROR}:{title:u,mode:yt.SUCCESS},template:C.TAGS,width:140}),o.jsx(w,{template:C.STRING,properties:"firstCommit",width:130,formatter:oe}),o.jsx(w,{template:C.STRING,properties:"lastCommit",width:130,formatter:oe})]})}function JI({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const r=A.statisticsByCommits.author.totalInfoByName,u=Sg(t,"employments");return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,fullScreenMode:"countries",children:[o.jsx(w,{isFixed:!0,template:C.DETAILS,width:40,formatter:c=>{const p=c.employments.map(_=>r.get(_)).filter(_=>_);return o.jsx(XI,{response:{content:p},mode:"details"})}}),o.jsx(w,{isFixed:!0,template:C.STRING,properties:"country",title:"plugin.team_country.table.country",width:200}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"employments",formatter:c=>c.length}),o.jsx(w,{isSortable:!0,properties:"employments",width:200,template:c=>o.jsx(ue,{value:c.length,max:u})}),o.jsx(w,{template:C.STRING,properties:"employments",minWidth:300,title:"plugin.team_country.table.employments",formatter:c=>c.join(", ")})]})}function eq(t){const e=t.map(r=>r.country),s=e.length>10?2:1,n=Object.fromEntries(t.map(r=>[r.country,r.employments.length]));return[e,s,n]}function tq(t){const e=t.reduce((n,r)=>(Ce(n,r.lastCommitTimezone.replace(":",".")),n),{});return[Object.keys(e).sort(),e]}function aq({authors:t,countries:e}){const[s,n,r]=eq(e),[u,c]=tq(t);return o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_country.pieByDomain.title",suffix:"plugin.team_country.chart.item",order:s,limit:n,details:r})}),o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_country.pieByTimezone.title",suffix:"plugin.team_country.chart.item",order:u,limit:3,details:c})})]})}const jc={team_country_filter:"team_country_filter",team_country_filter_checkbox:"team_country_filter_checkbox"},sq=U(({filters:t,onChange:e})=>{const s=(n,r)=>{e&&e({...t||{},[n]:r,hash:Math.random()})};return o.jsxs("div",{className:jc.team_country_filter,children:[o.jsx(Pi,{title:"plugin.team_country.filters.active",className:jc.team_country_filter_checkbox,value:t==null?void 0:t.isActive,onChange:()=>s("isActive",!(t!=null&&t.isActive))}),o.jsx(Pi,{title:"plugin.team_country.filters.dismissed",className:jc.team_country_filter_checkbox,value:t==null?void 0:t.isDismissed,onChange:()=>s("isDismissed",!(t!=null&&t.isDismissed))}),o.jsx(Pi,{title:"plugin.team_country.filters.staff",className:jc.team_country_filter_checkbox,value:t==null?void 0:t.isStaff,onChange:()=>s("isStaff",!(t!=null&&t.isStaff))})]})});function iq({response:t,updateSort:e,rowsForExcel:s,mode:n}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:n,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_country.travel.date",properties:"fromTimestamp",formatter:oe,width:142}),o.jsx(w,{template:C.STRING,width:40,formatter:()=>"✈️"}),o.jsx(w,{template:C.STRING,width:72,properties:"fromTimezone"}),o.jsx(w,{template:C.STRING,properties:"title",title:"plugin.team_country.travel.country"})]}):null}function nq({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const r=Sg(t,"countries");return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,fullScreenMode:"travel",children:[o.jsx(w,{isFixed:!0,template:C.DETAILS,width:40,formatter:u=>o.jsx(iq,{response:{content:u.countries},mode:"details"})}),o.jsx(w,{isFixed:!0,template:C.STRING,properties:"author",title:"plugin.team_country.travel.author",width:200}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"countries",formatter:u=>u.length-1}),o.jsx(w,{isSortable:!0,properties:"countries",title:"plugin.team_country.travel.fly",width:200,template:u=>o.jsx(ue,{value:u,max:r,suffix:"plugin.team_country.travel.flyItem"}),formatter:u=>(u==null?void 0:u.length)||0}),o.jsx(w,{template:C.STRING,title:"plugin.team_country.travel.path",formatter:u=>u.countries.map(c=>c.title).join(" ✈️ ")})]})}const we={time_zone_map:"time_zone_map",time_zone_map_gap:"time_zone_map_gap",time_zone_map_points:"time_zone_map_points",time_zone_map_point:"time_zone_map_point",time_zone_map_point_p1300:"time_zone_map_point_p1300",time_zone_map_point_p1200:"time_zone_map_point_p1200",time_zone_map_point_p1100:"time_zone_map_point_p1100",time_zone_map_point_p1000:"time_zone_map_point_p1000",time_zone_map_point_p1030:"time_zone_map_point_p1030",time_zone_map_point_p0930:"time_zone_map_point_p0930",time_zone_map_point_p0900:"time_zone_map_point_p0900",time_zone_map_point_p0800:"time_zone_map_point_p0800",time_zone_map_point_p0700:"time_zone_map_point_p0700",time_zone_map_point_p0630:"time_zone_map_point_p0630",time_zone_map_point_p0600:"time_zone_map_point_p0600",time_zone_map_point_p0545:"time_zone_map_point_p0545",time_zone_map_point_p0430:"time_zone_map_point_p0430",time_zone_map_point_p0530:"time_zone_map_point_p0530",time_zone_map_point_p0500:"time_zone_map_point_p0500",time_zone_map_point_p0400:"time_zone_map_point_p0400",time_zone_map_point_p0330:"time_zone_map_point_p0330",time_zone_map_point_p0300:"time_zone_map_point_p0300",time_zone_map_point_p0200:"time_zone_map_point_p0200",time_zone_map_point_p0100:"time_zone_map_point_p0100",time_zone_map_point_p0000:"time_zone_map_point_p0000",time_zone_map_point_m0100:"time_zone_map_point_m0100",time_zone_map_point_m0200:"time_zone_map_point_m0200",time_zone_map_point_m0300:"time_zone_map_point_m0300",time_zone_map_point_m0330:"time_zone_map_point_m0330",time_zone_map_point_m0400:"time_zone_map_point_m0400",time_zone_map_point_m0500:"time_zone_map_point_m0500",time_zone_map_point_m0600:"time_zone_map_point_m0600",time_zone_map_point_m0700:"time_zone_map_point_m0700",time_zone_map_point_m0800:"time_zone_map_point_m0800",time_zone_map_point_m0900:"time_zone_map_point_m0900",time_zone_map_point_m1000:"time_zone_map_point_m1000",time_zone_map_point_m1100:"time_zone_map_point_m1100",time_zone_map_point_m1200:"time_zone_map_point_m1200",time_zone_map_point_hide:"time_zone_map_point_hide",time_zone_map_point_active:"time_zone_map_point_active",time_zone_map_point_dismissed:"time_zone_map_point_dismissed",time_zone_map_point_s:"time_zone_map_point_s",time_zone_map_point_m:"time_zone_map_point_m",time_zone_map_point_l:"time_zone_map_point_l"},oq={p1300:we.time_zone_map_point_p1300,p1200:we.time_zone_map_point_p1200,p1100:we.time_zone_map_point_p1100,p1000:we.time_zone_map_point_p1000,p1030:we.time_zone_map_point_p1030,p0930:we.time_zone_map_point_p0930,p0900:we.time_zone_map_point_p0900,p0800:we.time_zone_map_point_p0800,p0700:we.time_zone_map_point_p0700,p0630:we.time_zone_map_point_p0630,p0600:we.time_zone_map_point_p0600,p0545:we.time_zone_map_point_p0545,p0430:we.time_zone_map_point_p0430,p0530:we.time_zone_map_point_p0530,p0500:we.time_zone_map_point_p0500,p0400:we.time_zone_map_point_p0400,p0330:we.time_zone_map_point_p0330,p0300:we.time_zone_map_point_p0300,p0200:we.time_zone_map_point_p0200,p0100:we.time_zone_map_point_p0100,p0000:we.time_zone_map_point_p0000,m0100:we.time_zone_map_point_m0100,m0200:we.time_zone_map_point_m0200,m0300:we.time_zone_map_point_m0300,m0330:we.time_zone_map_point_m0330,m0400:we.time_zone_map_point_m0400,m0500:we.time_zone_map_point_m0500,m0600:we.time_zone_map_point_m0600,m0700:we.time_zone_map_point_m0700,m0800:we.time_zone_map_point_m0800,m0900:we.time_zone_map_point_m0900,m1000:we.time_zone_map_point_m1000,m1100:we.time_zone_map_point_m1100,m1200:we.time_zone_map_point_m1200};function lq(t){return t.reduce((e,s)=>{const n=s.lastCommitTimezone;return e[n]||(e[n]=[]),e[n].push(s.author),e},{})}function rq(t){const e=(t||"").replace("+","p").replace("-","m").replace(":","");return oq[e]||we.time_zone_map_point_hide}function mq(t){let e=!1;const s=A.statisticsByCommits.author.totalInfoByName;for(let n=0;n<t.length;n++){const r=s.get(t[n]);if(!(r!=null&&r.isStaff)){if(!(r!=null&&r.isDismissed))return we.time_zone_map_point_active;r!=null&&r.isDismissed&&(e=!0)}}return e?we.time_zone_map_point_dismissed:""}function uq(t,e){return t<e*.3||e<=10?we.time_zone_map_point_s:t<e*.7||e<=100?we.time_zone_map_point_m:we.time_zone_map_point_l}function cq({timezone:t="",authors:e=[],maxValue:s}){const n=rq(t),r=mq(e),u=uq(e.length,s);return o.jsx("div",{title:e.join(", "),className:`${we.time_zone_map_point} ${n} ${r} ${u}`,children:e.length})}function pq({authors:t=[]}){const e=lq(t),s=Object.entries(e),n=Sg({content:s},"1"),r=s.map(u=>o.jsx(cq,{timezone:u[0],authors:u[1],maxValue:n},u[0]));return o.jsxs("div",{className:we.time_zone_map,children:[o.jsx("img",{alt:"",src:"./assets/map/2x1.png",className:we.time_zone_map_gap}),o.jsx("div",{style:{backgroundImage:"url(./assets/map/map.png)"},className:we.time_zone_map_points,children:r})]})}function dq({authors:t}){return o.jsxs(o.Fragment,{children:[o.jsx(G,{title:"plugin.team_country.byTimezone"}),o.jsx(pq,{authors:t})]})}function gq(){return{isActive:!0,isDismissed:!0,isStaff:!0}}function _q(t){var p,_;const s=((p=A.statisticsByCommits.company.totalInfoByName[t.company||""])==null?void 0:p.authors)||[],n=new Set(s.map(h=>h.author)),u=((_=A.statisticsByCommits.taskCodes.totalInfoByName[t.taskCode||""])==null?void 0:_.authors)||[],c=new Set(u.map(h=>h.author));return h=>!(t.author&&h.author!==t.author||!t.isStaff&&h.isStaff||!t.isActive&&!h.isDismissed&&!h.isStaff||!t.isDismissed&&h.isDismissed&&!h.isStaff||t.company&&!n.has(h.author)||t.taskCode&&!c.has(h.author))}function hq(t){const e=t.reduce((s,n)=>(s.set(n.author,!0),s),new Map);return s=>{const n=s.employments.filter(r=>e.has(r));return n.length?{...s,employments:n}:null}}const fq=U(({mode:t})=>{const e=T.useMemo(()=>gq(),[]),[s,n]=T.useState(e),r=A.statisticsByCommits.author,u=r.list.slice(0,4),[c,p]=T.useState(r.totalInfo),_=A.statisticsByCommits.country.totalInfo,h=T.useMemo(()=>_.map(hq(c)).filter(x=>x),[_,s.hash]),f=T.useMemo(()=>c.filter(x=>{var N;return(N=x==null?void 0:x.countries)==null?void 0:N.length}).sort((x,N)=>{var q,I;return((q=N==null?void 0:N.countries)==null?void 0:q.length)-((I=x==null?void 0:x.countries)==null?void 0:I.length)}),[c,s.hash]),v=!xa.isOpen||xa.mode==="countries",k=(!xa.isOpen||xa.mode==="travel")&&f.length;return _!=null&&_.length?o.jsxs(o.Fragment,{children:[o.jsxs(Y,{value:!xa.isOpen,children:[o.jsx(G,{title:"common.filters"}),o.jsx(Ei,{content:r.totalInfo,properties:"author",elements:["search","company","author"],examples:u,defaultFilters:e,onChange:(x,N,q)=>{p(x),n(q)},onFilter:_q,children:o.jsx(sq,{})}),o.jsx(dq,{authors:c}),o.jsx(nt,{height:"xxl"}),o.jsx(aq,{authors:c,countries:h})]}),o.jsxs(Y,{value:v,children:[o.jsx(G,{title:"plugin.team_country.table.title"}),o.jsxs(be,{content:h,mode:t,watch:`${t}${A.hash}${s.hash}`,children:[o.jsx(JI,{mode:t,rowsForExcel:h}),o.jsx(fe,{})]})]}),o.jsxs(Y,{value:k,children:[o.jsx(G,{title:"plugin.team_country.travel.title"}),o.jsxs(be,{content:f,mode:t,watch:`${t}${A.hash}${s.hash}`,children:[o.jsx(nq,{mode:t,rowsForExcel:h}),o.jsx(fe,{})]})]})]}):t!=="print"?o.jsx(Le,{}):null});let yq=(fl=class{constructor(){this.dependencies=["author","country","company","taskCodes"]}getMenuItems(){return[{id:"country",group:10,order:70,link:"/team/country",title:"plugin.team_country.sidebar",icon:"./assets/menu/country.svg"}]}getPage(e,s){return e==="/team/country"?o.jsx(fq,{mode:s==null?void 0:s.mode}):void 0}getTranslations(){return ZI}},fl.id="team_country",fl);const vq={ar:`
|
||
§ plugin.team_vacation.sidebar: جدول الإجازات
|
||
§ plugin.team_vacation.grant.title: التفصيل حسب السنة
|
||
§ plugin.team_vacation.charts.title: تحليل الإجازات على مدار الفترة
|
||
§ plugin.team_vacation.charts.total.title: أيام الإجازة
|
||
§ plugin.team_vacation.charts.total.description: الإجمالي لجميع الموظفين على مدار الفترة.
|
||
§ plugin.team_vacation.charts.money.title: بدل الإجازة
|
||
§ plugin.team_vacation.charts.money.description: الإجمالي لجميع الموظفين على مدار الفترة. يُضرب متوسط الدخل اليومي في عدد أيام الإجازة.
|
||
§ plugin.team_vacation.charts.author: توزيع بدل الإجازة حسب الموظف
|
||
§ plugin.team_vacation.details.title: فترات مع غياب طويل عن commits
|
||
§ plugin.team_vacation.details.type: النوع
|
||
§ plugin.team_vacation.details.transfer: النقل إلى قسم آخر
|
||
§ plugin.team_vacation.details.vacation: إجازة
|
||
§ plugin.team_vacation.details.author: الموظف
|
||
§ plugin.team_vacation.details.from: من
|
||
§ plugin.team_vacation.details.to: إلى
|
||
§ plugin.team_vacation.details.duration: المدة
|
||
`,de:`
|
||
§ plugin.team_vacation.sidebar: Urlaubsplan
|
||
§ plugin.team_vacation.grant.title: Aufschlüsselung nach Jahren
|
||
§ plugin.team_vacation.charts.title: Urlaubsanalyse über die gesamte Zeit
|
||
§ plugin.team_vacation.charts.total.title: Urlaubstage
|
||
§ plugin.team_vacation.charts.total.description: Summe über alle Mitarbeiter über die gesamte Zeit.
|
||
§ plugin.team_vacation.charts.money.title: Urlaubsgeld
|
||
§ plugin.team_vacation.charts.money.description: Summe über alle Mitarbeiter über die gesamte Zeit. Der durchschnittliche Tagesverdienst wird mit der Anzahl der Urlaubstage multipliziert.
|
||
§ plugin.team_vacation.charts.author: Verteilung des Urlaubsgelds nach Mitarbeitern
|
||
§ plugin.team_vacation.details.title: Zeiträume mit langer Abwesenheit von commits
|
||
§ plugin.team_vacation.details.type: Typ
|
||
§ plugin.team_vacation.details.transfer: Versetzung in eine andere Abteilung
|
||
§ plugin.team_vacation.details.vacation: Urlaub
|
||
§ plugin.team_vacation.details.author: Mitarbeiter
|
||
§ plugin.team_vacation.details.from: von
|
||
§ plugin.team_vacation.details.to: bis
|
||
§ plugin.team_vacation.details.duration: Dauer
|
||
`,en:`
|
||
§ plugin.team_vacation.sidebar: Vacation schedule
|
||
§ plugin.team_vacation.grant.title: Breakdown by year
|
||
§ plugin.team_vacation.charts.title: Vacation analysis over time
|
||
§ plugin.team_vacation.charts.total.title: vacation days
|
||
§ plugin.team_vacation.charts.total.description: Total across all staff members over time.
|
||
§ plugin.team_vacation.charts.money.title: vacation pay
|
||
§ plugin.team_vacation.charts.money.description: Total across all staff members over time. Average daily earnings are multiplied by the number of vacation days.
|
||
§ plugin.team_vacation.charts.author: Vacation pay distribution by staff member
|
||
§ plugin.team_vacation.details.title: Periods with a long absence of commits
|
||
§ plugin.team_vacation.details.type: Type
|
||
§ plugin.team_vacation.details.transfer: Transfer to another department
|
||
§ plugin.team_vacation.details.vacation: Vacation
|
||
§ plugin.team_vacation.details.author: Staff member
|
||
§ plugin.team_vacation.details.from: from
|
||
§ plugin.team_vacation.details.to: to
|
||
§ plugin.team_vacation.details.duration: Duration
|
||
`,es:`
|
||
§ plugin.team_vacation.sidebar: Calendario de vacaciones
|
||
§ plugin.team_vacation.grant.title: Desglose por año
|
||
§ plugin.team_vacation.charts.title: Análisis de vacaciones a lo largo del tiempo
|
||
§ plugin.team_vacation.charts.total.title: días de vacaciones
|
||
§ plugin.team_vacation.charts.total.description: Total de todos los empleados a lo largo del tiempo.
|
||
§ plugin.team_vacation.charts.money.title: paga de vacaciones
|
||
§ plugin.team_vacation.charts.money.description: Total de todos los empleados a lo largo del tiempo. El salario diario medio se multiplica por el número de días de vacaciones.
|
||
§ plugin.team_vacation.charts.author: Distribución de la paga de vacaciones por empleado
|
||
§ plugin.team_vacation.details.title: Periodos con una larga ausencia de commits
|
||
§ plugin.team_vacation.details.type: Tipo
|
||
§ plugin.team_vacation.details.transfer: Traslado a otro departamento
|
||
§ plugin.team_vacation.details.vacation: Vacaciones
|
||
§ plugin.team_vacation.details.author: Empleado
|
||
§ plugin.team_vacation.details.from: desde
|
||
§ plugin.team_vacation.details.to: hasta
|
||
§ plugin.team_vacation.details.duration: Duración
|
||
`,fr:`
|
||
§ plugin.team_vacation.sidebar: Calendrier des congés
|
||
§ plugin.team_vacation.grant.title: Répartition par année
|
||
§ plugin.team_vacation.charts.title: Analyse des congés sur toute la période
|
||
§ plugin.team_vacation.charts.total.title: jours de congé
|
||
§ plugin.team_vacation.charts.total.description: Total pour tous les salariés sur toute la période.
|
||
§ plugin.team_vacation.charts.money.title: indemnité de congés
|
||
§ plugin.team_vacation.charts.money.description: Total pour tous les salariés sur toute la période. Le salaire journalier moyen est multiplié par le nombre de jours de congé.
|
||
§ plugin.team_vacation.charts.author: Répartition de l'indemnité de congés par salarié
|
||
§ plugin.team_vacation.details.title: Périodes avec une longue absence de commits
|
||
§ plugin.team_vacation.details.type: Type
|
||
§ plugin.team_vacation.details.transfer: Mutation vers un autre département
|
||
§ plugin.team_vacation.details.vacation: Congé
|
||
§ plugin.team_vacation.details.author: Salarié
|
||
§ plugin.team_vacation.details.from: de
|
||
§ plugin.team_vacation.details.to: à
|
||
§ plugin.team_vacation.details.duration: Durée
|
||
`,he:`
|
||
§ plugin.team_vacation.sidebar: לוח חופשות
|
||
§ plugin.team_vacation.grant.title: פירוט לפי שנים
|
||
§ plugin.team_vacation.charts.title: ניתוח חופשות לאורך כל התקופה
|
||
§ plugin.team_vacation.charts.total.title: ימי חופשה
|
||
§ plugin.team_vacation.charts.total.description: סך הכול לכל העובדים לאורך כל התקופה.
|
||
§ plugin.team_vacation.charts.money.title: דמי חופשה
|
||
§ plugin.team_vacation.charts.money.description: סך הכול לכל העובדים לאורך כל התקופה. השכר היומי הממוצע מוכפל במספר ימי החופשה.
|
||
§ plugin.team_vacation.charts.author: התפלגות דמי החופשה לפי עובד
|
||
§ plugin.team_vacation.details.title: תקופות עם היעדרות ממושכת של commits
|
||
§ plugin.team_vacation.details.type: סוג
|
||
§ plugin.team_vacation.details.transfer: העברה למחלקה אחרת
|
||
§ plugin.team_vacation.details.vacation: חופשה
|
||
§ plugin.team_vacation.details.author: עובד
|
||
§ plugin.team_vacation.details.from: מ-
|
||
§ plugin.team_vacation.details.to: עד
|
||
§ plugin.team_vacation.details.duration: משך
|
||
`,hi:`
|
||
§ plugin.team_vacation.sidebar: अवकाश अनुसूची
|
||
§ plugin.team_vacation.grant.title: वर्ष के अनुसार विवरण
|
||
§ plugin.team_vacation.charts.title: समय के साथ अवकाश विश्लेषण
|
||
§ plugin.team_vacation.charts.total.title: अवकाश दिवस
|
||
§ plugin.team_vacation.charts.total.description: सभी कर्मचारियों का कुल योग समय के साथ।
|
||
§ plugin.team_vacation.charts.money.title: अवकाश वेतन
|
||
§ plugin.team_vacation.charts.money.description: सभी कर्मचारियों का कुल योग समय के साथ। औसत दैनिक आय को अवकाश दिवसों की संख्या से गुणा किया जाता है।
|
||
§ plugin.team_vacation.charts.author: कर्मचारी के अनुसार अवकाश वेतन का वितरण
|
||
§ plugin.team_vacation.details.title: commits की लंबी अनुपस्थिति वाले अंतराल
|
||
§ plugin.team_vacation.details.type: प्रकार
|
||
§ plugin.team_vacation.details.transfer: दूसरे विभाग में स्थानांतरण
|
||
§ plugin.team_vacation.details.vacation: अवकाश
|
||
§ plugin.team_vacation.details.author: कर्मचारी
|
||
§ plugin.team_vacation.details.from: से
|
||
§ plugin.team_vacation.details.to: तक
|
||
§ plugin.team_vacation.details.duration: अवधि
|
||
`,ja:`
|
||
§ plugin.team_vacation.sidebar: 休暇スケジュール
|
||
§ plugin.team_vacation.grant.title: 年別の内訳
|
||
§ plugin.team_vacation.charts.title: 全期間の休暇分析
|
||
§ plugin.team_vacation.charts.total.title: 休暇日数
|
||
§ plugin.team_vacation.charts.total.description: すべてのスタッフについて、全期間の合計です。
|
||
§ plugin.team_vacation.charts.money.title: 休暇手当
|
||
§ plugin.team_vacation.charts.money.description: すべてのスタッフについて、全期間の合計です。平均日額報酬に休暇日数を乗じて算出します。
|
||
§ plugin.team_vacation.charts.author: スタッフ別の休暇手当の分布
|
||
§ plugin.team_vacation.details.title: commits が長期間ない期間
|
||
§ plugin.team_vacation.details.type: 種別
|
||
§ plugin.team_vacation.details.transfer: 他部署への異動
|
||
§ plugin.team_vacation.details.vacation: 休暇
|
||
§ plugin.team_vacation.details.author: スタッフ
|
||
§ plugin.team_vacation.details.from: から
|
||
§ plugin.team_vacation.details.to: まで
|
||
§ plugin.team_vacation.details.duration: 期間
|
||
`,ko:`
|
||
§ plugin.team_vacation.sidebar: 휴가 일정
|
||
§ plugin.team_vacation.grant.title: 연도별 내역
|
||
§ plugin.team_vacation.charts.title: 전체 기간 휴가 분석
|
||
§ plugin.team_vacation.charts.total.title: 휴가 일수
|
||
§ plugin.team_vacation.charts.total.description: 모든 직원에 대해 기간 전체를 합산한 값입니다.
|
||
§ plugin.team_vacation.charts.money.title: 휴가 수당
|
||
§ plugin.team_vacation.charts.money.description: 모든 직원에 대해 기간 전체를 합산한 값입니다. 평균 일일 수익에 휴가 일수를 곱해 계산합니다.
|
||
§ plugin.team_vacation.charts.author: 직원별 휴가 수당 분포
|
||
§ plugin.team_vacation.details.title: commits가 장기간 없는 기간
|
||
§ plugin.team_vacation.details.type: 유형
|
||
§ plugin.team_vacation.details.transfer: 다른 부서로의 전배
|
||
§ plugin.team_vacation.details.vacation: 휴가
|
||
§ plugin.team_vacation.details.author: 직원
|
||
§ plugin.team_vacation.details.from: 부터
|
||
§ plugin.team_vacation.details.to: 까지
|
||
§ plugin.team_vacation.details.duration: 기간
|
||
`,pt:`
|
||
§ plugin.team_vacation.sidebar: Calendário de férias
|
||
§ plugin.team_vacation.grant.title: Detalhamento por ano
|
||
§ plugin.team_vacation.charts.title: Análise de férias ao longo do tempo
|
||
§ plugin.team_vacation.charts.total.title: dias de férias
|
||
§ plugin.team_vacation.charts.total.description: Total de todos os funcionários ao longo do tempo.
|
||
§ plugin.team_vacation.charts.money.title: remuneração de férias
|
||
§ plugin.team_vacation.charts.money.description: Total de todos os funcionários ao longo do tempo. Os ganhos diários médios são multiplicados pelo número de dias de férias.
|
||
§ plugin.team_vacation.charts.author: Distribuição da remuneração de férias por funcionário
|
||
§ plugin.team_vacation.details.title: Períodos com longa ausência de commits
|
||
§ plugin.team_vacation.details.type: Tipo
|
||
§ plugin.team_vacation.details.transfer: Transferência para outro departamento
|
||
§ plugin.team_vacation.details.vacation: Férias
|
||
§ plugin.team_vacation.details.author: Funcionário
|
||
§ plugin.team_vacation.details.from: de
|
||
§ plugin.team_vacation.details.to: até
|
||
§ plugin.team_vacation.details.duration: Duração
|
||
`,ru:`
|
||
§ plugin.team_vacation.sidebar: График отпусков
|
||
§ plugin.team_vacation.grant.title: Разбивка по годам
|
||
§ plugin.team_vacation.charts.title: Анализ отпусков за всё время
|
||
§ plugin.team_vacation.charts.total.title: дней отпуска
|
||
§ plugin.team_vacation.charts.total.description: Суммарно по всем сотрудникам за всё время.
|
||
§ plugin.team_vacation.charts.money.title: отпускные
|
||
§ plugin.team_vacation.charts.money.description: Суммарно по всем сотрудникам за всё время. Средне-дневной заработок умножается на количество дней отпуска.
|
||
§ plugin.team_vacation.charts.author: Распределение отпускных по сотрудникам
|
||
§ plugin.team_vacation.details.title: Периоды с длительным отсутствием коммитов
|
||
§ plugin.team_vacation.details.type: Тип
|
||
§ plugin.team_vacation.details.transfer: Перевод в другой отдел
|
||
§ plugin.team_vacation.details.vacation: Отпуск
|
||
§ plugin.team_vacation.details.author: Сотрудник
|
||
§ plugin.team_vacation.details.from: Первый коммит
|
||
§ plugin.team_vacation.details.to: Последний коммит
|
||
§ plugin.team_vacation.details.duration: Продолжительность
|
||
`,zh:`
|
||
§ plugin.team_vacation.sidebar: 休假计划
|
||
§ plugin.team_vacation.grant.title: 按年度明细
|
||
§ plugin.team_vacation.charts.title: 全时段休假分析
|
||
§ plugin.team_vacation.charts.total.title: 休假天数
|
||
§ plugin.team_vacation.charts.total.description: 所有员工在整个时间段上的累计总和。
|
||
§ plugin.team_vacation.charts.money.title: 休假薪酬
|
||
§ plugin.team_vacation.charts.money.description: 所有员工在整个时间段上的累计总和。将平均日收入乘以休假天数计算得到。
|
||
§ plugin.team_vacation.charts.author: 按员工划分的休假薪酬分布
|
||
§ plugin.team_vacation.details.title: 长时间无 commits 的时段
|
||
§ plugin.team_vacation.details.type: 类型
|
||
§ plugin.team_vacation.details.transfer: 调往其他部门
|
||
§ plugin.team_vacation.details.vacation: 休假
|
||
§ plugin.team_vacation.details.author: 员工
|
||
§ plugin.team_vacation.details.from: 自
|
||
§ plugin.team_vacation.details.to: 至
|
||
§ plugin.team_vacation.details.duration: 时长
|
||
`};function Zk(t,e,s){return{id:t,year:e,author:s,lines:[]}}function Xk(t){const e=new Map;return(t||[]).forEach(s=>{let n=`${s.from.year}-${s.author}`,r=e.get(n)||Zk(n,s.from.year,s.author);r.lines.push(s),e.set(n,r),s.from.year!==s.to.year&&(n=`${s.to.year}-${s.author}`,r=e.get(n)||Zk(n,s.to.year,s.author),r.lines.push(s),e.set(n,r))}),Array.from(e.values())}function kq(t){const e=new Map;t.forEach(n=>{const r=e.get(n.year)||{year:n.year,rows:[]};r.rows.push(n),e.set(n.year,r)});const s=Array.from(e.values()).sort((n,r)=>r.year-n.year);return s.forEach(n=>{n.rows.sort((r,u)=>r.author.localeCompare(u.author))}),s}function Lo(t){return(e,s)=>{if(e==="marker")return s.to?[Math.floor(s.from/3.66),Math.floor(s.to/3.66)]:[Math.floor(s.from/3.66)];let r=s.from.month*30+s.from.day,u=s.to.month*30+s.to.day;return s.from.year!==s.to.year&&(s.from.year===t?u=365:r=0),[Math.floor(r/3.66),Math.floor(u/3.66)]}}function bq({rowsByYear:t}){const e=t.map(r=>[{year:r.year,isYear:!0},...r.rows]).flat(),[s,n]=kc();return o.jsx(Ln,{template:"table",children:o.jsxs(ws,{rows:e,children:[o.jsx(w,{width:200,template:r=>r.isYear?o.jsx("b",{children:r.year}):r.author}),o.jsx(w,{title:()=>o.jsx(Wi,{markersLine:n,markersText:s,formatter:Lo()}),template:r=>o.jsx(Wi,{markersLine:r.isYear?[]:n,lines:r.lines||[],formatter:Lo(r.year)})})]})})}function wq({response:t,updateSort:e}){if(!t)return null;const[s,n]=kc();return o.jsxs(Ln,{template:"table",children:[o.jsx(nt,{height:"xxl"}),o.jsxs(ws,{rows:t.content,sort:t.sort,updateSort:e,children:[o.jsx(w,{template:C.STRING,width:200,properties:"author"}),o.jsx(w,{title:()=>o.jsx(Wi,{markersLine:n,markersText:s,formatter:Lo()}),template:r=>o.jsx(Wi,{markersLine:n,markersText:r.header?s:[],lines:r.header?[]:r.lines,formatter:Lo(r.year)})})]})]})}function xq({mode:t,rowsByYear:e}){const[s,n]=T.useState(e==null?void 0:e[0]),r=T.useMemo(()=>e.map(u=>({id:u.year,title:u.year})).reverse(),[s==null?void 0:s.year]);return o.jsxs(o.Fragment,{children:[o.jsx(ms,{value:s==null?void 0:s.year,options:r,onChange:u=>{var c;n((c=e==null?void 0:e.filter(p=>p.year===u))==null?void 0:c[0])}}),o.jsx(nt,{height:"xxl"}),o.jsxs(be,{content:s==null?void 0:s.rows,mode:t,watch:`${t}${s==null?void 0:s.year}`,children:[o.jsx(wq,{}),o.jsx(fe,{})]})]})}function Cq({mode:t,rows:e}){const s=Xk(e),n=kq(s);return s.length>5?o.jsx(xq,{rowsByYear:n,mode:t}):o.jsx(bq,{rowsByYear:n})}function jq({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const[r]=Mt(t,["duration"]);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:n,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{template:C.STRING,title:"plugin.team_vacation.details.author",minWidth:200,properties:"author"}),o.jsx(w,{title:"plugin.team_vacation.details.type",formatter:u=>u.duration>40?{title:"plugin.team_vacation.details.transfer",mode:yt.ERROR}:"plugin.team_vacation.details.vacation",template:C.TAGS,width:200}),o.jsx(w,{template:C.STRING,title:"plugin.team_vacation.details.from",minWidth:130,formatter:u=>oe(u.from.milliseconds)}),o.jsx(w,{template:C.STRING,title:"plugin.team_vacation.details.to",minWidth:130,formatter:u=>oe(u.to.milliseconds)}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"duration"}),o.jsx(w,{isSortable:!0,title:"plugin.team_vacation.details.duration",properties:"duration",minWidth:200,template:u=>o.jsx(ue,{value:u,max:r,suffix:"common.statistic.days"})})]})}function Tq(t){let e=0;const s={};return t.forEach(n=>{n.duration>40||(e+=n.duration,s[n.author]=(s[n.author]||0)+n.duration)}),{totalDays:e,details:s}}function Dq({content:t}){if(!(t!=null&&t.length))return null;const e=A.statisticsByCommits.author.list,{totalDays:s,details:n}=Tq(t),r=de.getMiddleVacationPayInDay();return o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(_e,{value:s,icon:"./assets/cards/lazy.svg",title:"plugin.team_vacation.charts.total.title",description:"plugin.team_vacation.charts.total.description"}),o.jsx(_e,{value:ct(s*r),icon:"./assets/cards/money_holidays.svg",title:"plugin.team_vacation.charts.money.title",description:"plugin.team_vacation.charts.money.description"})]}),o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_vacation.charts.author",details:n,limit:1,order:e,suffix:"common.statistic.days"})})]})}const Sq=U(({mode:t})=>{const e=A.statisticsByCommits.absence.totalInfo||[];return e!=null&&e.length?o.jsxs(o.Fragment,{children:[o.jsx(G,{title:"plugin.team_vacation.charts.title"}),o.jsx(Dq,{content:e}),o.jsx(G,{title:"plugin.team_vacation.grant.title"}),o.jsx(Cq,{rows:e,mode:t}),o.jsx(G,{title:"plugin.team_vacation.details.title"}),o.jsxs(be,{content:e,mode:t,watch:`${t}${A.hash}`,children:[o.jsx(jq,{mode:t,rowsForExcel:e}),o.jsx(fe,{})]})]}):t!=="print"?o.jsx(Le,{}):null});let Aq=(yl=class{constructor(){this.dependencies=["absence","author"]}getMenuItems(){return[{id:"vacation",group:10,order:85,link:"/team/vacation/",title:"plugin.team_vacation.sidebar",icon:"./assets/menu/vacation.svg"}]}getPage(e,s){return e==="/team/vacation"?o.jsx(Sq,{mode:s==null?void 0:s.mode}):void 0}getTranslations(){return vq}},yl.id="team_vacation",yl);const zq={ar:`
|
||
§ plugin.team_departments.sidebar: الأقسام
|
||
§ plugin.team_departments.employmentsChart.title: أحجام الفرق الحالية
|
||
§ plugin.team_departments.employmentsChart.item: فرق
|
||
§ plugin.team_departments.employmentsChart.less1: موظف واحد
|
||
§ plugin.team_departments.employmentsChart.less2: موظفان
|
||
§ plugin.team_departments.employmentsChart.less3: ثلاثة موظفين
|
||
§ plugin.team_departments.employmentsChart.less6: حتى ستة موظفين
|
||
§ plugin.team_departments.employmentsChart.less9: حتى تسعة موظفين
|
||
§ plugin.team_departments.employmentsChart.less12: حتى 12 موظفًا
|
||
§ plugin.team_departments.employmentsChart.less15: حتى 15 موظفًا
|
||
§ plugin.team_departments.employmentsChart.more: أكثر من 15
|
||
§ plugin.team_departments.daysChart.title: مدة المشروع
|
||
§ plugin.team_departments.daysChart.item: مشاريع
|
||
§ plugin.team_departments.title: قائمة المشاريع
|
||
§ plugin.team_departments.status: الحالة
|
||
§ plugin.team_departments.active.yes: التطوير جارٍ
|
||
§ plugin.team_departments.active.no: لا توجد مهام جديدة
|
||
§ plugin.team_departments.author.work: يعمل
|
||
§ plugin.team_departments.author.dismissed: غادر
|
||
§ plugin.team_departments.author.staff: موظف مساند
|
||
§ plugin.team_departments.code: الرمز
|
||
§ plugin.team_departments.from: أول commit
|
||
§ plugin.team_departments.to: الأخير
|
||
§ plugin.team_departments.authors: أشخاص
|
||
§ plugin.team_departments.tasks: مهام
|
||
§ plugin.team_departments.totalDays: المدة
|
||
§ plugin.team_departments.totalAuthors: الموظفون
|
||
§ plugin.team_departments.totalTasks: المهام
|
||
§ plugin.team_departments.employments.author: الموظف
|
||
§ plugin.team_departments.employments.worked: العمل
|
||
§ plugin.team_departments.employments.losses: أيام بلا commits
|
||
§ plugin.team_departments.employments.totalDays: الأيام في القسم
|
||
§ plugin.team_departments.employments.totalTasks: المهام المنجزة
|
||
§ plugin.team_departments.banner.title: معلومات تفصيلية عن القسم
|
||
§ plugin.team_departments.details.title: البيانات الفعلية للقسم
|
||
§ plugin.team_departments.details.totalDays: مدة العمل
|
||
§ plugin.team_departments.details.moneyInMonth: تكلفة التطوير شهريًا
|
||
§ plugin.team_departments.details.moneyAll: تكلفة التطوير على مدار الفترة
|
||
§ plugin.team_departments.details.mainLocation: الموقع الرئيسي
|
||
§ plugin.team_departments.details.activeAuthors.title: يعمل / غادر
|
||
§ plugin.team_departments.details.activeAuthors.description: إذا لم يُجرِ الموظف أي commit خلال شهر، يُعدّ قد غادر. تُعرض الحالة للموظفين دون ارتباط بهذا القسم: قد يعملون في أي قسم أو يكونون قد غادروا الشركة بالكامل.
|
||
§ plugin.team_departments.details.linesInTask.title: أسطر التعليمات البرمجية لكل مهمة
|
||
§ plugin.team_departments.details.linesInTask.description: المتوسط المرجّح لعدد أسطر التعليمات البرمجية لكل مهمة. يساعد على تقدير دقة المهام.
|
||
§ plugin.team_departments.details.totalTasks.title: مهام كانت قيد العمل
|
||
§ plugin.team_departments.details.totalTasks.description: يُحتسب أي ذكر لمعرّف مهمة فريد. قد لا تكون المهمة مغلقة في متعقّب المهام.
|
||
§ plugin.team_departments.months.title: العدد المحتمل للموظفين في القسم
|
||
§ plugin.team_departments.months.description: يُصدر متعقّب المهام معرّفات مهام متسلسلة. بمعرفة أقصى معرّف مهمة في بداية الشهر ونهايته يمكن معرفة عدد *المهام الجديدة*. وعدد المهام *المُصلحة* هذا الشهر يظهر في السجلات. ومن أصلحها (*عمل*) يظهر أيضًا. وعدد المهام التي أُصلحت لاحقًا (*المتأخرات*) يُحسب كذلك من سجلات الأشهر التالية. نُسقط إنتاجية المبرمجين الذين نراهم على إجمالي عدد المهام لتقدير عدد *إجمالي المبرمجين* الذي ينبغي أن يكون في القسم. وبناءً على عدد «المبرمجين» نقدّر عدد مهندسي ضمان الجودة والمحللين والمديرين.
|
||
§ plugin.team_departments.months.newTaskInMonth: مهام جديدة
|
||
§ plugin.team_departments.months.tasksFixedThisGroup: أُصلحت
|
||
§ plugin.team_departments.months.tasksInBacklog: المتأخرات
|
||
§ plugin.team_departments.months.programmistInThisGroup: عملوا
|
||
§ plugin.team_departments.months.allProgrammistInDepartment: ينبغي أن يعملوا
|
||
§ plugin.team_departments.months.allUsersInDepartment: إجمالي الموظفين
|
||
§ plugin.team_departments.forecasting.title: توقّع التكلفة الكاملة
|
||
§ plugin.team_departments.forecasting.moneyInMonth.title: تكاليف القسم شهريًا
|
||
§ plugin.team_departments.forecasting.moneyInMonth.description: نضرب عدد جميع الموظفين المحتملين (التطوير، ضمان الجودة، التحليلات، الإدارة) لآخر شهر في متوسط الراتب.
|
||
§ plugin.team_departments.forecasting.moneyAll.title: تكاليف القسم على مدار الفترة
|
||
§ plugin.team_departments.forecasting.moneyAll.description: نضرب عدد جميع الموظفين المحتملين (التطوير، ضمان الجودة، التحليلات، الإدارة) لكل شهر في متوسط الراتب.
|
||
`,de:`
|
||
§ plugin.team_departments.sidebar: Abteilungen
|
||
§ plugin.team_departments.employmentsChart.title: Aktuelle Teamgrößen
|
||
§ plugin.team_departments.employmentsChart.item: Teams
|
||
§ plugin.team_departments.employmentsChart.less1: ein Mitarbeiter
|
||
§ plugin.team_departments.employmentsChart.less2: zwei Mitarbeiter
|
||
§ plugin.team_departments.employmentsChart.less3: drei Mitarbeiter
|
||
§ plugin.team_departments.employmentsChart.less6: bis zu sechs Mitarbeitern
|
||
§ plugin.team_departments.employmentsChart.less9: bis zu neun Mitarbeitern
|
||
§ plugin.team_departments.employmentsChart.less12: bis zu 12 Mitarbeitern
|
||
§ plugin.team_departments.employmentsChart.less15: bis zu 15 Mitarbeitern
|
||
§ plugin.team_departments.employmentsChart.more: mehr als 15
|
||
§ plugin.team_departments.daysChart.title: Projektdauer
|
||
§ plugin.team_departments.daysChart.item: Projekte
|
||
§ plugin.team_departments.title: Projektliste
|
||
§ plugin.team_departments.status: Status
|
||
§ plugin.team_departments.active.yes: Entwicklung im Gange
|
||
§ plugin.team_departments.active.no: Keine neuen Aufgaben
|
||
§ plugin.team_departments.author.work: arbeitet
|
||
§ plugin.team_departments.author.dismissed: ausgeschieden
|
||
§ plugin.team_departments.author.staff: Hilfskraft
|
||
§ plugin.team_departments.code: Code
|
||
§ plugin.team_departments.from: Erster commit
|
||
§ plugin.team_departments.to: Letzter
|
||
§ plugin.team_departments.authors: Personen
|
||
§ plugin.team_departments.tasks: Aufgaben
|
||
§ plugin.team_departments.totalDays: Dauer
|
||
§ plugin.team_departments.totalAuthors: Mitarbeiter
|
||
§ plugin.team_departments.totalTasks: Aufgaben
|
||
§ plugin.team_departments.employments.author: Mitarbeiter
|
||
§ plugin.team_departments.employments.worked: Arbeit
|
||
§ plugin.team_departments.employments.losses: Tage ohne commits
|
||
§ plugin.team_departments.employments.totalDays: Tage in der Abteilung
|
||
§ plugin.team_departments.employments.totalTasks: Erledigte Aufgaben
|
||
§ plugin.team_departments.banner.title: detaillierte Abteilungsinformationen
|
||
§ plugin.team_departments.details.title: Tatsächliche Abteilungsdaten
|
||
§ plugin.team_departments.details.totalDays: Arbeitsdauer
|
||
§ plugin.team_departments.details.moneyInMonth: Entwicklungskosten pro Monat
|
||
§ plugin.team_departments.details.moneyAll: Entwicklungskosten im Zeitverlauf
|
||
§ plugin.team_departments.details.mainLocation: Hauptstandort
|
||
§ plugin.team_departments.details.activeAuthors.title: arbeitet / hat verlassen
|
||
§ plugin.team_departments.details.activeAuthors.description: Wenn ein Mitarbeiter innerhalb eines Monats keinen einzigen commit durchführt, gilt er als ausgeschieden. Der Status wird für Mitarbeiter unabhängig von dieser Abteilung angezeigt: Sie können in einer beliebigen Abteilung arbeiten oder das Unternehmen vollständig verlassen haben.
|
||
§ plugin.team_departments.details.linesInTask.title: Codezeilen pro Aufgabe
|
||
§ plugin.team_departments.details.linesInTask.description: Gewichtete durchschnittliche Anzahl von Codezeilen pro Aufgabe. Hilft bei der Einschätzung der Aufgabengranularität.
|
||
§ plugin.team_departments.details.totalTasks.title: Aufgaben waren in Bearbeitung
|
||
§ plugin.team_departments.details.totalTasks.description: Jede Erwähnung einer eindeutigen Aufgaben-ID wird gezählt. Die Aufgabe wurde möglicherweise nicht im Aufgabentracker geschlossen.
|
||
§ plugin.team_departments.months.title: Mögliche Anzahl der Mitarbeiter in der Abteilung
|
||
§ plugin.team_departments.months.description: Der Aufgabentracker vergibt fortlaufende Aufgaben-IDs. Anhand der maximalen Aufgaben-ID zu Beginn und am Ende des Monats lässt sich die Zahl der *neuen Aufgaben* ermitteln. Die Zahl der in diesem Monat *behobenen* Aufgaben ist in den Logs sichtbar. Wer sie behoben hat (*gearbeitet hat*), ebenfalls. Die Zahl der später behobenen Aufgaben (*Backlog*) wird aus den Logs der Folgemonate berechnet. Wir extrapolieren den Durchsatz der sichtbaren Programmierer auf die Gesamtzahl der Aufgaben, um zu schätzen, wie viele *Programmierer insgesamt* in der Abteilung sein sollten. Anhand der Zahl der „Programmierer“ schätzen wir die Zahl der QA-Ingenieure, Analysten und Manager.
|
||
§ plugin.team_departments.months.newTaskInMonth: Neue Aufgaben
|
||
§ plugin.team_departments.months.tasksFixedThisGroup: Behoben
|
||
§ plugin.team_departments.months.tasksInBacklog: Backlog
|
||
§ plugin.team_departments.months.programmistInThisGroup: Haben gearbeitet
|
||
§ plugin.team_departments.months.allProgrammistInDepartment: Sollten arbeiten
|
||
§ plugin.team_departments.months.allUsersInDepartment: Mitarbeiter insgesamt
|
||
§ plugin.team_departments.forecasting.title: Prognose der Gesamtkosten
|
||
§ plugin.team_departments.forecasting.moneyInMonth.title: Abteilungskosten pro Monat
|
||
§ plugin.team_departments.forecasting.moneyInMonth.description: Die Zahl aller potenziellen Mitarbeiter (Entwicklung, QA, Analytik, Management) des letzten Monats wird mit dem Durchschnittsgehalt multipliziert.
|
||
§ plugin.team_departments.forecasting.moneyAll.title: Abteilungskosten im Zeitverlauf
|
||
§ plugin.team_departments.forecasting.moneyAll.description: Die Zahl aller potenziellen Mitarbeiter (Entwicklung, QA, Analytik, Management) für jeden Monat wird mit dem Durchschnittsgehalt multipliziert.
|
||
`,en:`
|
||
§ plugin.team_departments.sidebar: Departments
|
||
§ plugin.team_departments.employmentsChart.title: Current team sizes
|
||
§ plugin.team_departments.employmentsChart.item: teams
|
||
§ plugin.team_departments.employmentsChart.less1: one staff member
|
||
§ plugin.team_departments.employmentsChart.less2: two staff members
|
||
§ plugin.team_departments.employmentsChart.less3: three staff members
|
||
§ plugin.team_departments.employmentsChart.less6: up to six staff members
|
||
§ plugin.team_departments.employmentsChart.less9: up to nine staff members
|
||
§ plugin.team_departments.employmentsChart.less12: up to 12 staff members
|
||
§ plugin.team_departments.employmentsChart.less15: up to 15 staff members
|
||
§ plugin.team_departments.employmentsChart.more: more than 15
|
||
§ plugin.team_departments.daysChart.title: Project duration
|
||
§ plugin.team_departments.daysChart.item: projects
|
||
§ plugin.team_departments.title: Project list
|
||
§ plugin.team_departments.status: Status
|
||
§ plugin.team_departments.active.yes: Development in progress
|
||
§ plugin.team_departments.active.no: No new tasks
|
||
§ plugin.team_departments.author.work: works
|
||
§ plugin.team_departments.author.dismissed: left
|
||
§ plugin.team_departments.author.staff: staff
|
||
§ plugin.team_departments.code: Code
|
||
§ plugin.team_departments.from: First commit
|
||
§ plugin.team_departments.to: Last
|
||
§ plugin.team_departments.authors: people
|
||
§ plugin.team_departments.tasks: tasks
|
||
§ plugin.team_departments.totalDays: Duration
|
||
§ plugin.team_departments.totalAuthors: Staff members
|
||
§ plugin.team_departments.totalTasks: Tasks
|
||
§ plugin.team_departments.employments.author: Staff member
|
||
§ plugin.team_departments.employments.worked: work
|
||
§ plugin.team_departments.employments.losses: days without commits
|
||
§ plugin.team_departments.employments.totalDays: Days in department
|
||
§ plugin.team_departments.employments.totalTasks: Tasks completed
|
||
§ plugin.team_departments.banner.title: detailed department information
|
||
§ plugin.team_departments.details.title: Actual department data
|
||
§ plugin.team_departments.details.totalDays: work duration
|
||
§ plugin.team_departments.details.moneyInMonth: development cost per month
|
||
§ plugin.team_departments.details.moneyAll: development cost over time
|
||
§ plugin.team_departments.details.mainLocation: main location
|
||
§ plugin.team_departments.details.activeAuthors.title: works / left
|
||
§ plugin.team_departments.details.activeAuthors.description: If a staff member did not make a single commit within a month, they are considered to have left. The status is shown for staff members regardless of this department: they may work in any department or have left the company completely.
|
||
§ plugin.team_departments.details.linesInTask.title: lines of code per task
|
||
§ plugin.team_departments.details.linesInTask.description: Weighted average number of lines of code per task. Helps estimate task granularity.
|
||
§ plugin.team_departments.details.totalTasks.title: tasks were in work
|
||
§ plugin.team_departments.details.totalTasks.description: Any mention of a unique task ID is counted. The task may not have been closed in the task tracker.
|
||
§ plugin.team_departments.months.title: Possible number of staff members in the department
|
||
§ plugin.team_departments.months.description: The task tracker issues sequential task IDs. Knowing the maximum task ID at the beginning and end of the month, we can find the number of *new tasks*. The number of tasks *fixed* this month is visible in the logs. Who fixed them (*worked*) is also visible. The number of tasks fixed later (*backlog*) is also calculated from the logs of subsequent months. We extrapolate the throughput of the programmers we see to the total number of tasks to estimate how many *total programmers* should be in the department. Based on the number of "programmers", we estimate the number of QA engineers, analysts, and managers.
|
||
§ plugin.team_departments.months.newTaskInMonth: New tasks
|
||
§ plugin.team_departments.months.tasksFixedThisGroup: Fixed
|
||
§ plugin.team_departments.months.tasksInBacklog: Backlog
|
||
§ plugin.team_departments.months.programmistInThisGroup: Worked
|
||
§ plugin.team_departments.months.allProgrammistInDepartment: Should work
|
||
§ plugin.team_departments.months.allUsersInDepartment: Total staff
|
||
§ plugin.team_departments.forecasting.title: Full cost forecast
|
||
§ plugin.team_departments.forecasting.moneyInMonth.title: department costs per month
|
||
§ plugin.team_departments.forecasting.moneyInMonth.description: Multiply the number of all potential staff members (development, QA, analytics, management) for the last month by the average salary.
|
||
§ plugin.team_departments.forecasting.moneyAll.title: department costs over time
|
||
§ plugin.team_departments.forecasting.moneyAll.description: Multiply the number of all potential staff members (development, QA, analytics, management) for each month by the average salary.
|
||
`,es:`
|
||
§ plugin.team_departments.sidebar: Departamentos
|
||
§ plugin.team_departments.employmentsChart.title: Tamaños actuales de los equipos
|
||
§ plugin.team_departments.employmentsChart.item: equipos
|
||
§ plugin.team_departments.employmentsChart.less1: un empleado
|
||
§ plugin.team_departments.employmentsChart.less2: dos empleados
|
||
§ plugin.team_departments.employmentsChart.less3: tres empleados
|
||
§ plugin.team_departments.employmentsChart.less6: hasta seis empleados
|
||
§ plugin.team_departments.employmentsChart.less9: hasta nueve empleados
|
||
§ plugin.team_departments.employmentsChart.less12: hasta 12 empleados
|
||
§ plugin.team_departments.employmentsChart.less15: hasta 15 empleados
|
||
§ plugin.team_departments.employmentsChart.more: más de 15
|
||
§ plugin.team_departments.daysChart.title: Duración del proyecto
|
||
§ plugin.team_departments.daysChart.item: proyectos
|
||
§ plugin.team_departments.title: Lista de proyectos
|
||
§ plugin.team_departments.status: Estado
|
||
§ plugin.team_departments.active.yes: Desarrollo en curso
|
||
§ plugin.team_departments.active.no: No hay nuevas tareas
|
||
§ plugin.team_departments.author.work: trabaja
|
||
§ plugin.team_departments.author.dismissed: ha dejado
|
||
§ plugin.team_departments.author.staff: apoyo
|
||
§ plugin.team_departments.code: Código
|
||
§ plugin.team_departments.from: Primer commit
|
||
§ plugin.team_departments.to: Último
|
||
§ plugin.team_departments.authors: personas
|
||
§ plugin.team_departments.tasks: tareas
|
||
§ plugin.team_departments.totalDays: Duración
|
||
§ plugin.team_departments.totalAuthors: Empleados
|
||
§ plugin.team_departments.totalTasks: Tareas
|
||
§ plugin.team_departments.employments.author: Empleado
|
||
§ plugin.team_departments.employments.worked: trabajo
|
||
§ plugin.team_departments.employments.losses: días sin commits
|
||
§ plugin.team_departments.employments.totalDays: Días en el departamento
|
||
§ plugin.team_departments.employments.totalTasks: Tareas completadas
|
||
§ plugin.team_departments.banner.title: información detallada del departamento
|
||
§ plugin.team_departments.details.title: Datos reales del departamento
|
||
§ plugin.team_departments.details.totalDays: duración del trabajo
|
||
§ plugin.team_departments.details.moneyInMonth: coste de desarrollo por mes
|
||
§ plugin.team_departments.details.moneyAll: coste de desarrollo a lo largo del tiempo
|
||
§ plugin.team_departments.details.mainLocation: ubicación principal
|
||
§ plugin.team_departments.details.activeAuthors.title: trabaja / ha dejado
|
||
§ plugin.team_departments.details.activeAuthors.description: Si un empleado no realiza ningún commit en un mes, se considera que ha salido. El estado se muestra para los empleados con independencia de este departamento: pueden trabajar en cualquier departamento o haber salido de la empresa por completo.
|
||
§ plugin.team_departments.details.linesInTask.title: líneas de código por tarea
|
||
§ plugin.team_departments.details.linesInTask.description: Número promedio ponderado de líneas de código por tarea. Ayuda a estimar la granularidad de las tareas.
|
||
§ plugin.team_departments.details.totalTasks.title: tareas estuvieron en curso
|
||
§ plugin.team_departments.details.totalTasks.description: Se cuenta cualquier mención de un ID de tarea único. Es posible que la tarea no se haya cerrado en el sistema de seguimiento de tareas.
|
||
§ plugin.team_departments.months.title: Posible número de empleados en el departamento
|
||
§ plugin.team_departments.months.description: El sistema de seguimiento de tareas emite IDs de tarea secuenciales. Conociendo el ID máximo al inicio y al final del mes, se obtiene el número de *tareas nuevas*. El número de tareas *corregidas* este mes se ve en los logs. Quién las corrigió (*trabajó*) también se ve. El número de tareas corregidas más tarde (*backlog*) se calcula a partir de los logs de los meses siguientes. Extrapolamos el rendimiento de los programadores que vemos al número total de tareas para estimar cuántos *programadores en total* debería haber en el departamento. A partir del número de «programadores» estimamos el de ingenieros de QA, analistas y gestores.
|
||
§ plugin.team_departments.months.newTaskInMonth: Tareas nuevas
|
||
§ plugin.team_departments.months.tasksFixedThisGroup: Corregidas
|
||
§ plugin.team_departments.months.tasksInBacklog: Backlog
|
||
§ plugin.team_departments.months.programmistInThisGroup: Trabajaron
|
||
§ plugin.team_departments.months.allProgrammistInDepartment: Deberían trabajar
|
||
§ plugin.team_departments.months.allUsersInDepartment: Personal total
|
||
§ plugin.team_departments.forecasting.title: Previsión del coste completo
|
||
§ plugin.team_departments.forecasting.moneyInMonth.title: costes del departamento por mes
|
||
§ plugin.team_departments.forecasting.moneyInMonth.description: Se multiplica el número de todos los empleados potenciales (desarrollo, QA, analítica, gestión) del último mes por el salario medio.
|
||
§ plugin.team_departments.forecasting.moneyAll.title: costes del departamento a lo largo del tiempo
|
||
§ plugin.team_departments.forecasting.moneyAll.description: Se multiplica el número de todos los empleados potenciales (desarrollo, QA, analítica, gestión) de cada mes por el salario medio.
|
||
`,fr:`
|
||
§ plugin.team_departments.sidebar: Départements
|
||
§ plugin.team_departments.employmentsChart.title: Tailles actuelles des équipes
|
||
§ plugin.team_departments.employmentsChart.item: équipes
|
||
§ plugin.team_departments.employmentsChart.less1: un collaborateur
|
||
§ plugin.team_departments.employmentsChart.less2: deux collaborateurs
|
||
§ plugin.team_departments.employmentsChart.less3: trois collaborateurs
|
||
§ plugin.team_departments.employmentsChart.less6: jusqu’à six collaborateurs
|
||
§ plugin.team_departments.employmentsChart.less9: jusqu’à neuf collaborateurs
|
||
§ plugin.team_departments.employmentsChart.less12: jusqu’à 12 collaborateurs
|
||
§ plugin.team_departments.employmentsChart.less15: jusqu’à 15 collaborateurs
|
||
§ plugin.team_departments.employmentsChart.more: plus de 15
|
||
§ plugin.team_departments.daysChart.title: Durée du projet
|
||
§ plugin.team_departments.daysChart.item: projets
|
||
§ plugin.team_departments.title: Liste des projets
|
||
§ plugin.team_departments.status: Statut
|
||
§ plugin.team_departments.active.yes: Développement en cours
|
||
§ plugin.team_departments.active.no: Pas de nouvelles tâches
|
||
§ plugin.team_departments.author.work: travaille
|
||
§ plugin.team_departments.author.dismissed: parti
|
||
§ plugin.team_departments.author.staff: assistance
|
||
§ plugin.team_departments.code: Code
|
||
§ plugin.team_departments.from: Premier commit
|
||
§ plugin.team_departments.to: Dernier
|
||
§ plugin.team_departments.authors: personnes
|
||
§ plugin.team_departments.tasks: tâches
|
||
§ plugin.team_departments.totalDays: Durée
|
||
§ plugin.team_departments.totalAuthors: Collaborateurs
|
||
§ plugin.team_departments.totalTasks: Tâches
|
||
§ plugin.team_departments.employments.author: Collaborateur
|
||
§ plugin.team_departments.employments.worked: travail
|
||
§ plugin.team_departments.employments.losses: jours sans commits
|
||
§ plugin.team_departments.employments.totalDays: Jours dans le département
|
||
§ plugin.team_departments.employments.totalTasks: Tâches réalisées
|
||
§ plugin.team_departments.banner.title: informations détaillées sur le département
|
||
§ plugin.team_departments.details.title: Données réelles du département
|
||
§ plugin.team_departments.details.totalDays: durée du travail
|
||
§ plugin.team_departments.details.moneyInMonth: coût de développement par mois
|
||
§ plugin.team_departments.details.moneyAll: coût de développement sur la période
|
||
§ plugin.team_departments.details.mainLocation: localisation principale
|
||
§ plugin.team_departments.details.activeAuthors.title: travaille / a quitté
|
||
§ plugin.team_departments.details.activeAuthors.description: Si un collaborateur n’a effectué aucun commit pendant un mois, il est considéré comme parti. Le statut est affiché pour les collaborateurs indépendamment de ce département : ils peuvent travailler dans n’importe quel département ou avoir quitté l’entreprise complètement.
|
||
§ plugin.team_departments.details.linesInTask.title: lignes de code par tâche
|
||
§ plugin.team_departments.details.linesInTask.description: Nombre moyen pondéré de lignes de code par tâche. Aide à estimer la granularité des tâches.
|
||
§ plugin.team_departments.details.totalTasks.title: tâches étaient en cours
|
||
§ plugin.team_departments.details.totalTasks.description: Toute mention d’un identifiant de tâche unique est comptée. La tâche peut ne pas avoir été clôturée dans le système de suivi des tâches.
|
||
§ plugin.team_departments.months.title: Nombre possible de collaborateurs dans le département
|
||
§ plugin.team_departments.months.description: Le système de suivi des tâches attribue des identifiants de tâche séquentiels. En connaissant l’identifiant maximal au début et à la fin du mois, on obtient le nombre de *nouvelles tâches*. Le nombre de tâches *corrigées* ce mois-ci est visible dans les logs. Qui les a corrigées (*a travaillé*) l’est aussi. Le nombre de tâches corrigées plus tard (*backlog*) est calculé à partir des logs des mois suivants. Nous extrapolons le débit des programmeurs visibles au nombre total de tâches pour estimer combien de *programmeurs au total* devraient être dans le département. À partir du nombre de « programmeurs », nous estimons le nombre d’ingénieurs QA, d’analystes et de managers.
|
||
§ plugin.team_departments.months.newTaskInMonth: Nouvelles tâches
|
||
§ plugin.team_departments.months.tasksFixedThisGroup: Corrigées
|
||
§ plugin.team_departments.months.tasksInBacklog: Backlog
|
||
§ plugin.team_departments.months.programmistInThisGroup: Ont travaillé
|
||
§ plugin.team_departments.months.allProgrammistInDepartment: Devraient travailler
|
||
§ plugin.team_departments.months.allUsersInDepartment: Effectif total
|
||
§ plugin.team_departments.forecasting.title: Prévision du coût total
|
||
§ plugin.team_departments.forecasting.moneyInMonth.title: coûts du département par mois
|
||
§ plugin.team_departments.forecasting.moneyInMonth.description: Multiplier le nombre de tous les collaborateurs potentiels (développement, QA, analytique, management) du dernier mois par le salaire moyen.
|
||
§ plugin.team_departments.forecasting.moneyAll.title: coûts du département sur toute la période
|
||
§ plugin.team_departments.forecasting.moneyAll.description: Multiplier le nombre de tous les collaborateurs potentiels (développement, QA, analytique, management) pour chaque mois par le salaire moyen.
|
||
`,he:`
|
||
§ plugin.team_departments.sidebar: מחלקות
|
||
§ plugin.team_departments.employmentsChart.title: גודל הצוותים הנוכחיים
|
||
§ plugin.team_departments.employmentsChart.item: צוותים
|
||
§ plugin.team_departments.employmentsChart.less1: עובד אחד
|
||
§ plugin.team_departments.employmentsChart.less2: שני עובדים
|
||
§ plugin.team_departments.employmentsChart.less3: שלושה עובדים
|
||
§ plugin.team_departments.employmentsChart.less6: עד שישה עובדים
|
||
§ plugin.team_departments.employmentsChart.less9: עד תשעה עובדים
|
||
§ plugin.team_departments.employmentsChart.less12: עד 12 עובדים
|
||
§ plugin.team_departments.employmentsChart.less15: עד 15 עובדים
|
||
§ plugin.team_departments.employmentsChart.more: יותר מ-15
|
||
§ plugin.team_departments.daysChart.title: משך הפרויקט
|
||
§ plugin.team_departments.daysChart.item: פרויקטים
|
||
§ plugin.team_departments.title: רשימת פרויקטים
|
||
§ plugin.team_departments.status: סטטוס
|
||
§ plugin.team_departments.active.yes: הפיתוח מתבצע
|
||
§ plugin.team_departments.active.no: אין משימות חדשות
|
||
§ plugin.team_departments.author.work: עובד
|
||
§ plugin.team_departments.author.dismissed: עזב
|
||
§ plugin.team_departments.author.staff: מסייע
|
||
§ plugin.team_departments.code: קוד
|
||
§ plugin.team_departments.from: ה-commit הראשון
|
||
§ plugin.team_departments.to: אחרון
|
||
§ plugin.team_departments.authors: אנשים
|
||
§ plugin.team_departments.tasks: משימות
|
||
§ plugin.team_departments.totalDays: משך
|
||
§ plugin.team_departments.totalAuthors: עובדים
|
||
§ plugin.team_departments.totalTasks: משימות
|
||
§ plugin.team_departments.employments.author: עובד
|
||
§ plugin.team_departments.employments.worked: עבודה
|
||
§ plugin.team_departments.employments.losses: ימים ללא commits
|
||
§ plugin.team_departments.employments.totalDays: ימים במחלקה
|
||
§ plugin.team_departments.employments.totalTasks: משימות שהושלמו
|
||
§ plugin.team_departments.banner.title: מידע מפורט על המחלקה
|
||
§ plugin.team_departments.details.title: נתונים בפועל של המחלקה
|
||
§ plugin.team_departments.details.totalDays: משך העבודה
|
||
§ plugin.team_departments.details.moneyInMonth: עלות פיתוח לחודש
|
||
§ plugin.team_departments.details.moneyAll: עלות פיתוח לאורך הזמן
|
||
§ plugin.team_departments.details.mainLocation: מיקום עיקרי
|
||
§ plugin.team_departments.details.activeAuthors.title: עובד / עזב
|
||
§ plugin.team_departments.details.activeAuthors.description: אם עובד לא ביצע אף commit במשך חודש, הוא נחשב כמי שעזב. הסטטוס מוצג עבור עובדים ללא קשר למחלקה זו: הם עשויים לעבוד בכל מחלקה או לעזוב את החברה לחלוטין.
|
||
§ plugin.team_departments.details.linesInTask.title: שורות קוד למשימה
|
||
§ plugin.team_departments.details.linesInTask.description: ממוצע משוקלל של מספר שורות הקוד למשימה. מסייע להעריך את רמת הפירוט של המשימות.
|
||
§ plugin.team_departments.details.totalTasks.title: משימות שהיו בעבודה
|
||
§ plugin.team_departments.details.totalTasks.description: כל אזכור של מזהה משימה ייחודי נספר. ייתכן שהמשימה לא נסגרה במערכת המעקב אחר משימות.
|
||
§ plugin.team_departments.months.title: מספר עובדים אפשרי במחלקה
|
||
§ plugin.team_departments.months.description: מערכת המעקב אחר משימות מנפיקה מזהי משימה רציפים. לפי מזהה המשימה המרבי בתחילת החודש ובסופו אפשר למצוא את מספר *המשימות החדשות*. מספר המשימות *שתוקנו* החודש נראה בלוגים. מי תיקן אותן (*עבד*) נראה גם כן. מספר המשימות שתוקנו מאוחר יותר (*בקלוג*) מחושב מלוגי החודשים הבאים. אנו מסיקים את התפוקה של המתכנתים שאנו רואים על סך המשימות כדי להעריך כמה *מתכנתים בסך הכול* אמורים להיות במחלקה. לפי מספר ה«מתכנתים» אנו מעריכים את מספר מהנדסי ה-QA, האנליסטים והמנהלים.
|
||
§ plugin.team_departments.months.newTaskInMonth: משימות חדשות
|
||
§ plugin.team_departments.months.tasksFixedThisGroup: תוקנו
|
||
§ plugin.team_departments.months.tasksInBacklog: בקלוג
|
||
§ plugin.team_departments.months.programmistInThisGroup: עבדו
|
||
§ plugin.team_departments.months.allProgrammistInDepartment: אמורים לעבוד
|
||
§ plugin.team_departments.months.allUsersInDepartment: סך העובדים
|
||
§ plugin.team_departments.forecasting.title: תחזית עלות מלאה
|
||
§ plugin.team_departments.forecasting.moneyInMonth.title: עלויות המחלקה לחודש
|
||
§ plugin.team_departments.forecasting.moneyInMonth.description: מכפילים את מספר כל העובדים הפוטנציאליים (פיתוח, QA, אנליטיקה, ניהול) בחודש האחרון בשכר הממוצע.
|
||
§ plugin.team_departments.forecasting.moneyAll.title: עלויות המחלקה לאורך הזמן
|
||
§ plugin.team_departments.forecasting.moneyAll.description: מכפילים את מספר כל העובדים הפוטנציאליים (פיתוח, QA, אנליטיקה, ניהול) בכל חודש בשכר הממוצע.
|
||
`,hi:`
|
||
§ plugin.team_departments.sidebar: विभाग
|
||
§ plugin.team_departments.employmentsChart.title: वर्तमान टीम आकार
|
||
§ plugin.team_departments.employmentsChart.item: टीमें
|
||
§ plugin.team_departments.employmentsChart.less1: एक कर्मचारी
|
||
§ plugin.team_departments.employmentsChart.less2: दो कर्मचारी
|
||
§ plugin.team_departments.employmentsChart.less3: तीन कर्मचारी
|
||
§ plugin.team_departments.employmentsChart.less6: अधिकतम छह कर्मचारी
|
||
§ plugin.team_departments.employmentsChart.less9: अधिकतम नौ कर्मचारी
|
||
§ plugin.team_departments.employmentsChart.less12: अधिकतम 12 कर्मचारी
|
||
§ plugin.team_departments.employmentsChart.less15: अधिकतम 15 कर्मचारी
|
||
§ plugin.team_departments.employmentsChart.more: 15 से अधिक
|
||
§ plugin.team_departments.daysChart.title: परियोजना अवधि
|
||
§ plugin.team_departments.daysChart.item: परियोजनाएँ
|
||
§ plugin.team_departments.title: परियोजना सूची
|
||
§ plugin.team_departments.status: स्थिति
|
||
§ plugin.team_departments.active.yes: विकास जारी है
|
||
§ plugin.team_departments.active.no: कोई नए कार्य नहीं
|
||
§ plugin.team_departments.author.work: कार्यरत
|
||
§ plugin.team_departments.author.dismissed: छोड़ चुके
|
||
§ plugin.team_departments.author.staff: सहायक
|
||
§ plugin.team_departments.code: कोड
|
||
§ plugin.team_departments.from: पहला commit
|
||
§ plugin.team_departments.to: अंतिम
|
||
§ plugin.team_departments.authors: लोग
|
||
§ plugin.team_departments.tasks: कार्य
|
||
§ plugin.team_departments.totalDays: अवधि
|
||
§ plugin.team_departments.totalAuthors: कर्मचारी
|
||
§ plugin.team_departments.totalTasks: कार्य
|
||
§ plugin.team_departments.employments.author: कर्मचारी
|
||
§ plugin.team_departments.employments.worked: कार्य
|
||
§ plugin.team_departments.employments.losses: बिना commits के दिन
|
||
§ plugin.team_departments.employments.totalDays: विभाग में दिन
|
||
§ plugin.team_departments.employments.totalTasks: पूर्ण किए गए कार्य
|
||
§ plugin.team_departments.banner.title: विभाग की विस्तृत जानकारी
|
||
§ plugin.team_departments.details.title: विभाग का वास्तविक डेटा
|
||
§ plugin.team_departments.details.totalDays: कार्य अवधि
|
||
§ plugin.team_departments.details.moneyInMonth: प्रति माह विकास लागत
|
||
§ plugin.team_departments.details.moneyAll: पूरी अवधि की विकास लागत
|
||
§ plugin.team_departments.details.mainLocation: मुख्य स्थान
|
||
§ plugin.team_departments.details.activeAuthors.title: कार्यरत / छोड़ चुके
|
||
§ plugin.team_departments.details.activeAuthors.description: यदि किसी कर्मचारी ने एक महीने में एक भी commit नहीं किया, तो उसे कार्य छोड़ चुका माना जाता है। स्थिति कर्मचारियों के लिए इस विभाग से स्वतंत्र दिखाई जाती है: वे किसी भी विभाग में काम कर सकते हैं या कंपनी पूरी तरह छोड़ चुके हो सकते हैं।
|
||
§ plugin.team_departments.details.linesInTask.title: प्रति कार्य कोड पंक्तियाँ
|
||
§ plugin.team_departments.details.linesInTask.description: प्रति कार्य कोड पंक्तियों की भारित औसत संख्या। कार्यों की बारीकी का अनुमान लगाने में मदद करती है।
|
||
§ plugin.team_departments.details.totalTasks.title: कार्य जो प्रगति में थे
|
||
§ plugin.team_departments.details.totalTasks.description: किसी अद्वितीय कार्य ID का कोई भी उल्लेख गिना जाता है। कार्य ट्रैकर में कार्य बंद नहीं किया गया हो सकता है।
|
||
§ plugin.team_departments.months.title: विभाग में कर्मचारियों की संभावित संख्या
|
||
§ plugin.team_departments.months.description: कार्य ट्रैकर क्रमिक कार्य ID जारी करता है। महीने की शुरुआत और अंत में अधिकतम कार्य ID जानकर *नए कार्यों* की संख्या ज्ञात की जा सकती है। इस महीने *सुधारे गए* कार्यों की संख्या लॉग में दिखाई देती है। इन्हें किसने सुधारा (*काम किया*) भी दिखाई देता है। बाद में सुधारे गए कार्यों की संख्या (*बैकलॉग*) अगले महीनों के लॉग से निकाली जाती है। हम दिखने वाले प्रोग्रामर की उत्पादकता को कुल कार्यों पर बढ़ाकर अनुमान लगाते हैं कि विभाग में *कुल प्रोग्रामर* कितने होने चाहिए। «प्रोग्रामर» की संख्या के आधार पर हम QA इंजीनियरों, विश्लेषकों और प्रबंधकों की संख्या का अनुमान लगाते हैं।
|
||
§ plugin.team_departments.months.newTaskInMonth: नए कार्य
|
||
§ plugin.team_departments.months.tasksFixedThisGroup: सुधारे गए
|
||
§ plugin.team_departments.months.tasksInBacklog: बैकलॉग
|
||
§ plugin.team_departments.months.programmistInThisGroup: काम किया
|
||
§ plugin.team_departments.months.allProgrammistInDepartment: काम करना चाहिए
|
||
§ plugin.team_departments.months.allUsersInDepartment: कुल कर्मचारी
|
||
§ plugin.team_departments.forecasting.title: पूर्ण लागत का पूर्वानुमान
|
||
§ plugin.team_departments.forecasting.moneyInMonth.title: विभाग की मासिक लागत
|
||
§ plugin.team_departments.forecasting.moneyInMonth.description: पिछले महीने के सभी संभावित कर्मचारियों (विकास, QA, विश्लेषण, प्रबंधन) की संख्या को औसत वेतन से गुणा करें।
|
||
§ plugin.team_departments.forecasting.moneyAll.title: पूरी अवधि की विभाग लागत
|
||
§ plugin.team_departments.forecasting.moneyAll.description: प्रत्येक महीने के सभी संभावित कर्मचारियों (विकास, QA, विश्लेषण, प्रबंधन) की संख्या को औसत वेतन से गुणा करें।
|
||
`,ja:`
|
||
§ plugin.team_departments.sidebar: 部門
|
||
§ plugin.team_departments.employmentsChart.title: 現在のチーム規模
|
||
§ plugin.team_departments.employmentsChart.item: チーム
|
||
§ plugin.team_departments.employmentsChart.less1: 従業員 1 名
|
||
§ plugin.team_departments.employmentsChart.less2: 従業員 2 名
|
||
§ plugin.team_departments.employmentsChart.less3: 従業員 3 名
|
||
§ plugin.team_departments.employmentsChart.less6: 従業員 6 名まで
|
||
§ plugin.team_departments.employmentsChart.less9: 従業員 9 名まで
|
||
§ plugin.team_departments.employmentsChart.less12: 従業員 12 名まで
|
||
§ plugin.team_departments.employmentsChart.less15: 従業員 15 名まで
|
||
§ plugin.team_departments.employmentsChart.more: 15 名超
|
||
§ plugin.team_departments.daysChart.title: プロジェクト期間
|
||
§ plugin.team_departments.daysChart.item: プロジェクト
|
||
§ plugin.team_departments.title: プロジェクト一覧
|
||
§ plugin.team_departments.status: ステータス
|
||
§ plugin.team_departments.active.yes: 開発中
|
||
§ plugin.team_departments.active.no: 新しいタスクなし
|
||
§ plugin.team_departments.author.work: 在籍
|
||
§ plugin.team_departments.author.dismissed: 退職
|
||
§ plugin.team_departments.author.staff: 補助
|
||
§ plugin.team_departments.code: コード
|
||
§ plugin.team_departments.from: 最初の commit
|
||
§ plugin.team_departments.to: 最後
|
||
§ plugin.team_departments.authors: 人
|
||
§ plugin.team_departments.tasks: タスク
|
||
§ plugin.team_departments.totalDays: 期間
|
||
§ plugin.team_departments.totalAuthors: 従業員
|
||
§ plugin.team_departments.totalTasks: タスク
|
||
§ plugin.team_departments.employments.author: 従業員
|
||
§ plugin.team_departments.employments.worked: 勤務
|
||
§ plugin.team_departments.employments.losses: commit のない日
|
||
§ plugin.team_departments.employments.totalDays: 部門内の日数
|
||
§ plugin.team_departments.employments.totalTasks: 完了したタスク
|
||
§ plugin.team_departments.banner.title: 部門の詳細情報
|
||
§ plugin.team_departments.details.title: 部門の実績データ
|
||
§ plugin.team_departments.details.totalDays: 作業期間
|
||
§ plugin.team_departments.details.moneyInMonth: 月間開発コスト
|
||
§ plugin.team_departments.details.moneyAll: 期間全体の開発コスト
|
||
§ plugin.team_departments.details.mainLocation: 主な所在地
|
||
§ plugin.team_departments.details.activeAuthors.title: 在籍 / 退職
|
||
§ plugin.team_departments.details.activeAuthors.description: 従業員が 1 か月間一度も commit しなかった場合、退職したと見なされます。ステータスはこの部門に限らず表示されます。いずれかの部門で働いているか、会社を完全に退職している可能性があります。
|
||
§ plugin.team_departments.details.linesInTask.title: タスクあたりのコード行数
|
||
§ plugin.team_departments.details.linesInTask.description: タスクあたりのコード行数の加重平均値。タスクの粒度を推定するのに役立ちます。
|
||
§ plugin.team_departments.details.totalTasks.title: 担当していたタスク
|
||
§ plugin.team_departments.details.totalTasks.description: 固有のタスク ID の言及があればすべてカウントされます。タスクトラッカーでタスクがクローズされていない場合があります。
|
||
§ plugin.team_departments.months.title: 部門の想定従業員数
|
||
§ plugin.team_departments.months.description: タスクトラッカーは連番のタスク ID を発行します。月初と月末の最大タスク ID から *新規タスク* の数を求められます。今月 *修正された* タスク数はログに現れます。誰が修正したか(*稼働したか*)も同様です。後から修正されたタスク数(*バックログ*)は翌月以降のログから算出します。見えるプログラマの処理量をタスク総数に外挿し、部門にいるべき *プログラマ総数* を推定します。「プログラマ」の人数から QA エンジニア、アナリスト、マネージャの人数を見積もります。
|
||
§ plugin.team_departments.months.newTaskInMonth: 新規タスク
|
||
§ plugin.team_departments.months.tasksFixedThisGroup: 修正済み
|
||
§ plugin.team_departments.months.tasksInBacklog: バックログ
|
||
§ plugin.team_departments.months.programmistInThisGroup: 稼働した
|
||
§ plugin.team_departments.months.allProgrammistInDepartment: 稼働すべき人数
|
||
§ plugin.team_departments.months.allUsersInDepartment: 従業員合計
|
||
§ plugin.team_departments.forecasting.title: 総コスト予測
|
||
§ plugin.team_departments.forecasting.moneyInMonth.title: 部門の月間コスト
|
||
§ plugin.team_departments.forecasting.moneyInMonth.description: 直近月の想定従業員数(開発、QA、分析、マネジメント)に平均給与を掛けます。
|
||
§ plugin.team_departments.forecasting.moneyAll.title: 期間全体の部門コスト
|
||
§ plugin.team_departments.forecasting.moneyAll.description: 各月の想定従業員数(開発、QA、分析、マネジメント)に平均給与を掛けます。
|
||
`,ko:`
|
||
§ plugin.team_departments.sidebar: 부서
|
||
§ plugin.team_departments.employmentsChart.title: 현재 팀 규모
|
||
§ plugin.team_departments.employmentsChart.item: 팀
|
||
§ plugin.team_departments.employmentsChart.less1: 직원 1명
|
||
§ plugin.team_departments.employmentsChart.less2: 직원 2명
|
||
§ plugin.team_departments.employmentsChart.less3: 직원 3명
|
||
§ plugin.team_departments.employmentsChart.less6: 직원 최대 6명
|
||
§ plugin.team_departments.employmentsChart.less9: 직원 최대 9명
|
||
§ plugin.team_departments.employmentsChart.less12: 직원 최대 12명
|
||
§ plugin.team_departments.employmentsChart.less15: 직원 최대 15명
|
||
§ plugin.team_departments.employmentsChart.more: 15명 초과
|
||
§ plugin.team_departments.daysChart.title: 프로젝트 기간
|
||
§ plugin.team_departments.daysChart.item: 프로젝트
|
||
§ plugin.team_departments.title: 프로젝트 목록
|
||
§ plugin.team_departments.status: 상태
|
||
§ plugin.team_departments.active.yes: 개발 중
|
||
§ plugin.team_departments.active.no: 새로운 작업 없음
|
||
§ plugin.team_departments.author.work: 근무
|
||
§ plugin.team_departments.author.dismissed: 퇴사
|
||
§ plugin.team_departments.author.staff: 보조
|
||
§ plugin.team_departments.code: 코드
|
||
§ plugin.team_departments.from: 첫 commit
|
||
§ plugin.team_departments.to: 마지막
|
||
§ plugin.team_departments.authors: 명
|
||
§ plugin.team_departments.tasks: 작업
|
||
§ plugin.team_departments.totalDays: 기간
|
||
§ plugin.team_departments.totalAuthors: 직원
|
||
§ plugin.team_departments.totalTasks: 작업
|
||
§ plugin.team_departments.employments.author: 직원
|
||
§ plugin.team_departments.employments.worked: 근무
|
||
§ plugin.team_departments.employments.losses: commit이 없는 날
|
||
§ plugin.team_departments.employments.totalDays: 부서 내 일수
|
||
§ plugin.team_departments.employments.totalTasks: 완료한 작업
|
||
§ plugin.team_departments.banner.title: 부서 상세 정보
|
||
§ plugin.team_departments.details.title: 부서 실제 데이터
|
||
§ plugin.team_departments.details.totalDays: 작업 기간
|
||
§ plugin.team_departments.details.moneyInMonth: 월간 개발 비용
|
||
§ plugin.team_departments.details.moneyAll: 기간 전체 개발 비용
|
||
§ plugin.team_departments.details.mainLocation: 주요 위치
|
||
§ plugin.team_departments.details.activeAuthors.title: 근무 / 퇴사
|
||
§ plugin.team_departments.details.activeAuthors.description: 직원이 한 달 동안 commit을 하나도 하지 않으면 퇴사한 것으로 간주됩니다. 상태는 이 부서와 무관하게 표시됩니다. 다른 부서에서 근무 중이거나 회사를 완전히 떠난 경우일 수 있습니다.
|
||
§ plugin.team_departments.details.linesInTask.title: 작업당 코드 줄 수
|
||
§ plugin.team_departments.details.linesInTask.description: 작업당 코드 줄 수의 가중 평균. 작업의 세분화 정도를 추정하는 데 도움이 됩니다.
|
||
§ plugin.team_departments.details.totalTasks.title: 진행된 작업
|
||
§ plugin.team_departments.details.totalTasks.description: 고유한 작업 ID가 언급된 경우 모두 집계됩니다. 작업 트래커에서 작업이 종료되지 않았을 수 있습니다.
|
||
§ plugin.team_departments.months.title: 부서의 예상 직원 수
|
||
§ plugin.team_departments.months.description: 작업 트래커는 순차적인 작업 ID를 발급합니다. 월초와 월말의 최대 작업 ID를 알면 *신규 작업* 수를 구할 수 있습니다. 이번 달에 *수정된* 작업 수는 로그에서 보입니다. 누가 수정했는지(*근무했는지*)도 보입니다. 나중에 수정된 작업 수(*백로그*)는 이후 달의 로그로 계산합니다. 보이는 프로그래머의 처리량을 전체 작업 수에 외삽하여 부서에 있어야 할 *전체 프로그래머* 수를 추정합니다. 「프로그래머」 수를 바탕으로 QA 엔지니어, 분석가, 관리자 수를 추정합니다.
|
||
§ plugin.team_departments.months.newTaskInMonth: 신규 작업
|
||
§ plugin.team_departments.months.tasksFixedThisGroup: 수정됨
|
||
§ plugin.team_departments.months.tasksInBacklog: 백로그
|
||
§ plugin.team_departments.months.programmistInThisGroup: 근무함
|
||
§ plugin.team_departments.months.allProgrammistInDepartment: 근무해야 함
|
||
§ plugin.team_departments.months.allUsersInDepartment: 전체 직원
|
||
§ plugin.team_departments.forecasting.title: 전체 비용 예측
|
||
§ plugin.team_departments.forecasting.moneyInMonth.title: 부서 월 비용
|
||
§ plugin.team_departments.forecasting.moneyInMonth.description: 지난달의 모든 잠재 직원 수(개발, QA, 분석, 관리)에 평균 급여를 곱합니다.
|
||
§ plugin.team_departments.forecasting.moneyAll.title: 기간 전체 부서 비용
|
||
§ plugin.team_departments.forecasting.moneyAll.description: 각 달의 모든 잠재 직원 수(개발, QA, 분석, 관리)에 평균 급여를 곱합니다.
|
||
`,pt:`
|
||
§ plugin.team_departments.sidebar: Departamentos
|
||
§ plugin.team_departments.employmentsChart.title: Tamanhos atuais das equipes
|
||
§ plugin.team_departments.employmentsChart.item: equipes
|
||
§ plugin.team_departments.employmentsChart.less1: um colaborador
|
||
§ plugin.team_departments.employmentsChart.less2: dois colaboradores
|
||
§ plugin.team_departments.employmentsChart.less3: três colaboradores
|
||
§ plugin.team_departments.employmentsChart.less6: até seis colaboradores
|
||
§ plugin.team_departments.employmentsChart.less9: até nove colaboradores
|
||
§ plugin.team_departments.employmentsChart.less12: até 12 colaboradores
|
||
§ plugin.team_departments.employmentsChart.less15: até 15 colaboradores
|
||
§ plugin.team_departments.employmentsChart.more: mais de 15
|
||
§ plugin.team_departments.daysChart.title: Duração do projeto
|
||
§ plugin.team_departments.daysChart.item: projetos
|
||
§ plugin.team_departments.title: Lista de projetos
|
||
§ plugin.team_departments.status: Status
|
||
§ plugin.team_departments.active.yes: Desenvolvimento em andamento
|
||
§ plugin.team_departments.active.no: Sem novas tarefas
|
||
§ plugin.team_departments.author.work: trabalha
|
||
§ plugin.team_departments.author.dismissed: saiu
|
||
§ plugin.team_departments.author.staff: apoio
|
||
§ plugin.team_departments.code: Código
|
||
§ plugin.team_departments.from: Primeiro commit
|
||
§ plugin.team_departments.to: Último
|
||
§ plugin.team_departments.authors: pessoas
|
||
§ plugin.team_departments.tasks: tarefas
|
||
§ plugin.team_departments.totalDays: Duração
|
||
§ plugin.team_departments.totalAuthors: Colaboradores
|
||
§ plugin.team_departments.totalTasks: Tarefas
|
||
§ plugin.team_departments.employments.author: Colaborador
|
||
§ plugin.team_departments.employments.worked: trabalho
|
||
§ plugin.team_departments.employments.losses: dias sem commits
|
||
§ plugin.team_departments.employments.totalDays: Dias no departamento
|
||
§ plugin.team_departments.employments.totalTasks: Tarefas concluídas
|
||
§ plugin.team_departments.banner.title: informações detalhadas do departamento
|
||
§ plugin.team_departments.details.title: Dados reais do departamento
|
||
§ plugin.team_departments.details.totalDays: duração do trabalho
|
||
§ plugin.team_departments.details.moneyInMonth: custo de desenvolvimento por mês
|
||
§ plugin.team_departments.details.moneyAll: custo de desenvolvimento ao longo do tempo
|
||
§ plugin.team_departments.details.mainLocation: localização principal
|
||
§ plugin.team_departments.details.activeAuthors.title: trabalha / saiu
|
||
§ plugin.team_departments.details.activeAuthors.description: Se um colaborador não fizer nenhum commit em um mês, considera-se que saiu. O status é mostrado para os colaboradores independentemente deste departamento: eles podem trabalhar em qualquer departamento ou ter saído da empresa por completo.
|
||
§ plugin.team_departments.details.linesInTask.title: linhas de código por tarefa
|
||
§ plugin.team_departments.details.linesInTask.description: Número médio ponderado de linhas de código por tarefa. Ajuda a estimar a granularidade das tarefas.
|
||
§ plugin.team_departments.details.totalTasks.title: tarefas estiveram em andamento
|
||
§ plugin.team_departments.details.totalTasks.description: Qualquer menção a um ID de tarefa único é contada. A tarefa pode não ter sido fechada no sistema de acompanhamento de tarefas.
|
||
§ plugin.team_departments.months.title: Possível número de colaboradores no departamento
|
||
§ plugin.team_departments.months.description: O rastreador de tarefas emite IDs de tarefa sequenciais. Conhecendo o ID máximo no início e no fim do mês, obtemos o número de *novas tarefas*. O número de tarefas *corrigidas* neste mês aparece nos logs. Quem as corrigiu (*trabalhou*) também aparece. O número de tarefas corrigidas mais tarde (*backlog*) é calculado a partir dos logs dos meses seguintes. Extrapolamos a produtividade dos programadores visíveis para o total de tarefas a fim de estimar quantos *programadores no total* deveriam estar no departamento. Com base no número de «programadores», estimamos o de engenheiros de QA, analistas e gestores.
|
||
§ plugin.team_departments.months.newTaskInMonth: Novas tarefas
|
||
§ plugin.team_departments.months.tasksFixedThisGroup: Corrigidas
|
||
§ plugin.team_departments.months.tasksInBacklog: Backlog
|
||
§ plugin.team_departments.months.programmistInThisGroup: Trabalharam
|
||
§ plugin.team_departments.months.allProgrammistInDepartment: Deveriam trabalhar
|
||
§ plugin.team_departments.months.allUsersInDepartment: Pessoal total
|
||
§ plugin.team_departments.forecasting.title: Previsão do custo total
|
||
§ plugin.team_departments.forecasting.moneyInMonth.title: custos do departamento por mês
|
||
§ plugin.team_departments.forecasting.moneyInMonth.description: Multiplica-se o número de todos os colaboradores potenciais (desenvolvimento, QA, analítica, gestão) do último mês pelo salário médio.
|
||
§ plugin.team_departments.forecasting.moneyAll.title: custos do departamento ao longo do tempo
|
||
§ plugin.team_departments.forecasting.moneyAll.description: Multiplica-se o número de todos os colaboradores potenciais (desenvolvimento, QA, analítica, gestão) de cada mês pelo salário médio.
|
||
`,ru:`
|
||
§ plugin.team_departments.sidebar: Отделы
|
||
§ plugin.team_departments.employmentsChart.title: Размер текущих команд
|
||
§ plugin.team_departments.employmentsChart.item: команд
|
||
§ plugin.team_departments.employmentsChart.less1: один сотрудник
|
||
§ plugin.team_departments.employmentsChart.less2: два сотрудника
|
||
§ plugin.team_departments.employmentsChart.less3: три сотрудника
|
||
§ plugin.team_departments.employmentsChart.less6: до шести сотрудников
|
||
§ plugin.team_departments.employmentsChart.less9: до девяти сотрудников
|
||
§ plugin.team_departments.employmentsChart.less12: до 12 сотрудников
|
||
§ plugin.team_departments.employmentsChart.less15: до 15 сотрудников
|
||
§ plugin.team_departments.employmentsChart.more: больше 15
|
||
§ plugin.team_departments.daysChart.title: Продолжительность проектов
|
||
§ plugin.team_departments.daysChart.item: проекта
|
||
§ plugin.team_departments.title: Список проектов
|
||
§ plugin.team_departments.status: Статус
|
||
§ plugin.team_departments.active.yes: Идёт разработка
|
||
§ plugin.team_departments.active.no: Новых задач нет
|
||
§ plugin.team_departments.author.work: работает
|
||
§ plugin.team_departments.author.dismissed: уволен
|
||
§ plugin.team_departments.author.staff: помощник
|
||
§ plugin.team_departments.code: Код
|
||
§ plugin.team_departments.from: Первый коммит
|
||
§ plugin.team_departments.to: Последний коммит
|
||
§ plugin.team_departments.authors: человек
|
||
§ plugin.team_departments.tasks: задач
|
||
§ plugin.team_departments.totalDays: Продолжительность
|
||
§ plugin.team_departments.totalAuthors: Сотрудников
|
||
§ plugin.team_departments.totalTasks: Задач
|
||
§ plugin.team_departments.employments.author: Сотрудник
|
||
§ plugin.team_departments.employments.worked: работа
|
||
§ plugin.team_departments.employments.losses: дни без коммитов
|
||
§ plugin.team_departments.employments.totalDays: Дней в отделе
|
||
§ plugin.team_departments.employments.totalTasks: Сделал задач
|
||
§ plugin.team_departments.banner.title: расширенная информация по отделу
|
||
§ plugin.team_departments.details.title: Фактические данные по отделу
|
||
§ plugin.team_departments.details.totalDays: продолжительность работ
|
||
§ plugin.team_departments.details.moneyInMonth: стоимость разработки в месяц
|
||
§ plugin.team_departments.details.moneyAll: стоимость разработки за всё время
|
||
§ plugin.team_departments.details.mainLocation: основная локация
|
||
§ plugin.team_departments.details.activeAuthors.title: работает / уволилось
|
||
§ plugin.team_departments.details.activeAuthors.description: Если сотрудник в течении месяца не сделал ни одного коммита, он считается уволенным. Статус показан относительно сотрудников, без привязки к этому отделу. Работает в каком-либо отделе вообще или уволен из компании полностью.
|
||
§ plugin.team_departments.details.linesInTask.title: строк кода на задачу
|
||
§ plugin.team_departments.details.linesInTask.description: Средневзвешенное количество строк кода на одну задачу. Помогает оценить гранулярность задач.
|
||
§ plugin.team_departments.details.totalTasks.title: задач было в работе
|
||
§ plugin.team_departments.details.totalTasks.description: Считается любое упоминание уникального номера задачи. Задача могла быть не закрыта в таск-трекере.
|
||
§ plugin.team_departments.months.title: Возможное количество сотрудников в отделе
|
||
§ plugin.team_departments.months.description: Таск-трекер выдает серийные номера задач. Зная максимальный номер задачи в начале и конце месяца, мы можем узнать количество *новых задач*. Количество задач *исправленных* в этом месяце видим в логах. Кто их правил (*работало*) так же видим. Количество задач исправленных позже (*беклог*) так же считаем по логам следующих месяцев. Экстраполируем скорость программитов, которых мы видим, на общее количество задач, чтобы прикинуть сколько *всего программистов* должно быть в отделе. По количеству "программистов" прикидываем количество тестировщиков, аналитиков и менеджеров.
|
||
§ plugin.team_departments.months.newTaskInMonth: Новых задач
|
||
§ plugin.team_departments.months.tasksFixedThisGroup: Исправленно
|
||
§ plugin.team_departments.months.tasksInBacklog: Беклог
|
||
§ plugin.team_departments.months.programmistInThisGroup: Работало
|
||
§ plugin.team_departments.months.allProgrammistInDepartment: Должно работать
|
||
§ plugin.team_departments.months.allUsersInDepartment: Всего сотрудников
|
||
§ plugin.team_departments.forecasting.title: Прогноз полной стоимости
|
||
§ plugin.team_departments.forecasting.moneyInMonth.title: расходы на отдел в месяц
|
||
§ plugin.team_departments.forecasting.moneyInMonth.description: Количество всех возможных сотрудников (разработка, тестирование, аналитика, менеджмент) за последний месяц умножаем на среднюю заработную плату.
|
||
§ plugin.team_departments.forecasting.moneyAll.title: расходы на отдел за всё время
|
||
§ plugin.team_departments.forecasting.moneyAll.description: Количество всех возможных сотрудников (разработка, тестирование, аналитика, менеджмент) за каждый месяц умножаем на среднюю заработную плату.
|
||
`,zh:`
|
||
§ plugin.team_departments.sidebar: 部门
|
||
§ plugin.team_departments.employmentsChart.title: 当前团队规模
|
||
§ plugin.team_departments.employmentsChart.item: 团队
|
||
§ plugin.team_departments.employmentsChart.less1: 一名员工
|
||
§ plugin.team_departments.employmentsChart.less2: 两名员工
|
||
§ plugin.team_departments.employmentsChart.less3: 三名员工
|
||
§ plugin.team_departments.employmentsChart.less6: 最多六名员工
|
||
§ plugin.team_departments.employmentsChart.less9: 最多九名员工
|
||
§ plugin.team_departments.employmentsChart.less12: 最多 12 名员工
|
||
§ plugin.team_departments.employmentsChart.less15: 最多 15 名员工
|
||
§ plugin.team_departments.employmentsChart.more: 超过 15 名
|
||
§ plugin.team_departments.daysChart.title: 项目持续时间
|
||
§ plugin.team_departments.daysChart.item: 项目
|
||
§ plugin.team_departments.title: 项目列表
|
||
§ plugin.team_departments.status: 状态
|
||
§ plugin.team_departments.active.yes: 开发进行中
|
||
§ plugin.team_departments.active.no: 无新任务
|
||
§ plugin.team_departments.author.work: 在职
|
||
§ plugin.team_departments.author.dismissed: 已离职
|
||
§ plugin.team_departments.author.staff: 辅助人员
|
||
§ plugin.team_departments.code: 代码
|
||
§ plugin.team_departments.from: 首次 commit
|
||
§ plugin.team_departments.to: 最后
|
||
§ plugin.team_departments.authors: 人
|
||
§ plugin.team_departments.tasks: 任务
|
||
§ plugin.team_departments.totalDays: 持续时间
|
||
§ plugin.team_departments.totalAuthors: 员工
|
||
§ plugin.team_departments.totalTasks: 任务
|
||
§ plugin.team_departments.employments.author: 员工
|
||
§ plugin.team_departments.employments.worked: 工作
|
||
§ plugin.team_departments.employments.losses: 无 commits 的天数
|
||
§ plugin.team_departments.employments.totalDays: 在部门中的天数
|
||
§ plugin.team_departments.employments.totalTasks: 已完成的任务
|
||
§ plugin.team_departments.banner.title: 部门详细信息
|
||
§ plugin.team_departments.details.title: 部门实际数据
|
||
§ plugin.team_departments.details.totalDays: 工作时长
|
||
§ plugin.team_departments.details.moneyInMonth: 每月开发成本
|
||
§ plugin.team_departments.details.moneyAll: 整个期间的开发成本
|
||
§ plugin.team_departments.details.mainLocation: 主要所在地
|
||
§ plugin.team_departments.details.activeAuthors.title: 在职 / 离职
|
||
§ plugin.team_departments.details.activeAuthors.description: 如果员工在一个月内没有任何 commit,则视为已离职。该状态不绑定本部门:他们可能在任意部门工作,或已完全离开公司。
|
||
§ plugin.team_departments.details.linesInTask.title: 每个任务的代码行数
|
||
§ plugin.team_departments.details.linesInTask.description: 每个任务代码行数的加权平均值。有助于估算任务的粒度。
|
||
§ plugin.team_departments.details.totalTasks.title: 曾处于处理中的任务
|
||
§ plugin.team_departments.details.totalTasks.description: 任何提及唯一任务 ID 的记录都会被计入。该任务可能尚未在任务跟踪系统中关闭。
|
||
§ plugin.team_departments.months.title: 部门可能的员工数量
|
||
§ plugin.team_departments.months.description: 任务跟踪系统会发放连续的任务 ID。根据月初和月末的最大任务 ID,可以得到 *新任务* 的数量。本月 *已修复* 的任务数可在日志中看到。谁修复了它们(*工作过*)也可看到。稍后修复的任务数(*积压*)根据后续月份的日志计算。我们将可见程序员的产能外推到任务总数,以估计部门应有多少 *程序员总数*。再根据「程序员」人数估算 QA 工程师、分析师和管理者的人数。
|
||
§ plugin.team_departments.months.newTaskInMonth: 新任务
|
||
§ plugin.team_departments.months.tasksFixedThisGroup: 已修复
|
||
§ plugin.team_departments.months.tasksInBacklog: 积压
|
||
§ plugin.team_departments.months.programmistInThisGroup: 已工作
|
||
§ plugin.team_departments.months.allProgrammistInDepartment: 应当工作
|
||
§ plugin.team_departments.months.allUsersInDepartment: 员工总数
|
||
§ plugin.team_departments.forecasting.title: 全部成本预测
|
||
§ plugin.team_departments.forecasting.moneyInMonth.title: 部门每月成本
|
||
§ plugin.team_departments.forecasting.moneyInMonth.description: 将上个月所有潜在人员(开发、QA、分析、管理)数量乘以平均工资。
|
||
§ plugin.team_departments.forecasting.moneyAll.title: 整个期间的部门成本
|
||
§ plugin.team_departments.forecasting.moneyAll.description: 将每个月所有潜在人员(开发、QA、分析、管理)数量乘以平均工资。
|
||
`},Nq=U(({response:t,updateSort:e,rowsForExcel:s,mode:n})=>{const r=A.statisticsByCommits.author.totalInfoByName;t||(t={content:[]});const[u,c,p]=["plugin.team_departments.author.work","plugin.team_departments.author.dismissed","plugin.team_departments.author.staff"],[_,h]=["plugin.team_departments.employments.worked","plugin.team_departments.employments.losses"],[f,v]=Mt(t,["totalDaysInProject","totalTasks"]);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:n,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,width:200,template:C.STRING,properties:"author",title:"plugin.team_departments.employments.author"}),o.jsx(w,{properties:"author",template:C.TAGS,width:140,formatter:k=>{const x=r.get(k);return x!=null&&x.isStaff?{title:p,mode:yt.WARNING}:x!=null&&x.isDismissed?{title:c,mode:yt.ERROR}:{title:u,mode:yt.SUCCESS}}}),o.jsx(w,{isSortable:!0,template:C.STRING,properties:"firstCommit",width:130,formatter:oe}),o.jsx(w,{isSortable:!0,template:C.STRING,properties:"lastCommit",width:130,formatter:oe}),o.jsx(w,{isSortable:!0,template:C.SHORT_NUMBER,properties:"totalDaysInProject",width:90}),o.jsx(w,{isSortable:!0,width:150,title:"plugin.team_departments.employments.totalDays",template:k=>o.jsx(ue,{value:k.totalDaysInProject,max:f,order:[_,h],details:{[_]:k.totalDays,[h]:k.totalDaysInProject-k.totalDays},limit:1,suffix:"common.statistic.days"})}),o.jsx(w,{isSortable:!0,template:C.SHORT_NUMBER,properties:"totalTasks",width:90}),o.jsx(w,{isSortable:!0,properties:"totalTasks",title:"plugin.team_departments.employments.totalTasks",template:k=>o.jsx(ue,{value:k,max:v,suffix:"common.statistic.tasks"})})]})});function Mq(t,e,s,n){const r=A.statisticsByCommits.author.totalInfoByName,u={[e]:0,[s]:0,[n]:0};return((t==null?void 0:t.authors)||[]).forEach(c=>{const p=r.get(c.author);p!=null&&p.isStaff?u[n]+=1:p!=null&&p.isDismissed?u[s]+=1:u[e]+=1}),u}function Rq({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const[r,u]=["plugin.team_departments.active.yes","plugin.team_departments.active.no"],[c,p,_]=["plugin.team_departments.author.work","plugin.team_departments.author.dismissed","plugin.team_departments.author.staff"],[h,f,v]=Mt(t,["totalDays","totalAuthors","tasks"]);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,template:C.DETAILS,width:40,formatter:k=>o.jsxs(be,{content:k.authors,mode:"details",children:[o.jsx(Nq,{mode:"details"}),o.jsx(fe,{})]})}),o.jsx(w,{isFixed:!0,template:C.STRING,properties:"taskCode",title:"plugin.team_departments.code"}),o.jsx(w,{title:"plugin.team_departments.status",formatter:k=>k.isActive?{title:r,mode:yt.SUCCESS}:{title:u,mode:yt.ERROR},template:C.TAGS,width:140}),o.jsx(w,{template:C.STRING,properties:"from",title:"plugin.team_departments.from",width:130,formatter:oe}),o.jsx(w,{template:C.STRING,properties:"to",title:"plugin.team_departments.to",width:130,formatter:oe}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"totalDaysWorked",width:90}),o.jsx(w,{isSortable:"totalDays",title:"plugin.team_departments.totalDays",properties:"totalDaysWorked",minWidth:150,template:k=>o.jsx(ue,{value:k,max:h,suffix:"common.statistic.days"})}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"tasks",width:90}),o.jsx(w,{isSortable:!0,title:"plugin.team_departments.totalTasks",properties:"tasks",minWidth:150,template:k=>o.jsx(ue,{value:k,max:v,suffix:"common.statistic.tasks"})}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"totalAuthors",width:90}),o.jsx(w,{isSortable:"totalAuthors",title:"plugin.team_departments.totalAuthors",minWidth:150,template:k=>o.jsx(ue,{value:k.totalAuthors,order:[c,p,_],details:Mq(k,c,p,_),max:f,suffix:"common.statistic.employees"})})]})}const Jk=["plugin.team_departments.employmentsChart.less1","plugin.team_departments.employmentsChart.less2","plugin.team_departments.employmentsChart.less3","plugin.team_departments.employmentsChart.less6","plugin.team_departments.employmentsChart.less9","plugin.team_departments.employmentsChart.less12","plugin.team_departments.employmentsChart.less15","plugin.team_departments.employmentsChart.more"],[Eq,Iq,qq,Oq,$q,Lq,Bq,Pq]=Jk;function Wq(t,e){const s=t.reduce((r,u)=>{const c=u.authors.filter(p=>{const _=e.get(p.author);return!(_!=null&&_.isStaff)&&!(_!=null&&_.isDismissed)}).length;return c&&(c<=1?Ce(r,Eq):c<=2?Ce(r,Iq):c<=3?Ce(r,qq):c<=6?Ce(r,Oq):c<=9?Ce(r,$q):c<=12?Ce(r,Lq):c<=15?Ce(r,Bq):Ce(r,Pq)),r},{});return[Jk.filter(r=>s[r]),s]}const[Fq,eb]=Ui("days"),Uq=U(()=>{var c;const t=A.statisticsByCommits.author.totalInfoByName,e=A.statisticsByCommits.taskCodes.totalInfo.filter(p=>p.totalDaysWorked>10),[s,n]=Wq(e,t),r=(c=Fq(e,"totalDays"))==null?void 0:c.details;return Object.keys(n).length?o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_departments.daysChart.title",suffix:"plugin.team_departments.daysChart.item",order:eb,limit:1,details:r})}),o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_departments.employmentsChart.title",suffix:"plugin.team_departments.employmentsChart.item",order:s,limit:1,details:n})})]}):o.jsx(Te,{children:o.jsx(Ne,{title:"plugin.team_departments.daysChart.title",suffix:"plugin.team_departments.daysChart.item",order:eb,limit:1,details:r})})});function Gq({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const[r]=Mt(t,["allUsersInDepartment"]);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,title:"common.statistic.Date",width:150,formatter:u=>{const c=String(u.month+1).padStart(2,"0");return Pd(`${u.year}-${c}-01`)},template:(u,c,p)=>{const _=t.content[p+1],h=Ti(`${c.year}-${c.month+1}-01`,{month:"long",year:"numeric"});return(_==null?void 0:_.year)!==c.year?o.jsx("b",{children:h}):h}}),o.jsx(w,{template:C.NUMBER,properties:"newTaskInMonth",title:"plugin.team_departments.months.newTaskInMonth",width:100}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"tasksFixedThisGroup",title:"plugin.team_departments.months.tasksFixedThisGroup",width:100}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"tasksInBacklog",title:"plugin.team_departments.months.tasksInBacklog",width:100}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"programmistInThisGroup",title:"plugin.team_departments.months.programmistInThisGroup",width:150}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"allProgrammistInDepartment",title:"plugin.team_departments.months.allProgrammistInDepartment",width:150}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"allMiddleUsersInDepartment",width:70}),o.jsx(w,{isSortable:!0,minWidth:200,properties:"allMiddleUsersInDepartment",title:"plugin.team_departments.months.allUsersInDepartment",template:u=>o.jsx(ue,{value:u,max:r,suffix:"plugin.team_departments.months.allAuthors"})})]})}function Hq(t){var u;const e=A.statisticsByCommits.author.totalInfoByName,s={},n={};return t.forEach(c=>{const p=e.get(c==null?void 0:c.author);Ce(s,p.lastCountry),p!=null&&p.isStaff?Ce(n,"staff"):p!=null&&p.isDismissed?Ce(n,"dismissed"):Ce(n,"active")}),{country:((u=Object.entries(s).sort((c,p)=>c[1]-p[1]).pop())==null?void 0:u[0])||null,total:n}}const Vq=U(({department:t})=>{if(!t)return null;const{country:e,total:s}=Hq(t.authors),n=de.getMiddleSalaryInMonth(),r=s.active*n,u=t.months.reduce((c,p)=>c+p.programmistInThisGroup*n,0);return o.jsxs(o.Fragment,{children:[o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(ke,{value:Ur(t.totalDays),icon:"./assets/cards/work_days2.svg",title:"plugin.team_departments.details.totalDays"}),o.jsx(ke,{value:ct(r),icon:"./assets/cards/money_month.svg",title:"plugin.team_departments.details.moneyInMonth"})]}),o.jsxs(Q,{children:[o.jsx(ke,{value:ct(u),icon:"./assets/cards/money_total.svg",title:"plugin.team_departments.details.moneyAll"}),o.jsx(ke,{value:e,icon:"./assets/cards/location.svg",title:"plugin.team_departments.details.mainLocation"})]})]}),o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsx(_e,{size:"l",value:`${s.active} / ${s.dismissed}`,icon:"./assets/cards/dismissal.svg",title:"plugin.team_departments.details.activeAuthors.title",description:"plugin.team_departments.details.activeAuthors.description"})}),o.jsxs(Q,{children:[o.jsx(_e,{value:t.linesInTask,icon:"./assets/cards/lines.svg",title:"plugin.team_departments.details.linesInTask.title",description:"plugin.team_departments.details.linesInTask.description"}),o.jsx(_e,{value:t.tasks,icon:"./assets/cards/tasks.svg",title:"plugin.team_departments.details.totalTasks.title",description:"plugin.team_departments.details.totalTasks.description"})]})]})]})}),Yq=U(({department:t})=>{var r;if(!t||!((r=t==null?void 0:t.months)!=null&&r.length))return null;const e=de.getMiddleSalaryInMonth(),s=t.months[0].allMiddleUsersInDepartment*e,n=t.months.reduce((u,c)=>u+c.allMiddleUsersInDepartment*e,0);return o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsx(_e,{value:ct(s),icon:"./assets/cards/money_month.svg",title:"plugin.team_departments.forecasting.moneyInMonth.title",description:"plugin.team_departments.forecasting.moneyInMonth.description",size:"l"})}),o.jsx(Q,{children:o.jsx(_e,{value:ct(n),icon:"./assets/cards/money_total.svg",title:"plugin.team_departments.forecasting.moneyAll.title",description:"plugin.team_departments.forecasting.moneyAll.description",size:"l"})})]})}),Qq=U(({mode:t})=>{var p,_,h;const s=A.statisticsByCommits.taskCodes.totalInfo.filter(f=>f.totalDaysWorked>10),n=s.filter(f=>{var v;return((v=f==null?void 0:f.months)==null?void 0:v.length)>6}).map((f,v)=>({id:v,title:f.taskCode})),[r,u]=T.useState((p=n==null?void 0:n[0])==null?void 0:p.id),c=((_=s[r])==null?void 0:_.months)||[];return s!=null&&s.length?o.jsxs(o.Fragment,{children:[o.jsx(Y,{value:!xa.isOpen&&(s==null?void 0:s.length)>1,children:o.jsx(Uq,{})}),o.jsx(G,{title:"plugin.team_departments.title"}),o.jsxs(be,{content:s,mode:t,children:[o.jsx(Rq,{mode:t,rowsForExcel:s}),o.jsx(fe,{})]}),o.jsx(tk,{prefix:"plugin.team_departments.banner.title",title:(h=n[r])==null?void 0:h.title,children:o.jsx(ms,{value:r,className:bg.table_filters_item,options:n,onChange:f=>{u(f)}})}),o.jsx(G,{title:"plugin.team_departments.details.title"}),o.jsx(Vq,{department:s[r]}),o.jsx(G,{title:"plugin.team_departments.months.title"}),o.jsx(ot,{translationId:"plugin.team_departments.months.description"}),o.jsx(nt,{height:48}),o.jsxs(be,{content:c,mode:t,watch:r,children:[o.jsx(Gq,{mode:t,rowsForExcel:c}),o.jsx(fe,{})]}),o.jsx(G,{title:"plugin.team_departments.forecasting.title"}),o.jsx(Yq,{department:s[r]})]}):o.jsx(Le,{})});let Kq=(vl=class{constructor(){this.dependencies=["taskCodes","author"]}getMenuItems(){return[{id:"departments",group:10,order:60,link:"/team/departments",title:"plugin.team_departments.sidebar",icon:"./assets/menu/department.svg"}]}getPage(e,s){return e==="/team/departments"?o.jsx(Qq,{mode:s==null?void 0:s.mode}):void 0}getTranslations(){return zq}},vl.id="team_departments",vl);const Zq={ar:`
|
||
§ plugin.team_file_analytics.sidebar: أنواع الملفات
|
||
§ plugin.team_file_analytics.createChart.title: للملفات الموجودة
|
||
§ plugin.team_file_analytics.createChart.suffix: ملفات
|
||
§ plugin.team_file_analytics.removeChart.title: للملفات المحذوفة
|
||
§ plugin.team_file_analytics.extension.title: امتدادات الملفات
|
||
§ plugin.team_file_analytics.extension.view: قائمة الامتدادات
|
||
§ plugin.team_file_analytics.type.title: النوع الفرعي للملف
|
||
§ plugin.team_file_analytics.type.view: قائمة الأنواع الفرعية للملفات
|
||
§ plugin.team_file_analytics.task: المهمة
|
||
§ plugin.team_file_analytics.name: النوع
|
||
§ plugin.team_file_analytics.path: المسار
|
||
§ plugin.team_file_analytics.current.count: العدد
|
||
§ plugin.team_file_analytics.removed.count: عدد المحذوف
|
||
§ plugin.team_file_analytics.files: ملفات
|
||
`,de:`
|
||
§ plugin.team_file_analytics.sidebar: Dateitypen
|
||
§ plugin.team_file_analytics.createChart.title: Für vorhandene Dateien
|
||
§ plugin.team_file_analytics.createChart.suffix: Dateien
|
||
§ plugin.team_file_analytics.removeChart.title: Für gelöschte Dateien
|
||
§ plugin.team_file_analytics.extension.title: Dateierweiterungen
|
||
§ plugin.team_file_analytics.extension.view: Liste der Erweiterungen
|
||
§ plugin.team_file_analytics.type.title: Dateiuntertyp
|
||
§ plugin.team_file_analytics.type.view: Liste der Dateiuntertypen
|
||
§ plugin.team_file_analytics.task: Aufgabe
|
||
§ plugin.team_file_analytics.name: Typ
|
||
§ plugin.team_file_analytics.path: Pfad
|
||
§ plugin.team_file_analytics.current.count: Anzahl
|
||
§ plugin.team_file_analytics.removed.count: Anzahl gelöschter
|
||
§ plugin.team_file_analytics.files: Dateien
|
||
`,en:`
|
||
§ plugin.team_file_analytics.sidebar: File types
|
||
§ plugin.team_file_analytics.createChart.title: For existing files
|
||
§ plugin.team_file_analytics.createChart.suffix: files
|
||
§ plugin.team_file_analytics.removeChart.title: For deleted files
|
||
§ plugin.team_file_analytics.extension.title: File extensions
|
||
§ plugin.team_file_analytics.extension.view: Extension list
|
||
§ plugin.team_file_analytics.type.title: File subtype
|
||
§ plugin.team_file_analytics.type.view: File subtype list
|
||
§ plugin.team_file_analytics.task: Task
|
||
§ plugin.team_file_analytics.name: Type
|
||
§ plugin.team_file_analytics.path: Path
|
||
§ plugin.team_file_analytics.current.count: Number
|
||
§ plugin.team_file_analytics.removed.count: Number of deleted
|
||
§ plugin.team_file_analytics.files: files
|
||
`,es:`
|
||
§ plugin.team_file_analytics.sidebar: Tipos de archivo
|
||
§ plugin.team_file_analytics.createChart.title: Para archivos existentes
|
||
§ plugin.team_file_analytics.createChart.suffix: archivos
|
||
§ plugin.team_file_analytics.removeChart.title: Para archivos eliminados
|
||
§ plugin.team_file_analytics.extension.title: Extensiones de archivo
|
||
§ plugin.team_file_analytics.extension.view: Lista de extensiones
|
||
§ plugin.team_file_analytics.type.title: Subtipo de archivo
|
||
§ plugin.team_file_analytics.type.view: Lista de subtipos de archivo
|
||
§ plugin.team_file_analytics.task: Tarea
|
||
§ plugin.team_file_analytics.name: Tipo
|
||
§ plugin.team_file_analytics.path: Ruta
|
||
§ plugin.team_file_analytics.current.count: Cantidad
|
||
§ plugin.team_file_analytics.removed.count: Cantidad de eliminados
|
||
§ plugin.team_file_analytics.files: archivos
|
||
`,fr:`
|
||
§ plugin.team_file_analytics.sidebar: Types de fichiers
|
||
§ plugin.team_file_analytics.createChart.title: Pour les fichiers existants
|
||
§ plugin.team_file_analytics.createChart.suffix: fichiers
|
||
§ plugin.team_file_analytics.removeChart.title: Pour les fichiers supprimés
|
||
§ plugin.team_file_analytics.extension.title: Extensions de fichiers
|
||
§ plugin.team_file_analytics.extension.view: Liste des extensions
|
||
§ plugin.team_file_analytics.type.title: Sous-type de fichier
|
||
§ plugin.team_file_analytics.type.view: Liste des sous-types de fichiers
|
||
§ plugin.team_file_analytics.task: Tâche
|
||
§ plugin.team_file_analytics.name: Type
|
||
§ plugin.team_file_analytics.path: Chemin
|
||
§ plugin.team_file_analytics.current.count: Nombre
|
||
§ plugin.team_file_analytics.removed.count: Nombre de fichiers supprimés
|
||
§ plugin.team_file_analytics.files: fichiers
|
||
`,he:`
|
||
§ plugin.team_file_analytics.sidebar: סוגי קבצים
|
||
§ plugin.team_file_analytics.createChart.title: עבור קבצים קיימים
|
||
§ plugin.team_file_analytics.createChart.suffix: קבצים
|
||
§ plugin.team_file_analytics.removeChart.title: עבור קבצים שנמחקו
|
||
§ plugin.team_file_analytics.extension.title: סיומות קבצים
|
||
§ plugin.team_file_analytics.extension.view: רשימת סיומות
|
||
§ plugin.team_file_analytics.type.title: תת-סוג קובץ
|
||
§ plugin.team_file_analytics.type.view: רשימת תת-סוגי קבצים
|
||
§ plugin.team_file_analytics.task: משימה
|
||
§ plugin.team_file_analytics.name: סוג
|
||
§ plugin.team_file_analytics.path: נתיב
|
||
§ plugin.team_file_analytics.current.count: מספר
|
||
§ plugin.team_file_analytics.removed.count: מספר שנמחקו
|
||
§ plugin.team_file_analytics.files: קבצים
|
||
`,hi:`
|
||
§ plugin.team_file_analytics.sidebar: फ़ाइल प्रकार
|
||
§ plugin.team_file_analytics.createChart.title: मौजूदा फ़ाइलों के लिए
|
||
§ plugin.team_file_analytics.createChart.suffix: फ़ाइलें
|
||
§ plugin.team_file_analytics.removeChart.title: हटाई गई फ़ाइलों के लिए
|
||
§ plugin.team_file_analytics.extension.title: फ़ाइल एक्सटेंशन
|
||
§ plugin.team_file_analytics.extension.view: एक्सटेंशन सूची
|
||
§ plugin.team_file_analytics.type.title: फ़ाइल उपप्रकार
|
||
§ plugin.team_file_analytics.type.view: फ़ाइल उपप्रकारों की सूची
|
||
§ plugin.team_file_analytics.task: कार्य
|
||
§ plugin.team_file_analytics.name: प्रकार
|
||
§ plugin.team_file_analytics.path: पथ
|
||
§ plugin.team_file_analytics.current.count: संख्या
|
||
§ plugin.team_file_analytics.removed.count: हटाई गई की संख्या
|
||
§ plugin.team_file_analytics.files: फ़ाइलें
|
||
`,ja:`
|
||
§ plugin.team_file_analytics.sidebar: ファイルの種類
|
||
§ plugin.team_file_analytics.createChart.title: 既存ファイルについて
|
||
§ plugin.team_file_analytics.createChart.suffix: ファイル
|
||
§ plugin.team_file_analytics.removeChart.title: 削除されたファイルについて
|
||
§ plugin.team_file_analytics.extension.title: ファイル拡張子
|
||
§ plugin.team_file_analytics.extension.view: 拡張子一覧
|
||
§ plugin.team_file_analytics.type.title: ファイルのサブタイプ
|
||
§ plugin.team_file_analytics.type.view: ファイルのサブタイプ一覧
|
||
§ plugin.team_file_analytics.task: タスク
|
||
§ plugin.team_file_analytics.name: 種類
|
||
§ plugin.team_file_analytics.path: パス
|
||
§ plugin.team_file_analytics.current.count: 件数
|
||
§ plugin.team_file_analytics.removed.count: 削除件数
|
||
§ plugin.team_file_analytics.files: ファイル
|
||
`,ko:`
|
||
§ plugin.team_file_analytics.sidebar: 파일 유형
|
||
§ plugin.team_file_analytics.createChart.title: 기존 파일에 대해
|
||
§ plugin.team_file_analytics.createChart.suffix: 파일
|
||
§ plugin.team_file_analytics.removeChart.title: 삭제된 파일에 대해
|
||
§ plugin.team_file_analytics.extension.title: 파일 확장자
|
||
§ plugin.team_file_analytics.extension.view: 확장자 목록
|
||
§ plugin.team_file_analytics.type.title: 파일 하위 유형
|
||
§ plugin.team_file_analytics.type.view: 파일 하위 유형 목록
|
||
§ plugin.team_file_analytics.task: 작업
|
||
§ plugin.team_file_analytics.name: 유형
|
||
§ plugin.team_file_analytics.path: 경로
|
||
§ plugin.team_file_analytics.current.count: 개수
|
||
§ plugin.team_file_analytics.removed.count: 삭제된 개수
|
||
§ plugin.team_file_analytics.files: 파일
|
||
`,pt:`
|
||
§ plugin.team_file_analytics.sidebar: Tipos de arquivo
|
||
§ plugin.team_file_analytics.createChart.title: Para arquivos existentes
|
||
§ plugin.team_file_analytics.createChart.suffix: arquivos
|
||
§ plugin.team_file_analytics.removeChart.title: Para arquivos excluídos
|
||
§ plugin.team_file_analytics.extension.title: Extensões de arquivo
|
||
§ plugin.team_file_analytics.extension.view: Lista de extensões
|
||
§ plugin.team_file_analytics.type.title: Subtipo de arquivo
|
||
§ plugin.team_file_analytics.type.view: Lista de subtipos de arquivo
|
||
§ plugin.team_file_analytics.task: Tarefa
|
||
§ plugin.team_file_analytics.name: Tipo
|
||
§ plugin.team_file_analytics.path: Caminho
|
||
§ plugin.team_file_analytics.current.count: Quantidade
|
||
§ plugin.team_file_analytics.removed.count: Quantidade de excluídos
|
||
§ plugin.team_file_analytics.files: arquivos
|
||
`,ru:`
|
||
§ plugin.team_file_analytics.sidebar: Типы файлов
|
||
§ plugin.team_file_analytics.createChart.title: У существующих файлов
|
||
§ plugin.team_file_analytics.createChart.suffix: файлов
|
||
§ plugin.team_file_analytics.removeChart.title: У удалённых файлов
|
||
§ plugin.team_file_analytics.extension.title: Расширения файлов
|
||
§ plugin.team_file_analytics.extension.view: Список расширений
|
||
§ plugin.team_file_analytics.type.title: Подтип файлов
|
||
§ plugin.team_file_analytics.type.view: Список подтипов файлов
|
||
§ plugin.team_file_analytics.task: Задача
|
||
§ plugin.team_file_analytics.name: Тип
|
||
§ plugin.team_file_analytics.path: Путь
|
||
§ plugin.team_file_analytics.current.count: Количество
|
||
§ plugin.team_file_analytics.removed.count: Количество удалённых
|
||
§ plugin.team_file_analytics.files: файлов
|
||
`,zh:`
|
||
§ plugin.team_file_analytics.sidebar: 文件类型
|
||
§ plugin.team_file_analytics.createChart.title: 针对现有文件
|
||
§ plugin.team_file_analytics.createChart.suffix: 文件
|
||
§ plugin.team_file_analytics.removeChart.title: 针对已删除文件
|
||
§ plugin.team_file_analytics.extension.title: 文件扩展名
|
||
§ plugin.team_file_analytics.extension.view: 扩展名列表
|
||
§ plugin.team_file_analytics.type.title: 文件子类型
|
||
§ plugin.team_file_analytics.type.view: 文件子类型列表
|
||
§ plugin.team_file_analytics.task: 任务
|
||
§ plugin.team_file_analytics.name: 类型
|
||
§ plugin.team_file_analytics.path: 路径
|
||
§ plugin.team_file_analytics.current.count: 数量
|
||
§ plugin.team_file_analytics.removed.count: 已删除数量
|
||
§ plugin.team_file_analytics.files: 文件
|
||
`};function Xq({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const[r,u]=Mt(t,["files","removedFiles"]),c=Math.max(r,u);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,template:C.STRING,title:"plugin.team_file_analytics.name",properties:"extension",width:200}),o.jsx(w,{template:C.STRING,title:"plugin.team_file_analytics.path",width:350,formatter:p=>p.files===1||p.removedFiles===1?p.path:""}),o.jsx(w,{template:C.TASK,title:"plugin.team_file_analytics.task",width:120,formatter:p=>p.files<5?p.task:""}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"files"}),o.jsx(w,{isSortable:!0,title:"plugin.team_file_analytics.current.count",properties:"files",minWidth:170,template:p=>o.jsx(ue,{value:p,max:c,suffix:"plugin.team_file_analytics.files"})}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"removedFiles"}),o.jsx(w,{isSortable:!0,title:"plugin.team_file_analytics.removed.count",properties:"removedFiles",minWidth:170,template:p=>o.jsx(ue,{value:p,max:c,suffix:"plugin.team_file_analytics.files"})})]})}function Jq({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const[r,u]=Mt(t,["files","removedFiles"]),c=Math.max(r,u);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,template:C.STRING,title:"plugin.team_file_analytics.name",properties:"type",width:200}),o.jsx(w,{template:C.STRING,title:"plugin.team_file_analytics.path",width:350,formatter:p=>p.files===1||p.removedFiles===1?p.path:""}),o.jsx(w,{template:C.TASK,title:"common.statistic.Tasks",width:120,formatter:p=>p.files<5?p.task:""}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"files"}),o.jsx(w,{isSortable:!0,title:"plugin.team_file_analytics.current.count",properties:"files",minWidth:170,template:p=>o.jsx(ue,{value:p,max:c,suffix:"plugin.team_file_analytics.files"})}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"removedFiles"}),o.jsx(w,{isSortable:!0,title:"plugin.team_file_analytics.removed.count",properties:"removedFiles",minWidth:170,template:p=>o.jsx(ue,{value:p,max:c,suffix:"plugin.team_file_analytics.files"})})]})}function eO(t,e){const s={},n={},r=[];return t.forEach(u=>{const c=u[e];s[c]=u.files,n[c]=u.removedFiles,r.push(c)}),[r,s,n]}const tb=U(({rows:t,property:e})=>{if(!t)return null;const[s,n,r]=eO(t,e);return o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_file_analytics.createChart.title",suffix:"plugin.team_file_analytics.createChart.suffix",limit:2,order:s,details:n})}),o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_file_analytics.removeChart.title",suffix:"plugin.team_file_analytics.createChart.suffix",limit:2,order:s,details:r})})]})}),tO=U(({mode:t})=>{const e=A.statisticsByFiles.type.totalInfo,s=A.statisticsByFiles.extension.totalInfo;return!(e!=null&&e.length)&&!(s!=null&&s.length)?o.jsx(Le,{}):o.jsxs(o.Fragment,{children:[o.jsxs(Y,{value:s,children:[o.jsx(G,{title:"plugin.team_file_analytics.extension.title"}),o.jsx(tb,{property:"extension",rows:s}),o.jsx(G,{title:"plugin.team_file_analytics.extension.view"}),o.jsxs(be,{content:s,mode:t,watch:`${t}${A.hash}`,children:[o.jsx(Xq,{mode:t,rowsForExcel:s}),o.jsx(fe,{}),o.jsx(Le,{})]})]}),o.jsxs(Y,{value:e,children:[o.jsx(G,{title:"plugin.team_file_analytics.type.title"}),o.jsx(tb,{property:"type",rows:e}),o.jsxs(be,{content:e,mode:t,watch:`${t}${A.hash}`,children:[o.jsx(Jq,{mode:t,rowsForExcel:e}),o.jsx(fe,{}),o.jsx(Le,{})]})]})]})});let aO=(kl=class{constructor(){this.dependencies=[]}getMenuItems(){return[{id:"extension",group:30,order:140,link:"/team/extension",title:"plugin.team_file_analytics.sidebar",icon:"./assets/menu/files_ext.svg"}]}getPage(e,s){return e==="/team/extension"?o.jsx(tO,{mode:s==null?void 0:s.mode}):void 0}getTranslations(){return Zq}},kl.id="team_file_analytics",kl);const sO={ar:`
|
||
§ plugin.team_files.sidebar.files: الملفات
|
||
§ plugin.team_files.sidebar.removedFiles: الملفات المحذوفة
|
||
§ plugin.team_files.title: شجرة المشروع مع مراعاة عوامل التصفية المحددة
|
||
§ plugin.team_files.filters.commits: عدد الـ commits
|
||
§ plugin.team_files.filters.help: الحد الأدنى لعدد الـ commits التي أجراها الموظف في ملف
|
||
§ plugin.team_files.description.features: يعرض الجدول *«مجالات المسؤولية»* و*«وقت العمل»* على المكونات المختلفة للنظام.
|
||
§ plugin.team_files.description.cost1: في عمود *«التكلفة»* يُحسب سعر افتراضي لكل مكوّن بوصفه منتجًا مستقلاً (يُضرب عدد الأيام التي تضم تعديلات في متوسط أجر يوم العمل). لا يتطابق مجموع المكوّنات مع التكلفة الإجمالية للمشروع، لأن جهد كل جزء يُحسب على حدة. ويقرّب النظام الوقت لصالح الموظف: حتى إذا استغرق التعديل دقيقتين فقط، يُحتسب يوم عمل كاملًا.
|
||
§ plugin.team_files.description.cost2
|
||
يهدف هذا العمود إلى الإجابة عن سؤالين:
|
||
- كم كنا سنوفر لو استخدمنا حلاً جاهزًا من السوق؟
|
||
- بأي سعر كان يمكن «بيع المكوّن بشكل مبرر» إذا أُفرد في وحدة مستقلة للوصول إلى نقطة التعادل؟
|
||
§ plugin.team_files.table.lines: الأسطر
|
||
§ plugin.team_files.table.tasks: المهام
|
||
§ plugin.team_files.table.days: الأيام
|
||
§ plugin.team_files.table.workedDays: أيام العمل للشخص
|
||
§ plugin.team_files.table.money: التكلفة
|
||
§ plugin.team_files.table.add: من أضاف
|
||
§ plugin.team_files.table.change: من غيّر
|
||
§ plugin.team_files.table.remove: من حذف
|
||
§ plugin.team_files.table.chart.line: أسطر
|
||
§ plugin.team_files.table.chart.linesAdded: أُضيفت
|
||
§ plugin.team_files.table.chart.linesChanged: غُيّرت
|
||
§ plugin.team_files.table.chart.linesRemoved: حُذفت
|
||
`,de:`
|
||
§ plugin.team_files.sidebar.files: Dateien
|
||
§ plugin.team_files.sidebar.removedFiles: Gelöschte Dateien
|
||
§ plugin.team_files.title: Projektbaum unter Berücksichtigung der ausgewählten Filter
|
||
§ plugin.team_files.filters.commits: Anzahl der commits
|
||
§ plugin.team_files.filters.help: Die Mindestanzahl an commits, die ein Mitarbeiter in einer Datei gemacht hat
|
||
§ plugin.team_files.description.features: Die Tabelle zeigt *„Verantwortungsbereiche“* und die *„Arbeitszeit“* für verschiedene Komponenten des Systems.
|
||
§ plugin.team_files.description.cost1: In der Spalte *„Kosten“* wird ein hypothetischer Preis jeder Komponente als eigenständiges Produkt berechnet (die Anzahl der Tage mit Änderungen wird mit dem durchschnittlichen Tagessatz multipliziert). Die Summe der Komponenten entspricht nicht den Gesamtkosten des Projekts, da der Aufwand für jeden Teil separat berechnet wird. Das System rundet die Zeit zugunsten des Mitarbeiters: Selbst wenn eine Änderung nur 2 Minuten gedauert hat, wird sie als voller Arbeitstag gezählt.
|
||
§ plugin.team_files.description.cost2
|
||
Diese Spalte soll zwei Fragen beantworten:
|
||
- Wie viel hätten wir eingespart, wenn wir eine fertige Marktlösung verwendet hätten?
|
||
- Zu welchem Preis ließe sich eine Systemkomponente „vertretbar verkaufen“, wenn man sie in ein separates Modul auslagert, um die Kosten zu decken?
|
||
§ plugin.team_files.table.lines: Zeilen
|
||
§ plugin.team_files.table.tasks: Aufgaben
|
||
§ plugin.team_files.table.days: Tage
|
||
§ plugin.team_files.table.workedDays: Personentage
|
||
§ plugin.team_files.table.money: Kosten
|
||
§ plugin.team_files.table.add: Wer hinzugefügt hat
|
||
§ plugin.team_files.table.change: Wer geändert hat
|
||
§ plugin.team_files.table.remove: Wer gelöscht hat
|
||
§ plugin.team_files.table.chart.line: Zeilen
|
||
§ plugin.team_files.table.chart.linesAdded: hinzugefügt
|
||
§ plugin.team_files.table.chart.linesChanged: geändert
|
||
§ plugin.team_files.table.chart.linesRemoved: gelöscht
|
||
`,en:`
|
||
§ plugin.team_files.sidebar.files: Files
|
||
§ plugin.team_files.sidebar.removedFiles: Deleted files
|
||
§ plugin.team_files.title: Project tree considering selected filters
|
||
§ plugin.team_files.filters.commits: Number of commits
|
||
§ plugin.team_files.filters.help: The minimum number of commits an employee has made in a file
|
||
§ plugin.team_files.description.features: The table shows *“areas of responsibility”* and *“working time”* spent on different components of the system.
|
||
§ plugin.team_files.description.cost1: The *“Cost”* column estimates a hypothetical price of each component as a standalone product (the number of days with changes is multiplied by the average rate for a working day). The sum across components does not match the total project cost, because the effort for each part is calculated separately. The system rounds time in the employee’s favor: even if a change took only 2 minutes, it is counted as a full working day.
|
||
§ plugin.team_files.description.cost2
|
||
The purpose of this column is to answer two questions:
|
||
- How much would we have saved if we had used a ready-made market solution?
|
||
- At what price could a system component be “reasonably sold” if it were extracted into a separate module in order to break even?
|
||
§ plugin.team_files.table.lines: Lines
|
||
§ plugin.team_files.table.tasks: Tasks
|
||
§ plugin.team_files.table.days: Days
|
||
§ plugin.team_files.table.workedDays: Person days
|
||
§ plugin.team_files.table.money: Cost
|
||
§ plugin.team_files.table.add: Who added
|
||
§ plugin.team_files.table.change: Who changed
|
||
§ plugin.team_files.table.remove: Who deleted
|
||
§ plugin.team_files.table.chart.line: lines
|
||
§ plugin.team_files.table.chart.linesAdded: added
|
||
§ plugin.team_files.table.chart.linesChanged: changed
|
||
§ plugin.team_files.table.chart.linesRemoved: deleted
|
||
`,es:`
|
||
§ plugin.team_files.sidebar.files: Archivos
|
||
§ plugin.team_files.sidebar.removedFiles: Archivos eliminados
|
||
§ plugin.team_files.title: Árbol del proyecto considerando los filtros seleccionados
|
||
§ plugin.team_files.filters.commits: Número de commits
|
||
§ plugin.team_files.filters.help: El número mínimo de commits que un empleado ha hecho en un archivo
|
||
§ plugin.team_files.description.features: La tabla muestra las *«áreas de responsabilidad»* y el *«tiempo de trabajo»* dedicados a los distintos componentes del sistema.
|
||
§ plugin.team_files.description.cost1: En la columna *«Coste»* se calcula el precio hipotético de cada componente como producto independiente (el número de días con cambios se multiplica por la tarifa media de un día laborable). La suma de los componentes no coincide con el coste total del proyecto, ya que el esfuerzo de cada parte se calcula por separado. El sistema redondea el tiempo a favor del empleado: aunque un cambio haya llevado solo 2 minutos, se contabiliza como un día laborable completo.
|
||
§ plugin.team_files.description.cost2
|
||
Esta columna tiene por objeto responder a dos preguntas:
|
||
- ¿Cuánto habríamos ahorrado si hubiéramos utilizado una solución de mercado ya existente?
|
||
- ¿A qué precio se podría «vender de forma justificada» un componente del sistema si se extrajera como un módulo independiente para alcanzar el punto de equilibrio?
|
||
§ plugin.team_files.table.lines: Líneas
|
||
§ plugin.team_files.table.tasks: Tareas
|
||
§ plugin.team_files.table.days: Días
|
||
§ plugin.team_files.table.workedDays: Días-persona
|
||
§ plugin.team_files.table.money: Coste
|
||
§ plugin.team_files.table.add: Quién añadió
|
||
§ plugin.team_files.table.change: Quién modificó
|
||
§ plugin.team_files.table.remove: Quién eliminó
|
||
§ plugin.team_files.table.chart.line: líneas
|
||
§ plugin.team_files.table.chart.linesAdded: añadidas
|
||
§ plugin.team_files.table.chart.linesChanged: modificadas
|
||
§ plugin.team_files.table.chart.linesRemoved: eliminadas
|
||
`,fr:`
|
||
§ plugin.team_files.sidebar.files: Fichiers
|
||
§ plugin.team_files.sidebar.removedFiles: Fichiers supprimés
|
||
§ plugin.team_files.title: Arborescence du projet compte tenu des filtres sélectionnés
|
||
§ plugin.team_files.filters.commits: Nombre de commits
|
||
§ plugin.team_files.filters.help: Le nombre minimum de commits qu’un collaborateur a effectués dans un fichier
|
||
§ plugin.team_files.description.features: Le tableau présente les *« zones de responsabilité »* et le *« temps de travail »* consacrés aux différents composants du système.
|
||
§ plugin.team_files.description.cost1: Dans la colonne *« Coût »*, le prix hypothétique de chaque composant est calculé comme s’il s’agissait d’un produit autonome (le nombre de jours comportant des modifications est multiplié par le taux journalier moyen). La somme des composants ne correspond pas au coût total du projet, car la charge de chaque partie est calculée séparément. Le système arrondit le temps en faveur du collaborateur : même si une modification n’a pris que 2 minutes, elle est comptée comme une journée de travail complète.
|
||
§ plugin.team_files.description.cost2
|
||
Cette colonne a pour objet de répondre à deux questions :
|
||
- Combien aurions-nous économisé si nous avions utilisé une solution du marché prête à l’emploi ?
|
||
- À quel prix pourrait-on « vendre de manière justifiée » un composant du système en l’isolant dans un module distinct afin d’atteindre l’équilibre ?
|
||
§ plugin.team_files.table.lines: Lignes
|
||
§ plugin.team_files.table.tasks: Tâches
|
||
§ plugin.team_files.table.days: Jours
|
||
§ plugin.team_files.table.workedDays: Jours-personne
|
||
§ plugin.team_files.table.money: Coût
|
||
§ plugin.team_files.table.add: Qui a ajouté
|
||
§ plugin.team_files.table.change: Qui a modifié
|
||
§ plugin.team_files.table.remove: Qui a supprimé
|
||
§ plugin.team_files.table.chart.line: lignes
|
||
§ plugin.team_files.table.chart.linesAdded: ajoutées
|
||
§ plugin.team_files.table.chart.linesChanged: modifiées
|
||
§ plugin.team_files.table.chart.linesRemoved: supprimées
|
||
`,he:`
|
||
§ plugin.team_files.sidebar.files: קבצים
|
||
§ plugin.team_files.sidebar.removedFiles: קבצים שנמחקו
|
||
§ plugin.team_files.title: עץ הפרויקט בהתחשב במסננים שנבחרו
|
||
§ plugin.team_files.filters.commits: מספר commits
|
||
§ plugin.team_files.filters.help: מספר ה-commits המינימלי שעובד ביצע בקובץ
|
||
§ plugin.team_files.description.features: הטבלה מציגה *«תחומי אחריות»* ו*«זמן עבודה»* על רכיבים שונים של המערכת.
|
||
§ plugin.team_files.description.cost1: בעמודה *«עלות»* מחושב מחיר היפותטי של כל רכיב כמוצר עצמאי (מספר הימים שבהם בוצעו שינויים מוכפל בתעריף הממוצע של יום עבודה). סכום הרכיבים אינו תואם את העלות הכוללת של הפרויקט, משום שמאמץ העבודה של כל חלק מחושב בנפרד. המערכת מעגלת את הזמן לטובת העובד: גם אם שינוי נמשך 2 דקות בלבד, הוא נספר כיום עבודה מלא.
|
||
§ plugin.team_files.description.cost2
|
||
מטרת עמודה זו היא לענות על שתי שאלות:
|
||
- כמה היינו חוסכים אילו השתמשנו בפתרון מוכן מהשוק?
|
||
- באיזה מחיר ניתן היה «למכור באופן מוצדק» רכיב של המערכת אם מפרידים אותו למודול נפרד כדי להגיע לאיזון?
|
||
§ plugin.team_files.table.lines: שורות
|
||
§ plugin.team_files.table.tasks: משימות
|
||
§ plugin.team_files.table.days: ימים
|
||
§ plugin.team_files.table.workedDays: ימי אדם
|
||
§ plugin.team_files.table.money: עלות
|
||
§ plugin.team_files.table.add: מי הוסיף
|
||
§ plugin.team_files.table.change: מי שינה
|
||
§ plugin.team_files.table.remove: מי מחק
|
||
§ plugin.team_files.table.chart.line: שורות
|
||
§ plugin.team_files.table.chart.linesAdded: נוספו
|
||
§ plugin.team_files.table.chart.linesChanged: שונו
|
||
§ plugin.team_files.table.chart.linesRemoved: נמחקו
|
||
`,hi:`
|
||
§ plugin.team_files.sidebar.files: फ़ाइलें
|
||
§ plugin.team_files.sidebar.removedFiles: हटाई गई फ़ाइलें
|
||
§ plugin.team_files.title: चयनित फ़िल्टर को ध्यान में रखते हुए परियोजना वृक्ष
|
||
§ plugin.team_files.filters.commits: commits की संख्या
|
||
§ plugin.team_files.filters.help: किसी फ़ाइल में कर्मचारी द्वारा किए गए commits की न्यूनतम संख्या
|
||
§ plugin.team_files.description.features: तालिका सिस्टम के विभिन्न घटकों पर *«उत्तरदायित्व के क्षेत्र»* और *«कार्य समय»* दिखाती है।
|
||
§ plugin.team_files.description.cost1: *«लागत»* कॉलम में प्रत्येक घटक की काल्पनिक कीमत एक स्वतंत्र उत्पाद के रूप में गणना की गई है (परिवर्तनों वाले दिनों की संख्या को कार्य दिवस की औसत दर से गुणा किया जाता है)। घटकों का योग परियोजना की कुल लागत से मेल नहीं खाता, क्योंकि प्रत्येक भाग का श्रम अलग से गणना किया जाता है। प्रणाली समय को कर्मचारी के पक्ष में पूर्णांकित करती है: यदि परिवर्तन में केवल 2 मिनट लगे हों, तब भी उसे पूरा कार्य दिवस गिना जाता है।
|
||
§ plugin.team_files.description.cost2
|
||
इस कॉलम का उद्देश्य दो प्रश्नों का उत्तर देना है:
|
||
- यदि हम तैयार बाज़ार समाधान का उपयोग करते, तो हम कितनी बचत करते?
|
||
- सिस्टम घटक को अलग मॉड्यूल में निकालकर लागत वसूल करने के लिए उसे किस मूल्य पर «उचित रूप से बेचा» जा सकता था?
|
||
§ plugin.team_files.table.lines: पंक्तियाँ
|
||
§ plugin.team_files.table.tasks: कार्य
|
||
§ plugin.team_files.table.days: दिन
|
||
§ plugin.team_files.table.workedDays: व्यक्ति-दिन
|
||
§ plugin.team_files.table.money: लागत
|
||
§ plugin.team_files.table.add: किसने जोड़ा
|
||
§ plugin.team_files.table.change: किसने बदला
|
||
§ plugin.team_files.table.remove: किसने हटाया
|
||
§ plugin.team_files.table.chart.line: पंक्तियाँ
|
||
§ plugin.team_files.table.chart.linesAdded: जोड़ी गईं
|
||
§ plugin.team_files.table.chart.linesChanged: बदली गईं
|
||
§ plugin.team_files.table.chart.linesRemoved: हटाई गईं
|
||
`,ja:`
|
||
§ plugin.team_files.sidebar.files: ファイル
|
||
§ plugin.team_files.sidebar.removedFiles: 削除されたファイル
|
||
§ plugin.team_files.title: 選択したフィルターを反映したプロジェクトツリー
|
||
§ plugin.team_files.filters.commits: commit 数
|
||
§ plugin.team_files.filters.help: 従業員がファイルに対して行った commit の最小数
|
||
§ plugin.team_files.description.features: 表は、システムの各コンポーネントに対する*「責任範囲」*と*「作業時間」*を示します。
|
||
§ plugin.team_files.description.cost1: *「コスト」*列では、各コンポーネントを独立した製品とみなした場合の仮定の価格を算出しています(変更のあった日数に、1営業日あたりの平均単価を乗じます)。コンポーネントの合計はプロジェクトの総コストと一致しません。各部分の工数を個別に計算しているためです。システムは時間を従業員に有利な方向へ丸めます。変更に2分しかかかっていなくても、1営業日として計上されます。
|
||
§ plugin.team_files.description.cost2
|
||
この列の目的は、次の2つの問いに答えることです。
|
||
- 既製の市場ソリューションを利用していた場合、どれだけ節約できたか。
|
||
- システムコンポーネントを独立したモジュールとして切り出した場合、収支をゼロにするために「妥当な価格」で販売できる金額はいくらか。
|
||
§ plugin.team_files.table.lines: 行数
|
||
§ plugin.team_files.table.tasks: タスク
|
||
§ plugin.team_files.table.days: 日数
|
||
§ plugin.team_files.table.workedDays: 人日
|
||
§ plugin.team_files.table.money: コスト
|
||
§ plugin.team_files.table.add: 追加した人
|
||
§ plugin.team_files.table.change: 変更した人
|
||
§ plugin.team_files.table.remove: 削除した人
|
||
§ plugin.team_files.table.chart.line: 行
|
||
§ plugin.team_files.table.chart.linesAdded: 追加
|
||
§ plugin.team_files.table.chart.linesChanged: 変更
|
||
§ plugin.team_files.table.chart.linesRemoved: 削除
|
||
`,ko:`
|
||
§ plugin.team_files.sidebar.files: 파일
|
||
§ plugin.team_files.sidebar.removedFiles: 삭제된 파일
|
||
§ plugin.team_files.title: 선택한 필터를 반영한 프로젝트 트리
|
||
§ plugin.team_files.filters.commits: commit 수
|
||
§ plugin.team_files.filters.help: 직원이 파일에 수행한 최소 commit 수
|
||
§ plugin.team_files.description.features: 표는 시스템 구성 요소별 *「책임 영역」*과 *「작업 시간」*을 보여 줍니다.
|
||
§ plugin.team_files.description.cost1: *「비용」* 열에는 각 구성 요소를 독립된 제품으로 본 가정 가격이 계산됩니다(변경이 있었던 일수에 근무일 평균 단가를 곱합니다). 구성 요소별 합계는 프로젝트 총비용과 일치하지 않습니다. 각 부분의 공수를 따로 계산하기 때문입니다. 시스템은 시간을 직원에게 유리하게 반올림합니다. 변경에 2분밖에 걸리지 않았어도 근무일 하루로 계산됩니다.
|
||
§ plugin.team_files.description.cost2
|
||
이 열의 목적은 다음 두 가지 질문에 답하는 것입니다.
|
||
- 기성 시장 솔루션을 사용했다면 얼마나 절약할 수 있었는가.
|
||
- 시스템 구성 요소를 별도 모듈로 분리했을 때, 수지가 0이 되도록 「합리적으로 판매」할 수 있는 가격은 얼마인가.
|
||
§ plugin.team_files.table.lines: 줄 수
|
||
§ plugin.team_files.table.tasks: 작업
|
||
§ plugin.team_files.table.days: 일수
|
||
§ plugin.team_files.table.workedDays: 인일
|
||
§ plugin.team_files.table.money: 비용
|
||
§ plugin.team_files.table.add: 추가한 사람
|
||
§ plugin.team_files.table.change: 변경한 사람
|
||
§ plugin.team_files.table.remove: 삭제한 사람
|
||
§ plugin.team_files.table.chart.line: 줄
|
||
§ plugin.team_files.table.chart.linesAdded: 추가됨
|
||
§ plugin.team_files.table.chart.linesChanged: 변경됨
|
||
§ plugin.team_files.table.chart.linesRemoved: 삭제됨
|
||
`,pt:`
|
||
§ plugin.team_files.sidebar.files: Arquivos
|
||
§ plugin.team_files.sidebar.removedFiles: Arquivos excluídos
|
||
§ plugin.team_files.title: Árvore do projeto considerando os filtros selecionados
|
||
§ plugin.team_files.filters.commits: Número de commits
|
||
§ plugin.team_files.filters.help: O número mínimo de commits que um colaborador fez em um arquivo
|
||
§ plugin.team_files.description.features: A tabela mostra as *«áreas de responsabilidade»* e o *«tempo de trabalho»* dedicados aos diferentes componentes do sistema.
|
||
§ plugin.team_files.description.cost1: Na coluna *«Custo»* é calculado o preço hipotético de cada componente como um produto independente (o número de dias com alterações é multiplicado pela taxa média de um dia de trabalho). A soma dos componentes não coincide com o custo total do projeto, pois o esforço de cada parte é calculado separadamente. O sistema arredonda o tempo a favor do colaborador: mesmo que uma alteração tenha levado apenas 2 minutos, ela é contabilizada como um dia de trabalho completo.
|
||
§ plugin.team_files.description.cost2
|
||
A finalidade desta coluna é responder a duas perguntas:
|
||
- Quanto teríamos economizado se tivéssemos utilizado uma solução de mercado pronta?
|
||
- Por qual preço seria possível «vender de forma justificada» um componente do sistema, isolando-o em um módulo separado, de modo a atingir o ponto de equilíbrio?
|
||
§ plugin.team_files.table.lines: Linhas
|
||
§ plugin.team_files.table.tasks: Tarefas
|
||
§ plugin.team_files.table.days: Dias
|
||
§ plugin.team_files.table.workedDays: Dias-pessoa
|
||
§ plugin.team_files.table.money: Custo
|
||
§ plugin.team_files.table.add: Quem adicionou
|
||
§ plugin.team_files.table.change: Quem alterou
|
||
§ plugin.team_files.table.remove: Quem excluiu
|
||
§ plugin.team_files.table.chart.line: linhas
|
||
§ plugin.team_files.table.chart.linesAdded: adicionadas
|
||
§ plugin.team_files.table.chart.linesChanged: alteradas
|
||
§ plugin.team_files.table.chart.linesRemoved: excluídas
|
||
`,ru:`
|
||
§ plugin.team_files.sidebar.files: Файлы
|
||
§ plugin.team_files.sidebar.removedFiles: Удалённые файлы
|
||
§ plugin.team_files.title: Дерево проекта с учётом выбранных фильтров
|
||
§ plugin.team_files.filters.commits: Количество коммитов
|
||
§ plugin.team_files.filters.help: Минимальное количество коммитов, которое сделал сотрудник в файле
|
||
§ plugin.team_files.description.features: Таблица показывает *«зоны ответственности»* и *«время работы»* над разными компонентами системы.
|
||
§ plugin.team_files.description.cost1: В колонке *«Стоимость»* рассчитана гипотетическая цена каждого компонента как самостоятельного продукта (количество дней с правками умножается на среднюю ставку рабочего дня). Сумма по компонентам не совпадает с итоговой стоимостью проекта, поскольку трудозатраты по каждой части рассчитываются отдельно. При этом система округляет время в пользу сотрудника: даже если на правку потрачено всего 2 минуты, она засчитывается как полный рабочий день.
|
||
§ plugin.team_files.description.cost2
|
||
Задача этой колонки ответить на два вопроса:
|
||
- Сколько бы мы сэкономили, если бы использовали готовое рыночное решение?
|
||
- По какой цене можно было бы «обоснованно продать» (?) компонент системы, если выделить его в отдельный модуль, чтобы выйти в ноль?
|
||
§ plugin.team_files.table.lines: Строк
|
||
§ plugin.team_files.table.tasks: Задач
|
||
§ plugin.team_files.table.days: Дней
|
||
§ plugin.team_files.table.workedDays: Чел. дней
|
||
§ plugin.team_files.table.money: Стоимость
|
||
§ plugin.team_files.table.add: Кто добавлял
|
||
§ plugin.team_files.table.change: Кто менял
|
||
§ plugin.team_files.table.remove: Кто удалял
|
||
§ plugin.team_files.table.chart.line: строк
|
||
§ plugin.team_files.table.chart.linesAdded: добавили
|
||
§ plugin.team_files.table.chart.linesChanged: изменили
|
||
§ plugin.team_files.table.chart.linesRemoved: удалили
|
||
`,zh:`
|
||
§ plugin.team_files.sidebar.files: 文件
|
||
§ plugin.team_files.sidebar.removedFiles: 已删除的文件
|
||
§ plugin.team_files.title: 考虑所选筛选条件的项目树
|
||
§ plugin.team_files.filters.commits: commit 次数
|
||
§ plugin.team_files.filters.help: 员工在文件中至少执行的最少 commit 次数
|
||
§ plugin.team_files.description.features: 该表展示系统各组件的*「责任范围」*和*「工作时间」*。
|
||
§ plugin.team_files.description.cost1: *「成本」*列按独立产品估算每个组件的假设价格(有改动的天数乘以工作日平均费率)。各组件之和与项目总成本不一致,因为每一部分的工时单独计算。系统按有利于员工的方式对时间取整:即使某次修改只花了2分钟,也计为一个完整工作日。
|
||
§ plugin.team_files.description.cost2
|
||
该列用于回答两个问题:
|
||
- 如果采用现成的市场方案,可以节省多少?
|
||
- 若将系统组件拆分为独立模块以达到收支平衡,可以按什么价格「合理出售」?
|
||
§ plugin.team_files.table.lines: 行数
|
||
§ plugin.team_files.table.tasks: 任务
|
||
§ plugin.team_files.table.days: 天数
|
||
§ plugin.team_files.table.workedDays: 人天
|
||
§ plugin.team_files.table.money: 成本
|
||
§ plugin.team_files.table.add: 谁添加
|
||
§ plugin.team_files.table.change: 谁修改
|
||
§ plugin.team_files.table.remove: 谁删除
|
||
§ plugin.team_files.table.chart.line: 行
|
||
§ plugin.team_files.table.chart.linesAdded: 已添加
|
||
§ plugin.team_files.table.chart.linesChanged: 已修改
|
||
§ plugin.team_files.table.chart.linesRemoved: 已删除
|
||
`},iO=U(({filters:t,onChange:e})=>{const s=(n,r)=>{e&&e({...t||{},[n]:r,hash:Math.random()})};return o.jsx("div",{className:Xt.layout_search_select,children:o.jsx(Dk,{placeholder:"plugin.team_files.filters.commits",help:"plugin.team_files.filters.help",value:t==null?void 0:t.minCommits,onChange:n=>s("minCommits",n)})})}),um={file_breadcrumbs:"file_breadcrumbs",file_breadcrumbs_text:"file_breadcrumbs_text",file_breadcrumbs_link:"file_breadcrumbs_link"};function ab({dirName:t,onClick:e}){return o.jsx("span",{className:`${um.file_breadcrumbs_text} ${um.file_breadcrumbs_link}`,onClick:e,children:t||".."})}function nO({path:t,setPath:e}){const s=t.map((n,r)=>o.jsxs("span",{children:[o.jsx("span",{className:um.file_breadcrumbs_text,children:"/"}),o.jsx(ab,{dirName:n,onClick:()=>{e(t.slice(0,r+1))}})]},n));return o.jsxs("h3",{className:um.file_breadcrumbs,children:[o.jsx("span",{className:um.file_breadcrumbs_text,children:"Адрес:"}),o.jsx(ab,{onClick:()=>{e([])}}),s]})}const sb={plugin_team_files_table_select:"plugin_team_files_table_select",plugin_team_files_table_not_select:"plugin_team_files_table_not_select"};function Bo({children:t,isSelected:e}){const s=e?sb.plugin_team_files_table_select:sb.plugin_team_files_table_not_select;return o.jsx("div",{className:s,children:t})}function oO({name:t,isSelected:e}){return o.jsx(Bo,{isSelected:e,children:`📁 ${t||""}`})}function lO({name:t,isSelected:e}){return o.jsx(Bo,{isSelected:e,children:`📄 ${t||""}`})}function rO({response:t,updateSort:e,rowsForExcel:s}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:"details",children:[o.jsx(w,{isFixed:!0,isSortable:!0,template:C.TASK,properties:"task",title:"plugin.team_refactor.tasks.task"}),o.jsx(w,{properties:"prIds",template:C.PULL_REQUESTS}),o.jsx(w,{properties:"types",template:C.TAGS}),o.jsx(w,{properties:"scope",template:C.TAGS}),o.jsx(w,{template:C.STRING,title:"plugin.team_refactor.tasks.description",properties:"description"})]}):null}function cm(t,e,s){return t?e?e>=s:!1:!0}function mO(t,e){var r,u,c,p,_;const s=(e==null?void 0:e.minCommits)||0;let n=t.commits>=s;if(n){const h=(r=t.authors)==null?void 0:r[e==null?void 0:e.author];n=cm(e==null?void 0:e.author,h,s)}if(n){const h=(u=t.companies)==null?void 0:u[e==null?void 0:e.company];n=cm(e==null?void 0:e.company,h,s)}if(n){const h=(c=t.taskCode)==null?void 0:c[e==null?void 0:e.taskCode];n=cm(e==null?void 0:e.taskCode,h,s)}if(n){const h=(p=t.types)==null?void 0:p[e==null?void 0:e.type];n=cm(e==null?void 0:e.type,h,s)}if(n){const h=(_=t.scope)==null?void 0:_[e==null?void 0:e.scope];n=cm(e==null?void 0:e.scope,h,s)}return n}function uO(t,e){const s=A.statisticsByCommits.tasks.totalInfoByName;return[...t||[]].reverse().map(n=>s.get(n)).filter(n=>n?e?!(e.author&&!n.authors.has(e.author)||e.taskCode&&n.taskCode!==e.taskCode||e.scope&&!n.scope.includes(e.scope)||e.type&&!n.types.includes(e.type)):!0:!1)}function cO({response:t,filters:e,setPath:s}){if(!t)return null;const[n,r,u]=["plugin.team_files.table.chart.linesAdded","plugin.team_files.table.chart.linesChanged","plugin.team_files.table.chart.linesRemoved"],c=t.content.map(p=>({...p,isSelected:mO(p,e)}));return o.jsxs(ws,{rows:c,children:[o.jsx(w,{isFixed:!0,template:C.DETAILS,width:40,formatter:p=>{const _=uO(p==null?void 0:p.tasks,e);return o.jsxs(be,{content:_,children:[o.jsx(rO,{}),o.jsx(fe,{})]})}}),o.jsx(w,{isFixed:!0,minWidth:170,template:p=>p!=null&&p.content?o.jsx(oO,{name:p==null?void 0:p.name,isSelected:p==null?void 0:p.isSelected}):o.jsx(lO,{name:p==null?void 0:p.name,isSelected:p==null?void 0:p.isSelected}),onClick:p=>{p.content&&s([...p.path,p.name])}}),o.jsx(w,{isSortable:!0,width:100,title:"plugin.team_files.table.lines",template:p=>o.jsx(Bo,{isSelected:p.isSelected,children:p==null?void 0:p.lines})}),o.jsx(w,{isSortable:!0,width:100,title:"plugin.team_files.table.tasks",template:p=>o.jsx(Bo,{isSelected:p.isSelected,children:p==null?void 0:p.totalTasks})}),o.jsx(w,{isSortable:!0,width:100,title:"plugin.team_files.table.days",template:p=>o.jsx(Bo,{isSelected:p.isSelected,children:p==null?void 0:p.totalDays})}),o.jsx(w,{width:100,title:"plugin.team_files.table.workedDays",template:p=>o.jsx(Bo,{isSelected:p.isSelected,children:p!=null&&p.content?p==null?void 0:p.totalDaysByAuthor:p==null?void 0:p.totalDays})}),o.jsx(w,{width:150,title:"plugin.team_files.table.money",properties:"money",template:C.SHORT_NUMBER,formatter:p=>ct(p)}),o.jsx(w,{isSortable:!0,title:"plugin.team_files.table.workedDays",minWidth:200,template:p=>p!=null&&p.content?o.jsx(ue,{details:p==null?void 0:p.daysByAuthor,order:A.statisticsByCommits.author.list,suffix:"common.statistic.days"}):null}),o.jsx(w,{minWidth:200,template:p=>o.jsx(ue,{details:{[n]:(p==null?void 0:p.addedLines)||0,[u]:(p==null?void 0:p.removedLines)||0,[r]:(p==null?void 0:p.changedLines)||0},order:[n,r,u],suffix:"plugin.team_files.table.chart.line"})}),o.jsx(w,{title:"plugin.team_files.table.add",minWidth:200,template:p=>o.jsx(ue,{details:p==null?void 0:p.addedLinesByAuthor,order:A.statisticsByCommits.author.list,suffix:"plugin.team_files.table.chart.line"})}),o.jsx(w,{title:"plugin.team_files.table.change",minWidth:200,template:p=>o.jsx(ue,{details:p==null?void 0:p.changedLinesByAuthor,order:A.statisticsByCommits.author.list,suffix:"plugin.team_files.table.chart.line"})}),o.jsx(w,{title:"plugin.team_files.table.remove",minWidth:200,template:p=>o.jsx(ue,{details:p==null?void 0:p.removedLinesByAuthor,order:A.statisticsByCommits.author.list,suffix:"plugin.team_files.table.chart.line"})})]})}function pO(t,e){return(e||[]).reduce((s,n)=>(s=s.content.get(n)||{content:new Map},s),t||{content:new Map})}function dO(t){return Array.from(t.content.values()).sort((e,s)=>e.content&&!s.content?-1:!e.content&&s.content?1:e.name===s.name?0:e.name>s.name?1:-1)}function gO(t,e){return dO(pO(t,e))}const ib=U(({type:t,mode:e})=>{const[s,n]=T.useState([]),[r,u]=T.useState({}),c=t==="removed"?A.statisticsByFiles.removedTree.tree:A.statisticsByFiles.tree.tree;T.useEffect(()=>{n([])},[t]);const p=gO(c,s);return p!=null&&p.length?o.jsxs(o.Fragment,{children:[o.jsxs(Y,{value:e!=="print",children:[o.jsx(G,{title:"common.filters"}),o.jsx(Ei,{elements:["company","taskCode","author","type","scope"],onChange:(_,h,f)=>{u(f)},children:o.jsx(iO,{})})]}),o.jsx(ot,{translationId:"plugin.team_files.description.features"}),o.jsx(ot,{translationId:"plugin.team_files.description.cost1"}),o.jsx(ot,{translationId:"plugin.team_files.description.cost2"}),o.jsx(nt,{height:"xl"}),o.jsx(nO,{path:s,setPath:n}),o.jsx(tc,{children:o.jsxs(rc,{loader:_=>mc({content:p,pagination:{..._,size:2e3}}),watch:`${s}${r.hash}${t}`,children:[o.jsx(cO,{filters:r,setPath:n}),o.jsx(fe,{})]})})]}):o.jsx(Le,{})});let _O=(bl=class{constructor(){this.dependencies=["author","tasks"]}getMenuItems(){return[{id:"files",group:30,order:130,link:"/team/files",title:"plugin.team_files.sidebar.files",icon:"./assets/menu/files.svg"},{id:"removedFiles",group:30,order:131,link:"/team/removedFiles",title:"plugin.team_files.sidebar.removedFiles",icon:"./assets/menu/files_remove.svg"}]}getPage(e){if(e==="/team/files")return o.jsx(ib,{});if(e==="/team/removedFiles")return o.jsx(ib,{type:"removed"})}getTranslations(){return sO}},bl.id="team_files",bl);const hO={ar:`
|
||
§ plugin.team_hours.sidebar: حسب الساعات
|
||
§ plugin.team_hours.title: توزيع الـ commits على مدار كل يوم من أيام الأسبوع
|
||
`,de:`
|
||
§ plugin.team_hours.sidebar: Nach Stunden
|
||
§ plugin.team_hours.title: Verteilung der commits über jeden Wochentag
|
||
`,en:`
|
||
§ plugin.team_hours.sidebar: By hours
|
||
§ plugin.team_hours.title: Distribution of commits throughout each day of the week
|
||
`,es:`
|
||
§ plugin.team_hours.sidebar: Por horas
|
||
§ plugin.team_hours.title: Distribución de commits a lo largo de cada día de la semana
|
||
`,fr:`
|
||
§ plugin.team_hours.sidebar: Par heures
|
||
§ plugin.team_hours.title: Répartition des commits tout au long de chaque jour de la semaine
|
||
`,he:`
|
||
§ plugin.team_hours.sidebar: לפי שעות
|
||
§ plugin.team_hours.title: התפלגות ה-commits לאורך כל יום בשבוע
|
||
`,hi:`
|
||
§ plugin.team_hours.sidebar: घंटों के अनुसार
|
||
§ plugin.team_hours.title: सप्ताह के प्रत्येक दिन के दौरान commits का वितरण
|
||
`,ja:`
|
||
§ plugin.team_hours.sidebar: 時間別
|
||
§ plugin.team_hours.title: 曜日ごとの 1 日を通した commit の分布
|
||
`,ko:`
|
||
§ plugin.team_hours.sidebar: 시간별
|
||
§ plugin.team_hours.title: 요일별 하루 동안의 commit 분포
|
||
`,pt:`
|
||
§ plugin.team_hours.sidebar: Por horas
|
||
§ plugin.team_hours.title: Distribuição de commits ao longo de cada dia da semana
|
||
`,ru:`
|
||
§ plugin.team_hours.sidebar: По часам
|
||
§ plugin.team_hours.title: Распределение коммитов в течении каждого дня недели
|
||
|
||
§ plugin.team_hours.recommendations.onlyWork.title: Выходных тут нет
|
||
§ plugin.team_hours.recommendations.onlyWork.description: Вероятно, стоит уволить менеджера проекта.
|
||
§ plugin.team_hours.recommendations.weekends.title: Работа на выходных
|
||
§ plugin.team_hours.recommendations.weekends.description: Вероятно, стоит проверить менеджера проекта.
|
||
§ plugin.team_hours.recommendations.easy.title: Бывают проблемы
|
||
§ plugin.team_hours.recommendations.easy.description: Вероятно, бывают завалы и приходится работать на выходных.
|
||
|
||
`,zh:`
|
||
§ plugin.team_hours.sidebar: 按小时
|
||
§ plugin.team_hours.title: 每周每一天中 commits 的分布
|
||
`},fO={onlyWork:{title:"plugin.team_hours.recommendations.onlyWork.title",description:"plugin.team_hours.recommendations.onlyWork.description",type:J.ALERT},weekends:{title:"plugin.team_hours.recommendations.weekends.title",description:"plugin.team_hours.recommendations.weekends.description",type:J.ALERT},easy:{title:"plugin.team_hours.recommendations.easy.title",description:"plugin.team_hours.recommendations.easy.description",type:J.WARNING}},{getItem:Eg}=Un(fO);function yO(t){const e=Math.min(...t.commitsByDay.slice(0,5)),n=Math.max(...t.commitsByDay.slice(5,7))/e;return n>.45?Eg("onlyWork"):n>.2?Eg("weekends"):n>0?Eg("easy"):null}function vO(){const t=A.statisticsByCommits;return t.author.list.length<2?[]:[yO(t.team.totalInfo)].filter(e=>e)}const nb=qi(vO),ob=U(({mode:t,user:e})=>{const s=e?A.statisticsByCommits.author.totalInfoByName.get(e.author):A.statisticsByCommits.team.totalInfo;let n=0;s.commitsByDayAndHour.forEach(u=>{n=Math.max(...u,n)});const r=nb();return o.jsxs(o.Fragment,{children:[o.jsx(Y,{value:r&&!e,children:o.jsx(Hn,{mode:t,recommendations:r})}),o.jsx(G,{title:"plugin.team_hours.title"}),o.jsx(tc,{children:o.jsx(eE,{max:n,commitsByDayAndHour:s.commitsByDayAndHour})})]})});let kO=(wl=class{constructor(){this.dependencies=["author","team","recommendations"]}getMenuItems(){return[{id:"hours",group:20,order:120,link:"/team/hours",title:"plugin.team_hours.sidebar",icon:"./assets/menu/hours.svg"},{id:"hours",group:20,order:70,link:"/person/hours/",title:"plugin.team_hours.sidebar",icon:"./assets/menu/hours.svg"}]}getPage(e,s){if(e==="/person/hours")return o.jsx(ob,{mode:s==null?void 0:s.mode,user:s==null?void 0:s.user,filters:s==null?void 0:s.filters});if(e==="/team/hours")return o.jsx(ob,{mode:s==null?void 0:s.mode})}getTranslations(){return hO}},wl.id="team_hours",wl);const bO={ar:`
|
||
§ plugin.team_month.sidebar: حسب الأشهر
|
||
§ plugin.team_month.title: تقويم العمل على المشروع
|
||
§ plugin.team_month.filters.release: الإصدارات
|
||
§ plugin.team_month.filters.absence: الإجازات والانتقالات
|
||
§ plugin.team_month.filters.firstLastDays: اليوم الأول والأخير
|
||
§ plugin.team_month.filters.authors: جميع الموظفين
|
||
§ plugin.team_month.filters.types: جميع الأنواع
|
||
§ plugin.team_month.title: تقويم العمل على المشروع
|
||
§ plugin.team_month.travel: (غيّر الموقع)
|
||
§ plugin.team_month.vacation.first: (يذهب في إجازة)
|
||
§ plugin.team_month.vacation.last: (عاد من الإجازة)
|
||
§ plugin.team_month.work.first: (أول يوم عمل)
|
||
§ plugin.team_month.work.last: (آخر يوم عمل)
|
||
`,de:`
|
||
§ plugin.team_month.sidebar: Nach Monaten
|
||
§ plugin.team_month.title: Arbeitskalender des Projekts
|
||
§ plugin.team_month.filters.release: Releases
|
||
§ plugin.team_month.filters.absence: Urlaub und Umzüge
|
||
§ plugin.team_month.filters.firstLastDays: Erster und letzter Tag
|
||
§ plugin.team_month.filters.authors: Alle Mitarbeiter
|
||
§ plugin.team_month.filters.types: Alle Typen
|
||
§ plugin.team_month.title: Arbeitskalender des Projekts
|
||
§ plugin.team_month.travel: (Standort geändert)
|
||
§ plugin.team_month.vacation.first: (geht in den Urlaub)
|
||
§ plugin.team_month.vacation.last: (ist aus dem Urlaub zurück)
|
||
§ plugin.team_month.work.first: (erster Arbeitstag)
|
||
§ plugin.team_month.work.last: (letzter Arbeitstag)
|
||
`,en:`
|
||
§ plugin.team_month.sidebar: By months
|
||
§ plugin.team_month.title: Project work calendar
|
||
§ plugin.team_month.filters.release: Releases
|
||
§ plugin.team_month.filters.absence: Vacations and relocations
|
||
§ plugin.team_month.filters.firstLastDays: First and last day
|
||
§ plugin.team_month.filters.authors: All staff members
|
||
§ plugin.team_month.filters.types: All types
|
||
§ plugin.team_month.title: Project work calendar
|
||
§ plugin.team_month.travel: (changed location)
|
||
§ plugin.team_month.vacation.first: (goes on vacation)
|
||
§ plugin.team_month.vacation.last: (returned from vacation)
|
||
§ plugin.team_month.work.first: (first working day)
|
||
§ plugin.team_month.work.last: (last working day)
|
||
`,es:`
|
||
§ plugin.team_month.sidebar: Por meses
|
||
§ plugin.team_month.title: Calendario de trabajo del proyecto
|
||
§ plugin.team_month.filters.release: Releases
|
||
§ plugin.team_month.filters.absence: Vacaciones y reubicaciones
|
||
§ plugin.team_month.filters.firstLastDays: Primer y último día
|
||
§ plugin.team_month.filters.authors: Todos los empleados
|
||
§ plugin.team_month.filters.types: Todos los tipos
|
||
§ plugin.team_month.title: Calendario de trabajo del proyecto
|
||
§ plugin.team_month.travel: (cambió de ubicación)
|
||
§ plugin.team_month.vacation.first: (se va de vacaciones)
|
||
§ plugin.team_month.vacation.last: (regresó de vacaciones)
|
||
§ plugin.team_month.work.first: (primer día laborable)
|
||
§ plugin.team_month.work.last: (último día laborable)
|
||
`,fr:`
|
||
§ plugin.team_month.sidebar: Par mois
|
||
§ plugin.team_month.title: Calendrier de travail du projet
|
||
§ plugin.team_month.filters.release: Releases
|
||
§ plugin.team_month.filters.absence: Congés et déménagements
|
||
§ plugin.team_month.filters.firstLastDays: Premier et dernier jour
|
||
§ plugin.team_month.filters.authors: Tous les collaborateurs
|
||
§ plugin.team_month.filters.types: Tous les types
|
||
§ plugin.team_month.title: Calendrier de travail du projet
|
||
§ plugin.team_month.travel: (a changé de localisation)
|
||
§ plugin.team_month.vacation.first: (part en congé)
|
||
§ plugin.team_month.vacation.last: (est revenu de congé)
|
||
§ plugin.team_month.work.first: (premier jour de travail)
|
||
§ plugin.team_month.work.last: (dernier jour de travail)
|
||
`,he:`
|
||
§ plugin.team_month.sidebar: לפי חודשים
|
||
§ plugin.team_month.title: לוח עבודה של הפרויקט
|
||
§ plugin.team_month.filters.release: גרסאות
|
||
§ plugin.team_month.filters.absence: חופשות ומעברים
|
||
§ plugin.team_month.filters.firstLastDays: היום הראשון והאחרון
|
||
§ plugin.team_month.filters.authors: כל העובדים
|
||
§ plugin.team_month.filters.types: כל הסוגים
|
||
§ plugin.team_month.title: לוח עבודה של הפרויקט
|
||
§ plugin.team_month.travel: (שינה מיקום)
|
||
§ plugin.team_month.vacation.first: (יוצא לחופשה)
|
||
§ plugin.team_month.vacation.last: (חזר מחופשה)
|
||
§ plugin.team_month.work.first: (יום העבודה הראשון)
|
||
§ plugin.team_month.work.last: (יום העבודה האחרון)
|
||
`,hi:`
|
||
§ plugin.team_month.sidebar: महीनों के अनुसार
|
||
§ plugin.team_month.title: परियोजना का कार्य कैलेंडर
|
||
§ plugin.team_month.filters.release: रिलीज़
|
||
§ plugin.team_month.filters.absence: अवकाश और स्थानांतरण
|
||
§ plugin.team_month.filters.firstLastDays: पहला और अंतिम दिन
|
||
§ plugin.team_month.filters.authors: सभी कर्मचारी
|
||
§ plugin.team_month.filters.types: सभी प्रकार
|
||
§ plugin.team_month.title: परियोजना का कार्य कैलेंडर
|
||
§ plugin.team_month.travel: (स्थान बदला)
|
||
§ plugin.team_month.vacation.first: (अवकाश पर जाता है)
|
||
§ plugin.team_month.vacation.last: (अवकाश से लौटा)
|
||
§ plugin.team_month.work.first: (पहला कार्य दिवस)
|
||
§ plugin.team_month.work.last: (अंतिम कार्य दिवस)
|
||
`,ja:`
|
||
§ plugin.team_month.sidebar: 月別
|
||
§ plugin.team_month.title: プロジェクトの勤務カレンダー
|
||
§ plugin.team_month.filters.release: リリース
|
||
§ plugin.team_month.filters.absence: 休暇と転居
|
||
§ plugin.team_month.filters.firstLastDays: 最初と最後の日
|
||
§ plugin.team_month.filters.authors: すべての従業員
|
||
§ plugin.team_month.filters.types: すべての種類
|
||
§ plugin.team_month.title: プロジェクトの勤務カレンダー
|
||
§ plugin.team_month.travel: (所在地を変更)
|
||
§ plugin.team_month.vacation.first: (休暇に入る)
|
||
§ plugin.team_month.vacation.last: (休暇から戻った)
|
||
§ plugin.team_month.work.first: (最初の勤務日)
|
||
§ plugin.team_month.work.last: (最後の勤務日)
|
||
`,ko:`
|
||
§ plugin.team_month.sidebar: 월별
|
||
§ plugin.team_month.title: 프로젝트 근무 캘린더
|
||
§ plugin.team_month.filters.release: 릴리스
|
||
§ plugin.team_month.filters.absence: 휴가 및 이전
|
||
§ plugin.team_month.filters.firstLastDays: 첫날과 마지막 날
|
||
§ plugin.team_month.filters.authors: 모든 직원
|
||
§ plugin.team_month.filters.types: 모든 유형
|
||
§ plugin.team_month.title: 프로젝트 근무 캘린더
|
||
§ plugin.team_month.travel: (위치를 변경함)
|
||
§ plugin.team_month.vacation.first: (휴가에 들어감)
|
||
§ plugin.team_month.vacation.last: (휴가에서 복귀함)
|
||
§ plugin.team_month.work.first: (첫 근무일)
|
||
§ plugin.team_month.work.last: (마지막 근무일)
|
||
`,pt:`
|
||
§ plugin.team_month.sidebar: Por meses
|
||
§ plugin.team_month.title: Calendário de trabalho do projeto
|
||
§ plugin.team_month.filters.release: Releases
|
||
§ plugin.team_month.filters.absence: Férias e realocações
|
||
§ plugin.team_month.filters.firstLastDays: Primeiro e último dia
|
||
§ plugin.team_month.filters.authors: Todos os colaboradores
|
||
§ plugin.team_month.filters.types: Todos os tipos
|
||
§ plugin.team_month.title: Calendário de trabalho do projeto
|
||
§ plugin.team_month.travel: (alterou a localização)
|
||
§ plugin.team_month.vacation.first: (sai de férias)
|
||
§ plugin.team_month.vacation.last: (voltou de férias)
|
||
§ plugin.team_month.work.first: (primeiro dia de trabalho)
|
||
§ plugin.team_month.work.last: (último dia de trabalho)
|
||
`,ru:`
|
||
§ plugin.team_month.sidebar: По месяцам
|
||
§ plugin.team_month.title: Календарь работы по проекту
|
||
§ plugin.team_month.filters.release: Релизы
|
||
§ plugin.team_month.filters.absence: Отпуска и переезды
|
||
§ plugin.team_month.filters.firstLastDays: Первый и последний день
|
||
§ plugin.team_month.filters.authors: Все сотрудники
|
||
§ plugin.team_month.filters.types: Все типы
|
||
§ plugin.team_month.title: Календарь работы по проекту
|
||
§ plugin.team_month.travel: (изменил местоположение)
|
||
§ plugin.team_month.vacation.first: (уходит в отпуск)
|
||
§ plugin.team_month.vacation.last: (вернулся из отпуска)
|
||
§ plugin.team_month.work.first: (первый рабочий день)
|
||
§ plugin.team_month.work.last: (последний рабочий день)
|
||
|
||
§ plugin.team_month.recommendations.firstCommit.description
|
||
сделал первый коммит
|
||
|
||
День недели: {day}
|
||
|
||
§ plugin.team_month.recommendations.lastCommit.description
|
||
сделал последний коммит
|
||
|
||
День недели: {day}
|
||
|
||
§ plugin.team_month.recommendations.common.title: {days} дней
|
||
§ plugin.team_month.recommendations.allDays.description: от первого до последнего коммита (включая выходные и праздники).
|
||
§ plugin.team_month.recommendations.lossesDays.description: без коммитов, даже с учётом выходных, отпуска и государственных праздников.
|
||
§ plugin.team_month.recommendations.weekendDays.description
|
||
работы на выходных
|
||
|
||
# Почему это плохо:
|
||
- заказчик платит двойную цену за работу в выходной день;
|
||
- сотрудники быстрее выгорают;
|
||
|
||
§ plugin.team_month.recommendations.regularWeekendWord.title: Регулярные переработки
|
||
§ plugin.team_month.recommendations.sometimeWeekendWord.title: Бывают переработки
|
||
§ plugin.team_month.recommendations.weekendWord.description
|
||
Вероятно, стоит сменить менеджера проекта, аналитика и архитектора.
|
||
|
||
# Почему это плохо:
|
||
- заказчик платит двойную цену за работу в выходной день;
|
||
- качество продукта, как правило, получается низкое;
|
||
- часть сотрудников увольняется;
|
||
- из-за спешки появляются новые ошибки;
|
||
|
||
# Скорее всего:
|
||
- неверно оценили сроки в самом начале;
|
||
- техническое задание отсутствует;
|
||
- слабая аналитика;
|
||
- слабая архитектура (архитектора не нанимали, а команда состоит из мидл разработчиков);
|
||
- сначала начали писать код, потом проектировать;
|
||
- нет нормальных процессов, чтобы понять ошибки;
|
||
|
||
§ plugin.team_month.recommendations.neverWeekendWord.title: Обычно без переработок
|
||
§ plugin.team_month.recommendations.neverWeekendWord.description
|
||
Но иногда бывают.
|
||
|
||
# Почему это плохо:
|
||
- заказчик платит двойную цену за работу в выходной день;
|
||
- сотрудники быстрее выгорают;
|
||
|
||
`,zh:`
|
||
§ plugin.team_month.sidebar: 按月
|
||
§ plugin.team_month.title: 项目工作日历
|
||
§ plugin.team_month.filters.release: 发布
|
||
§ plugin.team_month.filters.absence: 休假与搬迁
|
||
§ plugin.team_month.filters.firstLastDays: 第一天和最后一天
|
||
§ plugin.team_month.filters.authors: 所有员工
|
||
§ plugin.team_month.filters.types: 所有类型
|
||
§ plugin.team_month.title: 项目工作日历
|
||
§ plugin.team_month.travel: (更改了所在地)
|
||
§ plugin.team_month.vacation.first: (开始休假)
|
||
§ plugin.team_month.vacation.last: (已从休假返回)
|
||
§ plugin.team_month.work.first: (第一个工作日)
|
||
§ plugin.team_month.work.last: (最后一个工作日)
|
||
`};class wO{constructor(){this.info=void 0,this.position=[0,0],Et(this,{info:ce,open:re,close:re})}toggle(e,s){var n;((n=this.info)==null?void 0:n.timestamp)===(e==null?void 0:e.timestamp)?this.close():(this.open(e),this.position=s)}open(e){this.info=e}close(){this.info=void 0}}const Hi=new wO,Tc={year_chart_day_info:"year_chart_day_info",year_chart_day_info_body:"year_chart_day_info_body",year_chart_day_info_title:"year_chart_day_info_title"};function xO(t){return t!=null&&t.release?` Release: ${Array.from((t==null?void 0:t.release)||[]).sort().join(", ")}`:""}const CO=U(({events:t,author:e})=>{var c,p;if(!Hi.info)return null;const s=((c=Hi.position)==null?void 0:c[1])+24,n=((p=Hi.position)==null?void 0:p[0])-150,r=t.get(Hi.info.timestamp),u=xO(r);return cu.createPortal(o.jsx("div",{className:Tc.year_chart_day_info,style:{top:s,left:n},children:o.jsxs("div",{className:`${Tc.year_chart_day_info_body} scroll_y`,children:[o.jsx(G,{title:oe(Hi.info.timestamp),className:Tc.year_chart_day_info_title}),u?o.jsx(ot,{text:u,className:Tc.year_chart_day_info_title}):null,o.jsx(fN,{timestamp:Hi.info.timestamp,author:e,events:r})]})}),document.body)}),Ds={year_chart:"year_chart",year_chart_month:"year_chart_month",year_chart_month_icon:"year_chart_month_icon",year_chart_month_header:"year_chart_month_header",year_chart_month_header_title:"year_chart_month_header_title",year_chart_month_body:"year_chart_month_body",year_chart_month_body_day:"year_chart_month_body_day",year_chart_month_body_day_icon:"year_chart_month_body_day_icon"};function jO({showYear:t,month:e}){const s=t?Ti(e.milliseconds,{month:"long",year:"numeric"}):Ti(e.milliseconds,{month:"long"});return o.jsx("div",{className:Ds.year_chart_month_header,children:o.jsx("span",{className:Ds.year_chart_month_header_title,style:{fontWeight:t?"bold":100},children:s})})}const Dc={WORKS:["#4162B5","#617DC1","#718AC6","#8198CD","#91A6D2","#A2B3D8","#B2C1DE","#C2CEE4"],WEEKEND:["#ED675F","#EB817C","#E98E8A","#E89B99","#E7A8A7","#E7B5B6","#E6C3C4","#E4CFD3"],SELECTED:["#0E5C0C","#2B9829","#4FBF4C","#6DD26A","#88E185","#ACE4AA","#C2ECC1","#E1F7E1"]};function TO(t,e){return e>=.8?t[1]:e>=.6?t[3]:e>=.4?t[5]:t[7]}function DO(t,e,s){var c,p,_,h;const n=(p=(c=e==null?void 0:e.authors)==null?void 0:c[0])==null?void 0:p.title;if(n&&s.commitsNumberByAuthor.has(n))return Dc.SELECTED;const r=(h=(_=e==null?void 0:e.types)==null?void 0:_[0])==null?void 0:h.title;return r&&s.commitsNumberByType.has(r)?Dc.SELECTED:[5,6,12,13,19,20,26,27,33,34,40,41].includes(t)?Dc.WEEKEND:Dc.WORKS}function Zn(t){return Array.from(t).join(", ")}function Zs(t,e){return t?e?t.has(e):t:!1}function SO(t,e,s){let n="",r="";t.absence&&(Zs(e==null?void 0:e.vacationStart,s)&&(n="vacation_start",r=Zn(e==null?void 0:e.vacationStart)),Zs(e==null?void 0:e.vacationEnd,s)&&(n="vacation_end",r=Zn(e==null?void 0:e.vacationEnd)),Zs(e==null?void 0:e.travel,s)&&(n="travel",r=Zn(e==null?void 0:e.travel))),t.release&&(e!=null&&e.release)&&(n="release",r=Zn(e==null?void 0:e.release)),t.firstLastDays&&(Zs(e==null?void 0:e.firstDay,s)&&!Zs(e==null?void 0:e.lastDay,s)&&(n="person_add",r=Zn(e==null?void 0:e.firstDay)),!Zs(e==null?void 0:e.firstDay,s)&&Zs(e==null?void 0:e.lastDay,s)&&(n="person_remove",r=Zn(e==null?void 0:e.lastDay)),Zs(e==null?void 0:e.firstDay,s)&&Zs(e==null?void 0:e.lastDay,s)&&(n="person_add_remove",r=Zn(e==null?void 0:e.firstDay)));const u=n?o.jsx("img",{alt:"",className:Ds.year_chart_month_body_day_icon,src:`./assets/chart/${n}.svg`}):null;return r=r&&` | ${r}`,[r,u]}function AO(t,e){const s=(t||0)*100/e;return(s-s%1)/100}function zO({max:t,author:e,dayNumber:s,events:n,filters:r,dayInfo:u}){const c=e?u.commitsNumberByAuthor.get(e):u.commitsNumber,p=AO(c||0,t),_=DO(s,r,u),h=TO(_,p),f=oe(u.timestamp),[v,k]=SO(r,n,e);return o.jsx("div",{title:`${f}${v}`,id:`year_chart_day_${u==null?void 0:u.timestamp}`,className:Ds.year_chart_month_body_day,style:{backgroundColor:h},onClick:x=>{Hi.toggle(u,[x.pageX,x.pageY])},children:k||" "})}const NO=[31,28,31,30,31,30,31,31,30,31,30,31];function MO({max:t,author:e,month:s,events:n,filters:r}){const u=s.date.getDay()-1,c=u+NO[s.month],p=new Array(42).fill(0);let _=0;const h=p.map((f,v)=>{const k=v-u+1,x=s.days[_],N=n.get(x==null?void 0:x.timestamp);return(x==null?void 0:x.dayInMonth)===k&&(_+=1,e?x.commitsNumberByAuthor.get(e):x.commitsNumber)?o.jsx(zO,{max:t,author:e,dayNumber:v,dayInfo:x,events:N,filters:r},v):o.jsx("div",{className:Ds.year_chart_month_body_day,style:{opacity:v<u||v>c?.3:1}},v)});return o.jsx("div",{className:Ds.year_chart_month_body,children:h})}const RO={year_chart_month_info:"year_chart_month_info"};function EO({max:t,author:e,showYear:s,events:n,filters:r,month:u}){return o.jsxs("div",{className:Ds.year_chart_month,children:[o.jsx(jO,{month:u,showYear:s}),o.jsx(MO,{max:t,author:e,month:u,events:n,filters:r}),o.jsx(Y,{value:!e,children:o.jsxs("div",{className:RO.year_chart_month_info,children:[o.jsx("img",{alt:"",className:Ds.year_chart_month_icon,src:"./assets/chart/tasks.svg"}),o.jsx("span",{children:u.totalTasksNumber||0}),o.jsx("img",{alt:"",className:Ds.year_chart_month_icon,src:"./assets/chart/person.svg"}),o.jsx("span",{children:u.totalUsersNumber||0})]})})]})}function IO(t=0){const s=Math.floor(t/135),n=.3,r=7;for(let u=16;u<=24;u+=n)if((r+8*u)*s>t)return u-n;return 24}function qO(t,e){const s=u=>u.authors.has(e),n=t.findIndex(s),r=t.findLastIndex(s);return t.slice(n,r)}function lb({max:t=100,author:e,events:s,months:n=[],filters:r={}}){const u=T.useRef(null),[c,p]=T.useState(16);T.useEffect(()=>{var N;if(!u.current)return;const k=((N=u.current)==null?void 0:N.getBoundingClientRect())||{},x=IO(k==null?void 0:k.width);return p(x),()=>Hi.close()},[]);const _=e?qO(n,e):n;if(!(n!=null&&n.length))return null;const h=_.map((k,x)=>{const N=_[x-1];return o.jsx(EO,{max:t,author:e,events:s,filters:r,showYear:(N==null?void 0:N.year)!==(k==null?void 0:k.year),month:k},k.id)}),v={"--day-size":`${c.toFixed(1)}px`};return o.jsxs("div",{ref:u,style:v,className:Ds.year_chart,children:[h,o.jsx(CO,{author:e,events:s})]})}function OO(){return{firstDay:void 0,lastDay:void 0,release:void 0,vacationStart:void 0,vacationEnd:void 0,travel:void 0}}function Po(t,e,s){const n=t.get(e)||OO();s(n),t.set(e,n)}function Wo(t,e){return function(n){n[t]?n[t].add(e):n[t]=new Set([e])}}function $O(t,e){e.forEach(s=>{var n;(n=s==null?void 0:s.countries)==null||n.forEach(r=>{Po(t,r.fromTimestamp,Wo("travel",s.author))}),!s.isStaff&&(Po(t,s.firstCommitTimestamp,Wo("firstDay",s.author)),s.isDismissed&&Po(t,s.lastCommitTimestamp,Wo("lastDay",s.author)))})}function LO(t,e){e.forEach(s=>{Po(t,s.to.timestamp,Wo("release",s.title))})}function BO(t,e){e.forEach(s=>{s.duration>30||(Po(t,s.from.timestamp,Wo("vacationStart",s.author)),Po(t,s.to.timestamp,Wo("vacationEnd",s.author)))})}function rb(t,e){const s=new Map;return $O(s,t),LO(s,e.release.totalInfo),BO(s,e.absence.totalInfo),s}const mb={weekendDays:{title:"plugin.team_month.recommendations.common.title",description:"plugin.team_month.recommendations.weekendDays.description",type:J.ALERT,arguments:{title:{}}},lossesDays:{title:"plugin.team_month.recommendations.common.title",description:"plugin.team_month.recommendations.lossesDays.description",type:J.WARNING,arguments:{title:{}}},allDays:{title:"plugin.team_month.recommendations.common.title",description:"plugin.team_month.recommendations.allDays.description",type:J.FACT,arguments:{title:{}}},firstCommit:{title:"",description:"plugin.team_month.recommendations.firstCommit.description",type:J.FACT,arguments:{description:{}}},lastCommit:{title:"",description:"plugin.team_month.recommendations.lastCommit.description",type:J.FACT,arguments:{description:{}}},regularWeekendWord:{title:"plugin.team_month.recommendations.regularWeekendWord.title",description:"plugin.team_month.recommendations.weekendWord.description",type:J.ALERT},sometimeWeekendWord:{title:"plugin.team_month.recommendations.sometimeWeekendWord.title",description:"plugin.team_month.recommendations.weekendWord.description",type:J.ALERT},neverWeekendWord:{title:"plugin.team_month.recommendations.neverWeekendWord.title",description:"plugin.team_month.recommendations.neverWeekendWord.description",type:J.FACT}},{getItem:Ig,getArgTitle:ub,getTitleArgDescription:cb}=Un(mb);function PO(t,e){const s=e*100/t;return s>13?Ig("regularWeekendWord"):s>7?Ig("sometimeWeekendWord"):s>2?Ig("neverWeekendWord"):null}function WO(t){const e=t.allCommitsByTimestamp[0],[s,n]=Ao(e.timestamp);return cb("firstCommit",s,{day:n})}function FO(t){const e=t.allCommitsByTimestamp[t.allCommitsByTimestamp.length-1],[s,n]=Ao(e.timestamp);return cb("lastCommit",s,{day:n})}function UO(){const t=A.statisticsByCommits;if(t.author.list.length<2)return[];const e=t.timestamp.totalInfo,s=e.workByDay[5]+e.workByDay[6],n=e.allCommitsByTimestamp.length;return[s?ub("weekendDays",{days:s}):null,PO(e.allCommitsByTimestamp.length,s),ub("allDays",{days:n}),WO(e),FO(e)].filter(r=>r)}const pb=qi(UO),Fo={team_month_filter:"team_month_filter",team_month_filter_checkbox:"team_month_filter_checkbox",team_month_filter_select:"team_month_filter_select"};function db(t,e){const s=t.map((n,r)=>({id:r+1,title:n}));return s.unshift({id:0,title:e}),s}const GO=U(({filters:t,onChange:e})=>{var _,h;const{text:s}=ie(),n=A.statisticsByCommits.author.list,r=A.statisticsByCommits.type.list,u=T.useMemo(()=>db(n,s("plugin.team_month.filters.authors")),[n]),c=T.useMemo(()=>db(r,s("plugin.team_month.filters.types")),[r]),p=(f,v)=>{e({...t,[f]:v})};return o.jsxs("div",{className:Fo.team_month_filter,children:[o.jsx(ms,{className:Fo.team_month_filter_select,value:((_=t==null?void 0:t.authors)==null?void 0:_[0])||u[0],options:u,onChange:f=>p("authors",[u[f]])}),o.jsx(ms,{className:Fo.team_month_filter_select,value:((h=t==null?void 0:t.types)==null?void 0:h[0])||c[0],options:c,onChange:f=>p("types",[c[f]])}),o.jsx(Pi,{title:"plugin.team_month.filters.release",className:Fo.team_month_filter_checkbox,value:t.release,onChange:()=>p("release",!t.release)}),o.jsx(Pi,{title:"plugin.team_month.filters.absence",className:Fo.team_month_filter_checkbox,value:t.absence,onChange:()=>p("absence",!t.absence)}),o.jsx(Pi,{title:"plugin.team_month.filters.firstLastDays",className:Fo.team_month_filter_checkbox,value:t.firstLastDays,onChange:()=>p("firstLastDays",!t.firstLastDays)})]})}),HO=U(({mode:t})=>{const e=A.statisticsByCommits.month,s=A.statisticsByCommits.author.totalInfo,n=pb(),r=rb(s,A.statisticsByCommits),u={release:!1,firstLastDays:!0},[c,p]=T.useState(u);return o.jsxs(o.Fragment,{children:[o.jsx(Y,{value:t!=="fullscreen",children:o.jsx(Hn,{mode:t,recommendations:n})}),o.jsx(G,{title:"plugin.team_month.title"}),o.jsx(Y,{value:t!=="print",children:o.jsx(Ln,{children:o.jsx(GO,{filters:c,onChange:p})})}),o.jsx(Ln,{template:"table",children:o.jsx(lb,{max:e.maxCommitsInDay,events:r,months:e.totalInfo,filters:c})})]})}),{getTitleArgDescription:gb}=Un(mb);function VO(t){const e=t.allCommitsByTimestamp[0],[s,n]=Ao(e.timestamp);return gb("firstCommit",s,{day:n})}function YO(t){const e=t.allCommitsByTimestamp[t.allCommitsByTimestamp.length-1],[s,n]=Ao(e.timestamp);return gb("lastCommit",s,{day:n})}function QO(){const t=A.statisticsByCommits;return t.author.list.reduce((e,s)=>{const n=t.timestamp.totalInfoByName[s],r=t.author.totalInfoByName.get(s);return n.workByDay[5]+n.workByDay[6],e[s]=[],r.daysLosses,e[s].push(VO(n)),e[s].push(YO(n)),e},{})}const KO=qi(QO),ZO=U(({mode:t,user:e})=>{const s=A.statisticsByCommits.month,n=KO()[e.author],r=A.statisticsByCommits.author.totalInfo,u=rb(r,A.statisticsByCommits),c={release:!1,firstLastDays:!0,absence:!0};return o.jsxs(o.Fragment,{children:[o.jsx(Hn,{mode:t,recommendations:n}),o.jsx(G,{title:"plugin.team_month.title"}),o.jsx(Ln,{template:"table",children:o.jsx(lb,{max:s.maxCommitsInDay,author:e==null?void 0:e.author,events:u,months:s.totalInfo,filters:c})})]})});let XO=(xl=class{constructor(){this.dependencies=["month","author","recommendations","type","release","absence"]}getMenuItems(){return[{id:"month",group:20,order:110,link:"/team/month",title:"plugin.team_month.sidebar",icon:"./assets/menu/month.svg"},{id:"month",group:20,order:60,link:"/person/month/",title:"plugin.team_month.sidebar",icon:"./assets/menu/month.svg"}]}getPage(e,s){if(e==="/person/month")return o.jsx(ZO,{user:s==null?void 0:s.user});if(e==="/team/month")return o.jsx(HO,{mode:s==null?void 0:s.mode})}getTranslations(){return bO}},xl.id="team_month",xl);const JO={ar:`
|
||
§ plugin.team_pull_requests.sidebar: دمج الكود
|
||
§ plugin.team_pull_requests.total.title: الإحصائيات العامة عبر جميع PRs
|
||
§ plugin.team_pull_requests.total.daysWorkOnTask: متوسط وقت العمل قبل إنشاء PR
|
||
§ plugin.team_pull_requests.total.daysInReview: متوسط وقت review للـ PR
|
||
§ plugin.team_pull_requests.total.description1: *وقت العمل* هو الوقت بين أول وآخر commit للمهمة. إذا كان للمهمة عدة PRs، فإن *وقت العمل* للتالي يُحتسب من تاريخ دمج الـ PR السابق.
|
||
§ plugin.team_pull_requests.total.description11: على سبيل المثال: إذا عملت على مهمة لمدة أسبوع وأنشأت ودمجت PR في نهاية كل يوم، فسيكون وقت العمل لكل من هذه الـ PRs يومًا واحدًا. أما «إجمالي وقت العمل على المهمة» (انظر قسم «قائمة المهام») فسيكون أسبوعًا.
|
||
§ plugin.team_pull_requests.total.description2: *وقت الـ review* هو الوقت بين آخر commit ودمج الكود. ويُظهر التوقف الفعلي أثناء الانتظار.
|
||
§ plugin.team_pull_requests.author.title: الإحصائيات بحسب الموظفين
|
||
§ plugin.team_pull_requests.author.author: الموظف
|
||
§ plugin.team_pull_requests.author.daysWorkOnTask: متوسط وقت العمل قبل الـ PR
|
||
§ plugin.team_pull_requests.author.daysInReview: متوسط وقت review للـ PR
|
||
§ plugin.team_pull_requests.author.middleTimeRelease: وقت التطوير إلى وقت الـ review
|
||
§ plugin.team_pull_requests.author.work: تطوير
|
||
§ plugin.team_pull_requests.author.review: review
|
||
§ plugin.team_pull_requests.yearChart.title: التقسيم حسب السنوات
|
||
§ plugin.team_pull_requests.authorChart.title: التقسيم حسب الموظفين
|
||
§ plugin.team_pull_requests.chart.suffix: pull requests
|
||
§ plugin.team_pull_requests.all.title: PRs المرتبطة بالمهام
|
||
§ plugin.team_pull_requests.all.task: المهمة
|
||
§ plugin.team_pull_requests.all.pr: PR
|
||
§ plugin.team_pull_requests.all.message: commit message أو branch
|
||
§ plugin.team_pull_requests.all.dateCreate: أُنشئ
|
||
§ plugin.team_pull_requests.all.dateMerge: دُمج
|
||
§ plugin.team_pull_requests.all.daysWorkOnTask: أيام في التطوير
|
||
§ plugin.team_pull_requests.all.daysInReview: أيام في الـ review
|
||
§ plugin.team_pull_requests.anonymous.title: PRs بدون معرّفات المهام
|
||
§ plugin.team_pull_requests.anonymous.date: تاريخ الدمج
|
||
§ plugin.team_pull_requests.anonymous.author: دُمج بواسطة
|
||
§ plugin.team_pull_requests.anonymous.message: commit message أو branch
|
||
§ plugin.team_pull_requests.chart.1day: يوم
|
||
§ plugin.team_pull_requests.chart.3day: ثلاثة أيام
|
||
§ plugin.team_pull_requests.chart.7day: أسبوع
|
||
§ plugin.team_pull_requests.chart.14day: أسبوعان
|
||
§ plugin.team_pull_requests.chart.30day: شهر
|
||
§ plugin.team_pull_requests.chart.more: أكثر من
|
||
`,de:`
|
||
§ plugin.team_pull_requests.sidebar: Code-Merge
|
||
§ plugin.team_pull_requests.total.title: Gesamtstatistik über alle PRs
|
||
§ plugin.team_pull_requests.total.daysWorkOnTask: Durchschnittliche Arbeitszeit vor dem Erstellen eines PR
|
||
§ plugin.team_pull_requests.total.daysInReview: Durchschnittliche PR-Review-Zeit
|
||
§ plugin.team_pull_requests.total.description1: *Arbeitszeit* ist die Zeit zwischen dem ersten und dem letzten commit einer Aufgabe. Wenn eine Aufgabe mehrere PRs hat, wird die *Arbeitszeit* für den nächsten ab dem Merge-Datum des vorherigen PR gezählt.
|
||
§ plugin.team_pull_requests.total.description11: Beispiel: Wenn Sie eine Woche lang an einer Aufgabe arbeiten und am Ende jedes Tages einen PR erstellen und mergen, beträgt die Arbeitszeit für jeden dieser PRs einen Tag. Die „gesamte Zeit, die für die Aufgabe aufgewendet wurde“ (siehe im Abschnitt „Aufgabenliste“) beträgt jedoch eine Woche.
|
||
§ plugin.team_pull_requests.total.description2: *Review-Zeit* ist die Zeit zwischen dem letzten commit und dem Code-Merge. Sie zeigt die tatsächliche Stillstandszeit beim Warten auf etwas.
|
||
§ plugin.team_pull_requests.author.title: Statistik nach Mitarbeitern
|
||
§ plugin.team_pull_requests.author.author: Mitarbeiter
|
||
§ plugin.team_pull_requests.author.daysWorkOnTask: Durchschnittliche Arbeitszeit vor dem PR
|
||
§ plugin.team_pull_requests.author.daysInReview: Durchschnittliche PR-Review-Zeit
|
||
§ plugin.team_pull_requests.author.middleTimeRelease: Entwicklungszeit zur Review-Zeit
|
||
§ plugin.team_pull_requests.author.work: Entwicklung
|
||
§ plugin.team_pull_requests.author.review: Review
|
||
§ plugin.team_pull_requests.yearChart.title: Aufschlüsselung nach Jahren
|
||
§ plugin.team_pull_requests.authorChart.title: Aufschlüsselung nach Mitarbeitern
|
||
§ plugin.team_pull_requests.chart.suffix: pull requests
|
||
§ plugin.team_pull_requests.all.title: PRs verknüpft mit Aufgaben
|
||
§ plugin.team_pull_requests.all.task: Aufgabe
|
||
§ plugin.team_pull_requests.all.pr: PR
|
||
§ plugin.team_pull_requests.all.message: commit message oder branch
|
||
§ plugin.team_pull_requests.all.dateCreate: Erstellt
|
||
§ plugin.team_pull_requests.all.dateMerge: Zusammengeführt
|
||
§ plugin.team_pull_requests.all.daysWorkOnTask: Tage in der Entwicklung
|
||
§ plugin.team_pull_requests.all.daysInReview: Tage im Review
|
||
§ plugin.team_pull_requests.anonymous.title: PRs ohne Aufgaben-IDs
|
||
§ plugin.team_pull_requests.anonymous.date: Merge-Datum
|
||
§ plugin.team_pull_requests.anonymous.author: Zusammengeführt von
|
||
§ plugin.team_pull_requests.anonymous.message: commit message oder branch
|
||
§ plugin.team_pull_requests.chart.1day: Tag
|
||
§ plugin.team_pull_requests.chart.3day: drei Tage
|
||
§ plugin.team_pull_requests.chart.7day: Woche
|
||
§ plugin.team_pull_requests.chart.14day: zwei Wochen
|
||
§ plugin.team_pull_requests.chart.30day: Monat
|
||
§ plugin.team_pull_requests.chart.more: mehr als
|
||
`,en:`
|
||
§ plugin.team_pull_requests.sidebar: Code merge
|
||
§ plugin.team_pull_requests.total.title: Overall statistics across all PRs
|
||
§ plugin.team_pull_requests.total.daysWorkOnTask: Average time spent working before creating a PR
|
||
§ plugin.team_pull_requests.total.daysInReview: Average PR review time
|
||
§ plugin.team_pull_requests.total.description1: *Work time* is the time between the first and the last commit for a task. If a task has multiple PRs, then the *work time* for the next one is counted from the merge date of the previous PR.
|
||
§ plugin.team_pull_requests.total.description11: For example: if you work on a task for a week and at the end of each day create and merge a PR, then the work time for each of these PRs will be one day. But the "total time spent working on the task" (see in the "Task list" section) will be a week.
|
||
§ plugin.team_pull_requests.total.description2: *Review time* is the time between the last commit and the code merge. It shows actual downtime while waiting for something.
|
||
§ plugin.team_pull_requests.author.title: Statistics by staff members
|
||
§ plugin.team_pull_requests.author.author: Staff member
|
||
§ plugin.team_pull_requests.author.daysWorkOnTask: Average time spent working before PR
|
||
§ plugin.team_pull_requests.author.daysInReview: Average PR review time
|
||
§ plugin.team_pull_requests.author.middleTimeRelease: Development time to review time
|
||
§ plugin.team_pull_requests.author.work: work
|
||
§ plugin.team_pull_requests.author.review: review
|
||
§ plugin.team_pull_requests.yearChart.title: Breakdown by years
|
||
§ plugin.team_pull_requests.authorChart.title: Breakdown by staff members
|
||
§ plugin.team_pull_requests.chart.suffix: pull requests
|
||
§ plugin.team_pull_requests.all.title: PRs linked to tasks
|
||
§ plugin.team_pull_requests.all.task: Task
|
||
§ plugin.team_pull_requests.all.pr: PR
|
||
§ plugin.team_pull_requests.all.message: Commit message or branch
|
||
§ plugin.team_pull_requests.all.dateCreate: Created
|
||
§ plugin.team_pull_requests.all.dateMerge: Merged
|
||
§ plugin.team_pull_requests.all.daysWorkOnTask: Days in development
|
||
§ plugin.team_pull_requests.all.daysInReview: Days in review
|
||
§ plugin.team_pull_requests.anonymous.title: PRs without task IDs
|
||
§ plugin.team_pull_requests.anonymous.date: Merge date
|
||
§ plugin.team_pull_requests.anonymous.author: Merged by
|
||
§ plugin.team_pull_requests.anonymous.message: Commit message or branch
|
||
§ plugin.team_pull_requests.chart.1day: day
|
||
§ plugin.team_pull_requests.chart.3day: three days
|
||
§ plugin.team_pull_requests.chart.7day: week
|
||
§ plugin.team_pull_requests.chart.14day: two weeks
|
||
§ plugin.team_pull_requests.chart.30day: month
|
||
§ plugin.team_pull_requests.chart.more: more than
|
||
`,es:`
|
||
§ plugin.team_pull_requests.sidebar: Fusión de código
|
||
§ plugin.team_pull_requests.total.title: Estadísticas generales de todos los PRs
|
||
§ plugin.team_pull_requests.total.daysWorkOnTask: Tiempo medio de trabajo antes de crear un PR
|
||
§ plugin.team_pull_requests.total.daysInReview: Tiempo medio de revisión de PR
|
||
§ plugin.team_pull_requests.total.description1: *Tiempo de trabajo* es el tiempo entre el primer y el último commit de una tarea. Si una tarea tiene varios PRs, el *tiempo de trabajo* del siguiente se cuenta desde la fecha de fusión del PR anterior.
|
||
§ plugin.team_pull_requests.total.description11: Por ejemplo: si se trabaja en una tarea durante una semana y al final de cada día se crea y fusiona un PR, el tiempo de trabajo de cada uno de estos PRs será de un día. Pero el «tiempo total de trabajo en la tarea» (véase la sección «Lista de tareas») será de una semana.
|
||
§ plugin.team_pull_requests.total.description2: *Tiempo de revisión* es el tiempo entre el último commit y la fusión del código. Muestra el tiempo de inactividad real mientras se espera algo.
|
||
§ plugin.team_pull_requests.author.title: Estadísticas por empleados
|
||
§ plugin.team_pull_requests.author.author: Empleado
|
||
§ plugin.team_pull_requests.author.daysWorkOnTask: Tiempo medio de trabajo antes del PR
|
||
§ plugin.team_pull_requests.author.daysInReview: Tiempo medio de revisión de PR
|
||
§ plugin.team_pull_requests.author.middleTimeRelease: Tiempo de desarrollo respecto al tiempo de revisión
|
||
§ plugin.team_pull_requests.author.work: desarrollo
|
||
§ plugin.team_pull_requests.author.review: revisión
|
||
§ plugin.team_pull_requests.yearChart.title: Desglose por años
|
||
§ plugin.team_pull_requests.authorChart.title: Desglose por empleados
|
||
§ plugin.team_pull_requests.chart.suffix: pull requests
|
||
§ plugin.team_pull_requests.all.title: PRs vinculados a tareas
|
||
§ plugin.team_pull_requests.all.task: Tarea
|
||
§ plugin.team_pull_requests.all.pr: PR
|
||
§ plugin.team_pull_requests.all.message: commit message o branch
|
||
§ plugin.team_pull_requests.all.dateCreate: Creado
|
||
§ plugin.team_pull_requests.all.dateMerge: Fusionado
|
||
§ plugin.team_pull_requests.all.daysWorkOnTask: Días en desarrollo
|
||
§ plugin.team_pull_requests.all.daysInReview: Días en revisión
|
||
§ plugin.team_pull_requests.anonymous.title: PRs sin IDs de tarea
|
||
§ plugin.team_pull_requests.anonymous.date: Fecha de fusión
|
||
§ plugin.team_pull_requests.anonymous.author: Fusionado por
|
||
§ plugin.team_pull_requests.anonymous.message: commit message o branch
|
||
§ plugin.team_pull_requests.chart.1day: día
|
||
§ plugin.team_pull_requests.chart.3day: tres días
|
||
§ plugin.team_pull_requests.chart.7day: semana
|
||
§ plugin.team_pull_requests.chart.14day: dos semanas
|
||
§ plugin.team_pull_requests.chart.30day: mes
|
||
§ plugin.team_pull_requests.chart.more: más de
|
||
`,fr:`
|
||
§ plugin.team_pull_requests.sidebar: Fusion de code
|
||
§ plugin.team_pull_requests.total.title: Statistiques générales sur toutes les PR
|
||
§ plugin.team_pull_requests.total.daysWorkOnTask: Temps moyen de travail avant la création d'une PR
|
||
§ plugin.team_pull_requests.total.daysInReview: Temps moyen de review des PR
|
||
§ plugin.team_pull_requests.total.description1: Le *temps de travail* est le délai entre le premier et le dernier commit d'une tâche. Si une tâche a plusieurs PR, le *temps de travail* de la suivante est compté à partir de la date de fusion de la PR précédente.
|
||
§ plugin.team_pull_requests.total.description11: Par exemple : si l'on travaille sur une tâche pendant une semaine et que l'on crée et fusionne une PR à la fin de chaque journée, le temps de travail de chacune de ces PR sera d'un jour. Mais le « temps total passé à travailler sur la tâche » (voir la section « Liste des tâches ») sera d'une semaine.
|
||
§ plugin.team_pull_requests.total.description2: Le *temps de review* est le délai entre le dernier commit et la fusion du code. Il indique le temps d'arrêt réel pendant l'attente.
|
||
§ plugin.team_pull_requests.author.title: Statistiques par salariés
|
||
§ plugin.team_pull_requests.author.author: Salarié
|
||
§ plugin.team_pull_requests.author.daysWorkOnTask: Temps moyen de travail avant la PR
|
||
§ plugin.team_pull_requests.author.daysInReview: Temps moyen de review des PR
|
||
§ plugin.team_pull_requests.author.middleTimeRelease: Temps de développement par rapport au temps de review
|
||
§ plugin.team_pull_requests.author.work: développement
|
||
§ plugin.team_pull_requests.author.review: review
|
||
§ plugin.team_pull_requests.yearChart.title: Répartition par années
|
||
§ plugin.team_pull_requests.authorChart.title: Répartition par salariés
|
||
§ plugin.team_pull_requests.chart.suffix: pull requests
|
||
§ plugin.team_pull_requests.all.title: PR liées aux tâches
|
||
§ plugin.team_pull_requests.all.task: Tâche
|
||
§ plugin.team_pull_requests.all.pr: PR
|
||
§ plugin.team_pull_requests.all.message: commit message ou branch
|
||
§ plugin.team_pull_requests.all.dateCreate: Créé
|
||
§ plugin.team_pull_requests.all.dateMerge: Fusionné
|
||
§ plugin.team_pull_requests.all.daysWorkOnTask: Jours en développement
|
||
§ plugin.team_pull_requests.all.daysInReview: Jours en review
|
||
§ plugin.team_pull_requests.anonymous.title: PR sans identifiants de tâche
|
||
§ plugin.team_pull_requests.anonymous.date: Date de fusion
|
||
§ plugin.team_pull_requests.anonymous.author: Fusionné par
|
||
§ plugin.team_pull_requests.anonymous.message: commit message ou branch
|
||
§ plugin.team_pull_requests.chart.1day: jour
|
||
§ plugin.team_pull_requests.chart.3day: trois jours
|
||
§ plugin.team_pull_requests.chart.7day: semaine
|
||
§ plugin.team_pull_requests.chart.14day: deux semaines
|
||
§ plugin.team_pull_requests.chart.30day: mois
|
||
§ plugin.team_pull_requests.chart.more: plus de
|
||
`,he:`
|
||
§ plugin.team_pull_requests.sidebar: מיזוג קוד
|
||
§ plugin.team_pull_requests.total.title: סטטיסטיקה כללית על כל ה-PRs
|
||
§ plugin.team_pull_requests.total.daysWorkOnTask: זמן עבודה ממוצע לפני יצירת PR
|
||
§ plugin.team_pull_requests.total.daysInReview: זמן review ממוצע של PR
|
||
§ plugin.team_pull_requests.total.description1: *זמן עבודה* הוא הזמן בין ה-commit הראשון ל-commit האחרון של משימה. אם למשימה יש מספר PRs, *זמן העבודה* של הבא מחושב מתאריך המיזוג של ה-PR הקודם.
|
||
§ plugin.team_pull_requests.total.description11: לדוגמה: אם עובדים על משימה במשך שבוע ובסוף כל יום יוצרים וממזגים PR, זמן העבודה של כל אחד מה-PRs האלה יהיה יום אחד. אך «זמן העבודה הכולל על המשימה» (ראו בסעיף «רשימת משימות») יהיה שבוע.
|
||
§ plugin.team_pull_requests.total.description2: *זמן review* הוא הזמן בין ה-commit האחרון למיזוג הקוד. הוא מציג את זמן ההשבתה בפועל בזמן המתנה.
|
||
§ plugin.team_pull_requests.author.title: סטטיסטיקה לפי עובדים
|
||
§ plugin.team_pull_requests.author.author: עובד
|
||
§ plugin.team_pull_requests.author.daysWorkOnTask: זמן עבודה ממוצע לפני PR
|
||
§ plugin.team_pull_requests.author.daysInReview: זמן review ממוצע של PR
|
||
§ plugin.team_pull_requests.author.middleTimeRelease: זמן פיתוח מול זמן review
|
||
§ plugin.team_pull_requests.author.work: פיתוח
|
||
§ plugin.team_pull_requests.author.review: review
|
||
§ plugin.team_pull_requests.yearChart.title: פירוט לפי שנים
|
||
§ plugin.team_pull_requests.authorChart.title: פירוט לפי עובדים
|
||
§ plugin.team_pull_requests.chart.suffix: pull requests
|
||
§ plugin.team_pull_requests.all.title: PRs המקושרים למשימות
|
||
§ plugin.team_pull_requests.all.task: משימה
|
||
§ plugin.team_pull_requests.all.pr: PR
|
||
§ plugin.team_pull_requests.all.message: commit message או branch
|
||
§ plugin.team_pull_requests.all.dateCreate: נוצר
|
||
§ plugin.team_pull_requests.all.dateMerge: מוזג
|
||
§ plugin.team_pull_requests.all.daysWorkOnTask: ימים בפיתוח
|
||
§ plugin.team_pull_requests.all.daysInReview: ימים ב-review
|
||
§ plugin.team_pull_requests.anonymous.title: PRs ללא מזהי משימות
|
||
§ plugin.team_pull_requests.anonymous.date: תאריך מיזוג
|
||
§ plugin.team_pull_requests.anonymous.author: מוזג על ידי
|
||
§ plugin.team_pull_requests.anonymous.message: commit message או branch
|
||
§ plugin.team_pull_requests.chart.1day: יום
|
||
§ plugin.team_pull_requests.chart.3day: שלושה ימים
|
||
§ plugin.team_pull_requests.chart.7day: שבוע
|
||
§ plugin.team_pull_requests.chart.14day: שבועיים
|
||
§ plugin.team_pull_requests.chart.30day: חודש
|
||
§ plugin.team_pull_requests.chart.more: יותר מ-
|
||
`,hi:`
|
||
§ plugin.team_pull_requests.sidebar: कोड मर्ज
|
||
§ plugin.team_pull_requests.total.title: सभी PRs की समग्र सांख्यिकी
|
||
§ plugin.team_pull_requests.total.daysWorkOnTask: PR बनाने से पहले कार्य का औसत समय
|
||
§ plugin.team_pull_requests.total.daysInReview: औसत PR review समय
|
||
§ plugin.team_pull_requests.total.description1: *कार्य समय* किसी कार्य के पहले और अंतिम commit के बीच का समय है। यदि किसी कार्य में कई PRs हैं, तो अगले का *कार्य समय* पिछले PR की मर्ज तिथि से गिना जाता है।
|
||
§ plugin.team_pull_requests.total.description11: उदाहरण: यदि आप एक सप्ताह तक किसी कार्य पर काम करते हैं और प्रत्येक दिन के अंत में PR बनाकर मर्ज करते हैं, तो इनमें से प्रत्येक PR का कार्य समय एक दिन होगा। लेकिन «कार्य पर बिताया गया कुल समय» (देखें «कार्य सूची» अनुभाग) एक सप्ताह होगा।
|
||
§ plugin.team_pull_requests.total.description2: *Review समय* अंतिम commit और कोड मर्ज के बीच का समय है। यह प्रतीक्षा के दौरान वास्तविक डाउनटाइम दर्शाता है।
|
||
§ plugin.team_pull_requests.author.title: कर्मचारियों के अनुसार सांख्यिकी
|
||
§ plugin.team_pull_requests.author.author: कर्मचारी
|
||
§ plugin.team_pull_requests.author.daysWorkOnTask: PR से पहले कार्य का औसत समय
|
||
§ plugin.team_pull_requests.author.daysInReview: औसत PR review समय
|
||
§ plugin.team_pull_requests.author.middleTimeRelease: विकास समय से review समय
|
||
§ plugin.team_pull_requests.author.work: विकास
|
||
§ plugin.team_pull_requests.author.review: review
|
||
§ plugin.team_pull_requests.yearChart.title: वर्षों के अनुसार विवरण
|
||
§ plugin.team_pull_requests.authorChart.title: कर्मचारियों के अनुसार विवरण
|
||
§ plugin.team_pull_requests.chart.suffix: pull requests
|
||
§ plugin.team_pull_requests.all.title: कार्यों से जुड़े PRs
|
||
§ plugin.team_pull_requests.all.task: कार्य
|
||
§ plugin.team_pull_requests.all.pr: PR
|
||
§ plugin.team_pull_requests.all.message: commit message या branch
|
||
§ plugin.team_pull_requests.all.dateCreate: बनाया गया
|
||
§ plugin.team_pull_requests.all.dateMerge: मर्ज किया गया
|
||
§ plugin.team_pull_requests.all.daysWorkOnTask: विकास में दिन
|
||
§ plugin.team_pull_requests.all.daysInReview: review में दिन
|
||
§ plugin.team_pull_requests.anonymous.title: बिना कार्य ID वाले PRs
|
||
§ plugin.team_pull_requests.anonymous.date: मर्ज तिथि
|
||
§ plugin.team_pull_requests.anonymous.author: मर्ज करने वाला
|
||
§ plugin.team_pull_requests.anonymous.message: commit message या branch
|
||
§ plugin.team_pull_requests.chart.1day: दिन
|
||
§ plugin.team_pull_requests.chart.3day: तीन दिन
|
||
§ plugin.team_pull_requests.chart.7day: सप्ताह
|
||
§ plugin.team_pull_requests.chart.14day: दो सप्ताह
|
||
§ plugin.team_pull_requests.chart.30day: महीना
|
||
§ plugin.team_pull_requests.chart.more: से अधिक
|
||
`,ja:`
|
||
§ plugin.team_pull_requests.sidebar: コードマージ
|
||
§ plugin.team_pull_requests.total.title: すべての PR の全体統計
|
||
§ plugin.team_pull_requests.total.daysWorkOnTask: PR 作成前の平均作業時間
|
||
§ plugin.team_pull_requests.total.daysInReview: PR の平均レビュー時間
|
||
§ plugin.team_pull_requests.total.description1: *作業時間* は、タスクに対する最初と最後の commit の間の時間です。タスクに複数の PR がある場合、次の *作業時間* は前の PR のマージ日から起算します。
|
||
§ plugin.team_pull_requests.total.description11: たとえば、1週間タスクに取り組み、毎日の終わりに PR を作成してマージすると、これらの各 PR の作業時間は1日になります。しかし「タスクに費やした合計作業時間」(「タスクリスト」セクションを参照)は1週間になります。
|
||
§ plugin.team_pull_requests.total.description2: *レビュー時間* は、最後の commit とコードマージの間の時間です。何かを待っている間の実際の停止時間を示します。
|
||
§ plugin.team_pull_requests.author.title: スタッフ別の統計
|
||
§ plugin.team_pull_requests.author.author: スタッフ
|
||
§ plugin.team_pull_requests.author.daysWorkOnTask: PR 前の平均作業時間
|
||
§ plugin.team_pull_requests.author.daysInReview: PR の平均レビュー時間
|
||
§ plugin.team_pull_requests.author.middleTimeRelease: 開発時間対レビュー時間
|
||
§ plugin.team_pull_requests.author.work: 開発
|
||
§ plugin.team_pull_requests.author.review: レビュー
|
||
§ plugin.team_pull_requests.yearChart.title: 年ごとの内訳
|
||
§ plugin.team_pull_requests.authorChart.title: スタッフごとの内訳
|
||
§ plugin.team_pull_requests.chart.suffix: pull requests
|
||
§ plugin.team_pull_requests.all.title: タスクに関連付けられた PR
|
||
§ plugin.team_pull_requests.all.task: タスク
|
||
§ plugin.team_pull_requests.all.pr: PR
|
||
§ plugin.team_pull_requests.all.message: commit message または branch
|
||
§ plugin.team_pull_requests.all.dateCreate: 作成日
|
||
§ plugin.team_pull_requests.all.dateMerge: マージ日
|
||
§ plugin.team_pull_requests.all.daysWorkOnTask: 開発日数
|
||
§ plugin.team_pull_requests.all.daysInReview: レビュー日数
|
||
§ plugin.team_pull_requests.anonymous.title: タスク ID のない PR
|
||
§ plugin.team_pull_requests.anonymous.date: マージ日
|
||
§ plugin.team_pull_requests.anonymous.author: マージした人
|
||
§ plugin.team_pull_requests.anonymous.message: commit message または branch
|
||
§ plugin.team_pull_requests.chart.1day: 日
|
||
§ plugin.team_pull_requests.chart.3day: 三日
|
||
§ plugin.team_pull_requests.chart.7day: 一週間
|
||
§ plugin.team_pull_requests.chart.14day: 二週間
|
||
§ plugin.team_pull_requests.chart.30day: 一ヶ月
|
||
§ plugin.team_pull_requests.chart.more: 以上
|
||
`,ko:`
|
||
§ plugin.team_pull_requests.sidebar: 코드 병합
|
||
§ plugin.team_pull_requests.total.title: 모든 PR에 대한 전체 통계
|
||
§ plugin.team_pull_requests.total.daysWorkOnTask: PR 생성 전 평균 작업 시간
|
||
§ plugin.team_pull_requests.total.daysInReview: 평균 PR 리뷰 시간
|
||
§ plugin.team_pull_requests.total.description1: *작업 시간*은 작업에 대한 첫 번째 commit과 마지막 commit 사이의 시간입니다. 작업에 여러 PR이 있는 경우 다음 PR의 *작업 시간*은 이전 PR의 병합일부터 계산됩니다.
|
||
§ plugin.team_pull_requests.total.description11: 예를 들어 일주일 동안 작업을 진행하고 매일 끝에 PR을 생성하고 병합하면 각 PR의 작업 시간은 하루가 됩니다. 그러나 «해당 작업에 소요된 총 시간»(«작업 목록» 섹션 참조)은 일주일이 됩니다.
|
||
§ plugin.team_pull_requests.total.description2: *리뷰 시간*은 마지막 commit과 코드 병합 사이의 시간입니다. 무언가를 기다리는 동안의 실제 대기 시간을 보여줍니다.
|
||
§ plugin.team_pull_requests.author.title: 직원별 통계
|
||
§ plugin.team_pull_requests.author.author: 직원
|
||
§ plugin.team_pull_requests.author.daysWorkOnTask: PR 전 평균 작업 시간
|
||
§ plugin.team_pull_requests.author.daysInReview: 평균 PR 리뷰 시간
|
||
§ plugin.team_pull_requests.author.middleTimeRelease: 개발 시간 대 리뷰 시간
|
||
§ plugin.team_pull_requests.author.work: 개발
|
||
§ plugin.team_pull_requests.author.review: 리뷰
|
||
§ plugin.team_pull_requests.yearChart.title: 연도별 내역
|
||
§ plugin.team_pull_requests.authorChart.title: 직원별 내역
|
||
§ plugin.team_pull_requests.chart.suffix: pull requests
|
||
§ plugin.team_pull_requests.all.title: 작업에 연결된 PR
|
||
§ plugin.team_pull_requests.all.task: 작업
|
||
§ plugin.team_pull_requests.all.pr: PR
|
||
§ plugin.team_pull_requests.all.message: commit message 또는 branch
|
||
§ plugin.team_pull_requests.all.dateCreate: 생성됨
|
||
§ plugin.team_pull_requests.all.dateMerge: 병합됨
|
||
§ plugin.team_pull_requests.all.daysWorkOnTask: 개발 일수
|
||
§ plugin.team_pull_requests.all.daysInReview: 리뷰 일수
|
||
§ plugin.team_pull_requests.anonymous.title: 작업 ID가 없는 PR
|
||
§ plugin.team_pull_requests.anonymous.date: 병합 날짜
|
||
§ plugin.team_pull_requests.anonymous.author: 병합한 사람
|
||
§ plugin.team_pull_requests.anonymous.message: commit message 또는 branch
|
||
§ plugin.team_pull_requests.chart.1day: 일
|
||
§ plugin.team_pull_requests.chart.3day: 삼일
|
||
§ plugin.team_pull_requests.chart.7day: 일주일
|
||
§ plugin.team_pull_requests.chart.14day: 이주
|
||
§ plugin.team_pull_requests.chart.30day: 한 달
|
||
§ plugin.team_pull_requests.chart.more: 이상
|
||
`,pt:`
|
||
§ plugin.team_pull_requests.sidebar: Fusão de código
|
||
§ plugin.team_pull_requests.total.title: Estatísticas gerais de todos os PRs
|
||
§ plugin.team_pull_requests.total.daysWorkOnTask: Tempo médio de trabalho antes de criar um PR
|
||
§ plugin.team_pull_requests.total.daysInReview: Tempo médio de review do PR
|
||
§ plugin.team_pull_requests.total.description1: *Tempo de trabalho* é o tempo entre o primeiro e o último commit de uma tarefa. Se uma tarefa tiver vários PRs, o *tempo de trabalho* do seguinte é contado a partir da data de merge do PR anterior.
|
||
§ plugin.team_pull_requests.total.description11: Por exemplo: se você trabalha em uma tarefa durante uma semana e no final de cada dia cria e faz o merge de um PR, o tempo de trabalho de cada um desses PRs será de um dia. Mas o «tempo total gasto trabalhando na tarefa» (veja a seção «Lista de tarefas») será de uma semana.
|
||
§ plugin.team_pull_requests.total.description2: *Tempo de review* é o tempo entre o último commit e a fusão do código. Mostra o tempo ocioso real enquanto se espera por algo.
|
||
§ plugin.team_pull_requests.author.title: Estatísticas por funcionários
|
||
§ plugin.team_pull_requests.author.author: Funcionário
|
||
§ plugin.team_pull_requests.author.daysWorkOnTask: Tempo médio de trabalho antes do PR
|
||
§ plugin.team_pull_requests.author.daysInReview: Tempo médio de review do PR
|
||
§ plugin.team_pull_requests.author.middleTimeRelease: Tempo de desenvolvimento em relação ao tempo de review
|
||
§ plugin.team_pull_requests.author.work: desenvolvimento
|
||
§ plugin.team_pull_requests.author.review: review
|
||
§ plugin.team_pull_requests.yearChart.title: Detalhamento por anos
|
||
§ plugin.team_pull_requests.authorChart.title: Detalhamento por funcionários
|
||
§ plugin.team_pull_requests.chart.suffix: pull requests
|
||
§ plugin.team_pull_requests.all.title: PRs vinculados a tarefas
|
||
§ plugin.team_pull_requests.all.task: Tarefa
|
||
§ plugin.team_pull_requests.all.pr: PR
|
||
§ plugin.team_pull_requests.all.message: commit message ou branch
|
||
§ plugin.team_pull_requests.all.dateCreate: Criado
|
||
§ plugin.team_pull_requests.all.dateMerge: Mesclado
|
||
§ plugin.team_pull_requests.all.daysWorkOnTask: Dias em desenvolvimento
|
||
§ plugin.team_pull_requests.all.daysInReview: Dias em review
|
||
§ plugin.team_pull_requests.anonymous.title: PRs sem IDs de tarefa
|
||
§ plugin.team_pull_requests.anonymous.date: Data de merge
|
||
§ plugin.team_pull_requests.anonymous.author: Mesclado por
|
||
§ plugin.team_pull_requests.anonymous.message: commit message ou branch
|
||
§ plugin.team_pull_requests.chart.1day: dia
|
||
§ plugin.team_pull_requests.chart.3day: três dias
|
||
§ plugin.team_pull_requests.chart.7day: semana
|
||
§ plugin.team_pull_requests.chart.14day: duas semanas
|
||
§ plugin.team_pull_requests.chart.30day: mês
|
||
§ plugin.team_pull_requests.chart.more: mais de
|
||
`,ru:`
|
||
§ plugin.team_pull_requests.sidebar: Влитие кода
|
||
§ plugin.team_pull_requests.total.title: Общая статистика по всем PR
|
||
§ plugin.team_pull_requests.total.daysWorkOnTask: Среднее время работы до создания PR
|
||
§ plugin.team_pull_requests.total.daysInReview: Среднее время ревью PR
|
||
§ plugin.team_pull_requests.total.description1: *Время работы* это время между первым и последним коммитом по задаче. Если по задаче было несколько PR, то *время работы* для следующего считается от даты влития предыдущего PR.
|
||
§ plugin.team_pull_requests.total.description11: Например: если работать над задачей неделю и в конце каждого дня создавать и вливать PR, то время работы для каждого из этих PR будет один день. Но "общее время работы над задачей" (см. в разделе "Список задач") будет неделя.
|
||
§ plugin.team_pull_requests.total.description2: *Время ревью* это время между последним коммитом и влитием кода. Оно показывает фактический простой в ожидании чего-либо.
|
||
§ plugin.team_pull_requests.author.title: Статистика по сотрудникам
|
||
§ plugin.team_pull_requests.author.author: Сотрудник
|
||
§ plugin.team_pull_requests.author.daysWorkOnTask: Среднее время работы до PR
|
||
§ plugin.team_pull_requests.author.daysInReview: Среднее время ревью PR
|
||
§ plugin.team_pull_requests.author.middleTimeRelease: Временя разработки к времени ревью
|
||
§ plugin.team_pull_requests.author.work: разработка
|
||
§ plugin.team_pull_requests.author.review: ревью
|
||
§ plugin.team_pull_requests.yearChart.title: Разбивка по годам
|
||
§ plugin.team_pull_requests.authorChart.title: Разбивка по сотрудникам
|
||
§ plugin.team_pull_requests.chart.suffix: pull requests
|
||
§ plugin.team_pull_requests.all.title: PR связанные с задачами
|
||
§ plugin.team_pull_requests.all.task: Задача
|
||
§ plugin.team_pull_requests.all.pr: PR
|
||
§ plugin.team_pull_requests.all.message: Подпись коммита или ветка
|
||
§ plugin.team_pull_requests.all.dateCreate: Создан
|
||
§ plugin.team_pull_requests.all.dateMerge: Влит
|
||
§ plugin.team_pull_requests.all.daysWorkOnTask: Дней в разработке
|
||
§ plugin.team_pull_requests.all.daysInReview: Дней на ревью
|
||
§ plugin.team_pull_requests.anonymous.title: PR без номеров задач
|
||
§ plugin.team_pull_requests.anonymous.date: Дата влития
|
||
§ plugin.team_pull_requests.anonymous.author: Кто влил
|
||
§ plugin.team_pull_requests.anonymous.message: Подпись коммита или ветка
|
||
§ plugin.team_pull_requests.chart.1day: день
|
||
§ plugin.team_pull_requests.chart.3day: три дня
|
||
§ plugin.team_pull_requests.chart.7day: неделя
|
||
§ plugin.team_pull_requests.chart.14day: две недели
|
||
§ plugin.team_pull_requests.chart.30day: месяц
|
||
§ plugin.team_pull_requests.chart.more: более
|
||
`,zh:`
|
||
§ plugin.team_pull_requests.sidebar: 代码合并
|
||
§ plugin.team_pull_requests.total.title: 所有 PR 的总体统计
|
||
§ plugin.team_pull_requests.total.daysWorkOnTask: 创建 PR 前的平均工作时间
|
||
§ plugin.team_pull_requests.total.daysInReview: 平均 PR review 时间
|
||
§ plugin.team_pull_requests.total.description1: *工作时间* 是任务的第一个 commit 到最后一个 commit 之间的时间。如果一个任务有多个 PR,则下一个的 *工作时间* 从上一个 PR 的合并日期起算。
|
||
§ plugin.team_pull_requests.total.description11: 例如:如果您为一项任务工作一周,并在每天结束时创建并合并一个 PR,那么这些 PR 中每一个的工作时间将是一天。但「该任务的总工作时间」(参见「任务列表」部分)将是一周。
|
||
§ plugin.team_pull_requests.total.description2: *Review 时间* 是最后一个 commit 到代码合并之间的时间。它显示等待时的实际停顿时间。
|
||
§ plugin.team_pull_requests.author.title: 按员工的统计
|
||
§ plugin.team_pull_requests.author.author: 员工
|
||
§ plugin.team_pull_requests.author.daysWorkOnTask: PR 前的平均工作时间
|
||
§ plugin.team_pull_requests.author.daysInReview: 平均 PR review 时间
|
||
§ plugin.team_pull_requests.author.middleTimeRelease: 开发时间与 review 时间
|
||
§ plugin.team_pull_requests.author.work: 开发
|
||
§ plugin.team_pull_requests.author.review: review
|
||
§ plugin.team_pull_requests.yearChart.title: 按年份细分
|
||
§ plugin.team_pull_requests.authorChart.title: 按员工细分
|
||
§ plugin.team_pull_requests.chart.suffix: pull requests
|
||
§ plugin.team_pull_requests.all.title: 与任务关联的 PR
|
||
§ plugin.team_pull_requests.all.task: 任务
|
||
§ plugin.team_pull_requests.all.pr: PR
|
||
§ plugin.team_pull_requests.all.message: commit message 或 branch
|
||
§ plugin.team_pull_requests.all.dateCreate: 已创建
|
||
§ plugin.team_pull_requests.all.dateMerge: 已合并
|
||
§ plugin.team_pull_requests.all.daysWorkOnTask: 开发天数
|
||
§ plugin.team_pull_requests.all.daysInReview: review 天数
|
||
§ plugin.team_pull_requests.anonymous.title: 没有任务 ID 的 PR
|
||
§ plugin.team_pull_requests.anonymous.date: 合并日期
|
||
§ plugin.team_pull_requests.anonymous.author: 合并者
|
||
§ plugin.team_pull_requests.anonymous.message: commit message 或 branch
|
||
§ plugin.team_pull_requests.chart.1day: 天
|
||
§ plugin.team_pull_requests.chart.3day: 三天
|
||
§ plugin.team_pull_requests.chart.7day: 一周
|
||
§ plugin.team_pull_requests.chart.14day: 两周
|
||
§ plugin.team_pull_requests.chart.30day: 一个月
|
||
§ plugin.team_pull_requests.chart.more: 超过
|
||
`},[_b,hb]=Ui("years");function e$({prWithTask:t}){const e=_b(t,"daysInReview"),s=_b(t,"daysWorkOnTask");return o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(Ne,{title:"plugin.team_pull_requests.total.daysWorkOnTask",details:s.details,order:hb,limit:3,suffix:"common.statistic.days"}),o.jsx(ot,{translationId:"plugin.team_pull_requests.total.description1"}),o.jsx(ot,{translationId:"plugin.team_pull_requests.total.description11"}),o.jsx(nt,{height:"xl"})]}),o.jsxs(Q,{children:[o.jsx(Ne,{title:"plugin.team_pull_requests.total.daysInReview",details:e.details,order:hb,limit:3,suffix:"common.statistic.days"}),o.jsx(ot,{translationId:"plugin.team_pull_requests.total.description2"})]})]})}function t$({response:t,updateSort:e,rowsForExcel:s,mode:n,order:r}){if(!t)return null;const[u]=Mt(t,["daysTotalValue"]);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,fullScreenMode:"author",children:[o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_pull_requests.author.author",properties:"author",width:250}),o.jsx(w,{title:"plugin.team_pull_requests.author.daysWorkOnTask",properties:"daysWorkOnTask",template:c=>o.jsx(ue,{details:c,order:r,suffix:"plugin.team_pull_requests.chart.suffix",limit:3})}),o.jsx(w,{title:"plugin.team_pull_requests.author.daysInReview",properties:"daysInReview",template:c=>o.jsx(ue,{details:c,order:r,suffix:"plugin.team_pull_requests.chart.suffix",limit:3})}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"daysTotalValue",formatter:Kt,width:40}),o.jsx(w,{isSortable:!0,properties:"daysTotalValue",title:"plugin.team_pull_requests.author.middleTimeRelease",width:300,template:(c,p)=>o.jsx(ue,{value:c,order:["plugin.team_pull_requests.author.work","plugin.team_pull_requests.author.review"],suffix:"common.statistic.days",max:u,details:p.daysTotalDetails})})]})}function a$(t){const s=A.statisticsByCommits.author.totalInfo.filter(r=>!r.isStaff).map(r=>[r.author,[]]),n=new Map(s);return t.forEach(r=>{const u=n.get(r.author);u&&u.push(r)}),Array.from(n.values()).filter(r=>r.length>0)}const[fb,s$]=Ui("years"),i$=U(({allPR:t,mode:e})=>{const s=T.useMemo(()=>a$(t).map(n=>{const r=fb(n,"daysInReview"),u=fb(n,"daysWorkOnTask"),c=r.weightedAverage+u.weightedAverage;return{author:n[0].author,daysInReview:r.details,daysWorkOnTask:u.details,daysTotalValue:c,daysTotalDetails:{"plugin.team_pull_requests.author.work":Kt(u.weightedAverage),"plugin.team_pull_requests.author.review":Kt(r.weightedAverage)}}}),[t]);return o.jsxs(o.Fragment,{children:[o.jsx(G,{title:"plugin.team_pull_requests.author.title"}),o.jsxs(be,{content:s,watch:`${e}${A.hash}`,children:[o.jsx(t$,{mode:e,order:s$,rowsForExcel:s}),o.jsx(fe,{})]})]})});function n$({response:t,updateSort:e,rowsForExcel:s,mode:n}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:n,type:n==="print"?"cards":void 0,columnCount:n==="print"?2:void 0,fullScreenMode:"anonymous",children:[o.jsx(w,{isSortable:!0,properties:"prExternalId",width:80,template:r=>o.jsx(Hs,{prId:r})}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_pull_requests.anonymous.date",properties:"dateMerge",formatter:oe,width:130}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_pull_requests.anonymous.author",properties:"author",width:200}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_pull_requests.anonymous.message",properties:"description"})]}):null}function o$({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const[r,u]=Mt(t,["daysInReview","daysWorkOnTask"]);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:n,type:n==="print"?"cards":void 0,columnCount:n==="print"?2:void 0,fullScreenMode:"all",children:[o.jsx(w,{isSortable:!0,template:C.TASK,title:"plugin.team_pull_requests.all.task",width:120,properties:"task"}),o.jsx(w,{title:"plugin.team_pull_requests.all.pr",width:40,properties:"prExternalId",template:c=>o.jsx(Hs,{prId:c})}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_pull_requests.all.message",properties:"description"}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_pull_requests.all.dateCreate",properties:"dateCreate",formatter:oe,width:130}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_pull_requests.all.dateMerge",properties:"dateMerge",formatter:oe,width:130}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"daysWorkOnTask",width:40}),o.jsx(w,{isSortable:!0,title:"plugin.team_pull_requests.all.daysWorkOnTask",properties:"daysWorkOnTask",minWidth:170,template:c=>o.jsx(ue,{value:c,max:u})}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"daysInReview",width:40}),o.jsx(w,{isSortable:!0,title:"plugin.team_pull_requests.all.daysInReview",properties:"daysInReview",minWidth:170,template:c=>o.jsx(ue,{value:c,max:r})})]})}function l$(t){const e={},s={};return t.forEach(r=>{Ce(e,String(r.dateMergeYear)),Ce(s,String(r.author))}),[Object.keys(e).sort().reverse(),e,s]}const yb=U(({rows:t})=>{if(!t)return null;const e=A.statisticsByCommits.author.list,[s,n,r]=T.useMemo(()=>l$(t),[t]);return o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_pull_requests.yearChart.title",suffix:"plugin.team_pull_requests.chart.suffix",order:s,limit:1,details:n})}),o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_pull_requests.authorChart.title",suffix:"plugin.team_pull_requests.chart.suffix",order:e,limit:3,details:r})})]})});function vb(t){const e=[],s=[];return t.forEach(n=>{n.task?e.push(n):s.push(n)}),[e,s]}const r$=U(({mode:t})=>{const e=A.statisticsByCommits.pr.totalInfo,[s,n]=vb(e),[r,u]=T.useState(s),[c,p]=T.useState(n),[_,h]=T.useState("");return e.length<5?t!=="print"?o.jsx(Le,{}):null:o.jsxs(o.Fragment,{children:[o.jsxs(Y,{value:s,children:[o.jsx(G,{title:"plugin.team_pull_requests.total.title"}),o.jsx(e$,{prWithTask:s}),o.jsx(i$,{mode:t,allPR:e})]}),o.jsxs(Y,{value:t!=="print",children:[o.jsx(G,{title:"common.filters"}),o.jsx(Ei,{content:e,properties:"message",examples:["hack","password","prod","token","key","env"],onChange:(f,v)=>{const[k,x]=vb(f);u(k),p(x),h(v)},onFilter:f=>v=>!(f.author&&v.author!==f.author||f.company&&v.company!==f.company||f.taskCode&&v.taskCode!==f.taskCode||f.scope&&!v.scope.includes(f.scope)||f.type&&!v.types.includes(f.type))})]}),o.jsxs(Y,{value:s,children:[o.jsx(G,{title:"plugin.team_pull_requests.all.title"}),o.jsx(Y,{value:r,children:o.jsx(yb,{rows:r})}),o.jsxs(be,{content:r,watch:`${_}${t}${A.hash}`,children:[o.jsx(o$,{mode:t,rowsForExcel:r}),o.jsx(Le,{}),o.jsx(fe,{})]})]}),o.jsxs(Y,{value:n,children:[o.jsx(G,{title:"plugin.team_pull_requests.anonymous.title"}),o.jsx(Y,{value:c,children:o.jsx(yb,{rows:c})}),o.jsxs(be,{content:c,watch:`${_}${t}${A.hash}`,children:[o.jsx(n$,{mode:t,rowsForExcel:c}),o.jsx(Le,{}),o.jsx(fe,{})]})]})]})});let m$=(Cl=class{constructor(){this.dependencies=["pr","author"]}getMenuItems(){return[{id:"pr",group:40,order:180,link:"/team/pr",title:"plugin.team_pull_requests.sidebar",icon:"./assets/menu/pull_request.svg"}]}getPage(e,s){return e==="/team/pr"?o.jsx(r$,{mode:s==null?void 0:s.mode}):void 0}getTranslations(){return JO}},Cl.id="team_pull_requests",Cl);const u$={money:{description:"plugin.team_scope.recommendations.money",type:J.FACT},plan:{title:"plugin.team_scope.recommendations.plan.title",description:"plugin.team_scope.recommendations.plan.description",type:J.INFO},cost:{title:"plugin.team_scope.recommendations.cost.title",description:"plugin.team_scope.recommendations.cost.description",type:J.INFO},parallelismNot:{title:"plugin.team_scope.recommendations.parallelism.not.title",description:"plugin.team_scope.recommendations.parallelism.not.description",type:J.FACT},parallelismHas:{title:"plugin.team_scope.recommendations.parallelism.has.title",description:"plugin.team_scope.recommendations.parallelism.has.description",type:J.FACT},parallelismEvery:{title:"plugin.team_scope.recommendations.parallelism.every.title",description:"plugin.team_scope.recommendations.parallelism.every.description",type:J.FACT},busEveryHasOne:{title:"plugin.team_scope.recommendations.bus.everyHasOne.title",description:"plugin.team_scope.recommendations.bus.everyHasOne.description",type:J.WARNING},busOneMaintainer:{description:"plugin.team_scope.recommendations.bus.oneMaintainer",type:J.ALERT},typesProcess:{title:"plugin.team_scope.recommendations.types.process.title",description:["plugin.team_scope.recommendations.types.process.description","plugin.team_scope.recommendations.types.common"],type:J.WARNING},typesOne:{description:["plugin.team_scope.recommendations.types.one","plugin.team_scope.recommendations.types.common"],type:J.WARNING}},{getItem:Xn,getTitle:qg}=Un(u$);function c$(t){if(t.author.list.length<3||t.scope.list.length<3)return null;const e=[];t.scope.totalInfo.forEach(r=>{e.push(r.totalDaysWorkedByAuthor/r.totalDaysWorked)});const n=e.reduce((r,u)=>r+u,0)/e.length;return n<1.3?Xn("parallelismNot"):n<2?Xn("parallelismHas"):Xn("parallelismEvery")}function p$(t){if(t.author.list.length<3||t.scope.list.length<3)return null;const e=t.scope.totalInfo.filter(n=>{const r=n.commits*.8;return Object.values(n.commitsByAuthor).some(c=>c>=r)}).map(n=>n.scope);return e.length?e.length>t.scope.totalInfo.length*.6?Xn("busEveryHasOne"):qg("busOneMaintainer",e):null}function d$(t){if(t.scope.list.length<3)return null;const e=t.scope.totalInfo.filter(n=>{const r=n.commits*.8;return t.type.list.some(u=>n.types[u]>=r)}).map(n=>n.scope);return e.length>t.scope.totalInfo.length*.6?Xn("typesProcess"):qg("typesOne",e)}function g$(){const t=A.statisticsByCommits.team.totalInfo,e=zo(t.totalMoneyWorked+t.totalMoneyInWeekend);return[p$(A.statisticsByCommits),d$(A.statisticsByCommits),c$(A.statisticsByCommits),qg("money",e),Xn("plan"),Xn("cost")].filter(s=>s)}const kb=qi(g$),_$={fewTypes:{title:"plugin.team_types.recommendations.fewTypes.title",description:"plugin.team_types.recommendations.fewTypes.description",type:J.FACT},diff:{title:"plugin.team_types.recommendations.diff.title",description:"plugin.team_types.recommendations.diff.description",type:J.INFO},buddy:{title:"plugin.team_types.recommendations.buddy.title",description:"plugin.team_types.recommendations.buddy.description",type:J.INFO},everyHasOne:{title:"plugin.team_types.recommendations.everyHasOne.title",description:["plugin.team_types.recommendations.everyHasOne.description","plugin.team_types.recommendations.common"],type:J.WARNING},oneMaintainer:{title:"plugin.team_types.recommendations.oneMaintainer.title",description:["plugin.team_types.recommendations.oneMaintainer.description","plugin.team_types.recommendations.common"],type:J.ALERT,arguments:{description:{}}}},{getItem:Sc,getArgDescription:h$}=Un(_$);function f$(t){if(t.author.list.length<2||t.type.totalInfo.length>200)return null;const e=t.type.totalInfo.filter(n=>{const r=n.commits*.8;return t.author.list.some(u=>n.commitsByAuthors[u]>=r)}).map(n=>n.type);return e.length?e.length>t.type.totalInfo.length*.6?Sc("everyHasOne"):h$("oneMaintainer",{list:`- ${e.join(`;
|
||
- `)}`}):null}function y$(){const t=A.statisticsByCommits,e=t.type.totalInfo.filter(s=>s.tasks>20).length<7;return[f$(t),e?Sc("fewTypes"):null,Sc("diff"),Sc("buddy")].filter(s=>s)}const bb=qi(y$),v$={recommendations_page:"recommendations_page"};function Ac({title:t,recommendations:e}){const s=e==null?void 0:e.map(n=>o.jsx(wg,{recommendation:n},n.description));return s!=null&&s.length?o.jsxs(o.Fragment,{children:[o.jsx(G,{title:t}),o.jsx("div",{className:v$.recommendations_page,children:s})]}):null}function k$(){return[...zk(),...kb(),...bb(),...pb(),...nb()].filter(t=>t)}function b$(t){return t.reduce((e,s)=>(e[s.type]||(e[s.type]=[]),e[s.type].push(s),e),{})}const w$=U(()=>{const t=k$();if(!(t!=null&&t.length))return o.jsx(Le,{});const e=b$(t);return o.jsxs(o.Fragment,{children:[o.jsx(Ac,{title:"plugin.team_recommendations.alert",recommendations:e[J.ALERT]}),o.jsx(Ac,{title:"plugin.team_recommendations.warning",recommendations:e[J.WARNING]}),o.jsx(Ac,{title:"plugin.team_recommendations.fact",recommendations:e[J.FACT]}),o.jsx(Ac,{title:"plugin.team_recommendations.info",recommendations:e[J.INFO]})]})}),x$={ar:`
|
||
§ plugin.team_refactor.sidebar: إعادة الهيكلة
|
||
§ plugin.team_refactor.title: قائمة الملفات التي قد تحتاج إلى إعادة هيكلة
|
||
§ plugin.team_refactor.view.path: المسار
|
||
§ plugin.team_refactor.view.lines: أسطر في الملف
|
||
§ plugin.team_refactor.view.totalDays: أيام في التطوير
|
||
§ plugin.team_refactor.view.totalTasks: المهام
|
||
§ plugin.team_refactor.tasks.task: المهمة
|
||
§ plugin.team_refactor.tasks.description: الوصف
|
||
§ plugin.team_refactor.charts.title: تحليلات الملفات
|
||
§ plugin.team_refactor.charts.yearChart.title: متى أُنشئت هذه الملفات
|
||
§ plugin.team_refactor.charts.authorChart.title: من يعمل عليها
|
||
`,de:`
|
||
§ plugin.team_refactor.sidebar: Refactoring
|
||
§ plugin.team_refactor.title: Liste der Dateien, die möglicherweise ein Refactoring benötigen
|
||
§ plugin.team_refactor.view.path: Pfad
|
||
§ plugin.team_refactor.view.lines: Zeilen in der Datei
|
||
§ plugin.team_refactor.view.totalDays: Tage in der Entwicklung
|
||
§ plugin.team_refactor.view.totalTasks: Aufgaben
|
||
§ plugin.team_refactor.tasks.task: Aufgabe
|
||
§ plugin.team_refactor.tasks.description: Beschreibung
|
||
§ plugin.team_refactor.charts.title: Dateianalytik
|
||
§ plugin.team_refactor.charts.yearChart.title: Wann diese Dateien erstellt wurden
|
||
§ plugin.team_refactor.charts.authorChart.title: Wer damit arbeitet
|
||
`,en:`
|
||
§ plugin.team_refactor.sidebar: Refactoring
|
||
§ plugin.team_refactor.title: List of files that may need refactoring
|
||
§ plugin.team_refactor.view.path: Path
|
||
§ plugin.team_refactor.view.lines: Lines in file
|
||
§ plugin.team_refactor.view.totalDays: Days in development
|
||
§ plugin.team_refactor.view.totalTasks: Tasks
|
||
§ plugin.team_refactor.tasks.task: Task
|
||
§ plugin.team_refactor.tasks.description: Description
|
||
§ plugin.team_refactor.charts.title: File analytics
|
||
§ plugin.team_refactor.charts.yearChart.title: When these files were created
|
||
§ plugin.team_refactor.charts.authorChart.title: Who works with them
|
||
`,es:`
|
||
§ plugin.team_refactor.sidebar: Refactorización
|
||
§ plugin.team_refactor.title: Lista de archivos que posiblemente necesiten refactorización
|
||
§ plugin.team_refactor.view.path: Ruta
|
||
§ plugin.team_refactor.view.lines: Líneas en el archivo
|
||
§ plugin.team_refactor.view.totalDays: Días en desarrollo
|
||
§ plugin.team_refactor.view.totalTasks: Tareas
|
||
§ plugin.team_refactor.tasks.task: Tarea
|
||
§ plugin.team_refactor.tasks.description: Descripción
|
||
§ plugin.team_refactor.charts.title: Analítica de archivos
|
||
§ plugin.team_refactor.charts.yearChart.title: Cuándo se crearon estos archivos
|
||
§ plugin.team_refactor.charts.authorChart.title: Quién trabaja con ellos
|
||
`,fr:`
|
||
§ plugin.team_refactor.sidebar: Refactorisation
|
||
§ plugin.team_refactor.title: Liste des fichiers qui pourraient nécessiter une refactorisation
|
||
§ plugin.team_refactor.view.path: Chemin
|
||
§ plugin.team_refactor.view.lines: Lignes dans le fichier
|
||
§ plugin.team_refactor.view.totalDays: Jours en développement
|
||
§ plugin.team_refactor.view.totalTasks: Tâches
|
||
§ plugin.team_refactor.tasks.task: Tâche
|
||
§ plugin.team_refactor.tasks.description: Description
|
||
§ plugin.team_refactor.charts.title: Analytique des fichiers
|
||
§ plugin.team_refactor.charts.yearChart.title: Quand ces fichiers ont été créés
|
||
§ plugin.team_refactor.charts.authorChart.title: Qui travaille avec eux
|
||
`,he:`
|
||
§ plugin.team_refactor.sidebar: רפקטורינג
|
||
§ plugin.team_refactor.title: רשימת קבצים שעשויים להזדקק לרפקטורינג
|
||
§ plugin.team_refactor.view.path: נתיב
|
||
§ plugin.team_refactor.view.lines: שורות בקובץ
|
||
§ plugin.team_refactor.view.totalDays: ימים בפיתוח
|
||
§ plugin.team_refactor.view.totalTasks: משימות
|
||
§ plugin.team_refactor.tasks.task: משימה
|
||
§ plugin.team_refactor.tasks.description: תיאור
|
||
§ plugin.team_refactor.charts.title: אנליטיקה של קבצים
|
||
§ plugin.team_refactor.charts.yearChart.title: מתי נוצרו הקבצים האלה
|
||
§ plugin.team_refactor.charts.authorChart.title: מי עובד איתם
|
||
`,hi:`
|
||
§ plugin.team_refactor.sidebar: रिफैक्टरिंग
|
||
§ plugin.team_refactor.title: उन फ़ाइलों की सूची जिन्हें संभवतः रिफैक्टरिंग की आवश्यकता है
|
||
§ plugin.team_refactor.view.path: पथ
|
||
§ plugin.team_refactor.view.lines: फ़ाइल में पंक्तियाँ
|
||
§ plugin.team_refactor.view.totalDays: विकास में दिन
|
||
§ plugin.team_refactor.view.totalTasks: कार्य
|
||
§ plugin.team_refactor.tasks.task: कार्य
|
||
§ plugin.team_refactor.tasks.description: विवरण
|
||
§ plugin.team_refactor.charts.title: फ़ाइल एनालिटिक्स
|
||
§ plugin.team_refactor.charts.yearChart.title: ये फ़ाइलें कब बनाई गईं
|
||
§ plugin.team_refactor.charts.authorChart.title: इनके साथ कौन काम करता है
|
||
`,ja:`
|
||
§ plugin.team_refactor.sidebar: リファクタリング
|
||
§ plugin.team_refactor.title: リファクタリングが必要である可能性があるファイルの一覧
|
||
§ plugin.team_refactor.view.path: パス
|
||
§ plugin.team_refactor.view.lines: ファイルの行数
|
||
§ plugin.team_refactor.view.totalDays: 開発日数
|
||
§ plugin.team_refactor.view.totalTasks: タスク
|
||
§ plugin.team_refactor.tasks.task: タスク
|
||
§ plugin.team_refactor.tasks.description: 説明
|
||
§ plugin.team_refactor.charts.title: ファイル分析
|
||
§ plugin.team_refactor.charts.yearChart.title: これらのファイルが作成された時期
|
||
§ plugin.team_refactor.charts.authorChart.title: 誰がこれらを扱っているか
|
||
`,ko:`
|
||
§ plugin.team_refactor.sidebar: 리팩터링
|
||
§ plugin.team_refactor.title: 리팩터링이 필요할 수 있는 파일 목록
|
||
§ plugin.team_refactor.view.path: 경로
|
||
§ plugin.team_refactor.view.lines: 파일의 줄 수
|
||
§ plugin.team_refactor.view.totalDays: 개발 일수
|
||
§ plugin.team_refactor.view.totalTasks: 작업
|
||
§ plugin.team_refactor.tasks.task: 작업
|
||
§ plugin.team_refactor.tasks.description: 설명
|
||
§ plugin.team_refactor.charts.title: 파일 분석
|
||
§ plugin.team_refactor.charts.yearChart.title: 이 파일들이 생성된 시기
|
||
§ plugin.team_refactor.charts.authorChart.title: 누가 이 파일들을 다루는지
|
||
`,pt:`
|
||
§ plugin.team_refactor.sidebar: Refatoração
|
||
§ plugin.team_refactor.title: Lista de arquivos que podem precisar de refatoração
|
||
§ plugin.team_refactor.view.path: Caminho
|
||
§ plugin.team_refactor.view.lines: Linhas no arquivo
|
||
§ plugin.team_refactor.view.totalDays: Dias em desenvolvimento
|
||
§ plugin.team_refactor.view.totalTasks: Tarefas
|
||
§ plugin.team_refactor.tasks.task: Tarefa
|
||
§ plugin.team_refactor.tasks.description: Descrição
|
||
§ plugin.team_refactor.charts.title: Analítica de arquivos
|
||
§ plugin.team_refactor.charts.yearChart.title: Quando esses arquivos foram criados
|
||
§ plugin.team_refactor.charts.authorChart.title: Quem trabalha com eles
|
||
`,ru:`
|
||
§ plugin.team_recommendations.sidebar: Рекомендации
|
||
§ plugin.team_recommendations.alert: Проблемы
|
||
§ plugin.team_recommendations.warning: Обратить внимание
|
||
§ plugin.team_recommendations.fact: Факты о проекте
|
||
§ plugin.team_recommendations.info: Общие советы
|
||
`,zh:`
|
||
§ plugin.team_refactor.sidebar: 重构
|
||
§ plugin.team_refactor.title: 可能需要重构的文件列表
|
||
§ plugin.team_refactor.view.path: 路径
|
||
§ plugin.team_refactor.view.lines: 文件行数
|
||
§ plugin.team_refactor.view.totalDays: 开发天数
|
||
§ plugin.team_refactor.view.totalTasks: 任务
|
||
§ plugin.team_refactor.tasks.task: 任务
|
||
§ plugin.team_refactor.tasks.description: 描述
|
||
§ plugin.team_refactor.charts.title: 文件分析
|
||
§ plugin.team_refactor.charts.yearChart.title: 这些文件的创建时间
|
||
§ plugin.team_refactor.charts.authorChart.title: 谁在处理这些文件
|
||
`};let C$=(jl=class{constructor(){this.dependencies=["recommendations"]}getMenuItems(){return[{id:"recommendations",group:50,order:220,link:"/team/recommendations",title:"plugin.team_recommendations.sidebar",icon:"./assets/menu/recommendations.svg"}]}getPage(e){return e==="/team/recommendations"?o.jsx(w$,{}):void 0}getTranslations(){return x$}},jl.id="team_recommendations",jl);const j$={ar:`
|
||
§ plugin.team_refactor.sidebar: إعادة الهيكلة
|
||
§ plugin.team_refactor.title: قائمة الملفات التي قد تحتاج إلى إعادة هيكلة
|
||
§ plugin.team_refactor.view.path: المسار
|
||
§ plugin.team_refactor.view.lines: أسطر في الملف
|
||
§ plugin.team_refactor.view.totalDays: أيام في التطوير
|
||
§ plugin.team_refactor.view.totalTasks: المهام
|
||
§ plugin.team_refactor.tasks.task: المهمة
|
||
§ plugin.team_refactor.tasks.description: الوصف
|
||
§ plugin.team_refactor.charts.title: تحليلات الملفات
|
||
§ plugin.team_refactor.charts.yearChart.title: متى أُنشئت هذه الملفات
|
||
§ plugin.team_refactor.charts.authorChart.title: من يعمل عليها
|
||
`,de:`
|
||
§ plugin.team_refactor.sidebar: Refactoring
|
||
§ plugin.team_refactor.title: Liste der Dateien, die möglicherweise ein Refactoring benötigen
|
||
§ plugin.team_refactor.view.path: Pfad
|
||
§ plugin.team_refactor.view.lines: Zeilen in der Datei
|
||
§ plugin.team_refactor.view.totalDays: Tage in der Entwicklung
|
||
§ plugin.team_refactor.view.totalTasks: Aufgaben
|
||
§ plugin.team_refactor.tasks.task: Aufgabe
|
||
§ plugin.team_refactor.tasks.description: Beschreibung
|
||
§ plugin.team_refactor.charts.title: Dateianalytik
|
||
§ plugin.team_refactor.charts.yearChart.title: Wann diese Dateien erstellt wurden
|
||
§ plugin.team_refactor.charts.authorChart.title: Wer damit arbeitet
|
||
`,en:`
|
||
§ plugin.team_refactor.sidebar: Refactoring
|
||
§ plugin.team_refactor.title: List of files that may need refactoring
|
||
§ plugin.team_refactor.view.path: Path
|
||
§ plugin.team_refactor.view.lines: Lines in file
|
||
§ plugin.team_refactor.view.totalDays: Days in development
|
||
§ plugin.team_refactor.view.totalTasks: Tasks
|
||
§ plugin.team_refactor.tasks.task: Task
|
||
§ plugin.team_refactor.tasks.description: Description
|
||
§ plugin.team_refactor.charts.title: File analytics
|
||
§ plugin.team_refactor.charts.yearChart.title: When these files were created
|
||
§ plugin.team_refactor.charts.authorChart.title: Who works with them
|
||
`,es:`
|
||
§ plugin.team_refactor.sidebar: Refactorización
|
||
§ plugin.team_refactor.title: Lista de archivos que posiblemente necesiten refactorización
|
||
§ plugin.team_refactor.view.path: Ruta
|
||
§ plugin.team_refactor.view.lines: Líneas en el archivo
|
||
§ plugin.team_refactor.view.totalDays: Días en desarrollo
|
||
§ plugin.team_refactor.view.totalTasks: Tareas
|
||
§ plugin.team_refactor.tasks.task: Tarea
|
||
§ plugin.team_refactor.tasks.description: Descripción
|
||
§ plugin.team_refactor.charts.title: Analítica de archivos
|
||
§ plugin.team_refactor.charts.yearChart.title: Cuándo se crearon estos archivos
|
||
§ plugin.team_refactor.charts.authorChart.title: Quién trabaja con ellos
|
||
`,fr:`
|
||
§ plugin.team_refactor.sidebar: Refactorisation
|
||
§ plugin.team_refactor.title: Liste des fichiers qui pourraient nécessiter une refactorisation
|
||
§ plugin.team_refactor.view.path: Chemin
|
||
§ plugin.team_refactor.view.lines: Lignes dans le fichier
|
||
§ plugin.team_refactor.view.totalDays: Jours en développement
|
||
§ plugin.team_refactor.view.totalTasks: Tâches
|
||
§ plugin.team_refactor.tasks.task: Tâche
|
||
§ plugin.team_refactor.tasks.description: Description
|
||
§ plugin.team_refactor.charts.title: Analytique des fichiers
|
||
§ plugin.team_refactor.charts.yearChart.title: Quand ces fichiers ont été créés
|
||
§ plugin.team_refactor.charts.authorChart.title: Qui travaille avec eux
|
||
`,he:`
|
||
§ plugin.team_refactor.sidebar: רפקטורינג
|
||
§ plugin.team_refactor.title: רשימת קבצים שעשויים להזדקק לרפקטורינג
|
||
§ plugin.team_refactor.view.path: נתיב
|
||
§ plugin.team_refactor.view.lines: שורות בקובץ
|
||
§ plugin.team_refactor.view.totalDays: ימים בפיתוח
|
||
§ plugin.team_refactor.view.totalTasks: משימות
|
||
§ plugin.team_refactor.tasks.task: משימה
|
||
§ plugin.team_refactor.tasks.description: תיאור
|
||
§ plugin.team_refactor.charts.title: אנליטיקה של קבצים
|
||
§ plugin.team_refactor.charts.yearChart.title: מתי נוצרו הקבצים האלה
|
||
§ plugin.team_refactor.charts.authorChart.title: מי עובד איתם
|
||
`,hi:`
|
||
§ plugin.team_refactor.sidebar: रिफैक्टरिंग
|
||
§ plugin.team_refactor.title: उन फ़ाइलों की सूची जिन्हें संभवतः रिफैक्टरिंग की आवश्यकता है
|
||
§ plugin.team_refactor.view.path: पथ
|
||
§ plugin.team_refactor.view.lines: फ़ाइल में पंक्तियाँ
|
||
§ plugin.team_refactor.view.totalDays: विकास में दिन
|
||
§ plugin.team_refactor.view.totalTasks: कार्य
|
||
§ plugin.team_refactor.tasks.task: कार्य
|
||
§ plugin.team_refactor.tasks.description: विवरण
|
||
§ plugin.team_refactor.charts.title: फ़ाइल एनालिटिक्स
|
||
§ plugin.team_refactor.charts.yearChart.title: ये फ़ाइलें कब बनाई गईं
|
||
§ plugin.team_refactor.charts.authorChart.title: इनके साथ कौन काम करता है
|
||
`,ja:`
|
||
§ plugin.team_refactor.sidebar: リファクタリング
|
||
§ plugin.team_refactor.title: リファクタリングが必要である可能性があるファイルの一覧
|
||
§ plugin.team_refactor.view.path: パス
|
||
§ plugin.team_refactor.view.lines: ファイルの行数
|
||
§ plugin.team_refactor.view.totalDays: 開発日数
|
||
§ plugin.team_refactor.view.totalTasks: タスク
|
||
§ plugin.team_refactor.tasks.task: タスク
|
||
§ plugin.team_refactor.tasks.description: 説明
|
||
§ plugin.team_refactor.charts.title: ファイル分析
|
||
§ plugin.team_refactor.charts.yearChart.title: これらのファイルが作成された時期
|
||
§ plugin.team_refactor.charts.authorChart.title: 誰がこれらを扱っているか
|
||
`,ko:`
|
||
§ plugin.team_refactor.sidebar: 리팩터링
|
||
§ plugin.team_refactor.title: 리팩터링이 필요할 수 있는 파일 목록
|
||
§ plugin.team_refactor.view.path: 경로
|
||
§ plugin.team_refactor.view.lines: 파일의 줄 수
|
||
§ plugin.team_refactor.view.totalDays: 개발 일수
|
||
§ plugin.team_refactor.view.totalTasks: 작업
|
||
§ plugin.team_refactor.tasks.task: 작업
|
||
§ plugin.team_refactor.tasks.description: 설명
|
||
§ plugin.team_refactor.charts.title: 파일 분석
|
||
§ plugin.team_refactor.charts.yearChart.title: 이 파일들이 생성된 시기
|
||
§ plugin.team_refactor.charts.authorChart.title: 누가 이 파일들을 다루는지
|
||
`,pt:`
|
||
§ plugin.team_refactor.sidebar: Refatoração
|
||
§ plugin.team_refactor.title: Lista de arquivos que podem precisar de refatoração
|
||
§ plugin.team_refactor.view.path: Caminho
|
||
§ plugin.team_refactor.view.lines: Linhas no arquivo
|
||
§ plugin.team_refactor.view.totalDays: Dias em desenvolvimento
|
||
§ plugin.team_refactor.view.totalTasks: Tarefas
|
||
§ plugin.team_refactor.tasks.task: Tarefa
|
||
§ plugin.team_refactor.tasks.description: Descrição
|
||
§ plugin.team_refactor.charts.title: Analítica de arquivos
|
||
§ plugin.team_refactor.charts.yearChart.title: Quando esses arquivos foram criados
|
||
§ plugin.team_refactor.charts.authorChart.title: Quem trabalha com eles
|
||
`,ru:`
|
||
§ plugin.team_refactor.sidebar: Рефакторинг
|
||
§ plugin.team_refactor.title: Список файлов, которым, возможно, нужен рефакторинг
|
||
§ plugin.team_refactor.view.path: Путь
|
||
§ plugin.team_refactor.view.lines: Строк в файле
|
||
§ plugin.team_refactor.view.totalDays: Дней в разработке
|
||
§ plugin.team_refactor.view.totalTasks: Задач
|
||
§ plugin.team_refactor.tasks.task: Задача
|
||
§ plugin.team_refactor.tasks.description: Описание
|
||
§ plugin.team_refactor.charts.title: Аналитика по файлам
|
||
§ plugin.team_refactor.charts.yearChart.title: Когда были созданы эти файлы
|
||
§ plugin.team_refactor.charts.authorChart.title: Кто с ними работает
|
||
`,zh:`
|
||
§ plugin.team_refactor.sidebar: 重构
|
||
§ plugin.team_refactor.title: 可能需要重构的文件列表
|
||
§ plugin.team_refactor.view.path: 路径
|
||
§ plugin.team_refactor.view.lines: 文件行数
|
||
§ plugin.team_refactor.view.totalDays: 开发天数
|
||
§ plugin.team_refactor.view.totalTasks: 任务
|
||
§ plugin.team_refactor.tasks.task: 任务
|
||
§ plugin.team_refactor.tasks.description: 描述
|
||
§ plugin.team_refactor.charts.title: 文件分析
|
||
§ plugin.team_refactor.charts.yearChart.title: 这些文件的创建时间
|
||
§ plugin.team_refactor.charts.authorChart.title: 谁在处理这些文件
|
||
`};function T$({response:t,updateSort:e,rowsForExcel:s}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:"details",children:[o.jsx(w,{isFixed:!0,isSortable:!0,template:C.TASK,properties:"task",title:"plugin.team_refactor.tasks.task"}),o.jsx(w,{properties:"prIds",template:C.PULL_REQUESTS}),o.jsx(w,{properties:"types",template:C.TAGS}),o.jsx(w,{properties:"scope",template:C.TAGS}),o.jsx(w,{template:C.STRING,title:"plugin.team_refactor.tasks.description",properties:"description"})]}):null}function D$({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const r=A.statisticsByCommits.tasks.totalInfoByName,[u,c,p]=Mt(t,["lines","totalTasks","totalDays"]);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,template:C.DETAILS,width:40,formatter:_=>{const h=Array.from(_==null?void 0:_.tasks).reverse().map(f=>r.get(f)).filter(f=>f);return o.jsxs(be,{content:h,children:[o.jsx(T$,{}),o.jsx(fe,{})]})}}),o.jsx(w,{isFixed:!0,template:C.STRING,properties:"pathString",title:"plugin.team_refactor.view.path",width:400}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"lines",width:90}),o.jsx(w,{isSortable:"lines",title:"plugin.team_refactor.view.lines",properties:"lines",minWidth:150,template:_=>o.jsx(ue,{value:_,max:u,suffix:"plugin.team_refactor.lines"})}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"totalDays",width:90}),o.jsx(w,{isSortable:"totalDays",title:"plugin.team_refactor.view.totalDays",properties:"totalDays",minWidth:150,template:_=>o.jsx(ue,{value:_,max:p,suffix:"common.statistic.days"})}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"totalTasks",width:90}),o.jsx(w,{isSortable:"totalTasks",title:"plugin.team_refactor.view.totalTasks",properties:"totalTasks",minWidth:150,template:_=>o.jsx(ue,{value:_,max:c,suffix:"common.statistic.tasks"})})]})}function S$(t){const e={},s={};return t.forEach(r=>{Ce(e,String(r.createYear)),Ce(s,String(r.createAuthor))}),[Object.keys(e).sort().reverse(),e,s]}const A$=U(({rows:t})=>{if(!t)return null;const e=A.statisticsByCommits.author.list,[s,n,r]=T.useMemo(()=>S$(t),[t]);return o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_refactor.charts.yearChart.title",suffix:"common.statistic.commits",order:s,limit:1,details:n})}),o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_refactor.charts.authorChart.title",suffix:"common.statistic.commits",order:e,limit:3,details:r})})]})}),z$=U(({mode:t})=>{const e=A.statisticsByFiles.refactor.files;return e!=null&&e.length?o.jsxs(o.Fragment,{children:[o.jsx(G,{title:"plugin.team_refactor.title"}),o.jsx(be,{content:e,mode:t,children:o.jsx(D$,{mode:t})}),o.jsx(G,{title:"plugin.team_refactor.charts.title"}),o.jsx(A$,{rows:e})]}):o.jsx(Le,{})});let N$=(Tl=class{constructor(){this.dependencies=["tasks","author"]}getMenuItems(){return[{id:"refactor",group:30,order:150,link:"/team/refactor",title:"plugin.team_refactor.sidebar",icon:"./assets/menu/refactor.svg"}]}getPage(e,s){return e==="/team/refactor"?o.jsx(z$,{mode:s==null?void 0:s.mode}):void 0}getTranslations(){return j$}},Tl.id="team_refactor",Tl);const M$={ar:`
|
||
§ plugin.team_release.sidebar: قائمة الإصدارات
|
||
§ plugin.team_release.title: قائمة الإصدارات
|
||
§ plugin.team_release.download: CHANGELOG.md
|
||
§ plugin.team_release.view.title: الإصدار
|
||
§ plugin.team_release.view.from: تاريخ الإنشاء
|
||
§ plugin.team_release.view.to: تاريخ الإكمال
|
||
§ plugin.team_release.view.pr: المهام
|
||
§ plugin.team_release.view.delay: أيام المراجعة
|
||
§ plugin.team_release.view.waiting: الأيام حتى الإصدار التالي
|
||
§ plugin.team_release.pr.task: المهمة
|
||
§ plugin.team_release.pr.daysWorkOnTask: أيام العمل
|
||
§ plugin.team_release.pr.daysInReview: أيام المراجعة
|
||
§ plugin.team_release.pr.daysAwaitRelease: الأيام حتى نهاية الإصدار
|
||
§ plugin.team_release.pr.mergeDate: تاريخ الدمج
|
||
§ plugin.team_release.pr.mergeAuthor: دُمج بواسطة
|
||
`,de:`
|
||
§ plugin.team_release.sidebar: Release-Liste
|
||
§ plugin.team_release.title: Release-Liste
|
||
§ plugin.team_release.download: CHANGELOG.md
|
||
§ plugin.team_release.view.title: Release
|
||
§ plugin.team_release.view.from: Erstellungsdatum
|
||
§ plugin.team_release.view.to: Abschlussdatum
|
||
§ plugin.team_release.view.pr: Aufgaben
|
||
§ plugin.team_release.view.delay: Review-Tage
|
||
§ plugin.team_release.view.waiting: Tage bis zum nächsten Release
|
||
§ plugin.team_release.pr.task: Aufgabe
|
||
§ plugin.team_release.pr.daysWorkOnTask: Arbeitstage
|
||
§ plugin.team_release.pr.daysInReview: Review-Tage
|
||
§ plugin.team_release.pr.daysAwaitRelease: Tage bis zum Ende des Releases
|
||
§ plugin.team_release.pr.mergeDate: Merge-Datum
|
||
§ plugin.team_release.pr.mergeAuthor: Zusammengeführt von
|
||
`,en:`
|
||
§ plugin.team_release.sidebar: Release list
|
||
§ plugin.team_release.title: Release list
|
||
§ plugin.team_release.download: CHANGELOG.md
|
||
§ plugin.team_release.view.title: Release
|
||
§ plugin.team_release.view.from: Created date
|
||
§ plugin.team_release.view.to: Completion date
|
||
§ plugin.team_release.view.pr: Tasks
|
||
§ plugin.team_release.view.delay: Review days
|
||
§ plugin.team_release.view.waiting: Days until next release
|
||
§ plugin.team_release.pr.task: Task
|
||
§ plugin.team_release.pr.daysWorkOnTask: Days worked
|
||
§ plugin.team_release.pr.daysInReview: Review days
|
||
§ plugin.team_release.pr.daysAwaitRelease: Days until release end
|
||
§ plugin.team_release.pr.mergeDate: Merge date
|
||
§ plugin.team_release.pr.mergeAuthor: Merged by
|
||
`,es:`
|
||
§ plugin.team_release.sidebar: Lista de lanzamientos
|
||
§ plugin.team_release.title: Lista de lanzamientos
|
||
§ plugin.team_release.download: CHANGELOG.md
|
||
§ plugin.team_release.view.title: Lanzamiento
|
||
§ plugin.team_release.view.from: Fecha de creación
|
||
§ plugin.team_release.view.to: Fecha de finalización
|
||
§ plugin.team_release.view.pr: Tareas
|
||
§ plugin.team_release.view.delay: Días de revisión
|
||
§ plugin.team_release.view.waiting: Días hasta el siguiente lanzamiento
|
||
§ plugin.team_release.pr.task: Tarea
|
||
§ plugin.team_release.pr.daysWorkOnTask: Días trabajados
|
||
§ plugin.team_release.pr.daysInReview: Días de revisión
|
||
§ plugin.team_release.pr.daysAwaitRelease: Días hasta el final del lanzamiento
|
||
§ plugin.team_release.pr.mergeDate: Fecha de fusión
|
||
§ plugin.team_release.pr.mergeAuthor: Fusionado por
|
||
`,fr:`
|
||
§ plugin.team_release.sidebar: Liste des releases
|
||
§ plugin.team_release.title: Liste des releases
|
||
§ plugin.team_release.download: CHANGELOG.md
|
||
§ plugin.team_release.view.title: Release
|
||
§ plugin.team_release.view.from: Date de création
|
||
§ plugin.team_release.view.to: Date d'achèvement
|
||
§ plugin.team_release.view.pr: Tâches
|
||
§ plugin.team_release.view.delay: Jours de revue
|
||
§ plugin.team_release.view.waiting: Jours jusqu'à la prochaine release
|
||
§ plugin.team_release.pr.task: Tâche
|
||
§ plugin.team_release.pr.daysWorkOnTask: Jours travaillés
|
||
§ plugin.team_release.pr.daysInReview: Jours de revue
|
||
§ plugin.team_release.pr.daysAwaitRelease: Jours jusqu'à la fin de la release
|
||
§ plugin.team_release.pr.mergeDate: Date de fusion
|
||
§ plugin.team_release.pr.mergeAuthor: Fusionné par
|
||
`,he:`
|
||
§ plugin.team_release.sidebar: רשימת ריליסים
|
||
§ plugin.team_release.title: רשימת ריליסים
|
||
§ plugin.team_release.download: CHANGELOG.md
|
||
§ plugin.team_release.view.title: ריליס
|
||
§ plugin.team_release.view.from: תאריך יצירה
|
||
§ plugin.team_release.view.to: תאריך השלמה
|
||
§ plugin.team_release.view.pr: משימות
|
||
§ plugin.team_release.view.delay: ימי סקירה
|
||
§ plugin.team_release.view.waiting: ימים עד הריליס הבא
|
||
§ plugin.team_release.pr.task: משימה
|
||
§ plugin.team_release.pr.daysWorkOnTask: ימי עבודה
|
||
§ plugin.team_release.pr.daysInReview: ימי סקירה
|
||
§ plugin.team_release.pr.daysAwaitRelease: ימים עד סוף הריליס
|
||
§ plugin.team_release.pr.mergeDate: תאריך מיזוג
|
||
§ plugin.team_release.pr.mergeAuthor: מוזג על ידי
|
||
`,hi:`
|
||
§ plugin.team_release.sidebar: रिलीज़ सूची
|
||
§ plugin.team_release.title: रिलीज़ सूची
|
||
§ plugin.team_release.download: CHANGELOG.md
|
||
§ plugin.team_release.view.title: रिलीज़
|
||
§ plugin.team_release.view.from: निर्माण तिथि
|
||
§ plugin.team_release.view.to: पूर्णता तिथि
|
||
§ plugin.team_release.view.pr: कार्य
|
||
§ plugin.team_release.view.delay: समीक्षा के दिन
|
||
§ plugin.team_release.view.waiting: अगले रिलीज़ तक के दिन
|
||
§ plugin.team_release.pr.task: कार्य
|
||
§ plugin.team_release.pr.daysWorkOnTask: कार्य के दिन
|
||
§ plugin.team_release.pr.daysInReview: समीक्षा के दिन
|
||
§ plugin.team_release.pr.daysAwaitRelease: रिलीज़ समाप्ति तक के दिन
|
||
§ plugin.team_release.pr.mergeDate: मर्ज तिथि
|
||
§ plugin.team_release.pr.mergeAuthor: मर्ज किया गया
|
||
`,ja:`
|
||
§ plugin.team_release.sidebar: リリース一覧
|
||
§ plugin.team_release.title: リリース一覧
|
||
§ plugin.team_release.download: CHANGELOG.md
|
||
§ plugin.team_release.view.title: リリース
|
||
§ plugin.team_release.view.from: 作成日
|
||
§ plugin.team_release.view.to: 完了日
|
||
§ plugin.team_release.view.pr: タスク
|
||
§ plugin.team_release.view.delay: レビュー日数
|
||
§ plugin.team_release.view.waiting: 次のリリースまでの日数
|
||
§ plugin.team_release.pr.task: タスク
|
||
§ plugin.team_release.pr.daysWorkOnTask: 作業日数
|
||
§ plugin.team_release.pr.daysInReview: レビュー日数
|
||
§ plugin.team_release.pr.daysAwaitRelease: リリース終了までの日数
|
||
§ plugin.team_release.pr.mergeDate: マージ日
|
||
§ plugin.team_release.pr.mergeAuthor: マージした人
|
||
`,ko:`
|
||
§ plugin.team_release.sidebar: 릴리스 목록
|
||
§ plugin.team_release.title: 릴리스 목록
|
||
§ plugin.team_release.download: CHANGELOG.md
|
||
§ plugin.team_release.view.title: 릴리스
|
||
§ plugin.team_release.view.from: 생성일
|
||
§ plugin.team_release.view.to: 완료일
|
||
§ plugin.team_release.view.pr: 작업
|
||
§ plugin.team_release.view.delay: 리뷰 일수
|
||
§ plugin.team_release.view.waiting: 다음 릴리스까지 남은 일수
|
||
§ plugin.team_release.pr.task: 작업
|
||
§ plugin.team_release.pr.daysWorkOnTask: 작업 일수
|
||
§ plugin.team_release.pr.daysInReview: 리뷰 일수
|
||
§ plugin.team_release.pr.daysAwaitRelease: 릴리스 종료까지 남은 일수
|
||
§ plugin.team_release.pr.mergeDate: 머지 날짜
|
||
§ plugin.team_release.pr.mergeAuthor: 머지한 사람
|
||
`,pt:`
|
||
§ plugin.team_release.sidebar: Lista de lançamentos
|
||
§ plugin.team_release.title: Lista de lançamentos
|
||
§ plugin.team_release.download: CHANGELOG.md
|
||
§ plugin.team_release.view.title: Lançamento
|
||
§ plugin.team_release.view.from: Data de criação
|
||
§ plugin.team_release.view.to: Data de conclusão
|
||
§ plugin.team_release.view.pr: Tarefas
|
||
§ plugin.team_release.view.delay: Dias de revisão
|
||
§ plugin.team_release.view.waiting: Dias até o próximo lançamento
|
||
§ plugin.team_release.pr.task: Tarefa
|
||
§ plugin.team_release.pr.daysWorkOnTask: Dias trabalhados
|
||
§ plugin.team_release.pr.daysInReview: Dias de revisão
|
||
§ plugin.team_release.pr.daysAwaitRelease: Dias até o fim do lançamento
|
||
§ plugin.team_release.pr.mergeDate: Data do merge
|
||
§ plugin.team_release.pr.mergeAuthor: Mesclado por
|
||
`,ru:`
|
||
§ plugin.team_release.sidebar: Список релизов
|
||
§ plugin.team_release.title: Список релизов
|
||
§ plugin.team_release.download: CHANGELOG.md
|
||
§ plugin.team_release.view.title: Релиз
|
||
§ plugin.team_release.view.from: Дата создания
|
||
§ plugin.team_release.view.to: Дата завершения
|
||
§ plugin.team_release.view.pr: Задач
|
||
§ plugin.team_release.view.delay: Дней ревью
|
||
§ plugin.team_release.view.waiting: Дней до следующего релиза
|
||
§ plugin.team_release.pr.task: Задача
|
||
§ plugin.team_release.pr.daysWorkOnTask: Дней работы
|
||
§ plugin.team_release.pr.daysInReview: Дней ревью
|
||
§ plugin.team_release.pr.daysAwaitRelease: Дней до конца релиза
|
||
§ plugin.team_release.pr.mergeDate: Дата влития
|
||
§ plugin.team_release.pr.mergeAuthor: Влил
|
||
`,zh:`
|
||
§ plugin.team_release.sidebar: 发布列表
|
||
§ plugin.team_release.title: 发布列表
|
||
§ plugin.team_release.download: CHANGELOG.md
|
||
§ plugin.team_release.view.title: 发布
|
||
§ plugin.team_release.view.from: 创建日期
|
||
§ plugin.team_release.view.to: 完成日期
|
||
§ plugin.team_release.view.pr: 任务
|
||
§ plugin.team_release.view.delay: 评审天数
|
||
§ plugin.team_release.view.waiting: 距下次发布的天数
|
||
§ plugin.team_release.pr.task: 任务
|
||
§ plugin.team_release.pr.daysWorkOnTask: 工作天数
|
||
§ plugin.team_release.pr.daysInReview: 评审天数
|
||
§ plugin.team_release.pr.daysAwaitRelease: 距发布结束的天数
|
||
§ plugin.team_release.pr.mergeDate: 合入日期
|
||
§ plugin.team_release.pr.mergeAuthor: 合入者
|
||
`};function wb(t){return(e,s)=>{if(e==="marker")return s.to?[Math.floor(s.from/3.66),Math.floor(s.to/3.66)]:[Math.floor(s.from/3.66)];let r=s.from.month*30+s.from.dayInMonth,u=s.to.month*30+s.to.dayInMonth;return s.from.year!==s.to.year&&(s.from.year===t?u=365:r=0),[Math.floor(r/3.66),Math.floor(u/3.66)]}}function xb(t){return{year:t,lines:[]}}function R$(t){const e=new Map;return(t||[]).forEach(s=>{let n=s.from.year,r=e.get(n)||xb(n);r.lines.push(s),e.set(n,r),s.from.year!==s.to.year&&(n=s.to.year,r=e.get(n)||xb(n),r.lines.push(s),e.set(n,r))}),Array.from(e.values()).sort((s,n)=>n.year-s.year)}const E$=U(({content:t})=>{if(!t||!(t!=null&&t.length))return null;const e=R$(t),[s,n]=kc();return o.jsx(Ln,{template:"table",children:o.jsxs(ws,{rows:e,children:[o.jsx(w,{template:C.STRING,width:100,properties:"year"}),o.jsx(w,{title:()=>o.jsx(Wi,{markersLine:n,markersText:s,formatter:wb()}),template:r=>o.jsx(Wi,{mode:"circle",markersLine:n,lines:r.lines,formatter:wb(r.year)})})]})})});function I$({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const[r,u,c]=Mt(t,["daysWorkOnTask","daysInReview","daysAwaitRelease"]),p=Math.max(r,u,c);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:n,type:n==="print"?"cards":void 0,columnCount:n==="print"?2:void 0,fullScreenMode:"all",children:[o.jsx(w,{isSortable:!0,template:_=>o.jsx(Ri,{task:_}),title:"plugin.team_release.pr.task",properties:"task",width:120}),o.jsx(w,{width:40,properties:"prExternalId",template:_=>o.jsx(Hs,{prId:_})}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"daysWorkOnTask",width:40}),o.jsx(w,{isSortable:!0,title:"plugin.team_release.pr.daysWorkOnTask",properties:"daysWorkOnTask",minWidth:100,template:_=>o.jsx(ue,{value:_,max:p,suffix:"common.statistic.days"})}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"daysInReview",width:40}),o.jsx(w,{isSortable:!0,title:"plugin.team_release.pr.daysInReview",properties:"daysInReview",minWidth:100,template:_=>o.jsx(ue,{value:_,max:p,suffix:"common.statistic.days"})}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"daysAwaitRelease",width:40}),o.jsx(w,{isSortable:!0,title:"plugin.team_release.pr.daysAwaitRelease",properties:"daysAwaitRelease",minWidth:100,template:_=>o.jsx(ue,{value:_,max:p,suffix:"common.statistic.days"})}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_release.pr.mergeDate",properties:"dateMerge",formatter:oe,width:130}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_release.pr.mergeAuthor",properties:"author",width:250})]})}function q$({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const r=A.statisticsByCommits.pr.totalInfoByName,[u,c]=Mt(t,["delayInDays","daysAwaitNextRelease"]),p=Math.max(u,c);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,template:C.DETAILS,width:40,formatter:_=>{const h=_.prIds.map(f=>r.get(f)).filter(f=>f);return o.jsxs(be,{content:h,children:[o.jsx(I$,{mode:"details"}),o.jsx(fe,{})]})}}),o.jsx(w,{isFixed:!0,template:C.STRING,title:"plugin.team_release.view.title",properties:"title",width:200}),o.jsx(w,{template:C.STRING,title:"plugin.team_release.view.from",width:150,properties:"dateCreate",formatter:oe}),o.jsx(w,{template:C.STRING,title:"plugin.team_release.view.to",width:150,properties:"dateMerge",formatter:oe}),o.jsx(w,{isSortable:!0,template:C.SHORT_NUMBER,title:"plugin.team_release.view.pr",properties:"totalPR"}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"delayInDays"}),o.jsx(w,{isSortable:!0,title:"plugin.team_release.view.delay",properties:"delayInDays",minWidth:170,template:_=>o.jsx(ue,{value:_,max:p,suffix:"plugin.team_release.view.chart"})}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"daysAwaitNextRelease"}),o.jsx(w,{isSortable:!0,title:"plugin.team_release.view.waiting",properties:"daysAwaitNextRelease",minWidth:170,template:_=>o.jsx(ue,{value:_,max:p,suffix:"plugin.team_release.view.chart"})})]})}function O$(t){return t.reduce((e,s)=>{const n=s.type||"";return e[n]||(e[n]=[]),e[n].push(s),e},{})}function $$(t,e){var _,h;const s=((_=t.task)==null?void 0:_[0])==="#"?t.task.replace("#",""):t.task,n=e.get(s),r=t.message||"";let u=r.substring(r.lastIndexOf(":")+2).replace(t.task,"").trim()||(n==null?void 0:n.description)||"";const c=((h=de==null?void 0:de.config)==null?void 0:h.prefixForTask)||"/",p=(n==null?void 0:n.task)||s;return u=u.indexOf("pull request")!==-1?(n==null?void 0:n.comments)||"":u,!p&&!u?"":`- [${p}](${c}${p}) ${Lu(u)}`}function L$(t,e){const s=O$(t);return Object.keys(s).sort().map(n=>{const r=s[n].map(c=>$$(c,e)).filter(c=>c),u=Array.from(new Set(r)).join(`
|
||
`);return n?`
|
||
### ${n}
|
||
${u}`:`
|
||
${u}`}).join(`
|
||
`)}function B$(){const t=A.statisticsByCommits.release.totalInfo,e=A.statisticsByCommits.pr.totalInfoByName;return`# Change Log
|
||
${t.map(n=>{const r=Pd(n.dateMerge),u=n.prIds.map(_=>e.get(_)).filter(_=>_),c=A.statisticsByCommits.tasks.totalInfoByName,p=L$(u,c);return`
|
||
## [${n.title}] - ${r}
|
||
${p}`}).join(`
|
||
`)}`}function P$(){const t=B$(),e="text/csv;charset=windows-utf-8;",s=new Blob([t],{type:e});Ku(s,"CHANGELOG.md")}const W$={team_release_download:"team_release_download"},F$=U(({mode:t})=>{const{t:e}=ie(),s=A.statisticsByCommits.release.totalInfo;return(s==null?void 0:s.length)<2?t!=="print"?o.jsx(Le,{}):null:o.jsxs(o.Fragment,{children:[o.jsx(E$,{content:s}),o.jsx(Y,{value:t!=="print",children:o.jsx(Je,{mode:["slim"],className:W$.team_release_download,onClick:P$,children:e("plugin.team_release.download")})}),o.jsx(Y,{value:t==="print",children:o.jsx(G,{title:"plugin.team_release.title"})}),o.jsxs(be,{content:s,mode:t,watch:`${t}${A.hash}`,children:[o.jsx(q$,{mode:t,rowsForExcel:s}),o.jsx(fe,{})]})]})});let U$=(Dl=class{constructor(){this.dependencies=["release","pr","tasks"]}getMenuItems(){return[{id:"release",group:40,order:160,link:"/team/release",title:"plugin.team_release.sidebar",icon:"./assets/menu/release.svg"}]}getPage(e,s){return e==="/team/release"?o.jsx(F$,{mode:s==null?void 0:s.mode}):void 0}getTranslations(){return M$}},Dl.id="team_release",Dl);const G$={ar:`
|
||
§ plugin.team_scope.sidebar: الميزات
|
||
§ plugin.team_scope.title: إحصائيات الميزات
|
||
§ plugin.team_scope.scope: ميزة
|
||
§ plugin.team_scope.unknown: (الميزة غير مُوسومة)
|
||
§ plugin.team_scope.days: أيام العمل
|
||
§ plugin.team_scope.authorsDays: أيام-شخص
|
||
§ plugin.team_scope.tasks: المهام
|
||
§ plugin.team_scope.lastCommit: آخر commit
|
||
§ plugin.team_scope.commits: Commits
|
||
§ plugin.team_scope.authors: المساهمة الشخصية
|
||
§ plugin.team_scope.cost: التكلفة
|
||
§ plugin.team_scope.details.cards: معلومات عامة عن الميزة
|
||
§ plugin.team_scope.details.charts: من ساهم
|
||
§ plugin.team_scope.details.tasks: قائمة المهام التي أُجريت ضمنها تغييرات
|
||
§ plugin.team_scope.details.commits: قائمة commits المطابقة لعوامل تصفية البحث
|
||
§ plugin.team_scope.cards.firstCommit: أول commit
|
||
§ plugin.team_scope.cards.lastCommit: آخر commit
|
||
§ plugin.team_scope.cards.totalDays.title: المدة الإجمالية للعمل
|
||
§ plugin.team_scope.cards.totalDays.description: إجمالي وقت التطوير من أول commit إلى آخره.
|
||
§ plugin.team_scope.cards.totalDaysWorked.title: الأيام الفعلية للعمل
|
||
§ plugin.team_scope.cards.totalDaysWorked.description: الأيام التي أُنشئت فيها الـ commits التي عُثر عليها.
|
||
§ plugin.team_scope.cards.totalCommits.title: commits التي عُثر عليها
|
||
§ plugin.team_scope.cards.totalCommits.description: Commits المطابقة لعامل تصفية البحث المحدد أعلاه. تعتمد الحسابات اللاحقة عليها.
|
||
§ plugin.team_scope.cards.totalTasks.title: المهام المتأثرة
|
||
§ plugin.team_scope.cards.totalTasks.description: معرفات المهام الفريدة الموجودة في commit messages.
|
||
§ plugin.team_scope.cards.authorsDays.title: أيام-شخص
|
||
§ plugin.team_scope.cards.authorsDays.description: وحدة زمن عمل تعادل يوم عمل واحد لموظف واحد.
|
||
§ plugin.team_scope.cards.cost.title: التكلفة التقديرية
|
||
§ plugin.team_scope.cards.cost.description: تُضرب أيام-شخص المستغرقة في متوسط الراتب.
|
||
§ plugin.team_scope.chart.commits.title: من أنشأ commits
|
||
§ plugin.team_scope.chart.tasks.title: من أنجز المهام
|
||
§ plugin.team_scope.chart.types.title: أنواع commit
|
||
§ plugin.team_scope.chart.companies.title: الشركات التي أُنشئت commits نيابة عنها
|
||
§ plugin.team_scope.calculator.title: حاسبة تقدير الميزة
|
||
§ plugin.team_scope.calculator.description: صفِّ الـ commits المطلوبة باستخدام البحث. ستجمعها وحدة الإحصائيات في ميزة وتعرض بياناتها.
|
||
§ plugin.team_scope.tasks.task: مهمة
|
||
§ plugin.team_scope.tasks.types: الأنواع
|
||
§ plugin.team_scope.tasks.description: الوصف
|
||
§ plugin.team_scope.commits.author: موظف
|
||
§ plugin.team_scope.commits.message: Commit message
|
||
`,de:`
|
||
§ plugin.team_scope.sidebar: Funktionen
|
||
§ plugin.team_scope.title: Funktionsstatistiken
|
||
§ plugin.team_scope.scope: Funktion
|
||
§ plugin.team_scope.unknown: (Funktion ist nicht gekennzeichnet)
|
||
§ plugin.team_scope.days: Arbeitstage
|
||
§ plugin.team_scope.authorsDays: Personentage
|
||
§ plugin.team_scope.tasks: Aufgaben
|
||
§ plugin.team_scope.lastCommit: Letzter commit
|
||
§ plugin.team_scope.commits: Commits
|
||
§ plugin.team_scope.authors: Persönlicher Beitrag
|
||
§ plugin.team_scope.cost: Kosten
|
||
§ plugin.team_scope.details.cards: Allgemeine Informationen zur Funktion
|
||
§ plugin.team_scope.details.charts: Wer hat beigetragen
|
||
§ plugin.team_scope.details.tasks: Liste der Aufgaben, in deren Rahmen Änderungen vorgenommen wurden
|
||
§ plugin.team_scope.details.commits: Liste der commits, die den Suchfiltern entsprechen
|
||
§ plugin.team_scope.cards.firstCommit: erster commit
|
||
§ plugin.team_scope.cards.lastCommit: letzter commit
|
||
§ plugin.team_scope.cards.totalDays.title: gesamte Arbeitsdauer
|
||
§ plugin.team_scope.cards.totalDays.description: Gesamte Entwicklungszeit vom ersten bis zum letzten commit.
|
||
§ plugin.team_scope.cards.totalDaysWorked.title: tatsächlich gearbeitete Tage
|
||
§ plugin.team_scope.cards.totalDaysWorked.description: Tage, an denen die gefundenen commits erstellt wurden.
|
||
§ plugin.team_scope.cards.totalCommits.title: gefundene commits
|
||
§ plugin.team_scope.cards.totalCommits.description: Commits, die dem oben angegebenen Suchfilter entsprechen. Weitere Berechnungen basieren auf ihnen.
|
||
§ plugin.team_scope.cards.totalTasks.title: betroffene Aufgaben
|
||
§ plugin.team_scope.cards.totalTasks.description: Eindeutige Aufgaben-IDs, die in commit messages gefunden wurden.
|
||
§ plugin.team_scope.cards.authorsDays.title: Personentage
|
||
§ plugin.team_scope.cards.authorsDays.description: Eine Einheit der Arbeitszeit, die einem Arbeitstag eines Mitarbeiters entspricht.
|
||
§ plugin.team_scope.cards.cost.title: geschätzte Kosten
|
||
§ plugin.team_scope.cards.cost.description: Aufgewendete Personentage werden mit dem Durchschnittsgehalt multipliziert.
|
||
§ plugin.team_scope.chart.commits.title: Wer hat commits erstellt
|
||
§ plugin.team_scope.chart.tasks.title: Wer hat Aufgaben erledigt
|
||
§ plugin.team_scope.chart.types.title: Commit-Typen
|
||
§ plugin.team_scope.chart.companies.title: Unternehmen, in deren Namen commits erstellt wurden
|
||
§ plugin.team_scope.calculator.title: Kalkulator zur Funktionsschätzung
|
||
§ plugin.team_scope.calculator.description: Filtern Sie die benötigten commits über die Suche. Das Statistikmodul gruppiert sie zu einer Funktion und zeigt deren Daten.
|
||
§ plugin.team_scope.tasks.task: Aufgabe
|
||
§ plugin.team_scope.tasks.types: Typen
|
||
§ plugin.team_scope.tasks.description: Beschreibung
|
||
§ plugin.team_scope.commits.author: Mitarbeiter
|
||
§ plugin.team_scope.commits.message: Commit message
|
||
`,en:`
|
||
§ plugin.team_scope.sidebar: Features
|
||
§ plugin.team_scope.title: Feature statistics
|
||
§ plugin.team_scope.scope: Feature
|
||
§ plugin.team_scope.unknown: (feature is not labeled)
|
||
§ plugin.team_scope.days: Work days
|
||
§ plugin.team_scope.authorsDays: Person days
|
||
§ plugin.team_scope.tasks: Tasks
|
||
§ plugin.team_scope.lastCommit: Last commit
|
||
§ plugin.team_scope.commits: Commits
|
||
§ plugin.team_scope.authors: Personal contribution
|
||
§ plugin.team_scope.cost: Cost
|
||
§ plugin.team_scope.details.cards: General feature information
|
||
§ plugin.team_scope.details.charts: Who contributed
|
||
§ plugin.team_scope.details.tasks: List of tasks within which changes were made
|
||
§ plugin.team_scope.details.commits: List of commits matching the search filters
|
||
§ plugin.team_scope.cards.firstCommit: first commit
|
||
§ plugin.team_scope.cards.lastCommit: last commit
|
||
§ plugin.team_scope.cards.totalDays.title: total work duration
|
||
§ plugin.team_scope.cards.totalDays.description: Total development time from the first to the last commit.
|
||
§ plugin.team_scope.cards.totalDaysWorked.title: actual days worked
|
||
§ plugin.team_scope.cards.totalDaysWorked.description: Days when the found commits were made.
|
||
§ plugin.team_scope.cards.totalCommits.title: commits found
|
||
§ plugin.team_scope.cards.totalCommits.description: Commits that match the search filter specified above. Further calculations are based on them.
|
||
§ plugin.team_scope.cards.totalTasks.title: tasks affected
|
||
§ plugin.team_scope.cards.totalTasks.description: Unique task IDs found in commit messages.
|
||
§ plugin.team_scope.cards.authorsDays.title: person days
|
||
§ plugin.team_scope.cards.authorsDays.description: A unit of working time equal to one day of work by one staff member.
|
||
§ plugin.team_scope.cards.cost.title: estimated cost
|
||
§ plugin.team_scope.cards.cost.description: Person days spent are multiplied by the average salary.
|
||
§ plugin.team_scope.chart.commits.title: Who made commits
|
||
§ plugin.team_scope.chart.tasks.title: Who did tasks
|
||
§ plugin.team_scope.chart.types.title: Commit types
|
||
§ plugin.team_scope.chart.companies.title: Companies on whose behalf commits were made
|
||
§ plugin.team_scope.calculator.title: Feature estimation calculator
|
||
§ plugin.team_scope.calculator.description: Filter the required commits using search. The statistics module will group them into a feature and show its data.
|
||
§ plugin.team_scope.tasks.task: Task
|
||
§ plugin.team_scope.tasks.types: Types
|
||
§ plugin.team_scope.tasks.description: Description
|
||
§ plugin.team_scope.commits.author: Staff member
|
||
§ plugin.team_scope.commits.message: Commit message
|
||
`,es:`
|
||
§ plugin.team_scope.sidebar: Funciones
|
||
§ plugin.team_scope.title: Estadísticas de funciones
|
||
§ plugin.team_scope.scope: Función
|
||
§ plugin.team_scope.unknown: (la función no está etiquetada)
|
||
§ plugin.team_scope.days: Días laborables
|
||
§ plugin.team_scope.authorsDays: Días-persona
|
||
§ plugin.team_scope.tasks: Tareas
|
||
§ plugin.team_scope.lastCommit: Último commit
|
||
§ plugin.team_scope.commits: Commits
|
||
§ plugin.team_scope.authors: Contribución personal
|
||
§ plugin.team_scope.cost: Costo
|
||
§ plugin.team_scope.details.cards: Información general de la función
|
||
§ plugin.team_scope.details.charts: Quién contribuyó
|
||
§ plugin.team_scope.details.tasks: Lista de tareas en cuyo marco se realizaron cambios
|
||
§ plugin.team_scope.details.commits: Lista de commits que coinciden con los filtros de búsqueda
|
||
§ plugin.team_scope.cards.firstCommit: primer commit
|
||
§ plugin.team_scope.cards.lastCommit: último commit
|
||
§ plugin.team_scope.cards.totalDays.title: duración total del trabajo
|
||
§ plugin.team_scope.cards.totalDays.description: Tiempo total de desarrollo desde el primer hasta el último commit.
|
||
§ plugin.team_scope.cards.totalDaysWorked.title: días trabajados reales
|
||
§ plugin.team_scope.cards.totalDaysWorked.description: Días en los que se realizaron los commits encontrados.
|
||
§ plugin.team_scope.cards.totalCommits.title: commits encontrados
|
||
§ plugin.team_scope.cards.totalCommits.description: Commits que coinciden con el filtro de búsqueda especificado arriba. Los cálculos posteriores se basan en ellos.
|
||
§ plugin.team_scope.cards.totalTasks.title: tareas afectadas
|
||
§ plugin.team_scope.cards.totalTasks.description: Identificadores únicos de tareas encontrados en commit messages.
|
||
§ plugin.team_scope.cards.authorsDays.title: días-persona
|
||
§ plugin.team_scope.cards.authorsDays.description: Unidad de tiempo de trabajo equivalente a un día de trabajo de un empleado.
|
||
§ plugin.team_scope.cards.cost.title: costo estimado
|
||
§ plugin.team_scope.cards.cost.description: Los días-persona invertidos se multiplican por el salario promedio.
|
||
§ plugin.team_scope.chart.commits.title: Quién realizó commits
|
||
§ plugin.team_scope.chart.tasks.title: Quién realizó las tareas
|
||
§ plugin.team_scope.chart.types.title: Tipos de commit
|
||
§ plugin.team_scope.chart.companies.title: Empresas en cuyo nombre se realizaron commits
|
||
§ plugin.team_scope.calculator.title: Calculadora de estimación de funciones
|
||
§ plugin.team_scope.calculator.description: Filtre los commits necesarios mediante la búsqueda. El módulo de estadísticas los agrupará en una función y mostrará sus datos.
|
||
§ plugin.team_scope.tasks.task: Tarea
|
||
§ plugin.team_scope.tasks.types: Tipos
|
||
§ plugin.team_scope.tasks.description: Descripción
|
||
§ plugin.team_scope.commits.author: Empleado
|
||
§ plugin.team_scope.commits.message: Commit message
|
||
`,fr:`
|
||
§ plugin.team_scope.sidebar: Fonctionnalités
|
||
§ plugin.team_scope.title: Statistiques des fonctionnalités
|
||
§ plugin.team_scope.scope: Fonctionnalité
|
||
§ plugin.team_scope.unknown: (la fonctionnalité n’est pas étiquetée)
|
||
§ plugin.team_scope.days: Jours ouvrés
|
||
§ plugin.team_scope.authorsDays: Jours-personne
|
||
§ plugin.team_scope.tasks: Tâches
|
||
§ plugin.team_scope.lastCommit: Dernier commit
|
||
§ plugin.team_scope.commits: Commits
|
||
§ plugin.team_scope.authors: Contribution personnelle
|
||
§ plugin.team_scope.cost: Coût
|
||
§ plugin.team_scope.details.cards: Informations générales sur la fonctionnalité
|
||
§ plugin.team_scope.details.charts: Qui a contribué
|
||
§ plugin.team_scope.details.tasks: Liste des tâches dans le cadre desquelles des modifications ont été apportées
|
||
§ plugin.team_scope.details.commits: Liste des commits correspondant aux filtres de recherche
|
||
§ plugin.team_scope.cards.firstCommit: premier commit
|
||
§ plugin.team_scope.cards.lastCommit: dernier commit
|
||
§ plugin.team_scope.cards.totalDays.title: durée totale du travail
|
||
§ plugin.team_scope.cards.totalDays.description: Temps total de développement du premier au dernier commit.
|
||
§ plugin.team_scope.cards.totalDaysWorked.title: jours réellement travaillés
|
||
§ plugin.team_scope.cards.totalDaysWorked.description: Jours où les commits trouvés ont été effectués.
|
||
§ plugin.team_scope.cards.totalCommits.title: commits trouvés
|
||
§ plugin.team_scope.cards.totalCommits.description: Commits qui correspondent au filtre de recherche indiqué ci-dessus. Les calculs ultérieurs s’appuient sur eux.
|
||
§ plugin.team_scope.cards.totalTasks.title: tâches concernées
|
||
§ plugin.team_scope.cards.totalTasks.description: Identifiants uniques de tâches trouvés dans les commit messages.
|
||
§ plugin.team_scope.cards.authorsDays.title: jours-personne
|
||
§ plugin.team_scope.cards.authorsDays.description: Unité de temps de travail égale à une journée de travail d’un salarié.
|
||
§ plugin.team_scope.cards.cost.title: coût estimé
|
||
§ plugin.team_scope.cards.cost.description: Les jours-personne consacrés sont multipliés par le salaire moyen.
|
||
§ plugin.team_scope.chart.commits.title: Qui a effectué des commits
|
||
§ plugin.team_scope.chart.tasks.title: Qui a réalisé les tâches
|
||
§ plugin.team_scope.chart.types.title: Types de commit
|
||
§ plugin.team_scope.chart.companies.title: Entreprises au nom desquelles des commits ont été effectués
|
||
§ plugin.team_scope.calculator.title: Calculateur d’estimation de fonctionnalité
|
||
§ plugin.team_scope.calculator.description: Filtrez les commits requis à l’aide de la recherche. Le module de statistiques les regroupera en une fonctionnalité et en affichera les données.
|
||
§ plugin.team_scope.tasks.task: Tâche
|
||
§ plugin.team_scope.tasks.types: Types
|
||
§ plugin.team_scope.tasks.description: Description
|
||
§ plugin.team_scope.commits.author: Salarié
|
||
§ plugin.team_scope.commits.message: Commit message
|
||
`,he:`
|
||
§ plugin.team_scope.sidebar: תכונות
|
||
§ plugin.team_scope.title: סטטיסטיקת תכונות
|
||
§ plugin.team_scope.scope: תכונה
|
||
§ plugin.team_scope.unknown: (התכונה אינה מסומנת)
|
||
§ plugin.team_scope.days: ימי עבודה
|
||
§ plugin.team_scope.authorsDays: ימי-אדם
|
||
§ plugin.team_scope.tasks: משימות
|
||
§ plugin.team_scope.lastCommit: commit אחרון
|
||
§ plugin.team_scope.commits: Commits
|
||
§ plugin.team_scope.authors: תרומה אישית
|
||
§ plugin.team_scope.cost: עלות
|
||
§ plugin.team_scope.details.cards: מידע כללי על התכונה
|
||
§ plugin.team_scope.details.charts: מי תרם
|
||
§ plugin.team_scope.details.tasks: רשימת משימות שבמסגרתן בוצעו שינויים
|
||
§ plugin.team_scope.details.commits: רשימת commits התואמים למסנני החיפוש
|
||
§ plugin.team_scope.cards.firstCommit: commit ראשון
|
||
§ plugin.team_scope.cards.lastCommit: commit אחרון
|
||
§ plugin.team_scope.cards.totalDays.title: משך העבודה הכולל
|
||
§ plugin.team_scope.cards.totalDays.description: זמן הפיתוח הכולל מה-commit הראשון ועד האחרון.
|
||
§ plugin.team_scope.cards.totalDaysWorked.title: ימים שעבדו בפועל
|
||
§ plugin.team_scope.cards.totalDaysWorked.description: ימים שבהם נוצרו ה-commits שנמצאו.
|
||
§ plugin.team_scope.cards.totalCommits.title: commits שנמצאו
|
||
§ plugin.team_scope.cards.totalCommits.description: Commits התואמים למסנן החיפוש שצוין למעלה. החישובים הבאים מבוססים עליהם.
|
||
§ plugin.team_scope.cards.totalTasks.title: משימות שהושפעו
|
||
§ plugin.team_scope.cards.totalTasks.description: מזהי משימות ייחודיים שנמצאו ב-commit messages.
|
||
§ plugin.team_scope.cards.authorsDays.title: ימי-אדם
|
||
§ plugin.team_scope.cards.authorsDays.description: יחידת זמן עבודה השווה ליום עבודה אחד של עובד אחד.
|
||
§ plugin.team_scope.cards.cost.title: עלות משוערת
|
||
§ plugin.team_scope.cards.cost.description: ימי-אדם שהושקעו מוכפלים בשכר הממוצע.
|
||
§ plugin.team_scope.chart.commits.title: מי יצר commits
|
||
§ plugin.team_scope.chart.tasks.title: מי ביצע משימות
|
||
§ plugin.team_scope.chart.types.title: סוגי commit
|
||
§ plugin.team_scope.chart.companies.title: חברות שבשמן נוצרו commits
|
||
§ plugin.team_scope.calculator.title: מחשבון הערכת תכונה
|
||
§ plugin.team_scope.calculator.description: סננו את ה-commits הנדרשים באמצעות החיפוש. מודול הסטטיסטיקה יקבץ אותם לתכונה ויציג את הנתונים שלה.
|
||
§ plugin.team_scope.tasks.task: משימה
|
||
§ plugin.team_scope.tasks.types: סוגים
|
||
§ plugin.team_scope.tasks.description: תיאור
|
||
§ plugin.team_scope.commits.author: עובד
|
||
§ plugin.team_scope.commits.message: Commit message
|
||
`,hi:`
|
||
§ plugin.team_scope.sidebar: फीचर
|
||
§ plugin.team_scope.title: फीचर सांख्यिकी
|
||
§ plugin.team_scope.scope: फीचर
|
||
§ plugin.team_scope.unknown: (फीचर लेबल नहीं है)
|
||
§ plugin.team_scope.days: कार्य दिवस
|
||
§ plugin.team_scope.authorsDays: मानव-दिवस
|
||
§ plugin.team_scope.tasks: कार्य
|
||
§ plugin.team_scope.lastCommit: अंतिम commit
|
||
§ plugin.team_scope.commits: Commits
|
||
§ plugin.team_scope.authors: व्यक्तिगत योगदान
|
||
§ plugin.team_scope.cost: लागत
|
||
§ plugin.team_scope.details.cards: फीचर की सामान्य जानकारी
|
||
§ plugin.team_scope.details.charts: किसने योगदान दिया
|
||
§ plugin.team_scope.details.tasks: उन कार्यों की सूची जिनके अंतर्गत परिवर्तन किए गए
|
||
§ plugin.team_scope.details.commits: खोज फ़िल्टर से मेल खाने वाले commits की सूची
|
||
§ plugin.team_scope.cards.firstCommit: पहला commit
|
||
§ plugin.team_scope.cards.lastCommit: अंतिम commit
|
||
§ plugin.team_scope.cards.totalDays.title: कुल कार्य अवधि
|
||
§ plugin.team_scope.cards.totalDays.description: पहले से अंतिम commit तक कुल विकास समय।
|
||
§ plugin.team_scope.cards.totalDaysWorked.title: वास्तव में काम किए गए दिन
|
||
§ plugin.team_scope.cards.totalDaysWorked.description: वे दिन जब पाए गए commits बनाए गए।
|
||
§ plugin.team_scope.cards.totalCommits.title: पाए गए commits
|
||
§ plugin.team_scope.cards.totalCommits.description: Commits जो ऊपर निर्दिष्ट खोज फ़िल्टर से मेल खाते हैं। आगे की गणना उन्हीं पर आधारित है।
|
||
§ plugin.team_scope.cards.totalTasks.title: प्रभावित कार्य
|
||
§ plugin.team_scope.cards.totalTasks.description: commit messages में पाए गए अद्वितीय कार्य ID.
|
||
§ plugin.team_scope.cards.authorsDays.title: मानव-दिवस
|
||
§ plugin.team_scope.cards.authorsDays.description: कार्य समय की इकाई, जो एक कर्मचारी के एक दिन के कार्य के बराबर होती है।
|
||
§ plugin.team_scope.cards.cost.title: अनुमानित लागत
|
||
§ plugin.team_scope.cards.cost.description: खर्च किए गए मानव-दिवस को औसत वेतन से गुणा किया जाता है।
|
||
§ plugin.team_scope.chart.commits.title: किसने commits बनाए
|
||
§ plugin.team_scope.chart.tasks.title: किसने कार्य किए
|
||
§ plugin.team_scope.chart.types.title: Commit प्रकार
|
||
§ plugin.team_scope.chart.companies.title: कंपनियाँ जिनकी ओर से commits बनाए गए
|
||
§ plugin.team_scope.calculator.title: फीचर अनुमान कैलकुलेटर
|
||
§ plugin.team_scope.calculator.description: खोज का उपयोग करके आवश्यक commits को फ़िल्टर करें। सांख्यिकी मॉड्यूल उन्हें एक फीचर में समूहित करेगा और उसका डेटा दिखाएगा।
|
||
§ plugin.team_scope.tasks.task: कार्य
|
||
§ plugin.team_scope.tasks.types: प्रकार
|
||
§ plugin.team_scope.tasks.description: विवरण
|
||
§ plugin.team_scope.commits.author: कर्मचारी
|
||
§ plugin.team_scope.commits.message: Commit message
|
||
`,ja:`
|
||
§ plugin.team_scope.sidebar: 機能
|
||
§ plugin.team_scope.title: 機能の統計
|
||
§ plugin.team_scope.scope: 機能
|
||
§ plugin.team_scope.unknown: (機能がラベル付けされていません)
|
||
§ plugin.team_scope.days: 稼働日
|
||
§ plugin.team_scope.authorsDays: 人日
|
||
§ plugin.team_scope.tasks: タスク
|
||
§ plugin.team_scope.lastCommit: 最後の commit
|
||
§ plugin.team_scope.commits: Commits
|
||
§ plugin.team_scope.authors: 個人の貢献
|
||
§ plugin.team_scope.cost: コスト
|
||
§ plugin.team_scope.details.cards: 機能の概要情報
|
||
§ plugin.team_scope.details.charts: 誰が貢献したか
|
||
§ plugin.team_scope.details.tasks: 変更が行われたタスクの一覧
|
||
§ plugin.team_scope.details.commits: 検索フィルターに一致する commits の一覧
|
||
§ plugin.team_scope.cards.firstCommit: 最初の commit
|
||
§ plugin.team_scope.cards.lastCommit: 最後の commit
|
||
§ plugin.team_scope.cards.totalDays.title: 作業期間の合計
|
||
§ plugin.team_scope.cards.totalDays.description: 最初の commit から最後の commit までの開発期間の合計。
|
||
§ plugin.team_scope.cards.totalDaysWorked.title: 実際に作業した日数
|
||
§ plugin.team_scope.cards.totalDaysWorked.description: 見つかった commits が作成された日。
|
||
§ plugin.team_scope.cards.totalCommits.title: 見つかった commits
|
||
§ plugin.team_scope.cards.totalCommits.description: 上記で指定した検索フィルターに一致する Commits。以降の計算はこれらに基づきます。
|
||
§ plugin.team_scope.cards.totalTasks.title: 影響を受けたタスク
|
||
§ plugin.team_scope.cards.totalTasks.description: commit messages で見つかった一意のタスク ID。
|
||
§ plugin.team_scope.cards.authorsDays.title: 人日
|
||
§ plugin.team_scope.cards.authorsDays.description: スタッフ 1 名が 1 日作業した時間に相当する作業時間の単位。
|
||
§ plugin.team_scope.cards.cost.title: 推定コスト
|
||
§ plugin.team_scope.cards.cost.description: 投入した人日に平均給与を乗じます。
|
||
§ plugin.team_scope.chart.commits.title: 誰が commits を作成したか
|
||
§ plugin.team_scope.chart.tasks.title: 誰がタスクを行ったか
|
||
§ plugin.team_scope.chart.types.title: Commit の種類
|
||
§ plugin.team_scope.chart.companies.title: どの企業の名義で commits が作成されたか
|
||
§ plugin.team_scope.calculator.title: 機能見積もり計算機
|
||
§ plugin.team_scope.calculator.description: 検索で必要な commits を絞り込んでください。統計モジュールがそれらを機能にまとめ、そのデータを表示します。
|
||
§ plugin.team_scope.tasks.task: タスク
|
||
§ plugin.team_scope.tasks.types: 種類
|
||
§ plugin.team_scope.tasks.description: 説明
|
||
§ plugin.team_scope.commits.author: スタッフ
|
||
§ plugin.team_scope.commits.message: Commit message
|
||
`,ko:`
|
||
§ plugin.team_scope.sidebar: 기능
|
||
§ plugin.team_scope.title: 기능 통계
|
||
§ plugin.team_scope.scope: 기능
|
||
§ plugin.team_scope.unknown: (기능이 표시되지 않음)
|
||
§ plugin.team_scope.days: 근무일
|
||
§ plugin.team_scope.authorsDays: 인일
|
||
§ plugin.team_scope.tasks: 작업
|
||
§ plugin.team_scope.lastCommit: 마지막 commit
|
||
§ plugin.team_scope.commits: Commits
|
||
§ plugin.team_scope.authors: 개인 기여
|
||
§ plugin.team_scope.cost: 비용
|
||
§ plugin.team_scope.details.cards: 기능 일반 정보
|
||
§ plugin.team_scope.details.charts: 누가 기여했는지
|
||
§ plugin.team_scope.details.tasks: 변경이 이루어진 작업 목록
|
||
§ plugin.team_scope.details.commits: 검색 필터와 일치하는 commits 목록
|
||
§ plugin.team_scope.cards.firstCommit: 첫 번째 commit
|
||
§ plugin.team_scope.cards.lastCommit: 마지막 commit
|
||
§ plugin.team_scope.cards.totalDays.title: 총 작업 기간
|
||
§ plugin.team_scope.cards.totalDays.description: 첫 번째 commit부터 마지막 commit까지의 총 개발 시간입니다.
|
||
§ plugin.team_scope.cards.totalDaysWorked.title: 실제 근무일
|
||
§ plugin.team_scope.cards.totalDaysWorked.description: 발견된 commits가 생성된 날입니다.
|
||
§ plugin.team_scope.cards.totalCommits.title: 발견된 commits
|
||
§ plugin.team_scope.cards.totalCommits.description: 위에 지정한 검색 필터와 일치하는 Commits입니다. 이후 계산은 이를 기준으로 합니다.
|
||
§ plugin.team_scope.cards.totalTasks.title: 영향을 받은 작업
|
||
§ plugin.team_scope.cards.totalTasks.description: commit messages에서 발견된 고유 작업 ID입니다.
|
||
§ plugin.team_scope.cards.authorsDays.title: 인일
|
||
§ plugin.team_scope.cards.authorsDays.description: 직원 한 명이 하루 동안 일한 시간에 해당하는 근무 시간 단위입니다.
|
||
§ plugin.team_scope.cards.cost.title: 추정 비용
|
||
§ plugin.team_scope.cards.cost.description: 투입된 인일에 평균 급여를 곱합니다.
|
||
§ plugin.team_scope.chart.commits.title: 누가 commits를 만들었는지
|
||
§ plugin.team_scope.chart.tasks.title: 누가 작업을 수행했는지
|
||
§ plugin.team_scope.chart.types.title: Commit 유형
|
||
§ plugin.team_scope.chart.companies.title: 누구의 명의로 commits가 작성되었는지
|
||
§ plugin.team_scope.calculator.title: 기능 추정 계산기
|
||
§ plugin.team_scope.calculator.description: 검색으로 필요한 commits를 필터링하십시오. 통계 모듈이 이를 기능으로 묶어 데이터를 표시합니다.
|
||
§ plugin.team_scope.tasks.task: 작업
|
||
§ plugin.team_scope.tasks.types: 유형
|
||
§ plugin.team_scope.tasks.description: 설명
|
||
§ plugin.team_scope.commits.author: 직원
|
||
§ plugin.team_scope.commits.message: Commit message
|
||
`,pt:`
|
||
§ plugin.team_scope.sidebar: Funcionalidades
|
||
§ plugin.team_scope.title: Estatísticas de funcionalidades
|
||
§ plugin.team_scope.scope: Funcionalidade
|
||
§ plugin.team_scope.unknown: (a funcionalidade não está rotulada)
|
||
§ plugin.team_scope.days: Dias úteis
|
||
§ plugin.team_scope.authorsDays: Dias-pessoa
|
||
§ plugin.team_scope.tasks: Tarefas
|
||
§ plugin.team_scope.lastCommit: Último commit
|
||
§ plugin.team_scope.commits: Commits
|
||
§ plugin.team_scope.authors: Contribuição pessoal
|
||
§ plugin.team_scope.cost: Custo
|
||
§ plugin.team_scope.details.cards: Informações gerais da funcionalidade
|
||
§ plugin.team_scope.details.charts: Quem contribuiu
|
||
§ plugin.team_scope.details.tasks: Lista de tarefas no âmbito das quais foram feitas alterações
|
||
§ plugin.team_scope.details.commits: Lista de commits que correspondem aos filtros de pesquisa
|
||
§ plugin.team_scope.cards.firstCommit: primeiro commit
|
||
§ plugin.team_scope.cards.lastCommit: último commit
|
||
§ plugin.team_scope.cards.totalDays.title: duração total do trabalho
|
||
§ plugin.team_scope.cards.totalDays.description: Tempo total de desenvolvimento do primeiro ao último commit.
|
||
§ plugin.team_scope.cards.totalDaysWorked.title: dias efetivamente trabalhados
|
||
§ plugin.team_scope.cards.totalDaysWorked.description: Dias em que os commits encontrados foram feitos.
|
||
§ plugin.team_scope.cards.totalCommits.title: commits encontrados
|
||
§ plugin.team_scope.cards.totalCommits.description: Commits que correspondem ao filtro de pesquisa indicado acima. Os cálculos posteriores baseiam-se neles.
|
||
§ plugin.team_scope.cards.totalTasks.title: tarefas afetadas
|
||
§ plugin.team_scope.cards.totalTasks.description: IDs únicos de tarefas encontrados em commit messages.
|
||
§ plugin.team_scope.cards.authorsDays.title: dias-pessoa
|
||
§ plugin.team_scope.cards.authorsDays.description: Unidade de tempo de trabalho equivalente a um dia de trabalho de um funcionário.
|
||
§ plugin.team_scope.cards.cost.title: custo estimado
|
||
§ plugin.team_scope.cards.cost.description: Os dias-pessoa gastos são multiplicados pelo salário médio.
|
||
§ plugin.team_scope.chart.commits.title: Quem fez commits
|
||
§ plugin.team_scope.chart.tasks.title: Quem realizou as tarefas
|
||
§ plugin.team_scope.chart.types.title: Tipos de commit
|
||
§ plugin.team_scope.chart.companies.title: Empresas em cujo nome os commits foram feitos
|
||
§ plugin.team_scope.calculator.title: Calculadora de estimativa de funcionalidade
|
||
§ plugin.team_scope.calculator.description: Filtre os commits necessários com a pesquisa. O módulo de estatísticas os agrupará em uma funcionalidade e mostrará os respectivos dados.
|
||
§ plugin.team_scope.tasks.task: Tarefa
|
||
§ plugin.team_scope.tasks.types: Tipos
|
||
§ plugin.team_scope.tasks.description: Descrição
|
||
§ plugin.team_scope.commits.author: Funcionário
|
||
§ plugin.team_scope.commits.message: Commit message
|
||
`,ru:`
|
||
§ plugin.team_scope.sidebar: Фичи
|
||
§ plugin.team_scope.title: Статистика по фичам
|
||
§ plugin.team_scope.scope: Фича
|
||
§ plugin.team_scope.unknown: (фича не подписана)
|
||
§ plugin.team_scope.days: Раб. дней
|
||
§ plugin.team_scope.authorsDays: Человеко-дней
|
||
§ plugin.team_scope.tasks: Задач
|
||
§ plugin.team_scope.lastCommit: Последний коммит
|
||
§ plugin.team_scope.commits: Коммитов
|
||
§ plugin.team_scope.authors: Персональный вклад
|
||
§ plugin.team_scope.cost: Стоимость
|
||
§ plugin.team_scope.details.cards: Общая информация о фиче
|
||
§ plugin.team_scope.details.charts: Кто вносил вклад
|
||
§ plugin.team_scope.details.tasks: Список задач, в рамках которых были правки
|
||
§ plugin.team_scope.details.commits: Список коммитов, подходящих под фильтры поиска
|
||
§ plugin.team_scope.cards.firstCommit: первый коммит
|
||
§ plugin.team_scope.cards.lastCommit: последний коммит
|
||
§ plugin.team_scope.cards.totalDays.title: общая продолжительность работ
|
||
§ plugin.team_scope.cards.totalDays.description: Все время разработки от первого до последнего коммита.
|
||
§ plugin.team_scope.cards.totalDaysWorked.title: фактических дней работы
|
||
§ plugin.team_scope.cards.totalDaysWorked.description: Дни, в которые были сделанны найденные коммиты.
|
||
§ plugin.team_scope.cards.totalCommits.title: найдено коммитов
|
||
§ plugin.team_scope.cards.totalCommits.description: Коммиты, которые соответствуют фильтру поиска заданому выше. На их основе ведётся дальнейший расчёт.
|
||
§ plugin.team_scope.cards.totalTasks.title: затронуто задач
|
||
§ plugin.team_scope.cards.totalTasks.description: Уникальные номера задач, найденные в подписи коммитов.
|
||
§ plugin.team_scope.cards.authorsDays.title: человеко-дней
|
||
§ plugin.team_scope.cards.authorsDays.description: Единица измерения рабочего времени, равная одному дню труда одного сотрудника.
|
||
§ plugin.team_scope.cards.cost.title: возможная стоимость
|
||
§ plugin.team_scope.cards.cost.description: Затраченные человеко-дни умножаются на среднюю заработную плату.
|
||
§ plugin.team_scope.chart.commits.title: Кто делал коммиты
|
||
§ plugin.team_scope.chart.tasks.title: Кто делал задачи
|
||
§ plugin.team_scope.chart.types.title: Типы коммитов
|
||
§ plugin.team_scope.chart.companies.title: От лица каких компаний были коммиты
|
||
§ plugin.team_scope.calculator.title: Калькулятор для оценки фичи
|
||
§ plugin.team_scope.calculator.description: Отфильтруй нужные коммиты с помощью поиска. Модуль статистики сгруппирует их в фичу и покажет данные по ней.
|
||
§ plugin.team_scope.tasks.task: Задача
|
||
§ plugin.team_scope.tasks.types: Типы
|
||
§ plugin.team_scope.tasks.description: Описание
|
||
§ plugin.team_scope.commits.author: Сотрудник
|
||
§ plugin.team_scope.commits.message: Подпись
|
||
|
||
§ plugin.team_scope.recommendations.parallelism.not.title
|
||
Нет параллельных работ
|
||
|
||
§ plugin.team_scope.recommendations.parallelism.not.description
|
||
любую фичу в один момент времени делает один человек.
|
||
|
||
# Метод расчёта:
|
||
- человеко-дни делятся на фактические дни для каждой фичи;
|
||
- находим среднее арифметическое;
|
||
- если результат меньше 1.3 считаем, что параллельных работ в рамках большинства фичей обычно нет;
|
||
|
||
# Почему это плохо:
|
||
- повышается bus factor;
|
||
- сотрудники медленнее развиваются;
|
||
- трудно качественно проверить работу сотрудника;
|
||
|
||
# Почему это хорошо:
|
||
- появляются эксперты, которые очень глубоко погружены в предметную область и могут предложить более качественные решения;
|
||
- скорее всего не бывает merge конфликтов;
|
||
- проект может очень быстро параллельно развиваться в разные стороны;
|
||
|
||
§ plugin.team_scope.recommendations.parallelism.has.title
|
||
Часть работ параллельно
|
||
|
||
§ plugin.team_scope.recommendations.parallelism.has.description
|
||
Иногда фичу делают одновременно несколько человек.
|
||
|
||
# Метод расчёта:
|
||
- человеко-дни делятся на фактические дни для каждой фичи;
|
||
- находим среднее арифметическое;
|
||
- если результат от 1.3 до 2.0 считаем, что часть работ в рамках разных фичей иногда делается параллельно;
|
||
|
||
|
||
§ plugin.team_scope.recommendations.parallelism.every.title
|
||
Параллельные работы
|
||
|
||
§ plugin.team_scope.recommendations.parallelism.every.description
|
||
любую фичу в один момент времени делают несколько человек
|
||
|
||
# Метод расчёта:
|
||
- человеко-дни делятся на фактические дни для каждой фичи;
|
||
- находим среднее арифметическое;
|
||
- если результат больше двух считаем, что большая часть работ в рамках разных фичей обычно делается параллельно;
|
||
|
||
|
||
§ plugin.team_scope.recommendations.money
|
||
в такую сумму можно оценить работу по данному проекту.
|
||
|
||
# Метод расчёта:
|
||
- человеко-дни затраченные на разработку умножаются на индивидуальную зарплату разработчиков;
|
||
|
||
Изменить зарплату каждого разработчика, для более точной суммы, можно в разделе «Настройки»
|
||
|
||
# Это много или мало?
|
||
Для ответа на этот вопрос, нужно ответить на следующие:
|
||
- за эти деньги можно купить готовое решение?
|
||
- за эти деньги можно сделать более хороший продукт?
|
||
|
||
Если ответ на оба вопроса «да», то возможно, разработка с нуля не стоила потраченных на неё денег.
|
||
|
||
§ plugin.team_scope.recommendations.bus.everyHasOne.title
|
||
Bus factor = 1
|
||
|
||
§ plugin.team_scope.recommendations.bus.everyHasOne.description
|
||
В большинство фич погружен один человек.
|
||
Надо переключать людей.
|
||
|
||
# Почему это плохо:
|
||
- если сотрудники будут увольняться, будет трудно продолжить их работу;
|
||
- невозможно контролировать качество его кода;
|
||
|
||
# Как делается выборка:
|
||
- более 80% коммитов в фичу делает один человек;
|
||
- проект имеет более 60% таких фичей;
|
||
|
||
§ plugin.team_scope.recommendations.bus.oneMaintainer
|
||
в фичи погружен один человек.
|
||
|
||
# Почему это плохо:
|
||
- если он уволится, будет трудно продолжить разработку;
|
||
- снижается качество code-review;
|
||
- трудно запараллелить разработку при необходимости;
|
||
|
||
# Как делается выборка:
|
||
- более 80% коммитов в фичу сделал один человек;
|
||
|
||
§ plugin.team_scope.recommendations.types.process.title
|
||
Плохие процессы
|
||
|
||
§ plugin.team_scope.recommendations.types.process.description
|
||
Большинство фич содержат один тип задач.
|
||
|
||
§ plugin.team_scope.recommendations.types.one
|
||
фичи содержат один тип задач.
|
||
|
||
§ plugin.team_scope.recommendations.types.common
|
||
Возможно, разработчики неправильно подписывают коммиты или менеджер заводит один и тот же тип задач.
|
||
|
||
# Почему это важно:
|
||
- невозможно передать поддержку другой команде;
|
||
- невозможно выпустить «коробочную» версию;
|
||
- сильная зависимость от конкретных разработчиков;
|
||
- большое количество ошибок и низкое качество кода;
|
||
- вероятное замедление разработки в будущем;
|
||
|
||
# В чём ошибка менеджера:
|
||
- взгляд на продукт, только с позиции «работающей демки»;
|
||
|
||
# Что должно быть:
|
||
- тесты;
|
||
- ошибки (выявленные по результатам тестов);
|
||
- рефакторинг (т.к. архитектура может измениться);
|
||
- документация;
|
||
- правки стиля (как результат опроса фокус-группы);
|
||
|
||
§ plugin.team_scope.recommendations.plan.title
|
||
Постройте долгосрочный план
|
||
|
||
§ plugin.team_scope.recommendations.plan.description
|
||
с учетом архитектуры.
|
||
|
||
При том опираться этот план должен сразу на самые трудные задачи.
|
||
|
||
# Почему отсутствие плана плохо:
|
||
- сотрудники делают минимально работающую версию, не закладывая точки расширения. После этого пишется не масштабируемый код, который тормозит следующие фичи;
|
||
|
||
# В чём ошибка менеджера:
|
||
- он не показал, как продукт будет развиваться далее и в каких точках будет рост;
|
||
|
||
# Как должно быть:
|
||
- составляется глобальный план развития продукта;
|
||
- составляется глобальный план развития архитектуры (с разработчиками и DBA);
|
||
- на уровне схем сразу проговариваются моменты, которые могут сильно измениться;
|
||
|
||
§ plugin.team_scope.recommendations.cost.title
|
||
Оцените инвестиции в фичу
|
||
|
||
§ plugin.team_scope.recommendations.cost.description
|
||
с количеством потенциальной прибыли.
|
||
|
||
Фичи которые дорого стоят в разработке, но приносят мало прибыли, возможно, стоит отложить или вообще отменить. Это сделает проект более коммерчески успешным.
|
||
|
||
`,zh:`
|
||
§ plugin.team_scope.sidebar: 功能
|
||
§ plugin.team_scope.title: 功能统计
|
||
§ plugin.team_scope.scope: 功能
|
||
§ plugin.team_scope.unknown: (功能未标记)
|
||
§ plugin.team_scope.days: 工作日
|
||
§ plugin.team_scope.authorsDays: 人日
|
||
§ plugin.team_scope.tasks: 任务
|
||
§ plugin.team_scope.lastCommit: 最后一次 commit
|
||
§ plugin.team_scope.commits: Commits
|
||
§ plugin.team_scope.authors: 个人贡献
|
||
§ plugin.team_scope.cost: 成本
|
||
§ plugin.team_scope.details.cards: 功能概要信息
|
||
§ plugin.team_scope.details.charts: 谁做出了贡献
|
||
§ plugin.team_scope.details.tasks: 在其范围内进行了更改的任务列表
|
||
§ plugin.team_scope.details.commits: 符合搜索筛选条件的 commits 列表
|
||
§ plugin.team_scope.cards.firstCommit: 首次 commit
|
||
§ plugin.team_scope.cards.lastCommit: 最后一次 commit
|
||
§ plugin.team_scope.cards.totalDays.title: 总工作时长
|
||
§ plugin.team_scope.cards.totalDays.description: 从第一次到最后一次 commit 的全部开发时间。
|
||
§ plugin.team_scope.cards.totalDaysWorked.title: 实际工作日数
|
||
§ plugin.team_scope.cards.totalDaysWorked.description: 找到的 commits 被创建的日期。
|
||
§ plugin.team_scope.cards.totalCommits.title: 找到的 commits
|
||
§ plugin.team_scope.cards.totalCommits.description: 符合上方指定搜索筛选条件的 Commits。后续计算基于它们进行。
|
||
§ plugin.team_scope.cards.totalTasks.title: 受影响的任务
|
||
§ plugin.team_scope.cards.totalTasks.description: 在 commit messages 中找到的唯一任务 ID。
|
||
§ plugin.team_scope.cards.authorsDays.title: 人日
|
||
§ plugin.team_scope.cards.authorsDays.description: 相当于一名员工工作一天的工时单位。
|
||
§ plugin.team_scope.cards.cost.title: 估计成本
|
||
§ plugin.team_scope.cards.cost.description: 所投入的人日乘以平均工资。
|
||
§ plugin.team_scope.chart.commits.title: 谁创建了 commits
|
||
§ plugin.team_scope.chart.tasks.title: 谁完成了任务
|
||
§ plugin.team_scope.chart.types.title: Commit 类型
|
||
§ plugin.team_scope.chart.companies.title: 以哪些公司名义创建了 commits
|
||
§ plugin.team_scope.calculator.title: 功能估算计算器
|
||
§ plugin.team_scope.calculator.description: 使用搜索筛选所需的 commits。统计模块会将它们归为一个功能并显示其数据。
|
||
§ plugin.team_scope.tasks.task: 任务
|
||
§ plugin.team_scope.tasks.types: 类型
|
||
§ plugin.team_scope.tasks.description: 描述
|
||
§ plugin.team_scope.commits.author: 员工
|
||
§ plugin.team_scope.commits.message: Commit message
|
||
`};function Cb({scope:t}){return o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(ke,{value:oe(t.firstCommit),icon:"./assets/cards/day.svg",title:"plugin.team_scope.cards.firstCommit"}),o.jsx(ke,{value:oe(t.lastCommit),icon:"./assets/cards/day.svg",title:"plugin.team_scope.cards.lastCommit"})]}),o.jsxs(Q,{children:[o.jsx(ke,{value:t.totalDaysWorked,icon:"./assets/cards/work_days2.svg",title:"plugin.team_scope.cards.totalDaysWorked.title"}),o.jsx(ke,{value:Ur(t.totalDays),icon:"./assets/cards/month.svg",title:"plugin.team_scope.cards.totalDays.title"})]})]})}const jb=U(({scope:t})=>{const e=A.statisticsByCommits.author.list,s=A.statisticsByCommits.type.list,n=A.statisticsByCommits.company.totalInfo.map(r=>r.company);return o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(Ne,{title:"plugin.team_scope.chart.commits.title",suffix:"common.statistic.commits",order:e,limit:2,details:t.commitsByAuthor}),o.jsx(Ne,{title:"plugin.team_scope.chart.companies.title",suffix:"common.statistic.commits",limit:1,order:n,details:t.companies})]}),o.jsxs(Q,{children:[o.jsx(Ne,{title:"plugin.team_scope.chart.tasks.title",suffix:"common.statistic.tasks",order:e,limit:2,details:t.tasksByAuthor}),o.jsx(Ne,{title:"plugin.team_scope.chart.types.title",suffix:"common.statistic.commits",order:s,limit:3,details:t.types})]})]})});function H$({scope:t}){return t?o.jsxs(o.Fragment,{children:[o.jsx(nt,{height:"xxl"}),o.jsx(G,{title:"plugin.team_scope.details.cards"}),o.jsx(Cb,{scope:t}),o.jsx(G,{title:"plugin.team_scope.details.charts"}),o.jsx(jb,{scope:t})]}):null}function V$({response:t,updateSort:e,rowsForExcel:s,mode:n}){const{text:r}=ie();return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,template:C.DETAILS,width:40,formatter:u=>o.jsx(H$,{scope:u})}),o.jsx(w,{isFixed:!0,isSortable:!0,template:C.STRING,title:"plugin.team_scope.scope",properties:"scope",width:200,formatter:u=>u||r("plugin.team_scope.unknown")}),o.jsx(w,{isSortable:!0,template:C.NUMBER,title:"plugin.team_scope.days",properties:"totalDaysWorked"}),o.jsx(w,{isSortable:!0,template:C.NUMBER,title:"plugin.team_scope.authorsDays",properties:"totalDaysWorkedByAuthor"}),o.jsx(w,{isSortable:!0,template:C.SHORT_NUMBER,title:"plugin.team_scope.tasks",properties:"totalTasks"}),o.jsx(w,{isSortable:!0,template:C.NUMBER,title:"plugin.team_scope.lastCommit",properties:"lastCommit",formatter:oe}),o.jsx(w,{isSortable:!0,template:C.NUMBER,title:"plugin.team_scope.commits",properties:"commits"}),o.jsx(w,{title:"plugin.team_scope.authors",properties:"commitsByAuthor",minWidth:150,template:u=>o.jsx(ue,{details:u,order:A.statisticsByCommits.author.list})}),o.jsx(w,{isSortable:!0,template:C.NUMBER,title:"plugin.team_scope.cost",properties:"cost",formatter:zo})]}):null}function Y$({scope:t}){return o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(_e,{value:t.commits,icon:"./assets/cards/commits.svg",title:"plugin.team_scope.cards.totalCommits.title",description:"plugin.team_scope.cards.totalCommits.description"}),o.jsx(_e,{value:t.totalTasks,icon:"./assets/cards/tasks.svg",title:"plugin.team_scope.cards.totalTasks.title",description:"plugin.team_scope.cards.totalTasks.description"})]}),o.jsxs(Q,{children:[o.jsx(_e,{value:t.totalDaysWorkedByAuthor,icon:"./assets/cards/dismissal.svg",title:"plugin.team_scope.cards.authorsDays.title",description:"plugin.team_scope.cards.authorsDays.description"}),o.jsx(_e,{value:ct(t.cost),icon:"./assets/cards/money_total.svg",title:"plugin.team_scope.cards.cost.title",description:"plugin.team_scope.cards.cost.description"})]})]})}function Q$({response:t,updateSort:e,rowsForExcel:s}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,children:[o.jsx(w,{isFixed:!0,isSortable:!0,template:C.TASK,properties:"task",title:"plugin.team_scope.tasks.task"}),o.jsx(w,{properties:"prIds",template:C.PULL_REQUESTS}),o.jsx(w,{properties:"types",template:C.TAGS,title:"plugin.team_scope.tasks.types"}),o.jsx(w,{properties:"scope",template:C.TAGS}),o.jsx(w,{template:C.STRING,title:"plugin.team_scope.tasks.description",properties:"description"})]}):null}function K$({response:t,updateSort:e,rowsForExcel:s,mode:n}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isSortable:!0,template:C.STRING,title:"common.statistic.Date",properties:"milliseconds",width:150,formatter:oe}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_scope.commits.author",properties:"author",width:158}),o.jsx(w,{template:C.STRING,title:"plugin.team_scope.commits.message",properties:"message"})]}):null}function Z$({scope:t,commits:e}){const[s,n]=T.useState(1);if(!t)return null;T.useEffect(()=>{n(Math.random())},[t,e]);const r=A.statisticsByCommits.tasks.totalInfoByName,u=t.tasks.map(c=>r.get(c)).filter(c=>c);return o.jsxs(o.Fragment,{children:[o.jsx(nt,{height:"xxl"}),o.jsx(G,{title:"plugin.team_scope.details.cards"}),o.jsx(Y$,{scope:t}),o.jsx(Cb,{scope:t}),o.jsx(G,{title:"plugin.team_scope.details.charts"}),o.jsx(jb,{scope:t}),o.jsxs(Y,{value:u,children:[o.jsx(G,{title:"plugin.team_scope.details.tasks"}),o.jsxs(be,{content:u,watch:s,children:[o.jsx(Q$,{}),o.jsx(fe,{})]})]}),o.jsxs(Y,{value:e,children:[o.jsx(G,{title:"plugin.team_scope.details.commits"}),o.jsxs(be,{content:e,watch:s,children:[o.jsx(K$,{}),o.jsx(fe,{})]})]})]})}const zc=new dv;function X$(t){return zc.clear(),[...t].reverse().forEach(e=>{zc.addCommit(e)}),zc.updateTotalInfo(),zc.totalInfo[0]}function J$({mode:t}){const e=T.useMemo(()=>[...Ct.get("commits")].reverse().filter(_=>!(_!=null&&_.commitType)),[A.hash]),[s,n]=T.useState(!1),[r,u]=T.useState([]),[c,p]=T.useState(null);return t==="print"&&!s?null:o.jsxs(o.Fragment,{children:[o.jsxs(Y,{value:t!=="print",children:[o.jsx(G,{title:"plugin.team_scope.calculator.title"}),o.jsx(ot,{translationId:"plugin.team_scope.calculator.description"}),o.jsx(nt,{height:"l"}),o.jsx(Ei,{content:e,properties:"message",examples:["api","http","auth","hack","doc","test","deploy"],elements:["search"],onChange:_=>{const h=_.filter(k=>!(k!=null&&k.commitType)),f=h==null?void 0:h.length,v=f>8&&f<e.length;v&&(u(h),p(X$(h))),n(v)}})]}),s?o.jsx(Z$,{scope:c,commits:r}):o.jsx(Le,{mode:"search"})]})}const eL=U(({mode:t})=>{const e=A.statisticsByCommits.scope.totalInfo;if((e==null?void 0:e.length)<2&&t==="print")return null;const s=kb();return o.jsxs(o.Fragment,{children:[o.jsxs(Y,{value:(e==null?void 0:e.length)>1,children:[t!=="fullscreen"&&o.jsx(Hn,{mode:t,recommendations:s}),o.jsx(G,{title:"plugin.team_scope.title"}),o.jsxs(be,{content:e,mode:t,watch:`${t}${A.hash}`,children:[o.jsx(V$,{mode:t,rowsForExcel:e}),o.jsx(fe,{})]})]}),o.jsx(J$,{mode:t})]})});let tL=(Sl=class{constructor(){this.dependencies=["author","team","type","scope","recommendations","company","tasks"]}getMenuItems(){return[{id:"scope",group:10,order:20,link:"/team/scope",title:"plugin.team_scope.sidebar",icon:"./assets/menu/feat.svg"}]}getPage(e,s){return e==="/team/scope"?o.jsx(eL,{mode:s==null?void 0:s.mode}):void 0}getTranslations(){return G$}},Sl.id="team_scope",Sl);const aL={ar:`
|
||
§ plugin.team_emails.sidebar: عناوين البريد الإلكتروني
|
||
§ plugin.team_emails.title: عناوين الخوادم في السجلات
|
||
§ plugin.team_emails.domain: النطاق
|
||
§ plugin.team_emails.from: من
|
||
§ plugin.team_emails.to: إلى
|
||
§ plugin.team_emails.protocol: البروتوكول
|
||
§ plugin.team_emails.port: المنفذ
|
||
§ plugin.team_emails.url: URL
|
||
§ plugin.team_emails.service: أداة استضافة التعليمات البرمجية
|
||
§ plugin.team_emails.type.title: الخدمة
|
||
§ plugin.team_emails.type.description: {service} أو ما شابه
|
||
§ plugin.team_emails.email.title: قائمة عناوين البريد الإلكتروني
|
||
§ plugin.team_emails.email.typeChart.title: أنواع العناوين
|
||
§ plugin.team_emails.email.typeChart.suffix: عناوين بريد إلكتروني
|
||
§ plugin.team_emails.email.authorChart.title: عدد العناوين لكل موظف
|
||
§ plugin.team_emails.email.authorChart.suffix: عناوين بريد إلكتروني
|
||
§ plugin.team_emails.email.type: النوع
|
||
§ plugin.team_emails.email.company: الشركة
|
||
§ plugin.team_emails.email.email: عنوان البريد الإلكتروني
|
||
§ plugin.team_emails.email.author: الموظف
|
||
`,de:`
|
||
§ plugin.team_emails.sidebar: E-Mail-Adressen
|
||
§ plugin.team_emails.title: Serveradressen in den Logs
|
||
§ plugin.team_emails.domain: Domain
|
||
§ plugin.team_emails.from: von
|
||
§ plugin.team_emails.to: bis
|
||
§ plugin.team_emails.protocol: Protokoll
|
||
§ plugin.team_emails.port: Port
|
||
§ plugin.team_emails.url: URL
|
||
§ plugin.team_emails.service: Code-Hosting-Tool
|
||
§ plugin.team_emails.type.title: Dienst
|
||
§ plugin.team_emails.type.description: {service} oder etwas Ähnliches
|
||
§ plugin.team_emails.email.title: Liste der E-Mail-Adressen
|
||
§ plugin.team_emails.email.typeChart.title: Adresstypen
|
||
§ plugin.team_emails.email.typeChart.suffix: E-Mail-Adressen
|
||
§ plugin.team_emails.email.authorChart.title: Anzahl der Adressen pro Mitarbeiter
|
||
§ plugin.team_emails.email.authorChart.suffix: E-Mail-Adressen
|
||
§ plugin.team_emails.email.type: Typ
|
||
§ plugin.team_emails.email.company: Unternehmen
|
||
§ plugin.team_emails.email.email: E-Mail-Adresse
|
||
§ plugin.team_emails.email.author: Mitarbeiter
|
||
`,en:`
|
||
§ plugin.team_emails.sidebar: Email addresses
|
||
§ plugin.team_emails.title: Server addresses in logs
|
||
§ plugin.team_emails.domain: Domain
|
||
§ plugin.team_emails.from: from
|
||
§ plugin.team_emails.to: to
|
||
§ plugin.team_emails.protocol: Protocol
|
||
§ plugin.team_emails.port: Port
|
||
§ plugin.team_emails.url: URL
|
||
§ plugin.team_emails.service: Code hosting tool
|
||
§ plugin.team_emails.type.title: Service
|
||
§ plugin.team_emails.type.description: {service} or something similar
|
||
§ plugin.team_emails.email.title: Email address list
|
||
§ plugin.team_emails.email.typeChart.title: Address types
|
||
§ plugin.team_emails.email.typeChart.suffix: email addresses
|
||
§ plugin.team_emails.email.authorChart.title: Number of addresses per staff member
|
||
§ plugin.team_emails.email.authorChart.suffix: email addresses
|
||
§ plugin.team_emails.email.type: Type
|
||
§ plugin.team_emails.email.company: Company
|
||
§ plugin.team_emails.email.email: Email address
|
||
§ plugin.team_emails.email.author: Staff member
|
||
`,es:`
|
||
§ plugin.team_emails.sidebar: Direcciones de email
|
||
§ plugin.team_emails.title: Direcciones de servidores en los logs
|
||
§ plugin.team_emails.domain: Dominio
|
||
§ plugin.team_emails.from: desde
|
||
§ plugin.team_emails.to: hasta
|
||
§ plugin.team_emails.protocol: Protocolo
|
||
§ plugin.team_emails.port: Puerto
|
||
§ plugin.team_emails.url: URL
|
||
§ plugin.team_emails.service: Herramienta de alojamiento de código
|
||
§ plugin.team_emails.type.title: Servicio
|
||
§ plugin.team_emails.type.description: {service} o algo similar
|
||
§ plugin.team_emails.email.title: Lista de direcciones de email
|
||
§ plugin.team_emails.email.typeChart.title: Tipos de direcciones
|
||
§ plugin.team_emails.email.typeChart.suffix: direcciones de email
|
||
§ plugin.team_emails.email.authorChart.title: Número de direcciones por empleado
|
||
§ plugin.team_emails.email.authorChart.suffix: direcciones de email
|
||
§ plugin.team_emails.email.type: Tipo
|
||
§ plugin.team_emails.email.company: Empresa
|
||
§ plugin.team_emails.email.email: Dirección de email
|
||
§ plugin.team_emails.email.author: Empleado
|
||
`,fr:`
|
||
§ plugin.team_emails.sidebar: Adresses e-mail
|
||
§ plugin.team_emails.title: Adresses de serveurs dans les logs
|
||
§ plugin.team_emails.domain: Domaine
|
||
§ plugin.team_emails.from: de
|
||
§ plugin.team_emails.to: à
|
||
§ plugin.team_emails.protocol: Protocole
|
||
§ plugin.team_emails.port: Port
|
||
§ plugin.team_emails.url: URL
|
||
§ plugin.team_emails.service: Outil d’hébergement de code
|
||
§ plugin.team_emails.type.title: Service
|
||
§ plugin.team_emails.type.description: {service} ou quelque chose de similaire
|
||
§ plugin.team_emails.email.title: Liste des adresses e-mail
|
||
§ plugin.team_emails.email.typeChart.title: Types d’adresses
|
||
§ plugin.team_emails.email.typeChart.suffix: adresses e-mail
|
||
§ plugin.team_emails.email.authorChart.title: Nombre d’adresses par collaborateur
|
||
§ plugin.team_emails.email.authorChart.suffix: adresses e-mail
|
||
§ plugin.team_emails.email.type: Type
|
||
§ plugin.team_emails.email.company: Entreprise
|
||
§ plugin.team_emails.email.email: Adresse e-mail
|
||
§ plugin.team_emails.email.author: Collaborateur
|
||
`,he:`
|
||
§ plugin.team_emails.sidebar: כתובות דוא״ל
|
||
§ plugin.team_emails.title: כתובות שרת בלוגים
|
||
§ plugin.team_emails.domain: דומיין
|
||
§ plugin.team_emails.from: מ
|
||
§ plugin.team_emails.to: עד
|
||
§ plugin.team_emails.protocol: פרוטוקול
|
||
§ plugin.team_emails.port: פורט
|
||
§ plugin.team_emails.url: URL
|
||
§ plugin.team_emails.service: כלי אירוח קוד
|
||
§ plugin.team_emails.type.title: שירות
|
||
§ plugin.team_emails.type.description: {service} או משהו דומה
|
||
§ plugin.team_emails.email.title: רשימת כתובות דוא״ל
|
||
§ plugin.team_emails.email.typeChart.title: סוגי כתובות
|
||
§ plugin.team_emails.email.typeChart.suffix: כתובות דוא״ל
|
||
§ plugin.team_emails.email.authorChart.title: מספר כתובות לכל עובד
|
||
§ plugin.team_emails.email.authorChart.suffix: כתובות דוא״ל
|
||
§ plugin.team_emails.email.type: סוג
|
||
§ plugin.team_emails.email.company: חברה
|
||
§ plugin.team_emails.email.email: כתובת דוא״ל
|
||
§ plugin.team_emails.email.author: עובד
|
||
`,hi:`
|
||
§ plugin.team_emails.sidebar: ईमेल पते
|
||
§ plugin.team_emails.title: लॉग में सर्वर पते
|
||
§ plugin.team_emails.domain: डोमेन
|
||
§ plugin.team_emails.from: से
|
||
§ plugin.team_emails.to: तक
|
||
§ plugin.team_emails.protocol: प्रोटोकॉल
|
||
§ plugin.team_emails.port: पोर्ट
|
||
§ plugin.team_emails.url: URL
|
||
§ plugin.team_emails.service: कोड होस्टिंग उपकरण
|
||
§ plugin.team_emails.type.title: सेवा
|
||
§ plugin.team_emails.type.description: {service} या कुछ इसी तरह का
|
||
§ plugin.team_emails.email.title: ईमेल पतों की सूची
|
||
§ plugin.team_emails.email.typeChart.title: पते के प्रकार
|
||
§ plugin.team_emails.email.typeChart.suffix: ईमेल पते
|
||
§ plugin.team_emails.email.authorChart.title: प्रति कर्मचारी पतों की संख्या
|
||
§ plugin.team_emails.email.authorChart.suffix: ईमेल पते
|
||
§ plugin.team_emails.email.type: प्रकार
|
||
§ plugin.team_emails.email.company: कंपनी
|
||
§ plugin.team_emails.email.email: ईमेल पता
|
||
§ plugin.team_emails.email.author: कर्मचारी
|
||
`,ja:`
|
||
§ plugin.team_emails.sidebar: メールアドレス
|
||
§ plugin.team_emails.title: ログ内のサーバーアドレス
|
||
§ plugin.team_emails.domain: ドメイン
|
||
§ plugin.team_emails.from: 開始
|
||
§ plugin.team_emails.to: 終了
|
||
§ plugin.team_emails.protocol: プロトコル
|
||
§ plugin.team_emails.port: ポート
|
||
§ plugin.team_emails.url: URL
|
||
§ plugin.team_emails.service: コードホスティングツール
|
||
§ plugin.team_emails.type.title: サービス
|
||
§ plugin.team_emails.type.description: {service} または類似のもの
|
||
§ plugin.team_emails.email.title: メールアドレス一覧
|
||
§ plugin.team_emails.email.typeChart.title: アドレスの種類
|
||
§ plugin.team_emails.email.typeChart.suffix: メールアドレス
|
||
§ plugin.team_emails.email.authorChart.title: 従業員あたりのアドレス数
|
||
§ plugin.team_emails.email.authorChart.suffix: メールアドレス
|
||
§ plugin.team_emails.email.type: 種類
|
||
§ plugin.team_emails.email.company: 企業
|
||
§ plugin.team_emails.email.email: メールアドレス
|
||
§ plugin.team_emails.email.author: 従業員
|
||
`,ko:`
|
||
§ plugin.team_emails.sidebar: 이메일 주소
|
||
§ plugin.team_emails.title: 로그의 서버 주소
|
||
§ plugin.team_emails.domain: 도메인
|
||
§ plugin.team_emails.from: 시작
|
||
§ plugin.team_emails.to: 종료
|
||
§ plugin.team_emails.protocol: 프로토콜
|
||
§ plugin.team_emails.port: 포트
|
||
§ plugin.team_emails.url: URL
|
||
§ plugin.team_emails.service: 코드 호스팅 도구
|
||
§ plugin.team_emails.type.title: 서비스
|
||
§ plugin.team_emails.type.description: {service} 또는 이와 유사한 것
|
||
§ plugin.team_emails.email.title: 이메일 주소 목록
|
||
§ plugin.team_emails.email.typeChart.title: 주소 유형
|
||
§ plugin.team_emails.email.typeChart.suffix: 이메일 주소
|
||
§ plugin.team_emails.email.authorChart.title: 직원당 주소 수
|
||
§ plugin.team_emails.email.authorChart.suffix: 이메일 주소
|
||
§ plugin.team_emails.email.type: 유형
|
||
§ plugin.team_emails.email.company: 회사
|
||
§ plugin.team_emails.email.email: 이메일 주소
|
||
§ plugin.team_emails.email.author: 직원
|
||
`,pt:`
|
||
§ plugin.team_emails.sidebar: Endereços de e-mail
|
||
§ plugin.team_emails.title: Endereços de servidores nos logs
|
||
§ plugin.team_emails.domain: Domínio
|
||
§ plugin.team_emails.from: de
|
||
§ plugin.team_emails.to: até
|
||
§ plugin.team_emails.protocol: Protocolo
|
||
§ plugin.team_emails.port: Porta
|
||
§ plugin.team_emails.url: URL
|
||
§ plugin.team_emails.service: Ferramenta de hospedagem de código
|
||
§ plugin.team_emails.type.title: Serviço
|
||
§ plugin.team_emails.type.description: {service} ou algo semelhante
|
||
§ plugin.team_emails.email.title: Lista de endereços de e-mail
|
||
§ plugin.team_emails.email.typeChart.title: Tipos de endereços
|
||
§ plugin.team_emails.email.typeChart.suffix: endereços de e-mail
|
||
§ plugin.team_emails.email.authorChart.title: Número de endereços por colaborador
|
||
§ plugin.team_emails.email.authorChart.suffix: endereços de e-mail
|
||
§ plugin.team_emails.email.type: Tipo
|
||
§ plugin.team_emails.email.company: Empresa
|
||
§ plugin.team_emails.email.email: Endereço de e-mail
|
||
§ plugin.team_emails.email.author: Colaborador
|
||
`,ru:`
|
||
§ plugin.team_emails.sidebar: Почтовые адреса
|
||
§ plugin.team_emails.title: Адреса серверов в логах
|
||
§ plugin.team_emails.domain: Домен
|
||
§ plugin.team_emails.from: Первый коммит
|
||
§ plugin.team_emails.to: Последний коммит
|
||
§ plugin.team_emails.protocol: Протокол
|
||
§ plugin.team_emails.port: Порт
|
||
§ plugin.team_emails.url: URL
|
||
§ plugin.team_emails.service: Инструмент для хостинга кода
|
||
§ plugin.team_emails.type.title: Сервис
|
||
§ plugin.team_emails.type.description: {service} или что-то похожее
|
||
§ plugin.team_emails.email.title: Список почтовых адресов
|
||
§ plugin.team_emails.email.typeChart.title: Типы адресов
|
||
§ plugin.team_emails.email.typeChart.suffix: почтовых адресов
|
||
§ plugin.team_emails.email.authorChart.title: Количество адресов на одного сотрудника
|
||
§ plugin.team_emails.email.authorChart.suffix: почтовых адресов
|
||
§ plugin.team_emails.email.type: Тип
|
||
§ plugin.team_emails.email.company: Компания
|
||
§ plugin.team_emails.email.email: Адрес почты
|
||
§ plugin.team_emails.email.author: Сотрудник
|
||
`,zh:`
|
||
§ plugin.team_emails.sidebar: 电子邮箱
|
||
§ plugin.team_emails.title: 日志中的服务器地址
|
||
§ plugin.team_emails.domain: 域名
|
||
§ plugin.team_emails.from: 自
|
||
§ plugin.team_emails.to: 至
|
||
§ plugin.team_emails.protocol: 协议
|
||
§ plugin.team_emails.port: 端口
|
||
§ plugin.team_emails.url: URL
|
||
§ plugin.team_emails.service: 代码托管工具
|
||
§ plugin.team_emails.type.title: 服务
|
||
§ plugin.team_emails.type.description: {service} 或类似内容
|
||
§ plugin.team_emails.email.title: 电子邮箱列表
|
||
§ plugin.team_emails.email.typeChart.title: 地址类型
|
||
§ plugin.team_emails.email.typeChart.suffix: 电子邮箱
|
||
§ plugin.team_emails.email.authorChart.title: 每位员工的地址数量
|
||
§ plugin.team_emails.email.authorChart.suffix: 电子邮箱
|
||
§ plugin.team_emails.email.type: 类型
|
||
§ plugin.team_emails.email.company: 公司
|
||
§ plugin.team_emails.email.email: 电子邮箱
|
||
§ plugin.team_emails.email.author: 员工
|
||
`};function sL({response:t,updateSort:e,rowsForExcel:s,mode:n}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:"details",type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{title:"plugin.team_emails.protocol",properties:"protocol",template:C.TAGS,width:80}),o.jsx(w,{title:"plugin.team_emails.port",properties:"port",template:C.TAGS,width:80}),o.jsx(w,{template:C.STRING,title:"plugin.team_emails.url",properties:"url"}),o.jsx(w,{isSortable:!0,template:C.STRING,properties:"from",width:150,formatter:oe}),o.jsx(w,{isSortable:!0,template:C.STRING,properties:"to",width:150,formatter:oe})]}):null}function iL({response:t,updateSort:e,rowsForExcel:s,mode:n}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,template:C.DETAILS,width:40,formatter:r=>o.jsx(sL,{response:{content:r.children}})}),o.jsx(w,{template:C.STRING,title:"plugin.team_emails.domain",properties:"domain"}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_emails.from",properties:"from",width:150,formatter:oe}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_emails.to",properties:"to",width:150,formatter:oe}),o.jsx(w,{template:C.STRING,properties:"xyz",width:12})]}):null}function nL({response:t,updateSort:e,rowsForExcel:s,mode:n}){const{text:r}=ie();return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{template:C.STRING,title:"plugin.team_emails.type.title",properties:"type",formatter:u=>{const c=u===rs.PR_BITBUCKET?"Bitbucket":"GitHub";return r("plugin.team_emails.type.description",{service:c})}}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_emails.from",properties:"from",width:150,formatter:oe}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_emails.to",properties:"to",width:150,formatter:oe}),o.jsx(w,{template:C.STRING,properties:"xyz",width:12})]}):null}function oL({response:t,updateSort:e,rowsForExcel:s,mode:n}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isSortable:!0,title:"plugin.team_emails.email.type",properties:"type",formatter:r=>({[$e.UNKNOWN]:"",[$e.ACCOUNT]:"TECH ACCOUNT",[$e.GITHUB]:"GITHUB",[$e.MAIL]:"PERSONAL",[$e.COMPANY]:"CORPORATE",[$e.NETWORK]:"NETWORK",[$e.DEVICE]:"DEVICE"})[r],template:C.TAGS,width:150}),o.jsx(w,{isSortable:!0,title:"plugin.team_emails.email.company",properties:"company",template:C.TAGS,width:150}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_emails.email.author",properties:"author",width:200}),o.jsx(w,{isSortable:!0,title:"plugin.team_emails.email.email",properties:"email",template:(r,u)=>u.type===$e.GITHUB?o.jsx(Kv,{email:r}):r}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_emails.from",properties:"from",width:150,formatter:oe}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_emails.to",properties:"to",width:150,formatter:oe})]}):null}const lL={[$e.UNKNOWN]:"",[$e.ACCOUNT]:"TECH ACCOUNT",[$e.GITHUB]:"GITHUB",[$e.MAIL]:"PERSONAL",[$e.COMPANY]:"CORPORATE",[$e.NETWORK]:"NETWORK"};function rL(t){return lL[String(t)]||""}function mL(t){const e={};return t.forEach(n=>{Ce(e,rL(n.type))}),[Object.entries(e).sort((n,r)=>r[1]-n[1]).map(([n])=>n),e]}function uL(t){const e={};return t.forEach(n=>{Ce(e,n.emails.length)}),[Object.keys(e).sort(),e]}const cL=U(({rows:t})=>{if(!t)return null;const e=A.statisticsByCommits.author.totalInfo,[s,n]=T.useMemo(()=>mL(t),[t]),[r,u]=T.useMemo(()=>uL(e),[e]);return o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_emails.email.typeChart.title",suffix:"plugin.team_emails.email.typeChart.suffix",order:s,limit:1,details:n})}),o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_emails.email.authorChart.title",suffix:"plugin.team_emails.email.authorChart.suffix",order:r,limit:1,details:u})})]})}),pL=U(({mode:t})=>{const e=A.statisticsByCommits.server.totalInfo,s=A.statisticsByCommits.service.totalInfo,n=A.statisticsByCommits.email.totalInfo,[r,u]=T.useState(n),[c,p]=T.useState("");return!(e!=null&&e.length)&&!(s!=null&&s.length)&&!(n!=null&&n.length)?t!=="print"?o.jsx(Le,{}):null:o.jsxs(o.Fragment,{children:[o.jsxs(Y,{value:t!=="print",children:[o.jsx(G,{title:"common.filters"}),o.jsx(Ei,{content:n,elements:["search_small","company","author"],properties:"email",onChange:(_,h)=>{u(_),p(h)}})]}),o.jsx(Y,{value:r.length>6,children:o.jsx(cL,{rows:r})}),o.jsx(G,{title:"plugin.team_emails.email.title"}),o.jsxs(be,{content:r,mode:t,watch:`${t}${c}${A.hash}`,children:[o.jsx(oL,{mode:t,rowsForExcel:r}),o.jsx(Le,{}),o.jsx(fe,{})]}),o.jsxs(Y,{value:e,children:[o.jsx(G,{title:"plugin.team_emails.title"}),o.jsxs(be,{content:e,mode:t,watch:`${t}${A.hash}`,children:[o.jsx(iL,{mode:t,rowsForExcel:e}),o.jsx(fe,{})]})]}),o.jsxs(Y,{value:s,children:[o.jsx(G,{title:"plugin.team_emails.service"}),o.jsxs(be,{content:s,mode:t,watch:`${t}${A.hash}`,children:[o.jsx(nL,{mode:t,rowsForExcel:s}),o.jsx(fe,{})]})]})]})});let dL=(Al=class{constructor(){this.dependencies=["server","service","email","author"]}getMenuItems(){return[{id:"emails",group:10,order:80,link:"/team/emails",title:"plugin.team_emails.sidebar",icon:"./assets/menu/email.svg"}]}getPage(e,s){return e==="/team/emails"?o.jsx(pL,{mode:s==null?void 0:s.mode}):void 0}getTranslations(){return aL}},Al.id="team_emails",Al);const gL={ar:`
|
||
§ plugin.team_tasks.sidebar: قائمة المهام
|
||
§ plugin.team_tasks.task.title: قائمة المهام
|
||
§ plugin.team_tasks.task.author: مؤلف أول commit
|
||
§ plugin.team_tasks.task.task: مهمة
|
||
§ plugin.team_tasks.task.description: الوصف
|
||
§ plugin.team_tasks.task.totalAuthors: الموظفون
|
||
§ plugin.team_tasks.task.totalDaysInBacklog: في backlog
|
||
§ plugin.team_tasks.task.totalDaysWorked: في التطوير
|
||
§ plugin.team_tasks.task.createdBefore: أُنشئت قبل
|
||
§ plugin.team_tasks.task.from: أول commit
|
||
§ plugin.team_tasks.task.to: آخر commit
|
||
§ plugin.team_tasks.details.facts: معلومات المهمة
|
||
§ plugin.team_tasks.details.release: قائمة الإصدارات التي دخلت فيها المهمة على الأرجح
|
||
§ plugin.team_tasks.details.commits: قائمة commits التي وردت فيها هذه المهمة في commit message
|
||
§ plugin.team_tasks.release.title: الإصدار
|
||
§ plugin.team_tasks.release.releaseDateMerge: نُشر
|
||
§ plugin.team_tasks.release.prDateMerge: دُمج
|
||
§ plugin.team_tasks.commits.date: التاريخ
|
||
§ plugin.team_tasks.commits.author: المؤلف
|
||
§ plugin.team_tasks.commits.description: الوصف
|
||
§ plugin.team_tasks.info.createdBefore: أُنشئت قبل
|
||
§ plugin.team_tasks.info.totalDaysInBacklog: أيام في backlog
|
||
§ plugin.team_tasks.info.totalAuthors: الموظفون الذين عملوا
|
||
§ plugin.team_tasks.info.totalDaysWorked: أيام قيد التنفيذ
|
||
§ plugin.team_tasks.info.authors: الموظفون
|
||
§ plugin.team_tasks.info.types: أنواع commit
|
||
§ plugin.team_tasks.info.scope: قائمة الميزات
|
||
§ plugin.team_tasks.info.commits: Commits
|
||
§ plugin.team_tasks.charts.all: تحليلات لجميع المهام
|
||
§ plugin.team_tasks.charts.totalTask.title: المهمة الواحدة في المتوسط هي
|
||
§ plugin.team_tasks.charts.totalTaskInDay.title: أيام
|
||
§ plugin.team_tasks.charts.totalTaskInFiles.title: ملفات
|
||
§ plugin.team_tasks.charts.totalTaskInChanges.title: أسطر من التعليمات البرمجية
|
||
§ plugin.team_tasks.charts.totalTaskInCommits.title: commits
|
||
§ plugin.team_tasks.charts.cardFromCommit.title: أيام من commit إلى الإصدار
|
||
§ plugin.team_tasks.charts.cardFromCommit.description: متوسط الوقت للمهام التي بقيت في backlog أقل من ثلاثة أشهر.
|
||
§ plugin.team_tasks.charts.timeToMarket.title: الوقت اللازم لطرح المهمة في السوق
|
||
§ plugin.team_tasks.charts.timeToMarket.backlog: في backlog
|
||
§ plugin.team_tasks.charts.timeToMarket.worked: قيد التنفيذ
|
||
§ plugin.team_tasks.charts.timeToMarket.review: قيد المراجعة
|
||
§ plugin.team_tasks.charts.timeToMarket.release: في انتظار الإصدار
|
||
§ plugin.team_tasks.charts.timeToMarket.improvements: تحسينات
|
||
§ plugin.team_tasks.charts.relative.title: أيام من الإنشاء إلى أول commit
|
||
§ plugin.team_tasks.charts.relative.fast: حتى أسبوعين
|
||
§ plugin.team_tasks.charts.relative.normal: حتى 3 أشهر
|
||
§ plugin.team_tasks.charts.relative.backlog: أكثر
|
||
§ plugin.team_tasks.charts.normal: مهام اعتيادية (أُدخلت في التطوير خلال ثلاثة أشهر من إنشائها)
|
||
§ plugin.team_tasks.charts.cardTotal.title: مهام في هذه الفئة
|
||
§ plugin.team_tasks.charts.cardTotal.description: مع مراعاة عوامل تصفية البحث الحالية.
|
||
§ plugin.team_tasks.charts.totalDays.title: أيام تقويمية قيد التنفيذ
|
||
§ plugin.team_tasks.charts.totalDays.description: إذا أُنشئ أول commit مساء الجمعة وآخر commit صباح الاثنين، يُحتسب إجمالي وقت العمل على المهمة 4 أيام (الجمعة، السبت، الأحد، الاثنين).
|
||
§ plugin.team_tasks.charts.workedDays.title: أيام فعلية قيد التنفيذ
|
||
§ plugin.team_tasks.charts.workedDays.description: إذا أُنشئ أول commit مساء الجمعة وآخر commit صباح الاثنين، يُحتسب وقت العمل على المهمة يومين (الجمعة، الاثنين).
|
||
§ plugin.team_tasks.charts.backlog: دين تقني (مهام أُنشئت في متعقّب المهام ولم تُؤخذ إلى التطوير لأكثر من ثلاثة أشهر)
|
||
§ plugin.team_tasks.charts.authors.title: من أخذها إلى العمل
|
||
§ plugin.team_tasks.charts.authors.other: وآخرون
|
||
§ plugin.team_tasks.charts.await.title: المدة التي قضتها المهمة في backlog
|
||
§ plugin.team_tasks.charts.worked.title: عدد الأيام التقويمية التي أُنفقت عليها بعد ذلك
|
||
§ plugin.team_tasks.charts.other: أكثر
|
||
`,de:`
|
||
§ plugin.team_tasks.sidebar: Aufgabenliste
|
||
§ plugin.team_tasks.task.title: Aufgabenliste
|
||
§ plugin.team_tasks.task.author: Autor des ersten commit
|
||
§ plugin.team_tasks.task.task: Aufgabe
|
||
§ plugin.team_tasks.task.description: Beschreibung
|
||
§ plugin.team_tasks.task.totalAuthors: Mitarbeiter
|
||
§ plugin.team_tasks.task.totalDaysInBacklog: Im Backlog
|
||
§ plugin.team_tasks.task.totalDaysWorked: In der Entwicklung
|
||
§ plugin.team_tasks.task.createdBefore: Erstellt vor
|
||
§ plugin.team_tasks.task.from: Erster commit
|
||
§ plugin.team_tasks.task.to: Letzter commit
|
||
§ plugin.team_tasks.details.facts: Aufgabeninformationen
|
||
§ plugin.team_tasks.details.release: Liste der Releases, in die die Aufgabe wahrscheinlich eingegangen ist
|
||
§ plugin.team_tasks.details.commits: Liste der commits, in deren commit message diese Aufgabe vorkommt
|
||
§ plugin.team_tasks.release.title: Release
|
||
§ plugin.team_tasks.release.releaseDateMerge: Veröffentlicht
|
||
§ plugin.team_tasks.release.prDateMerge: Zusammengeführt
|
||
§ plugin.team_tasks.commits.date: Datum
|
||
§ plugin.team_tasks.commits.author: Autor
|
||
§ plugin.team_tasks.commits.description: Beschreibung
|
||
§ plugin.team_tasks.info.createdBefore: erstellt vor
|
||
§ plugin.team_tasks.info.totalDaysInBacklog: Tage im Backlog
|
||
§ plugin.team_tasks.info.totalAuthors: Mitarbeiter beteiligt
|
||
§ plugin.team_tasks.info.totalDaysWorked: Tage in Bearbeitung
|
||
§ plugin.team_tasks.info.authors: Mitarbeiter
|
||
§ plugin.team_tasks.info.types: Commit-Typen
|
||
§ plugin.team_tasks.info.scope: Liste der Funktionen
|
||
§ plugin.team_tasks.info.commits: Commits
|
||
§ plugin.team_tasks.charts.all: Analyse für alle Aufgaben
|
||
§ plugin.team_tasks.charts.totalTask.title: Eine Aufgabe ist im Durchschnitt
|
||
§ plugin.team_tasks.charts.totalTaskInDay.title: Tage
|
||
§ plugin.team_tasks.charts.totalTaskInFiles.title: Dateien
|
||
§ plugin.team_tasks.charts.totalTaskInChanges.title: Codezeilen
|
||
§ plugin.team_tasks.charts.totalTaskInCommits.title: commits
|
||
§ plugin.team_tasks.charts.cardFromCommit.title: Tage vom commit bis zum Release
|
||
§ plugin.team_tasks.charts.cardFromCommit.description: Durchschnittliche Zeit für Aufgaben, die weniger als drei Monate im Backlog waren.
|
||
§ plugin.team_tasks.charts.timeToMarket.title: Zeit bis zur Markteinführung einer Aufgabe
|
||
§ plugin.team_tasks.charts.timeToMarket.backlog: im Backlog
|
||
§ plugin.team_tasks.charts.timeToMarket.worked: in Bearbeitung
|
||
§ plugin.team_tasks.charts.timeToMarket.review: im Review
|
||
§ plugin.team_tasks.charts.timeToMarket.release: wartet auf Release
|
||
§ plugin.team_tasks.charts.timeToMarket.improvements: Nacharbeiten
|
||
§ plugin.team_tasks.charts.relative.title: Tage von der Erstellung bis zum ersten commit
|
||
§ plugin.team_tasks.charts.relative.fast: bis zu 2 Wochen
|
||
§ plugin.team_tasks.charts.relative.normal: bis zu 3 Monate
|
||
§ plugin.team_tasks.charts.relative.backlog: mehr
|
||
§ plugin.team_tasks.charts.normal: Reguläre Aufgaben (innerhalb von drei Monaten nach der Erstellung in die Entwicklung genommen)
|
||
§ plugin.team_tasks.charts.cardTotal.title: Aufgaben in dieser Kategorie
|
||
§ plugin.team_tasks.charts.cardTotal.description: Unter Berücksichtigung der aktuellen Suchfilter.
|
||
§ plugin.team_tasks.charts.totalDays.title: Kalendertage in Bearbeitung
|
||
§ plugin.team_tasks.charts.totalDays.description: Wenn der erste commit am Freitagabend und der letzte am Montagmorgen erstellt wurde, wird die Gesamtarbeitszeit an der Aufgabe als 4 Tage gezählt (Fr, Sa, So, Mo).
|
||
§ plugin.team_tasks.charts.workedDays.title: Tatsächliche Tage in Bearbeitung
|
||
§ plugin.team_tasks.charts.workedDays.description: Wenn der erste commit am Freitagabend und der letzte am Montagmorgen erstellt wurde, wird die Arbeitszeit an der Aufgabe als 2 Tage gezählt (Fr, Mo).
|
||
§ plugin.team_tasks.charts.backlog: Technische Schulden (Aufgaben, die im Task-Tracker angelegt und länger als drei Monate nicht in die Entwicklung genommen wurden)
|
||
§ plugin.team_tasks.charts.authors.title: Wer hat die Aufgabe übernommen
|
||
§ plugin.team_tasks.charts.authors.other: und andere
|
||
§ plugin.team_tasks.charts.await.title: Wie lange die Aufgabe im Backlog war
|
||
§ plugin.team_tasks.charts.worked.title: Wie viele Kalendertage anschließend darauf verwendet wurden
|
||
§ plugin.team_tasks.charts.other: mehr
|
||
`,en:`
|
||
§ plugin.team_tasks.sidebar: Task list
|
||
§ plugin.team_tasks.task.title: Task list
|
||
§ plugin.team_tasks.task.author: Author of the first commit
|
||
§ plugin.team_tasks.task.task: Task
|
||
§ plugin.team_tasks.task.description: Description
|
||
§ plugin.team_tasks.task.totalAuthors: Staff
|
||
§ plugin.team_tasks.task.totalDaysInBacklog: In backlog
|
||
§ plugin.team_tasks.task.totalDaysWorked: In development
|
||
§ plugin.team_tasks.task.createdBefore: Created before
|
||
§ plugin.team_tasks.task.from: First commit
|
||
§ plugin.team_tasks.task.to: Last commit
|
||
§ plugin.team_tasks.details.facts: Task information
|
||
§ plugin.team_tasks.details.release: List of releases the task likely entered
|
||
§ plugin.team_tasks.details.commits: List of commits, with this task in commit message
|
||
§ plugin.team_tasks.release.title: Release
|
||
§ plugin.team_tasks.release.releaseDateMerge: Published
|
||
§ plugin.team_tasks.release.prDateMerge: Merged
|
||
§ plugin.team_tasks.commits.date: Date
|
||
§ plugin.team_tasks.commits.author: Author
|
||
§ plugin.team_tasks.commits.description: Description
|
||
§ plugin.team_tasks.info.createdBefore: created before
|
||
§ plugin.team_tasks.info.totalDaysInBacklog: days in backlog
|
||
§ plugin.team_tasks.info.totalAuthors: staff worked
|
||
§ plugin.team_tasks.info.totalDaysWorked: days in progress
|
||
§ plugin.team_tasks.info.authors: Staff
|
||
§ plugin.team_tasks.info.types: Commit types
|
||
§ plugin.team_tasks.info.scope: List of features
|
||
§ plugin.team_tasks.info.commits: Commits
|
||
§ plugin.team_tasks.charts.all: Analytics for all tasks
|
||
§ plugin.team_tasks.charts.totalTask.title: One task on average is
|
||
§ plugin.team_tasks.charts.totalTaskInDay.title: days
|
||
§ plugin.team_tasks.charts.totalTaskInFiles.title: files
|
||
§ plugin.team_tasks.charts.totalTaskInChanges.title: lines of code
|
||
§ plugin.team_tasks.charts.totalTaskInCommits.title: commits
|
||
§ plugin.team_tasks.charts.cardFromCommit.title: days from commit to release
|
||
§ plugin.team_tasks.charts.cardFromCommit.description: Average time for tasks that were in the backlog for less than three months.
|
||
§ plugin.team_tasks.charts.timeToMarket.title: Time to market a task
|
||
§ plugin.team_tasks.charts.timeToMarket.backlog: in backlog
|
||
§ plugin.team_tasks.charts.timeToMarket.worked: in progress
|
||
§ plugin.team_tasks.charts.timeToMarket.review: on review
|
||
§ plugin.team_tasks.charts.timeToMarket.release: awaiting release
|
||
§ plugin.team_tasks.charts.timeToMarket.improvements: improvements
|
||
§ plugin.team_tasks.charts.relative.title: Days from creation to first commit
|
||
§ plugin.team_tasks.charts.relative.fast: up to 2 weeks
|
||
§ plugin.team_tasks.charts.relative.normal: up to 3 months
|
||
§ plugin.team_tasks.charts.relative.backlog: more
|
||
§ plugin.team_tasks.charts.normal: Regular tasks (taken into development within three months of creation)
|
||
§ plugin.team_tasks.charts.cardTotal.title: tasks in this category
|
||
§ plugin.team_tasks.charts.cardTotal.description: Taking into account current search filters.
|
||
§ plugin.team_tasks.charts.totalDays.title: Calendar days in progress
|
||
§ plugin.team_tasks.charts.totalDays.description: If the first commit was made on Friday evening and the last on Monday morning, the total time working on the task will be counted as 4 days (Fri, Sat, Sun, Mon).
|
||
§ plugin.team_tasks.charts.workedDays.title: Actual days in progress
|
||
§ plugin.team_tasks.charts.workedDays.description: If the first commit was made on Friday evening and the last on Monday morning, the time working on the task will be counted as 2 days (Fri, Mon).
|
||
§ plugin.team_tasks.charts.backlog: Technical debt (tasks created in the task tracker and not taken into development for more than three months)
|
||
§ plugin.team_tasks.charts.authors.title: Who took into work
|
||
§ plugin.team_tasks.charts.authors.other: and others
|
||
§ plugin.team_tasks.charts.await.title: How long the task was in the backlog
|
||
§ plugin.team_tasks.charts.worked.title: How many calendar days were spent on it afterward
|
||
§ plugin.team_tasks.charts.other: more
|
||
`,es:`
|
||
§ plugin.team_tasks.sidebar: Lista de tareas
|
||
§ plugin.team_tasks.task.title: Lista de tareas
|
||
§ plugin.team_tasks.task.author: Autor del primer commit
|
||
§ plugin.team_tasks.task.task: Tarea
|
||
§ plugin.team_tasks.task.description: Descripción
|
||
§ plugin.team_tasks.task.totalAuthors: Empleados
|
||
§ plugin.team_tasks.task.totalDaysInBacklog: En backlog
|
||
§ plugin.team_tasks.task.totalDaysWorked: En desarrollo
|
||
§ plugin.team_tasks.task.createdBefore: Creada antes
|
||
§ plugin.team_tasks.task.from: Primer commit
|
||
§ plugin.team_tasks.task.to: Último commit
|
||
§ plugin.team_tasks.details.facts: Información de la tarea
|
||
§ plugin.team_tasks.details.release: Lista de lanzamientos en los que probablemente entró la tarea
|
||
§ plugin.team_tasks.details.commits: Lista de commits con esta tarea en el commit message
|
||
§ plugin.team_tasks.release.title: Lanzamiento
|
||
§ plugin.team_tasks.release.releaseDateMerge: Publicado
|
||
§ plugin.team_tasks.release.prDateMerge: Fusionado
|
||
§ plugin.team_tasks.commits.date: Fecha
|
||
§ plugin.team_tasks.commits.author: Autor
|
||
§ plugin.team_tasks.commits.description: Descripción
|
||
§ plugin.team_tasks.info.createdBefore: creada antes
|
||
§ plugin.team_tasks.info.totalDaysInBacklog: días en backlog
|
||
§ plugin.team_tasks.info.totalAuthors: empleados que trabajaron
|
||
§ plugin.team_tasks.info.totalDaysWorked: días en curso
|
||
§ plugin.team_tasks.info.authors: Empleados
|
||
§ plugin.team_tasks.info.types: Tipos de commit
|
||
§ plugin.team_tasks.info.scope: Lista de funciones
|
||
§ plugin.team_tasks.info.commits: Commits
|
||
§ plugin.team_tasks.charts.all: Analítica de todas las tareas
|
||
§ plugin.team_tasks.charts.totalTask.title: Una tarea en promedio es
|
||
§ plugin.team_tasks.charts.totalTaskInDay.title: días
|
||
§ plugin.team_tasks.charts.totalTaskInFiles.title: archivos
|
||
§ plugin.team_tasks.charts.totalTaskInChanges.title: líneas de código
|
||
§ plugin.team_tasks.charts.totalTaskInCommits.title: commits
|
||
§ plugin.team_tasks.charts.cardFromCommit.title: días desde el commit hasta el lanzamiento
|
||
§ plugin.team_tasks.charts.cardFromCommit.description: Tiempo promedio de las tareas que estuvieron en el backlog menos de tres meses.
|
||
§ plugin.team_tasks.charts.timeToMarket.title: Tiempo de comercialización de una tarea
|
||
§ plugin.team_tasks.charts.timeToMarket.backlog: en backlog
|
||
§ plugin.team_tasks.charts.timeToMarket.worked: en curso
|
||
§ plugin.team_tasks.charts.timeToMarket.review: en revisión
|
||
§ plugin.team_tasks.charts.timeToMarket.release: en espera de lanzamiento
|
||
§ plugin.team_tasks.charts.timeToMarket.improvements: mejoras
|
||
§ plugin.team_tasks.charts.relative.title: Días desde la creación hasta el primer commit
|
||
§ plugin.team_tasks.charts.relative.fast: hasta 2 semanas
|
||
§ plugin.team_tasks.charts.relative.normal: hasta 3 meses
|
||
§ plugin.team_tasks.charts.relative.backlog: más
|
||
§ plugin.team_tasks.charts.normal: Tareas habituales (puestas en desarrollo en un plazo de tres meses desde su creación)
|
||
§ plugin.team_tasks.charts.cardTotal.title: tareas en esta categoría
|
||
§ plugin.team_tasks.charts.cardTotal.description: Teniendo en cuenta los filtros de búsqueda actuales.
|
||
§ plugin.team_tasks.charts.totalDays.title: Días calendario en curso
|
||
§ plugin.team_tasks.charts.totalDays.description: Si el primer commit se hizo el viernes por la noche y el último el lunes por la mañana, el tiempo total de trabajo en la tarea se contará como 4 días (vie, sáb, dom, lun).
|
||
§ plugin.team_tasks.charts.workedDays.title: Días reales en curso
|
||
§ plugin.team_tasks.charts.workedDays.description: Si el primer commit se hizo el viernes por la noche y el último el lunes por la mañana, el tiempo de trabajo en la tarea se contará como 2 días (vie, lun).
|
||
§ plugin.team_tasks.charts.backlog: Deuda técnica (tareas creadas en el gestor de tareas y no puestas en desarrollo durante más de tres meses)
|
||
§ plugin.team_tasks.charts.authors.title: Quién la tomó en trabajo
|
||
§ plugin.team_tasks.charts.authors.other: y otros
|
||
§ plugin.team_tasks.charts.await.title: Cuánto tiempo estuvo la tarea en el backlog
|
||
§ plugin.team_tasks.charts.worked.title: Cuántos días calendario se dedicaron a ella después
|
||
§ plugin.team_tasks.charts.other: más
|
||
`,fr:`
|
||
§ plugin.team_tasks.sidebar: Liste des tâches
|
||
§ plugin.team_tasks.task.title: Liste des tâches
|
||
§ plugin.team_tasks.task.author: Auteur du premier commit
|
||
§ plugin.team_tasks.task.task: Tâche
|
||
§ plugin.team_tasks.task.description: Description
|
||
§ plugin.team_tasks.task.totalAuthors: Salariés
|
||
§ plugin.team_tasks.task.totalDaysInBacklog: En backlog
|
||
§ plugin.team_tasks.task.totalDaysWorked: En développement
|
||
§ plugin.team_tasks.task.createdBefore: Créée avant
|
||
§ plugin.team_tasks.task.from: Premier commit
|
||
§ plugin.team_tasks.task.to: Dernier commit
|
||
§ plugin.team_tasks.details.facts: Informations sur la tâche
|
||
§ plugin.team_tasks.details.release: Liste des versions dans lesquelles la tâche a probablement été intégrée
|
||
§ plugin.team_tasks.details.commits: Liste des commits dont le commit message contient cette tâche
|
||
§ plugin.team_tasks.release.title: Version
|
||
§ plugin.team_tasks.release.releaseDateMerge: Publié
|
||
§ plugin.team_tasks.release.prDateMerge: Fusionné
|
||
§ plugin.team_tasks.commits.date: Date
|
||
§ plugin.team_tasks.commits.author: Auteur
|
||
§ plugin.team_tasks.commits.description: Description
|
||
§ plugin.team_tasks.info.createdBefore: créée avant
|
||
§ plugin.team_tasks.info.totalDaysInBacklog: jours en backlog
|
||
§ plugin.team_tasks.info.totalAuthors: salariés ayant travaillé
|
||
§ plugin.team_tasks.info.totalDaysWorked: jours en cours
|
||
§ plugin.team_tasks.info.authors: Salariés
|
||
§ plugin.team_tasks.info.types: Types de commit
|
||
§ plugin.team_tasks.info.scope: Liste des fonctionnalités
|
||
§ plugin.team_tasks.info.commits: Commits
|
||
§ plugin.team_tasks.charts.all: Analytique pour toutes les tâches
|
||
§ plugin.team_tasks.charts.totalTask.title: Une tâche en moyenne correspond à
|
||
§ plugin.team_tasks.charts.totalTaskInDay.title: jours
|
||
§ plugin.team_tasks.charts.totalTaskInFiles.title: fichiers
|
||
§ plugin.team_tasks.charts.totalTaskInChanges.title: lignes de code
|
||
§ plugin.team_tasks.charts.totalTaskInCommits.title: commits
|
||
§ plugin.team_tasks.charts.cardFromCommit.title: jours du commit à la version
|
||
§ plugin.team_tasks.charts.cardFromCommit.description: Temps moyen pour les tâches restées moins de trois mois en backlog.
|
||
§ plugin.team_tasks.charts.timeToMarket.title: Délai de mise sur le marché d’une tâche
|
||
§ plugin.team_tasks.charts.timeToMarket.backlog: en backlog
|
||
§ plugin.team_tasks.charts.timeToMarket.worked: en cours
|
||
§ plugin.team_tasks.charts.timeToMarket.review: en revue
|
||
§ plugin.team_tasks.charts.timeToMarket.release: en attente de version
|
||
§ plugin.team_tasks.charts.timeToMarket.improvements: améliorations
|
||
§ plugin.team_tasks.charts.relative.title: Jours de la création au premier commit
|
||
§ plugin.team_tasks.charts.relative.fast: jusqu’à 2 semaines
|
||
§ plugin.team_tasks.charts.relative.normal: jusqu’à 3 mois
|
||
§ plugin.team_tasks.charts.relative.backlog: plus
|
||
§ plugin.team_tasks.charts.normal: Tâches habituelles (prises en développement dans les trois mois suivant leur création)
|
||
§ plugin.team_tasks.charts.cardTotal.title: tâches dans cette catégorie
|
||
§ plugin.team_tasks.charts.cardTotal.description: Compte tenu des filtres de recherche actuels.
|
||
§ plugin.team_tasks.charts.totalDays.title: Jours calendaires en cours
|
||
§ plugin.team_tasks.charts.totalDays.description: Si le premier commit a été effectué le vendredi soir et le dernier le lundi matin, le temps total de travail sur la tâche sera compté comme 4 jours (ven, sam, dim, lun).
|
||
§ plugin.team_tasks.charts.workedDays.title: Jours réels en cours
|
||
§ plugin.team_tasks.charts.workedDays.description: Si le premier commit a été effectué le vendredi soir et le dernier le lundi matin, le temps de travail sur la tâche sera compté comme 2 jours (ven, lun).
|
||
§ plugin.team_tasks.charts.backlog: Dette technique (tâches créées dans le gestionnaire de tâches et non prises en développement pendant plus de trois mois)
|
||
§ plugin.team_tasks.charts.authors.title: Qui a pris la tâche en charge
|
||
§ plugin.team_tasks.charts.authors.other: et autres
|
||
§ plugin.team_tasks.charts.await.title: Combien de temps la tâche est restée en backlog
|
||
§ plugin.team_tasks.charts.worked.title: Combien de jours calendaires y ont ensuite été consacrés
|
||
§ plugin.team_tasks.charts.other: plus
|
||
`,he:`
|
||
§ plugin.team_tasks.sidebar: רשימת משימות
|
||
§ plugin.team_tasks.task.title: רשימת משימות
|
||
§ plugin.team_tasks.task.author: מחבר ה-commit הראשון
|
||
§ plugin.team_tasks.task.task: משימה
|
||
§ plugin.team_tasks.task.description: תיאור
|
||
§ plugin.team_tasks.task.totalAuthors: עובדים
|
||
§ plugin.team_tasks.task.totalDaysInBacklog: ב-backlog
|
||
§ plugin.team_tasks.task.totalDaysWorked: בפיתוח
|
||
§ plugin.team_tasks.task.createdBefore: נוצרה לפני
|
||
§ plugin.team_tasks.task.from: commit ראשון
|
||
§ plugin.team_tasks.task.to: commit אחרון
|
||
§ plugin.team_tasks.details.facts: מידע על המשימה
|
||
§ plugin.team_tasks.details.release: רשימת גרסאות שבהן המשימה ככל הנראה נכללה
|
||
§ plugin.team_tasks.details.commits: רשימת commits שבהם מופיעה משימה זו ב-commit message
|
||
§ plugin.team_tasks.release.title: גרסה
|
||
§ plugin.team_tasks.release.releaseDateMerge: פורסם
|
||
§ plugin.team_tasks.release.prDateMerge: מוזג
|
||
§ plugin.team_tasks.commits.date: תאריך
|
||
§ plugin.team_tasks.commits.author: מחבר
|
||
§ plugin.team_tasks.commits.description: תיאור
|
||
§ plugin.team_tasks.info.createdBefore: נוצרה לפני
|
||
§ plugin.team_tasks.info.totalDaysInBacklog: ימים ב-backlog
|
||
§ plugin.team_tasks.info.totalAuthors: עובדים שעבדו
|
||
§ plugin.team_tasks.info.totalDaysWorked: ימים בביצוע
|
||
§ plugin.team_tasks.info.authors: עובדים
|
||
§ plugin.team_tasks.info.types: סוגי commit
|
||
§ plugin.team_tasks.info.scope: רשימת תכונות
|
||
§ plugin.team_tasks.info.commits: Commits
|
||
§ plugin.team_tasks.charts.all: אנליטיקה לכל המשימות
|
||
§ plugin.team_tasks.charts.totalTask.title: משימה אחת בממוצע היא
|
||
§ plugin.team_tasks.charts.totalTaskInDay.title: ימים
|
||
§ plugin.team_tasks.charts.totalTaskInFiles.title: קבצים
|
||
§ plugin.team_tasks.charts.totalTaskInChanges.title: שורות קוד
|
||
§ plugin.team_tasks.charts.totalTaskInCommits.title: commits
|
||
§ plugin.team_tasks.charts.cardFromCommit.title: ימים מה-commit עד לגרסה
|
||
§ plugin.team_tasks.charts.cardFromCommit.description: זמן ממוצע למשימות שהיו ב-backlog פחות משלושה חודשים.
|
||
§ plugin.team_tasks.charts.timeToMarket.title: זמן עד להבאת משימה לשוק
|
||
§ plugin.team_tasks.charts.timeToMarket.backlog: ב-backlog
|
||
§ plugin.team_tasks.charts.timeToMarket.worked: בביצוע
|
||
§ plugin.team_tasks.charts.timeToMarket.review: בסקירה
|
||
§ plugin.team_tasks.charts.timeToMarket.release: בהמתנה לגרסה
|
||
§ plugin.team_tasks.charts.timeToMarket.improvements: שיפורים
|
||
§ plugin.team_tasks.charts.relative.title: ימים מהיצירה עד ל-commit הראשון
|
||
§ plugin.team_tasks.charts.relative.fast: עד שבועיים
|
||
§ plugin.team_tasks.charts.relative.normal: עד 3 חודשים
|
||
§ plugin.team_tasks.charts.relative.backlog: יותר
|
||
§ plugin.team_tasks.charts.normal: משימות רגילות (שנלקחו לפיתוח בתוך שלושה חודשים מהיצירה)
|
||
§ plugin.team_tasks.charts.cardTotal.title: משימות בקטגוריה זו
|
||
§ plugin.team_tasks.charts.cardTotal.description: בהתחשב במסנני החיפוש הנוכחיים.
|
||
§ plugin.team_tasks.charts.totalDays.title: ימי לוח שנה בביצוע
|
||
§ plugin.team_tasks.charts.totalDays.description: אם ה-commit הראשון נוצר בערב יום שישי והאחרון בבוקר יום שני, זמן העבודה הכולל על המשימה ייספר כ-4 ימים (ו׳, שבת, א׳, ב׳).
|
||
§ plugin.team_tasks.charts.workedDays.title: ימים בפועל בביצוע
|
||
§ plugin.team_tasks.charts.workedDays.description: אם ה-commit הראשון נוצר בערב יום שישי והאחרון בבוקר יום שני, זמן העבודה על המשימה ייספר כ-2 ימים (ו׳, ב׳).
|
||
§ plugin.team_tasks.charts.backlog: חוב טכני (משימות שנוצרו במעקב המשימות ולא נלקחו לפיתוח במשך יותר משלושה חודשים)
|
||
§ plugin.team_tasks.charts.authors.title: מי לקח לעבודה
|
||
§ plugin.team_tasks.charts.authors.other: ואחרים
|
||
§ plugin.team_tasks.charts.await.title: כמה זמן הייתה המשימה ב-backlog
|
||
§ plugin.team_tasks.charts.worked.title: כמה ימי לוח שנה הושקעו בה לאחר מכן
|
||
§ plugin.team_tasks.charts.other: יותר
|
||
`,hi:`
|
||
§ plugin.team_tasks.sidebar: कार्य सूची
|
||
§ plugin.team_tasks.task.title: कार्य सूची
|
||
§ plugin.team_tasks.task.author: पहले commit के लेखक
|
||
§ plugin.team_tasks.task.task: कार्य
|
||
§ plugin.team_tasks.task.description: विवरण
|
||
§ plugin.team_tasks.task.totalAuthors: कर्मचारी
|
||
§ plugin.team_tasks.task.totalDaysInBacklog: बैकलॉग में
|
||
§ plugin.team_tasks.task.totalDaysWorked: विकास में
|
||
§ plugin.team_tasks.task.createdBefore: इससे पहले बनाया गया
|
||
§ plugin.team_tasks.task.from: पहला commit
|
||
§ plugin.team_tasks.task.to: अंतिम commit
|
||
§ plugin.team_tasks.details.facts: कार्य जानकारी
|
||
§ plugin.team_tasks.details.release: रिलीज़ की सूची जिनमें कार्य के शामिल होने की संभावना है
|
||
§ plugin.team_tasks.details.commits: उन commits की सूची जिनके commit message में यह कार्य है
|
||
§ plugin.team_tasks.release.title: रिलीज़
|
||
§ plugin.team_tasks.release.releaseDateMerge: प्रकाशित
|
||
§ plugin.team_tasks.release.prDateMerge: मर्ज किया गया
|
||
§ plugin.team_tasks.commits.date: तिथि
|
||
§ plugin.team_tasks.commits.author: लेखक
|
||
§ plugin.team_tasks.commits.description: विवरण
|
||
§ plugin.team_tasks.info.createdBefore: इससे पहले बनाया गया
|
||
§ plugin.team_tasks.info.totalDaysInBacklog: बैकलॉग में दिन
|
||
§ plugin.team_tasks.info.totalAuthors: कर्मचारी जिन्होंने काम किया
|
||
§ plugin.team_tasks.info.totalDaysWorked: प्रगति में दिन
|
||
§ plugin.team_tasks.info.authors: कर्मचारी
|
||
§ plugin.team_tasks.info.types: Commit प्रकार
|
||
§ plugin.team_tasks.info.scope: फीचर सूची
|
||
§ plugin.team_tasks.info.commits: Commits
|
||
§ plugin.team_tasks.charts.all: सभी कार्यों का विश्लेषण
|
||
§ plugin.team_tasks.charts.totalTask.title: एक कार्य औसतन है
|
||
§ plugin.team_tasks.charts.totalTaskInDay.title: दिन
|
||
§ plugin.team_tasks.charts.totalTaskInFiles.title: फ़ाइलें
|
||
§ plugin.team_tasks.charts.totalTaskInChanges.title: कोड की पंक्तियाँ
|
||
§ plugin.team_tasks.charts.totalTaskInCommits.title: commits
|
||
§ plugin.team_tasks.charts.cardFromCommit.title: commit से रिलीज़ तक के दिन
|
||
§ plugin.team_tasks.charts.cardFromCommit.description: उन कार्यों का औसत समय जो तीन महीने से कम समय बैकलॉग में रहे।
|
||
§ plugin.team_tasks.charts.timeToMarket.title: कार्य को बाज़ार में लाने का समय
|
||
§ plugin.team_tasks.charts.timeToMarket.backlog: बैकलॉग में
|
||
§ plugin.team_tasks.charts.timeToMarket.worked: प्रगति में
|
||
§ plugin.team_tasks.charts.timeToMarket.review: समीक्षा पर
|
||
§ plugin.team_tasks.charts.timeToMarket.release: रिलीज़ की प्रतीक्षा में
|
||
§ plugin.team_tasks.charts.timeToMarket.improvements: सुधार
|
||
§ plugin.team_tasks.charts.relative.title: निर्माण से प्रथम commit तक के दिन
|
||
§ plugin.team_tasks.charts.relative.fast: 2 सप्ताह तक
|
||
§ plugin.team_tasks.charts.relative.normal: 3 महीने तक
|
||
§ plugin.team_tasks.charts.relative.backlog: अधिक
|
||
§ plugin.team_tasks.charts.normal: नियमित कार्य (निर्माण के तीन महीने के भीतर विकास में लिए गए)
|
||
§ plugin.team_tasks.charts.cardTotal.title: इस श्रेणी में कार्य
|
||
§ plugin.team_tasks.charts.cardTotal.description: वर्तमान खोज फ़िल्टर को ध्यान में रखते हुए।
|
||
§ plugin.team_tasks.charts.totalDays.title: प्रगति में कैलेंडर दिन
|
||
§ plugin.team_tasks.charts.totalDays.description: यदि पहला commit शुक्रवार शाम को बनाया गया और अंतिम सोमवार सुबह, तो कार्य पर कुल समय 4 दिन माना जाएगा (शुक्र, शनि, रवि, सोम)।
|
||
§ plugin.team_tasks.charts.workedDays.title: प्रगति में वास्तविक दिन
|
||
§ plugin.team_tasks.charts.workedDays.description: यदि पहला commit शुक्रवार शाम को बनाया गया और अंतिम सोमवार सुबह, तो कार्य पर समय 2 दिन माना जाएगा (शुक्र, सोम)।
|
||
§ plugin.team_tasks.charts.backlog: तकनीकी ऋण (कार्य जो टास्क ट्रैकर में बनाए गए और तीन महीने से अधिक समय तक विकास में नहीं लिए गए)
|
||
§ plugin.team_tasks.charts.authors.title: किसने काम में लिया
|
||
§ plugin.team_tasks.charts.authors.other: और अन्य
|
||
§ plugin.team_tasks.charts.await.title: कार्य बैकलॉग में कितने समय रहा
|
||
§ plugin.team_tasks.charts.worked.title: उसके बाद उस पर कितने कैलेंडर दिन खर्च हुए
|
||
§ plugin.team_tasks.charts.other: अधिक
|
||
`,ja:`
|
||
§ plugin.team_tasks.sidebar: タスク一覧
|
||
§ plugin.team_tasks.task.title: タスク一覧
|
||
§ plugin.team_tasks.task.author: 最初の commit の作成者
|
||
§ plugin.team_tasks.task.task: タスク
|
||
§ plugin.team_tasks.task.description: 説明
|
||
§ plugin.team_tasks.task.totalAuthors: スタッフ
|
||
§ plugin.team_tasks.task.totalDaysInBacklog: バックログ内
|
||
§ plugin.team_tasks.task.totalDaysWorked: 開発中
|
||
§ plugin.team_tasks.task.createdBefore: 作成日が次より前
|
||
§ plugin.team_tasks.task.from: 最初の commit
|
||
§ plugin.team_tasks.task.to: 最後の commit
|
||
§ plugin.team_tasks.details.facts: タスク情報
|
||
§ plugin.team_tasks.details.release: このタスクが含まれる可能性が高いリリースの一覧
|
||
§ plugin.team_tasks.details.commits: commit message にこのタスクがある commits の一覧
|
||
§ plugin.team_tasks.release.title: リリース
|
||
§ plugin.team_tasks.release.releaseDateMerge: 公開済み
|
||
§ plugin.team_tasks.release.prDateMerge: マージ済み
|
||
§ plugin.team_tasks.commits.date: 日付
|
||
§ plugin.team_tasks.commits.author: 作成者
|
||
§ plugin.team_tasks.commits.description: 説明
|
||
§ plugin.team_tasks.info.createdBefore: 次より前に作成
|
||
§ plugin.team_tasks.info.totalDaysInBacklog: バックログ内の日数
|
||
§ plugin.team_tasks.info.totalAuthors: 作業したスタッフ
|
||
§ plugin.team_tasks.info.totalDaysWorked: 進行中の日数
|
||
§ plugin.team_tasks.info.authors: スタッフ
|
||
§ plugin.team_tasks.info.types: Commit の種類
|
||
§ plugin.team_tasks.info.scope: 機能の一覧
|
||
§ plugin.team_tasks.info.commits: Commits
|
||
§ plugin.team_tasks.charts.all: 全タスクの分析
|
||
§ plugin.team_tasks.charts.totalTask.title: 1 件のタスクの平均は
|
||
§ plugin.team_tasks.charts.totalTaskInDay.title: 日
|
||
§ plugin.team_tasks.charts.totalTaskInFiles.title: ファイル
|
||
§ plugin.team_tasks.charts.totalTaskInChanges.title: コード行
|
||
§ plugin.team_tasks.charts.totalTaskInCommits.title: commits
|
||
§ plugin.team_tasks.charts.cardFromCommit.title: commit からリリースまでの日数
|
||
§ plugin.team_tasks.charts.cardFromCommit.description: バックログ滞在が 3 か月未満だったタスクの平均時間。
|
||
§ plugin.team_tasks.charts.timeToMarket.title: タスクの市場投入までの時間
|
||
§ plugin.team_tasks.charts.timeToMarket.backlog: バックログ内
|
||
§ plugin.team_tasks.charts.timeToMarket.worked: 進行中
|
||
§ plugin.team_tasks.charts.timeToMarket.review: レビュー中
|
||
§ plugin.team_tasks.charts.timeToMarket.release: リリース待ち
|
||
§ plugin.team_tasks.charts.timeToMarket.improvements: 改善
|
||
§ plugin.team_tasks.charts.relative.title: 作成から最初の commit までの日数
|
||
§ plugin.team_tasks.charts.relative.fast: 2 週間まで
|
||
§ plugin.team_tasks.charts.relative.normal: 3 か月まで
|
||
§ plugin.team_tasks.charts.relative.backlog: それ以上
|
||
§ plugin.team_tasks.charts.normal: 通常のタスク(作成から 3 か月以内に開発へ取り込まれたもの)
|
||
§ plugin.team_tasks.charts.cardTotal.title: この区分のタスク
|
||
§ plugin.team_tasks.charts.cardTotal.description: 現在の検索フィルターを考慮しています。
|
||
§ plugin.team_tasks.charts.totalDays.title: 進行中の暦日
|
||
§ plugin.team_tasks.charts.totalDays.description: 最初の commit が金曜の夜、最後が月曜の朝の場合、タスクの作業時間合計は 4 日(金、土、日、月)と数えられます。
|
||
§ plugin.team_tasks.charts.workedDays.title: 進行中の実日数
|
||
§ plugin.team_tasks.charts.workedDays.description: 最初の commit が金曜の夜、最後が月曜の朝の場合、タスクの作業時間は 2 日(金、月)と数えられます。
|
||
§ plugin.team_tasks.charts.backlog: 技術的負債(タスク トラッカーに作成され、3 か月を超えて開発に取り込まれなかったタスク)
|
||
§ plugin.team_tasks.charts.authors.title: 誰が作業に取り入れたか
|
||
§ plugin.team_tasks.charts.authors.other: その他
|
||
§ plugin.team_tasks.charts.await.title: タスクがバックログにどれだけ滞在したか
|
||
§ plugin.team_tasks.charts.worked.title: その後に費やされた暦日数
|
||
§ plugin.team_tasks.charts.other: それ以上
|
||
`,ko:`
|
||
§ plugin.team_tasks.sidebar: 작업 목록
|
||
§ plugin.team_tasks.task.title: 작업 목록
|
||
§ plugin.team_tasks.task.author: 첫 번째 commit의 작성자
|
||
§ plugin.team_tasks.task.task: 작업
|
||
§ plugin.team_tasks.task.description: 설명
|
||
§ plugin.team_tasks.task.totalAuthors: 직원
|
||
§ plugin.team_tasks.task.totalDaysInBacklog: 백로그 중
|
||
§ plugin.team_tasks.task.totalDaysWorked: 개발 중
|
||
§ plugin.team_tasks.task.createdBefore: 다음 이전에 생성됨
|
||
§ plugin.team_tasks.task.from: 첫 번째 commit
|
||
§ plugin.team_tasks.task.to: 마지막 commit
|
||
§ plugin.team_tasks.details.facts: 작업 정보
|
||
§ plugin.team_tasks.details.release: 이 작업이 포함되었을 가능성이 있는 릴리스 목록
|
||
§ plugin.team_tasks.details.commits: commit message에 이 작업이 있는 commits 목록
|
||
§ plugin.team_tasks.release.title: 릴리스
|
||
§ plugin.team_tasks.release.releaseDateMerge: 게시됨
|
||
§ plugin.team_tasks.release.prDateMerge: 병합됨
|
||
§ plugin.team_tasks.commits.date: 날짜
|
||
§ plugin.team_tasks.commits.author: 작성자
|
||
§ plugin.team_tasks.commits.description: 설명
|
||
§ plugin.team_tasks.info.createdBefore: 다음 이전에 생성됨
|
||
§ plugin.team_tasks.info.totalDaysInBacklog: 백로그 일수
|
||
§ plugin.team_tasks.info.totalAuthors: 작업한 직원
|
||
§ plugin.team_tasks.info.totalDaysWorked: 진행 일수
|
||
§ plugin.team_tasks.info.authors: 직원
|
||
§ plugin.team_tasks.info.types: Commit 유형
|
||
§ plugin.team_tasks.info.scope: 기능 목록
|
||
§ plugin.team_tasks.info.commits: Commits
|
||
§ plugin.team_tasks.charts.all: 모든 작업에 대한 분석
|
||
§ plugin.team_tasks.charts.totalTask.title: 작업 한 건의 평균은
|
||
§ plugin.team_tasks.charts.totalTaskInDay.title: 일
|
||
§ plugin.team_tasks.charts.totalTaskInFiles.title: 파일
|
||
§ plugin.team_tasks.charts.totalTaskInChanges.title: 코드 줄
|
||
§ plugin.team_tasks.charts.totalTaskInCommits.title: commits
|
||
§ plugin.team_tasks.charts.cardFromCommit.title: commit부터 릴리스까지 일수
|
||
§ plugin.team_tasks.charts.cardFromCommit.description: 백로그에 세 달 미만 있었던 작업의 평균 시간입니다.
|
||
§ plugin.team_tasks.charts.timeToMarket.title: 작업을 시장에 내놓기까지의 시간
|
||
§ plugin.team_tasks.charts.timeToMarket.backlog: 백로그 중
|
||
§ plugin.team_tasks.charts.timeToMarket.worked: 진행 중
|
||
§ plugin.team_tasks.charts.timeToMarket.review: 검토 중
|
||
§ plugin.team_tasks.charts.timeToMarket.release: 릴리스 대기
|
||
§ plugin.team_tasks.charts.timeToMarket.improvements: 개선
|
||
§ plugin.team_tasks.charts.relative.title: 생성부터 첫 번째 commit까지의 일수
|
||
§ plugin.team_tasks.charts.relative.fast: 2주까지
|
||
§ plugin.team_tasks.charts.relative.normal: 3개월까지
|
||
§ plugin.team_tasks.charts.relative.backlog: 그 이상
|
||
§ plugin.team_tasks.charts.normal: 일반 작업(생성 후 세 달 이내에 개발로 투입된 작업)
|
||
§ plugin.team_tasks.charts.cardTotal.title: 이 범주의 작업
|
||
§ plugin.team_tasks.charts.cardTotal.description: 현재 검색 필터를 반영합니다.
|
||
§ plugin.team_tasks.charts.totalDays.title: 진행 중인 달력일
|
||
§ plugin.team_tasks.charts.totalDays.description: 첫 번째 commit이 금요일 저녁에, 마지막이 월요일 아침에 만들어졌다면 작업 총 시간은 4일(금, 토, 일, 월)로 계산됩니다.
|
||
§ plugin.team_tasks.charts.workedDays.title: 진행 중인 실제 일수
|
||
§ plugin.team_tasks.charts.workedDays.description: 첫 번째 commit이 금요일 저녁에, 마지막이 월요일 아침에 만들어졌다면 작업 시간은 2일(금, 월)로 계산됩니다.
|
||
§ plugin.team_tasks.charts.backlog: 기술 부채(작업 추적기에 생성되고 세 달 넘게 개발에 투입되지 않은 작업)
|
||
§ plugin.team_tasks.charts.authors.title: 누가 작업에 착수했는지
|
||
§ plugin.team_tasks.charts.authors.other: 및 기타
|
||
§ plugin.team_tasks.charts.await.title: 작업이 백로그에 얼마나 있었는지
|
||
§ plugin.team_tasks.charts.worked.title: 그 후 투입된 달력일 수
|
||
§ plugin.team_tasks.charts.other: 그 이상
|
||
`,pt:`
|
||
§ plugin.team_tasks.sidebar: Lista de tarefas
|
||
§ plugin.team_tasks.task.title: Lista de tarefas
|
||
§ plugin.team_tasks.task.author: Autor do primeiro commit
|
||
§ plugin.team_tasks.task.task: Tarefa
|
||
§ plugin.team_tasks.task.description: Descrição
|
||
§ plugin.team_tasks.task.totalAuthors: Funcionários
|
||
§ plugin.team_tasks.task.totalDaysInBacklog: No backlog
|
||
§ plugin.team_tasks.task.totalDaysWorked: Em desenvolvimento
|
||
§ plugin.team_tasks.task.createdBefore: Criada antes
|
||
§ plugin.team_tasks.task.from: Primeiro commit
|
||
§ plugin.team_tasks.task.to: Último commit
|
||
§ plugin.team_tasks.details.facts: Informações da tarefa
|
||
§ plugin.team_tasks.details.release: Lista de lançamentos em que a tarefa provavelmente entrou
|
||
§ plugin.team_tasks.details.commits: Lista de commits com esta tarefa no commit message
|
||
§ plugin.team_tasks.release.title: Lançamento
|
||
§ plugin.team_tasks.release.releaseDateMerge: Publicado
|
||
§ plugin.team_tasks.release.prDateMerge: Mesclado
|
||
§ plugin.team_tasks.commits.date: Data
|
||
§ plugin.team_tasks.commits.author: Autor
|
||
§ plugin.team_tasks.commits.description: Descrição
|
||
§ plugin.team_tasks.info.createdBefore: criada antes
|
||
§ plugin.team_tasks.info.totalDaysInBacklog: dias no backlog
|
||
§ plugin.team_tasks.info.totalAuthors: funcionários que trabalharam
|
||
§ plugin.team_tasks.info.totalDaysWorked: dias em curso
|
||
§ plugin.team_tasks.info.authors: Funcionários
|
||
§ plugin.team_tasks.info.types: Tipos de commit
|
||
§ plugin.team_tasks.info.scope: Lista de funcionalidades
|
||
§ plugin.team_tasks.info.commits: Commits
|
||
§ plugin.team_tasks.charts.all: Análise de todas as tarefas
|
||
§ plugin.team_tasks.charts.totalTask.title: Uma tarefa em média é
|
||
§ plugin.team_tasks.charts.totalTaskInDay.title: dias
|
||
§ plugin.team_tasks.charts.totalTaskInFiles.title: arquivos
|
||
§ plugin.team_tasks.charts.totalTaskInChanges.title: linhas de código
|
||
§ plugin.team_tasks.charts.totalTaskInCommits.title: commits
|
||
§ plugin.team_tasks.charts.cardFromCommit.title: dias do commit até ao lançamento
|
||
§ plugin.team_tasks.charts.cardFromCommit.description: Tempo médio das tarefas que estiveram no backlog menos de três meses.
|
||
§ plugin.team_tasks.charts.timeToMarket.title: Tempo de lançamento de uma tarefa no mercado
|
||
§ plugin.team_tasks.charts.timeToMarket.backlog: no backlog
|
||
§ plugin.team_tasks.charts.timeToMarket.worked: em curso
|
||
§ plugin.team_tasks.charts.timeToMarket.review: em revisão
|
||
§ plugin.team_tasks.charts.timeToMarket.release: aguardando lançamento
|
||
§ plugin.team_tasks.charts.timeToMarket.improvements: melhorias
|
||
§ plugin.team_tasks.charts.relative.title: Dias da criação até ao primeiro commit
|
||
§ plugin.team_tasks.charts.relative.fast: até 2 semanas
|
||
§ plugin.team_tasks.charts.relative.normal: até 3 meses
|
||
§ plugin.team_tasks.charts.relative.backlog: mais
|
||
§ plugin.team_tasks.charts.normal: Tarefas habituais (colocadas em desenvolvimento no prazo de três meses após a criação)
|
||
§ plugin.team_tasks.charts.cardTotal.title: tarefas nesta categoria
|
||
§ plugin.team_tasks.charts.cardTotal.description: Tendo em conta os filtros de pesquisa atuais.
|
||
§ plugin.team_tasks.charts.totalDays.title: Dias de calendário em curso
|
||
§ plugin.team_tasks.charts.totalDays.description: Se o primeiro commit foi feito na sexta-feira à noite e o último na segunda-feira de manhã, o tempo total de trabalho na tarefa será contado como 4 dias (sex, sáb, dom, seg).
|
||
§ plugin.team_tasks.charts.workedDays.title: Dias reais em curso
|
||
§ plugin.team_tasks.charts.workedDays.description: Se o primeiro commit foi feito na sexta-feira à noite e o último na segunda-feira de manhã, o tempo de trabalho na tarefa será contado como 2 dias (sex, seg).
|
||
§ plugin.team_tasks.charts.backlog: Dívida técnica (tarefas criadas no gestor de tarefas e não colocadas em desenvolvimento durante mais de três meses)
|
||
§ plugin.team_tasks.charts.authors.title: Quem a tomou para trabalho
|
||
§ plugin.team_tasks.charts.authors.other: e outros
|
||
§ plugin.team_tasks.charts.await.title: Quanto tempo a tarefa esteve no backlog
|
||
§ plugin.team_tasks.charts.worked.title: Quantos dias de calendário foram depois gastos nela
|
||
§ plugin.team_tasks.charts.other: mais
|
||
`,ru:`
|
||
§ plugin.team_tasks.sidebar: Список задач
|
||
§ plugin.team_tasks.task.title: Список задач
|
||
§ plugin.team_tasks.task.author: Автор первого коммита
|
||
§ plugin.team_tasks.task.task: Задача
|
||
§ plugin.team_tasks.task.description: Описание
|
||
§ plugin.team_tasks.task.totalAuthors: Сотрудников
|
||
§ plugin.team_tasks.task.totalDaysInBacklog: В беклоге
|
||
§ plugin.team_tasks.task.totalDaysWorked: В разработке
|
||
§ plugin.team_tasks.task.createdBefore: Создана до
|
||
§ plugin.team_tasks.task.from: Первый коммит
|
||
§ plugin.team_tasks.task.to: Последний коммит
|
||
§ plugin.team_tasks.details.facts: Информация по задаче
|
||
§ plugin.team_tasks.details.release: Список релизов, в которые, вероятно, попала эта задача
|
||
§ plugin.team_tasks.details.commits: Список коммитов, в которых был номер этой задачи
|
||
§ plugin.team_tasks.release.title: Релиз
|
||
§ plugin.team_tasks.release.releaseDateMerge: Опубликован
|
||
§ plugin.team_tasks.release.prDateMerge: Влит
|
||
§ plugin.team_tasks.commits.date: Дата
|
||
§ plugin.team_tasks.commits.author: Сотрудник
|
||
§ plugin.team_tasks.commits.description: Что было сделано
|
||
§ plugin.team_tasks.info.createdBefore: создана до
|
||
§ plugin.team_tasks.info.totalDaysInBacklog: дней в беклоге
|
||
§ plugin.team_tasks.info.totalAuthors: сотрудников работало
|
||
§ plugin.team_tasks.info.totalDaysWorked: дней в работе
|
||
§ plugin.team_tasks.info.authors: Сотрудники
|
||
§ plugin.team_tasks.info.types: Типы коммитов
|
||
§ plugin.team_tasks.info.scope: Список фичей
|
||
§ plugin.team_tasks.info.commits: Коммитов
|
||
§ plugin.team_tasks.charts.all: Аналитика по всем задачам
|
||
§ plugin.team_tasks.charts.totalTask.title: Одна задача в среднем это
|
||
§ plugin.team_tasks.charts.totalTaskInDay.title: дней
|
||
§ plugin.team_tasks.charts.totalTaskInFiles.title: файлов
|
||
§ plugin.team_tasks.charts.totalTaskInChanges.title: строк кода
|
||
§ plugin.team_tasks.charts.totalTaskInCommits.title: коммитов
|
||
§ plugin.team_tasks.charts.cardFromCommit.title: дней от коммита до релиза
|
||
§ plugin.team_tasks.charts.cardFromCommit.description: Усредненное время для задач, которые были в беклоге меньше трёх месяцев.
|
||
§ plugin.team_tasks.charts.timeToMarket.title: Время вывода задачи в прод (time-to-market)
|
||
§ plugin.team_tasks.charts.timeToMarket.backlog: в бэклоге
|
||
§ plugin.team_tasks.charts.timeToMarket.worked: в работе
|
||
§ plugin.team_tasks.charts.timeToMarket.review: на ревью
|
||
§ plugin.team_tasks.charts.timeToMarket.release: ожидание релиза
|
||
§ plugin.team_tasks.charts.timeToMarket.improvements: доработки
|
||
§ plugin.team_tasks.charts.relative.title: Дней от создания до первого коммита
|
||
§ plugin.team_tasks.charts.relative.fast: до 2х недель
|
||
§ plugin.team_tasks.charts.relative.normal: до 3х месяц
|
||
§ plugin.team_tasks.charts.relative.backlog: больше
|
||
§ plugin.team_tasks.charts.normal: Обычные задачи (взяли в разработку в течении трёх месяцев от момента создания)
|
||
§ plugin.team_tasks.charts.cardTotal.title: задач в этой категории
|
||
§ plugin.team_tasks.charts.cardTotal.description: С учётом текущих фильтров поиска.
|
||
§ plugin.team_tasks.charts.totalDays.title: Календарных дней в работе
|
||
§ plugin.team_tasks.charts.totalDays.description: Если первый коммит сделан в пятницу вечером, а последний в понедельник утром, то общее время работы над задачей будет считаться 4 дня (пт, сб, вс, пн).
|
||
§ plugin.team_tasks.charts.workedDays.title: Фактических дней в работе
|
||
§ plugin.team_tasks.charts.workedDays.description: Если первый коммит сделан в пятницу вечером, а последний в понедельник утром, то время работы над задачей будет считаться 2 дня (пт, пн).
|
||
§ plugin.team_tasks.charts.backlog: Тех. долг (задачи, которые завели в таск-трекер и не брали в разработку больше трёх месяцев)
|
||
§ plugin.team_tasks.charts.authors.title: Кто брал в работу
|
||
§ plugin.team_tasks.charts.authors.other: и другие
|
||
§ plugin.team_tasks.charts.await.title: Как долго задача была в беклоге
|
||
§ plugin.team_tasks.charts.worked.title: Сколько дней (календарных) её потом делали
|
||
§ plugin.team_tasks.charts.other: больше
|
||
`,zh:`
|
||
§ plugin.team_tasks.sidebar: 任务列表
|
||
§ plugin.team_tasks.task.title: 任务列表
|
||
§ plugin.team_tasks.task.author: 首次 commit 的作者
|
||
§ plugin.team_tasks.task.task: 任务
|
||
§ plugin.team_tasks.task.description: 描述
|
||
§ plugin.team_tasks.task.totalAuthors: 员工
|
||
§ plugin.team_tasks.task.totalDaysInBacklog: 在待办中
|
||
§ plugin.team_tasks.task.totalDaysWorked: 开发中
|
||
§ plugin.team_tasks.task.createdBefore: 创建于之前
|
||
§ plugin.team_tasks.task.from: 首次 commit
|
||
§ plugin.team_tasks.task.to: 最后一次 commit
|
||
§ plugin.team_tasks.details.facts: 任务信息
|
||
§ plugin.team_tasks.details.release: 该任务很可能进入的发布列表
|
||
§ plugin.team_tasks.details.commits: commit message 中包含此任务的 commits 列表
|
||
§ plugin.team_tasks.release.title: 发布
|
||
§ plugin.team_tasks.release.releaseDateMerge: 已发布
|
||
§ plugin.team_tasks.release.prDateMerge: 已合并
|
||
§ plugin.team_tasks.commits.date: 日期
|
||
§ plugin.team_tasks.commits.author: 作者
|
||
§ plugin.team_tasks.commits.description: 描述
|
||
§ plugin.team_tasks.info.createdBefore: 创建于之前
|
||
§ plugin.team_tasks.info.totalDaysInBacklog: 待办中的天数
|
||
§ plugin.team_tasks.info.totalAuthors: 参与工作的员工
|
||
§ plugin.team_tasks.info.totalDaysWorked: 进行中的天数
|
||
§ plugin.team_tasks.info.authors: 员工
|
||
§ plugin.team_tasks.info.types: Commit 类型
|
||
§ plugin.team_tasks.info.scope: 功能列表
|
||
§ plugin.team_tasks.info.commits: Commits
|
||
§ plugin.team_tasks.charts.all: 全部任务的分析
|
||
§ plugin.team_tasks.charts.totalTask.title: 一项任务平均是
|
||
§ plugin.team_tasks.charts.totalTaskInDay.title: 天
|
||
§ plugin.team_tasks.charts.totalTaskInFiles.title: 文件
|
||
§ plugin.team_tasks.charts.totalTaskInChanges.title: 代码行
|
||
§ plugin.team_tasks.charts.totalTaskInCommits.title: commits
|
||
§ plugin.team_tasks.charts.cardFromCommit.title: 从 commit 到发布的天数
|
||
§ plugin.team_tasks.charts.cardFromCommit.description: 待办时间不足三个月的任务的平均时长。
|
||
§ plugin.team_tasks.charts.timeToMarket.title: 任务投放市场所需时间
|
||
§ plugin.team_tasks.charts.timeToMarket.backlog: 在待办中
|
||
§ plugin.team_tasks.charts.timeToMarket.worked: 进行中
|
||
§ plugin.team_tasks.charts.timeToMarket.review: 评审中
|
||
§ plugin.team_tasks.charts.timeToMarket.release: 等待发布
|
||
§ plugin.team_tasks.charts.timeToMarket.improvements: 改进
|
||
§ plugin.team_tasks.charts.relative.title: 从创建到首次 commit 的天数
|
||
§ plugin.team_tasks.charts.relative.fast: 最多 2 周
|
||
§ plugin.team_tasks.charts.relative.normal: 最多 3 个月
|
||
§ plugin.team_tasks.charts.relative.backlog: 更长
|
||
§ plugin.team_tasks.charts.normal: 常规任务(创建后三个月内进入开发)
|
||
§ plugin.team_tasks.charts.cardTotal.title: 该类别中的任务
|
||
§ plugin.team_tasks.charts.cardTotal.description: 已考虑当前搜索筛选条件。
|
||
§ plugin.team_tasks.charts.totalDays.title: 进行中的日历日
|
||
§ plugin.team_tasks.charts.totalDays.description: 若首次 commit 在周五晚上、最后一次在周一早上,则该任务的总工作时间计为 4 天(五、六、日、一)。
|
||
§ plugin.team_tasks.charts.workedDays.title: 进行中的实际天数
|
||
§ plugin.team_tasks.charts.workedDays.description: 若首次 commit 在周五晚上、最后一次在周一早上,则该任务的工作时间计为 2 天(五、一)。
|
||
§ plugin.team_tasks.charts.backlog: 技术债务(在任务跟踪器中创建且超过三个月未进入开发的任务)
|
||
§ plugin.team_tasks.charts.authors.title: 谁将其纳入工作
|
||
§ plugin.team_tasks.charts.authors.other: 及其他
|
||
§ plugin.team_tasks.charts.await.title: 任务在待办中停留了多久
|
||
§ plugin.team_tasks.charts.worked.title: 此后在其上花费了多少个日历日
|
||
§ plugin.team_tasks.charts.other: 更长
|
||
`},[_L,hL]=Ui("days"),[fL,yL]=Ui("years");function vL({content:t}){var n,r;if(!(t!=null&&t.length))return null;const e=(n=_L(t,"totalDaysInBacklog"))==null?void 0:n.details,s=(r=fL(t,"totalDays"))==null?void 0:r.details;return o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_tasks.charts.await.title",details:e,order:hL,limit:3,suffix:"common.statistic.tasks",other:"plugin.team_tasks.charts.other"})}),o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_tasks.charts.worked.title",details:s,order:yL,limit:3,suffix:"common.statistic.tasks",other:"plugin.team_tasks.charts.other"})})]})}function kL(t){const e=t==null?void 0:t.totalDaysInBacklog,s=(t==null?void 0:t.totalDaysWorked)||0;return{total:e+s,details:{backlog:e,worked:s,review:0,release:0,improvements:0}}}function Tb(t,e){const s=t.prIds.length-1;if(s<0)return kL(t);const n=e.get(t.prIds[0]),r=t.totalDaysInBacklog,u=(n==null?void 0:n.daysWorkOnTask)||0,c=(n==null?void 0:n.daysInReview)||0,p=(n==null?void 0:n.daysAwaitRelease)||0,_=u+c+p,h={total:r+_,details:{backlog:r,worked:u,review:c,release:p,improvements:0}};if(!s)return h;const f=e.get(s),v=t==null?void 0:t.totalDays,k=(f==null?void 0:f.daysInReview)||0,x=(f==null?void 0:f.daysAwaitRelease)||0,N=v+k+x-_;return N<1?h:{total:r+_+N,details:{backlog:r,worked:u,review:c,release:p,improvements:N}}}function Db(t,e){const s=new Lt,n=new Lt,r=new Lt,u=new Lt,c=new Lt;t.forEach(_=>{const h=Tb(_,e);h&&(s.update(h.details.backlog),n.update(h.details.worked),r.update(h.details.review),u.update(h.details.release),c.update(h.details.improvements))});const p={backlog:s.get()>>0,worked:n.get()>>0,review:r.get()>>0,release:u.get()>>0,improvements:c.get()>>0};return{total:Object.values(p).reduce((_,h)=>_+h,0),details:p}}const[Sb,Ab]=Ui("years"),bL=U(({content:t})=>{var k,x,N,q,I,F,se,te;if(!(t!=null&&t.length))return null;const e=(k=A.statisticsByCommits.release.totalInfo)==null?void 0:k.length,s=A.statisticsByCommits.pr.totalInfoByName,n=Db(t,s),[r,u,c,p,_]=["plugin.team_tasks.charts.timeToMarket.backlog","plugin.team_tasks.charts.timeToMarket.worked","plugin.team_tasks.charts.timeToMarket.review","plugin.team_tasks.charts.timeToMarket.release","plugin.team_tasks.charts.timeToMarket.improvements"],h=n.details.worked+n.details.review+n.details.release,f=(x=Sb(t,"totalDays"))==null?void 0:x.details,v=(N=Sb(t,"totalDaysWorked"))==null?void 0:N.details;return o.jsxs(o.Fragment,{children:[o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(_e,{value:t==null?void 0:t.length,icon:"./assets/cards/tasks.svg",title:"plugin.team_tasks.charts.cardTotal.title",description:"plugin.team_tasks.charts.cardTotal.description"}),o.jsx(Y,{value:e,children:o.jsx(_e,{value:h,icon:"./assets/cards/release_month.svg",title:"plugin.team_tasks.charts.cardFromCommit.title",description:"plugin.team_tasks.charts.cardFromCommit.description"})})]}),o.jsx(Q,{children:o.jsx(Y,{value:n==null?void 0:n.total,children:o.jsx(Ne,{title:"plugin.team_tasks.charts.timeToMarket.title",description:"common.statistic.days",value:n==null?void 0:n.total,details:n!=null&&n.details?{[r]:(q=n==null?void 0:n.details)==null?void 0:q.backlog,[u]:(I=n==null?void 0:n.details)==null?void 0:I.worked,[c]:(F=n==null?void 0:n.details)==null?void 0:F.review,[p]:(se=n==null?void 0:n.details)==null?void 0:se.release,[_]:(te=n==null?void 0:n.details)==null?void 0:te.improvements}:void 0,limit:1,order:[r,u,c,p,_],suffix:"common.statistic.days"})})})]}),o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(Ne,{title:"plugin.team_tasks.charts.totalDays.title",details:f,order:Ab,limit:3,suffix:"common.statistic.tasks",other:"plugin.team_tasks.charts.other"}),o.jsx(ot,{translationId:"plugin.team_tasks.charts.totalDays.description"})]}),o.jsxs(Q,{children:[o.jsx(Ne,{title:"plugin.team_tasks.charts.workedDays.title",details:v,order:Ab,limit:3,suffix:"common.statistic.tasks",other:"plugin.team_tasks.charts.other"}),o.jsx(ot,{translationId:"plugin.team_tasks.charts.workedDays.description"})]})]})]})});function wL(t){let e=0,s=0,n=0;return t.forEach(r=>{r.totalDaysInBacklog>90?n+=1:r.totalDaysInBacklog>14?s+=1:e+=1}),[e,s,n]}function xL(t){const e=new Lt,s=new Lt,n=new Lt,r=new Lt;return t.forEach(u=>{u.isStaff||(e.update(u.totalTaskInChanges,u.totalTasks),s.update(u.totalTaskInCommits,u.totalTasks),n.update(u.totalTaskInDay,u.totalTasks),r.update(u.totalTaskInFiles,u.totalTasks))}),{totalTaskInChanges:e.get(),totalTaskInCommits:s.get(),totalTaskInDay:n.get(),totalTaskInFiles:r.get()}}function CL({content:t}){if(!(t!=null&&t.length))return null;const[e,s,n]=wL(t),[r,u,c]=["plugin.team_tasks.charts.relative.fast","plugin.team_tasks.charts.relative.normal","plugin.team_tasks.charts.relative.backlog"],{totalTaskInChanges:p,totalTaskInCommits:_,totalTaskInDay:h,totalTaskInFiles:f}=xL(A.statisticsByCommits.author.totalInfo);return o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(G,{title:"plugin.team_tasks.charts.all"}),o.jsx(Ne,{value:t==null?void 0:t.length,title:"plugin.team_tasks.charts.relative.title",description:"common.statistic.tasks",details:{[r]:e,[u]:s,[c]:n},limit:1,order:[r,u,c],suffix:"common.statistic.tasks"})]}),o.jsxs(Q,{children:[o.jsx(G,{title:"plugin.team_tasks.charts.totalTask.title"}),o.jsx(ke,{value:Kt(h),icon:"./assets/cards/day.svg",title:"plugin.team_tasks.charts.totalTaskInDay.title"}),o.jsx(ke,{value:Kt(f),icon:"./assets/cards/files.svg",title:"plugin.team_tasks.charts.totalTaskInFiles.title"}),o.jsx(ke,{value:Kt(p),icon:"./assets/cards/lines.svg",title:"plugin.team_tasks.charts.totalTaskInChanges.title"}),o.jsx(ke,{value:Kt(_),icon:"./assets/cards/commits.svg",title:"plugin.team_tasks.charts.totalTaskInCommits.title"})]})]})}const jL=U(({task:t})=>{var f,v,k,x,N,q,I,F;const e=A.statisticsByCommits.pr.totalInfoByName,{text:s}=ie(),n=[{title:s("plugin.team_tasks.info.authors"),value:Array.from(t==null?void 0:t.authors).join(", ")||"—"},{title:s("plugin.team_tasks.info.types"),value:((f=t==null?void 0:t.types)==null?void 0:f.join(", "))||"—"},{title:s("plugin.team_tasks.info.scope"),value:((v=t==null?void 0:t.scope)==null?void 0:v.join(", "))||"—"},{title:s("plugin.team_tasks.info.commits"),value:(k=t==null?void 0:t.commits)==null?void 0:k.length}],r=Tb(t,e),[u,c,p,_,h]=["plugin.team_tasks.charts.timeToMarket.backlog","plugin.team_tasks.charts.timeToMarket.worked","plugin.team_tasks.charts.timeToMarket.review","plugin.team_tasks.charts.timeToMarket.release","plugin.team_tasks.charts.timeToMarket.improvements"];return o.jsxs(o.Fragment,{children:[o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_tasks.charts.timeToMarket.title",description:"common.statistic.days",value:r==null?void 0:r.total,details:r!=null&&r.details?{[u]:(x=r==null?void 0:r.details)==null?void 0:x.backlog,[c]:(N=r==null?void 0:r.details)==null?void 0:N.worked,[p]:(q=r==null?void 0:r.details)==null?void 0:q.review,[_]:(I=r==null?void 0:r.details)==null?void 0:I.release,[h]:(F=r==null?void 0:r.details)==null?void 0:F.improvements}:void 0,limit:1,order:[u,c,p,_,h],suffix:"common.statistic.days"})}),o.jsxs(Q,{children:[o.jsx(ke,{value:oe(t==null?void 0:t.createdBefore),icon:"./assets/cards/day.svg",title:"plugin.team_tasks.info.createdBefore"}),o.jsx(ke,{value:t==null?void 0:t.totalAuthors,icon:"./assets/cards/employees.svg",title:"plugin.team_tasks.info.totalAuthors"}),o.jsx(ke,{value:t==null?void 0:t.totalDaysInBacklog,icon:"./assets/cards/month.svg",title:"plugin.team_tasks.info.totalDaysInBacklog"}),o.jsx(ke,{value:t==null?void 0:t.totalDaysWorked,icon:"./assets/cards/work_days2.svg",title:"plugin.team_tasks.info.totalDaysWorked"})]})]}),o.jsxs(ws,{headless:!0,rows:n,children:[o.jsx(w,{properties:"title",width:170,template:se=>o.jsx("b",{style:{fontWeight:"bold"},children:se})}),o.jsx(w,{template:C.NUMBER,properties:"value"})]})]})});function TL({response:t,updateSort:e,rowsForExcel:s,mode:n}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:"details",type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{template:C.STRING,title:"plugin.team_tasks.release.title",width:120,properties:"releaseTitle"}),o.jsx(w,{template:C.STRING,title:"plugin.team_tasks.release.releaseDateMerge",width:150,properties:"releaseDateMerge",formatter:oe}),o.jsx(w,{width:80,template:r=>o.jsx(Hs,{prId:r.prExternalId},r.prId)}),o.jsx(w,{template:C.STRING,title:"plugin.team_tasks.release.prDateMerge",properties:"prDateMerge",formatter:Fr})]}):null}function DL({response:t,updateSort:e,rowsForExcel:s,mode:n}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:"details",type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{template:C.STRING,title:"plugin.team_tasks.commits.date",properties:"milliseconds",width:180,formatter:Fr}),o.jsx(w,{template:C.STRING,title:"plugin.team_tasks.commits.author",width:200,properties:"author"}),o.jsx(w,{template:C.STRING,title:"plugin.team_tasks.commits.description",properties:"description",formatter:Lu})]}):null}function SL({task:t}){if(!t)return null;const e=Yk(t,A.statisticsByCommits);return o.jsxs(o.Fragment,{children:[o.jsx(nt,{height:"xxl"}),o.jsx(G,{title:"plugin.team_tasks.details.facts"}),o.jsx(jL,{task:t}),o.jsxs(Y,{value:e,children:[o.jsx(nt,{height:"xxl"}),o.jsx(G,{title:"plugin.team_tasks.details.release"})]}),o.jsxs(be,{content:e,children:[o.jsx(TL,{mode:"details"}),o.jsx(fe,{})]}),o.jsxs(Y,{value:t==null?void 0:t.commits,children:[o.jsx(nt,{height:"xxl"}),o.jsx(G,{title:"plugin.team_tasks.details.commits"})]}),o.jsxs(be,{content:t==null?void 0:t.commits,children:[o.jsx(DL,{mode:"details"}),o.jsx(fe,{})]})]})}function AL({response:t,updateSort:e,rowsForExcel:s,mode:n}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,template:C.DETAILS,width:40,formatter:r=>o.jsx(SL,{task:r})}),o.jsx(w,{isFixed:!0,isSortable:!0,template:C.TASK,properties:"task",title:"plugin.team_tasks.task.task"}),o.jsx(w,{properties:"prIds",template:C.PULL_REQUESTS}),o.jsx(w,{properties:"types",template:C.TAGS}),o.jsx(w,{properties:"scope",template:C.TAGS}),o.jsx(w,{template:C.STRING,title:"plugin.team_tasks.task.description",properties:"description"}),o.jsx(w,{template:C.STRING,title:"plugin.team_tasks.task.author",properties:"firstAuthor",width:170}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"totalAuthors",title:"plugin.team_tasks.task.totalAuthors",width:120}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"totalDaysInBacklog",title:"plugin.team_tasks.task.totalDaysInBacklog",width:120}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"totalDaysWorked",title:"plugin.team_tasks.task.totalDaysWorked",width:120}),o.jsx(w,{template:C.STRING,properties:"createdBefore",title:"plugin.team_tasks.task.createdBefore",width:150,formatter:oe}),o.jsx(w,{template:C.STRING,title:"plugin.team_tasks.task.from",properties:"firstCommit",width:150,formatter:oe}),o.jsx(w,{template:C.STRING,title:"plugin.team_tasks.task.to",properties:"lastCommit",width:150,formatter:oe})]}):null}const zL=U(({mode:t})=>{const e=A.statisticsByCommits.tasks.totalInfo,[s,n]=T.useState(e),[r,u]=T.useState(""),c=T.useMemo(()=>s.filter(h=>h.totalDaysInBacklog>90),[r]),p=T.useMemo(()=>s.filter(h=>h.totalDaysInBacklog<=90),[r]),_=`${t}${r}${A.hash}`;return e!=null&&e.length?o.jsxs(o.Fragment,{children:[o.jsxs(Y,{value:t!=="print",children:[o.jsx(G,{title:"common.filters"}),o.jsx(Ei,{content:e,mode:"sort-by-searchIndex",properties:["description","task","firstAuthor"],onChange:(h,f)=>{n(h),u(f)},onFilter:h=>f=>!(h.author&&!f.authors.has(h.author)||h.company&&f.company!==h.company||h.taskCode&&f.taskCode!==h.taskCode||h.scope&&!f.scope.includes(h.scope)||h.type&&!f.types.includes(h.type))})]}),o.jsxs(Y,{value:(s==null?void 0:s.length)>8,children:[o.jsx(CL,{content:s}),o.jsx(nt,{height:"xl"})]}),o.jsxs(Y,{value:(s==null?void 0:s.length)>8,children:[o.jsx(G,{title:"plugin.team_tasks.charts.normal"}),o.jsx(bL,{content:p}),o.jsx(nt,{height:"xl"})]}),o.jsx(G,{title:"plugin.team_tasks.task.title"}),o.jsxs(be,{content:s,mode:t,watch:_,children:[o.jsx(AL,{mode:t,rowsForExcel:s}),o.jsx(Le,{}),o.jsx(fe,{})]}),o.jsxs(Y,{value:(c==null?void 0:c.length)>8,children:[o.jsx(G,{title:"plugin.team_tasks.charts.backlog"}),o.jsx(vL,{content:c})]})]}):t!=="print"?o.jsx(Le,{}):null});let NL=(zl=class{constructor(){this.dependencies=["tasks","author","release","pr"]}getMenuItems(){return[{id:"tasks",group:40,order:170,link:"/team/tasks",title:"plugin.team_tasks.sidebar",icon:"./assets/menu/tasks.svg"}]}getPage(e,s){return e==="/team/tasks"?o.jsx(zL,{mode:s==null?void 0:s.mode}):void 0}getTranslations(){return gL}},zl.id="team_tasks",zl);const Vi={tempo:"tempo",tempo_wrapper:"tempo_wrapper",tempo_column:"tempo_column",tempo_column_wrapper:"tempo_column_wrapper",tempo_header:"tempo_header",tempo_author:"tempo_author",tempo_header_title:"tempo_header_title",tempo_header_day:"tempo_header_day"};function ML({dayInfo:t}){return o.jsxs("div",{className:Vi.tempo_header,children:[o.jsx("p",{className:Vi.tempo_header_title,children:oe(t==null?void 0:t.timestamp)}),o.jsx("p",{className:Vi.tempo_header_day,children:ls(t==null?void 0:t.day,"long")})]})}function RL({name:t}){return o.jsx("div",{className:Vi.tempo_author,children:t||""})}const Ca={tempo_task:"tempo_task",tempo_task_wrapper:"tempo_task_wrapper",tempo_task_header:"tempo_task_header",tempo_task_value:"tempo_task_value",tempo_task_title:"tempo_task_title",tempo_task_tag:"tempo_task_tag",tempo_task_tags:"tempo_task_tags",tempo_task_commits:"tempo_task_commits",tempo_task_hours:"tempo_task_hours",tempo_task_icon:"tempo_task_icon"};function Og(t){return`${Rn(t.hours)}:${Rn(t.minutes)}`}function EL(t){const e=t[0],s=t[t.length-1];return e!==s?`c ${Og(e)} до ${Og(s)}`:`до ${Og(e)}`}function IL(t){const e=new Set(t.map(n=>n.type)),s=Array.from(e).filter(n=>n).map(n=>o.jsx("p",{className:Ca.tempo_task_tag,children:n},n));return o.jsx(o.Fragment,{children:s})}function qL({title:t,commits:e}){var c;const{t:s}=ie(),n=jt.tasks.totalInfoByName.get(t),r=e[0].milliseconds,u=(c=n==null?void 0:n.prIds)==null?void 0:c.find(p=>jt.pr.totalInfoByName.get(p).dateMerge>=r);return o.jsxs("div",{className:Ca.tempo_task,children:[o.jsxs("div",{className:Ca.tempo_task_header,children:[o.jsxs("div",{children:[t?o.jsx(Ri,{task:t}):"—",o.jsx(Hs,{prId:u})]}),o.jsx("div",{className:Ca.tempo_task_tags,children:IL(e)})]}),o.jsxs("figure",{className:Ca.tempo_task_commits,children:[o.jsxs("figure",{children:[o.jsx("img",{alt:"",src:"./assets/chart/commit.svg",className:Ca.tempo_task_icon}),o.jsx("figcaption",{className:Ca.tempo_task_value,children:e.length})]}),o.jsx("figcaption",{className:Ca.tempo_task_title,children:s("page.team.day.commits")})]}),o.jsxs("figure",{className:Ca.tempo_task_hours,children:[o.jsxs("figure",{children:[o.jsx("img",{alt:"",src:"./assets/chart/clock.svg",className:Ca.tempo_task_icon}),o.jsx("figcaption",{className:Ca.tempo_task_value,children:EL(e)})]}),o.jsx("figcaption",{className:Ca.tempo_task_title,children:s("page.team.day.activity")})]})]},t)}function OL({tasks:t}){const e=Object.entries(t).map(([s,n])=>o.jsx(qL,{title:s,commits:n},s));return o.jsx("div",{className:Ca.tempo_task_wrapper,children:e})}const Xs={tempo_chart:"tempo_chart",tempo_chart_dashboard:"tempo_chart_dashboard",tempo_chart_dot:"tempo_chart_dot",tempo_chart_legend:"tempo_chart_legend",tempo_chart_time:"tempo_chart_time"};function $L({tasks:t}){const e=4.166666666666667,r=Object.values(t).flat(1).reduce((u,c)=>(u[c.hours]+=c.changes+c.added+c.removed,u),new Array(24).fill(0)).map((u,c)=>{if(!u)return null;const p=e*c,_=Math.min(80,u/1.5);return o.jsx("div",{className:Xs.tempo_chart_dot,title:`${u} строк с ${Rn(c)}:00 до ${Rn(c+1)}:00`,style:{left:`${p}%`,height:`${_}%`}},c)});return o.jsxs("div",{className:Xs.tempo_chart,children:[o.jsx("div",{className:Xs.tempo_chart_dashboard,children:r}),o.jsxs("div",{className:Xs.tempo_chart_legend,children:[o.jsx("span",{className:Xs.tempo_chart_time,children:"00:00"}),o.jsx("span",{className:Xs.tempo_chart_time,children:"06:00"}),o.jsx("span",{className:Xs.tempo_chart_time,children:"12:00"}),o.jsx("span",{className:Xs.tempo_chart_time,children:"18:00"}),o.jsx("span",{className:Xs.tempo_chart_time,children:"00:00"})]})]})}function LL({dayInfo:t,order:e=[],author:s=""}){const n=Object.entries((t==null?void 0:t.tasksByAuthor)||{}).sort((r,u)=>e.indexOf(r[0])-e.indexOf(u[0])).filter(([r])=>s?r===s:!0).map(([r,u])=>o.jsxs("div",{children:[s?null:o.jsx(RL,{name:r}),o.jsx($L,{tasks:u}),o.jsx(OL,{tasks:u})]},r));return o.jsxs("div",{className:Vi.tempo_column,children:[o.jsx(ML,{dayInfo:t}),o.jsx("div",{className:`${Vi.tempo_column_wrapper} scroll_y`,children:n.length?n:null})]})}function BL({days:t,author:e,order:s}){const n=t.slice(0,7).map(r=>o.jsx(LL,{dayInfo:r,author:e,order:s||[]},r==null?void 0:r.timestamp));return o.jsx("div",{className:`${Vi.tempo_wrapper} scroll_x`,onTouchStart:r=>r.stopPropagation(),onMouseDown:r=>r.stopPropagation(),children:o.jsx("div",{className:Vi.tempo,children:n})})}const ea={tempo_by_table:"tempo_by_table",tempo_by_table_header:"tempo_by_table_header",tempo_by_table_first_column:"tempo_by_table_first_column",tempo_by_table_body:"tempo_by_table_body",tempo_by_table_row:"tempo_by_table_row",tempo_by_table_header_empty:"tempo_by_table_header_empty",tempo_by_table_task:"tempo_by_table_task",tempo_by_table_cell:"tempo_by_table_cell",tempo_by_table_cell_weekend:"tempo_by_table_cell_weekend",tempo_by_table_header_cell:"tempo_by_table_header_cell",tempo_by_table_header_cell_value:"tempo_by_table_header_cell_value",tempo_by_table_header_cell_description:"tempo_by_table_header_cell_description"};function PL({columns:t}){const e=t.map(s=>{const[n,r]=Ao(s.id);return o.jsx("div",{className:ea.tempo_by_table_header_cell,children:o.jsxs("div",{className:ea.tempo_by_table_header_cell_value,children:[n,o.jsx("div",{className:ea.tempo_by_table_header_cell_description,children:r})]})},s.id)});return o.jsxs("div",{className:ea.tempo_by_table_header,children:[o.jsx("div",{className:ea.tempo_by_table_header_empty}),e]})}function WL({data:t,isWeekend:e}){const s=e?`${ea.tempo_by_table_cell} ${ea.tempo_by_table_cell_weekend}`:ea.tempo_by_table_cell;return o.jsx("div",{className:s,children:t?`${Kt(t)}h`:null})}const FL=U(({columns:t,refTaskDay:e})=>{const s=t.map(n=>{var c,p;const r=e.get(n.id)||"",u=!((p=(c=de.config)==null?void 0:c.workDays)!=null&&p[n.day]);return o.jsx(WL,{data:r,isWeekend:u},n.id)});return o.jsx("div",{className:ea.tempo_by_table_row,children:s})}),UL=U(({tasks:t})=>{const e=A.statisticsByCommits.tasks.totalInfoByName,s=t.map(([n])=>{var u;const r=((u=e.get(n))==null?void 0:u.description)||"";return o.jsx("div",{className:ea.tempo_by_table_row,children:o.jsx("div",{className:ea.tempo_by_table_task,title:r,children:o.jsx(Ri,{task:n})})},n)});return o.jsx("div",{className:ea.tempo_by_table_first_column,children:s})}),zb=8;function GL(t){const e=t%1*10;return e>7?Math.ceil(t):e<3?Math.floor(t):Math.floor(t)+.5}function $g(t){const e=t.map(c=>{var h,f;const p=(h=c==null?void 0:c[0])==null?void 0:h.hours;return((f=c==null?void 0:c[(c==null?void 0:c.length)-1])==null?void 0:f.hours)-p||1}),s=e.reduce((c,p)=>c+p,0),n=zb/s;let r=0;const u=e.length-1;return e.map((c,p)=>{const _=GL(c*n);if(p!==u)return r+=_,_;const h=zb-r;return h<1?.5:h})}function HL(t){var r,u;if(!(t!=null&&t.length))return[];const e=(r=t==null?void 0:t[0])==null?void 0:r.milliseconds,s=(u=t==null?void 0:t[t.length-1])==null?void 0:u.milliseconds;if(e===s)return[e];const n=[];for(let c=e;c<s;c+=_t){const p=new Date(c),_=p.toISOString().split("T").shift()||"",h=p.getDay()-1;n.push({id:_,day:h<0?6:h})}return n}function VL(t,e){const s=HL(t),n=new Map;return t.forEach(r=>{const u=r.timestamp;Object.entries(r.tasksByAuthor).forEach(([c,p])=>{if(e&&c!==e)return;const _=Object.values(p),h=$g(_);Object.keys(p).forEach((f,v)=>{const k=n.get(f)||new Map,x=(k.get(u)||0)+h[v];k.set(u,x),n.set(f,k)})})}),[s,n]}function YL({days:t,author:e,mode:s}){const[n,r]=VL(t,e),u=Array.from(r),c=u.map(([_,h])=>o.jsx(FL,{columns:n,refTaskDay:h},_)),p=s==="print"?`${ea.tempo_by_table} scroll_x`:`${ea.tempo_by_table} scroll_x scroll_y`;return o.jsxs("div",{className:p,children:[o.jsx(PL,{columns:n}),o.jsx(UL,{tasks:u}),o.jsx("div",{className:ea.tempo_by_table_body,children:c})]})}const Js={tempo_like_list_day:"tempo_like_list_day",tempo_like_list_author:"tempo_like_list_author",tempo_like_list_task:"tempo_like_list_task",tempo_like_list_day_description:"tempo_like_list_day_description",tempo_like_list_task_number:"tempo_like_list_task_number",tempo_like_list_task_hours:"tempo_like_list_task_hours",tempo_like_list_task_spit:"tempo_like_list_task_spit",tempo_like_list_task_description:"tempo_like_list_task_description"};function QL({timestamp:t,day:e}){return o.jsxs("div",{className:Js.tempo_like_list_day,children:[oe(t),o.jsx("div",{className:Js.tempo_like_list_day_description,children:ls(e,"long")})]})}function KL({author:t}){return o.jsx("div",{className:Js.tempo_like_list_author,children:t})}const ZL=U(({task:t,hours:e})=>{const n=A.statisticsByCommits.tasks.totalInfoByName.get(t);return o.jsxs("div",{className:Js.tempo_like_list_task,children:[o.jsxs("div",{className:Js.tempo_like_list_task_number,children:[o.jsx(Ri,{task:t}),o.jsx("span",{className:Js.tempo_like_list_task_hours,children:`(${e}h)`})]}),o.jsx("div",{className:Js.tempo_like_list_task_spit,children:n!=null&&n.description?"—":""}),o.jsx("div",{className:Js.tempo_like_list_task_description,children:Lu(n==null?void 0:n.description)})]})});function XL({days:t,author:e,order:s}){const n=[];return t.forEach(r=>{n.push(o.jsx(QL,{timestamp:r.timestamp,day:r.day},r.timestamp)),(s||Object.keys(r.tasksByAuthor)).forEach(c=>{if(e&&c!==e)return;const p=Object.keys(r.tasksByAuthor[c]||{});if(!(p!=null&&p.length))return;e||n.push(o.jsx(KL,{author:c},`${r.timestamp}${c}`));const _=$g(p);p.forEach((h,f)=>{n.push(o.jsx(ZL,{task:h,hours:_[f]},`${r.timestamp}${c}${h}`))})})}),o.jsx("div",{className:Js.tempo_like_list,children:n})}function JL({view:t,filters:e,response:s}){if(!s)return null;const n=A.statisticsByCommits.author.list||[];return o.jsxs(o.Fragment,{children:[o.jsx(Y,{value:!t||t==="list",children:o.jsx(XL,{days:s.content,author:e==null?void 0:e.author,order:n})}),o.jsx(Y,{value:t==="table",children:o.jsx(YL,{days:s.content,author:e==null?void 0:e.author})}),o.jsx(Y,{value:t==="cards",children:o.jsx(BL,{days:s.content,author:e==null?void 0:e.author,order:n})})]})}function e2(t){const e=typeof t;if(e==="string")return t.substring(0,10);if(e==="number")return new Date(t).toISOString().substring(0,10)}function Nb({title:t,description:e,help:s,error:n,className:r,value:u,placeholder:c="Введите значение",onChange:p}){return o.jsx(Wn,{title:t,description:e,help:s,error:n,className:r,children:o.jsx("input",{type:"date",value:e2(u),placeholder:c,className:Fn.ui_kit_common,onChange:_=>{p&&p(`${_.target.value}T00:00:00.000Z`)}})})}function t2({title:t,description:e,help:s,error:n,className:r,value:u,placeholder:c="Введите значение",onChange:p}){const _=lv(u)||u;return o.jsxs(Wn,{title:t,description:e,help:s,error:n,className:`${r||""} ${Fn.ui_kit_date_week}`,children:[o.jsx("input",{type:"week",value:u||"",placeholder:c,className:Fn.ui_kit_common,onChange:h=>{const f=h.target.value.split("T").shift();p&&p(f)}}),o.jsx("span",{className:Fn.ui_kit_date_week_value,children:_})]})}const pm={team_day_filters_prev:"team_day_filters_prev",team_day_filters_next:"team_day_filters_next",team_day_toolbar:"team_day_toolbar",team_day_toolbar_change_view:"team_day_toolbar_change_view",team_day_toolbar_download:"team_day_toolbar_download"},a2=U(({filters:t,onChange:e})=>{const s=(r,u)=>{e&&e({...t||{},[r]:u,hash:Math.random()})},n=r=>{const u=(Math.abs((t==null?void 0:t.to)-(t==null?void 0:t.from))+_t)*r;e&&e({...t||{},from:(t==null?void 0:t.from)+u,to:(t==null?void 0:t.to)+u,hash:Math.random()})};return o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:Xt.layout_search_select,children:[o.jsx(Je,{mode:"second",disabled:!(t!=null&&t.from)||!(t!=null&&t.to),onClick:()=>n(-1),children:"«"}),o.jsx(Nb,{className:pm.team_day_filters_prev,value:(t==null?void 0:t.from)||void 0,onChange:r=>s("from",new Date(r).getTime())})]}),o.jsxs("div",{className:Xt.layout_search_select,children:[o.jsx(Nb,{className:pm.team_day_filters_next,value:(t==null?void 0:t.to)||void 0,onChange:r=>s("to",new Date(r).getTime())}),o.jsx(Je,{mode:"second",disabled:!(t!=null&&t.from)||!(t!=null&&t.to),onClick:()=>n(1),children:"»"})]})]})});function s2(t,e){var c;const s=A.statisticsByCommits.author.list,n=A.statisticsByCommits.tasks.totalInfoByName,r=((c=de==null?void 0:de.config)==null?void 0:c.prefixForTask)||"/",u=[];return t.forEach(p=>{const[_,h]=Ao(p.timestamp);u.push(`
|
||
## ${_} (${h})`),s.forEach(f=>{const v=Object.keys(p.tasksByAuthor[f]||{});if(!(v!=null&&v.length))return;u.push(`
|
||
**${f}:**`);const k=$g(v);v.forEach((x,N)=>{const q=n.get(x);u.push(`— [${x}](${r}${x}) (${k[N]}h) ${Lu(q==null?void 0:q.description)};`)})})}),`# Work days
|
||
${u.join(`
|
||
`)}`}function i2(t){const{text:e}=ie(),s=oe(t==null?void 0:t.from),n=oe(t==null?void 0:t.to),r=document.title,u=e("plugin.team_day.download");return t!=null&&t.author?`${r} - ${u} ${(t==null?void 0:t.author)||""} (${s} - ${n}).md`:`${r} - ${u} (${s} - ${n}).md`}function n2(t,e){const s=s2(t),n="text/csv;charset=windows-utf-8;",r=new Blob([s],{type:n}),u=i2(e);Ku(r,u)}const o2=U(({value:t,content:e,filters:s,onChange:n})=>o.jsxs("div",{className:pm.team_day_toolbar,children:[o.jsx(Ak,{value:t||"custom",className:pm.team_day_toolbar_change_view,options:[{id:"list",title:"plugin.team_day.view.list"},{id:"table",title:"plugin.team_day.view.table"},{id:"cards",title:"plugin.team_day.view.cards"}],onChange:([r])=>n(r)}),o.jsx("img",{alt:"",src:"./assets/icons/Download.svg",className:pm.team_day_toolbar_download,onClick:()=>{n2(e||[],s)}})]}));function l2(t){const e=new Set,s=new Set;let n=0;return t==null||t.forEach(r=>{Object.keys(r==null?void 0:r.tasks).forEach(u=>{e.add(u)}),Object.keys(r==null?void 0:r.tasksByAuthor).forEach(u=>{s.add(u),n+=8})}),[e.size,s.size,n]}const r2=U(({days:t})=>{const[e,s,n]=l2(t);return o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(ke,{value:t==null?void 0:t.length,icon:"./assets/cards/work_days2.svg",title:"plugin.team_day.shortInfo.days.title"}),o.jsx(ke,{value:e,icon:"./assets/cards/tasks.svg",title:"plugin.team_day.shortInfo.tasks.title"})]}),o.jsxs(Q,{children:[o.jsx(ke,{value:s,icon:"./assets/cards/employees.svg",title:"plugin.team_day.shortInfo.authors.title"}),o.jsx(ke,{value:n,icon:"./assets/cards/day.svg",title:"plugin.team_day.shortInfo.hours.title"})]})]})});function m2(t,e){var r;const s=(r=t[t.length-1])==null?void 0:r.milliseconds,n=s-_t*7;return{author:e||"",from:n,to:s}}function u2(t){return e=>!(t.from&&e.milliseconds<t.from||t.to&&e.milliseconds>t.to)}const c2=U(({user:t,mode:e})=>{const s=A.statisticsByCommits.timestamp.totalInfo.allCommitsByTimestamp||[],n=T.useMemo(()=>m2(s,t==null?void 0:t.author),[]),[r,u]=T.useState(n),[c,p]=T.useState(s.slice((s==null?void 0:s.length)-6,s.length)),[_,h]=T.useState("list");return s!=null&&s.length?o.jsxs(o.Fragment,{children:[o.jsx(G,{title:"common.filters"}),o.jsx(Ei,{elements:t!=null&&t.author?[]:["author"],content:s,defaultFilters:n,onChange:(f,v,k)=>{p(f),u(k)},onFilter:u2,children:o.jsx(a2,{})}),o.jsx(G,{title:"plugin.team_day.tempo.title"}),o.jsx(r2,{days:c}),o.jsx(Y,{value:e!=="print",children:o.jsx(o2,{content:c,filters:r,value:_,onChange:h})}),o.jsx(tc,{children:o.jsx(rc,{loader:()=>mc({content:c}),watch:JSON.stringify(r),children:o.jsx(JL,{view:_,filters:r})})})]}):o.jsx(Le,{})}),p2={ar:`
|
||
§ plugin.team_day.sidebar: حسب الأيام
|
||
§ plugin.team_day.view.cards: بطاقات
|
||
§ plugin.team_day.view.table: جدول
|
||
§ plugin.team_day.view.list: قائمة
|
||
§ plugin.team_day.shortInfo.days.title: أيام فيها commits
|
||
§ plugin.team_day.shortInfo.tasks.title: مهام
|
||
§ plugin.team_day.shortInfo.authors.title: موظفون
|
||
§ plugin.team_day.shortInfo.hours.title: ساعات مُسجَّلة
|
||
§ plugin.team_day.download: تفصيل الأيام
|
||
§ plugin.team_day.tempo.title: تفصيل العمل والساعات المستغرقة
|
||
`,de:`
|
||
§ plugin.team_day.sidebar: Nach Tagen
|
||
§ plugin.team_day.view.cards: Karten
|
||
§ plugin.team_day.view.table: Tabelle
|
||
§ plugin.team_day.view.list: Liste
|
||
§ plugin.team_day.shortInfo.days.title: Tage mit commits
|
||
§ plugin.team_day.shortInfo.tasks.title: Aufgaben
|
||
§ plugin.team_day.shortInfo.authors.title: Mitarbeiter
|
||
§ plugin.team_day.shortInfo.hours.title: erfasste Stunden
|
||
§ plugin.team_day.download: Detaillierung der Tage
|
||
§ plugin.team_day.tempo.title: Detaillierung der Arbeit und der aufgewendeten Stunden
|
||
`,en:`
|
||
§ plugin.team_day.sidebar: By days
|
||
§ plugin.team_day.view.cards: Cards
|
||
§ plugin.team_day.view.table: Table
|
||
§ plugin.team_day.view.list: List
|
||
§ plugin.team_day.shortInfo.days.title: days with commits
|
||
§ plugin.team_day.shortInfo.tasks.title: tasks
|
||
§ plugin.team_day.shortInfo.authors.title: employees
|
||
§ plugin.team_day.shortInfo.hours.title: hours logged
|
||
§ plugin.team_day.download: Detailing days
|
||
§ plugin.team_day.tempo.title: Detailing the work and spent hours
|
||
`,es:`
|
||
§ plugin.team_day.sidebar: Por días
|
||
§ plugin.team_day.view.cards: Tarjetas
|
||
§ plugin.team_day.view.table: Tabla
|
||
§ plugin.team_day.view.list: Lista
|
||
§ plugin.team_day.shortInfo.days.title: días con commits
|
||
§ plugin.team_day.shortInfo.tasks.title: tareas
|
||
§ plugin.team_day.shortInfo.authors.title: empleados
|
||
§ plugin.team_day.shortInfo.hours.title: horas registradas
|
||
§ plugin.team_day.download: Detalle de los días
|
||
§ plugin.team_day.tempo.title: Detalle del trabajo y de las horas dedicadas
|
||
`,fr:`
|
||
§ plugin.team_day.sidebar: Par jours
|
||
§ plugin.team_day.view.cards: Cartes
|
||
§ plugin.team_day.view.table: Tableau
|
||
§ plugin.team_day.view.list: Liste
|
||
§ plugin.team_day.shortInfo.days.title: jours avec commits
|
||
§ plugin.team_day.shortInfo.tasks.title: tâches
|
||
§ plugin.team_day.shortInfo.authors.title: collaborateurs
|
||
§ plugin.team_day.shortInfo.hours.title: heures saisies
|
||
§ plugin.team_day.download: Détail des jours
|
||
§ plugin.team_day.tempo.title: Détail du travail et des heures consacrées
|
||
`,he:`
|
||
§ plugin.team_day.sidebar: לפי ימים
|
||
§ plugin.team_day.view.cards: כרטיסים
|
||
§ plugin.team_day.view.table: טבלה
|
||
§ plugin.team_day.view.list: רשימה
|
||
§ plugin.team_day.shortInfo.days.title: ימים עם commits
|
||
§ plugin.team_day.shortInfo.tasks.title: משימות
|
||
§ plugin.team_day.shortInfo.authors.title: עובדים
|
||
§ plugin.team_day.shortInfo.hours.title: שעות שנרשמו
|
||
§ plugin.team_day.download: פירוט הימים
|
||
§ plugin.team_day.tempo.title: פירוט העבודה והשעות שהושקעו
|
||
`,hi:`
|
||
§ plugin.team_day.sidebar: दिनों के अनुसार
|
||
§ plugin.team_day.view.cards: कार्ड
|
||
§ plugin.team_day.view.table: तालिका
|
||
§ plugin.team_day.view.list: सूची
|
||
§ plugin.team_day.shortInfo.days.title: commits वाले दिन
|
||
§ plugin.team_day.shortInfo.tasks.title: कार्य
|
||
§ plugin.team_day.shortInfo.authors.title: कर्मचारी
|
||
§ plugin.team_day.shortInfo.hours.title: दर्ज घंटे
|
||
§ plugin.team_day.download: दिनों का विवरण
|
||
§ plugin.team_day.tempo.title: कार्य और व्यय किए गए घंटों का विवरण
|
||
`,ja:`
|
||
§ plugin.team_day.sidebar: 日別
|
||
§ plugin.team_day.view.cards: カード
|
||
§ plugin.team_day.view.table: 表
|
||
§ plugin.team_day.view.list: リスト
|
||
§ plugin.team_day.shortInfo.days.title: commit のある日
|
||
§ plugin.team_day.shortInfo.tasks.title: タスク
|
||
§ plugin.team_day.shortInfo.authors.title: 従業員
|
||
§ plugin.team_day.shortInfo.hours.title: 記録された時間
|
||
§ plugin.team_day.download: 日次の詳細
|
||
§ plugin.team_day.tempo.title: 作業と所要時間の詳細
|
||
`,ko:`
|
||
§ plugin.team_day.sidebar: 일별
|
||
§ plugin.team_day.view.cards: 카드
|
||
§ plugin.team_day.view.table: 표
|
||
§ plugin.team_day.view.list: 목록
|
||
§ plugin.team_day.shortInfo.days.title: commits가 있는 날
|
||
§ plugin.team_day.shortInfo.tasks.title: 작업
|
||
§ plugin.team_day.shortInfo.authors.title: 직원
|
||
§ plugin.team_day.shortInfo.hours.title: 기록된 시간
|
||
§ plugin.team_day.download: 일별 상세
|
||
§ plugin.team_day.tempo.title: 작업 및 소요 시간 상세
|
||
`,pt:`
|
||
§ plugin.team_day.sidebar: Por dias
|
||
§ plugin.team_day.view.cards: Cartões
|
||
§ plugin.team_day.view.table: Tabela
|
||
§ plugin.team_day.view.list: Lista
|
||
§ plugin.team_day.shortInfo.days.title: dias com commits
|
||
§ plugin.team_day.shortInfo.tasks.title: tarefas
|
||
§ plugin.team_day.shortInfo.authors.title: colaboradores
|
||
§ plugin.team_day.shortInfo.hours.title: horas registradas
|
||
§ plugin.team_day.download: Detalhamento dos dias
|
||
§ plugin.team_day.tempo.title: Detalhamento do trabalho e das horas gastas
|
||
`,ru:`
|
||
§ plugin.team_day.sidebar: По дням
|
||
§ plugin.team_day.view.cards: Карточки
|
||
§ plugin.team_day.view.table: Таблица
|
||
§ plugin.team_day.view.list: Список
|
||
§ plugin.team_day.shortInfo.days.title: дни с коммитами
|
||
§ plugin.team_day.shortInfo.tasks.title: задач
|
||
§ plugin.team_day.shortInfo.authors.title: сотрудников
|
||
§ plugin.team_day.shortInfo.hours.title: списано часов
|
||
§ plugin.team_day.download: Детализация раб. дней
|
||
§ plugin.team_day.tempo.title: Детализация работ и затраченного времени
|
||
`,zh:`
|
||
§ plugin.team_day.sidebar: 按日
|
||
§ plugin.team_day.view.cards: 卡片
|
||
§ plugin.team_day.view.table: 表格
|
||
§ plugin.team_day.view.list: 列表
|
||
§ plugin.team_day.shortInfo.days.title: 有 commits 的天数
|
||
§ plugin.team_day.shortInfo.tasks.title: 任务
|
||
§ plugin.team_day.shortInfo.authors.title: 员工
|
||
§ plugin.team_day.shortInfo.hours.title: 已登记工时
|
||
§ plugin.team_day.download: 工作日明细
|
||
§ plugin.team_day.tempo.title: 工作与耗时明细
|
||
`};let d2=(Nl=class{constructor(){this.dependencies=["timestamp","author","tasks"]}getMenuItems(){return[{id:"day",group:20,order:100,link:"/team/day",title:"plugin.team_day.sidebar",icon:"./assets/menu/day.svg"}]}getPage(e){return e==="/team/day"||e==="/person/day"?o.jsx(c2,{}):void 0}getTranslations(){return p2}},Nl.id="team_day",Nl);const g2={ar:`
|
||
§ plugin.team_total.sidebar: معلومات عامة
|
||
§ plugin.team_total.common.title: عن المشروع
|
||
§ plugin.team_total.workSpeed.title: مهام في اليوم
|
||
§ plugin.team_total.workSpeed.description: متوسط إنتاجية الفريق مع التكوين الحالي للموظفين
|
||
§ plugin.team_total.employment.title: يعمل / غادر
|
||
§ plugin.team_total.employment.description: إذا لم يُنشئ الموظف أي commit خلال شهر، يُعدّ أنه غادر
|
||
§ plugin.team_total.common.duration.title: المدة الإجمالية للعمل
|
||
§ plugin.team_total.common.duration.description: إجمالي وقت التطوير من أول commit إلى آخره.
|
||
§ plugin.team_total.common.location.title: المكتب الرئيسي
|
||
§ plugin.team_total.common.location.description: الموقع الأكثر شيوعًا للتكوين الأساسي الحالي للموظفين.
|
||
§ plugin.team_total.common.employees.title: أشخاص في القسم
|
||
§ plugin.team_total.common.employees.description: استنادًا إلى توقع إجمالي عدد الموظفين حسب معدل تغيّر معرفات المهام.
|
||
§ plugin.team_total.release.title: معلومات الإصدارات
|
||
§ plugin.team_total.release.total.title: إجمالي الإصدارات
|
||
§ plugin.team_total.release.total.description: الإصدار هو branch يتضمن الكلمة "release". وكقاعدة عامة، تظهر في أحداث "auto-merge".
|
||
§ plugin.team_total.money.title: تقدير تكلفة التطوير
|
||
§ plugin.team_total.moneyAll.title: الإجمالي
|
||
§ plugin.team_total.moneyAll.description: إجمالي تكاليف الرواتب، بما في ذلك بدل الإجازة والزيادة المدفوعة للعمل في عطلات نهاية الأسبوع.
|
||
§ plugin.team_total.moneyWorked.title: الفعلي
|
||
§ plugin.team_total.moneyWorked.description: الأيام الفعلية للعمل مضروبة في متوسط الراتب.
|
||
§ plugin.team_total.moneyLosses.title: زيادة محتملة في الدفع
|
||
§ plugin.team_total.moneyLosses.description: أيام عمل مدفوعة لم يكن فيها commits.
|
||
§ plugin.team_total.weekendPayment.title: عمل عطلة نهاية الأسبوع
|
||
§ plugin.team_total.weekendPayment.description: إجمالي الزيادة المدفوعة للعمل في عطلات نهاية الأسبوع.
|
||
§ plugin.team_total.moneySpeed.title: شهريًا
|
||
§ plugin.team_total.moneySpeed.description: مبلغ الرواتب المتوقع مع التكوين الحالي للموظفين، باستثناء الضرائب واستهلاك المعدات والتكاليف المرتبطة.
|
||
§ plugin.team_total.forecastingMoneyAll.title: تكاليف المشروع عبر الزمن
|
||
§ plugin.team_total.forecastingMoneyAll.description: مبلغ الرواتب المحتمل عبر الزمن لجميع الموظفين المحتملين في القسم غير الظاهرين في السجلات لكن كان يمكن وجودهم (استنادًا إلى ترقيم معرفات المهام في متعقّب المهام).
|
||
§ plugin.team_total.description1: *أيام-شخص* هي عمل موظف واحد خلال يوم عمل واحد. على سبيل المثال، في يوم تقويمي واحد يقدّم فريق من ثلاثة موظفين حجم عمل يعادل ثلاثة أيام-شخص.
|
||
§ plugin.team_total.description2: تشمل *أيام الغياب* أيام العمل فقط التي كان يمكن فيها إنشاء commits. لا تدخل عطلات نهاية الأسبوع والعطل الرسمية والإجازات في الحساب.
|
||
§ plugin.team_total.description3: تعرض بطاقة *يعمل / غادر* الموظفين الفعليين المشاركين باستمرار في العمل. بالإضافة إلى ذلك، هناك «مساعدون» — عادةً أشخاص بتخصص مختلف قد يُنشئون commits في المشروع أحيانًا.
|
||
§ plugin.team_total.description4: تشمل *زيادة الدفع* أيام العمل فقط التي كان يمكن فيها إنشاء commits. لا تدخل عطلات نهاية الأسبوع والعطل الرسمية والإجازات في الحساب. لذلك زيادة الدفع + التكلفة الفعلية != الإجمالي. تتضمن التكلفة الإجمالية الدفع عن عطلات نهاية الأسبوع والعطل الرسمية والإجازات.
|
||
§ plugin.team_total.description5: يُحسب *عمل عطلة نهاية الأسبوع* بمعامل x2 نسبةً إلى أجر يوم عادي. المعروض أعلاه هو الزيادة فقط (x1)، لأن حقيقة العمل الإضافي بحد ذاتها غير مهمة في هذا السياق. نحن لا ننظر إلى سرعة استهلاك الميزانية. نحن ننظر إلى زيادة الدفع عند ارتفاع سرعة العمل.
|
||
`,de:`
|
||
§ plugin.team_total.sidebar: Allgemeine Informationen
|
||
§ plugin.team_total.common.title: Über das Projekt
|
||
§ plugin.team_total.workSpeed.title: Aufgaben pro Tag
|
||
§ plugin.team_total.workSpeed.description: Durchschnittlicher Teamdurchsatz bei der aktuellen Mitarbeiterzusammensetzung
|
||
§ plugin.team_total.employment.title: arbeitet / ausgeschieden
|
||
§ plugin.team_total.employment.description: Wenn ein Mitarbeiter innerhalb eines Monats keinen einzigen commit erstellt hat, gilt er als ausgeschieden
|
||
§ plugin.team_total.common.duration.title: gesamte Arbeitsdauer
|
||
§ plugin.team_total.common.duration.description: Gesamte Entwicklungszeit vom ersten bis zum letzten commit.
|
||
§ plugin.team_total.common.location.title: Hauptsitz
|
||
§ plugin.team_total.common.location.description: Beliebtester Standort für die aktuelle Kernzusammensetzung der Mitarbeiter.
|
||
§ plugin.team_total.common.employees.title: Personen in der Abteilung
|
||
§ plugin.team_total.common.employees.description: Auf Basis der Prognose der Gesamtmitarbeiterzahl anhand der Änderungsrate der Aufgaben-IDs.
|
||
§ plugin.team_total.release.title: Release-Informationen
|
||
§ plugin.team_total.release.total.title: Releases insgesamt
|
||
§ plugin.team_total.release.total.description: Ein Release ist ein branch mit dem Wort "release". In der Regel erscheinen sie in "auto-merge"-Ereignissen.
|
||
§ plugin.team_total.money.title: Schätzung der Entwicklungskosten
|
||
§ plugin.team_total.moneyAll.title: insgesamt
|
||
§ plugin.team_total.moneyAll.description: Gesamte Personalkosten einschließlich Urlaubsvergütung und Überzahlung für Wochenendarbeit.
|
||
§ plugin.team_total.moneyWorked.title: tatsächlich
|
||
§ plugin.team_total.moneyWorked.description: Tatsächlich gearbeitete Tage multipliziert mit dem Durchschnittsgehalt.
|
||
§ plugin.team_total.moneyLosses.title: mögliche Überzahlung
|
||
§ plugin.team_total.moneyLosses.description: Bezahlte Arbeitstage, an denen es keine commits gab.
|
||
§ plugin.team_total.weekendPayment.title: Wochenendarbeit
|
||
§ plugin.team_total.weekendPayment.description: Gesamte Überzahlung für Wochenendarbeit.
|
||
§ plugin.team_total.moneySpeed.title: pro Monat
|
||
§ plugin.team_total.moneySpeed.description: Prognostizierte Gehaltssumme bei der aktuellen Mitarbeiterzusammensetzung, ohne Steuern, Geräteabschreibung und Nebenkosten.
|
||
§ plugin.team_total.forecastingMoneyAll.title: Projektkosten im Zeitverlauf
|
||
§ plugin.team_total.forecastingMoneyAll.description: Mögliche Gehaltssumme im Zeitverlauf für alle potenziellen Mitarbeiter der Abteilung, die in den Logs nicht vorkommen, aber vorhanden gewesen sein könnten (anhand der Aufgaben-ID-Nummerierung im Task-Tracker).
|
||
§ plugin.team_total.description1: *Personentage* sind die Arbeit eines Mitarbeiters während eines Arbeitstags. Zum Beispiel liefert ein Team aus drei Mitarbeitern an einem Kalendertag ein Arbeitsvolumen von drei Personentagen.
|
||
§ plugin.team_total.description2: *Abwesenheitstage* umfassen nur Arbeitstage, an denen commits hätten erstellt werden können. Wochenenden, gesetzliche Feiertage und Urlaub werden nicht in die Berechnung einbezogen.
|
||
§ plugin.team_total.description3: Die Karte *arbeitet / ausgeschieden* zeigt die tatsächlichen Mitarbeiter, die durchgängig an der Arbeit beteiligt sind. Darüber hinaus gibt es „Helfer“ — in der Regel Personen einer anderen Spezialisierung, die gelegentlich commits im Projekt erstellen.
|
||
§ plugin.team_total.description4: *Überzahlung* umfasst nur Arbeitstage, an denen commits hätten erstellt werden können. Wochenenden, gesetzliche Feiertage und Urlaub werden nicht in die Berechnung einbezogen. Deshalb gilt: Überzahlung + tatsächliche Kosten != Gesamtsumme. In den Gesamtkosten sind Zahlungen für Wochenenden, gesetzliche Feiertage und Urlaub enthalten.
|
||
§ plugin.team_total.description5: *Wochenendarbeit* wird mit einem Koeffizienten x2 gegenüber der Bezahlung eines normalen Tages berechnet. Oben wird nur die Überzahlung (x1) angezeigt, weil die Tatsache der Überstunden selbst in diesem Zusammenhang nicht relevant ist. Wir betrachten nicht die Geschwindigkeit der Budgetverbrennung. Wir betrachten die Überzahlung bei steigender Arbeitsgeschwindigkeit.
|
||
`,en:`
|
||
§ plugin.team_total.sidebar: Common info
|
||
§ plugin.team_total.common.title: About the project
|
||
§ plugin.team_total.workSpeed.title: tasks per day
|
||
§ plugin.team_total.workSpeed.description: Average team throughput with the current staff composition
|
||
§ plugin.team_total.employment.title: works / left
|
||
§ plugin.team_total.employment.description: If a staff member did not make a single commit within a month, they are considered to have left
|
||
§ plugin.team_total.common.duration.title: total work duration
|
||
§ plugin.team_total.common.duration.description: Total development time from the first to the last commit.
|
||
§ plugin.team_total.common.location.title: head office
|
||
§ plugin.team_total.common.location.description: Most popular location for the current core staff composition.
|
||
§ plugin.team_total.common.employees.title: people in the department
|
||
§ plugin.team_total.common.employees.description: Based on the forecast of total staff size by the change rate of task IDs.
|
||
§ plugin.team_total.release.title: Release information
|
||
§ plugin.team_total.release.total.title: total releases
|
||
§ plugin.team_total.release.total.description: A release is a branch with the word "release". As a rule, they appear in "auto-merge" events.
|
||
§ plugin.team_total.money.title: Development cost estimate
|
||
§ plugin.team_total.moneyAll.title: total
|
||
§ plugin.team_total.moneyAll.description: Total payroll costs, including vacation pay and overpayment for weekend work.
|
||
§ plugin.team_total.moneyWorked.title: actual
|
||
§ plugin.team_total.moneyWorked.description: Actual days worked multiplied by the average salary.
|
||
§ plugin.team_total.moneyLosses.title: possible overpayment
|
||
§ plugin.team_total.moneyLosses.description: Paid workdays when there were no commits.
|
||
§ plugin.team_total.weekendPayment.title: weekend work
|
||
§ plugin.team_total.weekendPayment.description: Total overpayment for weekend work.
|
||
§ plugin.team_total.moneySpeed.title: per month
|
||
§ plugin.team_total.moneySpeed.description: Forecasted payroll amount with the current staff composition, excluding taxes, equipment depreciation, and related costs.
|
||
§ plugin.team_total.forecastingMoneyAll.title: project costs over time
|
||
§ plugin.team_total.forecastingMoneyAll.description: Possible payroll amount over time for all potential staff members of the department who are not present in the logs but could have been (based on task ID numbering in the task tracker).
|
||
§ plugin.team_total.description1: *Person days* are the work of one staff member during one working day. For example, in one calendar day, a team of three staff members delivers a work volume of three person days.
|
||
§ plugin.team_total.description2: *Absence days* include only working days when commits could have been made. Weekends, public holidays, and vacations are not included in the calculation.
|
||
§ plugin.team_total.description3: The *works / left* card shows the actual staff members who are consistently involved in the work. In addition, there are “staff” — typically people with a different specialization who may occasionally make commits to the project.
|
||
§ plugin.team_total.description4: *Overpayment* includes only working days when commits could have been made. Weekends, public holidays, and vacations are not included in the calculation. That is why overpayment + actual cost != total. The total cost includes payments for weekends, public holidays, and vacations.
|
||
§ plugin.team_total.description5: *Weekend work* is calculated using a x2 coefficient relative to a regular day’s pay. Only the overpayment (x1) is shown above, because the overtime fact itself is not important in this context. We are not looking at budget burn rate. We are looking at overpayment when work speed increases.
|
||
`,es:`
|
||
§ plugin.team_total.sidebar: Información general
|
||
§ plugin.team_total.common.title: Acerca del proyecto
|
||
§ plugin.team_total.workSpeed.title: tareas por día
|
||
§ plugin.team_total.workSpeed.description: Rendimiento medio del equipo con la composición actual de empleados
|
||
§ plugin.team_total.employment.title: trabaja / salió
|
||
§ plugin.team_total.employment.description: Si un empleado no realizó ni un solo commit en un mes, se considera que salió
|
||
§ plugin.team_total.common.duration.title: duración total del trabajo
|
||
§ plugin.team_total.common.duration.description: Tiempo total de desarrollo desde el primer hasta el último commit.
|
||
§ plugin.team_total.common.location.title: oficina central
|
||
§ plugin.team_total.common.location.description: Ubicación más habitual para la composición principal actual de empleados.
|
||
§ plugin.team_total.common.employees.title: personas en el departamento
|
||
§ plugin.team_total.common.employees.description: Según la previsión del tamaño total de empleados por la tasa de cambio de los identificadores de tarea.
|
||
§ plugin.team_total.release.title: Información de lanzamientos
|
||
§ plugin.team_total.release.total.title: lanzamientos totales
|
||
§ plugin.team_total.release.total.description: Un lanzamiento es un branch con la palabra "release". Por regla general, aparecen en eventos "auto-merge".
|
||
§ plugin.team_total.money.title: Estimación del costo de desarrollo
|
||
§ plugin.team_total.moneyAll.title: total
|
||
§ plugin.team_total.moneyAll.description: Costos salariales totales, incluido el pago de vacaciones y el sobrepago por trabajo en fines de semana.
|
||
§ plugin.team_total.moneyWorked.title: real
|
||
§ plugin.team_total.moneyWorked.description: Días efectivamente trabajados multiplicados por el salario promedio.
|
||
§ plugin.team_total.moneyLosses.title: posible sobrepago
|
||
§ plugin.team_total.moneyLosses.description: Días laborables pagados en los que no hubo commits.
|
||
§ plugin.team_total.weekendPayment.title: trabajo en fin de semana
|
||
§ plugin.team_total.weekendPayment.description: Sobrepago total por trabajo en fines de semana.
|
||
§ plugin.team_total.moneySpeed.title: por mes
|
||
§ plugin.team_total.moneySpeed.description: Importe salarial previsto con la composición actual de empleados, sin impuestos, depreciación de equipos ni costos asociados.
|
||
§ plugin.team_total.forecastingMoneyAll.title: costos del proyecto a lo largo del tiempo
|
||
§ plugin.team_total.forecastingMoneyAll.description: Importe salarial posible a lo largo del tiempo para todos los empleados potenciales del departamento que no figuran en los logs pero podrían haber existido (según la numeración de identificadores de tarea en el gestor de tareas).
|
||
§ plugin.team_total.description1: *Días-persona* son el trabajo de un empleado durante un día laborable. Por ejemplo, en un día calendario, un equipo de tres empleados entrega un volumen de trabajo de tres días-persona.
|
||
§ plugin.team_total.description2: Los *días de ausencia* incluyen solo los días laborables en los que podrían haberse realizado commits. Los fines de semana, los festivos oficiales y las vacaciones no se incluyen en el cálculo.
|
||
§ plugin.team_total.description3: La tarjeta *trabaja / salió* muestra a los empleados reales que participan de forma constante en el trabajo. Además, hay “asistentes”: por lo general, personas de otra especialización que pueden realizar commits en el proyecto de vez en cuando.
|
||
§ plugin.team_total.description4: El *sobrepago* incluye solo los días laborables en los que podrían haberse realizado commits. Los fines de semana, los festivos oficiales y las vacaciones no se incluyen en el cálculo. Por eso, sobrepago + costo real != total. El costo total incluye pagos por fines de semana, festivos oficiales y vacaciones.
|
||
§ plugin.team_total.description5: El *trabajo en fin de semana* se calcula con un coeficiente x2 respecto a la retribución de un día normal. Arriba se muestra solo el sobrepago (x1), porque el hecho mismo de las horas extra no es relevante en este contexto. No observamos la velocidad de quema del presupuesto. Observamos el sobrepago cuando aumenta la velocidad de trabajo.
|
||
`,fr:`
|
||
§ plugin.team_total.sidebar: Informations générales
|
||
§ plugin.team_total.common.title: À propos du projet
|
||
§ plugin.team_total.workSpeed.title: tâches par jour
|
||
§ plugin.team_total.workSpeed.description: Débit moyen de l’équipe avec la composition actuelle des salariés
|
||
§ plugin.team_total.employment.title: travaille / parti
|
||
§ plugin.team_total.employment.description: Si un salarié n’a effectué aucun commit pendant un mois, il est considéré comme parti
|
||
§ plugin.team_total.common.duration.title: durée totale du travail
|
||
§ plugin.team_total.common.duration.description: Temps total de développement du premier au dernier commit.
|
||
§ plugin.team_total.common.location.title: siège
|
||
§ plugin.team_total.common.location.description: Localisation la plus fréquente pour la composition principale actuelle des salariés.
|
||
§ plugin.team_total.common.employees.title: personnes dans le service
|
||
§ plugin.team_total.common.employees.description: D’après la prévision de l’effectif total selon le rythme de changement des identifiants de tâches.
|
||
§ plugin.team_total.release.title: Informations sur les versions
|
||
§ plugin.team_total.release.total.title: versions au total
|
||
§ plugin.team_total.release.total.description: Une version est un branch contenant le mot "release". En règle générale, elles apparaissent dans les événements "auto-merge".
|
||
§ plugin.team_total.money.title: Estimation du coût de développement
|
||
§ plugin.team_total.moneyAll.title: total
|
||
§ plugin.team_total.moneyAll.description: Coûts salariaux totaux, y compris les congés payés et le surpaiement pour le travail le week-end.
|
||
§ plugin.team_total.moneyWorked.title: réel
|
||
§ plugin.team_total.moneyWorked.description: Jours réellement travaillés multipliés par le salaire moyen.
|
||
§ plugin.team_total.moneyLosses.title: surpaiement possible
|
||
§ plugin.team_total.moneyLosses.description: Jours ouvrés payés sans aucun commit.
|
||
§ plugin.team_total.weekendPayment.title: travail le week-end
|
||
§ plugin.team_total.weekendPayment.description: Surpaiement total pour le travail le week-end.
|
||
§ plugin.team_total.moneySpeed.title: par mois
|
||
§ plugin.team_total.moneySpeed.description: Masse salariale prévisionnelle avec la composition actuelle des salariés, hors impôts, amortissement du matériel et coûts associés.
|
||
§ plugin.team_total.forecastingMoneyAll.title: coûts du projet dans le temps
|
||
§ plugin.team_total.forecastingMoneyAll.description: Masse salariale possible dans le temps pour tous les salariés potentiels du service absents des logs mais qui auraient pu exister (d’après la numérotation des identifiants de tâches dans le gestionnaire de tâches).
|
||
§ plugin.team_total.description1: Les *jours-personne* correspondent au travail d’un salarié pendant une journée ouvrée. Par exemple, en un jour calendaire, une équipe de trois salariés produit un volume de travail de trois jours-personne.
|
||
§ plugin.team_total.description2: Les *jours d’absence* n’incluent que les jours ouvrés où des commits auraient pu être effectués. Les week-ends, jours fériés et congés ne sont pas inclus dans le calcul.
|
||
§ plugin.team_total.description3: La carte *travaille / parti* montre les salariés réellement impliqués de façon continue dans le travail. En outre, il existe des « assistants » — généralement des personnes d’une autre spécialité qui peuvent parfois effectuer des commits dans le projet.
|
||
§ plugin.team_total.description4: Le *surpaiement* n’inclut que les jours ouvrés où des commits auraient pu être effectués. Les week-ends, jours fériés et congés ne sont pas inclus dans le calcul. C’est pourquoi surpaiement + coût réel != total. Le coût total inclut les paiements pour les week-ends, jours fériés et congés.
|
||
§ plugin.team_total.description5: Le *travail le week-end* est calculé avec un coefficient x2 par rapport à la rémunération d’une journée normale. Seul le surpaiement (x1) est affiché ci-dessus, car le fait même des heures supplémentaires n’est pas pertinent dans ce contexte. Nous ne regardons pas la vitesse de consommation du budget. Nous regardons le surpaiement lorsque la vitesse de travail augmente.
|
||
`,he:`
|
||
§ plugin.team_total.sidebar: מידע כללי
|
||
§ plugin.team_total.common.title: על הפרויקט
|
||
§ plugin.team_total.workSpeed.title: משימות ביום
|
||
§ plugin.team_total.workSpeed.description: התפוקה הממוצעת של הצוות בהרכב העובדים הנוכחי
|
||
§ plugin.team_total.employment.title: עובד / עזב
|
||
§ plugin.team_total.employment.description: אם עובד לא יצר אף commit במשך חודש, הוא נחשב כמי שעזב
|
||
§ plugin.team_total.common.duration.title: משך העבודה הכולל
|
||
§ plugin.team_total.common.duration.description: זמן הפיתוח הכולל מה-commit הראשון ועד האחרון.
|
||
§ plugin.team_total.common.location.title: המשרד הראשי
|
||
§ plugin.team_total.common.location.description: המיקום הנפוץ ביותר להרכב הליבה הנוכחי של העובדים.
|
||
§ plugin.team_total.common.employees.title: אנשים במחלקה
|
||
§ plugin.team_total.common.employees.description: על בסיס תחזית גודל העובדים הכולל לפי קצב השינוי של מזהי המשימות.
|
||
§ plugin.team_total.release.title: מידע על גרסאות
|
||
§ plugin.team_total.release.total.title: סך הגרסאות
|
||
§ plugin.team_total.release.total.description: גרסה היא branch עם המילה "release". ככלל, הן מופיעות באירועי "auto-merge".
|
||
§ plugin.team_total.money.title: הערכת עלות הפיתוח
|
||
§ plugin.team_total.moneyAll.title: סך הכול
|
||
§ plugin.team_total.moneyAll.description: עלויות שכר כוללות, לרבות תשלום חופשה ותשלום-יתר עבור עבודה בסופי שבוע.
|
||
§ plugin.team_total.moneyWorked.title: בפועל
|
||
§ plugin.team_total.moneyWorked.description: ימים שעבדו בפועל כפול השכר הממוצע.
|
||
§ plugin.team_total.moneyLosses.title: תשלום-יתר אפשרי
|
||
§ plugin.team_total.moneyLosses.description: ימי עבודה ששולמו שבהם לא היו commits.
|
||
§ plugin.team_total.weekendPayment.title: עבודה בסוף שבוע
|
||
§ plugin.team_total.weekendPayment.description: סך תשלום-היתר עבור עבודה בסופי שבוע.
|
||
§ plugin.team_total.moneySpeed.title: לחודש
|
||
§ plugin.team_total.moneySpeed.description: סכום השכר החזוי בהרכב העובדים הנוכחי, ללא מסים, פחת ציוד ועלויות נלוות.
|
||
§ plugin.team_total.forecastingMoneyAll.title: עלויות הפרויקט לאורך זמן
|
||
§ plugin.team_total.forecastingMoneyAll.description: סכום שכר אפשרי לאורך זמן לכל העובדים הפוטנציאליים במחלקה שאינם מופיעים בלוגים אך יכלו להיות (לפי מספור מזהי המשימות במעקב המשימות).
|
||
§ plugin.team_total.description1: *ימי-אדם* הם עבודתו של עובד אחד במהלך יום עבודה אחד. לדוגמה, ביום לוח שנה אחד צוות של שלושה עובדים מספק היקף עבודה של שלושה ימי-אדם.
|
||
§ plugin.team_total.description2: *ימי היעדרות* כוללים רק ימי עבודה שבהם ניתן היה ליצור commits. סופי שבוע, חגים רשמיים וחופשות אינם נכללים בחישוב.
|
||
§ plugin.team_total.description3: הכרטיס *עובד / עזב* מציג את העובדים בפועל המעורבים בעבודה באופן עקבי. בנוסף יש “עוזרים” — בדרך כלל אנשים בהתמחות אחרת שעשויים ליצור commits בפרויקט מדי פעם.
|
||
§ plugin.team_total.description4: *תשלום-יתר* כולל רק ימי עבודה שבהם ניתן היה ליצור commits. סופי שבוע, חגים רשמיים וחופשות אינם נכללים בחישוב. לכן תשלום-יתר + עלות בפועל != סך הכול. העלות הכוללת כוללת תשלומים עבור סופי שבוע, חגים רשמיים וחופשות.
|
||
§ plugin.team_total.description5: *עבודה בסוף שבוע* מחושבת במקדם x2 ביחס לתשלום של יום רגיל. למעלה מוצג רק תשלום-היתר (x1), כי עצם עובדת השעות הנוספות אינה רלוונטית בהקשר זה. איננו מסתכלים על קצב שריפת התקציב. אנו מסתכלים על תשלום-היתר כאשר מהירות העבודה עולה.
|
||
`,hi:`
|
||
§ plugin.team_total.sidebar: सामान्य जानकारी
|
||
§ plugin.team_total.common.title: परियोजना के बारे में
|
||
§ plugin.team_total.workSpeed.title: प्रति दिन कार्य
|
||
§ plugin.team_total.workSpeed.description: वर्तमान कर्मचारी संरचना में टीम की औसत उत्पादकता
|
||
§ plugin.team_total.employment.title: कार्यरत / छोड़ चुके
|
||
§ plugin.team_total.employment.description: यदि किसी कर्मचारी ने एक महीने में एक भी commit नहीं बनाया, तो उसे छोड़ चुका माना जाता है
|
||
§ plugin.team_total.common.duration.title: कुल कार्य अवधि
|
||
§ plugin.team_total.common.duration.description: पहले से अंतिम commit तक कुल विकास समय।
|
||
§ plugin.team_total.common.location.title: प्रधान कार्यालय
|
||
§ plugin.team_total.common.location.description: वर्तमान मुख्य कर्मचारी संरचना के लिए सबसे सामान्य स्थान।
|
||
§ plugin.team_total.common.employees.title: विभाग में लोग
|
||
§ plugin.team_total.common.employees.description: कार्य ID की परिवर्तन दर के आधार पर कुल कर्मचारी संख्या के पूर्वानुमान से।
|
||
§ plugin.team_total.release.title: रिलीज़ जानकारी
|
||
§ plugin.team_total.release.total.title: कुल रिलीज़
|
||
§ plugin.team_total.release.total.description: रिलीज़ वह branch है जिसमें शब्द "release" हो। नियम के अनुसार, वे "auto-merge" घटनाओं में दिखाई देते हैं।
|
||
§ plugin.team_total.money.title: विकास लागत का अनुमान
|
||
§ plugin.team_total.moneyAll.title: कुल
|
||
§ plugin.team_total.moneyAll.description: कुल वेतन लागत, जिसमें अवकाश भुगतान और सप्ताहांत कार्य के लिए अधिक भुगतान शामिल है।
|
||
§ plugin.team_total.moneyWorked.title: वास्तविक
|
||
§ plugin.team_total.moneyWorked.description: वास्तव में काम किए गए दिन औसत वेतन से गुणा।
|
||
§ plugin.team_total.moneyLosses.title: संभावित अधिक भुगतान
|
||
§ plugin.team_total.moneyLosses.description: भुगतान किए गए कार्यदिवस जब कोई commits नहीं थे।
|
||
§ plugin.team_total.weekendPayment.title: सप्ताहांत कार्य
|
||
§ plugin.team_total.weekendPayment.description: सप्ताहांत कार्य के लिए कुल अधिक भुगतान।
|
||
§ plugin.team_total.moneySpeed.title: प्रति माह
|
||
§ plugin.team_total.moneySpeed.description: वर्तमान कर्मचारी संरचना में अनुमानित वेतन राशि, कर, उपकरण मूल्यह्रास और संबंधित लागतों को छोड़कर।
|
||
§ plugin.team_total.forecastingMoneyAll.title: समय के साथ परियोजना लागत
|
||
§ plugin.team_total.forecastingMoneyAll.description: विभाग के सभी संभावित कर्मचारियों के लिए समय के साथ संभावित वेतन राशि जो लॉग में नहीं हैं लेकिन हो सकते थे (टास्क ट्रैकर में कार्य ID क्रमांकन के आधार पर)।
|
||
§ plugin.team_total.description1: *मानव-दिवस* एक कर्मचारी का एक कार्यदिवस में किया गया कार्य है। उदाहरण के लिए, एक कैलेंडर दिन में तीन कर्मचारियों की टीम तीन मानव-दिवस का कार्य मात्रा देती है।
|
||
§ plugin.team_total.description2: *अनुपस्थिति के दिन* में केवल वे कार्यदिवस शामिल हैं जिनमें commits बनाए जा सकते थे। सप्ताहांत, सरकारी छुट्टियाँ और अवकाश गणना में शामिल नहीं होते।
|
||
§ plugin.team_total.description3: कार्ड *कार्यरत / छोड़ चुके* उन वास्तविक कर्मचारियों को दिखाता है जो लगातार कार्य में शामिल रहते हैं। इसके अलावा “सहायक” होते हैं — आमतौर पर भिन्न विशेषज्ञता वाले लोग जो कभी-कभी परियोजना में commits बना सकते हैं।
|
||
§ plugin.team_total.description4: *अधिक भुगतान* में केवल वे कार्यदिवस शामिल हैं जिनमें commits बनाए जा सकते थे। सप्ताहांत, सरकारी छुट्टियाँ और अवकाश गणना में शामिल नहीं होते। इसलिए अधिक भुगतान + वास्तविक लागत != कुल। कुल लागत में सप्ताहांत, सरकारी छुट्टियाँ और अवकाश का भुगतान शामिल है।
|
||
§ plugin.team_total.description5: *सप्ताहांत कार्य* की गणना सामान्य दिन के भुगतान के सापेक्ष x2 गुणांक से होती है। ऊपर केवल अधिक भुगतान (x1) दिखाया गया है, क्योंकि इस संदर्भ में ओवरटाइम का तथ्य स्वयं महत्वपूर्ण नहीं है। हम बजट खर्च की गति नहीं देखते। हम कार्य गति बढ़ने पर अधिक भुगतान देखते हैं।
|
||
`,ja:`
|
||
§ plugin.team_total.sidebar: 概要情報
|
||
§ plugin.team_total.common.title: プロジェクトについて
|
||
§ plugin.team_total.workSpeed.title: 1 日あたりのタスク
|
||
§ plugin.team_total.workSpeed.description: 現在のスタッフ構成におけるチームの平均処理量
|
||
§ plugin.team_total.employment.title: 在籍 / 離職
|
||
§ plugin.team_total.employment.description: スタッフが 1 か月間 commit を 1 件も作成しなかった場合、離職とみなします
|
||
§ plugin.team_total.common.duration.title: 作業期間の合計
|
||
§ plugin.team_total.common.duration.description: 最初の commit から最後の commit までの開発期間の合計。
|
||
§ plugin.team_total.common.location.title: 本社
|
||
§ plugin.team_total.common.location.description: 現在の中核スタッフ構成で最も多い所在地。
|
||
§ plugin.team_total.common.employees.title: 部署の人数
|
||
§ plugin.team_total.common.employees.description: タスク ID の変化率に基づく総スタッフ規模の予測による。
|
||
§ plugin.team_total.release.title: リリース情報
|
||
§ plugin.team_total.release.total.title: リリース総数
|
||
§ plugin.team_total.release.total.description: リリースとは、単語 "release" を含む branch です。原則として "auto-merge" イベントに現れます。
|
||
§ plugin.team_total.money.title: 開発コストの見積もり
|
||
§ plugin.team_total.moneyAll.title: 合計
|
||
§ plugin.team_total.moneyAll.description: 給与総額。休暇手当および週末勤務の過払いを含みます。
|
||
§ plugin.team_total.moneyWorked.title: 実績
|
||
§ plugin.team_total.moneyWorked.description: 実働日数に平均給与を乗じた額。
|
||
§ plugin.team_total.moneyLosses.title: 想定される過払い
|
||
§ plugin.team_total.moneyLosses.description: commits がなかった有給の稼働日。
|
||
§ plugin.team_total.weekendPayment.title: 週末勤務
|
||
§ plugin.team_total.weekendPayment.description: 週末勤務に対する過払いの合計。
|
||
§ plugin.team_total.moneySpeed.title: 月あたり
|
||
§ plugin.team_total.moneySpeed.description: 現在のスタッフ構成における予測給与額(税、設備減価償却、関連コストを除く)。
|
||
§ plugin.team_total.forecastingMoneyAll.title: 期間を通じたプロジェクトコスト
|
||
§ plugin.team_total.forecastingMoneyAll.description: ログに現れないが存在し得た部署の潜在スタッフ全員に対する、期間を通じた想定給与額(タスク トラッカーのタスク ID 番号付けに基づく)。
|
||
§ plugin.team_total.description1: *人日* とは、スタッフ 1 名が 1 稼働日に行う作業です。例えば、暦日 1 日で 3 名のチームは 3 人日分の作業量を提供します。
|
||
§ plugin.team_total.description2: *欠勤日* には、commits を作成できたはずの稼働日のみが含まれます。週末、祝日、休暇は計算に含まれません。
|
||
§ plugin.team_total.description3: カード *在籍 / 離職* は、継続的に作業へ関与している実際のスタッフを示します。加えて「アシスタント」がおり、多くの場合別の専門の人で、ときどきプロジェクトに commits を作成します。
|
||
§ plugin.team_total.description4: *過払い* には、commits を作成できたはずの稼働日のみが含まれます。週末、祝日、休暇は計算に含まれません。そのため、過払い + 実績コスト != 合計です。合計コストには週末、祝日、休暇の支払いが含まれます。
|
||
§ plugin.team_total.description5: *週末勤務* は通常日の支払いに対して係数 x2 で算出します。上に表示されるのは過払い分(x1)のみです。この文脈では残業の事実自体が重要ではないためです。予算の消化速度は見ません。作業速度が上がったときの過払いを見ます。
|
||
`,ko:`
|
||
§ plugin.team_total.sidebar: 일반 정보
|
||
§ plugin.team_total.common.title: 프로젝트 소개
|
||
§ plugin.team_total.workSpeed.title: 일일 작업 수
|
||
§ plugin.team_total.workSpeed.description: 현재 직원 구성에서의 팀 평균 처리량
|
||
§ plugin.team_total.employment.title: 재직 / 퇴사
|
||
§ plugin.team_total.employment.description: 직원이 한 달 동안 commit을 하나도 만들지 않으면 퇴사한 것으로 간주합니다
|
||
§ plugin.team_total.common.duration.title: 총 작업 기간
|
||
§ plugin.team_total.common.duration.description: 첫 번째 commit부터 마지막 commit까지의 총 개발 시간입니다.
|
||
§ plugin.team_total.common.location.title: 본사
|
||
§ plugin.team_total.common.location.description: 현재 핵심 직원 구성에서 가장 흔한 위치입니다.
|
||
§ plugin.team_total.common.employees.title: 부서 인원
|
||
§ plugin.team_total.common.employees.description: 작업 ID 변화율에 따른 총 직원 규모 예측을 기준으로 합니다.
|
||
§ plugin.team_total.release.title: 릴리스 정보
|
||
§ plugin.team_total.release.total.title: 총 릴리스 수
|
||
§ plugin.team_total.release.total.description: 릴리스는 단어 "release"가 있는 branch입니다. 일반적으로 "auto-merge" 이벤트에 나타납니다.
|
||
§ plugin.team_total.money.title: 개발 비용 추정
|
||
§ plugin.team_total.moneyAll.title: 합계
|
||
§ plugin.team_total.moneyAll.description: 총 급여 비용이며, 휴가 수당과 주말 근무에 대한 초과 지급을 포함합니다.
|
||
§ plugin.team_total.moneyWorked.title: 실제
|
||
§ plugin.team_total.moneyWorked.description: 실제 근무일에 평균 급여를 곱한 금액입니다.
|
||
§ plugin.team_total.moneyLosses.title: 가능한 초과 지급
|
||
§ plugin.team_total.moneyLosses.description: commits가 없었던 유급 근무일입니다.
|
||
§ plugin.team_total.weekendPayment.title: 주말 근무
|
||
§ plugin.team_total.weekendPayment.description: 주말 근무에 대한 초과 지급 총액입니다.
|
||
§ plugin.team_total.moneySpeed.title: 월 기준
|
||
§ plugin.team_total.moneySpeed.description: 현재 직원 구성에서의 예상 급여액이며, 세금, 장비 감가상각 및 관련 비용은 제외합니다.
|
||
§ plugin.team_total.forecastingMoneyAll.title: 기간에 따른 프로젝트 비용
|
||
§ plugin.team_total.forecastingMoneyAll.description: 로그에는 없지만 존재했을 수 있는 부서의 모든 잠재 직원에 대한 기간별 예상 급여액(작업 추적기의 작업 ID 번호 매기기 기준).
|
||
§ plugin.team_total.description1: *인일*은 직원 한 명이 한 근무일 동안 수행하는 작업입니다. 예를 들어, 달력일 하루 동안 직원 세 명의 팀은 인일 세 단위의 작업량을 제공합니다.
|
||
§ plugin.team_total.description2: *결근일*에는 commits를 만들 수 있었던 근무일만 포함됩니다. 주말, 공휴일, 휴가는 계산에 포함되지 않습니다.
|
||
§ plugin.team_total.description3: 카드 *재직 / 퇴사*는 지속적으로 업무에 참여하는 실제 직원을 보여줍니다. 또한 “도우미”가 있으며, 보통 다른 전문 분야의 사람들로 가끔 프로젝트에 commits를 만들 수 있습니다.
|
||
§ plugin.team_total.description4: *초과 지급*에는 commits를 만들 수 있었던 근무일만 포함됩니다. 주말, 공휴일, 휴가는 계산에 포함되지 않습니다. 그래서 초과 지급 + 실제 비용 != 합계입니다. 합계 비용에는 주말, 공휴일, 휴가에 대한 지급이 포함됩니다.
|
||
§ plugin.team_total.description5: *주말 근무*는 일반 근무일 대비 계수 x2로 계산합니다. 위에는 초과 지급분(x1)만 표시됩니다. 이 맥락에서는 초과근무 사실 자체가 중요하지 않기 때문입니다. 예산 소진 속도는 보지 않습니다. 업무 속도가 증가할 때의 초과 지급을 봅니다.
|
||
`,pt:`
|
||
§ plugin.team_total.sidebar: Informação geral
|
||
§ plugin.team_total.common.title: Sobre o projeto
|
||
§ plugin.team_total.workSpeed.title: tarefas por dia
|
||
§ plugin.team_total.workSpeed.description: Produtividade média da equipe com a composição atual de funcionários
|
||
§ plugin.team_total.employment.title: trabalha / saiu
|
||
§ plugin.team_total.employment.description: Se um funcionário não fez nenhum commit num mês, considera-se que saiu
|
||
§ plugin.team_total.common.duration.title: duração total do trabalho
|
||
§ plugin.team_total.common.duration.description: Tempo total de desenvolvimento do primeiro ao último commit.
|
||
§ plugin.team_total.common.location.title: sede
|
||
§ plugin.team_total.common.location.description: Localização mais habitual para a composição principal atual de funcionários.
|
||
§ plugin.team_total.common.employees.title: pessoas no departamento
|
||
§ plugin.team_total.common.employees.description: Com base na previsão do tamanho total de funcionários pela taxa de alteração dos IDs de tarefa.
|
||
§ plugin.team_total.release.title: Informações de lançamentos
|
||
§ plugin.team_total.release.total.title: lançamentos totais
|
||
§ plugin.team_total.release.total.description: Um lançamento é um branch com a palavra "release". Em regra, aparecem em eventos "auto-merge".
|
||
§ plugin.team_total.money.title: Estimativa do custo de desenvolvimento
|
||
§ plugin.team_total.moneyAll.title: total
|
||
§ plugin.team_total.moneyAll.description: Custos salariais totais, incluindo pagamento de férias e sobrepagamento por trabalho ao fim de semana.
|
||
§ plugin.team_total.moneyWorked.title: real
|
||
§ plugin.team_total.moneyWorked.description: Dias efetivamente trabalhados multiplicados pelo salário médio.
|
||
§ plugin.team_total.moneyLosses.title: possível sobrepagamento
|
||
§ plugin.team_total.moneyLosses.description: Dias úteis pagos em que não houve commits.
|
||
§ plugin.team_total.weekendPayment.title: trabalho ao fim de semana
|
||
§ plugin.team_total.weekendPayment.description: Sobrepagamento total por trabalho ao fim de semana.
|
||
§ plugin.team_total.moneySpeed.title: por mês
|
||
§ plugin.team_total.moneySpeed.description: Montante salarial previsto com a composição atual de funcionários, excluindo impostos, depreciação de equipamento e custos associados.
|
||
§ plugin.team_total.forecastingMoneyAll.title: custos do projeto ao longo do tempo
|
||
§ plugin.team_total.forecastingMoneyAll.description: Montante salarial possível ao longo do tempo para todos os funcionários potenciais do departamento que não constam nos logs mas poderiam ter existido (com base na numeração de IDs de tarefa no gestor de tarefas).
|
||
§ plugin.team_total.description1: *Dias-pessoa* são o trabalho de um funcionário durante um dia útil. Por exemplo, num dia de calendário, uma equipe de três funcionários entrega um volume de trabalho de três dias-pessoa.
|
||
§ plugin.team_total.description2: Os *dias de ausência* incluem apenas os dias úteis em que commits poderiam ter sido feitos. Fins de semana, feriados oficiais e férias não entram no cálculo.
|
||
§ plugin.team_total.description3: O cartão *trabalha / saiu* mostra os funcionários reais que participam de forma consistente no trabalho. Além disso, há “assistentes” — em regra pessoas de outra especialização que podem ocasionalmente fazer commits no projeto.
|
||
§ plugin.team_total.description4: O *sobrepagamento* inclui apenas os dias úteis em que commits poderiam ter sido feitos. Fins de semana, feriados oficiais e férias não entram no cálculo. Por isso, sobrepagamento + custo real != total. O custo total inclui pagamentos de fins de semana, feriados oficiais e férias.
|
||
§ plugin.team_total.description5: O *trabalho ao fim de semana* é calculado com um coeficiente x2 relativamente ao pagamento de um dia normal. Acima é mostrado apenas o sobrepagamento (x1), porque o facto das horas extra em si não é relevante neste contexto. Não observamos a velocidade de consumo do orçamento. Observamos o sobrepagamento quando a velocidade de trabalho aumenta.
|
||
`,ru:`
|
||
§ plugin.team_total.sidebar: Общая информация
|
||
§ plugin.team_total.common.title: Кратко о проекте
|
||
§ plugin.team_total.workSpeed.title: задач в день
|
||
§ plugin.team_total.workSpeed.description: Средняя скорость работы команды при текущем составе сотрудников
|
||
§ plugin.team_total.employment.title: работает / уволилось
|
||
§ plugin.team_total.employment.description: Если сотрудник в течении месяца не сделал ни одного коммита, он считается уволенным
|
||
§ plugin.team_total.common.duration.title: общая продолжительность работ
|
||
§ plugin.team_total.common.duration.description: Все время разработки от первого до последнего коммита.
|
||
§ plugin.team_total.common.location.title: центральный офис
|
||
§ plugin.team_total.common.location.description: Самое популярное местоположение для текущего основного состава сотрудников.
|
||
§ plugin.team_total.common.employees.title: человек в отделе
|
||
§ plugin.team_total.common.employees.description: На основании прогноза общей численности сотрудников по скорости изменения номеров задач.
|
||
§ plugin.team_total.release.title: Информация по релизам
|
||
§ plugin.team_total.release.total.title: всего релизов
|
||
§ plugin.team_total.release.total.description: Релизом считается ветка со словом "release". Как правило, они встречаются событиях "auto-merge".
|
||
§ plugin.team_total.money.title: Оценка стоимости разработки
|
||
§ plugin.team_total.moneyAll.title: общая
|
||
§ plugin.team_total.moneyAll.description: Суммарные затраты на зарплату, включают отпускные и переплату за работу в выходные дни.
|
||
§ plugin.team_total.moneyWorked.title: фактическая
|
||
§ plugin.team_total.moneyWorked.description: Фактически отработанные дни умноженные на среднюю заработную плату.
|
||
§ plugin.team_total.moneyLosses.title: возможная переплата
|
||
§ plugin.team_total.moneyLosses.description: Оплаченные рабочие дни, когда коммитов не было.
|
||
§ plugin.team_total.weekendPayment.title: работа на выходных
|
||
§ plugin.team_total.weekendPayment.description: Суммарная переплата за работу в выходные дни.
|
||
§ plugin.team_total.moneySpeed.title: в месяц
|
||
§ plugin.team_total.moneySpeed.description: Прогнозируемая сумма выплат на зарплату при текущем составе сотрудников без учета налогов, амортизации оборудования и сопутствующих затрат.
|
||
§ plugin.team_total.forecastingMoneyAll.title: расходы на проект за всё время
|
||
§ plugin.team_total.additionalMoney.title: Оценка возможных доп. затрат
|
||
§ plugin.team_total.forecastingMoneyAll.description: Возможная сумма выплат на зарплату за всё время всем возможным сотрудникам отдела, в том числе которые не фигурируют в логах, но могли быть (на основании нумерации задач в таск-трекере).
|
||
§ plugin.team_total.moneyDevice.title: расходы на оборудование
|
||
§ plugin.team_total.moneyDevice.description: Возможная сумма затраченная на подготовку рабочих мест (покупка техники, мебели, оплата услуг связи и т.п.) за всё время всем возможным сотрудникам отдела, в том числе которые не фигурируют в логах, но могли быть.
|
||
§ plugin.team_total.moneyLicence.title: расходы на лицензии (в том числе ИИ-подписки)
|
||
§ plugin.team_total.moneyLicence.description: Возможная сумма затраченная на покупку лицензий и подписок необходимых для выполенения рабочих задач за всё время всем возможным сотрудникам отдела, в том числе которые не фигурируют в логах, но могли быть.
|
||
§ plugin.team_total.description1: *Человеко-дни* — это работа одного сотрудника в течение одного рабочего дня. Например, за один календарный день, команда из трех сотрудников выдает объем работы в три человеко-дня.
|
||
§ plugin.team_total.description2: *Днями прогулов* считаются только рабочие дни, когда коммиты могли бы быть сделаны. Выходные, государственные праздники и отпуска в расчёте не участвуют.
|
||
§ plugin.team_total.description3: Карточка *работает и уволилось* показывает фактический состав сотрудников, которые постоянно участвуют в работе. Кроме этого, есть «помощники» — это сотрудники, как правило другой специализации, которые могут иногда делать коммиты в проект.
|
||
§ plugin.team_total.description4: *Переплатой* считаются только рабочие дни, когда коммиты могли бы быть сделаны. Выходные, государственные праздники и отпуска в расчёте не участвуют. Именно поэтому переплата + фактическая стоимость != общей. В общей стоимости заложена оплата выходных, государственных праздников и отпусков.
|
||
§ plugin.team_total.description5: *Работой на выходных* считается по коэффициенту х2 от оплаты обычного дня. Выше отображена именно переплата (х2), т.к. сам факт переработки в данном контексте не интересен. Мы не смотрим скорость сжигания бюджета. Мы смотрим переплату при увеличении скорости работы.
|
||
`,zh:`
|
||
§ plugin.team_total.sidebar: 概要信息
|
||
§ plugin.team_total.common.title: 关于项目
|
||
§ plugin.team_total.workSpeed.title: 每日任务数
|
||
§ plugin.team_total.workSpeed.description: 当前员工构成下团队的平均产出
|
||
§ plugin.team_total.employment.title: 在职 / 离职
|
||
§ plugin.team_total.employment.description: 若员工在一个月内未创建任何 commit,则视为已离职
|
||
§ plugin.team_total.common.duration.title: 总工作时长
|
||
§ plugin.team_total.common.duration.description: 从第一次到最后一次 commit 的全部开发时间。
|
||
§ plugin.team_total.common.location.title: 总部
|
||
§ plugin.team_total.common.location.description: 当前核心员工构成中最常见的所在地。
|
||
§ plugin.team_total.common.employees.title: 部门人数
|
||
§ plugin.team_total.common.employees.description: 根据任务 ID 变化率预测的员工总规模。
|
||
§ plugin.team_total.release.title: 发布信息
|
||
§ plugin.team_total.release.total.title: 发布总数
|
||
§ plugin.team_total.release.total.description: 发布是带有单词 "release" 的 branch。通常出现在 "auto-merge" 事件中。
|
||
§ plugin.team_total.money.title: 开发成本估算
|
||
§ plugin.team_total.moneyAll.title: 总计
|
||
§ plugin.team_total.moneyAll.description: 薪资总成本,包括休假工资以及周末工作的超额支付。
|
||
§ plugin.team_total.moneyWorked.title: 实际
|
||
§ plugin.team_total.moneyWorked.description: 实际工作日数乘以平均工资。
|
||
§ plugin.team_total.moneyLosses.title: 可能的超额支付
|
||
§ plugin.team_total.moneyLosses.description: 没有 commits 但仍支付的工作日。
|
||
§ plugin.team_total.weekendPayment.title: 周末工作
|
||
§ plugin.team_total.weekendPayment.description: 周末工作的超额支付总额。
|
||
§ plugin.team_total.moneySpeed.title: 每月
|
||
§ plugin.team_total.moneySpeed.description: 按当前员工构成预测的薪资额,不含税费、设备折旧及相关成本。
|
||
§ plugin.team_total.forecastingMoneyAll.title: 项目随时间的成本
|
||
§ plugin.team_total.forecastingMoneyAll.description: 部门中未出现在日志、但根据任务跟踪器中任务 ID 编号可能存在的全部潜在员工在整个期间的可能薪资额。
|
||
§ plugin.team_total.description1: *人日* 是一名员工在一个工作日内完成的工作。例如,在一个日历日里,三名员工的团队可产出三人日的工作量。
|
||
§ plugin.team_total.description2: *缺勤天数* 仅包括本可创建 commits 的工作日。周末、法定节假日和休假不计入计算。
|
||
§ plugin.team_total.description3: 卡片 *在职 / 离职* 展示持续参与工作的实际员工。此外还有“助手”——通常为其他专业的人员,他们可能偶尔向项目创建 commits。
|
||
§ plugin.team_total.description4: *超额支付* 仅包括本可创建 commits 的工作日。周末、法定节假日和休假不计入计算。因此,超额支付 + 实际成本 != 总计。总成本包含周末、法定节假日和休假的支付。
|
||
§ plugin.team_total.description5: *周末工作* 按相对于正常日薪酬的系数 x2 计算。上方仅显示超额支付部分(x1),因为在此语境下加班事实本身并不重要。我们不关注预算消耗速度。我们关注工作速度提高时产生的超额支付。
|
||
`};function _2(){var s;const t=A.statisticsByCommits.author.totalInfo,e={};return t.forEach(n=>{n.isStaff||n.isDismissed||Ce(e,n.lastCountry)}),((s=Object.entries(e).sort((n,r)=>n[1]-r[1]).pop())==null?void 0:s[0])||null}const h2=U(({employeesInCompany:t})=>{const e=A.statisticsByCommits.team.totalInfo,s=A.statisticsByCommits.author.employment,n=A.statisticsByCommits.firstLastCommit,r=In(n.min,n.max),u=_2();return o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(_e,{value:Kt(e.totalTaskInDay),icon:"./assets/cards/tasks_month.svg",title:"plugin.team_total.workSpeed.title",description:"plugin.team_total.workSpeed.description"}),o.jsx(_e,{value:`${s.active.length} / ${s.dismissed.length}`,icon:"./assets/cards/dismissal.svg",title:"plugin.team_total.employment.title",description:"plugin.team_total.employment.description"})]}),o.jsxs(Q,{children:[o.jsx(ke,{value:Ur(r),icon:"./assets/cards/work_days2.svg",title:"plugin.team_total.common.duration.title",description:"plugin.team_total.common.duration.description"}),o.jsx(ke,{value:u,icon:"./assets/cards/location.svg",title:"plugin.team_total.common.location.title"}),o.jsx(ke,{value:t,icon:"./assets/cards/employees.svg",title:"plugin.team_total.common.employees.title"})]})]})}),f2=U(()=>{var v,k,x,N,q,I;const t=(v=A.statisticsByCommits.release.totalInfo)==null?void 0:v.length,e=A.statisticsByCommits.pr.totalInfoByName,s=A.statisticsByCommits.tasks.totalInfo,n=T.useMemo(()=>s.filter(F=>F.totalDaysInBacklog<=90),[A.hash]),r=Db(n,e),[u,c,p,_,h]=["plugin.team_tasks.charts.timeToMarket.backlog","plugin.team_tasks.charts.timeToMarket.worked","plugin.team_tasks.charts.timeToMarket.review","plugin.team_tasks.charts.timeToMarket.release","plugin.team_tasks.charts.timeToMarket.improvements"],f=r.details.worked+r.details.review+r.details.release;return!t&&!r.total?null:o.jsxs(o.Fragment,{children:[o.jsx(G,{title:"plugin.team_total.release.title"}),o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsxs(Y,{value:t,children:[o.jsx(_e,{value:t,icon:"./assets/cards/release.svg",title:"plugin.team_total.release.total.title",description:"plugin.team_total.release.total.description"}),o.jsx(_e,{value:f,icon:"./assets/cards/release_month.svg",title:"plugin.team_tasks.charts.cardFromCommit.title",description:"plugin.team_tasks.charts.cardFromCommit.description"})]})}),o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_tasks.charts.timeToMarket.title",value:r==null?void 0:r.total,details:r!=null&&r.details?{[u]:(k=r==null?void 0:r.details)==null?void 0:k.backlog,[c]:(x=r==null?void 0:r.details)==null?void 0:x.worked,[p]:(N=r==null?void 0:r.details)==null?void 0:N.review,[_]:(q=r==null?void 0:r.details)==null?void 0:q.release,[h]:(I=r==null?void 0:r.details)==null?void 0:I.improvements}:void 0,limit:1,order:[u,c,p,_,h],description:"common.statistic.days",suffix:"common.statistic.days"})})]})]})});function y2(t){const e=de.getMiddleSalaryInMonth();return t.filter(n=>n.totalDaysWorked>10).reduce((n,r)=>n+r.months.reduce((u,c)=>u+c.allMiddleUsersInDepartment*e,0),0)}const v2=U(()=>{const t=A.statisticsByCommits.team.totalInfo,s=A.statisticsByCommits.author.employment.active.length*de.getMiddleSalaryInMonth(),n=A.statisticsByCommits.taskCodes.totalInfo,r=y2(n);return o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(_e,{value:ct(t.totalMoney),icon:"./assets/cards/money_total.svg",title:"plugin.team_total.moneyAll.title",description:"plugin.team_total.moneyAll.description"}),o.jsx(_e,{value:ct(t.totalMoneyWorked),icon:"./assets/cards/money_work.svg",title:"plugin.team_total.moneyWorked.title",description:"plugin.team_total.moneyWorked.description"}),o.jsx(_e,{size:"l",value:ct(s),icon:"./assets/cards/money_month.svg",title:"plugin.team_total.moneySpeed.title",description:"plugin.team_total.moneySpeed.description"})]}),o.jsxs(Q,{children:[o.jsx(_e,{value:ct(t.totalMoneyLosses),icon:"./assets/cards/money_lazy.svg",title:"plugin.team_total.moneyLosses.title",description:"plugin.team_total.moneyLosses.description"}),o.jsx(_e,{value:ct(t.totalMoneyInWeekend),icon:"./assets/cards/money_holidays.svg",title:"plugin.team_total.weekendPayment.title",description:"plugin.team_total.weekendPayment.description"}),o.jsx(_e,{value:ct(Math.max(r,t.totalMoney)),icon:"./assets/cards/money_total.svg",title:"plugin.team_total.forecastingMoneyAll.title",description:"plugin.team_total.forecastingMoneyAll.description",size:"l"})]})]})});function k2(t){var n;const e=(n=de.config)==null?void 0:n.averageMonthlyLicenseCosts;return t.filter(r=>r.totalDaysWorked>10).reduce((r,u)=>r+u.months.reduce((c,p)=>c+p.allMiddleUsersInDepartment*e,0),0)}const b2=U(()=>{var r;const e=A.statisticsByCommits.author.list.length*((r=de.config)==null?void 0:r.averageNewWorkplaceCosts),s=A.statisticsByCommits.taskCodes.totalInfo,n=k2(s);return o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsx(_e,{size:"l",value:ct(e),icon:"./assets/cards/device.svg",title:"plugin.team_total.moneyDevice.title",description:"plugin.team_total.moneyDevice.description"})}),o.jsx(Q,{children:o.jsx(_e,{value:ct(n),icon:"./assets/cards/money_task.svg",title:"plugin.team_total.moneyLicence.title",description:"plugin.team_total.moneyLicence.description",size:"l"})})]})}),w2=U(()=>{const e=A.statisticsByCommits.taskCodes.totalInfo.filter(s=>{var n;return((n=s.months)==null?void 0:n.length)>5}).reduce((s,n)=>{var r;return s+((r=n.months[0])==null?void 0:r.allMiddleUsersInDepartment)},0);return o.jsxs(o.Fragment,{children:[o.jsx(G,{title:"plugin.team_total.common.title"}),o.jsx(h2,{employeesInCompany:e}),o.jsx(f2,{}),o.jsx(G,{title:"plugin.team_total.money.title"}),o.jsx(v2,{}),o.jsx(G,{title:"plugin.team_total.additionalMoney.title"}),o.jsx(b2,{})]})});let x2=(Ml=class{constructor(){this.dependencies=["taskCodes","author","team","firstLastCommit","release","pr","tasks"]}getMenuItems(){return[{id:"total",group:10,order:10,link:"/team/total",title:"plugin.team_total.sidebar",icon:"./assets/menu/common.svg"}]}getPage(e){return e==="/team/total"?o.jsx(w2,{}):void 0}getTranslations(){return g2}},Ml.id="team_total",Ml);const C2={ar:`
|
||
§ plugin.team_types.sidebar: أنواع المهام
|
||
§ plugin.team_types.title: إحصائيات أنواع المهام
|
||
§ plugin.team_types.description: تُحتسب *المساهمة الشخصية* بعدد الـ commits، وليس بحسب حجم الأسطر أو الملفات المعدّلة. لذلك ينبغي أيضاً الرجوع إلى قسم «تحليل الملفات» لتقييم نطاق التغييرات.
|
||
§ plugin.team_types.type: نوع العمل
|
||
§ plugin.team_types.unknown: غير معروف
|
||
§ plugin.team_types.tasks: المهام
|
||
§ plugin.team_types.tasksSmall: مهام
|
||
§ plugin.team_types.days: الأيام
|
||
§ plugin.team_types.daysSmall: أيام
|
||
§ plugin.team_types.authorsDays: أيام-شخص
|
||
§ plugin.team_types.commits: Commits
|
||
§ plugin.team_types.authors: المساهمة الشخصية
|
||
`,de:`
|
||
§ plugin.team_types.sidebar: Aufgabentypen
|
||
§ plugin.team_types.title: Statistik nach Aufgabentypen
|
||
§ plugin.team_types.description: Der *persönliche Beitrag* wird nach der Anzahl der commits gezählt, nicht nach dem Umfang geänderter Zeilen oder Dateien. Daher sollte auch der Abschnitt „Dateianalyse“ herangezogen werden, um den Umfang der Änderungen einzuschätzen.
|
||
§ plugin.team_types.type: Art der Arbeit
|
||
§ plugin.team_types.unknown: unbekannt
|
||
§ plugin.team_types.tasks: Aufgaben
|
||
§ plugin.team_types.tasksSmall: Aufgaben
|
||
§ plugin.team_types.days: Tage
|
||
§ plugin.team_types.daysSmall: Tage
|
||
§ plugin.team_types.authorsDays: Personentage
|
||
§ plugin.team_types.commits: Commits
|
||
§ plugin.team_types.authors: Persönlicher Beitrag
|
||
`,en:`
|
||
§ plugin.team_types.sidebar: Task types
|
||
§ plugin.team_types.title: Task type statistics
|
||
§ plugin.team_types.description: *Personal contribution* is counted by the number of commits, not the volume of changed lines or files. Therefore, the "File Analysis" section should also be consulted to assess the scale of changes.
|
||
§ plugin.team_types.type: Type of work
|
||
§ plugin.team_types.unknown: unknown
|
||
§ plugin.team_types.tasks: Tasks
|
||
§ plugin.team_types.tasksSmall: tasks
|
||
§ plugin.team_types.days: Days
|
||
§ plugin.team_types.daysSmall: days
|
||
§ plugin.team_types.authorsDays: Person-days
|
||
§ plugin.team_types.commits: Commits
|
||
§ plugin.team_types.authors: Personal contribution
|
||
`,es:`
|
||
§ plugin.team_types.sidebar: Tipos de tareas
|
||
§ plugin.team_types.title: Estadísticas por tipo de tarea
|
||
§ plugin.team_types.description: La *contribución personal* se cuenta por el número de commits, no por el volumen de líneas o archivos modificados. Por lo tanto, también conviene consultar la sección «Análisis de archivos» para evaluar la escala de los cambios.
|
||
§ plugin.team_types.type: Tipo de trabajo
|
||
§ plugin.team_types.unknown: desconocido
|
||
§ plugin.team_types.tasks: Tareas
|
||
§ plugin.team_types.tasksSmall: tareas
|
||
§ plugin.team_types.days: Días
|
||
§ plugin.team_types.daysSmall: días
|
||
§ plugin.team_types.authorsDays: días-persona
|
||
§ plugin.team_types.commits: Commits
|
||
§ plugin.team_types.authors: Contribución personal
|
||
`,fr:`
|
||
§ plugin.team_types.sidebar: Types de tâches
|
||
§ plugin.team_types.title: Statistiques par type de tâche
|
||
§ plugin.team_types.description: La *contribution personnelle* est calculée d'après le nombre de commits, et non d'après le volume de lignes ou de fichiers modifiés. Il convient donc également de consulter la section « Analyse des fichiers » afin d'évaluer l'ampleur des modifications.
|
||
§ plugin.team_types.type: Type de travail
|
||
§ plugin.team_types.unknown: inconnu
|
||
§ plugin.team_types.tasks: Tâches
|
||
§ plugin.team_types.tasksSmall: tâches
|
||
§ plugin.team_types.days: Jours
|
||
§ plugin.team_types.daysSmall: jours
|
||
§ plugin.team_types.authorsDays: jours-personne
|
||
§ plugin.team_types.commits: Commits
|
||
§ plugin.team_types.authors: Contribution personnelle
|
||
`,he:`
|
||
§ plugin.team_types.sidebar: סוגי משימות
|
||
§ plugin.team_types.title: סטטיסטיקה לפי סוגי משימות
|
||
§ plugin.team_types.description: *התרומה האישית* נספרת לפי מספר ה-commits, ולא לפי היקף השורות או הקבצים ששונו. לכן יש לעיין גם בסעיף «ניתוח קבצים» כדי להעריך את היקף השינויים.
|
||
§ plugin.team_types.type: סוג עבודה
|
||
§ plugin.team_types.unknown: לא ידוע
|
||
§ plugin.team_types.tasks: משימות
|
||
§ plugin.team_types.tasksSmall: משימות
|
||
§ plugin.team_types.days: ימים
|
||
§ plugin.team_types.daysSmall: ימים
|
||
§ plugin.team_types.authorsDays: ימי-אדם
|
||
§ plugin.team_types.commits: Commits
|
||
§ plugin.team_types.authors: תרומה אישית
|
||
`,hi:`
|
||
§ plugin.team_types.sidebar: कार्य प्रकार
|
||
§ plugin.team_types.title: कार्य प्रकार के आँकड़े
|
||
§ plugin.team_types.description: *व्यक्तिगत योगदान* की गणना commits की संख्या से की जाती है, न कि परिवर्तित पंक्तियों या फ़ाइलों की मात्रा से। इसलिए परिवर्तनों के पैमाने का आकलन करने के लिए «फ़ाइल विश्लेषण» अनुभाग भी देखना चाहिए।
|
||
§ plugin.team_types.type: कार्य का प्रकार
|
||
§ plugin.team_types.unknown: अज्ञात
|
||
§ plugin.team_types.tasks: कार्य
|
||
§ plugin.team_types.tasksSmall: कार्य
|
||
§ plugin.team_types.days: दिन
|
||
§ plugin.team_types.daysSmall: दिन
|
||
§ plugin.team_types.authorsDays: मानव-दिवस
|
||
§ plugin.team_types.commits: Commits
|
||
§ plugin.team_types.authors: व्यक्तिगत योगदान
|
||
`,ja:`
|
||
§ plugin.team_types.sidebar: タスクの種類
|
||
§ plugin.team_types.title: タスク種類の統計
|
||
§ plugin.team_types.description: *個人貢献* は、変更された行数やファイル数ではなく、commits の件数で集計されます。そのため、変更の規模を評価するには「ファイル分析」セクションも参照してください。
|
||
§ plugin.team_types.type: 作業の種類
|
||
§ plugin.team_types.unknown: 不明
|
||
§ plugin.team_types.tasks: タスク
|
||
§ plugin.team_types.tasksSmall: タスク
|
||
§ plugin.team_types.days: 日数
|
||
§ plugin.team_types.daysSmall: 日
|
||
§ plugin.team_types.authorsDays: 人日
|
||
§ plugin.team_types.commits: Commits
|
||
§ plugin.team_types.authors: 個人貢献
|
||
`,ko:`
|
||
§ plugin.team_types.sidebar: 작업 유형
|
||
§ plugin.team_types.title: 작업 유형 통계
|
||
§ plugin.team_types.description: *개인 기여*는 변경된 줄이나 파일의 양이 아니라 commits 수로 집계됩니다. 따라서 변경 규모를 평가하려면 「파일 분석」 섹션도 함께 참조해야 합니다.
|
||
§ plugin.team_types.type: 작업 유형
|
||
§ plugin.team_types.unknown: 알 수 없음
|
||
§ plugin.team_types.tasks: 작업
|
||
§ plugin.team_types.tasksSmall: 작업
|
||
§ plugin.team_types.days: 일수
|
||
§ plugin.team_types.daysSmall: 일
|
||
§ plugin.team_types.authorsDays: 인일
|
||
§ plugin.team_types.commits: Commits
|
||
§ plugin.team_types.authors: 개인 기여
|
||
`,pt:`
|
||
§ plugin.team_types.sidebar: Tipos de tarefas
|
||
§ plugin.team_types.title: Estatísticas por tipo de tarefa
|
||
§ plugin.team_types.description: A *contribuição pessoal* é contada pelo número de commits, e não pelo volume de linhas ou arquivos alterados. Por isso, deve-se consultar também a seção «Análise de arquivos» para avaliar a escala das alterações.
|
||
§ plugin.team_types.type: Tipo de trabalho
|
||
§ plugin.team_types.unknown: desconhecido
|
||
§ plugin.team_types.tasks: Tarefas
|
||
§ plugin.team_types.tasksSmall: tarefas
|
||
§ plugin.team_types.days: Dias
|
||
§ plugin.team_types.daysSmall: dias
|
||
§ plugin.team_types.authorsDays: dias-pessoa
|
||
§ plugin.team_types.commits: Commits
|
||
§ plugin.team_types.authors: Contribuição pessoal
|
||
`,ru:`
|
||
§ plugin.team_types.sidebar: Типы задач
|
||
§ plugin.team_types.title: Статистика по типам задач
|
||
§ plugin.team_types.description: *Персональный вклад* считается по количеству коммитов, а не объему измененных строк или файлов. Поэтому следует так же смотреть раздел «Анализ файлов», чтобы оценить масштаб изменений.
|
||
§ plugin.team_types.type: Тип работы
|
||
§ plugin.team_types.unknown: неизвестный
|
||
§ plugin.team_types.tasks: Задач
|
||
§ plugin.team_types.tasksSmall: задач
|
||
§ plugin.team_types.days: Дней
|
||
§ plugin.team_types.daysSmall: дней
|
||
§ plugin.team_types.authorsDays: Человеко-дней
|
||
§ plugin.team_types.commits: Коммитов
|
||
§ plugin.team_types.authors: Персональный вклад
|
||
|
||
§ plugin.team_types.recommendations.everyHasOne.title: Не подписывают тип задачи
|
||
§ plugin.team_types.recommendations.everyHasOne.description: большинство типов задач делает один человек.
|
||
§ plugin.team_types.recommendations.oneMaintainer.title: Узкая специализация
|
||
§ plugin.team_types.recommendations.oneMaintainer.description
|
||
большинство задач одного типа делают одни и те же люди.
|
||
|
||
# Типы задач:
|
||
|
||
§ plugin.team_types.recommendations.common
|
||
# Возможно, это не так
|
||
|
||
Нужно убедиться, что остальные сотрудники верно подписывают коммиты.
|
||
|
||
Шаги, которые помогут это сделать:
|
||
- настроить пре-коммит проверку для commit message;
|
||
- объяснить команде, что нужно указывать тип;
|
||
- проверить в новых ветках, что сотрудники следуют правилу;
|
||
|
||
# Если это действительно так
|
||
|
||
Вы настроили проверки и убедились что один и тот же сотрудник, делает задачи одного и того же типа.
|
||
|
||
Почему это плохо:
|
||
- его увольнение остановит целую пачку процессов;
|
||
- уменьшается компетенция остальных членов команды;
|
||
- трудно верхнеуровнево понять его правки;
|
||
|
||
Как это исправить:
|
||
- распределять разные типы задач равномерно;
|
||
- менять область работы (тесты, документация, ошибки) между сотрудниками через спринт;
|
||
|
||
§ plugin.team_types.recommendations.fewTypes.title
|
||
Это локальный продукт
|
||
|
||
§ plugin.team_types.recommendations.fewTypes.description
|
||
для конкретного заказчика или проблемы.
|
||
|
||
# Какие признаки есть у «глобального» продукта:
|
||
- локализация;
|
||
- документация;
|
||
- большой объём тестов;
|
||
- визуальная кастомизация;
|
||
- рефакторинг узких мест;
|
||
- и т.п.
|
||
|
||
# Почему этот продукт выглядит как «локальный»:
|
||
- у каждого «глобального» признака будет перевес по своему типу задач;
|
||
- чем больше «глобальных» признаков, тем больше вероятность «глобального» продукта;
|
||
|
||
В данном случае мы видим небольшое число типов, а следовательно, скорее всего есть недоработки, мешающие легко масштабировать продукт на мировой рынок и продавать его в других странах.
|
||
|
||
# Возможно, это не так
|
||
По типам файлов мы можем предположить тип программы (сайт, серверное приложение, DevOps скрипты и т.д.). Для frontend приложения наша гипотеза будет более верной, чем для DevOps-скриптов, которые могут быть лишь микро-модулем инициализации.
|
||
|
||
§ plugin.team_types.recommendations.diff.title
|
||
Разбейте лидирующий тип на подтипы
|
||
|
||
§ plugin.team_types.recommendations.diff.description
|
||
для детализации ошибок.
|
||
|
||
Как правило, тип задач с меткой «исправление ошибок» является лидирующим. Это делает статистику слабо-детализированной.
|
||
|
||
*Если у вас произошла такая ситуация*, вы можете разбить этот тип на подтипы (например, по месту обнаружения).
|
||
|
||
Рассмотрим несколько вариантов подтипов:
|
||
- fix_dev (ошибка выявленная в процессе разработки);
|
||
- fix_test (ошибка выявленная в процессе тестирования);
|
||
- fix (ошибка выявленная в проде);
|
||
|
||
§ plugin.team_types.recommendations.buddy.title
|
||
Копите мелкие задачи
|
||
|
||
§ plugin.team_types.recommendations.buddy.description
|
||
для новых сотрудников.
|
||
|
||
# Если задача:
|
||
- не важная;
|
||
- не большая;
|
||
- не требует сильного погружения в контекст;
|
||
- больше про рефакторинг, чем про новый код;
|
||
|
||
# Положите её в backlog с меткой «для новичков».
|
||
|
||
Когда придёт новый сотрудник, вы сможете моментально достать ему пачку небольших и разнообразных по типу задач, для ознакомления с проектом.
|
||
|
||
Также, если у вас будет застой в работе, вы сможете доставать по одной такой мелкой задаче из backlog-а.
|
||
|
||
`,zh:`
|
||
§ plugin.team_types.sidebar: 任务类型
|
||
§ plugin.team_types.title: 按任务类型的统计
|
||
§ plugin.team_types.description: *个人贡献* 按 commits 数量计算,而非按变更的代码行数或文件数量。因此还应查看「文件分析」部分,以评估变更规模。
|
||
§ plugin.team_types.type: 工作类型
|
||
§ plugin.team_types.unknown: 未知
|
||
§ plugin.team_types.tasks: 任务
|
||
§ plugin.team_types.tasksSmall: 任务
|
||
§ plugin.team_types.days: 天数
|
||
§ plugin.team_types.daysSmall: 天
|
||
§ plugin.team_types.authorsDays: 人日
|
||
§ plugin.team_types.commits: Commits
|
||
§ plugin.team_types.authors: 个人贡献
|
||
`};function j2({response:t,updateSort:e,rowsForExcel:s,mode:n}){const{text:r}=ie(),u=r("plugin.team_types.unknown");if(!t)return null;const[c,p]=Mt(t,["tasks","daysByAuthorsTotal"]);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,template:C.STRING,title:"plugin.team_types.type",properties:"type",formatter:_=>_||u,width:150}),o.jsx(w,{width:80,template:C.SHORT_NUMBER,properties:"tasks"}),o.jsx(w,{isSortable:!0,title:"plugin.team_types.tasks",properties:"tasks",width:120,template:_=>o.jsx(ue,{value:_,max:c,suffix:"plugin.team_types.tasksSmall"})}),o.jsx(w,{width:80,template:C.SHORT_NUMBER,title:"plugin.team_types.days",properties:"days"}),o.jsx(w,{width:80,template:C.SHORT_NUMBER,properties:"daysByAuthorsTotal"}),o.jsx(w,{isSortable:!0,title:"plugin.team_types.authorsDays",properties:"daysByAuthorsTotal",width:120,template:_=>o.jsx(ue,{value:_,max:p,suffix:"plugin.team_types.daysSmall"})}),o.jsx(w,{width:80,template:C.NUMBER,title:"plugin.team_types.commits",properties:"commits"}),o.jsx(w,{title:"plugin.team_types.authors",properties:"commitsByAuthors",template:_=>o.jsx(ue,{details:_,order:A.statisticsByCommits.author.list}),minWidth:200})]})}const T2=U(({mode:t})=>{const e=A.statisticsByCommits.type.totalInfo;if(!(e!=null&&e.length))return t!=="print"?o.jsx(Le,{}):null;const s=bb();return o.jsxs(o.Fragment,{children:[o.jsx(Y,{value:t!=="fullscreen",children:o.jsx(Hn,{mode:t,recommendations:s})}),o.jsx(G,{title:"plugin.team_types.title"}),o.jsxs(be,{content:e,mode:t,watch:`${t}${A.hash}`,children:[o.jsx(j2,{mode:t,rowsForExcel:e}),o.jsx(fe,{})]}),o.jsx(Te,{children:o.jsx(ot,{translationId:"plugin.team_types.description"})})]})});let D2=(Rl=class{constructor(){this.dependencies=["type","recommendations","author"]}getMenuItems(){return[{id:"types",group:10,order:40,link:"/team/types",title:"plugin.team_types.sidebar",icon:"./assets/menu/type.svg"}]}getPage(e,s){return e==="/team/types"?o.jsx(T2,{mode:s==null?void 0:s.mode}):void 0}getTranslations(){return C2}},Rl.id="team_types",Rl);const S2={ar:`
|
||
§ plugin.team_weeks.sidebar: حسب الأسابيع
|
||
§ plugin.team_weeks.title: الإحصائيات حسب الأسابيع
|
||
§ plugin.team_weeks.numberTasks: عدد المهام
|
||
§ plugin.team_weeks.people: عدد الموظفين
|
||
§ plugin.team_weeks.line: تغيير الأسطر
|
||
§ plugin.team_weeks.lossesDetails: من لم يقم بعمل commit
|
||
§ plugin.team_weeks.add: أُضيف
|
||
§ plugin.team_weeks.change: تغيّر
|
||
§ plugin.team_weeks.remove: أُزيل
|
||
§ plugin.team_weeks.hasCommits: وُجدت commits
|
||
§ plugin.team_weeks.hasNotCommits: لم توجد commits
|
||
§ plugin.team_weeks.last.title: إحصائيات الأسبوع المحدد
|
||
§ plugin.team_weeks.last.titleDefault: الأسبوع الأخير
|
||
§ plugin.team_weeks.last.tasks.title: مهام الأسبوع
|
||
§ plugin.team_weeks.last.tasks.description: أرقام المهام الفريدة المكتشفة في هذا النطاق الزمني
|
||
§ plugin.team_weeks.last.tasks.scoring: القيمة للأسبوع السابق / متوسط القيمة للشهر السابق
|
||
§ plugin.team_weeks.last.changes.title: تغيير الأسطر
|
||
§ plugin.team_weeks.last.changes.description: الأسطر المضافة والمغيّرة والمحذوفة
|
||
§ plugin.team_weeks.last.changes.scoring: القيمة للأسبوع السابق / متوسط القيمة للشهر السابق
|
||
§ plugin.team_weeks.last.types.title: أنواع commit
|
||
§ plugin.team_weeks.last.days.title: أيام الشخص الفعلية
|
||
§ plugin.team_weeks.last.best.title: الأكثر نشاطًا
|
||
§ plugin.team_weeks.last.best.description: أكبر عدد من المهام هذا الأسبوع
|
||
§ plugin.team_weeks.last.quiet.title: أسبوع هادئ
|
||
§ plugin.team_weeks.last.quiet.description: أقل عدد من المهام هذا الأسبوع
|
||
§ plugin.team_weeks.last.vsPrev: مقارنة بالأسبوع السابق
|
||
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.title: تراجع الغياب
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.description: انخفض هذا المؤشر خلال الأسابيع الثلاثة الأخيرة
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.title: ازداد الغياب
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.description: لا توجد مهام أو يلزم رقابة أشد
|
||
§ plugin.team_weeks.recommendations.notWork.title: لا يُكمل وقت العمل بصورة مستقرة
|
||
§ plugin.team_weeks.recommendations.notWork.description: لأنه يكتب الشيفرة أقل من 100% من الوقت كل أسبوع
|
||
§ plugin.team_weeks.recommendations.upWork.title: يعمل وقتًا إضافيًا بصورة مستقرة
|
||
§ plugin.team_weeks.recommendations.upWork.description: لأنه يكتب الشيفرة في عطلات نهاية الأسبوع كل أسبوع
|
||
§ plugin.team_weeks.recommendations.task.up.title: الإنتاجية في ارتفاع
|
||
§ plugin.team_weeks.recommendations.task.up.description
|
||
أو أصبحت المهام صغيرة جدًا.
|
||
|
||
يجب التحقق. إذا بقي مستوى التفصيل كما هو، فثبّت النتيجة.
|
||
§ plugin.team_weeks.recommendations.task.lazyMaintainer.description: متصدر مستقر في غياب commits.
|
||
§ plugin.team_weeks.recommendations.task.down.title: الإنتاجية في انخفاض
|
||
§ plugin.team_weeks.recommendations.task.down.description
|
||
أو تُقسَّم المهام على نحو أسوأ. يجب التحقق. إذا بقي مستوى التفصيل كما هو، فضعه تحت الرقابة.
|
||
|
||
# أسلوب التقييم:
|
||
- عدد المهام في اليوم التي يُعمل عليها ينخفض بثبات خلال الأسابيع الثلاثة الأخيرة.
|
||
|
||
# أخطاء محتملة:
|
||
- قد تكون المهام أصعب مما بدت؛
|
||
- قد يكون حجم العمل في المهام كبيرًا (يلزم التحقق مما إذا كان عدد التغييرات ينخفض خلال الفترة نفسها)
|
||
|
||
`,de:`
|
||
§ plugin.team_weeks.sidebar: Nach Wochen
|
||
§ plugin.team_weeks.title: Statistik nach Wochen
|
||
§ plugin.team_weeks.numberTasks: Anzahl der Aufgaben
|
||
§ plugin.team_weeks.people: Anzahl der Mitarbeiter
|
||
§ plugin.team_weeks.line: Änderung der Zeilen
|
||
§ plugin.team_weeks.lossesDetails: Wer keinen commit gemacht hat
|
||
§ plugin.team_weeks.add: hinzugefügt
|
||
§ plugin.team_weeks.change: geändert
|
||
§ plugin.team_weeks.remove: entfernt
|
||
§ plugin.team_weeks.hasCommits: es gab commits
|
||
§ plugin.team_weeks.hasNotCommits: es gab keine commits
|
||
§ plugin.team_weeks.last.title: Statistik für die ausgewählte Woche
|
||
§ plugin.team_weeks.last.titleDefault: Letzte Woche
|
||
§ plugin.team_weeks.last.tasks.title: Aufgaben in dieser Woche
|
||
§ plugin.team_weeks.last.tasks.description: Eindeutige Aufgabennummern, die in diesem Zeitraum gefunden wurden
|
||
§ plugin.team_weeks.last.tasks.scoring: Wert der Vorwoche / Durchschnittswert des Vormonats
|
||
§ plugin.team_weeks.last.changes.title: Änderung der Zeilen
|
||
§ plugin.team_weeks.last.changes.description: Hinzugefügte, geänderte und entfernte Zeilen
|
||
§ plugin.team_weeks.last.changes.scoring: Wert der Vorwoche / Durchschnittswert des Vormonats
|
||
§ plugin.team_weeks.last.types.title: Commit-Typen
|
||
§ plugin.team_weeks.last.days.title: Tatsächliche Personentage
|
||
§ plugin.team_weeks.last.best.title: Am aktivsten
|
||
§ plugin.team_weeks.last.best.description: Die meisten Aufgaben in dieser Woche
|
||
§ plugin.team_weeks.last.quiet.title: Ruhige Woche
|
||
§ plugin.team_weeks.last.quiet.description: Die wenigsten Aufgaben in dieser Woche
|
||
§ plugin.team_weeks.last.vsPrev: gegenüber der Vorwoche
|
||
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.title: Weniger Fehlzeiten
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.description: dieser Wert ist in den letzten drei Wochen gesunken
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.title: Mehr Fehlzeiten
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.description: es gibt keine Aufgaben, oder es ist eine strengere Kontrolle erforderlich
|
||
§ plugin.team_weeks.recommendations.notWork.title: Erbringt durchgehend nicht die volle Arbeitszeit
|
||
§ plugin.team_weeks.recommendations.notWork.description: da jede Woche weniger als 100 % der Zeit Code geschrieben wird
|
||
§ plugin.team_weeks.recommendations.upWork.title: Leistet durchgehend Überstunden
|
||
§ plugin.team_weeks.recommendations.upWork.description: da jede Woche am Wochenende Code geschrieben wird
|
||
§ plugin.team_weeks.recommendations.task.up.title: Die Produktivität steigt
|
||
§ plugin.team_weeks.recommendations.task.up.description
|
||
oder die Aufgaben sind zu klein geworden.
|
||
|
||
Dies muss geprüft werden. Wenn die Granularität gleich ist, das Ergebnis festigen.
|
||
§ plugin.team_weeks.recommendations.task.lazyMaintainer.description: ein beständiger Spitzenreiter beim Fehlen von commits.
|
||
§ plugin.team_weeks.recommendations.task.down.title: Die Produktivität sinkt
|
||
§ plugin.team_weeks.recommendations.task.down.description
|
||
oder die Aufgaben werden schlechter aufgeteilt. Dies muss geprüft werden. Wenn die Granularität gleich ist, unter Kontrolle nehmen.
|
||
|
||
# Bewertungsmethode:
|
||
- die Anzahl der Aufgaben pro Tag, an denen gearbeitet wird, sinkt über die letzten drei Wochen stetig.
|
||
|
||
# Mögliche Fehler:
|
||
- die Aufgaben könnten schwieriger gewesen sein, als es schien;
|
||
- die Aufgaben könnten einen großen Arbeitsumfang gehabt haben (prüfen, ob die Anzahl der Änderungen im selben Zeitraum sinkt)
|
||
|
||
`,en:`
|
||
§ plugin.team_weeks.sidebar: By weeks
|
||
§ plugin.team_weeks.title: Statistics by weeks
|
||
§ plugin.team_weeks.numberTasks: Number of tasks
|
||
§ plugin.team_weeks.people: Number of employees
|
||
§ plugin.team_weeks.line: Line changes
|
||
§ plugin.team_weeks.lossesDetails: Who did not commit
|
||
§ plugin.team_weeks.add: added
|
||
§ plugin.team_weeks.change: changed
|
||
§ plugin.team_weeks.remove: removed
|
||
§ plugin.team_weeks.hasCommits: had commits
|
||
§ plugin.team_weeks.hasNotCommits: had no commits
|
||
§ plugin.team_weeks.last.title: Statistics for the selected week
|
||
§ plugin.team_weeks.last.titleDefault: Last week
|
||
§ plugin.team_weeks.last.tasks.title: Tasks this week
|
||
§ plugin.team_weeks.last.tasks.description: Unique task numbers found in this time range
|
||
§ plugin.team_weeks.last.tasks.scoring: Value for the previous week / Average value for the previous month
|
||
§ plugin.team_weeks.last.changes.title: Line changes
|
||
§ plugin.team_weeks.last.changes.description: Added, changed and removed lines
|
||
§ plugin.team_weeks.last.changes.scoring: Value for the previous week / Average value for the previous month
|
||
§ plugin.team_weeks.last.types.title: Commit types
|
||
§ plugin.team_weeks.last.days.title: Actual person-days
|
||
§ plugin.team_weeks.last.best.title: Most active
|
||
§ plugin.team_weeks.last.best.description: Most tasks this week
|
||
§ plugin.team_weeks.last.quiet.title: Quiet week
|
||
§ plugin.team_weeks.last.quiet.description: Fewest tasks this week
|
||
§ plugin.team_weeks.last.vsPrev: versus the previous week
|
||
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.title: Fewer absences
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.description: this figure has fallen over the last three weeks
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.title: More absences
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.description: there are no tasks, or tighter control is needed
|
||
§ plugin.team_weeks.recommendations.notWork.title: Consistently underworking
|
||
§ plugin.team_weeks.recommendations.notWork.description: because every week code is written for less than 100% of the time
|
||
§ plugin.team_weeks.recommendations.upWork.title: Consistently overworking
|
||
§ plugin.team_weeks.recommendations.upWork.description: because every week code is written on weekends
|
||
§ plugin.team_weeks.recommendations.task.up.title: Productivity is rising
|
||
§ plugin.team_weeks.recommendations.task.up.description
|
||
or the tasks have become too small.
|
||
|
||
This needs to be checked. If the granularity is the same, lock in the result.
|
||
§ plugin.team_weeks.recommendations.task.lazyMaintainer.description: a consistent leader in the absence of commits.
|
||
§ plugin.team_weeks.recommendations.task.down.title: Productivity is falling
|
||
§ plugin.team_weeks.recommendations.task.down.description
|
||
or tasks are split up less well. This needs to be checked. If the granularity is the same, place it under control.
|
||
|
||
# Assessment method:
|
||
- the number of tasks per day being worked on has been steadily falling over the last three weeks.
|
||
|
||
# Possible errors:
|
||
- tasks may have been more difficult than they appeared;
|
||
- tasks may have involved a large volume of work (check whether the number of changes is falling over the same period)
|
||
|
||
`,es:`
|
||
§ plugin.team_weeks.sidebar: Por semanas
|
||
§ plugin.team_weeks.title: Estadísticas por semanas
|
||
§ plugin.team_weeks.numberTasks: Número de tareas
|
||
§ plugin.team_weeks.people: Número de empleados
|
||
§ plugin.team_weeks.line: Cambio de líneas
|
||
§ plugin.team_weeks.lossesDetails: Quién no hizo commit
|
||
§ plugin.team_weeks.add: añadido
|
||
§ plugin.team_weeks.change: modificado
|
||
§ plugin.team_weeks.remove: eliminado
|
||
§ plugin.team_weeks.hasCommits: hubo commits
|
||
§ plugin.team_weeks.hasNotCommits: no hubo commits
|
||
§ plugin.team_weeks.last.title: Estadísticas de la semana seleccionada
|
||
§ plugin.team_weeks.last.titleDefault: Última semana
|
||
§ plugin.team_weeks.last.tasks.title: Tareas de la semana
|
||
§ plugin.team_weeks.last.tasks.description: Números de tarea únicos encontrados en este intervalo de tiempo
|
||
§ plugin.team_weeks.last.tasks.scoring: Valor de la semana anterior / Valor medio del mes anterior
|
||
§ plugin.team_weeks.last.changes.title: Cambio de líneas
|
||
§ plugin.team_weeks.last.changes.description: Líneas añadidas, modificadas y eliminadas
|
||
§ plugin.team_weeks.last.changes.scoring: Valor de la semana anterior / Valor medio del mes anterior
|
||
§ plugin.team_weeks.last.types.title: Tipos de commit
|
||
§ plugin.team_weeks.last.days.title: Días-persona reales
|
||
§ plugin.team_weeks.last.best.title: Más activo
|
||
§ plugin.team_weeks.last.best.description: Más tareas esta semana
|
||
§ plugin.team_weeks.last.quiet.title: Semana tranquila
|
||
§ plugin.team_weeks.last.quiet.description: Menos tareas esta semana
|
||
§ plugin.team_weeks.last.vsPrev: respecto a la semana anterior
|
||
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.title: Menos ausencias
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.description: este indicador ha bajado en las últimas tres semanas
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.title: Más ausencias
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.description: no hay tareas o se necesita un control más estricto
|
||
§ plugin.team_weeks.recommendations.notWork.title: No completa de forma estable la jornada
|
||
§ plugin.team_weeks.recommendations.notWork.description: porque cada semana escribe código menos del 100 % del tiempo
|
||
§ plugin.team_weeks.recommendations.upWork.title: Trabaja de más de forma estable
|
||
§ plugin.team_weeks.recommendations.upWork.description: porque cada semana escribe código los fines de semana
|
||
§ plugin.team_weeks.recommendations.task.up.title: La productividad crece
|
||
§ plugin.team_weeks.recommendations.task.up.description
|
||
o las tareas se han vuelto demasiado pequeñas.
|
||
|
||
Hay que comprobarlo. Si la granularidad es la misma, consolidar el resultado.
|
||
§ plugin.team_weeks.recommendations.task.lazyMaintainer.description: líder estable por la ausencia de commits.
|
||
§ plugin.team_weeks.recommendations.task.down.title: La productividad cae
|
||
§ plugin.team_weeks.recommendations.task.down.description
|
||
o las tareas se dividen peor. Hay que comprobarlo. Si la granularidad es la misma, someterlo a control.
|
||
|
||
# Método de evaluación:
|
||
- el número de tareas al día en las que se trabaja ha ido cayendo de forma estable durante las últimas tres semanas.
|
||
|
||
# Posibles errores:
|
||
- las tareas podían ser más difíciles de lo que parecían;
|
||
- las tareas podían tener un gran volumen de trabajo (hay que comprobar si el número de cambios cae o no en el mismo período)
|
||
|
||
`,fr:`
|
||
§ plugin.team_weeks.sidebar: Par semaines
|
||
§ plugin.team_weeks.title: Statistiques par semaines
|
||
§ plugin.team_weeks.numberTasks: Nombre de tâches
|
||
§ plugin.team_weeks.people: Nombre de salariés
|
||
§ plugin.team_weeks.line: Modification des lignes
|
||
§ plugin.team_weeks.lossesDetails: Qui n'a pas fait de commit
|
||
§ plugin.team_weeks.add: ajouté
|
||
§ plugin.team_weeks.change: modifié
|
||
§ plugin.team_weeks.remove: supprimé
|
||
§ plugin.team_weeks.hasCommits: il y a eu des commits
|
||
§ plugin.team_weeks.hasNotCommits: il n'y a pas eu de commits
|
||
§ plugin.team_weeks.last.title: Statistiques de la semaine sélectionnée
|
||
§ plugin.team_weeks.last.titleDefault: Semaine dernière
|
||
§ plugin.team_weeks.last.tasks.title: Tâches de la semaine
|
||
§ plugin.team_weeks.last.tasks.description: Numéros de tâche uniques trouvés dans cet intervalle de temps
|
||
§ plugin.team_weeks.last.tasks.scoring: Valeur de la semaine précédente / Valeur moyenne du mois précédent
|
||
§ plugin.team_weeks.last.changes.title: Modification des lignes
|
||
§ plugin.team_weeks.last.changes.description: Lignes ajoutées, modifiées et supprimées
|
||
§ plugin.team_weeks.last.changes.scoring: Valeur de la semaine précédente / Valeur moyenne du mois précédent
|
||
§ plugin.team_weeks.last.types.title: Types de commit
|
||
§ plugin.team_weeks.last.days.title: Jours-personne réels
|
||
§ plugin.team_weeks.last.best.title: Le plus actif
|
||
§ plugin.team_weeks.last.best.description: Le plus de tâches cette semaine
|
||
§ plugin.team_weeks.last.quiet.title: Semaine calme
|
||
§ plugin.team_weeks.last.quiet.description: Le moins de tâches cette semaine
|
||
§ plugin.team_weeks.last.vsPrev: par rapport à la semaine précédente
|
||
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.title: Moins d'absences
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.description: cet indicateur a baissé au cours des trois dernières semaines
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.title: Plus d'absences
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.description: il n'y a pas de tâches, ou un contrôle plus strict est nécessaire
|
||
§ plugin.team_weeks.recommendations.notWork.title: Ne fournit pas de façon stable le temps complet
|
||
§ plugin.team_weeks.recommendations.notWork.description: car chaque semaine le code est écrit pendant moins de 100 % du temps
|
||
§ plugin.team_weeks.recommendations.upWork.title: Fait des heures supplémentaires de façon stable
|
||
§ plugin.team_weeks.recommendations.upWork.description: car chaque semaine du code est écrit le week-end
|
||
§ plugin.team_weeks.recommendations.task.up.title: La productivité augmente
|
||
§ plugin.team_weeks.recommendations.task.up.description
|
||
ou les tâches sont devenues trop petites.
|
||
|
||
Il faut vérifier. Si la granularité est la même, consolider le résultat.
|
||
§ plugin.team_weeks.recommendations.task.lazyMaintainer.description: un leader stable par l'absence de commits.
|
||
§ plugin.team_weeks.recommendations.task.down.title: La productivité baisse
|
||
§ plugin.team_weeks.recommendations.task.down.description
|
||
ou les tâches sont moins bien découpées. Il faut vérifier. Si la granularité est la même, le placer sous contrôle.
|
||
|
||
# Méthode d'évaluation :
|
||
- le nombre de tâches par jour sur lesquelles on travaille baisse de façon stable au cours des trois dernières semaines.
|
||
|
||
# Erreurs possibles :
|
||
- les tâches ont pu être plus difficiles qu'il n'y paraissait ;
|
||
- les tâches ont pu avoir un volume de travail important (il faut vérifier si le nombre de modifications baisse sur la même période)
|
||
|
||
`,he:`
|
||
§ plugin.team_weeks.sidebar: לפי שבועות
|
||
§ plugin.team_weeks.title: סטטיסטיקה לפי שבועות
|
||
§ plugin.team_weeks.numberTasks: מספר המשימות
|
||
§ plugin.team_weeks.people: מספר העובדים
|
||
§ plugin.team_weeks.line: שינוי שורות
|
||
§ plugin.team_weeks.lossesDetails: מי לא ביצע commit
|
||
§ plugin.team_weeks.add: נוסף
|
||
§ plugin.team_weeks.change: שונה
|
||
§ plugin.team_weeks.remove: הוסר
|
||
§ plugin.team_weeks.hasCommits: היו commits
|
||
§ plugin.team_weeks.hasNotCommits: לא היו commits
|
||
§ plugin.team_weeks.last.title: סטטיסטיקה לשבוע שנבחר
|
||
§ plugin.team_weeks.last.titleDefault: השבוע האחרון
|
||
§ plugin.team_weeks.last.tasks.title: משימות השבוע
|
||
§ plugin.team_weeks.last.tasks.description: מספרי משימות ייחודיים שנמצאו בטווח זמן זה
|
||
§ plugin.team_weeks.last.tasks.scoring: ערך לשבוע הקודם / ערך ממוצע לחודש הקודם
|
||
§ plugin.team_weeks.last.changes.title: שינוי שורות
|
||
§ plugin.team_weeks.last.changes.description: שורות שנוספו, שונו והוסרו
|
||
§ plugin.team_weeks.last.changes.scoring: ערך לשבוע הקודם / ערך ממוצע לחודש הקודם
|
||
§ plugin.team_weeks.last.types.title: סוגי commit
|
||
§ plugin.team_weeks.last.days.title: ימי אדם בפועל
|
||
§ plugin.team_weeks.last.best.title: הפעיל ביותר
|
||
§ plugin.team_weeks.last.best.description: הכי הרבה משימות השבוע
|
||
§ plugin.team_weeks.last.quiet.title: שבוע שקט
|
||
§ plugin.team_weeks.last.quiet.description: הכי מעט משימות השבוע
|
||
§ plugin.team_weeks.last.vsPrev: לעומת השבוע הקודם
|
||
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.title: פחות היעדרויות
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.description: מדד זה ירד בשלושת השבועות האחרונים
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.title: יותר היעדרויות
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.description: אין משימות או נדרשת בקרה הדוקה יותר
|
||
§ plugin.team_weeks.recommendations.notWork.title: באופן יציב אינו משלים את מלוא הזמן
|
||
§ plugin.team_weeks.recommendations.notWork.description: משום שבכל שבוע נכתב קוד בפחות מ-100% מהזמן
|
||
§ plugin.team_weeks.recommendations.upWork.title: באופן יציב עובד שעות נוספות
|
||
§ plugin.team_weeks.recommendations.upWork.description: משום שבכל שבוע נכתב קוד בסופי שבוע
|
||
§ plugin.team_weeks.recommendations.task.up.title: הפרודוקטיביות עולה
|
||
§ plugin.team_weeks.recommendations.task.up.description
|
||
או שהמשימות נעשו קטנות מדי.
|
||
|
||
יש לבדוק. אם רמת הפירוט זהה, יש לקבע את התוצאה.
|
||
§ plugin.team_weeks.recommendations.task.lazyMaintainer.description: מוביל יציב בהיעדר commits.
|
||
§ plugin.team_weeks.recommendations.task.down.title: הפרודוקטיביות יורדת
|
||
§ plugin.team_weeks.recommendations.task.down.description
|
||
או שהמשימות מפוצלות פחות טוב. יש לבדוק. אם רמת הפירוט זהה, יש להעביר לבקרה.
|
||
|
||
# שיטת הערכה:
|
||
- מספר המשימות ליום שעליהן עובדים יורד באופן יציב לאורך שלושת השבועות האחרונים.
|
||
|
||
# שגיאות אפשריות:
|
||
- ייתכן שהמשימות היו קשות יותר מכפי שנדמה;
|
||
- ייתכן שלמשימות היה היקף עבודה גדול (יש לבדוק אם מספר השינויים יורד באותה תקופה)
|
||
|
||
`,hi:`
|
||
§ plugin.team_weeks.sidebar: सप्ताहों के अनुसार
|
||
§ plugin.team_weeks.title: सप्ताहों के अनुसार आँकड़े
|
||
§ plugin.team_weeks.numberTasks: कार्यों की संख्या
|
||
§ plugin.team_weeks.people: कर्मचारियों की संख्या
|
||
§ plugin.team_weeks.line: पंक्तियों में परिवर्तन
|
||
§ plugin.team_weeks.lossesDetails: किसने commit नहीं किया
|
||
§ plugin.team_weeks.add: जोड़ा गया
|
||
§ plugin.team_weeks.change: परिवर्तित
|
||
§ plugin.team_weeks.remove: हटाया गया
|
||
§ plugin.team_weeks.hasCommits: commits थे
|
||
§ plugin.team_weeks.hasNotCommits: commits नहीं थे
|
||
§ plugin.team_weeks.last.title: चयनित सप्ताह के आँकड़े
|
||
§ plugin.team_weeks.last.titleDefault: पिछला सप्ताह
|
||
§ plugin.team_weeks.last.tasks.title: इस सप्ताह के कार्य
|
||
§ plugin.team_weeks.last.tasks.description: इस समय सीमा में पाए गए अद्वितीय कार्य क्रमांक
|
||
§ plugin.team_weeks.last.tasks.scoring: पिछले सप्ताह का मान / पिछले माह का औसत मान
|
||
§ plugin.team_weeks.last.changes.title: पंक्तियों में परिवर्तन
|
||
§ plugin.team_weeks.last.changes.description: जोड़ी, बदली और हटाई गई पंक्तियाँ
|
||
§ plugin.team_weeks.last.changes.scoring: पिछले सप्ताह का मान / पिछले माह का औसत मान
|
||
§ plugin.team_weeks.last.types.title: commit प्रकार
|
||
§ plugin.team_weeks.last.days.title: वास्तविक व्यक्ति-दिवस
|
||
§ plugin.team_weeks.last.best.title: सबसे सक्रिय
|
||
§ plugin.team_weeks.last.best.description: इस सप्ताह सबसे अधिक कार्य
|
||
§ plugin.team_weeks.last.quiet.title: शांत सप्ताह
|
||
§ plugin.team_weeks.last.quiet.description: इस सप्ताह सबसे कम कार्य
|
||
§ plugin.team_weeks.last.vsPrev: पिछले सप्ताह की तुलना में
|
||
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.title: अनुपस्थिति कम हुई
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.description: पिछले तीन सप्ताहों में यह संकेतक गिरा है
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.title: अनुपस्थिति बढ़ी
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.description: कार्य नहीं हैं या अधिक सख्त नियंत्रण आवश्यक है
|
||
§ plugin.team_weeks.recommendations.notWork.title: स्थिर रूप से पूरा समय नहीं देता
|
||
§ plugin.team_weeks.recommendations.notWork.description: क्योंकि प्रत्येक सप्ताह 100% से कम समय कोड लिखा जाता है
|
||
§ plugin.team_weeks.recommendations.upWork.title: स्थिर रूप से अतिरिक्त समय काम करता है
|
||
§ plugin.team_weeks.recommendations.upWork.description: क्योंकि प्रत्येक सप्ताह सप्ताहांत में कोड लिखा जाता है
|
||
§ plugin.team_weeks.recommendations.task.up.title: उत्पादकता बढ़ रही है
|
||
§ plugin.team_weeks.recommendations.task.up.description
|
||
या कार्य बहुत छोटे हो गए हैं।
|
||
|
||
जाँच आवश्यक है। यदि विवरण का स्तर वही है, तो परिणाम को स्थिर करें।
|
||
§ plugin.team_weeks.recommendations.task.lazyMaintainer.description: commits की अनुपस्थिति में स्थिर अग्रणी।
|
||
§ plugin.team_weeks.recommendations.task.down.title: उत्पादकता गिर रही है
|
||
§ plugin.team_weeks.recommendations.task.down.description
|
||
या कार्य कम अच्छी तरह बाँटे जाते हैं। जाँच आवश्यक है। यदि विवरण का स्तर वही है, तो नियंत्रण में लें।
|
||
|
||
# मूल्यांकन विधि:
|
||
- प्रति दिन जिन कार्यों पर काम होता है, उनकी संख्या पिछले तीन सप्ताहों में स्थिर रूप से गिर रही है।
|
||
|
||
# संभावित त्रुटियाँ:
|
||
- कार्य जितना लगा, उससे कठिन हो सकते थे;
|
||
- कार्यों में कार्य की मात्रा अधिक हो सकती थी (जाँचें कि इसी अवधि में परिवर्तनों की संख्या गिर रही है या नहीं)
|
||
|
||
`,ja:`
|
||
§ plugin.team_weeks.sidebar: 週別
|
||
§ plugin.team_weeks.title: 週別統計
|
||
§ plugin.team_weeks.numberTasks: タスク数
|
||
§ plugin.team_weeks.people: スタッフ数
|
||
§ plugin.team_weeks.line: 行の変更
|
||
§ plugin.team_weeks.lossesDetails: commit しなかった人
|
||
§ plugin.team_weeks.add: 追加
|
||
§ plugin.team_weeks.change: 変更
|
||
§ plugin.team_weeks.remove: 削除
|
||
§ plugin.team_weeks.hasCommits: commits があった
|
||
§ plugin.team_weeks.hasNotCommits: commits がなかった
|
||
§ plugin.team_weeks.last.title: 選択した週の統計
|
||
§ plugin.team_weeks.last.titleDefault: 直近の週
|
||
§ plugin.team_weeks.last.tasks.title: 今週のタスク
|
||
§ plugin.team_weeks.last.tasks.description: この期間に見つかった一意のタスク番号
|
||
§ plugin.team_weeks.last.tasks.scoring: 前週の値 / 前月の平均値
|
||
§ plugin.team_weeks.last.changes.title: 行の変更
|
||
§ plugin.team_weeks.last.changes.description: 追加、変更、削除された行
|
||
§ plugin.team_weeks.last.changes.scoring: 前週の値 / 前月の平均値
|
||
§ plugin.team_weeks.last.types.title: commit の種類
|
||
§ plugin.team_weeks.last.days.title: 実際の人日
|
||
§ plugin.team_weeks.last.best.title: 最も活発
|
||
§ plugin.team_weeks.last.best.description: 今週のタスクが最多
|
||
§ plugin.team_weeks.last.quiet.title: 静かな週
|
||
§ plugin.team_weeks.last.quiet.description: 今週のタスクが最少
|
||
§ plugin.team_weeks.last.vsPrev: 前週比
|
||
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.title: 欠勤が減少した
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.description: 過去3週間でこの指標は低下した
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.title: 欠勤が増加した
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.description: タスクがないか、より厳格な管理が必要である
|
||
§ plugin.team_weeks.recommendations.notWork.title: 安定して所定時間に達していない
|
||
§ plugin.team_weeks.recommendations.notWork.description: 毎週、時間の100%未満しかコードを書いていないため
|
||
§ plugin.team_weeks.recommendations.upWork.title: 安定して超過勤務している
|
||
§ plugin.team_weeks.recommendations.upWork.description: 毎週、週末にコードを書いているため
|
||
§ plugin.team_weeks.recommendations.task.up.title: 生産性が上昇している
|
||
§ plugin.team_weeks.recommendations.task.up.description
|
||
またはタスクが細かすぎるようになった。
|
||
|
||
確認が必要である。粒度が同じであれば、結果を定着させる。
|
||
§ plugin.team_weeks.recommendations.task.lazyMaintainer.description: commits がない点で安定した首位。
|
||
§ plugin.team_weeks.recommendations.task.down.title: 生産性が低下している
|
||
§ plugin.team_weeks.recommendations.task.down.description
|
||
またはタスクの分割が悪化している。確認が必要である。粒度が同じであれば、管理下に置く。
|
||
|
||
# 評価方法:
|
||
- 作業対象となる1日あたりのタスク数が、過去3週間にわたり安定して減少している。
|
||
|
||
# 起こり得る誤り:
|
||
- タスクは見た目より難しかった可能性がある;
|
||
- タスクの作業量が大きかった可能性がある(同じ期間で変更数が減少しているか確認する必要がある)
|
||
|
||
`,ko:`
|
||
§ plugin.team_weeks.sidebar: 주별
|
||
§ plugin.team_weeks.title: 주별 통계
|
||
§ plugin.team_weeks.numberTasks: 작업 수
|
||
§ plugin.team_weeks.people: 직원 수
|
||
§ plugin.team_weeks.line: 줄 변경
|
||
§ plugin.team_weeks.lossesDetails: commit하지 않은 사람
|
||
§ plugin.team_weeks.add: 추가됨
|
||
§ plugin.team_weeks.change: 변경됨
|
||
§ plugin.team_weeks.remove: 제거됨
|
||
§ plugin.team_weeks.hasCommits: commits가 있었음
|
||
§ plugin.team_weeks.hasNotCommits: commits가 없었음
|
||
§ plugin.team_weeks.last.title: 선택한 주의 통계
|
||
§ plugin.team_weeks.last.titleDefault: 지난주
|
||
§ plugin.team_weeks.last.tasks.title: 이번 주 작업
|
||
§ plugin.team_weeks.last.tasks.description: 이 기간에서 발견된 고유 작업 번호
|
||
§ plugin.team_weeks.last.tasks.scoring: 이전 주 값 / 이전 달 평균값
|
||
§ plugin.team_weeks.last.changes.title: 줄 변경
|
||
§ plugin.team_weeks.last.changes.description: 추가, 변경, 삭제된 줄
|
||
§ plugin.team_weeks.last.changes.scoring: 이전 주 값 / 이전 달 평균값
|
||
§ plugin.team_weeks.last.types.title: commit 유형
|
||
§ plugin.team_weeks.last.days.title: 실제 인일
|
||
§ plugin.team_weeks.last.best.title: 가장 활발
|
||
§ plugin.team_weeks.last.best.description: 이번 주 작업이 가장 많음
|
||
§ plugin.team_weeks.last.quiet.title: 한산한 주
|
||
§ plugin.team_weeks.last.quiet.description: 이번 주 작업이 가장 적음
|
||
§ plugin.team_weeks.last.vsPrev: 이전 주 대비
|
||
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.title: 결근이 줄었다
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.description: 최근 3주 동안 이 지표가 하락했다
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.title: 결근이 늘었다
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.description: 작업이 없거나 더 엄격한 관리가 필요하다
|
||
§ plugin.team_weeks.recommendations.notWork.title: 안정적으로 근무 시간을 채우지 않는다
|
||
§ plugin.team_weeks.recommendations.notWork.description: 매주 시간의 100% 미만으로 코드를 작성하기 때문이다
|
||
§ plugin.team_weeks.recommendations.upWork.title: 안정적으로 초과 근무한다
|
||
§ plugin.team_weeks.recommendations.upWork.description: 매주 주말에 코드를 작성하기 때문이다
|
||
§ plugin.team_weeks.recommendations.task.up.title: 생산성이 상승하고 있다
|
||
§ plugin.team_weeks.recommendations.task.up.description
|
||
또는 작업이 지나치게 작아졌다.
|
||
|
||
확인이 필요하다. 세분성이 같다면 결과를 고정한다.
|
||
§ plugin.team_weeks.recommendations.task.lazyMaintainer.description: commits 부재에서 안정적인 선두이다.
|
||
§ plugin.team_weeks.recommendations.task.down.title: 생산성이 하락하고 있다
|
||
§ plugin.team_weeks.recommendations.task.down.description
|
||
또는 작업 분할이 더 나빠졌다. 확인이 필요하다. 세분성이 같다면 관리 대상으로 둔다.
|
||
|
||
# 평가 방법:
|
||
- 하루에 작업하는 작업 수가 최근 3주 동안 안정적으로 감소하고 있다.
|
||
|
||
# 가능한 오류:
|
||
- 작업이 보였던 것보다 더 어려웠을 수 있다;
|
||
- 작업의 업무량이 컸을 수 있다 (같은 기간에 변경 수가 감소하는지 확인해야 한다)
|
||
|
||
`,pt:`
|
||
§ plugin.team_weeks.sidebar: Por semanas
|
||
§ plugin.team_weeks.title: Estatísticas por semanas
|
||
§ plugin.team_weeks.numberTasks: Número de tarefas
|
||
§ plugin.team_weeks.people: Número de funcionários
|
||
§ plugin.team_weeks.line: Alteração de linhas
|
||
§ plugin.team_weeks.lossesDetails: Quem não fez commit
|
||
§ plugin.team_weeks.add: adicionado
|
||
§ plugin.team_weeks.change: alterado
|
||
§ plugin.team_weeks.remove: removido
|
||
§ plugin.team_weeks.hasCommits: houve commits
|
||
§ plugin.team_weeks.hasNotCommits: não houve commits
|
||
§ plugin.team_weeks.last.title: Estatísticas da semana selecionada
|
||
§ plugin.team_weeks.last.titleDefault: Última semana
|
||
§ plugin.team_weeks.last.tasks.title: Tarefas da semana
|
||
§ plugin.team_weeks.last.tasks.description: Números de tarefa únicos encontrados neste intervalo de tempo
|
||
§ plugin.team_weeks.last.tasks.scoring: Valor da semana anterior / Valor médio do mês anterior
|
||
§ plugin.team_weeks.last.changes.title: Alteração de linhas
|
||
§ plugin.team_weeks.last.changes.description: Linhas adicionadas, alteradas e removidas
|
||
§ plugin.team_weeks.last.changes.scoring: Valor da semana anterior / Valor médio do mês anterior
|
||
§ plugin.team_weeks.last.types.title: Tipos de commit
|
||
§ plugin.team_weeks.last.days.title: Dias-pessoa reais
|
||
§ plugin.team_weeks.last.best.title: Mais ativo
|
||
§ plugin.team_weeks.last.best.description: Mais tarefas nesta semana
|
||
§ plugin.team_weeks.last.quiet.title: Semana calma
|
||
§ plugin.team_weeks.last.quiet.description: Menos tarefas nesta semana
|
||
§ plugin.team_weeks.last.vsPrev: em relação à semana anterior
|
||
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.title: Menos faltas
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.description: este indicador caiu nas últimas três semanas
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.title: Mais faltas
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.description: não há tarefas ou é necessário um controle mais rigoroso
|
||
§ plugin.team_weeks.recommendations.notWork.title: Não cumpre de forma estável o tempo integral
|
||
§ plugin.team_weeks.recommendations.notWork.description: porque todas as semanas escreve código em menos de 100% do tempo
|
||
§ plugin.team_weeks.recommendations.upWork.title: Faz horas extra de forma estável
|
||
§ plugin.team_weeks.recommendations.upWork.description: porque todas as semanas escreve código aos fins de semana
|
||
§ plugin.team_weeks.recommendations.task.up.title: A produtividade está crescendo
|
||
§ plugin.team_weeks.recommendations.task.up.description
|
||
ou as tarefas ficaram pequenas demais.
|
||
|
||
É necessário verificar. Se a granularidade for a mesma, consolidar o resultado.
|
||
§ plugin.team_weeks.recommendations.task.lazyMaintainer.description: líder estável pela ausência de commits.
|
||
§ plugin.team_weeks.recommendations.task.down.title: A produtividade está caindo
|
||
§ plugin.team_weeks.recommendations.task.down.description
|
||
ou as tarefas são divididas de forma pior. É necessário verificar. Se a granularidade for a mesma, colocar sob controle.
|
||
|
||
# Método de avaliação:
|
||
- o número de tarefas por dia em que se trabalha tem caído de forma estável ao longo das últimas três semanas.
|
||
|
||
# Possíveis erros:
|
||
- as tarefas podem ter sido mais difíceis do que pareciam;
|
||
- as tarefas podem ter tido um grande volume de trabalho (é necessário verificar se o número de alterações cai no mesmo período)
|
||
|
||
`,ru:`
|
||
§ plugin.team_weeks.sidebar: По неделям
|
||
§ plugin.team_weeks.title: Статистика по неделям
|
||
§ plugin.team_weeks.numberTasks: Количество задач
|
||
§ plugin.team_weeks.people: Количество сотрудников
|
||
§ plugin.team_weeks.line: Изменение строк
|
||
§ plugin.team_weeks.lossesDetails: Кто не коммитил
|
||
§ plugin.team_weeks.add: добавили
|
||
§ plugin.team_weeks.change: изменили
|
||
§ plugin.team_weeks.remove: удалили
|
||
§ plugin.team_weeks.hasCommits: были коммиты
|
||
§ plugin.team_weeks.hasNotCommits: небыло коммитов
|
||
§ plugin.team_weeks.last.title: Статистика по выбранной неделе
|
||
§ plugin.team_weeks.last.titleDefault: Последняя неделя
|
||
§ plugin.team_weeks.last.tasks.title: Задач за неделю
|
||
§ plugin.team_weeks.last.tasks.description: Уникальные номера задач обнаруженные в данном диапазоне времени
|
||
§ plugin.team_weeks.last.tasks.scoring: Значение за прошлую неделю / Среднее значение за прошлый месяц
|
||
§ plugin.team_weeks.last.changes.title: Изменение строк
|
||
§ plugin.team_weeks.last.changes.description: Добавленные, изменённые и удалённые строки
|
||
§ plugin.team_weeks.last.changes.scoring: Значение за прошлую неделю / Среднее значение за прошлый месяц
|
||
§ plugin.team_weeks.last.types.title: Типы коммитов
|
||
§ plugin.team_weeks.last.days.title: Фактические человеко-дни
|
||
§ plugin.team_weeks.last.best.title: Самый активный
|
||
§ plugin.team_weeks.last.best.description: Больше всего задач за неделю
|
||
§ plugin.team_weeks.last.quiet.title: Тихая неделя
|
||
§ plugin.team_weeks.last.quiet.description: Меньше всего задач за неделю
|
||
§ plugin.team_weeks.last.vsPrev: к предыдущей неделе
|
||
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.title: Стало меньше прогулов
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.description: за последние три недели этот показатель упал
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.title: Стало больше прогулов
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.description: нет задач или нужен более жесткий контроль
|
||
§ plugin.team_weeks.recommendations.notWork.title: Стабильно не дорабатывает
|
||
§ plugin.team_weeks.recommendations.notWork.description: т.к. каждую неделю пишет код не 100% времени
|
||
§ plugin.team_weeks.recommendations.upWork.title: Стабильно перерабатывает
|
||
§ plugin.team_weeks.recommendations.upWork.description: т.к. каждую неделю пишет код в выходные дни
|
||
§ plugin.team_weeks.recommendations.task.up.title: Растёт производительность
|
||
§ plugin.team_weeks.recommendations.task.up.description
|
||
или задачи стали слишком мелкие.
|
||
|
||
Нужно проверить. Если гранулярность та же - закрепить результат.
|
||
§ plugin.team_weeks.recommendations.task.lazyMaintainer.description: стабильный лидер по отсутствию коммитов.
|
||
§ plugin.team_weeks.recommendations.task.down.title: Падает производительность
|
||
§ plugin.team_weeks.recommendations.task.down.description
|
||
или задачи хуже разбивают. Нужно проверить. Если гранулярность та же - взять на контроль.
|
||
|
||
# Метод оценки:
|
||
- количество задач в день, над которыми работают, на протяжении последних трех недель стабильно падает.
|
||
|
||
# Возможные ошибки:
|
||
- задачи могли быть сложнее, чем казались;
|
||
- задачи могли иметь большой объём работы (нужно проверить количество изменений, падают они или нет за этот же период)
|
||
|
||
`,zh:`
|
||
§ plugin.team_weeks.sidebar: 按周
|
||
§ plugin.team_weeks.title: 按周统计
|
||
§ plugin.team_weeks.numberTasks: 任务数量
|
||
§ plugin.team_weeks.people: 员工人数
|
||
§ plugin.team_weeks.line: 行变更
|
||
§ plugin.team_weeks.lossesDetails: 谁没有做 commit
|
||
§ plugin.team_weeks.add: 已添加
|
||
§ plugin.team_weeks.change: 已修改
|
||
§ plugin.team_weeks.remove: 已删除
|
||
§ plugin.team_weeks.hasCommits: 有 commits
|
||
§ plugin.team_weeks.hasNotCommits: 没有 commits
|
||
§ plugin.team_weeks.last.title: 所选周的统计
|
||
§ plugin.team_weeks.last.titleDefault: 上一周
|
||
§ plugin.team_weeks.last.tasks.title: 本周任务
|
||
§ plugin.team_weeks.last.tasks.description: 在该时间范围内发现的唯一任务编号
|
||
§ plugin.team_weeks.last.tasks.scoring: 上一周的值 / 上一月的平均值
|
||
§ plugin.team_weeks.last.changes.title: 行变更
|
||
§ plugin.team_weeks.last.changes.description: 新增、修改和删除的行
|
||
§ plugin.team_weeks.last.changes.scoring: 上一周的值 / 上一月的平均值
|
||
§ plugin.team_weeks.last.types.title: commit 类型
|
||
§ plugin.team_weeks.last.days.title: 实际人日
|
||
§ plugin.team_weeks.last.best.title: 最活跃
|
||
§ plugin.team_weeks.last.best.description: 本周任务最多
|
||
§ plugin.team_weeks.last.quiet.title: 安静的一周
|
||
§ plugin.team_weeks.last.quiet.description: 本周任务最少
|
||
§ plugin.team_weeks.last.vsPrev: 对比上周
|
||
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.title: 缺勤减少
|
||
§ plugin.team_weeks.recommendations.lazyDays.down.description: 近三周该指标已下降
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.title: 缺勤增加
|
||
§ plugin.team_weeks.recommendations.lazyDays.up.description: 没有任务,或需要更严格的管控
|
||
§ plugin.team_weeks.recommendations.notWork.title: 持续未满负荷工作
|
||
§ plugin.team_weeks.recommendations.notWork.description: 因为每周编写代码的时间不足 100%
|
||
§ plugin.team_weeks.recommendations.upWork.title: 持续加班
|
||
§ plugin.team_weeks.recommendations.upWork.description: 因为每周在周末编写代码
|
||
§ plugin.team_weeks.recommendations.task.up.title: 生产率正在上升
|
||
§ plugin.team_weeks.recommendations.task.up.description
|
||
或者任务变得过小。
|
||
|
||
需要核实。若粒度相同,则巩固该结果。
|
||
§ plugin.team_weeks.recommendations.task.lazyMaintainer.description: 在缺少 commits 方面稳定领先。
|
||
§ plugin.team_weeks.recommendations.task.down.title: 生产率正在下降
|
||
§ plugin.team_weeks.recommendations.task.down.description
|
||
或者任务拆分变差。需要核实。若粒度相同,则纳入管控。
|
||
|
||
# 评估方法:
|
||
- 每天正在处理的任务数量在近三周持续下降。
|
||
|
||
# 可能的误差:
|
||
- 任务可能比看起来更难;
|
||
- 任务的工作量可能很大(需核实同期变更数量是否下降)
|
||
|
||
`},A2={lazyDaysDown:{title:"plugin.team_weeks.recommendations.lazyDays.down.title",description:"plugin.team_weeks.recommendations.lazyDays.down.description",type:J.FACT},lazyDaysUp:{title:"plugin.team_weeks.recommendations.lazyDays.up.title",description:"plugin.team_weeks.recommendations.lazyDays.up.description",type:J.ALERT},notWork:{title:"plugin.team_weeks.recommendations.notWork.title",description:"plugin.team_weeks.recommendations.notWork.description",type:J.ALERT},upWork:{title:"plugin.team_weeks.recommendations.upWork.title",description:"plugin.team_weeks.recommendations.upWork.description",type:J.ALERT},taskUp:{title:"plugin.team_weeks.recommendations.task.up.title",description:"plugin.team_weeks.recommendations.task.up.description",type:J.FACT},taskDown:{title:"plugin.team_weeks.recommendations.task.down.title",description:"plugin.team_weeks.recommendations.task.down.description",type:J.ALERT},taskLazyMaintainer:{description:"plugin.team_weeks.recommendations.task.lazyMaintainer.description",type:J.ALERT}},{getItem:Nc}=Un(A2);function z2(t){const e=t.map(s=>s.lazyDaysTotal/s.authorsLength);return e[0]<e[1]&&e[1]<e[2]?Nc("lazyDaysDown"):e[0]>e[1]&&e[1]>e[2]?Nc("lazyDaysUp"):null}function N2(t){const e=t.map(s=>s.tasks/s.authorsLength);return e[0]<e[1]&&e[1]<e[2]?Nc("taskUp"):e[0]>e[1]&&e[1]>e[2]?Nc("taskDown"):null}function M2(){const t=A.statisticsByCommits;if(t.author.list.length<2)return[];const e=t.week.totalInfo.slice(0,3);return[z2(e),N2(e)].filter(s=>s)}const R2=qi(M2);function E2(t){const e=new bs,s=new bs;for(const n in t){const r=t[n];e.update(r.totalTasks,n),s.update(r.totalDaysWithoutCommits,n)}return{totalTasks:e,totalDaysWithoutCommits:s}}function I2(t,e){const n=t.slice(e+1,e+4+1),r=n.length,u=n.reduce((_,h)=>_+h.totalTasks,0)/r,c=n.reduce((_,h)=>_+h.totalDaysWithoutCommits,0)/r,p=n.reduce((_,h)=>_+h.totalChanges,0)/r;return{totalTasks:u,totalDaysWithoutCommits:c,totalChanges:p}}const q2=U(({weeks:t,index:e})=>{var p,_,h,f,v,k,x,N;const s=t==null?void 0:t[e];if(!s)return null;const n=t[e+1],r=E2(s.authors),u=I2(t,e),c=e?"plugin.team_weeks.last.titleDefault":"plugin.team_weeks.last.title";return o.jsxs(o.Fragment,{children:[o.jsx(G,{title:c}),o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(_e,{value:s.totalTasks,icon:"./assets/cards/tasks_month.svg",title:"plugin.team_weeks.last.tasks.title",description:"plugin.team_weeks.last.tasks.description",scoring:n?{title:"plugin.team_weeks.last.tasks.scoring",value:n.totalTasks,total:u.totalTasks}:void 0}),o.jsx(_e,{value:s.totalChanges,icon:"./assets/cards/lines.svg",title:"plugin.team_weeks.last.changes.title",description:"plugin.team_weeks.last.changes.description",scoring:n?{title:"plugin.team_weeks.last.changes.scoring",value:n.totalChanges,total:u.totalChanges}:void 0})]}),o.jsxs(Q,{children:[o.jsx(Y,{value:s.totalAuthors>1,children:o.jsx(ke,{value:(p=r.totalTasks)==null?void 0:p.maxData,icon:"./assets/cards/employees.svg",title:"plugin.team_weeks.last.best.title",description:"plugin.team_weeks.last.best.description",scoring:{title:"plugin.team_weeks.last.vsPrev",value:(_=r.totalTasks)==null?void 0:_.max,total:(f=n.authors[((h=r.totalTasks)==null?void 0:h.maxData)||""])==null?void 0:f.totalTasks}})}),o.jsx(Y,{value:s.totalAuthors>1,children:o.jsx(ke,{value:(v=r.totalTasks)==null?void 0:v.minData,icon:"./assets/cards/work_days2.svg",title:"plugin.team_weeks.last.quiet.title",description:"plugin.team_weeks.last.quiet.description",scoring:{title:"plugin.team_weeks.last.vsPrev",value:(k=r.totalTasks)==null?void 0:k.min,total:(N=n.authors[((x=r.totalTasks)==null?void 0:x.minData)||""])==null?void 0:N.totalTasks}})})]})]}),o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_weeks.last.days.title",details:{"plugin.team_weeks.hasCommits":s.totalDays,"plugin.team_weeks.hasNotCommits":s.totalDaysWithoutCommits},order:["plugin.team_weeks.hasCommits","plugin.team_weeks.hasNotCommits"],limit:1,suffix:"common.statistic.days"})}),o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.team_weeks.last.types.title",value:s.commits,details:s.types,order:A.statisticsByCommits.type.list,limit:1,suffix:"common.statistic.commits"})})]})]})});function O2({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const[r,u,c]=Mt(t,["totalTasks","totalAuthors","totalChanges"]);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,isSortable:"weekIndex",template:C.STRING,title:"common.statistic.Date",properties:"week",formatter:lv,width:260}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"totalTasks"}),o.jsx(w,{isSortable:"totalTasks",title:"plugin.team_weeks.numberTasks",template:p=>o.jsx(ue,{options:r,value:p.totalTasks,details:p.types,order:A.statisticsByCommits.type.list,suffix:"common.statistic.tasks"}),minWidth:200}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"totalAuthors"}),o.jsx(w,{isSortable:"totalAuthors",title:"plugin.team_weeks.people",template:p=>o.jsx(ue,{value:p.totalAuthors,details:p.tasksByAuthor,order:A.statisticsByCommits.author.list,max:u,suffix:"common.statistic.tasks"}),minWidth:200}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"totalChanges"}),o.jsx(w,{isSortable:"totalChanges",title:"plugin.team_weeks.line",template:p=>o.jsx(ue,{value:p.totalChanges,details:{"plugin.team_weeks.add":p==null?void 0:p.added,"plugin.team_weeks.change":p==null?void 0:p.changes,"plugin.team_weeks.remove":p==null?void 0:p.removed},order:["plugin.team_weeks.add","plugin.team_weeks.change","plugin.team_weeks.remove"],max:c,suffix:"lines"}),minWidth:200}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"totalDays"}),o.jsx(w,{isSortable:"totalDays",title:"common.statistic.days",template:p=>o.jsx(ue,{value:p.totalDays,details:{"plugin.team_weeks.hasCommits":p==null?void 0:p.totalDays,"plugin.team_weeks.hasNotCommits":p==null?void 0:p.totalDaysWithoutCommits},order:["plugin.team_weeks.hasCommits","plugin.team_weeks.hasNotCommits"],suffix:"common.statistic.days"}),minWidth:200}),o.jsx(w,{title:"plugin.team_weeks.lossesDetails",template:p=>o.jsx(ue,{details:p,order:A.statisticsByCommits.author.list,suffix:"common.statistic.days"}),formatter:p=>{const _=Object.entries(p==null?void 0:p.authors).map(([h,f])=>[h,f==null?void 0:f.totalDaysWithoutCommits]).filter(([h,f])=>f);return Object.fromEntries(_)},minWidth:200})]})}function $2(t){return{week:t[0].week,index:0}}const L2={team_weeks_filters_middle:"team_weeks_filters_middle"};function B2(t,e){var s;for(let n=0,r=t.length;n<r;n++)if(((s=t[n])==null?void 0:s.week)===e)return n;return 0}const P2=U(({rows:t,filters:e,onChange:s})=>{const n=r=>{const u=t[r];u&&s&&s({...e||{},week:u.week,index:r,hash:Math.random()})};return o.jsx("div",{className:Xt.layout_search,children:o.jsx("div",{className:Xt.layout_search_selects,children:o.jsxs("div",{className:Xt.layout_search_select,children:[o.jsx(Je,{mode:"second",disabled:(e==null?void 0:e.index)===t.length-1,onClick:()=>{n((e==null?void 0:e.index)+1)},children:"«"}),o.jsx(t2,{className:L2.team_weeks_filters_middle,value:(e==null?void 0:e.week)||void 0,onChange:r=>{n(B2(t,r))}}),o.jsx(Je,{mode:"second",disabled:(e==null?void 0:e.index)===0,onClick:()=>{n((e==null?void 0:e.index)-1)},children:"»"})]})})})}),W2=U(({mode:t})=>{const e=A.statisticsByCommits.week.totalInfo;if(!(e!=null&&e.length))return t!=="print"?o.jsx(Le,{}):null;const s=T.useMemo(()=>$2(e),[]),[n,r]=T.useState(s),u=R2();return o.jsxs(o.Fragment,{children:[o.jsx(G,{title:"common.filters"}),o.jsx(P2,{rows:e,filters:n,onChange:r}),o.jsx(q2,{weeks:e,index:n.index}),t!=="fullscreen"&&o.jsx(Hn,{mode:t,recommendations:u}),o.jsx(G,{title:"plugin.team_weeks.title"}),o.jsxs(be,{content:e,mode:t,watch:`${t}${A.hash}`,children:[o.jsx(O2,{mode:t,rowsForExcel:e}),t!=="print"&&o.jsx(fe,{})]})]})});let F2=(El=class{constructor(){this.dependencies=["week","recommendations","type","author"]}getMenuItems(){return[{id:"week",group:20,order:100,link:"/team/week",title:"plugin.team_weeks.sidebar",icon:"./assets/menu/week.svg"}]}getPage(e,s){return e==="/team/week"?o.jsx(W2,{mode:s==null?void 0:s.mode}):void 0}getTranslations(){return S2}},El.id="team_weeks",El);class U2{constructor(){Pe(this,Il);this.data=new Map,this.totalInfo=[],this.clear()}clear(){this.data.clear(),this.totalInfo=[]}addData(e){const s=e.license||"unknown",n=this.data.get(s);n?V(this,Il,Hj).call(this,n,e):V(this,Il,Vj).call(this,s,e)}updateTotalInfo(){this.totalInfo=Array.from(this.data.values()).sort((e,s)=>s.total-e.total),this.data=new Map}}Il=new WeakSet,Hj=function(e,s){e.packages.push(s.name),e.total+=1},Vj=function(e,s){this.data.set(e,{title:e,packages:[s.name],total:1})};class G2{constructor(){Pe(this,Es);this.data=new Map,this.totalInfo=[],this.totalInfoByName=new Map,this.clear()}clear(){this.data=new Map,this.totalInfoByName.clear(),this.totalInfo=[]}addData(e){const s=e.name||"",n=this.data.get(s);n?V(this,Es,Yj).call(this,n,e):V(this,Es,Qj).call(this,s,e)}updateTotalInfo(){const e=Array.from(this.data.values()),s=new Set(this.data.keys());e.forEach(r=>{r.childrenIds.forEach(u=>{s.delete(u);const c=this.data.get(u);c&&(c.materializedPaths=[],c.parentIds.add(r.id),c.parentIdsTotal=c.parentIds.size)})}),e.forEach(r=>{r.parentIds=Array.from(r.parentIds)}),this.totalInfo=e;const n=Array.from(s).map(r=>this.data.get(r));V(this,Es,Kj).call(this,n);for(let r=0;r<10;r++)e.forEach(u=>{var c;(c=u==null?void 0:u.childrenIds)==null||c.forEach(p=>{const _=this.data.get(p);_&&(_==null?void 0:_.level)<=(u==null?void 0:u.level)&&(_.level=u.level+1)})});V(this,Es,Zj).call(this),this.totalInfoByName=this.data,this.data=new Map}}Es=new WeakSet,Yj=function(e,s){e.versions.add(s.version)},Qj=function(e,s){const n=Object.keys(s.dependencies||{});this.data.set(e,{id:e,title:s.name,level:0,versions:new Set([s.version]),parentIds:new Set,materializedPaths:[[e]],childrenIds:n,parentIdsTotal:0,childrenIdsTotal:n.length,notUse:!0})},Kj=function(e){var n;const s=new Set;for(;e.length;){const r=e.shift();(n=r==null?void 0:r.childrenIds)==null||n.forEach(u=>{const c=this.data.get(u);if(!c||(r.materializedPaths.forEach(_=>{c.materializedPaths.push([..._,c.id])}),s.has(u)))return;s.add(u);const p=r.level+1;p>c.level&&(c.level=p),e.push(c)})}},Zj=function(){this.totalInfo.sort((e,s)=>{const n=e.level-s.level;if(n)return n;const r=s.childrenIdsTotal-e.childrenIdsTotal;return r||s.parentIdsTotal-e.parentIdsTotal})};class H2{constructor(){this.licenses=new U2,this.packages=new G2}clear(){this.licenses.clear()}update(e){(e||[]).forEach(s=>{s.name&&this.addData(s)})}addData(e){this.licenses.addData(e),this.packages.addData(e)}updateTotalInfo(){this.licenses.updateTotalInfo(),this.packages.updateTotalInfo()}}const na=new H2,V2={ar:`
|
||
§ plugin.team_weeks.sidebar: حسب الأسابيع
|
||
§ plugin.team_weeks.title: الإحصاءات الأسبوعية
|
||
§ plugin.team_weeks.numberTasks: عدد المهام
|
||
§ plugin.team_weeks.people: عدد الأشخاص
|
||
§ plugin.team_weeks.line: تغييرات الأسطر
|
||
§ plugin.team_weeks.lossesDetails: من لم يُجرِ commit
|
||
§ plugin.team_weeks.add: أُضيف
|
||
§ plugin.team_weeks.change: غُيّر
|
||
§ plugin.team_weeks.remove: أُزيل
|
||
§ plugin.team_weeks.hasCommits: وُجدت commits
|
||
§ plugin.team_weeks.hasNotCommits: لم توجد commits
|
||
`,de:`
|
||
§ plugin.team_weeks.sidebar: Nach Wochen
|
||
§ plugin.team_weeks.title: Wöchentliche Statistik
|
||
§ plugin.team_weeks.numberTasks: Anzahl der Aufgaben
|
||
§ plugin.team_weeks.people: Anzahl der Personen
|
||
§ plugin.team_weeks.line: Zeilenänderungen
|
||
§ plugin.team_weeks.lossesDetails: Wer keinen commit gemacht hat
|
||
§ plugin.team_weeks.add: hinzugefügt
|
||
§ plugin.team_weeks.change: geändert
|
||
§ plugin.team_weeks.remove: entfernt
|
||
§ plugin.team_weeks.hasCommits: hatte commits
|
||
§ plugin.team_weeks.hasNotCommits: hatte keine commits
|
||
`,en:`
|
||
§ plugin.team_weeks.sidebar: By weeks
|
||
§ plugin.team_weeks.title: Weekly statistics
|
||
§ plugin.team_weeks.numberTasks: Number of tasks
|
||
§ plugin.team_weeks.people: Number of people
|
||
§ plugin.team_weeks.line: Line changes
|
||
§ plugin.team_weeks.lossesDetails: Who did not commit
|
||
§ plugin.team_weeks.add: added
|
||
§ plugin.team_weeks.change: changed
|
||
§ plugin.team_weeks.remove: removed
|
||
§ plugin.team_weeks.hasCommits: had commits
|
||
§ plugin.team_weeks.hasNotCommits: had no commits
|
||
`,es:`
|
||
§ plugin.team_weeks.sidebar: Por semanas
|
||
§ plugin.team_weeks.title: Estadísticas semanales
|
||
§ plugin.team_weeks.numberTasks: Número de tareas
|
||
§ plugin.team_weeks.people: Número de personas
|
||
§ plugin.team_weeks.line: Cambios de líneas
|
||
§ plugin.team_weeks.lossesDetails: Quién no hizo commit
|
||
§ plugin.team_weeks.add: añadido
|
||
§ plugin.team_weeks.change: modificado
|
||
§ plugin.team_weeks.remove: eliminado
|
||
§ plugin.team_weeks.hasCommits: hubo commits
|
||
§ plugin.team_weeks.hasNotCommits: no hubo commits
|
||
`,fr:`
|
||
§ plugin.team_weeks.sidebar: Par semaines
|
||
§ plugin.team_weeks.title: Statistiques hebdomadaires
|
||
§ plugin.team_weeks.numberTasks: Nombre de tâches
|
||
§ plugin.team_weeks.people: Nombre de personnes
|
||
§ plugin.team_weeks.line: Modifications de lignes
|
||
§ plugin.team_weeks.lossesDetails: Qui n’a pas fait de commit
|
||
§ plugin.team_weeks.add: ajouté
|
||
§ plugin.team_weeks.change: modifié
|
||
§ plugin.team_weeks.remove: supprimé
|
||
§ plugin.team_weeks.hasCommits: avait des commits
|
||
§ plugin.team_weeks.hasNotCommits: n’avait pas de commits
|
||
`,he:`
|
||
§ plugin.team_weeks.sidebar: לפי שבועות
|
||
§ plugin.team_weeks.title: סטטיסטיקה שבועית
|
||
§ plugin.team_weeks.numberTasks: מספר משימות
|
||
§ plugin.team_weeks.people: מספר אנשים
|
||
§ plugin.team_weeks.line: שינויי שורות
|
||
§ plugin.team_weeks.lossesDetails: מי לא ביצע commit
|
||
§ plugin.team_weeks.add: נוסף
|
||
§ plugin.team_weeks.change: שונה
|
||
§ plugin.team_weeks.remove: הוסר
|
||
§ plugin.team_weeks.hasCommits: היו commits
|
||
§ plugin.team_weeks.hasNotCommits: לא היו commits
|
||
`,hi:`
|
||
§ plugin.team_weeks.sidebar: सप्ताहों के अनुसार
|
||
§ plugin.team_weeks.title: साप्ताहिक सांख्यिकी
|
||
§ plugin.team_weeks.numberTasks: कार्यों की संख्या
|
||
§ plugin.team_weeks.people: लोगों की संख्या
|
||
§ plugin.team_weeks.line: पंक्ति परिवर्तन
|
||
§ plugin.team_weeks.lossesDetails: किसने commit नहीं किया
|
||
§ plugin.team_weeks.add: जोड़ा गया
|
||
§ plugin.team_weeks.change: बदला गया
|
||
§ plugin.team_weeks.remove: हटाया गया
|
||
§ plugin.team_weeks.hasCommits: commits थे
|
||
§ plugin.team_weeks.hasNotCommits: commits नहीं थे
|
||
`,ja:`
|
||
§ plugin.team_weeks.sidebar: 週別
|
||
§ plugin.team_weeks.title: 週次統計
|
||
§ plugin.team_weeks.numberTasks: タスク数
|
||
§ plugin.team_weeks.people: 人数
|
||
§ plugin.team_weeks.line: 行の変更
|
||
§ plugin.team_weeks.lossesDetails: commit しなかった人
|
||
§ plugin.team_weeks.add: 追加
|
||
§ plugin.team_weeks.change: 変更
|
||
§ plugin.team_weeks.remove: 削除
|
||
§ plugin.team_weeks.hasCommits: commit あり
|
||
§ plugin.team_weeks.hasNotCommits: commit なし
|
||
`,ko:`
|
||
§ plugin.team_weeks.sidebar: 주별
|
||
§ plugin.team_weeks.title: 주간 통계
|
||
§ plugin.team_weeks.numberTasks: 작업 수
|
||
§ plugin.team_weeks.people: 인원 수
|
||
§ plugin.team_weeks.line: 줄 변경
|
||
§ plugin.team_weeks.lossesDetails: commit하지 않은 사람
|
||
§ plugin.team_weeks.add: 추가됨
|
||
§ plugin.team_weeks.change: 변경됨
|
||
§ plugin.team_weeks.remove: 제거됨
|
||
§ plugin.team_weeks.hasCommits: commits가 있었음
|
||
§ plugin.team_weeks.hasNotCommits: commits가 없었음
|
||
`,pt:`
|
||
§ plugin.team_weeks.sidebar: Por semanas
|
||
§ plugin.team_weeks.title: Estatísticas semanais
|
||
§ plugin.team_weeks.numberTasks: Número de tarefas
|
||
§ plugin.team_weeks.people: Número de pessoas
|
||
§ plugin.team_weeks.line: Alterações de linhas
|
||
§ plugin.team_weeks.lossesDetails: Quem não fez commit
|
||
§ plugin.team_weeks.add: adicionado
|
||
§ plugin.team_weeks.change: alterado
|
||
§ plugin.team_weeks.remove: removido
|
||
§ plugin.team_weeks.hasCommits: houve commits
|
||
§ plugin.team_weeks.hasNotCommits: não houve commits
|
||
`,ru:`
|
||
§ plugin.team_weeks.sidebar: По неделям
|
||
§ plugin.team_weeks.title: Статистика по неделям
|
||
§ plugin.team_weeks.numberTasks: Количество задач
|
||
§ plugin.team_weeks.people: Количество человек
|
||
§ plugin.team_weeks.line: Изменение строк
|
||
§ plugin.team_weeks.lossesDetails: Кто не коммитил
|
||
§ plugin.team_weeks.add: добавили
|
||
§ plugin.team_weeks.change: изменили
|
||
§ plugin.team_weeks.remove: удалили
|
||
§ plugin.team_weeks.hasCommits: были коммиты
|
||
§ plugin.team_weeks.hasNotCommits: небыло коммитов
|
||
`,zh:`
|
||
§ plugin.team_weeks.sidebar: 按周
|
||
§ plugin.team_weeks.title: 每周统计
|
||
§ plugin.team_weeks.numberTasks: 任务数量
|
||
§ plugin.team_weeks.people: 人数
|
||
§ plugin.team_weeks.line: 行变更
|
||
§ plugin.team_weeks.lossesDetails: 谁没有进行 commit
|
||
§ plugin.team_weeks.add: 已添加
|
||
§ plugin.team_weeks.change: 已更改
|
||
§ plugin.team_weeks.remove: 已移除
|
||
§ plugin.team_weeks.hasCommits: 有 commits
|
||
§ plugin.team_weeks.hasNotCommits: 没有 commits
|
||
`};function Y2({response:t,updateSort:e,rowsForExcel:s,mode:n}){return t?o.jsx(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_licenses.results.title",properties:"title"})}):null}function Q2({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const r=s==null?void 0:s.reduce((u,c)=>u+(c==null?void 0:c.total),0);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isFixed:!0,template:C.DETAILS,width:40,formatter:u=>{const c=u.packages.map((p,_)=>({title:p,id:_+1}));return o.jsxs(be,{content:c,mode:n,watch:`${n}${A.hash}`,children:[o.jsx(Y2,{mode:n,rowsForExcel:c}),n!=="print"&&o.jsx(fe,{})]})}}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_licenses.results.title",properties:"title"}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"total"}),o.jsx(w,{title:"plugin.team_licenses.results.total",properties:"total",template:u=>o.jsx(ue,{max:r,value:u})})]})}const K2=U(({mode:t})=>{const e=na.licenses.totalInfo;return e!=null&&e.length?o.jsxs(o.Fragment,{children:[t==="print"?o.jsx(G,{title:"plugin.team_weeks.title"}):o.jsx(nt,{height:48}),o.jsxs(be,{content:e,mode:t,watch:`${t}${A.hash}`,children:[o.jsx(Q2,{mode:t,rowsForExcel:e}),t!=="print"&&o.jsx(fe,{})]})]}):t!=="print"?o.jsx(Le,{}):null});let Z2=(ql=class{constructor(){this.dependencies=[]}getMenuItems(e){return e!=null&&e.packages?[{id:"licenses",group:70,order:200,link:"/team/licenses",title:"plugin.team_licenses.sidebar",icon:"./assets/menu/licenses.svg"}]:[]}getPage(e,s){if(e==="/team/licenses")return na.clear(),na.update(Ct.data.packages),na.updateTotalInfo(),console.log(na),o.jsx(K2,{mode:s==null?void 0:s.mode})}getTranslations(){return V2}},ql.id="team_licenses",ql);const X2={ar:`
|
||
§ plugin.team_weeks.sidebar: By weeks
|
||
§ plugin.team_weeks.title: Weekly statistics
|
||
§ plugin.team_weeks.numberTasks: Number of tasks
|
||
§ plugin.team_weeks.people: Number of people
|
||
§ plugin.team_weeks.line: Line changes
|
||
§ plugin.team_weeks.lossesDetails: Who did not commit
|
||
§ plugin.team_weeks.add: added
|
||
§ plugin.team_weeks.change: changed
|
||
§ plugin.team_weeks.remove: removed
|
||
§ plugin.team_weeks.hasCommits: had commits
|
||
§ plugin.team_weeks.hasNotCommits: had no commits
|
||
`,de:`
|
||
§ plugin.team_weeks.sidebar: By weeks
|
||
§ plugin.team_weeks.title: Weekly statistics
|
||
§ plugin.team_weeks.numberTasks: Number of tasks
|
||
§ plugin.team_weeks.people: Number of people
|
||
§ plugin.team_weeks.line: Line changes
|
||
§ plugin.team_weeks.lossesDetails: Who did not commit
|
||
§ plugin.team_weeks.add: added
|
||
§ plugin.team_weeks.change: changed
|
||
§ plugin.team_weeks.remove: removed
|
||
§ plugin.team_weeks.hasCommits: had commits
|
||
§ plugin.team_weeks.hasNotCommits: had no commits
|
||
`,en:`
|
||
§ plugin.team_weeks.sidebar: By weeks
|
||
§ plugin.team_weeks.title: Weekly statistics
|
||
§ plugin.team_weeks.numberTasks: Number of tasks
|
||
§ plugin.team_weeks.people: Number of people
|
||
§ plugin.team_weeks.line: Line changes
|
||
§ plugin.team_weeks.lossesDetails: Who did not commit
|
||
§ plugin.team_weeks.add: added
|
||
§ plugin.team_weeks.change: changed
|
||
§ plugin.team_weeks.remove: removed
|
||
§ plugin.team_weeks.hasCommits: had commits
|
||
§ plugin.team_weeks.hasNotCommits: had no commits
|
||
`,es:`
|
||
§ plugin.team_weeks.sidebar: By weeks
|
||
§ plugin.team_weeks.title: Weekly statistics
|
||
§ plugin.team_weeks.numberTasks: Number of tasks
|
||
§ plugin.team_weeks.people: Number of people
|
||
§ plugin.team_weeks.line: Line changes
|
||
§ plugin.team_weeks.lossesDetails: Who did not commit
|
||
§ plugin.team_weeks.add: added
|
||
§ plugin.team_weeks.change: changed
|
||
§ plugin.team_weeks.remove: removed
|
||
§ plugin.team_weeks.hasCommits: had commits
|
||
§ plugin.team_weeks.hasNotCommits: had no commits
|
||
`,fr:`
|
||
§ plugin.team_weeks.sidebar: Par semaines
|
||
§ plugin.team_weeks.title: Statistiques hebdomadaires
|
||
§ plugin.team_weeks.numberTasks: Nombre de tâches
|
||
§ plugin.team_weeks.people: Nombre de personnes
|
||
§ plugin.team_weeks.line: Changements de lignes
|
||
§ plugin.team_weeks.lossesDetails: Qui n'a pas fait de commit
|
||
§ plugin.team_weeks.add: ajouté
|
||
§ plugin.team_weeks.change: modifié
|
||
§ plugin.team_weeks.remove: supprimé
|
||
§ plugin.team_weeks.hasCommits: a eu des commits
|
||
§ plugin.team_weeks.hasNotCommits: n'a pas eu de commits
|
||
`,he:`
|
||
§ plugin.team_weeks.sidebar: לפי שבועות
|
||
§ plugin.team_weeks.title: סטטיסטיקות שבועיות
|
||
§ plugin.team_weeks.numberTasks: מספר משימות
|
||
§ plugin.team_weeks.people: מספר אנשים
|
||
§ plugin.team_weeks.line: שינוי שורות
|
||
§ plugin.team_weeks.lossesDetails: מי שלא ביצע commit
|
||
§ plugin.team_weeks.add: נוסף
|
||
§ plugin.team_weeks.change: שונה
|
||
§ plugin.team_weeks.remove: הוסר
|
||
§ plugin.team_weeks.hasCommits: היו commits
|
||
§ plugin.team_weeks.hasNotCommits: לא היו commits
|
||
`,hi:`
|
||
§ plugin.team_weeks.sidebar: By weeks
|
||
§ plugin.team_weeks.title: Weekly statistics
|
||
§ plugin.team_weeks.numberTasks: Number of tasks
|
||
§ plugin.team_weeks.people: Number of people
|
||
§ plugin.team_weeks.line: Line changes
|
||
§ plugin.team_weeks.lossesDetails: Who did not commit
|
||
§ plugin.team_weeks.add: added
|
||
§ plugin.team_weeks.change: changed
|
||
§ plugin.team_weeks.remove: removed
|
||
§ plugin.team_weeks.hasCommits: had commits
|
||
§ plugin.team_weeks.hasNotCommits: had no commits
|
||
`,ja:`
|
||
§ plugin.team_weeks.sidebar: By weeks
|
||
§ plugin.team_weeks.title: Weekly statistics
|
||
§ plugin.team_weeks.numberTasks: Number of tasks
|
||
§ plugin.team_weeks.people: Number of people
|
||
§ plugin.team_weeks.line: Line changes
|
||
§ plugin.team_weeks.lossesDetails: Who did not commit
|
||
§ plugin.team_weeks.add: added
|
||
§ plugin.team_weeks.change: changed
|
||
§ plugin.team_weeks.remove: removed
|
||
§ plugin.team_weeks.hasCommits: had commits
|
||
§ plugin.team_weeks.hasNotCommits: had no commits
|
||
`,ko:`
|
||
§ plugin.team_weeks.sidebar: By weeks
|
||
§ plugin.team_weeks.title: Weekly statistics
|
||
§ plugin.team_weeks.numberTasks: Number of tasks
|
||
§ plugin.team_weeks.people: Number of people
|
||
§ plugin.team_weeks.line: Line changes
|
||
§ plugin.team_weeks.lossesDetails: Who did not commit
|
||
§ plugin.team_weeks.add: added
|
||
§ plugin.team_weeks.change: changed
|
||
§ plugin.team_weeks.remove: removed
|
||
§ plugin.team_weeks.hasCommits: had commits
|
||
§ plugin.team_weeks.hasNotCommits: had no commits
|
||
`,pt:`
|
||
§ plugin.team_weeks.sidebar: By weeks
|
||
§ plugin.team_weeks.title: Weekly statistics
|
||
§ plugin.team_weeks.numberTasks: Number of tasks
|
||
§ plugin.team_weeks.people: Number of people
|
||
§ plugin.team_weeks.line: Line changes
|
||
§ plugin.team_weeks.lossesDetails: Who did not commit
|
||
§ plugin.team_weeks.add: added
|
||
§ plugin.team_weeks.change: changed
|
||
§ plugin.team_weeks.remove: removed
|
||
§ plugin.team_weeks.hasCommits: had commits
|
||
§ plugin.team_weeks.hasNotCommits: had no commits
|
||
`,ru:`
|
||
§ plugin.team_weeks.sidebar: По неделям
|
||
§ plugin.team_weeks.title: Статистика по неделям
|
||
§ plugin.team_weeks.numberTasks: Количество задач
|
||
§ plugin.team_weeks.people: Количество человек
|
||
§ plugin.team_weeks.line: Изменение строк
|
||
§ plugin.team_weeks.lossesDetails: Кто не коммитил
|
||
§ plugin.team_weeks.add: добавили
|
||
§ plugin.team_weeks.change: изменили
|
||
§ plugin.team_weeks.remove: удалили
|
||
§ plugin.team_weeks.hasCommits: были коммиты
|
||
§ plugin.team_weeks.hasNotCommits: небыло коммитов
|
||
`,zh:`
|
||
§ plugin.team_weeks.sidebar: By weeks
|
||
§ plugin.team_weeks.title: Weekly statistics
|
||
§ plugin.team_weeks.numberTasks: Number of tasks
|
||
§ plugin.team_weeks.people: Number of people
|
||
§ plugin.team_weeks.line: Line changes
|
||
§ plugin.team_weeks.lossesDetails: Who did not commit
|
||
§ plugin.team_weeks.add: added
|
||
§ plugin.team_weeks.change: changed
|
||
§ plugin.team_weeks.remove: removed
|
||
§ plugin.team_weeks.hasCommits: had commits
|
||
§ plugin.team_weeks.hasNotCommits: had no commits
|
||
`},Ss={component_dependencies_chart:"component_dependencies_chart",component_dependencies_chart_arrows:"component_dependencies_chart_arrows",component_dependencies_chart_level:"component_dependencies_chart_level",component_dependencies_chart_library:"component_dependencies_chart_library",component_dependencies_chart_library_parent:"component_dependencies_chart_library_parent",component_dependencies_chart_library_children:"component_dependencies_chart_library_children",component_dependencies_chart_library_selected:"component_dependencies_chart_library_selected",component_dependencies_chart_library_size_m:"component_dependencies_chart_library_size_m",component_dependencies_chart_library_size_l:"component_dependencies_chart_library_size_l",component_dependencies_chart_library_title:"component_dependencies_chart_library_title"};function J2({item:t,isParent:e,isChildren:s,selected:n,onClick:r}){var _;if(!t)return null;const u=[Ss.component_dependencies_chart_library];n?u.push(Ss.component_dependencies_chart_library_selected):e?u.push(Ss.component_dependencies_chart_library_parent):s&&u.push(Ss.component_dependencies_chart_library_children);const c=u.length>1,p=(_=t==null?void 0:t.materializedPaths)==null?void 0:_.length;return p>14?u.push(Ss.component_dependencies_chart_library_size_l):p>5&&u.push(Ss.component_dependencies_chart_library_size_m),o.jsx("div",{id:`dependencies_chart_${t.id}`,className:u.join(" "),onClick:()=>{r(t)},children:c?o.jsx("div",{title:t.id,className:Ss.component_dependencies_chart_library_title,children:t.id}):null})}function eB({group:t,selectedConfig:e,onClick:s}){if(!t.length)return null;const n=t.map(r=>{var u,c;return o.jsx(J2,{item:r,isParent:(u=e==null?void 0:e.parentIds)==null?void 0:u.has(r.id),isChildren:(c=e==null?void 0:e.childrenIds)==null?void 0:c.has(r.id),selected:r.id===(e==null?void 0:e.selectedId),onClick:s},r.id)});return o.jsx("div",{className:Ss.component_dependencies_chart_level,children:n})}function tB({fromId:t,toId:e,padding:s,isParent:n}){if(!t||!e)return null;const r=T.useMemo(()=>{const c=document.getElementById(`dependencies_chart_${t}`);return(c==null?void 0:c.getBoundingClientRect())||{}},[t]),u=T.useMemo(()=>{const c=document.getElementById(`dependencies_chart_${e}`);return(c==null?void 0:c.getBoundingClientRect())||{}},[e]);return o.jsx("line",{x1:r.left-s.left,y1:r.top-s.top,x2:u.left-s.left,y2:u.top-s.top,stroke:n?"#22C220":"#ED675F",strokeWidth:"1"})}function aB({selectedConfig:t}){var u,c,p,_;if(!((u=t==null?void 0:t.parentArrows)!=null&&u.length)&&!((c=t==null?void 0:t.childrenArrows)!=null&&c.length))return null;const e={top:138,left:258},s=h=>f=>o.jsx(tB,{fromId:f.from,toId:f.to,padding:e,isParent:h},`${f.from}${f.to}`),n=(p=t==null?void 0:t.parentArrows)==null?void 0:p.map(s(!0)),r=(_=t==null?void 0:t.childrenArrows)==null?void 0:_.map(s(!1));return o.jsxs("svg",{width:"100%",height:"100%",xmlns:"http://www.w3.org/2000/svg",className:Ss.component_dependencies_chart_arrows,children:[n,r]})}function sB(t){return t.reduce((e,s)=>(e[s.level]||(e[s.level]=[]),e[s.level].push(s),e),[])}function Mb(t,e){const s=na.packages.totalInfoByName,n=new Set,r=[],u=[t];for(;u.length;){const c=u.shift(),p=s.get(c);((p==null?void 0:p[e])||[]).forEach(h=>{n.has(h)||(n.add(h),u.push(h),r.push({from:c,to:h}))})}return[r,Array.from(n)]}function iB({packages:t}){if(!t)return null;const[e,s]=T.useState(""),n=na.packages.totalInfoByName,r=T.useMemo(()=>{const p=n.get(e),[_,h]=Mb(e,"parentIds"),[f,v]=Mb(e,"childrenIds");return{selectedId:p==null?void 0:p.id,parentIds:new Set(h),childrenIds:new Set(v),parentArrows:_,childrenArrows:f}},[e]),u=sB(t),c=u.map((p,_)=>o.jsx(eB,{group:p,selectedConfig:r,onClick:h=>{h.id===e?s(""):s(h.id)}},_));return console.log(u),o.jsxs("div",{className:Ss.component_dependencies_chart,children:[c,o.jsx(aB,{selectedConfig:r})]})}function nB({response:t,updateSort:e,rowsForExcel:s,mode:n}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_dependencies.results.title",properties:"title"}),o.jsx(w,{isSortable:!0,template:C.SHORT_NUMBER,title:"plugin.team_dependencies.results.level",properties:"level"}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.team_dependencies.results.path",formatter:r=>{var u,c;return(c=(u=r.materializedPaths)==null?void 0:u[0])==null?void 0:c.join("/")}})]}):null}const oB=U(({mode:t})=>{var s;const e=((s=na==null?void 0:na.packages)==null?void 0:s.totalInfo)||[];return e!=null&&e.length?o.jsxs(o.Fragment,{children:[t==="print"?o.jsx(G,{title:"plugin.team_weeks.title"}):o.jsx(nt,{height:48}),o.jsx(iB,{packages:e}),o.jsxs(be,{content:e,mode:t,watch:`${t}${A.hash}`,children:[o.jsx(nB,{mode:t,rowsForExcel:e}),t!=="print"&&o.jsx(fe,{})]})]}):t!=="print"?o.jsx(Le,{}):null});let lB=(Ol=class{constructor(){this.dependencies=[]}getMenuItems(e){return e!=null&&e.packages?[{id:"dependencies",group:70,order:200,link:"/team/dependencies",title:"plugin.team_dependencies.sidebar",icon:"./assets/menu/dependencies.svg"}]:[]}getPage(e,s){if(e==="/team/dependencies")return na.clear(),na.update(Ct.data.packages),na.updateTotalInfo(),console.log(na),o.jsx(oB,{mode:s==null?void 0:s.mode})}getTranslations(){return X2}},Ol.id="team_dependencies",Ol);const rB={ar:`
|
||
§ plugin.person_achievements.sidebar: الإنجازات
|
||
§ plugin.person_achievements.page.positive: إيجابية
|
||
§ plugin.person_achievements.page.normal: محايدة
|
||
§ plugin.person_achievements.page.negative: سلبية
|
||
§ plugin.person_achievements.page.publicity: خاصة
|
||
§ plugin.person_achievements.page.commitsWithBeautifulTaskNumbers: أرقام المهام الجميلة
|
||
§ plugin.person_achievements.page.description: كلما زاد عدد الإنجازات السلبية لدى الموظف، زادت احتمالية أن يكون الوضع غير معتاد. قد يكون من المناسب تغيير نظام عمله أو مهامه أو تقاريره. ينبغي التحدث معه ومعرفة المشكلات التي تعيق عمله.
|
||
§ plugin.person_achievements.gets.title: ميداليات لأرقام المهام:
|
||
§ plugin.person_achievements.gets.description: تُمنح الميدالية إذا كان المستخدم أول من يترك commit لمهمة ذات رقم «جميل».
|
||
§ plugin.person_achievements.commitsAfter1500.title: بومة الليل
|
||
§ plugin.person_achievements.commitsAfter1500.description: 70% من الـ commits بعد 15:00
|
||
§ plugin.person_achievements.commitsBefore1500.title: الطائر المبكر
|
||
§ plugin.person_achievements.commitsBefore1500.description: 70% من الـ commits قبل الغداء
|
||
§ plugin.person_achievements.workEveryTime.title: عبد الله
|
||
§ plugin.person_achievements.workEveryTime.description: يوجد commit في كل ساعة من ساعات اليوم
|
||
§ plugin.person_achievements.workNotWork.title: طلقات فارغة
|
||
§ plugin.person_achievements.workNotWork.description: توجد commits، لكن لا توجد مهام مغلقة
|
||
§ plugin.person_achievements.userNotWork.title: عابر سبيل
|
||
§ plugin.person_achievements.userNotWork.description: هذا ليس مشروعه الرئيسي
|
||
§ plugin.person_achievements.userIsDied.title: روح ميتة
|
||
§ plugin.person_achievements.userIsDied.description: عمل، لكنه غادر الشركة
|
||
§ plugin.person_achievements.lessTasks.title: دخل وخرج
|
||
§ plugin.person_achievements.lessTasks.description: أقل عدد من المهام المغلقة
|
||
§ plugin.person_achievements.moreTasks.title: أحسنت، يقول الأب
|
||
§ plugin.person_achievements.moreTasks.description: أكبر عدد من المهام المغلقة
|
||
§ plugin.person_achievements.everyMessageLong.title: سيد الفصاحة
|
||
§ plugin.person_achievements.everyMessageLong.description: باستمرار أطول commit messages
|
||
§ plugin.person_achievements.everyMessageShort.title: لسان طليق
|
||
§ plugin.person_achievements.everyMessageShort.description: باستمرار أقصر commit messages
|
||
§ plugin.person_achievements.shortestName.title: الحجم ليس كل شيء
|
||
§ plugin.person_achievements.shortestName.description: أقصر اسم
|
||
§ plugin.person_achievements.longestName.title: Azim Aziz Il Am Qadir Imran II
|
||
§ plugin.person_achievements.longestName.description: أطول اسم
|
||
§ plugin.person_achievements.moreCommits.title: سيد النسخ الاحتياطي
|
||
§ plugin.person_achievements.moreCommits.description: أكبر عدد من الـ commits
|
||
§ plugin.person_achievements.lessCommits.title: نادر لكنه دقيق
|
||
§ plugin.person_achievements.lessCommits.description: أقل عدد من الـ commits
|
||
§ plugin.person_achievements.oneCommitOneTask.title: في قلب الهدف
|
||
§ plugin.person_achievements.oneCommitOneTask.description: في المتوسط commit واحد لكل مهمة
|
||
§ plugin.person_achievements.moreLazyDays.title: معكم بالروح
|
||
§ plugin.person_achievements.moreLazyDays.description: أكبر عدد من الأيام بدون commits
|
||
§ plugin.person_achievements.lessLazyDays.title: Papa Carlo
|
||
§ plugin.person_achievements.lessLazyDays.description: أقل عدد من الأيام بدون commits
|
||
§ plugin.person_achievements.zeroLazyDays.title: لا فجوة واحدة
|
||
§ plugin.person_achievements.zeroLazyDays.description: ولا يوم واحد بدون commits
|
||
§ plugin.person_achievements.moreWorkDays.title: موظف ثمين
|
||
§ plugin.person_achievements.moreWorkDays.description: أكبر عدد من أيام العمل
|
||
§ plugin.person_achievements.moreScopes.title: رائد أعمال
|
||
§ plugin.person_achievements.moreScopes.description: أنشأ أكبر عدد من الميزات
|
||
§ plugin.person_achievements.lessScopes.title: مبتدئ
|
||
§ plugin.person_achievements.lessScopes.description: أنشأ أقل عدد من الميزات
|
||
§ plugin.person_achievements.moreDaysForTask.title: حلزون على المنحدر
|
||
§ plugin.person_achievements.moreDaysForTask.description: العمل على المهام أبطأ مما لدى الآخرين
|
||
§ plugin.person_achievements.more2DaysForTask.title: So slow
|
||
§ plugin.person_achievements.more2DaysForTask.description: أكثر من يومين لكل مهمة
|
||
§ plugin.person_achievements.more3YearsInProject.title: المخضرم
|
||
§ plugin.person_achievements.more3YearsInProject.description: أكثر من ثلاث سنوات في المشروع
|
||
§ plugin.person_achievements.lessDaysInProject.title: من هذا؟
|
||
§ plugin.person_achievements.lessDaysInProject.description: أقل عدد من الأيام في المشروع
|
||
§ plugin.person_achievements.lessDaysForTask.title: رصاصة سريعة
|
||
§ plugin.person_achievements.lessDaysForTask.description: مهمة واحدة تستغرق أقل من يوم
|
||
§ plugin.person_achievements.adam.title: آدم
|
||
§ plugin.person_achievements.adam.description: أول موظف مستقر في المشروع
|
||
§ plugin.person_achievements.more90DaysInProject.title: مرحباً
|
||
§ plugin.person_achievements.more90DaysInProject.description: لم يُفصل خلال فترة التجربة
|
||
§ plugin.person_achievements.more365DaysInProject.title: ابن السنة
|
||
§ plugin.person_achievements.more365DaysInProject.description: عمل سنة في المشروع
|
||
§ plugin.person_achievements.more666DaysInProject.title: الشيطان
|
||
§ plugin.person_achievements.more666DaysInProject.description: عمل 666 يوماً في المشروع
|
||
§ plugin.person_achievements.more777DaysInProject.title: السبعات المحظوظة
|
||
§ plugin.person_achievements.more777DaysInProject.description: عمل 777 يوماً في المشروع
|
||
§ plugin.person_achievements.moreDaysInProject.title: جزء من الطاقم، جزء من السفينة
|
||
§ plugin.person_achievements.moreDaysInProject.description: أكبر عدد من الأيام في المشروع
|
||
§ plugin.person_achievements.moreRefactoring.title: المحرر اللغوي
|
||
§ plugin.person_achievements.moreRefactoring.description: أضاف أكبر عدد من علامات «refactoring»
|
||
§ plugin.person_achievements.longestMessage.title: الكلام رخيص
|
||
§ plugin.person_achievements.longestMessage.description: أطول commit message على الإطلاق
|
||
§ plugin.person_achievements.moreTasksInDay.title: Speed Racer
|
||
§ plugin.person_achievements.moreTasksInDay.description: رقم قياسي لعدد المهام المغلقة في يوم واحد
|
||
§ plugin.person_achievements.hasCommitFrom0to7.title: الحرس الليلي
|
||
§ plugin.person_achievements.hasCommitFrom0to7.description: يوجد commit في كل ساعة من ساعات الليل
|
||
§ plugin.person_achievements.noCommitOnDay.title: استراحة تقنية
|
||
§ plugin.person_achievements.noCommitOnDay.description: توجد ساعة ويوم محددان في وقت العمل لا يُجرى فيهما أي commit أبداً
|
||
§ plugin.person_achievements.hasCommitEveryTime.title: مات في العمل
|
||
§ plugin.person_achievements.hasCommitEveryTime.description: يوجد commit في ساعة من كل يوم (بما في ذلك عطل نهاية الأسبوع)
|
||
§ plugin.person_achievements.commitsAfter1800.title: وقت العمل
|
||
§ plugin.person_achievements.commitsAfter1800.description: لا يوجد أي commit بعد 18:00
|
||
§ plugin.person_achievements.moreFix.title: Bug hunter
|
||
§ plugin.person_achievements.moreFix.description: أكبر عدد من الأخطاء المغلقة
|
||
§ plugin.person_achievements.lessWorkDays.title: تابعوا بدوني
|
||
§ plugin.person_achievements.lessWorkDays.description: أقل عدد من أيام العمل
|
||
§ plugin.person_achievements.moreCreateCode.title: الخالق
|
||
§ plugin.person_achievements.moreCreateCode.description: يميل إلى إضافة الشيفرة أكثر من الآخرين
|
||
§ plugin.person_achievements.moreRemoveCode.title: المدمر
|
||
§ plugin.person_achievements.moreRemoveCode.description: يميل إلى حذف الشيفرة أكثر من الآخرين
|
||
§ plugin.person_achievements.moreChangeCode.title: المصلح
|
||
§ plugin.person_achievements.moreChangeCode.description: يميل إلى تغيير الشيفرة أكثر من الآخرين
|
||
§ plugin.person_achievements.moreStyle.title: شرطة الموضة
|
||
§ plugin.person_achievements.moreStyle.description: يميل إلى تغيير CSS أكثر من الآخرين
|
||
§ plugin.person_achievements.moreOnHoliday.title: لا حياة
|
||
§ plugin.person_achievements.moreOnHoliday.description: عدد كبير نسبياً من الـ commits خارج ساعات العمل
|
||
§ plugin.person_achievements.morePRMerge.title: الجمارك تعطي الإذن
|
||
§ plugin.person_achievements.morePRMerge.description: يضغط زر «Merge» لطلبات PR أكثر من الآخرين
|
||
§ plugin.person_achievements.longWaitPR.title: غداً ندمجه حتماً
|
||
§ plugin.person_achievements.longWaitPR.description: أنشأ PR بقي قيد المراجعة أكثر من شهر
|
||
§ plugin.person_achievements.moreLongWaitPR.title: منذ زمن بعيد، في مجرة بعيدة
|
||
§ plugin.person_achievements.moreLongWaitPR.description: أنشأ PR بقي قيد المراجعة أطول مدة
|
||
§ plugin.person_achievements.oneExtension.title: جيش من شخص واحد
|
||
§ plugin.person_achievements.oneExtension.description: هو وحده من يعمل مع ملفات ذات امتداد معيّن
|
||
§ plugin.person_achievements.fileRush.title: Zerg Rush
|
||
§ plugin.person_achievements.fileRush.description: أنشأ ملفات في المشروع أكثر من أي شخص آخر
|
||
§ plugin.person_achievements.moreLintHint.title: Grammar Nazi
|
||
§ plugin.person_achievements.moreLintHint.description: أنشأ أو غيّر قواعد الفحص التلقائي أكثر من أي شخص آخر
|
||
§ plugin.person_achievements.moreReadMe.title: المؤرخ
|
||
§ plugin.person_achievements.moreReadMe.description: أنشأ أو غيّر ملفات MD أكثر من أي شخص آخر
|
||
§ plugin.person_achievements.moreDevOps.title: DevOps
|
||
§ plugin.person_achievements.moreDevOps.description: أنشأ أو غيّر ملفات CI/CD أكثر من أي شخص آخر
|
||
§ plugin.person_achievements.moreTests.title: المختبر
|
||
§ plugin.person_achievements.moreTests.description: أنشأ أو غيّر ملفات الاختبار أكثر من أي شخص آخر
|
||
§ plugin.person_achievements.allRelease.title: فل هاوس
|
||
§ plugin.person_achievements.allRelease.description: توجد إصدار مبني من مهامه فقط
|
||
§ plugin.person_achievements.firstCommit.title: من يأتي أولاً يُخدم أولاً
|
||
§ plugin.person_achievements.firstCommit.description: أول commit في المشروع
|
||
§ plugin.person_achievements.lastCommit.title: انتهيت
|
||
§ plugin.person_achievements.lastCommit.description: آخر commit في المشروع
|
||
§ plugin.person_achievements.firstLastCommit.title: من البداية إلى النهاية
|
||
§ plugin.person_achievements.firstLastCommit.description: أول وآخر commit في المشروع
|
||
§ plugin.person_achievements.longFilePath.title: أهراء الوطن
|
||
§ plugin.person_achievements.longFilePath.description: أول من أنشأ ملفاً بأعماق التداخل
|
||
§ plugin.person_achievements.longFileName.title: الحجم مهم
|
||
§ plugin.person_achievements.longFileName.description: أنشأ ملفاً بأطول اسم
|
||
§ plugin.person_achievements.workOnWeekends.title: العمل ليس نزهة
|
||
§ plugin.person_achievements.workOnWeekends.description: عمل في عطلة نهاية الأسبوع مرة واحدة على الأقل
|
||
§ plugin.person_achievements.removeCreateFile.title: نبش المضيفة
|
||
§ plugin.person_achievements.removeCreateFile.description: استعاد ملفاً محذوفاً
|
||
§ plugin.person_achievements.renameFile.title: Astana Nur-Sultan Astana
|
||
§ plugin.person_achievements.renameFile.description: أعاد تسمية ملف ذهاباً وإياباً
|
||
§ plugin.person_achievements.longTask.title: يبدو سهلاً
|
||
§ plugin.person_achievements.longTask.description: عمل على مهمة لأكثر من ثلاثة أشهر
|
||
§ plugin.person_achievements.haveNotEmail.title: ساعي البريد Pechkin
|
||
§ plugin.person_achievements.haveNotEmail.description: لم يملأ حقل e-mail في git config
|
||
§ plugin.person_achievements.moreAddedFolders.title: المدير
|
||
§ plugin.person_achievements.moreAddedFolders.description: أنشأ مجلدات أكثر من أي شخص آخر
|
||
§ plugin.person_achievements.horoscope1.title: عطارد الرجعي في الجدي
|
||
§ plugin.person_achievements.horoscope2.title: عطارد الرجعي في الدلو
|
||
§ plugin.person_achievements.horoscope3.title: عطارد الرجعي في الحوت
|
||
§ plugin.person_achievements.horoscope4.title: عطارد الرجعي في الحمل
|
||
§ plugin.person_achievements.horoscope5.title: عطارد الرجعي في الثور
|
||
§ plugin.person_achievements.horoscope6.title: عطارد الرجعي في الجوزاء
|
||
§ plugin.person_achievements.horoscope7.title: عطارد الرجعي في السرطان
|
||
§ plugin.person_achievements.horoscope8.title: عطارد الرجعي في الأسد
|
||
§ plugin.person_achievements.horoscope9.title: عطارد الرجعي في العذراء
|
||
§ plugin.person_achievements.horoscope10.title: عطارد الرجعي في الميزان
|
||
§ plugin.person_achievements.horoscope11.title: عطارد الرجعي في العقرب
|
||
§ plugin.person_achievements.horoscope12.title: عطارد الرجعي في القوس
|
||
§ plugin.person_achievements.horoscope1.description: بحسب شهر أول commit
|
||
§ plugin.person_achievements.horoscope2.description: بحسب شهر أول commit
|
||
§ plugin.person_achievements.horoscope3.description: بحسب شهر أول commit
|
||
§ plugin.person_achievements.horoscope4.description: بحسب شهر أول commit
|
||
§ plugin.person_achievements.horoscope5.description: بحسب شهر أول commit
|
||
§ plugin.person_achievements.horoscope6.description: بحسب شهر أول commit
|
||
§ plugin.person_achievements.horoscope7.description: بحسب شهر أول commit
|
||
§ plugin.person_achievements.horoscope8.description: بحسب شهر أول commit
|
||
§ plugin.person_achievements.horoscope9.description: بحسب شهر أول commit
|
||
§ plugin.person_achievements.horoscope10.description: بحسب شهر أول commit
|
||
§ plugin.person_achievements.horoscope11.description: بحسب شهر أول commit
|
||
§ plugin.person_achievements.horoscope12.description: بحسب شهر أول commit
|
||
§ plugin.person_achievements.moreChangeTimeZone.title: Aaaaa-viasales
|
||
§ plugin.person_achievements.moreChangeTimeZone.description: غيّر الموقع أكثر من أي شخص آخر
|
||
§ plugin.person_achievements.publicitySitnik.title: Sitnik يوافق
|
||
§ plugin.person_achievements.publicitySitnik.description: أول من أضاف إعداد PostCSS أو Browserslist
|
||
§ plugin.person_achievements.github.title: مدبرة المنزل
|
||
§ plugin.person_achievements.github.description: إلى جانب العمل الرئيسي يكتب مشروعاً منزلياً
|
||
§ plugin.person_achievements.mackBook.title: راف فانيليا بحليب جوز الهند
|
||
§ plugin.person_achievements.mackBook.description: يستخدم MacBook للعمل
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.title: المستعجل في اللحظة الأخيرة
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.description: أكبر زيادة في عدد الـ commits قبل الإصدار
|
||
§ plugin.person_achievements.ipInEmail.title: LAN-man
|
||
§ plugin.person_achievements.ipInEmail.description: استخدم عنوان IP محلياً بدل البريد الإلكتروني
|
||
§ plugin.person_achievements.languageErrors.title: حسب الـ fabric، حسب الـ details
|
||
§ plugin.person_achievements.languageErrors.description: استخدم قواعد إملاء أو ترقيم من لغة أخرى
|
||
`,de:`
|
||
§ plugin.person_achievements.sidebar: Errungenschaften
|
||
§ plugin.person_achievements.page.positive: Positiv
|
||
§ plugin.person_achievements.page.normal: Neutral
|
||
§ plugin.person_achievements.page.negative: Negativ
|
||
§ plugin.person_achievements.page.publicity: Speziell
|
||
§ plugin.person_achievements.page.commitsWithBeautifulTaskNumbers: Schöne Aufgabennummern
|
||
§ plugin.person_achievements.page.description: Je mehr negative Errungenschaften ein Mitarbeiter hat, desto wahrscheinlicher ist die Situation ungewöhnlich. Es kann sinnvoll sein, den Arbeitsmodus, die Aufgaben oder die Berichterstattung zu ändern. Es empfiehlt sich, mit ihm zu sprechen und herauszufinden, welche Probleme seine Arbeit behindern.
|
||
§ plugin.person_achievements.gets.title: Medaillen für Aufgabennummern:
|
||
§ plugin.person_achievements.gets.description: Eine Medaille wird verliehen, wenn der Benutzer als Erster einen commit zu einer Aufgabe mit einer „schönen“ Nummer hinterlässt.
|
||
§ plugin.person_achievements.commitsAfter1500.title: Nachteule
|
||
§ plugin.person_achievements.commitsAfter1500.description: 70% der commits nach 15:00
|
||
§ plugin.person_achievements.commitsBefore1500.title: Frühaufsteher
|
||
§ plugin.person_achievements.commitsBefore1500.description: 70% der commits vor dem Mittagessen
|
||
§ plugin.person_achievements.workEveryTime.title: Diener Gottes
|
||
§ plugin.person_achievements.workEveryTime.description: es gibt einen commit für jede Stunde des Tages
|
||
§ plugin.person_achievements.workNotWork.title: Platzpatronen
|
||
§ plugin.person_achievements.workNotWork.description: es gibt commits, aber keine geschlossenen Aufgaben
|
||
§ plugin.person_achievements.userNotWork.title: Auf der Durchreise
|
||
§ plugin.person_achievements.userNotWork.description: dies ist nicht das Hauptprojekt
|
||
§ plugin.person_achievements.userIsDied.title: Tote Seele
|
||
§ plugin.person_achievements.userIsDied.description: hat gearbeitet, ist aber ausgeschieden
|
||
§ plugin.person_achievements.lessTasks.title: Rein und raus
|
||
§ plugin.person_achievements.lessTasks.description: die wenigsten geschlossenen Aufgaben
|
||
§ plugin.person_achievements.moreTasks.title: Gut gemacht, sagt Papa
|
||
§ plugin.person_achievements.moreTasks.description: die meisten geschlossenen Aufgaben
|
||
§ plugin.person_achievements.everyMessageLong.title: Meister der Eloquenz
|
||
§ plugin.person_achievements.everyMessageLong.description: durchgehend die längsten commit messages
|
||
§ plugin.person_achievements.everyMessageShort.title: Redselig
|
||
§ plugin.person_achievements.everyMessageShort.description: durchgehend die kürzesten commit messages
|
||
§ plugin.person_achievements.shortestName.title: Größe ist nicht alles
|
||
§ plugin.person_achievements.shortestName.description: der kürzeste Name
|
||
§ plugin.person_achievements.longestName.title: Azim Aziz Il Am Qadir Imran II
|
||
§ plugin.person_achievements.longestName.description: der längste Name
|
||
§ plugin.person_achievements.moreCommits.title: Backup-Meister
|
||
§ plugin.person_achievements.moreCommits.description: die meisten commits
|
||
§ plugin.person_achievements.lessCommits.title: Selten, aber treffend
|
||
§ plugin.person_achievements.lessCommits.description: die wenigsten commits
|
||
§ plugin.person_achievements.oneCommitOneTask.title: Volltreffer
|
||
§ plugin.person_achievements.oneCommitOneTask.description: im Durchschnitt ein commit pro Aufgabe
|
||
§ plugin.person_achievements.moreLazyDays.title: In Gedanken bei euch
|
||
§ plugin.person_achievements.moreLazyDays.description: die meisten Tage ohne commits
|
||
§ plugin.person_achievements.lessLazyDays.title: Papa Carlo
|
||
§ plugin.person_achievements.lessLazyDays.description: die wenigsten Tage ohne commits
|
||
§ plugin.person_achievements.zeroLazyDays.title: Keine einzige Lücke
|
||
§ plugin.person_achievements.zeroLazyDays.description: kein einziger Tag ohne commits
|
||
§ plugin.person_achievements.moreWorkDays.title: Wertvoller Mitarbeiter
|
||
§ plugin.person_achievements.moreWorkDays.description: die meisten Arbeitstage
|
||
§ plugin.person_achievements.moreScopes.title: Start-up-Gründer
|
||
§ plugin.person_achievements.moreScopes.description: hat die meisten Features erstellt
|
||
§ plugin.person_achievements.lessScopes.title: Grünschnabel
|
||
§ plugin.person_achievements.lessScopes.description: hat die wenigsten Features erstellt
|
||
§ plugin.person_achievements.moreDaysForTask.title: Schnecke am Hang
|
||
§ plugin.person_achievements.moreDaysForTask.description: die Arbeit an Aufgaben geht langsamer als bei den anderen
|
||
§ plugin.person_achievements.more2DaysForTask.title: So slow
|
||
§ plugin.person_achievements.more2DaysForTask.description: mehr als zwei Tage pro Aufgabe
|
||
§ plugin.person_achievements.more3YearsInProject.title: Alteingesessener
|
||
§ plugin.person_achievements.more3YearsInProject.description: mehr als drei Jahre im Projekt
|
||
§ plugin.person_achievements.lessDaysInProject.title: Wer ist das?
|
||
§ plugin.person_achievements.lessDaysInProject.description: die wenigsten Tage im Projekt
|
||
§ plugin.person_achievements.lessDaysForTask.title: Schnellschuss
|
||
§ plugin.person_achievements.lessDaysForTask.description: eine Aufgabe dauert weniger als einen Tag
|
||
§ plugin.person_achievements.adam.title: Adam
|
||
§ plugin.person_achievements.adam.description: der erste stabile Mitarbeiter im Projekt
|
||
§ plugin.person_achievements.more90DaysInProject.title: Willkommen
|
||
§ plugin.person_achievements.more90DaysInProject.description: während der Probezeit nicht entlassen
|
||
§ plugin.person_achievements.more365DaysInProject.title: Einjähriges
|
||
§ plugin.person_achievements.more365DaysInProject.description: ein Jahr im Projekt gearbeitet
|
||
§ plugin.person_achievements.more666DaysInProject.title: Teufel
|
||
§ plugin.person_achievements.more666DaysInProject.description: 666 Tage im Projekt gearbeitet
|
||
§ plugin.person_achievements.more777DaysInProject.title: Glückliche Siebenen
|
||
§ plugin.person_achievements.more777DaysInProject.description: 777 Tage im Projekt gearbeitet
|
||
§ plugin.person_achievements.moreDaysInProject.title: Teil der Crew, Teil des Schiffs
|
||
§ plugin.person_achievements.moreDaysInProject.description: die meisten Tage im Projekt
|
||
§ plugin.person_achievements.moreRefactoring.title: Schlussredakteur
|
||
§ plugin.person_achievements.moreRefactoring.description: hat die meisten Markierungen „refactoring“ gesetzt
|
||
§ plugin.person_achievements.longestMessage.title: Reden ist billig
|
||
§ plugin.person_achievements.longestMessage.description: die längste commit message aller Zeiten
|
||
§ plugin.person_achievements.moreTasksInDay.title: Speed Racer
|
||
§ plugin.person_achievements.moreTasksInDay.description: Rekord bei der Zahl geschlossener Aufgaben an einem Tag
|
||
§ plugin.person_achievements.hasCommitFrom0to7.title: Nachtwache
|
||
§ plugin.person_achievements.hasCommitFrom0to7.description: es gibt einen commit für jede Nachtstunde
|
||
§ plugin.person_achievements.noCommitOnDay.title: Technische Pause
|
||
§ plugin.person_achievements.noCommitOnDay.description: es gibt eine bestimmte Stunde und einen bestimmten Tag in der Arbeitszeit, an denen nie ein commit gemacht wird
|
||
§ plugin.person_achievements.hasCommitEveryTime.title: Bei der Arbeit gestorben
|
||
§ plugin.person_achievements.hasCommitEveryTime.description: es gibt einen commit für eine Stunde jedes Tages (einschließlich Wochenenden)
|
||
§ plugin.person_achievements.commitsAfter1800.title: Zeit für die Arbeit
|
||
§ plugin.person_achievements.commitsAfter1800.description: kein einziger commit nach 18:00
|
||
§ plugin.person_achievements.moreFix.title: Bug hunter
|
||
§ plugin.person_achievements.moreFix.description: die meisten geschlossenen Bugs
|
||
§ plugin.person_achievements.lessWorkDays.title: Macht weiter ohne mich
|
||
§ plugin.person_achievements.lessWorkDays.description: die wenigsten Arbeitstage
|
||
§ plugin.person_achievements.moreCreateCode.title: Schöpfer
|
||
§ plugin.person_achievements.moreCreateCode.description: neigt mehr als andere dazu, Code hinzuzufügen
|
||
§ plugin.person_achievements.moreRemoveCode.title: Zerstörer
|
||
§ plugin.person_achievements.moreRemoveCode.description: neigt mehr als andere dazu, Code zu löschen
|
||
§ plugin.person_achievements.moreChangeCode.title: Reformer
|
||
§ plugin.person_achievements.moreChangeCode.description: neigt mehr als andere dazu, Code zu ändern
|
||
§ plugin.person_achievements.moreStyle.title: Modepolizei
|
||
§ plugin.person_achievements.moreStyle.description: neigt mehr als andere dazu, CSS zu ändern
|
||
§ plugin.person_achievements.moreOnHoliday.title: Kein Leben
|
||
§ plugin.person_achievements.moreOnHoliday.description: verhältnismäßig viele commits außerhalb der Arbeitszeit
|
||
§ plugin.person_achievements.morePRMerge.title: Der Zoll gibt frei
|
||
§ plugin.person_achievements.morePRMerge.description: drückt die Schaltfläche „Merge“ für PRs häufiger als andere
|
||
§ plugin.person_achievements.longWaitPR.title: Morgen mergen wir es bestimmt
|
||
§ plugin.person_achievements.longWaitPR.description: hat einen PR erstellt, der mehr als einen Monat im Review hing
|
||
§ plugin.person_achievements.moreLongWaitPR.title: Vor langer Zeit, in einer weit, weit entfernten Galaxis
|
||
§ plugin.person_achievements.moreLongWaitPR.description: hat einen PR erstellt, der am längsten im Review hing
|
||
§ plugin.person_achievements.oneExtension.title: Ein Mann allein
|
||
§ plugin.person_achievements.oneExtension.description: nur diese Person arbeitet mit Dateien einer bestimmten Erweiterung
|
||
§ plugin.person_achievements.fileRush.title: Zerg Rush
|
||
§ plugin.person_achievements.fileRush.description: hat mehr Dateien im Projekt erstellt als alle anderen
|
||
§ plugin.person_achievements.moreLintHint.title: Grammar Nazi
|
||
§ plugin.person_achievements.moreLintHint.description: hat mehr Regeln der automatischen Prüfung erstellt oder geändert als alle anderen
|
||
§ plugin.person_achievements.moreReadMe.title: Chronist
|
||
§ plugin.person_achievements.moreReadMe.description: hat mehr MD-Dateien erstellt oder geändert als alle anderen
|
||
§ plugin.person_achievements.moreDevOps.title: DevOps
|
||
§ plugin.person_achievements.moreDevOps.description: hat mehr CI/CD-Dateien erstellt oder geändert als alle anderen
|
||
§ plugin.person_achievements.moreTests.title: Tester
|
||
§ plugin.person_achievements.moreTests.description: hat mehr Testdateien erstellt oder geändert als alle anderen
|
||
§ plugin.person_achievements.allRelease.title: Full House
|
||
§ plugin.person_achievements.allRelease.description: es gibt ein Release, das nur aus den eigenen Aufgaben gebaut wurde
|
||
§ plugin.person_achievements.firstCommit.title: Wer zuerst kommt
|
||
§ plugin.person_achievements.firstCommit.description: erster commit im Projekt
|
||
§ plugin.person_achievements.lastCommit.title: Ich bin fertig
|
||
§ plugin.person_achievements.lastCommit.description: letzter commit im Projekt
|
||
§ plugin.person_achievements.firstLastCommit.title: Von Anfang bis Ende
|
||
§ plugin.person_achievements.firstLastCommit.description: erster und letzter commit im Projekt
|
||
§ plugin.person_achievements.longFilePath.title: Kornkammern der Heimat
|
||
§ plugin.person_achievements.longFilePath.description: hat als Erster eine Datei mit der tiefsten Verschachtelung erstellt
|
||
§ plugin.person_achievements.longFileName.title: Größe spielt eine Rolle
|
||
§ plugin.person_achievements.longFileName.description: hat eine Datei mit dem längsten Namen erstellt
|
||
§ plugin.person_achievements.workOnWeekends.title: Arbeit ist kein Spaziergang
|
||
§ plugin.person_achievements.workOnWeekends.description: hat mindestens einmal am Wochenende gearbeitet
|
||
§ plugin.person_achievements.removeCreateFile.title: Die Stewardess ausgegraben
|
||
§ plugin.person_achievements.removeCreateFile.description: hat eine gelöschte Datei wiederhergestellt
|
||
§ plugin.person_achievements.renameFile.title: Astana Nur-Sultan Astana
|
||
§ plugin.person_achievements.renameFile.description: hat eine Datei hin und her umbenannt
|
||
§ plugin.person_achievements.longTask.title: Sieht einfach aus
|
||
§ plugin.person_achievements.longTask.description: hat mehr als drei Monate an einer Aufgabe gearbeitet
|
||
§ plugin.person_achievements.haveNotEmail.title: Briefträger Pechkin
|
||
§ plugin.person_achievements.haveNotEmail.description: hat das Feld e-mail in git config nicht ausgefüllt
|
||
§ plugin.person_achievements.moreAddedFolders.title: Direktor
|
||
§ plugin.person_achievements.moreAddedFolders.description: hat mehr Verzeichnisse erstellt als alle anderen
|
||
§ plugin.person_achievements.horoscope1.title: Rückläufiger Merkur im Steinbock
|
||
§ plugin.person_achievements.horoscope2.title: Rückläufiger Merkur im Wassermann
|
||
§ plugin.person_achievements.horoscope3.title: Rückläufiger Merkur in den Fischen
|
||
§ plugin.person_achievements.horoscope4.title: Rückläufiger Merkur im Widder
|
||
§ plugin.person_achievements.horoscope5.title: Rückläufiger Merkur im Stier
|
||
§ plugin.person_achievements.horoscope6.title: Rückläufiger Merkur in den Zwillingen
|
||
§ plugin.person_achievements.horoscope7.title: Rückläufiger Merkur im Krebs
|
||
§ plugin.person_achievements.horoscope8.title: Rückläufiger Merkur im Löwen
|
||
§ plugin.person_achievements.horoscope9.title: Rückläufiger Merkur in der Jungfrau
|
||
§ plugin.person_achievements.horoscope10.title: Rückläufiger Merkur in der Waage
|
||
§ plugin.person_achievements.horoscope11.title: Rückläufiger Merkur im Skorpion
|
||
§ plugin.person_achievements.horoscope12.title: Rückläufiger Merkur im Schützen
|
||
§ plugin.person_achievements.horoscope1.description: nach dem Monat des ersten commit
|
||
§ plugin.person_achievements.horoscope2.description: nach dem Monat des ersten commit
|
||
§ plugin.person_achievements.horoscope3.description: nach dem Monat des ersten commit
|
||
§ plugin.person_achievements.horoscope4.description: nach dem Monat des ersten commit
|
||
§ plugin.person_achievements.horoscope5.description: nach dem Monat des ersten commit
|
||
§ plugin.person_achievements.horoscope6.description: nach dem Monat des ersten commit
|
||
§ plugin.person_achievements.horoscope7.description: nach dem Monat des ersten commit
|
||
§ plugin.person_achievements.horoscope8.description: nach dem Monat des ersten commit
|
||
§ plugin.person_achievements.horoscope9.description: nach dem Monat des ersten commit
|
||
§ plugin.person_achievements.horoscope10.description: nach dem Monat des ersten commit
|
||
§ plugin.person_achievements.horoscope11.description: nach dem Monat des ersten commit
|
||
§ plugin.person_achievements.horoscope12.description: nach dem Monat des ersten commit
|
||
§ plugin.person_achievements.moreChangeTimeZone.title: Aaaaa-viasales
|
||
§ plugin.person_achievements.moreChangeTimeZone.description: hat den Standort häufiger gewechselt als alle anderen
|
||
§ plugin.person_achievements.publicitySitnik.title: Sitnik genehmigt
|
||
§ plugin.person_achievements.publicitySitnik.description: hat als Erster eine PostCSS- oder Browserslist-Konfiguration hinzugefügt
|
||
§ plugin.person_achievements.github.title: Haushälterin
|
||
§ plugin.person_achievements.github.description: schreibt neben der Hauptarbeit ein privates Projekt
|
||
§ plugin.person_achievements.mackBook.title: Vanille-Raf mit Kokosmilch
|
||
§ plugin.person_achievements.mackBook.description: verwendet ein MacBook für die Arbeit
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.title: Last-Minute-Hektiker
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.description: der größte Anstieg der Zahl der commits vor einem Release
|
||
§ plugin.person_achievements.ipInEmail.title: LAN-man
|
||
§ plugin.person_achievements.ipInEmail.description: hat statt der E-Mail eine lokale IP-Adresse verwendet
|
||
§ plugin.person_achievements.languageErrors.title: Kommt auf den fabric an, kommt auf die details an
|
||
§ plugin.person_achievements.languageErrors.description: hat Rechtschreib- oder Interpunktionsregeln einer anderen Sprache verwendet
|
||
`,en:`
|
||
§ plugin.person_achievements.sidebar: Achievements
|
||
§ plugin.person_achievements.page.positive: Positive
|
||
§ plugin.person_achievements.page.normal: Neutral
|
||
§ plugin.person_achievements.page.negative: Negative
|
||
§ plugin.person_achievements.page.publicity: Special
|
||
§ plugin.person_achievements.page.commitsWithBeautifulTaskNumbers: Beautiful task numbers
|
||
§ plugin.person_achievements.page.description: The more negative achievements an employee has, the more likely the situation is unusual. It may be worth changing their work schedule, tasks, or reporting. It is advisable to talk with them and find out which problems hinder their work.
|
||
§ plugin.person_achievements.gets.title: Medals for task numbers:
|
||
§ plugin.person_achievements.gets.description: A medal is awarded if the user is the first to leave a commit for a task with a “beautiful” number.
|
||
§ plugin.person_achievements.commitsAfter1500.title: Night owl
|
||
§ plugin.person_achievements.commitsAfter1500.description: 70% of commits after 15:00
|
||
§ plugin.person_achievements.commitsBefore1500.title: Early bird
|
||
§ plugin.person_achievements.commitsBefore1500.description: 70% of commits before lunch
|
||
§ plugin.person_achievements.workEveryTime.title: Servant of God
|
||
§ plugin.person_achievements.workEveryTime.description: there is a commit for every hour of the day
|
||
§ plugin.person_achievements.workNotWork.title: Blank fire
|
||
§ plugin.person_achievements.workNotWork.description: there are commits, but no closed tasks
|
||
§ plugin.person_achievements.userNotWork.title: Passing through
|
||
§ plugin.person_achievements.userNotWork.description: this is not their main project
|
||
§ plugin.person_achievements.userIsDied.title: Dead soul
|
||
§ plugin.person_achievements.userIsDied.description: worked, but left the company
|
||
§ plugin.person_achievements.lessTasks.title: In and out
|
||
§ plugin.person_achievements.lessTasks.description: the fewest closed tasks
|
||
§ plugin.person_achievements.moreTasks.title: Well done, says Dad
|
||
§ plugin.person_achievements.moreTasks.description: the most closed tasks
|
||
§ plugin.person_achievements.everyMessageLong.title: Master of eloquence
|
||
§ plugin.person_achievements.everyMessageLong.description: consistently the longest commit messages
|
||
§ plugin.person_achievements.everyMessageShort.title: Loose lips
|
||
§ plugin.person_achievements.everyMessageShort.description: consistently the shortest commit messages
|
||
§ plugin.person_achievements.shortestName.title: Size does not matter
|
||
§ plugin.person_achievements.shortestName.description: the shortest name
|
||
§ plugin.person_achievements.longestName.title: Azim Aziz Il Am Qadir Imran II
|
||
§ plugin.person_achievements.longestName.description: the longest name
|
||
§ plugin.person_achievements.moreCommits.title: Backup master
|
||
§ plugin.person_achievements.moreCommits.description: the most commits
|
||
§ plugin.person_achievements.lessCommits.title: Rare but precise
|
||
§ plugin.person_achievements.lessCommits.description: the fewest commits
|
||
§ plugin.person_achievements.oneCommitOneTask.title: Bullseye
|
||
§ plugin.person_achievements.oneCommitOneTask.description: on average one commit per task
|
||
§ plugin.person_achievements.moreLazyDays.title: With you in spirit
|
||
§ plugin.person_achievements.moreLazyDays.description: the most days without commits
|
||
§ plugin.person_achievements.lessLazyDays.title: Papa Carlo
|
||
§ plugin.person_achievements.lessLazyDays.description: the fewest days without commits
|
||
§ plugin.person_achievements.zeroLazyDays.title: Not a single gap
|
||
§ plugin.person_achievements.zeroLazyDays.description: not a single day without commits
|
||
§ plugin.person_achievements.moreWorkDays.title: Valuable employee
|
||
§ plugin.person_achievements.moreWorkDays.description: the most working days
|
||
§ plugin.person_achievements.moreScopes.title: Startupper
|
||
§ plugin.person_achievements.moreScopes.description: created the most features
|
||
§ plugin.person_achievements.lessScopes.title: Greenhorn
|
||
§ plugin.person_achievements.lessScopes.description: created the fewest features
|
||
§ plugin.person_achievements.moreDaysForTask.title: Snail on the Slope
|
||
§ plugin.person_achievements.moreDaysForTask.description: work on tasks is slower than that of others
|
||
§ plugin.person_achievements.more2DaysForTask.title: So slow
|
||
§ plugin.person_achievements.more2DaysForTask.description: more than two days per task
|
||
§ plugin.person_achievements.more3YearsInProject.title: Old-timer
|
||
§ plugin.person_achievements.more3YearsInProject.description: more than three years on the project
|
||
§ plugin.person_achievements.lessDaysInProject.title: Who is this?
|
||
§ plugin.person_achievements.lessDaysInProject.description: the fewest days on the project
|
||
§ plugin.person_achievements.lessDaysForTask.title: Quick shot
|
||
§ plugin.person_achievements.lessDaysForTask.description: one task takes less than a day
|
||
§ plugin.person_achievements.adam.title: Adam
|
||
§ plugin.person_achievements.adam.description: the first stable employee on the project
|
||
§ plugin.person_achievements.more90DaysInProject.title: Welcome
|
||
§ plugin.person_achievements.more90DaysInProject.description: was not dismissed during probation
|
||
§ plugin.person_achievements.more365DaysInProject.title: One-year-old
|
||
§ plugin.person_achievements.more365DaysInProject.description: worked a year on the project
|
||
§ plugin.person_achievements.more666DaysInProject.title: Devil
|
||
§ plugin.person_achievements.more666DaysInProject.description: worked 666 days on the project
|
||
§ plugin.person_achievements.more777DaysInProject.title: Lucky sevens
|
||
§ plugin.person_achievements.more777DaysInProject.description: worked 777 days on the project
|
||
§ plugin.person_achievements.moreDaysInProject.title: Part of the crew, part of the ship
|
||
§ plugin.person_achievements.moreDaysInProject.description: the most days on the project
|
||
§ plugin.person_achievements.moreRefactoring.title: Copy editor
|
||
§ plugin.person_achievements.moreRefactoring.description: added the most “refactoring” labels
|
||
§ plugin.person_achievements.longestMessage.title: Talk is cheap
|
||
§ plugin.person_achievements.longestMessage.description: the longest commit message of all time
|
||
§ plugin.person_achievements.moreTasksInDay.title: Speed Racer
|
||
§ plugin.person_achievements.moreTasksInDay.description: record for the number of closed tasks in a day
|
||
§ plugin.person_achievements.hasCommitFrom0to7.title: Night Watch
|
||
§ plugin.person_achievements.hasCommitFrom0to7.description: there is a commit for every night hour
|
||
§ plugin.person_achievements.noCommitOnDay.title: Technical break
|
||
§ plugin.person_achievements.noCommitOnDay.description: there is a specific hour and day during working time when they never make a commit
|
||
§ plugin.person_achievements.hasCommitEveryTime.title: Died at work
|
||
§ plugin.person_achievements.hasCommitEveryTime.description: there is a commit for an hour of every day (including weekends)
|
||
§ plugin.person_achievements.commitsAfter1800.title: Time for work
|
||
§ plugin.person_achievements.commitsAfter1800.description: not a single commit after 18:00
|
||
§ plugin.person_achievements.moreFix.title: Bug hunter
|
||
§ plugin.person_achievements.moreFix.description: the most closed bugs
|
||
§ plugin.person_achievements.lessWorkDays.title: Carry on without me
|
||
§ plugin.person_achievements.lessWorkDays.description: the fewest working days
|
||
§ plugin.person_achievements.moreCreateCode.title: Creator
|
||
§ plugin.person_achievements.moreCreateCode.description: tends to add code more than others
|
||
§ plugin.person_achievements.moreRemoveCode.title: Destroyer
|
||
§ plugin.person_achievements.moreRemoveCode.description: tends to delete code more than others
|
||
§ plugin.person_achievements.moreChangeCode.title: Reformer
|
||
§ plugin.person_achievements.moreChangeCode.description: tends to change code more than others
|
||
§ plugin.person_achievements.moreStyle.title: Fashion police
|
||
§ plugin.person_achievements.moreStyle.description: tends to change CSS more than others
|
||
§ plugin.person_achievements.moreOnHoliday.title: No life
|
||
§ plugin.person_achievements.moreOnHoliday.description: relatively many commits outside working hours
|
||
§ plugin.person_achievements.morePRMerge.title: Customs grants clearance
|
||
§ plugin.person_achievements.morePRMerge.description: presses the “Merge” button for PRs more often than others
|
||
§ plugin.person_achievements.longWaitPR.title: We will merge it tomorrow for sure
|
||
§ plugin.person_achievements.longWaitPR.description: created a PR that stayed in review for more than a month
|
||
§ plugin.person_achievements.moreLongWaitPR.title: A long time ago, in a galaxy far away
|
||
§ plugin.person_achievements.moreLongWaitPR.description: created a PR that stayed in review the longest
|
||
§ plugin.person_achievements.oneExtension.title: A one-man army
|
||
§ plugin.person_achievements.oneExtension.description: the only person working with files of a certain extension
|
||
§ plugin.person_achievements.fileRush.title: Zerg Rush
|
||
§ plugin.person_achievements.fileRush.description: created more files in the project than anyone else
|
||
§ plugin.person_achievements.moreLintHint.title: Grammar Nazi
|
||
§ plugin.person_achievements.moreLintHint.description: created or changed more auto-check rules than anyone else
|
||
§ plugin.person_achievements.moreReadMe.title: Chronicler
|
||
§ plugin.person_achievements.moreReadMe.description: created or changed more MD files than anyone else
|
||
§ plugin.person_achievements.moreDevOps.title: DevOps
|
||
§ plugin.person_achievements.moreDevOps.description: created or changed more CI/CD files than anyone else
|
||
§ plugin.person_achievements.moreTests.title: Tester
|
||
§ plugin.person_achievements.moreTests.description: created or changed more test files than anyone else
|
||
§ plugin.person_achievements.allRelease.title: Full house
|
||
§ plugin.person_achievements.allRelease.description: there is a release built only from their tasks
|
||
§ plugin.person_achievements.firstCommit.title: First come, first served
|
||
§ plugin.person_achievements.firstCommit.description: first commit on the project
|
||
§ plugin.person_achievements.lastCommit.title: I am done
|
||
§ plugin.person_achievements.lastCommit.description: last commit on the project
|
||
§ plugin.person_achievements.firstLastCommit.title: From beginning to end
|
||
§ plugin.person_achievements.firstLastCommit.description: first and last commit on the project
|
||
§ plugin.person_achievements.longFilePath.title: Motherland’s granaries
|
||
§ plugin.person_achievements.longFilePath.description: first to create a file with the deepest nesting
|
||
§ plugin.person_achievements.longFileName.title: Size matters
|
||
§ plugin.person_achievements.longFileName.description: created a file with the longest name
|
||
§ plugin.person_achievements.workOnWeekends.title: Work is not a walk
|
||
§ plugin.person_achievements.workOnWeekends.description: worked on a weekend at least once
|
||
§ plugin.person_achievements.removeCreateFile.title: Dug up the stewardess
|
||
§ plugin.person_achievements.removeCreateFile.description: restored a deleted file
|
||
§ plugin.person_achievements.renameFile.title: Astana Nur-Sultan Astana
|
||
§ plugin.person_achievements.renameFile.description: renamed a file back and forth
|
||
§ plugin.person_achievements.longTask.title: Looks easy
|
||
§ plugin.person_achievements.longTask.description: worked on a task for more than three months
|
||
§ plugin.person_achievements.haveNotEmail.title: Postman Pechkin
|
||
§ plugin.person_achievements.haveNotEmail.description: did not fill in the e-mail field in git config
|
||
§ plugin.person_achievements.moreAddedFolders.title: Director
|
||
§ plugin.person_achievements.moreAddedFolders.description: created more directories than anyone else
|
||
§ plugin.person_achievements.horoscope1.title: Retrograde Mercury in Capricorn
|
||
§ plugin.person_achievements.horoscope2.title: Retrograde Mercury in Aquarius
|
||
§ plugin.person_achievements.horoscope3.title: Retrograde Mercury in Pisces
|
||
§ plugin.person_achievements.horoscope4.title: Retrograde Mercury in Aries
|
||
§ plugin.person_achievements.horoscope5.title: Retrograde Mercury in Taurus
|
||
§ plugin.person_achievements.horoscope6.title: Retrograde Mercury in Gemini
|
||
§ plugin.person_achievements.horoscope7.title: Retrograde Mercury in Cancer
|
||
§ plugin.person_achievements.horoscope8.title: Retrograde Mercury in Leo
|
||
§ plugin.person_achievements.horoscope9.title: Retrograde Mercury in Virgo
|
||
§ plugin.person_achievements.horoscope10.title: Retrograde Mercury in Libra
|
||
§ plugin.person_achievements.horoscope11.title: Retrograde Mercury in Scorpio
|
||
§ plugin.person_achievements.horoscope12.title: Retrograde Mercury in Sagittarius
|
||
§ plugin.person_achievements.horoscope1.description: by the month of the first commit
|
||
§ plugin.person_achievements.horoscope2.description: by the month of the first commit
|
||
§ plugin.person_achievements.horoscope3.description: by the month of the first commit
|
||
§ plugin.person_achievements.horoscope4.description: by the month of the first commit
|
||
§ plugin.person_achievements.horoscope5.description: by the month of the first commit
|
||
§ plugin.person_achievements.horoscope6.description: by the month of the first commit
|
||
§ plugin.person_achievements.horoscope7.description: by the month of the first commit
|
||
§ plugin.person_achievements.horoscope8.description: by the month of the first commit
|
||
§ plugin.person_achievements.horoscope9.description: by the month of the first commit
|
||
§ plugin.person_achievements.horoscope10.description: by the month of the first commit
|
||
§ plugin.person_achievements.horoscope11.description: by the month of the first commit
|
||
§ plugin.person_achievements.horoscope12.description: by the month of the first commit
|
||
§ plugin.person_achievements.moreChangeTimeZone.title: Aaaaa-viasales
|
||
§ plugin.person_achievements.moreChangeTimeZone.description: changed location more than anyone else
|
||
§ plugin.person_achievements.publicitySitnik.title: Sitnik approves
|
||
§ plugin.person_achievements.publicitySitnik.description: first to add a PostCSS or Browserslist config
|
||
§ plugin.person_achievements.github.title: Housekeeper
|
||
§ plugin.person_achievements.github.description: besides main work, writes a home project
|
||
§ plugin.person_achievements.mackBook.title: Vanilla raf with coconut milk
|
||
§ plugin.person_achievements.mackBook.description: uses a MacBook for work
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.title: Last-minute hustler
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.description: the largest increase in the number of commits before a release
|
||
§ plugin.person_achievements.ipInEmail.title: LAN-man
|
||
§ plugin.person_achievements.ipInEmail.description: used a local IP address instead of email
|
||
§ plugin.person_achievements.languageErrors.title: Depends on the fabric, depends on the details
|
||
§ plugin.person_achievements.languageErrors.description: used spelling or punctuation rules from another language
|
||
`,es:`
|
||
§ plugin.person_achievements.sidebar: Logros
|
||
§ plugin.person_achievements.page.positive: Positivos
|
||
§ plugin.person_achievements.page.normal: Neutrales
|
||
§ plugin.person_achievements.page.negative: Negativos
|
||
§ plugin.person_achievements.page.publicity: Especiales
|
||
§ plugin.person_achievements.page.commitsWithBeautifulTaskNumbers: Números de tarea bonitos
|
||
§ plugin.person_achievements.page.description: Cuantos más logros negativos tenga un empleado, mayor es la probabilidad de que la situación sea inusual. Puede convenir cambiar su régimen de trabajo, las tareas o la rendición de cuentas. Conviene hablar con él y averiguar qué problemas dificultan su trabajo.
|
||
§ plugin.person_achievements.gets.title: Medallas por números de tarea:
|
||
§ plugin.person_achievements.gets.description: La medalla se otorga si el usuario es el primero en dejar un commit en una tarea con un número «bonito».
|
||
§ plugin.person_achievements.commitsAfter1500.title: Búho nocturno
|
||
§ plugin.person_achievements.commitsAfter1500.description: 70% de los commits después de las 15:00
|
||
§ plugin.person_achievements.commitsBefore1500.title: Madrugador
|
||
§ plugin.person_achievements.commitsBefore1500.description: 70% de los commits antes del almuerzo
|
||
§ plugin.person_achievements.workEveryTime.title: Siervo de Dios
|
||
§ plugin.person_achievements.workEveryTime.description: hay un commit a cada hora del día
|
||
§ plugin.person_achievements.workNotWork.title: Fuego de fogueo
|
||
§ plugin.person_achievements.workNotWork.description: hay commits, pero no hay tareas cerradas
|
||
§ plugin.person_achievements.userNotWork.title: De paso
|
||
§ plugin.person_achievements.userNotWork.description: este no es su proyecto principal
|
||
§ plugin.person_achievements.userIsDied.title: Alma muerta
|
||
§ plugin.person_achievements.userIsDied.description: trabajó, pero dejó la empresa
|
||
§ plugin.person_achievements.lessTasks.title: Entró y salió
|
||
§ plugin.person_achievements.lessTasks.description: el menor número de tareas cerradas
|
||
§ plugin.person_achievements.moreTasks.title: Bien hecho, dice papá
|
||
§ plugin.person_achievements.moreTasks.description: el mayor número de tareas cerradas
|
||
§ plugin.person_achievements.everyMessageLong.title: Maestro de la elocuencia
|
||
§ plugin.person_achievements.everyMessageLong.description: de forma estable, los commit messages más largos
|
||
§ plugin.person_achievements.everyMessageShort.title: Lengua suelta
|
||
§ plugin.person_achievements.everyMessageShort.description: de forma estable, los commit messages más cortos
|
||
§ plugin.person_achievements.shortestName.title: El tamaño no importa
|
||
§ plugin.person_achievements.shortestName.description: el nombre más corto
|
||
§ plugin.person_achievements.longestName.title: Azim Aziz Il Am Qadir Imran II
|
||
§ plugin.person_achievements.longestName.description: el nombre más largo
|
||
§ plugin.person_achievements.moreCommits.title: Maestro de copias de seguridad
|
||
§ plugin.person_achievements.moreCommits.description: el mayor número de commits
|
||
§ plugin.person_achievements.lessCommits.title: Poco, pero certero
|
||
§ plugin.person_achievements.lessCommits.description: el menor número de commits
|
||
§ plugin.person_achievements.oneCommitOneTask.title: En el blanco
|
||
§ plugin.person_achievements.oneCommitOneTask.description: de media un commit por tarea
|
||
§ plugin.person_achievements.moreLazyDays.title: Con vosotros en espíritu
|
||
§ plugin.person_achievements.moreLazyDays.description: el mayor número de días sin commits
|
||
§ plugin.person_achievements.lessLazyDays.title: Papá Carlo
|
||
§ plugin.person_achievements.lessLazyDays.description: el menor número de días sin commits
|
||
§ plugin.person_achievements.zeroLazyDays.title: Ni una sola pausa
|
||
§ plugin.person_achievements.zeroLazyDays.description: ni un solo día sin commits
|
||
§ plugin.person_achievements.moreWorkDays.title: Empleado valioso
|
||
§ plugin.person_achievements.moreWorkDays.description: el mayor número de días laborables
|
||
§ plugin.person_achievements.moreScopes.title: Emprendedor
|
||
§ plugin.person_achievements.moreScopes.description: creó el mayor número de funcionalidades
|
||
§ plugin.person_achievements.lessScopes.title: Novato
|
||
§ plugin.person_achievements.lessScopes.description: creó el menor número de funcionalidades
|
||
§ plugin.person_achievements.moreDaysForTask.title: Caracol en la pendiente
|
||
§ plugin.person_achievements.moreDaysForTask.description: el trabajo en las tareas avanza más despacio que el de los demás
|
||
§ plugin.person_achievements.more2DaysForTask.title: So slow
|
||
§ plugin.person_achievements.more2DaysForTask.description: más de dos días por tarea
|
||
§ plugin.person_achievements.more3YearsInProject.title: Veterano
|
||
§ plugin.person_achievements.more3YearsInProject.description: más de tres años en el proyecto
|
||
§ plugin.person_achievements.lessDaysInProject.title: ¿Y este quién es?
|
||
§ plugin.person_achievements.lessDaysInProject.description: el menor número de días en el proyecto
|
||
§ plugin.person_achievements.lessDaysForTask.title: Disparo rápido
|
||
§ plugin.person_achievements.lessDaysForTask.description: una tarea ocupa menos de un día
|
||
§ plugin.person_achievements.adam.title: Adán
|
||
§ plugin.person_achievements.adam.description: el primer empleado estable en el proyecto
|
||
§ plugin.person_achievements.more90DaysInProject.title: Bienvenido
|
||
§ plugin.person_achievements.more90DaysInProject.description: no fue despedido durante el periodo de prueba
|
||
§ plugin.person_achievements.more365DaysInProject.title: Cumpleaños de un año
|
||
§ plugin.person_achievements.more365DaysInProject.description: trabajó un año en el proyecto
|
||
§ plugin.person_achievements.more666DaysInProject.title: Diablo
|
||
§ plugin.person_achievements.more666DaysInProject.description: trabajó 666 días en el proyecto
|
||
§ plugin.person_achievements.more777DaysInProject.title: Sietes de la suerte
|
||
§ plugin.person_achievements.more777DaysInProject.description: trabajó 777 días en el proyecto
|
||
§ plugin.person_achievements.moreDaysInProject.title: Parte de la tripulación, parte del barco
|
||
§ plugin.person_achievements.moreDaysInProject.description: el mayor número de días en el proyecto
|
||
§ plugin.person_achievements.moreRefactoring.title: Editor de estilo
|
||
§ plugin.person_achievements.moreRefactoring.description: añadió el mayor número de etiquetas «refactoring»
|
||
§ plugin.person_achievements.longestMessage.title: Hablar es barato
|
||
§ plugin.person_achievements.longestMessage.description: el commit message más largo de todos los tiempos
|
||
§ plugin.person_achievements.moreTasksInDay.title: Speed Racer
|
||
§ plugin.person_achievements.moreTasksInDay.description: récord de tareas cerradas en un día
|
||
§ plugin.person_achievements.hasCommitFrom0to7.title: Guardia nocturna
|
||
§ plugin.person_achievements.hasCommitFrom0to7.description: hay un commit a cada hora de la noche
|
||
§ plugin.person_achievements.noCommitOnDay.title: Pausa técnica
|
||
§ plugin.person_achievements.noCommitOnDay.description: hay una hora y un día concretos en horario laboral en los que nunca se hace un commit
|
||
§ plugin.person_achievements.hasCommitEveryTime.title: Murió en el trabajo
|
||
§ plugin.person_achievements.hasCommitEveryTime.description: hay un commit a una hora de cada día (incluidos los fines de semana)
|
||
§ plugin.person_achievements.commitsAfter1800.title: Tiempo para el trabajo
|
||
§ plugin.person_achievements.commitsAfter1800.description: ni un solo commit después de las 18:00
|
||
§ plugin.person_achievements.moreFix.title: Bug hunter
|
||
§ plugin.person_achievements.moreFix.description: el mayor número de errores cerrados
|
||
§ plugin.person_achievements.lessWorkDays.title: Seguid sin mí
|
||
§ plugin.person_achievements.lessWorkDays.description: el menor número de días laborables
|
||
§ plugin.person_achievements.moreCreateCode.title: Creador
|
||
§ plugin.person_achievements.moreCreateCode.description: tiende a añadir código más que los demás
|
||
§ plugin.person_achievements.moreRemoveCode.title: Destructor
|
||
§ plugin.person_achievements.moreRemoveCode.description: tiende a eliminar código más que los demás
|
||
§ plugin.person_achievements.moreChangeCode.title: Reformador
|
||
§ plugin.person_achievements.moreChangeCode.description: tiende a modificar código más que los demás
|
||
§ plugin.person_achievements.moreStyle.title: Policía de la moda
|
||
§ plugin.person_achievements.moreStyle.description: tiende a modificar CSS más que los demás
|
||
§ plugin.person_achievements.moreOnHoliday.title: Sin vida
|
||
§ plugin.person_achievements.moreOnHoliday.description: relativamente muchos commits fuera del horario laboral
|
||
§ plugin.person_achievements.morePRMerge.title: Aduanas da el visto bueno
|
||
§ plugin.person_achievements.morePRMerge.description: pulsa el botón «Merge» de los PR con más frecuencia que los demás
|
||
§ plugin.person_achievements.longWaitPR.title: Mañana lo fusionamos seguro
|
||
§ plugin.person_achievements.longWaitPR.description: creó un PR que estuvo más de un mes en revisión
|
||
§ plugin.person_achievements.moreLongWaitPR.title: Hace mucho tiempo, en una galaxia muy lejana
|
||
§ plugin.person_achievements.moreLongWaitPR.description: creó un PR que permaneció en revisión el mayor tiempo
|
||
§ plugin.person_achievements.oneExtension.title: Un ejército de uno
|
||
§ plugin.person_achievements.oneExtension.description: solo esta persona trabaja con archivos de una extensión determinada
|
||
§ plugin.person_achievements.fileRush.title: Zerg Rush
|
||
§ plugin.person_achievements.fileRush.description: creó más archivos en el proyecto que nadie
|
||
§ plugin.person_achievements.moreLintHint.title: Grammar Nazi
|
||
§ plugin.person_achievements.moreLintHint.description: creó o modificó más reglas de comprobación automática que nadie
|
||
§ plugin.person_achievements.moreReadMe.title: Cronista
|
||
§ plugin.person_achievements.moreReadMe.description: creó o modificó más archivos MD que nadie
|
||
§ plugin.person_achievements.moreDevOps.title: DevOps
|
||
§ plugin.person_achievements.moreDevOps.description: creó o modificó más archivos de CI/CD que nadie
|
||
§ plugin.person_achievements.moreTests.title: Probador
|
||
§ plugin.person_achievements.moreTests.description: creó o modificó más archivos de pruebas que nadie
|
||
§ plugin.person_achievements.allRelease.title: Full house
|
||
§ plugin.person_achievements.allRelease.description: hay una versión compilada solo a partir de sus tareas
|
||
§ plugin.person_achievements.firstCommit.title: El que llega primero
|
||
§ plugin.person_achievements.firstCommit.description: primer commit en el proyecto
|
||
§ plugin.person_achievements.lastCommit.title: He terminado
|
||
§ plugin.person_achievements.lastCommit.description: último commit en el proyecto
|
||
§ plugin.person_achievements.firstLastCommit.title: De principio a fin
|
||
§ plugin.person_achievements.firstLastCommit.description: primer y último commit en el proyecto
|
||
§ plugin.person_achievements.longFilePath.title: Graneros de la patria
|
||
§ plugin.person_achievements.longFilePath.description: primero en crear un archivo con el anidamiento más profundo
|
||
§ plugin.person_achievements.longFileName.title: El tamaño sí importa
|
||
§ plugin.person_achievements.longFileName.description: creó un archivo con el nombre más largo
|
||
§ plugin.person_achievements.workOnWeekends.title: El trabajo no es un paseo
|
||
§ plugin.person_achievements.workOnWeekends.description: trabajó al menos una vez en fin de semana
|
||
§ plugin.person_achievements.removeCreateFile.title: Desenterró a la azafata
|
||
§ plugin.person_achievements.removeCreateFile.description: restauró un archivo eliminado
|
||
§ plugin.person_achievements.renameFile.title: Astana Nur-Sultan Astana
|
||
§ plugin.person_achievements.renameFile.description: renombró un archivo de un lado a otro
|
||
§ plugin.person_achievements.longTask.title: Parece fácil
|
||
§ plugin.person_achievements.longTask.description: trabajó en una tarea más de tres meses
|
||
§ plugin.person_achievements.haveNotEmail.title: Cartero Pechkin
|
||
§ plugin.person_achievements.haveNotEmail.description: no rellenó el campo e-mail en git config
|
||
§ plugin.person_achievements.moreAddedFolders.title: Director
|
||
§ plugin.person_achievements.moreAddedFolders.description: creó más directorios que nadie
|
||
§ plugin.person_achievements.horoscope1.title: Mercurio retrógrado en Capricornio
|
||
§ plugin.person_achievements.horoscope2.title: Mercurio retrógrado en Acuario
|
||
§ plugin.person_achievements.horoscope3.title: Mercurio retrógrado en Piscis
|
||
§ plugin.person_achievements.horoscope4.title: Mercurio retrógrado en Aries
|
||
§ plugin.person_achievements.horoscope5.title: Mercurio retrógrado en Tauro
|
||
§ plugin.person_achievements.horoscope6.title: Mercurio retrógrado en Géminis
|
||
§ plugin.person_achievements.horoscope7.title: Mercurio retrógrado en Cáncer
|
||
§ plugin.person_achievements.horoscope8.title: Mercurio retrógrado en Leo
|
||
§ plugin.person_achievements.horoscope9.title: Mercurio retrógrado en Virgo
|
||
§ plugin.person_achievements.horoscope10.title: Mercurio retrógrado en Libra
|
||
§ plugin.person_achievements.horoscope11.title: Mercurio retrógrado en Escorpio
|
||
§ plugin.person_achievements.horoscope12.title: Mercurio retrógrado en Sagitario
|
||
§ plugin.person_achievements.horoscope1.description: según el mes del primer commit
|
||
§ plugin.person_achievements.horoscope2.description: según el mes del primer commit
|
||
§ plugin.person_achievements.horoscope3.description: según el mes del primer commit
|
||
§ plugin.person_achievements.horoscope4.description: según el mes del primer commit
|
||
§ plugin.person_achievements.horoscope5.description: según el mes del primer commit
|
||
§ plugin.person_achievements.horoscope6.description: según el mes del primer commit
|
||
§ plugin.person_achievements.horoscope7.description: según el mes del primer commit
|
||
§ plugin.person_achievements.horoscope8.description: según el mes del primer commit
|
||
§ plugin.person_achievements.horoscope9.description: según el mes del primer commit
|
||
§ plugin.person_achievements.horoscope10.description: según el mes del primer commit
|
||
§ plugin.person_achievements.horoscope11.description: según el mes del primer commit
|
||
§ plugin.person_achievements.horoscope12.description: según el mes del primer commit
|
||
§ plugin.person_achievements.moreChangeTimeZone.title: Aaaaa-viasales
|
||
§ plugin.person_achievements.moreChangeTimeZone.description: cambió de ubicación más que nadie
|
||
§ plugin.person_achievements.publicitySitnik.title: Sitnik aprueba
|
||
§ plugin.person_achievements.publicitySitnik.description: primero en añadir una configuración de PostCSS o Browserslist
|
||
§ plugin.person_achievements.github.title: Ama de llaves
|
||
§ plugin.person_achievements.github.description: además del trabajo principal, escribe un proyecto personal
|
||
§ plugin.person_achievements.mackBook.title: Raf de vainilla con leche de coco
|
||
§ plugin.person_achievements.mackBook.description: usa un MacBook para trabajar
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.title: Ajetreado de última hora
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.description: el mayor aumento del número de commits antes de una versión
|
||
§ plugin.person_achievements.ipInEmail.title: LAN-man
|
||
§ plugin.person_achievements.ipInEmail.description: usó una dirección IP local en lugar del correo electrónico
|
||
§ plugin.person_achievements.languageErrors.title: Depende del fabric, depende de los details
|
||
§ plugin.person_achievements.languageErrors.description: usó reglas de ortografía o puntuación de otro idioma
|
||
`,fr:`
|
||
§ plugin.person_achievements.sidebar: Réalisations
|
||
§ plugin.person_achievements.page.positive: Positives
|
||
§ plugin.person_achievements.page.normal: Neutres
|
||
§ plugin.person_achievements.page.negative: Négatives
|
||
§ plugin.person_achievements.page.publicity: Spéciales
|
||
§ plugin.person_achievements.page.commitsWithBeautifulTaskNumbers: Beaux numéros de tâches
|
||
§ plugin.person_achievements.page.description: Plus un employé accumule de réalisations négatives, plus la situation a des chances d’être atypique. Il peut être opportun de modifier son rythme de travail, ses tâches ou son reporting. Il convient de s’entretenir avec lui et d’identifier les problèmes qui gênent son travail.
|
||
§ plugin.person_achievements.gets.title: Médailles pour les numéros de tâches :
|
||
§ plugin.person_achievements.gets.description: Une médaille est attribuée si l’utilisateur est le premier à laisser un commit sur une tâche dont le numéro est « beau ».
|
||
§ plugin.person_achievements.commitsAfter1500.title: Oiseau de nuit
|
||
§ plugin.person_achievements.commitsAfter1500.description: 70 % des commits après 15:00
|
||
§ plugin.person_achievements.commitsBefore1500.title: Lève-tôt
|
||
§ plugin.person_achievements.commitsBefore1500.description: 70 % des commits avant le déjeuner
|
||
§ plugin.person_achievements.workEveryTime.title: Serviteur de Dieu
|
||
§ plugin.person_achievements.workEveryTime.description: il y a un commit pour chaque heure de la journée
|
||
§ plugin.person_achievements.workNotWork.title: Tir à blanc
|
||
§ plugin.person_achievements.workNotWork.description: il y a des commits, mais aucune tâche close
|
||
§ plugin.person_achievements.userNotWork.title: De passage
|
||
§ plugin.person_achievements.userNotWork.description: ce n’est pas son projet principal
|
||
§ plugin.person_achievements.userIsDied.title: Âme morte
|
||
§ plugin.person_achievements.userIsDied.description: a travaillé, mais a quitté l’entreprise
|
||
§ plugin.person_achievements.lessTasks.title: Entré et sorti
|
||
§ plugin.person_achievements.lessTasks.description: le plus petit nombre de tâches closes
|
||
§ plugin.person_achievements.moreTasks.title: Bravo, dit papa
|
||
§ plugin.person_achievements.moreTasks.description: le plus grand nombre de tâches closes
|
||
§ plugin.person_achievements.everyMessageLong.title: Maître de l’éloquence
|
||
§ plugin.person_achievements.everyMessageLong.description: de façon constante, les commit messages les plus longs
|
||
§ plugin.person_achievements.everyMessageShort.title: Langue trop bien pendue
|
||
§ plugin.person_achievements.everyMessageShort.description: de façon constante, les commit messages les plus courts
|
||
§ plugin.person_achievements.shortestName.title: La taille n’est pas tout
|
||
§ plugin.person_achievements.shortestName.description: le nom le plus court
|
||
§ plugin.person_achievements.longestName.title: Azim Aziz Il Am Qadir Imran II
|
||
§ plugin.person_achievements.longestName.description: le nom le plus long
|
||
§ plugin.person_achievements.moreCommits.title: Maître des sauvegardes
|
||
§ plugin.person_achievements.moreCommits.description: le plus grand nombre de commits
|
||
§ plugin.person_achievements.lessCommits.title: Rare mais précis
|
||
§ plugin.person_achievements.lessCommits.description: le plus petit nombre de commits
|
||
§ plugin.person_achievements.oneCommitOneTask.title: En plein dans le mille
|
||
§ plugin.person_achievements.oneCommitOneTask.description: en moyenne un commit par tâche
|
||
§ plugin.person_achievements.moreLazyDays.title: Avec vous en esprit
|
||
§ plugin.person_achievements.moreLazyDays.description: le plus grand nombre de jours sans commits
|
||
§ plugin.person_achievements.lessLazyDays.title: Papa Carlo
|
||
§ plugin.person_achievements.lessLazyDays.description: le plus petit nombre de jours sans commits
|
||
§ plugin.person_achievements.zeroLazyDays.title: Pas le moindre écart
|
||
§ plugin.person_achievements.zeroLazyDays.description: pas un seul jour sans commits
|
||
§ plugin.person_achievements.moreWorkDays.title: Employé précieux
|
||
§ plugin.person_achievements.moreWorkDays.description: le plus grand nombre de jours ouvrés
|
||
§ plugin.person_achievements.moreScopes.title: Startupper
|
||
§ plugin.person_achievements.moreScopes.description: a créé le plus grand nombre de fonctionnalités
|
||
§ plugin.person_achievements.lessScopes.title: Blanc-bec
|
||
§ plugin.person_achievements.lessScopes.description: a créé le plus petit nombre de fonctionnalités
|
||
§ plugin.person_achievements.moreDaysForTask.title: Escargot sur la pente
|
||
§ plugin.person_achievements.moreDaysForTask.description: le travail sur les tâches avance plus lentement que chez les autres
|
||
§ plugin.person_achievements.more2DaysForTask.title: So slow
|
||
§ plugin.person_achievements.more2DaysForTask.description: plus de deux jours par tâche
|
||
§ plugin.person_achievements.more3YearsInProject.title: Ancien
|
||
§ plugin.person_achievements.more3YearsInProject.description: plus de trois ans sur le projet
|
||
§ plugin.person_achievements.lessDaysInProject.title: Qui est-ce ?
|
||
§ plugin.person_achievements.lessDaysInProject.description: le plus petit nombre de jours sur le projet
|
||
§ plugin.person_achievements.lessDaysForTask.title: Tir rapide
|
||
§ plugin.person_achievements.lessDaysForTask.description: une tâche prend moins d’un jour
|
||
§ plugin.person_achievements.adam.title: Adam
|
||
§ plugin.person_achievements.adam.description: le premier employé stable sur le projet
|
||
§ plugin.person_achievements.more90DaysInProject.title: Bienvenue
|
||
§ plugin.person_achievements.more90DaysInProject.description: n’a pas été licencié pendant la période d’essai
|
||
§ plugin.person_achievements.more365DaysInProject.title: Premier anniversaire
|
||
§ plugin.person_achievements.more365DaysInProject.description: a travaillé un an sur le projet
|
||
§ plugin.person_achievements.more666DaysInProject.title: Diable
|
||
§ plugin.person_achievements.more666DaysInProject.description: a travaillé 666 jours sur le projet
|
||
§ plugin.person_achievements.more777DaysInProject.title: Sept chanceux
|
||
§ plugin.person_achievements.more777DaysInProject.description: a travaillé 777 jours sur le projet
|
||
§ plugin.person_achievements.moreDaysInProject.title: Partie de l’équipage, partie du navire
|
||
§ plugin.person_achievements.moreDaysInProject.description: le plus grand nombre de jours sur le projet
|
||
§ plugin.person_achievements.moreRefactoring.title: Rédacteur en chef
|
||
§ plugin.person_achievements.moreRefactoring.description: a ajouté le plus grand nombre de libellés « refactoring »
|
||
§ plugin.person_achievements.longestMessage.title: Parler n’est pas cher
|
||
§ plugin.person_achievements.longestMessage.description: le commit message le plus long de tous les temps
|
||
§ plugin.person_achievements.moreTasksInDay.title: Speed Racer
|
||
§ plugin.person_achievements.moreTasksInDay.description: record du nombre de tâches closes en un jour
|
||
§ plugin.person_achievements.hasCommitFrom0to7.title: Garde de nuit
|
||
§ plugin.person_achievements.hasCommitFrom0to7.description: il y a un commit pour chaque heure de la nuit
|
||
§ plugin.person_achievements.noCommitOnDay.title: Pause technique
|
||
§ plugin.person_achievements.noCommitOnDay.description: il existe une heure et un jour précis du temps de travail où aucun commit n’est jamais fait
|
||
§ plugin.person_achievements.hasCommitEveryTime.title: Mort au travail
|
||
§ plugin.person_achievements.hasCommitEveryTime.description: il y a un commit pour une heure de chaque jour (y compris les week-ends)
|
||
§ plugin.person_achievements.commitsAfter1800.title: Le temps du travail
|
||
§ plugin.person_achievements.commitsAfter1800.description: pas un seul commit après 18:00
|
||
§ plugin.person_achievements.moreFix.title: Bug hunter
|
||
§ plugin.person_achievements.moreFix.description: le plus grand nombre de bugs clos
|
||
§ plugin.person_achievements.lessWorkDays.title: Continuez sans moi
|
||
§ plugin.person_achievements.lessWorkDays.description: le plus petit nombre de jours ouvrés
|
||
§ plugin.person_achievements.moreCreateCode.title: Créateur
|
||
§ plugin.person_achievements.moreCreateCode.description: a tendance à ajouter du code plus que les autres
|
||
§ plugin.person_achievements.moreRemoveCode.title: Destructeur
|
||
§ plugin.person_achievements.moreRemoveCode.description: a tendance à supprimer du code plus que les autres
|
||
§ plugin.person_achievements.moreChangeCode.title: Réformateur
|
||
§ plugin.person_achievements.moreChangeCode.description: a tendance à modifier du code plus que les autres
|
||
§ plugin.person_achievements.moreStyle.title: Police de la mode
|
||
§ plugin.person_achievements.moreStyle.description: a tendance à modifier le CSS plus que les autres
|
||
§ plugin.person_achievements.moreOnHoliday.title: Pas de vie
|
||
§ plugin.person_achievements.moreOnHoliday.description: relativement beaucoup de commits hors des heures de travail
|
||
§ plugin.person_achievements.morePRMerge.title: La douane donne le feu vert
|
||
§ plugin.person_achievements.morePRMerge.description: appuie sur le bouton « Merge » des PR plus souvent que les autres
|
||
§ plugin.person_achievements.longWaitPR.title: On le fusionnera demain, c’est sûr
|
||
§ plugin.person_achievements.longWaitPR.description: a créé un PR resté en revue plus d’un mois
|
||
§ plugin.person_achievements.moreLongWaitPR.title: Il y a bien longtemps, dans une galaxie lointaine
|
||
§ plugin.person_achievements.moreLongWaitPR.description: a créé un PR resté en revue le plus longtemps
|
||
§ plugin.person_achievements.oneExtension.title: Une armée à soi seul
|
||
§ plugin.person_achievements.oneExtension.description: seule cette personne travaille avec les fichiers d’une certaine extension
|
||
§ plugin.person_achievements.fileRush.title: Zerg Rush
|
||
§ plugin.person_achievements.fileRush.description: a créé plus de fichiers dans le projet que quiconque
|
||
§ plugin.person_achievements.moreLintHint.title: Grammar Nazi
|
||
§ plugin.person_achievements.moreLintHint.description: a créé ou modifié plus de règles de contrôle automatique que quiconque
|
||
§ plugin.person_achievements.moreReadMe.title: Chroniqueur
|
||
§ plugin.person_achievements.moreReadMe.description: a créé ou modifié plus de fichiers MD que quiconque
|
||
§ plugin.person_achievements.moreDevOps.title: DevOps
|
||
§ plugin.person_achievements.moreDevOps.description: a créé ou modifié plus de fichiers CI/CD que quiconque
|
||
§ plugin.person_achievements.moreTests.title: Testeur
|
||
§ plugin.person_achievements.moreTests.description: a créé ou modifié plus de fichiers de tests que quiconque
|
||
§ plugin.person_achievements.allRelease.title: Full house
|
||
§ plugin.person_achievements.allRelease.description: il existe une livraison constituée uniquement de ses tâches
|
||
§ plugin.person_achievements.firstCommit.title: Premier arrivé, premier servi
|
||
§ plugin.person_achievements.firstCommit.description: premier commit sur le projet
|
||
§ plugin.person_achievements.lastCommit.title: J’ai terminé
|
||
§ plugin.person_achievements.lastCommit.description: dernier commit sur le projet
|
||
§ plugin.person_achievements.firstLastCommit.title: Du début à la fin
|
||
§ plugin.person_achievements.firstLastCommit.description: premier et dernier commit sur le projet
|
||
§ plugin.person_achievements.longFilePath.title: Greniers de la patrie
|
||
§ plugin.person_achievements.longFilePath.description: premier à créer un fichier avec l’imbrication la plus profonde
|
||
§ plugin.person_achievements.longFileName.title: La taille compte
|
||
§ plugin.person_achievements.longFileName.description: a créé un fichier avec le nom le plus long
|
||
§ plugin.person_achievements.workOnWeekends.title: Le travail n’est pas une promenade
|
||
§ plugin.person_achievements.workOnWeekends.description: a travaillé au moins une fois le week-end
|
||
§ plugin.person_achievements.removeCreateFile.title: A déterré l’hôtesse de l’air
|
||
§ plugin.person_achievements.removeCreateFile.description: a restauré un fichier supprimé
|
||
§ plugin.person_achievements.renameFile.title: Astana Nur-Sultan Astana
|
||
§ plugin.person_achievements.renameFile.description: a renommé un fichier dans un sens puis dans l’autre
|
||
§ plugin.person_achievements.longTask.title: Ça a l’air facile
|
||
§ plugin.person_achievements.longTask.description: a travaillé plus de trois mois sur une tâche
|
||
§ plugin.person_achievements.haveNotEmail.title: Facteur Pechkin
|
||
§ plugin.person_achievements.haveNotEmail.description: n’a pas renseigné le champ e-mail dans git config
|
||
§ plugin.person_achievements.moreAddedFolders.title: Directeur
|
||
§ plugin.person_achievements.moreAddedFolders.description: a créé plus de répertoires que quiconque
|
||
§ plugin.person_achievements.horoscope1.title: Mercure rétrograde en Capricorne
|
||
§ plugin.person_achievements.horoscope2.title: Mercure rétrograde en Verseau
|
||
§ plugin.person_achievements.horoscope3.title: Mercure rétrograde en Poissons
|
||
§ plugin.person_achievements.horoscope4.title: Mercure rétrograde en Bélier
|
||
§ plugin.person_achievements.horoscope5.title: Mercure rétrograde en Taureau
|
||
§ plugin.person_achievements.horoscope6.title: Mercure rétrograde en Gémeaux
|
||
§ plugin.person_achievements.horoscope7.title: Mercure rétrograde en Cancer
|
||
§ plugin.person_achievements.horoscope8.title: Mercure rétrograde en Lion
|
||
§ plugin.person_achievements.horoscope9.title: Mercure rétrograde en Vierge
|
||
§ plugin.person_achievements.horoscope10.title: Mercure rétrograde en Balance
|
||
§ plugin.person_achievements.horoscope11.title: Mercure rétrograde en Scorpion
|
||
§ plugin.person_achievements.horoscope12.title: Mercure rétrograde en Sagittaire
|
||
§ plugin.person_achievements.horoscope1.description: selon le mois du premier commit
|
||
§ plugin.person_achievements.horoscope2.description: selon le mois du premier commit
|
||
§ plugin.person_achievements.horoscope3.description: selon le mois du premier commit
|
||
§ plugin.person_achievements.horoscope4.description: selon le mois du premier commit
|
||
§ plugin.person_achievements.horoscope5.description: selon le mois du premier commit
|
||
§ plugin.person_achievements.horoscope6.description: selon le mois du premier commit
|
||
§ plugin.person_achievements.horoscope7.description: selon le mois du premier commit
|
||
§ plugin.person_achievements.horoscope8.description: selon le mois du premier commit
|
||
§ plugin.person_achievements.horoscope9.description: selon le mois du premier commit
|
||
§ plugin.person_achievements.horoscope10.description: selon le mois du premier commit
|
||
§ plugin.person_achievements.horoscope11.description: selon le mois du premier commit
|
||
§ plugin.person_achievements.horoscope12.description: selon le mois du premier commit
|
||
§ plugin.person_achievements.moreChangeTimeZone.title: Aaaaa-viasales
|
||
§ plugin.person_achievements.moreChangeTimeZone.description: a changé de lieu plus que quiconque
|
||
§ plugin.person_achievements.publicitySitnik.title: Sitnik approuve
|
||
§ plugin.person_achievements.publicitySitnik.description: premier à ajouter une configuration PostCSS ou Browserslist
|
||
§ plugin.person_achievements.github.title: Gouvernante
|
||
§ plugin.person_achievements.github.description: en plus du travail principal, développe un projet personnel
|
||
§ plugin.person_achievements.mackBook.title: Raf vanille au lait de coco
|
||
§ plugin.person_achievements.mackBook.description: utilise un MacBook pour travailler
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.title: Agité de dernière minute
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.description: la plus forte hausse du nombre de commits avant une livraison
|
||
§ plugin.person_achievements.ipInEmail.title: LAN-man
|
||
§ plugin.person_achievements.ipInEmail.description: a utilisé une adresse IP locale à la place de l’e-mail
|
||
§ plugin.person_achievements.languageErrors.title: Cela dépend du fabric, cela dépend des details
|
||
§ plugin.person_achievements.languageErrors.description: a utilisé des règles d’orthographe ou de ponctuation d’une autre langue
|
||
`,he:`
|
||
§ plugin.person_achievements.sidebar: הישגים
|
||
§ plugin.person_achievements.page.positive: חיוביים
|
||
§ plugin.person_achievements.page.normal: ניטרליים
|
||
§ plugin.person_achievements.page.negative: שליליים
|
||
§ plugin.person_achievements.page.publicity: מיוחדים
|
||
§ plugin.person_achievements.page.commitsWithBeautifulTaskNumbers: מספרי משימות יפים
|
||
§ plugin.person_achievements.page.description: ככל שלעובד יש יותר הישגים שליליים, כך גדל הסיכוי שהמצב אינו שגרתי. ייתכן שכדאי לשנות את משטר העבודה, המשימות או הדיווח. יש לדבר איתו ולברר אילו בעיות מפריעות לעבודתו.
|
||
§ plugin.person_achievements.gets.title: מדליות על מספרי משימות:
|
||
§ plugin.person_achievements.gets.description: המדליה מוענקת אם המשתמש הוא הראשון שמשאיר commit למשימה עם מספר «יפה».
|
||
§ plugin.person_achievements.commitsAfter1500.title: ינשוף לילה
|
||
§ plugin.person_achievements.commitsAfter1500.description: 70% מה-commits אחרי 15:00
|
||
§ plugin.person_achievements.commitsBefore1500.title: ציפור משכימה
|
||
§ plugin.person_achievements.commitsBefore1500.description: 70% מה-commits לפני ארוחת הצהריים
|
||
§ plugin.person_achievements.workEveryTime.title: עבד האל
|
||
§ plugin.person_achievements.workEveryTime.description: יש commit בכל שעה ביממה
|
||
§ plugin.person_achievements.workNotWork.title: ירי סרק
|
||
§ plugin.person_achievements.workNotWork.description: יש commits, אך אין משימות סגורות
|
||
§ plugin.person_achievements.userNotWork.title: עובר אורח
|
||
§ plugin.person_achievements.userNotWork.description: זה אינו הפרויקט העיקרי שלו
|
||
§ plugin.person_achievements.userIsDied.title: נשמה מתה
|
||
§ plugin.person_achievements.userIsDied.description: עבד, אך עזב את החברה
|
||
§ plugin.person_achievements.lessTasks.title: נכנס ויצא
|
||
§ plugin.person_achievements.lessTasks.description: המספר הקטן ביותר של משימות סגורות
|
||
§ plugin.person_achievements.moreTasks.title: כל הכבוד, אומר אבא
|
||
§ plugin.person_achievements.moreTasks.description: המספר הגדול ביותר של משימות סגורות
|
||
§ plugin.person_achievements.everyMessageLong.title: אמן הרהיטות
|
||
§ plugin.person_achievements.everyMessageLong.description: באופן יציב, ה-commit messages הארוכים ביותר
|
||
§ plugin.person_achievements.everyMessageShort.title: פה גדול
|
||
§ plugin.person_achievements.everyMessageShort.description: באופן יציב, ה-commit messages הקצרים ביותר
|
||
§ plugin.person_achievements.shortestName.title: הגודל אינו הכול
|
||
§ plugin.person_achievements.shortestName.description: השם הקצר ביותר
|
||
§ plugin.person_achievements.longestName.title: Azim Aziz Il Am Qadir Imran II
|
||
§ plugin.person_achievements.longestName.description: השם הארוך ביותר
|
||
§ plugin.person_achievements.moreCommits.title: אמן הגיבויים
|
||
§ plugin.person_achievements.moreCommits.description: המספר הגדול ביותר של commits
|
||
§ plugin.person_achievements.lessCommits.title: נדיר אך מדויק
|
||
§ plugin.person_achievements.lessCommits.description: המספר הקטן ביותר של commits
|
||
§ plugin.person_achievements.oneCommitOneTask.title: בול
|
||
§ plugin.person_achievements.oneCommitOneTask.description: בממוצע commit אחד למשימה
|
||
§ plugin.person_achievements.moreLazyDays.title: ברוח איתכם
|
||
§ plugin.person_achievements.moreLazyDays.description: המספר הגדול ביותר של ימים ללא commits
|
||
§ plugin.person_achievements.lessLazyDays.title: Papa Carlo
|
||
§ plugin.person_achievements.lessLazyDays.description: המספר הקטן ביותר של ימים ללא commits
|
||
§ plugin.person_achievements.zeroLazyDays.title: אף לא פער אחד
|
||
§ plugin.person_achievements.zeroLazyDays.description: אף לא יום אחד ללא commits
|
||
§ plugin.person_achievements.moreWorkDays.title: עובד יקר ערך
|
||
§ plugin.person_achievements.moreWorkDays.description: המספר הגדול ביותר של ימי עבודה
|
||
§ plugin.person_achievements.moreScopes.title: יזם סטארט-אפ
|
||
§ plugin.person_achievements.moreScopes.description: יצר את המספר הגדול ביותר של יכולות
|
||
§ plugin.person_achievements.lessScopes.title: טירון
|
||
§ plugin.person_achievements.lessScopes.description: יצר את המספר הקטן ביותר של יכולות
|
||
§ plugin.person_achievements.moreDaysForTask.title: חילזון במדרון
|
||
§ plugin.person_achievements.moreDaysForTask.description: העבודה על משימות איטית יותר מאשר אצל האחרים
|
||
§ plugin.person_achievements.more2DaysForTask.title: So slow
|
||
§ plugin.person_achievements.more2DaysForTask.description: יותר מיומיים למשימה
|
||
§ plugin.person_achievements.more3YearsInProject.title: ותיק
|
||
§ plugin.person_achievements.more3YearsInProject.description: יותר משלוש שנים בפרויקט
|
||
§ plugin.person_achievements.lessDaysInProject.title: מי זה?
|
||
§ plugin.person_achievements.lessDaysInProject.description: המספר הקטן ביותר של ימים בפרויקט
|
||
§ plugin.person_achievements.lessDaysForTask.title: ירי מהיר
|
||
§ plugin.person_achievements.lessDaysForTask.description: משימה אחת אורכת פחות מיום
|
||
§ plugin.person_achievements.adam.title: אדם
|
||
§ plugin.person_achievements.adam.description: העובד היציב הראשון בפרויקט
|
||
§ plugin.person_achievements.more90DaysInProject.title: ברוכים הבאים
|
||
§ plugin.person_achievements.more90DaysInProject.description: לא פוטר בתקופת הניסיון
|
||
§ plugin.person_achievements.more365DaysInProject.title: בן שנה
|
||
§ plugin.person_achievements.more365DaysInProject.description: עבד שנה בפרויקט
|
||
§ plugin.person_achievements.more666DaysInProject.title: שטן
|
||
§ plugin.person_achievements.more666DaysInProject.description: עבד 666 ימים בפרויקט
|
||
§ plugin.person_achievements.more777DaysInProject.title: שביעיות בר מזל
|
||
§ plugin.person_achievements.more777DaysInProject.description: עבד 777 ימים בפרויקט
|
||
§ plugin.person_achievements.moreDaysInProject.title: חלק מהצוות, חלק מהספינה
|
||
§ plugin.person_achievements.moreDaysInProject.description: המספר הגדול ביותר של ימים בפרויקט
|
||
§ plugin.person_achievements.moreRefactoring.title: עורך לשוני
|
||
§ plugin.person_achievements.moreRefactoring.description: הוסיף את המספר הגדול ביותר של תוויות «refactoring»
|
||
§ plugin.person_achievements.longestMessage.title: דיבור זול
|
||
§ plugin.person_achievements.longestMessage.description: ה-commit message הארוך ביותר בכל הזמנים
|
||
§ plugin.person_achievements.moreTasksInDay.title: Speed Racer
|
||
§ plugin.person_achievements.moreTasksInDay.description: שיא במספר המשימות הסגורות ביום
|
||
§ plugin.person_achievements.hasCommitFrom0to7.title: משמר הלילה
|
||
§ plugin.person_achievements.hasCommitFrom0to7.description: יש commit בכל שעת לילה
|
||
§ plugin.person_achievements.noCommitOnDay.title: הפסקה טכנית
|
||
§ plugin.person_achievements.noCommitOnDay.description: יש שעה ויום מסוימים בשעות העבודה שבהם לעולם לא נעשה commit
|
||
§ plugin.person_achievements.hasCommitEveryTime.title: מת בעבודה
|
||
§ plugin.person_achievements.hasCommitEveryTime.description: יש commit בשעה של כל יום (כולל סופי שבוע)
|
||
§ plugin.person_achievements.commitsAfter1800.title: זמן לעבודה
|
||
§ plugin.person_achievements.commitsAfter1800.description: אף לא commit אחד אחרי 18:00
|
||
§ plugin.person_achievements.moreFix.title: Bug hunter
|
||
§ plugin.person_achievements.moreFix.description: המספר הגדול ביותר של באגים סגורים
|
||
§ plugin.person_achievements.lessWorkDays.title: תמשיכו בלעדיי
|
||
§ plugin.person_achievements.lessWorkDays.description: המספר הקטן ביותר של ימי עבודה
|
||
§ plugin.person_achievements.moreCreateCode.title: יוצר
|
||
§ plugin.person_achievements.moreCreateCode.description: נוטה להוסיף קוד יותר מהאחרים
|
||
§ plugin.person_achievements.moreRemoveCode.title: הורס
|
||
§ plugin.person_achievements.moreRemoveCode.description: נוטה למחוק קוד יותר מהאחרים
|
||
§ plugin.person_achievements.moreChangeCode.title: רפורמטור
|
||
§ plugin.person_achievements.moreChangeCode.description: נוטה לשנות קוד יותר מהאחרים
|
||
§ plugin.person_achievements.moreStyle.title: משטרת האופנה
|
||
§ plugin.person_achievements.moreStyle.description: נוטה לשנות CSS יותר מהאחרים
|
||
§ plugin.person_achievements.moreOnHoliday.title: אין חיים
|
||
§ plugin.person_achievements.moreOnHoliday.description: יחסית הרבה commits מחוץ לשעות העבודה
|
||
§ plugin.person_achievements.morePRMerge.title: המכס מאשר
|
||
§ plugin.person_achievements.morePRMerge.description: לוחץ על כפתור «Merge» של PR בתדירות גבוהה יותר מהאחרים
|
||
§ plugin.person_achievements.longWaitPR.title: מחר בטוח נמזג
|
||
§ plugin.person_achievements.longWaitPR.description: יצר PR שנשאר בסקירה יותר מחודש
|
||
§ plugin.person_achievements.moreLongWaitPR.title: לפני זמן רב, בגלקסיה רחוקה
|
||
§ plugin.person_achievements.moreLongWaitPR.description: יצר PR שנשאר בסקירה הזמן הארוך ביותר
|
||
§ plugin.person_achievements.oneExtension.title: צבא של אדם אחד
|
||
§ plugin.person_achievements.oneExtension.description: רק הוא עובד עם קבצים בעלי סיומת מסוימת
|
||
§ plugin.person_achievements.fileRush.title: Zerg Rush
|
||
§ plugin.person_achievements.fileRush.description: יצר יותר קבצים בפרויקט מכל אחד אחר
|
||
§ plugin.person_achievements.moreLintHint.title: Grammar Nazi
|
||
§ plugin.person_achievements.moreLintHint.description: יצר או שינה כללי בדיקה אוטומטית יותר מכל אחד אחר
|
||
§ plugin.person_achievements.moreReadMe.title: כרוניקאי
|
||
§ plugin.person_achievements.moreReadMe.description: יצר או שינה קובצי MD יותר מכל אחד אחר
|
||
§ plugin.person_achievements.moreDevOps.title: DevOps
|
||
§ plugin.person_achievements.moreDevOps.description: יצר או שינה קובצי CI/CD יותר מכל אחד אחר
|
||
§ plugin.person_achievements.moreTests.title: בודק
|
||
§ plugin.person_achievements.moreTests.description: יצר או שינה קובצי בדיקות יותר מכל אחד אחר
|
||
§ plugin.person_achievements.allRelease.title: Full house
|
||
§ plugin.person_achievements.allRelease.description: יש גרסה שנבנתה רק ממשימותיו
|
||
§ plugin.person_achievements.firstCommit.title: הראשון זוכה
|
||
§ plugin.person_achievements.firstCommit.description: ה-commit הראשון בפרויקט
|
||
§ plugin.person_achievements.lastCommit.title: סיימתי
|
||
§ plugin.person_achievements.lastCommit.description: ה-commit האחרון בפרויקט
|
||
§ plugin.person_achievements.firstLastCommit.title: מההתחלה ועד הסוף
|
||
§ plugin.person_achievements.firstLastCommit.description: ה-commit הראשון והאחרון בפרויקט
|
||
§ plugin.person_achievements.longFilePath.title: ממגורות המולדת
|
||
§ plugin.person_achievements.longFilePath.description: הראשון שיצר קובץ עם הקינון העמוק ביותר
|
||
§ plugin.person_achievements.longFileName.title: הגודל חשוב
|
||
§ plugin.person_achievements.longFileName.description: יצר קובץ עם השם הארוך ביותר
|
||
§ plugin.person_achievements.workOnWeekends.title: עבודה אינה טיול
|
||
§ plugin.person_achievements.workOnWeekends.description: עבד בסוף שבוע לפחות פעם אחת
|
||
§ plugin.person_achievements.removeCreateFile.title: חפר את הדיילת
|
||
§ plugin.person_achievements.removeCreateFile.description: שחזר קובץ שנמחק
|
||
§ plugin.person_achievements.renameFile.title: Astana Nur-Sultan Astana
|
||
§ plugin.person_achievements.renameFile.description: שינה שם של קובץ הלוך ושוב
|
||
§ plugin.person_achievements.longTask.title: נראה קל
|
||
§ plugin.person_achievements.longTask.description: עבד על משימה יותר משלושה חודשים
|
||
§ plugin.person_achievements.haveNotEmail.title: דוור Pechkin
|
||
§ plugin.person_achievements.haveNotEmail.description: לא מילא את שדה e-mail ב-git config
|
||
§ plugin.person_achievements.moreAddedFolders.title: מנהל
|
||
§ plugin.person_achievements.moreAddedFolders.description: יצר יותר ספריות מכל אחד אחר
|
||
§ plugin.person_achievements.horoscope1.title: כוכב חמה נסוג בגדי
|
||
§ plugin.person_achievements.horoscope2.title: כוכב חמה נסוג בדלי
|
||
§ plugin.person_achievements.horoscope3.title: כוכב חמה נסוג בדגים
|
||
§ plugin.person_achievements.horoscope4.title: כוכב חמה נסוג בטלה
|
||
§ plugin.person_achievements.horoscope5.title: כוכב חמה נסוג בשור
|
||
§ plugin.person_achievements.horoscope6.title: כוכב חמה נסוג בתאומים
|
||
§ plugin.person_achievements.horoscope7.title: כוכב חמה נסוג בסרטן
|
||
§ plugin.person_achievements.horoscope8.title: כוכב חמה נסוג באריה
|
||
§ plugin.person_achievements.horoscope9.title: כוכב חמה נסוג בבתולה
|
||
§ plugin.person_achievements.horoscope10.title: כוכב חמה נסוג במאזניים
|
||
§ plugin.person_achievements.horoscope11.title: כוכב חמה נסוג בעקרב
|
||
§ plugin.person_achievements.horoscope12.title: כוכב חמה נסוג בקשת
|
||
§ plugin.person_achievements.horoscope1.description: לפי חודש ה-commit הראשון
|
||
§ plugin.person_achievements.horoscope2.description: לפי חודש ה-commit הראשון
|
||
§ plugin.person_achievements.horoscope3.description: לפי חודש ה-commit הראשון
|
||
§ plugin.person_achievements.horoscope4.description: לפי חודש ה-commit הראשון
|
||
§ plugin.person_achievements.horoscope5.description: לפי חודש ה-commit הראשון
|
||
§ plugin.person_achievements.horoscope6.description: לפי חודש ה-commit הראשון
|
||
§ plugin.person_achievements.horoscope7.description: לפי חודש ה-commit הראשון
|
||
§ plugin.person_achievements.horoscope8.description: לפי חודש ה-commit הראשון
|
||
§ plugin.person_achievements.horoscope9.description: לפי חודש ה-commit הראשון
|
||
§ plugin.person_achievements.horoscope10.description: לפי חודש ה-commit הראשון
|
||
§ plugin.person_achievements.horoscope11.description: לפי חודש ה-commit הראשון
|
||
§ plugin.person_achievements.horoscope12.description: לפי חודש ה-commit הראשון
|
||
§ plugin.person_achievements.moreChangeTimeZone.title: Aaaaa-viasales
|
||
§ plugin.person_achievements.moreChangeTimeZone.description: שינה מיקום יותר מכל אחד אחר
|
||
§ plugin.person_achievements.publicitySitnik.title: Sitnik מאשר
|
||
§ plugin.person_achievements.publicitySitnik.description: הראשון שהוסיף תצורת PostCSS או Browserslist
|
||
§ plugin.person_achievements.github.title: עוזרת בית
|
||
§ plugin.person_achievements.github.description: מלבד העבודה העיקרית כותב פרויקט ביתי
|
||
§ plugin.person_achievements.mackBook.title: רף וניל בחלב קוקוס
|
||
§ plugin.person_achievements.mackBook.description: משתמש ב-MacBook לעבודה
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.title: בהול ברגע האחרון
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.description: הגידול הגדול ביותר במספר ה-commits לפני גרסה
|
||
§ plugin.person_achievements.ipInEmail.title: LAN-man
|
||
§ plugin.person_achievements.ipInEmail.description: השתמש בכתובת IP מקומית במקום בדוא"ל
|
||
§ plugin.person_achievements.languageErrors.title: תלוי ב-fabric, תלוי ב-details
|
||
§ plugin.person_achievements.languageErrors.description: השתמש בכללי איות או פיסוק של שפה אחרת
|
||
`,hi:`
|
||
§ plugin.person_achievements.sidebar: उपलब्धियाँ
|
||
§ plugin.person_achievements.page.positive: सकारात्मक
|
||
§ plugin.person_achievements.page.normal: तटस्थ
|
||
§ plugin.person_achievements.page.negative: नकारात्मक
|
||
§ plugin.person_achievements.page.publicity: विशेष
|
||
§ plugin.person_achievements.page.commitsWithBeautifulTaskNumbers: सुंदर कार्य संख्याएँ
|
||
§ plugin.person_achievements.page.description: कर्मचारी के पास जितनी अधिक नकारात्मक उपलब्धियाँ होती हैं, स्थिति के असामान्य होने की संभावना उतनी ही अधिक होती है। संभव है कि कार्य-शैली, कार्यों या रिपोर्टिंग को बदलना उचित हो। उनसे बात करनी चाहिए और पता लगाना चाहिए कि कौन-सी समस्याएँ उनके कार्य में बाधा डालती हैं।
|
||
§ plugin.person_achievements.gets.title: कार्य संख्याओं के पदक:
|
||
§ plugin.person_achievements.gets.description: पदक तब दिया जाता है जब उपयोगकर्ता «सुंदर» संख्या वाले कार्य पर सबसे पहले commit छोड़ता है।
|
||
§ plugin.person_achievements.commitsAfter1500.title: रात का उल्लू
|
||
§ plugin.person_achievements.commitsAfter1500.description: 70% commits 15:00 के बाद
|
||
§ plugin.person_achievements.commitsBefore1500.title: सुबह का पक्षी
|
||
§ plugin.person_achievements.commitsBefore1500.description: 70% commits दोपहर के भोजन से पहले
|
||
§ plugin.person_achievements.workEveryTime.title: ईश्वर का सेवक
|
||
§ plugin.person_achievements.workEveryTime.description: दिन के प्रत्येक घंटे पर commit है
|
||
§ plugin.person_achievements.workNotWork.title: खाली गोली
|
||
§ plugin.person_achievements.workNotWork.description: commits हैं, पर बंद कार्य नहीं हैं
|
||
§ plugin.person_achievements.userNotWork.title: राहगीर
|
||
§ plugin.person_achievements.userNotWork.description: यह उनका मुख्य प्रोजेक्ट नहीं है
|
||
§ plugin.person_achievements.userIsDied.title: मृत आत्मा
|
||
§ plugin.person_achievements.userIsDied.description: काम किया, पर कंपनी छोड़ दी
|
||
§ plugin.person_achievements.lessTasks.title: आया और चला गया
|
||
§ plugin.person_achievements.lessTasks.description: सबसे कम बंद कार्य
|
||
§ plugin.person_achievements.moreTasks.title: बाप कहता है शाबाश
|
||
§ plugin.person_achievements.moreTasks.description: सबसे अधिक बंद कार्य
|
||
§ plugin.person_achievements.everyMessageLong.title: वाक्पटुता के स्वामी
|
||
§ plugin.person_achievements.everyMessageLong.description: लगातार सबसे लंबे commit messages
|
||
§ plugin.person_achievements.everyMessageShort.title: ढीली ज़ुबान
|
||
§ plugin.person_achievements.everyMessageShort.description: लगातार सबसे छोटे commit messages
|
||
§ plugin.person_achievements.shortestName.title: आकार मायने नहीं रखता
|
||
§ plugin.person_achievements.shortestName.description: सबसे छोटा नाम
|
||
§ plugin.person_achievements.longestName.title: Azim Aziz Il Am Qadir Imran II
|
||
§ plugin.person_achievements.longestName.description: सबसे लंबा नाम
|
||
§ plugin.person_achievements.moreCommits.title: बैकअप के स्वामी
|
||
§ plugin.person_achievements.moreCommits.description: सबसे अधिक commits
|
||
§ plugin.person_achievements.lessCommits.title: कम पर सटीक
|
||
§ plugin.person_achievements.lessCommits.description: सबसे कम commits
|
||
§ plugin.person_achievements.oneCommitOneTask.title: निशाने पर
|
||
§ plugin.person_achievements.oneCommitOneTask.description: औसत रूप से प्रति कार्य एक commit
|
||
§ plugin.person_achievements.moreLazyDays.title: आत्मा से आपके साथ
|
||
§ plugin.person_achievements.moreLazyDays.description: commits के बिना सबसे अधिक दिन
|
||
§ plugin.person_achievements.lessLazyDays.title: Papa Carlo
|
||
§ plugin.person_achievements.lessLazyDays.description: commits के बिना सबसे कम दिन
|
||
§ plugin.person_achievements.zeroLazyDays.title: एक भी अंतराल नहीं
|
||
§ plugin.person_achievements.zeroLazyDays.description: commits के बिना एक भी दिन नहीं
|
||
§ plugin.person_achievements.moreWorkDays.title: मूल्यवान कर्मचारी
|
||
§ plugin.person_achievements.moreWorkDays.description: सबसे अधिक कार्य दिवस
|
||
§ plugin.person_achievements.moreScopes.title: स्टार्टअपर
|
||
§ plugin.person_achievements.moreScopes.description: सबसे अधिक सुविधाएँ बनाईं
|
||
§ plugin.person_achievements.lessScopes.title: नौसिखिया
|
||
§ plugin.person_achievements.lessScopes.description: सबसे कम सुविधाएँ बनाईं
|
||
§ plugin.person_achievements.moreDaysForTask.title: ढलान पर घोंघा
|
||
§ plugin.person_achievements.moreDaysForTask.description: कार्यों पर काम दूसरों की तुलना में धीमा है
|
||
§ plugin.person_achievements.more2DaysForTask.title: So slow
|
||
§ plugin.person_achievements.more2DaysForTask.description: प्रति कार्य दो दिनों से अधिक
|
||
§ plugin.person_achievements.more3YearsInProject.title: पुराना साथी
|
||
§ plugin.person_achievements.more3YearsInProject.description: प्रोजेक्ट पर तीन वर्षों से अधिक
|
||
§ plugin.person_achievements.lessDaysInProject.title: यह कौन है?
|
||
§ plugin.person_achievements.lessDaysInProject.description: प्रोजेक्ट पर सबसे कम दिन
|
||
§ plugin.person_achievements.lessDaysForTask.title: तेज़ निशाना
|
||
§ plugin.person_achievements.lessDaysForTask.description: एक कार्य एक दिन से कम लेता है
|
||
§ plugin.person_achievements.adam.title: आदम
|
||
§ plugin.person_achievements.adam.description: प्रोजेक्ट पर पहला स्थिर कर्मचारी
|
||
§ plugin.person_achievements.more90DaysInProject.title: स्वागत है
|
||
§ plugin.person_achievements.more90DaysInProject.description: परिवीक्षा अवधि में बर्खास्त नहीं किया गया
|
||
§ plugin.person_achievements.more365DaysInProject.title: एक वर्षीय
|
||
§ plugin.person_achievements.more365DaysInProject.description: प्रोजेक्ट पर एक वर्ष कार्य किया
|
||
§ plugin.person_achievements.more666DaysInProject.title: शैतान
|
||
§ plugin.person_achievements.more666DaysInProject.description: प्रोजेक्ट पर 666 दिन कार्य किया
|
||
§ plugin.person_achievements.more777DaysInProject.title: भाग्यशाली सात
|
||
§ plugin.person_achievements.more777DaysInProject.description: प्रोजेक्ट पर 777 दिन कार्य किया
|
||
§ plugin.person_achievements.moreDaysInProject.title: दल का भाग, जहाज का भाग
|
||
§ plugin.person_achievements.moreDaysInProject.description: प्रोजेक्ट पर सबसे अधिक दिन
|
||
§ plugin.person_achievements.moreRefactoring.title: संपादक
|
||
§ plugin.person_achievements.moreRefactoring.description: सबसे अधिक «refactoring» चिह्न जोड़े
|
||
§ plugin.person_achievements.longestMessage.title: बात सस्ती है
|
||
§ plugin.person_achievements.longestMessage.description: सभी समय का सबसे लंबा commit message
|
||
§ plugin.person_achievements.moreTasksInDay.title: Speed Racer
|
||
§ plugin.person_achievements.moreTasksInDay.description: एक दिन में बंद कार्यों की संख्या का रिकॉर्ड
|
||
§ plugin.person_achievements.hasCommitFrom0to7.title: रात्रि पहरेदारी
|
||
§ plugin.person_achievements.hasCommitFrom0to7.description: रात के प्रत्येक घंटे पर commit है
|
||
§ plugin.person_achievements.noCommitOnDay.title: तकनीकी विराम
|
||
§ plugin.person_achievements.noCommitOnDay.description: कार्य समय में एक निश्चित दिन और घंटा है जब कभी commit नहीं किया जाता
|
||
§ plugin.person_achievements.hasCommitEveryTime.title: काम पर मर गया
|
||
§ plugin.person_achievements.hasCommitEveryTime.description: प्रत्येक दिन के किसी घंटे पर commit है (सप्ताहांत सहित)
|
||
§ plugin.person_achievements.commitsAfter1800.title: काम का समय
|
||
§ plugin.person_achievements.commitsAfter1800.description: 18:00 के बाद एक भी commit नहीं
|
||
§ plugin.person_achievements.moreFix.title: Bug hunter
|
||
§ plugin.person_achievements.moreFix.description: सबसे अधिक बंद बग
|
||
§ plugin.person_achievements.lessWorkDays.title: मेरे बिना आगे बढ़ो
|
||
§ plugin.person_achievements.lessWorkDays.description: सबसे कम कार्य दिवस
|
||
§ plugin.person_achievements.moreCreateCode.title: सृष्टिकर्ता
|
||
§ plugin.person_achievements.moreCreateCode.description: दूसरों की तुलना में कोड जोड़ने की प्रवृत्ति अधिक है
|
||
§ plugin.person_achievements.moreRemoveCode.title: विध्वंसक
|
||
§ plugin.person_achievements.moreRemoveCode.description: दूसरों की तुलना में कोड हटाने की प्रवृत्ति अधिक है
|
||
§ plugin.person_achievements.moreChangeCode.title: सुधारक
|
||
§ plugin.person_achievements.moreChangeCode.description: दूसरों की तुलना में कोड बदलने की प्रवृत्ति अधिक है
|
||
§ plugin.person_achievements.moreStyle.title: फैशन पुलिस
|
||
§ plugin.person_achievements.moreStyle.description: दूसरों की तुलना में CSS बदलने की प्रवृत्ति अधिक है
|
||
§ plugin.person_achievements.moreOnHoliday.title: जीवन नहीं
|
||
§ plugin.person_achievements.moreOnHoliday.description: कार्य समय के बाहर अपेक्षाकृत अधिक commits
|
||
§ plugin.person_achievements.morePRMerge.title: सीमा शुल्क अनुमति देता है
|
||
§ plugin.person_achievements.morePRMerge.description: दूसरों की तुलना में PR के «Merge» बटन को अधिक बार दबाता है
|
||
§ plugin.person_achievements.longWaitPR.title: कल ज़रूर मर्ज करेंगे
|
||
§ plugin.person_achievements.longWaitPR.description: ऐसा PR बनाया जो समीक्षा में एक महीने से अधिक रहा
|
||
§ plugin.person_achievements.moreLongWaitPR.title: बहुत पहले, एक दूर की आकाशगंगा में
|
||
§ plugin.person_achievements.moreLongWaitPR.description: ऐसा PR बनाया जो समीक्षा में सबसे अधिक समय रहा
|
||
§ plugin.person_achievements.oneExtension.title: एक व्यक्ति की सेना
|
||
§ plugin.person_achievements.oneExtension.description: निश्चित विस्तार वाली फ़ाइलों के साथ केवल यही व्यक्ति काम करता है
|
||
§ plugin.person_achievements.fileRush.title: Zerg Rush
|
||
§ plugin.person_achievements.fileRush.description: प्रोजेक्ट में किसी से भी अधिक फ़ाइलें बनाईं
|
||
§ plugin.person_achievements.moreLintHint.title: Grammar Nazi
|
||
§ plugin.person_achievements.moreLintHint.description: स्वतः जाँच नियमों को किसी से भी अधिक बनाया या बदला
|
||
§ plugin.person_achievements.moreReadMe.title: इतिहासकार
|
||
§ plugin.person_achievements.moreReadMe.description: MD फ़ाइलों को किसी से भी अधिक बनाया या बदला
|
||
§ plugin.person_achievements.moreDevOps.title: DevOps
|
||
§ plugin.person_achievements.moreDevOps.description: CI/CD फ़ाइलों को किसी से भी अधिक बनाया या बदला
|
||
§ plugin.person_achievements.moreTests.title: परीक्षक
|
||
§ plugin.person_achievements.moreTests.description: परीक्षण फ़ाइलों को किसी से भी अधिक बनाया या बदला
|
||
§ plugin.person_achievements.allRelease.title: फुल हाउस
|
||
§ plugin.person_achievements.allRelease.description: केवल उनके कार्यों से बना एक रिलीज़ है
|
||
§ plugin.person_achievements.firstCommit.title: पहले आने वाला हकदार
|
||
§ plugin.person_achievements.firstCommit.description: प्रोजेक्ट पर पहला commit
|
||
§ plugin.person_achievements.lastCommit.title: मैं पूरा कर चुका
|
||
§ plugin.person_achievements.lastCommit.description: प्रोजेक्ट पर अंतिम commit
|
||
§ plugin.person_achievements.firstLastCommit.title: आरंभ से अंत तक
|
||
§ plugin.person_achievements.firstLastCommit.description: प्रोजेक्ट पर पहला और अंतिम commit
|
||
§ plugin.person_achievements.longFilePath.title: मातृभूमि के अनाज भंडार
|
||
§ plugin.person_achievements.longFilePath.description: सबसे गहरे नेस्टिंग वाली फ़ाइल सबसे पहले बनाई
|
||
§ plugin.person_achievements.longFileName.title: आकार मायने रखता है
|
||
§ plugin.person_achievements.longFileName.description: सबसे लंबे नाम वाली फ़ाइल बनाई
|
||
§ plugin.person_achievements.workOnWeekends.title: काम सैर नहीं है
|
||
§ plugin.person_achievements.workOnWeekends.description: कम से कम एक बार सप्ताहांत पर काम किया
|
||
§ plugin.person_achievements.removeCreateFile.title: एयर होस्टेस खोद निकाली
|
||
§ plugin.person_achievements.removeCreateFile.description: हटाई गई फ़ाइल पुनर्स्थापित की
|
||
§ plugin.person_achievements.renameFile.title: Astana Nur-Sultan Astana
|
||
§ plugin.person_achievements.renameFile.description: फ़ाइल का नाम इधर-उधर बदला
|
||
§ plugin.person_achievements.longTask.title: आसान लगता है
|
||
§ plugin.person_achievements.longTask.description: एक कार्य पर तीन महीने से अधिक काम किया
|
||
§ plugin.person_achievements.haveNotEmail.title: डाकिया Pechkin
|
||
§ plugin.person_achievements.haveNotEmail.description: git config में e-mail फ़ील्ड नहीं भरी
|
||
§ plugin.person_achievements.moreAddedFolders.title: निदेशक
|
||
§ plugin.person_achievements.moreAddedFolders.description: किसी से भी अधिक निर्देशिकाएँ बनाईं
|
||
§ plugin.person_achievements.horoscope1.title: मकर राशि में वक्री बुध
|
||
§ plugin.person_achievements.horoscope2.title: कुंभ राशि में वक्री बुध
|
||
§ plugin.person_achievements.horoscope3.title: मीन राशि में वक्री बुध
|
||
§ plugin.person_achievements.horoscope4.title: मेष राशि में वक्री बुध
|
||
§ plugin.person_achievements.horoscope5.title: वृष राशि में वक्री बुध
|
||
§ plugin.person_achievements.horoscope6.title: मिथुन राशि में वक्री बुध
|
||
§ plugin.person_achievements.horoscope7.title: कर्क राशि में वक्री बुध
|
||
§ plugin.person_achievements.horoscope8.title: सिंह राशि में वक्री बुध
|
||
§ plugin.person_achievements.horoscope9.title: कन्या राशि में वक्री बुध
|
||
§ plugin.person_achievements.horoscope10.title: तुला राशि में वक्री बुध
|
||
§ plugin.person_achievements.horoscope11.title: वृश्चिक राशि में वक्री बुध
|
||
§ plugin.person_achievements.horoscope12.title: धनु राशि में वक्री बुध
|
||
§ plugin.person_achievements.horoscope1.description: पहले commit के महीने के अनुसार
|
||
§ plugin.person_achievements.horoscope2.description: पहले commit के महीने के अनुसार
|
||
§ plugin.person_achievements.horoscope3.description: पहले commit के महीने के अनुसार
|
||
§ plugin.person_achievements.horoscope4.description: पहले commit के महीने के अनुसार
|
||
§ plugin.person_achievements.horoscope5.description: पहले commit के महीने के अनुसार
|
||
§ plugin.person_achievements.horoscope6.description: पहले commit के महीने के अनुसार
|
||
§ plugin.person_achievements.horoscope7.description: पहले commit के महीने के अनुसार
|
||
§ plugin.person_achievements.horoscope8.description: पहले commit के महीने के अनुसार
|
||
§ plugin.person_achievements.horoscope9.description: पहले commit के महीने के अनुसार
|
||
§ plugin.person_achievements.horoscope10.description: पहले commit के महीने के अनुसार
|
||
§ plugin.person_achievements.horoscope11.description: पहले commit के महीने के अनुसार
|
||
§ plugin.person_achievements.horoscope12.description: पहले commit के महीने के अनुसार
|
||
§ plugin.person_achievements.moreChangeTimeZone.title: Aaaaa-viasales
|
||
§ plugin.person_achievements.moreChangeTimeZone.description: स्थान किसी से भी अधिक बदला
|
||
§ plugin.person_achievements.publicitySitnik.title: Sitnik स्वीकृत करता है
|
||
§ plugin.person_achievements.publicitySitnik.description: PostCSS या Browserslist कॉन्फ़िग सबसे पहले जोड़ा
|
||
§ plugin.person_achievements.github.title: गृह प्रबंधक
|
||
§ plugin.person_achievements.github.description: मुख्य कार्य के अलावा घरेलू प्रोजेक्ट लिखता है
|
||
§ plugin.person_achievements.mackBook.title: नारियल दूध वाला वनीला राफ
|
||
§ plugin.person_achievements.mackBook.description: कार्य के लिए MacBook का उपयोग करता है
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.title: अंतिम क्षण का हड़बड़ी वाला
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.description: रिलीज़ से पहले commits की संख्या में सबसे बड़ी वृद्धि
|
||
§ plugin.person_achievements.ipInEmail.title: LAN-man
|
||
§ plugin.person_achievements.ipInEmail.description: email के स्थान पर स्थानीय IP पता उपयोग किया
|
||
§ plugin.person_achievements.languageErrors.title: fabric पर निर्भर, details पर निर्भर
|
||
§ plugin.person_achievements.languageErrors.description: दूसरी भाषा के वर्तनी या विराम चिह्न नियमों का उपयोग किया
|
||
`,ja:`
|
||
§ plugin.person_achievements.sidebar: 実績
|
||
§ plugin.person_achievements.page.positive: ポジティブ
|
||
§ plugin.person_achievements.page.normal: ニュートラル
|
||
§ plugin.person_achievements.page.negative: ネガティブ
|
||
§ plugin.person_achievements.page.publicity: スペシャル
|
||
§ plugin.person_achievements.page.commitsWithBeautifulTaskNumbers: きれいなタスク番号
|
||
§ plugin.person_achievements.page.description: 従業員のネガティブな実績が多いほど、状況が非標準である可能性が高まります。勤務形態、タスク、または報告の仕方を変える価値があるかもしれません。本人と話し、業務を妨げている問題を把握すべきです。
|
||
§ plugin.person_achievements.gets.title: タスク番号のメダル:
|
||
§ plugin.person_achievements.gets.description: 「きれいな」番号のタスクに最初に commit を残したユーザーにメダルが授与されます。
|
||
§ plugin.person_achievements.commitsAfter1500.title: 夜型
|
||
§ plugin.person_achievements.commitsAfter1500.description: commits の 70% が 15:00 以降
|
||
§ plugin.person_achievements.commitsBefore1500.title: 早起き
|
||
§ plugin.person_achievements.commitsBefore1500.description: commits の 70% が昼食前
|
||
§ plugin.person_achievements.workEveryTime.title: 神のしもべ
|
||
§ plugin.person_achievements.workEveryTime.description: 一日の各時間に commit がある
|
||
§ plugin.person_achievements.workNotWork.title: 空砲
|
||
§ plugin.person_achievements.workNotWork.description: commits はあるが、クローズされたタスクがない
|
||
§ plugin.person_achievements.userNotWork.title: 通りすがり
|
||
§ plugin.person_achievements.userNotWork.description: これが主なプロジェクトではない
|
||
§ plugin.person_achievements.userIsDied.title: 死せる魂
|
||
§ plugin.person_achievements.userIsDied.description: 勤務していたが退職した
|
||
§ plugin.person_achievements.lessTasks.title: 入って出ていった
|
||
§ plugin.person_achievements.lessTasks.description: クローズされたタスクが最も少ない
|
||
§ plugin.person_achievements.moreTasks.title: よくやった、と父が言う
|
||
§ plugin.person_achievements.moreTasks.description: クローズされたタスクが最も多い
|
||
§ plugin.person_achievements.everyMessageLong.title: 雄弁の達人
|
||
§ plugin.person_achievements.everyMessageLong.description: 一貫して最も長い commit messages
|
||
§ plugin.person_achievements.everyMessageShort.title: 口が軽い
|
||
§ plugin.person_achievements.everyMessageShort.description: 一貫して最も短い commit messages
|
||
§ plugin.person_achievements.shortestName.title: サイズは問題ではない
|
||
§ plugin.person_achievements.shortestName.description: 最も短い名前
|
||
§ plugin.person_achievements.longestName.title: Azim Aziz Il Am Qadir Imran II
|
||
§ plugin.person_achievements.longestName.description: 最も長い名前
|
||
§ plugin.person_achievements.moreCommits.title: バックアップの達人
|
||
§ plugin.person_achievements.moreCommits.description: 最も多い commits
|
||
§ plugin.person_achievements.lessCommits.title: 少なくても的確
|
||
§ plugin.person_achievements.lessCommits.description: 最も少ない commits
|
||
§ plugin.person_achievements.oneCommitOneTask.title: 正鵠
|
||
§ plugin.person_achievements.oneCommitOneTask.description: 平均してタスクあたり 1 件の commit
|
||
§ plugin.person_achievements.moreLazyDays.title: 心は共に
|
||
§ plugin.person_achievements.moreLazyDays.description: commits のない日が最も多い
|
||
§ plugin.person_achievements.lessLazyDays.title: Papa Carlo
|
||
§ plugin.person_achievements.lessLazyDays.description: commits のない日が最も少ない
|
||
§ plugin.person_achievements.zeroLazyDays.title: 切れ目なし
|
||
§ plugin.person_achievements.zeroLazyDays.description: commits のない日が一日もない
|
||
§ plugin.person_achievements.moreWorkDays.title: 貴重な従業員
|
||
§ plugin.person_achievements.moreWorkDays.description: 勤務日が最も多い
|
||
§ plugin.person_achievements.moreScopes.title: スタートアッパー
|
||
§ plugin.person_achievements.moreScopes.description: 機能を最も多く作成した
|
||
§ plugin.person_achievements.lessScopes.title: 新参者
|
||
§ plugin.person_achievements.lessScopes.description: 機能を最も少なく作成した
|
||
§ plugin.person_achievements.moreDaysForTask.title: 斜面のカタツムリ
|
||
§ plugin.person_achievements.moreDaysForTask.description: タスクの作業が他の人より遅い
|
||
§ plugin.person_achievements.more2DaysForTask.title: So slow
|
||
§ plugin.person_achievements.more2DaysForTask.description: タスクあたり 2 日超
|
||
§ plugin.person_achievements.more3YearsInProject.title: 古参
|
||
§ plugin.person_achievements.more3YearsInProject.description: プロジェクトに 3 年超
|
||
§ plugin.person_achievements.lessDaysInProject.title: これは誰?
|
||
§ plugin.person_achievements.lessDaysInProject.description: プロジェクト上の日数が最も少ない
|
||
§ plugin.person_achievements.lessDaysForTask.title: 速射
|
||
§ plugin.person_achievements.lessDaysForTask.description: 1 件のタスクが 1 日未満
|
||
§ plugin.person_achievements.adam.title: アダム
|
||
§ plugin.person_achievements.adam.description: プロジェクトで最初の安定した従業員
|
||
§ plugin.person_achievements.more90DaysInProject.title: ようこそ
|
||
§ plugin.person_achievements.more90DaysInProject.description: 試用期間中に解雇されなかった
|
||
§ plugin.person_achievements.more365DaysInProject.title: 一歳
|
||
§ plugin.person_achievements.more365DaysInProject.description: プロジェクトで 1 年勤務した
|
||
§ plugin.person_achievements.more666DaysInProject.title: 悪魔
|
||
§ plugin.person_achievements.more666DaysInProject.description: プロジェクトで 666 日勤務した
|
||
§ plugin.person_achievements.more777DaysInProject.title: ラッキーセブン
|
||
§ plugin.person_achievements.more777DaysInProject.description: プロジェクトで 777 日勤務した
|
||
§ plugin.person_achievements.moreDaysInProject.title: 乗組員の一部、船の一部
|
||
§ plugin.person_achievements.moreDaysInProject.description: プロジェクト上の日数が最も多い
|
||
§ plugin.person_achievements.moreRefactoring.title: 編集者
|
||
§ plugin.person_achievements.moreRefactoring.description: 「refactoring」ラベルを最も多く付けた
|
||
§ plugin.person_achievements.longestMessage.title: 口先は安い
|
||
§ plugin.person_achievements.longestMessage.description: 全期間で最も長い commit message
|
||
§ plugin.person_achievements.moreTasksInDay.title: Speed Racer
|
||
§ plugin.person_achievements.moreTasksInDay.description: 1 日にクローズしたタスク数の記録
|
||
§ plugin.person_achievements.hasCommitFrom0to7.title: 夜警
|
||
§ plugin.person_achievements.hasCommitFrom0to7.description: 夜の各時間に commit がある
|
||
§ plugin.person_achievements.noCommitOnDay.title: 技術休憩
|
||
§ plugin.person_achievements.noCommitOnDay.description: 勤務時間中に、決して commit をしない特定の曜日と時間がある
|
||
§ plugin.person_achievements.hasCommitEveryTime.title: 仕事中に死亡
|
||
§ plugin.person_achievements.hasCommitEveryTime.description: 毎日のいずれかの時間に commit がある(週末を含む)
|
||
§ plugin.person_achievements.commitsAfter1800.title: 仕事の時間
|
||
§ plugin.person_achievements.commitsAfter1800.description: 18:00 以降の commit が一つもない
|
||
§ plugin.person_achievements.moreFix.title: Bug hunter
|
||
§ plugin.person_achievements.moreFix.description: クローズしたバグが最も多い
|
||
§ plugin.person_achievements.lessWorkDays.title: あとは任せた
|
||
§ plugin.person_achievements.lessWorkDays.description: 勤務日が最も少ない
|
||
§ plugin.person_achievements.moreCreateCode.title: 創造者
|
||
§ plugin.person_achievements.moreCreateCode.description: 他の人よりコードを追加する傾向がある
|
||
§ plugin.person_achievements.moreRemoveCode.title: 破壊者
|
||
§ plugin.person_achievements.moreRemoveCode.description: 他の人よりコードを削除する傾向がある
|
||
§ plugin.person_achievements.moreChangeCode.title: 改革者
|
||
§ plugin.person_achievements.moreChangeCode.description: 他の人よりコードを変更する傾向がある
|
||
§ plugin.person_achievements.moreStyle.title: ファッション警察
|
||
§ plugin.person_achievements.moreStyle.description: 他の人より CSS を変更する傾向がある
|
||
§ plugin.person_achievements.moreOnHoliday.title: 人生なし
|
||
§ plugin.person_achievements.moreOnHoliday.description: 勤務時間外の commits が相対的に多い
|
||
§ plugin.person_achievements.morePRMerge.title: 税関が許可する
|
||
§ plugin.person_achievements.morePRMerge.description: 他の人より頻繁に PR の「Merge」ボタンを押す
|
||
§ plugin.person_achievements.longWaitPR.title: 明日は必ずマージする
|
||
§ plugin.person_achievements.longWaitPR.description: レビューに 1 か月超とどまった PR を作成した
|
||
§ plugin.person_achievements.moreLongWaitPR.title: 遠い昔、はるか彼方の銀河系で
|
||
§ plugin.person_achievements.moreLongWaitPR.description: レビューにとどまった期間が最長の PR を作成した
|
||
§ plugin.person_achievements.oneExtension.title: 一人の軍隊
|
||
§ plugin.person_achievements.oneExtension.description: 特定の拡張子のファイルを扱うのがこの人だけ
|
||
§ plugin.person_achievements.fileRush.title: Zerg Rush
|
||
§ plugin.person_achievements.fileRush.description: プロジェクトで誰よりも多くのファイルを作成した
|
||
§ plugin.person_achievements.moreLintHint.title: Grammar Nazi
|
||
§ plugin.person_achievements.moreLintHint.description: 自動チェック規則を誰よりも多く作成または変更した
|
||
§ plugin.person_achievements.moreReadMe.title: 年代記作者
|
||
§ plugin.person_achievements.moreReadMe.description: MD ファイルを誰よりも多く作成または変更した
|
||
§ plugin.person_achievements.moreDevOps.title: DevOps
|
||
§ plugin.person_achievements.moreDevOps.description: CI/CD ファイルを誰よりも多く作成または変更した
|
||
§ plugin.person_achievements.moreTests.title: テスター
|
||
§ plugin.person_achievements.moreTests.description: テストファイルを誰よりも多く作成または変更した
|
||
§ plugin.person_achievements.allRelease.title: フルハウス
|
||
§ plugin.person_achievements.allRelease.description: その人のタスクだけから組み立てられたリリースがある
|
||
§ plugin.person_achievements.firstCommit.title: 早い者勝ち
|
||
§ plugin.person_achievements.firstCommit.description: プロジェクト最初の commit
|
||
§ plugin.person_achievements.lastCommit.title: 終わりました
|
||
§ plugin.person_achievements.lastCommit.description: プロジェクト最後の commit
|
||
§ plugin.person_achievements.firstLastCommit.title: 始めから終わりまで
|
||
§ plugin.person_achievements.firstLastCommit.description: プロジェクトの最初と最後の commit
|
||
§ plugin.person_achievements.longFilePath.title: 祖国の穀倉
|
||
§ plugin.person_achievements.longFilePath.description: 最も深い入れ子のファイルを最初に作成した
|
||
§ plugin.person_achievements.longFileName.title: サイズは重要
|
||
§ plugin.person_achievements.longFileName.description: 最も長い名前のファイルを作成した
|
||
§ plugin.person_achievements.workOnWeekends.title: 仕事は散歩ではない
|
||
§ plugin.person_achievements.workOnWeekends.description: 少なくとも一度は週末に働いた
|
||
§ plugin.person_achievements.removeCreateFile.title: 客室乗務員を掘り起こした
|
||
§ plugin.person_achievements.removeCreateFile.description: 削除されたファイルを復元した
|
||
§ plugin.person_achievements.renameFile.title: Astana Nur-Sultan Astana
|
||
§ plugin.person_achievements.renameFile.description: ファイル名を行ったり来たり変更した
|
||
§ plugin.person_achievements.longTask.title: 簡単そうに見える
|
||
§ plugin.person_achievements.longTask.description: タスクに 3 か月超取り組んだ
|
||
§ plugin.person_achievements.haveNotEmail.title: 郵便配達Pechkin
|
||
§ plugin.person_achievements.haveNotEmail.description: git config の e-mail 欄を記入しなかった
|
||
§ plugin.person_achievements.moreAddedFolders.title: ディレクター
|
||
§ plugin.person_achievements.moreAddedFolders.description: ディレクトリを誰よりも多く作成した
|
||
§ plugin.person_achievements.horoscope1.title: 山羊座の逆行水星
|
||
§ plugin.person_achievements.horoscope2.title: 水瓶座の逆行水星
|
||
§ plugin.person_achievements.horoscope3.title: 魚座の逆行水星
|
||
§ plugin.person_achievements.horoscope4.title: 牡羊座の逆行水星
|
||
§ plugin.person_achievements.horoscope5.title: 牡牛座の逆行水星
|
||
§ plugin.person_achievements.horoscope6.title: 双子座の逆行水星
|
||
§ plugin.person_achievements.horoscope7.title: 蟹座の逆行水星
|
||
§ plugin.person_achievements.horoscope8.title: 獅子座の逆行水星
|
||
§ plugin.person_achievements.horoscope9.title: 乙女座の逆行水星
|
||
§ plugin.person_achievements.horoscope10.title: 天秤座の逆行水星
|
||
§ plugin.person_achievements.horoscope11.title: 蠍座の逆行水星
|
||
§ plugin.person_achievements.horoscope12.title: 射手座の逆行水星
|
||
§ plugin.person_achievements.horoscope1.description: 最初の commit の月による
|
||
§ plugin.person_achievements.horoscope2.description: 最初の commit の月による
|
||
§ plugin.person_achievements.horoscope3.description: 最初の commit の月による
|
||
§ plugin.person_achievements.horoscope4.description: 最初の commit の月による
|
||
§ plugin.person_achievements.horoscope5.description: 最初の commit の月による
|
||
§ plugin.person_achievements.horoscope6.description: 最初の commit の月による
|
||
§ plugin.person_achievements.horoscope7.description: 最初の commit の月による
|
||
§ plugin.person_achievements.horoscope8.description: 最初の commit の月による
|
||
§ plugin.person_achievements.horoscope9.description: 最初の commit の月による
|
||
§ plugin.person_achievements.horoscope10.description: 最初の commit の月による
|
||
§ plugin.person_achievements.horoscope11.description: 最初の commit の月による
|
||
§ plugin.person_achievements.horoscope12.description: 最初の commit の月による
|
||
§ plugin.person_achievements.moreChangeTimeZone.title: Aaaaa-viasales
|
||
§ plugin.person_achievements.moreChangeTimeZone.description: 所在地を誰よりも多く変更した
|
||
§ plugin.person_achievements.publicitySitnik.title: Sitnik の承認
|
||
§ plugin.person_achievements.publicitySitnik.description: PostCSS または Browserslist の設定を最初に追加した
|
||
§ plugin.person_achievements.github.title: 家政婦
|
||
§ plugin.person_achievements.github.description: 本業のほかに自宅プロジェクトを書いている
|
||
§ plugin.person_achievements.mackBook.title: ココナッツミルクのバニララフ
|
||
§ plugin.person_achievements.mackBook.description: 仕事に MacBook を使っている
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.title: 直前の大騒ぎ
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.description: リリース前の commits 数の増加が最大
|
||
§ plugin.person_achievements.ipInEmail.title: LAN-man
|
||
§ plugin.person_achievements.ipInEmail.description: email の代わりにローカル IP アドレスを使った
|
||
§ plugin.person_achievements.languageErrors.title: fabric 次第、details 次第
|
||
§ plugin.person_achievements.languageErrors.description: 別の言語の正書法または句読点の規則を使った
|
||
`,ko:`
|
||
§ plugin.person_achievements.sidebar: 성과
|
||
§ plugin.person_achievements.page.positive: 긍정적
|
||
§ plugin.person_achievements.page.normal: 중립적
|
||
§ plugin.person_achievements.page.negative: 부정적
|
||
§ plugin.person_achievements.page.publicity: 특별
|
||
§ plugin.person_achievements.page.commitsWithBeautifulTaskNumbers: 아름다운 작업 번호
|
||
§ plugin.person_achievements.page.description: 직원이 부정적인 성과를 많이 받을수록 상황이 비정상일 가능성이 커집니다. 근무 방식, 작업 또는 보고 체계를 바꿀 필요가 있을 수 있습니다. 본인과 대화하여 업무를 방해하는 문제가 무엇인지 파악해야 합니다.
|
||
§ plugin.person_achievements.gets.title: 작업 번호 메달:
|
||
§ plugin.person_achievements.gets.description: 사용자가 «아름다운» 번호의 작업에 가장 먼저 commit을 남기면 메달이 수여됩니다.
|
||
§ plugin.person_achievements.commitsAfter1500.title: 올빼미
|
||
§ plugin.person_achievements.commitsAfter1500.description: commits의 70%가 15:00 이후
|
||
§ plugin.person_achievements.commitsBefore1500.title: 일찍 일어나는 새
|
||
§ plugin.person_achievements.commitsBefore1500.description: commits의 70%가 점심 이전
|
||
§ plugin.person_achievements.workEveryTime.title: 신의 종
|
||
§ plugin.person_achievements.workEveryTime.description: 하루의 매 시간에 commit이 있음
|
||
§ plugin.person_achievements.workNotWork.title: 공포탄
|
||
§ plugin.person_achievements.workNotWork.description: commits는 있으나 닫힌 작업이 없음
|
||
§ plugin.person_achievements.userNotWork.title: 지나가는 사람
|
||
§ plugin.person_achievements.userNotWork.description: 주 프로젝트가 아님
|
||
§ plugin.person_achievements.userIsDied.title: 죽은 영혼
|
||
§ plugin.person_achievements.userIsDied.description: 근무했으나 퇴사함
|
||
§ plugin.person_achievements.lessTasks.title: 들어왔다 나갔다
|
||
§ plugin.person_achievements.lessTasks.description: 닫힌 작업이 가장 적음
|
||
§ plugin.person_achievements.moreTasks.title: 잘했다, 아빠가 말함
|
||
§ plugin.person_achievements.moreTasks.description: 닫힌 작업이 가장 많음
|
||
§ plugin.person_achievements.everyMessageLong.title: 웅변의 달인
|
||
§ plugin.person_achievements.everyMessageLong.description: 일관되게 가장 긴 commit messages
|
||
§ plugin.person_achievements.everyMessageShort.title: 입이 가벼움
|
||
§ plugin.person_achievements.everyMessageShort.description: 일관되게 가장 짧은 commit messages
|
||
§ plugin.person_achievements.shortestName.title: 크기가 전부가 아님
|
||
§ plugin.person_achievements.shortestName.description: 가장 짧은 이름
|
||
§ plugin.person_achievements.longestName.title: Azim Aziz Il Am Qadir Imran II
|
||
§ plugin.person_achievements.longestName.description: 가장 긴 이름
|
||
§ plugin.person_achievements.moreCommits.title: 백업의 달인
|
||
§ plugin.person_achievements.moreCommits.description: commits가 가장 많음
|
||
§ plugin.person_achievements.lessCommits.title: 드물지만 정확함
|
||
§ plugin.person_achievements.lessCommits.description: commits가 가장 적음
|
||
§ plugin.person_achievements.oneCommitOneTask.title: 과녁 중앙
|
||
§ plugin.person_achievements.oneCommitOneTask.description: 평균적으로 작업당 commit 하나
|
||
§ plugin.person_achievements.moreLazyDays.title: 마음으로 함께함
|
||
§ plugin.person_achievements.moreLazyDays.description: commits가 없는 날이 가장 많음
|
||
§ plugin.person_achievements.lessLazyDays.title: Papa Carlo
|
||
§ plugin.person_achievements.lessLazyDays.description: commits가 없는 날이 가장 적음
|
||
§ plugin.person_achievements.zeroLazyDays.title: 단 한 번의 공백도 없음
|
||
§ plugin.person_achievements.zeroLazyDays.description: commits가 없는 날이 하루도 없음
|
||
§ plugin.person_achievements.moreWorkDays.title: 소중한 직원
|
||
§ plugin.person_achievements.moreWorkDays.description: 근무일이 가장 많음
|
||
§ plugin.person_achievements.moreScopes.title: 스타트업퍼
|
||
§ plugin.person_achievements.moreScopes.description: 기능을 가장 많이 만듦
|
||
§ plugin.person_achievements.lessScopes.title: 풋내기
|
||
§ plugin.person_achievements.lessScopes.description: 기능을 가장 적게 만듦
|
||
§ plugin.person_achievements.moreDaysForTask.title: 언덕의 달팽이
|
||
§ plugin.person_achievements.moreDaysForTask.description: 작업 진행이 다른 사람보다 느림
|
||
§ plugin.person_achievements.more2DaysForTask.title: So slow
|
||
§ plugin.person_achievements.more2DaysForTask.description: 작업당 이틀 초과
|
||
§ plugin.person_achievements.more3YearsInProject.title: 고참
|
||
§ plugin.person_achievements.more3YearsInProject.description: 프로젝트에서 3년 초과
|
||
§ plugin.person_achievements.lessDaysInProject.title: 이 사람은 누구인가?
|
||
§ plugin.person_achievements.lessDaysInProject.description: 프로젝트 일수가 가장 적음
|
||
§ plugin.person_achievements.lessDaysForTask.title: 속사
|
||
§ plugin.person_achievements.lessDaysForTask.description: 한 작업이 하루 미만
|
||
§ plugin.person_achievements.adam.title: 아담
|
||
§ plugin.person_achievements.adam.description: 프로젝트의 첫 안정적 직원
|
||
§ plugin.person_achievements.more90DaysInProject.title: 환영합니다
|
||
§ plugin.person_achievements.more90DaysInProject.description: 수습 기간에 해고되지 않음
|
||
§ plugin.person_achievements.more365DaysInProject.title: 돌쟁이
|
||
§ plugin.person_achievements.more365DaysInProject.description: 프로젝트에서 1년을 근무함
|
||
§ plugin.person_achievements.more666DaysInProject.title: 악마
|
||
§ plugin.person_achievements.more666DaysInProject.description: 프로젝트에서 666일을 근무함
|
||
§ plugin.person_achievements.more777DaysInProject.title: 행운의 세븐
|
||
§ plugin.person_achievements.more777DaysInProject.description: 프로젝트에서 777일을 근무함
|
||
§ plugin.person_achievements.moreDaysInProject.title: 승무원의 일부, 배의 일부
|
||
§ plugin.person_achievements.moreDaysInProject.description: 프로젝트 일수가 가장 많음
|
||
§ plugin.person_achievements.moreRefactoring.title: 교정 편집자
|
||
§ plugin.person_achievements.moreRefactoring.description: «refactoring» 표시를 가장 많이 추가함
|
||
§ plugin.person_achievements.longestMessage.title: 말은 싸다
|
||
§ plugin.person_achievements.longestMessage.description: 전 기간 중 가장 긴 commit message
|
||
§ plugin.person_achievements.moreTasksInDay.title: Speed Racer
|
||
§ plugin.person_achievements.moreTasksInDay.description: 하루에 닫은 작업 수 기록
|
||
§ plugin.person_achievements.hasCommitFrom0to7.title: 야간 경비
|
||
§ plugin.person_achievements.hasCommitFrom0to7.description: 밤의 매 시간에 commit이 있음
|
||
§ plugin.person_achievements.noCommitOnDay.title: 기술 휴식
|
||
§ plugin.person_achievements.noCommitOnDay.description: 근무 시간 중 commit을 절대 하지 않는 특정 요일과 시간이 있음
|
||
§ plugin.person_achievements.hasCommitEveryTime.title: 일하다 죽음
|
||
§ plugin.person_achievements.hasCommitEveryTime.description: 매일의 어떤 시간에 commit이 있음(주말 포함)
|
||
§ plugin.person_achievements.commitsAfter1800.title: 일의 시간
|
||
§ plugin.person_achievements.commitsAfter1800.description: 18:00 이후 commit이 하나도 없음
|
||
§ plugin.person_achievements.moreFix.title: Bug hunter
|
||
§ plugin.person_achievements.moreFix.description: 닫은 버그가 가장 많음
|
||
§ plugin.person_achievements.lessWorkDays.title: 나 없이 계속하세요
|
||
§ plugin.person_achievements.lessWorkDays.description: 근무일이 가장 적음
|
||
§ plugin.person_achievements.moreCreateCode.title: 창조자
|
||
§ plugin.person_achievements.moreCreateCode.description: 다른 사람보다 코드를 추가하는 경향이 있음
|
||
§ plugin.person_achievements.moreRemoveCode.title: 파괴자
|
||
§ plugin.person_achievements.moreRemoveCode.description: 다른 사람보다 코드를 삭제하는 경향이 있음
|
||
§ plugin.person_achievements.moreChangeCode.title: 개혁자
|
||
§ plugin.person_achievements.moreChangeCode.description: 다른 사람보다 코드를 변경하는 경향이 있음
|
||
§ plugin.person_achievements.moreStyle.title: 패션 경찰
|
||
§ plugin.person_achievements.moreStyle.description: 다른 사람보다 CSS를 변경하는 경향이 있음
|
||
§ plugin.person_achievements.moreOnHoliday.title: 삶이 없음
|
||
§ plugin.person_achievements.moreOnHoliday.description: 근무 시간 외 commits가 상대적으로 많음
|
||
§ plugin.person_achievements.morePRMerge.title: 세관이 허가함
|
||
§ plugin.person_achievements.morePRMerge.description: 다른 사람보다 PR의 «Merge» 버튼을 더 자주 누름
|
||
§ plugin.person_achievements.longWaitPR.title: 내일은 꼭 병합함
|
||
§ plugin.person_achievements.longWaitPR.description: 리뷰에 한 달 넘게 머문 PR을 만듦
|
||
§ plugin.person_achievements.moreLongWaitPR.title: 아주 오래전, 머나먼 은하에서
|
||
§ plugin.person_achievements.moreLongWaitPR.description: 리뷰에 가장 오래 머문 PR을 만듦
|
||
§ plugin.person_achievements.oneExtension.title: 일인 군대
|
||
§ plugin.person_achievements.oneExtension.description: 특정 확장자 파일은 이 사람만 다룸
|
||
§ plugin.person_achievements.fileRush.title: Zerg Rush
|
||
§ plugin.person_achievements.fileRush.description: 프로젝트에서 누구보다 많은 파일을 만듦
|
||
§ plugin.person_achievements.moreLintHint.title: Grammar Nazi
|
||
§ plugin.person_achievements.moreLintHint.description: 자동 검사 규칙을 누구보다 많이 만들거나 변경함
|
||
§ plugin.person_achievements.moreReadMe.title: 연대기 작가
|
||
§ plugin.person_achievements.moreReadMe.description: MD 파일을 누구보다 많이 만들거나 변경함
|
||
§ plugin.person_achievements.moreDevOps.title: DevOps
|
||
§ plugin.person_achievements.moreDevOps.description: CI/CD 파일을 누구보다 많이 만들거나 변경함
|
||
§ plugin.person_achievements.moreTests.title: 테스터
|
||
§ plugin.person_achievements.moreTests.description: 테스트 파일을 누구보다 많이 만들거나 변경함
|
||
§ plugin.person_achievements.allRelease.title: 풀 하우스
|
||
§ plugin.person_achievements.allRelease.description: 그 사람의 작업만으로 구성된 릴리스가 있음
|
||
§ plugin.person_achievements.firstCommit.title: 먼저 온 사람이 임자
|
||
§ plugin.person_achievements.firstCommit.description: 프로젝트의 첫 commit
|
||
§ plugin.person_achievements.lastCommit.title: 끝났습니다
|
||
§ plugin.person_achievements.lastCommit.description: 프로젝트의 마지막 commit
|
||
§ plugin.person_achievements.firstLastCommit.title: 처음부터 끝까지
|
||
§ plugin.person_achievements.firstLastCommit.description: 프로젝트의 첫 commit과 마지막 commit
|
||
§ plugin.person_achievements.longFilePath.title: 조국의 곡창
|
||
§ plugin.person_achievements.longFilePath.description: 가장 깊은 중첩의 파일을 처음 만듦
|
||
§ plugin.person_achievements.longFileName.title: 크기가 중요함
|
||
§ plugin.person_achievements.longFileName.description: 가장 긴 이름의 파일을 만듦
|
||
§ plugin.person_achievements.workOnWeekends.title: 일은 산책이 아님
|
||
§ plugin.person_achievements.workOnWeekends.description: 주말에 한 번 이상 근무함
|
||
§ plugin.person_achievements.removeCreateFile.title: 승무원을 파냄
|
||
§ plugin.person_achievements.removeCreateFile.description: 삭제된 파일을 복원함
|
||
§ plugin.person_achievements.renameFile.title: Astana Nur-Sultan Astana
|
||
§ plugin.person_achievements.renameFile.description: 파일 이름을 이리저리 바꿈
|
||
§ plugin.person_achievements.longTask.title: 쉬워 보임
|
||
§ plugin.person_achievements.longTask.description: 작업을 세 달 넘게 진행함
|
||
§ plugin.person_achievements.haveNotEmail.title: 우체부 Pechkin
|
||
§ plugin.person_achievements.haveNotEmail.description: git config의 e-mail 필드를 채우지 않음
|
||
§ plugin.person_achievements.moreAddedFolders.title: 디렉터
|
||
§ plugin.person_achievements.moreAddedFolders.description: 디렉터리를 누구보다 많이 만듦
|
||
§ plugin.person_achievements.horoscope1.title: 염소자리의 역행 수성
|
||
§ plugin.person_achievements.horoscope2.title: 물병자리의 역행 수성
|
||
§ plugin.person_achievements.horoscope3.title: 물고기자리의 역행 수성
|
||
§ plugin.person_achievements.horoscope4.title: 양자리의 역행 수성
|
||
§ plugin.person_achievements.horoscope5.title: 황소자리의 역행 수성
|
||
§ plugin.person_achievements.horoscope6.title: 쌍둥이자리의 역행 수성
|
||
§ plugin.person_achievements.horoscope7.title: 게자리의 역행 수성
|
||
§ plugin.person_achievements.horoscope8.title: 사자자리의 역행 수성
|
||
§ plugin.person_achievements.horoscope9.title: 처녀자리의 역행 수성
|
||
§ plugin.person_achievements.horoscope10.title: 천칭자리의 역행 수성
|
||
§ plugin.person_achievements.horoscope11.title: 전갈자리의 역행 수성
|
||
§ plugin.person_achievements.horoscope12.title: 사수자리의 역행 수성
|
||
§ plugin.person_achievements.horoscope1.description: 첫 commit의 월 기준
|
||
§ plugin.person_achievements.horoscope2.description: 첫 commit의 월 기준
|
||
§ plugin.person_achievements.horoscope3.description: 첫 commit의 월 기준
|
||
§ plugin.person_achievements.horoscope4.description: 첫 commit의 월 기준
|
||
§ plugin.person_achievements.horoscope5.description: 첫 commit의 월 기준
|
||
§ plugin.person_achievements.horoscope6.description: 첫 commit의 월 기준
|
||
§ plugin.person_achievements.horoscope7.description: 첫 commit의 월 기준
|
||
§ plugin.person_achievements.horoscope8.description: 첫 commit의 월 기준
|
||
§ plugin.person_achievements.horoscope9.description: 첫 commit의 월 기준
|
||
§ plugin.person_achievements.horoscope10.description: 첫 commit의 월 기준
|
||
§ plugin.person_achievements.horoscope11.description: 첫 commit의 월 기준
|
||
§ plugin.person_achievements.horoscope12.description: 첫 commit의 월 기준
|
||
§ plugin.person_achievements.moreChangeTimeZone.title: Aaaaa-viasales
|
||
§ plugin.person_achievements.moreChangeTimeZone.description: 위치를 누구보다 많이 바꿈
|
||
§ plugin.person_achievements.publicitySitnik.title: Sitnik의 승인
|
||
§ plugin.person_achievements.publicitySitnik.description: PostCSS 또는 Browserslist 설정을 처음 추가함
|
||
§ plugin.person_achievements.github.title: 가정부
|
||
§ plugin.person_achievements.github.description: 본업 외에 개인 프로젝트를 작성함
|
||
§ plugin.person_achievements.mackBook.title: 코코넛 밀크 바닐라 라프
|
||
§ plugin.person_achievements.mackBook.description: 업무에 MacBook을 사용함
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.title: 막판 부산
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.description: 릴리스 전 commits 수 증가가 최대
|
||
§ plugin.person_achievements.ipInEmail.title: LAN-man
|
||
§ plugin.person_achievements.ipInEmail.description: email 대신 로컬 IP 주소를 사용함
|
||
§ plugin.person_achievements.languageErrors.title: fabric에 달렸고 details에 달림
|
||
§ plugin.person_achievements.languageErrors.description: 다른 언어의 맞춤법 또는 구두점 규칙을 사용함
|
||
`,pt:`
|
||
§ plugin.person_achievements.sidebar: Conquistas
|
||
§ plugin.person_achievements.page.positive: Positivas
|
||
§ plugin.person_achievements.page.normal: Neutras
|
||
§ plugin.person_achievements.page.negative: Negativas
|
||
§ plugin.person_achievements.page.publicity: Especiais
|
||
§ plugin.person_achievements.page.commitsWithBeautifulTaskNumbers: Números bonitos das tarefas
|
||
§ plugin.person_achievements.page.description: Quanto mais conquistas negativas um colaborador acumula, maior a probabilidade de a situação ser atípica. Pode ser oportuno alterar o regime de trabalho, as tarefas ou a prestação de contas. Convém conversar com ele e descobrir quais problemas prejudicam o seu trabalho.
|
||
§ plugin.person_achievements.gets.title: Medalhas pelos números das tarefas:
|
||
§ plugin.person_achievements.gets.description: A medalha é atribuída se o utilizador for o primeiro a deixar um commit numa tarefa com um número «bonito».
|
||
§ plugin.person_achievements.commitsAfter1500.title: Coruja noturna
|
||
§ plugin.person_achievements.commitsAfter1500.description: 70% dos commits depois das 15:00
|
||
§ plugin.person_achievements.commitsBefore1500.title: Madrugador
|
||
§ plugin.person_achievements.commitsBefore1500.description: 70% dos commits antes do almoço
|
||
§ plugin.person_achievements.workEveryTime.title: Servo de Deus
|
||
§ plugin.person_achievements.workEveryTime.description: há um commit a cada hora do dia
|
||
§ plugin.person_achievements.workNotWork.title: Tiro de festim
|
||
§ plugin.person_achievements.workNotWork.description: há commits, mas não há tarefas fechadas
|
||
§ plugin.person_achievements.userNotWork.title: De passagem
|
||
§ plugin.person_achievements.userNotWork.description: este não é o seu projeto principal
|
||
§ plugin.person_achievements.userIsDied.title: Alma morta
|
||
§ plugin.person_achievements.userIsDied.description: trabalhou, mas saiu da empresa
|
||
§ plugin.person_achievements.lessTasks.title: Entrou e saiu
|
||
§ plugin.person_achievements.lessTasks.description: o menor número de tarefas fechadas
|
||
§ plugin.person_achievements.moreTasks.title: Muito bem, diz o pai
|
||
§ plugin.person_achievements.moreTasks.description: o maior número de tarefas fechadas
|
||
§ plugin.person_achievements.everyMessageLong.title: Mestre da eloquência
|
||
§ plugin.person_achievements.everyMessageLong.description: de forma estável, os commit messages mais longos
|
||
§ plugin.person_achievements.everyMessageShort.title: Língua solta
|
||
§ plugin.person_achievements.everyMessageShort.description: de forma estável, os commit messages mais curtos
|
||
§ plugin.person_achievements.shortestName.title: O tamanho não é tudo
|
||
§ plugin.person_achievements.shortestName.description: o nome mais curto
|
||
§ plugin.person_achievements.longestName.title: Azim Aziz Il Am Qadir Imran II
|
||
§ plugin.person_achievements.longestName.description: o nome mais longo
|
||
§ plugin.person_achievements.moreCommits.title: Mestre das cópias de segurança
|
||
§ plugin.person_achievements.moreCommits.description: o maior número de commits
|
||
§ plugin.person_achievements.lessCommits.title: Raro, mas certeiro
|
||
§ plugin.person_achievements.lessCommits.description: o menor número de commits
|
||
§ plugin.person_achievements.oneCommitOneTask.title: Na mosca
|
||
§ plugin.person_achievements.oneCommitOneTask.description: em média um commit por tarefa
|
||
§ plugin.person_achievements.moreLazyDays.title: Convosco em espírito
|
||
§ plugin.person_achievements.moreLazyDays.description: o maior número de dias sem commits
|
||
§ plugin.person_achievements.lessLazyDays.title: Papá Carlo
|
||
§ plugin.person_achievements.lessLazyDays.description: o menor número de dias sem commits
|
||
§ plugin.person_achievements.zeroLazyDays.title: Nem uma única falha
|
||
§ plugin.person_achievements.zeroLazyDays.description: nem um único dia sem commits
|
||
§ plugin.person_achievements.moreWorkDays.title: Colaborador valioso
|
||
§ plugin.person_achievements.moreWorkDays.description: o maior número de dias úteis
|
||
§ plugin.person_achievements.moreScopes.title: Empreendedor
|
||
§ plugin.person_achievements.moreScopes.description: criou o maior número de funcionalidades
|
||
§ plugin.person_achievements.lessScopes.title: Novato
|
||
§ plugin.person_achievements.lessScopes.description: criou o menor número de funcionalidades
|
||
§ plugin.person_achievements.moreDaysForTask.title: Caracol na encosta
|
||
§ plugin.person_achievements.moreDaysForTask.description: o trabalho nas tarefas avança mais devagar do que o dos restantes
|
||
§ plugin.person_achievements.more2DaysForTask.title: So slow
|
||
§ plugin.person_achievements.more2DaysForTask.description: mais de dois dias por tarefa
|
||
§ plugin.person_achievements.more3YearsInProject.title: Veterano
|
||
§ plugin.person_achievements.more3YearsInProject.description: mais de três anos no projeto
|
||
§ plugin.person_achievements.lessDaysInProject.title: Quem é este?
|
||
§ plugin.person_achievements.lessDaysInProject.description: o menor número de dias no projeto
|
||
§ plugin.person_achievements.lessDaysForTask.title: Tiro rápido
|
||
§ plugin.person_achievements.lessDaysForTask.description: uma tarefa ocupa menos de um dia
|
||
§ plugin.person_achievements.adam.title: Adão
|
||
§ plugin.person_achievements.adam.description: o primeiro colaborador estável no projeto
|
||
§ plugin.person_achievements.more90DaysInProject.title: Bem-vindo
|
||
§ plugin.person_achievements.more90DaysInProject.description: não foi despedido durante o período experimental
|
||
§ plugin.person_achievements.more365DaysInProject.title: Aniversário de um ano
|
||
§ plugin.person_achievements.more365DaysInProject.description: trabalhou um ano no projeto
|
||
§ plugin.person_achievements.more666DaysInProject.title: Diabo
|
||
§ plugin.person_achievements.more666DaysInProject.description: trabalhou 666 dias no projeto
|
||
§ plugin.person_achievements.more777DaysInProject.title: Setes da sorte
|
||
§ plugin.person_achievements.more777DaysInProject.description: trabalhou 777 dias no projeto
|
||
§ plugin.person_achievements.moreDaysInProject.title: Parte da tripulação, parte do navio
|
||
§ plugin.person_achievements.moreDaysInProject.description: o maior número de dias no projeto
|
||
§ plugin.person_achievements.moreRefactoring.title: Editor de estilo
|
||
§ plugin.person_achievements.moreRefactoring.description: adicionou o maior número de etiquetas «refactoring»
|
||
§ plugin.person_achievements.longestMessage.title: Falar é barato
|
||
§ plugin.person_achievements.longestMessage.description: o commit message mais longo de todos os tempos
|
||
§ plugin.person_achievements.moreTasksInDay.title: Speed Racer
|
||
§ plugin.person_achievements.moreTasksInDay.description: recorde do número de tarefas fechadas num dia
|
||
§ plugin.person_achievements.hasCommitFrom0to7.title: Vigia noturna
|
||
§ plugin.person_achievements.hasCommitFrom0to7.description: há um commit a cada hora da noite
|
||
§ plugin.person_achievements.noCommitOnDay.title: Pausa técnica
|
||
§ plugin.person_achievements.noCommitOnDay.description: há uma hora e um dia específicos no horário de trabalho em que nunca é feito um commit
|
||
§ plugin.person_achievements.hasCommitEveryTime.title: Morreu no trabalho
|
||
§ plugin.person_achievements.hasCommitEveryTime.description: há um commit a uma hora de cada dia (incluindo fins de semana)
|
||
§ plugin.person_achievements.commitsAfter1800.title: Tempo para o trabalho
|
||
§ plugin.person_achievements.commitsAfter1800.description: nem um único commit depois das 18:00
|
||
§ plugin.person_achievements.moreFix.title: Bug hunter
|
||
§ plugin.person_achievements.moreFix.description: o maior número de erros fechados
|
||
§ plugin.person_achievements.lessWorkDays.title: Continuem sem mim
|
||
§ plugin.person_achievements.lessWorkDays.description: o menor número de dias úteis
|
||
§ plugin.person_achievements.moreCreateCode.title: Criador
|
||
§ plugin.person_achievements.moreCreateCode.description: tende a adicionar código mais do que os restantes
|
||
§ plugin.person_achievements.moreRemoveCode.title: Destruidor
|
||
§ plugin.person_achievements.moreRemoveCode.description: tende a eliminar código mais do que os restantes
|
||
§ plugin.person_achievements.moreChangeCode.title: Reformador
|
||
§ plugin.person_achievements.moreChangeCode.description: tende a alterar código mais do que os restantes
|
||
§ plugin.person_achievements.moreStyle.title: Polícia da moda
|
||
§ plugin.person_achievements.moreStyle.description: tende a alterar CSS mais do que os restantes
|
||
§ plugin.person_achievements.moreOnHoliday.title: Sem vida
|
||
§ plugin.person_achievements.moreOnHoliday.description: relativamente muitos commits fora do horário de trabalho
|
||
§ plugin.person_achievements.morePRMerge.title: A alfândega dá o aval
|
||
§ plugin.person_achievements.morePRMerge.description: carrega no botão «Merge» dos PR com mais frequência do que os restantes
|
||
§ plugin.person_achievements.longWaitPR.title: Amanhã fundimos de certeza
|
||
§ plugin.person_achievements.longWaitPR.description: criou um PR que ficou mais de um mês em revisão
|
||
§ plugin.person_achievements.moreLongWaitPR.title: Há muito tempo, numa galáxia muito distante
|
||
§ plugin.person_achievements.moreLongWaitPR.description: criou um PR que ficou em revisão o maior tempo
|
||
§ plugin.person_achievements.oneExtension.title: Um exército de um só
|
||
§ plugin.person_achievements.oneExtension.description: só esta pessoa trabalha com ficheiros de determinada extensão
|
||
§ plugin.person_achievements.fileRush.title: Zerg Rush
|
||
§ plugin.person_achievements.fileRush.description: criou mais ficheiros no projeto do que qualquer outra pessoa
|
||
§ plugin.person_achievements.moreLintHint.title: Grammar Nazi
|
||
§ plugin.person_achievements.moreLintHint.description: criou ou alterou mais regras de verificação automática do que qualquer outra pessoa
|
||
§ plugin.person_achievements.moreReadMe.title: Cronista
|
||
§ plugin.person_achievements.moreReadMe.description: criou ou alterou mais ficheiros MD do que qualquer outra pessoa
|
||
§ plugin.person_achievements.moreDevOps.title: DevOps
|
||
§ plugin.person_achievements.moreDevOps.description: criou ou alterou mais ficheiros de CI/CD do que qualquer outra pessoa
|
||
§ plugin.person_achievements.moreTests.title: Testador
|
||
§ plugin.person_achievements.moreTests.description: criou ou alterou mais ficheiros de testes do que qualquer outra pessoa
|
||
§ plugin.person_achievements.allRelease.title: Full house
|
||
§ plugin.person_achievements.allRelease.description: existe uma versão compilada apenas a partir das suas tarefas
|
||
§ plugin.person_achievements.firstCommit.title: Quem chega primeiro
|
||
§ plugin.person_achievements.firstCommit.description: primeiro commit no projeto
|
||
§ plugin.person_achievements.lastCommit.title: Terminei
|
||
§ plugin.person_achievements.lastCommit.description: último commit no projeto
|
||
§ plugin.person_achievements.firstLastCommit.title: Do princípio ao fim
|
||
§ plugin.person_achievements.firstLastCommit.description: primeiro e último commit no projeto
|
||
§ plugin.person_achievements.longFilePath.title: Celeiros da pátria
|
||
§ plugin.person_achievements.longFilePath.description: o primeiro a criar um ficheiro com o aninhamento mais profundo
|
||
§ plugin.person_achievements.longFileName.title: O tamanho importa
|
||
§ plugin.person_achievements.longFileName.description: criou um ficheiro com o nome mais longo
|
||
§ plugin.person_achievements.workOnWeekends.title: O trabalho não é um passeio
|
||
§ plugin.person_achievements.workOnWeekends.description: trabalhou pelo menos uma vez ao fim de semana
|
||
§ plugin.person_achievements.removeCreateFile.title: Desenterrou a hospedeira
|
||
§ plugin.person_achievements.removeCreateFile.description: restaurou um ficheiro eliminado
|
||
§ plugin.person_achievements.renameFile.title: Astana Nur-Sultan Astana
|
||
§ plugin.person_achievements.renameFile.description: mudou o nome de um ficheiro para um lado e para o outro
|
||
§ plugin.person_achievements.longTask.title: Parece fácil
|
||
§ plugin.person_achievements.longTask.description: trabalhou numa tarefa durante mais de três meses
|
||
§ plugin.person_achievements.haveNotEmail.title: Carteiro Pechkin
|
||
§ plugin.person_achievements.haveNotEmail.description: não preencheu o campo e-mail no git config
|
||
§ plugin.person_achievements.moreAddedFolders.title: Diretor
|
||
§ plugin.person_achievements.moreAddedFolders.description: criou mais diretórios do que qualquer outra pessoa
|
||
§ plugin.person_achievements.horoscope1.title: Mercúrio retrógrado em Capricórnio
|
||
§ plugin.person_achievements.horoscope2.title: Mercúrio retrógrado em Aquário
|
||
§ plugin.person_achievements.horoscope3.title: Mercúrio retrógrado em Peixes
|
||
§ plugin.person_achievements.horoscope4.title: Mercúrio retrógrado em Carneiro
|
||
§ plugin.person_achievements.horoscope5.title: Mercúrio retrógrado em Touro
|
||
§ plugin.person_achievements.horoscope6.title: Mercúrio retrógrado em Gémeos
|
||
§ plugin.person_achievements.horoscope7.title: Mercúrio retrógrado em Caranguejo
|
||
§ plugin.person_achievements.horoscope8.title: Mercúrio retrógrado em Leão
|
||
§ plugin.person_achievements.horoscope9.title: Mercúrio retrógrado em Virgem
|
||
§ plugin.person_achievements.horoscope10.title: Mercúrio retrógrado em Balança
|
||
§ plugin.person_achievements.horoscope11.title: Mercúrio retrógrado em Escorpião
|
||
§ plugin.person_achievements.horoscope12.title: Mercúrio retrógrado em Sagitário
|
||
§ plugin.person_achievements.horoscope1.description: segundo o mês do primeiro commit
|
||
§ plugin.person_achievements.horoscope2.description: segundo o mês do primeiro commit
|
||
§ plugin.person_achievements.horoscope3.description: segundo o mês do primeiro commit
|
||
§ plugin.person_achievements.horoscope4.description: segundo o mês do primeiro commit
|
||
§ plugin.person_achievements.horoscope5.description: segundo o mês do primeiro commit
|
||
§ plugin.person_achievements.horoscope6.description: segundo o mês do primeiro commit
|
||
§ plugin.person_achievements.horoscope7.description: segundo o mês do primeiro commit
|
||
§ plugin.person_achievements.horoscope8.description: segundo o mês do primeiro commit
|
||
§ plugin.person_achievements.horoscope9.description: segundo o mês do primeiro commit
|
||
§ plugin.person_achievements.horoscope10.description: segundo o mês do primeiro commit
|
||
§ plugin.person_achievements.horoscope11.description: segundo o mês do primeiro commit
|
||
§ plugin.person_achievements.horoscope12.description: segundo o mês do primeiro commit
|
||
§ plugin.person_achievements.moreChangeTimeZone.title: Aaaaa-viasales
|
||
§ plugin.person_achievements.moreChangeTimeZone.description: mudou de localização mais do que qualquer outra pessoa
|
||
§ plugin.person_achievements.publicitySitnik.title: Sitnik aprova
|
||
§ plugin.person_achievements.publicitySitnik.description: o primeiro a adicionar uma configuração PostCSS ou Browserslist
|
||
§ plugin.person_achievements.github.title: Governanta
|
||
§ plugin.person_achievements.github.description: além do trabalho principal, escreve um projeto pessoal
|
||
§ plugin.person_achievements.mackBook.title: Raf de baunilha com leite de coco
|
||
§ plugin.person_achievements.mackBook.description: usa um MacBook para trabalhar
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.title: Apressado de última hora
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.description: o maior aumento do número de commits antes de uma versão
|
||
§ plugin.person_achievements.ipInEmail.title: LAN-man
|
||
§ plugin.person_achievements.ipInEmail.description: usou um endereço IP local em vez do e-mail
|
||
§ plugin.person_achievements.languageErrors.title: Depende do fabric, depende dos details
|
||
§ plugin.person_achievements.languageErrors.description: usou regras de ortografia ou pontuação de outro idioma
|
||
`,ru:`
|
||
§ plugin.person_achievements.sidebar: Достижения
|
||
§ plugin.person_achievements.page.positive: Позитивные
|
||
§ plugin.person_achievements.page.normal: Нейтральные
|
||
§ plugin.person_achievements.page.negative: Негативные
|
||
§ plugin.person_achievements.page.publicity: Специальные
|
||
§ plugin.person_achievements.page.commitsWithBeautifulTaskNumbers: Красивые номера задач
|
||
§ plugin.person_achievements.page.description: Чем больше сотрудник набрал отрицательных достижений, тем больше вероятность, что ситуация нестандартная. Возможно, стоит изменить режим его работы, задачи или отчётность. Следует поговорить с ним и узнать, какие проблемы мешают его работе.
|
||
§ plugin.person_achievements.gets.title: Медали за номера задач:
|
||
§ plugin.person_achievements.gets.description: Медаль выдается, если пользователь первым оставляет коммит к задаче с «красивым» номером.
|
||
§ plugin.person_achievements.commitsAfter1500.title: Сова
|
||
§ plugin.person_achievements.commitsAfter1500.description: 70% коммитов после 15:00
|
||
§ plugin.person_achievements.commitsBefore1500.title: Ранняя пташка
|
||
§ plugin.person_achievements.commitsBefore1500.description: 70% коммитов до обеда
|
||
§ plugin.person_achievements.workEveryTime.title: Раб божий
|
||
§ plugin.person_achievements.workEveryTime.description: есть коммит на каждый час суток
|
||
§ plugin.person_achievements.workNotWork.title: Стрельба холостыми
|
||
§ plugin.person_achievements.workNotWork.description: коммиты есть, а закрытых задач нет
|
||
§ plugin.person_achievements.userNotWork.title: Залётный
|
||
§ plugin.person_achievements.userNotWork.description: это не его основной проект
|
||
§ plugin.person_achievements.userIsDied.title: Мёртвая душа
|
||
§ plugin.person_achievements.userIsDied.description: работал, но уволился
|
||
§ plugin.person_achievements.lessTasks.title: Зашел и вышел
|
||
§ plugin.person_achievements.lessTasks.description: меньше всего закрытых задач
|
||
§ plugin.person_achievements.moreTasks.title: Батя грит малаца
|
||
§ plugin.person_achievements.moreTasks.description: больше всего закрытых задач
|
||
§ plugin.person_achievements.everyMessageLong.title: Мастер красноречия
|
||
§ plugin.person_achievements.everyMessageLong.description: стабильно самые длинные подписи коммитов
|
||
§ plugin.person_achievements.everyMessageShort.title: Болтун находка для шпиона
|
||
§ plugin.person_achievements.everyMessageShort.description: стабильно, самые короткие подписи коммитов
|
||
§ plugin.person_achievements.shortestName.title: Размер не главное
|
||
§ plugin.person_achievements.shortestName.description: самое короткое имя
|
||
§ plugin.person_achievements.longestName.title: Азим Азиз Иль Ам Кадир Имран II
|
||
§ plugin.person_achievements.longestName.description: самое длинное имя
|
||
§ plugin.person_achievements.moreCommits.title: Мастер бекапов
|
||
§ plugin.person_achievements.moreCommits.description: больше всего коммитов
|
||
§ plugin.person_achievements.lessCommits.title: Редко но метко
|
||
§ plugin.person_achievements.lessCommits.description: меньше всего коммитов
|
||
§ plugin.person_achievements.oneCommitOneTask.title: Точно в цель
|
||
§ plugin.person_achievements.oneCommitOneTask.description: в среднем один коммит на задачу
|
||
§ plugin.person_achievements.moreLazyDays.title: Мысленно я с вами
|
||
§ plugin.person_achievements.moreLazyDays.description: больше всего дней без коммитов
|
||
§ plugin.person_achievements.lessLazyDays.title: Папа Карло
|
||
§ plugin.person_achievements.lessLazyDays.description: меньше всего дней без коммитов
|
||
§ plugin.person_achievements.zeroLazyDays.title: Ни единого разрыва
|
||
§ plugin.person_achievements.zeroLazyDays.description: ни одного дня без коммитов
|
||
§ plugin.person_achievements.moreWorkDays.title: Ценный работник
|
||
§ plugin.person_achievements.moreWorkDays.description: больше всего рабочих дней
|
||
§ plugin.person_achievements.moreScopes.title: Стартапер
|
||
§ plugin.person_achievements.moreScopes.description: сделал больше всего фичей
|
||
§ plugin.person_achievements.lessScopes.title: Щегол
|
||
§ plugin.person_achievements.lessScopes.description: сделал меньше всего фичей
|
||
§ plugin.person_achievements.moreDaysForTask.title: Улитка на склоне
|
||
§ plugin.person_achievements.moreDaysForTask.description: работа по задачам идёт медленнее чем у остальных
|
||
§ plugin.person_achievements.more2DaysForTask.title: Cо слоу
|
||
§ plugin.person_achievements.more2DaysForTask.description: больше двух дней на задачу
|
||
§ plugin.person_achievements.more3YearsInProject.title: Старожил
|
||
§ plugin.person_achievements.more3YearsInProject.description: больше трех лет на проекте
|
||
§ plugin.person_achievements.lessDaysInProject.title: А это кто?
|
||
§ plugin.person_achievements.lessDaysInProject.description: меньше всего дней на проекте
|
||
§ plugin.person_achievements.lessDaysForTask.title: Скорострел
|
||
§ plugin.person_achievements.lessDaysForTask.description: одна задача занимает меньше дня
|
||
§ plugin.person_achievements.adam.title: Адам
|
||
§ plugin.person_achievements.adam.description: первый стабильный сотрудник на проекте
|
||
§ plugin.person_achievements.more90DaysInProject.title: Добро пожаловать
|
||
§ plugin.person_achievements.more90DaysInProject.description: не уволили на испытательном
|
||
§ plugin.person_achievements.more365DaysInProject.title: Годовасик
|
||
§ plugin.person_achievements.more365DaysInProject.description: отработал год на проекте
|
||
§ plugin.person_achievements.more666DaysInProject.title: Чёрт
|
||
§ plugin.person_achievements.more666DaysInProject.description: отработал 666 дней на проекте
|
||
§ plugin.person_achievements.more777DaysInProject.title: Азино 3 топора
|
||
§ plugin.person_achievements.more777DaysInProject.description: отработал 777 дней на проекте
|
||
§ plugin.person_achievements.moreDaysInProject.title: Часть команды, часть корабля
|
||
§ plugin.person_achievements.moreDaysInProject.description: больше всего дней на проекте
|
||
§ plugin.person_achievements.moreRefactoring.title: Выпускающий редактор
|
||
§ plugin.person_achievements.moreRefactoring.description: сделал больше всех меток «рефакторинг»
|
||
§ plugin.person_achievements.longestMessage.title: «Языком болтать» не мешки ворочать
|
||
§ plugin.person_achievements.longestMessage.description: самая длинная подпись коммита за все время
|
||
§ plugin.person_achievements.moreTasksInDay.title: Спиди-гонщик
|
||
§ plugin.person_achievements.moreTasksInDay.description: рекорд по количеству закрытых задач в день
|
||
§ plugin.person_achievements.hasCommitFrom0to7.title: Ночной дозор
|
||
§ plugin.person_achievements.hasCommitFrom0to7.description: есть коммит на каждый час ночи
|
||
§ plugin.person_achievements.noCommitOnDay.title: Технический перерыв
|
||
§ plugin.person_achievements.noCommitOnDay.description: есть определенный час и день в рабочее время в который никогда не комитит
|
||
§ plugin.person_achievements.hasCommitEveryTime.title: Умер на работе
|
||
§ plugin.person_achievements.hasCommitEveryTime.description: есть коммит на час каждого дня (включая выходные)
|
||
§ plugin.person_achievements.commitsAfter1800.title: Делу время
|
||
§ plugin.person_achievements.commitsAfter1800.description: нет ни одного коммита после 18:00
|
||
§ plugin.person_achievements.moreFix.title: Bug hunter
|
||
§ plugin.person_achievements.moreFix.description: больше всего закрытых багов
|
||
§ plugin.person_achievements.lessWorkDays.title: Дальше без меня
|
||
§ plugin.person_achievements.lessWorkDays.description: меньше всего рабочих дней
|
||
§ plugin.person_achievements.moreCreateCode.title: Созидатель
|
||
§ plugin.person_achievements.moreCreateCode.description: склонен больше остальных добавлять код
|
||
§ plugin.person_achievements.moreRemoveCode.title: Разрушитель
|
||
§ plugin.person_achievements.moreRemoveCode.description: склонен больше остальных удалять код
|
||
§ plugin.person_achievements.moreChangeCode.title: Реформатор
|
||
§ plugin.person_achievements.moreChangeCode.description: склонен больше остальных изменять код
|
||
§ plugin.person_achievements.moreStyle.title: Полиция моды
|
||
§ plugin.person_achievements.moreStyle.description: склонен больше остальных изменять CSS
|
||
§ plugin.person_achievements.moreOnHoliday.title: Нет жизни
|
||
§ plugin.person_achievements.moreOnHoliday.description: относительно много коммитов в нерабочее время
|
||
§ plugin.person_achievements.morePRMerge.title: Таможня даёт добро
|
||
§ plugin.person_achievements.morePRMerge.description: чаще остальных нажимает кнопку «Влить» для PR
|
||
§ plugin.person_achievements.longWaitPR.title: Завтра точно вольём
|
||
§ plugin.person_achievements.longWaitPR.description: создал PR, который больше месяца провисел на ревью
|
||
§ plugin.person_achievements.moreLongWaitPR.title: Давным давно, в далёкой галактике
|
||
§ plugin.person_achievements.moreLongWaitPR.description: создал PR, который максимально долго провисел на ревью
|
||
§ plugin.person_achievements.oneExtension.title: Один в поле воин
|
||
§ plugin.person_achievements.oneExtension.description: только он работает с файлами определенного расширения
|
||
§ plugin.person_achievements.fileRush.title: Зерг Раш
|
||
§ plugin.person_achievements.fileRush.description: создал больше всех файлов в проекте
|
||
§ plugin.person_achievements.moreLintHint.title: Грамар-наци
|
||
§ plugin.person_achievements.moreLintHint.description: больше всех создал или изменил в правилах авто-проверки кода
|
||
§ plugin.person_achievements.moreReadMe.title: Летописец
|
||
§ plugin.person_achievements.moreReadMe.description: больше всех создал или изменил файлов MD
|
||
§ plugin.person_achievements.moreDevOps.title: DevOps
|
||
§ plugin.person_achievements.moreDevOps.description: больше всех создал или изменил файлов для CI/CD
|
||
§ plugin.person_achievements.moreTests.title: Тестировщик
|
||
§ plugin.person_achievements.moreTests.description: больше всех создал или изменил файлов для тестирования
|
||
§ plugin.person_achievements.allRelease.title: Фулл хаус
|
||
§ plugin.person_achievements.allRelease.description: есть релиз, собранный только из его задач
|
||
§ plugin.person_achievements.firstCommit.title: Кто первый, того и тапки
|
||
§ plugin.person_achievements.firstCommit.description: первый коммит на проекте
|
||
§ plugin.person_achievements.lastCommit.title: Я закончил
|
||
§ plugin.person_achievements.lastCommit.description: последний коммит на проекте
|
||
§ plugin.person_achievements.firstLastCommit.title: От начала и до конца
|
||
§ plugin.person_achievements.firstLastCommit.description: первый и последний коммит на проекте
|
||
§ plugin.person_achievements.longFilePath.title: Закрома родины
|
||
§ plugin.person_achievements.longFilePath.description: первый создал файл с самым глубоким вложением
|
||
§ plugin.person_achievements.longFileName.title: Размер имеет значение
|
||
§ plugin.person_achievements.longFileName.description: создал файл с самым длинным именемм
|
||
§ plugin.person_achievements.workOnWeekends.title: Работа не walk
|
||
§ plugin.person_achievements.workOnWeekends.description: хоть раз работал на выходных
|
||
§ plugin.person_achievements.removeCreateFile.title: Откопал стюардессу
|
||
§ plugin.person_achievements.removeCreateFile.description: востановил удаленный файл
|
||
§ plugin.person_achievements.renameFile.title: Астана Нур-Султан Астана
|
||
§ plugin.person_achievements.renameFile.description: переименовывал туда-сюда файл
|
||
§ plugin.person_achievements.longTask.title: Вроде изян
|
||
§ plugin.person_achievements.longTask.description: работал над задачей больше трех месяцев
|
||
§ plugin.person_achievements.haveNotEmail.title: Почтальон Печкин
|
||
§ plugin.person_achievements.haveNotEmail.description: не заполнил поле e-mail в git config
|
||
§ plugin.person_achievements.moreAddedFolders.title: Директор
|
||
§ plugin.person_achievements.moreAddedFolders.description: создал больше всех дирректорий
|
||
§ plugin.person_achievements.horoscope1.title: Ретроградный Меркурий в Козероге
|
||
§ plugin.person_achievements.horoscope2.title: Ретроградный Меркурий в Водолее
|
||
§ plugin.person_achievements.horoscope3.title: Ретроградный Меркурий в Рыбе
|
||
§ plugin.person_achievements.horoscope4.title: Ретроградный Меркурий в Овне
|
||
§ plugin.person_achievements.horoscope5.title: Ретроградный Меркурий в Тельце
|
||
§ plugin.person_achievements.horoscope6.title: Ретроградный Меркурий в Близнеце
|
||
§ plugin.person_achievements.horoscope7.title: Ретроградный Меркурий в Раке
|
||
§ plugin.person_achievements.horoscope8.title: Ретроградный Меркурий в Льве
|
||
§ plugin.person_achievements.horoscope9.title: Ретроградный Меркурий в Деве
|
||
§ plugin.person_achievements.horoscope10.title: Ретроградный Меркурий в Весах
|
||
§ plugin.person_achievements.horoscope11.title: Ретроградный Меркурий в Скорпионе
|
||
§ plugin.person_achievements.horoscope12.title: Ретроградный Меркурий в Стрельце
|
||
§ plugin.person_achievements.horoscope1.description: по месяцу первого коммита
|
||
§ plugin.person_achievements.horoscope2.description: по месяцу первого коммита
|
||
§ plugin.person_achievements.horoscope3.description: по месяцу первого коммита
|
||
§ plugin.person_achievements.horoscope4.description: по месяцу первого коммита
|
||
§ plugin.person_achievements.horoscope5.description: по месяцу первого коммита
|
||
§ plugin.person_achievements.horoscope6.description: по месяцу первого коммита
|
||
§ plugin.person_achievements.horoscope7.description: по месяцу первого коммита
|
||
§ plugin.person_achievements.horoscope8.description: по месяцу первого коммита
|
||
§ plugin.person_achievements.horoscope9.description: по месяцу первого коммита
|
||
§ plugin.person_achievements.horoscope10.description: по месяцу первого коммита
|
||
§ plugin.person_achievements.horoscope11.description: по месяцу первого коммита
|
||
§ plugin.person_achievements.horoscope12.description: по месяцу первого коммита
|
||
§ plugin.person_achievements.moreChangeTimeZone.title: Aaaaa-viasales
|
||
§ plugin.person_achievements.moreChangeTimeZone.description: больше всех менял местоположение
|
||
§ plugin.person_achievements.publicitySitnik.title: Ситник одобряет
|
||
§ plugin.person_achievements.publicitySitnik.description: первый добавил PostCSS или Browserslist конфиг
|
||
§ plugin.person_achievements.github.title: Домработница
|
||
§ plugin.person_achievements.github.description: кроме основной работы пишет домашний проект
|
||
§ plugin.person_achievements.mackBook.title: Ванильный раф на кокосовом молоке
|
||
§ plugin.person_achievements.mackBook.description: использует MackBook для работы
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.title: Суетолог
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.description: максимальное увеличение числа коммитов перед релизом
|
||
§ plugin.person_achievements.ipInEmail.title: LAN-man
|
||
§ plugin.person_achievements.ipInEmail.description: вместо email использовал локальный IP адрес
|
||
§ plugin.person_achievements.languageErrors.title: Смотря какой fabric, смотря сколько details
|
||
§ plugin.person_achievements.languageErrors.description: использовал правила орфографии или пунктуации от другого языка
|
||
`,zh:`
|
||
§ plugin.person_achievements.sidebar: 成就
|
||
§ plugin.person_achievements.page.positive: 正面
|
||
§ plugin.person_achievements.page.normal: 中性
|
||
§ plugin.person_achievements.page.negative: 负面
|
||
§ plugin.person_achievements.page.publicity: 特殊
|
||
§ plugin.person_achievements.page.commitsWithBeautifulTaskNumbers: 漂亮的任务编号
|
||
§ plugin.person_achievements.page.description: 员工获得的负面成就越多,情况越可能不寻常。或许应调整其工作节奏、任务或汇报方式。应当与其沟通,了解妨碍其工作的问题。
|
||
§ plugin.person_achievements.gets.title: 任务编号奖牌:
|
||
§ plugin.person_achievements.gets.description: 若用户最先为带有「漂亮」编号的任务留下 commit,则授予奖牌。
|
||
§ plugin.person_achievements.commitsAfter1500.title: 夜猫子
|
||
§ plugin.person_achievements.commitsAfter1500.description: 70% 的 commits 在 15:00 之后
|
||
§ plugin.person_achievements.commitsBefore1500.title: 早起的鸟儿
|
||
§ plugin.person_achievements.commitsBefore1500.description: 70% 的 commits 在午餐前
|
||
§ plugin.person_achievements.workEveryTime.title: 上帝的仆人
|
||
§ plugin.person_achievements.workEveryTime.description: 一天中每个小时都有 commit
|
||
§ plugin.person_achievements.workNotWork.title: 空包弹
|
||
§ plugin.person_achievements.workNotWork.description: 有 commits,但没有已关闭的任务
|
||
§ plugin.person_achievements.userNotWork.title: 过客
|
||
§ plugin.person_achievements.userNotWork.description: 这不是其主要项目
|
||
§ plugin.person_achievements.userIsDied.title: 死魂灵
|
||
§ plugin.person_achievements.userIsDied.description: 曾工作,但已离职
|
||
§ plugin.person_achievements.lessTasks.title: 进进出出
|
||
§ plugin.person_achievements.lessTasks.description: 已关闭任务最少
|
||
§ plugin.person_achievements.moreTasks.title: 爸爸说干得好
|
||
§ plugin.person_achievements.moreTasks.description: 已关闭任务最多
|
||
§ plugin.person_achievements.everyMessageLong.title: 雄辩大师
|
||
§ plugin.person_achievements.everyMessageLong.description: 一贯拥有最长的 commit messages
|
||
§ plugin.person_achievements.everyMessageShort.title: 嘴不严
|
||
§ plugin.person_achievements.everyMessageShort.description: 一贯拥有最短的 commit messages
|
||
§ plugin.person_achievements.shortestName.title: 尺寸不是一切
|
||
§ plugin.person_achievements.shortestName.description: 最短的名字
|
||
§ plugin.person_achievements.longestName.title: Azim Aziz Il Am Qadir Imran II
|
||
§ plugin.person_achievements.longestName.description: 最长的名字
|
||
§ plugin.person_achievements.moreCommits.title: 备份大师
|
||
§ plugin.person_achievements.moreCommits.description: commits 最多
|
||
§ plugin.person_achievements.lessCommits.title: 虽少但准
|
||
§ plugin.person_achievements.lessCommits.description: commits 最少
|
||
§ plugin.person_achievements.oneCommitOneTask.title: 正中靶心
|
||
§ plugin.person_achievements.oneCommitOneTask.description: 平均每个任务一个 commit
|
||
§ plugin.person_achievements.moreLazyDays.title: 心与你们同在
|
||
§ plugin.person_achievements.moreLazyDays.description: 无 commits 的天数最多
|
||
§ plugin.person_achievements.lessLazyDays.title: Papa Carlo
|
||
§ plugin.person_achievements.lessLazyDays.description: 无 commits 的天数最少
|
||
§ plugin.person_achievements.zeroLazyDays.title: 毫无间断
|
||
§ plugin.person_achievements.zeroLazyDays.description: 没有一天没有 commits
|
||
§ plugin.person_achievements.moreWorkDays.title: 宝贵员工
|
||
§ plugin.person_achievements.moreWorkDays.description: 工作日最多
|
||
§ plugin.person_achievements.moreScopes.title: 创业者
|
||
§ plugin.person_achievements.moreScopes.description: 创建的功能最多
|
||
§ plugin.person_achievements.lessScopes.title: 新手
|
||
§ plugin.person_achievements.lessScopes.description: 创建的功能最少
|
||
§ plugin.person_achievements.moreDaysForTask.title: 斜坡上的蜗牛
|
||
§ plugin.person_achievements.moreDaysForTask.description: 任务推进比其他人更慢
|
||
§ plugin.person_achievements.more2DaysForTask.title: So slow
|
||
§ plugin.person_achievements.more2DaysForTask.description: 每个任务超过两天
|
||
§ plugin.person_achievements.more3YearsInProject.title: 老资格
|
||
§ plugin.person_achievements.more3YearsInProject.description: 在项目上超过三年
|
||
§ plugin.person_achievements.lessDaysInProject.title: 这是谁?
|
||
§ plugin.person_achievements.lessDaysInProject.description: 在项目上的天数最少
|
||
§ plugin.person_achievements.lessDaysForTask.title: 速射
|
||
§ plugin.person_achievements.lessDaysForTask.description: 一项任务耗时不足一天
|
||
§ plugin.person_achievements.adam.title: 亚当
|
||
§ plugin.person_achievements.adam.description: 项目上第一位稳定员工
|
||
§ plugin.person_achievements.more90DaysInProject.title: 欢迎
|
||
§ plugin.person_achievements.more90DaysInProject.description: 试用期内未被解雇
|
||
§ plugin.person_achievements.more365DaysInProject.title: 一周岁
|
||
§ plugin.person_achievements.more365DaysInProject.description: 在项目上工作满一年
|
||
§ plugin.person_achievements.more666DaysInProject.title: 魔鬼
|
||
§ plugin.person_achievements.more666DaysInProject.description: 在项目上工作了 666 天
|
||
§ plugin.person_achievements.more777DaysInProject.title: 幸运七
|
||
§ plugin.person_achievements.more777DaysInProject.description: 在项目上工作了 777 天
|
||
§ plugin.person_achievements.moreDaysInProject.title: 船员的一部分,船的一部分
|
||
§ plugin.person_achievements.moreDaysInProject.description: 在项目上的天数最多
|
||
§ plugin.person_achievements.moreRefactoring.title: 责任编辑
|
||
§ plugin.person_achievements.moreRefactoring.description: 添加的 «refactoring» 标记最多
|
||
§ plugin.person_achievements.longestMessage.title: 空谈廉价
|
||
§ plugin.person_achievements.longestMessage.description: 有史以来最长的 commit message
|
||
§ plugin.person_achievements.moreTasksInDay.title: Speed Racer
|
||
§ plugin.person_achievements.moreTasksInDay.description: 单日关闭任务数纪录
|
||
§ plugin.person_achievements.hasCommitFrom0to7.title: 夜巡
|
||
§ plugin.person_achievements.hasCommitFrom0to7.description: 夜间每个小时都有 commit
|
||
§ plugin.person_achievements.noCommitOnDay.title: 技术休息
|
||
§ plugin.person_achievements.noCommitOnDay.description: 在工作时间内存在某个从不进行 commit 的特定星期几与小时
|
||
§ plugin.person_achievements.hasCommitEveryTime.title: 死在工作上
|
||
§ plugin.person_achievements.hasCommitEveryTime.description: 每一天的某个小时都有 commit(含周末)
|
||
§ plugin.person_achievements.commitsAfter1800.title: 工作时间
|
||
§ plugin.person_achievements.commitsAfter1800.description: 18:00 之后没有任何 commit
|
||
§ plugin.person_achievements.moreFix.title: Bug hunter
|
||
§ plugin.person_achievements.moreFix.description: 关闭的缺陷最多
|
||
§ plugin.person_achievements.lessWorkDays.title: 请继续,没有我了
|
||
§ plugin.person_achievements.lessWorkDays.description: 工作日最少
|
||
§ plugin.person_achievements.moreCreateCode.title: 创造者
|
||
§ plugin.person_achievements.moreCreateCode.description: 比其他人更倾向于添加代码
|
||
§ plugin.person_achievements.moreRemoveCode.title: 破坏者
|
||
§ plugin.person_achievements.moreRemoveCode.description: 比其他人更倾向于删除代码
|
||
§ plugin.person_achievements.moreChangeCode.title: 改革者
|
||
§ plugin.person_achievements.moreChangeCode.description: 比其他人更倾向于修改代码
|
||
§ plugin.person_achievements.moreStyle.title: 时尚警察
|
||
§ plugin.person_achievements.moreStyle.description: 比其他人更倾向于修改 CSS
|
||
§ plugin.person_achievements.moreOnHoliday.title: 没有生活
|
||
§ plugin.person_achievements.moreOnHoliday.description: 非工作时间的 commits 相对较多
|
||
§ plugin.person_achievements.morePRMerge.title: 海关放行
|
||
§ plugin.person_achievements.morePRMerge.description: 比其他人更频繁地点击 PR 的 «Merge» 按钮
|
||
§ plugin.person_achievements.longWaitPR.title: 明天一定合并
|
||
§ plugin.person_achievements.longWaitPR.description: 创建了一个在评审中停留超过一个月的 PR
|
||
§ plugin.person_achievements.moreLongWaitPR.title: 很久以前,在遥远的星系
|
||
§ plugin.person_achievements.moreLongWaitPR.description: 创建了在评审中停留时间最长的 PR
|
||
§ plugin.person_achievements.oneExtension.title: 一人成军
|
||
§ plugin.person_achievements.oneExtension.description: 只有此人处理特定扩展名的文件
|
||
§ plugin.person_achievements.fileRush.title: Zerg Rush
|
||
§ plugin.person_achievements.fileRush.description: 在项目中创建的文件比任何人都多
|
||
§ plugin.person_achievements.moreLintHint.title: Grammar Nazi
|
||
§ plugin.person_achievements.moreLintHint.description: 创建或修改的自动检查规则比任何人都多
|
||
§ plugin.person_achievements.moreReadMe.title: 编年史作者
|
||
§ plugin.person_achievements.moreReadMe.description: 创建或修改的 MD 文件比任何人都多
|
||
§ plugin.person_achievements.moreDevOps.title: DevOps
|
||
§ plugin.person_achievements.moreDevOps.description: 创建或修改的 CI/CD 文件比任何人都多
|
||
§ plugin.person_achievements.moreTests.title: 测试人员
|
||
§ plugin.person_achievements.moreTests.description: 创建或修改的测试文件比任何人都多
|
||
§ plugin.person_achievements.allRelease.title: 满堂红
|
||
§ plugin.person_achievements.allRelease.description: 存在仅由其任务组成的发布
|
||
§ plugin.person_achievements.firstCommit.title: 先到先得
|
||
§ plugin.person_achievements.firstCommit.description: 项目上的第一个 commit
|
||
§ plugin.person_achievements.lastCommit.title: 我完成了
|
||
§ plugin.person_achievements.lastCommit.description: 项目上的最后一个 commit
|
||
§ plugin.person_achievements.firstLastCommit.title: 从始至终
|
||
§ plugin.person_achievements.firstLastCommit.description: 项目上的第一个和最后一个 commit
|
||
§ plugin.person_achievements.longFilePath.title: 祖国的粮仓
|
||
§ plugin.person_achievements.longFilePath.description: 最先创建嵌套最深的文件
|
||
§ plugin.person_achievements.longFileName.title: 尺寸很重要
|
||
§ plugin.person_achievements.longFileName.description: 创建了名称最长的文件
|
||
§ plugin.person_achievements.workOnWeekends.title: 工作不是散步
|
||
§ plugin.person_achievements.workOnWeekends.description: 至少有一次在周末工作
|
||
§ plugin.person_achievements.removeCreateFile.title: 挖出了空乘
|
||
§ plugin.person_achievements.removeCreateFile.description: 恢复了已删除的文件
|
||
§ plugin.person_achievements.renameFile.title: Astana Nur-Sultan Astana
|
||
§ plugin.person_achievements.renameFile.description: 来回重命名文件
|
||
§ plugin.person_achievements.longTask.title: 看起来简单
|
||
§ plugin.person_achievements.longTask.description: 一项任务做了三个月以上
|
||
§ plugin.person_achievements.haveNotEmail.title: 邮递员 Pechkin
|
||
§ plugin.person_achievements.haveNotEmail.description: 未填写 git config 中的 e-mail 字段
|
||
§ plugin.person_achievements.moreAddedFolders.title: 总监
|
||
§ plugin.person_achievements.moreAddedFolders.description: 创建的目录比任何人都多
|
||
§ plugin.person_achievements.horoscope1.title: 摩羯座逆行水星
|
||
§ plugin.person_achievements.horoscope2.title: 水瓶座逆行水星
|
||
§ plugin.person_achievements.horoscope3.title: 双鱼座逆行水星
|
||
§ plugin.person_achievements.horoscope4.title: 白羊座逆行水星
|
||
§ plugin.person_achievements.horoscope5.title: 金牛座逆行水星
|
||
§ plugin.person_achievements.horoscope6.title: 双子座逆行水星
|
||
§ plugin.person_achievements.horoscope7.title: 巨蟹座逆行水星
|
||
§ plugin.person_achievements.horoscope8.title: 狮子座逆行水星
|
||
§ plugin.person_achievements.horoscope9.title: 处女座逆行水星
|
||
§ plugin.person_achievements.horoscope10.title: 天秤座逆行水星
|
||
§ plugin.person_achievements.horoscope11.title: 天蝎座逆行水星
|
||
§ plugin.person_achievements.horoscope12.title: 射手座逆行水星
|
||
§ plugin.person_achievements.horoscope1.description: 按首次 commit 的月份
|
||
§ plugin.person_achievements.horoscope2.description: 按首次 commit 的月份
|
||
§ plugin.person_achievements.horoscope3.description: 按首次 commit 的月份
|
||
§ plugin.person_achievements.horoscope4.description: 按首次 commit 的月份
|
||
§ plugin.person_achievements.horoscope5.description: 按首次 commit 的月份
|
||
§ plugin.person_achievements.horoscope6.description: 按首次 commit 的月份
|
||
§ plugin.person_achievements.horoscope7.description: 按首次 commit 的月份
|
||
§ plugin.person_achievements.horoscope8.description: 按首次 commit 的月份
|
||
§ plugin.person_achievements.horoscope9.description: 按首次 commit 的月份
|
||
§ plugin.person_achievements.horoscope10.description: 按首次 commit 的月份
|
||
§ plugin.person_achievements.horoscope11.description: 按首次 commit 的月份
|
||
§ plugin.person_achievements.horoscope12.description: 按首次 commit 的月份
|
||
§ plugin.person_achievements.moreChangeTimeZone.title: Aaaaa-viasales
|
||
§ plugin.person_achievements.moreChangeTimeZone.description: 变更所在地比任何人都多
|
||
§ plugin.person_achievements.publicitySitnik.title: Sitnik 认可
|
||
§ plugin.person_achievements.publicitySitnik.description: 最先添加 PostCSS 或 Browserslist 配置
|
||
§ plugin.person_achievements.github.title: 管家
|
||
§ plugin.person_achievements.github.description: 除本职工作外还在写个人项目
|
||
§ plugin.person_achievements.mackBook.title: 椰奶香草拉夫
|
||
§ plugin.person_achievements.mackBook.description: 工作使用 MacBook
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.title: 临阵忙乱者
|
||
§ plugin.person_achievements.moreCommitsBeforeRelease.description: 发布前 commits 数量增幅最大
|
||
§ plugin.person_achievements.ipInEmail.title: LAN-man
|
||
§ plugin.person_achievements.ipInEmail.description: 用本地 IP 地址代替 email
|
||
§ plugin.person_achievements.languageErrors.title: 取决于 fabric,取决于 details
|
||
§ plugin.person_achievements.languageErrors.description: 使用了另一种语言的拼写或标点规则
|
||
`},Yi={component_beautiful_tn:"component_beautiful_tn",component_beautiful_tn_container:"component_beautiful_tn_container",component_beautiful_tn_title:"component_beautiful_tn_title",component_beautiful_tn_icon:"component_beautiful_tn_icon",component_beautiful_tn_big_number:"component_beautiful_tn_big_number",component_beautiful_tn_task:"component_beautiful_tn_task",component_beautiful_tn_pr:"component_beautiful_tn_pr",component_beautiful_tn_date:"component_beautiful_tn_date"};function mB({commit:t,mode:e}){var c;const n=(`${t.taskNumber}`.length||1)>5?Yi.component_beautiful_tn_big_number:"",r=jt.tasks.totalInfoByName.get(t.task),u=jt.pr.totalInfoByName.get((c=r==null?void 0:r.prIds)==null?void 0:c[0]);return o.jsxs("div",{className:Yi.component_beautiful_tn,children:[o.jsxs("div",{className:Yi.component_beautiful_tn_title,children:[o.jsx(Ri,{task:t.task,className:Yi.component_beautiful_tn_task}),e!=="print"&&o.jsx(Hs,{text:"pull request",prId:u,className:Yi.component_beautiful_tn_pr})]}),o.jsx("div",{className:`${Yi.component_beautiful_tn_icon} ${n}`,children:t.taskNumber}),o.jsx("div",{className:Yi.component_beautiful_tn_date,children:oe(t.date)})]})}function uB({list:t,mode:e}){const s=t==null?void 0:t.map(n=>o.jsx(mB,{commit:n,mode:e},n.taskNumber));return o.jsx("div",{className:Yi.component_beautiful_tn_container,children:s})}function Mc({list:t}){const e=t==null?void 0:t.map(s=>o.jsx(vk,{code:s},s));return o.jsx("div",{className:Fa.achievement_container,children:e})}const cs={person_achievements_header:"person_achievements_header",person_achievements_header_center:"person_achievements_header_center",person_achievements_header_left:"person_achievements_header_left",person_achievements_header_right:"person_achievements_header_right",person_achievements_header_left_svg:"person_achievements_header_left_svg",person_achievements_header_progress:"person_achievements_header_progress",person_achievements_header_progress_value:"person_achievements_header_progress_value",person_achievements_header_title:"person_achievements_header_title",person_achievements_header_experience:"person_achievements_header_experience",person_achievements_header_level:"person_achievements_header_level",person_achievements_header_level_description:"person_achievements_header_level_description"};function cB(t){let e=t/10>>0;return e>5&&(e=5),`./assets/level/${e+1}.svg`}function pB({user:t,experience:e}){const s=e/400>>0,n=e-s*400,r=n>0?`XP +${n}`:`XP - ${n}`,u=Math.min(Math.round(n*100/400),100),c=cB(s);return o.jsxs("div",{className:cs.person_achievements_header,children:[o.jsx("div",{className:cs.person_achievements_header_left,children:o.jsx("img",{alt:"",className:cs.person_achievements_header_left_svg,src:c})}),o.jsxs("div",{className:cs.person_achievements_header_center,children:[o.jsx("p",{className:cs.person_achievements_header_title,children:t==null?void 0:t.author}),o.jsx("div",{className:cs.person_achievements_header_progress,children:o.jsx("div",{className:cs.person_achievements_header_progress_value,style:{width:`${u}%`}})}),o.jsx("p",{className:cs.person_achievements_header_experience,children:r})]}),o.jsxs("div",{className:cs.person_achievements_header_right,children:[o.jsx("div",{className:cs.person_achievements_header_level,children:s}),o.jsx("div",{className:cs.person_achievements_header_level_description,children:"LEVEL"})]})]})}function dB({positive:t,normal:e,publicity:s,commitsWithBeautifulTaskNumbers:n}){return o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(ke,{value:String(t.length),icon:"./assets/cards/positive.svg",title:"plugin.person_achievements.page.positive"}),o.jsx(ke,{value:String(e.length),icon:"./assets/cards/middle.svg",title:"plugin.person_achievements.page.normal"})]}),o.jsxs(Q,{children:[o.jsx(ke,{value:String(s.length),icon:"./assets/cards/publicity.svg",title:"plugin.person_achievements.page.publicity"}),o.jsx(ke,{value:String(n),icon:"./assets/cards/tasks.svg",title:"plugin.person_achievements.page.commitsWithBeautifulTaskNumbers"})]})]})}const gB=U(({user:t})=>{const e=A.statisticsByCommits.beautifulTaskNumbers.totalInfoByName.get(t.author),s=Bk()[t.author],[n,r,u,c]=[s[H.GOOD-1],s[H.NORMAL-1],s[H.BAD-1],s[H.PUBLICITY-1]],p=1+t.totalTasks*20+t.totalDays*2+((n==null?void 0:n.length)||0)*125+((r==null?void 0:r.length)||0)*65-((u==null?void 0:u.length)||0)*45+((c==null?void 0:c.length)||0)*235;return o.jsxs(o.Fragment,{children:[o.jsx(pB,{user:t,experience:p}),o.jsx(dB,{user:t,positive:n,normal:r,publicity:c,commitsWithBeautifulTaskNumbers:(e==null?void 0:e.length)||0}),o.jsxs(Y,{value:n,children:[o.jsx(G,{title:"plugin.person_achievements.page.positive"}),o.jsx(Mc,{list:n})]}),o.jsxs(Y,{value:r,children:[o.jsx(G,{title:"plugin.person_achievements.page.normal"}),o.jsx(Mc,{list:r})]}),o.jsxs(Y,{value:u,children:[o.jsx(G,{title:"plugin.person_achievements.page.negative"}),o.jsx(ot,{translationId:"plugin.person_achievements.page.description"}),o.jsx(Mc,{list:u}),o.jsx(nt,{height:"xl"})]}),o.jsxs(Y,{value:c,children:[o.jsx(G,{title:"plugin.person_achievements.page.publicity"}),o.jsx(Mc,{list:c})]}),o.jsxs(Y,{value:e,children:[o.jsx(G,{title:"plugin.person_achievements.gets.title"}),o.jsx(ot,{translationId:"plugin.person_achievements.gets.description"}),o.jsx(uB,{list:e})]})]})});let _B=($l=class{constructor(){this.dependencies=["beautifulTaskNumbers"]}getMenuItems(){return[{id:"achievements",group:10,order:15,link:"/person/achievements/",title:"plugin.person_achievements.sidebar",icon:"./assets/menu/achievement.svg"}]}getPage(e,s){return e==="/person/achievements"?o.jsx(gB,{mode:s==null?void 0:s.mode,user:s==null?void 0:s.user,filters:s==null?void 0:s.filters}):void 0}getTranslations(){return rB}},$l.id="person_achievements",$l);const hB={ar:`
|
||
§ plugin.person_money.sidebar: تكلفة العمل
|
||
§ plugin.person_money.title.total: الإجمالي عبر الفترة
|
||
§ plugin.person_money.title.middle: التكلفة المتوسطة
|
||
§ plugin.person_money.moneyAll.title: المستلَم
|
||
§ plugin.person_money.moneyAll.description: الراتب (انظر الإعدادات) مضروبًا في عدد الأشهر التي تم العمل فيها.
|
||
§ plugin.person_money.moneyWorked.title: أيام العمل
|
||
§ plugin.person_money.moneyWorked.description: الأيام التي تحتوي على commits مضروبة في تكلفة يوم عمل واحد.
|
||
§ plugin.person_money.moneyLosses.title: احتمال زيادة الدفع
|
||
§ plugin.person_money.moneyLosses.description: الأيام بدون commits مضروبة في تكلفة يوم عمل واحد.
|
||
§ plugin.person_money.weekendPayment.title: العمل في عطلات نهاية الأسبوع
|
||
§ plugin.person_money.weekendPayment.description: إجمالي الزيادة في الدفع مقابل العمل في عطلات نهاية الأسبوع
|
||
§ plugin.person_money.tasks.title: المهمة
|
||
§ plugin.person_money.tasks.description: عدد المهام التي تمت معالجتها بواسطة الموظف مقسومًا على تكلفة العمل (الأيام مع commits مضروبة في تكلفة يوم عمل واحد).
|
||
§ plugin.person_money.commits.title: commit
|
||
§ plugin.person_money.commits.description: إجمالي عدد commits عبر الفترة مقسومًا على تكلفة العمل (الأيام مع commits مضروبة في تكلفة يوم عمل واحد).
|
||
`,de:`
|
||
§ plugin.person_money.sidebar: Arbeitskosten
|
||
§ plugin.person_money.title.total: Gesamt über Zeit
|
||
§ plugin.person_money.title.middle: Durchschnittskosten
|
||
§ plugin.person_money.moneyAll.title: erhalten
|
||
§ plugin.person_money.moneyAll.description: Gehalt (siehe Einstellungen) multipliziert mit der Anzahl der gearbeiteten Monate.
|
||
§ plugin.person_money.moneyWorked.title: gearbeitet
|
||
§ plugin.person_money.moneyWorked.description: Tage mit commits multipliziert mit den Kosten eines Arbeitstages.
|
||
§ plugin.person_money.moneyLosses.title: mögliche Überzahlung
|
||
§ plugin.person_money.moneyLosses.description: Tage ohne commits multipliziert mit den Kosten eines Arbeitstages.
|
||
§ plugin.person_money.weekendPayment.title: Wochenendarbeit
|
||
§ plugin.person_money.weekendPayment.description: Gesamtüberzahlung für Wochenendarbeit
|
||
§ plugin.person_money.tasks.title: Aufgabe
|
||
§ plugin.person_money.tasks.description: Anzahl der Aufgaben, die der Mitarbeiter bearbeitet hat, dividiert durch die Arbeitskosten (Tage mit commits multipliziert mit den Kosten eines Arbeitstages).
|
||
§ plugin.person_money.commits.title: commit
|
||
§ plugin.person_money.commits.description: Gesamtanzahl der commits über die Zeit dividiert durch die Arbeitskosten (Tage mit commits multipliziert mit den Kosten eines Arbeitstages).
|
||
`,en:`
|
||
§ plugin.person_money.sidebar: Work cost
|
||
§ plugin.person_money.title.total: Total over time
|
||
§ plugin.person_money.title.middle: Average cost
|
||
§ plugin.person_money.moneyAll.title: received
|
||
§ plugin.person_money.moneyAll.description: Salary (see settings) multiplied by the number of months worked.
|
||
§ plugin.person_money.moneyWorked.title: worked
|
||
§ plugin.person_money.moneyWorked.description: Days with commits multiplied by the cost of one working day.
|
||
§ plugin.person_money.moneyLosses.title: possible overpayment
|
||
§ plugin.person_money.moneyLosses.description: Days without commits multiplied by the cost of one working day.
|
||
§ plugin.person_money.weekendPayment.title: weekend work
|
||
§ plugin.person_money.weekendPayment.description: Total overpayment for weekend work
|
||
§ plugin.person_money.tasks.title: task
|
||
§ plugin.person_money.tasks.description: Number of tasks touched by the staff member divided by the worked cost (days with commits multiplied by the cost of one working day).
|
||
§ plugin.person_money.commits.title: commit
|
||
§ plugin.person_money.commits.description: Total number of commits over time divided by the worked cost (days with commits multiplied by the cost of one working day).
|
||
`,es:`
|
||
§ plugin.person_money.sidebar: Costo del trabajo
|
||
§ plugin.person_money.title.total: Total acumulado
|
||
§ plugin.person_money.title.middle: Costo promedio
|
||
§ plugin.person_money.moneyAll.title: recibido
|
||
§ plugin.person_money.moneyAll.description: Salario (véase configuración) multiplicado por el número de meses trabajados.
|
||
§ plugin.person_money.moneyWorked.title: trabajado
|
||
§ plugin.person_money.moneyWorked.description: Días con commits multiplicados por el costo de un día laboral.
|
||
§ plugin.person_money.moneyLosses.title: sobrepago posible
|
||
§ plugin.person_money.moneyLosses.description: Días sin commits multiplicados por el costo de un día laboral.
|
||
§ plugin.person_money.weekendPayment.title: trabajo de fin de semana
|
||
§ plugin.person_money.weekendPayment.description: Sobrepago total por trabajo en fin de semana
|
||
§ plugin.person_money.tasks.title: tarea
|
||
§ plugin.person_money.tasks.description: Número de tareas atendidas por el empleado dividido entre el costo laboral (días con commits multiplicados por el costo de un día laboral).
|
||
§ plugin.person_money.commits.title: commit
|
||
§ plugin.person_money.commits.description: Número total de commits en el tiempo dividido entre el costo laboral (días con commits multiplicados por el costo de un día laboral).
|
||
`,fr:`
|
||
§ plugin.person_money.sidebar: Coût du travail
|
||
§ plugin.person_money.title.total: Total dans le temps
|
||
§ plugin.person_money.title.middle: Coût moyen
|
||
§ plugin.person_money.moneyAll.title: reçu
|
||
§ plugin.person_money.moneyAll.description: Salaire (voir paramètres) multiplié par le nombre de mois travaillés.
|
||
§ plugin.person_money.moneyWorked.title: travaillé
|
||
§ plugin.person_money.moneyWorked.description: Jours avec des commits multipliés par le coût d'une journée de travail.
|
||
§ plugin.person_money.moneyLosses.title: surpaiement possible
|
||
§ plugin.person_money.moneyLosses.description: Jours sans commits multipliés par le coût d'une journée de travail.
|
||
§ plugin.person_money.weekendPayment.title: travail le week-end
|
||
§ plugin.person_money.weekendPayment.description: Surpaiement total pour le travail le week-end
|
||
§ plugin.person_money.tasks.title: tâche
|
||
§ plugin.person_money.tasks.description: Nombre de tâches touchées par le membre du personnel divisé par le coût du travail (jours avec commits multipliés par le coût d'une journée de travail).
|
||
§ plugin.person_money.commits.title: commit
|
||
§ plugin.person_money.commits.description: Nombre total de commits dans le temps divisé par le coût du travail (jours avec commits multipliés par le coût d'une journée de travail).
|
||
`,he:`
|
||
§ plugin.person_money.sidebar: עלות עבודה
|
||
§ plugin.person_money.title.total: סך הכול לאורך הזמן
|
||
§ plugin.person_money.title.middle: עלות ממוצעת
|
||
§ plugin.person_money.moneyAll.title: התקבל
|
||
§ plugin.person_money.moneyAll.description: השכר (ראו הגדרות) מוכפל במספר חודשי העבודה.
|
||
§ plugin.person_money.moneyWorked.title: עבד
|
||
§ plugin.person_money.moneyWorked.description: ימים עם commits מוכפלים בעלות של יום עבודה אחד.
|
||
§ plugin.person_money.moneyLosses.title: תשלום-יתר אפשרי
|
||
§ plugin.person_money.moneyLosses.description: ימים ללא commits מוכפלים בעלות של יום עבודה אחד.
|
||
§ plugin.person_money.weekendPayment.title: עבודה בסופי שבוע
|
||
§ plugin.person_money.weekendPayment.description: סך כל התשלום-היתר עבור עבודה בסופי שבוע
|
||
§ plugin.person_money.tasks.title: משימה
|
||
§ plugin.person_money.tasks.description: מספר משימות שאיש הצוות עבד עליהן חלקי עלות העבודה (ימים עם commits מוכפלים בעלות של יום עבודה אחד).
|
||
§ plugin.person_money.commits.title: commit
|
||
§ plugin.person_money.commits.description: סך כל מספר ה-commits לאורך הזמן חלקי עלות העבודה (ימים עם commits מוכפלים בעלות של יום עבודה אחד).
|
||
`,hi:`
|
||
§ plugin.person_money.sidebar: कार्य लागत
|
||
§ plugin.person_money.title.total: पूरे समय की कुल राशि
|
||
§ plugin.person_money.title.middle: औसत लागत
|
||
§ plugin.person_money.moneyAll.title: प्राप्त राशि
|
||
§ plugin.person_money.moneyAll.description: वेतन (सेटिंग्स देखें) को काम किए गए महीनों की संख्या से गुणा किया जाता है।
|
||
§ plugin.person_money.moneyWorked.title: काम किए गए दिन
|
||
§ plugin.person_money.moneyWorked.description: जिन दिनों में commits हुए, उन्हें एक कार्यदिवस की लागत से गुणा किया जाता है।
|
||
§ plugin.person_money.moneyLosses.title: संभावित अधिक भुगतान
|
||
§ plugin.person_money.moneyLosses.description: जिन दिनों में commits नहीं हुए, उन्हें एक कार्यदिवस की लागत से गुणा किया जाता है।
|
||
§ plugin.person_money.weekendPayment.title: सप्ताहांत पर काम
|
||
§ plugin.person_money.weekendPayment.description: सप्ताहांत के काम के लिए कुल अधिक भुगतान
|
||
§ plugin.person_money.tasks.title: कार्य
|
||
§ plugin.person_money.tasks.description: जिन tasks पर स्टाफ सदस्य ने काम किया, उनकी संख्या को कार्य लागत (commits वाले दिनों को एक कार्यदिवस की लागत से गुणा करके) से विभाजित किया जाता है।
|
||
§ plugin.person_money.commits.title: commit
|
||
§ plugin.person_money.commits.description: समय के साथ commits की कुल संख्या को कार्य लागत (commits वाले दिनों को एक कार्यदिवस की लागत से गुणा करके) से विभाजित किया जाता है।
|
||
`,ja:`
|
||
§ plugin.person_money.sidebar: 作業コスト
|
||
§ plugin.person_money.title.total: 時間をかけての合計
|
||
§ plugin.person_money.title.middle: 平均コスト
|
||
§ plugin.person_money.moneyAll.title: 受領
|
||
§ plugin.person_money.moneyAll.description: 給与(設定を参照)に勤務月数を掛けたものです。
|
||
§ plugin.person_money.moneyWorked.title: 勤務
|
||
§ plugin.person_money.moneyWorked.description: commitのある日数に1労働日のコストを掛けたものです。
|
||
§ plugin.person_money.moneyLosses.title: 可能な過払い
|
||
§ plugin.person_money.moneyLosses.description: commitのない日数に1労働日のコストを掛けたものです。
|
||
§ plugin.person_money.weekendPayment.title: 週末作業
|
||
§ plugin.person_money.weekendPayment.description: 週末作業の過払い合計
|
||
§ plugin.person_money.tasks.title: タスク
|
||
§ plugin.person_money.tasks.description: スタッフメンバーが対応したタスク数を勤務コストで割ったもの(commitのある日数に1労働日のコストを掛けたもの)。
|
||
§ plugin.person_money.commits.title: commit
|
||
§ plugin.person_money.commits.description: 時間をかけた総commit数を勤務コストで割ったもの(commitのある日数に1労働日のコストを掛けたもの)。
|
||
`,ko:`
|
||
§ plugin.person_money.sidebar: 작업 비용
|
||
§ plugin.person_money.title.total: 시간이 지남에 따른 총합
|
||
§ plugin.person_money.title.middle: 평균 비용
|
||
§ plugin.person_money.moneyAll.title: 수령
|
||
§ plugin.person_money.moneyAll.description: 급여(설정 참조)에 근무한 달 수를 곱한 값입니다.
|
||
§ plugin.person_money.moneyWorked.title: 근무
|
||
§ plugin.person_money.moneyWorked.description: commit이 있는 날짜에 1일 근무 비용을 곱한 값입니다.
|
||
§ plugin.person_money.moneyLosses.title: 가능한 과다 지불
|
||
§ plugin.person_money.moneyLosses.description: commit이 없는 날짜에 1일 근무 비용을 곱한 값입니다.
|
||
§ plugin.person_money.weekendPayment.title: 주말 작업
|
||
§ plugin.person_money.weekendPayment.description: 주말 작업에 대한 총 과다 지불
|
||
§ plugin.person_money.tasks.title: 작업
|
||
§ plugin.person_money.tasks.description: 직원이 처리한 작업 수를 근무 비용으로 나눈 값(commit이 있는 날짜에 1일 근무 비용을 곱한 값)입니다.
|
||
§ plugin.person_money.commits.title: commit
|
||
§ plugin.person_money.commits.description: 시간이 지남에 따른 총 commit 수를 근무 비용으로 나눈 값(commit이 있는 날짜에 1일 근무 비용을 곱한 값)입니다.
|
||
`,pt:`
|
||
§ plugin.person_money.sidebar: Custo do trabalho
|
||
§ plugin.person_money.title.total: Total acumulado ao longo do tempo
|
||
§ plugin.person_money.title.middle: Custo médio
|
||
§ plugin.person_money.moneyAll.title: recebido
|
||
§ plugin.person_money.moneyAll.description: Salário (consulte as configurações) multiplicado pelo número de meses trabalhados.
|
||
§ plugin.person_money.moneyWorked.title: trabalhado
|
||
§ plugin.person_money.moneyWorked.description: Dias com commits multiplicados pelo custo de um dia de trabalho.
|
||
§ plugin.person_money.moneyLosses.title: possível pagamento excessivo
|
||
§ plugin.person_money.moneyLosses.description: Dias sem commits multiplicados pelo custo de um dia de trabalho.
|
||
§ plugin.person_money.weekendPayment.title: trabalho em fim de semana
|
||
§ plugin.person_money.weekendPayment.description: Pagamento excessivo total pelo trabalho em fim de semana
|
||
§ plugin.person_money.tasks.title: tarefa
|
||
§ plugin.person_money.tasks.description: Número de tarefas abordadas pelo funcionário dividido pelo custo do trabalho (dias com commits multiplicados pelo custo de um dia de trabalho).
|
||
§ plugin.person_money.commits.title: commit
|
||
§ plugin.person_money.commits.description: Número total de commits ao longo do tempo dividido pelo custo do trabalho (dias com commits multiplicados pelo custo de um dia de trabalho).
|
||
`,ru:`
|
||
§ plugin.person_money.sidebar: Стоимость работы
|
||
§ plugin.person_money.title.total: За всё время
|
||
§ plugin.person_money.title.middle: Средняя стоимость
|
||
§ plugin.person_money.moneyAll.title: получил
|
||
§ plugin.person_money.moneyAll.description: Зарплата (см. настройки) умноженная на количество отработанных месяцев.
|
||
§ plugin.person_money.moneyWorked.title: отработал
|
||
§ plugin.person_money.moneyWorked.description: Дни с коммитами умноженные на стоимость одного рабочего дня.
|
||
§ plugin.person_money.moneyLosses.title: возможная переплата
|
||
§ plugin.person_money.moneyLosses.description: Дни без коммитов умноженные на стоимость одного рабочего дня.
|
||
§ plugin.person_money.weekendPayment.title: работа на выходных
|
||
§ plugin.person_money.weekendPayment.description: Суммарная переплата за работу в выходные дни
|
||
§ plugin.person_money.tasks.title: задача
|
||
§ plugin.person_money.tasks.description: Количество задач, затронутых сотрудником, деленое на отработанную стоимость (дни с коммитами умноженные на стоимость одного рабочего дня).
|
||
§ plugin.person_money.commits.title: коммит
|
||
§ plugin.person_money.commits.description: Общее количество коммитов за всё время деленное на отработанную стоимость (дни с коммитами умноженные на стоимость одного рабочего дня).
|
||
`,zh:`
|
||
§ plugin.person_money.sidebar: 工作成本
|
||
§ plugin.person_money.title.total: 随时间累积的总成本
|
||
§ plugin.person_money.title.middle: 平均成本
|
||
§ plugin.person_money.moneyAll.title: 收到
|
||
§ plugin.person_money.moneyAll.description: 薪资(参见设置)乘以工作的月数。
|
||
§ plugin.person_money.moneyWorked.title: 已工作
|
||
§ plugin.person_money.moneyWorked.description: 有 commits 的天数乘以一个工作日的成本。
|
||
§ plugin.person_money.moneyLosses.title: 可能的超额支付
|
||
§ plugin.person_money.moneyLosses.description: 没有 commits 的天数乘以一个工作日的成本。
|
||
§ plugin.person_money.weekendPayment.title: 周末工作
|
||
§ plugin.person_money.weekendPayment.description: 周末工作的总超额支付
|
||
§ plugin.person_money.tasks.title: 任务
|
||
§ plugin.person_money.tasks.description: 员工处理的任务数量除以已工作成本(有 commits 的天数乘以一个工作日的成本)。
|
||
§ plugin.person_money.commits.title: commit
|
||
§ plugin.person_money.commits.description: 全时段 commits 总数除以已工作成本(有 commits 的天数乘以一个工作日的成本)。
|
||
`},fB=U(({user:t})=>{const e=A.statisticsByCommits.scoring.total,s=A.statisticsByCommits.scoring.totalInfoByName[t.author],n=t.totalTasks;return t.isStaff?o.jsx(Le,{mode:"staff"}):o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(G,{title:"plugin.person_money.title.total"}),o.jsx(_e,{value:ct(t.totalMoney),icon:"./assets/cards/money_total.svg",title:"plugin.person_money.moneyAll.title",description:"plugin.person_money.moneyAll.description",scoring:{value:s.totalMoney,total:e.totalMoney}}),o.jsx(_e,{value:ct(t.totalMoneyWorked),icon:"./assets/cards/money_work.svg",title:"plugin.person_money.moneyWorked.title",description:"plugin.person_money.moneyWorked.description",scoring:{value:s.totalMoneyWorked,total:e.totalMoneyWorked}}),o.jsx(_e,{value:ct(t.totalMoneyLosses),icon:"./assets/cards/money_lazy.svg",title:"plugin.person_money.moneyLosses.title",description:"plugin.person_money.moneyLosses.description",scoring:{value:s.totalMoneyLosses,total:e.totalMoneyLosses}}),o.jsx(_e,{value:ct(t.totalMoneyInWeekend),icon:"./assets/cards/money_holidays.svg",title:"plugin.person_money.weekendPayment.title",description:"plugin.person_money.weekendPayment.description",scoring:{value:s.totalMoneyInWeekend,total:e.totalMoneyInWeekend}})]}),o.jsxs(Q,{children:[o.jsx(G,{title:"plugin.person_money.title.middle"}),n?o.jsxs(o.Fragment,{children:[o.jsx(_e,{size:"l",value:ct(t.totalMoneyWorked/n,0),icon:"./assets/cards/money_task.svg",title:"plugin.person_money.tasks.title",description:"plugin.person_money.tasks.description",scoring:{value:s.moneyForTask,total:e.moneyForTask}}),o.jsx(_e,{size:"l",value:ct(t.totalMoneyWorked/t.commits,0),icon:"./assets/cards/money_work.svg",title:"plugin.person_money.commits.title",description:"plugin.person_money.commits.description",scoring:{value:s.moneyForCommit,total:e.moneyForCommit}})]}):o.jsx(Le,{})]})]})});let yB=(Ll=class{constructor(){this.dependencies=["scoring"]}getMenuItems(){return[{id:"money",group:10,order:20,link:"/person/money/",title:"plugin.person_money.sidebar",icon:"./assets/menu/per_money.svg"}]}getPage(e,s){return e==="/person/money"?o.jsx(fB,{mode:s==null?void 0:s.mode,user:s==null?void 0:s.user,filters:s==null?void 0:s.filters}):void 0}getTranslations(){return hB}},Ll.id="person_money",Ll);const vB={ar:`
|
||
§ plugin.person_speed.sidebar: السرعة
|
||
§ plugin.person_speed.task: المهمة الواحدة في المتوسط هي
|
||
§ plugin.person_speed.max: السرعة القصوى في اليوم
|
||
§ plugin.person_speed.days.title: أيام
|
||
§ plugin.person_speed.days.description: يُقسم عدد المهام التي تم العثور عليها على عدد الأيام التي وُجدت فيها commits.
|
||
§ plugin.person_speed.commits.title: commits
|
||
§ plugin.person_speed.commits.description: متوسط مرجح مع اقتطاع 10% من القيم الأكثر ندرة والأكبر.
|
||
§ plugin.person_speed.line.title: أسطر الشيفرة
|
||
§ plugin.person_speed.line.description: لا يميز النظام تغيير الأسطر نفسها في commits مختلفة ضمن مهمة واحدة. يتم جمعها.
|
||
§ plugin.person_speed.files.title: ملفات
|
||
§ plugin.person_speed.files.description: متوسط مرجح مع اقتطاع 10% من القيم الأكثر ندرة والأكبر.
|
||
§ plugin.person_speed.tasks.title: مهام
|
||
§ plugin.person_speed.tasks.description: قد تكون المهمة غير مكتملة. يُسجل فقط وقوع العمل عليها في يوم محدد.
|
||
§ plugin.person_speed.maxCommits.title: commits
|
||
§ plugin.person_speed.maxCommits.description: إجمالي عدد commits التي أُنشئت خلال يوم محدد. يمكن أن تكون ضمن مهمة واحدة أو أثناء العمل على مهام مختلفة.
|
||
`,de:`
|
||
§ plugin.person_speed.sidebar: Geschwindigkeit
|
||
§ plugin.person_speed.task: Eine Aufgabe im Durchschnitt ist
|
||
§ plugin.person_speed.max: Maximale Geschwindigkeit pro Tag
|
||
§ plugin.person_speed.days.title: Tage
|
||
§ plugin.person_speed.days.description: Die Anzahl der gefundenen Aufgaben wird durch die Anzahl der Tage mit commits geteilt.
|
||
§ plugin.person_speed.commits.title: commits
|
||
§ plugin.person_speed.commits.description: Gewichteter Mittelwert mit Abschneiden von 10 % der seltensten und größten Werte.
|
||
§ plugin.person_speed.line.title: Codezeilen
|
||
§ plugin.person_speed.line.description: Das System erkennt keine Änderungen derselben Zeilen in verschiedenen commits innerhalb einer Aufgabe. Sie werden addiert.
|
||
§ plugin.person_speed.files.title: Dateien
|
||
§ plugin.person_speed.files.description: Gewichteter Mittelwert mit Abschneiden von 10 % der seltensten und größten Werte.
|
||
§ plugin.person_speed.tasks.title: Aufgaben
|
||
§ plugin.person_speed.tasks.description: Eine Aufgabe kann unvollendet sein. Es wird nur die Tatsache der Arbeit an ihr an einem bestimmten Tag erfasst.
|
||
§ plugin.person_speed.maxCommits.title: commits
|
||
§ plugin.person_speed.maxCommits.description: Gesamtzahl der commits an einem bestimmten Tag. Sie können im Rahmen einer Aufgabe oder bei der Arbeit an verschiedenen Aufgaben gemacht worden sein.
|
||
`,en:`
|
||
§ plugin.person_speed.sidebar: Speed
|
||
§ plugin.person_speed.task: One task on average is
|
||
§ plugin.person_speed.max: Maximum speed per day
|
||
§ plugin.person_speed.days.title: days
|
||
§ plugin.person_speed.days.description: The number of tasks found is divided by the number of days when there were commits.
|
||
§ plugin.person_speed.commits.title: commits
|
||
§ plugin.person_speed.commits.description: Weighted average trimmed by 10% of the rarest and largest values.
|
||
§ plugin.person_speed.line.title: lines of code
|
||
§ plugin.person_speed.line.description: The system does not recognize changes to the same lines in different commits within a single task. They are summed up.
|
||
§ plugin.person_speed.files.title: files
|
||
§ plugin.person_speed.files.description: Weighted average trimmed by 10% of the rarest and largest values.
|
||
§ plugin.person_speed.tasks.title: tasks
|
||
§ plugin.person_speed.tasks.description: A task may be unfinished. Only the fact of working on it within a specific day is recorded.
|
||
§ plugin.person_speed.maxCommits.title: commits
|
||
§ plugin.person_speed.maxCommits.description: Total number of commits made during one specific day. They can be made within one task or while working on different tasks.
|
||
`,es:`
|
||
§ plugin.person_speed.sidebar: Velocidad
|
||
§ plugin.person_speed.task: Una tarea de media es
|
||
§ plugin.person_speed.max: Velocidad máxima por día
|
||
§ plugin.person_speed.days.title: días
|
||
§ plugin.person_speed.days.description: El número de tareas encontradas se divide por el número de días en que hubo commits.
|
||
§ plugin.person_speed.commits.title: commits
|
||
§ plugin.person_speed.commits.description: Media ponderada recortando el 10 % de los valores más raros y más altos.
|
||
§ plugin.person_speed.line.title: líneas de código
|
||
§ plugin.person_speed.line.description: El sistema no reconoce cambios de las mismas líneas en distintos commits dentro de una misma tarea. Se suman.
|
||
§ plugin.person_speed.files.title: archivos
|
||
§ plugin.person_speed.files.description: Media ponderada recortando el 10 % de los valores más raros y más altos.
|
||
§ plugin.person_speed.tasks.title: tareas
|
||
§ plugin.person_speed.tasks.description: Una tarea puede estar inacabada. Solo se registra el hecho de trabajar en ella en un día concreto.
|
||
§ plugin.person_speed.maxCommits.title: commits
|
||
§ plugin.person_speed.maxCommits.description: Número total de commits realizados en un día concreto. Pueden pertenecer a una sola tarea o a varias.
|
||
`,fr:`
|
||
§ plugin.person_speed.sidebar: Vitesse
|
||
§ plugin.person_speed.task: Une tâche en moyenne, c’est
|
||
§ plugin.person_speed.max: Vitesse maximale par jour
|
||
§ plugin.person_speed.days.title: jours
|
||
§ plugin.person_speed.days.description: Le nombre de tâches trouvées est divisé par le nombre de jours où il y a eu des commits.
|
||
§ plugin.person_speed.commits.title: commits
|
||
§ plugin.person_speed.commits.description: Moyenne pondérée avec troncature de 10 % des valeurs les plus rares et les plus élevées.
|
||
§ plugin.person_speed.line.title: lignes de code
|
||
§ plugin.person_speed.line.description: Le système ne reconnaît pas les modifications des mêmes lignes dans différents commits d’une même tâche. Elles sont additionnées.
|
||
§ plugin.person_speed.files.title: fichiers
|
||
§ plugin.person_speed.files.description: Moyenne pondérée avec troncature de 10 % des valeurs les plus rares et les plus élevées.
|
||
§ plugin.person_speed.tasks.title: tâches
|
||
§ plugin.person_speed.tasks.description: Une tâche peut être inachevée. Seul le fait d’y avoir travaillé un jour donné est enregistré.
|
||
§ plugin.person_speed.maxCommits.title: commits
|
||
§ plugin.person_speed.maxCommits.description: Nombre total de commits effectués au cours d’un jour donné. Ils peuvent concerner une seule tâche ou plusieurs.
|
||
`,he:`
|
||
§ plugin.person_speed.sidebar: מהירות
|
||
§ plugin.person_speed.task: משימה אחת בממוצע היא
|
||
§ plugin.person_speed.max: המהירות המרבית ליום
|
||
§ plugin.person_speed.days.title: ימים
|
||
§ plugin.person_speed.days.description: מספר המשימות שנמצאו מחולק במספר הימים שבהם היו commits.
|
||
§ plugin.person_speed.commits.title: commits
|
||
§ plugin.person_speed.commits.description: ממוצע משוקלל עם חיתוך 10% מהערכים הנדירים ביותר והגדולים ביותר.
|
||
§ plugin.person_speed.line.title: שורות קוד
|
||
§ plugin.person_speed.line.description: המערכת אינה מזהה שינויים באותן שורות ב-commits שונים במסגרת משימה אחת. הם מסוכמים.
|
||
§ plugin.person_speed.files.title: קבצים
|
||
§ plugin.person_speed.files.description: ממוצע משוקלל עם חיתוך 10% מהערכים הנדירים ביותר והגדולים ביותר.
|
||
§ plugin.person_speed.tasks.title: משימות
|
||
§ plugin.person_speed.tasks.description: משימה עשויה להיות לא גמורה. נרשמת עצם העבודה עליה במסגרת יום מסוים.
|
||
§ plugin.person_speed.maxCommits.title: commits
|
||
§ plugin.person_speed.maxCommits.description: סך ה-commits שבוצעו במהלך יום מסוים. הם יכולים להיות במסגרת משימה אחת או תוך עבודה על משימות שונות.
|
||
`,hi:`
|
||
§ plugin.person_speed.sidebar: गति
|
||
§ plugin.person_speed.task: औसतन एक कार्य है
|
||
§ plugin.person_speed.max: प्रति दिन अधिकतम गति
|
||
§ plugin.person_speed.days.title: दिन
|
||
§ plugin.person_speed.days.description: मिली हुई कार्यों की संख्या को उन दिनों की संख्या से विभाजित किया जाता है जिनमें commits हुए।
|
||
§ plugin.person_speed.commits.title: commits
|
||
§ plugin.person_speed.commits.description: सबसे दुर्लभ और सबसे बड़े मानों के 10% को काटकर भारित औसत।
|
||
§ plugin.person_speed.line.title: कोड की पंक्तियाँ
|
||
§ plugin.person_speed.line.description: प्रणाली एक ही कार्य के विभिन्न commits में उन्हीं पंक्तियों के परिवर्तन को अलग नहीं पहचानती। उन्हें जोड़ दिया जाता है।
|
||
§ plugin.person_speed.files.title: फ़ाइलें
|
||
§ plugin.person_speed.files.description: सबसे दुर्लभ और सबसे बड़े मानों के 10% को काटकर भारित औसत।
|
||
§ plugin.person_speed.tasks.title: कार्य
|
||
§ plugin.person_speed.tasks.description: कार्य अधूरा हो सकता है। केवल किसी विशिष्ट दिन उस पर काम करने का तथ्य दर्ज होता है।
|
||
§ plugin.person_speed.maxCommits.title: commits
|
||
§ plugin.person_speed.maxCommits.description: किसी एक विशिष्ट दिन में किए गए commits की कुल संख्या। वे एक कार्य के भीतर या अलग-अलग कार्यों पर काम करते हुए किए जा सकते हैं।
|
||
`,ja:`
|
||
§ plugin.person_speed.sidebar: 速度
|
||
§ plugin.person_speed.task: 平均して 1 件のタスクは
|
||
§ plugin.person_speed.max: 1 日あたりの最大速度
|
||
§ plugin.person_speed.days.title: 日
|
||
§ plugin.person_speed.days.description: 見つかったタスク数を、commits があった日数で割ります。
|
||
§ plugin.person_speed.commits.title: commits
|
||
§ plugin.person_speed.commits.description: 最も稀で最大の値の 10% を切り捨てた加重平均。
|
||
§ plugin.person_speed.line.title: コード行
|
||
§ plugin.person_speed.line.description: 同一タスク内の異なる commits で同じ行が変更されても、システムはそれを区別せず合算します。
|
||
§ plugin.person_speed.files.title: ファイル
|
||
§ plugin.person_speed.files.description: 最も稀で最大の値の 10% を切り捨てた加重平均。
|
||
§ plugin.person_speed.tasks.title: タスク
|
||
§ plugin.person_speed.tasks.description: タスクは未完了の場合があります。特定の日に作業した事実のみが記録されます。
|
||
§ plugin.person_speed.maxCommits.title: commits
|
||
§ plugin.person_speed.maxCommits.description: 特定の 1 日に行われた commits の合計数。1 件のタスク内でも、複数のタスクにわたっても作成され得ます。
|
||
`,ko:`
|
||
§ plugin.person_speed.sidebar: 속도
|
||
§ plugin.person_speed.task: 평균적으로 한 작업은
|
||
§ plugin.person_speed.max: 하루 최대 속도
|
||
§ plugin.person_speed.days.title: 일
|
||
§ plugin.person_speed.days.description: 찾은 작업 수를 commits가 있었던 일수로 나눕니다.
|
||
§ plugin.person_speed.commits.title: commits
|
||
§ plugin.person_speed.commits.description: 가장 희귀하고 큰 값의 10%를 잘라낸 가중 평균입니다.
|
||
§ plugin.person_speed.line.title: 코드 줄
|
||
§ plugin.person_speed.line.description: 시스템은 한 작업 안의 서로 다른 commits에서 같은 줄이 바뀐 것을 구분하지 않고 합산합니다.
|
||
§ plugin.person_speed.files.title: 파일
|
||
§ plugin.person_speed.files.description: 가장 희귀하고 큰 값의 10%를 잘라낸 가중 평균입니다.
|
||
§ plugin.person_speed.tasks.title: 작업
|
||
§ plugin.person_speed.tasks.description: 작업은 미완료일 수 있습니다. 특정 날에 작업한 사실만 기록됩니다.
|
||
§ plugin.person_speed.maxCommits.title: commits
|
||
§ plugin.person_speed.maxCommits.description: 특정 하루에 만들어진 commits의 총수입니다. 한 작업 안이거나 여러 작업에 걸쳐 만들어질 수 있습니다.
|
||
`,pt:`
|
||
§ plugin.person_speed.sidebar: Velocidade
|
||
§ plugin.person_speed.task: Uma tarefa em média é
|
||
§ plugin.person_speed.max: Velocidade máxima por dia
|
||
§ plugin.person_speed.days.title: dias
|
||
§ plugin.person_speed.days.description: O número de tarefas encontradas é dividido pelo número de dias em que houve commits.
|
||
§ plugin.person_speed.commits.title: commits
|
||
§ plugin.person_speed.commits.description: Média ponderada com corte de 10% dos valores mais raros e mais altos.
|
||
§ plugin.person_speed.line.title: linhas de código
|
||
§ plugin.person_speed.line.description: O sistema não reconhece alterações nas mesmas linhas em commits diferentes dentro de uma mesma tarefa. Elas são somadas.
|
||
§ plugin.person_speed.files.title: arquivos
|
||
§ plugin.person_speed.files.description: Média ponderada com corte de 10% dos valores mais raros e mais altos.
|
||
§ plugin.person_speed.tasks.title: tarefas
|
||
§ plugin.person_speed.tasks.description: Uma tarefa pode estar inacabada. Registra-se apenas o fato de ter trabalhado nela em um dia específico.
|
||
§ plugin.person_speed.maxCommits.title: commits
|
||
§ plugin.person_speed.maxCommits.description: Número total de commits feitos em um dia específico. Podem ser de uma única tarefa ou de várias.
|
||
`,ru:`
|
||
§ plugin.person_speed.sidebar: Скорость
|
||
§ plugin.person_speed.task: Одна задача в среднем это
|
||
§ plugin.person_speed.max: Максимальная скорость в день
|
||
§ plugin.person_speed.days.title: дней
|
||
§ plugin.person_speed.days.description: Количество найденных задач делится на количество дней, когда были коммиты.
|
||
§ plugin.person_speed.commits.title: коммитов
|
||
§ plugin.person_speed.commits.description: Средневзвешенное значение с отсечением 10% самых редких и больших.
|
||
§ plugin.person_speed.line.title: строк кода
|
||
§ plugin.person_speed.line.description: Система не разпознаёт изменение одних и тех же строк в разных коммитах в рамках одной задачи. Они суммируются.
|
||
§ plugin.person_speed.files.title: файлов
|
||
§ plugin.person_speed.files.description: Средневзвешенное значение с отсечением 10% самых редких и больших.
|
||
§ plugin.person_speed.tasks.title: задач
|
||
§ plugin.person_speed.tasks.description: Задача может быть не доделана. Фиксируется сам факт работы над ней в рамках конкретного дня.
|
||
§ plugin.person_speed.maxCommits.title: коммитов
|
||
§ plugin.person_speed.maxCommits.description: Суммарное число коммитов сделанных в течении одного конкретного дня. Они могут быть сделаны как в рамках одной задачи, так и в ходе работы над разными задачами.
|
||
`,zh:`
|
||
§ plugin.person_speed.sidebar: 速度
|
||
§ plugin.person_speed.task: 平均一项任务是
|
||
§ plugin.person_speed.max: 每日最高速度
|
||
§ plugin.person_speed.days.title: 天数
|
||
§ plugin.person_speed.days.description: 将找到的任务数除以有 commits 的天数。
|
||
§ plugin.person_speed.commits.title: commits
|
||
§ plugin.person_speed.commits.description: 去掉最稀有和最大的 10% 值后的加权平均值。
|
||
§ plugin.person_speed.line.title: 代码行
|
||
§ plugin.person_speed.line.description: 系统无法识别同一任务内不同 commits 中对同一行的修改,这些修改会被累加。
|
||
§ plugin.person_speed.files.title: 文件
|
||
§ plugin.person_speed.files.description: 去掉最稀有和最大的 10% 值后的加权平均值。
|
||
§ plugin.person_speed.tasks.title: 任务
|
||
§ plugin.person_speed.tasks.description: 任务可能尚未完成。只记录在某一天确实对其开展过工作。
|
||
§ plugin.person_speed.maxCommits.title: commits
|
||
§ plugin.person_speed.maxCommits.description: 某一天内所做 commits 的总数。它们可以属于同一任务,也可以属于不同任务。
|
||
`},kB=U(({user:t})=>{const e=A.statisticsByCommits.timestamp.totalInfoByName[t.author],s=A.statisticsByCommits.scoring.totalInfoByName[t.author],n=A.statisticsByCommits.scoring.total,r=t.totalTasks;return t.isStaff?o.jsx(Le,{mode:"staff"}):r?o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(G,{title:"plugin.person_speed.task"}),o.jsx(_e,{value:Kt(1/t.totalTaskInDay),icon:"./assets/cards/month.svg",title:"plugin.person_speed.days.title",description:"plugin.person_speed.days.description",scoring:{value:s.totalTaskInDay,total:n.totalTaskInDay}}),o.jsx(_e,{value:Kt(t.totalTaskInCommits),icon:"./assets/cards/commits.svg",title:"plugin.person_speed.commits.title",description:"plugin.person_speed.commits.description",scoring:{value:s.totalTaskInCommits,total:n.totalTaskInCommits}}),o.jsx(_e,{value:Kt(t.totalTaskInChanges),icon:"./assets/cards/lines.svg",title:"plugin.person_speed.line.title",description:"plugin.person_speed.line.description",scoring:{value:s.totalTaskInChanges,total:n.totalTaskInChanges}}),o.jsx(_e,{value:Kt(t.totalTaskInFiles),icon:"./assets/cards/files.svg",title:"plugin.person_speed.files.title",description:"plugin.person_speed.files.description",scoring:{value:s.totalTaskInFiles,total:n.totalTaskInFiles}}),o.jsx(Wz,{})]}),o.jsxs(Q,{children:[o.jsx(G,{title:"plugin.person_speed.max"}),o.jsx(_e,{size:"l",value:e.tasksByTimestampCounter.max,icon:"./assets/cards/tasks.svg",title:"plugin.person_speed.tasks.title",description:"plugin.person_speed.tasks.description",scoring:{value:s.speedMaxTasks,total:n.speedMaxTasks}}),o.jsx(_e,{size:"l",value:e.commitsByTimestampCounter.max,icon:"./assets/cards/commits.svg",title:"plugin.person_speed.maxCommits.title",description:"plugin.person_speed.maxCommits.description",scoring:{value:s.speedMaxCommits,total:n.speedMaxCommits}})]})]}):o.jsx(Le,{})});let bB=(Bl=class{constructor(){this.dependencies=["timestamp","scoring"]}getMenuItems(){return[{id:"speed",group:10,order:30,link:"/person/speed/",title:"plugin.person_speed.sidebar",icon:"./assets/menu/per_speed.svg"}]}getPage(e,s){return e==="/person/speed"?o.jsx(kB,{mode:s==null?void 0:s.mode,user:s==null?void 0:s.user,filters:s==null?void 0:s.filters}):void 0}getTranslations(){return vB}},Bl.id="person_speed",Bl);const wB={ar:`
|
||
§ plugin.person_total.sidebar: معلومات عامة
|
||
§ plugin.person_total.title: الخصائص الرئيسية
|
||
§ plugin.person_total.progress.dayWorks: مدة العقد
|
||
§ plugin.person_total.progress.tasks: المهام المنجزة
|
||
§ plugin.person_total.progress.taskInDay: سرعة العمل
|
||
§ plugin.person_total.progress.commits: commits
|
||
§ plugin.person_total.progress.middleMessageLength: متوسط طول commit message
|
||
§ plugin.person_total.small.status.title: الحالة المقدرة
|
||
§ plugin.person_total.small.status.work: يعمل
|
||
§ plugin.person_total.small.status.dismissed: غادر
|
||
§ plugin.person_total.small.status.staff: مساعد
|
||
§ plugin.person_total.small.totalDays: مدة العقد
|
||
§ plugin.person_total.small.country: آخر موقع
|
||
§ plugin.person_total.small.email: آخر بريد إلكتروني
|
||
§ plugin.person_total.small.firstDay: أول يوم عمل
|
||
§ plugin.person_total.small.lastDay: آخر يوم عمل
|
||
§ plugin.person_total.small.middleMessageLength: متوسط طول commit message
|
||
§ plugin.person_total.daysWorked.title: أيام العمل
|
||
§ plugin.person_total.daysWorked.description: تُحتسب فقط الأيام التي تم فيها إنشاء commits
|
||
§ plugin.person_total.daysLosses.title: أيام بلا commits
|
||
§ plugin.person_total.daysLosses.description: جميع الأيام ناقص: العطلات الرسمية، عطلات نهاية الأسبوع، الإجازة، الأيام ذات commits
|
||
§ plugin.person_total.commits.title: commits
|
||
§ plugin.person_total.commits.description: لا تُحتسب الـ branches المحذوفة
|
||
§ plugin.person_total.tasks.title: المهام
|
||
§ plugin.person_total.tasks.description: إذا كانت commits تحتوي على commit message صحيحة
|
||
§ plugin.person_total.email.title: قائمة عناوين البريد الإلكتروني للموظف
|
||
§ plugin.person_total.email.type: النوع
|
||
§ plugin.person_total.email.company: الشركة
|
||
§ plugin.person_total.email.email: البريد الإلكتروني
|
||
§ plugin.person_total.company.title: قائمة الشركات التي أنشأ الموظف commits باسمها
|
||
§ plugin.person_total.from: من
|
||
§ plugin.person_total.to: إلى
|
||
`,de:`
|
||
§ plugin.person_total.sidebar: Allgemeine Informationen
|
||
§ plugin.person_total.title: Haupteigenschaften
|
||
§ plugin.person_total.progress.dayWorks: Vertragsdauer
|
||
§ plugin.person_total.progress.tasks: erledigte Aufgaben
|
||
§ plugin.person_total.progress.taskInDay: Arbeitsgeschwindigkeit
|
||
§ plugin.person_total.progress.commits: commits
|
||
§ plugin.person_total.progress.middleMessageLength: durchschnittliche Länge der commit message
|
||
§ plugin.person_total.small.status.title: geschätzter Status
|
||
§ plugin.person_total.small.status.work: arbeitet
|
||
§ plugin.person_total.small.status.dismissed: ausgeschieden
|
||
§ plugin.person_total.small.status.staff: Helfer
|
||
§ plugin.person_total.small.totalDays: Vertragsdauer
|
||
§ plugin.person_total.small.country: letzter Standort
|
||
§ plugin.person_total.small.email: letzte E-Mail
|
||
§ plugin.person_total.small.firstDay: erster Arbeitstag
|
||
§ plugin.person_total.small.lastDay: letzter Arbeitstag
|
||
§ plugin.person_total.small.middleMessageLength: durchschnittliche Länge der commit message
|
||
§ plugin.person_total.daysWorked.title: Arbeitstage
|
||
§ plugin.person_total.daysWorked.description: Es werden nur Tage gezählt, an denen commits gemacht wurden
|
||
§ plugin.person_total.daysLosses.title: Tage ohne commits
|
||
§ plugin.person_total.daysLosses.description: Alle Tage minus: Feiertage, Wochenenden, Urlaub, Tage mit commits
|
||
§ plugin.person_total.commits.title: commits
|
||
§ plugin.person_total.commits.description: Gelöschte branches werden nicht gezählt
|
||
§ plugin.person_total.tasks.title: Aufgaben
|
||
§ plugin.person_total.tasks.description: Wenn commits eine korrekte commit message haben
|
||
§ plugin.person_total.email.title: Liste der E-Mail-Adressen des Mitarbeiters
|
||
§ plugin.person_total.email.type: Typ
|
||
§ plugin.person_total.email.company: Unternehmen
|
||
§ plugin.person_total.email.email: E-Mail
|
||
§ plugin.person_total.company.title: Liste der Unternehmen, in deren Namen der Mitarbeiter commits gemacht hat
|
||
§ plugin.person_total.from: von
|
||
§ plugin.person_total.to: bis
|
||
`,en:`
|
||
§ plugin.person_total.sidebar: Common info
|
||
§ plugin.person_total.title: Main characteristics
|
||
§ plugin.person_total.progress.dayWorks: contract duration
|
||
§ plugin.person_total.progress.tasks: tasks completed
|
||
§ plugin.person_total.progress.taskInDay: work speed
|
||
§ plugin.person_total.progress.commits: commits
|
||
§ plugin.person_total.progress.middleMessageLength: average commit message length
|
||
§ plugin.person_total.small.status.title: estimated status
|
||
§ plugin.person_total.small.status.work: works
|
||
§ plugin.person_total.small.status.dismissed: left
|
||
§ plugin.person_total.small.status.staff: staff
|
||
§ plugin.person_total.small.totalDays: contract duration
|
||
§ plugin.person_total.small.country: latest location
|
||
§ plugin.person_total.small.email: latest email
|
||
§ plugin.person_total.small.firstDay: first working day
|
||
§ plugin.person_total.small.lastDay: last working day
|
||
§ plugin.person_total.small.middleMessageLength: average commit message length
|
||
§ plugin.person_total.daysWorked.title: days worked
|
||
§ plugin.person_total.daysWorked.description: Only days when commits were made are counted
|
||
§ plugin.person_total.daysLosses.title: days without commits
|
||
§ plugin.person_total.daysLosses.description: All days minus: holidays, weekends, vacation, days with commits
|
||
§ plugin.person_total.commits.title: commits
|
||
§ plugin.person_total.commits.description: Deleted branches are not counted
|
||
§ plugin.person_total.tasks.title: tasks
|
||
§ plugin.person_total.tasks.description: If commits have correct commit messages
|
||
§ plugin.person_total.email.title: List of the staff member email addresses
|
||
§ plugin.person_total.email.type: Type
|
||
§ plugin.person_total.email.company: Company
|
||
§ plugin.person_total.email.email: Email
|
||
§ plugin.person_total.company.title: List of companies on whose behalf the staff member made commits
|
||
§ plugin.person_total.from: from
|
||
§ plugin.person_total.to: to
|
||
`,es:`
|
||
§ plugin.person_total.sidebar: Información general
|
||
§ plugin.person_total.title: Características principales
|
||
§ plugin.person_total.progress.dayWorks: duración del contrato
|
||
§ plugin.person_total.progress.tasks: tareas completadas
|
||
§ plugin.person_total.progress.taskInDay: velocidad de trabajo
|
||
§ plugin.person_total.progress.commits: commits
|
||
§ plugin.person_total.progress.middleMessageLength: longitud media del commit message
|
||
§ plugin.person_total.small.status.title: estado estimado
|
||
§ plugin.person_total.small.status.work: trabaja
|
||
§ plugin.person_total.small.status.dismissed: se fue
|
||
§ plugin.person_total.small.status.staff: asistente
|
||
§ plugin.person_total.small.totalDays: duración del contrato
|
||
§ plugin.person_total.small.country: última ubicación
|
||
§ plugin.person_total.small.email: último correo electrónico
|
||
§ plugin.person_total.small.firstDay: primer día laboral
|
||
§ plugin.person_total.small.lastDay: último día laboral
|
||
§ plugin.person_total.small.middleMessageLength: longitud media del commit message
|
||
§ plugin.person_total.daysWorked.title: días trabajados
|
||
§ plugin.person_total.daysWorked.description: Solo se cuentan los días en que se hicieron commits
|
||
§ plugin.person_total.daysLosses.title: días sin commits
|
||
§ plugin.person_total.daysLosses.description: Todos los días menos: festivos, fines de semana, vacaciones, días con commits
|
||
§ plugin.person_total.commits.title: commits
|
||
§ plugin.person_total.commits.description: Las branches eliminadas no se cuentan
|
||
§ plugin.person_total.tasks.title: tareas
|
||
§ plugin.person_total.tasks.description: Si los commits tienen un commit message correcto
|
||
§ plugin.person_total.email.title: Lista de direcciones de correo del empleado
|
||
§ plugin.person_total.email.type: Tipo
|
||
§ plugin.person_total.email.company: Empresa
|
||
§ plugin.person_total.email.email: Correo electrónico
|
||
§ plugin.person_total.company.title: Lista de empresas en cuyo nombre el empleado hizo commits
|
||
§ plugin.person_total.from: desde
|
||
§ plugin.person_total.to: hasta
|
||
`,fr:`
|
||
§ plugin.person_total.sidebar: Informations générales
|
||
§ plugin.person_total.title: Caractéristiques principales
|
||
§ plugin.person_total.progress.dayWorks: durée du contrat
|
||
§ plugin.person_total.progress.tasks: tâches réalisées
|
||
§ plugin.person_total.progress.taskInDay: vitesse de travail
|
||
§ plugin.person_total.progress.commits: commits
|
||
§ plugin.person_total.progress.middleMessageLength: longueur moyenne du commit message
|
||
§ plugin.person_total.small.status.title: statut estimé
|
||
§ plugin.person_total.small.status.work: travaille
|
||
§ plugin.person_total.small.status.dismissed: parti
|
||
§ plugin.person_total.small.status.staff: assistant
|
||
§ plugin.person_total.small.totalDays: durée du contrat
|
||
§ plugin.person_total.small.country: dernier emplacement
|
||
§ plugin.person_total.small.email: dernier e-mail
|
||
§ plugin.person_total.small.firstDay: premier jour de travail
|
||
§ plugin.person_total.small.lastDay: dernier jour de travail
|
||
§ plugin.person_total.small.middleMessageLength: longueur moyenne du commit message
|
||
§ plugin.person_total.daysWorked.title: jours travaillés
|
||
§ plugin.person_total.daysWorked.description: Seuls les jours où des commits ont été effectués sont pris en compte
|
||
§ plugin.person_total.daysLosses.title: jours sans commits
|
||
§ plugin.person_total.daysLosses.description: Tous les jours moins : jours fériés, week-ends, congés, jours avec commits
|
||
§ plugin.person_total.commits.title: commits
|
||
§ plugin.person_total.commits.description: Les branches supprimées ne sont pas comptées
|
||
§ plugin.person_total.tasks.title: tâches
|
||
§ plugin.person_total.tasks.description: Si les commits ont un commit message correct
|
||
§ plugin.person_total.email.title: Liste des adresses e-mail du collaborateur
|
||
§ plugin.person_total.email.type: Type
|
||
§ plugin.person_total.email.company: Entreprise
|
||
§ plugin.person_total.email.email: E-mail
|
||
§ plugin.person_total.company.title: Liste des entreprises au nom desquelles le collaborateur a fait des commits
|
||
§ plugin.person_total.from: de
|
||
§ plugin.person_total.to: à
|
||
`,he:`
|
||
§ plugin.person_total.sidebar: מידע כללי
|
||
§ plugin.person_total.title: מאפיינים עיקריים
|
||
§ plugin.person_total.progress.dayWorks: משך החוזה
|
||
§ plugin.person_total.progress.tasks: משימות שהושלמו
|
||
§ plugin.person_total.progress.taskInDay: מהירות עבודה
|
||
§ plugin.person_total.progress.commits: commits
|
||
§ plugin.person_total.progress.middleMessageLength: אורך ממוצע של commit message
|
||
§ plugin.person_total.small.status.title: סטטוס משוער
|
||
§ plugin.person_total.small.status.work: עובד
|
||
§ plugin.person_total.small.status.dismissed: עזב
|
||
§ plugin.person_total.small.status.staff: עוזר
|
||
§ plugin.person_total.small.totalDays: משך החוזה
|
||
§ plugin.person_total.small.country: מיקום אחרון
|
||
§ plugin.person_total.small.email: אימייל אחרון
|
||
§ plugin.person_total.small.firstDay: יום העבודה הראשון
|
||
§ plugin.person_total.small.lastDay: יום העבודה האחרון
|
||
§ plugin.person_total.small.middleMessageLength: אורך ממוצע של commit message
|
||
§ plugin.person_total.daysWorked.title: ימי עבודה
|
||
§ plugin.person_total.daysWorked.description: נספרים רק ימים שבהם בוצעו commits
|
||
§ plugin.person_total.daysLosses.title: ימים ללא commits
|
||
§ plugin.person_total.daysLosses.description: כל הימים פחות: חגים, סופי שבוע, חופשה, ימים עם commits
|
||
§ plugin.person_total.commits.title: commits
|
||
§ plugin.person_total.commits.description: branches שנמחקו אינם נספרים
|
||
§ plugin.person_total.tasks.title: משימות
|
||
§ plugin.person_total.tasks.description: אם ל-commits יש commit message תקין
|
||
§ plugin.person_total.email.title: רשימת כתובות האימייל של העובד
|
||
§ plugin.person_total.email.type: סוג
|
||
§ plugin.person_total.email.company: חברה
|
||
§ plugin.person_total.email.email: אימייל
|
||
§ plugin.person_total.company.title: רשימת החברות שבהן שם העובד ביצע commits
|
||
§ plugin.person_total.from: מ-
|
||
§ plugin.person_total.to: עד
|
||
`,hi:`
|
||
§ plugin.person_total.sidebar: सामान्य जानकारी
|
||
§ plugin.person_total.title: मुख्य विशेषताएँ
|
||
§ plugin.person_total.progress.dayWorks: अनुबंध अवधि
|
||
§ plugin.person_total.progress.tasks: पूर्ण किए गए कार्य
|
||
§ plugin.person_total.progress.taskInDay: कार्य गति
|
||
§ plugin.person_total.progress.commits: commits
|
||
§ plugin.person_total.progress.middleMessageLength: औसत commit message लंबाई
|
||
§ plugin.person_total.small.status.title: अनुमानित स्थिति
|
||
§ plugin.person_total.small.status.work: कार्यरत
|
||
§ plugin.person_total.small.status.dismissed: छोड़ चुका है
|
||
§ plugin.person_total.small.status.staff: सहायक
|
||
§ plugin.person_total.small.totalDays: अनुबंध अवधि
|
||
§ plugin.person_total.small.country: नवीनतम स्थान
|
||
§ plugin.person_total.small.email: नवीनतम ईमेल
|
||
§ plugin.person_total.small.firstDay: पहला कार्यदिवस
|
||
§ plugin.person_total.small.lastDay: आख़िरी कार्यदिवस
|
||
§ plugin.person_total.small.middleMessageLength: औसत commit message लंबाई
|
||
§ plugin.person_total.daysWorked.title: काम किए गए दिन
|
||
§ plugin.person_total.daysWorked.description: केवल वे दिन गिने जाते हैं जिनमें commits किए गए हों
|
||
§ plugin.person_total.daysLosses.title: commits के बिना दिन
|
||
§ plugin.person_total.daysLosses.description: सभी दिन घटाकर: छुट्टियाँ, सप्ताहांत, अवकाश, commits वाले दिन
|
||
§ plugin.person_total.commits.title: commits
|
||
§ plugin.person_total.commits.description: हटाई गई branches नहीं गिनी जातीं
|
||
§ plugin.person_total.tasks.title: कार्य
|
||
§ plugin.person_total.tasks.description: अगर commits में सही commit message हो
|
||
§ plugin.person_total.email.title: कर्मचारी के ईमेल पतों की सूची
|
||
§ plugin.person_total.email.type: प्रकार
|
||
§ plugin.person_total.email.company: कंपनी
|
||
§ plugin.person_total.email.email: ईमेल
|
||
§ plugin.person_total.company.title: उन कंपनियों की सूची जिनके नाम पर कर्मचारी ने commits किए
|
||
§ plugin.person_total.from: से
|
||
§ plugin.person_total.to: तक
|
||
`,ja:`
|
||
§ plugin.person_total.sidebar: 一般情報
|
||
§ plugin.person_total.title: 主な特性
|
||
§ plugin.person_total.progress.dayWorks: 契約期間
|
||
§ plugin.person_total.progress.tasks: 完了したタスク
|
||
§ plugin.person_total.progress.taskInDay: 作業速度
|
||
§ plugin.person_total.progress.commits: commits
|
||
§ plugin.person_total.progress.middleMessageLength: commit message の平均長
|
||
§ plugin.person_total.small.status.title: 推定ステータス
|
||
§ plugin.person_total.small.status.work: 在籍中
|
||
§ plugin.person_total.small.status.dismissed: 退職済み
|
||
§ plugin.person_total.small.status.staff: アシスタント
|
||
§ plugin.person_total.small.totalDays: 契約期間
|
||
§ plugin.person_total.small.country: 最新の所在地
|
||
§ plugin.person_total.small.email: 最新のメールアドレス
|
||
§ plugin.person_total.small.firstDay: 初出勤日
|
||
§ plugin.person_total.small.lastDay: 最終出勤日
|
||
§ plugin.person_total.small.middleMessageLength: commit message の平均長
|
||
§ plugin.person_total.daysWorked.title: 勤務日数
|
||
§ plugin.person_total.daysWorked.description: commits が行われた日のみが集計されます
|
||
§ plugin.person_total.daysLosses.title: commits のない日
|
||
§ plugin.person_total.daysLosses.description: 全日数から祝日、週末、休暇、commits のある日を除いた日数
|
||
§ plugin.person_total.commits.title: commits
|
||
§ plugin.person_total.commits.description: 削除された branch は集計されません
|
||
§ plugin.person_total.tasks.title: タスク
|
||
§ plugin.person_total.tasks.description: commits に正しい commit message がある場合
|
||
§ plugin.person_total.email.title: スタッフのメールアドレス一覧
|
||
§ plugin.person_total.email.type: 種別
|
||
§ plugin.person_total.email.company: 会社
|
||
§ plugin.person_total.email.email: メールアドレス
|
||
§ plugin.person_total.company.title: スタッフが commits を行った会社の一覧
|
||
§ plugin.person_total.from: から
|
||
§ plugin.person_total.to: まで
|
||
`,ko:`
|
||
§ plugin.person_total.sidebar: 일반 정보
|
||
§ plugin.person_total.title: 주요 특성
|
||
§ plugin.person_total.progress.dayWorks: 계약 기간
|
||
§ plugin.person_total.progress.tasks: 완료한 작업
|
||
§ plugin.person_total.progress.taskInDay: 작업 속도
|
||
§ plugin.person_total.progress.commits: commits
|
||
§ plugin.person_total.progress.middleMessageLength: 평균 commit message 길이
|
||
§ plugin.person_total.small.status.title: 추정 상태
|
||
§ plugin.person_total.small.status.work: 재직 중
|
||
§ plugin.person_total.small.status.dismissed: 퇴사
|
||
§ plugin.person_total.small.status.staff: 도우미
|
||
§ plugin.person_total.small.totalDays: 계약 기간
|
||
§ plugin.person_total.small.country: 최근 위치
|
||
§ plugin.person_total.small.email: 최근 이메일
|
||
§ plugin.person_total.small.firstDay: 첫 근무일
|
||
§ plugin.person_total.small.lastDay: 마지막 근무일
|
||
§ plugin.person_total.small.middleMessageLength: 평균 commit message 길이
|
||
§ plugin.person_total.daysWorked.title: 근무일
|
||
§ plugin.person_total.daysWorked.description: commits가 있었던 날만 집계됩니다
|
||
§ plugin.person_total.daysLosses.title: commits가 없는 날
|
||
§ plugin.person_total.daysLosses.description: 전체 일수에서 공휴일, 주말, 휴가, commits가 있는 날을 뺀 나머지
|
||
§ plugin.person_total.commits.title: commits
|
||
§ plugin.person_total.commits.description: 삭제된 branch는 집계되지 않습니다
|
||
§ plugin.person_total.tasks.title: 작업
|
||
§ plugin.person_total.tasks.description: commits에 올바른 commit message가 있는 경우
|
||
§ plugin.person_total.email.title: 직원 이메일 주소 목록
|
||
§ plugin.person_total.email.type: 유형
|
||
§ plugin.person_total.email.company: 회사
|
||
§ plugin.person_total.email.email: 이메일
|
||
§ plugin.person_total.company.title: 직원이 commits를 한 회사 목록
|
||
§ plugin.person_total.from: 시작
|
||
§ plugin.person_total.to: 종료
|
||
`,pt:`
|
||
§ plugin.person_total.sidebar: Informações gerais
|
||
§ plugin.person_total.title: Características principais
|
||
§ plugin.person_total.progress.dayWorks: duração do contrato
|
||
§ plugin.person_total.progress.tasks: tarefas concluídas
|
||
§ plugin.person_total.progress.taskInDay: velocidade de trabalho
|
||
§ plugin.person_total.progress.commits: commits
|
||
§ plugin.person_total.progress.middleMessageLength: comprimento médio do commit message
|
||
§ plugin.person_total.small.status.title: status estimado
|
||
§ plugin.person_total.small.status.work: trabalha
|
||
§ plugin.person_total.small.status.dismissed: saiu
|
||
§ plugin.person_total.small.status.staff: assistente
|
||
§ plugin.person_total.small.totalDays: duração do contrato
|
||
§ plugin.person_total.small.country: localização mais recente
|
||
§ plugin.person_total.small.email: e-mail mais recente
|
||
§ plugin.person_total.small.firstDay: primeiro dia de trabalho
|
||
§ plugin.person_total.small.lastDay: último dia de trabalho
|
||
§ plugin.person_total.small.middleMessageLength: comprimento médio do commit message
|
||
§ plugin.person_total.daysWorked.title: dias trabalhados
|
||
§ plugin.person_total.daysWorked.description: Contam-se apenas os dias em que foram feitos commits
|
||
§ plugin.person_total.daysLosses.title: dias sem commits
|
||
§ plugin.person_total.daysLosses.description: Todos os dias menos: feriados, fins de semana, férias, dias com commits
|
||
§ plugin.person_total.commits.title: commits
|
||
§ plugin.person_total.commits.description: Branches excluídas não são contadas
|
||
§ plugin.person_total.tasks.title: tarefas
|
||
§ plugin.person_total.tasks.description: Se os commits tiverem um commit message correto
|
||
§ plugin.person_total.email.title: Lista de endereços de e-mail do colaborador
|
||
§ plugin.person_total.email.type: Tipo
|
||
§ plugin.person_total.email.company: Empresa
|
||
§ plugin.person_total.email.email: E-mail
|
||
§ plugin.person_total.company.title: Lista de empresas em nome das quais o colaborador fez commits
|
||
§ plugin.person_total.from: de
|
||
§ plugin.person_total.to: até
|
||
`,ru:`
|
||
§ plugin.person_total.sidebar: Общая информация
|
||
§ plugin.person_total.title: Основные характеристики
|
||
§ plugin.person_total.progress.dayWorks: продолжительность контракта
|
||
§ plugin.person_total.progress.tasks: выполнено задач
|
||
§ plugin.person_total.progress.taskInDay: скорость работы
|
||
§ plugin.person_total.progress.commits: коммитов
|
||
§ plugin.person_total.progress.middleMessageLength: сердняя длина подписи коммита
|
||
§ plugin.person_total.small.status.title: предполагаемый статус
|
||
§ plugin.person_total.small.status.work: работает
|
||
§ plugin.person_total.small.status.dismissed: уволен
|
||
§ plugin.person_total.small.status.staff: помощник
|
||
§ plugin.person_total.small.totalDays: продолжительность контракта
|
||
§ plugin.person_total.small.country: последние местоположение
|
||
§ plugin.person_total.small.email: последний email
|
||
§ plugin.person_total.small.firstDay: первый рабочий день
|
||
§ plugin.person_total.small.lastDay: последний рабочий день
|
||
§ plugin.person_total.small.middleMessageLength: средняя длина подписи коммита
|
||
§ plugin.person_total.daysWorked.title: дней работы
|
||
§ plugin.person_total.daysWorked.description: Учтены только дни, в которые делались коммиты
|
||
§ plugin.person_total.daysLosses.title: дней без коммитов
|
||
§ plugin.person_total.daysLosses.description: Все дни минус: праздники, выходные, отпуск, дни с коммитами
|
||
§ plugin.person_total.commits.title: коммитов
|
||
§ plugin.person_total.commits.description: Удалённые ветки не считаются
|
||
§ plugin.person_total.tasks.title: задач
|
||
§ plugin.person_total.tasks.description: Если коммиты правильно подписаны
|
||
§ plugin.person_total.email.title: Список почтовых адресов сотрудника
|
||
§ plugin.person_total.email.type: Тип
|
||
§ plugin.person_total.email.company: Компания
|
||
§ plugin.person_total.email.email: Почта
|
||
§ plugin.person_total.company.title: Список компаний, от лица которых сотрудник делал коммиты
|
||
§ plugin.person_total.from: Первый коммит
|
||
§ plugin.person_total.to: Последний коммит
|
||
`,zh:`
|
||
§ plugin.person_total.sidebar: 通用信息
|
||
§ plugin.person_total.title: 主要特征
|
||
§ plugin.person_total.progress.dayWorks: 合同期限
|
||
§ plugin.person_total.progress.tasks: 已完成任务
|
||
§ plugin.person_total.progress.taskInDay: 工作速度
|
||
§ plugin.person_total.progress.commits: commits
|
||
§ plugin.person_total.progress.middleMessageLength: 平均 commit message 长度
|
||
§ plugin.person_total.small.status.title: 预估状态
|
||
§ plugin.person_total.small.status.work: 在职
|
||
§ plugin.person_total.small.status.dismissed: 已离职
|
||
§ plugin.person_total.small.status.staff: 助手
|
||
§ plugin.person_total.small.totalDays: 合同期限
|
||
§ plugin.person_total.small.country: 最近所在地
|
||
§ plugin.person_total.small.email: 最近邮箱
|
||
§ plugin.person_total.small.firstDay: 首个工作日
|
||
§ plugin.person_total.small.lastDay: 最后一个工作日
|
||
§ plugin.person_total.small.middleMessageLength: 平均 commit message 长度
|
||
§ plugin.person_total.daysWorked.title: 工作天数
|
||
§ plugin.person_total.daysWorked.description: 仅统计有 commits 的天数
|
||
§ plugin.person_total.daysLosses.title: 没有 commits 的天数
|
||
§ plugin.person_total.daysLosses.description: 全部天数减去:节假日、周末、休假、有 commits 的天数
|
||
§ plugin.person_total.commits.title: commits
|
||
§ plugin.person_total.commits.description: 已删除的 branch 不计入
|
||
§ plugin.person_total.tasks.title: 任务
|
||
§ plugin.person_total.tasks.description: 如果 commits 有正确的 commit message
|
||
§ plugin.person_total.email.title: 员工邮箱地址列表
|
||
§ plugin.person_total.email.type: 类型
|
||
§ plugin.person_total.email.company: 公司
|
||
§ plugin.person_total.email.email: 邮箱
|
||
§ plugin.person_total.company.title: 员工以其名义提交 commits 的公司列表
|
||
§ plugin.person_total.from: 从
|
||
§ plugin.person_total.to: 至
|
||
`},xB=U(({user:t})=>{const e=t,s=A.statisticsByCommits.scoring.totalInfoByName[t.author],n=A.statisticsByCommits.scoring.total;return o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(_e,{value:e.totalDaysWithCommits,icon:"./assets/cards/work_days.png",title:"page.person.total.daysWorked.title",description:"page.person.total.daysWorked.description",scoring:{value:s.totalDaysWithCommits,total:n.totalDaysWithCommits}}),o.jsx(_e,{value:e.totalDaysWithoutCommits,icon:"./assets/cards/lazy.svg",title:"plugin.person_total.daysLosses.title",description:"plugin.person_total.daysLosses.description",scoring:{value:s.totalDaysWithoutCommits,total:n.totalDaysWithoutCommits}})]}),o.jsxs(Q,{children:[o.jsx(_e,{value:e.commits,icon:"./assets/cards/commits.svg",title:"plugin.person_total.commits.title",description:"plugin.person_total.commits.description",scoring:{value:s.commits,total:n.commits}}),o.jsx(_e,{value:e.totalTasks,icon:"./assets/cards/tasks.svg",title:"page.person.total.tasks.title",description:"page.person.total.tasks.description",scoring:{value:s.totalTasks,total:n.totalTasks}})]})]})});function CB({response:t,updateSort:e,rowsForExcel:s,mode:n}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isSortable:!0,title:"plugin.person_total.email.type",properties:"type",formatter:r=>({[$e.UNKNOWN]:"",[$e.ACCOUNT]:"TECH ACCOUNT",[$e.GITHUB]:"GITHUB",[$e.MAIL]:"PERSONAL",[$e.COMPANY]:"CORPORATE",[$e.NETWORK]:"NETWORK"})[r],template:C.TAGS,width:150}),o.jsx(w,{title:"plugin.person_total.email.company",properties:"company",template:C.TAGS,width:150}),o.jsx(w,{title:"plugin.person_total.email.email",properties:"email",template:(r,u)=>u.type===$e.GITHUB?o.jsx(Kv,{email:r}):r}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.person_total.from",properties:"from",width:150,formatter:oe}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.person_total.to",properties:"to",width:150,formatter:oe})]}):null}function jB({response:t,updateSort:e,rowsForExcel:s,mode:n}){return t?o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.person_total.email.company",properties:"title"}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.person_total.from",properties:"from",width:150,formatter:oe}),o.jsx(w,{isSortable:!0,template:C.STRING,title:"plugin.person_total.to",properties:"to",width:150,formatter:oe})]}):null}const TB={progress_card:"progress_card"};function DB({children:t}){return o.jsx("div",{className:TB.progress_card,children:t})}const As={progress_line:"progress_line",progress_line_container:"progress_line_container",progress_line_value:"progress_line_value",progress_line_value_min:"progress_line_value_min",progress_line_value_less:"progress_line_value_less",progress_line_value_more:"progress_line_value_more",progress_line_value_max:"progress_line_value_max",progress_line_title:"progress_line_title",progress_line_icon:"progress_line_icon",progress_line_icon_svg:"progress_line_icon_svg"};function dm({value:t,max:e,title:s,icon:n}){const{t:r}=ie(),u=Math.min(Math.round(t*100/e),100);let c=[As.progress_line_value];return u<=15?c.push(As.progress_line_value_min):u<=25?c.push(As.progress_line_value_less):u>=85?c.push(As.progress_line_value_max):u>=70&&c.push(As.progress_line_value_more),o.jsxs("div",{className:As.progress_line_container,children:[o.jsx("div",{className:As.progress_line_icon,children:o.jsx("img",{alt:"",className:As.progress_line_icon_svg,src:n})}),o.jsx("div",{className:As.progress_line,children:o.jsx("div",{className:c.join(" "),style:{width:`${u}%`}})}),o.jsx("p",{className:As.progress_line_title,children:r(s)})]})}function SB({user:t}){const{t:e}=ie(),s=A.statisticsByCommits.scoring.totalInfoByName[t.author],n=A.statisticsByCommits.scoring.total,[r,u,c]=["plugin.person_total.small.status.work","plugin.person_total.small.status.dismissed","plugin.person_total.small.status.staff"];let p=r;t.isStaff&&(p=c),t.isDismissed&&(p=u);const _=A.statisticsByCommits.author.totalInfo,[h,f,v,k,x]=T.useMemo(()=>Mt({content:_},["totalDays","totalTasks","totalTaskInDay","commits","middleMessageLength"]),[A.hash]);return o.jsxs(Te,{children:[o.jsx(Q,{children:o.jsxs(DB,{children:[o.jsx(dm,{value:t.totalDays,max:h,title:"plugin.person_total.progress.dayWorks",icon:"./assets/rating/days.svg"}),o.jsx(dm,{value:t.totalTasks,max:f,title:"plugin.person_total.progress.tasks",icon:"./assets/rating/tasks.svg"}),o.jsx(dm,{value:t.totalTaskInDay,max:v,title:"plugin.person_total.progress.taskInDay",icon:"./assets/rating/speed.svg"}),o.jsx(dm,{value:t.commits,max:k,title:"plugin.person_total.progress.commits",icon:"./assets/rating/commit.svg"}),o.jsx(dm,{value:t.middleMessageLength,max:x,title:"plugin.person_total.progress.middleMessageLength",icon:"./assets/rating/text.svg"})]})}),o.jsxs(Q,{children:[o.jsx(ke,{value:e(p),icon:"./assets/cards/commits.svg",title:"plugin.person_total.small.status.title"}),o.jsx(ke,{value:Ur(t.totalDays),icon:"./assets/cards/work_days2.svg",title:"plugin.person_total.small.totalDays",scoring:{value:s.totalDays,total:n.totalDays}}),o.jsx(ke,{value:t.lastCountry,icon:"./assets/cards/location.svg",title:"plugin.person_total.small.country"}),o.jsx(ke,{value:t.emails[0],icon:"./assets/cards/mail.svg",title:"plugin.person_total.small.email"})]})]})}function AB({user:t,mode:e}){const n=A.statisticsByCommits.email.totalInfo.filter(r=>r.author===t.author);return o.jsxs(o.Fragment,{children:[o.jsx(G,{title:"plugin.person_total.title"}),o.jsx(SB,{user:t}),o.jsx(xB,{user:t}),o.jsx(nt,{height:"xl"}),o.jsxs(Y,{value:n,children:[o.jsx(G,{title:"plugin.person_total.email.title"}),o.jsxs(be,{content:n,mode:e,watch:`${e}${t.author}${A.hash}`,children:[o.jsx(CB,{mode:e,rowsForExcel:n}),o.jsx(fe,{})]})]}),o.jsxs(Y,{value:t.companies,children:[o.jsx(G,{title:"plugin.person_total.company.title"}),o.jsxs(be,{content:t.companies,mode:e,watch:`${e}${t.author}${A.hash}`,children:[o.jsx(jB,{mode:e,rowsForExcel:t.companies}),o.jsx(fe,{})]})]})]})}let zB=(Pl=class{constructor(){this.dependencies=["email","scoring"]}getMenuItems(){return[{id:"total",group:10,order:10,link:"/person/total/",title:"plugin.person_total.sidebar",icon:"./assets/menu/common.svg"}]}getPage(e,s){return e==="/person/total"?o.jsx(AB,{mode:s==null?void 0:s.mode,user:s==null?void 0:s.user,filters:s==null?void 0:s.filters}):void 0}getTranslations(){return wB}},Pl.id="person_total",Pl);const NB={ar:`
|
||
§ plugin.person_vacation.sidebar: جدول الإجازات
|
||
§ plugin.person_vacation.grant.title: التفصيل حسب السنة
|
||
§ plugin.person_vacation.charts.title: تحليل الإجازات على مدار الفترة
|
||
§ plugin.person_vacation.charts.total.title: أيام الإجازة
|
||
§ plugin.person_vacation.charts.total.description: لا تُحتسب النقلات إلى قسم آخر.
|
||
§ plugin.person_vacation.charts.money.title: بدل الإجازة
|
||
§ plugin.person_vacation.charts.money.description: الإجمالي على مدار الفترة. يُضرب متوسط الدخل اليومي في عدد أيام الإجازة.
|
||
§ plugin.person_vacation.charts.years: توزيع الإجازات حسب السنة
|
||
§ plugin.person_vacation.details.title: فترات مع غياب طويل عن commits
|
||
§ plugin.person_vacation.details.type: النوع
|
||
§ plugin.person_vacation.details.transfer: النقل إلى قسم آخر
|
||
§ plugin.person_vacation.details.vacation: إجازة
|
||
§ plugin.person_vacation.details.author: الموظف
|
||
§ plugin.person_vacation.details.from: من
|
||
§ plugin.person_vacation.details.to: إلى
|
||
§ plugin.person_vacation.details.duration: المدة
|
||
`,de:`
|
||
§ plugin.person_vacation.sidebar: Urlaubsplan
|
||
§ plugin.person_vacation.grant.title: Aufschlüsselung nach Jahren
|
||
§ plugin.person_vacation.charts.title: Urlaubsanalyse über die gesamte Zeit
|
||
§ plugin.person_vacation.charts.total.title: Urlaubstage
|
||
§ plugin.person_vacation.charts.total.description: Versetzungen in eine andere Abteilung werden nicht berücksichtigt.
|
||
§ plugin.person_vacation.charts.money.title: Urlaubsgeld
|
||
§ plugin.person_vacation.charts.money.description: Summe über die gesamte Zeit. Der durchschnittliche Tagesverdienst wird mit der Anzahl der Urlaubstage multipliziert.
|
||
§ plugin.person_vacation.charts.years: Verteilung der Urlaube nach Jahren
|
||
§ plugin.person_vacation.details.title: Zeiträume mit langer Abwesenheit von commits
|
||
§ plugin.person_vacation.details.type: Typ
|
||
§ plugin.person_vacation.details.transfer: Versetzung in eine andere Abteilung
|
||
§ plugin.person_vacation.details.vacation: Urlaub
|
||
§ plugin.person_vacation.details.author: Mitarbeiter
|
||
§ plugin.person_vacation.details.from: von
|
||
§ plugin.person_vacation.details.to: bis
|
||
§ plugin.person_vacation.details.duration: Dauer
|
||
`,en:`
|
||
§ plugin.person_vacation.sidebar: Vacation schedule
|
||
§ plugin.person_vacation.grant.title: Breakdown by year
|
||
§ plugin.person_vacation.charts.title: Vacation analysis over time
|
||
§ plugin.person_vacation.charts.total.title: vacation days
|
||
§ plugin.person_vacation.charts.total.description: Transfers to another department are not taken into account.
|
||
§ plugin.person_vacation.charts.money.title: vacation pay
|
||
§ plugin.person_vacation.charts.money.description: Total over time. Average daily earnings are multiplied by the number of vacation days.
|
||
§ plugin.person_vacation.charts.years: Vacation distribution by year
|
||
§ plugin.person_vacation.details.title: Periods with a long absence of commits
|
||
§ plugin.person_vacation.details.type: Type
|
||
§ plugin.person_vacation.details.transfer: Transfer to another department
|
||
§ plugin.person_vacation.details.vacation: Vacation
|
||
§ plugin.person_vacation.details.author: Staff member
|
||
§ plugin.person_vacation.details.from: from
|
||
§ plugin.person_vacation.details.to: to
|
||
§ plugin.person_vacation.details.duration: Duration
|
||
`,es:`
|
||
§ plugin.person_vacation.sidebar: Calendario de vacaciones
|
||
§ plugin.person_vacation.grant.title: Desglose por años
|
||
§ plugin.person_vacation.charts.title: Análisis de vacaciones a lo largo del tiempo
|
||
§ plugin.person_vacation.charts.total.title: días de vacaciones
|
||
§ plugin.person_vacation.charts.total.description: Los traslados a otro departamento no se tienen en cuenta.
|
||
§ plugin.person_vacation.charts.money.title: paga de vacaciones
|
||
§ plugin.person_vacation.charts.money.description: Total acumulado. El salario diario medio se multiplica por el número de días de vacaciones.
|
||
§ plugin.person_vacation.charts.years: Distribución de vacaciones por año
|
||
§ plugin.person_vacation.details.title: Periodos con una larga ausencia de commits
|
||
§ plugin.person_vacation.details.type: Tipo
|
||
§ plugin.person_vacation.details.transfer: Traslado a otro departamento
|
||
§ plugin.person_vacation.details.vacation: Vacaciones
|
||
§ plugin.person_vacation.details.author: Empleado
|
||
§ plugin.person_vacation.details.from: desde
|
||
§ plugin.person_vacation.details.to: hasta
|
||
§ plugin.person_vacation.details.duration: Duración
|
||
`,fr:`
|
||
§ plugin.person_vacation.sidebar: Calendrier des congés
|
||
§ plugin.person_vacation.grant.title: Répartition par année
|
||
§ plugin.person_vacation.charts.title: Analyse des congés sur toute la période
|
||
§ plugin.person_vacation.charts.total.title: jours de congé
|
||
§ plugin.person_vacation.charts.total.description: Les mutations vers un autre département ne sont pas prises en compte.
|
||
§ plugin.person_vacation.charts.money.title: indemnité de congés
|
||
§ plugin.person_vacation.charts.money.description: Total sur toute la période. Le salaire journalier moyen est multiplié par le nombre de jours de congé.
|
||
§ plugin.person_vacation.charts.years: Répartition des congés par année
|
||
§ plugin.person_vacation.details.title: Périodes avec une longue absence de commits
|
||
§ plugin.person_vacation.details.type: Type
|
||
§ plugin.person_vacation.details.transfer: Mutation vers un autre département
|
||
§ plugin.person_vacation.details.vacation: Congé
|
||
§ plugin.person_vacation.details.author: Collaborateur
|
||
§ plugin.person_vacation.details.from: de
|
||
§ plugin.person_vacation.details.to: à
|
||
§ plugin.person_vacation.details.duration: Durée
|
||
`,he:`
|
||
§ plugin.person_vacation.sidebar: לוח חופשות
|
||
§ plugin.person_vacation.grant.title: פירוט לפי שנים
|
||
§ plugin.person_vacation.charts.title: ניתוח חופשות לאורך כל התקופה
|
||
§ plugin.person_vacation.charts.total.title: ימי חופשה
|
||
§ plugin.person_vacation.charts.total.description: העברות למחלקה אחרת אינן נספרות.
|
||
§ plugin.person_vacation.charts.money.title: דמי חופשה
|
||
§ plugin.person_vacation.charts.money.description: סך הכול לאורך כל התקופה. השכר היומי הממוצע מוכפל במספר ימי החופשה.
|
||
§ plugin.person_vacation.charts.years: התפלגות חופשות לפי שנה
|
||
§ plugin.person_vacation.details.title: תקופות עם היעדרות ממושכת של commits
|
||
§ plugin.person_vacation.details.type: סוג
|
||
§ plugin.person_vacation.details.transfer: העברה למחלקה אחרת
|
||
§ plugin.person_vacation.details.vacation: חופשה
|
||
§ plugin.person_vacation.details.author: עובד
|
||
§ plugin.person_vacation.details.from: מ-
|
||
§ plugin.person_vacation.details.to: עד
|
||
§ plugin.person_vacation.details.duration: משך
|
||
`,hi:`
|
||
§ plugin.person_vacation.sidebar: अवकाश अनुसूची
|
||
§ plugin.person_vacation.grant.title: वर्ष के अनुसार विवरण
|
||
§ plugin.person_vacation.charts.title: पूरी अवधि का अवकाश विश्लेषण
|
||
§ plugin.person_vacation.charts.total.title: अवकाश के दिन
|
||
§ plugin.person_vacation.charts.total.description: दूसरे विभाग में स्थानांतरण को नहीं गिना जाता।
|
||
§ plugin.person_vacation.charts.money.title: अवकाश वेतन
|
||
§ plugin.person_vacation.charts.money.description: पूरी अवधि का योग। औसत दैनिक आय को अवकाश दिनों की संख्या से गुणा किया जाता है।
|
||
§ plugin.person_vacation.charts.years: वर्ष के अनुसार अवकाश वितरण
|
||
§ plugin.person_vacation.details.title: लंबे समय तक commits की अनुपस्थिति वाले अंतराल
|
||
§ plugin.person_vacation.details.type: प्रकार
|
||
§ plugin.person_vacation.details.transfer: दूसरे विभाग में स्थानांतरण
|
||
§ plugin.person_vacation.details.vacation: अवकाश
|
||
§ plugin.person_vacation.details.author: कर्मचारी
|
||
§ plugin.person_vacation.details.from: से
|
||
§ plugin.person_vacation.details.to: तक
|
||
§ plugin.person_vacation.details.duration: अवधि
|
||
`,ja:`
|
||
§ plugin.person_vacation.sidebar: 休暇スケジュール
|
||
§ plugin.person_vacation.grant.title: 年別の内訳
|
||
§ plugin.person_vacation.charts.title: 全期間の休暇分析
|
||
§ plugin.person_vacation.charts.total.title: 休暇日数
|
||
§ plugin.person_vacation.charts.total.description: 他部門への異動は考慮されません。
|
||
§ plugin.person_vacation.charts.money.title: 休暇手当
|
||
§ plugin.person_vacation.charts.money.description: 全期間の合計。平均日収に休暇日数を掛けます。
|
||
§ plugin.person_vacation.charts.years: 年別の休暇分布
|
||
§ plugin.person_vacation.details.title: commits が長期間ない期間
|
||
§ plugin.person_vacation.details.type: 種別
|
||
§ plugin.person_vacation.details.transfer: 他部門への異動
|
||
§ plugin.person_vacation.details.vacation: 休暇
|
||
§ plugin.person_vacation.details.author: スタッフ
|
||
§ plugin.person_vacation.details.from: から
|
||
§ plugin.person_vacation.details.to: まで
|
||
§ plugin.person_vacation.details.duration: 期間
|
||
`,ko:`
|
||
§ plugin.person_vacation.sidebar: 휴가 일정
|
||
§ plugin.person_vacation.grant.title: 연도별 내역
|
||
§ plugin.person_vacation.charts.title: 전체 기간 휴가 분석
|
||
§ plugin.person_vacation.charts.total.title: 휴가 일수
|
||
§ plugin.person_vacation.charts.total.description: 다른 부서로의 전배는 반영되지 않습니다.
|
||
§ plugin.person_vacation.charts.money.title: 휴가비
|
||
§ plugin.person_vacation.charts.money.description: 전체 기간 합계. 평균 일급에 휴가 일수를 곱합니다.
|
||
§ plugin.person_vacation.charts.years: 연도별 휴가 분포
|
||
§ plugin.person_vacation.details.title: commits가 오래 없었던 기간
|
||
§ plugin.person_vacation.details.type: 유형
|
||
§ plugin.person_vacation.details.transfer: 다른 부서로의 전배
|
||
§ plugin.person_vacation.details.vacation: 휴가
|
||
§ plugin.person_vacation.details.author: 직원
|
||
§ plugin.person_vacation.details.from: 시작
|
||
§ plugin.person_vacation.details.to: 종료
|
||
§ plugin.person_vacation.details.duration: 기간
|
||
`,pt:`
|
||
§ plugin.person_vacation.sidebar: Calendário de férias
|
||
§ plugin.person_vacation.grant.title: Detalhamento por ano
|
||
§ plugin.person_vacation.charts.title: Análise de férias ao longo do tempo
|
||
§ plugin.person_vacation.charts.total.title: dias de férias
|
||
§ plugin.person_vacation.charts.total.description: Transferências para outro departamento não são consideradas.
|
||
§ plugin.person_vacation.charts.money.title: férias pagas
|
||
§ plugin.person_vacation.charts.money.description: Total ao longo do tempo. O ganho diário médio é multiplicado pelo número de dias de férias.
|
||
§ plugin.person_vacation.charts.years: Distribuição de férias por ano
|
||
§ plugin.person_vacation.details.title: Períodos com longa ausência de commits
|
||
§ plugin.person_vacation.details.type: Tipo
|
||
§ plugin.person_vacation.details.transfer: Transferência para outro departamento
|
||
§ plugin.person_vacation.details.vacation: Férias
|
||
§ plugin.person_vacation.details.author: Colaborador
|
||
§ plugin.person_vacation.details.from: de
|
||
§ plugin.person_vacation.details.to: até
|
||
§ plugin.person_vacation.details.duration: Duração
|
||
`,ru:`
|
||
§ plugin.person_vacation.sidebar: График отпусков
|
||
§ plugin.person_vacation.grant.title: Разбивка по годам
|
||
§ plugin.person_vacation.charts.title: Анализ отпусков за всё время
|
||
§ plugin.person_vacation.charts.total.title: дней отпуска
|
||
§ plugin.person_vacation.charts.total.description: Переводы в другой отдел не учитываются.
|
||
§ plugin.person_vacation.charts.money.title: отпускные
|
||
§ plugin.person_vacation.charts.money.description: Суммарно за всё время. Средне-дневной заработок умножается на количество дней отпуска.
|
||
§ plugin.person_vacation.charts.years: Распределение отпусков по годам
|
||
§ plugin.person_vacation.details.title: Периоды с длительным отсутствием коммитов
|
||
§ plugin.person_vacation.details.type: Тип
|
||
§ plugin.person_vacation.details.transfer: Перевод в другой отдел
|
||
§ plugin.person_vacation.details.vacation: Отпуск
|
||
§ plugin.person_vacation.details.author: Сотрудник
|
||
§ plugin.person_vacation.details.from: Первый коммит
|
||
§ plugin.person_vacation.details.to: Последний коммит
|
||
§ plugin.person_vacation.details.duration: Продолжительность
|
||
`,zh:`
|
||
§ plugin.person_vacation.sidebar: 休假计划
|
||
§ plugin.person_vacation.grant.title: 按年度明细
|
||
§ plugin.person_vacation.charts.title: 全时段休假分析
|
||
§ plugin.person_vacation.charts.total.title: 休假天数
|
||
§ plugin.person_vacation.charts.total.description: 调往其他部门不计入。
|
||
§ plugin.person_vacation.charts.money.title: 休假薪酬
|
||
§ plugin.person_vacation.charts.money.description: 全时段合计。将平均日收入乘以休假天数。
|
||
§ plugin.person_vacation.charts.years: 按年休假分布
|
||
§ plugin.person_vacation.details.title: 长时间没有 commits 的时段
|
||
§ plugin.person_vacation.details.type: 类型
|
||
§ plugin.person_vacation.details.transfer: 调往其他部门
|
||
§ plugin.person_vacation.details.vacation: 休假
|
||
§ plugin.person_vacation.details.author: 员工
|
||
§ plugin.person_vacation.details.from: 自
|
||
§ plugin.person_vacation.details.to: 至
|
||
§ plugin.person_vacation.details.duration: 时长
|
||
`};function MB({rows:t}){const e=T.useMemo(()=>Xk(t),[t]),[s,n]=kc();return o.jsxs(ws,{rows:e,children:[o.jsx(w,{template:C.STRING,width:90,properties:"year"}),o.jsx(w,{title:()=>o.jsx(Wi,{markersLine:n,markersText:s,formatter:Lo()}),template:r=>o.jsx(Wi,{markersLine:n,lines:r.lines,formatter:Lo(r.year)})})]})}function Rb(t){return t.month*30+t.day}function RB(t){let e=0;const s={};t.forEach(r=>{r.duration>40||(e+=r.duration,r.from.year===r.to.year?Ce(s,r.from.year,r.duration):(Ce(s,r.from.year,365-Rb(r.from)),Ce(s,r.to.year,Rb(r.to))))});const n=Object.keys(s).reverse();return{totalDays:e,details:s,order:n}}function EB({content:t}){if(!(t!=null&&t.length))return null;const{totalDays:e,details:s,order:n}=RB(t),r=de.getMiddleVacationPayInDay();return o.jsxs(Te,{children:[o.jsxs(Q,{children:[o.jsx(_e,{value:e,icon:"./assets/cards/lazy.svg",title:"plugin.person_vacation.charts.total.title",description:"plugin.person_vacation.charts.total.description"}),o.jsx(_e,{value:ct(e*r),icon:"./assets/cards/money_holidays.svg",title:"plugin.person_vacation.charts.money.title",description:"plugin.person_vacation.charts.money.description"})]}),o.jsx(Q,{children:o.jsx(Ne,{title:"plugin.person_vacation.charts.years",details:s,limit:1,order:n,suffix:"common.statistic.days"})})]})}function IB({response:t,updateSort:e,rowsForExcel:s,mode:n}){if(!t)return null;const[r]=Mt(t,["duration"]);return o.jsxs(je,{rowsForExcel:s,rows:t.content,sort:t.sort,updateSort:e,mode:n,type:n==="print"?"cards":void 0,columnCount:n==="print"?3:void 0,children:[o.jsx(w,{title:"тип",formatter:u=>u.duration>40?"plugin.person_vacation.details.transfer":"plugin.person_vacation.details.vacation",template:C.TAGS,minWidth:200}),o.jsx(w,{template:C.STRING,title:"plugin.person_vacation.details.from",minWidth:130,formatter:u=>oe(u.from.milliseconds)}),o.jsx(w,{template:C.STRING,title:"plugin.person_vacation.details.to",minWidth:130,formatter:u=>oe(u.to.milliseconds)}),o.jsx(w,{template:C.SHORT_NUMBER,properties:"duration"}),o.jsx(w,{isSortable:!0,title:"plugin.person_vacation.details.duration",properties:"duration",minWidth:200,template:u=>o.jsx(ue,{value:u,max:r,suffix:"common.statistic.days"})})]})}const qB=U(({user:t,mode:e})=>{const s=A.statisticsByCommits.absence.totalInfoByName.get(t.author)||[];return s!=null&&s.length?o.jsxs(o.Fragment,{children:[o.jsxs(tc,{children:[o.jsx(nt,{height:"xl"}),o.jsx(MB,{rows:s})]}),o.jsx(G,{title:"plugin.person_vacation.charts.title"}),o.jsx(EB,{content:s}),o.jsx(G,{title:"plugin.person_vacation.details.title"}),o.jsxs(be,{content:s,mode:e,watch:`${e}${t.author}${A.hash}`,children:[o.jsx(IB,{mode:e,rowsForExcel:s}),o.jsx(fe,{})]})]}):e!=="print"?o.jsx(Le,{}):null}),Pg=class Pg{constructor(){this.dependencies=["absence"]}getMenuItems(){return[{id:"vacation",group:20,order:75,link:"/person/vacation/",title:"plugin.person_vacation.sidebar",icon:"./assets/menu/vacation.svg"}]}getPage(e,s){return e==="/person/vacation"?o.jsx(qB,{mode:s==null?void 0:s.mode,user:s==null?void 0:s.user,filters:s==null?void 0:s.filters}):void 0}getTranslations(){return NB}};Pg.id="person_vacation";let Lg=Pg;const OB=[x2,tL,AE,D2,KI,Kq,yq,Aq,dL,d2,F2,XO,kO,_O,aO,N$,U$,NL,m$,BI,C$,zI,Z2,lB,zB,_B,yB,bB,Lg,jR,NR,BR];Ee.addTranslationsForLanguage("ar",lD),Ee.addTranslationsForLanguage("de",rD),Ee.addTranslationsForLanguage("en",mD),Ee.addTranslationsForLanguage("es",uD),Ee.addTranslationsForLanguage("fr",cD),Ee.addTranslationsForLanguage("he",pD),Ee.addTranslationsForLanguage("hi",dD),Ee.addTranslationsForLanguage("ja",gD),Ee.addTranslationsForLanguage("pt",_D),Ee.addTranslationsForLanguage("ru",hD),Ee.addTranslationsForLanguage("ko",fD),Ee.addTranslationsForLanguage("zh",yD),Math.random()>2&&document.addEventListener("copy",function(e){const s=document.getSelection(),n=s?s.toString():"";if(!n||!e.clipboardData)return;const r=jD(n);e.clipboardData.setData("text/plain",r),e.preventDefault()});function $B(){const t=window.report||[];if(!(t!=null&&t.length))return;const e=Ct.get("gitLog");if((e==null?void 0:e.length)===(t==null?void 0:t.length))return;const s=[...t];Ct.add("gitLog",s),A.asyncSetCommits(s)}function Eb(){window.onafterprint=()=>{xs.endPrint()};const t=document.getElementById("root");t&&(console.log("renderReactApplication"),setInterval($B,1e3),lT.createRoot(t).render(o.jsx(wt.StrictMode,{children:o.jsxs(aD,{children:[o.jsx(cR,{}),o.jsx(dR,{})]})})))}hR(t=>{de.updateConfig(t),lt.setPlugins(hM(OB,t)),YS(t.exchangeRate),t.urlForCss&&vR(t.urlForCss),t.title&&(document.title=t.title),bD(t.language),lt.getTranslations().forEach(e=>{Object.entries(e).forEach(([s,n])=>{Ee.addTranslationsForLanguage(s,n)})}),Vr.setReference(t.ref),t.urlForGitLog?yR(t.urlForGitLog,()=>Eb()):Eb()})})();
|
||
</script> |