@gravity-ui/date-components 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/cjs/components/Calendar/Calendar.css +37 -37
  2. package/dist/cjs/components/Calendar/Calendar.js +2 -4
  3. package/dist/cjs/components/Calendar/CalendarBase.js +2 -4
  4. package/dist/cjs/components/Calendar/RangeCalendar.js +2 -4
  5. package/dist/cjs/components/Calendar/hooks/useCalendarCellProps.js +2 -4
  6. package/dist/cjs/components/Calendar/hooks/useCalendarGridProps.js +11 -0
  7. package/dist/cjs/components/Calendar/hooks/useCalendarProps.js +2 -4
  8. package/dist/cjs/components/Calendar/hooks/useCalendarState.js +2 -4
  9. package/dist/cjs/components/Calendar/hooks/useRangeCalendarState.js +13 -21
  10. package/dist/cjs/components/Calendar/i18n/index.js +3 -5
  11. package/dist/cjs/components/Calendar/index.js +8 -21
  12. package/dist/cjs/components/DateField/DateField.js +3 -16
  13. package/dist/cjs/components/DateField/hooks/useDateFieldProps.js +25 -20
  14. package/dist/cjs/components/DateField/hooks/useDateFieldState.js +23 -167
  15. package/dist/cjs/components/DateField/i18n/index.js +3 -5
  16. package/dist/cjs/components/DateField/index.js +4 -17
  17. package/dist/cjs/components/DateField/utils.d.ts +14 -3
  18. package/dist/cjs/components/DateField/utils.js +172 -3
  19. package/dist/cjs/components/DatePicker/DatePicker.css +6 -0
  20. package/dist/cjs/components/DatePicker/DatePicker.d.ts +2 -2
  21. package/dist/cjs/components/DatePicker/DatePicker.js +8 -48
  22. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.d.ts +20 -0
  23. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js +121 -0
  24. package/dist/cjs/components/DatePicker/hooks/useDatePickerState.d.ts +4 -5
  25. package/dist/cjs/components/DatePicker/hooks/useDatePickerState.js +17 -4
  26. package/dist/cjs/components/DatePicker/i18n/index.js +3 -5
  27. package/dist/cjs/components/DatePicker/index.d.ts +1 -0
  28. package/dist/cjs/components/DatePicker/index.js +4 -16
  29. package/dist/cjs/components/RelativeDateField/RelativeDateField.js +2 -4
  30. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldProps.js +2 -4
  31. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.js +2 -4
  32. package/dist/cjs/components/RelativeDateField/index.js +4 -17
  33. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.css +1 -0
  34. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.js +2 -4
  35. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +32 -43
  36. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +2 -4
  37. package/dist/cjs/components/RelativeDatePicker/i18n/index.js +3 -5
  38. package/dist/cjs/components/RelativeDatePicker/index.js +4 -17
  39. package/dist/cjs/components/hooks/useControlledState.js +2 -4
  40. package/dist/cjs/components/index.js +6 -19
  41. package/dist/cjs/index.js +2 -15
  42. package/dist/esm/components/Calendar/Calendar.css +37 -37
  43. package/dist/esm/components/Calendar/hooks/useCalendarGridProps.js +11 -0
  44. package/dist/esm/components/Calendar/hooks/useRangeCalendarState.js +11 -16
  45. package/dist/esm/components/DateField/DateField.js +1 -11
  46. package/dist/esm/components/DateField/hooks/useDateFieldProps.js +24 -17
  47. package/dist/esm/components/DateField/hooks/useDateFieldState.js +19 -161
  48. package/dist/esm/components/DateField/utils.d.ts +14 -3
  49. package/dist/esm/components/DateField/utils.js +165 -2
  50. package/dist/esm/components/DatePicker/DatePicker.css +6 -0
  51. package/dist/esm/components/DatePicker/DatePicker.d.ts +2 -2
  52. package/dist/esm/components/DatePicker/DatePicker.js +9 -46
  53. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.d.ts +20 -0
  54. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js +117 -0
  55. package/dist/esm/components/DatePicker/hooks/useDatePickerState.d.ts +4 -5
  56. package/dist/esm/components/DatePicker/hooks/useDatePickerState.js +15 -0
  57. package/dist/esm/components/DatePicker/index.d.ts +1 -0
  58. package/dist/esm/components/DatePicker/index.js +1 -0
  59. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.css +1 -0
  60. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +30 -38
  61. package/package.json +37 -33
  62. package/dist/cjs/components/DatePicker/DesktopCalendar.d.ts +0 -17
  63. package/dist/cjs/components/DatePicker/DesktopCalendar.js +0 -65
  64. package/dist/esm/components/DatePicker/DesktopCalendar.d.ts +0 -17
  65. package/dist/esm/components/DatePicker/DesktopCalendar.js +0 -57
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/date-components",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "main": "dist/cjs/index.js",
@@ -32,49 +32,54 @@
32
32
  "scripts": {
33
33
  "prepare": "husky install",
34
34
  "lint": "run-p lint:*",
35
- "lint:js": "eslint --ext .js,.jsx,.ts,.tsx .",
36
- "lint:styles": "stylelint 'src/**/*.scss'",
35
+ "lint:js": "eslint --ext .js,.jsx,.ts,.tsx --report-unused-disable-directives .",
36
+ "lint:styles": "stylelint --report-needless-disables 'src/**/*.scss'",
37
37
  "lint:other": "npm run prettier -- --check",
38
38
  "prettier": "prettier '**/*.{md,yaml,yml,json}'",
39
39
  "typecheck": "tsc --noEmit",
40
40
  "test": "jest",
41
41
  "clean": "gulp clean",
42
42
  "build": "gulp",
43
- "start": "storybook dev",
43
+ "start": "storybook dev -p 7070",
44
44
  "build-storybook": "storybook build -c .storybook -o storybook-static",
45
45
  "prepublishOnly": "npm run build"
46
46
  },
