@egov3/system-design 1.3.121 → 1.3.122

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.
@@ -2,8 +2,8 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var css_248z = ".CalendarBody-module_wrapper__fd17C {\n display: flex;\n flex-direction: column;\n color: var(--text-disabled-color);\n}\n\n.CalendarBody-module_weekDays__zXG3- {\n height: 24px;\n}\n\n.CalendarBody-module_grid__HNGTZ,\n.CalendarBody-module_weekDays__zXG3- {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n column-gap: calc((100% - 7 * 28px) / 6);\n text-align: center;\n}\n\n.CalendarBody-module_weekDay__hzksZ,\n.CalendarBody-module_day__0KNDZ {\n width: 28px;\n}\n\n.CalendarBody-module_day__0KNDZ {\n cursor: pointer;\n color: var(--text-primary);\n height: 28px;\n}\n\n.CalendarBody-module_muted__8XysY {\n color: var(--text-disabled-color);\n}\n\n.CalendarBody-module_selected__86UkJ {\n background-color: var(--surface-accent);\n color: var(--text-white-nonconvert-color);\n border-radius: 100px;\n}\n";
6
- var styles = {"wrapper":"CalendarBody-module_wrapper__fd17C","weekDays":"CalendarBody-module_weekDays__zXG3-","grid":"CalendarBody-module_grid__HNGTZ","weekDay":"CalendarBody-module_weekDay__hzksZ","day":"CalendarBody-module_day__0KNDZ","muted":"CalendarBody-module_muted__8XysY","selected":"CalendarBody-module_selected__86UkJ"};
5
+ var css_248z = ".CalendarBody-module_wrapper__fd17C {\n display: flex;\n flex-direction: column;\n gap: 8px;\n color: var(--text-disabled-color);\n}\n\n.CalendarBody-module_header__33b3Q {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.CalendarBody-module_monthYear__efUvQ {\n display: flex;\n align-items: center;\n gap: 6px;\n width: 100%;\n color: var(--text-primary);\n}\n\n.CalendarBody-module_yearButton__Y76y1 {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.CalendarBody-module_navButton__cGVVz {\n padding: 0;\n cursor: pointer;\n}\n\n.CalendarBody-module_weekDays__zXG3- {\n height: 24px;\n}\n\n.CalendarBody-module_grid__HNGTZ,\n.CalendarBody-module_weekDays__zXG3- {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n column-gap: calc((100% - 7 * 28px) / 6);\n text-align: center;\n}\n\n.CalendarBody-module_weekDay__hzksZ,\n.CalendarBody-module_day__0KNDZ {\n width: 28px;\n}\n\n.CalendarBody-module_day__0KNDZ {\n cursor: pointer;\n color: var(--text-primary);\n height: 28px;\n}\n\n.CalendarBody-module_muted__8XysY {\n color: var(--text-disabled-color);\n}\n\n.CalendarBody-module_hiddenDay__mCCeF {\n visibility: hidden;\n pointer-events: none;\n}\n\n.CalendarBody-module_selected__86UkJ {\n background-color: var(--surface-accent);\n color: var(--text-white-nonconvert-color);\n border-radius: 100px;\n}\n";
6
+ var styles = {"wrapper":"CalendarBody-module_wrapper__fd17C","header":"CalendarBody-module_header__33b3Q","monthYear":"CalendarBody-module_monthYear__efUvQ","yearButton":"CalendarBody-module_yearButton__Y76y1","navButton":"CalendarBody-module_navButton__cGVVz","weekDays":"CalendarBody-module_weekDays__zXG3-","grid":"CalendarBody-module_grid__HNGTZ","weekDay":"CalendarBody-module_weekDay__hzksZ","day":"CalendarBody-module_day__0KNDZ","hiddenDay":"CalendarBody-module_hiddenDay__mCCeF","selected":"CalendarBody-module_selected__86UkJ"};
7
7
  function styleInject(css, options) {
8
8
  if (typeof document === 'undefined') return;
9
9
  const head = document.head || document.getElementsByTagName('head')[0];
@@ -1,36 +1,32 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
+ var graphics = require('@egov3/graphics');
4
5
  var index = require('../../../baseComponents/index.js');
6
+ var getMonthNameProper = require('../../../utils/date/getMonthNameProper.js');
5
7
  var joinClasses = require('../../../utils/joinClasses.js');
8
+ var useCalendar = require('../../../customHooks/useCalendar.js');
6
9
  var CalendarBody_module = require('./CalendarBody.module.css.js');
7
10
 
8
11
  const WEEK_DAYS = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
9
- const CELL_COUNT = 42;
10
- const isSameDate = (left, right) => left.getFullYear() === right.getFullYear() &&
11
- left.getMonth() === right.getMonth() &&
12
- left.getDate() === right.getDate();
13
- const getCalendarDays = (month, year, selectedDate) => {
14
- const firstDayIndex = (new Date(year, month, 1).getDay() + 6) % 7;
15
- const startDate = new Date(year, month, 1 - firstDayIndex);
16
- const today = new Date();
17
- return Array.from({ length: CELL_COUNT }, (_, index) => {
18
- const date = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + index);
19
- return {
20
- date,
21
- day: date.getDate(),
22
- isCurrentMonth: date.getMonth() === month,
23
- isToday: isSameDate(date, today),
24
- isSelected: selectedDate ? isSameDate(date, selectedDate) : false,
25
- };
12
+ const CalendarBody = ({ month = new Date().getMonth(), year = new Date().getFullYear(), selectedDate = null, onDayClick, onMonthChange, }) => {
13
+ const { days, visibleMonth, visibleYear, changeMonth } = useCalendar.useCalendarBody({
14
+ month,
15
+ year,
16
+ selectedDate,
17
+ onMonthChange,
26
18
  });
27
- };
28
- const CalendarBody = ({ month = new Date().getMonth(), year = new Date().getFullYear(), selectedDate = null, onDayClick, }) => {
29
- const days = getCalendarDays(month, year, selectedDate);
30
- return (jsxRuntime.jsxs("div", { className: CalendarBody_module.default.wrapper, "data-testid": "CalendarBody", children: [jsxRuntime.jsx("div", { className: CalendarBody_module.default.weekDays, children: WEEK_DAYS.map((day) => (jsxRuntime.jsx(index.BaseComponents.Typography, { tag: "span", fontClass: "body2Medium", className: CalendarBody_module.default.weekDay, children: day }, day))) }), jsxRuntime.jsx("div", { className: CalendarBody_module.default.grid, children: days.map((cell) => {
31
- return (jsxRuntime.jsx("button", { type: "button", className: joinClasses.joinClasses(CalendarBody_module.default.day, !cell.isCurrentMonth && CalendarBody_module.default.muted, cell.isToday && CalendarBody_module.default.today, cell.isSelected && CalendarBody_module.default.selected), onClick: () => {
32
- onDayClick?.(cell.date);
33
- }, "data-testid": `CalendarBody_DAY_${cell.date.toISOString().slice(0, 10)}`, children: jsxRuntime.jsx(index.BaseComponents.Typography, { tag: "span", fontClass: "body2Medium", children: cell.day }) }, cell.date.toISOString()));
19
+ const monthName = getMonthNameProper.getMonthNameProper(visibleMonth);
20
+ return (jsxRuntime.jsxs("div", { className: CalendarBody_module.default.wrapper, "data-testid": "CalendarBody", children: [jsxRuntime.jsxs("div", { className: CalendarBody_module.default.header, children: [jsxRuntime.jsxs("div", { className: CalendarBody_module.default.monthYear, "data-testid": "Calendar_MONTH_YEAR_LABEL", children: [jsxRuntime.jsx(index.BaseComponents.Typography, { tag: "span", fontClass: "body1Medium", "data-testid": "CalendarBody_MONTH_YEAR", children: monthName }), jsxRuntime.jsxs("button", { className: CalendarBody_module.default.yearButton, type: "button", onClick: () => { }, "data-testid": "Calendar_CHOOSE_YEAR_BTN", children: [jsxRuntime.jsx(index.BaseComponents.Typography, { tag: "span", fontClass: "body1Medium", "data-testid": "Calendar_CURRENT_YEAR", children: visibleYear }), jsxRuntime.jsx(graphics.Icons.Basic.ChevronDownSmall, { width: "24px", height: "24px", fill: "var(--icon-accent-color)" })] })] }), jsxRuntime.jsx("button", { className: CalendarBody_module.default.navButton, type: "button", onClick: () => {
21
+ changeMonth(-1);
22
+ }, "data-testid": "Calendar_PREV_MONTH_BTN", children: jsxRuntime.jsx(graphics.Icons.Basic.ChevronLeft, { width: "24px", height: "24px", fill: "var(--icon-accent-color)" }) }), jsxRuntime.jsx("button", { className: CalendarBody_module.default.navButton, type: "button", onClick: () => {
23
+ changeMonth(1);
24
+ }, "data-testid": "Calendar_NEXT_MONTH_BTN", children: jsxRuntime.jsx(graphics.Icons.Basic.ChevronRight, { width: "24px", height: "24px", fill: "var(--icon-accent-color)" }) })] }), jsxRuntime.jsx("div", { className: CalendarBody_module.default.weekDays, children: WEEK_DAYS.map((day) => (jsxRuntime.jsx(index.BaseComponents.Typography, { tag: "span", fontClass: "body2Medium", className: CalendarBody_module.default.weekDay, children: day }, day))) }), jsxRuntime.jsx("div", { className: CalendarBody_module.default.grid, children: days.map((cell) => {
25
+ return (jsxRuntime.jsx("button", { type: "button", className: joinClasses.joinClasses(CalendarBody_module.default.day, !cell.isCurrentMonth && CalendarBody_module.default.hiddenDay, cell.isToday && CalendarBody_module.default.today, cell.isSelected && CalendarBody_module.default.selected), onClick: () => {
26
+ if (cell.isCurrentMonth) {
27
+ onDayClick?.(cell.date);
28
+ }
29
+ }, disabled: !cell.isCurrentMonth, "data-testid": `CalendarBody_DAY_${cell.date.toISOString().slice(0, 10)}`, children: cell.isCurrentMonth && (jsxRuntime.jsx(index.BaseComponents.Typography, { tag: "span", fontClass: "body2Medium", children: cell.day })) }, cell.date.toISOString()));
34
30
  }) })] }));
35
31
  };
36
32
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/Calendar/Body/index.tsx"],"sourcesContent":[null],"names":["_jsxs","styles","_jsx","BaseComponents","joinClasses"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/Calendar/Body/index.tsx"],"sourcesContent":[null],"names":["useCalendarBody","getMonthNameProper","_jsxs","styles","_jsx","BaseComponents","Icons","joinClasses"],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var getDaysInMonth = require('../utils/date/getDaysInMonth.js');
5
+
6
+ const TODAY = new Date();
7
+ const isSameDate = (left, right) => left.getFullYear() === right.getFullYear() &&
8
+ left.getMonth() === right.getMonth() &&
9
+ left.getDate() === right.getDate();
10
+ const buildCalendarDays = (month, year, selectedDate) => {
11
+ const firstDayIndex = (new Date(year, month, 1).getDay() + 6) % 7;
12
+ const daysInMonth = getDaysInMonth.getDaysInMonth(month, year);
13
+ const trailingDays = (7 - ((firstDayIndex + daysInMonth) % 7)) % 7;
14
+ const cellCount = firstDayIndex + daysInMonth + trailingDays;
15
+ const startDate = new Date(year, month, 1 - firstDayIndex);
16
+ return Array.from({ length: cellCount }, (_, index) => {
17
+ const date = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + index);
18
+ return {
19
+ date,
20
+ day: date.getDate(),
21
+ isCurrentMonth: date.getMonth() === month,
22
+ isToday: isSameDate(date, TODAY),
23
+ isSelected: selectedDate ? isSameDate(date, selectedDate) : false,
24
+ };
25
+ });
26
+ };
27
+ const useCalendarBody = ({ month, year, selectedDate, onMonthChange, }) => {
28
+ const [visibleDate, setVisibleDate] = React.useState(() => new Date(year, month, 1));
29
+ React.useEffect(() => {
30
+ setVisibleDate(new Date(year, month, 1));
31
+ }, [month, year]);
32
+ const visibleMonth = visibleDate.getMonth();
33
+ const visibleYear = visibleDate.getFullYear();
34
+ const days = React.useMemo(() => buildCalendarDays(visibleMonth, visibleYear, selectedDate), [visibleMonth, visibleYear, selectedDate]);
35
+ const changeMonth = (offset) => {
36
+ setVisibleDate((current) => {
37
+ const next = new Date(current.getFullYear(), current.getMonth() + offset, 1);
38
+ onMonthChange?.(next);
39
+ return next;
40
+ });
41
+ };
42
+ return { days, visibleMonth, visibleYear, changeMonth };
43
+ };
44
+
45
+ exports.useCalendarBody = useCalendarBody;
46
+ //# sourceMappingURL=useCalendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCalendar.js","sources":["../../../src/customHooks/useCalendar.tsx"],"sourcesContent":[null],"names":["getDaysInMonth","useState","useEffect","useMemo"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ const getDaysInMonth = (month, year) => {
4
+ return new Date(year, month + 1, 0).getDate();
5
+ };
6
+
7
+ exports.getDaysInMonth = getDaysInMonth;
8
+ //# sourceMappingURL=getDaysInMonth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDaysInMonth.js","sources":["../../../../src/utils/date/getDaysInMonth.tsx"],"sourcesContent":[null],"names":[],"mappings":";;MAAa,cAAc,GAAG,CAAC,KAAa,EAAE,IAAY,KAAY;AACpE,IAAA,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;AAC/C;;;;"}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var index = require('./index.js');
4
+
5
+ const getMonthNameProper = (month) => {
6
+ const monthName = new Date(index.currentYear, month).toLocaleString("ru-RU", {
7
+ month: "long",
8
+ });
9
+ return monthName.charAt(0).toUpperCase() + monthName.slice(1);
10
+ };
11
+
12
+ exports.getMonthNameProper = getMonthNameProper;
13
+ //# sourceMappingURL=getMonthNameProper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMonthNameProper.js","sources":["../../../../src/utils/date/getMonthNameProper.tsx"],"sourcesContent":[null],"names":["currentYear"],"mappings":";;;;AAEO,MAAM,kBAAkB,GAAG,CAAC,KAAa,KAAY;AAC1D,IAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAACA,iBAAW,EAAE,KAAK,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE;AACrE,QAAA,KAAK,EAAE,MAAM;AACd,KAAA,CAAC;AACF,IAAA,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/D;;;;"}
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ new Date(0).getFullYear();
4
+ const currentYear = new Date().getFullYear();
5
+ new Date().getMonth();
6
+ new Date().getDate();
7
+
8
+ exports.currentYear = currentYear;
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/utils/date/index.tsx"],"sourcesContent":[null],"names":[],"mappings":";;AAAuB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW;AAIvC,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW;AACrB,IAAI,IAAI,EAAE,CAAC,QAAQ;AACrB,IAAI,IAAI,EAAE,CAAC,OAAO;;;;"}
@@ -1,5 +1,5 @@
1
- var css_248z = ".CalendarBody-module_wrapper__fd17C {\n display: flex;\n flex-direction: column;\n color: var(--text-disabled-color);\n}\n\n.CalendarBody-module_weekDays__zXG3- {\n height: 24px;\n}\n\n.CalendarBody-module_grid__HNGTZ,\n.CalendarBody-module_weekDays__zXG3- {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n column-gap: calc((100% - 7 * 28px) / 6);\n text-align: center;\n}\n\n.CalendarBody-module_weekDay__hzksZ,\n.CalendarBody-module_day__0KNDZ {\n width: 28px;\n}\n\n.CalendarBody-module_day__0KNDZ {\n cursor: pointer;\n color: var(--text-primary);\n height: 28px;\n}\n\n.CalendarBody-module_muted__8XysY {\n color: var(--text-disabled-color);\n}\n\n.CalendarBody-module_selected__86UkJ {\n background-color: var(--surface-accent);\n color: var(--text-white-nonconvert-color);\n border-radius: 100px;\n}\n";
2
- var styles = {"wrapper":"CalendarBody-module_wrapper__fd17C","weekDays":"CalendarBody-module_weekDays__zXG3-","grid":"CalendarBody-module_grid__HNGTZ","weekDay":"CalendarBody-module_weekDay__hzksZ","day":"CalendarBody-module_day__0KNDZ","muted":"CalendarBody-module_muted__8XysY","selected":"CalendarBody-module_selected__86UkJ"};
1
+ var css_248z = ".CalendarBody-module_wrapper__fd17C {\n display: flex;\n flex-direction: column;\n gap: 8px;\n color: var(--text-disabled-color);\n}\n\n.CalendarBody-module_header__33b3Q {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.CalendarBody-module_monthYear__efUvQ {\n display: flex;\n align-items: center;\n gap: 6px;\n width: 100%;\n color: var(--text-primary);\n}\n\n.CalendarBody-module_yearButton__Y76y1 {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.CalendarBody-module_navButton__cGVVz {\n padding: 0;\n cursor: pointer;\n}\n\n.CalendarBody-module_weekDays__zXG3- {\n height: 24px;\n}\n\n.CalendarBody-module_grid__HNGTZ,\n.CalendarBody-module_weekDays__zXG3- {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n column-gap: calc((100% - 7 * 28px) / 6);\n text-align: center;\n}\n\n.CalendarBody-module_weekDay__hzksZ,\n.CalendarBody-module_day__0KNDZ {\n width: 28px;\n}\n\n.CalendarBody-module_day__0KNDZ {\n cursor: pointer;\n color: var(--text-primary);\n height: 28px;\n}\n\n.CalendarBody-module_muted__8XysY {\n color: var(--text-disabled-color);\n}\n\n.CalendarBody-module_hiddenDay__mCCeF {\n visibility: hidden;\n pointer-events: none;\n}\n\n.CalendarBody-module_selected__86UkJ {\n background-color: var(--surface-accent);\n color: var(--text-white-nonconvert-color);\n border-radius: 100px;\n}\n";
2
+ var styles = {"wrapper":"CalendarBody-module_wrapper__fd17C","header":"CalendarBody-module_header__33b3Q","monthYear":"CalendarBody-module_monthYear__efUvQ","yearButton":"CalendarBody-module_yearButton__Y76y1","navButton":"CalendarBody-module_navButton__cGVVz","weekDays":"CalendarBody-module_weekDays__zXG3-","grid":"CalendarBody-module_grid__HNGTZ","weekDay":"CalendarBody-module_weekDay__hzksZ","day":"CalendarBody-module_day__0KNDZ","hiddenDay":"CalendarBody-module_hiddenDay__mCCeF","selected":"CalendarBody-module_selected__86UkJ"};
3
3
  function styleInject(css, options) {
4
4
  if (typeof document === 'undefined') return;
5
5
  const head = document.head || document.getElementsByTagName('head')[0];
@@ -1,34 +1,30 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { Icons } from '@egov3/graphics';
2
3
  import { BaseComponents } from '../../../baseComponents/index.js';
4
+ import { getMonthNameProper } from '../../../utils/date/getMonthNameProper.js';
3
5
  import { joinClasses } from '../../../utils/joinClasses.js';
6
+ import { useCalendarBody } from '../../../customHooks/useCalendar.js';
4
7
  import styles from './CalendarBody.module.css.js';
5
8
 
6
9
  const WEEK_DAYS = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
7
- const CELL_COUNT = 42;
8
- const isSameDate = (left, right) => left.getFullYear() === right.getFullYear() &&
9
- left.getMonth() === right.getMonth() &&
10
- left.getDate() === right.getDate();
11
- const getCalendarDays = (month, year, selectedDate) => {
12
- const firstDayIndex = (new Date(year, month, 1).getDay() + 6) % 7;
13
- const startDate = new Date(year, month, 1 - firstDayIndex);
14
- const today = new Date();
15
- return Array.from({ length: CELL_COUNT }, (_, index) => {
16
- const date = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + index);
17
- return {
18
- date,
19
- day: date.getDate(),
20
- isCurrentMonth: date.getMonth() === month,
21
- isToday: isSameDate(date, today),
22
- isSelected: selectedDate ? isSameDate(date, selectedDate) : false,
23
- };
10
+ const CalendarBody = ({ month = new Date().getMonth(), year = new Date().getFullYear(), selectedDate = null, onDayClick, onMonthChange, }) => {
11
+ const { days, visibleMonth, visibleYear, changeMonth } = useCalendarBody({
12
+ month,
13
+ year,
14
+ selectedDate,
15
+ onMonthChange,
24
16
  });
25
- };
26
- const CalendarBody = ({ month = new Date().getMonth(), year = new Date().getFullYear(), selectedDate = null, onDayClick, }) => {
27
- const days = getCalendarDays(month, year, selectedDate);
28
- return (jsxs("div", { className: styles.wrapper, "data-testid": "CalendarBody", children: [jsx("div", { className: styles.weekDays, children: WEEK_DAYS.map((day) => (jsx(BaseComponents.Typography, { tag: "span", fontClass: "body2Medium", className: styles.weekDay, children: day }, day))) }), jsx("div", { className: styles.grid, children: days.map((cell) => {
29
- return (jsx("button", { type: "button", className: joinClasses(styles.day, !cell.isCurrentMonth && styles.muted, cell.isToday && styles.today, cell.isSelected && styles.selected), onClick: () => {
30
- onDayClick?.(cell.date);
31
- }, "data-testid": `CalendarBody_DAY_${cell.date.toISOString().slice(0, 10)}`, children: jsx(BaseComponents.Typography, { tag: "span", fontClass: "body2Medium", children: cell.day }) }, cell.date.toISOString()));
17
+ const monthName = getMonthNameProper(visibleMonth);
18
+ return (jsxs("div", { className: styles.wrapper, "data-testid": "CalendarBody", children: [jsxs("div", { className: styles.header, children: [jsxs("div", { className: styles.monthYear, "data-testid": "Calendar_MONTH_YEAR_LABEL", children: [jsx(BaseComponents.Typography, { tag: "span", fontClass: "body1Medium", "data-testid": "CalendarBody_MONTH_YEAR", children: monthName }), jsxs("button", { className: styles.yearButton, type: "button", onClick: () => { }, "data-testid": "Calendar_CHOOSE_YEAR_BTN", children: [jsx(BaseComponents.Typography, { tag: "span", fontClass: "body1Medium", "data-testid": "Calendar_CURRENT_YEAR", children: visibleYear }), jsx(Icons.Basic.ChevronDownSmall, { width: "24px", height: "24px", fill: "var(--icon-accent-color)" })] })] }), jsx("button", { className: styles.navButton, type: "button", onClick: () => {
19
+ changeMonth(-1);
20
+ }, "data-testid": "Calendar_PREV_MONTH_BTN", children: jsx(Icons.Basic.ChevronLeft, { width: "24px", height: "24px", fill: "var(--icon-accent-color)" }) }), jsx("button", { className: styles.navButton, type: "button", onClick: () => {
21
+ changeMonth(1);
22
+ }, "data-testid": "Calendar_NEXT_MONTH_BTN", children: jsx(Icons.Basic.ChevronRight, { width: "24px", height: "24px", fill: "var(--icon-accent-color)" }) })] }), jsx("div", { className: styles.weekDays, children: WEEK_DAYS.map((day) => (jsx(BaseComponents.Typography, { tag: "span", fontClass: "body2Medium", className: styles.weekDay, children: day }, day))) }), jsx("div", { className: styles.grid, children: days.map((cell) => {
23
+ return (jsx("button", { type: "button", className: joinClasses(styles.day, !cell.isCurrentMonth && styles.hiddenDay, cell.isToday && styles.today, cell.isSelected && styles.selected), onClick: () => {
24
+ if (cell.isCurrentMonth) {
25
+ onDayClick?.(cell.date);
26
+ }
27
+ }, disabled: !cell.isCurrentMonth, "data-testid": `CalendarBody_DAY_${cell.date.toISOString().slice(0, 10)}`, children: cell.isCurrentMonth && (jsx(BaseComponents.Typography, { tag: "span", fontClass: "body2Medium", children: cell.day })) }, cell.date.toISOString()));
32
28
  }) })] }));
33
29
  };
34
30
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/Calendar/Body/index.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/Calendar/Body/index.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { useState, useEffect, useMemo } from 'react';
2
+ import { getDaysInMonth } from '../utils/date/getDaysInMonth.js';
3
+
4
+ const TODAY = new Date();
5
+ const isSameDate = (left, right) => left.getFullYear() === right.getFullYear() &&
6
+ left.getMonth() === right.getMonth() &&
7
+ left.getDate() === right.getDate();
8
+ const buildCalendarDays = (month, year, selectedDate) => {
9
+ const firstDayIndex = (new Date(year, month, 1).getDay() + 6) % 7;
10
+ const daysInMonth = getDaysInMonth(month, year);
11
+ const trailingDays = (7 - ((firstDayIndex + daysInMonth) % 7)) % 7;
12
+ const cellCount = firstDayIndex + daysInMonth + trailingDays;
13
+ const startDate = new Date(year, month, 1 - firstDayIndex);
14
+ return Array.from({ length: cellCount }, (_, index) => {
15
+ const date = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + index);
16
+ return {
17
+ date,
18
+ day: date.getDate(),
19
+ isCurrentMonth: date.getMonth() === month,
20
+ isToday: isSameDate(date, TODAY),
21
+ isSelected: selectedDate ? isSameDate(date, selectedDate) : false,
22
+ };
23
+ });
24
+ };
25
+ const useCalendarBody = ({ month, year, selectedDate, onMonthChange, }) => {
26
+ const [visibleDate, setVisibleDate] = useState(() => new Date(year, month, 1));
27
+ useEffect(() => {
28
+ setVisibleDate(new Date(year, month, 1));
29
+ }, [month, year]);
30
+ const visibleMonth = visibleDate.getMonth();
31
+ const visibleYear = visibleDate.getFullYear();
32
+ const days = useMemo(() => buildCalendarDays(visibleMonth, visibleYear, selectedDate), [visibleMonth, visibleYear, selectedDate]);
33
+ const changeMonth = (offset) => {
34
+ setVisibleDate((current) => {
35
+ const next = new Date(current.getFullYear(), current.getMonth() + offset, 1);
36
+ onMonthChange?.(next);
37
+ return next;
38
+ });
39
+ };
40
+ return { days, visibleMonth, visibleYear, changeMonth };
41
+ };
42
+
43
+ export { useCalendarBody };
44
+ //# sourceMappingURL=useCalendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCalendar.js","sources":["../../../src/customHooks/useCalendar.tsx"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ const getDaysInMonth = (month, year) => {
2
+ return new Date(year, month + 1, 0).getDate();
3
+ };
4
+
5
+ export { getDaysInMonth };
6
+ //# sourceMappingURL=getDaysInMonth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDaysInMonth.js","sources":["../../../../src/utils/date/getDaysInMonth.tsx"],"sourcesContent":[null],"names":[],"mappings":"MAAa,cAAc,GAAG,CAAC,KAAa,EAAE,IAAY,KAAY;AACpE,IAAA,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;AAC/C;;;;"}
@@ -0,0 +1,11 @@
1
+ import { currentYear } from './index.js';
2
+
3
+ const getMonthNameProper = (month) => {
4
+ const monthName = new Date(currentYear, month).toLocaleString("ru-RU", {
5
+ month: "long",
6
+ });
7
+ return monthName.charAt(0).toUpperCase() + monthName.slice(1);
8
+ };
9
+
10
+ export { getMonthNameProper };
11
+ //# sourceMappingURL=getMonthNameProper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMonthNameProper.js","sources":["../../../../src/utils/date/getMonthNameProper.tsx"],"sourcesContent":[null],"names":[],"mappings":";;AAEO,MAAM,kBAAkB,GAAG,CAAC,KAAa,KAAY;AAC1D,IAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE;AACrE,QAAA,KAAK,EAAE,MAAM;AACd,KAAA,CAAC;AACF,IAAA,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/D;;;;"}
@@ -0,0 +1,7 @@
1
+ new Date(0).getFullYear();
2
+ const currentYear = new Date().getFullYear();
3
+ new Date().getMonth();
4
+ new Date().getDate();
5
+
6
+ export { currentYear };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/utils/date/index.tsx"],"sourcesContent":[null],"names":[],"mappings":"AAAuB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW;AAIvC,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW;AACrB,IAAI,IAAI,EAAE,CAAC,QAAQ;AACrB,IAAI,IAAI,EAAE,CAAC,OAAO;;;;"}
@@ -3,6 +3,7 @@ interface ICalendarBodyProps {
3
3
  year?: number;
4
4
  selectedDate?: Date | null;
5
5
  onDayClick?: (date: Date) => void;
6
+ onMonthChange?: (date: Date) => void;
6
7
  }
7
8
 
8
9
  export type { ICalendarBodyProps };
@@ -100,7 +100,7 @@ declare const SystemDesign: {
100
100
  ServiceCardComponent: ({ handleOrderService, badge, isNew, title, }: IServiceCardComponentProps) => react_jsx_runtime.JSX.Element;
101
101
  NotificationItem: ({ type, text, onClick, }: INotificationComponentProps) => react_jsx_runtime.JSX.Element;
102
102
  NotificationWrapper: ({ items, removeNotificationData, }: INotificationWrapperProps) => react_jsx_runtime.JSX.Element | null;
103
- CalendarBody: ({ month, year, selectedDate, onDayClick, }: ICalendarBodyProps) => react_jsx_runtime.JSX.Element;
103
+ CalendarBody: ({ month, year, selectedDate, onDayClick, onMonthChange, }: ICalendarBodyProps) => react_jsx_runtime.JSX.Element;
104
104
  };
105
105
  };
106
106
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@egov3/system-design",
3
- "version": "1.3.121",
3
+ "version": "1.3.122",
4
4
  "type": "module",
5
5
  "main": "dist/cjs/index.js",
6
6
  "types": "dist/types/index.d.ts",