@alphakits/ui 2.0.0 → 2.0.1

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 (39) hide show
  1. package/dist/calendar/component.js +1 -1
  2. package/dist/calendar/component.js.map +1 -1
  3. package/dist/calendar/components/days-table/component.d.ts +1 -1
  4. package/dist/calendar/components/days-table/component.js +40 -44
  5. package/dist/calendar/components/days-table/component.js.map +1 -1
  6. package/dist/calendar/components/months-table//321/201omponent.d.ts +1 -1
  7. package/dist/calendar/components/months-table//321/201omponent.js +1 -1
  8. package/dist/calendar/components/months-table//321/201omponent.js.map +1 -1
  9. package/dist/calendar/components/years-table//321/201omponent.js +1 -1
  10. package/dist/calendar/components/years-table//321/201omponent.js.map +1 -1
  11. package/dist/calendar/use-calendar.js +1 -1
  12. package/dist/calendar/use-calendar.js.map +1 -1
  13. package/dist/calendar/utils.d.ts +2 -2
  14. package/dist/calendar/utils.js +54 -54
  15. package/dist/calendar/utils.js.map +1 -1
  16. package/dist/calendar-input/component.js +2 -3
  17. package/dist/calendar-input/component.js.map +1 -1
  18. package/dist/calendar-input/utils.js +5 -5
  19. package/dist/calendar-input/utils.js.map +1 -1
  20. package/dist/date-switcher/component.js +1 -1
  21. package/dist/date-switcher/component.js.map +1 -1
  22. package/dist/form/component.js +79 -92
  23. package/dist/form/component.js.map +1 -1
  24. package/dist/formik/index.d.ts +5 -0
  25. package/dist/formik/index.js +15 -0
  26. package/dist/formik/index.js.map +1 -0
  27. package/dist/index.d.ts +1 -0
  28. package/dist/index.js +321 -270
  29. package/dist/index.js.map +1 -1
  30. package/dist/utils/date/index.d.ts +73 -0
  31. package/dist/utils/date/index.js +224 -0
  32. package/dist/utils/date/index.js.map +1 -0
  33. package/dist/utils/format-date/index.d.ts +16 -16
  34. package/dist/utils/format-date/index.js +36 -42
  35. package/dist/utils/format-date/index.js.map +1 -1
  36. package/dist/utils/index.d.ts +1 -0
  37. package/dist/utils/index.js +51 -12
  38. package/dist/utils/index.js.map +1 -1
  39. package/package.json +1 -3
@@ -1,7 +1,7 @@
1
1
  import { jsxs as u, jsx as M } from "react/jsx-runtime";
2
2
  import { forwardRef as nt, useState as S, useMemo as o, useCallback as c } from "react";
3
3
  import at from "classnames";
4
- import { startOfMonth as y, isSameDay as ct } from "date-fns";
4
+ import { startOfMonth as y, isSameDay as ct } from "../utils/date/index.js";
5
5
  import { locales as lt } from "../utils/format-date/index.js";
6
6
  import { DaysTable as it } from "./components/days-table/component.js";