47
47
  "dependencies": {
48
48
  "@bem-react/classname": "^1.6.0",
49
49
  "@gravity-ui/date-utils": "^1.4.1",
50
- "@gravity-ui/icons": "^2.2.0"
50
+ "@gravity-ui/icons": "^2.2.0",
51
+ "tslib": "2.6.2"
51
52
  },
52
53
  "devDependencies": {
53
54
  "@babel/preset-env": "^7.22.9",
54
55
  "@babel/preset-react": "^7.22.5",
55
56
  "@babel/preset-typescript": "^7.22.5",
56
- "@commitlint/cli": "^17.6.7",
57
- "@commitlint/config-conventional": "^17.6.7",
58
- "@gravity-ui/eslint-config": "^2.1.1",
59
- "@gravity-ui/prettier-config": "^1.0.1",
60
- "@gravity-ui/stylelint-config": "^2.0.0",
57
+ "@commitlint/cli": "^18.4.3",
58
+ "@commitlint/config-conventional": "^18.4.3",
59
+ "@gravity-ui/eslint-config": "^3.1.1",
60
+ "@gravity-ui/prettier-config": "^1.1.0",
61
+ "@gravity-ui/stylelint-config": "^4.0.1",
61
62
  "@gravity-ui/tsconfig": "^1.0.0",
62
63
  "@gravity-ui/uikit": "^5.0.0",
63
- "@storybook/addon-a11y": "^7.2.1",
64
- "@storybook/addon-essentials": "^7.2.1",
65
- "@storybook/api": "^7.2.1",
64
+ "@storybook/addon-a11y": "^7.6.7",
65
+ "@storybook/addon-essentials": "^7.6.7",
66
+ "@storybook/addon-viewport": "^7.6.7",
67
+ "@storybook/addons": "^7.6.7",
68
+ "@storybook/api": "^7.6.7",
69
+ "@storybook/blocks": "^7.6.7",
66
70
  "@storybook/preset-scss": "^1.0.3",
67
- "@storybook/react": "^7.2.1",
68
- "@storybook/react-webpack5": "^7.2.1",
69
- "@testing-library/jest-dom": "^5.17.0",
70
- "@testing-library/react": "^14.0.0",
71
- "@testing-library/user-event": "^14.4.3",
72
- "@types/jest": "^29.5.3",
73
- "@types/react": "^18.2.15",
74
- "@types/react-dom": "^18.2.7",
71
+ "@storybook/react": "^7.6.7",
72
+ "@storybook/react-webpack5": "^7.6.7",
73
+ "@storybook/theming": "^7.6.7",
74
+ "@testing-library/jest-dom": "^6.1.6",
75
+ "@testing-library/react": "^14.1.2",
76
+ "@testing-library/user-event": "^14.5.2",
77
+ "@types/jest": "^29.5.11",
78
+ "@types/react": "^18.2.46",
79
+ "@types/react-dom": "^18.2.18",
75
80
  "cross-env": "^7.0.3",
76
- "eslint": "^8.45.0",
77
- "eslint-plugin-testing-library": "^5.11.0",
81
+ "eslint": "^8.56.0",
82
+ "eslint-plugin-testing-library": "^6.2.0",
78
83
  "gulp": "^4.0.2",
79
84
  "gulp-cli": "^2.3.0",
80
85
  "gulp-dart-sass": "^1.1.0",
@@ -86,31 +91,30 @@
86
91
  "jest-transform-css": "^6.0.1",
87
92
  "nano-staged": "^0.8.0",
88
93
  "npm-run-all": "^4.1.5",
89
- "prettier": "^2.8.8",
94
+ "prettier": "^3.1.1",
90
95
  "react": "^18.2.0",
91
96
  "react-dom": "^18.2.0",
92
- "sass": "^1.64.1",
93
- "sass-loader": "^13.3.2",
94
- "storybook": "^7.2.1",
97
+ "rimraf": "5.0.5",
98
+ "sass": "^1.69.7",
99
+ "sass-loader": "^13.3.3",
100
+ "storybook": "^7.6.7",
95
101
  "style-loader": "^3.3.3",
96
102
  "stylelint": "^15.10.2",
97
103
  "ts-jest": "^29.1.1",
98
- "typescript": "^5.1.6"
104
+ "ts-node": "^10.9.2",
105
+ "typescript": "^5.3.3"
99
106
  },
