@hh.ru/magritte-ui-date-picker 3.3.53 → 3.3.55

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.
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { DateType } from '@hh.ru/magritte-ui-date-picker/types';
3
2
  export interface AsyncDataContextProps {
4
3
  disabledDates: DateType[];
@@ -4,7 +4,7 @@ import { useContext, useState, useMemo } from 'react';
4
4
  import classnames from 'classnames';
5
5
  import { AsyncDataContext } from './AsyncDataContext.js';
6
6
  import { Loader } from '@hh.ru/magritte-ui-loader';
7
- import { s as styles } from './date-picker-CVHG7fs-.js';
7
+ import { s as styles } from './date-picker-zepWKnGz.js';
8
8
 
9
9
  /**
10
10
  * Отображает лоадер поверх контента во время загрузки асинхронных данных.
@@ -1 +1 @@
1
- {"version":3,"file":"AsyncDataLoader.js","sources":["../src/AsyncDataLoader.tsx"],"sourcesContent":["import { FC, PropsWithChildren, useContext, useMemo, useState } from 'react';\nimport classnames from 'classnames';\n\nimport { AsyncDataContext, AsyncDataContextProps } from '@hh.ru/magritte-ui-date-picker/AsyncDataContext';\nimport { DateType } from '@hh.ru/magritte-ui-date-picker/types';\nimport { Loader } from '@hh.ru/magritte-ui-loader';\n\nimport styles from './date-picker.less';\n\n/**\n * Отображает лоадер поверх контента во время загрузки асинхронных данных.\n * В multi-лейауте каждый календарь должен быть обернут в свой лоадер,\n * чтобы календари с уже загруженными данными рендерили их, а не анимацию лоадера\n */\nexport const AsyncDataLoader: FC<PropsWithChildren> = ({ children }) => {\n const asyncDataContext = useContext(AsyncDataContext);\n const [isLoading, setLoading] = useState(false);\n\n const value = useMemo<AsyncDataContextProps | null>(() => {\n if (!asyncDataContext) {\n return null;\n }\n\n return {\n ...asyncDataContext,\n startAsyncLoading: (startDate: DateType, endDate: DateType) => {\n setLoading(true);\n\n void (async () => {\n try {\n await asyncDataContext.awaitAsyncLoading(startDate, endDate);\n } finally {\n setLoading(false);\n }\n })();\n },\n };\n }, [asyncDataContext, setLoading]);\n\n return (\n <div className={classnames(styles.datePicker, { [styles.datePickerLoading]: isLoading })} data-qa=\"date-picker\">\n {isLoading && (\n <div className={styles.loader}>\n <Loader />\n </div>\n )}\n <div className={classnames({ [styles.loading]: isLoading })}>\n <AsyncDataContext.Provider value={value}>{children}</AsyncDataContext.Provider>\n </div>\n </div>\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;AASA;;;;AAIG;MACU,eAAe,GAA0B,CAAC,EAAE,QAAQ,EAAE,KAAI;AACnE,IAAA,MAAM,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACtD,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAEhD,IAAA,MAAM,KAAK,GAAG,OAAO,CAA+B,MAAK;QACrD,IAAI,CAAC,gBAAgB,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;QAED,OAAO;AACH,YAAA,GAAG,gBAAgB;AACnB,YAAA,iBAAiB,EAAE,CAAC,SAAmB,EAAE,OAAiB,KAAI;gBAC1D,UAAU,CAAC,IAAI,CAAC,CAAC;gBAEjB,KAAK,CAAC,YAAW;oBACb,IAAI;wBACA,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAChE,qBAAA;AAAS,4BAAA;wBACN,UAAU,CAAC,KAAK,CAAC,CAAC;AACrB,qBAAA;iBACJ,GAAG,CAAC;aACR;SACJ,CAAC;AACN,KAAC,EAAE,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;AAEnC,IAAA,QACIA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,iBAAiB,GAAG,SAAS,EAAE,CAAC,EAAU,SAAA,EAAA,aAAa,aAC1G,SAAS,KACNC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,MAAM,EACzB,QAAA,EAAAA,GAAA,CAAC,MAAM,EAAA,EAAA,CAAG,EACR,CAAA,CACT,EACDA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,EAAE,CAAC,EACvD,QAAA,EAAAA,GAAA,CAAC,gBAAgB,CAAC,QAAQ,EAAC,EAAA,KAAK,EAAE,KAAK,YAAG,QAAQ,EAAA,CAA6B,EAC7E,CAAA,CAAA,EAAA,CACJ,EACR;AACN;;;;"}
1
+ {"version":3,"file":"AsyncDataLoader.js","sources":["../src/AsyncDataLoader.tsx"],"sourcesContent":["import { FC, PropsWithChildren, useContext, useMemo, useState } from 'react';\nimport classnames from 'classnames';\n\nimport { AsyncDataContext, AsyncDataContextProps } from '@hh.ru/magritte-ui-date-picker/AsyncDataContext';\nimport { DateType } from '@hh.ru/magritte-ui-date-picker/types';\nimport { Loader } from '@hh.ru/magritte-ui-loader';\n\nimport styles from './date-picker.less';\n\n/**\n * Отображает лоадер поверх контента во время загрузки асинхронных данных.\n * В multi-лейауте каждый календарь должен быть обернут в свой лоадер,\n * чтобы календари с уже загруженными данными рендерили их, а не анимацию лоадера\n */\nexport const AsyncDataLoader: FC<PropsWithChildren> = ({ children }) => {\n const asyncDataContext = useContext(AsyncDataContext);\n const [isLoading, setLoading] = useState(false);\n\n const value = useMemo<AsyncDataContextProps | null>(() => {\n if (!asyncDataContext) {\n return null;\n }\n\n return {\n ...asyncDataContext,\n startAsyncLoading: (startDate: DateType, endDate: DateType) => {\n setLoading(true);\n\n void (async () => {\n try {\n await asyncDataContext.awaitAsyncLoading(startDate, endDate);\n } finally {\n setLoading(false);\n }\n })();\n },\n };\n }, [asyncDataContext, setLoading]);\n\n return (\n <div className={classnames(styles.datePicker, { [styles.datePickerLoading]: isLoading })} data-qa=\"date-picker\">\n {isLoading && (\n <div className={styles.loader}>\n <Loader />\n </div>\n )}\n <div className={classnames({ [styles.loading]: isLoading })}>\n <AsyncDataContext.Provider value={value}>{children}</AsyncDataContext.Provider>\n </div>\n </div>\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;AASA;;;;AAIG;MACU,eAAe,GAA0B,CAAC,EAAE,QAAQ,EAAE,KAAI;AACnE,IAAA,MAAM,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACtD,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAEhD,IAAA,MAAM,KAAK,GAAG,OAAO,CAA+B,MAAK;QACrD,IAAI,CAAC,gBAAgB,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC;SACf;QAED,OAAO;AACH,YAAA,GAAG,gBAAgB;AACnB,YAAA,iBAAiB,EAAE,CAAC,SAAmB,EAAE,OAAiB,KAAI;gBAC1D,UAAU,CAAC,IAAI,CAAC,CAAC;gBAEjB,KAAK,CAAC,YAAW;AACb,oBAAA,IAAI;wBACA,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;qBAChE;4BAAS;wBACN,UAAU,CAAC,KAAK,CAAC,CAAC;qBACrB;iBACJ,GAAG,CAAC;aACR;SACJ,CAAC;AACN,KAAC,EAAE,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;AAEnC,IAAA,QACIA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,iBAAiB,GAAG,SAAS,EAAE,CAAC,EAAU,SAAA,EAAA,aAAa,aAC1G,SAAS,KACNC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,MAAM,EACzB,QAAA,EAAAA,GAAA,CAAC,MAAM,EAAA,EAAA,CAAG,EACR,CAAA,CACT,EACDA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,EAAE,CAAC,EACvD,QAAA,EAAAA,GAAA,CAAC,gBAAgB,CAAC,QAAQ,EAAC,EAAA,KAAK,EAAE,KAAK,YAAG,QAAQ,EAAA,CAA6B,EAC7E,CAAA,CAAA,EAAA,CACJ,EACR;AACN;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"AsyncDataStore.js","sources":["../src/AsyncDataStore.tsx"],"sourcesContent":["import { FC, PropsWithChildren, useMemo, useRef, useState } from 'react';\n\nimport { AsyncDataContext, AsyncDataContextProps } from '@hh.ru/magritte-ui-date-picker/AsyncDataContext';\nimport { DateType } from '@hh.ru/magritte-ui-date-picker/types';\n\ninterface AsyncDataStoreProps {\n disabledDatesFunc?: (startDate: DateType, endDate: DateType) => Promise<DateType[]>;\n parallelLoadersLimit?: number | null;\n}\n\nconst makeKey = (startDate: DateType, endDate: DateType) => {\n return `${new Date(startDate).getTime()}-${new Date(endDate).getTime()}`;\n};\n\n/**\n * Хранит данные, загруженные всеми вложенными AsyncDataLoader-ами, и предоставляет методы для загрузки данных\n */\nexport const AsyncDataStore: FC<PropsWithChildren<AsyncDataStoreProps>> = ({\n children,\n disabledDatesFunc,\n parallelLoadersLimit = null,\n}) => {\n const asyncDataState = useRef<Record<string, { promise: Promise<void>; state: 'loading' | 'done' }>>({});\n const [disabledDates, setDisabledDates] = useState<DateType[]>([]);\n\n const value = useMemo<AsyncDataContextProps | null>(() => {\n if (!disabledDatesFunc) {\n return null;\n }\n\n return {\n disabledDates,\n hasAsyncFunc: true,\n hasData: (startDate: DateType, endDate: DateType) => makeKey(startDate, endDate) in asyncDataState.current,\n startAsyncLoading: () => void 0,\n awaitAsyncLoading: (startDate: DateType, endDate: DateType) => {\n const key = makeKey(startDate, endDate);\n if (!(key in asyncDataState.current)) {\n asyncDataState.current[key] = {\n promise: new Promise<void>(async (resolve) => {\n try {\n const _disabledDates = await disabledDatesFunc(startDate, endDate);\n setDisabledDates((disabledDates) => [...disabledDates, ..._disabledDates]);\n } finally {\n asyncDataState.current[key].state = 'done';\n resolve();\n }\n }),\n state: 'loading',\n };\n }\n return asyncDataState.current[key].promise;\n },\n isLoading: () => Object.values(asyncDataState.current).some(({ state }) => state === 'loading'),\n isLimitExceeded: () =>\n parallelLoadersLimit !== null &&\n Object.values(asyncDataState.current).filter(({ state }) => state === 'loading').length >=\n parallelLoadersLimit,\n };\n }, [disabledDates, disabledDatesFunc, setDisabledDates, parallelLoadersLimit]);\n\n return <AsyncDataContext.Provider value={value}>{children}</AsyncDataContext.Provider>;\n};\n"],"names":["_jsx"],"mappings":";;;;AAUA,MAAM,OAAO,GAAG,CAAC,SAAmB,EAAE,OAAiB,KAAI;AACvD,IAAA,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;AAC7E,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,cAAc,GAA+C,CAAC,EACvE,QAAQ,EACR,iBAAiB,EACjB,oBAAoB,GAAG,IAAI,GAC9B,KAAI;AACD,IAAA,MAAM,cAAc,GAAG,MAAM,CAAwE,EAAE,CAAC,CAAC;IACzG,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAa,EAAE,CAAC,CAAC;AAEnE,IAAA,MAAM,KAAK,GAAG,OAAO,CAA+B,MAAK;QACrD,IAAI,CAAC,iBAAiB,EAAE;AACpB,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;QAED,OAAO;YACH,aAAa;AACb,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,OAAO,EAAE,CAAC,SAAmB,EAAE,OAAiB,KAAK,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,cAAc,CAAC,OAAO;AAC1G,YAAA,iBAAiB,EAAE,MAAM,KAAK,CAAC;AAC/B,YAAA,iBAAiB,EAAE,CAAC,SAAmB,EAAE,OAAiB,KAAI;gBAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBACxC,IAAI,EAAE,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE;AAClC,oBAAA,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG;wBAC1B,OAAO,EAAE,IAAI,OAAO,CAAO,OAAO,OAAO,KAAI;4BACzC,IAAI;gCACA,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACnE,gCAAA,gBAAgB,CAAC,CAAC,aAAa,KAAK,CAAC,GAAG,aAAa,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;AAC9E,6BAAA;AAAS,oCAAA;gCACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC;AAC3C,gCAAA,OAAO,EAAE,CAAC;AACb,6BAAA;AACL,yBAAC,CAAC;AACF,wBAAA,KAAK,EAAE,SAAS;qBACnB,CAAC;AACL,iBAAA;gBACD,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;aAC9C;YACD,SAAS,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,SAAS,CAAC;AAC/F,YAAA,eAAe,EAAE,MACb,oBAAoB,KAAK,IAAI;gBAC7B,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,SAAS,CAAC,CAAC,MAAM;oBACnF,oBAAoB;SAC/B,CAAC;KACL,EAAE,CAAC,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAE/E,OAAOA,GAAA,CAAC,gBAAgB,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,KAAK,EAAA,QAAA,EAAG,QAAQ,EAAA,CAA6B,CAAC;AAC3F;;;;"}
1
+ {"version":3,"file":"AsyncDataStore.js","sources":["../src/AsyncDataStore.tsx"],"sourcesContent":["import { FC, PropsWithChildren, useMemo, useRef, useState } from 'react';\n\nimport { AsyncDataContext, AsyncDataContextProps } from '@hh.ru/magritte-ui-date-picker/AsyncDataContext';\nimport { DateType } from '@hh.ru/magritte-ui-date-picker/types';\n\ninterface AsyncDataStoreProps {\n disabledDatesFunc?: (startDate: DateType, endDate: DateType) => Promise<DateType[]>;\n parallelLoadersLimit?: number | null;\n}\n\nconst makeKey = (startDate: DateType, endDate: DateType) => {\n return `${new Date(startDate).getTime()}-${new Date(endDate).getTime()}`;\n};\n\n/**\n * Хранит данные, загруженные всеми вложенными AsyncDataLoader-ами, и предоставляет методы для загрузки данных\n */\nexport const AsyncDataStore: FC<PropsWithChildren<AsyncDataStoreProps>> = ({\n children,\n disabledDatesFunc,\n parallelLoadersLimit = null,\n}) => {\n const asyncDataState = useRef<Record<string, { promise: Promise<void>; state: 'loading' | 'done' }>>({});\n const [disabledDates, setDisabledDates] = useState<DateType[]>([]);\n\n const value = useMemo<AsyncDataContextProps | null>(() => {\n if (!disabledDatesFunc) {\n return null;\n }\n\n return {\n disabledDates,\n hasAsyncFunc: true,\n hasData: (startDate: DateType, endDate: DateType) => makeKey(startDate, endDate) in asyncDataState.current,\n startAsyncLoading: () => void 0,\n awaitAsyncLoading: (startDate: DateType, endDate: DateType) => {\n const key = makeKey(startDate, endDate);\n if (!(key in asyncDataState.current)) {\n asyncDataState.current[key] = {\n promise: new Promise<void>(async (resolve) => {\n try {\n const _disabledDates = await disabledDatesFunc(startDate, endDate);\n setDisabledDates((disabledDates) => [...disabledDates, ..._disabledDates]);\n } finally {\n asyncDataState.current[key].state = 'done';\n resolve();\n }\n }),\n state: 'loading',\n };\n }\n return asyncDataState.current[key].promise;\n },\n isLoading: () => Object.values(asyncDataState.current).some(({ state }) => state === 'loading'),\n isLimitExceeded: () =>\n parallelLoadersLimit !== null &&\n Object.values(asyncDataState.current).filter(({ state }) => state === 'loading').length >=\n parallelLoadersLimit,\n };\n }, [disabledDates, disabledDatesFunc, setDisabledDates, parallelLoadersLimit]);\n\n return <AsyncDataContext.Provider value={value}>{children}</AsyncDataContext.Provider>;\n};\n"],"names":["_jsx"],"mappings":";;;;AAUA,MAAM,OAAO,GAAG,CAAC,SAAmB,EAAE,OAAiB,KAAI;AACvD,IAAA,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;AAC7E,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,cAAc,GAA+C,CAAC,EACvE,QAAQ,EACR,iBAAiB,EACjB,oBAAoB,GAAG,IAAI,GAC9B,KAAI;AACD,IAAA,MAAM,cAAc,GAAG,MAAM,CAAwE,EAAE,CAAC,CAAC;IACzG,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAa,EAAE,CAAC,CAAC;AAEnE,IAAA,MAAM,KAAK,GAAG,OAAO,CAA+B,MAAK;QACrD,IAAI,CAAC,iBAAiB,EAAE;AACpB,YAAA,OAAO,IAAI,CAAC;SACf;QAED,OAAO;YACH,aAAa;AACb,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,OAAO,EAAE,CAAC,SAAmB,EAAE,OAAiB,KAAK,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,cAAc,CAAC,OAAO;AAC1G,YAAA,iBAAiB,EAAE,MAAM,KAAK,CAAC;AAC/B,YAAA,iBAAiB,EAAE,CAAC,SAAmB,EAAE,OAAiB,KAAI;gBAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBACxC,IAAI,EAAE,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE;AAClC,oBAAA,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG;wBAC1B,OAAO,EAAE,IAAI,OAAO,CAAO,OAAO,OAAO,KAAI;AACzC,4BAAA,IAAI;gCACA,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACnE,gCAAA,gBAAgB,CAAC,CAAC,aAAa,KAAK,CAAC,GAAG,aAAa,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;6BAC9E;oCAAS;gCACN,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC;AAC3C,gCAAA,OAAO,EAAE,CAAC;6BACb;AACL,yBAAC,CAAC;AACF,wBAAA,KAAK,EAAE,SAAS;qBACnB,CAAC;iBACL;gBACD,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;aAC9C;YACD,SAAS,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,SAAS,CAAC;AAC/F,YAAA,eAAe,EAAE,MACb,oBAAoB,KAAK,IAAI;gBAC7B,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,SAAS,CAAC,CAAC,MAAM;oBACnF,oBAAoB;SAC/B,CAAC;KACL,EAAE,CAAC,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAE/E,OAAOA,GAAA,CAAC,gBAAgB,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,KAAK,EAAA,QAAA,EAAG,QAAQ,EAAA,CAA6B,CAAC;AAC3F;;;;"}
package/DatePicker.js CHANGED
@@ -12,7 +12,7 @@ import { YearPicker } from './YearPicker.js';
12
12
  import { useDatePickerControls } from './useDatePickerControls.js';
13
13
  import { useDisplayDate } from './utils.js';
14
14
  import { Divider } from '@hh.ru/magritte-ui-divider';
15
- import { s as styles } from './date-picker-CVHG7fs-.js';
15
+ import { s as styles } from './date-picker-zepWKnGz.js';
16
16
  import 'classnames';
17
17
  import './AsyncDataContext.js';
18
18
  import '@hh.ru/magritte-ui-loader';
package/DayPicker.js CHANGED
@@ -15,7 +15,7 @@ import { NavigationBar } from '@hh.ru/magritte-ui-navigation-bar';
15
15
  import { VSpacing } from '@hh.ru/magritte-ui-spacing';
16
16
  import { TooltipHover } from '@hh.ru/magritte-ui-tooltip';
17
17
  import { Text } from '@hh.ru/magritte-ui-typography';
18
- import { s as styles } from './date-picker-CVHG7fs-.js';
18
+ import { s as styles } from './date-picker-zepWKnGz.js';
19
19
  import './AsyncDataContext.js';
20
20
 
21
21
  const DayPicker = ({ disabledDates, minDate, maxDate, displayDate, selectedDate, showAdjacentDays, onDateSelect, }) => {
package/DayPicker.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"DayPicker.js","sources":["../src/DayPicker.tsx"],"sourcesContent":["import { Fragment, FC, useMemo, useState, useRef, ReactNode } from 'react';\nimport classnames from 'classnames';\nimport { format, isFirstDayOfMonth, isLastDayOfMonth, isSameDay, isSameMonth, isToday } from 'date-fns';\nimport { daysInWeek as DAYS_IN_WEEK } from 'date-fns/constants';\n\nimport { useDisabled } from '@hh.ru/magritte-common-use-disabled';\nimport { Action } from '@hh.ru/magritte-ui-action';\nimport { BottomSheet } from '@hh.ru/magritte-ui-bottom-sheet';\nimport { DayPickerProps, IntervalDayPickerProps, InfoDayPickerProps } from '@hh.ru/magritte-ui-date-picker/types';\nimport { useDisabledDatesFunc } from '@hh.ru/magritte-ui-date-picker/useDisabledDatesFunc';\nimport { useIntervalPicker } from '@hh.ru/magritte-ui-date-picker/useIntervalPicker';\nimport { flatten, useDayPickerDates, InfoDay, getInfoByDateType } from '@hh.ru/magritte-ui-date-picker/utils';\nimport { CrossOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { NavigationBar } from '@hh.ru/magritte-ui-navigation-bar';\nimport { VSpacing } from '@hh.ru/magritte-ui-spacing';\nimport { TooltipHover } from '@hh.ru/magritte-ui-tooltip';\nimport { Text } from '@hh.ru/magritte-ui-typography';\n\nimport styles from './date-picker.less';\n\nexport const DayPicker: FC<DayPickerProps> = ({\n disabledDates,\n minDate,\n maxDate,\n displayDate,\n selectedDate,\n showAdjacentDays,\n onDateSelect,\n}) => {\n const dates = useDayPickerDates(displayDate);\n const disabledDatesFunc = useDisabledDatesFunc(dates[0], dates[dates.length - 1], disabledDates, minDate, maxDate);\n const forceDisabled = useDisabled();\n\n const onClickHandlers = useMemo(() => {\n return dates.map((date) => {\n return () => onDateSelect?.(date);\n });\n }, [dates, onDateSelect]);\n\n return (\n <div className={classnames(styles.calendar, styles.calendarDays)} data-qa=\"date-picker-days\">\n {dates.map((date, index) => {\n const isAdjacent = !isSameMonth(date, displayDate);\n const isDisabled = isAdjacent || forceDisabled || disabledDatesFunc(date);\n const isSelected = !!selectedDate && isSameDay(date, selectedDate);\n const display = !isAdjacent || showAdjacentDays;\n\n return (\n <div className={styles.item} key={`${date}`}>\n {display && (\n <button\n className={classnames(styles.text, {\n [styles.textDisabled]: isDisabled,\n [styles.textSelected]: isSelected,\n [styles.textToday]: isToday(date),\n [styles.textUnselected]: !isDisabled && !isSelected,\n })}\n disabled={isDisabled || isSelected}\n onClick={onClickHandlers[index]}\n data-date={format(date, 'yyyy-MM-dd')}\n data-qa={classnames('date-picker-day', {\n 'date-picker-day-disabled': isDisabled,\n 'date-picker-day-selected': isSelected,\n 'date-picker-day-today': isToday(date),\n })}\n >\n {format(date, 'dd')}\n </button>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n\nexport const IntervalDayPicker: FC<IntervalDayPickerProps> = ({\n disabledDates,\n minDate,\n maxDate,\n displayDate,\n selectionStart,\n selectionEnd,\n hoveredDate,\n dragState,\n onStartSelect,\n onEndSelect,\n onDateHover,\n onDateDrag,\n showAdjacentDays,\n}) => {\n const dates = useDayPickerDates(displayDate);\n const disabledDatesFunc = useDisabledDatesFunc(dates[0], dates[dates.length - 1], disabledDates, minDate, maxDate);\n\n const datesProps = useIntervalPicker({\n dates,\n disabledDatesFunc,\n selectionStart,\n selectionEnd,\n hoveredDate,\n dragState,\n onStartSelect,\n onEndSelect,\n onDateHover,\n onDateDrag,\n isEqual: isSameDay,\n });\n\n return (\n <div className={classnames(styles.calendar, styles.calendarDays)} data-qa=\"date-picker-days\">\n {dates.map((date, index) => {\n const isAdjacent = !isSameMonth(date, displayDate);\n const {\n isDisabled: _isDisabled,\n isIntervalStart,\n isIntervalEnd,\n isSelected,\n isDraggable,\n isDragSource,\n isDropTarget,\n isWithinInterval,\n mouseHandlers,\n dragSourceHandlers,\n dropTargetHandlers,\n } = datesProps[index];\n const isDisabled = isAdjacent || _isDisabled;\n const isIntervalRowStart =\n isWithinInterval &&\n !isIntervalStart &&\n (index % DAYS_IN_WEEK === 0 || (!showAdjacentDays && isFirstDayOfMonth(date)));\n const isIntervalRowEnd =\n isWithinInterval &&\n !isIntervalEnd &&\n (index % DAYS_IN_WEEK === DAYS_IN_WEEK - 1 || (!showAdjacentDays && isLastDayOfMonth(date)));\n const display = !isAdjacent || showAdjacentDays;\n\n return (\n <div\n className={classnames(styles.item, {\n [styles.itemInterval]: isWithinInterval,\n [styles.itemIntervalStart]: isIntervalStart,\n [styles.itemIntervalEnd]: isIntervalEnd,\n [styles.itemIntervalRowStart]: isIntervalRowStart,\n [styles.itemIntervalRowEnd]: isIntervalRowEnd,\n })}\n key={`${date}`}\n >\n {display && (\n <Fragment>\n <button\n {...mouseHandlers}\n {...(!isDisabled ? dragSourceHandlers : {})}\n {...(!isDisabled ? dropTargetHandlers : {})}\n className={classnames(styles.text, {\n [styles.textDisabled]: isDisabled,\n [styles.textSelected]: isSelected,\n [styles.textDraggable]: !isDisabled && isDraggable,\n [styles.textDragSource]: isDragSource,\n [styles.textDropTarget]: isDropTarget,\n [styles.textToday]: isToday(date),\n [styles.textUnselected]:\n !isDisabled && !isSelected && !isDragSource && !isDropTarget,\n })}\n disabled={isDisabled || isSelected || isDragSource}\n draggable={!isDisabled && isDraggable}\n data-date={format(date, 'yyyy-MM-dd')}\n data-qa={classnames('date-picker-day', {\n 'date-picker-day-disabled': isDisabled,\n 'date-picker-day-selected': isSelected,\n 'date-picker-day-today': isToday(date),\n })}\n >\n {format(date, 'dd')}\n </button>\n {isWithinInterval && <div className={styles.substrate} />}\n </Fragment>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n\ninterface BottomSheetState extends InfoDay {\n show: boolean;\n}\n\nconst InfoDayTooltipWrapper: FC<{ children: ReactNode; tooltip: ReactNode }> = ({ children, tooltip }) => {\n const activatorRef = useRef<HTMLDivElement | null>(null);\n\n return (\n <>\n <div className={styles.item} ref={activatorRef}>\n {children}\n </div>\n {tooltip && (\n <TooltipHover placement=\"top-center\" activatorRef={activatorRef}>\n {tooltip}\n </TooltipHover>\n )}\n </>\n );\n};\n\nexport const InfoDayPicker: FC<InfoDayPickerProps> = ({\n displayDate,\n holidays: _holidays,\n shortWorkdays: _shortWorkdays,\n}) => {\n const dates = useDayPickerDates(displayDate);\n const [bottomSheetState, setBottomSheetState] = useState<BottomSheetState>({ show: false, text: '', header: '' });\n const onCloseBottomSheet = () => setBottomSheetState({ show: false, text: '', header: '' });\n\n const holidays = useMemo(() => _holidays && flatten(_holidays), [_holidays]);\n const shortWorkdays = useMemo(() => _shortWorkdays && flatten(_shortWorkdays), [_shortWorkdays]);\n\n return (\n <div className={classnames(styles.calendar, styles.calendarDays)} data-qa=\"date-picker-days\">\n {dates.map((date) => {\n const isAdjacent = !isSameMonth(date, displayDate);\n const holiday = holidays?.find((holiday) => isSameDay(date, holiday.date));\n const shortWorkday = shortWorkdays?.find((shortWorkday) => isSameDay(date, shortWorkday.date));\n const isWorkDay = !holiday && !shortWorkday;\n const info = getInfoByDateType(holiday, shortWorkday);\n const display = !isAdjacent;\n\n return (\n <InfoDayTooltipWrapper key={`${date}`} tooltip={info?.text}>\n {display && (\n <Fragment>\n <button\n className={classnames(styles.text, {\n [styles.textHoliday]: holiday,\n [styles.textShortWorkday]: shortWorkday,\n [styles.textWorkday]: isWorkDay,\n })}\n onClick={() => {\n if (info) {\n setBottomSheetState({ show: true, ...info });\n }\n }}\n disabled={!info}\n data-date={format(date, 'yyyy-MM-dd')}\n data-qa={classnames('date-picker-day', {\n 'date-picker-day-workday': isWorkDay,\n 'date-picker-day-short-workday': shortWorkday,\n 'date-picker-day-holyday': holiday,\n 'date-picker-day-today': isToday(date),\n })}\n >\n {format(date, 'dd')}\n </button>\n <div className={styles.substrate} />\n </Fragment>\n )}\n </InfoDayTooltipWrapper>\n );\n })}\n\n <BottomSheet\n visible={bottomSheetState.show}\n header={\n <NavigationBar\n title={bottomSheetState.header}\n right={<Action icon={CrossOutlinedSize24} onClick={onCloseBottomSheet} />}\n showDivider=\"always\"\n />\n }\n onClose={onCloseBottomSheet}\n >\n <Text Element=\"span\" typography=\"label-2-regular\">\n {bottomSheetState.text}\n </Text>\n <VSpacing default={48} />\n </BottomSheet>\n </div>\n );\n};\n"],"names":["_jsx","DAYS_IN_WEEK","_jsxs","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"DayPicker.js","sources":["../src/DayPicker.tsx"],"sourcesContent":["import { Fragment, FC, useMemo, useState, useRef, ReactNode } from 'react';\nimport classnames from 'classnames';\nimport { format, isFirstDayOfMonth, isLastDayOfMonth, isSameDay, isSameMonth, isToday } from 'date-fns';\nimport { daysInWeek as DAYS_IN_WEEK } from 'date-fns/constants';\n\nimport { useDisabled } from '@hh.ru/magritte-common-use-disabled';\nimport { Action } from '@hh.ru/magritte-ui-action';\nimport { BottomSheet } from '@hh.ru/magritte-ui-bottom-sheet';\nimport { DayPickerProps, IntervalDayPickerProps, InfoDayPickerProps } from '@hh.ru/magritte-ui-date-picker/types';\nimport { useDisabledDatesFunc } from '@hh.ru/magritte-ui-date-picker/useDisabledDatesFunc';\nimport { useIntervalPicker } from '@hh.ru/magritte-ui-date-picker/useIntervalPicker';\nimport { flatten, useDayPickerDates, InfoDay, getInfoByDateType } from '@hh.ru/magritte-ui-date-picker/utils';\nimport { CrossOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { NavigationBar } from '@hh.ru/magritte-ui-navigation-bar';\nimport { VSpacing } from '@hh.ru/magritte-ui-spacing';\nimport { TooltipHover } from '@hh.ru/magritte-ui-tooltip';\nimport { Text } from '@hh.ru/magritte-ui-typography';\n\nimport styles from './date-picker.less';\n\nexport const DayPicker: FC<DayPickerProps> = ({\n disabledDates,\n minDate,\n maxDate,\n displayDate,\n selectedDate,\n showAdjacentDays,\n onDateSelect,\n}) => {\n const dates = useDayPickerDates(displayDate);\n const disabledDatesFunc = useDisabledDatesFunc(dates[0], dates[dates.length - 1], disabledDates, minDate, maxDate);\n const forceDisabled = useDisabled();\n\n const onClickHandlers = useMemo(() => {\n return dates.map((date) => {\n return () => onDateSelect?.(date);\n });\n }, [dates, onDateSelect]);\n\n return (\n <div className={classnames(styles.calendar, styles.calendarDays)} data-qa=\"date-picker-days\">\n {dates.map((date, index) => {\n const isAdjacent = !isSameMonth(date, displayDate);\n const isDisabled = isAdjacent || forceDisabled || disabledDatesFunc(date);\n const isSelected = !!selectedDate && isSameDay(date, selectedDate);\n const display = !isAdjacent || showAdjacentDays;\n\n return (\n <div className={styles.item} key={`${date}`}>\n {display && (\n <button\n className={classnames(styles.text, {\n [styles.textDisabled]: isDisabled,\n [styles.textSelected]: isSelected,\n [styles.textToday]: isToday(date),\n [styles.textUnselected]: !isDisabled && !isSelected,\n })}\n disabled={isDisabled || isSelected}\n onClick={onClickHandlers[index]}\n data-date={format(date, 'yyyy-MM-dd')}\n data-qa={classnames('date-picker-day', {\n 'date-picker-day-disabled': isDisabled,\n 'date-picker-day-selected': isSelected,\n 'date-picker-day-today': isToday(date),\n })}\n >\n {format(date, 'dd')}\n </button>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n\nexport const IntervalDayPicker: FC<IntervalDayPickerProps> = ({\n disabledDates,\n minDate,\n maxDate,\n displayDate,\n selectionStart,\n selectionEnd,\n hoveredDate,\n dragState,\n onStartSelect,\n onEndSelect,\n onDateHover,\n onDateDrag,\n showAdjacentDays,\n}) => {\n const dates = useDayPickerDates(displayDate);\n const disabledDatesFunc = useDisabledDatesFunc(dates[0], dates[dates.length - 1], disabledDates, minDate, maxDate);\n\n const datesProps = useIntervalPicker({\n dates,\n disabledDatesFunc,\n selectionStart,\n selectionEnd,\n hoveredDate,\n dragState,\n onStartSelect,\n onEndSelect,\n onDateHover,\n onDateDrag,\n isEqual: isSameDay,\n });\n\n return (\n <div className={classnames(styles.calendar, styles.calendarDays)} data-qa=\"date-picker-days\">\n {dates.map((date, index) => {\n const isAdjacent = !isSameMonth(date, displayDate);\n const {\n isDisabled: _isDisabled,\n isIntervalStart,\n isIntervalEnd,\n isSelected,\n isDraggable,\n isDragSource,\n isDropTarget,\n isWithinInterval,\n mouseHandlers,\n dragSourceHandlers,\n dropTargetHandlers,\n } = datesProps[index];\n const isDisabled = isAdjacent || _isDisabled;\n const isIntervalRowStart =\n isWithinInterval &&\n !isIntervalStart &&\n (index % DAYS_IN_WEEK === 0 || (!showAdjacentDays && isFirstDayOfMonth(date)));\n const isIntervalRowEnd =\n isWithinInterval &&\n !isIntervalEnd &&\n (index % DAYS_IN_WEEK === DAYS_IN_WEEK - 1 || (!showAdjacentDays && isLastDayOfMonth(date)));\n const display = !isAdjacent || showAdjacentDays;\n\n return (\n <div\n className={classnames(styles.item, {\n [styles.itemInterval]: isWithinInterval,\n [styles.itemIntervalStart]: isIntervalStart,\n [styles.itemIntervalEnd]: isIntervalEnd,\n [styles.itemIntervalRowStart]: isIntervalRowStart,\n [styles.itemIntervalRowEnd]: isIntervalRowEnd,\n })}\n key={`${date}`}\n >\n {display && (\n <Fragment>\n <button\n {...mouseHandlers}\n {...(!isDisabled ? dragSourceHandlers : {})}\n {...(!isDisabled ? dropTargetHandlers : {})}\n className={classnames(styles.text, {\n [styles.textDisabled]: isDisabled,\n [styles.textSelected]: isSelected,\n [styles.textDraggable]: !isDisabled && isDraggable,\n [styles.textDragSource]: isDragSource,\n [styles.textDropTarget]: isDropTarget,\n [styles.textToday]: isToday(date),\n [styles.textUnselected]:\n !isDisabled && !isSelected && !isDragSource && !isDropTarget,\n })}\n disabled={isDisabled || isSelected || isDragSource}\n draggable={!isDisabled && isDraggable}\n data-date={format(date, 'yyyy-MM-dd')}\n data-qa={classnames('date-picker-day', {\n 'date-picker-day-disabled': isDisabled,\n 'date-picker-day-selected': isSelected,\n 'date-picker-day-today': isToday(date),\n })}\n >\n {format(date, 'dd')}\n </button>\n {isWithinInterval && <div className={styles.substrate} />}\n </Fragment>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n\ninterface BottomSheetState extends InfoDay {\n show: boolean;\n}\n\nconst InfoDayTooltipWrapper: FC<{ children: ReactNode; tooltip: ReactNode }> = ({ children, tooltip }) => {\n const activatorRef = useRef<HTMLDivElement | null>(null);\n\n return (\n <>\n <div className={styles.item} ref={activatorRef}>\n {children}\n </div>\n {tooltip && (\n <TooltipHover placement=\"top-center\" activatorRef={activatorRef}>\n {tooltip}\n </TooltipHover>\n )}\n </>\n );\n};\n\nexport const InfoDayPicker: FC<InfoDayPickerProps> = ({\n displayDate,\n holidays: _holidays,\n shortWorkdays: _shortWorkdays,\n}) => {\n const dates = useDayPickerDates(displayDate);\n const [bottomSheetState, setBottomSheetState] = useState<BottomSheetState>({ show: false, text: '', header: '' });\n const onCloseBottomSheet = () => setBottomSheetState({ show: false, text: '', header: '' });\n\n const holidays = useMemo(() => _holidays && flatten(_holidays), [_holidays]);\n const shortWorkdays = useMemo(() => _shortWorkdays && flatten(_shortWorkdays), [_shortWorkdays]);\n\n return (\n <div className={classnames(styles.calendar, styles.calendarDays)} data-qa=\"date-picker-days\">\n {dates.map((date) => {\n const isAdjacent = !isSameMonth(date, displayDate);\n const holiday = holidays?.find((holiday) => isSameDay(date, holiday.date));\n const shortWorkday = shortWorkdays?.find((shortWorkday) => isSameDay(date, shortWorkday.date));\n const isWorkDay = !holiday && !shortWorkday;\n const info = getInfoByDateType(holiday, shortWorkday);\n const display = !isAdjacent;\n\n return (\n <InfoDayTooltipWrapper key={`${date}`} tooltip={info?.text}>\n {display && (\n <Fragment>\n <button\n className={classnames(styles.text, {\n [styles.textHoliday]: holiday,\n [styles.textShortWorkday]: shortWorkday,\n [styles.textWorkday]: isWorkDay,\n })}\n onClick={() => {\n if (info) {\n setBottomSheetState({ show: true, ...info });\n }\n }}\n disabled={!info}\n data-date={format(date, 'yyyy-MM-dd')}\n data-qa={classnames('date-picker-day', {\n 'date-picker-day-workday': isWorkDay,\n 'date-picker-day-short-workday': shortWorkday,\n 'date-picker-day-holyday': holiday,\n 'date-picker-day-today': isToday(date),\n })}\n >\n {format(date, 'dd')}\n </button>\n <div className={styles.substrate} />\n </Fragment>\n )}\n </InfoDayTooltipWrapper>\n );\n })}\n\n <BottomSheet\n visible={bottomSheetState.show}\n header={\n <NavigationBar\n title={bottomSheetState.header}\n right={<Action icon={CrossOutlinedSize24} onClick={onCloseBottomSheet} />}\n showDivider=\"always\"\n />\n }\n onClose={onCloseBottomSheet}\n >\n <Text Element=\"span\" typography=\"label-2-regular\">\n {bottomSheetState.text}\n </Text>\n <VSpacing default={48} />\n </BottomSheet>\n </div>\n );\n};\n"],"names":["_jsx","DAYS_IN_WEEK","_jsxs","_Fragment"],"mappings":"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"}
package/Header.js CHANGED
@@ -7,7 +7,7 @@ import { useDisabled } from '@hh.ru/magritte-common-use-disabled';
7
7
  import { Action } from '@hh.ru/magritte-ui-action';
8
8
  import { makeYearsInterval } from './utils.js';
9
9
  import { ChevronLeftOutlinedSize24, ChevronDownOutlinedSize16, ChevronRightOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';
10
- import { s as styles } from './date-picker-CVHG7fs-.js';
10
+ import { s as styles } from './date-picker-zepWKnGz.js';
11
11
  import 'date-fns/constants';
12
12
 
13
13
  const Header = ({ calendar, displayDate, activeHeader: _activeHeader = true, alignHeader = 'center', goToNextPeriod, goToPrevPeriod, headerMonthFormat = 'mm', locale, showControls = true, showHeaderDate = true, showNextControl = true, showPrevControl = true, switchCalendar, }) => {
package/Header.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Header.js","sources":["../src/Header.tsx"],"sourcesContent":["import { FC, Fragment } from 'react';\nimport classnames from 'classnames';\nimport { format } from 'date-fns';\n\nimport { useDisabled } from '@hh.ru/magritte-common-use-disabled';\nimport { Action } from '@hh.ru/magritte-ui-action';\nimport { DateType, Calendar, BaseDatePickerProps } from '@hh.ru/magritte-ui-date-picker/types';\nimport { makeYearsInterval } from '@hh.ru/magritte-ui-date-picker/utils';\nimport {\n ChevronLeftOutlinedSize24,\n ChevronRightOutlinedSize24,\n ChevronDownOutlinedSize16,\n} from '@hh.ru/magritte-ui-icon/icon';\n\nimport styles from './date-picker.less';\n\nexport const Header: FC<\n Pick<\n BaseDatePickerProps,\n 'activeHeader' | 'alignHeader' | 'headerMonthFormat' | 'locale' | 'showControls' | 'showHeaderDate'\n > & {\n calendar: Calendar;\n displayDate: DateType;\n goToNextPeriod?: VoidFunction;\n goToPrevPeriod?: VoidFunction;\n showNextControl?: boolean;\n showPrevControl?: boolean;\n switchCalendar?: VoidFunction;\n }\n> = ({\n calendar,\n displayDate,\n activeHeader: _activeHeader = true,\n alignHeader = 'center',\n goToNextPeriod,\n goToPrevPeriod,\n headerMonthFormat = 'mm',\n locale,\n showControls = true,\n showHeaderDate = true,\n showNextControl = true,\n showPrevControl = true,\n switchCalendar,\n}) => {\n const forceDisabled = useDisabled();\n const activeHeader = _activeHeader && !forceDisabled;\n\n if (!showControls && !showHeaderDate) {\n return null;\n }\n\n return (\n <div className={styles.headerWrapper}>\n <div className={styles.header} data-qa=\"date-picker-header\">\n {showControls && (\n <div className={styles.control}>\n {showPrevControl && goToPrevPeriod && (\n <Action\n icon={ChevronLeftOutlinedSize24}\n mode=\"secondary\"\n style=\"neutral\"\n onClick={goToPrevPeriod}\n data-qa=\"date-picker-prev-control\"\n />\n )}\n </div>\n )}\n <div\n className={classnames({\n [styles.headerDateWrapperCenter]: alignHeader === 'center',\n [styles.headerDateWrapperLeft]: alignHeader === 'left',\n })}\n >\n {showHeaderDate && (\n <button\n className={classnames(styles.headerDate, { [styles.headerDateActive]: activeHeader })}\n data-qa=\"date-picker-header-date\"\n disabled={!activeHeader}\n onClick={switchCalendar}\n >\n {calendar === 'day' &&\n format(displayDate, headerMonthFormat.endsWith('yyyy') ? 'LLLL yyyy' : 'LLLL', {\n locale,\n })}\n {calendar === 'month' && format(displayDate, 'yyyy', { locale })}\n {calendar === 'year' && (\n <Fragment>\n {format(makeYearsInterval(displayDate).start, 'yyyy', { locale })}\n {` – `}\n {format(makeYearsInterval(displayDate).end, 'yyyy', { locale })}\n </Fragment>\n )}\n {activeHeader && <ChevronDownOutlinedSize16 initial=\"secondary\" mode=\"neutral\" />}\n </button>\n )}\n </div>\n {showControls && (\n <div className={styles.control}>\n {showNextControl && goToNextPeriod && (\n <Action\n icon={ChevronRightOutlinedSize24}\n mode=\"secondary\"\n style=\"neutral\"\n onClick={goToNextPeriod}\n data-qa=\"date-picker-next-control\"\n />\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"Header.js","sources":["../src/Header.tsx"],"sourcesContent":["import { FC, Fragment } from 'react';\nimport classnames from 'classnames';\nimport { format } from 'date-fns';\n\nimport { useDisabled } from '@hh.ru/magritte-common-use-disabled';\nimport { Action } from '@hh.ru/magritte-ui-action';\nimport { DateType, Calendar, BaseDatePickerProps } from '@hh.ru/magritte-ui-date-picker/types';\nimport { makeYearsInterval } from '@hh.ru/magritte-ui-date-picker/utils';\nimport {\n ChevronLeftOutlinedSize24,\n ChevronRightOutlinedSize24,\n ChevronDownOutlinedSize16,\n} from '@hh.ru/magritte-ui-icon/icon';\n\nimport styles from './date-picker.less';\n\nexport const Header: FC<\n Pick<\n BaseDatePickerProps,\n 'activeHeader' | 'alignHeader' | 'headerMonthFormat' | 'locale' | 'showControls' | 'showHeaderDate'\n > & {\n calendar: Calendar;\n displayDate: DateType;\n goToNextPeriod?: VoidFunction;\n goToPrevPeriod?: VoidFunction;\n showNextControl?: boolean;\n showPrevControl?: boolean;\n switchCalendar?: VoidFunction;\n }\n> = ({\n calendar,\n displayDate,\n activeHeader: _activeHeader = true,\n alignHeader = 'center',\n goToNextPeriod,\n goToPrevPeriod,\n headerMonthFormat = 'mm',\n locale,\n showControls = true,\n showHeaderDate = true,\n showNextControl = true,\n showPrevControl = true,\n switchCalendar,\n}) => {\n const forceDisabled = useDisabled();\n const activeHeader = _activeHeader && !forceDisabled;\n\n if (!showControls && !showHeaderDate) {\n return null;\n }\n\n return (\n <div className={styles.headerWrapper}>\n <div className={styles.header} data-qa=\"date-picker-header\">\n {showControls && (\n <div className={styles.control}>\n {showPrevControl && goToPrevPeriod && (\n <Action\n icon={ChevronLeftOutlinedSize24}\n mode=\"secondary\"\n style=\"neutral\"\n onClick={goToPrevPeriod}\n data-qa=\"date-picker-prev-control\"\n />\n )}\n </div>\n )}\n <div\n className={classnames({\n [styles.headerDateWrapperCenter]: alignHeader === 'center',\n [styles.headerDateWrapperLeft]: alignHeader === 'left',\n })}\n >\n {showHeaderDate && (\n <button\n className={classnames(styles.headerDate, { [styles.headerDateActive]: activeHeader })}\n data-qa=\"date-picker-header-date\"\n disabled={!activeHeader}\n onClick={switchCalendar}\n >\n {calendar === 'day' &&\n format(displayDate, headerMonthFormat.endsWith('yyyy') ? 'LLLL yyyy' : 'LLLL', {\n locale,\n })}\n {calendar === 'month' && format(displayDate, 'yyyy', { locale })}\n {calendar === 'year' && (\n <Fragment>\n {format(makeYearsInterval(displayDate).start, 'yyyy', { locale })}\n {` – `}\n {format(makeYearsInterval(displayDate).end, 'yyyy', { locale })}\n </Fragment>\n )}\n {activeHeader && <ChevronDownOutlinedSize16 initial=\"secondary\" mode=\"neutral\" />}\n </button>\n )}\n </div>\n {showControls && (\n <div className={styles.control}>\n {showNextControl && goToNextPeriod && (\n <Action\n icon={ChevronRightOutlinedSize24}\n mode=\"secondary\"\n style=\"neutral\"\n onClick={goToNextPeriod}\n data-qa=\"date-picker-next-control\"\n />\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
package/InfiniteScroll.js CHANGED
@@ -3,7 +3,7 @@ import { jsx } from 'react/jsx-runtime';
3
3
  import { useRef, useState, useContext, useMemo, useCallback, useEffect, useLayoutEffect, Fragment } from 'react';
4
4
  import { initScrollHandlers } from '@hh.ru/magritte-internal-custom-scroll';
5
5
  import { AsyncDataContext } from './AsyncDataContext.js';
6
- import { s as styles } from './date-picker-CVHG7fs-.js';
6
+ import { s as styles } from './date-picker-zepWKnGz.js';
7
7
 
8
8
  const InfiniteScroll = ({ initialRenderedItems, invisibleThreshold, visibleThreshold, makeItemFunc, renderItemFunc, onVisibleItemChange, }) => {
9
9
  const stateRef = useRef({
@@ -1 +1 @@
1
- {"version":3,"file":"InfiniteScroll.js","sources":["../src/InfiniteScroll.tsx"],"sourcesContent":["import {\n Fragment,\n ReactElement,\n RefCallback,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { initScrollHandlers } from '@hh.ru/magritte-internal-custom-scroll';\nimport { AsyncDataContext } from '@hh.ru/magritte-ui-date-picker/AsyncDataContext';\n\nimport styles from './date-picker.less';\n\ninterface InfiniteScrollState<ItemType> {\n items: Map<number, ItemType>;\n firstRenderedKey: number;\n lastRenderedKey: number;\n needScrollCorrection: boolean;\n}\n\ninterface InfiniteScrollProps<ItemType> {\n initialRenderedItems: number;\n /** Высота невидимой части айтема, при достижении которой нужно рендерить еще один айтем за ним */\n invisibleThreshold: number;\n /** Высота видимой части айтема, при достижении которой вызывается колбек onVisibleItemChange с этим айтемом в параметрах */\n visibleThreshold: number;\n makeItemFunc: (key: number) => ItemType;\n renderItemFunc: (item: ItemType) => ReactElement;\n onVisibleItemChange: (item: ItemType, key: number) => void;\n}\n\nexport const InfiniteScroll = <ItemType,>({\n initialRenderedItems,\n invisibleThreshold,\n visibleThreshold,\n makeItemFunc,\n renderItemFunc,\n onVisibleItemChange,\n}: InfiniteScrollProps<ItemType>): ReactElement => {\n const stateRef = useRef<InfiniteScrollState<ItemType>>({\n items: new Map([...Array(initialRenderedItems).keys()].map((index) => [index, makeItemFunc(index)])),\n firstRenderedKey: 0,\n lastRenderedKey: initialRenderedItems - 1,\n needScrollCorrection: false,\n });\n const [stateKey, setStateKey] = useState(0);\n\n const asyncDataContext = useContext(AsyncDataContext);\n const boundariesRef = useRef<{ top: number; bottom: number } | null>(null);\n const itemElementsRef = useRef<Map<number, HTMLDivElement>>(new Map());\n const translateYRef = useRef(0);\n const visibleAreaMetricsRef = useRef<{ top: number; bottom: number } | null>(null);\n const visibleItemKeyRef = useRef(0);\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n\n const itemRefCallbacks = useMemo<Map<number, RefCallback<HTMLDivElement>>>(() => {\n return new Map(\n [...stateRef.current.items.entries()].map(([key]) => {\n const callback = ((ref) => {\n if (ref !== null) {\n itemElementsRef.current.set(key, ref);\n }\n }) as RefCallback<HTMLDivElement>;\n return [key, callback];\n })\n );\n }, [stateKey]); // eslint-disable-line disable-autofix/react-hooks/exhaustive-deps\n\n const addItemsIfNeeded = useCallback(\n (scrollDirection: 'up' | 'down') => {\n if (!visibleAreaMetricsRef.current) {\n return;\n }\n\n const { items, firstRenderedKey, lastRenderedKey } = stateRef.current;\n\n // скролл вверх\n if (scrollDirection === 'up') {\n // самый верхний видимый айтем близко к верхнему краю экрана — нужно рендерить еще один сверху\n const firstRenderedItemElement = itemElementsRef.current.get(firstRenderedKey);\n if (firstRenderedItemElement) {\n const firstRenderedItemMetrics = firstRenderedItemElement.getBoundingClientRect();\n if (visibleAreaMetricsRef.current.top - firstRenderedItemMetrics.top < invisibleThreshold) {\n if (!items.has(firstRenderedKey - 1)) {\n stateRef.current.items = new Map([\n [firstRenderedKey - 1, makeItemFunc(firstRenderedKey - 1)],\n ...items.entries(),\n ]);\n stateRef.current.needScrollCorrection = true;\n }\n stateRef.current.firstRenderedKey = firstRenderedKey - 1;\n stateRef.current.lastRenderedKey = lastRenderedKey - 1;\n setStateKey(Math.random());\n }\n }\n\n // последний пересекший верхнюю границу видимой области запоминаем как visible item\n for (let key = firstRenderedKey; key < lastRenderedKey; key += 1) {\n if (stateRef.current.items.has(key) && itemElementsRef.current.has(key)) {\n const itemElement = itemElementsRef.current.get(key) as HTMLElement;\n if (\n itemElement.getBoundingClientRect().bottom - visibleAreaMetricsRef.current.top >\n visibleThreshold\n ) {\n if (key !== visibleItemKeyRef.current) {\n onVisibleItemChange(stateRef.current.items.get(key) as ItemType, key);\n visibleItemKeyRef.current = key;\n }\n break;\n }\n }\n }\n }\n\n // скролл вниз\n if (scrollDirection === 'down') {\n // самый нижний видимый айтем близко к нижнему краю экрана — нужно рендерить еще один снизу\n const lastRenderedItemElement = itemElementsRef.current.get(lastRenderedKey);\n if (lastRenderedItemElement) {\n const lastRenderedItemMetrics = lastRenderedItemElement.getBoundingClientRect();\n if (lastRenderedItemMetrics.bottom - visibleAreaMetricsRef.current.bottom < invisibleThreshold) {\n if (!items.has(lastRenderedKey + 1)) {\n stateRef.current.items = new Map([\n ...items.entries(),\n [lastRenderedKey + 1, makeItemFunc(lastRenderedKey + 1)],\n ]);\n }\n stateRef.current.firstRenderedKey = firstRenderedKey + 1;\n stateRef.current.lastRenderedKey = lastRenderedKey + 1;\n setStateKey(Math.random());\n }\n }\n\n // последний пересекший нижнюю границу видимой области запоминаем как visible item\n for (let key = lastRenderedKey; key > firstRenderedKey; key -= 1) {\n if (stateRef.current.items.has(key) && itemElementsRef.current.has(key)) {\n const itemElement = itemElementsRef.current.get(key) as HTMLElement;\n if (\n visibleAreaMetricsRef.current.bottom - itemElement.getBoundingClientRect().top >\n visibleThreshold\n ) {\n if (key !== visibleItemKeyRef.current) {\n onVisibleItemChange(stateRef.current.items.get(key) as ItemType, key);\n visibleItemKeyRef.current = key;\n }\n break;\n }\n }\n }\n }\n },\n [invisibleThreshold, visibleThreshold, makeItemFunc, onVisibleItemChange, setStateKey]\n );\n\n useEffect(() => {\n const wrapper = wrapperRef.current;\n if (!wrapper) {\n return void 0;\n }\n\n const handleTouchMove = (event: TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n wrapper.addEventListener('touchmove', handleTouchMove);\n return () => wrapper.removeEventListener('touchmove', handleTouchMove);\n }, []);\n\n useEffect(() => {\n return initScrollHandlers({\n axis: 'vertical',\n wrapperRef,\n onTouchMove: (event) => {\n if (!wrapperRef.current) {\n return;\n }\n\n // если достигнут лимит лоадеров, не даем скроллить за границы первого и последнего айтема\n if (asyncDataContext !== null && asyncDataContext.isLimitExceeded() && boundariesRef.current !== null) {\n const translateY = translateYRef.current + event.delta;\n if (translateY > boundariesRef.current.bottom && translateY < boundariesRef.current.top) {\n translateYRef.current = translateY;\n }\n } else {\n translateYRef.current += event.delta;\n addItemsIfNeeded(event.delta > 0 ? 'up' : 'down');\n }\n\n wrapperRef.current.style.transform = `translateY(${translateYRef.current}px)`;\n },\n });\n }, [addItemsIfNeeded]); // eslint-disable-line disable-autofix/react-hooks/exhaustive-deps\n\n useLayoutEffect(() => {\n if (!visualViewport || !wrapperRef.current) {\n return;\n }\n\n if (!visibleAreaMetricsRef.current) {\n visibleAreaMetricsRef.current = { top: wrapperRef.current.offsetTop, bottom: visualViewport.height };\n }\n\n const { firstRenderedKey, lastRenderedKey, needScrollCorrection } = stateRef.current;\n const firstRenderedItemElement = itemElementsRef.current.get(firstRenderedKey);\n const lastRenderedItemElement = itemElementsRef.current.get(lastRenderedKey);\n if (firstRenderedItemElement && lastRenderedItemElement) {\n // если мы добавили айтем сверху, чтобы скролл не прыгал, компенсируем его на высоту самого верхнего айтема\n if (needScrollCorrection) {\n stateRef.current.needScrollCorrection = false;\n translateYRef.current -= firstRenderedItemElement.clientHeight;\n if (boundariesRef.current !== null) {\n boundariesRef.current.top -= firstRenderedItemElement.clientHeight;\n }\n wrapperRef.current.style.transform = `translateY(${translateYRef.current}px)`;\n }\n\n // если достигнут лимит лоадеров, запоминаем границы первого и последнего айтема и не даем скроллить за них\n if (asyncDataContext !== null && !asyncDataContext.isLimitExceeded()) {\n const top =\n translateYRef.current +\n visibleAreaMetricsRef.current.top -\n firstRenderedItemElement.getBoundingClientRect().top;\n const bottom =\n translateYRef.current +\n visibleAreaMetricsRef.current.bottom -\n lastRenderedItemElement.getBoundingClientRect().bottom;\n boundariesRef.current = { top, bottom };\n }\n }\n }, [stateKey]); // eslint-disable-line disable-autofix/react-hooks/exhaustive-deps\n\n return (\n <div className={styles.infiniteScrollWrapper} ref={wrapperRef}>\n {[...stateRef.current.items.entries()].map(([key, item]) => (\n <Fragment key={`${item}`}>\n {key >= stateRef.current.firstRenderedKey && key <= stateRef.current.lastRenderedKey ? (\n <div ref={itemRefCallbacks.get(key)}>{renderItemFunc(item)}</div>\n ) : (\n <div style={{ height: `${itemElementsRef.current.get(key)?.clientHeight}px` }} />\n )}\n </Fragment>\n ))}\n </div>\n );\n};\n"],"names":["_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"InfiniteScroll.js","sources":["../src/InfiniteScroll.tsx"],"sourcesContent":["import {\n Fragment,\n ReactElement,\n RefCallback,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { initScrollHandlers } from '@hh.ru/magritte-internal-custom-scroll';\nimport { AsyncDataContext } from '@hh.ru/magritte-ui-date-picker/AsyncDataContext';\n\nimport styles from './date-picker.less';\n\ninterface InfiniteScrollState<ItemType> {\n items: Map<number, ItemType>;\n firstRenderedKey: number;\n lastRenderedKey: number;\n needScrollCorrection: boolean;\n}\n\ninterface InfiniteScrollProps<ItemType> {\n initialRenderedItems: number;\n /** Высота невидимой части айтема, при достижении которой нужно рендерить еще один айтем за ним */\n invisibleThreshold: number;\n /** Высота видимой части айтема, при достижении которой вызывается колбек onVisibleItemChange с этим айтемом в параметрах */\n visibleThreshold: number;\n makeItemFunc: (key: number) => ItemType;\n renderItemFunc: (item: ItemType) => ReactElement;\n onVisibleItemChange: (item: ItemType, key: number) => void;\n}\n\nexport const InfiniteScroll = <ItemType,>({\n initialRenderedItems,\n invisibleThreshold,\n visibleThreshold,\n makeItemFunc,\n renderItemFunc,\n onVisibleItemChange,\n}: InfiniteScrollProps<ItemType>): ReactElement => {\n const stateRef = useRef<InfiniteScrollState<ItemType>>({\n items: new Map([...Array(initialRenderedItems).keys()].map((index) => [index, makeItemFunc(index)])),\n firstRenderedKey: 0,\n lastRenderedKey: initialRenderedItems - 1,\n needScrollCorrection: false,\n });\n const [stateKey, setStateKey] = useState(0);\n\n const asyncDataContext = useContext(AsyncDataContext);\n const boundariesRef = useRef<{ top: number; bottom: number } | null>(null);\n const itemElementsRef = useRef<Map<number, HTMLDivElement>>(new Map());\n const translateYRef = useRef(0);\n const visibleAreaMetricsRef = useRef<{ top: number; bottom: number } | null>(null);\n const visibleItemKeyRef = useRef(0);\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n\n const itemRefCallbacks = useMemo<Map<number, RefCallback<HTMLDivElement>>>(() => {\n return new Map(\n [...stateRef.current.items.entries()].map(([key]) => {\n const callback = ((ref) => {\n if (ref !== null) {\n itemElementsRef.current.set(key, ref);\n }\n }) as RefCallback<HTMLDivElement>;\n return [key, callback];\n })\n );\n }, [stateKey]); // eslint-disable-line disable-autofix/react-hooks/exhaustive-deps\n\n const addItemsIfNeeded = useCallback(\n (scrollDirection: 'up' | 'down') => {\n if (!visibleAreaMetricsRef.current) {\n return;\n }\n\n const { items, firstRenderedKey, lastRenderedKey } = stateRef.current;\n\n // скролл вверх\n if (scrollDirection === 'up') {\n // самый верхний видимый айтем близко к верхнему краю экрана — нужно рендерить еще один сверху\n const firstRenderedItemElement = itemElementsRef.current.get(firstRenderedKey);\n if (firstRenderedItemElement) {\n const firstRenderedItemMetrics = firstRenderedItemElement.getBoundingClientRect();\n if (visibleAreaMetricsRef.current.top - firstRenderedItemMetrics.top < invisibleThreshold) {\n if (!items.has(firstRenderedKey - 1)) {\n stateRef.current.items = new Map([\n [firstRenderedKey - 1, makeItemFunc(firstRenderedKey - 1)],\n ...items.entries(),\n ]);\n stateRef.current.needScrollCorrection = true;\n }\n stateRef.current.firstRenderedKey = firstRenderedKey - 1;\n stateRef.current.lastRenderedKey = lastRenderedKey - 1;\n setStateKey(Math.random());\n }\n }\n\n // последний пересекший верхнюю границу видимой области запоминаем как visible item\n for (let key = firstRenderedKey; key < lastRenderedKey; key += 1) {\n if (stateRef.current.items.has(key) && itemElementsRef.current.has(key)) {\n const itemElement = itemElementsRef.current.get(key) as HTMLElement;\n if (\n itemElement.getBoundingClientRect().bottom - visibleAreaMetricsRef.current.top >\n visibleThreshold\n ) {\n if (key !== visibleItemKeyRef.current) {\n onVisibleItemChange(stateRef.current.items.get(key) as ItemType, key);\n visibleItemKeyRef.current = key;\n }\n break;\n }\n }\n }\n }\n\n // скролл вниз\n if (scrollDirection === 'down') {\n // самый нижний видимый айтем близко к нижнему краю экрана — нужно рендерить еще один снизу\n const lastRenderedItemElement = itemElementsRef.current.get(lastRenderedKey);\n if (lastRenderedItemElement) {\n const lastRenderedItemMetrics = lastRenderedItemElement.getBoundingClientRect();\n if (lastRenderedItemMetrics.bottom - visibleAreaMetricsRef.current.bottom < invisibleThreshold) {\n if (!items.has(lastRenderedKey + 1)) {\n stateRef.current.items = new Map([\n ...items.entries(),\n [lastRenderedKey + 1, makeItemFunc(lastRenderedKey + 1)],\n ]);\n }\n stateRef.current.firstRenderedKey = firstRenderedKey + 1;\n stateRef.current.lastRenderedKey = lastRenderedKey + 1;\n setStateKey(Math.random());\n }\n }\n\n // последний пересекший нижнюю границу видимой области запоминаем как visible item\n for (let key = lastRenderedKey; key > firstRenderedKey; key -= 1) {\n if (stateRef.current.items.has(key) && itemElementsRef.current.has(key)) {\n const itemElement = itemElementsRef.current.get(key) as HTMLElement;\n if (\n visibleAreaMetricsRef.current.bottom - itemElement.getBoundingClientRect().top >\n visibleThreshold\n ) {\n if (key !== visibleItemKeyRef.current) {\n onVisibleItemChange(stateRef.current.items.get(key) as ItemType, key);\n visibleItemKeyRef.current = key;\n }\n break;\n }\n }\n }\n }\n },\n [invisibleThreshold, visibleThreshold, makeItemFunc, onVisibleItemChange, setStateKey]\n );\n\n useEffect(() => {\n const wrapper = wrapperRef.current;\n if (!wrapper) {\n return void 0;\n }\n\n const handleTouchMove = (event: TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n wrapper.addEventListener('touchmove', handleTouchMove);\n return () => wrapper.removeEventListener('touchmove', handleTouchMove);\n }, []);\n\n useEffect(() => {\n return initScrollHandlers({\n axis: 'vertical',\n wrapperRef,\n onTouchMove: (event) => {\n if (!wrapperRef.current) {\n return;\n }\n\n // если достигнут лимит лоадеров, не даем скроллить за границы первого и последнего айтема\n if (asyncDataContext !== null && asyncDataContext.isLimitExceeded() && boundariesRef.current !== null) {\n const translateY = translateYRef.current + event.delta;\n if (translateY > boundariesRef.current.bottom && translateY < boundariesRef.current.top) {\n translateYRef.current = translateY;\n }\n } else {\n translateYRef.current += event.delta;\n addItemsIfNeeded(event.delta > 0 ? 'up' : 'down');\n }\n\n wrapperRef.current.style.transform = `translateY(${translateYRef.current}px)`;\n },\n });\n }, [addItemsIfNeeded]); // eslint-disable-line disable-autofix/react-hooks/exhaustive-deps\n\n useLayoutEffect(() => {\n if (!visualViewport || !wrapperRef.current) {\n return;\n }\n\n if (!visibleAreaMetricsRef.current) {\n visibleAreaMetricsRef.current = { top: wrapperRef.current.offsetTop, bottom: visualViewport.height };\n }\n\n const { firstRenderedKey, lastRenderedKey, needScrollCorrection } = stateRef.current;\n const firstRenderedItemElement = itemElementsRef.current.get(firstRenderedKey);\n const lastRenderedItemElement = itemElementsRef.current.get(lastRenderedKey);\n if (firstRenderedItemElement && lastRenderedItemElement) {\n // если мы добавили айтем сверху, чтобы скролл не прыгал, компенсируем его на высоту самого верхнего айтема\n if (needScrollCorrection) {\n stateRef.current.needScrollCorrection = false;\n translateYRef.current -= firstRenderedItemElement.clientHeight;\n if (boundariesRef.current !== null) {\n boundariesRef.current.top -= firstRenderedItemElement.clientHeight;\n }\n wrapperRef.current.style.transform = `translateY(${translateYRef.current}px)`;\n }\n\n // если достигнут лимит лоадеров, запоминаем границы первого и последнего айтема и не даем скроллить за них\n if (asyncDataContext !== null && !asyncDataContext.isLimitExceeded()) {\n const top =\n translateYRef.current +\n visibleAreaMetricsRef.current.top -\n firstRenderedItemElement.getBoundingClientRect().top;\n const bottom =\n translateYRef.current +\n visibleAreaMetricsRef.current.bottom -\n lastRenderedItemElement.getBoundingClientRect().bottom;\n boundariesRef.current = { top, bottom };\n }\n }\n }, [stateKey]); // eslint-disable-line disable-autofix/react-hooks/exhaustive-deps\n\n return (\n <div className={styles.infiniteScrollWrapper} ref={wrapperRef}>\n {[...stateRef.current.items.entries()].map(([key, item]) => (\n <Fragment key={`${item}`}>\n {key >= stateRef.current.firstRenderedKey && key <= stateRef.current.lastRenderedKey ? (\n <div ref={itemRefCallbacks.get(key)}>{renderItemFunc(item)}</div>\n ) : (\n <div style={{ height: `${itemElementsRef.current.get(key)?.clientHeight}px` }} />\n )}\n </Fragment>\n ))}\n </div>\n );\n};\n"],"names":["_jsx"],"mappings":"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"}
package/InfoDatePicker.js CHANGED
@@ -9,7 +9,7 @@ import { YearPicker } from './YearPicker.js';
9
9
  import { useDatePickerControls } from './useDatePickerControls.js';
10
10
  import { useDisplayDate } from './utils.js';
11
11
  import { Divider } from '@hh.ru/magritte-ui-divider';
12
- import { s as styles } from './date-picker-CVHG7fs-.js';
12
+ import { s as styles } from './date-picker-zepWKnGz.js';
13
13
  import 'classnames';
14
14
  import 'date-fns';
15
15
  import 'date-fns/constants';
@@ -15,7 +15,7 @@ import { IntervalYearPicker } from './YearPicker.js';
15
15
  import { useDatePickerControls } from './useDatePickerControls.js';
16
16
  import { useDisplayDate } from './utils.js';
17
17
  import { Divider } from '@hh.ru/magritte-ui-divider';
18
- import { s as styles } from './date-picker-CVHG7fs-.js';
18
+ import { s as styles } from './date-picker-zepWKnGz.js';
19
19
  import 'classnames';
20
20
  import './AsyncDataContext.js';
21
21
  import '@hh.ru/magritte-ui-loader';
@@ -1 +1 @@
1
- {"version":3,"file":"IntervalDatePicker.js","sources":["../src/IntervalDatePicker.tsx"],"sourcesContent":["import { FC, forwardRef, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { add } from 'date-fns';\n\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { AsyncDataLoader } from '@hh.ru/magritte-ui-date-picker/AsyncDataLoader';\nimport { AsyncDataStore } from '@hh.ru/magritte-ui-date-picker/AsyncDataStore';\nimport { IntervalDayPicker } from '@hh.ru/magritte-ui-date-picker/DayPicker';\nimport { Header } from '@hh.ru/magritte-ui-date-picker/Header';\nimport { InfiniteScroll } from '@hh.ru/magritte-ui-date-picker/InfiniteScroll';\nimport { IntervalMonthPicker } from '@hh.ru/magritte-ui-date-picker/MonthPicker';\nimport { Weekdays } from '@hh.ru/magritte-ui-date-picker/Weekdays';\nimport { WithArrowNavigationHOC } from '@hh.ru/magritte-ui-date-picker/WithArrowNavigationHOC';\nimport { IntervalYearPicker } from '@hh.ru/magritte-ui-date-picker/YearPicker';\nimport { DateType, DragState, IntervalDatePickerProps } from '@hh.ru/magritte-ui-date-picker/types';\nimport { useDatePickerControls } from '@hh.ru/magritte-ui-date-picker/useDatePickerControls';\nimport { useDisplayDate } from '@hh.ru/magritte-ui-date-picker/utils';\nimport { Divider } from '@hh.ru/magritte-ui-divider';\n\nimport styles from './date-picker.less';\n\nconst SingleLayoutIntervalDatePickerRenderFunc = forwardRef<HTMLDivElement, Omit<IntervalDatePickerProps, 'layout'>>(\n (\n {\n // настройки функциональности\n disabledDates,\n disabledDatesFunc,\n displayDate: _displayDate,\n enabledCalendars,\n minDate,\n maxDate,\n selectionStart,\n selectionEnd,\n // колбеки\n onDisplayDateChange,\n onStartSelect,\n onEndSelect,\n // настройки внешнего вида\n activeHeader,\n alignHeader,\n headerMonthFormat,\n locale,\n showAdjacentDays = true,\n showControls,\n showDivider = true,\n showHeader = true,\n showHeaderDate,\n showWeekdays = true,\n },\n ref\n ) => {\n const displayDate = useDisplayDate(_displayDate, selectionStart);\n const [hoveredDate, setHoveredDate] = useState<DateType | null>(null);\n const [dragState, setDragState] = useState<DragState | null>(null);\n const { calendar, switchCalendar, zoomIntoMonth, zoomIntoYear, goToNextPeriod, goToPrevPeriod } =\n useDatePickerControls(enabledCalendars, displayDate, onDisplayDateChange);\n\n return (\n <div className={styles.layout} ref={ref}>\n <AsyncDataStore disabledDatesFunc={disabledDatesFunc}>\n <AsyncDataLoader>\n {showHeader && (\n <Header\n calendar={calendar}\n displayDate={displayDate}\n activeHeader={activeHeader}\n alignHeader={alignHeader}\n goToNextPeriod={goToNextPeriod}\n goToPrevPeriod={goToPrevPeriod}\n headerMonthFormat={headerMonthFormat}\n locale={locale}\n showControls={showControls}\n showHeaderDate={showHeaderDate}\n switchCalendar={switchCalendar}\n />\n )}\n {showWeekdays && calendar === 'day' && <Weekdays locale={locale} />}\n {showDivider && (showHeader || showWeekdays) && <Divider />}\n {calendar === 'day' && (\n <IntervalDayPicker\n disabledDates={disabledDates}\n displayDate={displayDate}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n hoveredDate={hoveredDate}\n dragState={dragState}\n onDateHover={setHoveredDate}\n onDateDrag={setDragState}\n onStartSelect={onStartSelect}\n onEndSelect={onEndSelect}\n showAdjacentDays={showAdjacentDays}\n minDate={minDate}\n maxDate={maxDate}\n />\n )}\n {calendar === 'month' && (\n <IntervalMonthPicker\n locale={locale}\n displayDate={displayDate}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n onStartSelect={zoomIntoMonth}\n onEndSelect={zoomIntoMonth}\n />\n )}\n {calendar === 'year' && (\n <IntervalYearPicker\n displayDate={displayDate}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n onStartSelect={zoomIntoYear}\n onEndSelect={zoomIntoYear}\n />\n )}\n </AsyncDataLoader>\n </AsyncDataStore>\n </div>\n );\n }\n);\n\nSingleLayoutIntervalDatePickerRenderFunc.displayName = 'SingleLayoutIntervalDatePickerRenderFunc';\n\nconst SingleLayoutIntervalDatePicker = WithArrowNavigationHOC(SingleLayoutIntervalDatePickerRenderFunc);\n\nconst MobileMultiLayoutIntervalDatePicker: FC<Omit<IntervalDatePickerProps, 'layout'>> = ({\n // настройки функциональности\n disabledDates,\n disabledDatesFunc,\n displayDate: _displayDate,\n selectionStart,\n selectionEnd,\n minDate,\n maxDate,\n // колбеки\n onStartSelect,\n onEndSelect,\n // настройки внешнего вида\n headerMonthFormat,\n locale,\n showDivider = true,\n showHeader = true,\n showWeekdays = true,\n}) => {\n const displayDate = useDisplayDate(_displayDate, selectionStart);\n const makeDate = useCallback((index: number) => add(displayDate, { months: index }), [displayDate]);\n const stickyRef = useRef<HTMLDivElement | null>(null);\n const [visibleDate, setVisibleDate] = useState(displayDate);\n\n const renderDate = useCallback(\n (date: DateType) => {\n return (\n <AsyncDataLoader>\n <Header\n calendar=\"day\"\n displayDate={date}\n activeHeader={false}\n alignHeader=\"left\"\n headerMonthFormat={headerMonthFormat}\n locale={locale}\n showControls={false}\n />\n <IntervalDayPicker\n disabledDates={disabledDates}\n displayDate={date}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n onStartSelect={onStartSelect}\n onEndSelect={onEndSelect}\n showAdjacentDays={false}\n minDate={minDate}\n maxDate={maxDate}\n />\n </AsyncDataLoader>\n );\n },\n // eslint-disable-next-line disable-autofix/react-hooks/exhaustive-deps\n [disabledDates, headerMonthFormat, locale, selectionStart, selectionEnd, onStartSelect, onEndSelect]\n );\n\n const onVisibleItemChange = useCallback(\n (date: DateType) => {\n setVisibleDate(date);\n },\n [setVisibleDate]\n );\n\n useEffect(() => {\n if (stickyRef.current !== null) {\n stickyRef.current.style.setProperty('--sticky-top', `${Math.floor(stickyRef.current.offsetTop)}px`);\n }\n }, []);\n\n return (\n <div className={styles.layoutVertical}>\n <div className={styles.stickyWrapper} ref={stickyRef}>\n {showHeader && (\n <Header\n calendar=\"month\"\n displayDate={visibleDate}\n activeHeader={false}\n alignHeader=\"left\"\n locale={locale}\n showControls={false}\n />\n )}\n {showWeekdays && <Weekdays locale={locale} />}\n {showDivider && (showHeader || showWeekdays) && <Divider />}\n </div>\n <AsyncDataStore disabledDatesFunc={disabledDatesFunc} parallelLoadersLimit={1}>\n <InfiniteScroll\n initialRenderedItems={5}\n invisibleThreshold={300}\n visibleThreshold={100}\n makeItemFunc={makeDate}\n renderItemFunc={renderDate}\n onVisibleItemChange={onVisibleItemChange}\n />\n </AsyncDataStore>\n </div>\n );\n};\n\nconst DesktopMultiLayoutIntervalDatePickerRenderFunc = forwardRef<\n HTMLDivElement,\n Omit<IntervalDatePickerProps, 'layout'>\n>(\n (\n {\n // настройки функциональности\n disabledDates,\n disabledDatesFunc,\n displayDate,\n enabledCalendars,\n selectionStart,\n selectionEnd,\n minDate,\n maxDate,\n // колбеки\n onDisplayDateChange,\n onStartSelect,\n onEndSelect,\n // настройки внешнего вида\n headerMonthFormat,\n locale,\n showControls,\n showDivider = true,\n showHeader = true,\n showHeaderDate,\n showWeekdays = true,\n },\n ref\n ) => {\n const leftDisplayDate = useDisplayDate(displayDate, selectionStart);\n const rightDisplayDate = useMemo(() => add(leftDisplayDate, { months: 1 }), [leftDisplayDate]);\n const [hoveredDate, setHoveredDate] = useState<DateType | null>(null);\n const [dragState, setDragState] = useState<DragState | null>(null);\n const { goToNextPeriod, goToPrevPeriod } = useDatePickerControls(\n enabledCalendars,\n leftDisplayDate,\n onDisplayDateChange\n );\n\n return (\n <div className={styles.layoutHorizontal} ref={ref}>\n <AsyncDataStore disabledDatesFunc={disabledDatesFunc}>\n <AsyncDataLoader>\n {showHeader && (\n <Header\n calendar=\"day\"\n displayDate={leftDisplayDate}\n activeHeader={false}\n alignHeader=\"center\"\n goToPrevPeriod={goToPrevPeriod}\n headerMonthFormat={headerMonthFormat}\n locale={locale}\n showControls={showControls}\n showHeaderDate={showHeaderDate}\n showNextControl={false}\n />\n )}\n {showWeekdays && <Weekdays locale={locale} />}\n {showDivider && (showHeader || showWeekdays) && <Divider />}\n <IntervalDayPicker\n disabledDates={disabledDates}\n displayDate={leftDisplayDate}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n hoveredDate={hoveredDate}\n dragState={dragState}\n onStartSelect={onStartSelect}\n onEndSelect={onEndSelect}\n onDateHover={setHoveredDate}\n onDateDrag={setDragState}\n showAdjacentDays={false}\n minDate={minDate}\n maxDate={maxDate}\n />\n </AsyncDataLoader>\n <AsyncDataLoader>\n {showHeader && (\n <Header\n calendar=\"day\"\n displayDate={rightDisplayDate}\n activeHeader={false}\n alignHeader=\"center\"\n goToNextPeriod={goToNextPeriod}\n headerMonthFormat={headerMonthFormat}\n locale={locale}\n showControls={showControls}\n showHeaderDate={showHeaderDate}\n showPrevControl={false}\n />\n )}\n {showWeekdays && <Weekdays locale={locale} />}\n {showDivider && (showHeader || showWeekdays) && <Divider />}\n <IntervalDayPicker\n disabledDates={disabledDates}\n displayDate={rightDisplayDate}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n hoveredDate={hoveredDate}\n dragState={dragState}\n onStartSelect={onStartSelect}\n onEndSelect={onEndSelect}\n onDateHover={setHoveredDate}\n onDateDrag={setDragState}\n showAdjacentDays={false}\n minDate={minDate}\n maxDate={maxDate}\n />\n </AsyncDataLoader>\n </AsyncDataStore>\n </div>\n );\n }\n);\n\nDesktopMultiLayoutIntervalDatePickerRenderFunc.displayName = 'DesktopMultiLayoutIntervalDatePickerRenderFunc';\n\nconst DesktopMultiLayoutIntervalDatePicker = WithArrowNavigationHOC(DesktopMultiLayoutIntervalDatePickerRenderFunc);\n\nexport const IntervalDatePicker: FC<IntervalDatePickerProps> = ({ layout = 'single', ...props }) => {\n const { isMobile } = useBreakpoint();\n\n if (layout === 'single') {\n return <SingleLayoutIntervalDatePicker {...props} />;\n }\n\n if (layout === 'multi' && isMobile) {\n return <MobileMultiLayoutIntervalDatePicker {...props} />;\n }\n\n if (layout === 'multi' && !isMobile) {\n return <DesktopMultiLayoutIntervalDatePicker {...props} />;\n }\n\n return null;\n};\n\nexport const UncontrolledIntervalDatePicker: FC<IntervalDatePickerProps> = ({\n displayDate: initialDisplayDate,\n selectionStart: initialSelectionStart,\n selectionEnd: initialSelectionEnd,\n onDisplayDateChange,\n onStartSelect,\n onEndSelect,\n ...props\n}) => {\n const [displayDate, setDisplayDate] = useState<DateType>(useDisplayDate(initialDisplayDate, initialSelectionStart));\n const [selectionStart, setSelectionStart] = useState<DateType | null>(initialSelectionStart ?? null);\n const [selectionEnd, setSelectionEnd] = useState<DateType | null>(initialSelectionEnd ?? null);\n\n const handleDisplayDateChange = useCallback(\n (value: DateType) => {\n onDisplayDateChange?.(value);\n setDisplayDate(value);\n },\n [onDisplayDateChange, setDisplayDate]\n );\n\n const handleStartSelect = useCallback(\n (value: DateType | null) => {\n onStartSelect?.(value);\n setSelectionStart(value);\n },\n [onStartSelect, setSelectionStart]\n );\n\n const handleEndSelect = useCallback(\n (value: DateType | null) => {\n onEndSelect?.(value);\n setSelectionEnd(value);\n },\n [onEndSelect, setSelectionEnd]\n );\n\n return (\n <IntervalDatePicker\n {...props}\n displayDate={displayDate}\n onDisplayDateChange={handleDisplayDateChange}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n onStartSelect={handleStartSelect}\n onEndSelect={handleEndSelect}\n />\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"IntervalDatePicker.js","sources":["../src/IntervalDatePicker.tsx"],"sourcesContent":["import { FC, forwardRef, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { add } from 'date-fns';\n\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { AsyncDataLoader } from '@hh.ru/magritte-ui-date-picker/AsyncDataLoader';\nimport { AsyncDataStore } from '@hh.ru/magritte-ui-date-picker/AsyncDataStore';\nimport { IntervalDayPicker } from '@hh.ru/magritte-ui-date-picker/DayPicker';\nimport { Header } from '@hh.ru/magritte-ui-date-picker/Header';\nimport { InfiniteScroll } from '@hh.ru/magritte-ui-date-picker/InfiniteScroll';\nimport { IntervalMonthPicker } from '@hh.ru/magritte-ui-date-picker/MonthPicker';\nimport { Weekdays } from '@hh.ru/magritte-ui-date-picker/Weekdays';\nimport { WithArrowNavigationHOC } from '@hh.ru/magritte-ui-date-picker/WithArrowNavigationHOC';\nimport { IntervalYearPicker } from '@hh.ru/magritte-ui-date-picker/YearPicker';\nimport { DateType, DragState, IntervalDatePickerProps } from '@hh.ru/magritte-ui-date-picker/types';\nimport { useDatePickerControls } from '@hh.ru/magritte-ui-date-picker/useDatePickerControls';\nimport { useDisplayDate } from '@hh.ru/magritte-ui-date-picker/utils';\nimport { Divider } from '@hh.ru/magritte-ui-divider';\n\nimport styles from './date-picker.less';\n\nconst SingleLayoutIntervalDatePickerRenderFunc = forwardRef<HTMLDivElement, Omit<IntervalDatePickerProps, 'layout'>>(\n (\n {\n // настройки функциональности\n disabledDates,\n disabledDatesFunc,\n displayDate: _displayDate,\n enabledCalendars,\n minDate,\n maxDate,\n selectionStart,\n selectionEnd,\n // колбеки\n onDisplayDateChange,\n onStartSelect,\n onEndSelect,\n // настройки внешнего вида\n activeHeader,\n alignHeader,\n headerMonthFormat,\n locale,\n showAdjacentDays = true,\n showControls,\n showDivider = true,\n showHeader = true,\n showHeaderDate,\n showWeekdays = true,\n },\n ref\n ) => {\n const displayDate = useDisplayDate(_displayDate, selectionStart);\n const [hoveredDate, setHoveredDate] = useState<DateType | null>(null);\n const [dragState, setDragState] = useState<DragState | null>(null);\n const { calendar, switchCalendar, zoomIntoMonth, zoomIntoYear, goToNextPeriod, goToPrevPeriod } =\n useDatePickerControls(enabledCalendars, displayDate, onDisplayDateChange);\n\n return (\n <div className={styles.layout} ref={ref}>\n <AsyncDataStore disabledDatesFunc={disabledDatesFunc}>\n <AsyncDataLoader>\n {showHeader && (\n <Header\n calendar={calendar}\n displayDate={displayDate}\n activeHeader={activeHeader}\n alignHeader={alignHeader}\n goToNextPeriod={goToNextPeriod}\n goToPrevPeriod={goToPrevPeriod}\n headerMonthFormat={headerMonthFormat}\n locale={locale}\n showControls={showControls}\n showHeaderDate={showHeaderDate}\n switchCalendar={switchCalendar}\n />\n )}\n {showWeekdays && calendar === 'day' && <Weekdays locale={locale} />}\n {showDivider && (showHeader || showWeekdays) && <Divider />}\n {calendar === 'day' && (\n <IntervalDayPicker\n disabledDates={disabledDates}\n displayDate={displayDate}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n hoveredDate={hoveredDate}\n dragState={dragState}\n onDateHover={setHoveredDate}\n onDateDrag={setDragState}\n onStartSelect={onStartSelect}\n onEndSelect={onEndSelect}\n showAdjacentDays={showAdjacentDays}\n minDate={minDate}\n maxDate={maxDate}\n />\n )}\n {calendar === 'month' && (\n <IntervalMonthPicker\n locale={locale}\n displayDate={displayDate}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n onStartSelect={zoomIntoMonth}\n onEndSelect={zoomIntoMonth}\n />\n )}\n {calendar === 'year' && (\n <IntervalYearPicker\n displayDate={displayDate}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n onStartSelect={zoomIntoYear}\n onEndSelect={zoomIntoYear}\n />\n )}\n </AsyncDataLoader>\n </AsyncDataStore>\n </div>\n );\n }\n);\n\nSingleLayoutIntervalDatePickerRenderFunc.displayName = 'SingleLayoutIntervalDatePickerRenderFunc';\n\nconst SingleLayoutIntervalDatePicker = WithArrowNavigationHOC(SingleLayoutIntervalDatePickerRenderFunc);\n\nconst MobileMultiLayoutIntervalDatePicker: FC<Omit<IntervalDatePickerProps, 'layout'>> = ({\n // настройки функциональности\n disabledDates,\n disabledDatesFunc,\n displayDate: _displayDate,\n selectionStart,\n selectionEnd,\n minDate,\n maxDate,\n // колбеки\n onStartSelect,\n onEndSelect,\n // настройки внешнего вида\n headerMonthFormat,\n locale,\n showDivider = true,\n showHeader = true,\n showWeekdays = true,\n}) => {\n const displayDate = useDisplayDate(_displayDate, selectionStart);\n const makeDate = useCallback((index: number) => add(displayDate, { months: index }), [displayDate]);\n const stickyRef = useRef<HTMLDivElement | null>(null);\n const [visibleDate, setVisibleDate] = useState(displayDate);\n\n const renderDate = useCallback(\n (date: DateType) => {\n return (\n <AsyncDataLoader>\n <Header\n calendar=\"day\"\n displayDate={date}\n activeHeader={false}\n alignHeader=\"left\"\n headerMonthFormat={headerMonthFormat}\n locale={locale}\n showControls={false}\n />\n <IntervalDayPicker\n disabledDates={disabledDates}\n displayDate={date}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n onStartSelect={onStartSelect}\n onEndSelect={onEndSelect}\n showAdjacentDays={false}\n minDate={minDate}\n maxDate={maxDate}\n />\n </AsyncDataLoader>\n );\n },\n // eslint-disable-next-line disable-autofix/react-hooks/exhaustive-deps\n [disabledDates, headerMonthFormat, locale, selectionStart, selectionEnd, onStartSelect, onEndSelect]\n );\n\n const onVisibleItemChange = useCallback(\n (date: DateType) => {\n setVisibleDate(date);\n },\n [setVisibleDate]\n );\n\n useEffect(() => {\n if (stickyRef.current !== null) {\n stickyRef.current.style.setProperty('--sticky-top', `${Math.floor(stickyRef.current.offsetTop)}px`);\n }\n }, []);\n\n return (\n <div className={styles.layoutVertical}>\n <div className={styles.stickyWrapper} ref={stickyRef}>\n {showHeader && (\n <Header\n calendar=\"month\"\n displayDate={visibleDate}\n activeHeader={false}\n alignHeader=\"left\"\n locale={locale}\n showControls={false}\n />\n )}\n {showWeekdays && <Weekdays locale={locale} />}\n {showDivider && (showHeader || showWeekdays) && <Divider />}\n </div>\n <AsyncDataStore disabledDatesFunc={disabledDatesFunc} parallelLoadersLimit={1}>\n <InfiniteScroll\n initialRenderedItems={5}\n invisibleThreshold={300}\n visibleThreshold={100}\n makeItemFunc={makeDate}\n renderItemFunc={renderDate}\n onVisibleItemChange={onVisibleItemChange}\n />\n </AsyncDataStore>\n </div>\n );\n};\n\nconst DesktopMultiLayoutIntervalDatePickerRenderFunc = forwardRef<\n HTMLDivElement,\n Omit<IntervalDatePickerProps, 'layout'>\n>(\n (\n {\n // настройки функциональности\n disabledDates,\n disabledDatesFunc,\n displayDate,\n enabledCalendars,\n selectionStart,\n selectionEnd,\n minDate,\n maxDate,\n // колбеки\n onDisplayDateChange,\n onStartSelect,\n onEndSelect,\n // настройки внешнего вида\n headerMonthFormat,\n locale,\n showControls,\n showDivider = true,\n showHeader = true,\n showHeaderDate,\n showWeekdays = true,\n },\n ref\n ) => {\n const leftDisplayDate = useDisplayDate(displayDate, selectionStart);\n const rightDisplayDate = useMemo(() => add(leftDisplayDate, { months: 1 }), [leftDisplayDate]);\n const [hoveredDate, setHoveredDate] = useState<DateType | null>(null);\n const [dragState, setDragState] = useState<DragState | null>(null);\n const { goToNextPeriod, goToPrevPeriod } = useDatePickerControls(\n enabledCalendars,\n leftDisplayDate,\n onDisplayDateChange\n );\n\n return (\n <div className={styles.layoutHorizontal} ref={ref}>\n <AsyncDataStore disabledDatesFunc={disabledDatesFunc}>\n <AsyncDataLoader>\n {showHeader && (\n <Header\n calendar=\"day\"\n displayDate={leftDisplayDate}\n activeHeader={false}\n alignHeader=\"center\"\n goToPrevPeriod={goToPrevPeriod}\n headerMonthFormat={headerMonthFormat}\n locale={locale}\n showControls={showControls}\n showHeaderDate={showHeaderDate}\n showNextControl={false}\n />\n )}\n {showWeekdays && <Weekdays locale={locale} />}\n {showDivider && (showHeader || showWeekdays) && <Divider />}\n <IntervalDayPicker\n disabledDates={disabledDates}\n displayDate={leftDisplayDate}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n hoveredDate={hoveredDate}\n dragState={dragState}\n onStartSelect={onStartSelect}\n onEndSelect={onEndSelect}\n onDateHover={setHoveredDate}\n onDateDrag={setDragState}\n showAdjacentDays={false}\n minDate={minDate}\n maxDate={maxDate}\n />\n </AsyncDataLoader>\n <AsyncDataLoader>\n {showHeader && (\n <Header\n calendar=\"day\"\n displayDate={rightDisplayDate}\n activeHeader={false}\n alignHeader=\"center\"\n goToNextPeriod={goToNextPeriod}\n headerMonthFormat={headerMonthFormat}\n locale={locale}\n showControls={showControls}\n showHeaderDate={showHeaderDate}\n showPrevControl={false}\n />\n )}\n {showWeekdays && <Weekdays locale={locale} />}\n {showDivider && (showHeader || showWeekdays) && <Divider />}\n <IntervalDayPicker\n disabledDates={disabledDates}\n displayDate={rightDisplayDate}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n hoveredDate={hoveredDate}\n dragState={dragState}\n onStartSelect={onStartSelect}\n onEndSelect={onEndSelect}\n onDateHover={setHoveredDate}\n onDateDrag={setDragState}\n showAdjacentDays={false}\n minDate={minDate}\n maxDate={maxDate}\n />\n </AsyncDataLoader>\n </AsyncDataStore>\n </div>\n );\n }\n);\n\nDesktopMultiLayoutIntervalDatePickerRenderFunc.displayName = 'DesktopMultiLayoutIntervalDatePickerRenderFunc';\n\nconst DesktopMultiLayoutIntervalDatePicker = WithArrowNavigationHOC(DesktopMultiLayoutIntervalDatePickerRenderFunc);\n\nexport const IntervalDatePicker: FC<IntervalDatePickerProps> = ({ layout = 'single', ...props }) => {\n const { isMobile } = useBreakpoint();\n\n if (layout === 'single') {\n return <SingleLayoutIntervalDatePicker {...props} />;\n }\n\n if (layout === 'multi' && isMobile) {\n return <MobileMultiLayoutIntervalDatePicker {...props} />;\n }\n\n if (layout === 'multi' && !isMobile) {\n return <DesktopMultiLayoutIntervalDatePicker {...props} />;\n }\n\n return null;\n};\n\nexport const UncontrolledIntervalDatePicker: FC<IntervalDatePickerProps> = ({\n displayDate: initialDisplayDate,\n selectionStart: initialSelectionStart,\n selectionEnd: initialSelectionEnd,\n onDisplayDateChange,\n onStartSelect,\n onEndSelect,\n ...props\n}) => {\n const [displayDate, setDisplayDate] = useState<DateType>(useDisplayDate(initialDisplayDate, initialSelectionStart));\n const [selectionStart, setSelectionStart] = useState<DateType | null>(initialSelectionStart ?? null);\n const [selectionEnd, setSelectionEnd] = useState<DateType | null>(initialSelectionEnd ?? null);\n\n const handleDisplayDateChange = useCallback(\n (value: DateType) => {\n onDisplayDateChange?.(value);\n setDisplayDate(value);\n },\n [onDisplayDateChange, setDisplayDate]\n );\n\n const handleStartSelect = useCallback(\n (value: DateType | null) => {\n onStartSelect?.(value);\n setSelectionStart(value);\n },\n [onStartSelect, setSelectionStart]\n );\n\n const handleEndSelect = useCallback(\n (value: DateType | null) => {\n onEndSelect?.(value);\n setSelectionEnd(value);\n },\n [onEndSelect, setSelectionEnd]\n );\n\n return (\n <IntervalDatePicker\n {...props}\n displayDate={displayDate}\n onDisplayDateChange={handleDisplayDateChange}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n onStartSelect={handleStartSelect}\n onEndSelect={handleEndSelect}\n />\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
package/MonthPicker.js CHANGED
@@ -4,7 +4,7 @@ import classnames from 'classnames';
4
4
  import { eachMonthOfInterval, startOfYear, endOfYear, isSameMonth, format, startOfMonth, endOfMonth } from 'date-fns';
5
5
  import { useDisabled } from '@hh.ru/magritte-common-use-disabled';
6
6
  import { useIntervalPicker } from './useIntervalPicker.js';
7
- import { s as styles } from './date-picker-CVHG7fs-.js';
7
+ import { s as styles } from './date-picker-zepWKnGz.js';
8
8
  import 'react';
9
9
 
10
10
  const MONTHS_IN_ROW = 3;
package/Weekdays.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import './index.css';
2
2
  import { jsx } from 'react/jsx-runtime';
3
- import { s as styles } from './date-picker-CVHG7fs-.js';
3
+ import { s as styles } from './date-picker-zepWKnGz.js';
4
4
 
5
5
  const DAYS = [1, 2, 3, 4, 5, 6, 0];
6
6
  const Weekdays = ({ locale }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"WithArrowNavigationHOC.js","sources":["../src/WithArrowNavigationHOC.tsx"],"sourcesContent":["import { ComponentType, ForwardRefExoticComponent, useEffect, useRef, useState } from 'react';\n\nimport { useKeyboardNavigation } from '@hh.ru/magritte-common-keyboard';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\n\nexport const WithArrowNavigationHOC = <Props,>(Component: ForwardRefExoticComponent<Props>): ComponentType<Props> => {\n const ComponentWithArrowNavigation = (props: Props) => {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [activeElement, setActiveElement] = useState<HTMLElement | null>(null);\n const bindArrowNavigation = useKeyboardNavigation({ activeElement });\n const containerRefMultiplexer = useMultipleRefs(containerRef, bindArrowNavigation);\n\n /* По умолчанию useKeyboardNavigation ищет ближайший фокусабельный элемент относительно document.activeElement,\n * но при выборе даты она рендерится как disabled кнопка, поэтому не попадает в document.activeElement,\n * поэтому сохраняем ссылку на кнопку и передаем в useKeyboardNavigation напрямую\n */\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return void 0;\n }\n\n const handleFocusIn = (event: FocusEvent) => {\n setActiveElement(event.target as HTMLElement);\n };\n\n container.addEventListener('focusin', handleFocusIn);\n return () => container.removeEventListener('focusin', handleFocusIn);\n }, [setActiveElement]);\n\n return <Component {...props} ref={containerRefMultiplexer} />;\n };\n\n return ComponentWithArrowNavigation;\n};\n"],"names":["_jsx"],"mappings":";;;;;AAKa,MAAA,sBAAsB,GAAG,CAAS,SAA2C,KAA0B;AAChH,IAAA,MAAM,4BAA4B,GAAG,CAAC,KAAY,KAAI;AAClD,QAAA,MAAM,YAAY,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;QACzD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAC;QAC7E,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;QACrE,MAAM,uBAAuB,GAAG,eAAe,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;AAEnF;;;AAGG;QACH,SAAS,CAAC,MAAK;AACX,YAAA,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;YACvC,IAAI,CAAC,SAAS,EAAE;gBACZ,OAAO,KAAK,CAAC,CAAC;AACjB,aAAA;AAED,YAAA,MAAM,aAAa,GAAG,CAAC,KAAiB,KAAI;AACxC,gBAAA,gBAAgB,CAAC,KAAK,CAAC,MAAqB,CAAC,CAAC;AAClD,aAAC,CAAC;AAEF,YAAA,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YACrD,OAAO,MAAM,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACzE,SAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAEvB,OAAOA,GAAA,CAAC,SAAS,EAAK,EAAA,GAAA,KAAK,EAAE,GAAG,EAAE,uBAAuB,EAAA,CAAI,CAAC;AAClE,KAAC,CAAC;AAEF,IAAA,OAAO,4BAA4B,CAAC;AACxC;;;;"}
1
+ {"version":3,"file":"WithArrowNavigationHOC.js","sources":["../src/WithArrowNavigationHOC.tsx"],"sourcesContent":["import { ComponentType, ForwardRefExoticComponent, useEffect, useRef, useState } from 'react';\n\nimport { useKeyboardNavigation } from '@hh.ru/magritte-common-keyboard';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\n\nexport const WithArrowNavigationHOC = <Props,>(Component: ForwardRefExoticComponent<Props>): ComponentType<Props> => {\n const ComponentWithArrowNavigation = (props: Props) => {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [activeElement, setActiveElement] = useState<HTMLElement | null>(null);\n const bindArrowNavigation = useKeyboardNavigation({ activeElement });\n const containerRefMultiplexer = useMultipleRefs(containerRef, bindArrowNavigation);\n\n /* По умолчанию useKeyboardNavigation ищет ближайший фокусабельный элемент относительно document.activeElement,\n * но при выборе даты она рендерится как disabled кнопка, поэтому не попадает в document.activeElement,\n * поэтому сохраняем ссылку на кнопку и передаем в useKeyboardNavigation напрямую\n */\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return void 0;\n }\n\n const handleFocusIn = (event: FocusEvent) => {\n setActiveElement(event.target as HTMLElement);\n };\n\n container.addEventListener('focusin', handleFocusIn);\n return () => container.removeEventListener('focusin', handleFocusIn);\n }, [setActiveElement]);\n\n return <Component {...props} ref={containerRefMultiplexer} />;\n };\n\n return ComponentWithArrowNavigation;\n};\n"],"names":["_jsx"],"mappings":";;;;;AAKa,MAAA,sBAAsB,GAAG,CAAS,SAA2C,KAA0B;AAChH,IAAA,MAAM,4BAA4B,GAAG,CAAC,KAAY,KAAI;AAClD,QAAA,MAAM,YAAY,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;QACzD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAC;QAC7E,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;QACrE,MAAM,uBAAuB,GAAG,eAAe,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;AAEnF;;;AAGG;QACH,SAAS,CAAC,MAAK;AACX,YAAA,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;YACvC,IAAI,CAAC,SAAS,EAAE;gBACZ,OAAO,KAAK,CAAC,CAAC;aACjB;AAED,YAAA,MAAM,aAAa,GAAG,CAAC,KAAiB,KAAI;AACxC,gBAAA,gBAAgB,CAAC,KAAK,CAAC,MAAqB,CAAC,CAAC;AAClD,aAAC,CAAC;AAEF,YAAA,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YACrD,OAAO,MAAM,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACzE,SAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAEvB,OAAOA,GAAA,CAAC,SAAS,EAAK,EAAA,GAAA,KAAK,EAAE,GAAG,EAAE,uBAAuB,EAAA,CAAI,CAAC;AAClE,KAAC,CAAC;AAEF,IAAA,OAAO,4BAA4B,CAAC;AACxC;;;;"}
package/YearPicker.js CHANGED
@@ -5,7 +5,7 @@ import { eachYearOfInterval, isSameYear, format, startOfYear, endOfYear } from '
5
5
  import { useDisabled } from '@hh.ru/magritte-common-use-disabled';
6
6
  import { useIntervalPicker } from './useIntervalPicker.js';
7
7
  import { makeYearsInterval } from './utils.js';
8
- import { s as styles } from './date-picker-CVHG7fs-.js';
8
+ import { s as styles } from './date-picker-zepWKnGz.js';
9
9
  import 'react';
10
10
  import 'date-fns/constants';
11
11
 
@@ -0,0 +1,5 @@
1
+ import './index.css';
2
+ var styles = {"layout":"magritte-layout___WQLZL_3-3-55","layout-horizontal":"magritte-layout-horizontal___RHMqN_3-3-55","layoutHorizontal":"magritte-layout-horizontal___RHMqN_3-3-55","layout-vertical":"magritte-layout-vertical___Q4III_3-3-55","layoutVertical":"magritte-layout-vertical___Q4III_3-3-55","date-picker":"magritte-date-picker___osO3k_3-3-55","datePicker":"magritte-date-picker___osO3k_3-3-55","date-picker_loading":"magritte-date-picker_loading___oEckY_3-3-55","datePickerLoading":"magritte-date-picker_loading___oEckY_3-3-55","loader":"magritte-loader___npAoS_3-3-55","loading":"magritte-loading___Q08Ci_3-3-55","sticky-wrapper":"magritte-sticky-wrapper___-cscS_3-3-55","stickyWrapper":"magritte-sticky-wrapper___-cscS_3-3-55","infinite-scroll-wrapper":"magritte-infinite-scroll-wrapper___4BFJP_3-3-55","infiniteScrollWrapper":"magritte-infinite-scroll-wrapper___4BFJP_3-3-55","header-wrapper":"magritte-header-wrapper___w3fTl_3-3-55","headerWrapper":"magritte-header-wrapper___w3fTl_3-3-55","header":"magritte-header___SYp35_3-3-55","header-date-wrapper_center":"magritte-header-date-wrapper_center___6X5Q4_3-3-55","headerDateWrapperCenter":"magritte-header-date-wrapper_center___6X5Q4_3-3-55","header-date-wrapper_left":"magritte-header-date-wrapper_left___hxe8I_3-3-55","headerDateWrapperLeft":"magritte-header-date-wrapper_left___hxe8I_3-3-55","header-date":"magritte-header-date___C28N0_3-3-55","headerDate":"magritte-header-date___C28N0_3-3-55","header-date_active":"magritte-header-date_active___FDSSp_3-3-55","headerDateActive":"magritte-header-date_active___FDSSp_3-3-55","control":"magritte-control___1JqcP_3-3-55","weekdays":"magritte-weekdays___zl5JK_3-3-55","weekday":"magritte-weekday___pDlOC_3-3-55","calendar":"magritte-calendar___X0u7X_3-3-55","calendar_days":"magritte-calendar_days___i0cpU_3-3-55","calendarDays":"magritte-calendar_days___i0cpU_3-3-55","calendar_months":"magritte-calendar_months___t0Vai_3-3-55","calendarMonths":"magritte-calendar_months___t0Vai_3-3-55","calendar_years":"magritte-calendar_years___XUL8j_3-3-55","calendarYears":"magritte-calendar_years___XUL8j_3-3-55","item":"magritte-item___U0-5-_3-3-55","text":"magritte-text___pG0UY_3-3-55","substrate":"magritte-substrate___EC-Ay_3-3-55","text_unselected":"magritte-text_unselected___gjuAU_3-3-55","textUnselected":"magritte-text_unselected___gjuAU_3-3-55","text_selected":"magritte-text_selected___a69MP_3-3-55","textSelected":"magritte-text_selected___a69MP_3-3-55","text_disabled":"magritte-text_disabled___I1IYo_3-3-55","textDisabled":"magritte-text_disabled___I1IYo_3-3-55","text_draggable":"magritte-text_draggable___ebUW6_3-3-55","textDraggable":"magritte-text_draggable___ebUW6_3-3-55","text_drag-source":"magritte-text_drag-source___-krSg_3-3-55","textDragSource":"magritte-text_drag-source___-krSg_3-3-55","text_drop-target":"magritte-text_drop-target___mwmCv_3-3-55","textDropTarget":"magritte-text_drop-target___mwmCv_3-3-55","text_today":"magritte-text_today___c3RHg_3-3-55","textToday":"magritte-text_today___c3RHg_3-3-55","disabled":"magritte-disabled___IsN76_3-3-55","item_interval":"magritte-item_interval___RbZXk_3-3-55","itemInterval":"magritte-item_interval___RbZXk_3-3-55","item_interval-start":"magritte-item_interval-start___4AC3w_3-3-55","itemIntervalStart":"magritte-item_interval-start___4AC3w_3-3-55","item_interval-end":"magritte-item_interval-end___X-E9S_3-3-55","itemIntervalEnd":"magritte-item_interval-end___X-E9S_3-3-55","item_interval-row-start":"magritte-item_interval-row-start___8AftH_3-3-55","itemIntervalRowStart":"magritte-item_interval-row-start___8AftH_3-3-55","item_interval-row-end":"magritte-item_interval-row-end___-AIXc_3-3-55","itemIntervalRowEnd":"magritte-item_interval-row-end___-AIXc_3-3-55","text_holiday":"magritte-text_holiday___532-b_3-3-55","textHoliday":"magritte-text_holiday___532-b_3-3-55","text_short-workday":"magritte-text_short-workday___lZl3F_3-3-55","textShortWorkday":"magritte-text_short-workday___lZl3F_3-3-55","text_workday":"magritte-text_workday___2Ok-d_3-3-55","textWorkday":"magritte-text_workday___2Ok-d_3-3-55"};
3
+
4
+ export { styles as s };
5
+ //# sourceMappingURL=date-picker-zepWKnGz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-picker-zepWKnGz.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}