7
7
  import { Header as dt } from "./components/header/сomponent.js";
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sources":["../../src/calendar/component.tsx"],"sourcesContent":["import React, {\n forwardRef, useCallback, useMemo, useState,\n} from 'react';\nimport cn from 'classnames';\nimport { isSameDay, startOfMonth } from 'date-fns';\n\nimport { locales } from '../utils/format-date';\n\nimport { DaysTable } from './components/days-table';\nimport { Header } from './components/header';\nimport { MonthsTable } from './components/months-table';\nimport { View } from './typings';\nimport { useCalendar } from './use-calendar';\nimport { monthName, useDidUpdateEffect } from './utils';\n\nimport styles from './index.module.css';\n\nexport type ExternalLocale = keyof typeof locales;\n\nexport type CalendarProps = {\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Вид по умолчанию (выбор дней, месяцев, лет)\n */\n defaultView?: View;\n\n /**\n * Выбранная дата (timestamp)\n */\n value?: number;\n\n /**\n * Открытый месяц (timestamp)\n */\n month?: number;\n\n /**\n * Месяц, открытый по умолчанию (timestamp)\n */\n defaultMonth?: number;\n\n /**\n * Минимальная дата, доступная для выбора (timestamp)\n */\n minDate?: number;\n\n /**\n * Максимальная дата, доступная для выбора (timestamp)\n */\n maxDate?: number;\n\n /**\n * Начало выделенного периода (timestamp)\n */\n selectedFrom?: number;\n\n /**\n * Конец выделенного периода (timestamp)\n */\n selectedTo?: number;\n\n /**\n * Список событий\n */\n events?: Array<Date | number>;\n\n /**\n * Список выходных\n */\n offDays?: Array<Date | number>;\n\n /**\n * Обработчик изменения месяца\n */\n onMonthChange?: (month: number) => void;\n\n /**\n * Обработчик изменения года\n */\n onYearChange?: (year: number) => void;\n\n /**\n * Обработчик выбора даты\n */\n onChange?: (date: number) => void;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n locale?: ExternalLocale;\n\n /** Использовать короткие названия месяцев и дней */\n shortNames?: boolean;\n};\n\nconst localeMap: Record<ExternalLocale, Locale> = locales;\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n (\n {\n className,\n defaultView = 'days',\n value,\n month: monthTimestamp,\n defaultMonth: defaultMonthTimestamp = +new Date(),\n minDate: minDateTimestamp,\n maxDate: maxDateTimestamp,\n selectedFrom,\n selectedTo,\n offDays,\n events,\n onChange,\n onMonthChange,\n onYearChange,\n locale = 'en',\n shortNames = true,\n dataTestId,\n },\n ref,\n ) => {\n const [view, setView] = useState<View>(defaultView);\n const [scrolled, setScrolled] = useState(false);\n const selectedLocale = localeMap[locale];\n const selected = useMemo(() => (value ? new Date(value) : undefined), [value]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const defaultMonth = useMemo(() => startOfMonth(selected || selectedFrom || defaultMonthTimestamp), []);\n\n const month = useMemo(\n () => (monthTimestamp ? new Date(monthTimestamp) : undefined),\n [monthTimestamp],\n );\n\n const minDate = useMemo(\n () => (minDateTimestamp ? new Date(minDateTimestamp) : undefined),\n [minDateTimestamp],\n );\n\n const maxDate = useMemo(\n () => (maxDateTimestamp ? new Date(maxDateTimestamp) : undefined),\n [maxDateTimestamp],\n );\n\n const {\n activeMonth,\n activeYear,\n weeks,\n months,\n canSetPrevMonth,\n canSetNextMonth,\n setMonthByDate,\n setPrevMonth,\n setNextMonth,\n setNextYear,\n setPrevYear,\n highlighted,\n getDayProps,\n getMonthProps,\n getRootProps,\n } = useCalendar({\n month,\n defaultMonth,\n view,\n minDate,\n maxDate,\n selected,\n offDays,\n events,\n onChange,\n onMonthChange,\n onYearChange,\n setView,\n });\n\n const toggleView = useCallback(\n (newView: View) => {\n setView(view === newView ? 'days' : newView);\n },\n [view],\n );\n\n const today = useMemo(() => {\n const d = new Date();\n\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n }, []);\n\n // true, если сегодня НЕ выбран (или дата вообще не выбрана)\n const showToday = useMemo(() => !selected || !isSameDay(selected, today), [selected, today]);\n\n // клик по \"Сегодня\"\n const handleTodayClick = useCallback(() => {\n // выставляем вид на дни\n setView('days');\n\n // открываем текущий месяц\n setMonthByDate(startOfMonth(today));\n\n // триггерим выбор сегодняшней даты (timestamp, как и остальной onChange)\n onChange?.(today.getTime());\n }, [onChange, setMonthByDate, setView, today]);\n\n const handlePrevArrowClick = useCallback(() => {\n if (view === 'days') {\n setPrevMonth();\n } else {\n setPrevYear();\n }\n }, [setPrevMonth, view, setPrevYear]);\n\n const handleNextArrowClick = useCallback(() => {\n if (view === 'days') {\n setNextMonth();\n } else {\n setNextYear();\n }\n }, [setNextMonth, view, setNextYear]);\n\n const handleMonthClick = useCallback(() => {\n toggleView('months');\n }, [toggleView]);\n\n useDidUpdateEffect(() => {\n setScrolled(false);\n }, [view]);\n\n useDidUpdateEffect(() => {\n const newMonth = value && startOfMonth(value);\n\n if (newMonth && newMonth.getTime() !== activeMonth.getTime()) {\n setMonthByDate(newMonth);\n }\n }, [value]);\n\n return (\n <div\n { ...getRootProps({ ref }) }\n className={ cn(styles.component, className, {\n [styles.sixWeeks]: weeks.length === 6,\n }) }\n data-test-id={ dataTestId }\n >\n <Header\n month={ monthName(activeMonth, selectedLocale, false) }\n onTodayClick={ handleTodayClick }\n showToday={ showToday }\n year={ activeYear.getFullYear().toString() }\n prevArrowVisible={ canSetPrevMonth }\n nextArrowVisible={ canSetNextMonth }\n onPrevArrowClick={ handlePrevArrowClick }\n onNextArrowClick={ handleNextArrowClick }\n onMonthClick={ handleMonthClick }\n view={ view }\n withShadow={ scrolled }\n />\n\n <div className={ styles.container }>\n { view === 'days' && (\n <DaysTable\n locale={ selectedLocale }\n weeks={ weeks }\n activeMonth={ activeMonth }\n selectedFrom={ selectedFrom }\n selectedTo={ selectedTo }\n getDayProps={ getDayProps }\n highlighted={ highlighted }\n />\n ) }\n\n { view === 'months' && (\n <MonthsTable\n selectedMonth={ activeMonth }\n selectedLocale={ selectedLocale }\n shortNames={ shortNames }\n months={ months }\n getMonthProps={ getMonthProps }\n />\n ) }\n\n </div>\n </div>\n );\n },\n);\n"],"names":["localeMap","locales","Calendar","forwardRef","className","defaultView","value","monthTimestamp","defaultMonthTimestamp","minDateTimestamp","maxDateTimestamp","selectedFrom","selectedTo","offDays","events","onChange","onMonthChange","onYearChange","locale","shortNames","dataTestId","ref","view","setView","useState","scrolled","setScrolled","selectedLocale","selected","useMemo","defaultMonth","startOfMonth","month","minDate","maxDate","activeMonth","activeYear","weeks","months","canSetPrevMonth","canSetNextMonth","setMonthByDate","setPrevMonth","setNextMonth","setNextYear","setPrevYear","highlighted","getDayProps","getMonthProps","getRootProps","useCalendar","toggleView","useCallback","newView","today","d","showToday","isSameDay","handleTodayClick","handlePrevArrowClick","handleNextArrowClick","handleMonthClick","useDidUpdateEffect","newMonth","jsxs","cn","styles","jsx","Header","monthName","DaysTable","MonthsTable"],"mappings":"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"}
1
+ {"version":3,"file":"component.js","sources":["../../src/calendar/component.tsx"],"sourcesContent":["import React, {\n forwardRef, useCallback, useMemo, useState,\n} from 'react';\nimport cn from 'classnames';\nimport { isSameDay, startOfMonth } from '../utils/date';\n\nimport { locales } from '../utils/format-date';\n\nimport { DaysTable } from './components/days-table';\nimport { Header } from './components/header';\nimport { MonthsTable } from './components/months-table';\nimport { View } from './typings';\nimport { useCalendar } from './use-calendar';\nimport { monthName, useDidUpdateEffect } from './utils';\n\nimport styles from './index.module.css';\n\nexport type ExternalLocale = keyof typeof locales;\n\nexport type CalendarProps = {\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Вид по умолчанию (выбор дней, месяцев, лет)\n */\n defaultView?: View;\n\n /**\n * Выбранная дата (timestamp)\n */\n value?: number;\n\n /**\n * Открытый месяц (timestamp)\n */\n month?: number;\n\n /**\n * Месяц, открытый по умолчанию (timestamp)\n */\n defaultMonth?: number;\n\n /**\n * Минимальная дата, доступная для выбора (timestamp)\n */\n minDate?: number;\n\n /**\n * Максимальная дата, доступная для выбора (timestamp)\n */\n maxDate?: number;\n\n /**\n * Начало выделенного периода (timestamp)\n */\n selectedFrom?: number;\n\n /**\n * Конец выделенного периода (timestamp)\n */\n selectedTo?: number;\n\n /**\n * Список событий\n */\n events?: Array<Date | number>;\n\n /**\n * Список выходных\n */\n offDays?: Array<Date | number>;\n\n /**\n * Обработчик изменения месяца\n */\n onMonthChange?: (month: number) => void;\n\n /**\n * Обработчик изменения года\n */\n onYearChange?: (year: number) => void;\n\n /**\n * Обработчик выбора даты\n */\n onChange?: (date: number) => void;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n locale?: ExternalLocale;\n\n /** Использовать короткие названия месяцев и дней */\n shortNames?: boolean;\n};\n\nconst localeMap: Record<ExternalLocale, string> = locales;\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n (\n {\n className,\n defaultView = 'days',\n value,\n month: monthTimestamp,\n defaultMonth: defaultMonthTimestamp = +new Date(),\n minDate: minDateTimestamp,\n maxDate: maxDateTimestamp,\n selectedFrom,\n selectedTo,\n offDays,\n events,\n onChange,\n onMonthChange,\n onYearChange,\n locale = 'en',\n shortNames = true,\n dataTestId,\n },\n ref,\n ) => {\n const [view, setView] = useState<View>(defaultView);\n const [scrolled, setScrolled] = useState(false);\n const selectedLocale = localeMap[locale];\n const selected = useMemo(() => (value ? new Date(value) : undefined), [value]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const defaultMonth = useMemo(() => startOfMonth(selected || selectedFrom || defaultMonthTimestamp), []);\n\n const month = useMemo(\n () => (monthTimestamp ? new Date(monthTimestamp) : undefined),\n [monthTimestamp],\n );\n\n const minDate = useMemo(\n () => (minDateTimestamp ? new Date(minDateTimestamp) : undefined),\n [minDateTimestamp],\n );\n\n const maxDate = useMemo(\n () => (maxDateTimestamp ? new Date(maxDateTimestamp) : undefined),\n [maxDateTimestamp],\n );\n\n const {\n activeMonth,\n activeYear,\n weeks,\n months,\n canSetPrevMonth,\n canSetNextMonth,\n setMonthByDate,\n setPrevMonth,\n setNextMonth,\n setNextYear,\n setPrevYear,\n highlighted,\n getDayProps,\n getMonthProps,\n getRootProps,\n } = useCalendar({\n month,\n defaultMonth,\n view,\n minDate,\n maxDate,\n selected,\n offDays,\n events,\n onChange,\n onMonthChange,\n onYearChange,\n setView,\n });\n\n const toggleView = useCallback(\n (newView: View) => {\n setView(view === newView ? 'days' : newView);\n },\n [view],\n );\n\n const today = useMemo(() => {\n const d = new Date();\n\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n }, []);\n\n // true, если сегодня НЕ выбран (или дата вообще не выбрана)\n const showToday = useMemo(() => !selected || !isSameDay(selected, today), [selected, today]);\n\n // клик по \"Сегодня\"\n const handleTodayClick = useCallback(() => {\n // выставляем вид на дни\n setView('days');\n\n // открываем текущий месяц\n setMonthByDate(startOfMonth(today));\n\n // триггерим выбор сегодняшней даты (timestamp, как и остальной onChange)\n onChange?.(today.getTime());\n }, [onChange, setMonthByDate, setView, today]);\n\n const handlePrevArrowClick = useCallback(() => {\n if (view === 'days') {\n setPrevMonth();\n } else {\n setPrevYear();\n }\n }, [setPrevMonth, view, setPrevYear]);\n\n const handleNextArrowClick = useCallback(() => {\n if (view === 'days') {\n setNextMonth();\n } else {\n setNextYear();\n }\n }, [setNextMonth, view, setNextYear]);\n\n const handleMonthClick = useCallback(() => {\n toggleView('months');\n }, [toggleView]);\n\n useDidUpdateEffect(() => {\n setScrolled(false);\n }, [view]);\n\n useDidUpdateEffect(() => {\n const newMonth = value && startOfMonth(value);\n\n if (newMonth && newMonth.getTime() !== activeMonth.getTime()) {\n setMonthByDate(newMonth);\n }\n }, [value]);\n\n return (\n <div\n { ...getRootProps({ ref }) }\n className={ cn(styles.component, className, {\n [styles.sixWeeks]: weeks.length === 6,\n }) }\n data-test-id={ dataTestId }\n >\n <Header\n month={ monthName(activeMonth, selectedLocale, false) }\n onTodayClick={ handleTodayClick }\n showToday={ showToday }\n year={ activeYear.getFullYear().toString() }\n prevArrowVisible={ canSetPrevMonth }\n nextArrowVisible={ canSetNextMonth }\n onPrevArrowClick={ handlePrevArrowClick }\n onNextArrowClick={ handleNextArrowClick }\n onMonthClick={ handleMonthClick }\n view={ view }\n withShadow={ scrolled }\n />\n\n <div className={ styles.container }>\n { view === 'days' && (\n <DaysTable\n locale={ selectedLocale }\n weeks={ weeks }\n activeMonth={ activeMonth }\n selectedFrom={ selectedFrom }\n selectedTo={ selectedTo }\n getDayProps={ getDayProps }\n highlighted={ highlighted }\n />\n ) }\n\n { view === 'months' && (\n <MonthsTable\n selectedMonth={ activeMonth }\n selectedLocale={ selectedLocale }\n shortNames={ shortNames }\n months={ months }\n getMonthProps={ getMonthProps }\n />\n ) }\n\n </div>\n </div>\n );\n },\n);\n"],"names":["localeMap","locales","Calendar","forwardRef","className","defaultView","value","monthTimestamp","defaultMonthTimestamp","minDateTimestamp","maxDateTimestamp","selectedFrom","selectedTo","offDays","events","onChange","onMonthChange","onYearChange","locale","shortNames","dataTestId","ref","view","setView","useState","scrolled","setScrolled","selectedLocale","selected","useMemo","defaultMonth","startOfMonth","month","minDate","maxDate","activeMonth","activeYear","weeks","months","canSetPrevMonth","canSetNextMonth","setMonthByDate","setPrevMonth","setNextMonth","setNextYear","setPrevYear","highlighted","getDayProps","getMonthProps","getRootProps","useCalendar","toggleView","useCallback","newView","today","d","showToday","isSameDay","handleTodayClick","handlePrevArrowClick","handleNextArrowClick","handleMonthClick","useDidUpdateEffect","newMonth","jsxs","cn","styles","jsx","Header","monthName","DaysTable","MonthsTable"],"mappings":"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"}
@@ -27,6 +27,6 @@ export declare type DaysTableProps = {
27
27
  getDayProps: (day: Day) => Record<string, unknown> & {
28
28
  ref: RefCallback<HTMLButtonElement>;
29
29
  };
30
- locale: Locale;
30
+ locale: string;
31
31
  };
32
32
  export declare const DaysTable: FC<DaysTableProps>;
@@ -1,69 +1,65 @@
1
- import { jsx as n, jsxs as L } from "react/jsx-runtime";
2
- import { useRef as O, useCallback as j } from "react";
3
- import { TransitionGroup as C, CSSTransition as P } from "react-transition-group";
1
+ import { jsx as r, jsxs as O } from "react/jsx-runtime";
2
+ import { useRef as j, useMemo as z, useCallback as C } from "react";
3
+ import { TransitionGroup as P, CSSTransition as W } from "react-transition-group";
4
4
  import w from "classnames";
5
- import { isSameDay as c, isWithinInterval as W, isLastDayOfMonth as q, isBefore as G, endOfDay as H, isEqual as I, isToday as J, startOfMonth as K } from "date-fns";
6
- import M from "lodash/capitalize";
7
- import { Button as Q } from "../../../button/component.js";
8
- import { Flex as x } from "../../../flex/component.js";
9
- import { usePrevious as U } from "../../../hooks/usePrevious/index.js";
10
- import { getSelectionRange as V } from "../../utils.js";
5
+ import { weekDaysShort as q, isSameDay as c, isWithinInterval as G, isLastDayOfMonth as H, isBefore as I, endOfDay as M, isEqual as J, isToday as K, startOfMonth as Q } from "../../../utils/date/index.js";
6
+ import U from "lodash/capitalize";
7
+ import { Button as V } from "../../../button/component.js";
8
+ import { Flex as b } from "../../../flex/component.js";
9
+ import { usePrevious as X } from "../../../hooks/usePrevious/index.js";
10
+ import { getSelectionRange as Y } from "../../utils.js";
11
11
  import t from "./index.module.css.js";
12
- const ie = ({
13
- weeks: b = [],
14
- activeMonth: o = /* @__PURE__ */ new Date(),
12
+ const oe = ({
13
+ weeks: x = [],
14
+ activeMonth: a = /* @__PURE__ */ new Date(),
15
15
  highlighted: d,
16
16
  selectedFrom: m,
17
17
  selectedTo: l,
18
18
  getDayProps: R,
19
19
  locale: f
20
20
  }) => {
21
- const p = O(o);
22
- p.current = o;
23
- const u = U(o), g = u && (o < u ? "right" : "left"), s = V(m, l, d), D = Array(7).fill(1).map((e, a) => {
24
- var i;
25
- const r = a + 1;
26
- return (i = f == null ? void 0 : f.localize) == null ? void 0 : i.day(r === 7 ? 0 : r, { width: "short" });
27
- }), N = j(
28
- () => D.map((e) => /* @__PURE__ */ n("div", { className: t.dayName, children: M(e) }, e)),
29
- [D]
30
- ), E = (e) => {
31
- const a = e.selected || m && c(e.date, m) || l && c(e.date, l), r = !a && s && W(e.date, s), i = e.date.getDate() === 1, v = q(e.date), T = i && r && s && e.date > s.start, y = v && r && s && e.date < s.end, A = s && c(e.date, s.start), k = s && c(e.date, s.end), h = R(e), z = G(H(new Date(e.date)), /* @__PURE__ */ new Date());
32
- return /* @__PURE__ */ n(
33
- Q,
21
+ const p = j(a);
22
+ p.current = a;
23
+ const u = X(a), D = u && (a < u ? "right" : "left"), s = Y(m, l, d), g = z(() => q(f), [f]), N = C(
24
+ () => g.map((e) => /* @__PURE__ */ r("div", { className: t.dayName, children: U(e) }, e)),
25
+ [g]
26
+ ), S = (e) => {
27
+ const i = e.selected || m && c(e.date, m) || l && c(e.date, l), n = !i && s && G(e.date, s), o = e.date.getDate() === 1, v = H(e.date), T = o && n && s && e.date > s.start, k = v && n && s && e.date < s.end, y = s && c(e.date, s.start), A = s && c(e.date, s.end), h = R(e), B = I(M(new Date(e.date)), /* @__PURE__ */ new Date());
28
+ return /* @__PURE__ */ r(
29
+ V,
34
30
  {
35
31
  ...h,
36
- ref: (B) => {
37
- K(e.date).getTime() === p.current.getTime() && h.ref(B);
32
+ ref: (L) => {
33
+ Q(e.date).getTime() === p.current.getTime() && h.ref(L);
38
34
  },
39
35
  type: "button",
40
36
  view: "ghost",
41
37
  size: "xs",
42
38
  disabled: e.disabled,
43
39
  className: w(t.day, {
44
- [t.selected]: a,
45
- [t.range]: r,
46
- [t.rangeStart]: A,
47
- [t.rangeEnd]: k,
40
+ [t.selected]: i,
41
+ [t.range]: n,
42
+ [t.rangeStart]: y,
43
+ [t.rangeEnd]: A,
48
44
  [t.transitLeft]: T,
49
- [t.transitRight]: y,
50
- [t.today]: J(e.date),
51
- [t.firstDay]: i,
45
+ [t.transitRight]: k,
46
+ [t.today]: K(e.date),
47
+ [t.firstDay]: o,
52
48
  [t.lastDay]: v,
53
49
  [t.event]: e.event,
54
- [t.prev]: z,
50
+ [t.prev]: B,
55
51
  [t.disabled]: e.disabled,
56
52
  [t.muted]: e.muted || e.disabled,
57
- [t.highlighted]: d && I(e.date, d)
53
+ [t.highlighted]: d && J(e.date, d)
58
54
  }),
59
55
  children: e.date.getDate()
60
56
  }
61
57
  );
62
- }, S = (e, a) => /* @__PURE__ */ n(x, { className: t.weekRow, children: e.map((r, i) => /* @__PURE__ */ n("div", { className: t.daysRowDay, children: r && E(r) }, r ? r.date.getTime() : i)) }, a);
63
- return /* @__PURE__ */ L("div", { className: w(t.daysTable, g && t[g]), children: [
64
- /* @__PURE__ */ n("div", { className: t.daysRow, children: /* @__PURE__ */ n(x, { children: N() }) }),
65
- /* @__PURE__ */ n(C, { component: null, children: /* @__PURE__ */ n(
66
- P,
58
+ }, E = (e, i) => /* @__PURE__ */ r(b, { className: t.weekRow, children: e.map((n, o) => /* @__PURE__ */ r("div", { className: t.daysRowDay, children: n && S(n) }, n ? n.date.getTime() : o)) }, i);
59
+ return /* @__PURE__ */ O("div", { className: w(t.daysTable, D && t[D]), children: [
60
+ /* @__PURE__ */ r("div", { className: t.daysRow, children: /* @__PURE__ */ r(b, { children: N() }) }),
61
+ /* @__PURE__ */ r(P, { component: null, children: /* @__PURE__ */ r(
62
+ W,
67
63
  {
68
64
  timeout: 300,
69
65
  classNames: {
@@ -72,13 +68,13 @@ const ie = ({
72
68
  exit: t.daysExit,
73
69
  exitActive: t.daysExitActive
74
70
  },
75
- children: /* @__PURE__ */ n("div", { className: t.daysBody, children: b.map(S) })
71
+ children: /* @__PURE__ */ r("div", { className: t.daysBody, children: x.map(E) })
76
72
  },
77
- o.getTime()
73
+ a.getTime()
78
74
  ) })
79
75
  ] });
80
76
  };
81
77
  export {
82
- ie as DaysTable
78
+ oe as DaysTable
83
79
  };
84
80
  //# sourceMappingURL=component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sources":["../../../../src/calendar/components/days-table/component.tsx"],"sourcesContent":["import React, {\n FC, RefCallback, useCallback, useRef,\n} from 'react';\nimport { CSSTransition, TransitionGroup } from 'react-transition-group';\nimport cn from 'classnames';\nimport {\n endOfDay,\n isBefore,\n isEqual, isLastDayOfMonth, isSameDay, isToday, isWithinInterval, startOfMonth,\n} from 'date-fns';\nimport capitalize from 'lodash/capitalize';\n\nimport { Button } from '../../../button';\nimport { Flex } from '../../../flex';\nimport { usePrevious } from '../../../hooks/usePrevious';\nimport { Day } from '../../typings';\nimport { getSelectionRange } from '../../utils';\n\nimport styles from './index.module.css';\n\nexport type DaysTableProps = {\n /**\n * Массив-календарь недель\n */\n weeks?: Day[][];\n\n /**\n * Активный месяц\n */\n activeMonth?: Date;\n\n /**\n * Начало выделенного периода\n */\n selectedFrom?: Date | number;\n\n /**\n * Конец выделенного периода\n */\n selectedTo?: Date | number;\n\n /**\n * Подсвеченная дата (ховер)\n */\n highlighted?: Date | number;\n\n /**\n * Доп. пропсы для переданного дня\n */\n getDayProps: (day: Day) => Record<string, unknown> & { ref: RefCallback<HTMLButtonElement> };\n\n locale: Locale;\n\n};\n\nexport const DaysTable: FC<DaysTableProps> = ({\n weeks = [],\n activeMonth = new Date(),\n highlighted,\n selectedFrom,\n selectedTo,\n getDayProps,\n locale,\n}) => {\n const activeMonthRef = useRef(activeMonth);\n\n activeMonthRef.current = activeMonth;\n\n const prevActiveMonth = usePrevious(activeMonth);\n\n const direction = prevActiveMonth && (activeMonth < prevActiveMonth ? 'right' : 'left');\n\n const selection = getSelectionRange(selectedFrom, selectedTo, highlighted);\n\n const weekDays: string[] = Array(7).fill(1).map((i, idx) => {\n const index = idx + 1;\n\n return locale?.localize?.day(index === 7 ? 0 : index, { width: 'short' });\n });\n\n const renderHeader = useCallback(\n () =>\n weekDays.map((dayName) => (\n <div className={ styles.dayName } key={ dayName }>\n { capitalize(dayName) }\n </div>\n )),\n [weekDays],\n );\n\n const renderDay = (day: Day) => {\n const daySelected =\n day.selected ||\n (selectedFrom && isSameDay(day.date, selectedFrom)) ||\n (selectedTo && isSameDay(day.date, selectedTo));\n\n const inRange = !daySelected && selection && isWithinInterval(day.date, selection);\n\n const firstDay = day.date.getDate() === 1;\n const lastDay = isLastDayOfMonth(day.date);\n\n const transitLeft = firstDay && inRange && selection && day.date > selection.start;\n const transitRight = lastDay && inRange && selection && day.date < selection.end;\n\n const rangeStart = selection && isSameDay(day.date, selection.start);\n const rangeEnd = selection && isSameDay(day.date, selection.end);\n\n const dayProps = getDayProps(day);\n\n const prev = isBefore(endOfDay(new Date(day.date)), new Date());\n\n return (\n <Button\n { ...dayProps }\n ref={ (node) => {\n /**\n * После анимации реф-коллбэк вызывается еще раз, и в него передается null и старый activeMonth.\n * Поэтому приходится хранить актуальный месяц в рефе и сравнивать с ним.\n */\n if (startOfMonth(day.date).getTime() === activeMonthRef.current.getTime()) {\n dayProps.ref(node as HTMLButtonElement);\n }\n } }\n type=\"button\"\n view=\"ghost\"\n size=\"xs\"\n disabled={ day.disabled }\n className={ cn(styles.day, {\n [styles.selected]: daySelected,\n [styles.range]: inRange,\n [styles.rangeStart]: rangeStart,\n [styles.rangeEnd]: rangeEnd,\n [styles.transitLeft]: transitLeft,\n [styles.transitRight]: transitRight,\n [styles.today]: isToday(day.date),\n [styles.firstDay]: firstDay,\n [styles.lastDay]: lastDay,\n [styles.event]: day.event,\n [styles.prev]: prev,\n [styles.disabled]: day.disabled,\n [styles.muted]: day.muted || day.disabled,\n [styles.highlighted]: highlighted && isEqual(day.date, highlighted),\n }) }\n >\n { day.date.getDate() }\n </Button>\n );\n };\n\n const renderWeek = (week: Day[], weekIdx: number) => (\n <Flex className={ styles.weekRow } key={ weekIdx }>\n { week.map((day: Day, dayIdx: number) => (\n <div className={ styles.daysRowDay } key={ day ? day.date.getTime() : dayIdx }>{ day && renderDay(day) }</div>\n )) }\n </Flex>\n );\n\n return (\n <div className={ cn(styles.daysTable, direction && styles[direction]) }>\n <div className={ styles.daysRow }>\n <Flex>{ renderHeader() }</Flex>\n </div>\n <TransitionGroup component={ null }>\n <CSSTransition\n key={ activeMonth.getTime() }\n timeout={ 300 }\n classNames={ {\n enter: styles.daysEnter,\n enterActive: styles.daysEnterActive,\n exit: styles.daysExit,\n exitActive: styles.daysExitActive,\n } }\n >\n <div className={ styles.daysBody }>{ weeks.map(renderWeek) }</div>\n </CSSTransition>\n </TransitionGroup>\n </div>\n );\n};\n"],"names":["DaysTable","weeks","activeMonth","highlighted","selectedFrom","selectedTo","getDayProps","locale","activeMonthRef","useRef","prevActiveMonth","usePrevious","direction","selection","getSelectionRange","weekDays","i","idx","index","_a","renderHeader","useCallback","dayName","jsx","styles","capitalize","renderDay","day","daySelected","isSameDay","inRange","isWithinInterval","firstDay","lastDay","isLastDayOfMonth","transitLeft","transitRight","rangeStart","rangeEnd","dayProps","prev","isBefore","endOfDay","Button","node","startOfMonth","cn","isToday","isEqual","renderWeek","week","weekIdx","Flex","dayIdx","jsxs","TransitionGroup","CSSTransition"],"mappings":"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"}
1
+ {"version":3,"file":"component.js","sources":["../../../../src/calendar/components/days-table/component.tsx"],"sourcesContent":["import React, {\n FC, RefCallback, useCallback, useMemo, useRef,\n} from 'react';\nimport { CSSTransition, TransitionGroup } from 'react-transition-group';\nimport cn from 'classnames';\nimport {\n endOfDay,\n isBefore,\n isEqual,\n isLastDayOfMonth,\n isSameDay,\n isToday,\n isWithinInterval,\n startOfMonth,\n weekDaysShort,\n} from '../../../utils/date';\nimport capitalize from 'lodash/capitalize';\n\nimport { Button } from '../../../button';\nimport { Flex } from '../../../flex';\nimport { usePrevious } from '../../../hooks/usePrevious';\nimport { Day } from '../../typings';\nimport { getSelectionRange } from '../../utils';\n\nimport styles from './index.module.css';\n\nexport type DaysTableProps = {\n /**\n * Массив-календарь недель\n */\n weeks?: Day[][];\n\n /**\n * Активный месяц\n */\n activeMonth?: Date;\n\n /**\n * Начало выделенного периода\n */\n selectedFrom?: Date | number;\n\n /**\n * Конец выделенного периода\n */\n selectedTo?: Date | number;\n\n /**\n * Подсвеченная дата (ховер)\n */\n highlighted?: Date | number;\n\n /**\n * Доп. пропсы для переданного дня\n */\n getDayProps: (day: Day) => Record<string, unknown> & { ref: RefCallback<HTMLButtonElement> };\n\n locale: string;\n\n};\n\nexport const DaysTable: FC<DaysTableProps> = ({\n weeks = [],\n activeMonth = new Date(),\n highlighted,\n selectedFrom,\n selectedTo,\n getDayProps,\n locale,\n}) => {\n const activeMonthRef = useRef(activeMonth);\n\n activeMonthRef.current = activeMonth;\n\n const prevActiveMonth = usePrevious(activeMonth);\n\n const direction = prevActiveMonth && (activeMonth < prevActiveMonth ? 'right' : 'left');\n\n const selection = getSelectionRange(selectedFrom, selectedTo, highlighted);\n\n const weekDays = useMemo(() => weekDaysShort(locale), [locale]);\n\n const renderHeader = useCallback(\n () =>\n weekDays.map((dayName) => (\n <div className={ styles.dayName } key={ dayName }>\n { capitalize(dayName) }\n </div>\n )),\n [weekDays],\n );\n\n const renderDay = (day: Day) => {\n const daySelected =\n day.selected ||\n (selectedFrom && isSameDay(day.date, selectedFrom)) ||\n (selectedTo && isSameDay(day.date, selectedTo));\n\n const inRange = !daySelected && selection && isWithinInterval(day.date, selection);\n\n const firstDay = day.date.getDate() === 1;\n const lastDay = isLastDayOfMonth(day.date);\n\n const transitLeft = firstDay && inRange && selection && day.date > selection.start;\n const transitRight = lastDay && inRange && selection && day.date < selection.end;\n\n const rangeStart = selection && isSameDay(day.date, selection.start);\n const rangeEnd = selection && isSameDay(day.date, selection.end);\n\n const dayProps = getDayProps(day);\n\n const prev = isBefore(endOfDay(new Date(day.date)), new Date());\n\n return (\n <Button\n { ...dayProps }\n ref={ (node) => {\n /**\n * После анимации реф-коллбэк вызывается еще раз, и в него передается null и старый activeMonth.\n * Поэтому приходится хранить актуальный месяц в рефе и сравнивать с ним.\n */\n if (startOfMonth(day.date).getTime() === activeMonthRef.current.getTime()) {\n dayProps.ref(node as HTMLButtonElement);\n }\n } }\n type=\"button\"\n view=\"ghost\"\n size=\"xs\"\n disabled={ day.disabled }\n className={ cn(styles.day, {\n [styles.selected]: daySelected,\n [styles.range]: inRange,\n [styles.rangeStart]: rangeStart,\n [styles.rangeEnd]: rangeEnd,\n [styles.transitLeft]: transitLeft,\n [styles.transitRight]: transitRight,\n [styles.today]: isToday(day.date),\n [styles.firstDay]: firstDay,\n [styles.lastDay]: lastDay,\n [styles.event]: day.event,\n [styles.prev]: prev,\n [styles.disabled]: day.disabled,\n [styles.muted]: day.muted || day.disabled,\n [styles.highlighted]: highlighted && isEqual(day.date, highlighted),\n }) }\n >\n { day.date.getDate() }\n </Button>\n );\n };\n\n const renderWeek = (week: Day[], weekIdx: number) => (\n <Flex className={ styles.weekRow } key={ weekIdx }>\n { week.map((day: Day, dayIdx: number) => (\n <div className={ styles.daysRowDay } key={ day ? day.date.getTime() : dayIdx }>{ day && renderDay(day) }</div>\n )) }\n </Flex>\n );\n\n return (\n <div className={ cn(styles.daysTable, direction && styles[direction]) }>\n <div className={ styles.daysRow }>\n <Flex>{ renderHeader() }</Flex>\n </div>\n <TransitionGroup component={ null }>\n <CSSTransition\n key={ activeMonth.getTime() }\n timeout={ 300 }\n classNames={ {\n enter: styles.daysEnter,\n enterActive: styles.daysEnterActive,\n exit: styles.daysExit,\n exitActive: styles.daysExitActive,\n } }\n >\n <div className={ styles.daysBody }>{ weeks.map(renderWeek) }</div>\n </CSSTransition>\n </TransitionGroup>\n </div>\n );\n};\n"],"names":["DaysTable","weeks","activeMonth","highlighted","selectedFrom","selectedTo","getDayProps","locale","activeMonthRef","useRef","prevActiveMonth","usePrevious","direction","selection","getSelectionRange","weekDays","useMemo","weekDaysShort","renderHeader","useCallback","dayName","jsx","styles","capitalize","renderDay","day","daySelected","isSameDay","inRange","isWithinInterval","firstDay","lastDay","isLastDayOfMonth","transitLeft","transitRight","rangeStart","rangeEnd","dayProps","prev","isBefore","endOfDay","Button","node","startOfMonth","cn","isToday","isEqual","renderWeek","week","weekIdx","Flex","dayIdx","jsxs","TransitionGroup","CSSTransition"],"mappings":"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"}
@@ -13,7 +13,7 @@ export declare type MonthsTableProps = {
13
13
  * Доп пропсы для переданного месяца
14
14
  */
15
15
  getMonthProps: (day: Month) => Record<string, unknown>;
16
- selectedLocale: Locale;
16
+ selectedLocale: string;
17
17
  /** Использовать короткие названия месяцев и дней */
18
18
  shortNames: boolean;
19
19
  };
@@ -1,6 +1,6 @@
1
1
  import { jsx as l } from "react/jsx-runtime";
2
2
  import { useCallback as n, createElement as f } from "react";
3
- import { isSameMonth as p, isThisMonth as u } from "date-fns";
3
+ import { isSameMonth as p, isThisMonth as u } from "../../../utils/date/index.js";
4
4
  import c from "lodash/capitalize";
5
5
  import { FlexColumns as d } from "../../../flex-columns/component.js";
6
6
  import { monthName as b } from "../../utils.js";
@@ -1 +1 @@
1
- {"version":3,"file":"сomponent.js","sources":["../../../../src/calendar/components/months-table/сomponent.tsx"],"sourcesContent":["import React, { FC, useCallback } from 'react';\nimport { isSameMonth, isThisMonth } from 'date-fns';\nimport capitalize from 'lodash/capitalize';\n\nimport { FlexColumns } from '../../../flex-columns';\nimport { Month } from '../../typings';\nimport { monthName } from '../../utils';\nimport { SelectButton, SelectButtonProps } from '../select-button';\n\nimport styles from './index.module.css';\n\nexport type MonthsTableProps = {\n /**\n * Массив месяцев\n */\n months?: Month[];\n\n /**\n * Выбранный месяц\n */\n selectedMonth?: Date;\n\n /**\n * Доп пропсы для переданного месяца\n */\n getMonthProps: (day: Month) => Record<string, unknown>;\n\n selectedLocale: Locale;\n\n /** Использовать короткие названия месяцев и дней */\n shortNames: boolean;\n};\n\nexport const MonthsTable: FC<MonthsTableProps> = ({\n selectedMonth,\n months = [],\n getMonthProps,\n selectedLocale,\n shortNames,\n}) => {\n const view = useCallback(\n (month: Month): SelectButtonProps['view'] => {\n if (selectedMonth && isSameMonth(selectedMonth, month.date)) return 'selected';\n if (isThisMonth(month.date)) return 'outlined';\n\n return 'default';\n },\n [selectedMonth],\n );\n\n return (\n <FlexColumns columns={ 3 } gc={ 0 } gr={ 8 } className={ styles.monthsTable }>\n { months.map((month) => (\n <SelectButton\n { ...getMonthProps(month) }\n key={ month.date.getMonth() }\n className={ styles.button }\n view={ view(month) }\n >\n { capitalize(monthName(month.date, selectedLocale, shortNames)) }\n </SelectButton>\n )) }\n </FlexColumns>\n );\n};\n"],"names":["MonthsTable","selectedMonth","months","getMonthProps","selectedLocale","shortNames","view","useCallback","month","isSameMonth","isThisMonth","jsx","FlexColumns","styles","createElement","SelectButton","capitalize","monthName"],"mappings":";;;;;;;;AAiCO,MAAMA,IAAoC,CAAC;AAAA,EAC9C,eAAAC;AAAA,EACA,QAAAC,IAAS,CAAA;AAAA,EACT,eAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,YAAAC;AACJ,MAAM;AACF,QAAMC,IAAOC;AAAA,IACT,CAACC,MACOP,KAAiBQ,EAAYR,GAAeO,EAAM,IAAI,IAAU,aAChEE,EAAYF,EAAM,IAAI,IAAU,aAE7B;AAAA,IAEX,CAACP,CAAa;AAAA,EAAA;AAGlB,SACI,gBAAAU,EAACC,GAAA,EAAY,SAAU,GAAI,IAAK,GAAI,IAAK,GAAI,WAAYC,EAAO,aAC1D,UAAAX,EAAO,IAAI,CAACM,MACV,gBAAAM;AAAA,IAACC;AAAA,IAAA;AAAA,MACK,GAAGZ,EAAcK,CAAK;AAAA,MACxB,KAAMA,EAAM,KAAK,SAAA;AAAA,MACjB,WAAYK,EAAO;AAAA,MACnB,MAAOP,EAAKE,CAAK;AAAA,IAAA;AAAA,IAEfQ,EAAWC,EAAUT,EAAM,MAAMJ,GAAgBC,CAAU,CAAC;AAAA,EAAA,CAErE,GACL;AAER;"}
1
+ {"version":3,"file":"сomponent.js","sources":["../../../../src/calendar/components/months-table/сomponent.tsx"],"sourcesContent":["import React, { FC, useCallback } from 'react';\nimport { isSameMonth, isThisMonth } from '../../../utils/date';\nimport capitalize from 'lodash/capitalize';\n\nimport { FlexColumns } from '../../../flex-columns';\nimport { Month } from '../../typings';\nimport { monthName } from '../../utils';\nimport { SelectButton, SelectButtonProps } from '../select-button';\n\nimport styles from './index.module.css';\n\nexport type MonthsTableProps = {\n /**\n * Массив месяцев\n */\n months?: Month[];\n\n /**\n * Выбранный месяц\n */\n selectedMonth?: Date;\n\n /**\n * Доп пропсы для переданного месяца\n */\n getMonthProps: (day: Month) => Record<string, unknown>;\n\n selectedLocale: string;\n\n /** Использовать короткие названия месяцев и дней */\n shortNames: boolean;\n};\n\nexport const MonthsTable: FC<MonthsTableProps> = ({\n selectedMonth,\n months = [],\n getMonthProps,\n selectedLocale,\n shortNames,\n}) => {\n const view = useCallback(\n (month: Month): SelectButtonProps['view'] => {\n if (selectedMonth && isSameMonth(selectedMonth, month.date)) return 'selected';\n if (isThisMonth(month.date)) return 'outlined';\n\n return 'default';\n },\n [selectedMonth],\n );\n\n return (\n <FlexColumns columns={ 3 } gc={ 0 } gr={ 8 } className={ styles.monthsTable }>\n { months.map((month) => (\n <SelectButton\n { ...getMonthProps(month) }\n key={ month.date.getMonth() }\n className={ styles.button }\n view={ view(month) }\n >\n { capitalize(monthName(month.date, selectedLocale, shortNames)) }\n </SelectButton>\n )) }\n </FlexColumns>\n );\n};\n"],"names":["MonthsTable","selectedMonth","months","getMonthProps","selectedLocale","shortNames","view","useCallback","month","isSameMonth","isThisMonth","jsx","FlexColumns","styles","createElement","SelectButton","capitalize","monthName"],"mappings":";;;;;;;;AAiCO,MAAMA,IAAoC,CAAC;AAAA,EAC9C,eAAAC;AAAA,EACA,QAAAC,IAAS,CAAA;AAAA,EACT,eAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,YAAAC;AACJ,MAAM;AACF,QAAMC,IAAOC;AAAA,IACT,CAACC,MACOP,KAAiBQ,EAAYR,GAAeO,EAAM,IAAI,IAAU,aAChEE,EAAYF,EAAM,IAAI,IAAU,aAE7B;AAAA,IAEX,CAACP,CAAa;AAAA,EAAA;AAGlB,SACI,gBAAAU,EAACC,GAAA,EAAY,SAAU,GAAI,IAAK,GAAI,IAAK,GAAI,WAAYC,EAAO,aAC1D,UAAAX,EAAO,IAAI,CAACM,MACV,gBAAAM;AAAA,IAACC;AAAA,IAAA;AAAA,MACK,GAAGZ,EAAcK,CAAK;AAAA,MACxB,KAAMA,EAAM,KAAK,SAAA;AAAA,MACjB,WAAYK,EAAO;AAAA,MACnB,MAAOP,EAAKE,CAAK;AAAA,IAAA;AAAA,IAEfQ,EAAWC,EAAUT,EAAM,MAAMJ,GAAgBC,CAAU,CAAC;AAAA,EAAA,CAErE,GACL;AAER;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as n } from "react/jsx-runtime";
2
2
  import { useRef as d, useCallback as c, useLayoutEffect as T, createElement as b } from "react";
3
- import { isSameYear as h, isThisYear as g } from "date-fns";
3
+ import { isSameYear as h, isThisYear as g } from "../../../utils/date/index.js";
4
4
  import { SelectButton as N } from "../select-button/сomponent.js";
5
5
  import r from "./index.module.css.js";
6
6
  const E = ({
@@ -1 +1 @@
1
- {"version":3,"file":"сomponent.js","sources":["../../../../src/calendar/components/years-table/сomponent.tsx"],"sourcesContent":["import React, {\n FC, useCallback, useLayoutEffect, useRef,\n} from 'react';\nimport { isSameYear, isThisYear } from 'date-fns';\n\nimport { SelectButton, SelectButtonProps } from '../select-button';\n\nimport styles from './index.module.css';\n\nexport type YearsTableProps = {\n /**\n * Массив лет\n */\n years?: Date[];\n\n /**\n * Выбранный год\n */\n selectedYear?: Date;\n\n /**\n * Доп. пропсы для переданного года\n */\n getYearProps: (year: Date) => Record<string, unknown>;\n\n /**\n * Обработчик скролла\n */\n onScroll: (scrollTop: number) => void;\n};\n\nexport const YearsTable: FC<YearsTableProps> = ({\n selectedYear,\n years = [],\n getYearProps,\n onScroll,\n}) => {\n const ref = useRef<HTMLDivElement>(null);\n\n const view = useCallback(\n (year: Date): SelectButtonProps['view'] => {\n if (selectedYear && isSameYear(selectedYear, year)) return 'selected';\n if (isThisYear(year)) return 'outlined';\n\n return 'default';\n },\n [selectedYear],\n );\n\n const handleScroll = useCallback(\n (event: React.UIEvent<HTMLDivElement>) => {\n onScroll(event.currentTarget.scrollTop);\n },\n [onScroll],\n );\n\n useLayoutEffect(() => {\n const listNode = ref.current;\n const selector = `.${styles.button}[tabIndex=\"0\"]`;\n const selectedYearNode = listNode && listNode.querySelector<HTMLButtonElement>(selector);\n\n if (listNode && selectedYearNode) {\n const topIndent = listNode.clientHeight / 2 - selectedYearNode.clientHeight / 2;\n\n listNode.scrollTop = selectedYearNode.offsetTop - topIndent;\n\n onScroll(listNode.scrollTop);\n }\n }, [onScroll, selectedYear]);\n\n return (\n <div className={ styles.yearsTable } onScroll={ handleScroll } ref={ ref }>\n <div className={ styles.inner }>\n { years.map((year) => (\n <SelectButton\n { ...getYearProps(year) }\n key={ year.getFullYear() }\n view={ view(year) }\n className={ styles.button }\n >\n { year.getFullYear() }\n </SelectButton>\n )) }\n </div>\n </div>\n );\n};\n"],"names":["YearsTable","selectedYear","years","getYearProps","onScroll","ref","useRef","view","useCallback","year","isSameYear","isThisYear","handleScroll","event","useLayoutEffect","listNode","selector","styles","selectedYearNode","topIndent","jsx","createElement","SelectButton"],"mappings":";;;;;AA+BO,MAAMA,IAAkC,CAAC;AAAA,EAC5C,cAAAC;AAAA,EACA,OAAAC,IAAQ,CAAA;AAAA,EACR,cAAAC;AAAA,EACA,UAAAC;AACJ,MAAM;AACF,QAAMC,IAAMC,EAAuB,IAAI,GAEjCC,IAAOC;AAAA,IACT,CAACC,MACOR,KAAgBS,EAAWT,GAAcQ,CAAI,IAAU,aACvDE,EAAWF,CAAI,IAAU,aAEtB;AAAA,IAEX,CAACR,CAAY;AAAA,EAAA,GAGXW,IAAeJ;AAAA,IACjB,CAACK,MAAyC;AACtC,MAAAT,EAASS,EAAM,cAAc,SAAS;AAAA,IAC1C;AAAA,IACA,CAACT,CAAQ;AAAA,EAAA;AAGb,SAAAU,EAAgB,MAAM;AAClB,UAAMC,IAAWV,EAAI,SACfW,IAAW,IAAIC,EAAO,MAAM,kBAC5BC,IAAmBH,KAAYA,EAAS,cAAiCC,CAAQ;AAEvF,QAAID,KAAYG,GAAkB;AAC9B,YAAMC,IAAYJ,EAAS,eAAe,IAAIG,EAAiB,eAAe;AAE9E,MAAAH,EAAS,YAAYG,EAAiB,YAAYC,GAElDf,EAASW,EAAS,SAAS;AAAA,IAC/B;AAAA,EACJ,GAAG,CAACX,GAAUH,CAAY,CAAC,qBAGtB,OAAA,EAAI,WAAYgB,EAAO,YAAa,UAAWL,GAAe,KAAAP,GAC3D,UAAA,gBAAAe,EAAC,OAAA,EAAI,WAAYH,EAAO,OAClB,UAAAf,EAAM,IAAI,CAACO,MACT,gBAAAY;AAAA,IAACC;AAAA,IAAA;AAAA,MACK,GAAGnB,EAAaM,CAAI;AAAA,MACtB,KAAMA,EAAK,YAAA;AAAA,MACX,MAAOF,EAAKE,CAAI;AAAA,MAChB,WAAYQ,EAAO;AAAA,IAAA;AAAA,IAEjBR,EAAK,YAAA;AAAA,EAAY,CAE1B,GACL,EAAA,CACJ;AAER;"}
1
+ {"version":3,"file":"сomponent.js","sources":["../../../../src/calendar/components/years-table/сomponent.tsx"],"sourcesContent":["import React, {\n FC, useCallback, useLayoutEffect, useRef,\n} from 'react';\nimport { isSameYear, isThisYear } from '../../../utils/date';\n\nimport { SelectButton, SelectButtonProps } from '../select-button';\n\nimport styles from './index.module.css';\n\nexport type YearsTableProps = {\n /**\n * Массив лет\n */\n years?: Date[];\n\n /**\n * Выбранный год\n */\n selectedYear?: Date;\n\n /**\n * Доп. пропсы для переданного года\n */\n getYearProps: (year: Date) => Record<string, unknown>;\n\n /**\n * Обработчик скролла\n */\n onScroll: (scrollTop: number) => void;\n};\n\nexport const YearsTable: FC<YearsTableProps> = ({\n selectedYear,\n years = [],\n getYearProps,\n onScroll,\n}) => {\n const ref = useRef<HTMLDivElement>(null);\n\n const view = useCallback(\n (year: Date): SelectButtonProps['view'] => {\n if (selectedYear && isSameYear(selectedYear, year)) return 'selected';\n if (isThisYear(year)) return 'outlined';\n\n return 'default';\n },\n [selectedYear],\n );\n\n const handleScroll = useCallback(\n (event: React.UIEvent<HTMLDivElement>) => {\n onScroll(event.currentTarget.scrollTop);\n },\n [onScroll],\n );\n\n useLayoutEffect(() => {\n const listNode = ref.current;\n const selector = `.${styles.button}[tabIndex=\"0\"]`;\n const selectedYearNode = listNode && listNode.querySelector<HTMLButtonElement>(selector);\n\n if (listNode && selectedYearNode) {\n const topIndent = listNode.clientHeight / 2 - selectedYearNode.clientHeight / 2;\n\n listNode.scrollTop = selectedYearNode.offsetTop - topIndent;\n\n onScroll(listNode.scrollTop);\n }\n }, [onScroll, selectedYear]);\n\n return (\n <div className={ styles.yearsTable } onScroll={ handleScroll } ref={ ref }>\n <div className={ styles.inner }>\n { years.map((year) => (\n <SelectButton\n { ...getYearProps(year) }\n key={ year.getFullYear() }\n view={ view(year) }\n className={ styles.button }\n >\n { year.getFullYear() }\n </SelectButton>\n )) }\n </div>\n </div>\n );\n};\n"],"names":["YearsTable","selectedYear","years","getYearProps","onScroll","ref","useRef","view","useCallback","year","isSameYear","isThisYear","handleScroll","event","useLayoutEffect","listNode","selector","styles","selectedYearNode","topIndent","jsx","createElement","SelectButton"],"mappings":";;;;;AA+BO,MAAMA,IAAkC,CAAC;AAAA,EAC5C,cAAAC;AAAA,EACA,OAAAC,IAAQ,CAAA;AAAA,EACR,cAAAC;AAAA,EACA,UAAAC;AACJ,MAAM;AACF,QAAMC,IAAMC,EAAuB,IAAI,GAEjCC,IAAOC;AAAA,IACT,CAACC,MACOR,KAAgBS,EAAWT,GAAcQ,CAAI,IAAU,aACvDE,EAAWF,CAAI,IAAU,aAEtB;AAAA,IAEX,CAACR,CAAY;AAAA,EAAA,GAGXW,IAAeJ;AAAA,IACjB,CAACK,MAAyC;AACtC,MAAAT,EAASS,EAAM,cAAc,SAAS;AAAA,IAC1C;AAAA,IACA,CAACT,CAAQ;AAAA,EAAA;AAGb,SAAAU,EAAgB,MAAM;AAClB,UAAMC,IAAWV,EAAI,SACfW,IAAW,IAAIC,EAAO,MAAM,kBAC5BC,IAAmBH,KAAYA,EAAS,cAAiCC,CAAQ;AAEvF,QAAID,KAAYG,GAAkB;AAC9B,YAAMC,IAAYJ,EAAS,eAAe,IAAIG,EAAiB,eAAe;AAE9E,MAAAH,EAAS,YAAYG,EAAiB,YAAYC,GAElDf,EAASW,EAAS,SAAS;AAAA,IAC/B;AAAA,EACJ,GAAG,CAACX,GAAUH,CAAY,CAAC,qBAGtB,OAAA,EAAI,WAAYgB,EAAO,YAAa,UAAWL,GAAe,KAAAP,GAC3D,UAAA,gBAAAe,EAAC,OAAA,EAAI,WAAYH,EAAO,OAClB,UAAAf,EAAM,IAAI,CAACO,MACT,gBAAAY;AAAA,IAACC;AAAA,IAAA;AAAA,MACK,GAAGnB,EAAaM,CAAI;AAAA,MACtB,KAAMA,EAAK,YAAA;AAAA,MACX,MAAOF,EAAKE,CAAI;AAAA,MAChB,WAAYQ,EAAO;AAAA,IAAA;AAAA,IAEjBR,EAAK,YAAA;AAAA,EAAY,CAE1B,GACL,EAAA,CACJ;AAER;"}
@@ -1,6 +1,6 @@
1
1
  import { useState as O, useRef as nt, useMemo as c, useCallback as o } from "react";
2
2
  import Tt from "react-merge-refs";
3
- import { startOfMonth as rt, startOfYear as at, subYears as Dt, addMonths as Rt, addYears as mt, isSameDay as Ft, isSameMonth as ct } from "date-fns";
3
+ import { startOfMonth as rt, startOfYear as at, subYears as Dt, addMonths as Rt, addYears as mt, isSameDay as Ft, isSameMonth as ct } from "../utils/date/index.js";
4
4
  import { dateArrayToHashTable as dt, generateWeeks as Nt, generateMonths as Pt, generateYears as It, limitDate as W, simulateTab as Bt, modifyDateByShift as Et, MONTHS_IN_YEAR as Lt } from "./utils.js";
5
5
  function Ut({
6
6
  defaultMonth: C,
@@ -1 +1 @@
1
- {"version":3,"file":"use-calendar.js","sources":["../../src/calendar/use-calendar.ts"],"sourcesContent":["import {\n KeyboardEvent, MouseEvent, Ref, useCallback, useMemo, useRef, useState,\n} from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport {\n addMonths,\n addYears,\n isSameDay,\n isSameMonth,\n startOfMonth,\n startOfYear,\n subYears,\n} from 'date-fns';\n\nimport {\n DateShift, Day, Month, View,\n} from './typings';\nimport {\n dateArrayToHashTable,\n generateMonths,\n generateWeeks,\n generateYears,\n limitDate,\n modifyDateByShift,\n MONTHS_IN_YEAR,\n simulateTab,\n} from './utils';\n\nexport type UseCalendarProps = {\n /**\n * Активный вид (выбор дней, месяцев, лет)\n */\n view?: View;\n\n /**\n * Выбранный месяц (controlled)\n */\n month?: Date;\n\n /**\n * Выбранный месяц (controlled)\n */\n year?: Date;\n\n /**\n * Начальный месяц\n */\n defaultMonth: Date;\n\n /**\n * Минимальная дата, доступная для выбора\n */\n minDate?: Date;\n\n /**\n * Максимальная дата, доступная для выбора\n */\n maxDate?: Date;\n\n /**\n * Выбранная дата\n */\n selected?: Date;\n\n /**\n * Список событий\n */\n events?: Array<Date | number>;\n\n /**\n * Список выходных дней\n */\n offDays?: Array<Date | number>;\n\n /**\n * Обработчик изменения месяца (или года)\n */\n onMonthChange?: (month: number) => void;\n\n /**\n * Обработчик изменения месяца (или года)\n */\n onYearChange?: (year: number) => void;\n\n /**\n * Обработчик выбора даты\n */\n onChange?: (date: number) => void;\n\n /**\n * Calendar view handler\n */\n setView: (value: View) => void;\n};\n\nexport function useCalendar({\n defaultMonth,\n month,\n minDate,\n view = 'days',\n maxDate,\n selected,\n events,\n offDays,\n onMonthChange,\n onYearChange,\n onChange,\n setView,\n}: UseCalendarProps) {\n const [monthState, setMonthState] = useState(defaultMonth);\n const [yearState, setYearState] = useState(defaultMonth);\n const [highlighted, setHighlighted] = useState<Date | number>();\n\n const uncontrolled = month === undefined;\n\n const activeMonth = uncontrolled ? monthState : (month as Date);\n const activeYear = uncontrolled ? yearState : (month as Date);\n\n const dateRefs = useRef<HTMLButtonElement[]>([]);\n const rootRef = useRef<HTMLDivElement>(null);\n\n const minMonth = useMemo(() => minDate && startOfMonth(minDate), [minDate]);\n const maxMonth = useMemo(() => maxDate && startOfMonth(maxDate), [maxDate]);\n\n const minYear = useMemo(() => minDate && startOfYear(minDate), [minDate]);\n const maxYear = useMemo(() => maxDate && startOfYear(maxDate), [maxDate]);\n\n const canSetPrevMonth = minMonth ? activeMonth > minMonth : true;\n const canSetNextMonth = maxMonth ? activeMonth < maxMonth : true;\n\n const eventsMap = useMemo(() => dateArrayToHashTable(events || []), [events]);\n\n const offDaysMap = useMemo(() => dateArrayToHashTable(offDays || []), [offDays]);\n\n const weeks = useMemo(\n () =>\n generateWeeks(activeMonth, {\n minDate,\n maxDate,\n selected,\n eventsMap,\n offDaysMap,\n }),\n [maxDate, minDate, selected, activeMonth, eventsMap, offDaysMap],\n );\n\n const months = useMemo(\n () => generateMonths(activeYear, { minMonth, maxMonth }),\n [minMonth, maxMonth, activeYear],\n );\n\n const years = useMemo(\n () => generateYears(minDate || subYears(new Date(), 5), maxDate || new Date()),\n [minDate, maxDate],\n );\n\n const setMonth = useCallback(\n (newMonth: Date) => {\n if (uncontrolled) {\n setMonthState(newMonth);\n setYearState(newMonth);\n }\n\n if (onMonthChange) {\n onMonthChange(newMonth.getTime());\n }\n },\n [onMonthChange, uncontrolled],\n );\n\n const handleSetYear = useCallback(\n (newYear: Date) => {\n if (uncontrolled) {\n setYearState(newYear);\n }\n\n if (onYearChange) {\n onYearChange(newYear.getTime());\n }\n },\n [onYearChange, uncontrolled],\n );\n\n const setMonthByStep = useCallback(\n (step: number) => {\n setMonth(limitDate(addMonths(activeMonth, step), minMonth, maxMonth));\n },\n [setMonth, activeMonth, minMonth, maxMonth],\n );\n\n const setYearByStep = useCallback(\n (step: number) => {\n handleSetYear(limitDate(addYears(activeYear, step), minYear, maxYear));\n },\n [handleSetYear, activeYear, minYear, maxYear],\n );\n\n const setMonthByDate = useCallback(\n (newMonth: Date) => {\n setMonth(limitDate(newMonth, minMonth, maxMonth));\n },\n [maxMonth, minMonth, setMonth],\n );\n\n const setNextMonth = useCallback(() => {\n setMonthByStep(1);\n }, [setMonthByStep]);\n\n const setPrevMonth = useCallback(() => {\n setMonthByStep(-1);\n }, [setMonthByStep]);\n\n const setNextYear = useCallback(() => {\n setYearByStep(1);\n }, [setYearByStep]);\n\n const setPrevYear = useCallback(() => {\n setYearByStep(-1);\n }, [setYearByStep]);\n\n const getFocusedDate = useCallback(\n () => dateRefs.current.find((node) => document.activeElement === node),\n [],\n );\n\n const getFocusableDate = useCallback(\n () => dateRefs.current.find((node) => node && node.tabIndex === 0),\n [],\n );\n\n const focusDate = useCallback((node?: HTMLElement) => {\n if (node) {\n simulateTab(node);\n node.focus();\n }\n }, []);\n\n const focusFirstAvailableDate = useCallback(\n () => focusDate(getFocusableDate()),\n [focusDate, getFocusableDate],\n );\n\n const focusDay = useCallback(\n (shift: DateShift) => {\n const focusedNode = getFocusedDate();\n\n if (focusedNode && focusedNode.dataset.date) {\n const focusedDate = new Date(+focusedNode.dataset.date);\n const newDate = modifyDateByShift(shift, focusedDate, minDate, maxDate, offDaysMap);\n\n let monthChanged = false;\n\n if (newDate < focusedDate && newDate.getMonth() !== focusedDate.getMonth()) {\n setPrevMonth();\n monthChanged = true;\n }\n\n if (newDate > focusedDate && newDate.getMonth() !== focusedDate.getMonth()) {\n setNextMonth();\n monthChanged = true;\n }\n\n const effect = () => focusDate(dateRefs.current[newDate.getDate() - 1]);\n\n if (monthChanged) {\n setTimeout(effect, 0);\n } else {\n effect();\n }\n } else {\n focusFirstAvailableDate();\n }\n },\n [\n focusDate,\n focusFirstAvailableDate,\n getFocusedDate,\n maxDate,\n minDate,\n offDaysMap,\n setNextMonth,\n setPrevMonth,\n ],\n );\n\n const focusMonth = useCallback(\n (offset: number) => {\n const focusedNode = getFocusedDate();\n\n if (focusedNode && focusedNode.dataset.date) {\n const focusedMonth = new Date(+focusedNode.dataset.date).getMonth();\n const newFocusedMonth = focusedMonth + offset;\n\n if (newFocusedMonth >= 0 && newFocusedMonth < MONTHS_IN_YEAR) {\n focusDate(dateRefs.current[newFocusedMonth]);\n }\n } else {\n focusFirstAvailableDate();\n }\n },\n [focusDate, focusFirstAvailableDate, getFocusedDate],\n );\n\n const focusYear = useCallback(\n (offset: number) => {\n const focusedNode = getFocusedDate();\n\n if (focusedNode && focusedNode.dataset.date) {\n const focusedYear = new Date(+focusedNode.dataset.date).getFullYear();\n const newFocusedYear = focusedYear + offset;\n const currentYear = new Date().getFullYear();\n\n if (newFocusedYear <= currentYear && newFocusedYear > currentYear - years.length) {\n focusDate(dateRefs.current[newFocusedYear]);\n }\n } else {\n focusFirstAvailableDate();\n }\n },\n [focusDate, focusFirstAvailableDate, getFocusedDate, years.length],\n );\n\n const handleMonthClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n const { date } = (event.currentTarget as HTMLButtonElement).dataset;\n\n if (date) {\n setMonthByDate(new Date(+date));\n }\n\n if (rootRef.current) rootRef.current.focus();\n },\n [setMonthByDate],\n );\n\n const handleDateRef = useCallback((node: HTMLButtonElement, index: number) => {\n dateRefs.current[index] = node;\n }, []);\n\n const handleDayMouseEnter = useCallback((event: MouseEvent<HTMLButtonElement>) => {\n const { date } = (event.currentTarget as HTMLButtonElement).dataset;\n\n setHighlighted(date ? +date : undefined);\n }, []);\n\n const handleDayMouseLeave = useCallback(() => {\n setHighlighted(undefined);\n }, []);\n\n const handleDayClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n const { date } = (event.currentTarget as HTMLButtonElement).dataset;\n\n if (date && onChange) {\n onChange(+date);\n }\n },\n [onChange],\n );\n\n const daysControls = useMemo(\n (): { [key: string]: () => void } => ({\n ArrowLeft: () => focusDay('prev'),\n ArrowRight: () => focusDay('next'),\n ArrowUp: () => focusDay('prevWeek'),\n ArrowDown: () => focusDay('nextWeek'),\n End: () => focusDay('endOfWeek'),\n Home: () => focusDay('startOfWeek'),\n PageUp: () => focusDay('prevMonth'),\n PageDown: () => focusDay('nextMonth'),\n }),\n [focusDay],\n );\n\n const monthControls = useMemo(\n (): { [key: string]: () => void } => ({\n ArrowLeft: () => focusMonth(-1),\n ArrowRight: () => focusMonth(1),\n ArrowUp: () => focusMonth(-3),\n ArrowDown: () => focusMonth(3),\n }),\n [focusMonth],\n );\n\n const yearsControls = useMemo(\n (): { [key: string]: () => void } => ({\n ArrowLeft: () => focusYear(1),\n ArrowRight: () => focusYear(-1),\n ArrowUp: () => focusYear(3),\n ArrowDown: () => focusYear(-3),\n }),\n [focusYear],\n );\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const controlsByView = {\n days: daysControls,\n months: monthControls,\n years: yearsControls,\n };\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const controls = controlsByView[view];\n\n if (event.key in controls) {\n controls[event.key]();\n event.preventDefault();\n }\n },\n [controlsByView, view],\n );\n\n let focusableDayIsSet = false;\n\n const getDayProps = useCallback(\n (day: Day) => {\n const daySelected = selected && isSameDay(selected, day.date);\n let canFocus = daySelected;\n\n // Если день не выбран — фокус должен начинаться с первого доступного дня месяца\n if (\n (!selected || !isSameMonth(selected, activeMonth)) &&\n !focusableDayIsSet &&\n !day.disabled\n ) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n focusableDayIsSet = true;\n canFocus = true;\n }\n\n return {\n 'data-date': day.date.getTime(),\n 'aria-selected': daySelected,\n ref: (node: HTMLButtonElement) => {\n handleDateRef(node, day.date.getDate() - 1);\n },\n tabIndex: canFocus ? 0 : -1,\n onMouseEnter: handleDayMouseEnter,\n onMouseLeave: handleDayMouseLeave,\n onClick: handleDayClick,\n };\n },\n [\n handleDayClick,\n handleDateRef,\n handleKeyDown,\n handleDayMouseEnter,\n handleDayMouseLeave,\n selected,\n ],\n );\n\n const getMonthProps = useCallback(\n (selectedMonth: Month) => {\n const monthselected = isSameMonth(activeMonth, selectedMonth.date);\n\n return {\n 'data-date': selectedMonth.date.getTime(),\n 'aria-selected': monthselected,\n ref: (node: HTMLButtonElement) => {\n handleDateRef(node, selectedMonth.date.getMonth());\n },\n tabIndex: monthselected ? 0 : -1,\n disabled: selectedMonth.disabled,\n onClick: (e: MouseEvent<HTMLButtonElement>) => {\n handleMonthClick(e);\n setView('days');\n },\n };\n },\n [activeMonth, handleDateRef, handleMonthClick, setView],\n );\n\n const getRootProps = useCallback(\n ({ ref = null }: { ref?: Ref<HTMLDivElement> }) => ({\n onKeyDown: handleKeyDown,\n ref: mergeRefs([ref, rootRef]),\n tabIndex: -1,\n }),\n [handleKeyDown],\n );\n\n return {\n activeMonth,\n activeYear,\n weeks,\n months,\n canSetPrevMonth,\n canSetNextMonth,\n highlighted,\n setPrevMonth,\n setNextMonth,\n setNextYear,\n setPrevYear,\n setMonthByDate,\n getDayProps,\n getMonthProps,\n getRootProps,\n };\n}\n"],"names":["useCalendar","defaultMonth","month","minDate","view","maxDate","selected","events","offDays","onMonthChange","onYearChange","onChange","setView","monthState","setMonthState","useState","yearState","setYearState","highlighted","setHighlighted","uncontrolled","activeMonth","activeYear","dateRefs","useRef","rootRef","minMonth","useMemo","startOfMonth","maxMonth","minYear","startOfYear","maxYear","canSetPrevMonth","canSetNextMonth","eventsMap","dateArrayToHashTable","offDaysMap","weeks","generateWeeks","months","generateMonths","years","generateYears","subYears","setMonth","useCallback","newMonth","handleSetYear","newYear","setMonthByStep","step","limitDate","addMonths","setYearByStep","addYears","setMonthByDate","setNextMonth","setPrevMonth","setNextYear","setPrevYear","getFocusedDate","node","getFocusableDate","focusDate","simulateTab","focusFirstAvailableDate","focusDay","shift","focusedNode","focusedDate","newDate","modifyDateByShift","monthChanged","effect","focusMonth","offset","newFocusedMonth","MONTHS_IN_YEAR","focusYear","newFocusedYear","currentYear","handleMonthClick","event","date","handleDateRef","index","handleDayMouseEnter","handleDayMouseLeave","handleDayClick","daysControls","monthControls","yearsControls","controlsByView","handleKeyDown","controls","focusableDayIsSet","getDayProps","day","daySelected","isSameDay","canFocus","isSameMonth","getMonthProps","selectedMonth","monthselected","e","getRootProps","ref","mergeRefs"],"mappings":"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"}
1
+ {"version":3,"file":"use-calendar.js","sources":["../../src/calendar/use-calendar.ts"],"sourcesContent":["import {\n KeyboardEvent, MouseEvent, Ref, useCallback, useMemo, useRef, useState,\n} from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport {\n addMonths,\n addYears,\n isSameDay,\n isSameMonth,\n startOfMonth,\n startOfYear,\n subYears,\n} from '../utils/date';\n\nimport {\n DateShift, Day, Month, View,\n} from './typings';\nimport {\n dateArrayToHashTable,\n generateMonths,\n generateWeeks,\n generateYears,\n limitDate,\n modifyDateByShift,\n MONTHS_IN_YEAR,\n simulateTab,\n} from './utils';\n\nexport type UseCalendarProps = {\n /**\n * Активный вид (выбор дней, месяцев, лет)\n */\n view?: View;\n\n /**\n * Выбранный месяц (controlled)\n */\n month?: Date;\n\n /**\n * Выбранный месяц (controlled)\n */\n year?: Date;\n\n /**\n * Начальный месяц\n */\n defaultMonth: Date;\n\n /**\n * Минимальная дата, доступная для выбора\n */\n minDate?: Date;\n\n /**\n * Максимальная дата, доступная для выбора\n */\n maxDate?: Date;\n\n /**\n * Выбранная дата\n */\n selected?: Date;\n\n /**\n * Список событий\n */\n events?: Array<Date | number>;\n\n /**\n * Список выходных дней\n */\n offDays?: Array<Date | number>;\n\n /**\n * Обработчик изменения месяца (или года)\n */\n onMonthChange?: (month: number) => void;\n\n /**\n * Обработчик изменения месяца (или года)\n */\n onYearChange?: (year: number) => void;\n\n /**\n * Обработчик выбора даты\n */\n onChange?: (date: number) => void;\n\n /**\n * Calendar view handler\n */\n setView: (value: View) => void;\n};\n\nexport function useCalendar({\n defaultMonth,\n month,\n minDate,\n view = 'days',\n maxDate,\n selected,\n events,\n offDays,\n onMonthChange,\n onYearChange,\n onChange,\n setView,\n}: UseCalendarProps) {\n const [monthState, setMonthState] = useState(defaultMonth);\n const [yearState, setYearState] = useState(defaultMonth);\n const [highlighted, setHighlighted] = useState<Date | number>();\n\n const uncontrolled = month === undefined;\n\n const activeMonth = uncontrolled ? monthState : (month as Date);\n const activeYear = uncontrolled ? yearState : (month as Date);\n\n const dateRefs = useRef<HTMLButtonElement[]>([]);\n const rootRef = useRef<HTMLDivElement>(null);\n\n const minMonth = useMemo(() => minDate && startOfMonth(minDate), [minDate]);\n const maxMonth = useMemo(() => maxDate && startOfMonth(maxDate), [maxDate]);\n\n const minYear = useMemo(() => minDate && startOfYear(minDate), [minDate]);\n const maxYear = useMemo(() => maxDate && startOfYear(maxDate), [maxDate]);\n\n const canSetPrevMonth = minMonth ? activeMonth > minMonth : true;\n const canSetNextMonth = maxMonth ? activeMonth < maxMonth : true;\n\n const eventsMap = useMemo(() => dateArrayToHashTable(events || []), [events]);\n\n const offDaysMap = useMemo(() => dateArrayToHashTable(offDays || []), [offDays]);\n\n const weeks = useMemo(\n () =>\n generateWeeks(activeMonth, {\n minDate,\n maxDate,\n selected,\n eventsMap,\n offDaysMap,\n }),\n [maxDate, minDate, selected, activeMonth, eventsMap, offDaysMap],\n );\n\n const months = useMemo(\n () => generateMonths(activeYear, { minMonth, maxMonth }),\n [minMonth, maxMonth, activeYear],\n );\n\n const years = useMemo(\n () => generateYears(minDate || subYears(new Date(), 5), maxDate || new Date()),\n [minDate, maxDate],\n );\n\n const setMonth = useCallback(\n (newMonth: Date) => {\n if (uncontrolled) {\n setMonthState(newMonth);\n setYearState(newMonth);\n }\n\n if (onMonthChange) {\n onMonthChange(newMonth.getTime());\n }\n },\n [onMonthChange, uncontrolled],\n );\n\n const handleSetYear = useCallback(\n (newYear: Date) => {\n if (uncontrolled) {\n setYearState(newYear);\n }\n\n if (onYearChange) {\n onYearChange(newYear.getTime());\n }\n },\n [onYearChange, uncontrolled],\n );\n\n const setMonthByStep = useCallback(\n (step: number) => {\n setMonth(limitDate(addMonths(activeMonth, step), minMonth, maxMonth));\n },\n [setMonth, activeMonth, minMonth, maxMonth],\n );\n\n const setYearByStep = useCallback(\n (step: number) => {\n handleSetYear(limitDate(addYears(activeYear, step), minYear, maxYear));\n },\n [handleSetYear, activeYear, minYear, maxYear],\n );\n\n const setMonthByDate = useCallback(\n (newMonth: Date) => {\n setMonth(limitDate(newMonth, minMonth, maxMonth));\n },\n [maxMonth, minMonth, setMonth],\n );\n\n const setNextMonth = useCallback(() => {\n setMonthByStep(1);\n }, [setMonthByStep]);\n\n const setPrevMonth = useCallback(() => {\n setMonthByStep(-1);\n }, [setMonthByStep]);\n\n const setNextYear = useCallback(() => {\n setYearByStep(1);\n }, [setYearByStep]);\n\n const setPrevYear = useCallback(() => {\n setYearByStep(-1);\n }, [setYearByStep]);\n\n const getFocusedDate = useCallback(\n () => dateRefs.current.find((node) => document.activeElement === node),\n [],\n );\n\n const getFocusableDate = useCallback(\n () => dateRefs.current.find((node) => node && node.tabIndex === 0),\n [],\n );\n\n const focusDate = useCallback((node?: HTMLElement) => {\n if (node) {\n simulateTab(node);\n node.focus();\n }\n }, []);\n\n const focusFirstAvailableDate = useCallback(\n () => focusDate(getFocusableDate()),\n [focusDate, getFocusableDate],\n );\n\n const focusDay = useCallback(\n (shift: DateShift) => {\n const focusedNode = getFocusedDate();\n\n if (focusedNode && focusedNode.dataset.date) {\n const focusedDate = new Date(+focusedNode.dataset.date);\n const newDate = modifyDateByShift(shift, focusedDate, minDate, maxDate, offDaysMap);\n\n let monthChanged = false;\n\n if (newDate < focusedDate && newDate.getMonth() !== focusedDate.getMonth()) {\n setPrevMonth();\n monthChanged = true;\n }\n\n if (newDate > focusedDate && newDate.getMonth() !== focusedDate.getMonth()) {\n setNextMonth();\n monthChanged = true;\n }\n\n const effect = () => focusDate(dateRefs.current[newDate.getDate() - 1]);\n\n if (monthChanged) {\n setTimeout(effect, 0);\n } else {\n effect();\n }\n } else {\n focusFirstAvailableDate();\n }\n },\n [\n focusDate,\n focusFirstAvailableDate,\n getFocusedDate,\n maxDate,\n minDate,\n offDaysMap,\n setNextMonth,\n setPrevMonth,\n ],\n );\n\n const focusMonth = useCallback(\n (offset: number) => {\n const focusedNode = getFocusedDate();\n\n if (focusedNode && focusedNode.dataset.date) {\n const focusedMonth = new Date(+focusedNode.dataset.date).getMonth();\n const newFocusedMonth = focusedMonth + offset;\n\n if (newFocusedMonth >= 0 && newFocusedMonth < MONTHS_IN_YEAR) {\n focusDate(dateRefs.current[newFocusedMonth]);\n }\n } else {\n focusFirstAvailableDate();\n }\n },\n [focusDate, focusFirstAvailableDate, getFocusedDate],\n );\n\n const focusYear = useCallback(\n (offset: number) => {\n const focusedNode = getFocusedDate();\n\n if (focusedNode && focusedNode.dataset.date) {\n const focusedYear = new Date(+focusedNode.dataset.date).getFullYear();\n const newFocusedYear = focusedYear + offset;\n const currentYear = new Date().getFullYear();\n\n if (newFocusedYear <= currentYear && newFocusedYear > currentYear - years.length) {\n focusDate(dateRefs.current[newFocusedYear]);\n }\n } else {\n focusFirstAvailableDate();\n }\n },\n [focusDate, focusFirstAvailableDate, getFocusedDate, years.length],\n );\n\n const handleMonthClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n const { date } = (event.currentTarget as HTMLButtonElement).dataset;\n\n if (date) {\n setMonthByDate(new Date(+date));\n }\n\n if (rootRef.current) rootRef.current.focus();\n },\n [setMonthByDate],\n );\n\n const handleDateRef = useCallback((node: HTMLButtonElement, index: number) => {\n dateRefs.current[index] = node;\n }, []);\n\n const handleDayMouseEnter = useCallback((event: MouseEvent<HTMLButtonElement>) => {\n const { date } = (event.currentTarget as HTMLButtonElement).dataset;\n\n setHighlighted(date ? +date : undefined);\n }, []);\n\n const handleDayMouseLeave = useCallback(() => {\n setHighlighted(undefined);\n }, []);\n\n const handleDayClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n const { date } = (event.currentTarget as HTMLButtonElement).dataset;\n\n if (date && onChange) {\n onChange(+date);\n }\n },\n [onChange],\n );\n\n const daysControls = useMemo(\n (): { [key: string]: () => void } => ({\n ArrowLeft: () => focusDay('prev'),\n ArrowRight: () => focusDay('next'),\n ArrowUp: () => focusDay('prevWeek'),\n ArrowDown: () => focusDay('nextWeek'),\n End: () => focusDay('endOfWeek'),\n Home: () => focusDay('startOfWeek'),\n PageUp: () => focusDay('prevMonth'),\n PageDown: () => focusDay('nextMonth'),\n }),\n [focusDay],\n );\n\n const monthControls = useMemo(\n (): { [key: string]: () => void } => ({\n ArrowLeft: () => focusMonth(-1),\n ArrowRight: () => focusMonth(1),\n ArrowUp: () => focusMonth(-3),\n ArrowDown: () => focusMonth(3),\n }),\n [focusMonth],\n );\n\n const yearsControls = useMemo(\n (): { [key: string]: () => void } => ({\n ArrowLeft: () => focusYear(1),\n ArrowRight: () => focusYear(-1),\n ArrowUp: () => focusYear(3),\n ArrowDown: () => focusYear(-3),\n }),\n [focusYear],\n );\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const controlsByView = {\n days: daysControls,\n months: monthControls,\n years: yearsControls,\n };\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const controls = controlsByView[view];\n\n if (event.key in controls) {\n controls[event.key]();\n event.preventDefault();\n }\n },\n [controlsByView, view],\n );\n\n let focusableDayIsSet = false;\n\n const getDayProps = useCallback(\n (day: Day) => {\n const daySelected = selected && isSameDay(selected, day.date);\n let canFocus = daySelected;\n\n // Если день не выбран — фокус должен начинаться с первого доступного дня месяца\n if (\n (!selected || !isSameMonth(selected, activeMonth)) &&\n !focusableDayIsSet &&\n !day.disabled\n ) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n focusableDayIsSet = true;\n canFocus = true;\n }\n\n return {\n 'data-date': day.date.getTime(),\n 'aria-selected': daySelected,\n ref: (node: HTMLButtonElement) => {\n handleDateRef(node, day.date.getDate() - 1);\n },\n tabIndex: canFocus ? 0 : -1,\n onMouseEnter: handleDayMouseEnter,\n onMouseLeave: handleDayMouseLeave,\n onClick: handleDayClick,\n };\n },\n [\n handleDayClick,\n handleDateRef,\n handleKeyDown,\n handleDayMouseEnter,\n handleDayMouseLeave,\n selected,\n ],\n );\n\n const getMonthProps = useCallback(\n (selectedMonth: Month) => {\n const monthselected = isSameMonth(activeMonth, selectedMonth.date);\n\n return {\n 'data-date': selectedMonth.date.getTime(),\n 'aria-selected': monthselected,\n ref: (node: HTMLButtonElement) => {\n handleDateRef(node, selectedMonth.date.getMonth());\n },\n tabIndex: monthselected ? 0 : -1,\n disabled: selectedMonth.disabled,\n onClick: (e: MouseEvent<HTMLButtonElement>) => {\n handleMonthClick(e);\n setView('days');\n },\n };\n },\n [activeMonth, handleDateRef, handleMonthClick, setView],\n );\n\n const getRootProps = useCallback(\n ({ ref = null }: { ref?: Ref<HTMLDivElement> }) => ({\n onKeyDown: handleKeyDown,\n ref: mergeRefs([ref, rootRef]),\n tabIndex: -1,\n }),\n [handleKeyDown],\n );\n\n return {\n activeMonth,\n activeYear,\n weeks,\n months,\n canSetPrevMonth,\n canSetNextMonth,\n highlighted,\n setPrevMonth,\n setNextMonth,\n setNextYear,\n setPrevYear,\n setMonthByDate,\n getDayProps,\n getMonthProps,\n getRootProps,\n };\n}\n"],"names":["useCalendar","defaultMonth","month","minDate","view","maxDate","selected","events","offDays","onMonthChange","onYearChange","onChange","setView","monthState","setMonthState","useState","yearState","setYearState","highlighted","setHighlighted","uncontrolled","activeMonth","activeYear","dateRefs","useRef","rootRef","minMonth","useMemo","startOfMonth","maxMonth","minYear","startOfYear","maxYear","canSetPrevMonth","canSetNextMonth","eventsMap","dateArrayToHashTable","offDaysMap","weeks","generateWeeks","months","generateMonths","years","generateYears","subYears","setMonth","useCallback","newMonth","handleSetYear","newYear","setMonthByStep","step","limitDate","addMonths","setYearByStep","addYears","setMonthByDate","setNextMonth","setPrevMonth","setNextYear","setPrevYear","getFocusedDate","node","getFocusableDate","focusDate","simulateTab","focusFirstAvailableDate","focusDay","shift","focusedNode","focusedDate","newDate","modifyDateByShift","monthChanged","effect","focusMonth","offset","newFocusedMonth","MONTHS_IN_YEAR","focusYear","newFocusedYear","currentYear","handleMonthClick","event","date","handleDateRef","index","handleDayMouseEnter","handleDayMouseLeave","handleDayClick","daysControls","monthControls","yearsControls","controlsByView","handleKeyDown","controls","focusableDayIsSet","getDayProps","day","daySelected","isSameDay","canFocus","isSameMonth","getMonthProps","selectedMonth","monthselected","e","getRootProps","ref","mergeRefs"],"mappings":"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"}
@@ -53,9 +53,9 @@ export declare function limitDate(date: Date | number, minDate?: Date | number,
53
53
  */
54
54
  export declare function dateInLimits(date?: Date | number | null, minDate?: Date | number, maxDate?: Date | number): boolean | 0 | null | undefined;
55
55
  /**
56
- * Возвращает русское название месяца с большой буквы
56
+ * Локализованное название месяца (Intl).
57
57
  */
58
- export declare function monthName(month: Date, locale: Locale, shortNames: boolean): string;
58
+ export declare function monthName(month: Date, localeTag: string, shortNames: boolean): string;
59
59
  /**
60
60
  * Превращает массив в объект, у которого ключи составляются из элементов массива
61
61
  */