},
- timePicker: PropTypes.any,
- showTime: withUndefined(PropTypes.oneOfType([PropTypes.object, PropTypes.looseBool])),
- ranges: PropTypes.object,
- placeholder: PropTypes.arrayOf(String),
- mode: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(String)]),
- separator: PropTypes.any,
- disabledTime: PropTypes.func,
- showToday: PropTypes.looseBool,
- renderExtraFooter: PropTypes.any,
- onChange: PropTypes.func,
- onCalendarChange: PropTypes.func,
- onOk: PropTypes.func,
- onPanelChange: PropTypes.func,
- onMouseenter: PropTypes.func,
- onMouseleave: PropTypes.func,
-};
-
-export const WeekPickerProps = {
- ...PickerProps,
- ...SinglePickerProps,
- placeholder: PropTypes.string,
-};
diff --git a/components/date-picker/style/Calendar.less b/components/date-picker/style/Calendar.less
deleted file mode 100644
index 5dbac6f8c..000000000
--- a/components/date-picker/style/Calendar.less
+++ /dev/null
@@ -1,405 +0,0 @@
-.calendarLeftArrow() {
- height: 100%;
-
- &::before,
- &::after {
- position: relative;
- top: -1px;
- display: inline-block;
- width: 8px;
- height: 8px;
- vertical-align: middle;
- border: 0 solid #aaa;
- border-width: 1.5px 0 0 1.5px;
- border-radius: 1px;
- transform: rotate(-45deg) scale(0.8);
- transition: all 0.3s;
- content: '';
- }
-
- &:hover::before,
- &:hover::after {
- border-color: @text-color;
- }
-
- &::after {
- display: none;
- }
-}
-
-.calendarLeftDoubleArrow() {
- .calendarLeftArrow();
-
- &::after {
- position: relative;
- left: -3px;
- display: inline-block;
- }
-}
-
-.calendarRightArrow() {
- .calendarLeftArrow();
-
- &::before,
- &::after {
- transform: rotate(135deg) scale(0.8);
- }
-}
-
-.calendarRightDoubleArrow() {
- .calendarRightArrow();
-
- &::before {
- position: relative;
- left: 3px;
- }
-
- &::after {
- display: inline-block;
- }
-}
-
-.calendarPanelHeader(@calendar-prefix-cls) {
- height: 40px;
- line-height: 40px;
- text-align: center;
- border-bottom: @border-width-base @border-style-base @border-color-split;
- user-select: none;
-
- a:hover {
- color: @link-hover-color;
- }
-
- .@{calendar-prefix-cls}-century-select,
- .@{calendar-prefix-cls}-decade-select,
- .@{calendar-prefix-cls}-year-select,
- .@{calendar-prefix-cls}-month-select {
- display: inline-block;
- padding: 0 2px;
- color: @heading-color;
- font-weight: 500;
- line-height: 40px;
- }
-
- .@{calendar-prefix-cls}-century-select-arrow,
- .@{calendar-prefix-cls}-decade-select-arrow,
- .@{calendar-prefix-cls}-year-select-arrow,
- .@{calendar-prefix-cls}-month-select-arrow {
- display: none;
- }
-
- .@{calendar-prefix-cls}-prev-century-btn,
- .@{calendar-prefix-cls}-next-century-btn,
- .@{calendar-prefix-cls}-prev-decade-btn,
- .@{calendar-prefix-cls}-next-decade-btn,
- .@{calendar-prefix-cls}-prev-month-btn,
- .@{calendar-prefix-cls}-next-month-btn,
- .@{calendar-prefix-cls}-prev-year-btn,
- .@{calendar-prefix-cls}-next-year-btn {
- position: absolute;
- top: 0;
- display: inline-block;
- padding: 0 5px;
- color: @text-color-secondary;
- font-size: 16px;
- font-family: Arial, 'Hiragino Sans GB', 'Microsoft Yahei', 'Microsoft Sans Serif', sans-serif;
- line-height: 40px;
- }
-
- .@{calendar-prefix-cls}-prev-century-btn,
- .@{calendar-prefix-cls}-prev-decade-btn,
- .@{calendar-prefix-cls}-prev-year-btn {
- left: 7px;
- .calendarLeftDoubleArrow();
- }
-
- .@{calendar-prefix-cls}-next-century-btn,
- .@{calendar-prefix-cls}-next-decade-btn,
- .@{calendar-prefix-cls}-next-year-btn {
- right: 7px;
- .calendarRightDoubleArrow();
- }
-
- .@{calendar-prefix-cls}-prev-month-btn {
- left: 29px;
- .calendarLeftArrow();
- }
-
- .@{calendar-prefix-cls}-next-month-btn {
- right: 29px;
- .calendarRightArrow();
- }
-}
-
-.calendar-selected-cell() {
- .@{calendar-prefix-cls}-date {
- color: @text-color-inverse;
- background: @primary-color;
- border: @border-width-base @border-style-base transparent;
-
- &:hover {
- background: @primary-color;
- }
- }
-}
-
-.@{calendar-prefix-cls} {
- position: relative;
- width: 280px;
- font-size: @font-size-base;
- line-height: @line-height-base;
- text-align: left;
- list-style: none;
- background-color: @component-background;
- background-clip: padding-box;
- border: @border-width-base @border-style-base @border-color-inverse;
- & when (@theme = dark) {
- border-color: @black;
- }
- border-radius: @border-radius-base;
- outline: none;
- box-shadow: @box-shadow-base;
-
- &-input-wrap {
- height: 34px;
- padding: 6px @control-padding-horizontal - 2px;
- border-bottom: @border-width-base @border-style-base @border-color-split;
- }
-
- &-input {
- width: 100%;
- height: 22px;
- color: @input-color;
- background: @input-bg;
- border: 0;
- outline: 0;
- cursor: auto;
- .placeholder();
- }
-
- &-week-number {
- width: 286px;
-
- &-cell {
- text-align: center;
- }
- }
-
- &-header {
- .calendarPanelHeader(@calendar-prefix-cls);
- }
-
- &-body {
- padding: 8px 12px;
- }
-
- table {
- width: 100%;
- max-width: 100%;
- background-color: transparent;
- border-collapse: collapse;
- }
-
- table,
- th,
- td {
- text-align: center;
- border: 0;
- }
-
- &-calendar-table {
- margin-bottom: 0;
- border-spacing: 0;
- }
-
- &-column-header {
- width: 33px;
- padding: 6px 0;
- line-height: 18px;
- text-align: center;
- .@{calendar-prefix-cls}-column-header-inner {
- display: block;
- font-weight: normal;
- }
- }
-
- &-week-number-header {
- .@{calendar-prefix-cls}-column-header-inner {
- display: none;
- }
- }
-
- &-cell {
- height: 30px;
- padding: 3px 0;
- }
-
- &-date {
- display: block;
- width: 24px;
- height: 24px;
- margin: 0 auto;
- padding: 0;
- color: @text-color;
- line-height: 22px;
- text-align: center;
- background: transparent;
- border: @border-width-base @border-style-base transparent;
- border-radius: @border-radius-sm;
- transition: background 0.3s ease;
-
- &-panel {
- position: relative;
- outline: none;
- }
-
- &:hover {
- background: @item-hover-bg;
- cursor: pointer;
- }
-
- &:active {
- color: @text-color-inverse;
- background: @primary-5;
- }
- }
-
- &-today &-date {
- color: @primary-color;
- font-weight: bold;
- border-color: @primary-color;
- }
-
- &-selected-day &-date {
- background: @primary-2;
- }
-
- &-last-month-cell &-date,
- &-next-month-btn-day &-date {
- &,
- &:hover {
- color: @disabled-color;
- background: transparent;
- border-color: transparent;
- }
- }
-
- &-disabled-cell &-date {
- position: relative;
- width: auto;
- color: @disabled-color;
- background: @disabled-bg;
- border: @border-width-base @border-style-base transparent;
- border-radius: 0;
- cursor: not-allowed;
-
- &:hover {
- background: @disabled-bg;
- }
- }
-
- &-disabled-cell&-selected-day &-date::before {
- position: absolute;
- top: -1px;
- left: 5px;
- width: 24px;
- height: 24px;
- background: rgba(0, 0, 0, 0.1);
- border-radius: @border-radius-sm;
- content: '';
- }
-
- &-disabled-cell&-today &-date {
- position: relative;
- padding-right: 5px;
- padding-left: 5px;
- &::before {
- position: absolute;
- top: -1px;
- left: 5px;
- width: 24px;
- height: 24px;
- border: @border-width-base @border-style-base @disabled-color;
- border-radius: @border-radius-sm;
- content: ' ';
- }
- }
-
- &-disabled-cell-first-of-row &-date {
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px;
- }
-
- &-disabled-cell-last-of-row &-date {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
- }
-
- &-footer {
- padding: 0 12px;
- line-height: 38px;
- border-top: @border-width-base @border-style-base @border-color-split;
- &:empty {
- border-top: 0;
- }
- &-btn {
- display: block;
- text-align: center;
- }
- &-extra {
- text-align: left;
- }
- }
-
- .@{calendar-prefix-cls}-today-btn,
- .@{calendar-prefix-cls}-clear-btn {
- display: inline-block;
- margin: 0 0 0 8px;
- text-align: center;
- &-disabled {
- color: @disabled-color;
- cursor: not-allowed;
- }
- &:only-child {
- margin: 0;
- }
- }
-
- .@{calendar-prefix-cls}-clear-btn {
- position: absolute;
- top: 7px;
- right: 5px;
- display: none;
- width: 20px;
- height: 20px;
- margin: 0;
- overflow: hidden;
- line-height: 20px;
- text-align: center;
- text-indent: -76px;
- }
-
- .@{calendar-prefix-cls}-clear-btn::after {
- display: inline-block;
- width: 20px;
- color: @disabled-color;
- font-size: @font-size-base;
- line-height: 1;
- text-indent: 43px;
- transition: color 0.3s ease;
- }
-
- .@{calendar-prefix-cls}-clear-btn:hover::after {
- color: @text-color-secondary;
- }
-
- .@{calendar-prefix-cls}-ok-btn {
- .btn();
- .btn-primary();
- .button-size(@btn-height-sm; @btn-padding-horizontal-sm; @font-size-base; @border-radius-base);
-
- line-height: @btn-height-sm - 2px;
-
- .button-disabled();
- }
-}
diff --git a/components/date-picker/style/DecadePanel.less b/components/date-picker/style/DecadePanel.less
deleted file mode 100644
index b444b8597..000000000
--- a/components/date-picker/style/DecadePanel.less
+++ /dev/null
@@ -1,81 +0,0 @@
-.@{calendar-prefix-cls}-decade-panel {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: @zindex-picker-panel;
- display: flex;
- flex-direction: column;
- background: @component-background;
- border-radius: @border-radius-base;
- outline: none;
-}
-
-.@{calendar-prefix-cls}-decade-panel-hidden {
- display: none;
-}
-
-.@{calendar-prefix-cls}-decade-panel-header {
- .calendarPanelHeader(~'@{calendar-prefix-cls}-decade-panel');
- position: relative;
-}
-
-.@{calendar-prefix-cls}-decade-panel-body {
- flex: 1;
-}
-
-.@{calendar-prefix-cls}-decade-panel-footer {
- border-top: @border-width-base @border-style-base @border-color-split;
- .@{calendar-prefix-cls}-footer-extra {
- padding: 0 12px;
- }
-}
-
-.@{calendar-prefix-cls}-decade-panel-table {
- width: 100%;
- height: 100%;
- table-layout: fixed;
- border-collapse: separate;
-}
-
-.@{calendar-prefix-cls}-decade-panel-cell {
- white-space: nowrap;
- text-align: center;
-}
-
-.@{calendar-prefix-cls}-decade-panel-decade {
- display: inline-block;
- height: 24px;
- margin: 0 auto;
- padding: 0 6px;
- color: @text-color;
- line-height: 24px;
- text-align: center;
- background: transparent;
- border-radius: @border-radius-sm;
- transition: background 0.3s ease;
-
- &:hover {
- background: @item-hover-bg;
- cursor: pointer;
- }
-}
-
-.@{calendar-prefix-cls}-decade-panel-selected-cell .@{calendar-prefix-cls}-decade-panel-decade {
- color: @text-color-inverse;
- background: @primary-color;
-
- &:hover {
- color: @text-color-inverse;
- background: @primary-color;
- }
-}
-
-.@{calendar-prefix-cls}-decade-panel-last-century-cell,
-.@{calendar-prefix-cls}-decade-panel-next-century-cell {
- .@{calendar-prefix-cls}-decade-panel-decade {
- color: @disabled-color;
- user-select: none;
- }
-}
diff --git a/components/date-picker/style/MonthPanel.less b/components/date-picker/style/MonthPanel.less
deleted file mode 100644
index aa8b4ee23..000000000
--- a/components/date-picker/style/MonthPanel.less
+++ /dev/null
@@ -1,86 +0,0 @@
-.@{calendar-prefix-cls}-month-panel {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: @zindex-picker-panel;
- background: @component-background;
- border-radius: @border-radius-base;
- outline: none;
-
- > div {
- display: flex;
- flex-direction: column;
- // TODO: this is a useless wrapper, and we need to remove it in rc-calendar
- height: 100%;
- }
-}
-
-.@{calendar-prefix-cls}-month-panel-hidden {
- display: none;
-}
-
-.@{calendar-prefix-cls}-month-panel-header {
- .calendarPanelHeader(~'@{calendar-prefix-cls}-month-panel');
- position: relative;
-}
-
-.@{calendar-prefix-cls}-month-panel-body {
- flex: 1;
-}
-
-.@{calendar-prefix-cls}-month-panel-footer {
- border-top: @border-width-base @border-style-base @border-color-split;
- .@{calendar-prefix-cls}-footer-extra {
- padding: 0 12px;
- }
-}
-
-.@{calendar-prefix-cls}-month-panel-table {
- width: 100%;
- height: 100%;
- table-layout: fixed;
- border-collapse: separate;
-}
-
-.@{calendar-prefix-cls}-month-panel-selected-cell .@{calendar-prefix-cls}-month-panel-month {
- color: @text-color-inverse;
- background: @primary-color;
-
- &:hover {
- color: @text-color-inverse;
- background: @primary-color;
- }
-}
-
-.@{calendar-prefix-cls}-month-panel-cell {
- text-align: center;
-
- &-disabled .@{calendar-prefix-cls}-month-panel-month {
- &,
- &:hover {
- color: @disabled-color;
- background: @disabled-bg;
- cursor: not-allowed;
- }
- }
-}
-
-.@{calendar-prefix-cls}-month-panel-month {
- display: inline-block;
- height: 24px;
- margin: 0 auto;
- padding: 0 8px;
- color: @text-color;
- line-height: 24px;
- text-align: center;
- background: transparent;
- border-radius: @border-radius-sm;
- transition: background 0.3s ease;
-
- &:hover {
- background: @item-hover-bg;
- cursor: pointer;
- }
-}
diff --git a/components/date-picker/style/MonthPicker.less b/components/date-picker/style/MonthPicker.less
deleted file mode 100644
index 27955fe37..000000000
--- a/components/date-picker/style/MonthPicker.less
+++ /dev/null
@@ -1,11 +0,0 @@
-.@{calendar-prefix-cls}-month {
- .@{calendar-prefix-cls}-month-header-wrap {
- position: relative;
- height: 288px;
- }
- .@{calendar-prefix-cls}-month-panel,
- .@{calendar-prefix-cls}-year-panel {
- top: 0;
- height: 100%;
- }
-}
diff --git a/components/date-picker/style/Picker.less b/components/date-picker/style/Picker.less
deleted file mode 100644
index 1d7e59373..000000000
--- a/components/date-picker/style/Picker.less
+++ /dev/null
@@ -1,113 +0,0 @@
-@import '../../button/style/mixin';
-
-.@{calendar-prefix-cls}-picker-container {
- .reset-component();
-
- position: absolute;
- z-index: @zindex-picker;
- font-family: @font-family;
-
- &.slide-up-enter.slide-up-enter-active&-placement-topLeft,
- &.slide-up-enter.slide-up-enter-active&-placement-topRight,
- &.slide-up-appear.slide-up-appear-active&-placement-topLeft,
- &.slide-up-appear.slide-up-appear-active&-placement-topRight {
- animation-name: antSlideDownIn;
- }
-
- &.slide-up-enter.slide-up-enter-active&-placement-bottomLeft,
- &.slide-up-enter.slide-up-enter-active&-placement-bottomRight,
- &.slide-up-appear.slide-up-appear-active&-placement-bottomLeft,
- &.slide-up-appear.slide-up-appear-active&-placement-bottomRight {
- animation-name: antSlideUpIn;
- }
-
- &.slide-up-leave.slide-up-leave-active&-placement-topLeft,
- &.slide-up-leave.slide-up-leave-active&-placement-topRight {
- animation-name: antSlideDownOut;
- }
-
- &.slide-up-leave.slide-up-leave-active&-placement-bottomLeft,
- &.slide-up-leave.slide-up-leave-active&-placement-bottomRight {
- animation-name: antSlideUpOut;
- }
-}
-
-.@{calendar-prefix-cls}-picker {
- .reset-component();
-
- position: relative;
- display: inline-block;
- outline: none;
- cursor: text;
- transition: opacity 0.3s;
-
- &-input {
- outline: none;
-
- &.@{ant-prefix}-input {
- line-height: @line-height-base;
- }
- }
-
- &-input.@{ant-prefix}-input-sm {
- padding-top: 0;
- padding-bottom: 0;
- }
-
- &:hover &-input:not(.@{ant-prefix}-input-disabled) {
- border-color: @input-hover-border-color;
- }
-
- &:focus &-input:not(.@{ant-prefix}-input-disabled) {
- .active();
- }
-
- &-clear,
- &-icon {
- position: absolute;
- top: 50%;
- right: @control-padding-horizontal;
- z-index: 1;
- width: 14px;
- height: 14px;
- margin-top: -7px;
- font-size: @font-size-sm;
- line-height: 14px;
- transition: all 0.3s;
- user-select: none;
- }
-
- &-clear {
- z-index: 2;
- color: @disabled-color;
- font-size: @font-size-base;
- background: @component-background;
- cursor: pointer;
- opacity: 0;
- pointer-events: none;
- &:hover {
- color: @text-color-secondary;
- }
- }
-
- &:hover &-clear {
- opacity: 1;
- pointer-events: auto;
- }
-
- &-icon {
- display: inline-block;
- color: @disabled-color;
- font-size: @font-size-base;
- line-height: 1;
- }
-
- .@{ant-prefix}-input-disabled + &-icon {
- cursor: not-allowed;
- }
-
- &-small &-clear,
- &-small &-icon {
- right: @control-padding-horizontal-sm;
- }
-}
diff --git a/components/date-picker/style/RangePicker.less b/components/date-picker/style/RangePicker.less
deleted file mode 100644
index 4e1d30d9f..000000000
--- a/components/date-picker/style/RangePicker.less
+++ /dev/null
@@ -1,251 +0,0 @@
-@input-box-height: 34px;
-
-.@{calendar-prefix-cls}-range-picker-input {
- width: 44%;
- height: 99%;
- text-align: center;
- background-color: transparent;
- border: 0;
- outline: 0;
- .placeholder();
-
- &[disabled] {
- cursor: not-allowed;
- }
-}
-
-.@{calendar-prefix-cls}-range-picker-separator {
- display: inline-block;
- min-width: 10px;
- height: 100%;
- color: @text-color-secondary;
- white-space: nowrap;
- text-align: center;
- vertical-align: top;
- pointer-events: none;
- .@{ant-prefix}-input-disabled & {
- color: @disabled-color;
- }
-}
-
-.@{calendar-prefix-cls}-range {
- width: 552px;
- overflow: hidden;
-
- .@{calendar-prefix-cls}-date-panel {
- &::after {
- display: block;
- clear: both;
- height: 0;
- visibility: hidden;
- content: '.';
- }
- }
- &-part {
- position: relative;
- width: 50%;
- }
-
- &-left {
- float: left;
- .@{calendar-prefix-cls} {
- &-time-picker-inner {
- border-right: 1px solid @border-color-split;
- }
- }
- }
-
- &-right {
- float: right;
- .@{calendar-prefix-cls} {
- &-time-picker-inner {
- border-left: 1px solid @border-color-split;
- }
- }
- }
-
- &-middle {
- position: absolute;
- left: 50%;
- z-index: 1;
- height: @input-box-height;
- margin: 1px 0 0 0;
- padding: 0 200px 0 0;
- color: @text-color-secondary;
- line-height: @input-box-height;
- text-align: center;
- transform: translateX(-50%);
- pointer-events: none;
- }
-
- &-right .@{calendar-prefix-cls}-date-input-wrap {
- margin-left: -90px;
- }
-
- &.@{calendar-prefix-cls}-time &-middle {
- padding: 0 10px 0 0;
- transform: translateX(-50%);
- }
-
- .@{calendar-prefix-cls}-today
- :not(.@{calendar-prefix-cls}-disabled-cell)
- :not(.@{calendar-prefix-cls}-last-month-cell)
- :not(.@{calendar-prefix-cls}-next-month-btn-day) {
- .@{calendar-prefix-cls}-date {
- color: @primary-color;
- background: @primary-2;
- border-color: @primary-color;
- }
- }
-
- .@{calendar-prefix-cls}-selected-start-date,
- .@{calendar-prefix-cls}-selected-end-date {
- .calendar-selected-cell();
- }
-
- &.@{calendar-prefix-cls}-time &-right .@{calendar-prefix-cls}-date-input-wrap {
- margin-left: 0;
- }
-
- .@{calendar-prefix-cls}-input-wrap {
- position: relative;
- height: @input-box-height;
- }
-
- .@{calendar-prefix-cls}-input,
- .@{calendar-timepicker-prefix-cls}-input {
- .input();
- height: @input-height-sm;
- padding-right: 0;
- padding-left: 0;
- line-height: @input-height-sm;
- border: 0;
- box-shadow: none;
-
- &:focus {
- box-shadow: none;
- }
- }
-
- .@{calendar-timepicker-prefix-cls}-icon {
- display: none;
- }
-
- &.@{calendar-prefix-cls}-week-number {
- width: 574px;
-
- .@{calendar-prefix-cls}-range-part {
- width: 286px;
- }
- }
-
- .@{calendar-prefix-cls}-year-panel,
- .@{calendar-prefix-cls}-month-panel,
- .@{calendar-prefix-cls}-decade-panel {
- top: @input-box-height;
- }
- .@{calendar-prefix-cls}-month-panel .@{calendar-prefix-cls}-year-panel {
- top: 0;
- }
- .@{calendar-prefix-cls}-decade-panel-table,
- .@{calendar-prefix-cls}-year-panel-table,
- .@{calendar-prefix-cls}-month-panel-table {
- height: 208px;
- }
-
- .@{calendar-prefix-cls}-in-range-cell {
- position: relative;
- border-radius: 0;
- > div {
- position: relative;
- z-index: 1;
- }
- &::before {
- position: absolute;
- top: 4px;
- right: 0;
- bottom: 4px;
- left: 0;
- display: block;
- background: @item-active-bg;
- border: 0;
- border-radius: 0;
- content: '';
- }
- }
-
- .@{calendar-prefix-cls}-footer-extra {
- float: left;
- }
-
- // `div` for selector specificity
- div&-quick-selector {
- text-align: left;
-
- > a {
- margin-right: 8px;
- }
- }
-
- .@{calendar-prefix-cls},
- .@{calendar-prefix-cls}-month-panel,
- .@{calendar-prefix-cls}-year-panel,
- .@{calendar-prefix-cls}-decade-panel {
- &-header {
- border-bottom: 0;
- }
- &-body {
- border-top: @border-width-base @border-style-base @border-color-split;
- }
- }
-
- &.@{calendar-prefix-cls}-time {
- .@{calendar-timepicker-prefix-cls} {
- top: 68px;
- z-index: 2; // cover .ant-calendar-range .ant-calendar-in-range-cell > div (z-index: 1)
- width: 100%;
- height: 207px;
- &-panel {
- height: 267px;
- margin-top: -34px;
- }
-
- &-inner {
- height: 100%;
- padding-top: 40px;
- background: none;
- }
-
- &-combobox {
- display: inline-block;
- height: 100%;
- background-color: @component-background;
- border-top: @border-width-base @border-style-base @border-color-split;
- }
- &-select {
- height: 100%;
- ul {
- max-height: 100%;
- }
- }
- }
- .@{calendar-prefix-cls}-footer .@{calendar-prefix-cls}-time-picker-btn {
- margin-right: 8px;
- }
- .@{calendar-prefix-cls}-today-btn {
- height: 22px;
- margin: 8px 12px;
- line-height: 22px;
- }
- }
-
- &-with-ranges.@{calendar-prefix-cls}-time .@{calendar-timepicker-prefix-cls} {
- height: 233px;
- }
-}
-
-.@{calendar-prefix-cls}-range.@{calendar-prefix-cls}-show-time-picker {
- .@{calendar-prefix-cls}-body {
- border-top-color: transparent;
- }
-}
diff --git a/components/date-picker/style/TimePicker.less b/components/date-picker/style/TimePicker.less
deleted file mode 100644
index 0c6f57e77..000000000
--- a/components/date-picker/style/TimePicker.less
+++ /dev/null
@@ -1,151 +0,0 @@
-.@{calendar-timepicker-prefix-cls} {
- position: absolute;
- top: 40px;
- width: 100%;
- background-color: @component-background;
-
- &-panel {
- position: absolute;
- z-index: @zindex-picker;
- width: 100%;
- }
-
- &-inner {
- position: relative;
- display: inline-block;
- width: 100%;
- overflow: hidden;
- font-size: @font-size-base;
- line-height: 1.5;
- text-align: left;
- list-style: none;
- background-color: @component-background;
- background-clip: padding-box;
- outline: none;
- }
- &-combobox {
- width: 100%;
- }
-
- &-column-1,
- &-column-1 &-select {
- width: 100%;
- }
- &-column-2 &-select {
- width: 50%;
- }
- &-column-3 &-select {
- width: 33.33%;
- }
- &-column-4 &-select {
- width: 25%;
- }
-
- &-input-wrap {
- display: none;
- }
-
- &-select {
- position: relative; // Fix chrome weird render bug
- float: left;
- height: 226px;
- overflow: hidden;
- font-size: @font-size-base;
- border-right: @border-width-base @border-style-base @border-color-split;
-
- &:hover {
- overflow-y: auto;
- }
-
- &:first-child {
- margin-left: 0;
- border-left: 0;
- }
-
- &:last-child {
- border-right: 0;
- }
-
- ul {
- width: 100%;
- max-height: 206px;
- margin: 0;
- padding: 0;
- list-style: none;
- }
-
- li {
- width: 100%;
- height: 24px;
- margin: 0;
- line-height: 24px;
- text-align: center;
- list-style: none;
- cursor: pointer;
- transition: all 0.3s;
- user-select: none;
-
- &:last-child::after {
- display: block;
- height: 202px;
- content: '';
- }
-
- &:hover {
- background: @item-hover-bg;
- }
-
- &:focus {
- color: @primary-color;
- font-weight: 600;
- outline: none;
- }
- }
-
- li&-option-selected {
- font-weight: 600;
- background: @time-picker-selected-bg;
- }
-
- li&-option-disabled {
- color: @btn-disable-color;
- &:hover {
- background: transparent;
- cursor: not-allowed;
- }
- }
- }
-}
-
-.@{calendar-prefix-cls}-time {
- .@{calendar-prefix-cls}-day-select {
- display: inline-block;
- padding: 0 2px;
- color: @heading-color;
- font-weight: 500;
- line-height: 34px;
- }
-
- .@{calendar-prefix-cls}-footer {
- position: relative;
- height: auto;
-
- &-btn {
- text-align: right;
- }
-
- .@{calendar-prefix-cls}-today-btn {
- float: left;
- margin: 0;
- }
-
- .@{calendar-prefix-cls}-time-picker-btn {
- display: inline-block;
- margin-right: 8px;
-
- &-disabled {
- color: @disabled-color;
- }
- }
- }
-}
diff --git a/components/date-picker/style/WeekPicker.less b/components/date-picker/style/WeekPicker.less
deleted file mode 100644
index 8b592d7b0..000000000
--- a/components/date-picker/style/WeekPicker.less
+++ /dev/null
@@ -1,21 +0,0 @@
-.@{calendar-prefix-cls}-week-number {
- &-cell {
- opacity: 0.5;
- }
- .@{calendar-prefix-cls}-body tr {
- cursor: pointer;
- transition: all 0.3s;
- &:hover {
- background: @primary-1;
- }
- &.@{calendar-prefix-cls}-active-week {
- font-weight: bold;
- background: @primary-2;
- }
- .@{calendar-prefix-cls}-selected-day .@{calendar-prefix-cls}-date,
- .@{calendar-prefix-cls}-selected-day:hover .@{calendar-prefix-cls}-date {
- color: @text-color;
- background: transparent;
- }
- }
-}
diff --git a/components/date-picker/style/YearPanel.less b/components/date-picker/style/YearPanel.less
deleted file mode 100644
index b9efca73c..000000000
--- a/components/date-picker/style/YearPanel.less
+++ /dev/null
@@ -1,85 +0,0 @@
-.@{calendar-prefix-cls}-year-panel {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: @zindex-picker-panel;
- background: @component-background;
- border-radius: @border-radius-base;
- outline: none;
-
- > div {
- display: flex;
- flex-direction: column;
- // TODO: this is a useless wrapper, and we need to remove it in rc-calendar
- height: 100%;
- }
-}
-
-.@{calendar-prefix-cls}-year-panel-hidden {
- display: none;
-}
-
-.@{calendar-prefix-cls}-year-panel-header {
- .calendarPanelHeader(~'@{calendar-prefix-cls}-year-panel');
- position: relative;
-}
-
-.@{calendar-prefix-cls}-year-panel-body {
- flex: 1;
-}
-
-.@{calendar-prefix-cls}-year-panel-footer {
- border-top: @border-width-base @border-style-base @border-color-split;
- .@{calendar-prefix-cls}-footer-extra {
- padding: 0 12px;
- }
-}
-
-.@{calendar-prefix-cls}-year-panel-table {
- width: 100%;
- height: 100%;
- table-layout: fixed;
- border-collapse: separate;
-}
-
-.@{calendar-prefix-cls}-year-panel-cell {
- text-align: center;
-}
-
-.@{calendar-prefix-cls}-year-panel-year {
- display: inline-block;
- height: 24px;
- margin: 0 auto;
- padding: 0 8px;
- color: @text-color;
- line-height: 24px;
- text-align: center;
- background: transparent;
- border-radius: @border-radius-sm;
- transition: background 0.3s ease;
-
- &:hover {
- background: @item-hover-bg;
- cursor: pointer;
- }
-}
-
-.@{calendar-prefix-cls}-year-panel-selected-cell .@{calendar-prefix-cls}-year-panel-year {
- color: @text-color-inverse;
- background: @primary-color;
-
- &:hover {
- color: @text-color-inverse;
- background: @primary-color;
- }
-}
-
-.@{calendar-prefix-cls}-year-panel-last-decade-cell,
-.@{calendar-prefix-cls}-year-panel-next-decade-cell {
- .@{calendar-prefix-cls}-year-panel-year {
- color: @disabled-color;
- user-select: none;
- }
-}
diff --git a/components/date-picker/style/index.less b/components/date-picker/style/index.less
index 14eedcced..b707b9bd0 100644
--- a/components/date-picker/style/index.less
+++ b/components/date-picker/style/index.less
@@ -1,17 +1,357 @@
@import '../../style/themes/index';
@import '../../style/mixins/index';
@import '../../input/style/mixin';
-@import '../../button/style/mixin';
-@calendar-prefix-cls: ~'@{ant-prefix}-calendar';
-@calendar-timepicker-prefix-cls: ~'@{ant-prefix}-calendar-time-picker';
+@picker-prefix-cls: ~'@{ant-prefix}-picker';
-@import 'Picker';
-@import 'Calendar';
-@import 'RangePicker';
-@import 'TimePicker';
-@import 'MonthPanel';
-@import 'YearPanel';
-@import 'DecadePanel';
-@import 'MonthPicker';
-@import 'WeekPicker';
+.picker-padding(@input-height, @font-size, @padding-horizontal) {
+ // font height probably 22.0001, So use floor better
+ @font-height: floor(@font-size * @line-height-base) + 2;
+ @padding-top: max(((@input-height - @font-height) / 2), 0);
+ @padding-bottom: max(@input-height - @font-height - @padding-top, 0);
+ padding: @padding-top @padding-horizontal @padding-bottom;
+}
+
+.@{picker-prefix-cls} {
+ @arrow-size: 10px;
+
+ .reset-component();
+ .picker-padding(@input-height-base, @font-size-base, @input-padding-horizontal-base);
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ background: @picker-bg;
+ border: @border-width-base @border-style-base @select-border-color;
+ border-radius: @border-radius-base;
+ transition: border @animation-duration-slow, box-shadow @animation-duration-slow;
+
+ &:hover,
+ &-focused {
+ .hover();
+ }
+
+ &-focused {
+ .active();
+ }
+
+ &&-disabled {
+ background: @input-disabled-bg;
+ border-color: @select-border-color;
+ cursor: not-allowed;
+ }
+
+ &&-disabled &-suffix {
+ color: @disabled-color;
+ }
+
+ &&-borderless {
+ background-color: transparent !important;
+ border-color: transparent !important;
+ box-shadow: none !important;
+ }
+
+ // ======================== Input =========================
+ &-input {
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ width: 100%;
+
+ > input {
+ .input();
+ flex: auto;
+
+ // Fix Firefox flex not correct:
+ // https://github.com/ant-design/ant-design/pull/20023#issuecomment-564389553
+ min-width: 1px;
+ height: auto;
+ padding: 0;
+ background: transparent;
+
+ border: 0;
+
+ &:focus {
+ box-shadow: none;
+ }
+
+ &[disabled] {
+ background: transparent;
+ }
+ }
+
+ &:hover {
+ .@{picker-prefix-cls}-clear {
+ opacity: 1;
+ }
+ }
+
+ &-placeholder {
+ > input {
+ color: @input-placeholder-color;
+ }
+ }
+ }
+
+ // Size
+ &-large {
+ .picker-padding(@input-height-lg, @font-size-lg, @input-padding-horizontal-lg);
+
+ .@{picker-prefix-cls}-input > input {
+ font-size: @font-size-lg;
+ }
+ }
+
+ &-small {
+ .picker-padding(@input-height-sm, @font-size-base, @input-padding-horizontal-sm);
+ }
+
+ &-suffix {
+ align-self: center;
+ margin-left: (@padding-xs / 2);
+ color: @disabled-color;
+ line-height: 1;
+ pointer-events: none;
+
+ > * {
+ vertical-align: top;
+ }
+ }
+
+ &-clear {
+ position: absolute;
+ top: 50%;
+ right: 0;
+ color: @disabled-color;
+ line-height: 1;
+ background: @component-background;
+ transform: translateY(-50%);
+ cursor: pointer;
+ opacity: 0;
+ transition: opacity @animation-duration-slow, color @animation-duration-slow;
+
+ > * {
+ vertical-align: top;
+ }
+
+ &:hover {
+ color: @text-color-secondary;
+ }
+ }
+
+ &-separator {
+ position: relative;
+ display: inline-block;
+ width: 1em;
+ height: @font-size-lg;
+ color: @disabled-color;
+ font-size: @font-size-lg;
+ vertical-align: top;
+ cursor: default;
+
+ .@{picker-prefix-cls}-focused & {
+ color: @text-color-secondary;
+ }
+
+ .@{picker-prefix-cls}-range-separator & {
+ .@{picker-prefix-cls}-disabled & {
+ cursor: not-allowed;
+ }
+ }
+ }
+
+ // ======================== Range =========================
+ &-range {
+ position: relative;
+ display: inline-flex;
+
+ // Clear
+ .@{picker-prefix-cls}-clear {
+ right: @input-padding-horizontal-base;
+ }
+
+ &:hover {
+ .@{picker-prefix-cls}-clear {
+ opacity: 1;
+ }
+ }
+
+ // Active bar
+ .@{picker-prefix-cls}-active-bar {
+ bottom: -@border-width-base;
+ height: 2px;
+ margin-left: @input-padding-horizontal-base;
+ background: @primary-color;
+ opacity: 0;
+ transition: all @animation-duration-slow ease-out;
+ pointer-events: none;
+ }
+
+ &.@{picker-prefix-cls}-focused {
+ .@{picker-prefix-cls}-active-bar {
+ opacity: 1;
+ }
+ }
+
+ &-separator {
+ align-items: center;
+ padding: 0 @padding-xs;
+ line-height: 1;
+ }
+
+ &.@{picker-prefix-cls}-small {
+ .@{picker-prefix-cls}-clear {
+ right: @input-padding-horizontal-sm;
+ }
+
+ .@{picker-prefix-cls}-active-bar {
+ margin-left: @input-padding-horizontal-sm;
+ }
+ }
+ }
+
+ // ======================= Dropdown =======================
+ &-dropdown {
+ .reset-component();
+ position: absolute;
+ z-index: @zindex-picker;
+
+ &-hidden {
+ display: none;
+ }
+
+ &-placement-bottomLeft {
+ .@{picker-prefix-cls}-range-arrow {
+ top: (@arrow-size / 2) - (@arrow-size / 3);
+ display: block;
+ transform: rotate(-45deg);
+ }
+ }
+
+ &-placement-topLeft {
+ .@{picker-prefix-cls}-range-arrow {
+ bottom: (@arrow-size / 2) - (@arrow-size / 3);
+ display: block;
+ transform: rotate(135deg);
+ }
+ }
+
+ &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-topLeft,
+ &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-topRight,
+ &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-topLeft,
+ &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-topRight {
+ animation-name: antSlideDownIn;
+ }
+
+ &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-bottomLeft,
+ &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-bottomRight,
+ &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-bottomLeft,
+ &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-bottomRight {
+ animation-name: antSlideUpIn;
+ }
+
+ &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-topLeft,
+ &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-topRight {
+ animation-name: antSlideDownOut;
+ }
+
+ &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-bottomLeft,
+ &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-bottomRight {
+ animation-name: antSlideUpOut;
+ }
+ }
+
+ &-dropdown-range {
+ padding: (@arrow-size * 2 / 3) 0;
+
+ &-hidden {
+ display: none;
+ }
+ }
+
+ // Time picker with additional style
+ &-dropdown &-panel > &-time-panel {
+ padding-top: (@padding-xs / 2);
+ }
+
+ // ======================== Ranges ========================
+ &-ranges {
+ margin-bottom: 0;
+ padding: (@padding-xs / 2) @padding-sm;
+ overflow: hidden;
+ line-height: @picker-text-height - 2 * @border-width-base - (@padding-xs / 2);
+ text-align: left;
+ list-style: none;
+
+ > li {
+ display: inline-block;
+ }
+
+ // https://github.com/ant-design/ant-design/issues/23687
+ .@{picker-prefix-cls}-preset > .@{ant-prefix}-tag-blue {
+ color: @primary-color;
+ background: @primary-1;
+ border-color: @primary-3;
+ cursor: pointer;
+ }
+
+ .@{picker-prefix-cls}-ok {
+ float: right;
+ margin-left: @padding-xs;
+ }
+ }
+
+ &-range-wrapper {
+ display: flex;
+ }
+
+ &-range-arrow {
+ position: absolute;
+ z-index: 1;
+ display: none;
+ width: @arrow-size;
+ height: @arrow-size;
+ margin-left: @input-padding-horizontal-base * 1.5;
+ box-shadow: 2px -2px 6px fade(@black, 6%);
+ transition: left @animation-duration-slow ease-out;
+
+ &::after {
+ position: absolute;
+ top: @border-width-base;
+ right: @border-width-base;
+ width: @arrow-size;
+ height: @arrow-size;
+ border: (@arrow-size / 2) solid @border-color-split;
+ border-color: @calendar-bg @calendar-bg transparent transparent;
+ content: '';
+ }
+ }
+
+ &-panel-container {
+ overflow: hidden;
+ vertical-align: top;
+ background: @calendar-bg;
+ border-radius: @border-radius-base;
+ box-shadow: @box-shadow-base;
+ transition: margin @animation-duration-slow;
+
+ .@{picker-prefix-cls}-panels {
+ display: inline-flex;
+ flex-wrap: nowrap;
+ direction: ltr;
+ }
+
+ .@{picker-prefix-cls}-panel {
+ vertical-align: top;
+ background: transparent;
+ border-width: 0 0 @border-width-base 0;
+ border-radius: 0;
+
+ &-focused {
+ border-color: @border-color-split;
+ }
+ }
+ }
+}
+
+@import './panel';
+@import './rtl';
diff --git a/components/date-picker/style/index.ts b/components/date-picker/style/index.ts
deleted file mode 100644
index f27ae9b25..000000000
--- a/components/date-picker/style/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import '../../style/index.less';
-import './index.less';
-
-// style dependencies
-// deps-lint-skip: input
-import '../../input/style';
-import '../../time-picker/style';
-import '../../tag/style';
diff --git a/components/date-picker/style/index.tsx b/components/date-picker/style/index.tsx
new file mode 100644
index 000000000..cc4424295
--- /dev/null
+++ b/components/date-picker/style/index.tsx
@@ -0,0 +1,5 @@
+import './index.less';
+
+// style dependencies
+import '../../tag/style';
+import '../../button/style';
diff --git a/components/date-picker/style/panel.less b/components/date-picker/style/panel.less
new file mode 100644
index 000000000..b8bd76fc3
--- /dev/null
+++ b/components/date-picker/style/panel.less
@@ -0,0 +1,681 @@
+@picker-cell-inner-cls: ~'@{picker-prefix-cls}-cell-inner';
+
+.@{picker-prefix-cls} {
+ @picker-arrow-size: 7px;
+ @picker-year-month-cell-width: 60px;
+ @picker-panel-width: @picker-panel-cell-width * 7 + @padding-sm * 2 + 4;
+
+ &-panel {
+ display: inline-flex;
+ flex-direction: column;
+ text-align: center;
+ background: @calendar-bg;
+ border: @border-width-base @border-style-base @picker-border-color;
+ border-radius: @border-radius-base;
+ outline: none;
+
+ &-focused {
+ border-color: @primary-color;
+ }
+ }
+
+ // ========================================================
+ // = Shared Panel =
+ // ========================================================
+ &-decade-panel,
+ &-year-panel,
+ &-quarter-panel,
+ &-month-panel,
+ &-week-panel,
+ &-date-panel,
+ &-time-panel {
+ display: flex;
+ flex-direction: column;
+ width: @picker-panel-width;
+ }
+
+ // ======================= Header =======================
+ &-header {
+ display: flex;
+ padding: 0 @padding-xs;
+ color: @heading-color;
+ border-bottom: @border-width-base @border-style-base @picker-border-color;
+
+ > * {
+ flex: none;
+ }
+
+ button {
+ padding: 0;
+ color: @disabled-color;
+ line-height: @picker-text-height;
+ background: transparent;
+ border: 0;
+ cursor: pointer;
+ transition: color @animation-duration-slow;
+ }
+
+ > button {
+ min-width: 1.6em;
+ font-size: @font-size-base;
+
+ &:hover {
+ color: @text-color;
+ }
+ }
+
+ &-view {
+ flex: auto;
+ font-weight: 500;
+ line-height: @picker-text-height;
+
+ button {
+ color: inherit;
+ font-weight: inherit;
+
+ &:not(:first-child) {
+ margin-left: @padding-xs;
+ }
+
+ &:hover {
+ color: @primary-color;
+ }
+ }
+ }
+ }
+
+ // Arrow button
+ &-prev-icon,
+ &-next-icon,
+ &-super-prev-icon,
+ &-super-next-icon {
+ position: relative;
+ display: inline-block;
+ width: @picker-arrow-size;
+ height: @picker-arrow-size;
+
+ &::before {
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: inline-block;
+ width: @picker-arrow-size;
+ height: @picker-arrow-size;
+ border: 0 solid currentColor;
+ border-width: 1.5px 0 0 1.5px;
+ content: '';
+ }
+ }
+
+ &-super-prev-icon,
+ &-super-next-icon {
+ &::after {
+ position: absolute;
+ top: ceil((@picker-arrow-size / 2));
+ left: ceil((@picker-arrow-size / 2));
+ display: inline-block;
+ width: @picker-arrow-size;
+ height: @picker-arrow-size;
+ border: 0 solid currentColor;
+ border-width: 1.5px 0 0 1.5px;
+ content: '';
+ }
+ }
+
+ &-prev-icon,
+ &-super-prev-icon {
+ transform: rotate(-45deg);
+ }
+
+ &-next-icon,
+ &-super-next-icon {
+ transform: rotate(135deg);
+ }
+
+ // ======================== Body ========================
+ &-content {
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: collapse;
+
+ th,
+ td {
+ position: relative;
+ min-width: 24px;
+ font-weight: 400;
+ }
+
+ th {
+ height: 30px;
+ color: @text-color;
+ line-height: 30px;
+ }
+ }
+
+ .picker-cell-inner(@cellClassName) {
+ &::before {
+ position: absolute;
+ top: 50%;
+ right: 0;
+ left: 0;
+ z-index: 1;
+ height: @picker-panel-cell-height;
+ transform: translateY(-50%);
+ content: '';
+ }
+
+ // >>> Default
+ .@{cellClassName} {
+ position: relative;
+ z-index: 2;
+ display: inline-block;
+ min-width: @picker-panel-cell-height;
+ height: @picker-panel-cell-height;
+ line-height: @picker-panel-cell-height;
+ border-radius: @border-radius-base;
+ transition: background @animation-duration-slow, border @animation-duration-slow;
+ }
+
+ // >>> Hover
+ &:hover:not(&-in-view),
+ &:hover:not(&-selected):not(&-range-start):not(&-range-end):not(&-range-hover-start):not(&-range-hover-end) {
+ .@{cellClassName} {
+ background: @picker-basic-cell-hover-color;
+ }
+ }
+
+ // >>> Today
+ &-in-view&-today .@{cellClassName} {
+ &::before {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1;
+ border: @border-width-base @border-style-base @primary-color;
+ border-radius: @border-radius-base;
+ content: '';
+ }
+ }
+
+ // >>> In Range
+ &-in-view&-in-range {
+ position: relative;
+
+ &::before {
+ background: @picker-basic-cell-active-with-range-color;
+ }
+ }
+
+ // >>> Selected
+ &-in-view&-selected .@{cellClassName},
+ &-in-view&-range-start .@{cellClassName},
+ &-in-view&-range-end .@{cellClassName} {
+ color: @text-color-inverse;
+ background: @primary-color;
+ }
+
+ &-in-view&-range-start:not(&-range-start-single),
+ &-in-view&-range-end:not(&-range-end-single) {
+ &::before {
+ background: @picker-basic-cell-active-with-range-color;
+ }
+ }
+
+ &-in-view&-range-start::before {
+ left: 50%;
+ }
+
+ &-in-view&-range-end::before {
+ right: 50%;
+ }
+
+ // >>> Range Hover
+ &-in-view&-range-hover-start:not(&-in-range):not(&-range-start):not(&-range-end),
+ &-in-view&-range-hover-end:not(&-in-range):not(&-range-start):not(&-range-end),
+ &-in-view&-range-hover-start&-range-start-single,
+ &-in-view&-range-hover-start&-range-start&-range-end&-range-end-near-hover,
+ &-in-view&-range-hover-end&-range-start&-range-end&-range-start-near-hover,
+ &-in-view&-range-hover-end&-range-end-single,
+ &-in-view&-range-hover:not(&-in-range) {
+ &::after {
+ position: absolute;
+ top: 50%;
+ z-index: 0;
+ height: 24px;
+ border-top: @border-width-base dashed @picker-date-hover-range-border-color;
+ border-bottom: @border-width-base dashed @picker-date-hover-range-border-color;
+ transform: translateY(-50%);
+ content: '';
+ }
+ }
+
+ // Add space for stash
+ &-range-hover-start::after,
+ &-range-hover-end::after,
+ &-range-hover::after {
+ right: 0;
+ left: 2px;
+ }
+
+ // Hover with in range
+ &-in-view&-in-range&-range-hover::before,
+ &-in-view&-range-start&-range-hover::before,
+ &-in-view&-range-end&-range-hover::before,
+ &-in-view&-range-start:not(&-range-start-single)&-range-hover-start::before,
+ &-in-view&-range-end:not(&-range-end-single)&-range-hover-end::before,
+ .@{picker-prefix-cls}-panel
+ > :not(.@{picker-prefix-cls}-date-panel)
+ &-in-view&-in-range&-range-hover-start::before,
+ .@{picker-prefix-cls}-panel
+ > :not(.@{picker-prefix-cls}-date-panel)
+ &-in-view&-in-range&-range-hover-end::before {
+ background: @picker-date-hover-range-color;
+ }
+
+ // range start border-radius
+ &-in-view&-range-start:not(&-range-start-single):not(&-range-end) .@{cellClassName} {
+ border-radius: @border-radius-base 0 0 @border-radius-base;
+ }
+ // range end border-radius
+ &-in-view&-range-end:not(&-range-end-single):not(&-range-start) .@{cellClassName} {
+ border-radius: 0 @border-radius-base @border-radius-base 0;
+ }
+
+ // DatePanel only
+ .@{picker-prefix-cls}-date-panel &-in-view&-in-range&-range-hover-start .@{cellClassName},
+ .@{picker-prefix-cls}-date-panel &-in-view&-in-range&-range-hover-end .@{cellClassName} {
+ &::after {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ z-index: -1;
+ background: @picker-date-hover-range-color;
+ content: '';
+ }
+ }
+ .@{picker-prefix-cls}-date-panel
+ &-in-view&-in-range&-range-hover-start
+ .@{cellClassName}::after {
+ right: -5px - @border-width-base;
+ left: 0;
+ }
+ .@{picker-prefix-cls}-date-panel &-in-view&-in-range&-range-hover-end .@{cellClassName}::after {
+ right: 0;
+ left: -5px - @border-width-base;
+ }
+
+ // Hover with range start & end
+ &-range-hover&-range-start::after {
+ right: 50%;
+ }
+ &-range-hover&-range-end::after {
+ left: 50%;
+ }
+
+ // Edge start
+ tr > &-in-view&-range-hover:first-child::after,
+ tr > &-in-view&-range-hover-end:first-child::after,
+ &-in-view&-start&-range-hover-edge-start&-range-hover-edge-start-near-range::after,
+ &-in-view&-range-hover-edge-start:not(&-range-hover-edge-start-near-range)::after,
+ &-in-view&-range-hover-start::after {
+ left: 6px;
+ border-left: @border-width-base dashed @picker-date-hover-range-border-color;
+ border-top-left-radius: @border-radius-base;
+ border-bottom-left-radius: @border-radius-base;
+ }
+
+ // Edge end
+ tr > &-in-view&-range-hover:last-child::after,
+ tr > &-in-view&-range-hover-start:last-child::after,
+ &-in-view&-end&-range-hover-edge-end&-range-hover-edge-end-near-range::after,
+ &-in-view&-range-hover-edge-end:not(&-range-hover-edge-end-near-range)::after,
+ &-in-view&-range-hover-end::after {
+ right: 6px;
+ border-right: @border-width-base dashed @picker-date-hover-range-border-color;
+ border-top-right-radius: @border-radius-base;
+ border-bottom-right-radius: @border-radius-base;
+ }
+
+ // >>> Disabled
+ &-disabled {
+ pointer-events: none;
+
+ .@{cellClassName} {
+ color: @disabled-color;
+ background: transparent;
+ }
+
+ &::before {
+ background: @picker-basic-cell-disabled-bg;
+ }
+ }
+ &-disabled&-today .@{cellClassName}::before {
+ border-color: @disabled-color;
+ }
+ }
+
+ &-cell {
+ padding: 3px 0;
+ color: @disabled-color;
+ cursor: pointer;
+
+ // In view
+ &-in-view {
+ color: @text-color;
+ }
+
+ // Disabled
+ &-disabled {
+ cursor: not-allowed;
+ }
+
+ .picker-cell-inner(~'@{picker-cell-inner-cls}');
+ }
+
+ &-decade-panel,
+ &-year-panel,
+ &-quarter-panel,
+ &-month-panel {
+ .@{picker-prefix-cls}-content {
+ height: @picker-panel-without-time-cell-height * 4;
+ }
+
+ .@{picker-cell-inner-cls} {
+ padding: 0 @padding-xs;
+ }
+
+ .@{picker-prefix-cls}-cell {
+ &-disabled .@{picker-cell-inner-cls} {
+ background: @picker-basic-cell-disabled-bg;
+ }
+ }
+ }
+
+ &-quarter-panel {
+ .@{picker-prefix-cls}-content {
+ height: 56px;
+ }
+ }
+
+ // ======================== Footer ========================
+ &-footer {
+ width: min-content;
+ min-width: 100%;
+ line-height: @picker-text-height - 2 * @border-width-base;
+ text-align: center;
+ border-bottom: @border-width-base @border-style-base transparent;
+
+ .@{picker-prefix-cls}-panel & {
+ border-top: @border-width-base @border-style-base @picker-border-color;
+ }
+
+ &-extra {
+ padding: 0 @padding-sm;
+ line-height: @picker-text-height - 2 * @border-width-base;
+ text-align: left;
+
+ &:not(:last-child) {
+ border-bottom: @border-width-base @border-style-base @picker-border-color;
+ }
+ }
+ }
+
+ &-now {
+ text-align: left;
+ }
+
+ &-today-btn {
+ color: @link-color;
+
+ &:hover {
+ color: @link-hover-color;
+ }
+
+ &:active {
+ color: @link-active-color;
+ }
+
+ &&-disabled {
+ color: @disabled-color;
+ cursor: not-allowed;
+ }
+ }
+
+ // ========================================================
+ // = Special =
+ // ========================================================
+
+ // ===================== Decade Panel =====================
+ &-decade-panel {
+ .@{picker-cell-inner-cls} {
+ padding: 0 (@padding-xs / 2);
+ }
+
+ .@{picker-prefix-cls}-cell::before {
+ display: none;
+ }
+ }
+
+ // ============= Year & Quarter & Month Panel =============
+ &-year-panel,
+ &-quarter-panel,
+ &-month-panel {
+ @hover-cell-fixed-distance: (
+ (((@picker-panel-width - @padding-xs * 2) / 3) - @picker-year-month-cell-width) / 2
+ );
+
+ .@{picker-prefix-cls}-body {
+ padding: 0 @padding-xs;
+ }
+
+ .@{picker-cell-inner-cls} {
+ width: @picker-year-month-cell-width;
+ }
+
+ .@{picker-prefix-cls}-cell-range-hover-start::after {
+ left: @hover-cell-fixed-distance;
+ border-left: @border-width-base dashed @picker-date-hover-range-border-color;
+ border-radius: @border-radius-base 0 0 @border-radius-base;
+
+ .@{picker-prefix-cls}-panel-rtl & {
+ right: @hover-cell-fixed-distance;
+ border-right: @border-width-base dashed @picker-date-hover-range-border-color;
+ border-radius: 0 @border-radius-base @border-radius-base 0;
+ }
+ }
+ .@{picker-prefix-cls}-cell-range-hover-end::after {
+ right: @hover-cell-fixed-distance;
+ border-right: @border-width-base dashed @picker-date-hover-range-border-color;
+ border-radius: 0 @border-radius-base @border-radius-base 0;
+
+ .@{picker-prefix-cls}-panel-rtl & {
+ left: @hover-cell-fixed-distance;
+ border-left: @border-width-base dashed @picker-date-hover-range-border-color;
+ border-radius: @border-radius-base 0 0 @border-radius-base;
+ }
+ }
+ }
+
+ // ====================== Week Panel ======================
+ &-week-panel {
+ .@{picker-prefix-cls}-body {
+ padding: @padding-xs @padding-sm;
+ }
+
+ // Clear cell style
+ .@{picker-prefix-cls}-cell {
+ &:hover .@{picker-cell-inner-cls},
+ &-selected .@{picker-cell-inner-cls},
+ .@{picker-cell-inner-cls} {
+ background: transparent !important;
+ }
+ }
+
+ &-row {
+ td {
+ transition: background @animation-duration-slow;
+ }
+
+ &:hover td {
+ background: @picker-basic-cell-hover-color;
+ }
+
+ &-selected td,
+ &-selected:hover td {
+ background: @primary-color;
+
+ &.@{picker-prefix-cls}-cell-week {
+ color: fade(@text-color-inverse, 50%);
+ }
+
+ &.@{picker-prefix-cls}-cell-today .@{picker-cell-inner-cls}::before {
+ border-color: @text-color-inverse;
+ }
+
+ .@{picker-cell-inner-cls} {
+ color: @text-color-inverse;
+ }
+ }
+ }
+ }
+
+ // ====================== Date Panel ======================
+ &-date-panel {
+ .@{picker-prefix-cls}-body {
+ padding: @padding-xs @padding-sm;
+ }
+
+ .@{picker-prefix-cls}-content {
+ width: @picker-panel-cell-width * 7;
+
+ th {
+ width: @picker-panel-cell-width;
+ }
+ }
+ }
+
+ // ==================== Datetime Panel ====================
+ &-datetime-panel {
+ display: flex;
+
+ .@{picker-prefix-cls}-time-panel {
+ border-left: @border-width-base @border-style-base @picker-border-color;
+ }
+
+ .@{picker-prefix-cls}-date-panel,
+ .@{picker-prefix-cls}-time-panel {
+ transition: opacity @animation-duration-slow;
+ }
+
+ // Keyboard
+ &-active {
+ .@{picker-prefix-cls}-date-panel,
+ .@{picker-prefix-cls}-time-panel {
+ opacity: 0.3;
+
+ &-active {
+ opacity: 1;
+ }
+ }
+ }
+ }
+
+ // ====================== Time Panel ======================
+ &-time-panel {
+ width: auto;
+ min-width: auto;
+
+ .@{picker-prefix-cls}-content {
+ display: flex;
+ flex: auto;
+ height: @picker-time-panel-column-height;
+ }
+
+ &-column {
+ flex: 1 0 auto;
+ width: @picker-time-panel-column-width;
+ margin: 0;
+ padding: 0;
+ overflow-y: hidden;
+ text-align: left;
+ list-style: none;
+ transition: background @animation-duration-slow;
+
+ &::after {
+ display: block;
+ height: @picker-time-panel-column-height - @picker-time-panel-cell-height;
+ content: '';
+ .@{picker-prefix-cls}-datetime-panel & {
+ height: @picker-time-panel-column-height - @picker-time-panel-cell-height + 2 *
+ @border-width-base;
+ }
+ }
+
+ &:not(:first-child) {
+ border-left: @border-width-base @border-style-base @picker-border-color;
+ }
+
+ &-active {
+ background: fade(@calendar-item-active-bg, 20%);
+ }
+
+ &:hover {
+ overflow-y: auto;
+ }
+
+ > li {
+ margin: 0;
+ padding: 0;
+
+ &.@{picker-prefix-cls}-time-panel-cell {
+ .@{picker-prefix-cls}-time-panel-cell-inner {
+ display: block;
+ width: 100%;
+ height: @picker-time-panel-cell-height;
+ margin: 0;
+ padding: 0 0 0 ((@picker-time-panel-column-width - 28px) / 2);
+ color: @text-color;
+ line-height: @picker-time-panel-cell-height;
+ border-radius: 0;
+ cursor: pointer;
+ transition: background @animation-duration-slow;
+
+ &:hover {
+ background: @item-hover-bg;
+ }
+ }
+
+ &-selected {
+ .@{picker-prefix-cls}-time-panel-cell-inner {
+ background: @calendar-item-active-bg;
+ }
+ }
+
+ &-disabled {
+ .@{picker-prefix-cls}-time-panel-cell-inner {
+ color: @disabled-color;
+ background: transparent;
+ cursor: not-allowed;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+// Fix IE11 render bug by css hacks
+// https://github.com/ant-design/ant-design/issues/21559
+// https://codepen.io/afc163-1472555193/pen/mdJRaNj?editors=0110
+/* stylelint-disable-next-line */
+_:-ms-fullscreen,
+:root {
+ .@{picker-prefix-cls}-range-wrapper {
+ .@{picker-prefix-cls}-month-panel .@{picker-prefix-cls}-cell,
+ .@{picker-prefix-cls}-year-panel .@{picker-prefix-cls}-cell {
+ padding: 21px 0;
+ }
+ }
+}
diff --git a/components/date-picker/style/rtl.less b/components/date-picker/style/rtl.less
new file mode 100644
index 000000000..8112c71d5
--- /dev/null
+++ b/components/date-picker/style/rtl.less
@@ -0,0 +1,252 @@
+.@{picker-prefix-cls} {
+ &-rtl {
+ direction: rtl;
+ }
+
+ &-suffix {
+ .@{picker-prefix-cls}-rtl & {
+ margin-right: (@padding-xs / 2);
+ margin-left: 0;
+ }
+ }
+
+ &-clear {
+ .@{picker-prefix-cls}-rtl & {
+ right: auto;
+ left: 0;
+ }
+ }
+
+ &-separator {
+ .@{picker-prefix-cls}-rtl & {
+ transform: rotate(180deg);
+ }
+ }
+
+ &-header {
+ &-view {
+ button {
+ &:not(:first-child) {
+ .@{picker-prefix-cls}-panel-rtl & {
+ margin-right: @padding-xs;
+ margin-left: 0;
+ }
+ }
+ }
+ }
+ }
+
+ // ======================== Range =========================
+ &-range {
+ // Clear
+ .@{picker-prefix-cls}-clear {
+ .@{picker-prefix-cls}-rtl& {
+ right: auto;
+ left: @input-padding-horizontal-base;
+ }
+ }
+
+ // Active bar
+ .@{picker-prefix-cls}-active-bar {
+ .@{picker-prefix-cls}-rtl& {
+ margin-right: @input-padding-horizontal-base;
+ margin-left: 0;
+ }
+ }
+
+ &.@{picker-prefix-cls}-small {
+ .@{picker-prefix-cls}-active-bar {
+ .@{picker-prefix-cls}-rtl& {
+ margin-right: @input-padding-horizontal-sm;
+ }
+ }
+ }
+ }
+
+ // ======================== Ranges ========================
+ &-ranges {
+ .@{picker-prefix-cls}-dropdown-rtl & {
+ text-align: right;
+ }
+
+ .@{picker-prefix-cls}-ok {
+ .@{picker-prefix-cls}-dropdown-rtl & {
+ float: left;
+ margin-right: @padding-xs;
+ margin-left: 0;
+ }
+ }
+ }
+
+ // ======================== Panel ========================
+ &-panel {
+ &-rtl {
+ direction: rtl;
+ }
+ }
+
+ &-prev-icon,
+ &-super-prev-icon {
+ .@{picker-prefix-cls}-panel-rtl & {
+ transform: rotate(135deg);
+ }
+ }
+
+ &-next-icon,
+ &-super-next-icon {
+ .@{picker-prefix-cls}-panel-rtl & {
+ transform: rotate(-45deg);
+ }
+ }
+
+ &-cell {
+ .picker-cell-inner(~'@{picker-cell-inner-cls}');
+ }
+
+ // ======================== Body ==========================
+ .picker-cell-inner(@cellClassName) {
+ .@{cellClassName} {
+ position: relative;
+ z-index: 2;
+ display: inline-block;
+ min-width: @picker-panel-cell-height;
+ height: @picker-panel-cell-height;
+ line-height: @picker-panel-cell-height;
+ border-radius: @border-radius-base;
+ transition: background @animation-duration-slow, border @animation-duration-slow;
+ }
+
+ &-in-view&-range-start::before {
+ .@{picker-prefix-cls}-panel-rtl & {
+ right: 50%;
+ left: 0;
+ }
+ }
+
+ &-in-view&-range-end::before {
+ .@{picker-prefix-cls}-panel-rtl & {
+ right: 0;
+ left: 50%;
+ }
+ }
+
+ &-in-view&-range-start&-range-end::before {
+ .@{picker-prefix-cls}-panel-rtl & {
+ right: 50%;
+ left: 50%;
+ }
+ }
+
+ .@{picker-prefix-cls}-date-panel
+ &-in-view&-in-range&-range-hover-start
+ .@{cellClassName}::after {
+ .@{picker-prefix-cls}-panel-rtl & {
+ right: 0;
+ left: -5px - @border-width-base;
+ }
+ }
+
+ .@{picker-prefix-cls}-date-panel &-in-view&-in-range&-range-hover-end .@{cellClassName}::after {
+ .@{picker-prefix-cls}-panel-rtl & {
+ right: -5px - @border-width-base;
+ left: 0;
+ }
+ }
+
+ // Hover with range start & end
+ &-range-hover&-range-start::after {
+ .@{picker-prefix-cls}-panel-rtl & {
+ right: 0;
+ left: 50%;
+ }
+ }
+
+ &-range-hover&-range-end::after {
+ .@{picker-prefix-cls}-panel-rtl & {
+ right: 50%;
+ left: 0;
+ }
+ }
+
+ // range start border-radius
+ &-in-view&-range-start:not(&-range-start-single):not(&-range-end) .@{cellClassName} {
+ .@{picker-prefix-cls}-panel-rtl & {
+ border-radius: 0 @border-radius-base @border-radius-base 0;
+ }
+ }
+
+ // range end border-radius
+ &-in-view&-range-end:not(&-range-end-single):not(&-range-start) .@{cellClassName} {
+ .@{picker-prefix-cls}-panel-rtl & {
+ border-radius: @border-radius-base 0 0 @border-radius-base;
+ }
+ }
+
+ // Edge start
+ tr > &-in-view&-range-hover:not(&-selected):first-child::after,
+ &-in-view&-start&-range-hover-edge-start&-range-hover-edge-start-near-range::after,
+ &-in-view&-range-hover-edge-start:not(&-range-hover-edge-start-near-range)::after,
+ &-in-view&-range-hover-start::after {
+ .@{picker-prefix-cls}-panel-rtl & {
+ right: 6px;
+ left: 0;
+ border-right: @border-width-base dashed @picker-date-hover-range-border-color;
+ border-left: none;
+ border-top-left-radius: 0;
+ border-top-right-radius: @border-radius-base;
+ border-bottom-right-radius: @border-radius-base;
+ border-bottom-left-radius: 0;
+ }
+ }
+
+ // Edge end
+ tr > &-in-view&-range-hover:not(&-selected):last-child::after,
+ &-in-view&-end&-range-hover-edge-end&-range-hover-edge-end-near-range::after,
+ &-in-view&-range-hover-edge-end:not(&-range-hover-edge-end-near-range)::after,
+ &-in-view&-range-hover-end::after {
+ .@{picker-prefix-cls}-panel-rtl & {
+ right: 0;
+ left: 6px;
+ border-right: none;
+ border-left: @border-width-base dashed @picker-date-hover-range-border-color;
+ border-top-left-radius: @border-radius-base;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: @border-radius-base;
+ }
+ }
+
+ tr > &-in-view&-range-hover-start:last-child::after,
+ tr > &-in-view&-range-hover-end:first-child::after,
+ &-in-view&-start&-range-hover-edge-start:not(&-range-hover)::after,
+ &-in-view&-start&-range-hover-end&-range-hover-edge-start:not(&-range-hover)::after,
+ &-in-view&-end&-range-hover-start&-range-hover-edge-end:not(&-range-hover)::after,
+ tr > &-in-view&-start&-range-hover&-range-hover-edge-start:last-child::after,
+ tr > &-in-view&-end&-range-hover&-range-hover-edge-end:first-child::after {
+ .@{picker-prefix-cls}-panel-rtl & {
+ right: 6px;
+ left: 6px;
+ border-right: @border-width-base dashed @picker-date-hover-range-border-color;
+ border-left: @border-width-base dashed @picker-date-hover-range-border-color;
+ border-radius: @border-radius-base;
+ }
+ }
+ }
+
+ // ======================== Footer ========================
+ &-footer {
+ &-extra {
+ .@{picker-prefix-cls}-dropdown-rtl & {
+ direction: rtl;
+ text-align: right;
+ }
+ }
+ }
+
+ // ====================== Time Panel ======================
+ &-time-panel {
+ .@{picker-prefix-cls}-panel-rtl & {
+ direction: ltr;
+ }
+ }
+}
diff --git a/components/date-picker/util.ts b/components/date-picker/util.ts
new file mode 100644
index 000000000..fbd314ed9
--- /dev/null
+++ b/components/date-picker/util.ts
@@ -0,0 +1,53 @@
+import type { PickerMode } from '../vc-picker/interface';
+import type { PickerLocale } from './generatePicker';
+
+export function getPlaceholder(
+ picker: PickerMode | undefined,
+ locale: PickerLocale,
+ customizePlaceholder?: string,
+): string {
+ if (customizePlaceholder !== undefined) {
+ return customizePlaceholder;
+ }
+
+ if (picker === 'year' && locale.lang.yearPlaceholder) {
+ return locale.lang.yearPlaceholder;
+ }
+ if (picker === 'quarter' && locale.lang.quarterPlaceholder) {
+ return locale.lang.quarterPlaceholder;
+ }
+ if (picker === 'month' && locale.lang.monthPlaceholder) {
+ return locale.lang.monthPlaceholder;
+ }
+ if (picker === 'week' && locale.lang.weekPlaceholder) {
+ return locale.lang.weekPlaceholder;
+ }
+ if (picker === 'time' && locale.timePickerLocale.placeholder) {
+ return locale!.timePickerLocale.placeholder;
+ }
+ return locale.lang.placeholder;
+}
+
+export function getRangePlaceholder(
+ picker: PickerMode | undefined,
+ locale: PickerLocale,
+ customizePlaceholder?: [string, string],
+) {
+ if (customizePlaceholder !== undefined) {
+ return customizePlaceholder;
+ }
+
+ if (picker === 'year' && locale.lang.yearPlaceholder) {
+ return locale.lang.rangeYearPlaceholder;
+ }
+ if (picker === 'month' && locale.lang.monthPlaceholder) {
+ return locale.lang.rangeMonthPlaceholder;
+ }
+ if (picker === 'week' && locale.lang.weekPlaceholder) {
+ return locale.lang.rangeWeekPlaceholder;
+ }
+ if (picker === 'time' && locale.timePickerLocale.placeholder) {
+ return locale!.timePickerLocale.rangePlaceholder;
+ }
+ return locale.lang.rangePlaceholder;
+}
diff --git a/components/date-picker/utils.ts b/components/date-picker/utils.ts
deleted file mode 100644
index 790b37534..000000000
--- a/components/date-picker/utils.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import type moment from 'moment';
-
-type Value = moment.Moment | undefined | null;
-type Format = string | string[] | undefined | ((val?: Value) => string | string[] | undefined);
-export function formatDate(value: Value, format: Format) {
- if (!value) {
- return '';
- }
- if (Array.isArray(format)) {
- format = format[0];
- }
- if (typeof format === 'function') {
- return format(value);
- }
- return value.format(format);
-}
diff --git a/components/date-picker/wrapPicker.tsx b/components/date-picker/wrapPicker.tsx
deleted file mode 100644
index a09ec82a4..000000000
--- a/components/date-picker/wrapPicker.tsx
+++ /dev/null
@@ -1,255 +0,0 @@
-import type { DefineComponent } from 'vue';
-import { provide, inject, defineComponent, nextTick } from 'vue';
-import TimePickerPanel from '../vc-time-picker/Panel';
-import classNames from '../_util/classNames';
-import LocaleReceiver from '../locale-provider/LocaleReceiver';
-import { generateShowHourMinuteSecond } from '../time-picker';
-import enUS from './locale/en_US';
-import PropTypes from '../_util/vue-types';
-import { getOptionProps } from '../_util/props-util';
-import { defaultConfigProvider } from '../config-provider';
-import { checkValidate, stringToMoment, momentToString } from '../_util/moment-util';
-
-type PickerType = 'date' | 'week' | 'month';
-
-interface PickerMap {
- [name: string]: string;
-}
-const DEFAULT_FORMAT: PickerMap = {
- date: 'YYYY-MM-DD',
- dateTime: 'YYYY-MM-DD HH:mm:ss',
- week: 'gggg-wo',
- month: 'YYYY-MM',
-};
-
-const LOCALE_FORMAT_MAPPING: PickerMap = {
- date: 'dateFormat',
- dateTime: 'dateTimeFormat',
- week: 'weekFormat',
- month: 'monthFormat',
-};
-
-function getColumns({ showHour, showMinute, showSecond, use12Hours }: any) {
- let column = 0;
- if (showHour) {
- column += 1;
- }
- if (showMinute) {
- column += 1;
- }
- if (showSecond) {
- column += 1;
- }
- if (use12Hours) {
- column += 1;
- }
- return column;
-}
-
-export default function wrapPicker(
- Picker: DefineComponent
,
- props: any,
- pickerType: PickerType,
-) {
- return defineComponent({
- name: Picker.name,
- inheritAttrs: false,
- props: {
- ...props,
- transitionName: PropTypes.string.def('slide-up'),
- popupStyle: PropTypes.style,
- locale: PropTypes.any.def({}),
- },
- emits: [
- 'update:value',
- 'openChange',
- 'focus',
- 'blur',
- 'mouseenter',
- 'mouseleave',
- 'change',
- 'ok',
- 'calendarChange',
- ],
- setup() {
- return {
- configProvider: inject('configProvider', defaultConfigProvider),
- picker: undefined,
- popupRef: undefined,
- };
- },
- watch: {
- value(val) {
- checkValidate('DatePicker', val, 'value', this.valueFormat);
- },
- },
- created() {
- provide('savePopupRef', this.savePopupRef);
- },
- mounted() {
- const { autofocus, disabled, value, defaultValue, valueFormat } = this.$props;
- checkValidate('DatePicker', defaultValue, 'defaultValue', valueFormat);
- checkValidate('DatePicker', value, 'value', valueFormat);
- if (autofocus && !disabled) {
- nextTick(() => {
- this.focus();
- });
- }
- },
- methods: {
- savePicker(node: any) {
- this.picker = node;
- },
- getDefaultLocale() {
- const result = {
- ...enUS,
- ...this.locale,
- };
- result.lang = {
- ...result.lang,
- ...(this.locale || {}).lang,
- };
- return result;
- },
-
- savePopupRef(ref: any) {
- this.popupRef = ref;
- },
- handleOpenChange(open: boolean) {
- this.$emit('openChange', open);
- },
-
- handleFocus(e: FocusEvent) {
- this.$emit('focus', e);
- },
-
- handleBlur(e: FocusEvent) {
- this.$emit('blur', e);
- },
-
- handleMouseEnter(e: MouseEvent) {
- this.$emit('mouseenter', e);
- },
-
- handleMouseLeave(e: MouseEvent) {
- this.$emit('mouseleave', e);
- },
- handleChange(date: any, dateString: string) {
- const value = this.valueFormat ? momentToString(date, this.valueFormat) : date;
- this.$emit('update:value', value);
- this.$emit('change', value, dateString);
- },
- handleOk(val: any) {
- this.$emit('ok', this.valueFormat ? momentToString(val, this.valueFormat) : val);
- },
- handleCalendarChange(date: any, dateString: string) {
- this.$emit(
- 'calendarChange',
- this.valueFormat ? momentToString(date, this.valueFormat) : date,
- dateString,
- );
- },
- focus() {
- this.picker.focus();
- },
-
- blur() {
- this.picker.blur();
- },
-
- transformValue(props) {
- if ('value' in props) {
- props.value = stringToMoment(props.value, this.valueFormat);
- }
- if ('defaultValue' in props) {
- props.defaultValue = stringToMoment(props.defaultValue, this.valueFormat);
- }
- if ('defaultPickerValue' in props) {
- props.defaultPickerValue = stringToMoment(props.defaultPickerValue, this.valueFormat);
- }
- },
-
- renderPicker(locale: any, localeCode: string) {
- const props: any = { ...getOptionProps(this), ...this.$attrs };
- this.transformValue(props);
- const {
- prefixCls: customizePrefixCls,
- inputPrefixCls: customizeInputPrefixCls,
- getCalendarContainer,
- size,
- showTime,
- disabled,
- format,
- } = props;
- const mergedPickerType = showTime ? `${pickerType}Time` : pickerType;
- const mergedFormat =
- format ||
- locale[LOCALE_FORMAT_MAPPING[mergedPickerType]] ||
- DEFAULT_FORMAT[mergedPickerType];
-
- const { getPrefixCls, getPopupContainer: getContextPopupContainer } = this.configProvider;
- const getPopupContainer = getCalendarContainer || getContextPopupContainer;
- const prefixCls = getPrefixCls('calendar', customizePrefixCls);
- const inputPrefixCls = getPrefixCls('input', customizeInputPrefixCls);
-
- const pickerClass = classNames(`${prefixCls}-picker`, {
- [`${prefixCls}-picker-${size}`]: !!size,
- });
- const pickerInputClass = classNames(`${prefixCls}-picker-input`, inputPrefixCls, {
- [`${inputPrefixCls}-lg`]: size === 'large',
- [`${inputPrefixCls}-sm`]: size === 'small',
- [`${inputPrefixCls}-disabled`]: disabled,
- });
-
- const timeFormat = (showTime && showTime.format) || 'HH:mm:ss';
- const vcTimePickerProps = {
- ...generateShowHourMinuteSecond(timeFormat),
- format: timeFormat,
- use12Hours: showTime && showTime.use12Hours,
- };
- const columns = getColumns(vcTimePickerProps);
- const timePickerCls = `${prefixCls}-time-picker-column-${columns}`;
- const timePickerPanelProps = {
- ...vcTimePickerProps,
- ...showTime,
- prefixCls: `${prefixCls}-time-picker`,
- placeholder: locale.timePickerLocale.placeholder,
- transitionName: 'slide-up',
- class: timePickerCls,
- onEsc: () => {},
- };
- const timePicker = showTime ? : null;
- const pickerProps = {
- ...props,
- getCalendarContainer: getPopupContainer,
- format: mergedFormat,
- pickerClass,
- pickerInputClass,
- locale,
- localeCode,
- timePicker,
- onOpenChange: this.handleOpenChange,
- onFocus: this.handleFocus,
- onBlur: this.handleBlur,
- onMouseenter: this.handleMouseEnter,
- onMouseleave: this.handleMouseLeave,
- onChange: this.handleChange,
- onOk: this.handleOk,
- onCalendarChange: this.handleCalendarChange,
- ref: this.savePicker,
- };
- return ;
- },
- },
-
- render() {
- return (
-
- );
- },
- });
-}
diff --git a/components/descriptions/Row.tsx b/components/descriptions/Row.tsx
index 556d1d19d..0f0e7055c 100644
--- a/components/descriptions/Row.tsx
+++ b/components/descriptions/Row.tsx
@@ -50,7 +50,7 @@ const Row: FunctionalComponent = props => {
if (typeof component === 'string') {
return (
= props => {
return [
= props => {
label={label}
/>,
{
callback && callback();
diff --git a/components/input/TextArea.tsx b/components/input/TextArea.tsx
index 1fb195432..f654bc56d 100644
--- a/components/input/TextArea.tsx
+++ b/components/input/TextArea.tsx
@@ -55,7 +55,7 @@ export default defineComponent({
if (!hasProp(this, 'value')) {
this.stateValue = value;
} else {
- this.$forceUpdate();
+ (this as any).$forceUpdate();
}
nextTick(() => {
callback && callback();
diff --git a/components/locale-provider/LocaleReceiver.tsx b/components/locale-provider/LocaleReceiver.tsx
index 9b1fa6e1d..5918e96ed 100644
--- a/components/locale-provider/LocaleReceiver.tsx
+++ b/components/locale-provider/LocaleReceiver.tsx
@@ -1,4 +1,5 @@
import type { VNodeTypes, PropType, ComputedRef } from 'vue';
+import { unref } from 'vue';
import { inject, defineComponent, computed } from 'vue';
import PropTypes from '../_util/vue-types';
import defaultLocaleData from './default';
@@ -66,13 +67,13 @@ type LocaleComponent = keyof Locale;
export function useLocaleReceiver(
componentName: T,
- defaultLocale?: Locale[T] | Function,
+ defaultLocale?: Locale[T] | Function | ComputedRef,
): [ComputedRef] {
const localeData = inject('localeData', {} as LocaleReceiverContext);
- const componentLocale = computed(() => {
+ const componentLocale = computed(() => {
const { antLocale } = localeData;
const locale =
- defaultLocale || (defaultLocaleData as LocaleInterface)[componentName || 'global'];
+ unref(defaultLocale) || (defaultLocaleData as LocaleInterface)[componentName || 'global'];
const localeFromContext = componentName && antLocale ? antLocale[componentName] : {};
return {
diff --git a/components/locale-provider/index.tsx b/components/locale-provider/index.tsx
index 86b046d9c..8d1573a48 100644
--- a/components/locale-provider/index.tsx
+++ b/components/locale-provider/index.tsx
@@ -1,26 +1,24 @@
import type { App, VNode, PropType } from 'vue';
import { provide, defineComponent, reactive, watch, onUnmounted } from 'vue';
import PropTypes from '../_util/vue-types';
-import moment from 'moment';
-import interopDefault from '../_util/interopDefault';
import type { ModalLocale } from '../modal/locale';
import { changeConfirmLocale } from '../modal/locale';
import warning from '../_util/warning';
import { withInstall } from '../_util/type';
import type { ValidateMessages } from '../form/interface';
+import type { TransferLocale } from '../transfer';
+import type { PickerLocale as DatePickerLocale } from '../date-picker/generatePicker';
+import type { PaginationLocale } from '../pagination/Pagination';
+
+interface TransferLocaleForEmpty {
+ description: string;
+}
export interface Locale {
locale: string;
- Pagination?: Object;
- DatePicker?: Object;
- TimePicker?: Object;
- Calendar?: Object;
- Table?: Object;
- Modal?: ModalLocale;
- Popconfirm?: Object;
- Transfer?: Object;
- Select?: Object;
- Upload?: Object;
-
+ Pagination?: PaginationLocale;
+ Table?: Record;
+ Popconfirm?: Record;
+ Upload?: Record;
Form?: {
optional?: string;
defaultValidateMessages: ValidateMessages;
@@ -28,6 +26,17 @@ export interface Locale {
Image?: {
preview: string;
};
+ DatePicker?: DatePickerLocale;
+ TimePicker?: Record;
+ Calendar?: Record;
+ Modal?: ModalLocale;
+ Transfer?: Partial;
+ Select?: Record;
+ Empty?: TransferLocaleForEmpty;
+ global?: Record;
+ PageHeader?: { back: string };
+ Icon?: Record;
+ Text?: Record;
}
export interface LocaleProviderProps {
@@ -38,14 +47,6 @@ export interface LocaleProviderProps {
export const ANT_MARK = 'internalMark';
-function setMomentLocale(locale?: Locale) {
- if (locale && locale.locale) {
- interopDefault(moment).locale(locale.locale);
- } else {
- interopDefault(moment).locale('en');
- }
-}
-
const LocaleProvider = defineComponent({
name: 'ALocaleProvider',
props: {
@@ -72,10 +73,9 @@ const LocaleProvider = defineComponent({
() => props.locale,
val => {
state.antLocale = {
- ...val,
+ ...props.locale,
exist: true,
- };
- setMomentLocale(val);
+ } as any;
changeConfirmLocale(val && val.Modal);
},
{ immediate: true },
diff --git a/components/locale-provider/ku_KU.ts b/components/locale-provider/ku_KU.ts
deleted file mode 100644
index 16ca16ce3..000000000
--- a/components/locale-provider/ku_KU.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import locale from '../locale/ku_KU';
-
-export default locale;
diff --git a/components/locale/ar_EG.ts b/components/locale/ar_EG.ts
deleted file mode 100644
index 25be688a2..000000000
--- a/components/locale/ar_EG.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import Pagination from '../vc-pagination/locale/ar_EG';
-import DatePicker from '../date-picker/locale/ar_EG';
-import TimePicker from '../time-picker/locale/ar_EG';
-import Calendar from '../calendar/locale/ar_EG';
-
-export default {
- locale: 'ar',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- Table: {
- filterTitle: 'الفلاتر',
- filterConfirm: 'تأكيد',
- filterReset: 'إعادة ضبط',
- selectAll: 'اختيار الكل',
- selectInvert: 'إلغاء الاختيار',
- },
- Modal: {
- okText: 'تأكيد',
- cancelText: 'إلغاء',
- justOkText: 'تأكيد',
- },
- Popconfirm: {
- okText: 'تأكيد',
- cancelText: 'إلغاء',
- },
- Transfer: {
- searchPlaceholder: 'ابحث هنا',
- itemUnit: 'عنصر',
- itemsUnit: 'عناصر',
- },
- Upload: {
- uploading: 'جاري الرفع...',
- removeFile: 'احذف الملف',
- uploadError: 'مشكلة فى الرفع',
- previewFile: 'استعرض الملف',
- downloadFile: 'تحميل الملف',
- },
- Empty: {
- description: 'لا توجد بيانات',
- },
-};
diff --git a/components/locale/ar_EG.tsx b/components/locale/ar_EG.tsx
new file mode 100644
index 000000000..356e5446b
--- /dev/null
+++ b/components/locale/ar_EG.tsx
@@ -0,0 +1,120 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/ar_EG';
+import DatePicker from '../date-picker/locale/ar_EG';
+import TimePicker from '../time-picker/locale/ar_EG';
+import Calendar from '../calendar/locale/ar_EG';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = 'ليس ${label} من نوع ${type} صالحًا';
+
+const localeValues: Locale = {
+ locale: 'ar',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'يرجى التحديد',
+ },
+ Table: {
+ filterTitle: 'الفلاتر',
+ filterConfirm: 'تأكيد',
+ filterReset: 'إعادة ضبط',
+ selectAll: 'اختيار الكل',
+ selectInvert: 'إلغاء الاختيار',
+ selectionAll: 'حدد جميع البيانات',
+ sortTitle: 'رتب',
+ expand: 'توسيع الصف',
+ collapse: 'طي الصف',
+ triggerDesc: 'ترتيب تنازلي',
+ triggerAsc: 'ترتيب تصاعدي',
+ cancelSort: 'إلغاء الترتيب',
+ },
+ Modal: {
+ okText: 'تأكيد',
+ cancelText: 'إلغاء',
+ justOkText: 'تأكيد',
+ },
+ Popconfirm: {
+ okText: 'تأكيد',
+ cancelText: 'إلغاء',
+ },
+ Transfer: {
+ searchPlaceholder: 'ابحث هنا',
+ itemUnit: 'عنصر',
+ itemsUnit: 'عناصر',
+ },
+ Upload: {
+ uploading: 'جاري الرفع...',
+ removeFile: 'احذف الملف',
+ uploadError: 'مشكلة فى الرفع',
+ previewFile: 'استعرض الملف',
+ downloadFile: 'تحميل الملف',
+ },
+ Empty: {
+ description: 'لا توجد بيانات',
+ },
+ Icon: {
+ icon: 'أيقونة',
+ },
+ Text: {
+ edit: 'تعديل',
+ copy: 'نسخ',
+ copied: 'نقل',
+ expand: 'وسع',
+ },
+ PageHeader: {
+ back: 'عودة',
+ },
+ Form: {
+ defaultValidateMessages: {
+ default: 'خطأ في حقل الإدخال ${label}',
+ required: 'يرجى إدخال ${label}',
+ enum: '${label} يجب أن يكون واحدا من [${enum}]',
+ whitespace: '${label} لا يمكن أن يكون حرفًا فارغًا',
+ date: {
+ format: '${label} تنسيق التاريخ غير صحيح',
+ parse: '${label} لا يمكن تحويلها إلى تاريخ',
+ invalid: 'تاريخ ${label} غير صحيح',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: 'يجب ${label} ان يكون ${len} أحرف',
+ min: '${label} على الأقل ${min} أحرف',
+ max: '${label} يصل إلى ${max} أحرف',
+ range: 'يجب ${label} ان يكون مابين ${min}-${max} أحرف',
+ },
+ number: {
+ len: '${len} ان يساوي ${label} يجب',
+ min: '${min} الأدنى هو ${label} حد',
+ max: '${max} الأقصى هو ${label} حد',
+ range: '${max}-${min} ان يكون مابين ${label} يجب',
+ },
+ array: {
+ len: 'يجب أن يكون ${label} طوله ${len}',
+ min: 'يجب أن يكون ${label} طوله الأدنى ${min}',
+ max: 'يجب أن يكون ${label} طوله الأقصى ${max}',
+ range: 'يجب أن يكون ${label} طوله مابين ${min}-${max}',
+ },
+ pattern: {
+ mismatch: 'لا يتطابق ${label} مع ${pattern}',
+ },
+ },
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/az_AZ.tsx b/components/locale/az_AZ.tsx
new file mode 100644
index 000000000..aa2d2ce38
--- /dev/null
+++ b/components/locale/az_AZ.tsx
@@ -0,0 +1,48 @@
+import Pagination from '../vc-pagination/locale/az_AZ';
+import DatePicker from '../date-picker/locale/az_AZ';
+import TimePicker from '../time-picker/locale/az_AZ';
+import Calendar from '../calendar/locale/az_AZ';
+import type { Locale } from '../locale-provider';
+
+const localeValues: Locale = {
+ locale: 'az',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ Table: {
+ filterTitle: 'Filter menyu',
+ filterConfirm: 'Axtar',
+ filterReset: 'Sıfırla',
+ emptyText: 'Məlumat yoxdur',
+ selectAll: 'Cari səhifəni seç',
+ selectInvert: 'Invert current page',
+ },
+ Modal: {
+ okText: 'Bəli',
+ cancelText: 'Ləğv et',
+ justOkText: 'Bəli',
+ },
+ Popconfirm: {
+ okText: 'Bəli',
+ cancelText: 'Ləğv et',
+ },
+ Transfer: {
+ titles: ['', ''],
+ notFoundContent: 'Tapılmadı',
+ searchPlaceholder: 'Burada axtar',
+ itemUnit: 'item',
+ itemsUnit: 'items',
+ },
+ Select: {
+ notFoundContent: 'Tapılmadı',
+ },
+ Upload: {
+ uploading: 'Yüklənir...',
+ removeFile: 'Faylı sil',
+ uploadError: 'Yükləmə xətası',
+ previewFile: 'Fayla önbaxış',
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/bg_BG.ts b/components/locale/bg_BG.tsx
similarity index 87%
rename from components/locale/bg_BG.ts
rename to components/locale/bg_BG.tsx
index 551dfb0fb..e5887e937 100644
--- a/components/locale/bg_BG.ts
+++ b/components/locale/bg_BG.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/bg_BG';
import DatePicker from '../date-picker/locale/bg_BG';
import TimePicker from '../time-picker/locale/bg_BG';
import Calendar from '../calendar/locale/bg_BG';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'bg',
Pagination,
DatePicker,
@@ -12,7 +13,7 @@ export default {
Table: {
filterTitle: 'Филтриране',
filterConfirm: 'Добре',
- filterReset: 'Нулиране',
+ filterReset: 'Нулриане',
selectAll: 'Избор на текуща страница',
selectInvert: 'Обръщане',
},
@@ -41,3 +42,5 @@ export default {
description: 'Няма данни',
},
};
+
+export default localeValues;
diff --git a/components/locale/by_BY.tsx b/components/locale/by_BY.tsx
new file mode 100644
index 000000000..87317669d
--- /dev/null
+++ b/components/locale/by_BY.tsx
@@ -0,0 +1,128 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/by_BY';
+import DatePicker from '../date-picker/locale/by_BY';
+import TimePicker from '../time-picker/locale/by_BY';
+import Calendar from '../calendar/locale/by_BY';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = "${label} не з'яўляецца тыпам ${type}";
+
+const localeValues: Locale = {
+ locale: 'by',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Калі ласка выберыце',
+ },
+ Table: {
+ filterTitle: 'Фільтр',
+ filterConfirm: 'OK',
+ filterReset: 'Скінуць',
+ filterEmptyText: 'Без фільтраў',
+ emptyText: 'Няма дадзеных',
+ selectAll: 'Выбраць усе',
+ selectInvert: 'Інвертаваць выбар',
+ selectionAll: 'Выбраць усе дадзеныя',
+ sortTitle: 'Сартаванне',
+ expand: 'Разгарнуць радок',
+ collapse: 'Згарнуць радок',
+ triggerDesc: 'Націсніце для сартавання па змяншэнні',
+ triggerAsc: 'Націсніце для сартавання па ўзросту',
+ cancelSort: 'Націсніце, каб адмяніць сартаванне',
+ },
+ Modal: {
+ okText: 'OK',
+ cancelText: 'Адмена',
+ justOkText: 'OK',
+ },
+ Popconfirm: {
+ okText: 'OK',
+ cancelText: 'Адмена',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'Пошук',
+ itemUnit: 'элем.',
+ itemsUnit: 'элем.',
+ remove: 'Выдаліць',
+ selectAll: 'Выбраць усе дадзеныя',
+ selectCurrent: 'Вылучыць дадзеную старонку',
+ selectInvert: 'Паказаць у зваротным парадку',
+ removeAll: 'Выдаліць усе дадзеныя',
+ removeCurrent: 'Выдаліць дадзеную старонку',
+ },
+ Upload: {
+ uploading: 'Загрузка...',
+ removeFile: 'Выдаліць файл',
+ uploadError: 'Адбылася памылка пры загрузцы',
+ previewFile: 'Прадпрагляд файла',
+ downloadFile: 'Загрузіць файл',
+ },
+ Empty: {
+ description: 'Няма дадзеных',
+ },
+ Icon: {
+ icon: 'Іконка',
+ },
+ Text: {
+ edit: 'Рэдагаваць',
+ copy: 'Капіяваць',
+ copied: 'Капіяванне завершана',
+ expand: 'Разгарнуць',
+ },
+ PageHeader: {
+ back: 'Назад',
+ },
+ Form: {
+ defaultValidateMessages: {
+ default: 'Памылка праверкі поля ${label}',
+ required: 'Калі ласка, увядзіце ${label}',
+ enum: '${label} павінен быць адным з [${enum}]',
+ whitespace: '${label} не можа быць пустым',
+ date: {
+ format: '${label} няправільны фармат даты',
+ parse: '${label} не можа быць пераўтворана ў дату',
+ invalid: "${label} не з'яўляецца карэктнай датай",
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} павінна быць ${len} сімвалаў',
+ min: '${label} павінна быць больш або роўная ${min} сімвалаў',
+ max: '${label} павінна быць менш або роўная ${max} сімвалаў',
+ range: 'Даўжыня ${label} павінна быць паміж ${min}-${max} сімвалаў',
+ },
+ number: {
+ len: '${label} павінна быць роўная ${len}',
+ min: '${label} павінна быць больш або роўная ${min}',
+ max: '${label} павінна быць больш або роўная ${max}',
+ },
+ array: {
+ len: 'Колькасць элементаў ${label} павінна быць роўная ${len}',
+ min: 'Колькасць элементаў ${label} павінна быць больш або роўная ${min}',
+ max: 'Колькасць элементаў ${label} павінна быць менш або роўная ${max}',
+ range: 'Колькасць элементаў ${label} павінна быць паміж ${min} і ${max}',
+ },
+ pattern: {
+ mismatch: '${label} не адпавядае шаблону ${pattern}',
+ },
+ },
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/ca_ES.ts b/components/locale/ca_ES.ts
deleted file mode 100644
index 1c960ae20..000000000
--- a/components/locale/ca_ES.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import Pagination from '../vc-pagination/locale/ca_ES';
-import DatePicker from '../date-picker/locale/ca_ES';
-import TimePicker from '../time-picker/locale/ca_ES';
-import Calendar from '../calendar/locale/ca_ES';
-
-export default {
- locale: 'ca',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- Table: {
- filterTitle: 'Filtrar Menu',
- filterConfirm: 'OK',
- filterReset: 'Restablir',
- },
- Modal: {
- okText: 'OK',
- cancelText: 'Cancel·lar',
- justOkText: 'OK',
- },
- Popconfirm: {
- okText: 'OK',
- cancelText: 'Cancel·lar',
- },
- Transfer: {
- searchPlaceholder: 'Cercar aquí',
- itemUnit: 'item',
- itemsUnit: 'items',
- },
- Upload: {
- uploading: 'Carregant...',
- removeFile: 'Elimina el fitxer',
- uploadError: 'Error de càrrega',
- previewFile: 'Vista prèvia del fitxer',
- downloadFile: "Descarrega l'arxiu",
- },
- Empty: {
- description: 'Sense dades',
- },
-};
diff --git a/components/locale/ca_ES.tsx b/components/locale/ca_ES.tsx
new file mode 100644
index 000000000..7142e52fe
--- /dev/null
+++ b/components/locale/ca_ES.tsx
@@ -0,0 +1,128 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/ca_ES';
+import DatePicker from '../date-picker/locale/ca_ES';
+import TimePicker from '../time-picker/locale/ca_ES';
+import Calendar from '../calendar/locale/ca_ES';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} no és un ${type} vàlid';
+
+const localeValues: Locale = {
+ locale: 'ca',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Seleccionar',
+ },
+ Table: {
+ filterTitle: 'Filtrar el menú',
+ filterConfirm: 'D’acord',
+ filterReset: 'Reiniciar',
+ filterEmptyText: 'Sense filtres',
+ selectAll: 'Seleccionar la pàgina actual',
+ selectInvert: 'Invertir la selecció',
+ selectionAll: 'Seleccionar-ho tot',
+ sortTitle: 'Ordenar',
+ expand: 'Ampliar la fila',
+ collapse: 'Plegar la fila',
+ triggerDesc: 'Ordre descendent',
+ triggerAsc: 'Ordre ascendent',
+ cancelSort: 'Desactivar l’ordre',
+ },
+ Modal: {
+ okText: 'D’acord',
+ cancelText: 'Cancel·lar',
+ justOkText: 'D’acord',
+ },
+ Popconfirm: {
+ okText: 'D’acord',
+ cancelText: 'Cancel·lar',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'Cercar',
+ itemUnit: 'ítem',
+ itemsUnit: 'ítems',
+ remove: 'Eliminar',
+ selectCurrent: 'Seleccionar la pàgina actual',
+ removeCurrent: 'Eliminar la selecció',
+ selectAll: 'Seleccionar-ho tot',
+ removeAll: 'Eliminar-ho tot',
+ selectInvert: 'Invertir la selecció',
+ },
+ Upload: {
+ uploading: 'Carregant…',
+ removeFile: 'Eliminar el fitxer',
+ uploadError: 'Error de càrrega',
+ previewFile: 'Vista prèvia del fitxer',
+ downloadFile: 'Baixar el fitxer',
+ },
+ Empty: {
+ description: 'Sense dades',
+ },
+ Icon: {
+ icon: 'icona',
+ },
+ Text: {
+ edit: 'Editar',
+ copy: 'Copiar',
+ copied: 'Copiat',
+ expand: 'Ampliar',
+ },
+ PageHeader: {
+ back: 'Enrere',
+ },
+ Form: {
+ defaultValidateMessages: {
+ default: 'Error de validació del camp ${label}',
+ required: 'Introdueix ${label}',
+ enum: '${label} ha de ser un de [${enum}]',
+ whitespace: '${label} no pot ser un caràcter en blanc',
+ date: {
+ format: 'El format de la data de ${label} és invàlid',
+ parse: '${label} no es pot convertir a cap data',
+ invalid: '${label} és una data invàlida',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} ha de ser de ${len} caràcters',
+ min: '${label} ha de tenir com a mínim ${min} caràcters',
+ max: '${label} ha de tenir com a màxim ${max} caràcters',
+ range: '${label} ha d’estar entre ${min} i ${max} caràcters',
+ },
+ number: {
+ len: '${label} ha de ser igual a ${len}',
+ min: '${label} ha de tenir un valor mínim de ${min}',
+ max: '${label} ha de tenir un valor màxim de ${max}',
+ range: '${label} ha de tenir un valor entre ${min} i ${max}',
+ },
+ array: {
+ len: 'La llargada de ${label} ha de ser de ${len}',
+ min: 'La llargada de ${label} ha de ser com a mínim de ${min}',
+ max: 'La llargada de ${label} ha de ser com a màxim de ${max}',
+ range: 'La llargada de ${label} ha d’estar entre ${min} i ${max}',
+ },
+ pattern: {
+ mismatch: '${label} no coincideix amb el patró ${pattern}',
+ },
+ },
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/cs_CZ.ts b/components/locale/cs_CZ.tsx
similarity index 59%
rename from components/locale/cs_CZ.ts
rename to components/locale/cs_CZ.tsx
index 11440a259..b9746b44d 100644
--- a/components/locale/cs_CZ.ts
+++ b/components/locale/cs_CZ.tsx
@@ -2,17 +2,31 @@ import Pagination from '../vc-pagination/locale/cs_CZ';
import DatePicker from '../date-picker/locale/cs_CZ';
import TimePicker from '../time-picker/locale/cs_CZ';
import Calendar from '../calendar/locale/cs_CZ';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'cs',
Pagination,
DatePicker,
TimePicker,
Calendar,
+ global: {
+ placeholder: 'Prosím vyber',
+ },
Table: {
filterTitle: 'Filtr',
filterConfirm: 'Potvrdit',
filterReset: 'Obnovit',
+ filterEmptyText: 'Žádné filtry',
+ selectAll: 'Vybrat všechny řádky na současné stránce',
+ selectInvert: 'Invertovat výběr na současné stránce',
+ selectionAll: 'Vybrat všechny řádky',
+ sortTitle: 'Řadit',
+ expand: 'Rozbalit řádek',
+ collapse: 'Zabalit řádek',
+ triggerDesc: 'Klikni pro sestupné řazení',
+ triggerAsc: 'Klikni pro vzestupné řazení',
+ cancelSort: 'Klikni pro zrušení řazení',
},
Modal: {
okText: 'Ok',
@@ -39,3 +53,5 @@ export default {
description: 'Žádná data',
},
};
+
+export default localeValues;
diff --git a/components/locale/da_DK.ts b/components/locale/da_DK.tsx
similarity index 89%
rename from components/locale/da_DK.ts
rename to components/locale/da_DK.tsx
index 2a764267a..951a4e012 100644
--- a/components/locale/da_DK.ts
+++ b/components/locale/da_DK.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/da_DK';
import DatePicker from '../date-picker/locale/da_DK';
import TimePicker from '../time-picker/locale/da_DK';
import Calendar from '../calendar/locale/da_DK';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'da',
DatePicker,
TimePicker,
@@ -41,3 +42,5 @@ export default {
description: 'Ingen data',
},
};
+
+export default localeValues;
diff --git a/components/locale/de_DE.ts b/components/locale/de_DE.ts
deleted file mode 100644
index 5f0611342..000000000
--- a/components/locale/de_DE.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import Pagination from '../vc-pagination/locale/de_DE';
-import DatePicker from '../date-picker/locale/de_DE';
-import TimePicker from '../time-picker/locale/de_DE';
-import Calendar from '../calendar/locale/de_DE';
-
-export default {
- locale: 'de',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- Table: {
- filterTitle: 'Filter-Menü',
- filterConfirm: 'OK',
- filterReset: 'Zurücksetzen',
- selectAll: 'Selektiere Alle',
- selectInvert: 'Selektion Invertieren',
- },
- Modal: {
- okText: 'OK',
- cancelText: 'Abbrechen',
- justOkText: 'OK',
- },
- Popconfirm: {
- okText: 'OK',
- cancelText: 'Abbrechen',
- },
- Transfer: {
- searchPlaceholder: 'Suchen',
- itemUnit: 'Eintrag',
- itemsUnit: 'Einträge',
- },
- Upload: {
- uploading: 'Hochladen...',
- removeFile: 'Datei entfernen',
- uploadError: 'Fehler beim Hochladen',
- previewFile: 'Dateivorschau',
- downloadFile: 'Download-Datei',
- },
- Empty: {
- description: 'Keine Daten',
- },
-};
diff --git a/components/locale/de_DE.tsx b/components/locale/de_DE.tsx
new file mode 100644
index 000000000..5eef76622
--- /dev/null
+++ b/components/locale/de_DE.tsx
@@ -0,0 +1,124 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/de_DE';
+import DatePicker from '../date-picker/locale/de_DE';
+import TimePicker from '../time-picker/locale/de_DE';
+import Calendar from '../calendar/locale/de_DE';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} ist nicht gültig. ${type} erwartet';
+
+const localeValues: Locale = {
+ locale: 'de',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Bitte auswählen',
+ },
+ Table: {
+ filterTitle: 'Filter-Menü',
+ filterConfirm: 'OK',
+ filterReset: 'Zurücksetzen',
+ selectAll: 'Selektiere Alle',
+ selectInvert: 'Selektion Invertieren',
+ selectionAll: 'Wählen Sie alle Daten aus',
+ sortTitle: 'Sortieren',
+ expand: 'Zeile erweitern',
+ collapse: 'Zeile reduzieren',
+ triggerDesc: 'Klicken zur absteigenden Sortierung',
+ triggerAsc: 'Klicken zur aufsteigenden Sortierung',
+ cancelSort: 'Klicken zum Abbrechen der Sortierung',
+ },
+ Modal: {
+ okText: 'OK',
+ cancelText: 'Abbrechen',
+ justOkText: 'OK',
+ },
+ Popconfirm: {
+ okText: 'OK',
+ cancelText: 'Abbrechen',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'Suchen',
+ itemUnit: 'Eintrag',
+ itemsUnit: 'Einträge',
+ remove: 'Entfernen',
+ selectCurrent: 'Alle auf aktueller Seite auswählen',
+ removeCurrent: 'Auswahl auf aktueller Seite aufheben',
+ selectAll: 'Alle auswählen',
+ removeAll: 'Auswahl aufheben',
+ selectInvert: 'Auswahl umkehren',
+ },
+ Upload: {
+ uploading: 'Hochladen...',
+ removeFile: 'Datei entfernen',
+ uploadError: 'Fehler beim Hochladen',
+ previewFile: 'Dateivorschau',
+ downloadFile: 'Download-Datei',
+ },
+ Empty: {
+ description: 'Keine Daten',
+ },
+ Text: {
+ edit: 'Bearbeiten',
+ copy: 'Kopieren',
+ copied: 'Kopiert',
+ expand: 'Erweitern',
+ },
+ PageHeader: {
+ back: 'Zurück',
+ },
+ Form: {
+ defaultValidateMessages: {
+ default: 'Feld-Validierungsfehler: ${label}',
+ required: 'Bitte geben Sie ${label} an',
+ enum: '${label} muss eines der folgenden sein [${enum}]',
+ whitespace: '${label} darf kein Leerzeichen sein',
+ date: {
+ format: '${label} ist ein ungültiges Datumsformat',
+ parse: '${label} kann nicht in ein Datum umgewandelt werden',
+ invalid: '${label} ist ein ungültiges Datum',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} muss genau ${len} Zeichen lang sein',
+ min: '${label} muss mindestens ${min} Zeichen lang sein',
+ max: '${label} darf höchstens ${max} Zeichen lang sein',
+ range: '${label} muss zwischen ${min} und ${max} Zeichen lang sein',
+ },
+ number: {
+ len: '${label} muss gleich ${len} sein',
+ min: '${label} muss mindestens ${min} sein',
+ max: '${label} darf maximal ${max} sein',
+ range: '${label} muss zwischen ${min} und ${max} liegen',
+ },
+ array: {
+ len: 'Es müssen ${len} ${label} sein',
+ min: 'Es müssen mindestens ${min} ${label} sein',
+ max: 'Es dürfen maximal ${max} ${label} sein',
+ range: 'Die Anzahl an ${label} muss zwischen ${min} und ${max} liegen',
+ },
+ pattern: {
+ mismatch: '${label} enspricht nicht dem ${pattern} Muster',
+ },
+ },
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/default.ts b/components/locale/default.tsx
similarity index 95%
rename from components/locale/default.ts
rename to components/locale/default.tsx
index 518a461e2..cb9f096af 100644
--- a/components/locale/default.ts
+++ b/components/locale/default.tsx
@@ -1,10 +1,13 @@
+/* eslint-disable no-template-curly-in-string */
import Pagination from '../vc-pagination/locale/en_US';
import DatePicker from '../date-picker/locale/en_US';
import TimePicker from '../time-picker/locale/en_US';
import Calendar from '../calendar/locale/en_US';
-// import ColorPicker from '../color-picker/locale/en_US';
+import type { Locale } from '../locale-provider';
+
const typeTemplate = '${label} is not a valid ${type}';
-export default {
+
+const localeValues: Locale = {
locale: 'en',
Pagination,
DatePicker,
@@ -127,3 +130,5 @@ export default {
preview: 'Preview',
},
};
+
+export default localeValues;
diff --git a/components/locale/el_GR.ts b/components/locale/el_GR.tsx
similarity index 91%
rename from components/locale/el_GR.ts
rename to components/locale/el_GR.tsx
index 2b9d7b659..9262d97d5 100644
--- a/components/locale/el_GR.ts
+++ b/components/locale/el_GR.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/el_GR';
import DatePicker from '../date-picker/locale/el_GR';
import TimePicker from '../time-picker/locale/el_GR';
import Calendar from '../calendar/locale/el_GR';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'el',
Pagination,
DatePicker,
@@ -41,3 +42,5 @@ export default {
description: 'Δεν υπάρχουν δεδομένα',
},
};
+
+export default localeValues;
diff --git a/components/locale/en_GB.ts b/components/locale/en_GB.ts
deleted file mode 100644
index 828c819c6..000000000
--- a/components/locale/en_GB.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import Pagination from '../vc-pagination/locale/en_GB';
-import DatePicker from '../date-picker/locale/en_GB';
-import TimePicker from '../time-picker/locale/en_GB';
-import Calendar from '../calendar/locale/en_GB';
-
-export default {
- locale: 'en-gb',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- Table: {
- filterTitle: 'Filter menu',
- filterConfirm: 'OK',
- filterReset: 'Reset',
- selectAll: 'Select current page',
- selectInvert: 'Invert current page',
- },
- Modal: {
- okText: 'OK',
- cancelText: 'Cancel',
- justOkText: 'OK',
- },
- Popconfirm: {
- okText: 'OK',
- cancelText: 'Cancel',
- },
- Transfer: {
- searchPlaceholder: 'Search here',
- itemUnit: 'item',
- itemsUnit: 'items',
- },
- Upload: {
- uploading: 'Uploading...',
- removeFile: 'Remove file',
- uploadError: 'Upload error',
- previewFile: 'Preview file',
- downloadFile: 'Download file',
- },
- Empty: {
- description: 'No data',
- },
-};
diff --git a/components/locale/en_GB.tsx b/components/locale/en_GB.tsx
new file mode 100644
index 000000000..dd3cd9c6d
--- /dev/null
+++ b/components/locale/en_GB.tsx
@@ -0,0 +1,107 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/en_GB';
+import DatePicker from '../date-picker/locale/en_GB';
+import TimePicker from '../time-picker/locale/en_GB';
+import Calendar from '../calendar/locale/en_GB';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} is not a valid ${type}';
+
+const localeValues: Locale = {
+ locale: 'en-gb',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ Table: {
+ filterTitle: 'Filter menu',
+ filterConfirm: 'OK',
+ filterReset: 'Reset',
+ filterEmptyText: 'No filters',
+ emptyText: 'No data',
+ selectAll: 'Select current page',
+ selectInvert: 'Invert current page',
+ selectionAll: 'Select all data',
+ sortTitle: 'Sort',
+ expand: 'Expand row',
+ collapse: 'Collapse row',
+ triggerDesc: 'Click to sort descending',
+ triggerAsc: 'Click to sort ascending',
+ cancelSort: 'Click to cancel sorting',
+ },
+ Modal: {
+ okText: 'OK',
+ cancelText: 'Cancel',
+ justOkText: 'OK',
+ },
+ Popconfirm: {
+ okText: 'OK',
+ cancelText: 'Cancel',
+ },
+ Transfer: {
+ searchPlaceholder: 'Search here',
+ itemUnit: 'item',
+ itemsUnit: 'items',
+ },
+ Upload: {
+ uploading: 'Uploading...',
+ removeFile: 'Remove file',
+ uploadError: 'Upload error',
+ previewFile: 'Preview file',
+ downloadFile: 'Download file',
+ },
+ Empty: {
+ description: 'No data',
+ },
+ Form: {
+ defaultValidateMessages: {
+ default: 'Field validation error for ${label}',
+ required: 'Please enter ${label}',
+ enum: '${label} must be one of [${enum}]',
+ whitespace: '${label} cannot be a blank character',
+ date: {
+ format: '${label} date format is invalid',
+ parse: '${label} cannot be converted to a date',
+ invalid: '${label} is an invalid date',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} must be ${len} characters',
+ min: '${label} must be at least ${min} characters',
+ max: '${label} must be up to ${max} characters',
+ range: '${label} must be between ${min}-${max} characters',
+ },
+ number: {
+ len: '${label} must be equal to ${len}',
+ min: '${label} must be minimum ${min}',
+ max: '${label} must be maximum ${max}',
+ range: '${label} must be between ${min}-${max}',
+ },
+ array: {
+ len: 'Must be ${len} ${label}',
+ min: 'At least ${min} ${label}',
+ max: 'At most ${max} ${label}',
+ range: 'The amount of ${label} must be between ${min}-${max}',
+ },
+ pattern: {
+ mismatch: '${label} does not match the pattern ${pattern}',
+ },
+ },
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/en_US.ts b/components/locale/en_US.tsx
similarity index 100%
rename from components/locale/en_US.ts
rename to components/locale/en_US.tsx
diff --git a/components/locale/es_ES.ts b/components/locale/es_ES.ts
deleted file mode 100644
index 1852ca810..000000000
--- a/components/locale/es_ES.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import Pagination from '../vc-pagination/locale/es_ES';
-import DatePicker from '../date-picker/locale/es_ES';
-import TimePicker from '../time-picker/locale/es_ES';
-import Calendar from '../calendar/locale/es_ES';
-
-export default {
- locale: 'es',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- global: {
- placeholder: 'Seleccione',
- },
- Table: {
- filterTitle: 'Filtrar menú',
- filterConfirm: 'Aceptar',
- filterReset: 'Reiniciar',
- selectAll: 'Seleccionar todo',
- selectInvert: 'Invertir selección',
- sortTitle: 'Ordenar',
- },
- Modal: {
- okText: 'Aceptar',
- cancelText: 'Cancelar',
- justOkText: 'Aceptar',
- },
- Popconfirm: {
- okText: 'Aceptar',
- cancelText: 'Cancelar',
- },
- Transfer: {
- searchPlaceholder: 'Buscar aquí',
- itemUnit: 'elemento',
- itemsUnit: 'elementos',
- },
- Upload: {
- uploading: 'Subiendo...',
- removeFile: 'Eliminar archivo',
- uploadError: 'Error al subir el archivo',
- previewFile: 'Vista previa',
- downloadFile: 'Descargar archivo',
- },
- Empty: {
- description: 'No hay datos',
- },
- Icon: {
- icon: 'ícono',
- },
- Text: {
- edit: 'editar',
- copy: 'copiar',
- copied: 'copiado',
- expand: 'expandir',
- },
- PageHeader: {
- back: 'volver',
- },
-};
diff --git a/components/locale/es_ES.tsx b/components/locale/es_ES.tsx
new file mode 100644
index 000000000..d08e824da
--- /dev/null
+++ b/components/locale/es_ES.tsx
@@ -0,0 +1,131 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/es_ES';
+import DatePicker from '../date-picker/locale/es_ES';
+import TimePicker from '../time-picker/locale/es_ES';
+import Calendar from '../calendar/locale/es_ES';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} no es un ${type} válido';
+
+const localeValues: Locale = {
+ locale: 'es',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Seleccione',
+ },
+ Table: {
+ filterTitle: 'Filtrar menú',
+ filterConfirm: 'Aceptar',
+ filterReset: 'Reiniciar',
+ filterEmptyText: 'Sin filtros',
+ emptyText: 'Sin datos',
+ selectAll: 'Seleccionar todo',
+ selectInvert: 'Invertir selección',
+ selectNone: 'Vacíe todo',
+ selectionAll: 'Seleccionar todos los datos',
+ sortTitle: 'Ordenar',
+ expand: 'Expandir fila',
+ collapse: 'Colapsar fila',
+ triggerDesc: 'Click para ordenar en orden descendente',
+ triggerAsc: 'Click para ordenar en orden ascendente',
+ cancelSort: 'Click para cancelar ordenamiento',
+ },
+ Modal: {
+ okText: 'Aceptar',
+ cancelText: 'Cancelar',
+ justOkText: 'Aceptar',
+ },
+ Popconfirm: {
+ okText: 'Aceptar',
+ cancelText: 'Cancelar',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'Buscar aquí',
+ itemUnit: 'elemento',
+ itemsUnit: 'elementos',
+ remove: 'Eliminar',
+ selectCurrent: 'Seleccionar página actual',
+ removeCurrent: 'Remover página actual',
+ selectAll: 'Seleccionar todos los datos',
+ removeAll: 'Eliminar todos los datos',
+ selectInvert: 'Invertir página actual',
+ },
+ Upload: {
+ uploading: 'Subiendo...',
+ removeFile: 'Eliminar archivo',
+ uploadError: 'Error al subir el archivo',
+ previewFile: 'Vista previa',
+ downloadFile: 'Descargar archivo',
+ },
+ Empty: {
+ description: 'No hay datos',
+ },
+ Icon: {
+ icon: 'ícono',
+ },
+ Text: {
+ edit: 'Editar',
+ copy: 'Copiar',
+ copied: 'Copiado',
+ expand: 'Expandir',
+ },
+ PageHeader: {
+ back: 'Volver',
+ },
+ Form: {
+ optional: '(opcional)',
+ defaultValidateMessages: {
+ default: 'Error de validación del campo ${label}',
+ required: 'Por favor ingresar ${label}',
+ enum: '${label} debe ser uno de [${enum}]',
+ whitespace: '${label} no puede ser un carácter en blanco',
+ date: {
+ format: 'El formato de fecha de ${label} es inválido',
+ parse: '${label} no se puede convertir a una fecha',
+ invalid: '${label} es una fecha inválida',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} debe tener ${len} caracteres',
+ min: '${label} debe tener al menos ${min} caracteres',
+ max: '${label} debe tener hasta ${max} caracteres',
+ range: '${label} debe tener entre ${min}-${max} caracteres',
+ },
+ number: {
+ len: '${label} debe ser igual a ${len}',
+ min: '${label} valor mínimo es ${min}',
+ max: '${label} valor máximo es ${max}',
+ range: '${label} debe estar entre ${min}-${max}',
+ },
+ array: {
+ len: 'Debe ser ${len} ${label}',
+ min: 'Al menos ${min} ${label}',
+ max: 'A lo mucho ${max} ${label}',
+ range: 'El monto de ${label} debe estar entre ${min}-${max}',
+ },
+ pattern: {
+ mismatch: '${label} no coincide con el patrón ${pattern}',
+ },
+ },
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/et_EE.ts b/components/locale/et_EE.tsx
similarity index 89%
rename from components/locale/et_EE.ts
rename to components/locale/et_EE.tsx
index 1c1f91e58..c840327be 100644
--- a/components/locale/et_EE.ts
+++ b/components/locale/et_EE.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/et_EE';
import DatePicker from '../date-picker/locale/et_EE';
import TimePicker from '../time-picker/locale/et_EE';
import Calendar from '../calendar/locale/et_EE';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'et',
Pagination,
DatePicker,
@@ -41,3 +42,5 @@ export default {
description: 'Andmed puuduvad',
},
};
+
+export default localeValues;
diff --git a/components/locale/fa_IR.ts b/components/locale/fa_IR.ts
deleted file mode 100644
index 6390fb37a..000000000
--- a/components/locale/fa_IR.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import Pagination from '../vc-pagination/locale/fa_IR';
-import DatePicker from '../date-picker/locale/fa_IR';
-import TimePicker from '../time-picker/locale/fa_IR';
-import Calendar from '../calendar/locale/fa_IR';
-
-export default {
- locale: 'fa',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- Table: {
- filterTitle: 'منوی فیلتر',
- filterConfirm: 'تایید',
- filterReset: 'پاک کردن',
- selectAll: 'انتخاب صفحهی کنونی',
- selectInvert: 'معکوس کردن انتخابها در صفحه ی کنونی',
- },
- Modal: {
- okText: 'تایید',
- cancelText: 'لغو',
- justOkText: 'تایید',
- },
- Popconfirm: {
- okText: 'تایید',
- cancelText: 'لغو',
- },
- Transfer: {
- searchPlaceholder: 'جستجو',
- itemUnit: '',
- itemsUnit: '',
- },
- Upload: {
- uploading: 'در حال آپلود...',
- removeFile: 'حذف فایل',
- uploadError: 'خطا در آپلود',
- previewFile: 'مشاهدهی فایل',
- downloadFile: 'دریافت فایل',
- },
- Empty: {
- description: 'دادهای موجود نیست',
- },
-};
diff --git a/components/locale/fa_IR.tsx b/components/locale/fa_IR.tsx
new file mode 100644
index 000000000..cbf2f677f
--- /dev/null
+++ b/components/locale/fa_IR.tsx
@@ -0,0 +1,134 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/fa_IR';
+import DatePicker from '../date-picker/locale/fa_IR';
+import TimePicker from '../time-picker/locale/fa_IR';
+import Calendar from '../calendar/locale/fa_IR';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} از نوع ${type} معتبر نیست';
+
+const localeValues: Locale = {
+ locale: 'fa',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'لطفاً انتخاب کنید',
+ },
+ Table: {
+ filterTitle: 'منوی فیلتر',
+ filterConfirm: 'تایید',
+ filterReset: 'پاک کردن',
+ filterEmptyText: 'بدون فیلتر',
+ emptyText: 'بدون داده',
+ selectAll: 'انتخاب صفحهی کنونی',
+ selectInvert: 'معکوس کردن انتخابها در صفحه ی کنونی',
+ selectNone: 'انتخاب هیچکدام',
+ selectionAll: 'انتخاب همه دادهها',
+ sortTitle: 'مرتب سازی',
+ expand: 'باز شدن ردیف',
+ collapse: 'بستن ردیف',
+ triggerDesc: 'ترتیب نزولی',
+ triggerAsc: 'ترتیب صعودی',
+ cancelSort: 'لغوِ ترتیبِ داده شده',
+ },
+ Modal: {
+ okText: 'تایید',
+ cancelText: 'لغو',
+ justOkText: 'تایید',
+ },
+ Popconfirm: {
+ okText: 'تایید',
+ cancelText: 'لغو',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'جستجو',
+ itemUnit: 'عدد',
+ itemsUnit: 'عدد',
+ remove: 'حذف',
+ selectCurrent: 'انتخاب صفحه فعلی',
+ removeCurrent: 'پاک کردن انتخابهای صفحه فعلی',
+ selectAll: 'انتخاب همه',
+ removeAll: 'پاک کردن همه انتخابها',
+ selectInvert: 'معکوس کردن انتخابها در صفحه ی کنونی',
+ },
+ Upload: {
+ uploading: 'در حال آپلود...',
+ removeFile: 'حذف فایل',
+ uploadError: 'خطا در آپلود',
+ previewFile: 'مشاهدهی فایل',
+ downloadFile: 'دریافت فایل',
+ },
+ Empty: {
+ description: 'دادهای موجود نیست',
+ },
+ Icon: {
+ icon: 'آیکن',
+ },
+ Text: {
+ edit: 'ویرایش',
+ copy: 'کپی',
+ copied: 'کپی شد',
+ expand: 'توسعه',
+ },
+ PageHeader: {
+ back: 'برگشت',
+ },
+ Form: {
+ optional: '(اختیاری)',
+ defaultValidateMessages: {
+ default: 'خطا در ${label}',
+ required: 'فیلد ${label} اجباریست',
+ enum: '${label} باید یکی از [${enum}] باشد',
+ whitespace: '${label} نمیتواند خالی باشد',
+ date: {
+ format: 'ساختار تاریخ در ${label} نامعتبر است',
+ parse: '${label} قابل تبدیل به تاریخ نیست',
+ invalid: '${label} تاریخی نا معتبر است',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} باید ${len} کاراکتر باشد',
+ min: '${label} باید حداقل ${min} کاراکتر باشد',
+ max: '${label} باید حداکثر ${max} کاراکتر باشد',
+ range: '${label} باید بین ${min}-${max} کاراکتر باشد',
+ },
+ number: {
+ len: '${label} باید برابر ${len}',
+ min: '${label} حداقل میتواند ${min} باشد',
+ max: '${label} حداکثر میتواند ${max} باشد',
+ range: '${label} باید بین ${min}-${max} باشد',
+ },
+ array: {
+ len: 'تعداد ${label} باید ${len} باشد.',
+ min: 'تعداد ${label} حداقل باید ${min} باشد',
+ max: 'تعداد ${label} حداکثر باید ${max} باشد',
+ range: 'مقدار ${label} باید بین ${min}-${max} باشد',
+ },
+ pattern: {
+ mismatch: 'الگوی ${label} با ${pattern} برابری نمیکند',
+ },
+ },
+ },
+ Image: {
+ preview: 'نمایش',
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/fi_FI.ts b/components/locale/fi_FI.tsx
similarity index 81%
rename from components/locale/fi_FI.ts
rename to components/locale/fi_FI.tsx
index 8612f184e..a8858b6b8 100644
--- a/components/locale/fi_FI.ts
+++ b/components/locale/fi_FI.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/fi_FI';
import DatePicker from '../date-picker/locale/fi_FI';
import TimePicker from '../time-picker/locale/fi_FI';
import Calendar from '../calendar/locale/fi_FI';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'fi',
Pagination,
DatePicker,
@@ -41,4 +42,12 @@ export default {
Empty: {
description: 'Ei kohteita',
},
+ Text: {
+ edit: 'Muokkaa',
+ copy: 'Kopioi',
+ copied: 'Kopioitu',
+ expand: 'Näytä lisää',
+ },
};
+
+export default localeValues;
diff --git a/components/locale/fr_BE.ts b/components/locale/fr_BE.tsx
similarity index 90%
rename from components/locale/fr_BE.ts
rename to components/locale/fr_BE.tsx
index 0317e25d0..ce0f28b71 100644
--- a/components/locale/fr_BE.ts
+++ b/components/locale/fr_BE.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/fr_BE';
import DatePicker from '../date-picker/locale/fr_BE';
import TimePicker from '../time-picker/locale/fr_BE';
import Calendar from '../calendar/locale/fr_BE';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'fr',
Pagination,
DatePicker,
@@ -45,3 +46,5 @@ export default {
expand: 'développer',
},
};
+
+export default localeValues;
diff --git a/components/locale/fr_CA.tsx b/components/locale/fr_CA.tsx
new file mode 100644
index 000000000..d7cd566c2
--- /dev/null
+++ b/components/locale/fr_CA.tsx
@@ -0,0 +1,62 @@
+import Pagination from '../vc-pagination/locale/fr_CA';
+import DatePicker from '../date-picker/locale/fr_CA';
+import TimePicker from '../time-picker/locale/fr_CA';
+import Calendar from '../calendar/locale/fr_CA';
+import type { Locale } from '../locale-provider';
+
+const localeValues: Locale = {
+ locale: 'fr',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ Table: {
+ filterTitle: 'Filtrer',
+ filterConfirm: 'OK',
+ filterReset: 'Réinitialiser',
+ selectAll: 'Sélectionner la page actuelle',
+ selectInvert: 'Inverser la sélection de la page actuelle',
+ selectionAll: 'Sélectionner toutes les données',
+ sortTitle: 'Trier',
+ expand: 'Développer la ligne',
+ collapse: 'Réduire la ligne',
+ triggerDesc: 'Trier par ordre décroissant',
+ triggerAsc: 'Trier par ordre croissant',
+ cancelSort: 'Annuler le tri',
+ },
+ Modal: {
+ okText: 'OK',
+ cancelText: 'Annuler',
+ justOkText: 'OK',
+ },
+ Popconfirm: {
+ okText: 'OK',
+ cancelText: 'Annuler',
+ },
+ Transfer: {
+ searchPlaceholder: 'Rechercher',
+ itemUnit: 'élément',
+ itemsUnit: 'éléments',
+ },
+ Empty: {
+ description: 'Aucune donnée',
+ },
+ Upload: {
+ uploading: 'Téléchargement...',
+ removeFile: 'Effacer le fichier',
+ uploadError: 'Erreur de téléchargement',
+ previewFile: 'Fichier de prévisualisation',
+ downloadFile: 'Télécharger un fichier',
+ },
+ Text: {
+ edit: 'Éditer',
+ copy: 'Copier',
+ copied: 'Copie effectuée',
+ expand: 'Développer',
+ },
+ PageHeader: {
+ back: 'Retour',
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/fr_FR.ts b/components/locale/fr_FR.ts
deleted file mode 100644
index 169264562..000000000
--- a/components/locale/fr_FR.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import Pagination from '../vc-pagination/locale/fr_FR';
-import DatePicker from '../date-picker/locale/fr_FR';
-import TimePicker from '../time-picker/locale/fr_FR';
-import Calendar from '../calendar/locale/fr_FR';
-
-export default {
- locale: 'fr',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- Table: {
- filterTitle: 'Filtrer',
- filterConfirm: 'OK',
- filterReset: 'Réinitialiser',
- },
- Modal: {
- okText: 'OK',
- cancelText: 'Annuler',
- justOkText: 'OK',
- },
- Popconfirm: {
- okText: 'OK',
- cancelText: 'Annuler',
- },
- Transfer: {
- searchPlaceholder: 'Recherche',
- itemUnit: 'élément',
- itemsUnit: 'éléments',
- },
- Empty: {
- description: 'Aucune donnée',
- },
- Upload: {
- uploading: 'Téléchargement...',
- removeFile: 'Effacer le fichier',
- uploadError: 'Erreur de téléchargement',
- previewFile: 'Fichier de prévisualisation',
- downloadFile: 'Télécharger un fichier',
- },
- Text: {
- edit: 'éditer',
- copy: 'copier',
- copied: 'copie effectuée',
- expand: 'développer',
- },
-};
diff --git a/components/locale/fr_FR.tsx b/components/locale/fr_FR.tsx
new file mode 100644
index 000000000..340175351
--- /dev/null
+++ b/components/locale/fr_FR.tsx
@@ -0,0 +1,131 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/fr_FR';
+import DatePicker from '../date-picker/locale/fr_FR';
+import TimePicker from '../time-picker/locale/fr_FR';
+import Calendar from '../calendar/locale/fr_FR';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = "La valeur du champ ${label} n'est pas valide pour le type ${type}";
+
+const localeValues: Locale = {
+ locale: 'fr',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ Table: {
+ filterTitle: 'Filtrer',
+ filterConfirm: 'OK',
+ filterReset: 'Réinitialiser',
+ filterEmptyText: 'Aucun filtre',
+ emptyText: 'Aucune donnée',
+ selectAll: 'Sélectionner la page actuelle',
+ selectInvert: 'Inverser la sélection de la page actuelle',
+ selectNone: 'Désélectionner toutes les données',
+ selectionAll: 'Sélectionner toutes les données',
+ sortTitle: 'Trier',
+ expand: 'Développer la ligne',
+ collapse: 'Réduire la ligne',
+ triggerDesc: 'Trier par ordre décroissant',
+ triggerAsc: 'Trier par ordre croissant',
+ cancelSort: 'Annuler le tri',
+ },
+ Modal: {
+ okText: 'OK',
+ cancelText: 'Annuler',
+ justOkText: 'OK',
+ },
+ Popconfirm: {
+ okText: 'OK',
+ cancelText: 'Annuler',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'Rechercher',
+ itemUnit: 'élément',
+ itemsUnit: 'éléments',
+ remove: 'Désélectionner',
+ selectCurrent: 'Sélectionner la page actuelle',
+ removeCurrent: 'Désélectionner la page actuelle',
+ selectAll: 'Sélectionner toutes les données',
+ removeAll: 'Désélectionner toutes les données',
+ selectInvert: 'Inverser la sélection de la page actuelle',
+ },
+ Upload: {
+ uploading: 'Téléchargement...',
+ removeFile: 'Effacer le fichier',
+ uploadError: 'Erreur de téléchargement',
+ previewFile: 'Fichier de prévisualisation',
+ downloadFile: 'Télécharger un fichier',
+ },
+ Empty: {
+ description: 'Aucune donnée',
+ },
+ Icon: {
+ icon: 'icône',
+ },
+ Text: {
+ edit: 'Éditer',
+ copy: 'Copier',
+ copied: 'Copie effectuée',
+ expand: 'Développer',
+ },
+ PageHeader: {
+ back: 'Retour',
+ },
+ Form: {
+ optional: '(optionnel)',
+ defaultValidateMessages: {
+ default: 'Erreur de validation pour le champ ${label}',
+ required: 'Le champ ${label} est obligatoire',
+ enum: 'La valeur du champ ${label} doit être parmi [${enum}]',
+ whitespace: 'La valeur du champ ${label} ne peut pas être vide',
+ date: {
+ format: "La valeur du champ ${label} n'est pas au format date",
+ parse: 'La valeur du champ ${label} ne peut pas être convertie vers une date',
+ invalid: "La valeur du champ ${label} n'est pas une date valide",
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: 'La taille du champ ${label} doit être de ${len} caractères',
+ min: 'La taille du champ ${label} doit être au minimum de ${min} caractères',
+ max: 'La taille du champ ${label} doit être au maximum de ${max} caractères',
+ range: 'La taille du champ ${label} doit être entre ${min} et ${max} caractères',
+ },
+ number: {
+ len: 'La valeur du champ ${label} doit être égale à ${len}',
+ min: 'La valeur du champ ${label} doit être plus grande que ${min}',
+ max: 'La valeur du champ ${label} doit être plus petit que ${max}',
+ range: 'La valeur du champ ${label} doit être entre ${min} et ${max}',
+ },
+ array: {
+ len: 'La taille du tableau ${label} doit être de ${len}',
+ min: 'La taille du tableau ${label} doit être au minimum de ${min}',
+ max: 'La taille du tableau ${label} doit être au maximum de ${max}',
+ range: 'La taille du tableau ${label} doit être entre ${min}-${max}',
+ },
+ pattern: {
+ mismatch: 'La valeur du champ ${label} ne correspond pas au modèle ${pattern}',
+ },
+ },
+ },
+ Image: {
+ preview: 'Aperçu',
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/ga_IE.ts b/components/locale/ga_IE.ts
deleted file mode 100644
index 0911902d4..000000000
--- a/components/locale/ga_IE.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import Pagination from '../vc-pagination/locale/ga_IE';
-import DatePicker from '../date-picker/locale/ga_IE';
-import TimePicker from '../time-picker/locale/ga_IE';
-import Calendar from '../calendar/locale/ga_IE';
-
-export default {
- locale: 'ga_IE',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- Table: {
- filterTitle: 'Scagaire roghchlár',
- filterConfirm: 'Ceart go leor',
- filterReset: 'Athshocraigh',
- selectAll: 'Roghnaigh an leathanach reatha',
- selectInvert: 'Inbhéartaigh an leathanach reatha',
- },
- Modal: {
- okText: 'Ceart go leor',
- cancelText: 'Cealaigh',
- justOkText: 'Ceart go leor',
- },
- Popconfirm: {
- okText: 'Ceart go leor',
- cancelText: 'Cealaigh',
- },
- Transfer: {
- searchPlaceholder: 'Cuardaigh anseo',
- itemUnit: 'mír',
- itemsUnit: 'míreanna',
- },
- Upload: {
- uploading: 'Uaslódáil ...',
- removeFile: 'Bain comhad',
- uploadError: 'Earráid uaslódáil',
- previewFile: 'Comhad réamhamhairc',
- downloadFile: 'Íoslódáil an comhad',
- },
- Empty: {
- description: 'Gan aon sonraí',
- },
-};
diff --git a/components/locale/ga_IE.tsx b/components/locale/ga_IE.tsx
new file mode 100644
index 000000000..b1c35159c
--- /dev/null
+++ b/components/locale/ga_IE.tsx
@@ -0,0 +1,127 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/ga_IE';
+import DatePicker from '../date-picker/locale/ga_IE';
+import TimePicker from '../time-picker/locale/ga_IE';
+import Calendar from '../calendar/locale/ga_IE';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} is not a valid ${type}';
+
+const localeValues: Locale = {
+ locale: 'ga',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Please select',
+ },
+ Table: {
+ filterTitle: 'Filter menu',
+ filterConfirm: 'OK',
+ filterReset: 'Reset',
+ selectAll: 'Select current page',
+ selectInvert: 'Invert current page',
+ selectionAll: 'Select all data',
+ sortTitle: 'Sort',
+ expand: 'Expand row',
+ collapse: 'Collapse row',
+ triggerDesc: 'Click to sort descending',
+ triggerAsc: 'Click to sort ascending',
+ cancelSort: 'Click to cancel sorting',
+ },
+ Modal: {
+ okText: 'OK',
+ cancelText: 'Cancel',
+ justOkText: 'OK',
+ },
+ Popconfirm: {
+ okText: 'OK',
+ cancelText: 'Cancel',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'Search here',
+ itemUnit: 'item',
+ itemsUnit: 'items',
+ remove: 'Remove',
+ selectCurrent: 'Select current page',
+ removeCurrent: 'Remove current page',
+ selectAll: 'Select all data',
+ removeAll: 'Remove all data',
+ selectInvert: 'Invert current page',
+ },
+ Upload: {
+ uploading: 'Uploading...',
+ removeFile: 'Remove file',
+ uploadError: 'Upload error',
+ previewFile: 'Preview file',
+ downloadFile: 'Download file',
+ },
+ Empty: {
+ description: 'No Data',
+ },
+ Icon: {
+ icon: 'icon',
+ },
+ Text: {
+ edit: 'Edit',
+ copy: 'Copy',
+ copied: 'Copied',
+ expand: 'Expand',
+ },
+ PageHeader: {
+ back: 'Back',
+ },
+ Form: {
+ defaultValidateMessages: {
+ default: 'Field validation error for ${label}',
+ required: 'Please enter ${label}',
+ enum: '${label} must be one of [${enum}]',
+ whitespace: '${label} cannot be a blank character',
+ date: {
+ format: '${label} date format is invalid',
+ parse: '${label} cannot be converted to a date',
+ invalid: '${label} is an invalid date',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} must be ${len} characters',
+ min: '${label} must be at least ${min} characters',
+ max: '${label} must be up to ${max} characters',
+ range: '${label} must be between ${min}-${max} characters',
+ },
+ number: {
+ len: '${label} must be equal to ${len}',
+ min: '${label} must be minimum ${min}',
+ max: '${label} must be maximum ${max}',
+ range: '${label} must be between ${min}-${max}',
+ },
+ array: {
+ len: 'Must be ${len} ${label}',
+ min: 'At least ${min} ${label}',
+ max: 'At most ${max} ${label}',
+ range: 'The amount of ${label} must be between ${min}-${max}',
+ },
+ pattern: {
+ mismatch: '${label} does not match the pattern ${pattern}',
+ },
+ },
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/gl_ES.tsx b/components/locale/gl_ES.tsx
new file mode 100644
index 000000000..4c54b0787
--- /dev/null
+++ b/components/locale/gl_ES.tsx
@@ -0,0 +1,114 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/gl_ES';
+import DatePicker from '../date-picker/locale/gl_ES';
+import TimePicker from '../time-picker/locale/gl_ES';
+import Calendar from '../calendar/locale/gl_ES';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} non é un ${type} válido';
+
+const localeValues: Locale = {
+ locale: 'gl',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Escolla',
+ },
+ Table: {
+ filterTitle: 'Filtrar menú',
+ filterConfirm: 'Aceptar',
+ filterReset: 'Reiniciar',
+ selectAll: 'Seleccionar todo',
+ selectInvert: 'Invertir selección',
+ sortTitle: 'Ordenar',
+ },
+ Modal: {
+ okText: 'Aceptar',
+ cancelText: 'Cancelar',
+ justOkText: 'Aceptar',
+ },
+ Popconfirm: {
+ okText: 'Aceptar',
+ cancelText: 'Cancelar',
+ },
+ Transfer: {
+ searchPlaceholder: 'Buscar aquí',
+ itemUnit: 'elemento',
+ itemsUnit: 'elementos',
+ },
+ Upload: {
+ uploading: 'Subindo...',
+ removeFile: 'Eliminar arquivo',
+ uploadError: 'Error ao subir o arquivo',
+ previewFile: 'Vista previa',
+ downloadFile: 'Descargar arquivo',
+ },
+ Empty: {
+ description: 'Non hai datos',
+ },
+ Icon: {
+ icon: 'icona',
+ },
+ Text: {
+ edit: 'editar',
+ copy: 'copiar',
+ copied: 'copiado',
+ expand: 'expandir',
+ },
+ PageHeader: {
+ back: 'voltar',
+ },
+ Form: {
+ defaultValidateMessages: {
+ default: 'Error de validación do campo ${label}',
+ required: 'Por favor complete ${label}',
+ enum: '${label} ten que ser un de [${enum}]',
+ whitespace: '${label} non pode ter ningún caracter en branco',
+ date: {
+ format: 'O formato de data ${label} non é válido',
+ parse: '${label} non se pode convertir a unha data',
+ invalid: '${label} é unha data inválida',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} debe ter ${len} caracteres',
+ min: '${label} debe ter como mínimo ${min} caracteres',
+ max: '${label} debe ter ata ${max} caracteres',
+ range: '${label} debe ter entre ${min}-${max} caracteres',
+ },
+ number: {
+ len: '${label} debe ser igual a ${len}',
+ min: '${label} valor mínimo é ${min}',
+ max: '${label} valor máximo é ${max}',
+ range: '${label} debe estar entre ${min}-${max}',
+ },
+ array: {
+ len: 'Debe ser ${len} ${label}',
+ min: 'Como mínimo ${min} ${label}',
+ max: 'Como máximo ${max} ${label}',
+ range: 'O valor de ${label} debe estar entre ${min}-${max}',
+ },
+ pattern: {
+ mismatch: '${label} non coincide co patrón ${pattern}',
+ },
+ },
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/he_IL.ts b/components/locale/he_IL.ts
deleted file mode 100644
index 6df4736a8..000000000
--- a/components/locale/he_IL.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import Pagination from '../vc-pagination/locale/he_IL';
-import DatePicker from '../date-picker/locale/he_IL';
-import TimePicker from '../time-picker/locale/he_IL';
-import Calendar from '../calendar/locale/he_IL';
-
-export default {
- locale: 'he',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- Table: {
- filterTitle: 'תפריט סינון',
- filterConfirm: 'אישור',
- filterReset: 'איפוס',
- selectAll: 'בחר הכל',
- selectInvert: 'הפוך בחירה',
- },
- Modal: {
- okText: 'אישור',
- cancelText: 'ביטול',
- justOkText: 'אישור',
- },
- Popconfirm: {
- okText: 'אישור',
- cancelText: 'ביטול',
- },
- Transfer: {
- searchPlaceholder: 'חפש כאן',
- itemUnit: 'פריט',
- itemsUnit: 'פריטים',
- },
- Upload: {
- uploading: 'מעלה...',
- removeFile: 'הסר קובץ',
- uploadError: 'שגיאת העלאה',
- previewFile: 'הצג קובץ',
- downloadFile: 'הורד קובץ',
- },
- Empty: {
- description: 'אין מידע',
- },
-};
diff --git a/components/locale/he_IL.tsx b/components/locale/he_IL.tsx
new file mode 100644
index 000000000..0a305aabb
--- /dev/null
+++ b/components/locale/he_IL.tsx
@@ -0,0 +1,120 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/he_IL';
+import DatePicker from '../date-picker/locale/he_IL';
+import TimePicker from '../time-picker/locale/he_IL';
+import Calendar from '../calendar/locale/he_IL';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} הוא לא ${type} תקין';
+
+const localeValues: Locale = {
+ locale: 'he',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'אנא בחר',
+ },
+ Table: {
+ filterTitle: 'תפריט סינון',
+ filterConfirm: 'אישור',
+ filterReset: 'איפוס',
+ selectAll: 'בחר הכל',
+ selectInvert: 'הפוך בחירה',
+ selectionAll: 'בחר את כל הנתונים',
+ sortTitle: 'מיון',
+ expand: 'הרחב שורה',
+ collapse: 'צמצם שורהw',
+ triggerDesc: 'לחץ על מיון לפי סדר יורד',
+ triggerAsc: 'לחץ על מיון לפי סדר עולה',
+ cancelSort: 'לחץ כדי לבטל את המיון',
+ },
+ Modal: {
+ okText: 'אישור',
+ cancelText: 'ביטול',
+ justOkText: 'אישור',
+ },
+ Popconfirm: {
+ okText: 'אישור',
+ cancelText: 'ביטול',
+ },
+ Transfer: {
+ searchPlaceholder: 'חפש כאן',
+ itemUnit: 'פריט',
+ itemsUnit: 'פריטים',
+ },
+ Upload: {
+ uploading: 'מעלה...',
+ removeFile: 'הסר קובץ',
+ uploadError: 'שגיאת העלאה',
+ previewFile: 'הצג קובץ',
+ downloadFile: 'הורד קובץ',
+ },
+ Empty: {
+ description: 'אין מידע',
+ },
+ Icon: {
+ icon: 'סמל',
+ },
+ Text: {
+ edit: 'ערוך',
+ copy: 'העתק',
+ copied: 'הועתק',
+ expand: 'הרחב',
+ },
+ PageHeader: {
+ back: 'חזרה',
+ },
+ Form: {
+ defaultValidateMessages: {
+ default: 'ערך השדה שגוי ${label}',
+ required: 'בבקשה הזן ${label}',
+ enum: '${label} חייב להיות אחד מערכים אלו [${enum}]',
+ whitespace: '${label} לא יכול להיות ריק',
+ date: {
+ format: '${label} תאריך לא תקין',
+ parse: '${label} לא ניתן להמיר לתאריך',
+ invalid: '${label} הוא לא תאריך תקין',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} חייב להיות ${len} תווים',
+ min: '${label} חייב להיות ${min} תווים',
+ max: '${label} מקסימום ${max} תווים',
+ range: '${label} חייב להיות בין ${min}-${max} תווים',
+ },
+ number: {
+ len: '${label} חייב להיות שווה ל ${len}',
+ min: '${label} ערך מינימלי הוא ${min}',
+ max: '${label} ערך מקסימלי הוא ${max}',
+ range: '${label} חייב להיות בין ${min}-${max}',
+ },
+ array: {
+ len: 'חייב להיות ${len} ${label}',
+ min: 'מינימום ${min} ${label}',
+ max: 'מקסימום ${max} ${label}',
+ range: 'הסכום של ${label} חייב להיות בין ${min}-${max}',
+ },
+ pattern: {
+ mismatch: '${label} לא תואם לתבנית ${pattern}',
+ },
+ },
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/hi_IN.ts b/components/locale/hi_IN.ts
deleted file mode 100644
index e8b7510bf..000000000
--- a/components/locale/hi_IN.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import Pagination from '../vc-pagination/locale/hi_IN';
-import DatePicker from '../date-picker/locale/hi_IN';
-import TimePicker from '../time-picker/locale/hi_IN';
-import Calendar from '../calendar/locale/hi_IN';
-
-export default {
- locale: 'hi',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- // locales for all comoponents
- global: {
- placeholder: 'कृपया चुनें',
- },
- Table: {
- filterTitle: 'सूची बंद करें',
- filterConfirm: 'अच्छी तरह से',
- filterReset: 'रीसेट',
- emptyText: 'कोई जानकारी नहीं',
- selectAll: 'वर्तमान पृष्ठ का चयन करें',
- selectInvert: 'वर्तमान पृष्ठ घुमाएं',
- sortTitle: 'द्वारा क्रमबद्ध करें',
- },
- Modal: {
- okText: 'अच्छी तरह से',
- cancelText: 'रद्द करना',
- justOkText: 'अच्छी तरह से',
- },
- Popconfirm: {
- okText: 'अच्छी तरह से',
- cancelText: 'रद्द करना',
- },
- Transfer: {
- titles: ['', ''],
- notFoundContent: 'नहीं मिला',
- searchPlaceholder: 'यहां खोजें',
- itemUnit: 'तत्त्व',
- itemsUnit: 'विषय-वस्तु',
- },
- Select: {
- notFoundContent: 'नहीं मिला',
- },
- Upload: {
- uploading: 'अपलोडिंग...',
- removeFile: 'फ़ाइल निकालें',
- uploadError: 'अपलोड में त्रुटि',
- previewFile: 'फ़ाइल पूर्वावलोकन',
- downloadFile: 'फ़ाइल डाउनलोड करें',
- },
-};
diff --git a/components/locale/hi_IN.tsx b/components/locale/hi_IN.tsx
new file mode 100644
index 000000000..208abf836
--- /dev/null
+++ b/components/locale/hi_IN.tsx
@@ -0,0 +1,134 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/hi_IN';
+import DatePicker from '../date-picker/locale/hi_IN';
+import TimePicker from '../time-picker/locale/hi_IN';
+import Calendar from '../calendar/locale/hi_IN';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} मान्य ${type} नहीं है';
+
+const localeValues: Locale = {
+ locale: 'hi',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'कृपया चुनें',
+ },
+ Table: {
+ filterTitle: 'सूची बंद करें',
+ filterConfirm: 'अच्छी तरह से',
+ filterReset: 'रीसेट',
+ filterEmptyText: 'कोई फ़िल्टर नहीं',
+ emptyText: 'कोई जानकारी नहीं',
+ selectAll: 'वर्तमान पृष्ठ का चयन करें',
+ selectInvert: 'वर्तमान पृष्ठ घुमाएं',
+ selectNone: 'सभी डेटा साफ़ करें',
+ selectionAll: 'सभी डेटा का चयन करें',
+ sortTitle: 'द्वारा क्रमबद्ध करें',
+ expand: 'पंक्ति का विस्तार करें',
+ collapse: 'पंक्ति संक्षिप्त करें',
+ triggerDesc: 'अवरोही क्रमित करने के लिए क्लिक करें',
+ triggerAsc: 'आरोही क्रमित करने के लिए क्लिक करें',
+ cancelSort: 'छँटाई रद्द करने के लिए क्लिक करें',
+ },
+ Modal: {
+ okText: 'अच्छी तरह से',
+ cancelText: 'रद्द करना',
+ justOkText: 'अच्छी तरह से',
+ },
+ Popconfirm: {
+ okText: 'अच्छी तरह से',
+ cancelText: 'रद्द करना',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'यहां खोजें',
+ itemUnit: 'तत्त्व',
+ itemsUnit: 'विषय-वस्तु',
+ remove: 'हटाए',
+ selectCurrent: 'वर्तमान पृष्ठ का चयन करें',
+ removeCurrent: 'वर्तमान पृष्ठ हटाएं',
+ selectAll: 'सभी डेटा का चयन करें',
+ removeAll: 'सभी डेटा हटाएं',
+ selectInvert: 'वर्तमान पृष्ठ को उल्टा करें',
+ },
+ Upload: {
+ uploading: 'अपलोड हो रहा...',
+ removeFile: 'फ़ाइल निकालें',
+ uploadError: 'अपलोड में त्रुटि',
+ previewFile: 'फ़ाइल पूर्वावलोकन',
+ downloadFile: 'फ़ाइल डाउनलोड करें',
+ },
+ Empty: {
+ description: 'कोई आकड़ा उपलब्ध नहीं है',
+ },
+ Icon: {
+ icon: 'आइकन',
+ },
+ Text: {
+ edit: 'संपादित करें',
+ copy: 'प्रतिलिपि',
+ copied: 'कॉपी किया गया',
+ expand: 'विस्तार',
+ },
+ PageHeader: {
+ back: 'वापस',
+ },
+ Form: {
+ optional: '(ऐच्छिक)',
+ defaultValidateMessages: {
+ default: '${label} के लिए फील्ड सत्यापन त्रुटि',
+ required: 'कृपया ${label} दर्ज करें',
+ enum: '${label} [${enum}] में से एक होना चाहिए',
+ whitespace: '${label} एक खाली अक्षर नहीं हो सकता',
+ date: {
+ format: '${label} तिथि प्रारूप अमान्य है',
+ parse: '${label} को तारीख में नहीं बदला जा सकता',
+ invalid: '${label} एक अमान्य तिथि है',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} ${len} अक्षर का होना चाहिए',
+ min: '${label} कम से कम ${min} वर्णों का होना चाहिए',
+ max: '${label} अधिकतम ${max} वर्णों का होना चाहिए',
+ range: '${label} ${min}-${max} वर्णों के बीच होना चाहिए',
+ },
+ number: {
+ len: '${label} ${len} के बराबर होना चाहिए',
+ min: '${label} कम से कम ${min} होना चाहिए',
+ max: '${label} अधिकतम ${max} होना चाहिए',
+ range: '${label} ${min}-${max} के बीच होना चाहिए',
+ },
+ array: {
+ len: '${len} ${label} होना चाहिए',
+ min: 'कम से कम ${min} ${label}',
+ max: 'ज्यादा से ज्यादा ${max} ${label}',
+ range: '${label} की राशि ${min}-${max} के बीच होनी चाहिए',
+ },
+ pattern: {
+ mismatch: '${label} ${pattern} पैटर्न से मेल नहीं खाता',
+ },
+ },
+ },
+ Image: {
+ preview: 'पूर्वावलोकन',
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/hr_HR.ts b/components/locale/hr_HR.ts
deleted file mode 100644
index 8403cd456..000000000
--- a/components/locale/hr_HR.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import Pagination from '../vc-pagination/locale/hr_HR';
-import DatePicker from '../date-picker/locale/hr_HR';
-import TimePicker from '../time-picker/locale/hr_HR';
-import Calendar from '../calendar/locale/hr_HR';
-
-export default {
- locale: 'hr',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- global: {
- placeholder: 'Molimo označite',
- },
- Table: {
- filterTitle: 'Filter meni',
- filterConfirm: 'OK',
- filterReset: 'Reset',
- selectAll: 'Označi trenutnu stranicu',
- selectInvert: 'Invertiraj trenutnu stranicu',
- sortTitle: 'Sortiraj',
- },
- Modal: {
- okText: 'OK',
- cancelText: 'Odustani',
- justOkText: 'OK',
- },
- Popconfirm: {
- okText: 'OK',
- cancelText: 'Odustani',
- },
- Transfer: {
- titles: ['', ''],
- searchPlaceholder: 'Pretraži ovdje',
- itemUnit: 'stavka',
- itemsUnit: 'stavke',
- },
- Upload: {
- uploading: 'Upload u tijeku...',
- removeFile: 'Makni datoteku',
- uploadError: 'Greška kod uploada',
- previewFile: 'Pogledaj datoteku',
- downloadFile: 'Preuzmi datoteku',
- },
- Empty: {
- description: 'Nema podataka',
- },
- Icon: {
- icon: 'ikona',
- },
- Text: {
- edit: 'uredi',
- copy: 'kopiraj',
- copied: 'kopiranje uspješno',
- expand: 'proširi',
- },
-};
diff --git a/components/locale/hr_HR.tsx b/components/locale/hr_HR.tsx
new file mode 100644
index 000000000..d91aea4c8
--- /dev/null
+++ b/components/locale/hr_HR.tsx
@@ -0,0 +1,133 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/hr_HR';
+import DatePicker from '../date-picker/locale/hr_HR';
+import TimePicker from '../time-picker/locale/hr_HR';
+import Calendar from '../calendar/locale/hr_HR';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} nije valjan ${type}';
+
+const localeValues: Locale = {
+ locale: 'hr',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Molimo označite',
+ },
+ Table: {
+ filterTitle: 'Filter meni',
+ filterConfirm: 'OK',
+ filterReset: 'Reset',
+ filterEmptyText: 'Nema filtera',
+ emptyText: 'Nema podataka',
+ selectAll: 'Označi trenutnu stranicu',
+ selectInvert: 'Invertiraj trenutnu stranicu',
+ selectionAll: 'Odaberite sve podatke',
+ sortTitle: 'Sortiraj',
+ expand: 'Proširi redak',
+ collapse: 'Sažmi redak',
+ triggerDesc: 'Kliknite za sortiranje silazno',
+ triggerAsc: 'Kliknite za sortiranje uzlazno',
+ cancelSort: 'Kliknite da biste otkazali sortiranje',
+ },
+ Modal: {
+ okText: 'OK',
+ cancelText: 'Odustani',
+ justOkText: 'OK',
+ },
+ Popconfirm: {
+ okText: 'OK',
+ cancelText: 'Odustani',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'Pretraži ovdje',
+ itemUnit: 'stavka',
+ itemsUnit: 'stavke',
+ remove: 'Ukloniti',
+ selectCurrent: 'Odaberite trenutnu stranicu',
+ removeCurrent: 'Ukloni trenutnu stranicu',
+ selectAll: 'Odaberite sve podatke',
+ removeAll: 'Uklonite sve podatke',
+ selectInvert: 'Obrni trenutnu stranicu',
+ },
+ Upload: {
+ uploading: 'Upload u tijeku...',
+ removeFile: 'Makni datoteku',
+ uploadError: 'Greška kod uploada',
+ previewFile: 'Pogledaj datoteku',
+ downloadFile: 'Preuzmi datoteku',
+ },
+ Empty: {
+ description: 'Nema podataka',
+ },
+ Icon: {
+ icon: 'ikona',
+ },
+ Text: {
+ edit: 'Uredi',
+ copy: 'Kopiraj',
+ copied: 'Kopiranje uspješno',
+ expand: 'Proširi',
+ },
+ PageHeader: {
+ back: 'Natrag',
+ },
+ Form: {
+ optional: '(neobavezno)',
+ defaultValidateMessages: {
+ default: 'Pogreška provjere valjanosti polja za ${label}',
+ required: 'Molimo unesite ${label}',
+ enum: '${label} mora biti jedan od [${enum}]',
+ whitespace: '${label} ne može biti prazan znak',
+ date: {
+ format: '${label} format datuma je nevažeći',
+ parse: '${label} ne može se pretvoriti u datum',
+ invalid: '${label} je nevažeći datum',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} mora biti ${len} slova',
+ min: '${label} mora biti najmanje ${min} slova',
+ max: '${label} mora biti do ${max} slova',
+ range: '${label} mora biti između ${min}-${max} slova',
+ },
+ number: {
+ len: '${label} mora biti jednak ${len}',
+ min: '${label} mora biti minimalano ${min}',
+ max: '${label} mora biti maksimalano ${max}',
+ range: '${label} mora biti između ${min}-${max}',
+ },
+ array: {
+ len: 'Mora biti ${len} ${label}',
+ min: 'Najmanje ${min} ${label}',
+ max: 'Najviše ${max} ${label}',
+ range: 'Količina ${label} mora biti između ${min}-${max}',
+ },
+ pattern: {
+ mismatch: '${label} ne odgovara obrascu ${pattern}',
+ },
+ },
+ },
+ Image: {
+ preview: 'Pregled',
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/hu_HU.ts b/components/locale/hu_HU.tsx
similarity index 90%
rename from components/locale/hu_HU.ts
rename to components/locale/hu_HU.tsx
index 8e90608a4..290c5254f 100644
--- a/components/locale/hu_HU.ts
+++ b/components/locale/hu_HU.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/hu_HU';
import DatePicker from '../date-picker/locale/hu_HU';
import TimePicker from '../time-picker/locale/hu_HU';
import Calendar from '../calendar/locale/hu_HU';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'hu',
Pagination,
DatePicker,
@@ -42,3 +43,5 @@ export default {
description: 'Nincs adat',
},
};
+
+export default localeValues;
diff --git a/components/locale/hy_AM.ts b/components/locale/hy_AM.tsx
similarity index 92%
rename from components/locale/hy_AM.ts
rename to components/locale/hy_AM.tsx
index ee698cdda..a324b3c98 100644
--- a/components/locale/hy_AM.ts
+++ b/components/locale/hy_AM.tsx
@@ -1,5 +1,9 @@
-const datePickerLocale = {
+import type { Locale } from '../locale-provider';
+import type { PickerLocale } from '../date-picker/generatePicker';
+
+const datePickerLocale: PickerLocale = {
lang: {
+ locale: 'hy-am',
placeholder: 'Ընտրեք ամսաթիվը',
rangePlaceholder: ['Մեկնարկի ամսաթիվ', 'Ավարտի ամսաթիվը'],
today: 'Այսօր',
@@ -34,8 +38,8 @@ const datePickerLocale = {
},
};
-export default {
- locale: 'hy',
+const localeValues: Locale = {
+ locale: 'hy-am',
Pagination: {
// Options.jsx
items_per_page: '/ էջ',
@@ -107,3 +111,5 @@ export default {
back: 'Հետ',
},
};
+
+export default localeValues;
diff --git a/components/locale/id_ID.ts b/components/locale/id_ID.tsx
similarity index 90%
rename from components/locale/id_ID.ts
rename to components/locale/id_ID.tsx
index cc89bd93e..a389523b9 100644
--- a/components/locale/id_ID.ts
+++ b/components/locale/id_ID.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/id_ID';
import DatePicker from '../date-picker/locale/id_ID';
import TimePicker from '../time-picker/locale/id_ID';
import Calendar from '../calendar/locale/id_ID';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'id',
Pagination,
DatePicker,
@@ -43,3 +44,5 @@ export default {
description: 'Tidak ada data',
},
};
+
+export default localeValues;
diff --git a/components/locale/is_IS.ts b/components/locale/is_IS.tsx
similarity index 89%
rename from components/locale/is_IS.ts
rename to components/locale/is_IS.tsx
index 745e1ee91..356ace19f 100644
--- a/components/locale/is_IS.ts
+++ b/components/locale/is_IS.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/is_IS';
import DatePicker from '../date-picker/locale/is_IS';
import TimePicker from '../time-picker/locale/is_IS';
import Calendar from '../calendar/locale/is_IS';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'is',
Pagination,
DatePicker,
@@ -41,3 +42,5 @@ export default {
description: 'Engin gögn',
},
};
+
+export default localeValues;
diff --git a/components/locale/it_IT.ts b/components/locale/it_IT.tsx
similarity index 81%
rename from components/locale/it_IT.ts
rename to components/locale/it_IT.tsx
index 0843b9ff3..dc9531fd7 100644
--- a/components/locale/it_IT.ts
+++ b/components/locale/it_IT.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/it_IT';
import DatePicker from '../date-picker/locale/it_IT';
import TimePicker from '../time-picker/locale/it_IT';
import Calendar from '../calendar/locale/it_IT';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'it',
Pagination,
DatePicker,
@@ -19,6 +20,9 @@ export default {
selectAll: 'Seleziona pagina corrente',
selectInvert: 'Inverti selezione nella pagina corrente',
sortTitle: 'Ordina',
+ triggerDesc: 'Clicca per ordinare in modo discendente',
+ triggerAsc: 'Clicca per ordinare in modo ascendente',
+ cancelSort: 'Clicca per eliminare i filtri',
},
Modal: {
okText: 'OK',
@@ -54,3 +58,5 @@ export default {
expand: 'espandi',
},
};
+
+export default localeValues;
diff --git a/components/locale/ja_JP.ts b/components/locale/ja_JP.ts
deleted file mode 100644
index 49f64d647..000000000
--- a/components/locale/ja_JP.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import Pagination from '../vc-pagination/locale/ja_JP';
-import DatePicker from '../date-picker/locale/ja_JP';
-import TimePicker from '../time-picker/locale/ja_JP';
-import Calendar from '../calendar/locale/ja_JP';
-
-export default {
- locale: 'ja',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- Table: {
- filterTitle: 'メニューをフィルター',
- filterConfirm: 'OK',
- filterReset: 'リセット',
- selectAll: 'すべてを選択',
- selectInvert: '選択を反転',
- },
- Modal: {
- okText: 'OK',
- cancelText: 'キャンセル',
- justOkText: 'OK',
- },
- Popconfirm: {
- okText: 'OK',
- cancelText: 'キャンセル',
- },
- Transfer: {
- searchPlaceholder: 'ここを検索',
- itemUnit: 'アイテム',
- itemsUnit: 'アイテム',
- },
- Upload: {
- uploading: 'アップロード中...',
- removeFile: 'ファイルを削除',
- uploadError: 'アップロードエラー',
- previewFile: 'ファイルをプレビュー',
- downloadFile: 'ダウンロードファイル',
- },
- Empty: {
- description: 'データがありません',
- },
-};
diff --git a/components/locale/ja_JP.tsx b/components/locale/ja_JP.tsx
new file mode 100644
index 000000000..3627466ea
--- /dev/null
+++ b/components/locale/ja_JP.tsx
@@ -0,0 +1,106 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/ja_JP';
+import DatePicker from '../date-picker/locale/ja_JP';
+import TimePicker from '../time-picker/locale/ja_JP';
+import Calendar from '../calendar/locale/ja_JP';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label}は有効な${type}ではありません';
+
+const localeValues: Locale = {
+ locale: 'ja',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ Table: {
+ filterTitle: 'フィルター',
+ filterConfirm: 'OK',
+ filterReset: 'リセット',
+ filterEmptyText: 'フィルターなし',
+ selectAll: 'ページ単位で選択',
+ selectInvert: 'ページ単位で反転',
+ selectionAll: 'すべてを選択',
+ sortTitle: 'ソート',
+ expand: '展開する',
+ collapse: '折り畳む',
+ triggerDesc: 'クリックで降順にソート',
+ triggerAsc: 'クリックで昇順にソート',
+ cancelSort: 'ソートをキャンセル',
+ },
+ Modal: {
+ okText: 'OK',
+ cancelText: 'キャンセル',
+ justOkText: 'OK',
+ },
+ Popconfirm: {
+ okText: 'OK',
+ cancelText: 'キャンセル',
+ },
+ Transfer: {
+ searchPlaceholder: 'ここを検索',
+ itemUnit: 'アイテム',
+ itemsUnit: 'アイテム',
+ },
+ Upload: {
+ uploading: 'アップロード中...',
+ removeFile: 'ファイルを削除',
+ uploadError: 'アップロードエラー',
+ previewFile: 'ファイルをプレビュー',
+ downloadFile: 'ダウンロードファイル',
+ },
+ Empty: {
+ description: 'データがありません',
+ },
+ Form: {
+ defaultValidateMessages: {
+ default: '${label}のフィールド検証エラー',
+ required: '${label}を入力してください',
+ enum: '${label}は[${enum}]のいずれかである必要があります',
+ whitespace: '${label}は空白文字にすることはできません',
+ date: {
+ format: '${label}の日付形式は不正です',
+ parse: '${label}は日付に変換できません',
+ invalid: '${label}は不正な日付です',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label}は${len}文字である必要があります',
+ min: '${label}は${min}文字以上である必要があります',
+ max: '${label}は${max}文字以下である必要があります',
+ range: '${label}は${min}-${max}文字の範囲である必要があります',
+ },
+ number: {
+ len: '${label}は${len}と等しい必要があります',
+ min: '${label}の最小値は${min}です',
+ max: '${label}の最大値は${max}です',
+ range: '${label}は${min}-${max}の範囲である必要があります',
+ },
+ array: {
+ len: '${label}は${len}である必要があります',
+ min: '${label}の最小は${min}です',
+ max: '${label}の最大は${max}です',
+ range: '${label}の合計は${min}-${max}の範囲である必要があります',
+ },
+ pattern: {
+ mismatch: '${label}はパターン${pattern}と一致しません',
+ },
+ },
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/kk_KZ.tsx b/components/locale/kk_KZ.tsx
new file mode 100644
index 000000000..457a73237
--- /dev/null
+++ b/components/locale/kk_KZ.tsx
@@ -0,0 +1,129 @@
+/* eslint-disable no-template-curly-in-string */
+
+import Pagination from '../vc-pagination/locale/kk_KZ';
+import DatePicker from '../date-picker/locale/kk_KZ';
+import TimePicker from '../time-picker/locale/kk_KZ';
+import Calendar from '../calendar/locale/kk_KZ';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} ${type} типі емес';
+
+const localeValues: Locale = {
+ locale: 'kk',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Таңдаңыз',
+ },
+ Table: {
+ filterTitle: 'Фильтр',
+ filterConfirm: 'Ok',
+ filterReset: 'Тазарту',
+ filterEmptyText: 'Фильтр жоқ',
+ emptyText: 'Деректер жоқ',
+ selectAll: 'Барлығын таңдау',
+ selectInvert: 'Таңдауды төңкеру',
+ selectionAll: 'Барлық деректерді таңдаңыз',
+ sortTitle: 'Сұрыптау',
+ expand: 'Жолды жазу',
+ collapse: 'Жолды бүктеу',
+ triggerDesc: 'Төмендеуді сұрыптау үшін басыңыз',
+ triggerAsc: 'Өсу ретімен сұрыптау үшін басыңыз',
+ cancelSort: 'Сұрыптаудан бас тарту үшін басыңыз',
+ },
+ Modal: {
+ okText: 'Жарайды',
+ cancelText: 'Болдырмау',
+ justOkText: 'Жарайды',
+ },
+ Popconfirm: {
+ okText: 'Жарайды',
+ cancelText: 'Болдырмау',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'Іздеу',
+ itemUnit: 'элемент.',
+ itemsUnit: 'элемент.',
+ remove: 'Жою',
+ selectAll: 'Барлық деректерді таңдау',
+ selectCurrent: 'Ағымдағы бетті таңдау',
+ selectInvert: 'Кері тәртіпте көрсету',
+ removeAll: 'Барлық деректерді жою',
+ removeCurrent: 'Ағымдағы парақты өшіру',
+ },
+ Upload: {
+ uploading: 'Жүктеу...',
+ removeFile: 'Файлды жою',
+ uploadError: 'Жүктеу кезінде қате пайда болды',
+ previewFile: 'Файлды алдын ала қарау',
+ downloadFile: 'Файлды жүктеу',
+ },
+ Empty: {
+ description: 'Деректер жоқ',
+ },
+ Icon: {
+ icon: 'белгішесі',
+ },
+ Text: {
+ edit: 'Өңдеу',
+ copy: 'Көшіру',
+ copied: 'Көшірілді',
+ expand: 'Жазу',
+ },
+ PageHeader: {
+ back: 'Артқа',
+ },
+ Form: {
+ defaultValidateMessages: {
+ default: '${label} өрісін тексеру қателігі',
+ required: '${label} енгізіңіз',
+ enum: '${label} [${enum}] қатарынан болуы керек',
+ whitespace: '${label} бос болмауы керек',
+ date: {
+ format: '${label} жарамды күн форматы емес',
+ parse: '${label} күнге түрлендірілмейді',
+ invalid: '${label} жарамды күн емес',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} ${len} таңбадан тұруы керек',
+ min: '${label} ${min} таңбадан үлкен немесе оған тең болуы керек',
+ max: '${label} ${max} таңбадан кем немесе оған тең болуы керек',
+ range: '${label} ұзындығы ${min}-${max} таңба аралығында болуы керек',
+ },
+ number: {
+ len: '${label} ${len} тең болуы керек',
+ min: '${label} ${min} мәнінен үлкен немесе оған тең болуы керек',
+ max: '${label} ${max} мәнінен аз немесе оған тең болуы керек',
+ },
+ array: {
+ len: '${label} элементтерінің саны ${len} тең болуы керек',
+ min: '${label} элементтерінің саны ${min} көп немесе оған тең болуы керек',
+ max: '${label} элементтерінің саны ${max} аз немесе оған тең болуы керек',
+ range: '${label} элементтерінің саны ${min} - ${max} аралығында болуы керек',
+ },
+ pattern: {
+ mismatch: '${label} ${pattern} мен сәйкес келмейді',
+ },
+ },
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/ku_IQ.ts b/components/locale/kmr_IQ.tsx
old mode 100755
new mode 100644
similarity index 68%
rename from components/locale/ku_IQ.ts
rename to components/locale/kmr_IQ.tsx
index 72fbef498..18d878888
--- a/components/locale/ku_IQ.ts
+++ b/components/locale/kmr_IQ.tsx
@@ -1,10 +1,11 @@
-import Pagination from '../vc-pagination/locale/ku_IQ';
-import DatePicker from '../date-picker/locale/ku_IQ';
-import TimePicker from '../time-picker/locale/ku_IQ';
-import Calendar from '../calendar/locale/ku_IQ';
+import Pagination from '../vc-pagination/locale/kmr_IQ';
+import DatePicker from '../date-picker/locale/kmr_IQ';
+import TimePicker from '../time-picker/locale/kmr_IQ';
+import Calendar from '../calendar/locale/kmr_IQ';
+import type { Locale } from '../locale-provider';
-export default {
- locale: 'ku-iq',
+const localeValues: Locale = {
+ locale: 'ku',
Pagination,
DatePicker,
TimePicker,
@@ -41,3 +42,5 @@ export default {
description: 'Agahî tune',
},
};
+
+export default localeValues;
diff --git a/components/locale/kn_IN.ts b/components/locale/kn_IN.tsx
similarity index 93%
rename from components/locale/kn_IN.ts
rename to components/locale/kn_IN.tsx
index 26308eb41..157432094 100644
--- a/components/locale/kn_IN.ts
+++ b/components/locale/kn_IN.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/kn_IN';
import DatePicker from '../date-picker/locale/kn_IN';
import TimePicker from '../time-picker/locale/kn_IN';
import Calendar from '../calendar/locale/kn_IN';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'kn',
Pagination,
DatePicker,
@@ -49,3 +50,5 @@ export default {
downloadFile: 'ಫೈಲ್ ಡೌನ್ಲೋಡ್ ಮಾಡಿ',
},
};
+
+export default localeValues;
diff --git a/components/locale/ko_KR.ts b/components/locale/ko_KR.ts
deleted file mode 100644
index f0de0736c..000000000
--- a/components/locale/ko_KR.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import Pagination from '../vc-pagination/locale/ko_KR';
-import DatePicker from '../date-picker/locale/ko_KR';
-import TimePicker from '../time-picker/locale/ko_KR';
-import Calendar from '../calendar/locale/ko_KR';
-
-export default {
- locale: 'ko',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- Table: {
- filterTitle: '필터 메뉴',
- filterConfirm: '확인',
- filterReset: '초기화',
- selectAll: '모두 선택',
- selectInvert: '선택 반전',
- },
- Modal: {
- okText: '확인',
- cancelText: '취소',
- justOkText: '확인',
- },
- Popconfirm: {
- okText: '확인',
- cancelText: '취소',
- },
- Transfer: {
- searchPlaceholder: '여기에 검색하세요',
- itemUnit: '개',
- itemsUnit: '개',
- },
- Upload: {
- uploading: '업로드 중...',
- removeFile: '파일 삭제',
- uploadError: '업로드 실패',
- previewFile: '파일 미리보기',
- downloadFile: '파일 다운로드',
- },
- Empty: {
- description: '데이터 없음',
- },
-};
diff --git a/components/locale/ko_KR.tsx b/components/locale/ko_KR.tsx
new file mode 100644
index 000000000..a1b1eb3ac
--- /dev/null
+++ b/components/locale/ko_KR.tsx
@@ -0,0 +1,100 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/ko_KR';
+import DatePicker from '../date-picker/locale/ko_KR';
+import TimePicker from '../time-picker/locale/ko_KR';
+import Calendar from '../calendar/locale/ko_KR';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} 유효하지 않은 ${type}';
+
+const localeValues: Locale = {
+ locale: 'ko',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ Table: {
+ filterTitle: '필터 메뉴',
+ filterConfirm: '확인',
+ filterReset: '초기화',
+ filterEmptyText: '필터 없음',
+ emptyText: '데이터 없음',
+ selectAll: '모두 선택',
+ selectInvert: '선택 반전',
+ },
+ Modal: {
+ okText: '확인',
+ cancelText: '취소',
+ justOkText: '확인',
+ },
+ Popconfirm: {
+ okText: '확인',
+ cancelText: '취소',
+ },
+ Transfer: {
+ searchPlaceholder: '여기에 검색하세요',
+ itemUnit: '개',
+ itemsUnit: '개',
+ },
+ Upload: {
+ uploading: '업로드 중...',
+ removeFile: '파일 삭제',
+ uploadError: '업로드 실패',
+ previewFile: '파일 미리보기',
+ downloadFile: '파일 다운로드',
+ },
+ Empty: {
+ description: '데이터 없음',
+ },
+ Form: {
+ defaultValidateMessages: {
+ default: '필드 유효성 검사 요류 ${label}',
+ required: '${label} 입력해 주세요',
+ enum: '${label} [${enum}] 중에 하나여야 합니다',
+ whitespace: '${label} 비워둘 수 없습니다',
+ date: {
+ format: '${label} 유효하지 않은 날짜 형식입니다',
+ parse: '${label} 날짜 형식으로 변환될 수 없습니다',
+ invalid: '${label} 유효하지 않은 날짜입니다',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} ${len}글자여야 합니다',
+ min: '${label} 적어도 ${min}글자 이상이어야 합니다',
+ max: '${label} ${max}글자 이하여야 합니다',
+ range: '${label} ${min}-${max}글자 사이어야 합니다',
+ },
+ number: {
+ len: '${label} 값은 ${len}이어야 합니다',
+ min: '${label} 최솟값은 ${min}입니다',
+ max: '${label} 최댓값은 ${max}입니다',
+ range: '${label} 값은 ${min}-${max} 사이어야 합니다',
+ },
+ array: {
+ len: '${len}이어야 합니다 ${label} ',
+ min: '최소 ${min}이어야 합니다 ${label}',
+ max: '최대 ${max}이어야 합니다 ${label}',
+ range: '${label} ${min}-${max} 사이어야 합니다',
+ },
+ pattern: {
+ mismatch: '${label} ${pattern} 패턴과 일치하지 않습니다',
+ },
+ },
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/ku_IQ.tsx b/components/locale/ku_IQ.tsx
new file mode 100755
index 000000000..3dc4d7e7d
--- /dev/null
+++ b/components/locale/ku_IQ.tsx
@@ -0,0 +1,50 @@
+import Pagination from '../vc-pagination/locale/kmr_IQ';
+import DatePicker from '../date-picker/locale/kmr_IQ';
+import TimePicker from '../time-picker/locale/kmr_IQ';
+import Calendar from '../calendar/locale/kmr_IQ';
+import type { Locale } from '../locale-provider';
+
+// please use antd/lib/locale/kmr_IQ instead
+// keep this file for compatibility
+// https://github.com/ant-design/ant-design/issues/25778
+
+const localeValues: Locale = {
+ locale: 'ku-iq',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ Table: {
+ filterTitle: 'Menuê peldanka',
+ filterConfirm: 'Temam',
+ filterReset: 'Jê bibe',
+ selectAll: 'Hemî hilbijêre',
+ selectInvert: 'Hilbijartinan veguhere',
+ },
+ Modal: {
+ okText: 'Temam',
+ cancelText: 'Betal ke',
+ justOkText: 'Temam',
+ },
+ Popconfirm: {
+ okText: 'Temam',
+ cancelText: 'Betal ke',
+ },
+ Transfer: {
+ searchPlaceholder: 'Lêgerîn',
+ itemUnit: 'tişt',
+ itemsUnit: 'tişt',
+ },
+ Upload: {
+ uploading: 'Bardike...',
+ removeFile: 'Pelê rabike',
+ uploadError: 'Xeta barkirine',
+ previewFile: 'Pelê pêşbibîne',
+ downloadFile: 'Pelê dakêşin',
+ },
+ Empty: {
+ description: 'Agahî tune',
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/ku_KU.ts b/components/locale/ku_KU.ts
deleted file mode 100644
index 22d2ad61e..000000000
--- a/components/locale/ku_KU.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import Pagination from '../vc-pagination/locale/ku_KU';
-import DatePicker from '../date-picker/locale/ku_KU';
-import TimePicker from '../time-picker/locale/ku_KU';
-import Calendar from '../calendar/locale/ku_KU';
-
-export default {
- locale: 'ku-ku',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- Table: {
- filterTitle: 'مێنوی پاڵاوتن',
- filterConfirm: 'پشتڕاستکردنەوە',
- filterReset: 'پاک کردن',
- selectAll: 'هەڵبژاردنی هەموو',
- selectInvert: 'هەڵبژزاردنی پێچەوانە',
- },
- Modal: {
- okText: 'باشە',
- cancelText: 'پاشگەزبونەوە',
- justOkText: 'باشە',
- },
- Popconfirm: {
- okText: 'باشە',
- cancelText: 'پاشگەزبونەوە',
- },
- Transfer: {
- searchPlaceholder: 'گەڕان',
- itemUnit: 'یەکە',
- itemsUnit: 'یەکە',
- },
- Upload: {
- uploading: 'بارکردن...',
- removeFile: 'پاککردنی فایل',
- uploadError: 'هەڵەی بارکردن',
- previewFile: 'پیشاندانی فایل',
- downloadFile: 'وەرگرتنی فایل',
- },
- Empty: {
- description: 'هیچ زانیاریەک نیە',
- },
-};
diff --git a/components/locale/lt_LT.tsx b/components/locale/lt_LT.tsx
new file mode 100644
index 000000000..2dd991ab6
--- /dev/null
+++ b/components/locale/lt_LT.tsx
@@ -0,0 +1,126 @@
+/* eslint-disable no-template-curly-in-string */
+
+import Pagination from '../vc-pagination/locale/lt_LT';
+import DatePicker from '../date-picker/locale/lt_LT';
+import TimePicker from '../time-picker/locale/lt_LT';
+import Calendar from '../calendar/locale/lt_LT';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} не является типом ${type}';
+
+const localeValues: Locale = {
+ locale: 'lt',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ Table: {
+ filterTitle: 'Filtras',
+ filterConfirm: 'Gerai',
+ filterReset: 'Atstatyti',
+ filterEmptyText: 'Be filtrų',
+ emptyText: 'Nėra duomenų',
+ selectAll: 'Pasirinkti viską',
+ selectInvert: 'Apversti pasirinkimą',
+ selectionAll: 'Rinktis visus',
+ sortTitle: 'Rikiavimas',
+ expand: 'Išskleisti',
+ collapse: 'Suskleisti',
+ triggerDesc: 'Spustelėkite norėdami rūšiuoti mažėjančia tvarka',
+ triggerAsc: 'Spustelėkite norėdami rūšiuoti didėjančia tvarka',
+ cancelSort: 'Spustelėkite, kad atšauktumėte rūšiavimą',
+ },
+ Modal: {
+ okText: 'Taip',
+ cancelText: 'Atšaukti',
+ justOkText: 'Gerai',
+ },
+ Popconfirm: {
+ okText: 'Taip',
+ cancelText: 'Atšaukti',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'Paieška',
+ itemUnit: 'vnt.',
+ itemsUnit: 'vnt.',
+ remove: 'Pašalinti',
+ selectAll: 'Pasirinkti visus',
+ selectCurrent: 'Pasirinkite dabartinį puslapį',
+ selectInvert: 'Atkeist pasirinkimą',
+ removeAll: 'Ištrinti visus duomenis',
+ removeCurrent: 'Ištrinti dabartinį puslapį',
+ },
+ Upload: {
+ uploading: 'Gaunami duomenys...',
+ removeFile: 'Ištrinti failą',
+ uploadError: 'Įkeliant įvyko klaida',
+ previewFile: 'Failo peržiūra',
+ downloadFile: 'Įkelti failą',
+ },
+ Empty: {
+ description: 'Nėra duomenų',
+ },
+ Icon: {
+ icon: 'piktograma',
+ },
+ Text: {
+ edit: 'Redaguoti',
+ copy: 'Kopijuoti',
+ copied: 'Nukopijuota',
+ expand: 'Plačiau',
+ },
+ PageHeader: {
+ back: 'Atgal',
+ },
+ Form: {
+ defaultValidateMessages: {
+ default: 'Laukelio klaida ${label}',
+ required: 'Prašome įvesti ${label}',
+ enum: '${label} turėtu būti vienas iš [${enum}]',
+ whitespace: '${label} negali likti tuščiu',
+ date: {
+ format: '${label} neteisingas datos formatas',
+ parse: '${label} negali būti konvertuotas į datą',
+ invalid: '${label} neatitinka datos formato',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} turi būti ${len} simbolių',
+ min: '${label} turi būti ilgesnis nei ${min} simbolių',
+ max: '${label} turi būti ne trumpesnis ${max} simbolių',
+ range: 'Lauko ${label} reikšmės ribos ${min}-${max} simbolių',
+ },
+ number: {
+ len: '${label} turi būti lygi ${len}',
+ min: '${label} turi būti lygus arba didesnis ${min}',
+ max: '${label} turi būti lygus arba mažesnis ${max}',
+ },
+ array: {
+ len: 'Pasirinktas kiekis ${label} turi būti lygus ${len}',
+ min: 'Pasirinktas kiekis ${label} turi būti lygus arba didesnis ${min}',
+ max: 'Pasirinktas kiekis ${label} turi būti lygus arba mažesnis ${max}',
+ range: 'Pasirinktas kiekis ${label} turi būti tarp ${min} и ${max}',
+ },
+ pattern: {
+ mismatch: '${label} neatitinka modelio ${pattern}',
+ },
+ },
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/lv_LV.ts b/components/locale/lv_LV.tsx
similarity index 90%
rename from components/locale/lv_LV.ts
rename to components/locale/lv_LV.tsx
index 20e1fa5cd..f175bd611 100644
--- a/components/locale/lv_LV.ts
+++ b/components/locale/lv_LV.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/lv_LV';
import DatePicker from '../date-picker/locale/lv_LV';
import TimePicker from '../time-picker/locale/lv_LV';
import Calendar from '../calendar/locale/lv_LV';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'lv',
Pagination,
DatePicker,
@@ -41,3 +42,5 @@ export default {
description: 'Nav datu',
},
};
+
+export default localeValues;
diff --git a/components/locale/mk_MK.ts b/components/locale/mk_MK.tsx
similarity index 92%
rename from components/locale/mk_MK.ts
rename to components/locale/mk_MK.tsx
index b42cfd79a..6110ddda6 100644
--- a/components/locale/mk_MK.ts
+++ b/components/locale/mk_MK.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/mk_MK';
import DatePicker from '../date-picker/locale/mk_MK';
import TimePicker from '../time-picker/locale/mk_MK';
import Calendar from '../calendar/locale/mk_MK';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'mk',
Pagination,
DatePicker,
@@ -56,3 +57,5 @@ export default {
back: 'Назад',
},
};
+
+export default localeValues;
diff --git a/components/locale/mn_MN.ts b/components/locale/mn_MN.tsx
similarity index 90%
rename from components/locale/mn_MN.ts
rename to components/locale/mn_MN.tsx
index 2f3a31b26..748ec1a30 100644
--- a/components/locale/mn_MN.ts
+++ b/components/locale/mn_MN.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/mn_MN';
import DatePicker from '../date-picker/locale/mn_MN';
import TimePicker from '../time-picker/locale/mn_MN';
import Calendar from '../calendar/locale/mn_MN';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'mn-mn',
Pagination,
DatePicker,
@@ -41,3 +42,5 @@ export default {
description: 'Мэдээлэл байхгүй байна',
},
};
+
+export default localeValues;
diff --git a/components/locale/ms_MY.ts b/components/locale/ms_MY.tsx
similarity index 92%
rename from components/locale/ms_MY.ts
rename to components/locale/ms_MY.tsx
index 9a42b1e83..c301c923d 100644
--- a/components/locale/ms_MY.ts
+++ b/components/locale/ms_MY.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/ms_MY';
import DatePicker from '../date-picker/locale/ms_MY';
import TimePicker from '../time-picker/locale/ms_MY';
import Calendar from '../calendar/locale/ms_MY';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'ms-my',
Pagination,
DatePicker,
@@ -61,3 +62,5 @@ export default {
downloadFile: 'Muat turun fail',
},
};
+
+export default localeValues;
diff --git a/components/locale/nb_NO.ts b/components/locale/nb_NO.ts
deleted file mode 100644
index 83d246625..000000000
--- a/components/locale/nb_NO.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import Pagination from '../vc-pagination/locale/nb_NO';
-import DatePicker from '../date-picker/locale/nb_NO';
-import TimePicker from '../time-picker/locale/nb_NO';
-import Calendar from '../calendar/locale/nb_NO';
-
-export default {
- locale: 'nb',
- DatePicker,
- TimePicker,
- Calendar,
- Pagination,
- Table: {
- filterTitle: 'Filtermeny',
- filterConfirm: 'OK',
- filterReset: 'Nullstill',
- selectAll: 'Velg alle',
- selectInvert: 'Inverter valg',
- },
- Modal: {
- okText: 'OK',
- cancelText: 'Avbryt',
- justOkText: 'OK',
- },
- Popconfirm: {
- okText: 'OK',
- cancelText: 'Avbryt',
- },
- Transfer: {
- searchPlaceholder: 'Søk her',
- itemUnit: 'element',
- itemsUnit: 'elementer',
- },
- Upload: {
- uploading: 'Laster opp...',
- removeFile: 'Fjern fil',
- uploadError: 'Feil ved opplastning',
- previewFile: 'Forhåndsvisning',
- downloadFile: 'Last ned fil',
- },
- Empty: {
- description: 'Ingen data',
- },
-};
diff --git a/components/locale/nb_NO.tsx b/components/locale/nb_NO.tsx
new file mode 100644
index 000000000..fb90879ac
--- /dev/null
+++ b/components/locale/nb_NO.tsx
@@ -0,0 +1,128 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/nb_NO';
+import DatePicker from '../date-picker/locale/nb_NO';
+import TimePicker from '../time-picker/locale/nb_NO';
+import Calendar from '../calendar/locale/nb_NO';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} er ikke et gyldig ${type}';
+
+const localeValues: Locale = {
+ locale: 'nb',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Vennligst velg',
+ },
+ Table: {
+ filterTitle: 'Filtermeny',
+ filterConfirm: 'OK',
+ filterReset: 'Nullstill',
+ filterEmptyText: 'Ingen filtre',
+ selectAll: 'Velg alle',
+ selectInvert: 'Inverter gjeldende side',
+ selectionAll: 'Velg all data',
+ sortTitle: 'Sorter',
+ expand: 'Utvid rad',
+ collapse: 'Skjul rad',
+ triggerDesc: 'Sorter data i synkende rekkefølge',
+ triggerAsc: 'Sorterer data i stigende rekkefølge',
+ cancelSort: 'Klikk for å avbryte sorteringen',
+ },
+ Modal: {
+ okText: 'OK',
+ cancelText: 'Avbryt',
+ justOkText: 'OK',
+ },
+ Popconfirm: {
+ okText: 'OK',
+ cancelText: 'Avbryt',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'Søk her',
+ itemUnit: 'element',
+ itemsUnit: 'elementer',
+ remove: 'Fjern',
+ selectCurrent: 'Velg gjeldende side',
+ removeCurrent: 'Fjern gjeldende side',
+ selectAll: 'Velg all data',
+ removeAll: 'Fjern all data',
+ selectInvert: 'Inverter gjeldende side',
+ },
+ Upload: {
+ uploading: 'Laster opp...',
+ removeFile: 'Fjern fil',
+ uploadError: 'Feil ved opplastning',
+ previewFile: 'Forhåndsvisning',
+ downloadFile: 'Last ned fil',
+ },
+ Empty: {
+ description: 'Ingen data',
+ },
+ Icon: {
+ icon: 'ikon',
+ },
+ Text: {
+ edit: 'Rediger',
+ copy: 'Kopier',
+ copied: 'Kopiert',
+ expand: 'Utvid',
+ },
+ PageHeader: {
+ back: 'Tilbake',
+ },
+ Form: {
+ defaultValidateMessages: {
+ default: 'Feltvalideringsfeil ${label}',
+ required: 'Vennligst skriv inn ${label}',
+ enum: '${label} må være en av [${enum}]',
+ whitespace: '${label} kan ikke være et blankt tegn',
+ date: {
+ format: '${label} datoformatet er ugyldig',
+ parse: '${label} kan ikke konverteres til en dato',
+ invalid: '${label} er en ugyldig dato',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} må være ${len} tegn',
+ min: '${label} må minst ha ${min} tegn',
+ max: '${label} opp til ${max} tegn',
+ range: '${label} må være mellom ${min}-${max} tegn',
+ },
+ number: {
+ len: '${label} må være lik ${len}',
+ min: '${label} minimumsverdien er ${min}',
+ max: '${label} maksimumsverdien er ${max}',
+ range: '${label} må være mellom ${min}-${max}',
+ },
+ array: {
+ len: 'Må være ${len} ${label}',
+ min: 'Må være minst ${min} ${label}',
+ max: 'På det meste ${max} ${label}',
+ range: 'Totalt av ${label} må være mellom ${min}-${max}',
+ },
+ pattern: {
+ mismatch: '${label} stemmer ikke overens med mønsteret ${pattern}',
+ },
+ },
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/ne_NP.ts b/components/locale/ne_NP.tsx
similarity index 92%
rename from components/locale/ne_NP.ts
rename to components/locale/ne_NP.tsx
index bedd096e6..a7553e074 100644
--- a/components/locale/ne_NP.ts
+++ b/components/locale/ne_NP.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/en_US';
import DatePicker from '../date-picker/locale/en_US';
import TimePicker from '../time-picker/locale/en_US';
import Calendar from '../calendar/locale/en_US';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'ne-np',
Pagination,
DatePicker,
@@ -42,3 +43,5 @@ export default {
description: 'डाटा छैन',
},
};
+
+export default localeValues;
diff --git a/components/locale/nl_BE.ts b/components/locale/nl_BE.ts
deleted file mode 100644
index cc2d5c825..000000000
--- a/components/locale/nl_BE.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import Pagination from '../vc-pagination/locale/nl_BE';
-import DatePicker from '../date-picker/locale/nl_BE';
-import TimePicker from '../time-picker/locale/nl_BE';
-import Calendar from '../calendar/locale/nl_BE';
-
-export default {
- locale: 'nl-be',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- Table: {
- filterTitle: 'FilterMenu',
- filterConfirm: 'OK',
- filterReset: 'Reset',
- selectAll: 'Selecteer huidige pagina',
- selectInvert: 'Selecteer huidige pagina',
- },
- Modal: {
- okText: 'OK',
- cancelText: 'Annuleer',
- justOkText: 'OK',
- },
- Popconfirm: {
- okText: 'OK',
- cancelText: 'Annuleer',
- },
- Transfer: {
- searchPlaceholder: 'Zoek hier',
- itemUnit: 'item',
- itemsUnit: 'items',
- },
- Upload: {
- uploading: 'Uploaden...',
- removeFile: 'Bestand verwijderen',
- uploadError: 'Upload fout',
- previewFile: 'Preview bestand',
- downloadFile: 'Download bestand',
- },
- Empty: {
- description: 'Geen gegevens',
- },
-};
diff --git a/components/locale/nl_BE.tsx b/components/locale/nl_BE.tsx
new file mode 100644
index 000000000..0172a9aa5
--- /dev/null
+++ b/components/locale/nl_BE.tsx
@@ -0,0 +1,134 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/nl_BE';
+import DatePicker from '../date-picker/locale/nl_BE';
+import TimePicker from '../time-picker/locale/nl_BE';
+import Calendar from '../calendar/locale/nl_BE';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} is geen geldige ${type}';
+
+const localeValues: Locale = {
+ locale: 'nl-be',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Maak een selectie',
+ },
+ Table: {
+ cancelSort: 'Klik om sortering te annuleren',
+ collapse: 'Rij inklappen',
+ emptyText: 'Geen data',
+ expand: 'Rij uitklappen',
+ filterConfirm: 'OK',
+ filterEmptyText: 'Geen filters',
+ filterReset: 'Reset',
+ filterTitle: 'Filteren',
+ selectAll: 'Selecteer huidige pagina',
+ selectInvert: 'Keer volgorde om',
+ selectNone: 'Maak selectie leeg',
+ selectionAll: 'Selecteer alle data',
+ sortTitle: 'Sorteren',
+ triggerAsc: 'Klik om oplopend te sorteren',
+ triggerDesc: 'Klik om aflopend te sorteren',
+ },
+ Modal: {
+ okText: 'OK',
+ cancelText: 'Annuleer',
+ justOkText: 'OK',
+ },
+ Popconfirm: {
+ okText: 'OK',
+ cancelText: 'Annuleer',
+ },
+ Transfer: {
+ itemUnit: 'item',
+ itemsUnit: 'items',
+ remove: 'Verwijder',
+ removeAll: 'Verwijder alles',
+ removeCurrent: 'Verwijder huidige pagina',
+ searchPlaceholder: 'Zoek hier',
+ selectAll: 'Selecteer alles',
+ selectCurrent: 'Selecteer huidige pagina',
+ selectInvert: 'Huidige pagina omkeren',
+ titles: ['', ''],
+ },
+ Upload: {
+ downloadFile: 'Bestand downloaden',
+ previewFile: 'Preview file',
+ removeFile: 'Verwijder bestand',
+ uploadError: 'Fout tijdens uploaden',
+ uploading: 'Uploaden...',
+ },
+ Empty: {
+ description: 'Geen gegevens',
+ },
+ Icon: {
+ icon: 'icoon',
+ },
+ Text: {
+ edit: 'Bewerken',
+ copy: 'kopiëren',
+ copied: 'Gekopieerd',
+ expand: 'Uitklappen',
+ },
+ PageHeader: {
+ back: 'Terug',
+ },
+ Form: {
+ optional: '(optioneel)',
+ defaultValidateMessages: {
+ default: 'Validatiefout voor ${label}',
+ required: 'Gelieve ${label} in te vullen',
+ enum: '${label} moet één van [${enum}] zijn',
+ whitespace: '${label} mag geen blanco teken zijn',
+ date: {
+ format: '${label} heeft een ongeldig formaat',
+ parse: '${label} kan niet naar een datum omgezet worden',
+ invalid: '${label} is een ongeldige datum',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} moet ${len} karakters lang zijn',
+ min: '${label} moet minimaal ${min} karakters lang zijn',
+ max: '${label} mag maximaal ${max} karakters lang zijn',
+ range: '${label} moet tussen ${min}-${max} karakters lang zijn',
+ },
+ number: {
+ len: '${label} moet gelijk zijn aan ${len}',
+ min: '${label} moet minimaal ${min} zijn',
+ max: '${label} mag maximaal ${max} zijn',
+ range: '${label} moet tussen ${min}-${max} liggen',
+ },
+ array: {
+ len: 'Moeten ${len} ${label} zijn',
+ min: 'Minimaal ${min} ${label}',
+ max: 'maximaal ${max} ${label}',
+ range: 'Het aantal ${label} moet tussen ${min}-${max} liggen',
+ },
+ pattern: {
+ mismatch: '${label} komt niet overeen met het patroon ${pattern}',
+ },
+ },
+ },
+ Image: {
+ preview: 'Voorbeeld',
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/nl_NL.ts b/components/locale/nl_NL.ts
deleted file mode 100644
index 773d5068a..000000000
--- a/components/locale/nl_NL.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import Pagination from '../vc-pagination/locale/nl_NL';
-import DatePicker from '../date-picker/locale/nl_NL';
-import TimePicker from '../time-picker/locale/nl_NL';
-import Calendar from '../calendar/locale/nl_NL';
-
-export default {
- locale: 'nl',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- global: {
- placeholder: 'Maak een selectie',
- },
- Table: {
- filterTitle: 'Filteren',
- filterConfirm: 'OK',
- filterReset: 'Reset',
- selectAll: 'Selecteer huidige pagina',
- selectInvert: 'Deselecteer huidige pagina',
- sortTitle: 'Sorteren',
- expand: 'Rij uitklappen',
- collapse: 'Rij inklappen',
- },
- Modal: {
- okText: 'OK',
- cancelText: 'Annuleren',
- justOkText: 'OK',
- },
- Popconfirm: {
- okText: 'OK',
- cancelText: 'Annuleren',
- },
- Transfer: {
- titles: ['', ''],
- searchPlaceholder: 'Zoeken',
- itemUnit: 'item',
- itemsUnit: 'items',
- },
- Upload: {
- uploading: 'Uploaden...',
- removeFile: 'Verwijder bestand',
- uploadError: 'Fout tijdens uploaden',
- previewFile: 'Bekijk bestand',
- downloadFile: 'Downloaden bestand',
- },
- Empty: {
- description: 'Geen gegevens',
- },
- Icon: {
- icon: 'icoon',
- },
- Text: {
- edit: 'Bewerken',
- copy: 'Kopieren',
- copied: 'Gekopieerd',
- expand: 'Uitklappen',
- },
- PageHeader: {
- back: 'Terug',
- },
-};
diff --git a/components/locale/nl_NL.tsx b/components/locale/nl_NL.tsx
new file mode 100644
index 000000000..64d261b61
--- /dev/null
+++ b/components/locale/nl_NL.tsx
@@ -0,0 +1,134 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/nl_NL';
+import DatePicker from '../date-picker/locale/nl_NL';
+import TimePicker from '../time-picker/locale/nl_NL';
+import Calendar from '../calendar/locale/nl_NL';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} is geen geldige ${type}';
+
+const localeValues: Locale = {
+ locale: 'nl',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Maak een selectie',
+ },
+ Table: {
+ cancelSort: 'Klik om sortering te annuleren',
+ collapse: 'Rij inklappen',
+ emptyText: 'Geen data',
+ expand: 'Rij uitklappen',
+ filterConfirm: 'OK',
+ filterEmptyText: 'Geen filters',
+ filterReset: 'Reset',
+ filterTitle: 'Filteren',
+ selectAll: 'Selecteer huidige pagina',
+ selectInvert: 'Keer volgorde om',
+ selectNone: 'Maak selectie leeg',
+ selectionAll: 'Selecteer alle data',
+ sortTitle: 'Sorteren',
+ triggerAsc: 'Klik om oplopend te sorteren',
+ triggerDesc: 'Klik om aflopend te sorteren',
+ },
+ Modal: {
+ okText: 'OK',
+ cancelText: 'Annuleer',
+ justOkText: 'OK',
+ },
+ Popconfirm: {
+ okText: 'OK',
+ cancelText: 'Annuleer',
+ },
+ Transfer: {
+ itemUnit: 'item',
+ itemsUnit: 'items',
+ remove: 'Verwijder',
+ removeAll: 'Verwijder alles',
+ removeCurrent: 'Verwijder huidige pagina',
+ searchPlaceholder: 'Zoek hier',
+ selectAll: 'Selecteer alles',
+ selectCurrent: 'Selecteer huidige pagina',
+ selectInvert: 'Huidige pagina omkeren',
+ titles: ['', ''],
+ },
+ Upload: {
+ downloadFile: 'Bestand downloaden',
+ previewFile: 'Preview file',
+ removeFile: 'Verwijder bestand',
+ uploadError: 'Fout tijdens uploaden',
+ uploading: 'Uploaden...',
+ },
+ Empty: {
+ description: 'Geen gegevens',
+ },
+ Icon: {
+ icon: 'icoon',
+ },
+ Text: {
+ edit: 'Bewerken',
+ copy: 'kopiëren',
+ copied: 'Gekopieerd',
+ expand: 'Uitklappen',
+ },
+ PageHeader: {
+ back: 'Terug',
+ },
+ Form: {
+ optional: '(optioneel)',
+ defaultValidateMessages: {
+ default: 'Validatiefout voor ${label}',
+ required: 'Gelieve ${label} in te vullen',
+ enum: '${label} moet één van [${enum}] zijn',
+ whitespace: '${label} mag geen blanco teken zijn',
+ date: {
+ format: '${label} heeft een ongeldig formaat',
+ parse: '${label} kan niet naar een datum omgezet worden',
+ invalid: '${label} is een ongeldige datum',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} moet ${len} karakters lang zijn',
+ min: '${label} moet minimaal ${min} karakters lang zijn',
+ max: '${label} mag maximaal ${max} karakters lang zijn',
+ range: '${label} moet tussen ${min}-${max} karakters lang zijn',
+ },
+ number: {
+ len: '${label} moet gelijk zijn aan ${len}',
+ min: '${label} moet minimaal ${min} zijn',
+ max: '${label} mag maximaal ${max} zijn',
+ range: '${label} moet tussen ${min}-${max} liggen',
+ },
+ array: {
+ len: 'Moeten ${len} ${label} zijn',
+ min: 'Minimaal ${min} ${label}',
+ max: 'maximaal ${max} ${label}',
+ range: 'Het aantal ${label} moet tussen ${min}-${max} liggen',
+ },
+ pattern: {
+ mismatch: '${label} komt niet overeen met het patroon ${pattern}',
+ },
+ },
+ },
+ Image: {
+ preview: 'Voorbeeld',
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/pl_PL.ts b/components/locale/pl_PL.tsx
similarity index 81%
rename from components/locale/pl_PL.ts
rename to components/locale/pl_PL.tsx
index c5da9e9ba..278326df8 100644
--- a/components/locale/pl_PL.ts
+++ b/components/locale/pl_PL.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/pl_PL';
import DatePicker from '../date-picker/locale/pl_PL';
import TimePicker from '../time-picker/locale/pl_PL';
import Calendar from '../calendar/locale/pl_PL';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'pl',
Pagination,
DatePicker,
@@ -15,6 +16,9 @@ export default {
filterReset: 'Wyczyść',
selectAll: 'Zaznacz bieżącą stronę',
selectInvert: 'Odwróć zaznaczenie',
+ triggerDesc: 'Sortuj malejąco',
+ triggerAsc: 'Sortuj rosnąco',
+ cancelSort: 'Usuń sortowanie',
},
Modal: {
okText: 'OK',
@@ -41,3 +45,5 @@ export default {
description: 'Brak danych',
},
};
+
+export default localeValues;
diff --git a/components/locale/pt_BR.ts b/components/locale/pt_BR.ts
deleted file mode 100644
index c50b9283a..000000000
--- a/components/locale/pt_BR.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import Pagination from '../vc-pagination/locale/pt_BR';
-import DatePicker from '../date-picker/locale/pt_BR';
-import TimePicker from '../time-picker/locale/pt_BR';
-import Calendar from '../calendar/locale/pt_BR';
-
-export default {
- locale: 'pt-br',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- Table: {
- filterTitle: 'Filtro',
- filterConfirm: 'OK',
- filterReset: 'Resetar',
- selectAll: 'Selecionar página atual',
- selectInvert: 'Inverter seleção',
- },
- Modal: {
- okText: 'OK',
- cancelText: 'Cancelar',
- justOkText: 'OK',
- },
- Popconfirm: {
- okText: 'OK',
- cancelText: 'Cancelar',
- },
- Transfer: {
- searchPlaceholder: 'Procurar',
- itemUnit: 'item',
- itemsUnit: 'items',
- },
- Upload: {
- uploading: 'Enviando...',
- removeFile: 'Remover arquivo',
- uploadError: 'Erro no envio',
- previewFile: 'Visualizar arquivo',
- downloadFile: 'Baixar arquivo',
- },
- Empty: {
- description: 'Não há dados',
- },
- Text: {
- edit: 'editar',
- copy: 'copiar',
- copied: 'copiado',
- expand: 'expandir',
- },
-};
diff --git a/components/locale/pt_BR.tsx b/components/locale/pt_BR.tsx
new file mode 100644
index 000000000..ec779f0cb
--- /dev/null
+++ b/components/locale/pt_BR.tsx
@@ -0,0 +1,134 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/pt_BR';
+import DatePicker from '../date-picker/locale/pt_BR';
+import TimePicker from '../time-picker/locale/pt_BR';
+import Calendar from '../calendar/locale/pt_BR';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} não é um ${type} válido';
+
+const localeValues: Locale = {
+ locale: 'pt-br',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Por favor escolha',
+ },
+ Table: {
+ filterTitle: 'Menu de Filtro',
+ filterConfirm: 'OK',
+ filterReset: 'Resetar',
+ filterEmptyText: 'Sem filtros',
+ emptyText: 'Sem conteúdo',
+ selectAll: 'Selecionar página atual',
+ selectInvert: 'Inverter seleção',
+ selectNone: 'Apagar todo o conteúdo',
+ selectionAll: 'Selecionar todo o conteúdo',
+ sortTitle: 'Ordenar título',
+ expand: 'Expandir linha',
+ collapse: 'Colapsar linha',
+ triggerDesc: 'Clique organiza por descendente',
+ triggerAsc: 'Clique organiza por ascendente',
+ cancelSort: 'Clique para cancelar organização',
+ },
+ Modal: {
+ okText: 'OK',
+ cancelText: 'Cancelar',
+ justOkText: 'OK',
+ },
+ Popconfirm: {
+ okText: 'OK',
+ cancelText: 'Cancelar',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'Procurar',
+ itemUnit: 'item',
+ itemsUnit: 'items',
+ remove: 'Remover',
+ selectCurrent: 'Selecionar página atual',
+ removeCurrent: 'Remover página atual',
+ selectAll: 'Selecionar todos',
+ removeAll: 'Remover todos',
+ selectInvert: 'Inverter seleção atual',
+ },
+ Upload: {
+ uploading: 'Enviando...',
+ removeFile: 'Remover arquivo',
+ uploadError: 'Erro no envio',
+ previewFile: 'Visualizar arquivo',
+ downloadFile: 'Baixar arquivo',
+ },
+ Empty: {
+ description: 'Não há dados',
+ },
+ Icon: {
+ icon: 'ícone',
+ },
+ Text: {
+ edit: 'editar',
+ copy: 'copiar',
+ copied: 'copiado',
+ expand: 'expandir',
+ },
+ PageHeader: {
+ back: 'Retornar',
+ },
+ Form: {
+ optional: '(opcional)',
+ defaultValidateMessages: {
+ default: 'Erro ${label} na validação de campo',
+ required: 'Por favor, insira ${label}',
+ enum: '${label} deve ser um dos seguinte: [${enum}]',
+ whitespace: '${label} não pode ser um carácter vazio',
+ date: {
+ format: ' O formato de data ${label} é inválido',
+ parse: '${label} não pode ser convertido para uma data',
+ invalid: '${label} é uma data inválida',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} deve possuir ${len} caracteres',
+ min: '${label} deve possuir ao menos ${min} caracteres',
+ max: '${label} deve possuir no máximo ${max} caracteres',
+ range: '${label} deve possuir entre ${min} e ${max} caracteres',
+ },
+ number: {
+ len: '${label} deve ser igual à ${len}',
+ min: 'O valor mínimo de ${label} é ${min}',
+ max: 'O valor máximo de ${label} é ${max}',
+ range: '${label} deve estar entre ${min} e ${max}',
+ },
+ array: {
+ len: 'Deve ser ${len} ${label}',
+ min: 'No mínimo ${min} ${label}',
+ max: 'No máximo ${max} ${label}',
+ range: 'A quantidade de ${label} deve estar entre ${min} e ${max}',
+ },
+ pattern: {
+ mismatch: '${label} não se encaixa no padrão ${pattern}',
+ },
+ },
+ },
+ Image: {
+ preview: 'Pré-visualização',
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/pt_PT.ts b/components/locale/pt_PT.tsx
similarity index 89%
rename from components/locale/pt_PT.ts
rename to components/locale/pt_PT.tsx
index 89deec39b..a91bf0a8a 100644
--- a/components/locale/pt_PT.ts
+++ b/components/locale/pt_PT.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/pt_PT';
import DatePicker from '../date-picker/locale/pt_PT';
import TimePicker from '../time-picker/locale/pt_PT';
import Calendar from '../calendar/locale/pt_PT';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'pt',
Pagination,
DatePicker,
@@ -42,3 +43,5 @@ export default {
description: 'Sem resultados',
},
};
+
+export default localeValues;
diff --git a/components/locale/ro_RO.ts b/components/locale/ro_RO.ts
deleted file mode 100644
index eec391c0e..000000000
--- a/components/locale/ro_RO.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import Pagination from '../vc-pagination/locale/ro_RO';
-import DatePicker from '../date-picker/locale/ro_RO';
-import TimePicker from '../time-picker/locale/ro_RO';
-import Calendar from '../calendar/locale/ro_RO';
-
-export default {
- locale: 'ro',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- global: {
- placeholder: 'Selectează',
- },
- Table: {
- filterTitle: 'Filtrează',
- filterConfirm: 'OK',
- filterReset: 'Resetează',
- selectAll: 'Selectează pagina curentă',
- selectInvert: 'Inversează pagina curentă',
- sortTitle: 'Ordonează',
- expand: 'Extinde rândul',
- collapse: 'Micșorează rândul',
- },
- Modal: {
- okText: 'OK',
- cancelText: 'Anulare',
- justOkText: 'OK',
- },
- Popconfirm: {
- okText: 'OK',
- cancelText: 'Anulare',
- },
- Transfer: {
- titles: ['', ''],
- searchPlaceholder: 'Căutare',
- itemUnit: 'element',
- itemsUnit: 'elemente',
- },
- Upload: {
- uploading: 'Se transferă...',
- removeFile: 'Înlătură fișierul',
- uploadError: 'Eroare la upload',
- previewFile: 'Previzualizare fișier',
- downloadFile: 'Descărcare fișier',
- },
- Empty: {
- description: 'Fără date',
- },
- Icon: {
- icon: 'icon',
- },
- Text: {
- edit: 'editează',
- copy: 'copiază',
- copied: 'copiat',
- expand: 'extinde',
- },
- PageHeader: {
- back: 'înapoi',
- },
-};
diff --git a/components/locale/ro_RO.tsx b/components/locale/ro_RO.tsx
new file mode 100644
index 000000000..281207a81
--- /dev/null
+++ b/components/locale/ro_RO.tsx
@@ -0,0 +1,134 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/ro_RO';
+import DatePicker from '../date-picker/locale/ro_RO';
+import TimePicker from '../time-picker/locale/ro_RO';
+import Calendar from '../calendar/locale/ro_RO';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} nu conține tipul corect (${type})';
+
+const localeValues: Locale = {
+ locale: 'ro',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Selectează',
+ },
+ Table: {
+ filterTitle: 'Filtrează',
+ filterConfirm: 'OK',
+ filterReset: 'Resetează',
+ filterEmptyText: 'Fără filtre',
+ emptyText: 'Nu există date',
+ selectAll: 'Selectează pagina curentă',
+ selectInvert: 'Inversează pagina curentă',
+ selectNone: 'Șterge selecția',
+ selectionAll: 'Selectează toate datele',
+ sortTitle: 'Ordonează',
+ expand: 'Extinde rândul',
+ collapse: 'Micșorează rândul',
+ triggerDesc: 'Apasă pentru ordonare descrescătoare',
+ triggerAsc: 'Apasă pentru ordonare crescătoare',
+ cancelSort: 'Apasă pentru a anula ordonarea',
+ },
+ Modal: {
+ okText: 'OK',
+ cancelText: 'Anulare',
+ justOkText: 'OK',
+ },
+ Popconfirm: {
+ okText: 'OK',
+ cancelText: 'Anulare',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'Căutare',
+ itemUnit: 'element',
+ itemsUnit: 'elemente',
+ remove: 'Șterge',
+ selectCurrent: 'Selectează pagina curentă',
+ removeCurrent: 'Șterge pagina curentă',
+ selectAll: 'Selectează toate datele',
+ removeAll: 'Șterge toate datele',
+ selectInvert: 'Inversează pagina curentă',
+ },
+ Upload: {
+ uploading: 'Se transferă...',
+ removeFile: 'Înlătură fișierul',
+ uploadError: 'Eroare la upload',
+ previewFile: 'Previzualizare fișier',
+ downloadFile: 'Descărcare fișier',
+ },
+ Empty: {
+ description: 'Fără date',
+ },
+ Icon: {
+ icon: 'icon',
+ },
+ Text: {
+ edit: 'editează',
+ copy: 'copiază',
+ copied: 'copiat',
+ expand: 'extinde',
+ },
+ PageHeader: {
+ back: 'înapoi',
+ },
+ Form: {
+ optional: '(opțional)',
+ defaultValidateMessages: {
+ default: 'Eroare la validarea câmpului ${label}',
+ required: 'Vă rugăm introduceți ${label}',
+ enum: '${label} trebuie să fie una din valorile [${enum}]',
+ whitespace: '${label} nu poate fi gol',
+ date: {
+ format: '${label} - data nu este în formatul corect',
+ parse: '${label} nu poate fi convertit la o dată',
+ invalid: '${label} este o dată invalidă',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} trebuie să conțină ${len} caractere',
+ min: '${label} trebuie să conțină cel puțin ${min} caractere',
+ max: '${label} trebuie să conțină cel mult ${max} caractere',
+ range: '${label} trebuie să conțină între ${min}-${max} caractere',
+ },
+ number: {
+ len: '${label} trebuie să conțină ${len} cifre',
+ min: '${label} trebuie să fie minim ${min}',
+ max: '${label} trebuie să fie maxim ${max}',
+ range: '${label} trebuie să fie între ${min}-${max}',
+ },
+ array: {
+ len: '${label} trebuie să conțină ${len} elemente',
+ min: '${label} trebuie să conțină cel puțin ${min} elemente',
+ max: '${label} trebuie să conțină cel mult ${max} elemente',
+ range: '${label} trebuie să conțină între ${min}-${max} elemente',
+ },
+ pattern: {
+ mismatch: '${label} nu respectă șablonul ${pattern}',
+ },
+ },
+ },
+ Image: {
+ preview: 'Preview',
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/ru_RU.ts b/components/locale/ru_RU.ts
deleted file mode 100644
index 451235a23..000000000
--- a/components/locale/ru_RU.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import Pagination from '../vc-pagination/locale/ru_RU';
-import DatePicker from '../date-picker/locale/ru_RU';
-import TimePicker from '../time-picker/locale/ru_RU';
-import Calendar from '../calendar/locale/ru_RU';
-
-export default {
- locale: 'ru',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- Table: {
- filterTitle: 'Фильтр',
- filterConfirm: 'OK',
- filterReset: 'Сбросить',
- selectAll: 'Выбрать всё',
- selectInvert: 'Инвертировать выбор',
- sortTitle: 'Сортировка',
- },
- Modal: {
- okText: 'OK',
- cancelText: 'Отмена',
- justOkText: 'OK',
- },
- Popconfirm: {
- okText: 'OK',
- cancelText: 'Отмена',
- },
- Transfer: {
- searchPlaceholder: 'Поиск',
- itemUnit: 'элем.',
- itemsUnit: 'элем.',
- },
- Upload: {
- uploading: 'Загрузка...',
- removeFile: 'Удалить файл',
- uploadError: 'При загрузке произошла ошибка',
- previewFile: 'Предпросмотр файла',
- downloadFile: 'Загрузить файл',
- },
- Empty: {
- description: 'Нет данных',
- },
- Text: {
- edit: 'редактировать',
- copy: 'копировать',
- copied: 'скопировано',
- expand: 'раскрыть',
- },
- PageHeader: {
- back: 'назад',
- },
-};
diff --git a/components/locale/ru_RU.tsx b/components/locale/ru_RU.tsx
new file mode 100644
index 000000000..d57964fe5
--- /dev/null
+++ b/components/locale/ru_RU.tsx
@@ -0,0 +1,132 @@
+/* eslint-disable no-template-curly-in-string */
+
+import Pagination from '../vc-pagination/locale/ru_RU';
+import DatePicker from '../date-picker/locale/ru_RU';
+import TimePicker from '../time-picker/locale/ru_RU';
+import Calendar from '../calendar/locale/ru_RU';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} не является типом ${type}';
+
+const localeValues: Locale = {
+ locale: 'ru',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Пожалуйста выберите',
+ },
+ Table: {
+ filterTitle: 'Фильтр',
+ filterConfirm: 'OK',
+ filterReset: 'Сбросить',
+ filterEmptyText: 'Без фильтров',
+ emptyText: 'Нет данных',
+ selectAll: 'Выбрать всё',
+ selectInvert: 'Инвертировать выбор',
+ selectionAll: 'Выбрать все данные',
+ sortTitle: 'Сортировка',
+ expand: 'Развернуть строку',
+ collapse: 'Свернуть строку',
+ triggerDesc: 'Нажмите для сортировки по убыванию',
+ triggerAsc: 'Нажмите для сортировки по возрастанию',
+ cancelSort: 'Нажмите, чтобы отменить сортировку',
+ },
+ Modal: {
+ okText: 'OK',
+ cancelText: 'Отмена',
+ justOkText: 'OK',
+ },
+ Popconfirm: {
+ okText: 'OK',
+ cancelText: 'Отмена',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'Поиск',
+ itemUnit: 'элем.',
+ itemsUnit: 'элем.',
+ remove: 'Удалить',
+ selectAll: 'Выбрать все данные',
+ selectCurrent: 'Выбрать текущую страницу',
+ selectInvert: 'Показать в обратном порядке',
+ removeAll: 'Удалить все данные',
+ removeCurrent: 'Удалить текущую страницу',
+ },
+ Upload: {
+ uploading: 'Загрузка...',
+ removeFile: 'Удалить файл',
+ uploadError: 'При загрузке произошла ошибка',
+ previewFile: 'Предпросмотр файла',
+ downloadFile: 'Загрузить файл',
+ },
+ Empty: {
+ description: 'Нет данных',
+ },
+ Icon: {
+ icon: 'иконка',
+ },
+ Text: {
+ edit: 'Редактировать',
+ copy: 'Копировать',
+ copied: 'Скопировано',
+ expand: 'Раскрыть',
+ },
+ PageHeader: {
+ back: 'Назад',
+ },
+ Form: {
+ defaultValidateMessages: {
+ default: 'Ошибка проверки поля ${label}',
+ required: 'Пожалуйста, введите ${label}',
+ enum: '${label} должен быть одним из [${enum}]',
+ whitespace: '${label} не может быть пустым',
+ date: {
+ format: '${label} не правильный формат даты',
+ parse: '${label} не может быть преобразовано в дату',
+ invalid: '${label} не является корректной датой',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} должна быть ${len} символов',
+ min: '${label} должна быть больше или равна ${min} символов',
+ max: '${label} должна быть меньше или равна ${max} символов',
+ range: 'Длина ${label} должна быть между ${min}-${max} символами',
+ },
+ number: {
+ len: '${label} должна быть равна ${len}',
+ min: '${label} должна быть больше или равна ${min}',
+ max: '${label} должна быть меньше или равна ${max}',
+ },
+ array: {
+ len: 'Количество элементов ${label} должно быть равно ${len}',
+ min: 'Количество элементов ${label} должно быть больше или равно ${min}',
+ max: 'Количество элементов ${label} должно быть меньше или равно ${max}',
+ range: 'Количество элементов ${label} должно быть между ${min} и ${max}',
+ },
+ pattern: {
+ mismatch: '${label} не соответствует шаблону ${pattern}',
+ },
+ },
+ },
+ Image: {
+ preview: 'Превью',
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/sk_SK.ts b/components/locale/sk_SK.tsx
similarity index 92%
rename from components/locale/sk_SK.ts
rename to components/locale/sk_SK.tsx
index fd3e67226..3d7aee58b 100644
--- a/components/locale/sk_SK.ts
+++ b/components/locale/sk_SK.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/sk_SK';
import DatePicker from '../date-picker/locale/sk_SK';
import TimePicker from '../time-picker/locale/sk_SK';
import Calendar from '../calendar/locale/sk_SK';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'sk',
Pagination,
DatePicker,
@@ -60,3 +61,5 @@ export default {
back: 'Späť',
},
};
+
+export default localeValues;
diff --git a/components/locale/sl_SI.ts b/components/locale/sl_SI.tsx
similarity index 90%
rename from components/locale/sl_SI.ts
rename to components/locale/sl_SI.tsx
index afbbde48c..b651af612 100644
--- a/components/locale/sl_SI.ts
+++ b/components/locale/sl_SI.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/sl_SI';
import DatePicker from '../date-picker/locale/sl_SI';
import TimePicker from '../time-picker/locale/sl_SI';
import Calendar from '../calendar/locale/sl_SI';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'sl',
Pagination,
DatePicker,
@@ -41,3 +42,5 @@ export default {
description: 'Ni podatkov',
},
};
+
+export default localeValues;
diff --git a/components/locale/sr_RS.ts b/components/locale/sr_RS.ts
deleted file mode 100644
index 0cdda61b0..000000000
--- a/components/locale/sr_RS.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import Pagination from '../vc-pagination/locale/sr_RS';
-import DatePicker from '../date-picker/locale/sr_RS';
-import TimePicker from '../time-picker/locale/sr_RS';
-import Calendar from '../calendar/locale/sr_RS';
-
-export default {
- locale: 'sr',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- Table: {
- filterTitle: 'Filter',
- filterConfirm: 'Primeni filter',
- filterReset: 'Resetuj filter',
- selectAll: 'Obeleži sve na trenutnoj strani',
- selectInvert: 'Obrni selekciju na trenutnoj stranici',
- },
- Modal: {
- okText: 'U redu',
- cancelText: 'Otkaži',
- justOkText: 'U redu',
- },
- Popconfirm: {
- okText: 'U redu',
- cancelText: 'Otkaži',
- },
- Transfer: {
- searchPlaceholder: 'Pretražite ovde',
- itemUnit: 'stavka',
- itemsUnit: 'stavki',
- },
- Upload: {
- uploading: 'Slanje...',
- removeFile: 'Ukloni fajl',
- uploadError: 'Greška prilikom slanja',
- previewFile: 'Pogledaj fajl',
- downloadFile: 'Preuzmi datoteku',
- },
- Empty: {
- description: 'Nema podataka',
- },
-};
diff --git a/components/locale/sr_RS.tsx b/components/locale/sr_RS.tsx
new file mode 100644
index 000000000..715f2dfa5
--- /dev/null
+++ b/components/locale/sr_RS.tsx
@@ -0,0 +1,134 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/sr_RS';
+import DatePicker from '../date-picker/locale/sr_RS';
+import TimePicker from '../time-picker/locale/sr_RS';
+import Calendar from '../calendar/locale/sr_RS';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} nije važeći ${type}';
+
+const localeValues: Locale = {
+ locale: 'sr',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Izaberi',
+ },
+ Table: {
+ filterTitle: 'Meni filtera',
+ filterConfirm: 'U redu',
+ filterReset: 'Poništi',
+ filterEmptyText: 'Nema filtera',
+ emptyText: 'Nema podataka',
+ selectAll: 'Izaberi trenutnu stranicu',
+ selectInvert: 'Obrni izbor trenutne stranice',
+ selectNone: 'Obriši sve podatke',
+ selectionAll: 'Izaberi sve podatke',
+ sortTitle: 'Sortiraj',
+ expand: 'Proširi red',
+ collapse: 'Skupi red',
+ triggerDesc: 'Klikni da sortiraš po padajućem redosledu',
+ triggerAsc: 'Klikni da sortiraš po rastućem redosledu',
+ cancelSort: 'Klikni da otkažeš sortiranje',
+ },
+ Modal: {
+ okText: 'U redu',
+ cancelText: 'Otkaži',
+ justOkText: 'U redu',
+ },
+ Popconfirm: {
+ okText: 'U redu',
+ cancelText: 'Otkaži',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'Pretraži ovde',
+ itemUnit: 'stavka',
+ itemsUnit: 'stavki',
+ remove: 'Ukloni',
+ selectCurrent: 'Izaberi trenutnu stranicu',
+ removeCurrent: 'Ukloni trenutnu stranicu',
+ selectAll: 'Izaberi sve podatke',
+ removeAll: 'Ukloni sve podatke',
+ selectInvert: 'Obrni izbor trenutne stranice',
+ },
+ Upload: {
+ uploading: 'Otpremanje...',
+ removeFile: 'Ukloni datoteku',
+ uploadError: 'Greška pri otpremanju',
+ previewFile: 'Pregledaj datoteku',
+ downloadFile: 'Preuzmi datoteku',
+ },
+ Empty: {
+ description: 'Nema podataka',
+ },
+ Icon: {
+ icon: 'ikona',
+ },
+ Text: {
+ edit: 'Uredi',
+ copy: 'Kopiraj',
+ copied: 'Kopirano',
+ expand: 'Proširi',
+ },
+ PageHeader: {
+ back: 'Nazad',
+ },
+ Form: {
+ optional: '(opcionalno)',
+ defaultValidateMessages: {
+ default: 'Greška pri proveri valjanosti za ${label}',
+ required: 'Unesi ${label}',
+ enum: '${label} mora da bude nešto od [${enum}]',
+ whitespace: '${label} ne može biti prazan znak',
+ date: {
+ format: '${label} format datuma je nevažeći',
+ parse: '${label} se ne može konvertovati u datum',
+ invalid: '${label} je nevažeći datum',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} mora da sadrži ${len} znakova',
+ min: '${label} mora da sadrži bar ${min} znakova',
+ max: '${label} mora da sadrži do ${max} znakova',
+ range: '${label} mora da sadrži između ${min} i ${max} znakova',
+ },
+ number: {
+ len: '${label} mora biti jednak ${len}',
+ min: '${label} mora biti najmanje ${min}',
+ max: '${label} mora biti najviše ${max}',
+ range: '${label} mora biti između ${min} i ${max}',
+ },
+ array: {
+ len: 'Mora biti ${len} ${label}',
+ min: 'Najmanje ${min} ${label}',
+ max: 'najviše ${max} ${label}',
+ range: 'Iznos ${label} mora biti između ${min} i ${max}',
+ },
+ pattern: {
+ mismatch: '${label} ne odgovara obrascu ${pattern}',
+ },
+ },
+ },
+ Image: {
+ preview: 'Pregled',
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/sv_SE.ts b/components/locale/sv_SE.ts
deleted file mode 100644
index 48340c593..000000000
--- a/components/locale/sv_SE.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import Pagination from '../vc-pagination/locale/sv_SE';
-import DatePicker from '../date-picker/locale/sv_SE';
-import TimePicker from '../time-picker/locale/sv_SE';
-import Calendar from '../calendar/locale/sv_SE';
-
-export default {
- locale: 'sv',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- Table: {
- filterTitle: 'Filtermeny',
- filterConfirm: 'OK',
- filterReset: 'Rensa',
- },
- Modal: {
- okText: 'OK',
- cancelText: 'Avbryt',
- justOkText: 'OK',
- },
- Popconfirm: {
- okText: 'OK',
- cancelText: 'Avbryt',
- },
- Transfer: {
- searchPlaceholder: 'Sök',
- itemUnit: 'element',
- itemsUnit: 'element',
- },
- Empty: {
- description: 'Ingen information',
- },
- Text: {
- edit: 'editera',
- copy: 'kopiera',
- copied: 'kopierad',
- expand: 'expandera',
- },
- Upload: {
- uploading: 'Uppladdning...',
- removeFile: 'Ta bort fil',
- uploadError: 'Uppladdningsfel',
- previewFile: 'Förhandsgranska filen',
- downloadFile: 'Nedladdning fil',
- },
-};
diff --git a/components/locale/sv_SE.tsx b/components/locale/sv_SE.tsx
new file mode 100644
index 000000000..001c23e50
--- /dev/null
+++ b/components/locale/sv_SE.tsx
@@ -0,0 +1,134 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/sv_SE';
+import DatePicker from '../date-picker/locale/sv_SE';
+import TimePicker from '../time-picker/locale/sv_SE';
+import Calendar from '../calendar/locale/sv_SE';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} är inte en giltig ${type}';
+
+const localeValues: Locale = {
+ locale: 'sv',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Vänligen välj',
+ },
+ Table: {
+ filterTitle: 'Filtermeny',
+ filterConfirm: 'OK',
+ filterReset: 'Återställ',
+ filterEmptyText: 'Inga filter',
+ emptyText: 'Ingen data',
+ selectAll: 'Markera nuvarande sida',
+ selectInvert: 'Invertera nuvarande sida',
+ selectNone: 'Avmarkera all data',
+ selectionAll: 'Markera all data',
+ sortTitle: 'Sortera',
+ expand: 'Expandera rad',
+ collapse: 'Komprimera rad',
+ triggerDesc: 'Klicka för att sortera i fallande ordning',
+ triggerAsc: 'Klicka för att sortera i stigande ordning',
+ cancelSort: 'Klicka för att avbryta sortering',
+ },
+ Modal: {
+ okText: 'OK',
+ cancelText: 'Avbryt',
+ justOkText: 'OK',
+ },
+ Popconfirm: {
+ okText: 'OK',
+ cancelText: 'Avbryt',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'Sök här',
+ itemUnit: 'objekt',
+ itemsUnit: 'objekt',
+ remove: 'Ta bort',
+ selectCurrent: 'Markera nuvarande sida',
+ removeCurrent: 'Ta bort nuvarande sida',
+ selectAll: 'Markera all data',
+ removeAll: 'Ta bort all data',
+ selectInvert: 'Invertera nuvarande sida',
+ },
+ Upload: {
+ uploading: 'Laddar upp...',
+ removeFile: 'Ta bort fil',
+ uploadError: 'Uppladdningsfel',
+ previewFile: 'Förhandsgranska fil',
+ downloadFile: 'Ladda ned fil',
+ },
+ Empty: {
+ description: 'Ingen data',
+ },
+ Icon: {
+ icon: 'ikon',
+ },
+ Text: {
+ edit: 'Redigera',
+ copy: 'Kopiera',
+ copied: 'Kopierad',
+ expand: 'Expandera',
+ },
+ PageHeader: {
+ back: 'Tillbaka',
+ },
+ Form: {
+ optional: '(valfritt)',
+ defaultValidateMessages: {
+ default: 'Fältvalideringsfel för ${label}',
+ required: 'Vänligen fyll i ${label}',
+ enum: '${label} måste vara en av [${enum}]',
+ whitespace: '${label} kan inte vara ett tomt tecken',
+ date: {
+ format: '${label} datumformatet är ogiltigt',
+ parse: '${label} kan inte konverteras till ett datum',
+ invalid: '${label} är ett ogiltigt datum',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} måste vara ${len} tecken',
+ min: '${label} måste vara minst ${min} tecken',
+ max: '${label} måste vara högst ${max} tecken',
+ range: '${label} måste vara mellan ${min}-${max} tecken',
+ },
+ number: {
+ len: '${label} måste vara lika med ${len}',
+ min: '${label} måste vara minst ${min}',
+ max: '${label} måste vara högst ${max}',
+ range: '${label} måste vara mellan ${min}-${max}',
+ },
+ array: {
+ len: 'Måste vara ${len} ${label}',
+ min: 'Minst ${min} ${label}',
+ max: 'Högst ${max} ${label}',
+ range: 'Antal ${label} måste vara mellan ${min}-${max}',
+ },
+ pattern: {
+ mismatch: '${label} stämmer inte överens med mönstret ${pattern}',
+ },
+ },
+ },
+ Image: {
+ preview: 'Förhandsgranska',
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/ta_IN.ts b/components/locale/ta_IN.tsx
similarity index 95%
rename from components/locale/ta_IN.ts
rename to components/locale/ta_IN.tsx
index 2b0e9079c..2d4d26a8c 100644
--- a/components/locale/ta_IN.ts
+++ b/components/locale/ta_IN.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/ta_IN';
import DatePicker from '../date-picker/locale/ta_IN';
import TimePicker from '../time-picker/locale/ta_IN';
import Calendar from '../calendar/locale/ta_IN';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'ta',
Pagination,
DatePicker,
@@ -61,3 +62,5 @@ export default {
back: 'பின் செல்லவும்',
},
};
+
+export default localeValues;
diff --git a/components/locale/th_TH.ts b/components/locale/th_TH.ts
deleted file mode 100644
index 8257cd3f5..000000000
--- a/components/locale/th_TH.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import Pagination from '../vc-pagination/locale/th_TH';
-import DatePicker from '../date-picker/locale/th_TH';
-import TimePicker from '../time-picker/locale/th_TH';
-import Calendar from '../calendar/locale/th_TH';
-
-export default {
- locale: 'th',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- global: {
- placeholder: 'กรุณาเลือก',
- },
- Table: {
- filterTitle: 'ตัวกรอง',
- filterConfirm: 'ยืนยัน',
- filterReset: 'รีเซ็ต',
- selectAll: 'เลือกทั้งหมดในหน้านี้',
- selectInvert: 'เลือกสถานะตรงกันข้าม',
- sortTitle: 'เรียง',
- expand: 'แสดงแถวข้อมูล',
- collapse: 'ย่อแถวข้อมูล',
- },
- Modal: {
- okText: 'ตกลง',
- cancelText: 'ยกเลิก',
- justOkText: 'ตกลง',
- },
- Popconfirm: {
- okText: 'ตกลง',
- cancelText: 'ยกเลิก',
- },
- Transfer: {
- titles: ['', ''],
- searchPlaceholder: 'ค้นหา',
- itemUnit: 'ชิ้น',
- itemsUnit: 'ชิ้น',
- },
- Upload: {
- uploading: 'กำลังอัปโหลด...',
- removeFile: 'ลบไฟล์',
- uploadError: 'เกิดข้อผิดพลาดในการอัปโหลด',
- previewFile: 'ดูตัวอย่างไฟล์',
- downloadFile: 'ดาวน์โหลดไฟล์',
- },
- Empty: {
- description: 'ไม่มีข้อมูล',
- },
- Icon: {
- icon: 'ไอคอน',
- },
- Text: {
- edit: 'แก้ไข',
- copy: 'คัดลอก',
- copied: 'คัดลอกแล้ว',
- expand: 'ขยาย',
- },
- PageHeader: {
- back: 'ย้อนกลับ',
- },
-};
diff --git a/components/locale/th_TH.tsx b/components/locale/th_TH.tsx
new file mode 100644
index 000000000..32e8bbcc1
--- /dev/null
+++ b/components/locale/th_TH.tsx
@@ -0,0 +1,130 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/th_TH';
+import DatePicker from '../date-picker/locale/th_TH';
+import TimePicker from '../time-picker/locale/th_TH';
+import Calendar from '../calendar/locale/th_TH';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} ไม่ใช่ ${type} ที่ถูกต้อง';
+
+const localeValues: Locale = {
+ locale: 'th',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'กรุณาเลือก',
+ },
+ Table: {
+ filterTitle: 'ตัวกรอง',
+ filterConfirm: 'ยืนยัน',
+ filterReset: 'รีเซ็ต',
+ filterEmptyText: 'ไม่มีตัวกรอง',
+ emptyText: 'ไม่มีข้อมูล',
+ selectAll: 'เลือกทั้งหมดในหน้านี้',
+ selectInvert: 'กลับสถานะการเลือกในหน้านี้',
+ selectionAll: 'เลือกข้อมูลทั้งหมด',
+ sortTitle: 'เรียง',
+ expand: 'แสดงแถวข้อมูล',
+ collapse: 'ย่อแถวข้อมูล',
+ triggerDesc: 'คลิกเรียงจากมากไปน้อย',
+ triggerAsc: 'คลิกเรียงจากน้อยไปมาก',
+ cancelSort: 'คลิกเพื่อยกเลิกการเรียง',
+ },
+ Modal: {
+ okText: 'ตกลง',
+ cancelText: 'ยกเลิก',
+ justOkText: 'ตกลง',
+ },
+ Popconfirm: {
+ okText: 'ตกลง',
+ cancelText: 'ยกเลิก',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'ค้นหา',
+ itemUnit: 'ชิ้น',
+ itemsUnit: 'ชิ้น',
+ remove: 'นำออก',
+ selectCurrent: 'เลือกทั้งหมดในหน้านี้',
+ removeCurrent: 'นำออกทั้งหมดในหน้านี้',
+ selectAll: 'เลือกข้อมูลทั้งหมด',
+ removeAll: 'นำข้อมูลออกทั้งหมด',
+ selectInvert: 'กลับสถานะการเลือกในหน้านี้',
+ },
+ Upload: {
+ uploading: 'กำลังอัปโหลด...',
+ removeFile: 'ลบไฟล์',
+ uploadError: 'เกิดข้อผิดพลาดในการอัปโหลด',
+ previewFile: 'ดูตัวอย่างไฟล์',
+ downloadFile: 'ดาวน์โหลดไฟล์',
+ },
+ Empty: {
+ description: 'ไม่มีข้อมูล',
+ },
+ Icon: {
+ icon: 'ไอคอน',
+ },
+ Text: {
+ edit: 'แก้ไข',
+ copy: 'คัดลอก',
+ copied: 'คัดลอกแล้ว',
+ expand: 'ขยาย',
+ },
+ PageHeader: {
+ back: 'ย้อนกลับ',
+ },
+ Form: {
+ optional: '(ไม่จำเป็น)',
+ defaultValidateMessages: {
+ default: 'ฟิลด์ ${label} ไม่ผ่านเงื่อนไขการตรวจสอบ',
+ required: 'กรุณากรอก ${label}',
+ enum: '${label} ต้องเป็นค่าใดค่าหนึ่งใน [${enum}]',
+ whitespace: '${label} ไม่สามารถเป็นช่องว่างได้',
+ date: {
+ format: 'รูปแบบวันที่ ${label} ไม่ถูกต้อง',
+ parse: '${label} ไม่สามารถแปลงเป็นวันที่ได้',
+ invalid: '${label} เป็นวันที่ที่ไม่ถูกต้อง',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} ต้องมี ${len} ตัวอักษร',
+ min: '${label} ต้องมีอย่างน้อย ${min} ตัวอักษร',
+ max: '${label} มีได้สูงสุด ${max} ตัวอักษร',
+ range: '${label} ต้องมี ${min}-${max} ตัวอักษร',
+ },
+ number: {
+ len: '${label} ต้องมี ${len} ตัว',
+ min: 'ค่าต่ำสุด ${label} คือ ${min}',
+ max: 'ค่าสูงสุด ${label} คือ ${max}',
+ range: '${label} ต้องมีค่า ${min}-${max}',
+ },
+ array: {
+ len: 'ต้องมี ${len} ${label}',
+ min: 'ต้องมีอย่างน้อย ${min} ${label}',
+ max: 'มีได้สูงสุด ${max} ${label}',
+ range: 'จำนวน ${label} ต้องอยู่ในช่วง ${min}-${max}',
+ },
+ pattern: {
+ mismatch: '${label} ไม่ตรงกับรูปแบบ ${pattern}',
+ },
+ },
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/tr_TR.ts b/components/locale/tr_TR.ts
deleted file mode 100644
index a82bd9812..000000000
--- a/components/locale/tr_TR.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import Pagination from '../vc-pagination/locale/tr_TR';
-import DatePicker from '../date-picker/locale/tr_TR';
-import TimePicker from '../time-picker/locale/tr_TR';
-import Calendar from '../calendar/locale/tr_TR';
-
-export default {
- locale: 'tr',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- global: {
- placeholder: 'Lütfen seçiniz',
- },
- Table: {
- filterTitle: 'Menü Filtrele',
- filterConfirm: 'Tamam',
- filterReset: 'Sıfırla',
- selectAll: 'Hepsini Seç',
- selectInvert: 'Tersini Seç',
- sortTitle: 'Sırala',
- },
- Modal: {
- okText: 'Tamam',
- cancelText: 'İptal',
- justOkText: 'Tamam',
- },
- Popconfirm: {
- okText: 'Tamam',
- cancelText: 'İptal',
- },
- Transfer: {
- titles: ['', ''],
- searchPlaceholder: 'Arama',
- itemUnit: 'Öğe',
- itemsUnit: 'Öğeler',
- },
- Upload: {
- uploading: 'Yükleniyor...',
- removeFile: `Dosyayı kaldır`,
- uploadError: 'Yükleme Hatası',
- previewFile: `Dosyayı Önizle`,
- downloadFile: 'Dosyayı indir',
- },
- Empty: {
- description: 'Veri Yok',
- },
- Icon: {
- icon: 'icon',
- },
- Text: {
- edit: 'düzenle',
- copy: 'kopyala',
- copied: 'kopyalandı',
- expand: 'genişlet',
- },
-};
diff --git a/components/locale/tr_TR.tsx b/components/locale/tr_TR.tsx
new file mode 100644
index 000000000..4ab979f85
--- /dev/null
+++ b/components/locale/tr_TR.tsx
@@ -0,0 +1,129 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/tr_TR';
+import DatePicker from '../date-picker/locale/tr_TR';
+import TimePicker from '../time-picker/locale/tr_TR';
+import Calendar from '../calendar/locale/tr_TR';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label} geçerli bir ${type} değil';
+
+const localeValues: Locale = {
+ locale: 'tr',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: 'Lütfen seçiniz',
+ },
+ Table: {
+ filterTitle: 'Filtre menüsü',
+ filterConfirm: 'Tamam',
+ filterReset: 'Sıfırla',
+ filterEmptyText: 'Filtre yok',
+ selectAll: 'Tüm sayfayı seç',
+ selectInvert: 'Tersini seç',
+ selectionAll: 'Tümünü seç',
+ sortTitle: 'Sırala',
+ expand: 'Satırı genişlet',
+ collapse: 'Satırı daralt',
+ triggerDesc: 'Azalan düzende sırala',
+ triggerAsc: 'Artan düzende sırala',
+ cancelSort: 'Sıralamayı kaldır',
+ },
+ Modal: {
+ okText: 'Tamam',
+ cancelText: 'İptal',
+ justOkText: 'Tamam',
+ },
+ Popconfirm: {
+ okText: 'Tamam',
+ cancelText: 'İptal',
+ },
+ Transfer: {
+ titles: ['', ''],
+ searchPlaceholder: 'Arama',
+ itemUnit: 'Öğe',
+ itemsUnit: 'Öğeler',
+ remove: 'Kaldır',
+ selectCurrent: 'Tüm sayfayı seç',
+ removeCurrent: 'Sayfayı kaldır',
+ selectAll: 'Tümünü seç',
+ removeAll: 'Tümünü kaldır',
+ selectInvert: 'Tersini seç',
+ },
+ Upload: {
+ uploading: 'Yükleniyor...',
+ removeFile: 'Dosyayı kaldır',
+ uploadError: 'Yükleme hatası',
+ previewFile: 'Dosyayı önizle',
+ downloadFile: 'Dosyayı indir',
+ },
+ Empty: {
+ description: 'Veri Yok',
+ },
+ Icon: {
+ icon: 'ikon',
+ },
+ Text: {
+ edit: 'Düzenle',
+ copy: 'Kopyala',
+ copied: 'Kopyalandı',
+ expand: 'Genişlet',
+ },
+ PageHeader: {
+ back: 'Geri',
+ },
+ Form: {
+ optional: '(opsiyonel)',
+ defaultValidateMessages: {
+ default: 'Alan doğrulama hatası ${label}',
+ required: '${label} gerekli bir alan',
+ enum: '${label} şunlardan biri olmalı: [${enum}]',
+ whitespace: '${label} sadece boşluk olamaz',
+ date: {
+ format: '${label} tarih biçimi geçersiz',
+ parse: '${label} bir tarihe dönüştürülemedi',
+ invalid: '${label} geçersiz bir tarih',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label} ${len} karakter olmalı',
+ min: '${label} en az ${min} karakter olmalı',
+ max: '${label} en çok ${max} karakter olmalı',
+ range: '${label} ${min}-${max} karakter arası olmalı',
+ },
+ number: {
+ len: '${label} ${len} olmalı',
+ min: '${label} en az ${min} olmalı',
+ max: '${label} en çok ${max} olmalı',
+ range: '${label} ${min}-${max} arası olmalı',
+ },
+ array: {
+ len: '${label} sayısı ${len} olmalı',
+ min: '${label} sayısı en az ${min} olmalı',
+ max: '${label} sayısı en çok ${max} olmalı',
+ range: '${label} sayısı ${min}-${max} arası olmalı',
+ },
+ pattern: {
+ mismatch: '${label} şu kalıpla eşleşmeli: ${pattern}',
+ },
+ },
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/uk_UA.ts b/components/locale/uk_UA.tsx
similarity index 87%
rename from components/locale/uk_UA.ts
rename to components/locale/uk_UA.tsx
index 1712bc6b2..3ef547d56 100644
--- a/components/locale/uk_UA.ts
+++ b/components/locale/uk_UA.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/uk_UA';
import DatePicker from '../date-picker/locale/uk_UA';
import TimePicker from '../time-picker/locale/uk_UA';
import Calendar from '../calendar/locale/uk_UA';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'uk',
Pagination,
DatePicker,
@@ -27,8 +28,8 @@ export default {
},
Transfer: {
searchPlaceholder: 'Введіть текст для пошуку',
- itemUnit: 'item',
- itemsUnit: 'items',
+ itemUnit: 'елем.',
+ itemsUnit: 'елем.',
},
Upload: {
uploading: 'Завантаження ...',
@@ -41,3 +42,5 @@ export default {
description: 'Даних немає',
},
};
+
+export default localeValues;
diff --git a/components/locale/vi_VN.ts b/components/locale/vi_VN.tsx
similarity index 89%
rename from components/locale/vi_VN.ts
rename to components/locale/vi_VN.tsx
index f09c4f104..3bc626aec 100644
--- a/components/locale/vi_VN.ts
+++ b/components/locale/vi_VN.tsx
@@ -2,8 +2,9 @@ import Pagination from '../vc-pagination/locale/vi_VN';
import DatePicker from '../date-picker/locale/vi_VN';
import TimePicker from '../time-picker/locale/vi_VN';
import Calendar from '../calendar/locale/vi_VN';
+import type { Locale } from '../locale-provider';
-export default {
+const localeValues: Locale = {
locale: 'vi',
Pagination,
DatePicker,
@@ -41,3 +42,5 @@ export default {
description: 'Trống',
},
};
+
+export default localeValues;
diff --git a/components/locale/zh_CN.ts b/components/locale/zh_CN.ts
deleted file mode 100644
index d77241d3b..000000000
--- a/components/locale/zh_CN.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import Pagination from '../vc-pagination/locale/zh_CN';
-import DatePicker from '../date-picker/locale/zh_CN';
-import TimePicker from '../time-picker/locale/zh_CN';
-import Calendar from '../calendar/locale/zh_CN';
-import ColorPicker from '../color-picker/locale/zh_CN';
-
-export default {
- locale: 'zh-cn',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- ColorPicker,
- // locales for all comoponents
- global: {
- placeholder: '请选择',
- },
- Table: {
- filterTitle: '筛选',
- filterConfirm: '确定',
- filterReset: '重置',
- selectAll: '全选当页',
- selectInvert: '反选当页',
- sortTitle: '排序',
- expand: '展开行',
- collapse: '关闭行',
- },
- Modal: {
- okText: '确定',
- cancelText: '取消',
- justOkText: '知道了',
- },
- Popconfirm: {
- cancelText: '取消',
- okText: '确定',
- },
- Transfer: {
- searchPlaceholder: '请输入搜索内容',
- itemUnit: '项',
- itemsUnit: '项',
- },
- Upload: {
- uploading: '文件上传中',
- removeFile: '删除文件',
- uploadError: '上传错误',
- previewFile: '预览文件',
- downloadFile: '下载文件',
- },
- Empty: {
- description: '暂无数据',
- },
- Icon: {
- icon: '图标',
- },
- Text: {
- edit: '编辑',
- copy: '复制',
- copied: '复制成功',
- expand: '展开',
- },
- PageHeader: {
- back: '返回',
- },
-};
diff --git a/components/locale/zh_CN.tsx b/components/locale/zh_CN.tsx
new file mode 100644
index 000000000..72ae7238e
--- /dev/null
+++ b/components/locale/zh_CN.tsx
@@ -0,0 +1,133 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/zh_CN';
+import DatePicker from '../date-picker/locale/zh_CN';
+import TimePicker from '../time-picker/locale/zh_CN';
+import Calendar from '../calendar/locale/zh_CN';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label}不是一个有效的${type}';
+
+const localeValues: Locale = {
+ locale: 'zh-cn',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ // locales for all components
+ global: {
+ placeholder: '请选择',
+ },
+ Table: {
+ filterTitle: '筛选',
+ filterConfirm: '确定',
+ filterReset: '重置',
+ filterEmptyText: '无筛选项',
+ selectAll: '全选当页',
+ selectInvert: '反选当页',
+ selectNone: '清空所有',
+ selectionAll: '全选所有',
+ sortTitle: '排序',
+ expand: '展开行',
+ collapse: '关闭行',
+ triggerDesc: '点击降序',
+ triggerAsc: '点击升序',
+ cancelSort: '取消排序',
+ },
+ Modal: {
+ okText: '确定',
+ cancelText: '取消',
+ justOkText: '知道了',
+ },
+ Popconfirm: {
+ cancelText: '取消',
+ okText: '确定',
+ },
+ Transfer: {
+ searchPlaceholder: '请输入搜索内容',
+ itemUnit: '项',
+ itemsUnit: '项',
+ remove: '删除',
+ selectCurrent: '全选当页',
+ removeCurrent: '删除当页',
+ selectAll: '全选所有',
+ removeAll: '删除全部',
+ selectInvert: '反选当页',
+ },
+ Upload: {
+ uploading: '文件上传中',
+ removeFile: '删除文件',
+ uploadError: '上传错误',
+ previewFile: '预览文件',
+ downloadFile: '下载文件',
+ },
+ Empty: {
+ description: '暂无数据',
+ },
+ Icon: {
+ icon: '图标',
+ },
+ Text: {
+ edit: '编辑',
+ copy: '复制',
+ copied: '复制成功',
+ expand: '展开',
+ },
+ PageHeader: {
+ back: '返回',
+ },
+ Form: {
+ optional: '(可选)',
+ defaultValidateMessages: {
+ default: '字段验证错误${label}',
+ required: '请输入${label}',
+ enum: '${label}必须是其中一个[${enum}]',
+ whitespace: '${label}不能为空字符',
+ date: {
+ format: '${label}日期格式无效',
+ parse: '${label}不能转换为日期',
+ invalid: '${label}是一个无效日期',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label}须为${len}个字符',
+ min: '${label}最少${min}个字符',
+ max: '${label}最多${max}个字符',
+ range: '${label}须在${min}-${max}字符之间',
+ },
+ number: {
+ len: '${label}必须等于${len}',
+ min: '${label}最小值为${min}',
+ max: '${label}最大值为${max}',
+ range: '${label}须在${min}-${max}之间',
+ },
+ array: {
+ len: '须为${len}个${label}',
+ min: '最少${min}个${label}',
+ max: '最多${max}个${label}',
+ range: '${label}数量须在${min}-${max}之间',
+ },
+ pattern: {
+ mismatch: '${label}与模式不匹配${pattern}',
+ },
+ },
+ },
+ Image: {
+ preview: '预览',
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/zh_HK.tsx b/components/locale/zh_HK.tsx
new file mode 100644
index 000000000..3cdc22e11
--- /dev/null
+++ b/components/locale/zh_HK.tsx
@@ -0,0 +1,125 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/zh_TW';
+import DatePicker from '../date-picker/locale/zh_TW';
+import TimePicker from '../time-picker/locale/zh_TW';
+import Calendar from '../calendar/locale/zh_TW';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label}不是一個有效的${type}';
+
+const localeValues: Locale = {
+ locale: 'zh-hk',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: '請選擇',
+ },
+ Table: {
+ filterTitle: '篩選器',
+ filterConfirm: '確定',
+ filterReset: '重置',
+ filterEmptyText: '無篩選項',
+ selectAll: '全部選取',
+ selectInvert: '反向選取',
+ selectNone: '清空所有',
+ selectionAll: '全選所有',
+ sortTitle: '排序',
+ expand: '展開行',
+ collapse: '關閉行',
+ triggerDesc: '點擊降序',
+ triggerAsc: '點擊升序',
+ cancelSort: '取消排序',
+ },
+ Modal: {
+ okText: '確定',
+ cancelText: '取消',
+ justOkText: '知道了',
+ },
+ Popconfirm: {
+ okText: '確定',
+ cancelText: '取消',
+ },
+ Transfer: {
+ searchPlaceholder: '搜尋資料',
+ itemUnit: '項目',
+ itemsUnit: '項目',
+ },
+ Upload: {
+ uploading: '正在上傳...',
+ removeFile: '刪除檔案',
+ uploadError: '上傳失敗',
+ previewFile: '檔案預覽',
+ downloadFile: '下载文件',
+ },
+ Empty: {
+ description: '無此資料',
+ },
+ Icon: {
+ icon: '圖標',
+ },
+ Text: {
+ edit: '編輯',
+ copy: '複製',
+ copied: '複製成功',
+ expand: '展開',
+ },
+ PageHeader: {
+ back: '返回',
+ },
+ Form: {
+ defaultValidateMessages: {
+ default: '字段驗證錯誤${label}',
+ required: '請輸入${label}',
+ enum: '${label}必須是其中一個[${enum}]',
+ whitespace: '${label}不能為空字符',
+ date: {
+ format: '${label}日期格式無效',
+ parse: '${label}不能轉換為日期',
+ invalid: '${label}是一個無效日期',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label}須為${len}個字符',
+ min: '${label}最少${min}個字符',
+ max: '${label}最多${max}個字符',
+ range: '${label}須在${min}-${max}字符之間',
+ },
+ number: {
+ len: '${label}必須等於${len}',
+ min: '${label}最小值為${min}',
+ max: '${label}最大值為${max}',
+ range: '${label}須在${min}-${max}之間',
+ },
+ array: {
+ len: '須為${len}個${label}',
+ min: '最少${min}個${label}',
+ max: '最多${max}個${label}',
+ range: '${label}數量須在${min}-${max}之間',
+ },
+ pattern: {
+ mismatch: '${label}與模式不匹配${pattern}',
+ },
+ },
+ },
+ Image: {
+ preview: '預覽',
+ },
+};
+
+export default localeValues;
diff --git a/components/locale/zh_TW.ts b/components/locale/zh_TW.ts
deleted file mode 100644
index d0f421fa8..000000000
--- a/components/locale/zh_TW.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import Pagination from '../vc-pagination/locale/zh_TW';
-import DatePicker from '../date-picker/locale/zh_TW';
-import TimePicker from '../time-picker/locale/zh_TW';
-import Calendar from '../calendar/locale/zh_TW';
-import ColorPicker from '../color-picker/locale/zh_TW';
-
-export default {
- locale: 'zh-tw',
- Pagination,
- DatePicker,
- TimePicker,
- Calendar,
- ColorPicker,
- Table: {
- filterTitle: '篩選器',
- filterConfirm: '確定',
- filterReset: '重置',
- selectAll: '全部選取',
- selectInvert: '反向選取',
- sortTitle: '排序',
- expand: '展開行',
- collapse: '關閉行',
- },
- Modal: {
- okText: '確定',
- cancelText: '取消',
- justOkText: '知道了',
- },
- Popconfirm: {
- okText: '確定',
- cancelText: '取消',
- },
- Transfer: {
- searchPlaceholder: '搜尋資料',
- itemUnit: '項目',
- itemsUnit: '項目',
- },
- Upload: {
- uploading: '正在上傳...',
- removeFile: '刪除檔案',
- uploadError: '上傳失敗',
- previewFile: '檔案預覽',
- downloadFile: '下载文件',
- },
- Empty: {
- description: '無此資料',
- },
- PageHeader: {
- back: '返回',
- },
-};
diff --git a/components/locale/zh_TW.tsx b/components/locale/zh_TW.tsx
new file mode 100644
index 000000000..dfa21765b
--- /dev/null
+++ b/components/locale/zh_TW.tsx
@@ -0,0 +1,125 @@
+/* eslint-disable no-template-curly-in-string */
+import Pagination from '../vc-pagination/locale/zh_TW';
+import DatePicker from '../date-picker/locale/zh_TW';
+import TimePicker from '../time-picker/locale/zh_TW';
+import Calendar from '../calendar/locale/zh_TW';
+import type { Locale } from '../locale-provider';
+
+const typeTemplate = '${label}不是一個有效的${type}';
+
+const localeValues: Locale = {
+ locale: 'zh-tw',
+ Pagination,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ global: {
+ placeholder: '請選擇',
+ },
+ Table: {
+ filterTitle: '篩選器',
+ filterConfirm: '確定',
+ filterReset: '重置',
+ filterEmptyText: '無篩選項',
+ selectAll: '全部選取',
+ selectInvert: '反向選取',
+ selectNone: '清空所有',
+ selectionAll: '全選所有',
+ sortTitle: '排序',
+ expand: '展開行',
+ collapse: '關閉行',
+ triggerDesc: '點擊降序',
+ triggerAsc: '點擊升序',
+ cancelSort: '取消排序',
+ },
+ Modal: {
+ okText: '確定',
+ cancelText: '取消',
+ justOkText: '知道了',
+ },
+ Popconfirm: {
+ okText: '確定',
+ cancelText: '取消',
+ },
+ Transfer: {
+ searchPlaceholder: '搜尋資料',
+ itemUnit: '項目',
+ itemsUnit: '項目',
+ },
+ Upload: {
+ uploading: '正在上傳...',
+ removeFile: '刪除檔案',
+ uploadError: '上傳失敗',
+ previewFile: '檔案預覽',
+ downloadFile: '下载文件',
+ },
+ Empty: {
+ description: '無此資料',
+ },
+ Icon: {
+ icon: '圖標',
+ },
+ Text: {
+ edit: '編輯',
+ copy: '複製',
+ copied: '複製成功',
+ expand: '展開',
+ },
+ PageHeader: {
+ back: '返回',
+ },
+ Form: {
+ defaultValidateMessages: {
+ default: '字段驗證錯誤${label}',
+ required: '請輸入${label}',
+ enum: '${label}必須是其中一個[${enum}]',
+ whitespace: '${label}不能為空字符',
+ date: {
+ format: '${label}日期格式無效',
+ parse: '${label}不能轉換為日期',
+ invalid: '${label}是一個無效日期',
+ },
+ types: {
+ string: typeTemplate,
+ method: typeTemplate,
+ array: typeTemplate,
+ object: typeTemplate,
+ number: typeTemplate,
+ date: typeTemplate,
+ boolean: typeTemplate,
+ integer: typeTemplate,
+ float: typeTemplate,
+ regexp: typeTemplate,
+ email: typeTemplate,
+ url: typeTemplate,
+ hex: typeTemplate,
+ },
+ string: {
+ len: '${label}須為${len}個字符',
+ min: '${label}最少${min}個字符',
+ max: '${label}最多${max}個字符',
+ range: '${label}須在${min}-${max}字符之間',
+ },
+ number: {
+ len: '${label}必須等於${len}',
+ min: '${label}最小值為${min}',
+ max: '${label}最大值為${max}',
+ range: '${label}須在${min}-${max}之間',
+ },
+ array: {
+ len: '須為${len}個${label}',
+ min: '最少${min}個${label}',
+ max: '最多${max}個${label}',
+ range: '${label}數量須在${min}-${max}之間',
+ },
+ pattern: {
+ mismatch: '${label}與模式不匹配${pattern}',
+ },
+ },
+ },
+ Image: {
+ preview: '預覽',
+ },
+};
+
+export default localeValues;
diff --git a/components/menu/src/MenuItem.tsx b/components/menu/src/MenuItem.tsx
index 49f7f7405..df483b93d 100644
--- a/components/menu/src/MenuItem.tsx
+++ b/components/menu/src/MenuItem.tsx
@@ -10,6 +10,7 @@ import type { MenuInfo } from './interface';
import KeyCode from '../../_util/KeyCode';
import useDirectionStyle from './hooks/useDirectionStyle';
import Overflow from '../../vc-overflow';
+import devWarning from '../../vc-util/devWarning';
let indexGuid = 0;
const menuItemProps = {
@@ -30,7 +31,15 @@ export default defineComponent({
slots: ['icon', 'title'],
setup(props, { slots, emit, attrs }) {
const instance = getCurrentInstance();
- const key = instance.vnode.key;
+
+ const key =
+ typeof instance.vnode.key === 'symbol' ? String(instance.vnode.key) : instance.vnode.key;
+ devWarning(
+ typeof instance.vnode.key !== 'symbol',
+ 'MenuItem',
+ `MenuItem \`:key="${String(key)}"\` not support Symbol type`,
+ );
+
const eventKey = `menu_item_${++indexGuid}_$$_${key}`;
const { parentEventKeys, parentKeys } = useInjectKeyPath();
const {
diff --git a/components/menu/src/SubMenu.tsx b/components/menu/src/SubMenu.tsx
index 24fde493f..57fea3003 100644
--- a/components/menu/src/SubMenu.tsx
+++ b/components/menu/src/SubMenu.tsx
@@ -12,6 +12,8 @@ import InlineSubMenuList from './InlineSubMenuList';
import Transition, { getTransitionProps } from '../../_util/transition';
import { cloneElement } from '../../_util/vnode';
import Overflow from '../../vc-overflow';
+import devWarning from '../../vc-util/devWarning';
+import isValid from '../../_util/isValid';
let indexGuid = 0;
@@ -39,14 +41,17 @@ export default defineComponent({
useProvideFirstLevel(false);
const instance = getCurrentInstance();
- const key =
- instance.vnode.key !== null ? instance.vnode.key : `sub_menu_${++indexGuid}_$$_not_set_key`;
-
+ const vnodeKey =
+ typeof instance.vnode.key === 'symbol' ? String(instance.vnode.key) : instance.vnode.key;
+ devWarning(
+ typeof instance.vnode.key !== 'symbol',
+ 'SubMenu',
+ `SubMenu \`:key="${String(vnodeKey)}"\` not support Symbol type`,
+ );
+ const key = isValid(vnodeKey) ? vnodeKey : `sub_menu_${++indexGuid}_$$_not_set_key`;
const eventKey =
props.eventKey ??
- (instance.vnode.key !== null
- ? `sub_menu_${++indexGuid}_$$_${instance.vnode.key}`
- : (key as string));
+ (isValid(vnodeKey) ? `sub_menu_${++indexGuid}_$$_${vnodeKey}` : (key as string));
const { parentEventKeys, parentInfo, parentKeys } = useInjectKeyPath();
const keysPath = computed(() => [...parentKeys.value, key]);
const eventKeysPath = computed(() => [...parentEventKeys.value, eventKey]);
diff --git a/components/modal/Modal.tsx b/components/modal/Modal.tsx
index bc28b952c..1b3fbc02e 100644
--- a/components/modal/Modal.tsx
+++ b/components/modal/Modal.tsx
@@ -79,7 +79,7 @@ const modalProps = {
wrapClassName: PropTypes.string,
maskTransitionName: PropTypes.string,
transitionName: PropTypes.string,
- getContainer: PropTypes.func,
+ getContainer: PropTypes.any,
zIndex: PropTypes.number,
bodyStyle: PropTypes.style,
maskStyle: PropTypes.style,
@@ -119,7 +119,7 @@ export interface ModalFuncProps {
maskStyle?: CSSProperties;
type?: string;
keyboard?: boolean;
- getContainer?: getContainerFunc;
+ getContainer?: getContainerFunc | boolean | string;
autoFocusButton?: null | 'ok' | 'cancel';
transitionName?: string;
maskTransitionName?: string;
diff --git a/components/modal/__tests__/Modal.test.js b/components/modal/__tests__/Modal.test.js
index fb8a6bc7e..f9f7adca3 100644
--- a/components/modal/__tests__/Modal.test.js
+++ b/components/modal/__tests__/Modal.test.js
@@ -65,4 +65,17 @@ describe('Modal', () => {
expect(wrapper.html()).toMatchSnapshot();
});
});
+
+ it('should work with getContainer=false', async () => {
+ const wrapper1 = mount(Modal, {
+ sync: false,
+ props: {
+ getContainer: false,
+ visible: true,
+ },
+ });
+ await asyncExpect(() => {
+ expect(wrapper1.html()).toMatchSnapshot();
+ });
+ });
});
diff --git a/components/modal/__tests__/__snapshots__/Modal.test.js.snap b/components/modal/__tests__/__snapshots__/Modal.test.js.snap
index 1d3bc0ccc..ede42e3f3 100644
--- a/components/modal/__tests__/__snapshots__/Modal.test.js.snap
+++ b/components/modal/__tests__/__snapshots__/Modal.test.js.snap
@@ -86,3 +86,26 @@ exports[`Modal render without footer 1`] = `
`;
+
+exports[`Modal should work with getContainer=false 1`] = `
+
+`;
diff --git a/components/pagination/Pagination.tsx b/components/pagination/Pagination.tsx
index 5c5ce32ac..fe2e63ce5 100644
--- a/components/pagination/Pagination.tsx
+++ b/components/pagination/Pagination.tsx
@@ -51,6 +51,7 @@ export const paginationConfig = () => ({
export type PaginationProps = Partial>>;
export type PaginationConfig = Partial>>;
+export type PaginationLocale = any;
export default defineComponent({
name: 'APagination',
inheritAttrs: false,
diff --git a/components/rate/index.tsx b/components/rate/index.tsx
index 312a3dac0..fb690bab8 100644
--- a/components/rate/index.tsx
+++ b/components/rate/index.tsx
@@ -40,7 +40,6 @@ const Rate = defineComponent({
allowClear: true,
prefixCls: 'ant-rate',
tabindex: 0,
- character: '★',
direction: 'ltr',
}),
emits: ['hoverChange', 'update:value', 'change', 'focus', 'blur', 'keydown'],
diff --git a/components/select/index.tsx b/components/select/index.tsx
index 5cce05d0d..17b278961 100644
--- a/components/select/index.tsx
+++ b/components/select/index.tsx
@@ -76,7 +76,15 @@ const Select = defineComponent({
props: SelectProps(),
SECRET_COMBOBOX_MODE_DO_NOT_USE: 'SECRET_COMBOBOX_MODE_DO_NOT_USE',
emits: ['change', 'update:value'],
- slots: ['notFoundContent', 'suffixIcon', 'itemIcon', 'removeIcon', 'clearIcon', 'dropdownRender'],
+ slots: [
+ 'notFoundContent',
+ 'suffixIcon',
+ 'itemIcon',
+ 'removeIcon',
+ 'clearIcon',
+ 'dropdownRender',
+ 'option',
+ ],
setup(props, { attrs, emit, slots, expose }) {
const selectRef = ref(null);
@@ -194,6 +202,7 @@ const Select = defineComponent({
dropdownClassName={rcSelectRtlDropDownClassName}
onChange={triggerChange}
dropdownRender={selectProps.dropdownRender || slots.dropdownRender}
+ v-slots={{ option: slots.option }}
>
{slots.default?.()}
diff --git a/components/style/themes/default.less b/components/style/themes/default.less
index 76e1653b6..93a16e985 100644
--- a/components/style/themes/default.less
+++ b/components/style/themes/default.less
@@ -581,9 +581,30 @@
// TimePicker
// ---
-@time-picker-panel-column-width: 56px;
-@time-picker-panel-width: @time-picker-panel-column-width * 3;
-@time-picker-selected-bg: @background-color-base;
+@picker-bg: @component-background;
+@picker-basic-cell-hover-color: @item-hover-bg;
+@picker-basic-cell-active-with-range-color: @primary-1;
+@picker-basic-cell-hover-with-range-color: lighten(@primary-color, 35%);
+@picker-basic-cell-disabled-bg: @disabled-bg;
+@picker-border-color: @border-color-split;
+@picker-date-hover-range-border-color: lighten(@primary-color, 20%);
+@picker-date-hover-range-color: @picker-basic-cell-hover-with-range-color;
+@picker-time-panel-column-width: 56px;
+@picker-time-panel-column-height: 224px;
+@picker-time-panel-cell-height: 28px;
+@picker-panel-cell-height: 24px;
+@picker-panel-cell-width: 36px;
+@picker-text-height: 40px;
+@picker-panel-without-time-cell-height: 66px;
+
+// Calendar
+// ---
+@calendar-bg: @component-background;
+@calendar-input-bg: @input-bg;
+@calendar-border-color: @border-color-inverse;
+@calendar-item-active-bg: @item-active-bg;
+@calendar-full-bg: @calendar-bg;
+@calendar-full-panel-bg: @calendar-full-bg;
// Carousel
// ---
diff --git a/components/table/filterDropdown.tsx b/components/table/filterDropdown.tsx
index 8f3b8ba27..12380eb11 100755
--- a/components/table/filterDropdown.tsx
+++ b/components/table/filterDropdown.tsx
@@ -98,7 +98,7 @@ export default defineComponent({
this.setVisible(false);
// Call `setSelectedKeys` & `confirm` in the same time will make filter data not up to date
// https://github.com/ant-design/ant-design/issues/12284
- this.$forceUpdate();
+ (this as any).$forceUpdate();
nextTick(this.confirmFilter2);
},
diff --git a/components/time-picker/date-fns.tsx b/components/time-picker/date-fns.tsx
new file mode 100644
index 000000000..c2f363cd3
--- /dev/null
+++ b/components/time-picker/date-fns.tsx
@@ -0,0 +1,30 @@
+import createTimePicker from './time-picker';
+import dateFnsGenerateConfig from '../vc-picker/generate/dateFns';
+import type { App } from 'vue';
+import type { PickerTimeProps, RangePickerTimeProps } from '../date-picker/generatePicker';
+
+const { TimePicker, TimeRangePicker } = createTimePicker(dateFnsGenerateConfig);
+
+export interface TimeRangePickerProps extends Omit, 'picker'> {
+ popupClassName?: string;
+ valueFormat?: string;
+}
+export interface TimePickerProps extends Omit, 'picker'> {
+ popupClassName?: string;
+ valueFormat?: string;
+}
+
+/* istanbul ignore next */
+TimePicker.install = function (app: App) {
+ app.component(TimePicker.name, TimePicker);
+ app.component(TimeRangePicker.name, TimeRangePicker);
+ return app;
+};
+TimePicker.TimeRangePicker = TimeRangePicker;
+
+export { TimePicker, TimeRangePicker };
+
+export default TimePicker as typeof TimePicker &
+ Plugin & {
+ readonly TimeRangePicker: typeof TimeRangePicker;
+ };
diff --git a/components/time-picker/dayjs.tsx b/components/time-picker/dayjs.tsx
new file mode 100644
index 000000000..fe3f702ce
--- /dev/null
+++ b/components/time-picker/dayjs.tsx
@@ -0,0 +1,31 @@
+import type { Dayjs } from 'dayjs';
+import createTimePicker from './time-picker';
+import dayjsGenerateConfig from '../vc-picker/generate/dayjs';
+import type { App } from 'vue';
+import type { PickerTimeProps, RangePickerTimeProps } from '../date-picker/generatePicker';
+
+const { TimePicker, TimeRangePicker } = createTimePicker(dayjsGenerateConfig);
+
+export interface TimeRangePickerProps extends Omit, 'picker'> {
+ popupClassName?: string;
+ valueFormat?: string;
+}
+export interface TimePickerProps extends Omit, 'picker'> {
+ popupClassName?: string;
+ valueFormat?: string;
+}
+
+/* istanbul ignore next */
+TimePicker.install = function (app: App) {
+ app.component(TimePicker.name, TimePicker);
+ app.component(TimeRangePicker.name, TimeRangePicker);
+ return app;
+};
+TimePicker.TimeRangePicker = TimeRangePicker;
+
+export { TimePicker, TimeRangePicker };
+
+export default TimePicker as typeof TimePicker &
+ Plugin & {
+ readonly TimeRangePicker: typeof TimeRangePicker;
+ };
diff --git a/components/time-picker/index.tsx b/components/time-picker/index.tsx
index 8103baf17..a6f2f3609 100644
--- a/components/time-picker/index.tsx
+++ b/components/time-picker/index.tsx
@@ -1,271 +1,8 @@
-import omit from 'omit.js';
-import type { ExtractPropTypes } from 'vue';
-import { defineComponent, inject, provide } from 'vue';
-import VcTimePicker from '../vc-time-picker';
-import LocaleReceiver from '../locale-provider/LocaleReceiver';
-import BaseMixin from '../_util/BaseMixin';
-import PropTypes from '../_util/vue-types';
-import warning from '../_util/warning';
-import ClockCircleOutlined from '@ant-design/icons-vue/ClockCircleOutlined';
-import CloseCircleFilled from '@ant-design/icons-vue/CloseCircleFilled';
-import enUS from './locale/en_US';
-import { hasProp, getOptionProps, getComponent, isValidElement } from '../_util/props-util';
-import initDefaultProps from '../_util/props-util/initDefaultProps';
-import { cloneElement } from '../_util/vnode';
-import { defaultConfigProvider } from '../config-provider';
-import {
- checkValidate,
- stringToMoment,
- momentToString,
- TimeOrTimesType,
-} from '../_util/moment-util';
-import { tuple, withInstall } from '../_util/type';
-import classNames from '../_util/classNames';
-
-export function generateShowHourMinuteSecond(format: string) {
- // Ref: http://momentjs.com/docs/#/parsing/string-format/
- return {
- showHour: format.indexOf('H') > -1 || format.indexOf('h') > -1 || format.indexOf('k') > -1,
- showMinute: format.indexOf('m') > -1,
- showSecond: format.indexOf('s') > -1,
- };
+import TimePicker from './dayjs';
+export * from './dayjs';
+export interface TimePickerLocale {
+ placeholder?: string;
+ rangePlaceholder?: [string, string];
}
-export const timePickerProps = () => ({
- size: PropTypes.oneOf(tuple('large', 'default', 'small')),
- value: TimeOrTimesType,
- defaultValue: TimeOrTimesType,
- open: PropTypes.looseBool,
- format: PropTypes.string,
- disabled: PropTypes.looseBool,
- placeholder: PropTypes.string,
- prefixCls: PropTypes.string,
- hideDisabledOptions: PropTypes.looseBool,
- disabledHours: PropTypes.func,
- disabledMinutes: PropTypes.func,
- disabledSeconds: PropTypes.func,
- getPopupContainer: PropTypes.func,
- use12Hours: PropTypes.looseBool,
- focusOnOpen: PropTypes.looseBool,
- hourStep: PropTypes.number,
- minuteStep: PropTypes.number,
- secondStep: PropTypes.number,
- allowEmpty: PropTypes.looseBool,
- allowClear: PropTypes.looseBool,
- inputReadOnly: PropTypes.looseBool,
- clearText: PropTypes.string,
- defaultOpenValue: PropTypes.object,
- popupClassName: PropTypes.string,
- popupStyle: PropTypes.style,
- suffixIcon: PropTypes.any,
- align: PropTypes.object,
- placement: PropTypes.any,
- transitionName: PropTypes.string,
- autofocus: PropTypes.looseBool,
- addon: PropTypes.any,
- clearIcon: PropTypes.any,
- locale: PropTypes.object,
- valueFormat: PropTypes.string,
- onChange: PropTypes.func,
- onAmPmChange: PropTypes.func,
- onOpen: PropTypes.func,
- onClose: PropTypes.func,
- onFocus: PropTypes.func,
- onBlur: PropTypes.func,
- onKeydown: PropTypes.func,
- onOpenChange: PropTypes.func,
-});
-
-export type TimePickerProps = Partial>>;
-
-const TimePicker = defineComponent({
- name: 'ATimePicker',
- mixins: [BaseMixin],
- inheritAttrs: false,
- props: initDefaultProps(timePickerProps(), {
- align: {
- offset: [0, -2],
- },
- disabled: false,
- disabledHours: undefined,
- disabledMinutes: undefined,
- disabledSeconds: undefined,
- hideDisabledOptions: false,
- placement: 'bottomLeft',
- transitionName: 'slide-up',
- focusOnOpen: true,
- allowClear: true,
- }),
- emits: ['update:value', 'update:open', 'change', 'openChange', 'focus', 'blur', 'keydown'],
- setup() {
- return {
- popupRef: null,
- timePickerRef: null,
- configProvider: inject('configProvider', defaultConfigProvider),
- };
- },
-
- data() {
- const { value, defaultValue, valueFormat } = this;
-
- checkValidate('TimePicker', defaultValue, 'defaultValue', valueFormat);
- checkValidate('TimePicker', value, 'value', valueFormat);
- warning(
- !hasProp(this, 'allowEmpty'),
- 'TimePicker',
- '`allowEmpty` is deprecated. Please use `allowClear` instead.',
- );
- return {
- sValue: stringToMoment(value || defaultValue, valueFormat),
- };
- },
- watch: {
- value(val) {
- checkValidate('TimePicker', val, 'value', this.valueFormat);
- this.setState({ sValue: stringToMoment(val, this.valueFormat) });
- },
- },
- created() {
- provide('savePopupRef', this.savePopupRef);
- },
- methods: {
- getDefaultFormat() {
- const { format, use12Hours } = this;
- if (format) {
- return format;
- } else if (use12Hours) {
- return 'h:mm:ss a';
- }
- return 'HH:mm:ss';
- },
-
- getAllowClear() {
- const { allowClear, allowEmpty } = this.$props;
- if (hasProp(this, 'allowClear')) {
- return allowClear;
- }
- return allowEmpty;
- },
- getDefaultLocale() {
- const defaultLocale = {
- ...enUS,
- ...this.$props.locale,
- };
- return defaultLocale;
- },
- savePopupRef(ref) {
- this.popupRef = ref;
- },
- saveTimePicker(timePickerRef) {
- this.timePickerRef = timePickerRef;
- },
- handleChange(value) {
- if (!hasProp(this, 'value')) {
- this.setState({ sValue: value });
- }
- const { format = 'HH:mm:ss' } = this;
- const val = this.valueFormat ? momentToString(value, this.valueFormat) : value;
- this.$emit('update:value', val);
- this.$emit('change', val, (value && value.format(format)) || '');
- },
-
- handleOpenClose({ open }) {
- this.$emit('update:open', open);
- this.$emit('openChange', open);
- },
-
- focus() {
- (this.timePickerRef as any).focus();
- },
-
- blur() {
- (this.timePickerRef as any).blur();
- },
-
- renderInputIcon(prefixCls: string) {
- let suffixIcon = getComponent(this, 'suffixIcon');
- suffixIcon = Array.isArray(suffixIcon) ? suffixIcon[0] : suffixIcon;
- const clockIcon = (suffixIcon &&
- isValidElement(suffixIcon) &&
- cloneElement(suffixIcon, {
- class: `${prefixCls}-clock-icon`,
- })) || ;
-
- return {clockIcon};
- },
-
- renderClearIcon(prefixCls: string) {
- const clearIcon = getComponent(this, 'clearIcon');
- const clearIconPrefixCls = `${prefixCls}-clear`;
-
- if (clearIcon && isValidElement(clearIcon)) {
- return cloneElement(clearIcon, {
- class: clearIconPrefixCls,
- });
- }
-
- return ;
- },
-
- renderTimePicker(locale) {
- let props = getOptionProps(this);
- props = omit(props, ['defaultValue', 'suffixIcon', 'allowEmpty', 'allowClear']);
- const { class: className } = this.$attrs;
- const { prefixCls: customizePrefixCls, getPopupContainer, placeholder, size } = props;
- const getPrefixCls = this.configProvider.getPrefixCls;
- const prefixCls = getPrefixCls('time-picker', customizePrefixCls);
- const inputPrefixCls = getPrefixCls('input');
- const pickerInputClass = classNames(`${prefixCls}-input`, inputPrefixCls);
-
- const format = this.getDefaultFormat();
- const pickerClassName = {
- [className as string]: className,
- [`${prefixCls}-${size}`]: !!size,
- };
- const tempAddon = getComponent(this, 'addon', {}, false);
- const pickerAddon = panel => {
- return tempAddon ? (
-
- {typeof tempAddon === 'function' ? tempAddon(panel) : tempAddon}
-
- ) : null;
- };
- const inputIcon = this.renderInputIcon(prefixCls);
- const clearIcon = this.renderClearIcon(prefixCls);
- const { getPopupContainer: getContextPopupContainer } = this.configProvider;
- const timeProps = {
- ...generateShowHourMinuteSecond(format),
- ...props,
- ...this.$attrs,
- allowEmpty: this.getAllowClear(),
- prefixCls,
- pickerInputClass,
- getPopupContainer: getPopupContainer || getContextPopupContainer,
- format,
- value: this.sValue,
- placeholder: placeholder === undefined ? locale.placeholder : placeholder,
- addon: pickerAddon,
- inputIcon,
- clearIcon,
- class: pickerClassName,
- ref: this.saveTimePicker,
- onChange: this.handleChange,
- onOpen: this.handleOpenClose,
- onClose: this.handleOpenClose,
- };
- return ;
- },
- },
-
- render() {
- return (
-
- );
- },
-});
-
-export default withInstall(TimePicker);
+export default TimePicker;
diff --git a/components/time-picker/locale/ar_EG.ts b/components/time-picker/locale/ar_EG.ts
deleted file mode 100644
index 48ba68e07..000000000
--- a/components/time-picker/locale/ar_EG.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'اختيار الوقت',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/ar_EG.tsx b/components/time-picker/locale/ar_EG.tsx
new file mode 100644
index 000000000..87e95b28d
--- /dev/null
+++ b/components/time-picker/locale/ar_EG.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'اختيار الوقت',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/az_AZ.tsx b/components/time-picker/locale/az_AZ.tsx
new file mode 100644
index 000000000..d016e5b57
--- /dev/null
+++ b/components/time-picker/locale/az_AZ.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Vaxtı seç',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/bg_BG.ts b/components/time-picker/locale/bg_BG.ts
deleted file mode 100644
index e6896fe4a..000000000
--- a/components/time-picker/locale/bg_BG.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Избор на час',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/bg_BG.tsx b/components/time-picker/locale/bg_BG.tsx
new file mode 100644
index 000000000..d18122b26
--- /dev/null
+++ b/components/time-picker/locale/bg_BG.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Избор на час',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/by_BY.tsx b/components/time-picker/locale/by_BY.tsx
new file mode 100644
index 000000000..750979381
--- /dev/null
+++ b/components/time-picker/locale/by_BY.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Выберыце час',
+ rangePlaceholder: ['Час пачатку', 'Час заканчэння'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/ca_ES.ts b/components/time-picker/locale/ca_ES.ts
deleted file mode 100644
index cfd60a8b9..000000000
--- a/components/time-picker/locale/ca_ES.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Seleccionar hora',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/ca_ES.tsx b/components/time-picker/locale/ca_ES.tsx
new file mode 100644
index 000000000..390c6f1eb
--- /dev/null
+++ b/components/time-picker/locale/ca_ES.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Seleccionar hora',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/cs_CZ.ts b/components/time-picker/locale/cs_CZ.ts
deleted file mode 100644
index 5c89f7aff..000000000
--- a/components/time-picker/locale/cs_CZ.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Vybrat čas',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/cs_CZ.tsx b/components/time-picker/locale/cs_CZ.tsx
new file mode 100644
index 000000000..2fc167197
--- /dev/null
+++ b/components/time-picker/locale/cs_CZ.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Vybrat čas',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/da_DK.ts b/components/time-picker/locale/da_DK.ts
deleted file mode 100644
index b3e966e6b..000000000
--- a/components/time-picker/locale/da_DK.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Vælg tid',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/da_DK.tsx b/components/time-picker/locale/da_DK.tsx
new file mode 100644
index 000000000..81d0d5ee8
--- /dev/null
+++ b/components/time-picker/locale/da_DK.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Vælg tid',
+ rangePlaceholder: ['Starttidspunkt', 'Sluttidspunkt'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/de_DE.ts b/components/time-picker/locale/de_DE.ts
deleted file mode 100644
index c912e9e8f..000000000
--- a/components/time-picker/locale/de_DE.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Zeit auswählen',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/de_DE.tsx b/components/time-picker/locale/de_DE.tsx
new file mode 100644
index 000000000..f4b00c50d
--- /dev/null
+++ b/components/time-picker/locale/de_DE.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Zeit auswählen',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/el_GR.ts b/components/time-picker/locale/el_GR.ts
deleted file mode 100644
index 2c0dea51f..000000000
--- a/components/time-picker/locale/el_GR.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Επιλέξτε ώρα',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/el_GR.tsx b/components/time-picker/locale/el_GR.tsx
new file mode 100644
index 000000000..199e1a5e6
--- /dev/null
+++ b/components/time-picker/locale/el_GR.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Επιλέξτε ώρα',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/en_GB.ts b/components/time-picker/locale/en_GB.ts
deleted file mode 100644
index b95b5a362..000000000
--- a/components/time-picker/locale/en_GB.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Select time',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/en_GB.tsx b/components/time-picker/locale/en_GB.tsx
new file mode 100644
index 000000000..d04444685
--- /dev/null
+++ b/components/time-picker/locale/en_GB.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Select time',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/en_US.ts b/components/time-picker/locale/en_US.ts
deleted file mode 100644
index b95b5a362..000000000
--- a/components/time-picker/locale/en_US.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Select time',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/en_US.tsx b/components/time-picker/locale/en_US.tsx
new file mode 100644
index 000000000..56d89dd08
--- /dev/null
+++ b/components/time-picker/locale/en_US.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Select time',
+ rangePlaceholder: ['Start time', 'End time'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/es_ES.ts b/components/time-picker/locale/es_ES.ts
deleted file mode 100644
index cfd60a8b9..000000000
--- a/components/time-picker/locale/es_ES.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Seleccionar hora',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/es_ES.tsx b/components/time-picker/locale/es_ES.tsx
new file mode 100644
index 000000000..390c6f1eb
--- /dev/null
+++ b/components/time-picker/locale/es_ES.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Seleccionar hora',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/et_EE.ts b/components/time-picker/locale/et_EE.ts
deleted file mode 100644
index 7ebc008d0..000000000
--- a/components/time-picker/locale/et_EE.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Vali aeg',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/et_EE.tsx b/components/time-picker/locale/et_EE.tsx
new file mode 100644
index 000000000..72dd5cb8e
--- /dev/null
+++ b/components/time-picker/locale/et_EE.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Vali aeg',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/fa_IR.ts b/components/time-picker/locale/fa_IR.ts
deleted file mode 100644
index 0dcc5d924..000000000
--- a/components/time-picker/locale/fa_IR.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'انتخاب زمان',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/fa_IR.tsx b/components/time-picker/locale/fa_IR.tsx
new file mode 100644
index 000000000..ef5bb6e42
--- /dev/null
+++ b/components/time-picker/locale/fa_IR.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'انتخاب زمان',
+ rangePlaceholder: ['زمان شروع', 'زمان پایان'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/fi_FI.ts b/components/time-picker/locale/fi_FI.ts
deleted file mode 100644
index 6c4d9a122..000000000
--- a/components/time-picker/locale/fi_FI.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Valitse aika',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/fi_FI.tsx b/components/time-picker/locale/fi_FI.tsx
new file mode 100644
index 000000000..bc0c0b4fa
--- /dev/null
+++ b/components/time-picker/locale/fi_FI.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Valitse aika',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/fr_BE.ts b/components/time-picker/locale/fr_BE.ts
deleted file mode 100644
index decc19373..000000000
--- a/components/time-picker/locale/fr_BE.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: "Sélectionner l'heure",
-};
-
-export default locale;
diff --git a/components/time-picker/locale/fr_BE.tsx b/components/time-picker/locale/fr_BE.tsx
new file mode 100644
index 000000000..f066f6c27
--- /dev/null
+++ b/components/time-picker/locale/fr_BE.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: "Sélectionner l'heure",
+};
+
+export default locale;
diff --git a/components/time-picker/locale/fr_CA.tsx b/components/time-picker/locale/fr_CA.tsx
new file mode 100644
index 000000000..8bf25122d
--- /dev/null
+++ b/components/time-picker/locale/fr_CA.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: "Sélectionner l'heure",
+ rangePlaceholder: ['Heure de début', 'Heure de fin'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/fr_FR.ts b/components/time-picker/locale/fr_FR.ts
deleted file mode 100644
index decc19373..000000000
--- a/components/time-picker/locale/fr_FR.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: "Sélectionner l'heure",
-};
-
-export default locale;
diff --git a/components/time-picker/locale/fr_FR.tsx b/components/time-picker/locale/fr_FR.tsx
new file mode 100644
index 000000000..8bf25122d
--- /dev/null
+++ b/components/time-picker/locale/fr_FR.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: "Sélectionner l'heure",
+ rangePlaceholder: ['Heure de début', 'Heure de fin'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/ga_IE.ts b/components/time-picker/locale/ga_IE.ts
deleted file mode 100644
index 5b6ae711b..000000000
--- a/components/time-picker/locale/ga_IE.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Roghnaigh am',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/ga_IE.tsx b/components/time-picker/locale/ga_IE.tsx
new file mode 100644
index 000000000..3a2206903
--- /dev/null
+++ b/components/time-picker/locale/ga_IE.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Roghnaigh am',
+ rangePlaceholder: ['Am tosaigh', 'Am deiridh'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/gl_ES.tsx b/components/time-picker/locale/gl_ES.tsx
new file mode 100644
index 000000000..2a51d722a
--- /dev/null
+++ b/components/time-picker/locale/gl_ES.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Escolla hora',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/he_IL.ts b/components/time-picker/locale/he_IL.ts
deleted file mode 100644
index 6f0cf1a31..000000000
--- a/components/time-picker/locale/he_IL.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'בחר שעה',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/he_IL.tsx b/components/time-picker/locale/he_IL.tsx
new file mode 100644
index 000000000..63b764f82
--- /dev/null
+++ b/components/time-picker/locale/he_IL.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'בחר שעה',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/hi_IN.ts b/components/time-picker/locale/hi_IN.ts
deleted file mode 100644
index 9daaecf3a..000000000
--- a/components/time-picker/locale/hi_IN.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'समय का चयन करें',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/hi_IN.tsx b/components/time-picker/locale/hi_IN.tsx
new file mode 100644
index 000000000..96f4608a3
--- /dev/null
+++ b/components/time-picker/locale/hi_IN.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'समय का चयन करें',
+ rangePlaceholder: ['आरंभिक समय', 'अंत समय'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/hr_HR.ts b/components/time-picker/locale/hr_HR.ts
deleted file mode 100644
index 06096123d..000000000
--- a/components/time-picker/locale/hr_HR.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Odaberite vrijeme',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/hr_HR.tsx b/components/time-picker/locale/hr_HR.tsx
new file mode 100644
index 000000000..484eec8e1
--- /dev/null
+++ b/components/time-picker/locale/hr_HR.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Odaberite vrijeme',
+ rangePlaceholder: ['Vrijeme početka', 'Vrijeme završetka'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/hu_HU.ts b/components/time-picker/locale/hu_HU.ts
deleted file mode 100644
index 404d13ebd..000000000
--- a/components/time-picker/locale/hu_HU.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Válasszon időt',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/hu_HU.tsx b/components/time-picker/locale/hu_HU.tsx
new file mode 100644
index 000000000..e3ce591c0
--- /dev/null
+++ b/components/time-picker/locale/hu_HU.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Válasszon időt',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/id_ID.ts b/components/time-picker/locale/id_ID.ts
deleted file mode 100644
index 92c81ffe1..000000000
--- a/components/time-picker/locale/id_ID.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Pilih waktu',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/id_ID.tsx b/components/time-picker/locale/id_ID.tsx
new file mode 100644
index 000000000..033637a5e
--- /dev/null
+++ b/components/time-picker/locale/id_ID.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Pilih waktu',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/is_IS.ts b/components/time-picker/locale/is_IS.ts
deleted file mode 100644
index 6a5994a28..000000000
--- a/components/time-picker/locale/is_IS.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Velja tíma',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/is_IS.tsx b/components/time-picker/locale/is_IS.tsx
new file mode 100644
index 000000000..efdf1cab6
--- /dev/null
+++ b/components/time-picker/locale/is_IS.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Velja tíma',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/it_IT.ts b/components/time-picker/locale/it_IT.ts
deleted file mode 100644
index b9dd24e3b..000000000
--- a/components/time-picker/locale/it_IT.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: "Selezionare l'orario",
-};
-
-export default locale;
diff --git a/components/time-picker/locale/it_IT.tsx b/components/time-picker/locale/it_IT.tsx
new file mode 100644
index 000000000..6aa9d8034
--- /dev/null
+++ b/components/time-picker/locale/it_IT.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: "Selezionare l'orario",
+};
+
+export default locale;
diff --git a/components/time-picker/locale/ja_JP.ts b/components/time-picker/locale/ja_JP.ts
deleted file mode 100644
index 366344d41..000000000
--- a/components/time-picker/locale/ja_JP.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: '時刻を選択',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/ja_JP.tsx b/components/time-picker/locale/ja_JP.tsx
new file mode 100644
index 000000000..4411853b0
--- /dev/null
+++ b/components/time-picker/locale/ja_JP.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: '時間を選択',
+ rangePlaceholder: ['開始時間', '終了時間'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/kk_KZ.tsx b/components/time-picker/locale/kk_KZ.tsx
new file mode 100644
index 000000000..0d5eff5df
--- /dev/null
+++ b/components/time-picker/locale/kk_KZ.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Уақытты таңдаңыз',
+ rangePlaceholder: ['Бастау уақыты', 'Аяқталу уақыты'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/kmr_IQ.tsx b/components/time-picker/locale/kmr_IQ.tsx
new file mode 100755
index 000000000..07cb074c2
--- /dev/null
+++ b/components/time-picker/locale/kmr_IQ.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Demê hilbijêre',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/kn_IN.ts b/components/time-picker/locale/kn_IN.ts
deleted file mode 100644
index 7d54cd70c..000000000
--- a/components/time-picker/locale/kn_IN.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'ಸಮಯ ಆಯ್ಕೆಮಾಡಿ',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/kn_IN.tsx b/components/time-picker/locale/kn_IN.tsx
new file mode 100644
index 000000000..9fc680548
--- /dev/null
+++ b/components/time-picker/locale/kn_IN.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'ಸಮಯ ಆಯ್ಕೆಮಾಡಿ',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/ko_KR.ts b/components/time-picker/locale/ko_KR.ts
deleted file mode 100644
index fad0ffd8c..000000000
--- a/components/time-picker/locale/ko_KR.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: '날짜 선택',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/ko_KR.tsx b/components/time-picker/locale/ko_KR.tsx
new file mode 100644
index 000000000..8a7f3c388
--- /dev/null
+++ b/components/time-picker/locale/ko_KR.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: '시간 선택',
+ rangePlaceholder: ['시작 시간', '종료 시간'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/ku_IQ.ts b/components/time-picker/locale/ku_IQ.ts
deleted file mode 100755
index 838b1958d..000000000
--- a/components/time-picker/locale/ku_IQ.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Demê hilbijêre',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/ku_KU.ts b/components/time-picker/locale/ku_KU.ts
deleted file mode 100644
index c09f7fca1..000000000
--- a/components/time-picker/locale/ku_KU.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'هەڵبژاردنی کات',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/lt_LT.tsx b/components/time-picker/locale/lt_LT.tsx
new file mode 100644
index 000000000..27fd504d6
--- /dev/null
+++ b/components/time-picker/locale/lt_LT.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Pasirinkite laiką',
+ rangePlaceholder: ['Pradžios laikas', 'Pabaigos laikas'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/lv_LV.ts b/components/time-picker/locale/lv_LV.ts
deleted file mode 100644
index 5e3890e7b..000000000
--- a/components/time-picker/locale/lv_LV.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Izvēlieties laiku',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/lv_LV.tsx b/components/time-picker/locale/lv_LV.tsx
new file mode 100644
index 000000000..bee77ff34
--- /dev/null
+++ b/components/time-picker/locale/lv_LV.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Izvēlieties laiku',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/mk_MK.ts b/components/time-picker/locale/mk_MK.ts
deleted file mode 100644
index b5b355ccf..000000000
--- a/components/time-picker/locale/mk_MK.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Избери време',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/mk_MK.tsx b/components/time-picker/locale/mk_MK.tsx
new file mode 100644
index 000000000..dcef7d65d
--- /dev/null
+++ b/components/time-picker/locale/mk_MK.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Избери време',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/mn_MN.ts b/components/time-picker/locale/mn_MN.ts
deleted file mode 100644
index 70f548611..000000000
--- a/components/time-picker/locale/mn_MN.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Цаг сонгох',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/mn_MN.tsx b/components/time-picker/locale/mn_MN.tsx
new file mode 100644
index 000000000..0359f999d
--- /dev/null
+++ b/components/time-picker/locale/mn_MN.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Цаг сонгох',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/ms_MY.ts b/components/time-picker/locale/ms_MY.ts
deleted file mode 100644
index 2e66160ff..000000000
--- a/components/time-picker/locale/ms_MY.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Sila pilih masa',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/ms_MY.tsx b/components/time-picker/locale/ms_MY.tsx
new file mode 100644
index 000000000..3cfbbe354
--- /dev/null
+++ b/components/time-picker/locale/ms_MY.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Sila pilih masa',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/nb_NO.ts b/components/time-picker/locale/nb_NO.ts
deleted file mode 100644
index dfc0d96e9..000000000
--- a/components/time-picker/locale/nb_NO.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Velg tid',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/nb_NO.tsx b/components/time-picker/locale/nb_NO.tsx
new file mode 100644
index 000000000..7a034022d
--- /dev/null
+++ b/components/time-picker/locale/nb_NO.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Velg tid',
+ rangePlaceholder: ['Starttid', 'Sluttid'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/nl_BE.ts b/components/time-picker/locale/nl_BE.ts
deleted file mode 100644
index 7318ca9f6..000000000
--- a/components/time-picker/locale/nl_BE.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Selecteer tijd',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/nl_BE.tsx b/components/time-picker/locale/nl_BE.tsx
new file mode 100644
index 000000000..cc5ede683
--- /dev/null
+++ b/components/time-picker/locale/nl_BE.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Selecteer tijd',
+ rangePlaceholder: ['Start tijd', 'Eind tijd'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/nl_NL.ts b/components/time-picker/locale/nl_NL.ts
deleted file mode 100644
index 7318ca9f6..000000000
--- a/components/time-picker/locale/nl_NL.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Selecteer tijd',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/nl_NL.tsx b/components/time-picker/locale/nl_NL.tsx
new file mode 100644
index 000000000..cc5ede683
--- /dev/null
+++ b/components/time-picker/locale/nl_NL.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Selecteer tijd',
+ rangePlaceholder: ['Start tijd', 'Eind tijd'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/pl_PL.ts b/components/time-picker/locale/pl_PL.ts
deleted file mode 100644
index bd48f4f68..000000000
--- a/components/time-picker/locale/pl_PL.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Wybierz godzinę',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/pl_PL.tsx b/components/time-picker/locale/pl_PL.tsx
new file mode 100644
index 000000000..12e9c4da7
--- /dev/null
+++ b/components/time-picker/locale/pl_PL.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Wybierz godzinę',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/pt_BR.ts b/components/time-picker/locale/pt_BR.ts
deleted file mode 100644
index ed0247e10..000000000
--- a/components/time-picker/locale/pt_BR.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Hora',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/pt_BR.tsx b/components/time-picker/locale/pt_BR.tsx
new file mode 100644
index 000000000..8b6c5f843
--- /dev/null
+++ b/components/time-picker/locale/pt_BR.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Hora',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/pt_PT.ts b/components/time-picker/locale/pt_PT.ts
deleted file mode 100644
index ed0247e10..000000000
--- a/components/time-picker/locale/pt_PT.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Hora',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/pt_PT.tsx b/components/time-picker/locale/pt_PT.tsx
new file mode 100644
index 000000000..8b6c5f843
--- /dev/null
+++ b/components/time-picker/locale/pt_PT.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Hora',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/ro_RO.ts b/components/time-picker/locale/ro_RO.ts
deleted file mode 100644
index d6ad6c161..000000000
--- a/components/time-picker/locale/ro_RO.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Selectează ora',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/ro_RO.tsx b/components/time-picker/locale/ro_RO.tsx
new file mode 100644
index 000000000..caba56127
--- /dev/null
+++ b/components/time-picker/locale/ro_RO.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Selectează ora',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/ru_RU.ts b/components/time-picker/locale/ru_RU.ts
deleted file mode 100644
index 0490573e7..000000000
--- a/components/time-picker/locale/ru_RU.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Created by Andrey Gayvoronsky on 13/04/16.
- */
-const locale = {
- placeholder: 'Выберите время',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/ru_RU.tsx b/components/time-picker/locale/ru_RU.tsx
new file mode 100644
index 000000000..9f3519165
--- /dev/null
+++ b/components/time-picker/locale/ru_RU.tsx
@@ -0,0 +1,9 @@
+/** Created by Andrey Gayvoronsky on 13/04/16. */
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Выберите время',
+ rangePlaceholder: ['Время начала', 'Время окончания'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/sk_SK.ts b/components/time-picker/locale/sk_SK.ts
deleted file mode 100644
index 4c62d104b..000000000
--- a/components/time-picker/locale/sk_SK.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Vybrať čas',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/sk_SK.tsx b/components/time-picker/locale/sk_SK.tsx
new file mode 100644
index 000000000..ce643fd7e
--- /dev/null
+++ b/components/time-picker/locale/sk_SK.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Vybrať čas',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/sl_SI.ts b/components/time-picker/locale/sl_SI.ts
deleted file mode 100644
index 1d77c9a5b..000000000
--- a/components/time-picker/locale/sl_SI.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Izberite čas',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/sl_SI.tsx b/components/time-picker/locale/sl_SI.tsx
new file mode 100644
index 000000000..942dec7c6
--- /dev/null
+++ b/components/time-picker/locale/sl_SI.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Izberite čas',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/sr_RS.ts b/components/time-picker/locale/sr_RS.ts
deleted file mode 100644
index ef621a0d7..000000000
--- a/components/time-picker/locale/sr_RS.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Izaberite vreme',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/sr_RS.tsx b/components/time-picker/locale/sr_RS.tsx
new file mode 100644
index 000000000..3b21cfee6
--- /dev/null
+++ b/components/time-picker/locale/sr_RS.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Izaberi vreme',
+ rangePlaceholder: ['Vreme početka', 'Vreme završetka'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/sv_SE.ts b/components/time-picker/locale/sv_SE.ts
deleted file mode 100644
index 063c46b78..000000000
--- a/components/time-picker/locale/sv_SE.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Välj tid',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/sv_SE.tsx b/components/time-picker/locale/sv_SE.tsx
new file mode 100644
index 000000000..af732fd21
--- /dev/null
+++ b/components/time-picker/locale/sv_SE.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Välj tid',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/ta_IN.ts b/components/time-picker/locale/ta_IN.tsx
similarity index 59%
rename from components/time-picker/locale/ta_IN.ts
rename to components/time-picker/locale/ta_IN.tsx
index e549c9ad1..dc2bb9489 100644
--- a/components/time-picker/locale/ta_IN.ts
+++ b/components/time-picker/locale/ta_IN.tsx
@@ -1,4 +1,6 @@
-const locale = {
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
placeholder: 'நேரத்தைத் தேர்ந்தெடுக்கவும்',
};
diff --git a/components/time-picker/locale/th_TH.ts b/components/time-picker/locale/th_TH.ts
deleted file mode 100644
index 335e55e01..000000000
--- a/components/time-picker/locale/th_TH.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'เลือกเวลา',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/th_TH.tsx b/components/time-picker/locale/th_TH.tsx
new file mode 100644
index 000000000..d6b79f80c
--- /dev/null
+++ b/components/time-picker/locale/th_TH.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'เลือกเวลา',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/tr_TR.ts b/components/time-picker/locale/tr_TR.ts
deleted file mode 100644
index 66f860dca..000000000
--- a/components/time-picker/locale/tr_TR.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Zaman Seç',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/tr_TR.tsx b/components/time-picker/locale/tr_TR.tsx
new file mode 100644
index 000000000..4578a5ee1
--- /dev/null
+++ b/components/time-picker/locale/tr_TR.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Zaman seç',
+ rangePlaceholder: ['Başlangıç zamanı', 'Bitiş zamanı'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/uk_UA.ts b/components/time-picker/locale/uk_UA.ts
deleted file mode 100644
index 20a81cc53..000000000
--- a/components/time-picker/locale/uk_UA.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Оберіть час',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/uk_UA.tsx b/components/time-picker/locale/uk_UA.tsx
new file mode 100644
index 000000000..9398e4e67
--- /dev/null
+++ b/components/time-picker/locale/uk_UA.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Оберіть час',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/vi_VN.ts b/components/time-picker/locale/vi_VN.ts
deleted file mode 100644
index 05dff1df5..000000000
--- a/components/time-picker/locale/vi_VN.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: 'Chọn thời gian',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/vi_VN.tsx b/components/time-picker/locale/vi_VN.tsx
new file mode 100644
index 000000000..37ae3215e
--- /dev/null
+++ b/components/time-picker/locale/vi_VN.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: 'Chọn thời gian',
+};
+
+export default locale;
diff --git a/components/time-picker/locale/zh_CN.ts b/components/time-picker/locale/zh_CN.ts
deleted file mode 100644
index 6898e575d..000000000
--- a/components/time-picker/locale/zh_CN.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: '请选择时间',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/zh_CN.tsx b/components/time-picker/locale/zh_CN.tsx
new file mode 100644
index 000000000..110be8a2e
--- /dev/null
+++ b/components/time-picker/locale/zh_CN.tsx
@@ -0,0 +1,8 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: '请选择时间',
+ rangePlaceholder: ['开始时间', '结束时间'],
+};
+
+export default locale;
diff --git a/components/time-picker/locale/zh_TW.ts b/components/time-picker/locale/zh_TW.ts
deleted file mode 100644
index cde48a919..000000000
--- a/components/time-picker/locale/zh_TW.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-const locale = {
- placeholder: '請選擇時間',
-};
-
-export default locale;
diff --git a/components/time-picker/locale/zh_TW.tsx b/components/time-picker/locale/zh_TW.tsx
new file mode 100644
index 000000000..b295be19c
--- /dev/null
+++ b/components/time-picker/locale/zh_TW.tsx
@@ -0,0 +1,7 @@
+import type { TimePickerLocale } from '../index';
+
+const locale: TimePickerLocale = {
+ placeholder: '請選擇時間',
+};
+
+export default locale;
diff --git a/components/time-picker/moment.tsx b/components/time-picker/moment.tsx
new file mode 100644
index 000000000..f268cc06f
--- /dev/null
+++ b/components/time-picker/moment.tsx
@@ -0,0 +1,31 @@
+import type { Moment } from 'moment';
+import createTimePicker from './time-picker';
+import momentGenerateConfig from '../vc-picker/generate/moment';
+import type { App } from 'vue';
+import type { PickerTimeProps, RangePickerTimeProps } from '../date-picker/generatePicker';
+
+const { TimePicker, TimeRangePicker } = createTimePicker(momentGenerateConfig);
+
+export interface TimeRangePickerProps extends Omit, 'picker'> {
+ popupClassName?: string;
+ valueFormat?: string;
+}
+export interface TimePickerProps extends Omit, 'picker'> {
+ popupClassName?: string;
+ valueFormat?: string;
+}
+
+/* istanbul ignore next */
+TimePicker.install = function (app: App) {
+ app.component(TimePicker.name, TimePicker);
+ app.component(TimeRangePicker.name, TimeRangePicker);
+ return app;
+};
+TimePicker.TimeRangePicker = TimeRangePicker;
+
+export { TimePicker, TimeRangePicker };
+
+export default TimePicker as typeof TimePicker &
+ Plugin & {
+ readonly TimeRangePicker: typeof TimeRangePicker;
+ };
diff --git a/components/time-picker/style/index.less b/components/time-picker/style/index.less
index 6d7c5814b..af7ae24a9 100644
--- a/components/time-picker/style/index.less
+++ b/components/time-picker/style/index.less
@@ -1,247 +1,3 @@
@import '../../style/themes/index';
@import '../../style/mixins/index';
@import '../../input/style/mixin';
-
-@timepicker-prefix-cls: ~'@{ant-prefix}-time-picker';
-@timepicker-item-height: 32px;
-
-.@{timepicker-prefix-cls}-panel {
- .reset-component();
-
- position: absolute;
- z-index: @zindex-picker;
- font-family: @font-family;
-
- &-inner {
- position: relative;
- left: -2px;
- font-size: @font-size-base;
- text-align: left;
- list-style: none;
- background-color: @component-background;
- background-clip: padding-box;
- border-radius: @border-radius-base;
- outline: none;
- box-shadow: @box-shadow-base;
- }
-
- &-input {
- background: @input-bg;
- width: 100%;
- max-width: @time-picker-panel-column-width * 3 - @control-padding-horizontal - 2px;
- margin: 0;
- padding: 0;
- line-height: normal;
- border: 0;
- outline: 0;
- cursor: auto;
-
- .placeholder();
-
- &-wrap {
- position: relative;
- padding: 7px 2px 7px @control-padding-horizontal;
- border-bottom: @border-width-base @border-style-base @border-color-split;
- }
-
- &-invalid {
- border-color: @error-color;
- }
- }
-
- &-narrow &-input-wrap {
- max-width: @time-picker-panel-column-width * 2;
- }
-
- &-select {
- position: relative; // Fix chrome weird render bug
- float: left;
- width: @time-picker-panel-column-width;
- max-height: @timepicker-item-height * 6;
- overflow: hidden;
- font-size: @font-size-base;
- border-left: @border-width-base @border-style-base @border-color-split;
-
- &:hover {
- overflow-y: auto;
- }
-
- &:first-child {
- margin-left: 0;
- border-left: 0;
- }
-
- &:last-child {
- border-right: 0;
- }
-
- &:only-child {
- width: 100%;
- }
-
- ul {
- // use fixed width instead of 100%
- // to fix strange render bug in safari: https://github.com/ant-design/ant-design/issues/17842
- width: @time-picker-panel-column-width;
- margin: 0;
- padding: 0 0 @timepicker-item-height * 5;
- list-style: none;
- }
-
- li {
- width: 100%;
- height: @timepicker-item-height;
- margin: 0;
- padding: 0 0 0 @control-padding-horizontal;
- line-height: @timepicker-item-height;
- text-align: left;
- list-style: none;
- cursor: pointer;
- transition: all 0.3s;
- user-select: none;
-
- &:focus {
- color: @primary-color;
- font-weight: 600;
- outline: none;
- }
- }
-
- li:hover {
- background: @item-hover-bg;
- }
-
- li&-option-selected {
- font-weight: 600;
- background: @time-picker-selected-bg;
- &:hover {
- background: @time-picker-selected-bg;
- }
- }
-
- li&-option-disabled {
- color: @btn-disable-color;
- &:hover {
- background: transparent;
- cursor: not-allowed;
- }
- &:focus {
- color: @btn-disable-color;
- font-weight: inherit;
- }
- }
- }
-
- &-combobox {
- .clearfix();
- }
-
- &-addon {
- padding: 8px;
- border-top: @border-width-base @border-style-base @border-color-split;
- }
-
- &.slide-up-enter.slide-up-enter-active&-placement-topLeft,
- &.slide-up-enter.slide-up-enter-active&-placement-topRight,
- &.slide-up-appear.slide-up-appear-active&-placement-topLeft,
- &.slide-up-appear.slide-up-appear-active&-placement-topRight {
- animation-name: antSlideDownIn;
- }
-
- &.slide-up-enter.slide-up-enter-active&-placement-bottomLeft,
- &.slide-up-enter.slide-up-enter-active&-placement-bottomRight,
- &.slide-up-appear.slide-up-appear-active&-placement-bottomLeft,
- &.slide-up-appear.slide-up-appear-active&-placement-bottomRight {
- animation-name: antSlideUpIn;
- }
-
- &.slide-up-leave.slide-up-leave-active&-placement-topLeft,
- &.slide-up-leave.slide-up-leave-active&-placement-topRight {
- animation-name: antSlideDownOut;
- }
-
- &.slide-up-leave.slide-up-leave-active&-placement-bottomLeft,
- &.slide-up-leave.slide-up-leave-active&-placement-bottomRight {
- animation-name: antSlideUpOut;
- }
-}
-
-.@{timepicker-prefix-cls} {
- .reset-component();
-
- position: relative;
- display: inline-block;
- width: 128px;
- outline: none;
- cursor: text;
- transition: opacity 0.3s;
-
- &-input {
- .input();
- &[disabled] {
- .disabled();
- }
- }
-
- &-open {
- opacity: 0;
- }
-
- &-icon,
- &-clear {
- position: absolute;
- top: 50%;
- right: @control-padding-horizontal - 1px;
- z-index: 1;
- width: 14px;
- height: 14px;
- margin-top: -7px;
- color: @disabled-color;
- line-height: 14px;
- transition: all 0.3s @ease-in-out;
- user-select: none;
- .@{timepicker-prefix-cls}-clock-icon {
- display: block;
- color: @disabled-color;
- line-height: 1;
- }
- }
-
- &-clear {
- z-index: 2;
- background: @input-bg;
- opacity: 0;
- pointer-events: none;
- &:hover {
- color: @text-color-secondary;
- }
- }
- &:hover &-clear {
- opacity: 1;
- pointer-events: auto;
- }
-
- &-large &-input {
- .input-lg();
- }
-
- &-small &-input {
- .input-sm();
- }
-
- &-small &-icon,
- &-small &-clear {
- right: @control-padding-horizontal-sm - 1px;
- }
-}
-
-// Fix cursor height in safari
-// https://stackoverflow.com/q/3843408/3040605
-// https://browserstrangeness.github.io/css_hacks.html#safari
-@media not all and (min-resolution: 0.001dpcm) {
- @supports (-webkit-appearance: none) and (stroke-color: transparent) {
- .@{ant-prefix}-input {
- line-height: @line-height-base;
- }
- }
-}
diff --git a/components/time-picker/style/index.ts b/components/time-picker/style/index.ts
deleted file mode 100644
index 3a3ab0de5..000000000
--- a/components/time-picker/style/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import '../../style/index.less';
-import './index.less';
diff --git a/components/time-picker/style/index.tsx b/components/time-picker/style/index.tsx
new file mode 100644
index 000000000..b2534aab0
--- /dev/null
+++ b/components/time-picker/style/index.tsx
@@ -0,0 +1,5 @@
+import '../../style/index.less';
+import './index.less';
+
+// style dependencies
+import '../../date-picker/style';
diff --git a/components/time-picker/time-picker.tsx b/components/time-picker/time-picker.tsx
new file mode 100644
index 000000000..63c6e1ac1
--- /dev/null
+++ b/components/time-picker/time-picker.tsx
@@ -0,0 +1,203 @@
+import { defineComponent, ref } from 'vue';
+import type { PickerTimeProps, RangePickerTimeProps } from '../date-picker/generatePicker';
+import generatePicker from '../date-picker/generatePicker';
+import {
+ commonProps,
+ datePickerProps,
+ rangePickerProps,
+} from '../date-picker/generatePicker/props';
+import type { GenerateConfig } from '../vc-picker/generate';
+import type { PanelMode, RangeValue } from '../vc-picker/interface';
+import type { RangePickerSharedProps } from '../vc-picker/RangePicker';
+import devWarning from '../vc-util/devWarning';
+
+export interface TimePickerLocale {
+ placeholder?: string;
+ rangePlaceholder?: [string, string];
+}
+
+const timpePickerProps = {
+ format: String,
+ showNow: { type: Boolean, default: undefined },
+ showHour: { type: Boolean, default: undefined },
+ showMinute: { type: Boolean, default: undefined },
+ showSecond: { type: Boolean, default: undefined },
+ use12Hours: { type: Boolean, default: undefined },
+ hourStep: Number,
+ minuteStep: Number,
+ secondStep: Number,
+ hideDisabledOptions: { type: Boolean, default: undefined },
+ popupClassName: String,
+};
+
+function createTimePicker(generateConfig: GenerateConfig) {
+ const DatePicker = generatePicker(generateConfig, {
+ ...timpePickerProps,
+ order: { type: Boolean, default: true },
+ });
+ const { TimePicker: InternalTimePicker, RangePicker: InternalRangePicker } = DatePicker as any;
+ type TimeRangePickerProps = Omit, 'picker'> & {
+ popupClassName?: string;
+ valueFormat?: string;
+ };
+ type TimePickerProps = Omit, 'picker'> & {
+ popupClassName?: string;
+ valueFormat?: string;
+ };
+ const TimePicker = defineComponent({
+ name: 'ATimePicker',
+ inheritAttrs: false,
+ props: {
+ ...commonProps(),
+ ...datePickerProps(),
+ ...timpePickerProps,
+ } as any,
+ slot: ['addon', 'renderExtraFooter', 'suffixIcon', 'clearIcon'],
+ emits: ['change', 'openChange', 'focus', 'blur', 'ok', 'update:value', 'update:open'],
+ setup(props, { slots, expose, emit, attrs }) {
+ devWarning(
+ !slots.addon,
+ 'TimePicker',
+ '`addon` is deprecated. Please use `renderExtraFooter` instead.',
+ );
+ const pickerRef = ref();
+ expose({
+ focus: () => {
+ pickerRef.value?.focus();
+ },
+ blur: () => {
+ pickerRef.value?.blur();
+ },
+ });
+ const onChange = (value: DateType | string, dateString: string) => {
+ emit('update:value', value);
+ emit('change', value, dateString);
+ };
+ const onOpenChange = (open: boolean) => {
+ emit('update:open', open);
+ emit('openChange', open);
+ };
+ const onFoucs = () => {
+ emit('focus');
+ };
+ const onBlur = () => {
+ emit('blur');
+ };
+ const onOk = (value: DateType) => {
+ emit('ok', value);
+ };
+ return () => {
+ return (
+
+ );
+ };
+ },
+ });
+
+ const TimeRangePicker = defineComponent({
+ name: 'ATimeRangePicker',
+ inheritAttrs: false,
+ props: {
+ ...commonProps(),
+ ...rangePickerProps(),
+ ...timpePickerProps,
+ order: { type: Boolean, default: true },
+ } as any,
+ slot: ['renderExtraFooter', 'suffixIcon', 'clearIcon'],
+ emits: [
+ 'change',
+ 'panelChange',
+ 'ok',
+ 'openChange',
+ 'update:value',
+ 'update:open',
+ 'calendarChange',
+ 'focus',
+ 'blur',
+ ],
+ setup(props, { slots, expose, emit, attrs }) {
+ const pickerRef = ref();
+ expose({
+ focus: () => {
+ pickerRef.value?.focus();
+ },
+ blur: () => {
+ pickerRef.value?.blur();
+ },
+ });
+ const onChange = (
+ values: RangeValue | RangeValue,
+ dateStrings: [string, string],
+ ) => {
+ emit('update:value', values);
+ emit('change', values, dateStrings);
+ };
+ const onOpenChange = (open: boolean) => {
+ emit('update:open', open);
+ emit('openChange', open);
+ };
+ const onFoucs = () => {
+ emit('focus');
+ };
+ const onBlur = () => {
+ emit('blur');
+ };
+ const onPanelChange = (
+ values: RangeValue | RangeValue,
+ modes: [PanelMode, PanelMode],
+ ) => {
+ emit('panelChange', values, modes);
+ };
+ const onOk = (values: RangeValue | RangeValue) => {
+ emit('ok', values);
+ };
+ const onCalendarChange: RangePickerSharedProps['onCalendarChange'] = (
+ values: RangeValue | RangeValue,
+ dateStrings: [string, string],
+ info,
+ ) => {
+ emit('calendarChange', values, dateStrings, info);
+ };
+ return () => {
+ return (
+
+ );
+ };
+ },
+ });
+
+ return {
+ TimePicker,
+ TimeRangePicker,
+ };
+}
+
+export default createTimePicker;
diff --git a/components/upload/UploadList.tsx b/components/upload/UploadList.tsx
index 4137f876a..05f5fdc9b 100644
--- a/components/upload/UploadList.tsx
+++ b/components/upload/UploadList.tsx
@@ -64,7 +64,7 @@ export default defineComponent({
previewFile(file.originFileObj).then(previewDataUrl => {
// Need append '' to avoid dead loop
file.thumbUrl = previewDataUrl || '';
- this.$forceUpdate();
+ (this as any).$forceUpdate();
});
}
});
diff --git a/components/vc-align/Align.tsx b/components/vc-align/Align.tsx
index 6dd82e847..de1f793ba 100644
--- a/components/vc-align/Align.tsx
+++ b/components/vc-align/Align.tsx
@@ -1,4 +1,5 @@
import type { PropType } from 'vue';
+import { nextTick } from 'vue';
import { defineComponent, ref, computed, onMounted, onUpdated, watch, onUnmounted } from 'vue';
import { alignElement, alignPoint } from 'dom-align';
import addEventListener from '../vc-util/Dom/addEventListener';
@@ -8,6 +9,7 @@ import isVisible from '../vc-util/Dom/isVisible';
import { isSamePoint, restoreFocus, monitorResize } from './util';
import type { AlignType, AlignResult, TargetType, TargetPoint } from './interface';
import useBuffer from './hooks/useBuffer';
+import isEqual from 'lodash-es/isEqual';
type OnAlign = (source: HTMLElement, result: AlignResult) => void;
@@ -53,23 +55,18 @@ export default defineComponent({
props: alignProps,
emits: ['align'],
setup(props, { expose, slots }) {
- const cacheRef = ref<{ element?: HTMLElement; point?: TargetPoint }>({});
+ const cacheRef = ref<{ element?: HTMLElement; point?: TargetPoint; align?: AlignType }>({});
const nodeRef = ref();
- const forceAlignPropsRef = computed(() => ({
- disabled: props.disabled,
- target: props.target,
- onAlign: props.onAlign,
- }));
-
const [forceAlign, cancelForceAlign] = useBuffer(
() => {
const {
disabled: latestDisabled,
target: latestTarget,
+ align: latestAlign,
onAlign: latestOnAlign,
- } = forceAlignPropsRef.value;
- if (!latestDisabled && latestTarget && nodeRef.value && nodeRef.value.$el) {
- const source = nodeRef.value.$el;
+ } = props;
+ if (!latestDisabled && latestTarget && nodeRef.value) {
+ const source = nodeRef.value;
let result: AlignResult;
const element = getElement(latestTarget);
@@ -77,18 +74,16 @@ export default defineComponent({
cacheRef.value.element = element;
cacheRef.value.point = point;
-
+ cacheRef.value.align = latestAlign;
// IE lose focus after element realign
// We should record activeElement and restore later
const { activeElement } = document;
-
// We only align when element is visible
if (element && isVisible(element)) {
- result = alignElement(source, element, props.align);
+ result = alignElement(source, element, latestAlign);
} else if (point) {
- result = alignPoint(source, point, props.align);
+ result = alignPoint(source, point, latestAlign);
}
-
restoreFocus(activeElement, source);
if (latestOnAlign && result) {
@@ -118,13 +113,17 @@ export default defineComponent({
const element = getElement(target);
const point = getPoint(target);
- if (nodeRef.value && nodeRef.value.$el !== sourceResizeMonitor.value.element) {
+ if (nodeRef.value !== sourceResizeMonitor.value.element) {
sourceResizeMonitor.value.cancel();
- sourceResizeMonitor.value.element = nodeRef.value.$el;
- sourceResizeMonitor.value.cancel = monitorResize(nodeRef.value.$el, forceAlign);
+ sourceResizeMonitor.value.element = nodeRef.value;
+ sourceResizeMonitor.value.cancel = monitorResize(nodeRef.value, forceAlign);
}
- if (cacheRef.value.element !== element || !isSamePoint(cacheRef.value.point, point)) {
+ if (
+ cacheRef.value.element !== element ||
+ !isSamePoint(cacheRef.value.point, point) ||
+ !isEqual(cacheRef.value.align, props.align)
+ ) {
forceAlign();
// Add resize observer
@@ -137,11 +136,15 @@ export default defineComponent({
};
onMounted(() => {
- goAlign();
+ nextTick(() => {
+ goAlign();
+ });
});
onUpdated(() => {
- goAlign();
+ nextTick(() => {
+ goAlign();
+ });
});
// Listen for disabled change
@@ -154,7 +157,7 @@ export default defineComponent({
cancelForceAlign();
}
},
- { flush: 'post' },
+ { immediate: true, flush: 'post' },
);
// Listen for window resize
@@ -190,7 +193,7 @@ export default defineComponent({
if (child) {
return cloneElement(child[0], { ref: nodeRef }, true, true);
}
- return child && child[0];
+ return null;
};
},
});
diff --git a/components/vc-align/Align1.tsx b/components/vc-align/Align1.tsx
new file mode 100644
index 000000000..6dd82e847
--- /dev/null
+++ b/components/vc-align/Align1.tsx
@@ -0,0 +1,196 @@
+import type { PropType } from 'vue';
+import { defineComponent, ref, computed, onMounted, onUpdated, watch, onUnmounted } from 'vue';
+import { alignElement, alignPoint } from 'dom-align';
+import addEventListener from '../vc-util/Dom/addEventListener';
+import { cloneElement } from '../_util/vnode';
+import isVisible from '../vc-util/Dom/isVisible';
+
+import { isSamePoint, restoreFocus, monitorResize } from './util';
+import type { AlignType, AlignResult, TargetType, TargetPoint } from './interface';
+import useBuffer from './hooks/useBuffer';
+
+type OnAlign = (source: HTMLElement, result: AlignResult) => void;
+
+export interface AlignProps {
+ align: AlignType;
+ target: TargetType;
+ onAlign?: OnAlign;
+ monitorBufferTime?: number;
+ monitorWindowResize?: boolean;
+ disabled?: boolean;
+}
+
+const alignProps = {
+ align: Object as PropType,
+ target: [Object, Function] as PropType,
+ onAlign: Function as PropType,
+ monitorBufferTime: Number,
+ monitorWindowResize: Boolean,
+ disabled: Boolean,
+};
+
+interface MonitorRef {
+ element?: HTMLElement;
+ cancel: () => void;
+}
+
+export interface RefAlign {
+ forceAlign: () => void;
+}
+
+function getElement(func: TargetType) {
+ if (typeof func !== 'function') return null;
+ return func();
+}
+
+function getPoint(point: TargetType) {
+ if (typeof point !== 'object' || !point) return null;
+ return point;
+}
+
+export default defineComponent({
+ name: 'Align',
+ props: alignProps,
+ emits: ['align'],
+ setup(props, { expose, slots }) {
+ const cacheRef = ref<{ element?: HTMLElement; point?: TargetPoint }>({});
+ const nodeRef = ref();
+ const forceAlignPropsRef = computed(() => ({
+ disabled: props.disabled,
+ target: props.target,
+ onAlign: props.onAlign,
+ }));
+
+ const [forceAlign, cancelForceAlign] = useBuffer(
+ () => {
+ const {
+ disabled: latestDisabled,
+ target: latestTarget,
+ onAlign: latestOnAlign,
+ } = forceAlignPropsRef.value;
+ if (!latestDisabled && latestTarget && nodeRef.value && nodeRef.value.$el) {
+ const source = nodeRef.value.$el;
+
+ let result: AlignResult;
+ const element = getElement(latestTarget);
+ const point = getPoint(latestTarget);
+
+ cacheRef.value.element = element;
+ cacheRef.value.point = point;
+
+ // IE lose focus after element realign
+ // We should record activeElement and restore later
+ const { activeElement } = document;
+
+ // We only align when element is visible
+ if (element && isVisible(element)) {
+ result = alignElement(source, element, props.align);
+ } else if (point) {
+ result = alignPoint(source, point, props.align);
+ }
+
+ restoreFocus(activeElement, source);
+
+ if (latestOnAlign && result) {
+ latestOnAlign(source, result);
+ }
+
+ return true;
+ }
+
+ return false;
+ },
+ computed(() => props.monitorBufferTime),
+ );
+
+ // ===================== Effect =====================
+ // Listen for target updated
+ const resizeMonitor = ref({
+ cancel: () => {},
+ });
+ // Listen for source updated
+ const sourceResizeMonitor = ref({
+ cancel: () => {},
+ });
+
+ const goAlign = () => {
+ const target = props.target;
+ const element = getElement(target);
+ const point = getPoint(target);
+
+ if (nodeRef.value && nodeRef.value.$el !== sourceResizeMonitor.value.element) {
+ sourceResizeMonitor.value.cancel();
+ sourceResizeMonitor.value.element = nodeRef.value.$el;
+ sourceResizeMonitor.value.cancel = monitorResize(nodeRef.value.$el, forceAlign);
+ }
+
+ if (cacheRef.value.element !== element || !isSamePoint(cacheRef.value.point, point)) {
+ forceAlign();
+
+ // Add resize observer
+ if (resizeMonitor.value.element !== element) {
+ resizeMonitor.value.cancel();
+ resizeMonitor.value.element = element;
+ resizeMonitor.value.cancel = monitorResize(element, forceAlign);
+ }
+ }
+ };
+
+ onMounted(() => {
+ goAlign();
+ });
+
+ onUpdated(() => {
+ goAlign();
+ });
+
+ // Listen for disabled change
+ watch(
+ () => props.disabled,
+ disabled => {
+ if (!disabled) {
+ forceAlign();
+ } else {
+ cancelForceAlign();
+ }
+ },
+ { flush: 'post' },
+ );
+
+ // Listen for window resize
+ const winResizeRef = ref<{ remove: Function }>(null);
+
+ watch(
+ () => props.monitorWindowResize,
+ monitorWindowResize => {
+ if (monitorWindowResize) {
+ if (!winResizeRef.value) {
+ winResizeRef.value = addEventListener(window, 'resize', forceAlign);
+ }
+ } else if (winResizeRef.value) {
+ winResizeRef.value.remove();
+ winResizeRef.value = null;
+ }
+ },
+ { flush: 'post' },
+ );
+ onUnmounted(() => {
+ resizeMonitor.value.cancel();
+ sourceResizeMonitor.value.cancel();
+ if (winResizeRef.value) winResizeRef.value.remove();
+ cancelForceAlign();
+ });
+
+ expose({
+ forceAlign: () => forceAlign(true),
+ });
+
+ return () => {
+ const child = slots?.default();
+ if (child) {
+ return cloneElement(child[0], { ref: nodeRef }, true, true);
+ }
+ return child && child[0];
+ };
+ },
+});
diff --git a/components/vc-align/util.ts b/components/vc-align/util.ts
index ecff1cdfc..585828c1b 100644
--- a/components/vc-align/util.ts
+++ b/components/vc-align/util.ts
@@ -1,5 +1,6 @@
import contains from '../vc-util/Dom/contains';
import type { TargetPoint } from './interface';
+import ResizeObserver from 'resize-observer-polyfill';
export function isSamePoint(prev: TargetPoint, next: TargetPoint) {
if (prev === next) return true;
diff --git a/components/vc-calendar/assets/common/Calendar.less b/components/vc-calendar/assets/common/Calendar.less
deleted file mode 100644
index 1e5fe9d5a..000000000
--- a/components/vc-calendar/assets/common/Calendar.less
+++ /dev/null
@@ -1,106 +0,0 @@
-.@{prefixClass} {
- &-input-wrap {
- position: relative;
- padding: 6px;
- border-bottom: 1px solid #e9e9e9;
- &:after {
- content: '';
- clear: both;
- }
- }
-
- &-date-input-wrap {
- overflow: hidden;
- }
- &-time-picker {
- position: absolute;
- width: 100%;
- top: 34px;
- background-color: white;
- height: 217px;
- &-panel {
- width: 100%;
- position: relative;
- .@{timePickerClass}-panel {
- &-input-wrap {
- display: none;
- }
- &-inner {
- border: none;
- box-shadow: none;
- }
- &-select {
- width: 84px;
- ul {
- max-height: 217px;
- }
- li {
- text-align: center;
- padding: 0;
- }
- }
- }
- }
- }
- &-time-picker-wrap {
- float: left;
- width: 100%;
-
- .@{timePickerClass} {
- width: 100%;
-
- &-input {
- padding: 0;
- border: 1px solid transparent;
- outline: 0;
- height: 22px;
- }
-
- &-icon {
- display: none;
- }
- }
- }
-
- &-input {
- border: 1px solid transparent;
- width: 100%;
- color: #666;
- cursor: text;
- line-height: 1.5;
- outline: 0;
- height: 22px;
-
- &-invalid {
- border-color: red;
- }
- }
-
- &-clear-btn {
- z-index: 9999;
- position: absolute;
- right: 6px;
- cursor: pointer;
- overflow: hidden;
- width: 20px;
- height: 20px;
- text-align: center;
- line-height: 20px;
- top: 6px;
- margin: 0;
- }
-
- &-clear-btn:after {
- content: 'x';
- font-size: 12px;
- color: #aaa;
- display: inline-block;
- line-height: 1;
- width: 20px;
- transition: color 0.3s ease;
- }
-
- &-clear-btn:hover:after {
- color: #666;
- }
-}
diff --git a/components/vc-calendar/assets/common/FullCalendar.less b/components/vc-calendar/assets/common/FullCalendar.less
deleted file mode 100644
index b9ee2e0df..000000000
--- a/components/vc-calendar/assets/common/FullCalendar.less
+++ /dev/null
@@ -1,91 +0,0 @@
-.@{prefixClass}-full {
- width: 275px;
- &-header {
- padding: 5px 10px;
- text-align: center;
- user-select: none;
- -webkit-user-select: none;
- border-bottom: 1px solid #ccc;
- overflow: hidden;
-
- &-month-select,
- &-year-select {
- width: 70px;
- float: right;
- margin-right: 5px;
- }
-
- &-switcher {
- float: right;
- display: inline-block;
- &-normal:hover {
- border-color: #23c0fa;
- box-shadow: 0 0 2px rgba(45, 183, 245, 0.8);
- cursor: pointer;
- }
- &-focus {
- border-color: #3fc7fa;
- background-color: #3fc7fa;
- color: #fff;
- }
- > span {
- float: left;
- height: 28px;
- line-height: 24px;
- border: 1px solid #d9d9d9;
- padding: 0 10px;
- color: #666;
- &:first-child {
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px;
- border-right: none;
- }
- &:last-child {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
- border-left: none;
- }
- }
- }
- }
-}
-
-.@{prefixClass}-fullscreen {
- width: auto;
-
- .@{prefixClass}-full-header {
- border-bottom: none;
- }
-
- .@{prefixClass} {
- &-column-header {
- text-align: right;
- padding-right: 12px;
- }
- &-cell {
- padding: 0;
- }
- &-cell .@{prefixClass}-date,
- &-month-panel-cell .@{prefixClass}-month-panel-month {
- display: block;
- height: 116px;
- width: auto;
- border-radius: 0;
- margin: 0 4px;
- border: none;
- border-top: 2px solid #eee;
- text-align: right;
- padding-right: 8px;
- }
- &-selected-day .@{prefixClass}-date,
- &-month-panel-selected-cell .@{prefixClass}-month-panel-month {
- background-color: #ebfaff;
- color: #666;
- }
- &-today .@{prefixClass}-date,
- &-month-panel-selected-cell .@{prefixClass}-month-panel-month {
- border-top-color: #3fc7fa;
- color: #3fc7fa;
- }
- }
-}
diff --git a/components/vc-calendar/assets/common/Picker.less b/components/vc-calendar/assets/common/Picker.less
deleted file mode 100644
index 0a5971784..000000000
--- a/components/vc-calendar/assets/common/Picker.less
+++ /dev/null
@@ -1,10 +0,0 @@
-.@{prefixClass}-picker {
- position: absolute;
- left: -9999px;
- top: -9999px;
- z-index: 1000;
-
- &-hidden {
- display: none;
- }
-}
diff --git a/components/vc-calendar/assets/common/RangeCalendar.less b/components/vc-calendar/assets/common/RangeCalendar.less
deleted file mode 100644
index 3b90110dc..000000000
--- a/components/vc-calendar/assets/common/RangeCalendar.less
+++ /dev/null
@@ -1,131 +0,0 @@
-@input-box-height: 35px;
-
-.@{prefixClass}-range {
- width: 502px;
- overflow: hidden;
-
- &-part {
- width: 250px;
- position: relative;
-
- .@{prefixClass}-time-picker {
- top: 69px;
- &-panel {
- &-select {
- width: 77px;
- }
- }
- }
- }
-
- &-left {
- float: left;
- .@{prefixClass}-time-picker-panel {
- &-select:last-child {
- border-right: 1px solid #e9e9e9;
- }
- }
- }
-
- &-right {
- float: right;
- .@{prefixClass}-time-picker-panel {
- left: 21px;
-
- &-select:first-child {
- border-left: 1px solid #e9e9e9;
- }
- }
- }
-
- &-middle {
- position: absolute;
- margin-left: -10px;
- text-align: center;
- height: @input-box-height;
- line-height: @input-box-height;
- }
- .@{prefixClass}-date-panel::after {
- content: '.';
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
- }
-
- .@{prefixClass}-input-wrap {
- height: @input-box-height;
- }
- .@{prefixClass}-input,
- .@{timePickerClass}-input {
- padding: 1px 7px;
- height: 22px;
- }
-
- .@{prefixClass}-body,
- .@{prefixClass}-decade-panel-body,
- .@{prefixClass}-year-panel-body,
- .@{prefixClass}-month-panel-body {
- border-bottom: 1px solid #e9e9e9;
- }
-
- &.@{prefixClass}-week-number {
- width: 574px;
-
- .@{prefixClass}-range {
- &-part {
- width: 286px;
- .@{prefixClass}-time-picker {
- top: 69px;
- &-panel {
- &-select {
- width: 89px;
- }
- }
- }
- }
- &-right {
- .@{prefixClass}-time-picker-panel {
- left: 36px;
- }
- }
- }
- }
-
- .@{prefixClass}-year-panel,
- .@{prefixClass}-month-panel,
- .@{prefixClass}-decade-panel {
- top: @input-box-height;
- }
- .@{prefixClass}-month-panel .@{prefixClass}-year-panel {
- top: 0;
- }
- .@{prefixClass}-decade-panel-table,
- .@{prefixClass}-year-panel-table,
- .@{prefixClass}-month-panel-table {
- height: 198px;
- }
-
- .@{prefixClass}-in-range-cell {
- background: #ebf4f8;
- border-radius: 0;
- }
-
- &-bottom {
- text-align: right;
- }
-
- .@{prefixClass}-footer {
- border-top: none;
- padding: 0;
- &-btn {
- padding: 10px 12px 10px 0;
- }
- }
- .@{prefixClass}-ok-btn {
- position: static;
- }
- .@{prefixClass}-today-btn {
- float: left;
- }
-}
diff --git a/components/vc-calendar/assets/common/index.less b/components/vc-calendar/assets/common/index.less
deleted file mode 100644
index 07caf25b9..000000000
--- a/components/vc-calendar/assets/common/index.less
+++ /dev/null
@@ -1,16 +0,0 @@
-@prefixClass: rc-calendar;
-@timePickerClass: rc-time-picker;
-
-.@{prefixClass} {
- box-sizing: border-box;
- * {
- box-sizing: border-box;
- }
-}
-
-.@{prefixClass}-hidden {
- display: none;
-}
-
-@import 'Calendar.less';
-@import 'Picker.less';
diff --git a/components/vc-calendar/assets/index.less b/components/vc-calendar/assets/index.less
deleted file mode 100644
index ec7406d8c..000000000
--- a/components/vc-calendar/assets/index.less
+++ /dev/null
@@ -1,10 +0,0 @@
-@import './common/index.less';
-@import 'index/Picker';
-@import 'index/Calendar';
-@import 'index/Time';
-@import 'index/TimePanel';
-@import 'index/MonthPanel';
-@import 'index/YearPanel';
-@import 'index/DecadePanel';
-@import 'common/RangeCalendar';
-@import 'common/FullCalendar';
diff --git a/components/vc-calendar/assets/index/Calendar.less b/components/vc-calendar/assets/index/Calendar.less
deleted file mode 100644
index 1c387b775..000000000
--- a/components/vc-calendar/assets/index/Calendar.less
+++ /dev/null
@@ -1,301 +0,0 @@
-.@{prefixClass} {
- position: relative;
- outline: none;
- font-family: Arial, 'Hiragino Sans GB', 'Microsoft Yahei', 'Microsoft Sans Serif',
- 'WenQuanYi Micro Hei', sans-serif;
- width: 253px;
- border: 1px solid #ccc;
- list-style: none;
- font-size: 12px;
- text-align: left;
- background-color: #fff;
- border-radius: 3px;
- box-shadow: 0 1px 5px #ccc;
- background-clip: padding-box;
- border: 1px solid #ccc;
- line-height: 1.5;
-
- &-date-panel,
- &-panel {
- position: relative;
- outline: none;
- }
-
- &-week-number {
- width: 286px;
-
- &-cell {
- text-align: center;
- }
- }
-
- &-header {
- padding: 0 10px;
- height: 34px;
- line-height: 30px;
- text-align: center;
- user-select: none;
- -webkit-user-select: none;
- border-bottom: 1px solid #ccc;
-
- > a {
- font-weight: bold;
- display: inline-block;
- padding: 0px 5px;
- line-height: 34px;
- text-align: center;
- width: 30px;
-
- &:hover {
- cursor: pointer;
- color: #23c0fa;
- }
- }
-
- .@{prefixClass}-prev-month-btn {
- position: absolute;
- left: 25px;
-
- &:after {
- content: '‹';
- }
- }
-
- .@{prefixClass}-next-month-btn {
- position: absolute;
- right: 25px;
-
- &:after {
- content: '›';
- }
- }
- }
-
- &-year-select,
- &-month-select,
- &-day-select {
- display: inline-block;
- font-size: 12px;
- font-weight: bold;
- color: #666;
- padding: 0 8px;
- line-height: 34px;
-
- &:hover {
- cursor: pointer;
- color: #23c0fa;
- }
- }
-
- &-prev-month-btn,
- &-next-month-btn,
- &-prev-year-btn,
- &-next-year-btn {
- position: absolute;
- top: 0;
- cursor: pointer;
- color: #999;
- font-family: Arial, 'Hiragino Sans GB', 'Microsoft Yahei', 'Microsoft Sans Serif', sans-serif;
- padding: 0 5px;
- font-size: 16px;
- display: inline-block;
- line-height: 34px;
-
- &:hover {
- color: #23c0fa;
- }
- }
-
- &-next-year-btn {
- right: 0;
-
- &:after {
- content: '»';
- }
- }
-
- &-prev-year-btn {
- left: 0;
-
- &:after {
- content: '«';
- }
- }
-
- &-body {
- padding: 9px 10px 10px;
- height: 217px;
- }
-
- table {
- border-collapse: collapse;
- max-width: 100%;
- background-color: transparent;
- width: 100%;
- }
-
- table,
- td,
- th,
- td {
- border: none;
- }
-
- &-table {
- border-spacing: 0;
- margin-bottom: 0;
- }
-
- &-column-header {
- line-height: 18px;
- padding: 6px 0;
- width: 33px;
- text-align: center;
- .@{prefixClass}-column-header-inner {
- display: block;
- font-weight: normal;
- }
- }
-
- &-week-number-header {
- .@{prefixClass}-column-header-inner {
- display: none;
- }
- }
-
- &-cell {
- padding: 1px 0;
- }
-
- &-date {
- display: block;
- margin: 0 auto;
- color: #666;
- border-radius: 4px 4px;
- width: 26px;
- height: 26px;
- padding: 0;
- background: transparent;
- line-height: 26px;
- text-align: center;
-
- &:hover {
- background: #ebfaff;
- cursor: pointer;
- }
- }
-
- &-selected-day &-date {
- background: tint(#3fc7fa, 80%);
- }
-
- &-selected-date &-date {
- background: #3fc7fa;
- color: #fff;
- &:hover {
- background: #3fc7fa;
- }
- }
-
- &-today &-date {
- border: 1px solid #3fc7fa;
- }
-
- &-disabled-cell &-date {
- cursor: not-allowed;
- color: #bcbcbc;
- background: #f3f3f3;
- border-radius: 0;
- width: auto;
-
- &:hover {
- background: #f3f3f3;
- }
- }
-
- &-disabled-cell-first-of-row &-date {
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px;
- }
-
- &-disabled-cell-last-of-row &-date {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
- }
-
- &-last-month-cell &-date,
- &-next-month-btn-day &-date {
- color: #bbb;
- }
-
- &-footer {
- border-top: 1px solid #ccc;
- padding: 10px 0;
- text-align: center;
- position: relative;
-
- .@{timePickerClass} {
- width: 90px;
- &-input {
- height: 24px;
- }
- }
- &-show-ok {
- text-align: right;
- .@{prefixClass} {
- &-footer-btn {
- padding-right: 12px;
- }
-
- &-time-picker-btn {
- margin-left: 0;
- padding: 0 12px;
- }
- &-today-btn {
- float: left;
- padding-left: 12px;
- }
- }
- }
- }
-
- &-footer-btn {
- margin-top: 2px;
-
- &:after {
- content: 'x';
- height: 0;
- font-size: 0;
- overflow: hidden;
- clear: both;
- }
- }
-
- &-time-picker-btn {
- margin-left: 10px;
- }
-
- &-today-btn,
- &-ok-btn,
- &-time-picker-btn {
- display: inline-block;
- text-align: center;
- color: #f46830;
-
- &:hover {
- cursor: pointer;
- color: #23c0fa;
- }
-
- &-disabled {
- color: #bbb;
- &:hover {
- color: #bbb;
- }
- }
- }
-
- &-today-btn {
- padding-left: 10px;
- }
-}
diff --git a/components/vc-calendar/assets/index/DecadePanel.less b/components/vc-calendar/assets/index/DecadePanel.less
deleted file mode 100644
index b758eb57c..000000000
--- a/components/vc-calendar/assets/index/DecadePanel.less
+++ /dev/null
@@ -1,122 +0,0 @@
-.@{prefixClass}-decade-panel {
- left: 0;
- top: 0;
- bottom: 0;
- right: 0;
- background: #ffffff;
- z-index: 10;
- position: absolute;
- outline: none;
- display: flex;
- flex-direction: column;
-}
-
-.@{prefixClass}-decade-panel-hidden {
- display: none;
-}
-
-.@{prefixClass}-decade-panel-header {
- padding: 0 10px;
- height: 34px;
- line-height: 34px;
- position: relative;
- text-align: center;
- user-select: none;
- -webkit-user-select: none;
- border-bottom: 1px solid #ccc;
-
- > a {
- font-weight: bold;
- display: inline-block;
- padding: 1px 5px;
- text-align: center;
- width: 30px;
-
- &:hover {
- cursor: pointer;
- color: #23c0fa;
- }
- }
-}
-
-.@{prefixClass}-decade-panel-prev-century-btn,
-.@{prefixClass}-decade-panel-next-century-btn {
- position: absolute;
- top: 0;
-}
-
-.@{prefixClass}-decade-panel-next-century-btn {
- &:after {
- content: '»';
- }
-}
-
-.@{prefixClass}-decade-panel-prev-century-btn {
- user-select: none;
- left: 0;
- &:after {
- content: '«';
- }
-}
-
-.@{prefixClass}-decade-panel-next-century-btn {
- user-select: none;
- right: 0;
-}
-
-.@{prefixClass}-decade-panel-body {
- flex: 1;
- padding: 9px 10px 10px;
-}
-
-.@{prefixClass}-decade-panel-footer {
- border-top: 1px solid #ccc;
- line-height: 38px;
-}
-
-.@{prefixClass}-decade-panel-table {
- table-layout: fixed;
- width: 100%;
- height: 100%;
- border-collapse: separate;
-}
-
-.@{prefixClass}-decade-panel-cell {
- text-align: center;
-}
-
-.@{prefixClass}-decade-panel-decade {
- display: block;
- margin: 0 auto;
- color: #666;
- border-radius: 4px 4px;
- height: 36px;
- padding: 0;
- background: transparent;
- line-height: 36px;
- text-align: center;
-
- &:hover {
- background: #ebfaff;
- cursor: pointer;
- }
-}
-
-.@{prefixClass}-decade-panel-selected-cell .@{prefixClass}-decade-panel-decade {
- background: #3fc7fa;
- color: #fff;
-
- &:hover {
- background: #3fc7fa;
- color: #fff;
- }
-}
-
-.@{prefixClass}-decade-panel-last-century-cell,
-.@{prefixClass}-decade-panel-next-century-cell {
- .@{prefixClass}-decade-panel-decade {
- user-select: none;
- -webkit-user-select: none;
- color: rgba(0, 0, 0, 0.25);
- }
-}
diff --git a/components/vc-calendar/assets/index/Input.less b/components/vc-calendar/assets/index/Input.less
deleted file mode 100644
index 65d550d0e..000000000
--- a/components/vc-calendar/assets/index/Input.less
+++ /dev/null
@@ -1,23 +0,0 @@
-.input() {
- height: 25px;
- position: relative;
- display: inline-block;
- margin: 0 0;
- padding: 4px 10px;
- border-radius: 6px 6px;
- border: 1px solid #d9d9d9;
- background-color: #ffffff;
- color: #666;
- line-height: 1.5;
- transform: border 0.3s cubic-bezier(0.35, 0, 0.25, 1),
- background 0.3s cubic-bezier(0.35, 0, 0.25, 1), box-shadow 0.3s cubic-bezier(0.35, 0, 0.25, 1);
-
- &:hover {
- border-color: #23c0fa;
- }
-
- &:focus {
- border-color: #23c0fa;
- box-shadow: 0 0 3px #23c0fa;
- }
-}
diff --git a/components/vc-calendar/assets/index/MonthPanel.less b/components/vc-calendar/assets/index/MonthPanel.less
deleted file mode 100644
index 5bb3fc7a0..000000000
--- a/components/vc-calendar/assets/index/MonthPanel.less
+++ /dev/null
@@ -1,143 +0,0 @@
-.@{prefixClass}-month-panel {
- left: 0;
- top: 0;
- bottom: 0;
- right: 0;
- background: #ffffff;
- z-index: 10;
- position: absolute;
- outline: none;
-
- > div {
- height: 100%;
- display: flex;
- flex-direction: column;
- }
-}
-
-.@{prefixClass}-month-panel-hidden {
- display: none;
-}
-
-.@{prefixClass}-month-panel-header {
- padding: 0 10px;
- height: 34px;
- line-height: 30px;
- position: relative;
- text-align: center;
- user-select: none;
- -webkit-user-select: none;
- border-bottom: 1px solid #ccc;
-
- > a {
- font-weight: bold;
- display: inline-block;
- padding: 4px 5px;
- text-align: center;
- width: 30px;
-
- &:hover {
- cursor: pointer;
- color: #23c0fa;
- }
- }
-}
-
-.@{prefixClass}-month-panel-prev-year-btn,
-.@{prefixClass}-month-panel-next-year-btn {
- position: absolute;
- top: 0;
-}
-
-.@{prefixClass}-month-panel-next-year-btn {
- &:after {
- content: '»';
- }
-}
-
-.@{prefixClass}-month-panel-prev-year-btn {
- user-select: none;
- left: 0;
-
- &:after {
- content: '«';
- }
-}
-
-.@{prefixClass}-month-panel .@{prefixClass}-month-panel-year-select {
- width: 180px;
-}
-
-.@{prefixClass}-month-panel-year-select-arrow {
- display: none;
-}
-
-.@{prefixClass}-month-panel-next-year-btn {
- user-select: none;
- right: 0;
-}
-
-.@{prefixClass}-month-panel-body {
- flex: 1;
- padding: 9px 10px 10px;
-}
-
-.@{prefixClass}-month-panel-footer {
- border-top: 1px solid #ccc;
- line-height: 38px;
-}
-
-.@{prefixClass}-month-panel-table {
- table-layout: fixed;
- width: 100%;
- height: 100%;
- border-collapse: separate;
-}
-
-.@{prefixClass}-month-panel-cell {
- text-align: center;
-
- .@{prefixClass}-month-panel-month {
- display: block;
- width: 46px;
- margin: 0 auto;
- color: #666;
- border-radius: 4px 4px;
- height: 36px;
- padding: 0;
- background: transparent;
- line-height: 36px;
- text-align: center;
-
- &:hover {
- background: #ebfaff;
- cursor: pointer;
- }
- }
-
- &-disabled {
- .@{prefixClass}-month-panel-month {
- color: #bfbfbf;
-
- &:hover {
- background: white;
- cursor: not-allowed;
- }
- }
- }
-}
-
-.@{prefixClass}-month-panel-selected-cell .@{prefixClass}-month-panel-month {
- background: #3fc7fa;
- color: #fff;
-
- &:hover {
- background: #3fc7fa;
- color: #fff;
- }
-}
-
-.@{prefixClass}-month-header-wrap {
- position: relative;
- height: 308px;
-}
diff --git a/components/vc-calendar/assets/index/Picker.less b/components/vc-calendar/assets/index/Picker.less
deleted file mode 100644
index 3c111d3ae..000000000
--- a/components/vc-calendar/assets/index/Picker.less
+++ /dev/null
@@ -1,110 +0,0 @@
-.@{prefixClass} {
- &-picker {
- .effect() {
- animation-duration: 0.3s;
- animation-fill-mode: both;
- transform-origin: 0 0;
- display: block !important;
- }
-
- &-slide-up-enter {
- .effect();
- opacity: 0;
- animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);
- animation-play-state: paused;
- }
-
- &-slide-up-appear {
- .effect();
- opacity: 0;
- animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);
- animation-play-state: paused;
- }
-
- &-slide-up-leave {
- .effect();
- opacity: 1;
- animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);
- animation-play-state: paused;
- }
-
- &-slide-up-enter&-slide-up-enter-active&-placement-bottomLeft,
- &-slide-up-enter&-slide-up-enter-active&-placement-bottomRight,
- &-slide-up-appear&-slide-up-appear-active&-placement-bottomLeft,
- &-slide-up-appear&-slide-up-appear-active&-placement-bottomRight {
- animation-name: rcDropdownSlideUpIn;
- animation-play-state: running;
- }
-
- &-slide-up-enter&-slide-up-enter-active&-placement-topLeft,
- &-slide-up-enter&-slide-up-enter-active&-placement-topRight,
- &-slide-up-appear&-slide-up-appear-active&-placement-topLeft,
- &-slide-up-appear&-slide-up-appear-active&-placement-topRight {
- animation-name: rcDropdownSlideDownIn;
- animation-play-state: running;
- }
-
- &-slide-up-leave&-slide-up-leave-active&-placement-bottomLeft,
- &-slide-up-leave&-slide-up-leave-active&-placement-bottomRight {
- animation-name: rcDropdownSlideUpOut;
- animation-play-state: running;
- }
-
- &-slide-up-leave&-slide-up-leave-active&-placement-topLeft,
- &-slide-up-leave&-slide-up-leave-active&-placement-topRight {
- animation-name: rcDropdownSlideDownOut;
- animation-play-state: running;
- }
-
- @keyframes rcDropdownSlideUpIn {
- 0% {
- opacity: 0;
- transform-origin: 0% 0%;
- transform: scaleY(0);
- }
- 100% {
- opacity: 1;
- transform-origin: 0% 0%;
- transform: scaleY(1);
- }
- }
-
- @keyframes rcDropdownSlideUpOut {
- 0% {
- opacity: 1;
- transform-origin: 0% 0%;
- transform: scaleY(1);
- }
- 100% {
- opacity: 0;
- transform-origin: 0% 0%;
- transform: scaleY(0);
- }
- }
-
- @keyframes rcDropdownSlideDownIn {
- 0% {
- opacity: 0;
- transform-origin: 100% 100%;
- transform: scaleY(0);
- }
- 100% {
- opacity: 1;
- transform-origin: 100% 100%;
- transform: scaleY(1);
- }
- }
- @keyframes rcDropdownSlideDownOut {
- 0% {
- opacity: 1;
- transform-origin: 100% 100%;
- transform: scaleY(1);
- }
- 100% {
- opacity: 0;
- transform-origin: 100% 100%;
- transform: scaleY(0);
- }
- }
- }
-}
diff --git a/components/vc-calendar/assets/index/Time.less b/components/vc-calendar/assets/index/Time.less
deleted file mode 100644
index e860d73cb..000000000
--- a/components/vc-calendar/assets/index/Time.less
+++ /dev/null
@@ -1,6 +0,0 @@
-@import './Input.less';
-
-.@{prefixClass}-time-input {
- .input();
- width: 40px;
-}
diff --git a/components/vc-calendar/assets/index/TimePanel.less b/components/vc-calendar/assets/index/TimePanel.less
deleted file mode 100644
index 66e5e916a..000000000
--- a/components/vc-calendar/assets/index/TimePanel.less
+++ /dev/null
@@ -1,72 +0,0 @@
-.@{prefixClass}-time-panel {
- left: 0;
- top: 0;
- bottom: 0;
- right: 0;
- background: #ffffff;
- z-index: 10;
- position: absolute;
- outline: none;
-}
-
-.@{prefixClass}-time-panel-header {
- padding: 0 10px;
- height: 34px;
- line-height: 34px;
- position: relative;
- text-align: center;
- user-select: none;
- -webkit-user-select: none;
- border-bottom: 1px solid #ccc;
-}
-
-.@{prefixClass}-time-panel-body {
- padding: 9px 10px 10px;
-}
-
-.@{prefixClass}-time-panel-title {
- width: 180px;
- font-weight: bold;
- display: inline-block;
- padding: 4px 5px;
- text-align: center;
- height: 30px;
- line-height: 22px;
- border-radius: 4px;
-}
-
-.@{prefixClass}-time-panel-table {
- table-layout: fixed;
- width: 100%;
- height: 255px;
- border-collapse: separate;
-}
-
-.@{prefixClass}-time-panel-cell {
- text-align: center;
- height: 42px;
- vertical-align: middle;
-}
-
-.@{prefixClass}-time-panel-time {
- line-height: 26px;
- display: block;
- border-radius: 4px;
- width: 26px;
- margin: 0 auto;
-
- &:hover {
- background: #ebfaff;
- cursor: pointer;
- }
-}
-
-.@{prefixClass}-time-panel-selected-cell .@{prefixClass}-time-panel-time {
- background: #3fc7fa;
- color: #fff;
-
- &:hover {
- background: #3fc7fa;
- color: #fff;
- }
-}
diff --git a/components/vc-calendar/assets/index/YearPanel.less b/components/vc-calendar/assets/index/YearPanel.less
deleted file mode 100644
index 77ba5c778..000000000
--- a/components/vc-calendar/assets/index/YearPanel.less
+++ /dev/null
@@ -1,136 +0,0 @@
-.@{prefixClass}-year-panel {
- left: 0;
- top: 0;
- bottom: 0;
- right: 0;
- background: #ffffff;
- z-index: 10;
- position: absolute;
- outline: none;
-
- > div {
- height: 100%;
- display: flex;
- flex-direction: column;
- }
-}
-
-.@{prefixClass}-year-panel-hidden {
- display: none;
-}
-
-.@{prefixClass}-year-panel-header {
- padding: 0 10px;
- height: 34px;
- line-height: 30px;
- position: relative;
- text-align: center;
- user-select: none;
- -webkit-user-select: none;
- border-bottom: 1px solid #ccc;
-
- > a {
- font-weight: bold;
- display: inline-block;
- padding: 4px 5px;
- text-align: center;
- width: 30px;
-
- &:hover {
- cursor: pointer;
- color: #23c0fa;
- }
- }
-}
-
-.@{prefixClass}-year-panel-prev-decade-btn,
-.@{prefixClass}-year-panel-next-decade-btn {
- position: absolute;
- top: 0;
-}
-
-.@{prefixClass}-year-panel-next-decade-btn {
- &:after {
- content: '»';
- }
-}
-
-.@{prefixClass}-year-panel-prev-decade-btn {
- user-select: none;
- left: 0;
-
- &:after {
- content: '«';
- }
-}
-
-.@{prefixClass}-year-panel .@{prefixClass}-year-panel-decade-select {
- width: 180px;
-}
-
-.@{prefixClass}-year-panel-decade-select-arrow {
- display: none;
-}
-
-.@{prefixClass}-year-panel-next-decade-btn {
- user-select: none;
- right: 0;
-}
-
-.@{prefixClass}-year-panel-body {
- flex: 1;
- padding: 9px 10px 10px;
-}
-
-.@{prefixClass}-year-panel-footer {
- border-top: 1px solid #ccc;
- line-height: 38px;
-}
-
-.@{prefixClass}-year-panel-table {
- table-layout: fixed;
- width: 100%;
- height: 100%;
- border-collapse: separate;
-}
-
-.@{prefixClass}-year-panel-cell {
- text-align: center;
-}
-
-.@{prefixClass}-year-panel-year {
- display: block;
- width: 46px;
- margin: 0 auto;
- color: #666;
- border-radius: 4px 4px;
- height: 36px;
- padding: 0;
- background: transparent;
- line-height: 36px;
- text-align: center;
-
- &:hover {
- background: #ebfaff;
- cursor: pointer;
- }
-}
-
-.@{prefixClass}-year-panel-selected-cell .@{prefixClass}-year-panel-year {
- background: #3fc7fa;
- color: #fff;
-
- &:hover {
- background: #3fc7fa;
- color: #fff;
- }
-}
-
-.@{prefixClass}-year-panel-last-decade-cell,
-.@{prefixClass}-year-panel-next-decade-cell {
- .@{prefixClass}-year-panel-year {
- user-select: none;
- -webkit-user-select: none;
- color: rgba(0, 0, 0, 0.25);
- }
-}
diff --git a/components/vc-calendar/index.js b/components/vc-calendar/index.js
deleted file mode 100644
index 56945f6d2..000000000
--- a/components/vc-calendar/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-// based on rc-calendar 9.15.10
-import Calendar from './src/';
-
-export default Calendar;
diff --git a/components/vc-calendar/src/Calendar.jsx b/components/vc-calendar/src/Calendar.jsx
deleted file mode 100644
index 67a32bbde..000000000
--- a/components/vc-calendar/src/Calendar.jsx
+++ /dev/null
@@ -1,388 +0,0 @@
-import PropTypes from '../../_util/vue-types';
-import BaseMixin from '../../_util/BaseMixin';
-import { getOptionProps, hasProp, getComponent, findDOMNode } from '../../_util/props-util';
-import { cloneElement } from '../../_util/vnode';
-import KeyCode from '../../_util/KeyCode';
-import moment from 'moment';
-import DateTable from './date/DateTable';
-import CalendarHeader from './calendar/CalendarHeader';
-import CalendarFooter from './calendar/CalendarFooter';
-import CalendarMixin, { getNowByCurrentStateValue } from './mixin/CalendarMixin';
-import CommonMixin from './mixin/CommonMixin';
-import DateInput from './date/DateInput';
-import enUs from './locale/en_US';
-import { getTimeConfig, getTodayTime, syncTime } from './util';
-import { goStartMonth, goEndMonth, goTime } from './util/toTime';
-import { defineComponent } from 'vue';
-
-const getMomentObjectIfValid = date => {
- if (moment.isMoment(date) && date.isValid()) {
- return date;
- }
- return false;
-};
-
-const Calendar = defineComponent({
- name: 'Calendar',
- mixins: [BaseMixin, CommonMixin, CalendarMixin],
- inheritAttrs: false,
- props: {
- locale: PropTypes.object.def(enUs),
- format: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.arrayOf(PropTypes.string),
- PropTypes.func,
- ]),
- visible: PropTypes.looseBool.def(true),
- prefixCls: PropTypes.string.def('rc-calendar'),
- // prefixCls: PropTypes.string,
- defaultValue: PropTypes.object,
- value: PropTypes.object,
- selectedValue: PropTypes.object,
- defaultSelectedValue: PropTypes.object,
- mode: PropTypes.oneOf(['time', 'date', 'month', 'year', 'decade']),
- // locale: PropTypes.object,
- showDateInput: PropTypes.looseBool.def(true),
- showWeekNumber: PropTypes.looseBool,
- showToday: PropTypes.looseBool.def(true),
- showOk: PropTypes.looseBool,
- // onSelect: PropTypes.func,
- // onOk: PropTypes.func,
- // onKeyDown: PropTypes.func,
- timePicker: PropTypes.any,
- dateInputPlaceholder: PropTypes.any,
- // onClear: PropTypes.func,
- // onChange: PropTypes.func,
- // onPanelChange: PropTypes.func,
- disabledDate: PropTypes.func,
- disabledTime: PropTypes.any,
- dateRender: PropTypes.func,
- renderFooter: PropTypes.func.def(() => null),
- renderSidebar: PropTypes.func.def(() => null),
- clearIcon: PropTypes.any,
- focusablePanel: PropTypes.looseBool.def(true),
- inputMode: PropTypes.string,
- inputReadOnly: PropTypes.looseBool,
- monthCellRender: PropTypes.func,
- monthCellContentRender: PropTypes.func,
- },
-
- data() {
- const props = this.$props;
- return {
- sMode: this.mode || 'date',
- sValue:
- getMomentObjectIfValid(props.value) ||
- getMomentObjectIfValid(props.defaultValue) ||
- moment(),
- sSelectedValue: props.selectedValue || props.defaultSelectedValue,
- };
- },
- watch: {
- mode(val) {
- this.setState({ sMode: val });
- },
- value(val) {
- this.setState({
- sValue:
- getMomentObjectIfValid(val) ||
- getMomentObjectIfValid(this.defaultValue) ||
- getNowByCurrentStateValue(this.sValue),
- });
- },
- selectedValue(val) {
- this.setState({
- sSelectedValue: val,
- });
- },
- },
- mounted() {
- this.$nextTick(() => {
- this.saveFocusElement(DateInput.getInstance());
- });
- },
- methods: {
- onPanelChange(value, mode) {
- const { sValue } = this;
- if (!hasProp(this, 'mode')) {
- this.setState({ sMode: mode });
- }
- this.__emit('panelChange', value || sValue, mode);
- },
- onKeyDown(event) {
- if (event.target.nodeName.toLowerCase() === 'input') {
- return undefined;
- }
- const keyCode = event.keyCode;
- // mac
- const ctrlKey = event.ctrlKey || event.metaKey;
- const { disabledDate, sValue: value } = this;
- switch (keyCode) {
- case KeyCode.DOWN:
- this.goTime(1, 'weeks');
- event.preventDefault();
- return 1;
- case KeyCode.UP:
- this.goTime(-1, 'weeks');
- event.preventDefault();
- return 1;
- case KeyCode.LEFT:
- if (ctrlKey) {
- this.goTime(-1, 'years');
- } else {
- this.goTime(-1, 'days');
- }
- event.preventDefault();
- return 1;
- case KeyCode.RIGHT:
- if (ctrlKey) {
- this.goTime(1, 'years');
- } else {
- this.goTime(1, 'days');
- }
- event.preventDefault();
- return 1;
- case KeyCode.HOME:
- this.setValue(goStartMonth(value));
- event.preventDefault();
- return 1;
- case KeyCode.END:
- this.setValue(goEndMonth(value));
- event.preventDefault();
- return 1;
- case KeyCode.PAGE_DOWN:
- this.goTime(1, 'month');
- event.preventDefault();
- return 1;
- case KeyCode.PAGE_UP:
- this.goTime(-1, 'month');
- event.preventDefault();
- return 1;
- case KeyCode.ENTER:
- if (!disabledDate || !disabledDate(value)) {
- this.onSelect(value, {
- source: 'keyboard',
- });
- }
- event.preventDefault();
- return 1;
- default:
- this.__emit('keydown', event);
- return 1;
- }
- },
-
- onClear() {
- this.onSelect(null);
- this.__emit('clear');
- },
-
- onOk() {
- const { sSelectedValue } = this;
- if (this.isAllowedDate(sSelectedValue)) {
- this.__emit('ok', sSelectedValue);
- }
- },
-
- onDateInputChange(value) {
- this.onSelect(value, {
- source: 'dateInput',
- });
- },
- onDateInputSelect(value) {
- this.onSelect(value, {
- source: 'dateInputSelect',
- });
- },
- onDateTableSelect(value) {
- const { timePicker, sSelectedValue } = this;
- if (!sSelectedValue && timePicker) {
- const timePickerProps = getOptionProps(timePicker);
- const timePickerDefaultValue = timePickerProps.defaultValue;
- if (timePickerDefaultValue) {
- syncTime(timePickerDefaultValue, value);
- }
- }
- this.onSelect(value);
- },
- onToday() {
- const { sValue } = this;
- const now = getTodayTime(sValue);
- this.onSelect(now, {
- source: 'todayButton',
- });
- },
-
- onBlur(event) {
- setTimeout(() => {
- const dateInput = DateInput.getInstance();
- const rootInstance = this.rootInstance;
-
- if (
- !rootInstance ||
- rootInstance.contains(document.activeElement) ||
- (dateInput && dateInput.contains(document.activeElement))
- ) {
- // focused element is still part of Calendar
- return;
- }
-
- this.__emit('blur', event);
- }, 0);
- },
-
- getRootDOMNode() {
- return findDOMNode(this);
- },
- openTimePicker() {
- this.onPanelChange(null, 'time');
- },
- closeTimePicker() {
- this.onPanelChange(null, 'date');
- },
- goTime(direction, unit) {
- this.setValue(goTime(this.sValue, direction, unit));
- },
- },
-
- render() {
- const {
- locale,
- prefixCls,
- disabledDate,
- dateInputPlaceholder,
- timePicker,
- disabledTime,
- showDateInput,
- sValue,
- sSelectedValue,
- sMode,
- renderFooter,
- inputMode,
- inputReadOnly,
- monthCellRender,
- monthCellContentRender,
- $props: props,
- } = this;
- const clearIcon = getComponent(this, 'clearIcon');
- const showTimePicker = sMode === 'time';
- const disabledTimeConfig =
- showTimePicker && disabledTime && timePicker
- ? getTimeConfig(sSelectedValue, disabledTime)
- : null;
-
- let timePickerEle = null;
-
- if (timePicker && showTimePicker) {
- const timePickerOriginProps = getOptionProps(timePicker);
- const timePickerProps = {
- showHour: true,
- showSecond: true,
- showMinute: true,
- ...timePickerOriginProps,
- ...disabledTimeConfig,
- value: sSelectedValue,
- disabledTime,
- onChange: this.onDateInputChange,
- };
-
- if (timePickerOriginProps.defaultValue !== undefined) {
- timePickerProps.defaultOpenValue = timePickerOriginProps.defaultValue;
- }
- timePickerEle = cloneElement(timePicker, timePickerProps);
- }
-
- const dateInputElement = showDateInput ? (
-
- ) : null;
- const children = [];
- if (props.renderSidebar) {
- children.push(props.renderSidebar());
- }
- children.push(
-
- {dateInputElement}
-
-
- {timePicker && showTimePicker ? (
-
- ) : null}
-
-
-
-
-
-
- ,
- );
-
- return this.renderRoot({
- children,
- class: props.showWeekNumber ? `${prefixCls}-week-number` : '',
- });
- },
-});
-
-export default Calendar;
diff --git a/components/vc-calendar/src/FullCalendar.jsx b/components/vc-calendar/src/FullCalendar.jsx
deleted file mode 100644
index ad75e191e..000000000
--- a/components/vc-calendar/src/FullCalendar.jsx
+++ /dev/null
@@ -1,164 +0,0 @@
-import moment from 'moment';
-import PropTypes from '../../_util/vue-types';
-import BaseMixin from '../../_util/BaseMixin';
-import { getOptionProps, hasProp } from '../../_util/props-util';
-import DateTable from './date/DateTable';
-import MonthTable from './month/MonthTable';
-import CalendarMixin, { getNowByCurrentStateValue } from './mixin/CalendarMixin';
-import CommonMixin from './mixin/CommonMixin';
-import CalendarHeader from './full-calendar/CalendarHeader';
-import enUs from './locale/en_US';
-import { defineComponent } from 'vue';
-const FullCalendar = defineComponent({
- name: 'FullCalendar',
- mixins: [BaseMixin, CommonMixin, CalendarMixin],
- inheritAttrs: false,
- props: {
- locale: PropTypes.object.def(enUs),
- format: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.func]),
- visible: PropTypes.looseBool.def(true),
- prefixCls: PropTypes.string.def('rc-calendar'),
- defaultType: PropTypes.string.def('date'),
- type: PropTypes.string,
- fullscreen: PropTypes.looseBool.def(false),
- monthCellRender: PropTypes.func,
- dateCellRender: PropTypes.func,
- showTypeSwitch: PropTypes.looseBool.def(true),
- Select: PropTypes.object.isRequired,
- headerComponents: PropTypes.array,
- headerComponent: PropTypes.object, // The whole header component
- headerRender: PropTypes.func,
- showHeader: PropTypes.looseBool.def(true),
- disabledDate: PropTypes.func,
- value: PropTypes.object,
- defaultValue: PropTypes.object,
- selectedValue: PropTypes.object,
- defaultSelectedValue: PropTypes.object,
- renderFooter: PropTypes.func.def(() => null),
- renderSidebar: PropTypes.func.def(() => null),
- },
- data() {
- let type;
- if (hasProp(this, 'type')) {
- type = this.type;
- } else {
- type = this.defaultType;
- }
- const props = this.$props;
- return {
- sType: type,
- sValue: props.value || props.defaultValue || moment(),
- sSelectedValue: props.selectedValue || props.defaultSelectedValue,
- };
- },
- watch: {
- type(val) {
- this.setState({
- sType: val,
- });
- },
- value(val) {
- const sValue = val || this.defaultValue || getNowByCurrentStateValue(this.sValue);
- this.setState({
- sValue,
- });
- },
- selectedValue(val) {
- this.setState({
- sSelectedValue: val,
- });
- },
- },
- methods: {
- onMonthSelect(value) {
- this.onSelect(value, {
- target: 'month',
- });
- },
- setType(type) {
- if (!hasProp(this, 'type')) {
- this.setState({
- sType: type,
- });
- }
- this.__emit('typeChange', type);
- },
- },
-
- render() {
- const props = getOptionProps(this);
- const {
- locale,
- prefixCls,
- fullscreen,
- showHeader,
- headerComponent,
- headerRender,
- disabledDate,
- } = props;
- const { sValue: value, sType: type } = this;
-
- let header = null;
- if (showHeader) {
- if (headerRender) {
- header = headerRender(value, type, locale);
- } else {
- const TheHeader = headerComponent || CalendarHeader;
- const headerProps = {
- ...props,
- ...this.$attrs,
- prefixCls: `${prefixCls}-full`,
- type,
- value,
- onTypeChange: this.setType,
- onValueChange: this.setValue,
- key: 'calendar-header',
- };
- header = ;
- }
- }
-
- const table =
- type === 'date' ? (
-
- ) : (
-
- );
-
- const children = [
- header,
-
- {table}
- ,
- ];
-
- const className = [`${prefixCls}-full`];
-
- if (fullscreen) {
- className.push(`${prefixCls}-fullscreen`);
- }
-
- return this.renderRoot({
- children,
- class: className.join(' '),
- });
- },
-});
-
-export default FullCalendar;
diff --git a/components/vc-calendar/src/MonthCalendar.jsx b/components/vc-calendar/src/MonthCalendar.jsx
deleted file mode 100644
index b0287b239..000000000
--- a/components/vc-calendar/src/MonthCalendar.jsx
+++ /dev/null
@@ -1,126 +0,0 @@
-import moment from 'moment';
-import PropTypes from '../../_util/vue-types';
-import BaseMixin from '../../_util/BaseMixin';
-import KeyCode from '../../_util/KeyCode';
-import CalendarHeader from './calendar/CalendarHeader';
-import CalendarFooter from './calendar/CalendarFooter';
-import CalendarMixin from './mixin/CalendarMixin';
-import CommonMixin from './mixin/CommonMixin';
-import enUs from './locale/en_US';
-import { defineComponent } from 'vue';
-const MonthCalendar = defineComponent({
- name: 'MonthCalendar',
- mixins: [BaseMixin, CommonMixin, CalendarMixin],
- inheritAttrs: false,
- props: {
- locale: PropTypes.object.def(enUs),
- format: PropTypes.string,
- visible: PropTypes.looseBool.def(true),
- prefixCls: PropTypes.string.def('rc-calendar'),
- monthCellRender: PropTypes.func,
- value: PropTypes.object,
- defaultValue: PropTypes.object,
- selectedValue: PropTypes.object,
- defaultSelectedValue: PropTypes.object,
- disabledDate: PropTypes.func,
- monthCellContentRender: PropTypes.func,
- renderFooter: PropTypes.func.def(() => null),
- renderSidebar: PropTypes.func.def(() => null),
- },
-
- data() {
- const props = this.$props;
- return {
- mode: 'month',
- sValue: props.value || props.defaultValue || moment(),
- sSelectedValue: props.selectedValue || props.defaultSelectedValue,
- };
- },
- methods: {
- onKeyDown(event) {
- const keyCode = event.keyCode;
- const ctrlKey = event.ctrlKey || event.metaKey;
- const stateValue = this.sValue;
- const { disabledDate } = this;
- let value = stateValue;
- switch (keyCode) {
- case KeyCode.DOWN:
- value = stateValue.clone();
- value.add(3, 'months');
- break;
- case KeyCode.UP:
- value = stateValue.clone();
- value.add(-3, 'months');
- break;
- case KeyCode.LEFT:
- value = stateValue.clone();
- if (ctrlKey) {
- value.add(-1, 'years');
- } else {
- value.add(-1, 'months');
- }
- break;
- case KeyCode.RIGHT:
- value = stateValue.clone();
- if (ctrlKey) {
- value.add(1, 'years');
- } else {
- value.add(1, 'months');
- }
- break;
- case KeyCode.ENTER:
- if (!disabledDate || !disabledDate(stateValue)) {
- this.onSelect(stateValue);
- }
- event.preventDefault();
- return 1;
- default:
- return undefined;
- }
- if (value !== stateValue) {
- this.setValue(value);
- event.preventDefault();
- return 1;
- }
- },
-
- handlePanelChange(_, mode) {
- if (mode !== 'date') {
- this.setState({ mode });
- }
- },
- },
-
- render() {
- const { mode, sValue: value, $props: props, $slots } = this;
- const { prefixCls, locale, disabledDate } = props;
- const monthCellRender = this.monthCellRender || $slots.monthCellRender;
- const monthCellContentRender = this.monthCellContentRender || $slots.monthCellContentRender;
- const renderFooter = this.renderFooter || $slots.renderFooter;
- const children = (
-
-
-
-
- );
- return this.renderRoot({
- class: `${props.prefixCls}-month-calendar`,
- children,
- });
- },
-});
-
-export default MonthCalendar;
diff --git a/components/vc-calendar/src/Picker.jsx b/components/vc-calendar/src/Picker.jsx
deleted file mode 100644
index ac463f250..000000000
--- a/components/vc-calendar/src/Picker.jsx
+++ /dev/null
@@ -1,245 +0,0 @@
-import PropTypes from '../../_util/vue-types';
-import BaseMixin from '../../_util/BaseMixin';
-import { getOptionProps, hasProp, getEvents, findDOMNode } from '../../_util/props-util';
-import { cloneElement } from '../../_util/vnode';
-import createChainedFunction from '../../_util/createChainedFunction';
-import KeyCode from '../../_util/KeyCode';
-import placements from './picker/placements';
-import Trigger from '../../vc-trigger';
-import moment from 'moment';
-import isNil from 'lodash-es/isNil';
-import { defineComponent } from 'vue';
-const TimeType = {
- validator(value) {
- if (Array.isArray(value)) {
- return (
- value.length === 0 || value.findIndex(val => !isNil(val) && !moment.isMoment(val)) === -1
- );
- } else {
- return isNil(value) || moment.isMoment(value);
- }
- },
-};
-
-function refFn(field, component) {
- this[field] = component;
-}
-
-const Picker = defineComponent({
- name: 'Picker',
- mixins: [BaseMixin],
- inheritAttrs: false,
- props: {
- animation: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- disabled: PropTypes.looseBool,
- transitionName: PropTypes.string,
- format: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.func]),
- // onChange: PropTypes.func,
- // onOpenChange: PropTypes.func,
- getCalendarContainer: PropTypes.func,
- calendar: PropTypes.any,
- open: PropTypes.looseBool,
- defaultOpen: PropTypes.looseBool.def(false),
- prefixCls: PropTypes.string.def('rc-calendar-picker'),
- placement: PropTypes.any.def('bottomLeft'),
- value: TimeType,
- defaultValue: TimeType,
- align: PropTypes.object.def(() => ({})),
- dropdownClassName: PropTypes.string,
- dateRender: PropTypes.func,
- children: PropTypes.func,
- },
-
- data() {
- const props = this.$props;
- this.calendarElement = null;
- this.saveCalendarRef = refFn.bind(this, 'calendarInstance');
- let open;
- if (hasProp(this, 'open')) {
- open = props.open;
- } else {
- open = props.defaultOpen;
- }
- const value = props.value || props.defaultValue;
- return {
- sOpen: open,
- sValue: value,
- };
- },
- watch: {
- value(val) {
- this.setState({
- sValue: val,
- });
- },
- open(val) {
- this.setState({
- sOpen: val,
- });
- },
- },
- mounted() {
- this.preSOpen = this.sOpen;
- },
- updated() {
- if (!this.preSOpen && this.sOpen) {
- // setTimeout is for making sure saveCalendarRef happen before focusCalendar
- this.focusTimeout = setTimeout(this.focusCalendar, 100);
- }
- this.preSOpen = this.sOpen;
- },
-
- beforeUnmount() {
- clearTimeout(this.focusTimeout);
- },
- methods: {
- onCalendarKeyDown(event) {
- if (event.keyCode === KeyCode.ESC) {
- event.stopPropagation();
- this.closeCalendar(this.focus);
- }
- },
-
- onCalendarSelect(value, cause = {}) {
- const props = this.$props;
- if (!hasProp(this, 'value')) {
- this.setState({
- sValue: value,
- });
- }
- const calendarProps = getOptionProps(props.calendar);
- if (
- cause.source === 'keyboard' ||
- cause.source === 'dateInputSelect' ||
- (!calendarProps.timePicker && cause.source !== 'dateInput') ||
- cause.source === 'todayButton'
- ) {
- this.closeCalendar(this.focus);
- }
- this.__emit('change', value);
- },
-
- onKeyDown(event) {
- if (!this.sOpen && (event.keyCode === KeyCode.DOWN || event.keyCode === KeyCode.ENTER)) {
- this.openCalendar();
- event.preventDefault();
- }
- },
-
- onCalendarOk() {
- this.closeCalendar(this.focus);
- },
-
- onCalendarClear() {
- this.closeCalendar(this.focus);
- },
-
- onCalendarBlur() {
- this.setOpen(false);
- },
-
- onVisibleChange(open) {
- this.setOpen(open);
- },
-
- getCalendarElement() {
- const props = this.$props;
- const calendarProps = getOptionProps(props.calendar);
- const calendarEvents = getEvents(props.calendar);
- const { sValue: value } = this;
- const defaultValue = value;
- const extraProps = {
- ref: this.saveCalendarRef,
- defaultValue: defaultValue || calendarProps.defaultValue,
- selectedValue: value,
- onKeydown: this.onCalendarKeyDown,
- onOk: createChainedFunction(calendarEvents.onOk, this.onCalendarOk),
- onSelect: createChainedFunction(calendarEvents.onSelect, this.onCalendarSelect),
- onClear: createChainedFunction(calendarEvents.onClear, this.onCalendarClear),
- onBlur: createChainedFunction(calendarEvents.onBlur, this.onCalendarBlur),
- };
-
- return cloneElement(props.calendar, extraProps);
- },
-
- setOpen(open, callback) {
- if (this.sOpen !== open) {
- if (!hasProp(this, 'open')) {
- this.setState(
- {
- sOpen: open,
- },
- callback,
- );
- }
- this.__emit('openChange', open);
- }
- },
-
- openCalendar(callback) {
- this.setOpen(true, callback);
- },
-
- closeCalendar(callback) {
- this.setOpen(false, callback);
- },
-
- focus() {
- if (!this.sOpen) {
- findDOMNode(this).focus();
- }
- },
-
- focusCalendar() {
- if (this.sOpen && !!this.calendarInstance) {
- this.calendarInstance.focus();
- }
- },
- },
-
- render() {
- const props = getOptionProps(this);
- const {
- prefixCls,
- placement,
- getCalendarContainer,
- align,
- animation,
- disabled,
- dropdownClassName,
- transitionName,
- } = props;
- const { sValue, sOpen } = this;
- const childrenState = {
- value: sValue,
- open: sOpen,
- };
- const children = this.$slots.default(childrenState);
- if (this.sOpen || !this.calendarElement) {
- this.calendarElement = this.getCalendarElement();
- }
-
- return (
-
- {cloneElement(children, { onKeydown: this.onKeyDown })}
-
- );
- },
-});
-
-export default Picker;
diff --git a/components/vc-calendar/src/RangeCalendar.jsx b/components/vc-calendar/src/RangeCalendar.jsx
deleted file mode 100644
index 9787cc4cf..000000000
--- a/components/vc-calendar/src/RangeCalendar.jsx
+++ /dev/null
@@ -1,837 +0,0 @@
-import PropTypes from '../../_util/vue-types';
-import BaseMixin from '../../_util/BaseMixin';
-import { getOptionProps, hasProp, getComponent } from '../../_util/props-util';
-import moment from 'moment';
-import KeyCode from '../../_util/KeyCode';
-import CalendarPart from './range-calendar/CalendarPart';
-import TodayButton from './calendar/TodayButton';
-import OkButton from './calendar/OkButton';
-import TimePickerButton from './calendar/TimePickerButton';
-import CommonMixin from './mixin/CommonMixin';
-import enUs from './locale/en_US';
-import { syncTime, getTodayTime, isAllowedDate } from './util/';
-import { goTime, goStartMonth, goEndMonth, includesTime } from './util/toTime';
-import { defineComponent } from 'vue';
-
-function noop() {}
-
-function isEmptyArray(arr) {
- return Array.isArray(arr) && (arr.length === 0 || arr.every(i => !i));
-}
-
-function isArraysEqual(a, b) {
- if (a === b) return true;
- if (a === null || typeof a === 'undefined' || b === null || typeof b === 'undefined') {
- return false;
- }
- if (a.length !== b.length) return false;
-
- for (let i = 0; i < a.length; ++i) {
- if (a[i] !== b[i]) return false;
- }
- return true;
-}
-
-function getValueFromSelectedValue(selectedValue) {
- let [start, end] = selectedValue;
- if (end && (start === undefined || start === null)) {
- start = end.clone().subtract(1, 'month');
- }
-
- if (start && (end === undefined || end === null)) {
- end = start.clone().add(1, 'month');
- }
- return [start, end];
-}
-
-function normalizeAnchor(props, init) {
- const selectedValue = props.selectedValue || (init && props.defaultSelectedValue);
- const value = props.value || (init && props.defaultValue);
- const normalizedValue = value
- ? getValueFromSelectedValue(value)
- : getValueFromSelectedValue(selectedValue);
- return !isEmptyArray(normalizedValue)
- ? normalizedValue
- : init && [moment(), moment().add(1, 'months')];
-}
-
-function generateOptions(length, extraOptionGen) {
- const arr = extraOptionGen ? extraOptionGen().concat() : [];
- for (let value = 0; value < length; value++) {
- if (arr.indexOf(value) === -1) {
- arr.push(value);
- }
- }
- return arr;
-}
-
-function onInputSelect(direction, value, cause) {
- if (!value) {
- return;
- }
- const originalValue = this.sSelectedValue;
- const selectedValue = originalValue.concat();
- const index = direction === 'left' ? 0 : 1;
- selectedValue[index] = value;
- if (selectedValue[0] && this.compare(selectedValue[0], selectedValue[1]) > 0) {
- selectedValue[1 - index] = this.sShowTimePicker ? selectedValue[index] : undefined;
- }
- this.__emit('inputSelect', selectedValue);
- this.fireSelectValueChange(selectedValue, null, cause || { source: 'dateInput' });
-}
-
-const RangeCalendar = defineComponent({
- name: 'RangeCalendar',
- mixins: [BaseMixin, CommonMixin],
- inheritAttrs: false,
- props: {
- locale: PropTypes.object.def(enUs),
- visible: PropTypes.looseBool.def(true),
- prefixCls: PropTypes.string.def('rc-calendar'),
- dateInputPlaceholder: PropTypes.any,
- seperator: PropTypes.string.def('~'),
- defaultValue: PropTypes.any,
- value: PropTypes.any,
- hoverValue: PropTypes.any,
- mode: PropTypes.arrayOf(PropTypes.oneOf(['time', 'date', 'month', 'year', 'decade'])),
- showDateInput: PropTypes.looseBool.def(true),
- timePicker: PropTypes.any,
- showOk: PropTypes.looseBool,
- showToday: PropTypes.looseBool.def(true),
- defaultSelectedValue: PropTypes.array.def([]),
- selectedValue: PropTypes.array,
- showClear: PropTypes.looseBool,
- showWeekNumber: PropTypes.looseBool,
- // locale: PropTypes.object,
- // onChange: PropTypes.func,
- // onSelect: PropTypes.func,
- // onValueChange: PropTypes.func,
- // onHoverChange: PropTypes.func,
- // onPanelChange: PropTypes.func,
- format: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.arrayOf(PropTypes.string),
- PropTypes.func,
- ]),
- // onClear: PropTypes.func,
- type: PropTypes.any.def('both'),
- disabledDate: PropTypes.func,
- disabledTime: PropTypes.func.def(noop),
- renderFooter: PropTypes.func.def(() => null),
- renderSidebar: PropTypes.func.def(() => null),
- dateRender: PropTypes.func,
- clearIcon: PropTypes.any,
- inputReadOnly: PropTypes.looseBool,
- },
-
- data() {
- const props = this.$props;
- const selectedValue = props.selectedValue || props.defaultSelectedValue;
- const value = normalizeAnchor(props, 1);
- return {
- sSelectedValue: selectedValue,
- prevSelectedValue: selectedValue,
- firstSelectedValue: null,
- sHoverValue: props.hoverValue || [],
- sValue: value,
- sShowTimePicker: false,
- sMode: props.mode || ['date', 'date'],
- sPanelTriggerSource: '', // Trigger by which picker panel: 'start' & 'end'
- };
- },
- watch: {
- value() {
- const newState = {};
- newState.sValue = normalizeAnchor(this.$props, 0);
- this.setState(newState);
- },
- hoverValue(val) {
- if (!isArraysEqual(this.sHoverValue, val)) {
- this.setState({ sHoverValue: val });
- }
- },
- selectedValue(val) {
- const newState = {};
- newState.sSelectedValue = val;
- newState.prevSelectedValue = val;
- this.setState(newState);
- },
- mode(val) {
- if (!isArraysEqual(this.sMode, val)) {
- this.setState({ sMode: val });
- }
- },
- },
-
- methods: {
- onDatePanelEnter() {
- if (this.hasSelectedValue()) {
- this.fireHoverValueChange(this.sSelectedValue.concat());
- }
- },
-
- onDatePanelLeave() {
- if (this.hasSelectedValue()) {
- this.fireHoverValueChange([]);
- }
- },
-
- onSelect(value) {
- const { type, sSelectedValue, prevSelectedValue, firstSelectedValue } = this;
- let nextSelectedValue;
- if (type === 'both') {
- if (!firstSelectedValue) {
- syncTime(prevSelectedValue[0], value);
- nextSelectedValue = [value];
- } else if (this.compare(firstSelectedValue, value) < 0) {
- syncTime(prevSelectedValue[1], value);
- nextSelectedValue = [firstSelectedValue, value];
- } else {
- syncTime(prevSelectedValue[0], value);
- syncTime(prevSelectedValue[1], firstSelectedValue);
- nextSelectedValue = [value, firstSelectedValue];
- }
- } else if (type === 'start') {
- syncTime(prevSelectedValue[0], value);
- const endValue = sSelectedValue[1];
- nextSelectedValue =
- endValue && this.compare(endValue, value) > 0 ? [value, endValue] : [value];
- } else {
- // type === 'end'
- const startValue = sSelectedValue[0];
- if (startValue && this.compare(startValue, value) <= 0) {
- syncTime(prevSelectedValue[1], value);
- nextSelectedValue = [startValue, value];
- } else {
- syncTime(prevSelectedValue[0], value);
- nextSelectedValue = [value];
- }
- }
-
- this.fireSelectValueChange(nextSelectedValue);
- },
-
- onKeyDown(event) {
- if (event.target.nodeName.toLowerCase() === 'input') {
- return;
- }
-
- const { keyCode } = event;
- const ctrlKey = event.ctrlKey || event.metaKey;
-
- const {
- sSelectedValue: selectedValue,
- sHoverValue: hoverValue,
- firstSelectedValue,
- sValue: value, // Value is used for `CalendarPart` current page
- } = this.$data;
- const { disabledDate } = this.$props;
-
- // Update last time of the picker
- const updateHoverPoint = func => {
- // Change hover to make focus in UI
- let currentHoverTime;
- let nextHoverTime;
- let nextHoverValue;
-
- if (!firstSelectedValue) {
- currentHoverTime = hoverValue[0] || selectedValue[0] || value[0] || moment();
- nextHoverTime = func(currentHoverTime);
- nextHoverValue = [nextHoverTime];
- this.fireHoverValueChange(nextHoverValue);
- } else {
- if (hoverValue.length === 1) {
- currentHoverTime = hoverValue[0].clone();
- nextHoverTime = func(currentHoverTime);
- nextHoverValue = this.onDayHover(nextHoverTime);
- } else {
- currentHoverTime = hoverValue[0].isSame(firstSelectedValue, 'day')
- ? hoverValue[1]
- : hoverValue[0];
- nextHoverTime = func(currentHoverTime);
- nextHoverValue = this.onDayHover(nextHoverTime);
- }
- }
-
- // Find origin hover time on value index
- if (nextHoverValue.length >= 2) {
- const miss = nextHoverValue.some(ht => !includesTime(value, ht, 'month'));
- if (miss) {
- const newValue = nextHoverValue.slice().sort((t1, t2) => t1.valueOf() - t2.valueOf());
- if (newValue[0].isSame(newValue[1], 'month')) {
- newValue[1] = newValue[0].clone().add(1, 'month');
- }
- this.fireValueChange(newValue);
- }
- } else if (nextHoverValue.length === 1) {
- // If only one value, let's keep the origin panel
- let oriValueIndex = value.findIndex(time => time.isSame(currentHoverTime, 'month'));
- if (oriValueIndex === -1) oriValueIndex = 0;
-
- if (value.every(time => !time.isSame(nextHoverTime, 'month'))) {
- const newValue = value.slice();
- newValue[oriValueIndex] = nextHoverTime.clone();
- this.fireValueChange(newValue);
- }
- }
-
- event.preventDefault();
-
- return nextHoverTime;
- };
-
- switch (keyCode) {
- case KeyCode.DOWN:
- updateHoverPoint(time => goTime(time, 1, 'weeks'));
- return;
- case KeyCode.UP:
- updateHoverPoint(time => goTime(time, -1, 'weeks'));
- return;
- case KeyCode.LEFT:
- if (ctrlKey) {
- updateHoverPoint(time => goTime(time, -1, 'years'));
- } else {
- updateHoverPoint(time => goTime(time, -1, 'days'));
- }
- return;
- case KeyCode.RIGHT:
- if (ctrlKey) {
- updateHoverPoint(time => goTime(time, 1, 'years'));
- } else {
- updateHoverPoint(time => goTime(time, 1, 'days'));
- }
- return;
- case KeyCode.HOME:
- updateHoverPoint(time => goStartMonth(time));
- return;
- case KeyCode.END:
- updateHoverPoint(time => goEndMonth(time));
- return;
- case KeyCode.PAGE_DOWN:
- updateHoverPoint(time => goTime(time, 1, 'month'));
- return;
- case KeyCode.PAGE_UP:
- updateHoverPoint(time => goTime(time, -1, 'month'));
- return;
- case KeyCode.ENTER: {
- let lastValue;
- if (hoverValue.length === 0) {
- lastValue = updateHoverPoint(time => time);
- } else if (hoverValue.length === 1) {
- lastValue = hoverValue[0];
- } else {
- lastValue = hoverValue[0].isSame(firstSelectedValue, 'day')
- ? hoverValue[1]
- : hoverValue[0];
- }
- if (lastValue && (!disabledDate || !disabledDate(lastValue))) {
- this.onSelect(lastValue);
- }
- event.preventDefault();
- return;
- }
- default:
- this.__emit('keydown', event);
- }
- },
-
- onDayHover(value) {
- let hoverValue = [];
- const { sSelectedValue, firstSelectedValue, type } = this;
- if (type === 'start' && sSelectedValue[1]) {
- hoverValue =
- this.compare(value, sSelectedValue[1]) < 0 ? [value, sSelectedValue[1]] : [value];
- } else if (type === 'end' && sSelectedValue[0]) {
- hoverValue = this.compare(value, sSelectedValue[0]) > 0 ? [sSelectedValue[0], value] : [];
- } else {
- if (!firstSelectedValue) {
- if (this.sHoverValue.length) {
- this.setState({ sHoverValue: [] });
- }
- return hoverValue;
- }
- hoverValue =
- this.compare(value, firstSelectedValue) < 0
- ? [value, firstSelectedValue]
- : [firstSelectedValue, value];
- }
- this.fireHoverValueChange(hoverValue);
- return hoverValue;
- },
-
- onToday() {
- const startValue = getTodayTime(this.sValue[0]);
- const endValue = startValue.clone().add(1, 'months');
- this.setState({ sValue: [startValue, endValue] });
- },
-
- onOpenTimePicker() {
- this.setState({
- sShowTimePicker: true,
- });
- },
- onCloseTimePicker() {
- this.setState({
- sShowTimePicker: false,
- });
- },
-
- onOk() {
- const { sSelectedValue } = this;
- if (this.isAllowedDateAndTime(sSelectedValue)) {
- this.__emit('ok', sSelectedValue);
- }
- },
-
- onStartInputChange(...oargs) {
- const args = ['left'].concat(oargs);
- return onInputSelect.apply(this, args);
- },
-
- onEndInputChange(...oargs) {
- const args = ['right'].concat(oargs);
- return onInputSelect.apply(this, args);
- },
-
- onStartInputSelect(value) {
- const args = ['left', value, { source: 'dateInputSelect' }];
- return onInputSelect.apply(this, args);
- },
-
- onEndInputSelect(value) {
- const args = ['right', value, { source: 'dateInputSelect' }];
- return onInputSelect.apply(this, args);
- },
-
- onStartValueChange(leftValue) {
- const value = [...this.sValue];
- value[0] = leftValue;
- return this.fireValueChange(value);
- },
-
- onEndValueChange(rightValue) {
- const value = [...this.sValue];
- value[1] = rightValue;
- return this.fireValueChange(value);
- },
-
- onStartPanelChange(value, mode) {
- const { sMode, sValue } = this;
- const newMode = [mode, sMode[1]];
- const newValue = [value || sValue[0], sValue[1]];
- this.__emit('panelChange', newValue, newMode);
- const newState = {
- sPanelTriggerSource: 'start',
- };
- if (!hasProp(this, 'mode')) {
- newState.sMode = newMode;
- }
- this.setState(newState);
- },
-
- onEndPanelChange(value, mode) {
- const { sMode, sValue } = this;
- const newMode = [sMode[0], mode];
- const newValue = [sValue[0], value || sValue[1]];
- this.__emit('panelChange', newValue, newMode);
- const newState = {
- sPanelTriggerSource: 'end',
- };
- if (!hasProp(this, 'mode')) {
- newState.sMode = newMode;
- }
- this.setState(newState);
- },
-
- getStartValue() {
- const {
- sSelectedValue: selectedValue,
- sShowTimePicker: showTimePicker,
- sValue: value,
- sMode: mode,
- sPanelTriggerSource: panelTriggerSource,
- } = this.$data;
- let startValue = value[0];
- // keep selectedTime when select date
- if (selectedValue[0] && this.$props.timePicker) {
- startValue = startValue.clone();
- syncTime(selectedValue[0], startValue);
- }
- if (showTimePicker && selectedValue[0]) {
- startValue = selectedValue[0];
- }
-
- // Adjust month if date not align
- if (
- panelTriggerSource === 'end' &&
- mode[0] === 'date' &&
- mode[1] === 'date' &&
- startValue.isSame(value[1], 'month')
- ) {
- startValue = startValue.clone().subtract(1, 'month');
- }
-
- return startValue;
- },
-
- getEndValue() {
- const {
- sSelectedValue: selectedValue,
- sShowTimePicker: showTimePicker,
- sValue: value,
- sMode: mode,
- sPanelTriggerSource: panelTriggerSource,
- } = this.$data;
- let endValue = value[1] ? value[1].clone() : value[0].clone().add(1, 'month');
- // keep selectedTime when select date
- if (selectedValue[1] && this.$props.timePicker) {
- syncTime(selectedValue[1], endValue);
- }
- if (showTimePicker) {
- endValue = selectedValue[1] ? selectedValue[1] : this.getStartValue();
- }
-
- // Adjust month if date not align
- if (
- !showTimePicker &&
- panelTriggerSource !== 'end' &&
- mode[0] === 'date' &&
- mode[1] === 'date' &&
- endValue.isSame(value[0], 'month')
- ) {
- endValue = endValue.clone().add(1, 'month');
- }
-
- return endValue;
- },
- // get disabled hours for second picker
- getEndDisableTime() {
- const { sSelectedValue, sValue, disabledTime } = this;
- const userSettingDisabledTime = disabledTime(sSelectedValue, 'end') || {};
- const startValue = (sSelectedValue && sSelectedValue[0]) || sValue[0].clone();
- // if startTime and endTime is same day..
- // the second time picker will not able to pick time before first time picker
- if (!sSelectedValue[1] || startValue.isSame(sSelectedValue[1], 'day')) {
- const hours = startValue.hour();
- const minutes = startValue.minute();
- const second = startValue.second();
- let { disabledHours, disabledMinutes, disabledSeconds } = userSettingDisabledTime;
- const oldDisabledMinutes = disabledMinutes ? disabledMinutes() : [];
- const olddisabledSeconds = disabledSeconds ? disabledSeconds() : [];
- disabledHours = generateOptions(hours, disabledHours);
- disabledMinutes = generateOptions(minutes, disabledMinutes);
- disabledSeconds = generateOptions(second, disabledSeconds);
- return {
- disabledHours() {
- return disabledHours;
- },
- disabledMinutes(hour) {
- if (hour === hours) {
- return disabledMinutes;
- }
- return oldDisabledMinutes;
- },
- disabledSeconds(hour, minute) {
- if (hour === hours && minute === minutes) {
- return disabledSeconds;
- }
- return olddisabledSeconds;
- },
- };
- }
- return userSettingDisabledTime;
- },
-
- isAllowedDateAndTime(selectedValue) {
- return (
- isAllowedDate(selectedValue[0], this.disabledDate, this.disabledStartTime) &&
- isAllowedDate(selectedValue[1], this.disabledDate, this.disabledEndTime)
- );
- },
-
- isMonthYearPanelShow(mode) {
- return ['month', 'year', 'decade'].indexOf(mode) > -1;
- },
-
- hasSelectedValue() {
- const { sSelectedValue } = this;
- return !!sSelectedValue[1] && !!sSelectedValue[0];
- },
-
- compare(v1, v2) {
- if (this.timePicker) {
- return v1.diff(v2);
- }
- return v1.diff(v2, 'days');
- },
-
- fireSelectValueChange(selectedValue, direct, cause) {
- const { timePicker, prevSelectedValue } = this;
- if (timePicker) {
- const timePickerProps = getOptionProps(timePicker);
- if (timePickerProps.defaultValue) {
- const timePickerDefaultValue = timePickerProps.defaultValue;
- if (!prevSelectedValue[0] && selectedValue[0]) {
- syncTime(timePickerDefaultValue[0], selectedValue[0]);
- }
- if (!prevSelectedValue[1] && selectedValue[1]) {
- syncTime(timePickerDefaultValue[1], selectedValue[1]);
- }
- }
- }
- // 尚未选择过时间,直接输入的话
- if (!this.sSelectedValue[0] || !this.sSelectedValue[1]) {
- const startValue = selectedValue[0] || moment();
- const endValue = selectedValue[1] || startValue.clone().add(1, 'months');
- this.setState({
- sSelectedValue: selectedValue,
- sValue:
- selectedValue && selectedValue.length === 2
- ? getValueFromSelectedValue([startValue, endValue])
- : this.sValue,
- });
- }
-
- if (selectedValue[0] && !selectedValue[1]) {
- this.setState({ firstSelectedValue: selectedValue[0] });
- this.fireHoverValueChange(selectedValue.concat());
- }
- this.__emit('change', selectedValue);
- if (direct || (selectedValue[0] && selectedValue[1])) {
- this.setState({
- prevSelectedValue: selectedValue,
- firstSelectedValue: null,
- });
- this.fireHoverValueChange([]);
- this.__emit('select', selectedValue, cause);
- }
- if (!hasProp(this, 'selectedValue')) {
- this.setState({
- sSelectedValue: selectedValue,
- });
- }
- },
-
- fireValueChange(value) {
- if (!hasProp(this, 'value')) {
- this.setState({
- sValue: value,
- });
- }
- this.__emit('valueChange', value);
- },
-
- fireHoverValueChange(hoverValue) {
- if (!hasProp(this, 'hoverValue')) {
- this.setState({ sHoverValue: hoverValue });
- }
- this.__emit('hoverChange', hoverValue);
- },
-
- clear() {
- this.fireSelectValueChange([], true);
- this.__emit('clear');
- },
-
- disabledStartTime(time) {
- return this.disabledTime(time, 'start');
- },
-
- disabledEndTime(time) {
- return this.disabledTime(time, 'end');
- },
-
- disabledStartMonth(month) {
- const { sValue } = this;
- return month.isAfter(sValue[1], 'month');
- },
-
- disabledEndMonth(month) {
- const { sValue } = this;
- return month.isBefore(sValue[0], 'month');
- },
- },
-
- render() {
- const props = getOptionProps(this);
- const {
- prefixCls,
- dateInputPlaceholder,
- timePicker,
- showOk,
- locale,
- showClear,
- showToday,
- type,
- seperator,
- } = props;
- const clearIcon = getComponent(this, 'clearIcon');
- const { sHoverValue, sSelectedValue, sMode: mode, sShowTimePicker, sValue } = this;
- const className = {
- [this.$attrs.class]: !!this.$attrs.class,
- [prefixCls]: 1,
- [`${prefixCls}-hidden`]: !props.visible,
- [`${prefixCls}-range`]: 1,
- [`${prefixCls}-show-time-picker`]: sShowTimePicker,
- [`${prefixCls}-week-number`]: props.showWeekNumber,
- };
- const baseProps = {
- ...props,
- ...this.$attrs,
- };
- const newProps = {
- selectedValue: sSelectedValue,
- onSelect: this.onSelect,
- onDayHover:
- (type === 'start' && sSelectedValue[1]) ||
- (type === 'end' && sSelectedValue[0]) ||
- !!sHoverValue.length
- ? this.onDayHover
- : noop,
- };
-
- let placeholder1;
- let placeholder2;
-
- if (dateInputPlaceholder) {
- if (Array.isArray(dateInputPlaceholder)) {
- [placeholder1, placeholder2] = dateInputPlaceholder;
- } else {
- placeholder1 = placeholder2 = dateInputPlaceholder;
- }
- }
- const showOkButton = showOk === true || (showOk !== false && !!timePicker);
- const cls = {
- [`${prefixCls}-footer`]: true,
- [`${prefixCls}-range-bottom`]: true,
- [`${prefixCls}-footer-show-ok`]: showOkButton,
- };
-
- const startValue = this.getStartValue();
- const endValue = this.getEndValue();
- const todayTime = getTodayTime(startValue);
- const thisMonth = todayTime.month();
- const thisYear = todayTime.year();
- const isTodayInView =
- (startValue.year() === thisYear && startValue.month() === thisMonth) ||
- (endValue.year() === thisYear && endValue.month() === thisMonth);
- const nextMonthOfStart = startValue.clone().add(1, 'months');
- const isClosestMonths =
- nextMonthOfStart.year() === endValue.year() && nextMonthOfStart.month() === endValue.month();
- const leftPartProps = {
- ...baseProps,
- ...newProps,
- hoverValue: sHoverValue,
- direction: 'left',
- disabledTime: this.disabledStartTime,
- disabledMonth: this.disabledStartMonth,
- format: this.getFormat(),
- value: startValue,
- mode: mode[0],
- placeholder: placeholder1,
- showDateInput: this.showDateInput,
- timePicker,
- showTimePicker: sShowTimePicker || mode[0] === 'time',
- enablePrev: true,
- enableNext: !isClosestMonths || this.isMonthYearPanelShow(mode[1]),
- clearIcon,
- onInputChange: this.onStartInputChange,
- onInputSelect: this.onStartInputSelect,
- onValueChange: this.onStartValueChange,
- onPanelChange: this.onStartPanelChange,
- };
- const rightPartProps = {
- ...baseProps,
- ...newProps,
- hoverValue: sHoverValue,
- direction: 'right',
- format: this.getFormat(),
- timePickerDisabledTime: this.getEndDisableTime(),
- placeholder: placeholder2,
- value: endValue,
- mode: mode[1],
- showDateInput: this.showDateInput,
- timePicker,
- showTimePicker: sShowTimePicker || mode[1] === 'time',
- disabledTime: this.disabledEndTime,
- disabledMonth: this.disabledEndMonth,
- enablePrev: !isClosestMonths || this.isMonthYearPanelShow(mode[0]),
- enableNext: true,
- clearIcon,
- onInputChange: this.onEndInputChange,
- onInputSelect: this.onEndInputSelect,
- onValueChange: this.onEndValueChange,
- onPanelChange: this.onEndPanelChange,
- };
- let TodayButtonNode = null;
- if (showToday) {
- const todayButtonProps = {
- ...baseProps,
- disabled: isTodayInView,
- value: sValue[0],
- text: locale.backToToday,
- onToday: this.onToday,
- };
- TodayButtonNode = ;
- }
-
- let TimePickerButtonNode = null;
- if (props.timePicker) {
- const timePickerButtonProps = {
- ...baseProps,
- showTimePicker: sShowTimePicker || (mode[0] === 'time' && mode[1] === 'time'),
- timePickerDisabled: !this.hasSelectedValue() || sHoverValue.length,
- onOpenTimePicker: this.onOpenTimePicker,
- onCloseTimePicker: this.onCloseTimePicker,
- };
- TimePickerButtonNode = ;
- }
-
- let OkButtonNode = null;
- if (showOkButton) {
- const okButtonProps = {
- ...baseProps,
- okDisabled:
- !this.isAllowedDateAndTime(sSelectedValue) ||
- !this.hasSelectedValue() ||
- sHoverValue.length,
- onOk: this.onOk,
- };
- OkButtonNode = ;
- }
- const extraFooter = this.renderFooter(mode);
- return (
-
- {props.renderSidebar()}
-
- {showClear && sSelectedValue[0] && sSelectedValue[1] ? (
-
- {clearIcon || }
-
- ) : null}
-
-
- {seperator}
-
-
-
- {showToday || props.timePicker || showOkButton || extraFooter ? (
-
- ) : null}
-
-
-
- );
- },
-});
-
-export default RangeCalendar;
diff --git a/components/vc-calendar/src/calendar/CalendarFooter.jsx b/components/vc-calendar/src/calendar/CalendarFooter.jsx
deleted file mode 100644
index ff365a4a0..000000000
--- a/components/vc-calendar/src/calendar/CalendarFooter.jsx
+++ /dev/null
@@ -1,86 +0,0 @@
-import PropTypes from '../../../_util/vue-types';
-import BaseMixin from '../../../_util/BaseMixin';
-import { getOptionProps, findDOMNode } from '../../../_util/props-util';
-import TodayButton from './TodayButton';
-import OkButton from './OkButton';
-import TimePickerButton from './TimePickerButton';
-
-const CalendarFooter = {
- name: 'CalendarFooter',
- inheritAttrs: false,
- mixins: [BaseMixin],
- props: {
- prefixCls: PropTypes.string,
- showDateInput: PropTypes.looseBool,
- disabledTime: PropTypes.any,
- timePicker: PropTypes.any,
- selectedValue: PropTypes.any,
- showOk: PropTypes.looseBool,
- // onSelect: PropTypes.func,
- value: PropTypes.object,
- renderFooter: PropTypes.func,
- defaultValue: PropTypes.object,
- locale: PropTypes.object,
- showToday: PropTypes.looseBool,
- disabledDate: PropTypes.func,
- showTimePicker: PropTypes.looseBool,
- okDisabled: PropTypes.looseBool,
- mode: PropTypes.string,
- },
- methods: {
- onSelect(value) {
- this.__emit('select', value);
- },
-
- getRootDOMNode() {
- return findDOMNode(this);
- },
- },
-
- render() {
- const props = getOptionProps(this);
- const { value, prefixCls, showOk, timePicker, renderFooter, showToday, mode } = props;
- let footerEl = null;
- const extraFooter = renderFooter && renderFooter(mode);
- if (showToday || timePicker || extraFooter) {
- const btnProps = {
- ...props,
- ...this.$attrs,
- value,
- };
- let nowEl = null;
- if (showToday) {
- nowEl = ;
- }
- delete btnProps.value;
- let okBtn = null;
- if (showOk === true || (showOk !== false && !!timePicker)) {
- okBtn = ;
- }
- let timePickerBtn = null;
- if (timePicker) {
- timePickerBtn = ;
- }
-
- let footerBtn;
- if (nowEl || timePickerBtn || okBtn || extraFooter) {
- footerBtn = (
-
- );
- }
- const cls = {
- [`${prefixCls}-footer`]: true,
- [`${prefixCls}-footer-show-ok`]: !!okBtn,
- };
- footerEl = {footerBtn} ;
- }
- return footerEl;
- },
-};
-
-export default CalendarFooter;
diff --git a/components/vc-calendar/src/calendar/CalendarHeader.jsx b/components/vc-calendar/src/calendar/CalendarHeader.jsx
deleted file mode 100644
index ffa238b3f..000000000
--- a/components/vc-calendar/src/calendar/CalendarHeader.jsx
+++ /dev/null
@@ -1,243 +0,0 @@
-import PropTypes from '../../../_util/vue-types';
-import BaseMixin from '../../../_util/BaseMixin';
-import { getOptionProps } from '../../../_util/props-util';
-import MonthPanel from '../month/MonthPanel';
-import YearPanel from '../year/YearPanel';
-import DecadePanel from '../decade/DecadePanel';
-function noop() {}
-function goMonth(direction) {
- const next = this.value.clone();
- next.add(direction, 'months');
- this.__emit('valueChange', next);
-}
-
-function goYear(direction) {
- const next = this.value.clone();
- next.add(direction, 'years');
- this.__emit('valueChange', next);
-}
-
-function showIf(condition, el) {
- return condition ? el : null;
-}
-
-const CalendarHeader = {
- name: 'CalendarHeader',
- inheritAttrs: false,
- mixins: [BaseMixin],
- props: {
- prefixCls: PropTypes.string,
- value: PropTypes.object,
- // onValueChange: PropTypes.func,
- showTimePicker: PropTypes.looseBool,
- // onPanelChange: PropTypes.func,
- locale: PropTypes.object,
- enablePrev: PropTypes.any.def(1),
- enableNext: PropTypes.any.def(1),
- disabledMonth: PropTypes.func,
- mode: PropTypes.any,
- monthCellRender: PropTypes.func,
- monthCellContentRender: PropTypes.func,
- renderFooter: PropTypes.func,
- },
- data() {
- this.nextMonth = goMonth.bind(this, 1);
- this.previousMonth = goMonth.bind(this, -1);
- this.nextYear = goYear.bind(this, 1);
- this.previousYear = goYear.bind(this, -1);
- return {
- yearPanelReferer: null,
- };
- },
- methods: {
- onMonthSelect(value) {
- this.__emit('panelChange', value, 'date');
- if (this.$attrs.onMonthSelect) {
- this.__emit('monthSelect', value);
- } else {
- this.__emit('valueChange', value);
- }
- },
-
- onYearSelect(value) {
- const referer = this.yearPanelReferer;
- this.setState({ yearPanelReferer: null });
- this.__emit('panelChange', value, referer);
- this.__emit('valueChange', value);
- },
-
- onDecadeSelect(value) {
- this.__emit('panelChange', value, 'year');
- this.__emit('valueChange', value);
- },
-
- changeYear(direction) {
- if (direction > 0) {
- this.nextYear();
- } else {
- this.previousYear();
- }
- },
-
- monthYearElement(showTimePicker) {
- const props = this.$props;
- const prefixCls = props.prefixCls;
- const locale = props.locale;
- const value = props.value;
- const localeData = value.localeData();
- const monthBeforeYear = locale.monthBeforeYear;
- const selectClassName = `${prefixCls}-${monthBeforeYear ? 'my-select' : 'ym-select'}`;
- const timeClassName = showTimePicker ? ` ${prefixCls}-time-status` : '';
- const year = (
- this.showYearPanel('date')}
- title={showTimePicker ? null : locale.yearSelect}
- >
- {value.format(locale.yearFormat)}
-
- );
- const month = (
-
- {locale.monthFormat ? value.format(locale.monthFormat) : localeData.monthsShort(value)}
-
- );
- let day;
- if (showTimePicker) {
- day = (
-
- {value.format(locale.dayFormat)}
-
- );
- }
- let my = [];
- if (monthBeforeYear) {
- my = [month, day, year];
- } else {
- my = [year, month, day];
- }
- return {my};
- },
-
- showMonthPanel() {
- // null means that users' interaction doesn't change value
- this.__emit('panelChange', null, 'month');
- },
-
- showYearPanel(referer) {
- this.setState({ yearPanelReferer: referer });
- this.__emit('panelChange', null, 'year');
- },
-
- showDecadePanel() {
- this.__emit('panelChange', null, 'decade');
- },
- },
-
- render() {
- const props = getOptionProps(this);
- const {
- prefixCls,
- locale,
- mode,
- value,
- showTimePicker,
- enableNext,
- enablePrev,
- disabledMonth,
- renderFooter,
- } = props;
-
- let panel = null;
- if (mode === 'month') {
- panel = (
- this.showYearPanel('month')}
- disabledDate={disabledMonth}
- cellRender={props.monthCellRender}
- contentRender={props.monthCellContentRender}
- renderFooter={renderFooter}
- changeYear={this.changeYear}
- />
- );
- }
- if (mode === 'year') {
- panel = (
-
- );
- }
- if (mode === 'decade') {
- panel = (
-
- );
- }
-
- return (
-
- );
- },
-};
-
-export default CalendarHeader;
diff --git a/components/vc-calendar/src/calendar/OkButton.jsx b/components/vc-calendar/src/calendar/OkButton.jsx
deleted file mode 100644
index 404beb0b9..000000000
--- a/components/vc-calendar/src/calendar/OkButton.jsx
+++ /dev/null
@@ -1,16 +0,0 @@
-function noop() {}
-const OkButton = (_, { attrs }) => {
- const { prefixCls, locale, okDisabled, onOk } = attrs;
- let className = `${prefixCls}-ok-btn`;
- if (okDisabled) {
- className += ` ${prefixCls}-ok-btn-disabled`;
- }
- return (
-
- {locale.ok}
-
- );
-};
-
-OkButton.inheritAttrs = false;
-export default OkButton;
diff --git a/components/vc-calendar/src/calendar/TimePickerButton.jsx b/components/vc-calendar/src/calendar/TimePickerButton.jsx
deleted file mode 100644
index 80efc9c7e..000000000
--- a/components/vc-calendar/src/calendar/TimePickerButton.jsx
+++ /dev/null
@@ -1,27 +0,0 @@
-function noop() {}
-const TimePickerButton = (_, { attrs }) => {
- const {
- prefixCls,
- locale,
- showTimePicker,
- timePickerDisabled,
- onCloseTimePicker = noop,
- onOpenTimePicker = noop,
- } = attrs;
- const className = {
- [`${prefixCls}-time-picker-btn`]: true,
- [`${prefixCls}-time-picker-btn-disabled`]: timePickerDisabled,
- };
- let onClick = noop;
- if (!timePickerDisabled) {
- onClick = showTimePicker ? onCloseTimePicker : onOpenTimePicker;
- }
- return (
-
- {showTimePicker ? locale.dateSelect : locale.timeSelect}
-
- );
-};
-
-TimePickerButton.inheritAttrs = false;
-export default TimePickerButton;
diff --git a/components/vc-calendar/src/calendar/TodayButton.jsx b/components/vc-calendar/src/calendar/TodayButton.jsx
deleted file mode 100644
index 7f94ab65c..000000000
--- a/components/vc-calendar/src/calendar/TodayButton.jsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { getTodayTimeStr, getTodayTime, isAllowedDate } from '../util/';
-function noop() {}
-const TodayButton = (_, { attrs }) => {
- const { prefixCls, locale, value, timePicker, disabled, disabledDate, onToday, text } = attrs;
- const localeNow = (!text && timePicker ? locale.now : text) || locale.today;
- const disabledToday = disabledDate && !isAllowedDate(getTodayTime(value), disabledDate);
- const isDisabled = disabledToday || disabled;
- const disabledTodayClass = isDisabled ? `${prefixCls}-today-btn-disabled` : '';
- return (
-
- {localeNow}
-
- );
-};
-
-TodayButton.inheritAttrs = false;
-
-export default TodayButton;
diff --git a/components/vc-calendar/src/date/DateConstants.js b/components/vc-calendar/src/date/DateConstants.js
deleted file mode 100644
index 55f910b00..000000000
--- a/components/vc-calendar/src/date/DateConstants.js
+++ /dev/null
@@ -1,4 +0,0 @@
-export default {
- DATE_ROW_COUNT: 6,
- DATE_COL_COUNT: 7,
-};
diff --git a/components/vc-calendar/src/date/DateInput.jsx b/components/vc-calendar/src/date/DateInput.jsx
deleted file mode 100644
index 1524694b1..000000000
--- a/components/vc-calendar/src/date/DateInput.jsx
+++ /dev/null
@@ -1,226 +0,0 @@
-import PropTypes from '../../../_util/vue-types';
-import BaseMixin from '../../../_util/BaseMixin';
-import { getComponent, findDOMNode } from '../../../_util/props-util';
-import moment from 'moment';
-import { formatDate } from '../util';
-import KeyCode from '../../../_util/KeyCode';
-import { withDirectives } from 'vue';
-import antInput from '../../../_util/antInputDirective';
-
-let cachedSelectionStart;
-let cachedSelectionEnd;
-let dateInputInstance;
-
-const DateInput = {
- name: 'DateInput',
- inheritAttrs: false,
- mixins: [BaseMixin],
- props: {
- prefixCls: PropTypes.string,
- timePicker: PropTypes.object,
- value: PropTypes.object,
- disabledTime: PropTypes.any,
- format: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.arrayOf(PropTypes.string),
- PropTypes.func,
- ]),
- locale: PropTypes.object,
- disabledDate: PropTypes.func,
- // onChange: PropTypes.func,
- // onClear: PropTypes.func,
- placeholder: PropTypes.string,
- // onSelect: PropTypes.func,
- selectedValue: PropTypes.object,
- clearIcon: PropTypes.any,
- inputMode: PropTypes.string,
- inputReadOnly: PropTypes.looseBool,
- disabled: PropTypes.looseBool,
- showClear: PropTypes.looseBool,
- },
-
- data() {
- const selectedValue = this.selectedValue;
- return {
- str: formatDate(selectedValue, this.format),
- invalid: false,
- hasFocus: false,
- };
- },
- watch: {
- selectedValue() {
- this.setState();
- },
- format() {
- this.setState();
- },
- },
-
- updated() {
- this.$nextTick(() => {
- if (
- dateInputInstance &&
- this.$data.hasFocus &&
- !this.invalid &&
- !(cachedSelectionStart === 0 && cachedSelectionEnd === 0)
- ) {
- dateInputInstance.setSelectionRange(cachedSelectionStart, cachedSelectionEnd);
- }
- });
- },
- getInstance() {
- return dateInputInstance;
- },
- methods: {
- getDerivedStateFromProps(nextProps, state) {
- let newState = {};
- if (dateInputInstance) {
- cachedSelectionStart = dateInputInstance.selectionStart;
- cachedSelectionEnd = dateInputInstance.selectionEnd;
- }
- // when popup show, click body will call this, bug!
- const selectedValue = nextProps.selectedValue;
- if (!state.hasFocus) {
- newState = {
- str: formatDate(selectedValue, this.format),
- invalid: false,
- };
- }
- return newState;
- },
- onClear() {
- this.setState({
- str: '',
- });
- this.__emit('clear', null);
- },
- onInputChange(e) {
- const { value: str, composing } = e.target;
- const { str: oldStr = '' } = this;
- if (e.isComposing || composing || oldStr === str) return;
-
- const { disabledDate, format, selectedValue } = this.$props;
-
- // 没有内容,合法并直接退出
- if (!str) {
- this.__emit('change', null);
- this.setState({
- invalid: false,
- str,
- });
- return;
- }
-
- // 不合法直接退出
- const parsed = moment(str, format, true);
- if (!parsed.isValid()) {
- this.setState({
- invalid: true,
- str,
- });
- return;
- }
- const value = this.value.clone();
- value
- .year(parsed.year())
- .month(parsed.month())
- .date(parsed.date())
- .hour(parsed.hour())
- .minute(parsed.minute())
- .second(parsed.second());
-
- if (!value || (disabledDate && disabledDate(value))) {
- this.setState({
- invalid: true,
- str,
- });
- return;
- }
-
- if (selectedValue !== value || (selectedValue && value && !selectedValue.isSame(value))) {
- this.setState({
- invalid: false,
- str,
- });
- this.__emit('change', value);
- }
- },
- onFocus() {
- this.setState({ hasFocus: true });
- },
- onBlur() {
- this.setState((prevState, prevProps) => ({
- hasFocus: false,
- str: formatDate(prevProps.value, prevProps.format),
- }));
- },
- onKeyDown(event) {
- const { keyCode } = event;
- const { value, disabledDate } = this.$props;
- if (keyCode === KeyCode.ENTER) {
- const validateDate = !disabledDate || !disabledDate(value);
- if (validateDate) {
- this.__emit('select', value.clone());
- }
- event.preventDefault();
- }
- },
- getRootDOMNode() {
- return findDOMNode(this);
- },
- focus() {
- if (dateInputInstance) {
- dateInputInstance.focus();
- }
- },
- saveDateInput(dateInput) {
- dateInputInstance = dateInput;
- },
- },
-
- render() {
- const {
- invalid,
- str,
- locale,
- prefixCls,
- placeholder,
- disabled,
- showClear,
- inputMode,
- inputReadOnly,
- } = this;
- const clearIcon = getComponent(this, 'clearIcon');
- const invalidClass = invalid ? `${prefixCls}-input-invalid` : '';
- return (
-
- );
- },
-};
-
-export default DateInput;
diff --git a/components/vc-calendar/src/date/DateTBody.jsx b/components/vc-calendar/src/date/DateTBody.jsx
deleted file mode 100644
index 08871b0d6..000000000
--- a/components/vc-calendar/src/date/DateTBody.jsx
+++ /dev/null
@@ -1,258 +0,0 @@
-import PropTypes from '../../../_util/vue-types';
-import { getOptionProps } from '../../../_util/props-util';
-import cx from '../../../_util/classNames';
-import DateConstants from './DateConstants';
-import { getTitleString, getTodayTime } from '../util/';
-function noop() {}
-function isSameDay(one, two) {
- return one && two && one.isSame(two, 'day');
-}
-
-function beforeCurrentMonthYear(current, today) {
- if (current.year() < today.year()) {
- return 1;
- }
- return current.year() === today.year() && current.month() < today.month();
-}
-
-function afterCurrentMonthYear(current, today) {
- if (current.year() > today.year()) {
- return 1;
- }
- return current.year() === today.year() && current.month() > today.month();
-}
-
-function getIdFromDate(date) {
- return `rc-calendar-${date.year()}-${date.month()}-${date.date()}`;
-}
-
-const DateTBody = {
- name: 'DateTBody',
- inheritAttrs: false,
- props: {
- contentRender: PropTypes.func,
- dateRender: PropTypes.func,
- disabledDate: PropTypes.func,
- prefixCls: PropTypes.string,
- selectedValue: PropTypes.any,
- value: PropTypes.object,
- hoverValue: PropTypes.any.def([]),
- showWeekNumber: PropTypes.looseBool,
- },
-
- render() {
- const props = getOptionProps(this);
- const {
- contentRender,
- prefixCls,
- selectedValue,
- value,
- showWeekNumber,
- dateRender,
- disabledDate,
- hoverValue,
- } = props;
- const { onSelect = noop, onDayHover = noop } = this.$attrs;
- let iIndex;
- let jIndex;
- let current;
- const dateTable = [];
- const today = getTodayTime(value);
- const cellClass = `${prefixCls}-cell`;
- const weekNumberCellClass = `${prefixCls}-week-number-cell`;
- const dateClass = `${prefixCls}-date`;
- const todayClass = `${prefixCls}-today`;
- const selectedClass = `${prefixCls}-selected-day`;
- const selectedDateClass = `${prefixCls}-selected-date`; // do not move with mouse operation
- const selectedStartDateClass = `${prefixCls}-selected-start-date`;
- const selectedEndDateClass = `${prefixCls}-selected-end-date`;
- const inRangeClass = `${prefixCls}-in-range-cell`;
- const lastMonthDayClass = `${prefixCls}-last-month-cell`;
- const nextMonthDayClass = `${prefixCls}-next-month-btn-day`;
- const disabledClass = `${prefixCls}-disabled-cell`;
- const firstDisableClass = `${prefixCls}-disabled-cell-first-of-row`;
- const lastDisableClass = `${prefixCls}-disabled-cell-last-of-row`;
- const lastDayOfMonthClass = `${prefixCls}-last-day-of-month`;
- const month1 = value.clone();
- month1.date(1);
- const day = month1.day();
- const lastMonthDiffDay = (day + 7 - value.localeData().firstDayOfWeek()) % 7;
- // calculate last month
- const lastMonth1 = month1.clone();
- lastMonth1.add(0 - lastMonthDiffDay, 'days');
- let passed = 0;
- for (iIndex = 0; iIndex < DateConstants.DATE_ROW_COUNT; iIndex++) {
- for (jIndex = 0; jIndex < DateConstants.DATE_COL_COUNT; jIndex++) {
- current = lastMonth1;
- if (passed) {
- current = current.clone();
- current.add(passed, 'days');
- }
- dateTable.push(current);
- passed++;
- }
- }
- const tableHtml = [];
- passed = 0;
-
- for (iIndex = 0; iIndex < DateConstants.DATE_ROW_COUNT; iIndex++) {
- let isCurrentWeek;
- let weekNumberCell;
- let isActiveWeek = false;
- const dateCells = [];
- if (showWeekNumber) {
- weekNumberCell = (
-
- {dateTable[passed].week()}
- |
- );
- }
- for (jIndex = 0; jIndex < DateConstants.DATE_COL_COUNT; jIndex++) {
- let next = null;
- let last = null;
- current = dateTable[passed];
- if (jIndex < DateConstants.DATE_COL_COUNT - 1) {
- next = dateTable[passed + 1];
- }
- if (jIndex > 0) {
- last = dateTable[passed - 1];
- }
- let cls = cellClass;
- let disabled = false;
- let selected = false;
-
- if (isSameDay(current, today)) {
- cls += ` ${todayClass}`;
- isCurrentWeek = true;
- }
-
- const isBeforeCurrentMonthYear = beforeCurrentMonthYear(current, value);
- const isAfterCurrentMonthYear = afterCurrentMonthYear(current, value);
-
- if (selectedValue && Array.isArray(selectedValue)) {
- const rangeValue = hoverValue.length ? hoverValue : selectedValue;
- if (!isBeforeCurrentMonthYear && !isAfterCurrentMonthYear) {
- const startValue = rangeValue[0];
- const endValue = rangeValue[1];
- if (startValue) {
- if (isSameDay(current, startValue)) {
- selected = true;
- isActiveWeek = true;
- cls += ` ${selectedStartDateClass}`;
- }
- }
- if (startValue || endValue) {
- if (isSameDay(current, endValue)) {
- selected = true;
- isActiveWeek = true;
- cls += ` ${selectedEndDateClass}`;
- } else if (
- (startValue === null || startValue === undefined) &&
- current.isBefore(endValue, 'day')
- ) {
- cls += ` ${inRangeClass}`;
- } else if (
- (endValue === null || endValue === undefined) &&
- current.isAfter(startValue, 'day')
- ) {
- cls += ` ${inRangeClass}`;
- } else if (current.isAfter(startValue, 'day') && current.isBefore(endValue, 'day')) {
- cls += ` ${inRangeClass}`;
- }
- }
- }
- } else if (isSameDay(current, value)) {
- // keyboard change value, highlight works
- selected = true;
- isActiveWeek = true;
- }
-
- if (isSameDay(current, selectedValue)) {
- cls += ` ${selectedDateClass}`;
- }
-
- if (isBeforeCurrentMonthYear) {
- cls += ` ${lastMonthDayClass}`;
- }
- if (isAfterCurrentMonthYear) {
- cls += ` ${nextMonthDayClass}`;
- }
-
- if (current.clone().endOf('month').date() === current.date()) {
- cls += ` ${lastDayOfMonthClass}`;
- }
-
- if (disabledDate) {
- if (disabledDate(current, value)) {
- disabled = true;
-
- if (!last || !disabledDate(last, value)) {
- cls += ` ${firstDisableClass}`;
- }
-
- if (!next || !disabledDate(next, value)) {
- cls += ` ${lastDisableClass}`;
- }
- }
- }
-
- if (selected) {
- cls += ` ${selectedClass}`;
- }
-
- if (disabled) {
- cls += ` ${disabledClass}`;
- }
-
- let dateHtml;
- if (dateRender) {
- dateHtml = dateRender({ current, today: value });
- } else {
- const content = contentRender ? contentRender({ current, today: value }) : current.date();
- dateHtml = (
-
- {content}
-
- );
- }
-
- dateCells.push(
-
- {dateHtml}
- | ,
- );
-
- passed++;
- }
-
- tableHtml.push(
-
- {weekNumberCell}
- {dateCells}
- ,
- );
- }
- return {tableHtml};
- },
-};
-
-export default DateTBody;
diff --git a/components/vc-calendar/src/date/DateTHead.jsx b/components/vc-calendar/src/date/DateTHead.jsx
deleted file mode 100644
index a9fcc5119..000000000
--- a/components/vc-calendar/src/date/DateTHead.jsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import DateConstants from './DateConstants';
-import moment from 'moment';
-
-const DateTHead = (_, { attrs }) => {
- const value = attrs.value;
- const localeData = value.localeData();
- const prefixCls = attrs.prefixCls;
- const veryShortWeekdays = [];
- const weekDays = [];
- const firstDayOfWeek = localeData.firstDayOfWeek();
- let showWeekNumberEl;
- const now = moment();
- for (let dateColIndex = 0; dateColIndex < DateConstants.DATE_COL_COUNT; dateColIndex++) {
- const index = (firstDayOfWeek + dateColIndex) % DateConstants.DATE_COL_COUNT;
- now.day(index);
- veryShortWeekdays[dateColIndex] = localeData.weekdaysMin(now);
- weekDays[dateColIndex] = localeData.weekdaysShort(now);
- }
-
- if (attrs.showWeekNumber) {
- showWeekNumberEl = (
-
- x
- |
- );
- }
- const weekDaysEls = weekDays.map((day, xindex) => {
- return (
-
- {veryShortWeekdays[xindex]}
- |
- );
- });
- return (
-
-
- {showWeekNumberEl}
- {weekDaysEls}
-
-
- );
-};
-
-DateTHead.inheritAttrs = false;
-
-export default DateTHead;
diff --git a/components/vc-calendar/src/date/DateTable.jsx b/components/vc-calendar/src/date/DateTable.jsx
deleted file mode 100644
index 7c7408b34..000000000
--- a/components/vc-calendar/src/date/DateTable.jsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import DateTHead from './DateTHead';
-import DateTBody from './DateTBody';
-
-const DateTable = (_, { attrs }) => {
- const prefixCls = attrs.prefixCls;
- return (
-
- );
-};
-
-DateTable.inheritAttrs = false;
-
-export default DateTable;
diff --git a/components/vc-calendar/src/decade/DecadePanel.jsx b/components/vc-calendar/src/decade/DecadePanel.jsx
deleted file mode 100644
index 2bf35c104..000000000
--- a/components/vc-calendar/src/decade/DecadePanel.jsx
+++ /dev/null
@@ -1,133 +0,0 @@
-import PropTypes from '../../../_util/vue-types';
-import BaseMixin from '../../../_util/BaseMixin';
-const ROW = 4;
-const COL = 3;
-function noop() {}
-function goYear(direction) {
- const next = this.sValue.clone();
- next.add(direction, 'years');
- this.setState({
- sValue: next,
- });
-}
-
-function chooseDecade(year, event) {
- const next = this.sValue.clone();
- next.year(year);
- next.month(this.sValue.month());
- this.__emit('select', next);
- event.preventDefault();
-}
-
-export default {
- name: 'DecadePanel',
- mixins: [BaseMixin],
- inheritAttrs: false,
- props: {
- locale: PropTypes.object,
- value: PropTypes.object,
- defaultValue: PropTypes.object,
- rootPrefixCls: PropTypes.string,
- renderFooter: PropTypes.func,
- },
- data() {
- this.nextCentury = goYear.bind(this, 100);
- this.previousCentury = goYear.bind(this, -100);
- return {
- sValue: this.value || this.defaultValue,
- };
- },
- watch: {
- value(val) {
- this.sValue = val;
- },
- },
- render() {
- const value = this.sValue;
- const { locale, renderFooter } = this.$props;
- const currentYear = value.year();
- const startYear = parseInt(currentYear / 100, 10) * 100;
- const preYear = startYear - 10;
- const endYear = startYear + 99;
- const decades = [];
- let index = 0;
- const prefixCls = `${this.rootPrefixCls}-decade-panel`;
-
- for (let rowIndex = 0; rowIndex < ROW; rowIndex++) {
- decades[rowIndex] = [];
- for (let colIndex = 0; colIndex < COL; colIndex++) {
- const startDecade = preYear + index * 10;
- const endDecade = preYear + index * 10 + 9;
- decades[rowIndex][colIndex] = {
- startDecade,
- endDecade,
- };
- index++;
- }
- }
-
- const footer = renderFooter && renderFooter('decade');
- const decadesEls = decades.map((row, decadeIndex) => {
- const tds = row.map(decadeData => {
- const dStartDecade = decadeData.startDecade;
- const dEndDecade = decadeData.endDecade;
- const isLast = dStartDecade < startYear;
- const isNext = dEndDecade > endYear;
- const classNameMap = {
- [`${prefixCls}-cell`]: 1,
- [`${prefixCls}-selected-cell`]: dStartDecade <= currentYear && currentYear <= dEndDecade,
- [`${prefixCls}-last-century-cell`]: isLast,
- [`${prefixCls}-next-century-cell`]: isNext,
- };
- const content = `${dStartDecade}-${dEndDecade}`;
- let clickHandler = noop;
- if (isLast) {
- clickHandler = this.previousCentury;
- } else if (isNext) {
- clickHandler = this.nextCentury;
- } else {
- clickHandler = chooseDecade.bind(this, dStartDecade);
- }
- return (
-
- {content}
- |
- );
- });
- return (
-
- {tds}
-
- );
- });
-
- return (
-
- );
- },
-};
diff --git a/components/vc-calendar/src/full-calendar/CalendarHeader.jsx b/components/vc-calendar/src/full-calendar/CalendarHeader.jsx
deleted file mode 100644
index 3800fcfa4..000000000
--- a/components/vc-calendar/src/full-calendar/CalendarHeader.jsx
+++ /dev/null
@@ -1,135 +0,0 @@
-import PropTypes from '../../../_util/vue-types';
-import BaseMixin from '../../../_util/BaseMixin';
-import { getMonthName } from '../util';
-
-const CalendarHeader = {
- name: 'CalendarHeader',
- inheritAttrs: false,
- mixins: [BaseMixin],
- props: {
- value: PropTypes.object,
- locale: PropTypes.object,
- yearSelectOffset: PropTypes.number.def(10),
- yearSelectTotal: PropTypes.number.def(20),
- // onValueChange: PropTypes.func,
- // onTypeChange: PropTypes.func,
- Select: PropTypes.object,
- prefixCls: PropTypes.string,
- type: PropTypes.string,
- showTypeSwitch: PropTypes.looseBool,
- headerComponents: PropTypes.array,
- },
- methods: {
- onYearChange(year) {
- const newValue = this.value.clone();
- newValue.year(parseInt(year, 10));
- this.__emit('valueChange', newValue);
- },
-
- onMonthChange(month) {
- const newValue = this.value.clone();
- newValue.month(parseInt(month, 10));
- this.__emit('valueChange', newValue);
- },
-
- yearSelectElement(year) {
- const { yearSelectOffset, yearSelectTotal, prefixCls, Select } = this;
- const start = year - yearSelectOffset;
- const end = start + yearSelectTotal;
-
- const options = [];
- for (let index = start; index < end; index++) {
- options.push({(() => index)()});
- }
- return (
-
- );
- },
-
- monthSelectElement(month) {
- const { value, Select, prefixCls } = this;
- const t = value.clone();
- const options = [];
-
- for (let index = 0; index < 12; index++) {
- t.month(index);
- options.push({(() => getMonthName(t))()});
- }
-
- return (
-
- );
- },
-
- changeTypeToDate() {
- this.__emit('typeChange', 'date');
- },
-
- changeTypeToMonth() {
- this.__emit('typeChange', 'month');
- },
- },
-
- render() {
- const { value, locale, prefixCls, type, showTypeSwitch, headerComponents } = this;
- const year = value.year();
- const month = value.month();
- const yearSelect = this.yearSelectElement(year);
- const monthSelect = type === 'month' ? null : this.monthSelectElement(month);
- const switchCls = `${prefixCls}-header-switcher`;
- const typeSwitcher = showTypeSwitch ? (
-
- {type === 'date' ? (
- {locale.month}
- ) : (
-
- {locale.month}
-
- )}
- {type === 'month' ? (
- {locale.year}
- ) : (
-
- {locale.year}
-
- )}
-
- ) : null;
-
- return (
-
- );
- },
-};
-
-export default CalendarHeader;
diff --git a/components/vc-calendar/src/index.js b/components/vc-calendar/src/index.js
deleted file mode 100644
index abd4428bf..000000000
--- a/components/vc-calendar/src/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import Calendar from './Calendar';
-
-export default Calendar;
diff --git a/components/vc-calendar/src/locale/ku_KU.js b/components/vc-calendar/src/locale/ku_KU.js
deleted file mode 100644
index c947facb4..000000000
--- a/components/vc-calendar/src/locale/ku_KU.js
+++ /dev/null
@@ -1,27 +0,0 @@
-export default {
- today: 'ئەمڕۆ',
- now: 'ئێستا',
- backToToday: 'گەڕانەوە بۆ ڕۆژی',
- ok: 'باشە',
- clear: 'پاک کردن',
- month: 'مانگ',
- year: 'ساڵ',
- timeSelect: 'هەڵبژاردنی کات',
- dateSelect: 'هەڵبژاردنی ڕێکەوت',
- monthSelect: 'مانگێک هەلبژێرە',
- yearSelect: 'ساڵێک هەڵبژێرە',
- decadeSelect: 'سەدەیەک هەڵبژێرە',
- yearFormat: 'YYYY',
- dateFormat: 'M/D/YYYY',
- dayFormat: 'D',
- dateTimeFormat: 'M/D/YYYY HH:mm:ss',
- monthBeforeYear: true,
- previousMonth: 'مانگی پێشو (PageUp)',
- nextMonth: 'مانگی داهاتو (PageDown)',
- previousYear: 'پارساڵ (Control + left)',
- nextYear: 'ساڵی داهاتو (Control + right)',
- previousDecade: 'دەیە پێشو',
- nextDecade: 'دەیە داهاتو',
- previousCentury: 'سەدەی پێشو',
- nextCentury: 'سەدەی داهاتو',
-};
diff --git a/components/vc-calendar/src/mixin/CalendarMixin.js b/components/vc-calendar/src/mixin/CalendarMixin.js
deleted file mode 100644
index 01bf59f92..000000000
--- a/components/vc-calendar/src/mixin/CalendarMixin.js
+++ /dev/null
@@ -1,129 +0,0 @@
-import PropTypes from '../../../_util/vue-types';
-import BaseMixin from '../../../_util/BaseMixin';
-import { hasProp } from '../../../_util/props-util';
-import moment from 'moment';
-import { isAllowedDate, getTodayTime } from '../util/index';
-function noop() {}
-
-export function getNowByCurrentStateValue(value) {
- let ret;
- if (value) {
- ret = getTodayTime(value);
- } else {
- ret = moment();
- }
- return ret;
-}
-function isMoment(value) {
- if (Array.isArray(value)) {
- return (
- value.length === 0 || value.findIndex(val => val === undefined || moment.isMoment(val)) !== -1
- );
- } else {
- return value === undefined || moment.isMoment(value);
- }
-}
-const MomentType = PropTypes.custom(isMoment);
-const CalendarMixin = {
- mixins: [BaseMixin],
- inheritAttrs: false,
- name: 'CalendarMixinWrapper',
- props: {
- value: MomentType,
- defaultValue: MomentType,
- },
-
- data() {
- if (this.onKeyDown === undefined) {
- this.onKeyDown = noop;
- }
- if (this.onBlur === undefined) {
- this.onBlur = noop;
- }
- const props = this.$props;
- const sValue = props.value || props.defaultValue || getNowByCurrentStateValue();
- return {
- sValue,
- sSelectedValue: props.selectedValue || props.defaultSelectedValue,
- };
- },
- watch: {
- value(val) {
- const sValue = val || this.defaultValue || getNowByCurrentStateValue(this.sValue);
- this.setState({
- sValue,
- });
- },
- selectedValue(val) {
- this.setState({
- sSelectedValue: val,
- });
- },
- },
- methods: {
- onSelect(value, cause) {
- if (value) {
- this.setValue(value);
- }
- this.setSelectedValue(value, cause);
- },
-
- renderRoot(newProps) {
- const props = { ...this.$props, ...this.$attrs };
- const prefixCls = props.prefixCls;
-
- const className = {
- [prefixCls]: 1,
- [`${prefixCls}-hidden`]: !props.visible,
- [props.class]: !!props.class,
- [newProps.class]: !!newProps.class,
- };
- return (
-
- {newProps.children}
-
- );
- },
-
- setSelectedValue(selectedValue, cause) {
- // if (this.isAllowedDate(selectedValue)) {
- if (!hasProp(this, 'selectedValue')) {
- this.setState({
- sSelectedValue: selectedValue,
- });
- }
- this.__emit('select', selectedValue, cause);
- // }
- },
-
- setValue(value) {
- const originalValue = this.sValue;
- if (!hasProp(this, 'value')) {
- this.setState({
- sValue: value,
- });
- }
- if (
- (originalValue && value && !originalValue.isSame(value)) ||
- (!originalValue && value) ||
- (originalValue && !value)
- ) {
- this.__emit('change', value);
- }
- },
-
- isAllowedDate(value) {
- const disabledDate = this.disabledDate;
- const disabledTime = this.disabledTime;
- return isAllowedDate(value, disabledDate, disabledTime);
- },
- },
-};
-
-export default CalendarMixin;
diff --git a/components/vc-calendar/src/mixin/CommonMixin.js b/components/vc-calendar/src/mixin/CommonMixin.js
deleted file mode 100644
index ebaf4d890..000000000
--- a/components/vc-calendar/src/mixin/CommonMixin.js
+++ /dev/null
@@ -1,29 +0,0 @@
-export default {
- methods: {
- getFormat() {
- let { format } = this;
- const { locale, timePicker } = this;
- if (!format) {
- if (timePicker) {
- format = locale.dateTimeFormat;
- } else {
- format = locale.dateFormat;
- }
- }
- return format;
- },
- focus() {
- if (this.focusElement) {
- this.focusElement.focus();
- } else if (this.rootInstance) {
- this.rootInstance.focus();
- }
- },
- saveFocusElement(focusElement) {
- this.focusElement = focusElement;
- },
- saveRoot(root) {
- this.rootInstance = root;
- },
- },
-};
diff --git a/components/vc-calendar/src/month/MonthPanel.jsx b/components/vc-calendar/src/month/MonthPanel.jsx
deleted file mode 100644
index 8aa19434b..000000000
--- a/components/vc-calendar/src/month/MonthPanel.jsx
+++ /dev/null
@@ -1,114 +0,0 @@
-import PropTypes from '../../../_util/vue-types';
-import BaseMixin from '../../../_util/BaseMixin';
-import { hasProp } from '../../../_util/props-util';
-import MonthTable from './MonthTable';
-
-function goYear(direction) {
- this.changeYear(direction);
-}
-
-function noop() {}
-
-const MonthPanel = {
- name: 'MonthPanel',
- inheritAttrs: false,
- mixins: [BaseMixin],
- props: {
- value: PropTypes.any,
- defaultValue: PropTypes.any,
- cellRender: PropTypes.any,
- contentRender: PropTypes.any,
- locale: PropTypes.any,
- rootPrefixCls: PropTypes.string,
- // onChange: PropTypes.func,
- disabledDate: PropTypes.func,
- // onSelect: PropTypes.func,
- renderFooter: PropTypes.func,
- changeYear: PropTypes.func.def(noop),
- },
-
- data() {
- const { value, defaultValue } = this;
- // bind methods
- this.nextYear = goYear.bind(this, 1);
- this.previousYear = goYear.bind(this, -1);
- return {
- sValue: value || defaultValue,
- };
- },
- watch: {
- value(val) {
- this.setState({
- sValue: val,
- });
- },
- },
- methods: {
- setAndSelectValue(value) {
- this.setValue(value);
- this.__emit('select', value);
- },
-
- setValue(value) {
- if (hasProp(this, 'value')) {
- this.setState({
- sValue: value,
- });
- }
- },
- },
-
- render() {
- const { sValue, cellRender, contentRender, locale, rootPrefixCls, disabledDate, renderFooter } =
- this;
- const year = sValue.year();
- const prefixCls = `${rootPrefixCls}-month-panel`;
-
- const footer = renderFooter && renderFooter('month');
- return (
-
- );
- },
-};
-
-export default MonthPanel;
diff --git a/components/vc-calendar/src/month/MonthTable.jsx b/components/vc-calendar/src/month/MonthTable.jsx
deleted file mode 100644
index 212ef440f..000000000
--- a/components/vc-calendar/src/month/MonthTable.jsx
+++ /dev/null
@@ -1,133 +0,0 @@
-import PropTypes from '../../../_util/vue-types';
-import BaseMixin from '../../../_util/BaseMixin';
-import { getTodayTime, getMonthName } from '../util/index';
-
-const ROW = 4;
-const COL = 3;
-
-function noop() {}
-
-const MonthTable = {
- name: 'MonthTable',
- inheritAttrs: false,
- mixins: [BaseMixin],
- props: {
- cellRender: PropTypes.func,
- prefixCls: PropTypes.string,
- value: PropTypes.object,
- locale: PropTypes.any,
- contentRender: PropTypes.any,
- disabledDate: PropTypes.func,
- },
- data() {
- return {
- sValue: this.value,
- };
- },
- watch: {
- value(val) {
- this.setState({
- sValue: val,
- });
- },
- },
- methods: {
- setAndSelectValue(value) {
- this.setState({
- sValue: value,
- });
- this.__emit('select', value);
- },
- chooseMonth(month) {
- const next = this.sValue.clone();
- next.month(month);
- this.setAndSelectValue(next);
- },
- months() {
- const value = this.sValue;
- const current = value.clone();
- const months = [];
- let index = 0;
- for (let rowIndex = 0; rowIndex < ROW; rowIndex++) {
- months[rowIndex] = [];
- for (let colIndex = 0; colIndex < COL; colIndex++) {
- current.month(index);
- const content = getMonthName(current);
- months[rowIndex][colIndex] = {
- value: index,
- content,
- title: content,
- };
- index++;
- }
- }
- return months;
- },
- },
-
- render() {
- const props = this.$props;
- const value = this.sValue;
- const today = getTodayTime(value);
- const months = this.months();
- const currentMonth = value.month();
- const { prefixCls, locale, contentRender, cellRender, disabledDate } = props;
- const monthsEls = months.map((month, index) => {
- const tds = month.map(monthData => {
- let disabled = false;
- if (disabledDate) {
- const testValue = value.clone();
- testValue.month(monthData.value);
- disabled = disabledDate(testValue);
- }
- const classNameMap = {
- [`${prefixCls}-cell`]: 1,
- [`${prefixCls}-cell-disabled`]: disabled,
- [`${prefixCls}-selected-cell`]: monthData.value === currentMonth,
- [`${prefixCls}-current-cell`]:
- today.year() === value.year() && monthData.value === today.month(),
- };
- let cellEl;
- if (cellRender) {
- const currentValue = value.clone();
- currentValue.month(monthData.value);
- cellEl = cellRender({ current: currentValue, locale });
- } else {
- let content;
- if (contentRender) {
- const currentValue = value.clone();
- currentValue.month(monthData.value);
- content = contentRender({ current: currentValue, locale });
- } else {
- content = monthData.content;
- }
- cellEl = {content};
- }
- return (
- this.chooseMonth(monthData.value)}
- title={monthData.title}
- class={classNameMap}
- >
- {cellEl}
- |
- );
- });
- return (
-
- {tds}
-
- );
- });
-
- return (
-
- );
- },
-};
-
-export default MonthTable;
diff --git a/components/vc-calendar/src/picker/placements.js b/components/vc-calendar/src/picker/placements.js
deleted file mode 100644
index 676028676..000000000
--- a/components/vc-calendar/src/picker/placements.js
+++ /dev/null
@@ -1,35 +0,0 @@
-const autoAdjustOverflow = {
- adjustX: 1,
- adjustY: 1,
-};
-
-const targetOffset = [0, 0];
-
-const placements = {
- bottomLeft: {
- points: ['tl', 'tl'],
- overflow: autoAdjustOverflow,
- offset: [0, -3],
- targetOffset,
- },
- bottomRight: {
- points: ['tr', 'tr'],
- overflow: autoAdjustOverflow,
- offset: [0, -3],
- targetOffset,
- },
- topRight: {
- points: ['br', 'br'],
- overflow: autoAdjustOverflow,
- offset: [0, 3],
- targetOffset,
- },
- topLeft: {
- points: ['bl', 'bl'],
- overflow: autoAdjustOverflow,
- offset: [0, 3],
- targetOffset,
- },
-};
-
-export default placements;
diff --git a/components/vc-calendar/src/range-calendar/CalendarPart.jsx b/components/vc-calendar/src/range-calendar/CalendarPart.jsx
deleted file mode 100644
index 5f6724817..000000000
--- a/components/vc-calendar/src/range-calendar/CalendarPart.jsx
+++ /dev/null
@@ -1,160 +0,0 @@
-import PropTypes from '../../../_util/vue-types';
-import BaseMixin from '../../../_util/BaseMixin';
-import { getOptionProps, getComponent } from '../../../_util/props-util';
-import { cloneElement } from '../../../_util/vnode';
-import CalendarHeader from '../calendar/CalendarHeader';
-import DateTable from '../date/DateTable';
-import DateInput from '../date/DateInput';
-import { getTimeConfig } from '../util/index';
-function noop() {}
-const CalendarPart = {
- name: 'CalendarPart',
- inheritAttrs: false,
- mixins: [BaseMixin],
- props: {
- prefixCls: PropTypes.string,
- value: PropTypes.any,
- hoverValue: PropTypes.any,
- selectedValue: PropTypes.any,
- direction: PropTypes.any,
- locale: PropTypes.any,
- showDateInput: PropTypes.looseBool,
- showTimePicker: PropTypes.looseBool,
- showWeekNumber: PropTypes.looseBool,
- format: PropTypes.any,
- placeholder: PropTypes.any,
- disabledDate: PropTypes.any,
- timePicker: PropTypes.any,
- disabledTime: PropTypes.any,
- disabledMonth: PropTypes.any,
- mode: PropTypes.any,
- // onInputSelect: PropTypes.func,
- timePickerDisabledTime: PropTypes.object,
- enableNext: PropTypes.any,
- enablePrev: PropTypes.any,
- clearIcon: PropTypes.any,
- dateRender: PropTypes.func,
- inputMode: PropTypes.string,
- inputReadOnly: PropTypes.looseBool,
- },
- render() {
- const { $props: props } = this;
- const {
- prefixCls,
- value,
- hoverValue,
- selectedValue,
- mode,
- direction,
- locale,
- format,
- placeholder,
- disabledDate,
- timePicker,
- disabledTime,
- timePickerDisabledTime,
- showTimePicker,
- enablePrev,
- enableNext,
- disabledMonth,
- showDateInput,
- dateRender,
- showWeekNumber,
- showClear,
- inputMode,
- inputReadOnly,
- } = props;
- const clearIcon = getComponent(this, 'clearIcon');
- const {
- onInputChange = noop,
- onInputSelect = noop,
- onValueChange = noop,
- onPanelChange = noop,
- onSelect = noop,
- onDayHover = noop,
- } = this.$attrs;
- const shouldShowTimePicker = showTimePicker && timePicker;
- const disabledTimeConfig =
- shouldShowTimePicker && disabledTime ? getTimeConfig(selectedValue, disabledTime) : null;
- const rangeClassName = `${prefixCls}-range`;
- const newProps = {
- locale,
- value,
- prefixCls,
- showTimePicker,
- };
- const index = direction === 'left' ? 0 : 1;
- let timePickerEle = null;
- if (shouldShowTimePicker) {
- const timePickerProps = getOptionProps(timePicker);
- timePickerEle = cloneElement(timePicker, {
- showHour: true,
- showMinute: true,
- showSecond: true,
- ...timePickerProps,
- ...disabledTimeConfig,
- ...timePickerDisabledTime,
- defaultOpenValue: value,
- value: selectedValue[index],
- onChange: onInputChange,
- });
- }
-
- const dateInputElement = showDateInput && (
-
- );
- const headerProps = {
- ...newProps,
- mode,
- enableNext,
- enablePrev,
- disabledMonth,
- onValueChange,
- onPanelChange,
- };
- const tableProps = {
- ...newProps,
- hoverValue,
- selectedValue,
- dateRender,
- disabledDate,
- showWeekNumber,
- onSelect,
- onDayHover,
- };
- return (
-
- {dateInputElement}
-
-
- {showTimePicker ? (
-
- ) : null}
-
-
-
-
-
- );
- },
-};
-
-export default CalendarPart;
diff --git a/components/vc-calendar/src/util/index.js b/components/vc-calendar/src/util/index.js
deleted file mode 100644
index 296e046cb..000000000
--- a/components/vc-calendar/src/util/index.js
+++ /dev/null
@@ -1,113 +0,0 @@
-import moment from 'moment';
-
-const defaultDisabledTime = {
- disabledHours() {
- return [];
- },
- disabledMinutes() {
- return [];
- },
- disabledSeconds() {
- return [];
- },
-};
-
-export function getTodayTime(value) {
- const today = moment();
- today.locale(value.locale()).utcOffset(value.utcOffset());
- return today;
-}
-
-export function getTitleString(value) {
- return value.format('LL');
-}
-
-export function getTodayTimeStr(value) {
- const today = getTodayTime(value);
- return getTitleString(today);
-}
-
-export function getMonthName(month) {
- const locale = month.locale();
- const localeData = month.localeData();
- return localeData[locale === 'zh-cn' ? 'months' : 'monthsShort'](month);
-}
-
-export function syncTime(from, to) {
- if (!moment.isMoment(from) || !moment.isMoment(to)) return;
- to.hour(from.hour());
- to.minute(from.minute());
- to.second(from.second());
- to.millisecond(from.millisecond());
-}
-
-export function getTimeConfig(value, disabledTime) {
- let disabledTimeConfig = disabledTime ? disabledTime(value) : {};
- disabledTimeConfig = {
- ...defaultDisabledTime,
- ...disabledTimeConfig,
- };
- return disabledTimeConfig;
-}
-
-export function isTimeValidByConfig(value, disabledTimeConfig) {
- let invalidTime = false;
- if (value) {
- const hour = value.hour();
- const minutes = value.minute();
- const seconds = value.second();
- const disabledHours = disabledTimeConfig.disabledHours();
- if (disabledHours.indexOf(hour) === -1) {
- const disabledMinutes = disabledTimeConfig.disabledMinutes(hour);
- if (disabledMinutes.indexOf(minutes) === -1) {
- const disabledSeconds = disabledTimeConfig.disabledSeconds(hour, minutes);
- invalidTime = disabledSeconds.indexOf(seconds) !== -1;
- } else {
- invalidTime = true;
- }
- } else {
- invalidTime = true;
- }
- }
- return !invalidTime;
-}
-
-export function isTimeValid(value, disabledTime) {
- const disabledTimeConfig = getTimeConfig(value, disabledTime);
- return isTimeValidByConfig(value, disabledTimeConfig);
-}
-
-export function isAllowedDate(value, disabledDate, disabledTime) {
- if (disabledDate) {
- if (disabledDate(value)) {
- return false;
- }
- }
- if (disabledTime) {
- if (!isTimeValid(value, disabledTime)) {
- return false;
- }
- }
- return true;
-}
-
-export function formatDate(value, format) {
- if (!value) {
- return '';
- }
-
- if (Array.isArray(format)) {
- format = format[0];
- }
-
- if (typeof format === 'function') {
- const result = format(value);
- if (typeof result === 'string') {
- return result;
- } else {
- throw new Error('The function of format does not return a string');
- }
- }
-
- return value.format(format);
-}
diff --git a/components/vc-calendar/src/util/toTime.js b/components/vc-calendar/src/util/toTime.js
deleted file mode 100644
index 22023b5ad..000000000
--- a/components/vc-calendar/src/util/toTime.js
+++ /dev/null
@@ -1,15 +0,0 @@
-export function goStartMonth(time) {
- return time.clone().startOf('month');
-}
-
-export function goEndMonth(time) {
- return time.clone().endOf('month');
-}
-
-export function goTime(time, direction, unit) {
- return time.clone().add(direction, unit);
-}
-
-export function includesTime(timeList = [], time, unit) {
- return timeList.some(t => t.isSame(time, unit));
-}
diff --git a/components/vc-calendar/src/year/YearPanel.jsx b/components/vc-calendar/src/year/YearPanel.jsx
deleted file mode 100644
index e4d2ecb21..000000000
--- a/components/vc-calendar/src/year/YearPanel.jsx
+++ /dev/null
@@ -1,153 +0,0 @@
-import PropTypes from '../../../_util/vue-types';
-import BaseMixin from '../../../_util/BaseMixin';
-const ROW = 4;
-const COL = 3;
-function noop() {}
-function goYear(direction) {
- const value = this.sValue.clone();
- value.add(direction, 'year');
- this.setState({
- sValue: value,
- });
-}
-
-function chooseYear(year) {
- const value = this.sValue.clone();
- value.year(year);
- value.month(this.sValue.month());
- this.sValue = value;
- this.__emit('select', value);
-}
-
-export default {
- name: 'YearPanel',
- mixins: [BaseMixin],
- inheritAttrs: false,
- props: {
- rootPrefixCls: PropTypes.string,
- value: PropTypes.object,
- defaultValue: PropTypes.object,
- locale: PropTypes.object,
- renderFooter: PropTypes.func,
- },
- data() {
- this.nextDecade = goYear.bind(this, 10);
- this.previousDecade = goYear.bind(this, -10);
- return {
- sValue: this.value || this.defaultValue,
- };
- },
- watch: {
- value(val) {
- this.sValue = val;
- },
- },
- methods: {
- years() {
- const value = this.sValue;
- const currentYear = value.year();
- const startYear = parseInt(currentYear / 10, 10) * 10;
- const previousYear = startYear - 1;
- const years = [];
- let index = 0;
- for (let rowIndex = 0; rowIndex < ROW; rowIndex++) {
- years[rowIndex] = [];
- for (let colIndex = 0; colIndex < COL; colIndex++) {
- const year = previousYear + index;
- const content = String(year);
- years[rowIndex][colIndex] = {
- content,
- year,
- title: content,
- };
- index++;
- }
- }
- return years;
- },
- },
-
- render() {
- const { sValue: value, locale, renderFooter } = this;
- const onDecadePanelShow = this.$attrs.onDecadePanelShow || noop;
- const years = this.years();
- const currentYear = value.year();
- const startYear = parseInt(currentYear / 10, 10) * 10;
- const endYear = startYear + 9;
- const prefixCls = `${this.rootPrefixCls}-year-panel`;
-
- const yeasEls = years.map((row, index) => {
- const tds = row.map(yearData => {
- const classNameMap = {
- [`${prefixCls}-cell`]: 1,
- [`${prefixCls}-selected-cell`]: yearData.year === currentYear,
- [`${prefixCls}-last-decade-cell`]: yearData.year < startYear,
- [`${prefixCls}-next-decade-cell`]: yearData.year > endYear,
- };
- let clickHandler = noop;
- if (yearData.year < startYear) {
- clickHandler = this.previousDecade;
- } else if (yearData.year > endYear) {
- clickHandler = this.nextDecade;
- } else {
- clickHandler = chooseYear.bind(this, yearData.year);
- }
- return (
-
- {yearData.content}
- |
- );
- });
- return (
-
- {tds}
-
- );
- });
- const footer = renderFooter && renderFooter('year');
- return (
-
- );
- },
-};
diff --git a/components/vc-dialog/DialogWrap.jsx b/components/vc-dialog/DialogWrap.jsx
index ef9a2b313..6dfe9d2fc 100644
--- a/components/vc-dialog/DialogWrap.jsx
+++ b/components/vc-dialog/DialogWrap.jsx
@@ -35,9 +35,11 @@ const DialogWrap = defineComponent({
visible={visible}
forceRender={forceRender}
getContainer={getContainer}
- children={childProps => {
- dialogProps = { ...dialogProps, ...childProps };
- return ;
+ v-slots={{
+ default: childProps => {
+ dialogProps = { ...dialogProps, ...childProps };
+ return ;
+ },
}}
/>
);
diff --git a/components/vc-mentions/src/Mentions.tsx b/components/vc-mentions/src/Mentions.tsx
index 10e78387b..ec291fe67 100644
--- a/components/vc-mentions/src/Mentions.tsx
+++ b/components/vc-mentions/src/Mentions.tsx
@@ -212,7 +212,7 @@ export default defineComponent({
if (!!filterOption === false) {
return true;
}
- return filterOption(targetMeasureText, option);
+ return (filterOption as Function)(targetMeasureText, option);
});
return list;
};
diff --git a/components/vc-pagination/locale/bn_BD.js b/components/vc-pagination/locale/bn_BD.js
new file mode 100644
index 000000000..d5c8c4609
--- /dev/null
+++ b/components/vc-pagination/locale/bn_BD.js
@@ -0,0 +1,15 @@
+export default {
+ // Options.jsx
+ items_per_page: '/ পৃষ্ঠা',
+ jump_to: 'যাও',
+ jump_to_confirm: 'নিশ্চিত',
+ page: '',
+
+ // Pagination.jsx
+ prev_page: 'আগের পৃষ্ঠা',
+ next_page: 'পরের পৃষ্ঠা',
+ prev_5: 'পূর্ববর্তী ৫ পৃষ্ঠা',
+ next_5: 'পরবর্তী ৫ পৃষ্ঠা',
+ prev_3: 'পূর্ববর্তী ৩ পৃষ্ঠা',
+ next_3: 'পরবর্তী ৩ পৃষ্ঠা',
+};
diff --git a/components/vc-pagination/locale/by_BY.js b/components/vc-pagination/locale/by_BY.js
new file mode 100644
index 000000000..36b1886cc
--- /dev/null
+++ b/components/vc-pagination/locale/by_BY.js
@@ -0,0 +1,14 @@
+export default {
+ // Options.jsx
+ items_per_page: '/старонка',
+ jump_to: 'Перайсці',
+ jump_to_confirm: 'Пацвердзіць',
+ page: '',
+ // Pagination.jsx
+ prev_page: 'Назад',
+ next_page: 'Наперад',
+ prev_5: 'Папярэднія 5',
+ next_5: 'Наступныя 5',
+ prev_3: 'Папярэднія 3',
+ next_3: 'Наступныя 3',
+ };
\ No newline at end of file
diff --git a/components/vc-pagination/locale/fr_CA.js b/components/vc-pagination/locale/fr_CA.js
new file mode 100644
index 000000000..e71070622
--- /dev/null
+++ b/components/vc-pagination/locale/fr_CA.js
@@ -0,0 +1,15 @@
+export default {
+ // Options.jsx
+ items_per_page: '/ page',
+ jump_to: 'Aller à',
+ jump_to_confirm: 'confirmer',
+ page: '',
+
+ // Pagination.jsx
+ prev_page: 'Page précédente',
+ next_page: 'Page suivante',
+ prev_5: '5 Pages précédentes',
+ next_5: '5 Pages suivantes',
+ prev_3: '3 Pages précédentes',
+ next_3: '3 Pages suivantes',
+};
diff --git a/components/vc-pagination/locale/gl_ES.tsx b/components/vc-pagination/locale/gl_ES.tsx
new file mode 100644
index 000000000..61fb164be
--- /dev/null
+++ b/components/vc-pagination/locale/gl_ES.tsx
@@ -0,0 +1,15 @@
+export default {
+ // Options.jsx
+ items_per_page: '/ páxina',
+ jump_to: 'Ir a',
+ jump_to_confirm: 'confirmar',
+ page: '',
+
+ // Pagination.jsx
+ prev_page: 'Páxina anterior',
+ next_page: 'Páxina seguinte',
+ prev_5: '5 páxinas previas',
+ next_5: '5 páxinas seguintes',
+ prev_3: '3 páxinas previas',
+ next_3: '3 páxinas seguintes',
+};
diff --git a/components/vc-pagination/locale/ja_JP.js b/components/vc-pagination/locale/ja_JP.js
index f0ebaa9f7..9aa0f6e2f 100644
--- a/components/vc-pagination/locale/ja_JP.js
+++ b/components/vc-pagination/locale/ja_JP.js
@@ -1,6 +1,6 @@
export default {
// Options.jsx
- items_per_page: '/ ページ',
+ items_per_page: '件 / ページ',
jump_to: '移動',
jump_to_confirm: '確認する',
page: 'ページ',
diff --git a/components/vc-pagination/locale/ka_GE.js b/components/vc-pagination/locale/ka_GE.js
new file mode 100644
index 000000000..82cf45bda
--- /dev/null
+++ b/components/vc-pagination/locale/ka_GE.js
@@ -0,0 +1,14 @@
+export default {
+ // Options.jsx
+ items_per_page: '/ გვერდი.',
+ jump_to: 'გადასვლა',
+ jump_to_confirm: 'დადასტურება',
+ page: '',
+ // Pagination.jsx
+ prev_page: 'წინა გვერდი',
+ next_page: 'შემდეგი გვერდი',
+ prev_5: 'წინა 5 გვერდი',
+ next_5: 'შემდეგი 5 გვერდი',
+ prev_3: 'წინა 3 გვერდი',
+ next_3: 'შემდეგი 3 გვერდი',
+};
diff --git a/components/vc-pagination/locale/kk_KZ.js b/components/vc-pagination/locale/kk_KZ.js
new file mode 100644
index 000000000..fd5f1a3ff
--- /dev/null
+++ b/components/vc-pagination/locale/kk_KZ.js
@@ -0,0 +1,15 @@
+export default {
+ // Options.jsx
+ items_per_page: '/ бет',
+ jump_to: 'Секіру',
+ jump_to_confirm: 'Растау',
+ page: '',
+
+ // Pagination.jsx
+ prev_page: 'Артқа',
+ next_page: 'Алға',
+ prev_5: 'Алдыңғы 5',
+ next_5: 'Келесі 5',
+ prev_3: 'Алдыңғы 3',
+ next_3: 'Келесі 3',
+};
diff --git a/components/vc-pagination/locale/km_KH.js b/components/vc-pagination/locale/km_KH.js
new file mode 100644
index 000000000..86ec1b3fd
--- /dev/null
+++ b/components/vc-pagination/locale/km_KH.js
@@ -0,0 +1,15 @@
+export default {
+ // Options.jsx
+ items_per_page: '/ ទំព័រ',
+ jump_to: 'លោតទៅ',
+ jump_to_confirm: 'បញ្ជាក់',
+ page: 'ទំព័រ',
+
+ // Pagination.jsx
+ prev_page: 'ទំព័រមុន',
+ next_page: 'ទំព័របន្ទាប់',
+ prev_5: '៥ ទំព័រថយក្រោយ',
+ next_5: '៥ ទំព័រទៅមុខ',
+ prev_3: '៣ ទំព័រថយក្រោយ',
+ next_3: '៣ ទំព័រទៅមុខ',
+};
diff --git a/components/vc-pagination/locale/ku_IQ.js b/components/vc-pagination/locale/kmr_IQ.js
similarity index 100%
rename from components/vc-pagination/locale/ku_IQ.js
rename to components/vc-pagination/locale/kmr_IQ.js
diff --git a/components/vc-pagination/locale/ku_KU.js b/components/vc-pagination/locale/ku_KU.js
deleted file mode 100644
index c70ec9670..000000000
--- a/components/vc-pagination/locale/ku_KU.js
+++ /dev/null
@@ -1,15 +0,0 @@
-export default {
- // Options.jsx
- items_per_page: '/ ڵاپەرە',
- jump_to: 'بڕو بۆ',
- jump_to_confirm: 'پشت راستکردنەوە',
- page: 'ڵاپەرە',
-
- // Pagination.jsx
- prev_page: 'ڵاپەرەی پێشو',
- next_page: 'ڵاپەرەی داهاتو',
- prev_5: '۵ ڵاپەرەی پێشو',
- next_5: '۵ ڵاپەرەی داهاتو',
- prev_3: '۳ ڵاپەرەی پێشو',
- next_3: '۳ ڵاپەرەی داهاتو',
-};
diff --git a/components/vc-pagination/locale/lt_LT.js b/components/vc-pagination/locale/lt_LT.js
new file mode 100644
index 000000000..1504133c2
--- /dev/null
+++ b/components/vc-pagination/locale/lt_LT.js
@@ -0,0 +1,15 @@
+export default {
+ // Options.jsx
+ items_per_page: '/ psl.',
+ jump_to: 'Pereiti',
+ jump_to_confirm: 'patvirtinti',
+ page: '',
+
+ // Pagination.jsx
+ prev_page: 'Atgal',
+ next_page: 'Pirmyn',
+ prev_5: 'Grįžti 5 pls.',
+ next_5: 'Peršokti 5 pls.',
+ prev_3: 'Grįžti 3 pls.',
+ next_3: 'Peršokti 3 pls.',
+};
diff --git a/components/vc-pagination/locale/ml_IN.js b/components/vc-pagination/locale/ml_IN.js
new file mode 100644
index 000000000..83ec8f7bd
--- /dev/null
+++ b/components/vc-pagination/locale/ml_IN.js
@@ -0,0 +1,15 @@
+export default {
+ // Options.jsx
+ items_per_page: '/ പേജ്',
+ jump_to: 'അടുത്തത്',
+ jump_to_confirm: 'ഉറപ്പാക്കുക',
+ page: '',
+
+ // Pagination.jsx
+ prev_page: 'മുൻപുള്ള പേജ്',
+ next_page: 'അടുത്ത പേജ്',
+ prev_5: 'മുൻപുള്ള 5 പേജുകൾ',
+ next_5: 'അടുത്ത 5 പേജുകൾ',
+ prev_3: 'മുൻപുള്ള 3 പേജുകൾ',
+ next_3: 'അടുത്ത 3 പേജുകൾ',
+};
diff --git a/components/vc-pagination/locale/pl_PL.js b/components/vc-pagination/locale/pl_PL.js
index 7c16a7305..a0dc044d4 100644
--- a/components/vc-pagination/locale/pl_PL.js
+++ b/components/vc-pagination/locale/pl_PL.js
@@ -1,8 +1,8 @@
export default {
// Options.jsx
- items_per_page: '/ stronę',
+ items_per_page: 'na stronę',
jump_to: 'Idź do',
- jump_to_confirm: 'potwierdzać',
+ jump_to_confirm: 'potwierdź',
page: '',
// Pagination.jsx
diff --git a/components/vc-pagination/locale/ur_PK.js b/components/vc-pagination/locale/ur_PK.js
new file mode 100644
index 000000000..3b4721d11
--- /dev/null
+++ b/components/vc-pagination/locale/ur_PK.js
@@ -0,0 +1,15 @@
+export default {
+ // Options.jsx
+ items_per_page: '/ صفحہ',
+ jump_to: 'پاس جاؤ',
+ jump_to_confirm: 'تصدیق کریں',
+ page: '',
+
+ // Pagination.jsx
+ prev_page: 'پچھلا صفحہ',
+ next_page: 'اگلا صفحہ',
+ prev_5: 'پچھلے 5 صفحات',
+ next_5: 'اگلے 5 صفحات',
+ prev_3: 'پچھلے 3 صفحات',
+ next_3: 'اگلے 3 صفحات',
+};
diff --git a/components/vc-picker/PanelContext.tsx b/components/vc-picker/PanelContext.tsx
new file mode 100644
index 000000000..5ea2f23b6
--- /dev/null
+++ b/components/vc-picker/PanelContext.tsx
@@ -0,0 +1,38 @@
+import type { InjectionKey, Ref } from 'vue';
+import { inject, provide } from 'vue';
+import type { OnSelect, PanelMode } from './interface';
+
+export type ContextOperationRefProps = {
+ onKeydown?: (e: KeyboardEvent) => boolean;
+ onClose?: () => void;
+};
+
+export type PanelContextProps = {
+ operationRef?: Ref;
+ /** Only work with time panel */
+ hideHeader?: Ref;
+ panelRef?: Ref;
+ hidePrevBtn?: Ref;
+ hideNextBtn?: Ref;
+ onDateMouseenter?: (date: any) => void;
+ onDateMouseleave?: (date: any) => void;
+ onSelect?: OnSelect;
+ hideRanges?: Ref;
+ open?: Ref;
+ mode?: Ref;
+
+ /** Only used for TimePicker and this is a deprecated prop */
+ defaultOpenValue?: Ref;
+};
+
+const PanelContextKey: InjectionKey = Symbol('PanelContextProps');
+
+export const useProvidePanel = (props: PanelContextProps) => {
+ provide(PanelContextKey, props);
+};
+
+export const useInjectPanel = () => {
+ return inject(PanelContextKey, {});
+};
+
+export default PanelContextKey;
diff --git a/components/vc-picker/Picker.tsx b/components/vc-picker/Picker.tsx
new file mode 100644
index 000000000..e57d59033
--- /dev/null
+++ b/components/vc-picker/Picker.tsx
@@ -0,0 +1,592 @@
+/**
+ * Removed:
+ * - getCalendarContainer: use `getPopupContainer` instead
+ * - onOk
+ *
+ * New Feature:
+ * - picker
+ * - allowEmpty
+ * - selectable
+ *
+ * Tips: Should add faq about `datetime` mode with `defaultValue`
+ */
+
+import type {
+ PickerPanelBaseProps,
+ PickerPanelDateProps,
+ PickerPanelTimeProps,
+} from './PickerPanel';
+import PickerPanel from './PickerPanel';
+import PickerTrigger from './PickerTrigger';
+import { formatValue, isEqual, parseValue } from './utils/dateUtil';
+import getDataOrAriaProps, { toArray } from './utils/miscUtil';
+import type { ContextOperationRefProps } from './PanelContext';
+import { useProvidePanel } from './PanelContext';
+import type { CustomFormat, PickerMode } from './interface';
+import { getDefaultFormat, getInputSize, elementsContains } from './utils/uiUtil';
+import usePickerInput from './hooks/usePickerInput';
+import useTextValueMapping from './hooks/useTextValueMapping';
+import useValueTexts from './hooks/useValueTexts';
+import useHoverValue from './hooks/useHoverValue';
+import type { CSSProperties, Ref } from 'vue';
+import { computed, defineComponent, ref, toRef, watch } from 'vue';
+import type { ChangeEvent, FocusEventHandler, MouseEventHandler } from '../_util/EventInterface';
+import type { VueNode } from '../_util/type';
+import type { AlignType } from '../vc-align/interface';
+import useMergedState from '../_util/hooks/useMergedState';
+import { warning } from '../vc-util/warning';
+import classNames from '../_util/classNames';
+import type { SharedTimeProps } from './panels/TimePanel';
+
+export type PickerRefConfig = {
+ focus: () => void;
+ blur: () => void;
+};
+
+export type PickerSharedProps = {
+ dropdownClassName?: string;
+ dropdownAlign?: AlignType;
+ popupStyle?: CSSProperties;
+ transitionName?: string;
+ placeholder?: string;
+ allowClear?: boolean;
+ autofocus?: boolean;
+ disabled?: boolean;
+ tabindex?: number;
+ open?: boolean;
+ defaultOpen?: boolean;
+ /** Make input readOnly to avoid popup keyboard in mobile */
+ inputReadOnly?: boolean;
+ id?: string;
+
+ // Value
+ format?: string | CustomFormat | (string | CustomFormat)[];
+
+ // Render
+ suffixIcon?: VueNode;
+ clearIcon?: VueNode;
+ prevIcon?: VueNode;
+ nextIcon?: VueNode;
+ superPrevIcon?: VueNode;
+ superNextIcon?: VueNode;
+ getPopupContainer?: (node: HTMLElement) => HTMLElement;
+ panelRender?: (originPanel: VueNode) => VueNode;
+
+ // Events
+ onChange?: (value: DateType | null, dateString: string) => void;
+ onOpenChange?: (open: boolean) => void;
+ onFocus?: FocusEventHandler;
+ onBlur?: FocusEventHandler;
+ onMousedown?: MouseEventHandler;
+ onMouseup?: MouseEventHandler;
+ onMouseenter?: MouseEventHandler;
+ onMouseleave?: MouseEventHandler;
+ onClick?: MouseEventHandler;
+ onContextmenu?: MouseEventHandler;
+ onKeydown?: (event: KeyboardEvent, preventDefault: () => void) => void;
+
+ // WAI-ARIA
+ role?: string;
+ name?: string;
+
+ autocomplete?: string;
+ direction?: 'ltr' | 'rtl';
+ showToday?: boolean;
+ showTime?: boolean | SharedTimeProps;
+};
+
+type OmitPanelProps = Omit<
+ Props,
+ 'onChange' | 'hideHeader' | 'pickerValue' | 'onPickerValueChange'
+>;
+
+export type PickerBaseProps = {} & PickerSharedProps &
+ OmitPanelProps>;
+
+export type PickerDateProps = {} & PickerSharedProps &
+ OmitPanelProps>;
+
+export type PickerTimeProps = {
+ picker: 'time';
+ /**
+ * @deprecated Please use `defaultValue` directly instead
+ * since `defaultOpenValue` will confuse user of current value status
+ */
+ defaultOpenValue?: DateType;
+} & PickerSharedProps &
+ Omit>, 'format'>;
+
+export type PickerProps =
+ | PickerBaseProps
+ | PickerDateProps
+ | PickerTimeProps | | |