@alfalab/core-components-calendar-range 9.0.14 → 9.1.0-alfasans

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/Component.d.ts +4 -0
  2. package/Component.js.map +1 -1
  3. package/components/divider/index.css +8 -8
  4. package/components/divider/index.module.css.js +1 -1
  5. package/components/divider/index.module.css.js.map +1 -1
  6. package/cssm/Component.d.ts +4 -0
  7. package/cssm/Component.js.map +1 -1
  8. package/cssm/components/divider/index.module.css +1 -1
  9. package/cssm/hooks.d.ts +31 -0
  10. package/cssm/hooks.js +84 -0
  11. package/cssm/hooks.js.map +1 -1
  12. package/cssm/views/index.module.css +12 -0
  13. package/cssm/views/static.d.ts +13 -2
  14. package/cssm/views/static.js +93 -50
  15. package/cssm/views/static.js.map +1 -1
  16. package/esm/Component.d.ts +4 -0
  17. package/esm/Component.js.map +1 -1
  18. package/esm/components/divider/index.css +8 -8
  19. package/esm/components/divider/index.module.css.js +1 -1
  20. package/esm/components/divider/index.module.css.js.map +1 -1
  21. package/esm/hooks.d.ts +31 -0
  22. package/esm/hooks.js +84 -2
  23. package/esm/hooks.js.map +1 -1
  24. package/esm/views/index.css +19 -7
  25. package/esm/views/index.module.css.js +1 -1
  26. package/esm/views/index.module.css.js.map +1 -1
  27. package/esm/views/static.d.ts +13 -2
  28. package/esm/views/static.js +93 -50
  29. package/esm/views/static.js.map +1 -1
  30. package/hooks.d.ts +31 -0
  31. package/hooks.js +84 -0
  32. package/hooks.js.map +1 -1
  33. package/modern/Component.d.ts +4 -0
  34. package/modern/Component.js.map +1 -1
  35. package/modern/components/divider/index.css +8 -8
  36. package/modern/components/divider/index.module.css.js +1 -1
  37. package/modern/components/divider/index.module.css.js.map +1 -1
  38. package/modern/hooks.d.ts +31 -0
  39. package/modern/hooks.js +79 -2
  40. package/modern/hooks.js.map +1 -1
  41. package/modern/views/index.css +19 -7
  42. package/modern/views/index.module.css.js +1 -1
  43. package/modern/views/index.module.css.js.map +1 -1
  44. package/modern/views/static.d.ts +13 -2
  45. package/modern/views/static.js +88 -45
  46. package/modern/views/static.js.map +1 -1
  47. package/moderncssm/Component.d.ts +4 -0
  48. package/moderncssm/Component.js.map +1 -1
  49. package/moderncssm/components/divider/index.module.css +1 -1
  50. package/moderncssm/hooks.d.ts +31 -0
  51. package/moderncssm/hooks.js +79 -2
  52. package/moderncssm/hooks.js.map +1 -1
  53. package/moderncssm/views/index.module.css +13 -0
  54. package/moderncssm/views/static.d.ts +13 -2
  55. package/moderncssm/views/static.js +88 -45
  56. package/moderncssm/views/static.js.map +1 -1
  57. package/package.json +8 -7
  58. package/src/Component.tsx +5 -0
  59. package/src/components/divider/index.module.css +1 -1
  60. package/src/hooks.ts +150 -1
  61. package/src/views/index.module.css +11 -0
  62. package/src/views/static.tsx +188 -92
  63. package/views/index.css +19 -7
  64. package/views/index.module.css.js +1 -1
  65. package/views/index.module.css.js.map +1 -1
  66. package/views/static.d.ts +13 -2
  67. package/views/static.js +90 -47
  68. package/views/static.js.map +1 -1
package/Component.d.ts CHANGED
@@ -89,5 +89,9 @@ export type CalendarRangeProps = {
89
89
  * Дополнительный класс для контейнера календаря
90
90
  */
91
91
  calendarContainerClassName?: string;
92
+ /**
93
+ * Автоподмена дат
94
+ */
95
+ autoSwap?: boolean;
92
96
  };
93
97
  export declare const CalendarRange: FC<CalendarRangeProps>;
package/Component.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["src/Component.tsx"],"sourcesContent":["import React, { type FC } from 'react';\n\nimport { type CalendarInputProps } from '@alfalab/core-components-calendar-input';\n\nimport { CalendarRangePopover } from './views/popover';\nimport { CalendarRangeStatic } from './views/static';\n\nexport type CalendarRangeProps = {\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Значение инпута (используется и для календаря)\n */\n valueFrom?: string;\n\n /**\n * Значение инпута (используется и для календаря)\n */\n valueTo?: string;\n\n /**\n * Месяц в календаре по умолчанию\n */\n defaultMonth?: number;\n\n /**\n * Минимальная дата, доступная для выбора (timestamp)\n */\n minDate?: number;\n\n /**\n * Максимальная дата, доступная для выбора (timestamp)\n */\n maxDate?: number;\n\n /**\n * Обработчик изменения даты от\n */\n onDateFromChange?: (payload: { date: number | null; value: string }) => void;\n\n /**\n * Обработчик изменения даты до\n */\n onDateToChange?: (payload: { date: number | null; value: string }) => void;\n\n /**\n * Обработчик изменения\n */\n onChange?: (payload: {\n dateFrom: number | null;\n valueFrom: string;\n dateTo: number | null;\n valueTo: string;\n }) => void;\n\n /**\n * Коллбэк, срабатывающий при возникновении ошибок валидации дат внутри компонента.\n */\n onError?: (hasError: boolean) => void;\n\n /**\n * Список событий\n */\n events?: Array<Date | number>;\n\n /**\n * Список выходных\n */\n offDays?: Array<Date | number>;\n\n /**\n * Пропсы для инпута даты от\n */\n inputFromProps?: CalendarInputProps;\n\n /**\n * Пропсы для инпута даты до\n */\n inputToProps?: CalendarInputProps;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Определяет, как рендерить календарь — в поповере или снизу инпута\n */\n calendarPosition?: 'static' | 'popover';\n\n /**\n * calendarPosition = static\n * Отображать начальный месяц слева или справа (влияет только на начальный рендер)\n */\n defaultMonthPosition?: 'left' | 'right';\n\n /**\n * Возвращать невалидную дату для кастомной валидации\n */\n returnInvalidDates?: boolean;\n\n /**\n * Дополнительный класс для контейнера календаря\n */\n calendarContainerClassName?: string;\n};\n\nexport const CalendarRange: FC<CalendarRangeProps> = ({\n calendarPosition = 'static',\n ...restProps\n}) => {\n const View = calendarPosition === 'popover' ? CalendarRangePopover : CalendarRangeStatic;\n\n return <View {...restProps} />;\n};\n"],"names":["__rest","CalendarRangePopover","CalendarRangeStatic","React","__assign"],"mappings":";;;;;;;;;;;;;AA8GO,IAAM,aAAa,GAA2B,UAAC,EAGrD,EAAA;IAFG,IAAA,EAAA,GAAA,EAAA,CAAA,gBAA2B,EAA3B,gBAAgB,GAAG,EAAA,KAAA,MAAA,GAAA,QAAQ,KAAA,EACxB,SAAS,GAFsCA,YAAA,CAAA,EAAA,EAAA,CAAA,kBAAA,CAGrD,CADe;AAEZ,IAAA,IAAM,IAAI,GAAG,gBAAgB,KAAK,SAAS,GAAGC,4BAAoB,GAAGC,2BAAmB;AAExF,IAAA,OAAOC,sBAAC,CAAA,aAAA,CAAA,IAAI,EAAKC,cAAA,CAAA,EAAA,EAAA,SAAS,EAAI;AAClC;;;;"}
1
+ {"version":3,"file":"Component.js","sources":["src/Component.tsx"],"sourcesContent":["import React, { type FC } from 'react';\n\nimport { type CalendarInputProps } from '@alfalab/core-components-calendar-input';\n\nimport { CalendarRangePopover } from './views/popover';\nimport { CalendarRangeStatic } from './views/static';\n\nexport type CalendarRangeProps = {\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Значение инпута (используется и для календаря)\n */\n valueFrom?: string;\n\n /**\n * Значение инпута (используется и для календаря)\n */\n valueTo?: string;\n\n /**\n * Месяц в календаре по умолчанию\n */\n defaultMonth?: number;\n\n /**\n * Минимальная дата, доступная для выбора (timestamp)\n */\n minDate?: number;\n\n /**\n * Максимальная дата, доступная для выбора (timestamp)\n */\n maxDate?: number;\n\n /**\n * Обработчик изменения даты от\n */\n onDateFromChange?: (payload: { date: number | null; value: string }) => void;\n\n /**\n * Обработчик изменения даты до\n */\n onDateToChange?: (payload: { date: number | null; value: string }) => void;\n\n /**\n * Обработчик изменения\n */\n onChange?: (payload: {\n dateFrom: number | null;\n valueFrom: string;\n dateTo: number | null;\n valueTo: string;\n }) => void;\n\n /**\n * Коллбэк, срабатывающий при возникновении ошибок валидации дат внутри компонента.\n */\n onError?: (hasError: boolean) => void;\n\n /**\n * Список событий\n */\n events?: Array<Date | number>;\n\n /**\n * Список выходных\n */\n offDays?: Array<Date | number>;\n\n /**\n * Пропсы для инпута даты от\n */\n inputFromProps?: CalendarInputProps;\n\n /**\n * Пропсы для инпута даты до\n */\n inputToProps?: CalendarInputProps;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Определяет, как рендерить календарь — в поповере или снизу инпута\n */\n calendarPosition?: 'static' | 'popover';\n\n /**\n * calendarPosition = static\n * Отображать начальный месяц слева или справа (влияет только на начальный рендер)\n */\n defaultMonthPosition?: 'left' | 'right';\n\n /**\n * Возвращать невалидную дату для кастомной валидации\n */\n returnInvalidDates?: boolean;\n\n /**\n * Дополнительный класс для контейнера календаря\n */\n calendarContainerClassName?: string;\n\n /**\n * Автоподмена дат\n */\n autoSwap?: boolean;\n};\n\nexport const CalendarRange: FC<CalendarRangeProps> = ({\n calendarPosition = 'static',\n ...restProps\n}) => {\n const View = calendarPosition === 'popover' ? CalendarRangePopover : CalendarRangeStatic;\n\n return <View {...restProps} />;\n};\n"],"names":["__rest","CalendarRangePopover","CalendarRangeStatic","React","__assign"],"mappings":";;;;;;;;;;;;;AAmHO,IAAM,aAAa,GAA2B,UAAC,EAGrD,EAAA;IAFG,IAAA,EAAA,GAAA,EAAA,CAAA,gBAA2B,EAA3B,gBAAgB,GAAG,EAAA,KAAA,MAAA,GAAA,QAAQ,KAAA,EACxB,SAAS,GAFsCA,YAAA,CAAA,EAAA,EAAA,CAAA,kBAAA,CAGrD,CADe;AAEZ,IAAA,IAAM,IAAI,GAAG,gBAAgB,KAAK,SAAS,GAAGC,4BAAoB,GAAGC,2BAAmB;AAExF,IAAA,OAAOC,sBAAC,CAAA,aAAA,CAAA,IAAI,EAAKC,cAAA,CAAA,EAAA,EAAA,SAAS,EAAI;AAClC;;;;"}
@@ -14,33 +14,33 @@
14
14
  --size-l-height: 64px;