100
107
  "peerDependencies": {
101
108
  "@gravity-ui/uikit": "^5.0.0",
102
109
  "react": "^17.0.0 || ^18.0.0",
103
110
  "react-dom": "^17.0.0 || ^18.0.0"
104
111
  },
105
- "overrides": {
106
- "stylelint": "^15.10.2"
107
- },
108
112
  "nano-staged": {
109
113
  "*.{scss}": [
110
- "stylelint --fix --quiet"
114
+ "stylelint --fix --quiet --report-needless-disables"
111
115
  ],
112
116
  "*.{js,jsx,ts,tsx}": [
113
- "eslint --fix --quiet"
117
+ "eslint --fix --quiet --report-unused-disable-directives"
114
118
  ],
115
119
  "*.{md,json,yml,yaml}": [
116
120
  "prettier --write"
@@ -1,17 +0,0 @@
1
- import React from 'react';
2
- import { type CalendarProps } from '../Calendar';
3
- import type { DatePickerProps } from './DatePicker';
4
- import type { DatePickerState } from './hooks/useDatePickerState';
5
- interface DesktopCalendarProps {
6
- anchorRef: React.RefObject<HTMLElement>;
7
- props: DatePickerProps;
8
- state: DatePickerState;
9
- renderCalendar?: (props: CalendarProps) => React.ReactNode;
10
- }
11
- export declare function DesktopCalendar({ anchorRef, props, state, renderCalendar }: DesktopCalendarProps): import("react/jsx-runtime").JSX.Element | null;
12
- interface DesktopCalendarButtonProps {
13
- props: DatePickerProps;
14
- state: DatePickerState;
15
- }
16
- export declare function DesktopCalendarButton({ props, state }: DesktopCalendarButtonProps): import("react/jsx-runtime").JSX.Element | null;
17
- export {};
@@ -1,65 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.DesktopCalendarButton = exports.DesktopCalendar = void 0;
7
- const jsx_runtime_1 = require("react/jsx-runtime");
8
- const react_1 = __importDefault(require("react"));
9
- const icons_1 = require("@gravity-ui/icons");
10
- const uikit_1 = require("@gravity-ui/uikit");
11
- const Calendar_1 = require("../Calendar");
12
- const DateField_1 = require("../DateField");
13
- const getButtonSizeForInput_1 = require("../utils/getButtonSizeForInput");
14
- const i18n_1 = require("./i18n");
15
- const utils_1 = require("./utils");
16
- function DesktopCalendar({ anchorRef, props, state, renderCalendar }) {
17
- var _a;
18
- const { focusWithinProps } = (0, uikit_1.useFocusWithin)({
19
- isDisabled: !state.isOpen,
20
- onBlurWithin: () => {
21
- state.setOpen(false);
22
- },
23
- });
24
- if (!state.hasDate) {
25
- return null;
26
- }
27
- const calendarProps = {
28
- autoFocus: true,
29
- size: props.size === 's' ? 'm' : props.size,
30
- disabled: props.disabled,
31
- readOnly: props.readOnly,
32
- onUpdate: (d) => {
33
- state.setDateValue(d);
34
- },
35
- defaultFocusedValue: (_a = state.dateValue) !== null && _a !== void 0 ? _a : undefined,
36
- value: state.dateValue,
37
- minValue: props.minValue,
38
- maxValue: props.maxValue,
39
- isDateUnavailable: props.isDateUnavailable,
40
- timeZone: props.timeZone,
41
- };
42
- return ((0, jsx_runtime_1.jsx)(uikit_1.Popup, { open: state.isOpen, anchorRef: anchorRef, onClose: () => {
43
- state.setOpen(false);
44
- }, restoreFocus: true, children: (0, jsx_runtime_1.jsxs)("div", Object.assign({}, focusWithinProps, { className: (0, utils_1.b)('popup-content'), tabIndex: -1, children: [typeof renderCalendar === 'function' ? (renderCalendar(calendarProps)) : ((0, jsx_runtime_1.jsx)(Calendar_1.Calendar, Object.assign({}, calendarProps))), state.hasTime && ((0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.b)('time-field-wrapper'), children: (0, jsx_runtime_1.jsx)(DateField_1.DateField, { className: (0, utils_1.b)('time-field'), size: props.size, readOnly: props.readOnly, value: state.timeValue, onUpdate: state.setTimeValue, placeholderValue: props.placeholderValue, minValue: props.minValue, maxValue: props.maxValue, timeZone: props.timeZone, format: state.timeFormat }) }))] })) }));
45
- }
46
- exports.DesktopCalendar = DesktopCalendar;
47
- function DesktopCalendarButton({ props, state }) {
48
- const wasOpenBeforeClickRef = react_1.default.useRef(false);
49
- if (!state.hasDate) {
50
- return null;
51
- }
52
- return ((0, jsx_runtime_1.jsx)(uikit_1.Button, { view: "flat", size: (0, getButtonSizeForInput_1.getButtonSizeForInput)(props.size), disabled: props.disabled, extraProps: {
53
- 'aria-label': (0, i18n_1.i18n)('Calendar'),
54
- 'aria-haspopup': 'dialog',
55
- 'aria-expanded': state.isOpen,
56
- }, onFocus: () => {
57
- wasOpenBeforeClickRef.current = state.isOpen;
58
- }, onClick: () => {
59
- if (!wasOpenBeforeClickRef.current) {
60
- state.setOpen(true);
61
- }
62
- wasOpenBeforeClickRef.current = false;
63
- }, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Calendar }) }));
64
- }
65
- exports.DesktopCalendarButton = DesktopCalendarButton;
@@ -1,17 +0,0 @@
1
- import React from 'react';
2
- import { type CalendarProps } from '../Calendar';
3
- import type { DatePickerProps } from './DatePicker';
4
- import type { DatePickerState } from './hooks/useDatePickerState';
5
- interface DesktopCalendarProps {
6
- anchorRef: React.RefObject<HTMLElement>;
7
- props: DatePickerProps;
8
- state: DatePickerState;
9
- renderCalendar?: (props: CalendarProps) => React.ReactNode;
10
- }
11
- export declare function DesktopCalendar({ anchorRef, props, state, renderCalendar }: DesktopCalendarProps): import("react/jsx-runtime").JSX.Element | null;
12
- interface DesktopCalendarButtonProps {
13
- props: DatePickerProps;
14
- state: DatePickerState;
15
- }
16
- export declare function DesktopCalendarButton({ props, state }: DesktopCalendarButtonProps): import("react/jsx-runtime").JSX.Element | null;
17
- export {};
@@ -1,57 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import React from 'react';
3
- import { Calendar as CalendarIcon } from '@gravity-ui/icons';
4
- import { Button, Icon, Popup, useFocusWithin } from '@gravity-ui/uikit';
5
- import { Calendar } from '../Calendar';
6
- import { DateField } from '../DateField';
7
- import { getButtonSizeForInput } from '../utils/getButtonSizeForInput';
8
- import { i18n } from './i18n';
9
- import { b } from './utils';
10
- export function DesktopCalendar({ anchorRef, props, state, renderCalendar }) {
11
- var _a;
12
- const { focusWithinProps } = useFocusWithin({
13
- isDisabled: !state.isOpen,
14
- onBlurWithin: () => {
15
- state.setOpen(false);
16
- },
17
- });
18
- if (!state.hasDate) {
19
- return null;
20
- }
21
- const calendarProps = {
22
- autoFocus: true,
23
- size: props.size === 's' ? 'm' : props.size,
24
- disabled: props.disabled,
25
- readOnly: props.readOnly,
26
- onUpdate: (d) => {
27
- state.setDateValue(d);
28
- },
29
- defaultFocusedValue: (_a = state.dateValue) !== null && _a !== void 0 ? _a : undefined,
30
- value: state.dateValue,
31
- minValue: props.minValue,
32
- maxValue: props.maxValue,
33
- isDateUnavailable: props.isDateUnavailable,
34
- timeZone: props.timeZone,
35
- };
36
- return (_jsx(Popup, { open: state.isOpen, anchorRef: anchorRef, onClose: () => {
37
- state.setOpen(false);
38
- }, restoreFocus: true, children: _jsxs("div", Object.assign({}, focusWithinProps, { className: b('popup-content'), tabIndex: -1, children: [typeof renderCalendar === 'function' ? (renderCalendar(calendarProps)) : (_jsx(Calendar, Object.assign({}, calendarProps))), state.hasTime && (_jsx("div", { className: b('time-field-wrapper'), children: _jsx(DateField, { className: b('time-field'), size: props.size, readOnly: props.readOnly, value: state.timeValue, onUpdate: state.setTimeValue, placeholderValue: props.placeholderValue, minValue: props.minValue, maxValue: props.maxValue, timeZone: props.timeZone, format: state.timeFormat }) }))] })) }));
39
- }
40
- export function DesktopCalendarButton({ props, state }) {
41
- const wasOpenBeforeClickRef = React.useRef(false);
42
- if (!state.hasDate) {
43
- return null;
44
- }
45
- return (_jsx(Button, { view: "flat", size: getButtonSizeForInput(props.size), disabled: props.disabled, extraProps: {
46
- 'aria-label': i18n('Calendar'),
47
- 'aria-haspopup': 'dialog',
48
- 'aria-expanded': state.isOpen,
49
- }, onFocus: () => {
50
- wasOpenBeforeClickRef.current = state.isOpen;
51
- }, onClick: () => {
52
- if (!wasOpenBeforeClickRef.current) {
53
- state.setOpen(true);
54
- }
55
- wasOpenBeforeClickRef.current = false;
56
- }, children: _jsx(Icon, { data: CalendarIcon }) }));
57
- }