@itcase/ui 1.8.142 → 1.8.143

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.
@@ -94,11 +94,11 @@ const datePickerConfig = {
94
94
  };
95
95
  function DatePickerInput(props) {
96
96
  const { className, datePickerProps = {}, endValue, inputProps = {}, value, onChange, } = props;
97
- const datepickerRef = React.useRef(null);
98
- const { customTimeInput, disablePastDays, monthsShown, selectsRange } = datePickerProps;
99
- const appearanceConfig = useAppearanceConfig.useAppearanceConfig(datePickerProps.appearance, datePickerConfig);
97
+ const { appearance, customTimeInput, disablePastDays, monthsShown, selectsRange, showWeekPicker, } = datePickerProps;
98
+ const appearanceConfig = useAppearanceConfig.useAppearanceConfig(appearance, datePickerConfig);
100
99
  const propsGenerator = useDevicePropsGenerator.useDevicePropsGenerator(datePickerProps, appearanceConfig);
101
100
  const { daySize, dayTextColor, dayTextShape, dayTextSize, iconFill, iconFillHover, iconFillSize, iconItemFill, iconLeft, iconRight, iconShape, monthTextColor, monthTextSize, monthTextWeight, popper, popperPlacement, sizeClass, widthClass, yearTextColor, yearTextSize, yearTextWeight, isClearable, } = propsGenerator;
101
+ const datepickerRef = React.useRef(null);
102
102
  const [dateStart, dateEnd] = React.useMemo(() => {
103
103
  let dateStart;
104
104
  if (value) {
@@ -126,10 +126,27 @@ function DatePickerInput(props) {
126
126
  }
127
127
  return [dateStart, dateEnd];
128
128
  }, [value, endValue]);
129
- const handleChange = React.useCallback((valuesList) => {
130
- const [newDateStart, newDateEnd] = valuesList;
131
- onChange(newDateStart, newDateEnd);
132
- }, [onChange]);
129
+ const handleChange = React.useCallback((selected) => {
130
+ const valuesList = Array.isArray(selected) ? selected : [selected];
131
+ const [selectedDateStart, selectedDateEnd] = valuesList;
132
+ if (selectedDateStart && showWeekPicker) {
133
+ // "getDay" return from 0(sunday) to 6 (saturday).
134
+ // When 0(sunday) - we set as 7(end of week from 1(monday))
135
+ const weekDayIndex = selectedDateStart.getDay() || 7;
136
+ // Collect monday of week from selected date
137
+ const mondayDate = new Date(selectedDateStart);
138
+ mondayDate.setDate(selectedDateStart.getDate() - (weekDayIndex - 1));
139
+ // Collect sunday of week from selected date
140
+ const sundayDate = new Date(mondayDate);
141
+ sundayDate.setDate(mondayDate.getDate() + 6);
142
+ // Selected date can be wednesday, but for week picker
143
+ // we return start and end of selected week.
144
+ onChange(mondayDate, sundayDate);
145
+ }
146
+ else {
147
+ onChange(selectedDateStart, selectedDateEnd);
148
+ }
149
+ }, [showWeekPicker, onChange]);
133
150
  const renderDayContents = React.useCallback((day, date) => {
134
151
  return (jsxRuntime.jsx(Button.Button, { className: "react-datepicker__day-button", size: daySize, label: date.getDate().toString(), labelTextColor: dayTextColor, labelTextSize: dayTextSize, shape: dayTextShape }));
135
152
  }, [daySize, dayTextColor, dayTextShape, dayTextSize]);
@@ -149,7 +166,7 @@ function DatePickerInput(props) {
149
166
  yearTextWeight,
150
167
  ]);
151
168
  const { styles: datePickerStyles } = useStyles.useStyles(props);
152
- return (jsxRuntime.jsx("div", { className: clsx(className, 'datepicker', monthsShown && 'datepicker_multiple-months', customTimeInput && 'datepicker_button', sizeClass && `datepicker_size_${sizeClass}`, widthClass && `datepicker_width_${widthClass}`), style: datePickerStyles, children: jsxRuntime.jsx(DatePicker, { ref: datepickerRef, minDate: disablePastDays ? new Date() : undefined, customInput: jsxRuntime.jsx(DatePickerCustomInput, { datepickerRef: datepickerRef, inputProps: inputProps, isClearable: isClearable }), endDate: selectsRange ? dateEnd : undefined, locale: locale.ru, popperClassName: popper && `react-datepicker-popper-${popper}`, popperPlacement: popperPlacement, renderCustomHeader: renderCustomHeader, renderDayContents: renderDayContents, selected: dateStart, startDate: dateStart, onChange: selectsRange ? handleChange : onChange, ...datePickerProps,
169
+ return (jsxRuntime.jsx("div", { className: clsx(className, 'datepicker', monthsShown && 'datepicker_multiple-months', customTimeInput && 'datepicker_button', sizeClass && `datepicker_size_${sizeClass}`, widthClass && `datepicker_width_${widthClass}`), style: datePickerStyles, children: jsxRuntime.jsx(DatePicker, { ref: datepickerRef, minDate: disablePastDays ? new Date() : undefined, customInput: jsxRuntime.jsx(DatePickerCustomInput, { datepickerRef: datepickerRef, inputProps: inputProps, isClearable: isClearable }), endDate: selectsRange ? dateEnd : undefined, locale: locale.ru, popperClassName: popper && `react-datepicker-popper-${popper}`, popperPlacement: popperPlacement, renderCustomHeader: renderCustomHeader, renderDayContents: renderDayContents, selected: dateStart, startDate: dateStart, onChange: handleChange, ...datePickerProps,
153
170
  // Important for use custom clear button
154
171
  isClearable: false }) }));
155
172
  }
@@ -92,11 +92,11 @@ const datePickerConfig = {
92
92
  };
93
93
  function DatePickerInput(props) {
94
94
  const { className, datePickerProps = {}, endValue, inputProps = {}, value, onChange, } = props;
95
- const datepickerRef = useRef(null);
96
- const { customTimeInput, disablePastDays, monthsShown, selectsRange } = datePickerProps;
97
- const appearanceConfig = useAppearanceConfig(datePickerProps.appearance, datePickerConfig);
95
+ const { appearance, customTimeInput, disablePastDays, monthsShown, selectsRange, showWeekPicker, } = datePickerProps;
96
+ const appearanceConfig = useAppearanceConfig(appearance, datePickerConfig);
98
97
  const propsGenerator = useDevicePropsGenerator(datePickerProps, appearanceConfig);
99
98
  const { daySize, dayTextColor, dayTextShape, dayTextSize, iconFill, iconFillHover, iconFillSize, iconItemFill, iconLeft, iconRight, iconShape, monthTextColor, monthTextSize, monthTextWeight, popper, popperPlacement, sizeClass, widthClass, yearTextColor, yearTextSize, yearTextWeight, isClearable, } = propsGenerator;
99
+ const datepickerRef = useRef(null);
100
100
  const [dateStart, dateEnd] = useMemo(() => {
101
101
  let dateStart;
102
102
  if (value) {
@@ -124,10 +124,27 @@ function DatePickerInput(props) {
124
124
  }
125
125
  return [dateStart, dateEnd];
126
126
  }, [value, endValue]);
127
- const handleChange = useCallback((valuesList) => {
128
- const [newDateStart, newDateEnd] = valuesList;
129
- onChange(newDateStart, newDateEnd);
130
- }, [onChange]);
127
+ const handleChange = useCallback((selected) => {
128
+ const valuesList = Array.isArray(selected) ? selected : [selected];
129
+ const [selectedDateStart, selectedDateEnd] = valuesList;
130
+ if (selectedDateStart && showWeekPicker) {
131
+ // "getDay" return from 0(sunday) to 6 (saturday).
132
+ // When 0(sunday) - we set as 7(end of week from 1(monday))
133
+ const weekDayIndex = selectedDateStart.getDay() || 7;
134
+ // Collect monday of week from selected date
135
+ const mondayDate = new Date(selectedDateStart);
136
+ mondayDate.setDate(selectedDateStart.getDate() - (weekDayIndex - 1));
137
+ // Collect sunday of week from selected date
138
+ const sundayDate = new Date(mondayDate);
139
+ sundayDate.setDate(mondayDate.getDate() + 6);
140
+ // Selected date can be wednesday, but for week picker
141
+ // we return start and end of selected week.
142
+ onChange(mondayDate, sundayDate);
143
+ }
144
+ else {
145
+ onChange(selectedDateStart, selectedDateEnd);
146
+ }
147
+ }, [showWeekPicker, onChange]);
131
148
  const renderDayContents = useCallback((day, date) => {
132
149
  return (jsx(Button, { className: "react-datepicker__day-button", size: daySize, label: date.getDate().toString(), labelTextColor: dayTextColor, labelTextSize: dayTextSize, shape: dayTextShape }));
133
150
  }, [daySize, dayTextColor, dayTextShape, dayTextSize]);
@@ -147,7 +164,7 @@ function DatePickerInput(props) {
147
164
  yearTextWeight,
148
165
  ]);
149
166
  const { styles: datePickerStyles } = useStyles(props);
150
- return (jsx("div", { className: clsx(className, 'datepicker', monthsShown && 'datepicker_multiple-months', customTimeInput && 'datepicker_button', sizeClass && `datepicker_size_${sizeClass}`, widthClass && `datepicker_width_${widthClass}`), style: datePickerStyles, children: jsx(DatePicker, { ref: datepickerRef, minDate: disablePastDays ? new Date() : undefined, customInput: jsx(DatePickerCustomInput, { datepickerRef: datepickerRef, inputProps: inputProps, isClearable: isClearable }), endDate: selectsRange ? dateEnd : undefined, locale: ru, popperClassName: popper && `react-datepicker-popper-${popper}`, popperPlacement: popperPlacement, renderCustomHeader: renderCustomHeader, renderDayContents: renderDayContents, selected: dateStart, startDate: dateStart, onChange: selectsRange ? handleChange : onChange, ...datePickerProps,
167
+ return (jsx("div", { className: clsx(className, 'datepicker', monthsShown && 'datepicker_multiple-months', customTimeInput && 'datepicker_button', sizeClass && `datepicker_size_${sizeClass}`, widthClass && `datepicker_width_${widthClass}`), style: datePickerStyles, children: jsx(DatePicker, { ref: datepickerRef, minDate: disablePastDays ? new Date() : undefined, customInput: jsx(DatePickerCustomInput, { datepickerRef: datepickerRef, inputProps: inputProps, isClearable: isClearable }), endDate: selectsRange ? dateEnd : undefined, locale: ru, popperClassName: popper && `react-datepicker-popper-${popper}`, popperPlacement: popperPlacement, renderCustomHeader: renderCustomHeader, renderDayContents: renderDayContents, selected: dateStart, startDate: dateStart, onChange: handleChange, ...datePickerProps,
151
168
  // Important for use custom clear button
152
169
  isClearable: false }) }));
153
170
  }
@@ -4,7 +4,7 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var clsx = require('clsx');
6
6
  var common = require('@itcase/common');
7
- var DatePicker = require('../../DatePicker_cjs_CiH9nFzY.js');
7
+ var DatePicker = require('../../DatePicker_cjs_BOPN9WVz.js');
8
8
  var useAppearanceConfig = require('../hooks/useAppearanceConfig/useAppearanceConfig.js');
9
9
  var useDevicePropsGenerator = require('../hooks/useDevicePropsGenerator/useDevicePropsGenerator.js');
10
10
  var ChipsGroup = require('../../ChipsGroup_cjs_BNfzAmhc.js');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var DatePicker = require('../../DatePicker_cjs_CiH9nFzY.js');
3
+ var DatePicker = require('../../DatePicker_cjs_BOPN9WVz.js');
4
4
  require('react/jsx-runtime');
5
5
  require('react');
6
6
  require('clsx');
@@ -2,7 +2,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { useCallback } from 'react';
3
3
  import clsx from 'clsx';
4
4
  import { DATE_PERIOD_INTERVALS } from '@itcase/common';
5
- import { D as DatePickerInput } from '../DatePicker_es_DngPNvEg.js';
5
+ import { D as DatePickerInput } from '../DatePicker_es_-aO8EkK8.js';
6
6
  import { useAppearanceConfig } from '../hooks/useAppearanceConfig/useAppearanceConfig.js';
7
7
  import { useDevicePropsGenerator } from '../hooks/useDevicePropsGenerator/useDevicePropsGenerator.js';
8
8
  import { b as ChipsGroup, C as Chips } from '../ChipsGroup_es_UTiUhYs7.js';
@@ -1,4 +1,4 @@
1
- export { D as DatePickerInput, a as datePickerAppearance, d as datePickerConfig } from '../DatePicker_es_DngPNvEg.js';
1
+ export { D as DatePickerInput, a as datePickerAppearance, d as datePickerConfig } from '../DatePicker_es_-aO8EkK8.js';
2
2
  import 'react/jsx-runtime';
3
3
  import 'react';
4
4
  import 'clsx';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itcase/ui",
3
- "version": "1.8.142",
3
+ "version": "1.8.143",
4
4
  "description": "UI components (Modal, Loader, Popup, etc)",
5
5
  "keywords": [
6
6
  "Modal",
@@ -103,17 +103,17 @@
103
103
  "@emotion/is-prop-valid": "^1.4.0",
104
104
  "@itcase/common": "^1.2.32",
105
105
  "@itcase/icons": "^1.2.23",
106
- "@itcase/storybook-config": "^1.2.12",
106
+ "@itcase/storybook-config": "^1.2.13",
107
107
  "@itcase/tokens-am": "^1.1.20",
108
108
  "@itcase/tokens-baikal": "^1.1.17",
109
109
  "@itcase/tokens-palette": "^1.1.20",
110
110
  "clsx": "^2.1.1",
111
111
  "date-fns": "^4.1.0",
112
- "framer-motion": "^12.23.18",
112
+ "framer-motion": "^12.23.19",
113
113
  "js-cookie": "^3.0.5",
114
114
  "lodash": "^4.17.21",
115
115
  "luxon": "^3.7.2",
116
- "motion": "^12.23.18",
116
+ "motion": "^12.23.19",
117
117
  "rc-slider": "^11.1.9",
118
118
  "react": "^18.3.1",
119
119
  "react-dadata": "^2.27.4",
@@ -171,13 +171,13 @@
171
171
  "lint-staged": "^16.2.0",
172
172
  "prettier": "^3.6.2",
173
173
  "react-docgen-typescript": "^2.4.0",
174
- "rollup": "^4.52.0",
174
+ "rollup": "^4.52.2",
175
175
  "rollup-plugin-copy": "^3.5.0",
176
176
  "rollup-plugin-dts": "^6.2.3",
177
177
  "rollup-plugin-peer-deps-external": "^2.2.4",
178
178
  "rollup-preserve-directives": "^1.1.3",
179
179
  "semantic-release": "^24.2.9",
180
- "storybook": "^9.1.7",
180
+ "storybook": "^9.1.8",
181
181
  "stylelint": "^16.24.0",
182
182
  "typescript": "^5.9.2"
183
183
  }