15
15
  --size-xl-height: 72px;
16
16
  }
17
- .calendar-range__component_1sn79 {
17
+ .calendar-range__component_155ok {
18
18
  display: flex;
19
19
  align-items: center;
20
20
  justify-content: center;
21
- width: 16px;
21
+ min-width: 16px;
22
22
  margin: var(--gap-0) var(--gap-8);
23
23
  }
24
- .calendar-range__component_1sn79:after {
24
+ .calendar-range__component_155ok:after {
25
25
  content: '';
26
26
  display: block;
27
27
  width: 100%;
28
28
  height: 1px;
29
29
  background-color: var(--color-light-neutral-translucent-1300);
30
30
  }
31
- .calendar-range__outer_1sn79 {
31
+ .calendar-range__outer_155ok {
32
32
  position: relative;
33
33
  top: var(--gap-24);
34
34
  }
35
- .calendar-range__size48_1sn79 {
35
+ .calendar-range__size48_155ok {
36
36
  height: var(--size-s-height);
37
37
  }
38
- .calendar-range__size56_1sn79 {
38
+ .calendar-range__size56_155ok {
39
39
  height: var(--size-m-height);
40
40
  }
41
- .calendar-range__size64_1sn79 {
41
+ .calendar-range__size64_155ok {
42
42
  height: var(--size-l-height);
43
43
  }
44
- .calendar-range__size72_1sn79 {
44
+ .calendar-range__size72_155ok {
45
45
  height: var(--size-xl-height);
46
46
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"component":"calendar-range__component_1sn79","outer":"calendar-range__outer_1sn79","size48":"calendar-range__size48_1sn79","size56":"calendar-range__size56_1sn79","size64":"calendar-range__size64_1sn79","size72":"calendar-range__size72_1sn79"};
5
+ var styles = {"component":"calendar-range__component_155ok","outer":"calendar-range__outer_155ok","size48":"calendar-range__size48_155ok","size56":"calendar-range__size56_155ok","size64":"calendar-range__size64_155ok","size72":"calendar-range__size72_155ok"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.module.css.js","sources":["../../src/components/divider/index.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/index.css';\n@import '../../../../calendar/src/vars.css';\n\n.component {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n margin: var(--gap-0) var(--gap-8);\n\n &:after {\n content: '';\n display: block;\n width: 100%;\n height: 1px;\n background-color: var(--color-light-neutral-translucent-1300);\n }\n}\n\n.outer {\n position: relative;\n\n /* FormControl .above height + margin-bottom */\n top: var(--gap-24);\n}\n\n.size48 {\n height: var(--size-s-height);\n}\n\n.size56 {\n height: var(--size-m-height);\n}\n\n.size64 {\n height: var(--size-l-height);\n}\n\n.size72 {\n height: var(--size-xl-height);\n}\n"],"names":[],"mappings":";;;;AAEgB,aAAe,CAAC,WAAW,CAAC,iCAAiC,CAAC,OAAO,CAAC,6BAA6B,CAAC,QAAQ,CAAC,8BAA8B,CAAC,QAAQ,CAAC,8BAA8B,CAAC,QAAQ,CAAC,8BAA8B,CAAC,QAAQ,CAAC,8BAA8B,CAAC;;;;"}
1
+ {"version":3,"file":"index.module.css.js","sources":["../../src/components/divider/index.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/index.css';\n@import '../../../../calendar/src/vars.css';\n\n.component {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 16px;\n margin: var(--gap-0) var(--gap-8);\n\n &:after {\n content: '';\n display: block;\n width: 100%;\n height: 1px;\n background-color: var(--color-light-neutral-translucent-1300);\n }\n}\n\n.outer {\n position: relative;\n\n /* FormControl .above height + margin-bottom */\n top: var(--gap-24);\n}\n\n.size48 {\n height: var(--size-s-height);\n}\n\n.size56 {\n height: var(--size-m-height);\n}\n\n.size64 {\n height: var(--size-l-height);\n}\n\n.size72 {\n height: var(--size-xl-height);\n}\n"],"names":[],"mappings":";;;;AAEgB,aAAe,CAAC,WAAW,CAAC,iCAAiC,CAAC,OAAO,CAAC,6BAA6B,CAAC,QAAQ,CAAC,8BAA8B,CAAC,QAAQ,CAAC,8BAA8B,CAAC,QAAQ,CAAC,8BAA8B,CAAC,QAAQ,CAAC,8BAA8B,CAAC;;;;"}
@@ -89,5 +89,9 @@ export type CalendarRangeProps = {
89
89
  * Дополнительный класс для контейнера календаря
90
90
  */
91
91
  calendarContainerClassName?: string;
92
+ /**
93
+ * Автоподмена дат
94
+ */
95
+ autoSwap?: boolean;
92
96
  };
93
97
  export declare const CalendarRange: FC<CalendarRangeProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../src/Component.tsx"],"sourcesContent":["import React, { type FC } from 'react';\n\nimport { type CalendarInputProps } from '@alfalab/core-components-calendar-input';\n\nimport { CalendarRangePopover } from './views/popover';\nimport { CalendarRangeStatic } from './views/static';\n\nexport type CalendarRangeProps = {\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Значение инпута (используется и для календаря)\n */\n valueFrom?: string;\n\n /**\n * Значение инпута (используется и для календаря)\n */\n valueTo?: string;\n\n /**\n * Месяц в календаре по умолчанию\n */\n defaultMonth?: number;\n\n /**\n * Минимальная дата, доступная для выбора (timestamp)\n */\n minDate?: number;\n\n /**\n * Максимальная дата, доступная для выбора (timestamp)\n */\n maxDate?: number;\n\n /**\n * Обработчик изменения даты от\n */\n onDateFromChange?: (payload: { date: number | null; value: string }) => void;\n\n /**\n * Обработчик изменения даты до\n */\n onDateToChange?: (payload: { date: number | null; value: string }) => void;\n\n /**\n * Обработчик изменения\n */\n onChange?: (payload: {\n dateFrom: number | null;\n valueFrom: string;\n dateTo: number | null;\n valueTo: string;\n }) => void;\n\n /**\n * Коллбэк, срабатывающий при возникновении ошибок валидации дат внутри компонента.\n */\n onError?: (hasError: boolean) => void;\n\n /**\n * Список событий\n */\n events?: Array<Date | number>;\n\n /**\n * Список выходных\n */\n offDays?: Array<Date | number>;\n\n /**\n * Пропсы для инпута даты от\n */\n inputFromProps?: CalendarInputProps;\n\n /**\n * Пропсы для инпута даты до\n */\n inputToProps?: CalendarInputProps;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Определяет, как рендерить календарь — в поповере или снизу инпута\n */\n calendarPosition?: 'static' | 'popover';\n\n /**\n * calendarPosition = static\n * Отображать начальный месяц слева или справа (влияет только на начальный рендер)\n */\n defaultMonthPosition?: 'left' | 'right';\n\n /**\n * Возвращать невалидную дату для кастомной валидации\n */\n returnInvalidDates?: boolean;\n\n /**\n * Дополнительный класс для контейнера календаря\n */\n calendarContainerClassName?: string;\n};\n\nexport const CalendarRange: FC<CalendarRangeProps> = ({\n calendarPosition = 'static',\n ...restProps\n}) => {\n const View = calendarPosition === 'popover' ? CalendarRangePopover : CalendarRangeStatic;\n\n return <View {...restProps} />;\n};\n"],"names":["__rest","CalendarRangePopover","CalendarRangeStatic","React","__assign"],"mappings":";;;;;;;;;;;;;AA8GO,IAAM,aAAa,GAA2B,UAAC,EAGrD,EAAA;IAFG,IAAA,EAAA,GAAA,EAAA,CAAA,gBAA2B,EAA3B,gBAAgB,GAAG,EAAA,KAAA,MAAA,GAAA,QAAQ,KAAA,EACxB,SAAS,GAFsCA,YAAA,CAAA,EAAA,EAAA,CAAA,kBAAA,CAGrD,CADe;AAEZ,IAAA,IAAM,IAAI,GAAG,gBAAgB,KAAK,SAAS,GAAGC,4BAAoB,GAAGC,2BAAmB;AAExF,IAAA,OAAOC,sBAAC,CAAA,aAAA,CAAA,IAAI,EAAKC,cAAA,CAAA,EAAA,EAAA,SAAS,EAAI;AAClC;;;;"}
1
+ {"version":3,"file":"Component.js","sources":["../src/Component.tsx"],"sourcesContent":["import React, { type FC } from 'react';\n\nimport { type CalendarInputProps } from '@alfalab/core-components-calendar-input';\n\nimport { CalendarRangePopover } from './views/popover';\nimport { CalendarRangeStatic } from './views/static';\n\nexport type CalendarRangeProps = {\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Значение инпута (используется и для календаря)\n */\n valueFrom?: string;\n\n /**\n * Значение инпута (используется и для календаря)\n */\n valueTo?: string;\n\n /**\n * Месяц в календаре по умолчанию\n */\n defaultMonth?: number;\n\n /**\n * Минимальная дата, доступная для выбора (timestamp)\n */\n minDate?: number;\n\n /**\n * Максимальная дата, доступная для выбора (timestamp)\n */\n maxDate?: number;\n\n /**\n * Обработчик изменения даты от\n */\n onDateFromChange?: (payload: { date: number | null; value: string }) => void;\n\n /**\n * Обработчик изменения даты до\n */\n onDateToChange?: (payload: { date: number | null; value: string }) => void;\n\n /**\n * Обработчик изменения\n */\n onChange?: (payload: {\n dateFrom: number | null;\n valueFrom: string;\n dateTo: number | null;\n valueTo: string;\n }) => void;\n\n /**\n * Коллбэк, срабатывающий при возникновении ошибок валидации дат внутри компонента.\n */\n onError?: (hasError: boolean) => void;\n\n /**\n * Список событий\n */\n events?: Array<Date | number>;\n\n /**\n * Список выходных\n */\n offDays?: Array<Date | number>;\n\n /**\n * Пропсы для инпута даты от\n */\n inputFromProps?: CalendarInputProps;\n\n /**\n * Пропсы для инпута даты до\n */\n inputToProps?: CalendarInputProps;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Определяет, как рендерить календарь — в поповере или снизу инпута\n */\n calendarPosition?: 'static' | 'popover';\n\n /**\n * calendarPosition = static\n * Отображать начальный месяц слева или справа (влияет только на начальный рендер)\n */\n defaultMonthPosition?: 'left' | 'right';\n\n /**\n * Возвращать невалидную дату для кастомной валидации\n */\n returnInvalidDates?: boolean;\n\n /**\n * Дополнительный класс для контейнера календаря\n */\n calendarContainerClassName?: string;\n\n /**\n * Автоподмена дат\n */\n autoSwap?: boolean;\n};\n\nexport const CalendarRange: FC<CalendarRangeProps> = ({\n calendarPosition = 'static',\n ...restProps\n}) => {\n const View = calendarPosition === 'popover' ? CalendarRangePopover : CalendarRangeStatic;\n\n return <View {...restProps} />;\n};\n"],"names":["__rest","CalendarRangePopover","CalendarRangeStatic","React","__assign"],"mappings":";;;;;;;;;;;;;AAmHO,IAAM,aAAa,GAA2B,UAAC,EAGrD,EAAA;IAFG,IAAA,EAAA,GAAA,EAAA,CAAA,gBAA2B,EAA3B,gBAAgB,GAAG,EAAA,KAAA,MAAA,GAAA,QAAQ,KAAA,EACxB,SAAS,GAFsCA,YAAA,CAAA,EAAA,EAAA,CAAA,kBAAA,CAGrD,CADe;AAEZ,IAAA,IAAM,IAAI,GAAG,gBAAgB,KAAK,SAAS,GAAGC,4BAAoB,GAAGC,2BAAmB;AAExF,IAAA,OAAOC,sBAAC,CAAA,aAAA,CAAA,IAAI,EAAKC,cAAA,CAAA,EAAA,EAAA,SAAS,EAAI;AAClC;;;;"}
@@ -18,7 +18,7 @@
18
18
  display: flex;
19
19
  align-items: center;
20
20
  justify-content: center;
21
- width: 16px;
21
+ min-width: 16px;
22
22
  margin: var(--gap-0) var(--gap-8);
23
23
  }
24
24
  .component:after {
package/cssm/hooks.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { type RefObject } from 'react';
1
2
  export declare function usePopoverViewMonthes({ dateFrom, dateTo, defaultMonth, resetKey, }: {
2
3
  defaultMonth: number;
3
4
  dateFrom: number | null;
@@ -25,3 +26,33 @@ export declare function useSelectionProps(from?: number, to?: number, highlighte
25
26
  selectedFrom: number | undefined;
26
27
  selectedTo: number | undefined;
27
28
  };
29
+ interface UseStaticRangeAutoSwapParams {
30
+ autoSwap: boolean;
31
+ setInputFromValue: React.Dispatch<React.SetStateAction<string>>;
32
+ setInputToValue: React.Dispatch<React.SetStateAction<string>>;
33
+ toggleCorrectionFromRef: RefObject<CorrectionToggleRef>;
34
+ toggleCorrectionToRef: RefObject<CorrectionToggleRef>;
35
+ inputFromRef: RefObject<HTMLInputElement>;
36
+ inputToRef: RefObject<HTMLInputElement>;
37
+ }
38
+ type CorrectionToggleRef = {
39
+ handleCorrection: () => void;
40
+ };
41
+ export declare const useStaticRangeAutoSwap: ({ autoSwap, setInputFromValue, setInputToValue, toggleCorrectionFromRef, toggleCorrectionToRef, inputFromRef, inputToRef, }: UseStaticRangeAutoSwapParams) => {
42
+ swapDates: (newValue: string, inputFromValue: string, inputToValue: string) => void;
43
+ isInternalUpdate: import("react").MutableRefObject<boolean>;
44
+ };
45
+ interface UseInputValidationParams {
46
+ inputFromValue: string;
47
+ inputToValue: string;
48
+ minDate: number;
49
+ maxDate: number;
50
+ offDays: Array<number | Date>;
51
+ }
52
+ interface InputValidationResult {
53
+ inputFromError: boolean;
54
+ inputToError: boolean;
55
+ rangeError: boolean;
56
+ }
57
+ export declare const useInputValidation: ({ inputFromValue, inputToValue, minDate, maxDate, offDays, }: UseInputValidationParams) => InputValidationResult;
58
+ export {};
package/cssm/hooks.js CHANGED
@@ -4,6 +4,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
6
  var dateFns = require('date-fns');
7
+ var shared = require('@alfalab/core-components-calendar-input/cssm/shared');
8
+ var cssm = require('@alfalab/core-components-date-input/cssm');
7
9
 
8
10
  function usePopoverViewMonthes(_a) {
9
11
  var dateFrom = _a.dateFrom, dateTo = _a.dateTo, defaultMonth = _a.defaultMonth, resetKey = _a.resetKey;
@@ -133,8 +135,90 @@ function useSelectionProps(from, to, highlighted) {
133
135
  };
134
136
  }, [from, highlighted, to]);
135
137
  }
138
+ var useStaticRangeAutoSwap = function (_a) {
139
+ var autoSwap = _a.autoSwap, setInputFromValue = _a.setInputFromValue, setInputToValue = _a.setInputToValue, toggleCorrectionFromRef = _a.toggleCorrectionFromRef, toggleCorrectionToRef = _a.toggleCorrectionToRef, inputFromRef = _a.inputFromRef, inputToRef = _a.inputToRef;
140
+ var isInternalUpdate = React.useRef(false);
141
+ var swapDates = function (newValue, inputFromValue, inputToValue) {
142
+ var _a, _b, _c, _d;
143
+ if (!autoSwap)
144
+ return;
145
+ if (cssm.isCompleteDateInput(newValue) &&
146
+ cssm.isCompleteDateInput(inputToValue) &&
147
+ shared.parseDateString(newValue).getTime() > shared.parseDateString(inputToValue).getTime()) {
148
+ if (inputFromValue !== inputToValue) {
149
+ isInternalUpdate.current = true;
150
+ setInputFromValue(inputToValue);
151
+ setInputToValue(newValue);
152
+ (_a = toggleCorrectionFromRef.current) === null || _a === void 0 ? void 0 : _a.handleCorrection();
153
+ (_b = toggleCorrectionToRef.current) === null || _b === void 0 ? void 0 : _b.handleCorrection();
154
+ setTimeout(function () {
155
+ var _a;
156
+ (_a = inputToRef.current) === null || _a === void 0 ? void 0 : _a.focus();
157
+ }, 0);
158
+ }
159
+ }
160
+ if (cssm.isCompleteDateInput(newValue) &&
161
+ cssm.isCompleteDateInput(inputFromValue) &&
162
+ shared.parseDateString(newValue).getTime() < shared.parseDateString(inputFromValue).getTime()) {
163
+ if (inputToValue !== inputFromValue) {
164
+ isInternalUpdate.current = true;
165
+ setInputToValue(inputFromValue);
166
+ setInputFromValue(newValue);
167
+ (_c = toggleCorrectionFromRef.current) === null || _c === void 0 ? void 0 : _c.handleCorrection();
168
+ (_d = toggleCorrectionToRef.current) === null || _d === void 0 ? void 0 : _d.handleCorrection();
169
+ setTimeout(function () {
170
+ var _a;
171
+ (_a = inputFromRef.current) === null || _a === void 0 ? void 0 : _a.focus();
172
+ }, 0);
173
+ }
174
+ }
175
+ };
176
+ return { swapDates: swapDates, isInternalUpdate: isInternalUpdate };
177
+ };
178
+ var useInputValidation = function (_a) {
179
+ var inputFromValue = _a.inputFromValue, inputToValue = _a.inputToValue, minDate = _a.minDate, maxDate = _a.maxDate, offDays = _a.offDays;
180
+ var _b = React.useState({
181
+ inputFromError: false,
182
+ inputToError: false,
183
+ rangeError: false,
184
+ }), validationResult = _b[0], setValidationResult = _b[1];
185
+ React.useEffect(function () {
186
+ var isInputFromValueComplete = cssm.isCompleteDateInput(inputFromValue);
187
+ var isInputToValueComplete = cssm.isCompleteDateInput(inputToValue);
188
+ var individualInputFromError = false;
189
+ var individualInputToError = false;
190
+ if (isInputFromValueComplete) {
191
+ individualInputFromError = !shared.isValidInputValue(inputFromValue, minDate, maxDate, offDays);
192
+ }
193
+ if (isInputToValueComplete) {
194
+ individualInputToError = !shared.isValidInputValue(inputToValue, minDate, maxDate, offDays);
195
+ }
196
+ var rangeError = false;
197
+ var parsedDateFrom = isInputFromValueComplete ? shared.parseDateString(inputFromValue) : null;
198
+ var parsedDateTo = isInputToValueComplete ? shared.parseDateString(inputToValue) : null;
199
+ var isParsedDateFromValid = parsedDateFrom &&
200
+ !Number.isNaN(parsedDateFrom.getTime()) &&
201
+ shared.isValidInputValue(inputFromValue, minDate, maxDate, offDays);
202
+ var isParsedDateToValid = parsedDateTo &&
203
+ !Number.isNaN(parsedDateTo.getTime()) &&
204
+ shared.isValidInputValue(inputToValue, minDate, maxDate, offDays);
205
+ if (isParsedDateFromValid &&
206
+ isParsedDateToValid &&
207
+ parsedDateFrom.getTime() > parsedDateTo.getTime()) {
208
+ rangeError = true;
209
+ }
210
+ setValidationResult({
211
+ inputFromError: individualInputFromError || rangeError,
212
+ inputToError: individualInputToError || rangeError,
213
+ rangeError: rangeError,
214
+ });
215
+ }, [inputFromValue, inputToValue, minDate, maxDate, offDays]);
216
+ return validationResult;
217
+ };
136
218
 
219
+ exports.useInputValidation = useInputValidation;
137
220
  exports.usePopoverViewMonthes = usePopoverViewMonthes;
138
221
  exports.useSelectionProps = useSelectionProps;
222
+ exports.useStaticRangeAutoSwap = useStaticRangeAutoSwap;
139
223
  exports.useStaticViewMonthes = useStaticViewMonthes;
140
224
  //# sourceMappingURL=hooks.js.map
package/cssm/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sources":["../src/hooks.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { addMonths, isEqual, max, min, startOfMonth, subMonths } from 'date-fns';\n\nexport function usePopoverViewMonthes({\n dateFrom,\n dateTo,\n defaultMonth,\n resetKey,\n}: {\n defaultMonth: number;\n dateFrom: number | null;\n dateTo: number | null;\n resetKey?: number;\n}) {\n const [monthFrom, setMonthFrom] = useState<number>();\n const [monthTo, setMonthTo] = useState<number>();\n\n const handleMonthFromChange = useCallback(\n (newMonthFrom: number) => {\n setMonthFrom(newMonthFrom);\n\n if (!dateTo) {\n setMonthTo(newMonthFrom);\n }\n },\n [dateTo],\n );\n\n const handleMonthToChange = useCallback(\n (newMonthTo: number) => {\n setMonthTo(newMonthTo);\n\n if (!dateFrom) {\n setMonthFrom(newMonthTo);\n }\n },\n [dateFrom],\n );\n\n useEffect(() => {\n setMonthFrom(dateFrom ? startOfMonth(dateFrom).getTime() : defaultMonth);\n }, [defaultMonth, dateFrom, resetKey]);\n\n useEffect(() => {\n setMonthTo(dateTo ? startOfMonth(dateTo).getTime() : monthFrom);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dateTo, resetKey]);\n\n return {\n monthFrom,\n monthTo,\n handleMonthFromChange,\n handleMonthToChange,\n };\n}\n\nexport function useStaticViewMonthes({\n selectedFrom,\n selectedTo,\n defaultMonth,\n defaultMonthPosition,\n}: {\n selectedFrom?: number;\n selectedTo?: number;\n defaultMonth: number;\n defaultMonthPosition?: 'left' | 'right';\n}) {\n /**\n * Если указана начальная дата — левый месяц равен ей, иначе используется дата конца.\n * Если обе даты не указаны, то используется дефолтный месяц\n */\n let initialMonthFrom = useMemo(\n () => startOfMonth(selectedFrom || selectedTo || defaultMonth).getTime(),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n /**\n * Правый месяц должен быть как минимум на 1 месяц больше левого\n */\n let initialMonthTo = useMemo(\n () =>\n max([\n selectedTo ? startOfMonth(selectedTo) : 0,\n addMonths(initialMonthFrom, 1),\n ]).getTime(),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n if (defaultMonthPosition === 'right') {\n initialMonthTo = initialMonthFrom;\n initialMonthFrom = subMonths(initialMonthFrom, 1).getTime();\n }\n\n const [monthFrom, setMonthFrom] = useState<number>(initialMonthFrom);\n const [monthTo, setMonthTo] = useState<number>(initialMonthTo);\n\n const handleMonthFromChange = useCallback(\n (newMonthFrom: number) => {\n setMonthFrom(newMonthFrom);\n\n if (monthTo && isEqual(newMonthFrom, monthTo)) {\n const nextMonth = addMonths(newMonthFrom, 1).getTime();\n\n setMonthTo(nextMonth);\n }\n },\n [monthTo],\n );\n\n const handleMonthToChange = useCallback(\n (newMonthTo: number) => {\n setMonthTo(newMonthTo);\n\n if (monthFrom && isEqual(newMonthTo, monthFrom)) {\n const prevMonth = subMonths(newMonthTo, 1).getTime();\n\n setMonthFrom(prevMonth);\n }\n },\n [monthFrom],\n );\n\n // eslint-disable-next-line complexity\n useEffect(() => {\n const selectedFromMonth = selectedFrom ? startOfMonth(selectedFrom).getTime() : undefined;\n const selectedToMonth = selectedTo ? startOfMonth(selectedTo).getTime() : undefined;\n\n // Проверяем, показываются ли выбранные месяцы в левой или правой части компонента\n const fromMonthOnLeft = selectedFromMonth && selectedFromMonth === monthFrom;\n const fromMonthOnRight = selectedFromMonth && selectedFromMonth === monthTo;\n const toMonthOnRight = selectedToMonth && selectedToMonth === monthTo;\n const toMonthOnLeft = selectedToMonth && selectedToMonth === monthFrom;\n const fromMonthOnScreen = fromMonthOnLeft || fromMonthOnRight;\n const toMonthOnScreen = toMonthOnLeft || toMonthOnRight;\n\n if (fromMonthOnLeft && toMonthOnLeft) {\n setMonthTo(max([addMonths(selectedFromMonth, 1), monthTo]).getTime());\n\n return;\n }\n\n if (fromMonthOnRight && toMonthOnRight) {\n setMonthFrom(min([subMonths(selectedToMonth, 1), monthFrom]).getTime());\n\n return;\n }\n\n if (selectedFromMonth && selectedToMonth) {\n setMonthFrom(selectedFromMonth);\n setMonthTo(max([addMonths(selectedFromMonth, 1), selectedToMonth]).getTime());\n\n return;\n }\n\n if (selectedFromMonth && !selectedToMonth && !fromMonthOnScreen) {\n setMonthFrom(selectedFromMonth);\n setMonthTo(max([addMonths(selectedFromMonth, 1), monthTo]).getTime());\n }\n\n if (selectedToMonth && !selectedFromMonth && !toMonthOnScreen) {\n setMonthTo(selectedToMonth);\n setMonthFrom(min([subMonths(selectedToMonth, 1), monthFrom]).getTime());\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedFrom, selectedTo]);\n\n return {\n monthFrom,\n monthTo,\n handleMonthFromChange,\n handleMonthToChange,\n };\n}\n\nexport function useSelectionProps(from?: number, to?: number, highlighted?: number) {\n return useMemo(() => {\n if (from && to) {\n return {\n rangeComplete: true,\n selectedFrom: min([from, to]).getTime(),\n selectedTo: max([from, to]).getTime(),\n };\n }\n\n const dates = [from, to, highlighted].filter((date) => date !== undefined);\n\n return {\n rangeComplete: false,\n selectedFrom: from || dates.length === 2 ? min(dates).getTime() : undefined,\n selectedTo: to || dates.length === 2 ? max(dates).getTime() : undefined,\n };\n }, [from, highlighted, to]);\n}\n"],"names":["useState","useCallback","useEffect","startOfMonth","useMemo","max","addMonths","subMonths","isEqual","min"],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sources":["../src/hooks.ts"],"sourcesContent":["import { type RefObject, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { addMonths, isEqual, max, min, startOfMonth, subMonths } from 'date-fns';\n\nimport { isValidInputValue, parseDateString } from '@alfalab/core-components-calendar-input/shared';\nimport { isCompleteDateInput } from '@alfalab/core-components-date-input';\n\nexport function usePopoverViewMonthes({\n dateFrom,\n dateTo,\n defaultMonth,\n resetKey,\n}: {\n defaultMonth: number;\n dateFrom: number | null;\n dateTo: number | null;\n resetKey?: number;\n}) {\n const [monthFrom, setMonthFrom] = useState<number>();\n const [monthTo, setMonthTo] = useState<number>();\n\n const handleMonthFromChange = useCallback(\n (newMonthFrom: number) => {\n setMonthFrom(newMonthFrom);\n\n if (!dateTo) {\n setMonthTo(newMonthFrom);\n }\n },\n [dateTo],\n );\n\n const handleMonthToChange = useCallback(\n (newMonthTo: number) => {\n setMonthTo(newMonthTo);\n\n if (!dateFrom) {\n setMonthFrom(newMonthTo);\n }\n },\n [dateFrom],\n );\n\n useEffect(() => {\n setMonthFrom(dateFrom ? startOfMonth(dateFrom).getTime() : defaultMonth);\n }, [defaultMonth, dateFrom, resetKey]);\n\n useEffect(() => {\n setMonthTo(dateTo ? startOfMonth(dateTo).getTime() : monthFrom);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dateTo, resetKey]);\n\n return {\n monthFrom,\n monthTo,\n handleMonthFromChange,\n handleMonthToChange,\n };\n}\n\nexport function useStaticViewMonthes({\n selectedFrom,\n selectedTo,\n defaultMonth,\n defaultMonthPosition,\n}: {\n selectedFrom?: number;\n selectedTo?: number;\n defaultMonth: number;\n defaultMonthPosition?: 'left' | 'right';\n}) {\n /**\n * Если указана начальная дата — левый месяц равен ей, иначе используется дата конца.\n * Если обе даты не указаны, то используется дефолтный месяц\n */\n let initialMonthFrom = useMemo(\n () => startOfMonth(selectedFrom || selectedTo || defaultMonth).getTime(),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n /**\n * Правый месяц должен быть как минимум на 1 месяц больше левого\n */\n let initialMonthTo = useMemo(\n () =>\n max([\n selectedTo ? startOfMonth(selectedTo) : 0,\n addMonths(initialMonthFrom, 1),\n ]).getTime(),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n if (defaultMonthPosition === 'right') {\n initialMonthTo = initialMonthFrom;\n initialMonthFrom = subMonths(initialMonthFrom, 1).getTime();\n }\n\n const [monthFrom, setMonthFrom] = useState<number>(initialMonthFrom);\n const [monthTo, setMonthTo] = useState<number>(initialMonthTo);\n\n const handleMonthFromChange = useCallback(\n (newMonthFrom: number) => {\n setMonthFrom(newMonthFrom);\n\n if (monthTo && isEqual(newMonthFrom, monthTo)) {\n const nextMonth = addMonths(newMonthFrom, 1).getTime();\n\n setMonthTo(nextMonth);\n }\n },\n [monthTo],\n );\n\n const handleMonthToChange = useCallback(\n (newMonthTo: number) => {\n setMonthTo(newMonthTo);\n\n if (monthFrom && isEqual(newMonthTo, monthFrom)) {\n const prevMonth = subMonths(newMonthTo, 1).getTime();\n\n setMonthFrom(prevMonth);\n }\n },\n [monthFrom],\n );\n\n // eslint-disable-next-line complexity\n useEffect(() => {\n const selectedFromMonth = selectedFrom ? startOfMonth(selectedFrom).getTime() : undefined;\n const selectedToMonth = selectedTo ? startOfMonth(selectedTo).getTime() : undefined;\n\n // Проверяем, показываются ли выбранные месяцы в левой или правой части компонента\n const fromMonthOnLeft = selectedFromMonth && selectedFromMonth === monthFrom;\n const fromMonthOnRight = selectedFromMonth && selectedFromMonth === monthTo;\n const toMonthOnRight = selectedToMonth && selectedToMonth === monthTo;\n const toMonthOnLeft = selectedToMonth && selectedToMonth === monthFrom;\n const fromMonthOnScreen = fromMonthOnLeft || fromMonthOnRight;\n const toMonthOnScreen = toMonthOnLeft || toMonthOnRight;\n\n if (fromMonthOnLeft && toMonthOnLeft) {\n setMonthTo(max([addMonths(selectedFromMonth, 1), monthTo]).getTime());\n\n return;\n }\n\n if (fromMonthOnRight && toMonthOnRight) {\n setMonthFrom(min([subMonths(selectedToMonth, 1), monthFrom]).getTime());\n\n return;\n }\n\n if (selectedFromMonth && selectedToMonth) {\n setMonthFrom(selectedFromMonth);\n setMonthTo(max([addMonths(selectedFromMonth, 1), selectedToMonth]).getTime());\n\n return;\n }\n\n if (selectedFromMonth && !selectedToMonth && !fromMonthOnScreen) {\n setMonthFrom(selectedFromMonth);\n setMonthTo(max([addMonths(selectedFromMonth, 1), monthTo]).getTime());\n }\n\n if (selectedToMonth && !selectedFromMonth && !toMonthOnScreen) {\n setMonthTo(selectedToMonth);\n setMonthFrom(min([subMonths(selectedToMonth, 1), monthFrom]).getTime());\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedFrom, selectedTo]);\n\n return {\n monthFrom,\n monthTo,\n handleMonthFromChange,\n handleMonthToChange,\n };\n}\n\nexport function useSelectionProps(from?: number, to?: number, highlighted?: number) {\n return useMemo(() => {\n if (from && to) {\n return {\n rangeComplete: true,\n selectedFrom: min([from, to]).getTime(),\n selectedTo: max([from, to]).getTime(),\n };\n }\n\n const dates = [from, to, highlighted].filter((date) => date !== undefined);\n\n return {\n rangeComplete: false,\n selectedFrom: from || dates.length === 2 ? min(dates).getTime() : undefined,\n selectedTo: to || dates.length === 2 ? max(dates).getTime() : undefined,\n };\n }, [from, highlighted, to]);\n}\n\ninterface UseStaticRangeAutoSwapParams {\n autoSwap: boolean;\n setInputFromValue: React.Dispatch<React.SetStateAction<string>>;\n setInputToValue: React.Dispatch<React.SetStateAction<string>>;\n toggleCorrectionFromRef: RefObject<CorrectionToggleRef>;\n toggleCorrectionToRef: RefObject<CorrectionToggleRef>;\n inputFromRef: RefObject<HTMLInputElement>;\n inputToRef: RefObject<HTMLInputElement>;\n}\n\ntype CorrectionToggleRef = { handleCorrection: () => void };\n\nexport const useStaticRangeAutoSwap = ({\n autoSwap,\n setInputFromValue,\n setInputToValue,\n toggleCorrectionFromRef,\n toggleCorrectionToRef,\n inputFromRef,\n inputToRef,\n}: UseStaticRangeAutoSwapParams) => {\n const isInternalUpdate = useRef(false);\n\n const swapDates = (newValue: string, inputFromValue: string, inputToValue: string) => {\n if (!autoSwap) return;\n\n if (\n isCompleteDateInput(newValue) &&\n isCompleteDateInput(inputToValue) &&\n parseDateString(newValue).getTime() > parseDateString(inputToValue).getTime()\n ) {\n if (inputFromValue !== inputToValue) {\n isInternalUpdate.current = true;\n setInputFromValue(inputToValue);\n setInputToValue(newValue);\n\n toggleCorrectionFromRef.current?.handleCorrection();\n toggleCorrectionToRef.current?.handleCorrection();\n\n setTimeout(() => {\n inputToRef.current?.focus();\n }, 0);\n }\n }\n if (\n isCompleteDateInput(newValue) &&\n isCompleteDateInput(inputFromValue) &&\n parseDateString(newValue).getTime() < parseDateString(inputFromValue).getTime()\n ) {\n if (inputToValue !== inputFromValue) {\n isInternalUpdate.current = true;\n setInputToValue(inputFromValue);\n setInputFromValue(newValue);\n\n toggleCorrectionFromRef.current?.handleCorrection();\n toggleCorrectionToRef.current?.handleCorrection();\n\n setTimeout(() => {\n inputFromRef.current?.focus();\n }, 0);\n }\n }\n };\n\n return { swapDates, isInternalUpdate };\n};\n\ninterface UseInputValidationParams {\n inputFromValue: string;\n inputToValue: string;\n minDate: number;\n maxDate: number;\n offDays: Array<number | Date>;\n}\n\ninterface InputValidationResult {\n inputFromError: boolean;\n inputToError: boolean;\n rangeError: boolean;\n}\n\nexport const useInputValidation = ({\n inputFromValue,\n inputToValue,\n minDate,\n maxDate,\n offDays,\n}: UseInputValidationParams): InputValidationResult => {\n const [validationResult, setValidationResult] = useState<InputValidationResult>({\n inputFromError: false,\n inputToError: false,\n rangeError: false,\n });\n\n useEffect(() => {\n const isInputFromValueComplete = isCompleteDateInput(inputFromValue);\n const isInputToValueComplete = isCompleteDateInput(inputToValue);\n\n let individualInputFromError = false;\n let individualInputToError = false;\n\n if (isInputFromValueComplete) {\n individualInputFromError = !isValidInputValue(\n inputFromValue,\n minDate,\n maxDate,\n offDays,\n );\n }\n\n if (isInputToValueComplete) {\n individualInputToError = !isValidInputValue(inputToValue, minDate, maxDate, offDays);\n }\n\n let rangeError = false;\n\n const parsedDateFrom = isInputFromValueComplete ? parseDateString(inputFromValue) : null;\n const parsedDateTo = isInputToValueComplete ? parseDateString(inputToValue) : null;\n\n const isParsedDateFromValid =\n parsedDateFrom &&\n !Number.isNaN(parsedDateFrom.getTime()) &&\n isValidInputValue(inputFromValue, minDate, maxDate, offDays);\n const isParsedDateToValid =\n parsedDateTo &&\n !Number.isNaN(parsedDateTo.getTime()) &&\n isValidInputValue(inputToValue, minDate, maxDate, offDays);\n\n if (\n isParsedDateFromValid &&\n isParsedDateToValid &&\n parsedDateFrom.getTime() > parsedDateTo.getTime()\n ) {\n rangeError = true;\n }\n\n setValidationResult({\n inputFromError: individualInputFromError || rangeError,\n inputToError: individualInputToError || rangeError,\n rangeError,\n });\n }, [inputFromValue, inputToValue, minDate, maxDate, offDays]);\n\n return validationResult;\n};\n"],"names":["useState","useCallback","useEffect","startOfMonth","useMemo","max","addMonths","subMonths","isEqual","min","useRef","isCompleteDateInput","parseDateString","isValidInputValue"],"mappings":";;;;;;;;;AAMM,SAAU,qBAAqB,CAAC,EAUrC,EAAA;QATG,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,QAAQ,GAAA,EAAA,CAAA,QAAA;IAOF,IAAA,EAAA,GAA4BA,cAAQ,EAAU,EAA7C,SAAS,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,YAAY,GAAA,EAAA,CAAA,CAAA,CAAsB;IAC9C,IAAA,EAAA,GAAwBA,cAAQ,EAAU,EAAzC,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,UAAU,GAAA,EAAA,CAAA,CAAA,CAAsB;AAEhD,IAAA,IAAM,qBAAqB,GAAGC,iBAAW,CACrC,UAAC,YAAoB,EAAA;QACjB,YAAY,CAAC,YAAY,CAAC;QAE1B,IAAI,CAAC,MAAM,EAAE;YACT,UAAU,CAAC,YAAY,CAAC;;AAEhC,KAAC,EACD,CAAC,MAAM,CAAC,CACX;AAED,IAAA,IAAM,mBAAmB,GAAGA,iBAAW,CACnC,UAAC,UAAkB,EAAA;QACf,UAAU,CAAC,UAAU,CAAC;QAEtB,IAAI,CAAC,QAAQ,EAAE;YACX,YAAY,CAAC,UAAU,CAAC;;AAEhC,KAAC,EACD,CAAC,QAAQ,CAAC,CACb;AAED,IAAAC,eAAS,CAAC,YAAA;AACN,QAAA,YAAY,CAAC,QAAQ,GAAGC,oBAAY,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC;KAC3E,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAEtC,IAAAD,eAAS,CAAC,YAAA;AACN,QAAA,UAAU,CAAC,MAAM,GAAGC,oBAAY,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC;;AAEnE,KAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEtB,OAAO;AACH,QAAA,SAAS,EAAA,SAAA;AACT,QAAA,OAAO,EAAA,OAAA;AACP,QAAA,qBAAqB,EAAA,qBAAA;AACrB,QAAA,mBAAmB,EAAA,mBAAA;KACtB;AACL;AAEM,SAAU,oBAAoB,CAAC,EAUpC,EAAA;QATG,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,UAAU,GAAA,EAAA,CAAA,UAAA,EACV,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,oBAAoB,GAAA,EAAA,CAAA,oBAAA;AAOpB;;;AAGG;AACH,IAAA,IAAI,gBAAgB,GAAGC,aAAO,CAC1B,YAAM,EAAA,OAAAD,oBAAY,CAAC,YAAY,IAAI,UAAU,IAAI,YAAY,CAAC,CAAC,OAAO,EAAE,GAAA;;AAExE,IAAA,EAAE,CACL;AAED;;AAEG;IACH,IAAI,cAAc,GAAGC,aAAO,CACxB,YAAA;AACI,QAAA,OAAAC,WAAG,CAAC;YACA,UAAU,GAAGF,oBAAY,CAAC,UAAU,CAAC,GAAG,CAAC;AACzC,YAAAG,iBAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;SACjC,CAAC,CAAC,OAAO,EAAE;KAAA;;AAEhB,IAAA,EAAE,CACL;AAED,IAAA,IAAI,oBAAoB,KAAK,OAAO,EAAE;QAClC,cAAc,GAAG,gBAAgB;QACjC,gBAAgB,GAAGC,iBAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;;IAGzD,IAAA,EAAA,GAA4BP,cAAQ,CAAS,gBAAgB,CAAC,EAA7D,SAAS,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,YAAY,GAAA,EAAA,CAAA,CAAA,CAAsC;IAC9D,IAAA,EAAA,GAAwBA,cAAQ,CAAS,cAAc,CAAC,EAAvD,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,UAAU,GAAA,EAAA,CAAA,CAAA,CAAoC;AAE9D,IAAA,IAAM,qBAAqB,GAAGC,iBAAW,CACrC,UAAC,YAAoB,EAAA;QACjB,YAAY,CAAC,YAAY,CAAC;QAE1B,IAAI,OAAO,IAAIO,eAAO,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE;YAC3C,IAAM,SAAS,GAAGF,iBAAS,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;YAEtD,UAAU,CAAC,SAAS,CAAC;;AAE7B,KAAC,EACD,CAAC,OAAO,CAAC,CACZ;AAED,IAAA,IAAM,mBAAmB,GAAGL,iBAAW,CACnC,UAAC,UAAkB,EAAA;QACf,UAAU,CAAC,UAAU,CAAC;QAEtB,IAAI,SAAS,IAAIO,eAAO,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE;YAC7C,IAAM,SAAS,GAAGD,iBAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;YAEpD,YAAY,CAAC,SAAS,CAAC;;AAE/B,KAAC,EACD,CAAC,SAAS,CAAC,CACd;;AAGD,IAAAL,eAAS,CAAC,YAAA;AACN,QAAA,IAAM,iBAAiB,GAAG,YAAY,GAAGC,oBAAY,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,GAAG,SAAS;AACzF,QAAA,IAAM,eAAe,GAAG,UAAU,GAAGA,oBAAY,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,GAAG,SAAS;;AAGnF,QAAA,IAAM,eAAe,GAAG,iBAAiB,IAAI,iBAAiB,KAAK,SAAS;AAC5E,QAAA,IAAM,gBAAgB,GAAG,iBAAiB,IAAI,iBAAiB,KAAK,OAAO;AAC3E,QAAA,IAAM,cAAc,GAAG,eAAe,IAAI,eAAe,KAAK,OAAO;AACrE,QAAA,IAAM,aAAa,GAAG,eAAe,IAAI,eAAe,KAAK,SAAS;AACtE,QAAA,IAAM,iBAAiB,GAAG,eAAe,IAAI,gBAAgB;AAC7D,QAAA,IAAM,eAAe,GAAG,aAAa,IAAI,cAAc;AAEvD,QAAA,IAAI,eAAe,IAAI,aAAa,EAAE;AAClC,YAAA,UAAU,CAACE,WAAG,CAAC,CAACC,iBAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAErE;;AAGJ,QAAA,IAAI,gBAAgB,IAAI,cAAc,EAAE;AACpC,YAAA,YAAY,CAACG,WAAG,CAAC,CAACF,iBAAS,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAEvE;;AAGJ,QAAA,IAAI,iBAAiB,IAAI,eAAe,EAAE;YACtC,YAAY,CAAC,iBAAiB,CAAC;AAC/B,YAAA,UAAU,CAACF,WAAG,CAAC,CAACC,iBAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAE7E;;QAGJ,IAAI,iBAAiB,IAAI,CAAC,eAAe,IAAI,CAAC,iBAAiB,EAAE;YAC7D,YAAY,CAAC,iBAAiB,CAAC;AAC/B,YAAA,UAAU,CAACD,WAAG,CAAC,CAACC,iBAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;;QAGzE,IAAI,eAAe,IAAI,CAAC,iBAAiB,IAAI,CAAC,eAAe,EAAE;YAC3D,UAAU,CAAC,eAAe,CAAC;AAC3B,YAAA,YAAY,CAACG,WAAG,CAAC,CAACF,iBAAS,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;;;AAI/E,KAAC,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAE9B,OAAO;AACH,QAAA,SAAS,EAAA,SAAA;AACT,QAAA,OAAO,EAAA,OAAA;AACP,QAAA,qBAAqB,EAAA,qBAAA;AACrB,QAAA,mBAAmB,EAAA,mBAAA;KACtB;AACL;SAEgB,iBAAiB,CAAC,IAAa,EAAE,EAAW,EAAE,WAAoB,EAAA;AAC9E,IAAA,OAAOH,aAAO,CAAC,YAAA;AACX,QAAA,IAAI,IAAI,IAAI,EAAE,EAAE;YACZ,OAAO;AACH,gBAAA,aAAa,EAAE,IAAI;gBACnB,YAAY,EAAEK,WAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;gBACvC,UAAU,EAAEJ,WAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;aACxC;;QAGL,IAAM,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,KAAK,SAAS,CAAA,EAAA,CAAC;QAE1E,OAAO;AACH,YAAA,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,GAAGI,WAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,SAAS;YAC3E,UAAU,EAAE,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,GAAGJ,WAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,SAAS;SAC1E;KACJ,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;AAC/B;AAcO,IAAM,sBAAsB,GAAG,UAAC,EAQR,EAAA;AAP3B,IAAA,IAAA,QAAQ,cAAA,EACR,iBAAiB,uBAAA,EACjB,eAAe,qBAAA,EACf,uBAAuB,GAAA,EAAA,CAAA,uBAAA,EACvB,qBAAqB,GAAA,EAAA,CAAA,qBAAA,EACrB,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,UAAU,GAAA,EAAA,CAAA,UAAA;AAEV,IAAA,IAAM,gBAAgB,GAAGK,YAAM,CAAC,KAAK,CAAC;AAEtC,IAAA,IAAM,SAAS,GAAG,UAAC,QAAgB,EAAE,cAAsB,EAAE,YAAoB,EAAA;;AAC7E,QAAA,IAAI,CAAC,QAAQ;YAAE;QAEf,IACIC,wBAAmB,CAAC,QAAQ,CAAC;YAC7BA,wBAAmB,CAAC,YAAY,CAAC;AACjC,YAAAC,sBAAe,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAGA,sBAAe,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,EAC/E;AACE,YAAA,IAAI,cAAc,KAAK,YAAY,EAAE;AACjC,gBAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI;gBAC/B,iBAAiB,CAAC,YAAY,CAAC;gBAC/B,eAAe,CAAC,QAAQ,CAAC;AAEzB,gBAAA,CAAA,EAAA,GAAA,uBAAuB,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,gBAAgB,EAAE;AACnD,gBAAA,CAAA,EAAA,GAAA,qBAAqB,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,gBAAgB,EAAE;AAEjD,gBAAA,UAAU,CAAC,YAAA;;AACP,oBAAA,CAAA,EAAA,GAAA,UAAU,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,KAAK,EAAE;iBAC9B,EAAE,CAAC,CAAC;;;QAGb,IACID,wBAAmB,CAAC,QAAQ,CAAC;YAC7BA,wBAAmB,CAAC,cAAc,CAAC;AACnC,YAAAC,sBAAe,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAGA,sBAAe,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EACjF;AACE,YAAA,IAAI,YAAY,KAAK,cAAc,EAAE;AACjC,gBAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI;gBAC/B,eAAe,CAAC,cAAc,CAAC;gBAC/B,iBAAiB,CAAC,QAAQ,CAAC;AAE3B,gBAAA,CAAA,EAAA,GAAA,uBAAuB,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,gBAAgB,EAAE;AACnD,gBAAA,CAAA,EAAA,GAAA,qBAAqB,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,gBAAgB,EAAE;AAEjD,gBAAA,UAAU,CAAC,YAAA;;AACP,oBAAA,CAAA,EAAA,GAAA,YAAY,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,KAAK,EAAE;iBAChC,EAAE,CAAC,CAAC;;;AAGjB,KAAC;AAED,IAAA,OAAO,EAAE,SAAS,EAAA,SAAA,EAAE,gBAAgB,EAAA,gBAAA,EAAE;AAC1C;AAgBO,IAAM,kBAAkB,GAAG,UAAC,EAMR,EAAA;AALvB,IAAA,IAAA,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,OAAO,GAAA,EAAA,CAAA,OAAA,EACP,OAAO,GAAA,EAAA,CAAA,OAAA,EACP,OAAO,GAAA,EAAA,CAAA,OAAA;IAED,IAAA,EAAA,GAA0CZ,cAAQ,CAAwB;AAC5E,QAAA,cAAc,EAAE,KAAK;AACrB,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,UAAU,EAAE,KAAK;AACpB,KAAA,CAAC,EAJK,gBAAgB,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,mBAAmB,QAI1C;AAEF,IAAAE,eAAS,CAAC,YAAA;AACN,QAAA,IAAM,wBAAwB,GAAGS,wBAAmB,CAAC,cAAc,CAAC;AACpE,QAAA,IAAM,sBAAsB,GAAGA,wBAAmB,CAAC,YAAY,CAAC;QAEhE,IAAI,wBAAwB,GAAG,KAAK;QACpC,IAAI,sBAAsB,GAAG,KAAK;QAElC,IAAI,wBAAwB,EAAE;AAC1B,YAAA,wBAAwB,GAAG,CAACE,wBAAiB,CACzC,cAAc,EACd,OAAO,EACP,OAAO,EACP,OAAO,CACV;;QAGL,IAAI,sBAAsB,EAAE;AACxB,YAAA,sBAAsB,GAAG,CAACA,wBAAiB,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;;QAGxF,IAAI,UAAU,GAAG,KAAK;AAEtB,QAAA,IAAM,cAAc,GAAG,wBAAwB,GAAGD,sBAAe,CAAC,cAAc,CAAC,GAAG,IAAI;AACxF,QAAA,IAAM,YAAY,GAAG,sBAAsB,GAAGA,sBAAe,CAAC,YAAY,CAAC,GAAG,IAAI;QAElF,IAAM,qBAAqB,GACvB,cAAc;YACd,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YACvCC,wBAAiB,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;QAChE,IAAM,mBAAmB,GACrB,YAAY;YACZ,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YACrCA,wBAAiB,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAE9D,QAAA,IACI,qBAAqB;YACrB,mBAAmB;YACnB,cAAc,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,EACnD;YACE,UAAU,GAAG,IAAI;;AAGrB,QAAA,mBAAmB,CAAC;YAChB,cAAc,EAAE,wBAAwB,IAAI,UAAU;YACtD,YAAY,EAAE,sBAAsB,IAAI,UAAU;AAClD,YAAA,UAAU,EAAA,UAAA;AACb,SAAA,CAAC;AACN,KAAC,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAE7D,IAAA,OAAO,gBAAgB;AAC3B;;;;;;;;"}
@@ -1,9 +1,11 @@
1
1
  :root {
2
2
  --gap-s: 12px;
3
3
  --gap-m: 16px;
4
+ --gap-2xl: 32px;
4
5
  --gap-0: 0px;
5
6
  --gap-12: var(--gap-s);
6
7
  --gap-16: var(--gap-m);
8
+ --gap-32: var(--gap-2xl);
7
9
  }
8
10
  :root {
9
11
  --calendar-inner-width: 280px;
@@ -20,12 +22,22 @@
20
22
  .component *[class*='calendarIcon_'] {
21
23
  margin-right: var(--gap-0);
22
24
  }
25
+ .static {
26
+ flex-direction: column;
27
+ }
23
28
  .static .calendar {
24
29
  width: var(--calendar-inner-width);
25
30
  }
26
31
  .static .calendar > div:first-child {
27
32
  padding: var(--gap-16) var(--gap-0) var(--gap-12);
28
33
  }
34
+ .inputsContainer {
35
+ display: flex;
36
+ }
37
+ .calendarContainers {
38
+ display: flex;
39
+ gap: var(--gap-32);
40
+ }
29
41
  .calendarContainer {
30
42
  width: var(--calendar-inner-width);
31
43
  display: flex;
@@ -1,9 +1,20 @@
1
1
  import { type FC } from 'react';
2
+ import { type CalendarInputProps } from '@alfalab/core-components-calendar-input/cssm';
2
3
  import { type CalendarRangeProps } from '../Component';
3
- export type CalendarRangeStaticProps = Omit<CalendarRangeProps, 'calendarPosition'> & {
4
+ type DateInputProps = Omit<CalendarInputProps, 'onCalendarOpen' | 'onCalendarClose' | 'onChange'>;
5
+ interface CalendarRangeStaticProps extends Omit<CalendarRangeProps, 'calendarPosition' | 'inputFromProps' | 'inputToProps'> {
4
6
  /**
5
7
  * Отображать начальный месяц слева или справа (влияет только на начальный рендер)
6
8
  */
7
9
  defaultMonthPosition?: 'left' | 'right';
8
- };
10
+ /**
11
+ * Пропсы для инпута начальной даты диапазона
12
+ */
13
+ inputFromProps?: DateInputProps;
14
+ /**
15
+ * Пропсы для инпута конечной даты диапазона
16
+ */
17
+ inputToProps?: DateInputProps;
18
+ }
9
19
  export declare const CalendarRangeStatic: FC<CalendarRangeStaticProps>;
20
+ export {};