@vkontakte/vkui 8.2.1 → 8.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/components/DateInput/DateInput.js +1 -1
  2. package/dist/components/DateInput/DateInput.js.map +1 -1
  3. package/dist/components/DateRangeInput/DateRangeInput.js +1 -1
  4. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  5. package/dist/components/Search/Search.js +1 -4
  6. package/dist/components/Search/Search.js.map +1 -1
  7. package/dist/components/Snackbar/subcomponents/Basic/Basic.d.ts +1 -1
  8. package/dist/components/Snackbar/subcomponents/Basic/Basic.d.ts.map +1 -1
  9. package/dist/components/Snackbar/subcomponents/Basic/Basic.js +11 -2
  10. package/dist/components/Snackbar/subcomponents/Basic/Basic.js.map +1 -1
  11. package/dist/components.css +1 -1
  12. package/dist/components.css.map +1 -1
  13. package/dist/cssm/components/DateInput/DateInput.js +1 -1
  14. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  15. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +1 -1
  16. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  17. package/dist/cssm/components/PullToRefresh/PullToRefresh.module.css +2 -0
  18. package/dist/cssm/components/Search/Search.js +1 -4
  19. package/dist/cssm/components/Search/Search.js.map +1 -1
  20. package/dist/cssm/components/Search/Search.module.css +8 -11
  21. package/dist/cssm/components/Snackbar/subcomponents/Basic/Basic.js +11 -2
  22. package/dist/cssm/components/Snackbar/subcomponents/Basic/Basic.js.map +1 -1
  23. package/dist/cssm/components/Snackbar/subcomponents/Basic/Basic.module.css +0 -8
  24. package/dist/cssm/hooks/useMergeProps.js +1 -1
  25. package/dist/cssm/hooks/useMergeProps.js.map +1 -1
  26. package/dist/cssm/lib/date.js +1 -1
  27. package/dist/cssm/lib/date.js.map +1 -1
  28. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +1 -1
  29. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  30. package/dist/hooks/useMergeProps.js +1 -1
  31. package/dist/hooks/useMergeProps.js.map +1 -1
  32. package/dist/lib/date.js +1 -1
  33. package/dist/lib/date.js.map +1 -1
  34. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +1 -1
  35. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  36. package/dist/vkui.css +1 -1
  37. package/dist/vkui.css.map +1 -1
  38. package/package.json +1 -1
  39. package/src/components/DateInput/DateInput.tsx +1 -1
  40. package/src/components/DateRangeInput/DateRangeInput.tsx +1 -1
  41. package/src/components/PullToRefresh/PullToRefresh.module.css +2 -0
  42. package/src/components/PullToRefresh/PullToRefresh.module.css.d.ts.map +1 -1
  43. package/src/components/Search/Search.module.css +8 -11
  44. package/src/components/Search/Search.module.css.d.ts.map +1 -1
  45. package/src/components/Search/Search.tsx +1 -1
  46. package/src/components/Snackbar/subcomponents/Basic/Basic.module.css +0 -8
  47. package/src/components/Snackbar/subcomponents/Basic/Basic.module.css.d.ts.map +1 -1
  48. package/src/components/Snackbar/subcomponents/Basic/Basic.tsx +9 -3
  49. package/src/hooks/useMergeProps.ts +1 -1
  50. package/src/lib/date.ts +1 -1
  51. package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/components/Snackbar/subcomponents/Basic/Basic.tsx"],"sourcesContent":["'use client';\n\nimport type * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../../../hooks/useAdaptivity';\nimport type { HTMLAttributesWithRootRef } from '../../../../types';\nimport { RootComponent } from '../../../RootComponent/RootComponent';\nimport { Paragraph } from '../../../Typography/Paragraph/Paragraph';\nimport { Subhead } from '../../../Typography/Subhead/Subhead';\nimport styles from './Basic.module.css';\n\nconst stylesLayout = {\n none: styles.layoutNone,\n vertical: styles.layoutVertical,\n horizontal: styles.layoutHorizontal,\n};\n\nconst densityClassNames = {\n none: styles.densityNone,\n regular: styles.densityRegular,\n};\n\nexport interface BasicProps {\n /**\n * Элемент действия.\n * Не может использоваться одновременно с `subtitle`.\n */\n action?: React.ReactNode | undefined;\n\n /**\n * Контент в правой части, может быть иконкой 24x24.\n */\n after?: React.ReactNode | undefined;\n\n /**\n * Варианты расположения кнопки действия\n * По умолчанию на десктопах, или при наличии элементов `after` или `subtitle`\n * имеет значение `vertical`, в остальных случаях `horizontal`.\n */\n layout?: 'vertical' | 'horizontal' | undefined;\n\n /**\n * Может быть следующими компонентами:\n * - цветная иконка 24x24 или 28x28 пикселя\n * - `<Avatar size={32} />`\n * - `<Image size={40} />`.\n */\n before?: React.ReactNode | undefined;\n\n /**\n * Задает стиль снекбара.\n */\n mode?: 'default' | 'dark' | undefined;\n\n /**\n * Дополнительная строка текста под `children`.\n * Не может использоваться одновременно с `action`.\n */\n subtitle?: React.ReactNode | undefined;\n}\n\nexport interface SnackbarBasicProps extends HTMLAttributesWithRootRef<HTMLDivElement>, BasicProps {}\n\nexport function Basic({\n layout: layoutProps,\n action,\n after,\n before,\n mode,\n subtitle,\n children,\n ...restProps\n}: SnackbarBasicProps): React.ReactNode {\n const { density = 'none' } = useAdaptivity();\n const layout = after || subtitle ? 'vertical' : 'none';\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles.body,\n stylesLayout[layoutProps || layout],\n density !== 'compact' && densityClassNames[density],\n mode === 'dark' && styles.modeDark,\n )}\n >\n {before && <div className={styles.before}>{before}</div>}\n\n <div className={styles.content}>\n <Paragraph className={styles.contentText}>{children}</Paragraph>\n {subtitle && !action && <Subhead className={styles.contentSubtitle}>{subtitle}</Subhead>}\n\n {action && !subtitle && <div className={styles.action}>{action}</div>}\n </div>\n\n {after && <div className={styles.after}>{after}</div>}\n </RootComponent>\n );\n}\n"],"names":["classNames","useAdaptivity","RootComponent","Paragraph","Subhead","styles","stylesLayout","none","layoutNone","vertical","layoutVertical","horizontal","layoutHorizontal","densityClassNames","densityNone","regular","densityRegular","Basic","layout","layoutProps","action","after","before","mode","subtitle","children","restProps","density","baseClassName","body","modeDark","div","className","content","contentText","contentSubtitle"],"mappings":"AAAA;;AAGA,SAASA,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,qCAAkC;AAEhE,SAASC,aAAa,QAAQ,0CAAuC;AACrE,SAASC,SAAS,QAAQ,6CAA0C;AACpE,SAASC,OAAO,QAAQ,yCAAsC;AAC9D,OAAOC,YAAY,qBAAqB;AAExC,MAAMC,eAAe;IACnBC,MAAMF,OAAOG,UAAU;IACvBC,UAAUJ,OAAOK,cAAc;IAC/BC,YAAYN,OAAOO,gBAAgB;AACrC;AAEA,MAAMC,oBAAoB;IACxBN,MAAMF,OAAOS,WAAW;IACxBC,SAASV,OAAOW,cAAc;AAChC;AA2CA,OAAO,SAASC,MAAM,EACpBC,QAAQC,WAAW,EACnBC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,IAAI,EACJC,QAAQ,EACRC,QAAQ,EACR,GAAGC,WACgB;IACnB,MAAM,EAAEC,UAAU,MAAM,EAAE,GAAG1B;IAC7B,MAAMiB,SAASG,SAASG,WAAW,aAAa;IAEhD,qBACE,MAACtB;QACE,GAAGwB,SAAS;QACbE,eAAe5B,WACbK,OAAOwB,IAAI,EACXvB,YAAY,CAACa,eAAeD,OAAO,EACnCS,YAAY,aAAad,iBAAiB,CAACc,QAAQ,EACnDJ,SAAS,UAAUlB,OAAOyB,QAAQ;;YAGnCR,wBAAU,KAACS;gBAAIC,WAAW3B,OAAOiB,MAAM;0BAAGA;;0BAE3C,MAACS;gBAAIC,WAAW3B,OAAO4B,OAAO;;kCAC5B,KAAC9B;wBAAU6B,WAAW3B,OAAO6B,WAAW;kCAAGT;;oBAC1CD,YAAY,CAACJ,wBAAU,KAAChB;wBAAQ4B,WAAW3B,OAAO8B,eAAe;kCAAGX;;oBAEpEJ,UAAU,CAACI,0BAAY,KAACO;wBAAIC,WAAW3B,OAAOe,MAAM;kCAAGA;;;;YAGzDC,uBAAS,KAACU;gBAAIC,WAAW3B,OAAOgB,KAAK;0BAAGA;;;;AAG/C"}
1
+ {"version":3,"sources":["../../../../../../src/components/Snackbar/subcomponents/Basic/Basic.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../../../hooks/useAdaptivity';\nimport type { HTMLAttributesWithRootRef } from '../../../../types';\nimport { ColorSchemeProvider } from '../../../ColorSchemeProvider/ColorSchemeProvider';\nimport { RootComponent } from '../../../RootComponent/RootComponent';\nimport { Paragraph } from '../../../Typography/Paragraph/Paragraph';\nimport { Subhead } from '../../../Typography/Subhead/Subhead';\nimport styles from './Basic.module.css';\n\nconst stylesLayout = {\n none: styles.layoutNone,\n vertical: styles.layoutVertical,\n horizontal: styles.layoutHorizontal,\n};\n\nconst densityClassNames = {\n none: styles.densityNone,\n regular: styles.densityRegular,\n};\n\nexport interface BasicProps {\n /**\n * Элемент действия.\n * Не может использоваться одновременно с `subtitle`.\n */\n action?: React.ReactNode | undefined;\n\n /**\n * Контент в правой части, может быть иконкой 24x24.\n */\n after?: React.ReactNode | undefined;\n\n /**\n * Варианты расположения кнопки действия\n * По умолчанию на десктопах, или при наличии элементов `after` или `subtitle`\n * имеет значение `vertical`, в остальных случаях `horizontal`.\n */\n layout?: 'vertical' | 'horizontal' | undefined;\n\n /**\n * Может быть следующими компонентами:\n * - цветная иконка 24x24 или 28x28 пикселя\n * - `<Avatar size={32} />`\n * - `<Image size={40} />`.\n */\n before?: React.ReactNode | undefined;\n\n /**\n * Задает стиль снекбара.\n */\n mode?: 'default' | 'dark' | undefined;\n\n /**\n * Дополнительная строка текста под `children`.\n * Не может использоваться одновременно с `action`.\n */\n subtitle?: React.ReactNode | undefined;\n}\n\nexport interface SnackbarBasicProps extends HTMLAttributesWithRootRef<HTMLDivElement>, BasicProps {}\n\nexport function Basic({\n layout: layoutProps,\n action,\n after,\n before,\n mode,\n subtitle,\n children,\n ...restProps\n}: SnackbarBasicProps): React.ReactNode {\n const { density = 'none' } = useAdaptivity();\n const layout = after || subtitle ? 'vertical' : 'none';\n\n const snackbar = (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles.body,\n stylesLayout[layoutProps || layout],\n density !== 'compact' && densityClassNames[density],\n )}\n >\n {before && <div className={styles.before}>{before}</div>}\n\n <div className={styles.content}>\n <Paragraph className={styles.contentText}>{children}</Paragraph>\n {subtitle && !action && <Subhead className={styles.contentSubtitle}>{subtitle}</Subhead>}\n\n {action && !subtitle && <div className={styles.action}>{action}</div>}\n </div>\n\n {after && <div className={styles.after}>{after}</div>}\n </RootComponent>\n );\n\n if (mode === 'dark') {\n return <ColorSchemeProvider value=\"dark\">{snackbar}</ColorSchemeProvider>;\n }\n\n return snackbar;\n}\n"],"names":["React","classNames","useAdaptivity","ColorSchemeProvider","RootComponent","Paragraph","Subhead","styles","stylesLayout","none","layoutNone","vertical","layoutVertical","horizontal","layoutHorizontal","densityClassNames","densityNone","regular","densityRegular","Basic","layout","layoutProps","action","after","before","mode","subtitle","children","restProps","density","snackbar","baseClassName","body","div","className","content","contentText","contentSubtitle","value"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,qCAAkC;AAEhE,SAASC,mBAAmB,QAAQ,sDAAmD;AACvF,SAASC,aAAa,QAAQ,0CAAuC;AACrE,SAASC,SAAS,QAAQ,6CAA0C;AACpE,SAASC,OAAO,QAAQ,yCAAsC;AAC9D,OAAOC,YAAY,qBAAqB;AAExC,MAAMC,eAAe;IACnBC,MAAMF,OAAOG,UAAU;IACvBC,UAAUJ,OAAOK,cAAc;IAC/BC,YAAYN,OAAOO,gBAAgB;AACrC;AAEA,MAAMC,oBAAoB;IACxBN,MAAMF,OAAOS,WAAW;IACxBC,SAASV,OAAOW,cAAc;AAChC;AA2CA,OAAO,SAASC,MAAM,EACpBC,QAAQC,WAAW,EACnBC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,IAAI,EACJC,QAAQ,EACRC,QAAQ,EACR,GAAGC,WACgB;IACnB,MAAM,EAAEC,UAAU,MAAM,EAAE,GAAG3B;IAC7B,MAAMkB,SAASG,SAASG,WAAW,aAAa;IAEhD,MAAMI,yBACJ,MAAC1B;QACE,GAAGwB,SAAS;QACbG,eAAe9B,WACbM,OAAOyB,IAAI,EACXxB,YAAY,CAACa,eAAeD,OAAO,EACnCS,YAAY,aAAad,iBAAiB,CAACc,QAAQ;;YAGpDL,wBAAU,KAACS;gBAAIC,WAAW3B,OAAOiB,MAAM;0BAAGA;;0BAE3C,MAACS;gBAAIC,WAAW3B,OAAO4B,OAAO;;kCAC5B,KAAC9B;wBAAU6B,WAAW3B,OAAO6B,WAAW;kCAAGT;;oBAC1CD,YAAY,CAACJ,wBAAU,KAAChB;wBAAQ4B,WAAW3B,OAAO8B,eAAe;kCAAGX;;oBAEpEJ,UAAU,CAACI,0BAAY,KAACO;wBAAIC,WAAW3B,OAAOe,MAAM;kCAAGA;;;;YAGzDC,uBAAS,KAACU;gBAAIC,WAAW3B,OAAOgB,KAAK;0BAAGA;;;;IAI7C,IAAIE,SAAS,QAAQ;QACnB,qBAAO,KAACtB;YAAoBmC,OAAM;sBAAQR;;IAC5C;IAEA,OAAOA;AACT"}
@@ -42,10 +42,6 @@
42
42
  }
43
43
  }
44
44
 
45
- .modeDark {
46
- background: var(--vkui--color_background_contrast_inverse);
47
- }
48
-
49
45
  .before {
50
46
  margin-inline-end: 12px;
51
47
  }
@@ -76,10 +72,6 @@
76
72
  color: var(--vkui--color_text_subhead);
77
73
  }
78
74
 
79
- .modeDark .contentText {
80
- color: var(--vkui--color_text_contrast);
81
- }
82
-
83
75
  /* layout */
84
76
 
85
77
  .layoutHorizontal .action {
@@ -13,7 +13,7 @@ export const useMergeProps = (originalProps, slotProps)=>{
13
13
  if (!slotProps) {
14
14
  return filterProps(originalProps);
15
15
  }
16
- const { className: rootSlotClassName, style: rootSlotStyle, ...rootSlotProps } = slotProps || {};
16
+ const { className: rootSlotClassName, style: rootSlotStyle, ...rootSlotProps } = slotProps;
17
17
  const { className: originalClassName, style: originalSlotStyle, ...originalRestProps } = originalProps;
18
18
  const resolvedClassName = originalClassName || rootSlotClassName ? classNames(originalClassName, rootSlotClassName) : undefined;
19
19
  const resolvedStyle = originalSlotStyle || rootSlotStyle ? mergeStyle(originalSlotStyle, rootSlotStyle) : undefined;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/useMergeProps.ts"],"sourcesContent":["import type { AllHTMLAttributes } from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { getMergedSameEventsByProps } from '../helpers/getMergedSameEventsByProps';\nimport { mergeStyle } from '../helpers/mergeStyle';\nimport { filterObject } from '../lib/object';\nimport type { HasRootRef } from '../types';\nimport { useExternRef } from './useExternRef';\n\ntype BaseProps<T extends HTMLElement = HTMLElement> = HasRootRef<T> &\n Pick<AllHTMLAttributes<T>, 'className' | 'style'>;\n\nconst filterProps = <T extends BaseProps = BaseProps>(props: T): T => {\n return filterObject(props, (value) => value !== undefined);\n};\n\nexport const useMergeProps = <T extends BaseProps = BaseProps>(\n originalProps: T,\n slotProps?: T | undefined,\n): T => {\n const originalSlotGetRef = originalProps.getRootRef;\n const rootSlotGetRef = slotProps?.getRootRef;\n\n const getRootRef = useExternRef(originalSlotGetRef, rootSlotGetRef);\n\n if (!slotProps) {\n return filterProps(originalProps);\n }\n\n const { className: rootSlotClassName, style: rootSlotStyle, ...rootSlotProps } = slotProps || {};\n\n const {\n className: originalClassName,\n style: originalSlotStyle,\n ...originalRestProps\n } = originalProps;\n\n const resolvedClassName =\n originalClassName || rootSlotClassName\n ? classNames(originalClassName, rootSlotClassName)\n : undefined;\n const resolvedStyle =\n originalSlotStyle || rootSlotStyle ? mergeStyle(originalSlotStyle, rootSlotStyle) : undefined;\n\n const mergedEventsByInjectProps: any = getMergedSameEventsByProps(\n originalRestProps,\n rootSlotProps,\n );\n\n const resolvedProps: T = {\n ...originalRestProps,\n ...rootSlotProps,\n ...mergedEventsByInjectProps,\n };\n\n if (resolvedClassName) {\n resolvedProps.className = resolvedClassName;\n }\n if (resolvedStyle) {\n resolvedProps.style = resolvedStyle;\n }\n if (rootSlotGetRef || originalSlotGetRef) {\n resolvedProps.getRootRef = getRootRef;\n }\n\n return filterProps(resolvedProps);\n};\n"],"names":["classNames","getMergedSameEventsByProps","mergeStyle","filterObject","useExternRef","filterProps","props","value","undefined","useMergeProps","originalProps","slotProps","originalSlotGetRef","getRootRef","rootSlotGetRef","className","rootSlotClassName","style","rootSlotStyle","rootSlotProps","originalClassName","originalSlotStyle","originalRestProps","resolvedClassName","resolvedStyle","mergedEventsByInjectProps","resolvedProps"],"mappings":"AACA,SAASA,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,0BAA0B,QAAQ,2CAAwC;AACnF,SAASC,UAAU,QAAQ,2BAAwB;AACnD,SAASC,YAAY,QAAQ,mBAAgB;AAE7C,SAASC,YAAY,QAAQ,oBAAiB;AAK9C,MAAMC,cAAc,CAAkCC;IACpD,OAAOH,aAAaG,OAAO,CAACC,QAAUA,UAAUC;AAClD;AAEA,OAAO,MAAMC,gBAAgB,CAC3BC,eACAC;IAEA,MAAMC,qBAAqBF,cAAcG,UAAU;IACnD,MAAMC,iBAAiBH,WAAWE;IAElC,MAAMA,aAAaT,aAAaQ,oBAAoBE;IAEpD,IAAI,CAACH,WAAW;QACd,OAAON,YAAYK;IACrB;IAEA,MAAM,EAAEK,WAAWC,iBAAiB,EAAEC,OAAOC,aAAa,EAAE,GAAGC,eAAe,GAAGR,aAAa,CAAC;IAE/F,MAAM,EACJI,WAAWK,iBAAiB,EAC5BH,OAAOI,iBAAiB,EACxB,GAAGC,mBACJ,GAAGZ;IAEJ,MAAMa,oBACJH,qBAAqBJ,oBACjBhB,WAAWoB,mBAAmBJ,qBAC9BR;IACN,MAAMgB,gBACJH,qBAAqBH,gBAAgBhB,WAAWmB,mBAAmBH,iBAAiBV;IAEtF,MAAMiB,4BAAiCxB,2BACrCqB,mBACAH;IAGF,MAAMO,gBAAmB;QACvB,GAAGJ,iBAAiB;QACpB,GAAGH,aAAa;QAChB,GAAGM,yBAAyB;IAC9B;IAEA,IAAIF,mBAAmB;QACrBG,cAAcX,SAAS,GAAGQ;IAC5B;IACA,IAAIC,eAAe;QACjBE,cAAcT,KAAK,GAAGO;IACxB;IACA,IAAIV,kBAAkBF,oBAAoB;QACxCc,cAAcb,UAAU,GAAGA;IAC7B;IAEA,OAAOR,YAAYqB;AACrB,EAAE"}
1
+ {"version":3,"sources":["../../../src/hooks/useMergeProps.ts"],"sourcesContent":["import type { AllHTMLAttributes } from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { getMergedSameEventsByProps } from '../helpers/getMergedSameEventsByProps';\nimport { mergeStyle } from '../helpers/mergeStyle';\nimport { filterObject } from '../lib/object';\nimport type { HasRootRef } from '../types';\nimport { useExternRef } from './useExternRef';\n\ntype BaseProps<T extends HTMLElement = HTMLElement> = HasRootRef<T> &\n Pick<AllHTMLAttributes<T>, 'className' | 'style'>;\n\nconst filterProps = <T extends BaseProps = BaseProps>(props: T): T => {\n return filterObject(props, (value) => value !== undefined);\n};\n\nexport const useMergeProps = <T extends BaseProps = BaseProps>(\n originalProps: T,\n slotProps?: T | undefined,\n): T => {\n const originalSlotGetRef = originalProps.getRootRef;\n const rootSlotGetRef = slotProps?.getRootRef;\n\n const getRootRef = useExternRef(originalSlotGetRef, rootSlotGetRef);\n\n if (!slotProps) {\n return filterProps(originalProps);\n }\n\n const { className: rootSlotClassName, style: rootSlotStyle, ...rootSlotProps } = slotProps;\n\n const {\n className: originalClassName,\n style: originalSlotStyle,\n ...originalRestProps\n } = originalProps;\n\n const resolvedClassName =\n originalClassName || rootSlotClassName\n ? classNames(originalClassName, rootSlotClassName)\n : undefined;\n const resolvedStyle =\n originalSlotStyle || rootSlotStyle ? mergeStyle(originalSlotStyle, rootSlotStyle) : undefined;\n\n const mergedEventsByInjectProps: any = getMergedSameEventsByProps(\n originalRestProps,\n rootSlotProps,\n );\n\n const resolvedProps: T = {\n ...originalRestProps,\n ...rootSlotProps,\n ...mergedEventsByInjectProps,\n };\n\n if (resolvedClassName) {\n resolvedProps.className = resolvedClassName;\n }\n if (resolvedStyle) {\n resolvedProps.style = resolvedStyle;\n }\n if (rootSlotGetRef || originalSlotGetRef) {\n resolvedProps.getRootRef = getRootRef;\n }\n\n return filterProps(resolvedProps);\n};\n"],"names":["classNames","getMergedSameEventsByProps","mergeStyle","filterObject","useExternRef","filterProps","props","value","undefined","useMergeProps","originalProps","slotProps","originalSlotGetRef","getRootRef","rootSlotGetRef","className","rootSlotClassName","style","rootSlotStyle","rootSlotProps","originalClassName","originalSlotStyle","originalRestProps","resolvedClassName","resolvedStyle","mergedEventsByInjectProps","resolvedProps"],"mappings":"AACA,SAASA,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,0BAA0B,QAAQ,2CAAwC;AACnF,SAASC,UAAU,QAAQ,2BAAwB;AACnD,SAASC,YAAY,QAAQ,mBAAgB;AAE7C,SAASC,YAAY,QAAQ,oBAAiB;AAK9C,MAAMC,cAAc,CAAkCC;IACpD,OAAOH,aAAaG,OAAO,CAACC,QAAUA,UAAUC;AAClD;AAEA,OAAO,MAAMC,gBAAgB,CAC3BC,eACAC;IAEA,MAAMC,qBAAqBF,cAAcG,UAAU;IACnD,MAAMC,iBAAiBH,WAAWE;IAElC,MAAMA,aAAaT,aAAaQ,oBAAoBE;IAEpD,IAAI,CAACH,WAAW;QACd,OAAON,YAAYK;IACrB;IAEA,MAAM,EAAEK,WAAWC,iBAAiB,EAAEC,OAAOC,aAAa,EAAE,GAAGC,eAAe,GAAGR;IAEjF,MAAM,EACJI,WAAWK,iBAAiB,EAC5BH,OAAOI,iBAAiB,EACxB,GAAGC,mBACJ,GAAGZ;IAEJ,MAAMa,oBACJH,qBAAqBJ,oBACjBhB,WAAWoB,mBAAmBJ,qBAC9BR;IACN,MAAMgB,gBACJH,qBAAqBH,gBAAgBhB,WAAWmB,mBAAmBH,iBAAiBV;IAEtF,MAAMiB,4BAAiCxB,2BACrCqB,mBACAH;IAGF,MAAMO,gBAAmB;QACvB,GAAGJ,iBAAiB;QACpB,GAAGH,aAAa;QAChB,GAAGM,yBAAyB;IAC9B;IAEA,IAAIF,mBAAmB;QACrBG,cAAcX,SAAS,GAAGQ;IAC5B;IACA,IAAIC,eAAe;QACjBE,cAAcT,KAAK,GAAGO;IACxB;IACA,IAAIV,kBAAkBF,oBAAoB;QACxCc,cAAcb,UAAU,GAAGA;IAC7B;IAEA,OAAOR,YAAYqB;AACrB,EAAE"}
@@ -248,7 +248,7 @@ export function eachDayOfInterval(startDate, endDate, { step = 1 } = {}) {
248
248
  const dates = [];
249
249
  while(+date <= endTime){
250
250
  dates.push(new Date(date));
251
- date.setDate(date.getDate() + 1);
251
+ date.setDate(date.getDate() + step);
252
252
  date.setHours(0, 0, 0, 0);
253
253
  }
254
254
  return reversed ? dates.reverse() : dates;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/date.ts"],"sourcesContent":["import { isSameDate } from '@vkontakte/vkjs';\nimport { TZDateMini } from '@vkontakte/vkui-date-fns-tz';\n\nexport function parse(input: string, format: string, referenceDate: Date = new Date()): Date {\n const match2 = /^\\d\\d/; // 00 - 99\n const match4 = /^\\d{4}/; // 0000 - 9999\n\n const entries: Array<[string, RegExp, (val: string) => [string, number, boolean]]> = [\n ['yyyy', match4, (val) => ['Y', +val, true]],\n [\n 'MM',\n match2,\n (val) => {\n const numVal = +val;\n const okay = numVal > 0 && numVal <= 12;\n\n return ['M', numVal - 1, okay];\n },\n ],\n ['dd', match2, (val) => ['D', +val, true]],\n [\n 'HH',\n match2,\n (val) => {\n const numVal = parseInt(val, 10);\n const okay = numVal >= 0 && numVal < 24;\n\n return ['h', numVal, okay];\n },\n ],\n [\n 'mm',\n match2,\n (val) => {\n const numVal = parseInt(val, 10);\n const okay = numVal >= 0 && numVal < 60;\n\n return ['m', numVal, okay];\n },\n ],\n ];\n\n const superRegExp = new RegExp(entries.map((item) => item[0]).join('|'), 'g');\n\n const store: {\n [key: string]: number;\n } = {\n y: referenceDate.getFullYear(),\n M: referenceDate.getMonth(),\n d: referenceDate.getDate(),\n h: referenceDate.getHours(),\n m: referenceDate.getMinutes(),\n s: referenceDate.getSeconds(),\n ms: referenceDate.getMilliseconds(),\n };\n\n let prevInputIndex = 0;\n let lastNonFormatting = '';\n let lastFormatIndex = 0;\n let found = false;\n\n while (true) {\n const match = superRegExp.exec(format);\n\n if (!match) {\n break;\n }\n\n const length = match[0].length;\n const atIndex = superRegExp.lastIndex - length;\n\n const item = entries.find((item) => item[0] === match[0])!;\n\n lastNonFormatting = format.slice(lastFormatIndex, atIndex);\n lastFormatIndex = superRegExp.lastIndex;\n\n if (\n input.slice(prevInputIndex, prevInputIndex + lastNonFormatting.length) !== lastNonFormatting\n ) {\n return new Date('');\n }\n\n const value = input.slice(prevInputIndex + lastNonFormatting.length).match(item[1]);\n\n if (!value) {\n return new Date('');\n }\n\n prevInputIndex = prevInputIndex + lastNonFormatting.length + value[0].length;\n\n const [key, newValue, okay] = item[2](value[0]);\n\n if (!okay) {\n return new Date('');\n }\n\n store[key] = newValue;\n found = true;\n }\n\n if (!found) {\n return new Date('');\n }\n\n const date = new Date(store.Y, store.M, store.D, store.h, store.m, store.s, store.ms);\n\n // Since days of months are dynamic, they can't be validated in entries,\n // so we check it here, in the finalized date\n if (date.getMonth() !== store.M || date.getDate() !== store.D) {\n return new Date('');\n }\n\n return date;\n}\n\nexport const convertDateToTimeZone = (\n date?: Date | null | undefined,\n timezone?: string | undefined,\n): Date | undefined | null => {\n if (!timezone) {\n return date;\n }\n if (date === null) {\n return null;\n }\n return date ? TZDateMini.tz(timezone, date) : undefined;\n};\n\nconst formatter = /*#__PURE__*/ new Intl.DateTimeFormat();\n\nexport const convertDateFromTimeZone = (date: Date | null, timezone?: string): Date | null => {\n if (!timezone) {\n return date;\n }\n if (date === null) {\n return null;\n }\n // eslint-disable-next-line new-cap\n const systemTimezone = formatter.resolvedOptions().timeZone;\n return TZDateMini.tz(systemTimezone, date);\n};\n\nexport type CreateDateInTimeZoneOverrides = {\n year?: number | undefined;\n month?: number | undefined;\n date?: number | undefined;\n hours?: number | undefined;\n minutes?: number | undefined;\n seconds?: number | undefined;\n milliseconds?: number | undefined;\n};\n\nexport function createDateInTimeZone(\n baseDate: Date,\n timezone?: string,\n overrides?: CreateDateInTimeZoneOverrides,\n): Date {\n const year = overrides?.year ?? baseDate.getFullYear();\n const month = overrides?.month ?? baseDate.getMonth();\n const date = overrides?.date ?? baseDate.getDate();\n const hours = overrides?.hours ?? baseDate.getHours();\n const minutes = overrides?.minutes ?? baseDate.getMinutes();\n const seconds = overrides?.seconds ?? baseDate.getSeconds();\n const milliseconds = overrides?.milliseconds ?? baseDate.getMilliseconds();\n\n if (!timezone) {\n return new Date(year, month, date, hours, minutes, seconds, milliseconds);\n }\n return TZDateMini.tz(timezone, year, month, date, hours, minutes, seconds, milliseconds);\n}\n\nconst dateOptions: Intl.DateTimeFormatOptions = {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n};\n\n// dd.MM.yyyy\nexport const dateFormatter = /*#__PURE__*/ new Intl.DateTimeFormat('ru-RU', dateOptions);\n\nclass DateTimeFormat extends Intl.DateTimeFormat {\n constructor() {\n super('ru-RU', {\n ...dateOptions,\n hour: '2-digit',\n minute: '2-digit',\n });\n }\n\n format(date?: Date | number): string {\n return super.format(date).replace(',', '');\n }\n}\n\n// dd.MM.yyyy HH:mm\nexport const dateTimeFormatter = /*#__PURE__*/ new DateTimeFormat();\n\n/**\n * Возвращает дату начала месяца\n */\nexport function startOfMonth(date: Date): Date {\n const result = new Date(date);\n result.setDate(1);\n result.setHours(0, 0, 0, 0);\n return result;\n}\n\n/**\n * Возвращает дату конца месяца\n */\nexport function endOfMonth(date: Date): Date {\n const result = new Date(date);\n const month = result.getMonth();\n result.setFullYear(result.getFullYear(), month + 1, 0);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\ntype WeekOptions = { weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined };\n\nexport const MONDAY = 1;\n\n/**\n * Возвращает дату начала недели\n */\nexport function startOfWeek(date: Date, { weekStartsOn = MONDAY }: WeekOptions = {}): Date {\n const result = new Date(date);\n const day = result.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n result.setDate(result.getDate() - diff);\n result.setHours(0, 0, 0, 0);\n return result;\n}\n\n/**\n * Возвращает дату конца недели\n */\nexport function endOfWeek(date: Date, { weekStartsOn = MONDAY }: WeekOptions = {}): Date {\n const result = new Date(date);\n const day = result.getDay();\n const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n\n result.setDate(result.getDate() + diff);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\n/**\n * Возвращает дату начала дня\n */\nexport function startOfDay(date: Date): Date {\n const result = new Date(date);\n result.setHours(0, 0, 0, 0);\n return result;\n}\n\n/**\n * Возвращает дату конца дня\n */\nexport function endOfDay(date: Date): Date {\n const result = new Date(date);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\nexport function startOfTomorrow() {\n const date = new Date();\n const day = date.getDate();\n\n date.setDate(day + 1);\n date.setHours(0, 0, 0, 0);\n return date;\n}\n\n/**\n * Возвращает дату начала минуты\n */\nexport function startOfMinute(date: Date): Date {\n const result = new Date(date);\n result.setSeconds(0, 0);\n return result;\n}\n\nexport function eachDayOfInterval(\n startDate: Date,\n endDate: Date,\n { step = 1 }: { step?: number | undefined } = {},\n): Date[] {\n let reversed = +startDate > +endDate;\n const endTime = reversed ? +startDate : +endDate;\n const date = new Date(reversed ? endDate : startDate);\n date.setHours(0, 0, 0, 0);\n\n if (!step) {\n return [];\n }\n if (step < 0) {\n step = -step;\n reversed = !reversed;\n }\n\n const dates = [];\n\n while (+date <= endTime) {\n dates.push(new Date(date));\n date.setDate(date.getDate() + 1);\n date.setHours(0, 0, 0, 0);\n }\n\n return reversed ? dates.reverse() : dates;\n}\n\n/**\n * Проверяет, что переданные даты относятся к одному и тому же месяцу\n *\n * @example\n * ```ts\n * import assert from 'node:assert';\n * import { isSameMonth } from './date.ts';\n *\n * const d1 = new Date();\n * const d2 = new Date();\n * assert.ok(isSameMonth(d1, d2));\n * ```\n */\nexport function isSameMonth(d1: Date, d2: Date): boolean {\n return d1.getMonth() === d2.getMonth() && d1.getFullYear() === d2.getFullYear();\n}\n\nexport function isLastDayOfMonth(date: Date) {\n return +endOfDay(date) === +endOfMonth(date);\n}\n\nexport function isWithinInterval(date: Date, interval: [Date, Date]) {\n const [startTime, endTime] = interval.sort((a, b) => +a - +b);\n\n return date >= startTime && date <= endTime;\n}\n\nexport function isToday(date: Date) {\n return isSameDate(date, new Date());\n}\n\nexport function isYesterday(date: Date) {\n const yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n\n return isSameDate(date, yesterday);\n}\n\nexport function isMatch(input: string, format: string): boolean {\n return !isNaN(+parse(input, format));\n}\n\nexport const millisecondsInSecond = 1000;\n\nexport function addDays(date: Date, amount: number): Date {\n const result = new Date(date);\n\n if (!amount) {\n return result;\n }\n\n result.setDate(result.getDate() + amount);\n return result;\n}\n\nexport function subDays(date: Date, amount: number): Date {\n return addDays(date, -amount);\n}\n\nexport function addWeeks(date: Date, amount: number): Date {\n return addDays(date, amount * 7);\n}\n\nexport function subWeeks(date: Date, amount: number): Date {\n return addWeeks(date, -amount);\n}\n\nexport function addMonths(date: Date, amount: number): Date {\n const result = new Date(date);\n\n if (!amount) {\n return result;\n }\n\n const dayOfMonth = result.getDate();\n\n const endOfDesiredMonth = new Date(date);\n endOfDesiredMonth.setMonth(result.getMonth() + amount + 1, 0); // Конец месяца\n const daysInMonth = endOfDesiredMonth.getDate();\n if (dayOfMonth >= daysInMonth) {\n // Если мы уже находимся в конце месяца, то это нужная дата\n return endOfDesiredMonth;\n }\n\n result.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n return result;\n}\n\nexport function subMonths(date: Date, amount: number): Date {\n return addMonths(date, -amount);\n}\n\nexport function setYear(date: Date, year: number): Date {\n const result = new Date(date);\n result.setFullYear(year);\n return result;\n}\n\nfunction getDaysInMonth(date: Date): number {\n const result = new Date(date);\n const lastDayOfMonth = new Date(result);\n lastDayOfMonth.setFullYear(result.getFullYear(), result.getMonth() + 1, 0);\n lastDayOfMonth.setHours(0, 0, 0, 0);\n return lastDayOfMonth.getDate();\n}\n\nexport function setMonth(date: Date, month: number): Date {\n const result = new Date(date);\n const year = result.getFullYear();\n const day = result.getDate();\n\n const midMonth = new Date(date);\n midMonth.setFullYear(year, month, 15);\n midMonth.setHours(0, 0, 0, 0);\n const daysInMonth = getDaysInMonth(midMonth);\n\n result.setMonth(month, Math.min(day, daysInMonth));\n return result;\n}\n\nexport function setHours(date: Date, hours: number): Date {\n const result = new Date(date);\n result.setHours(hours);\n return result;\n}\n\nexport function setMinutes(date: Date, minutes: number): Date {\n const result = new Date(date);\n result.setMinutes(minutes);\n return result;\n}\n"],"names":["isSameDate","TZDateMini","parse","input","format","referenceDate","Date","match2","match4","entries","val","numVal","okay","parseInt","superRegExp","RegExp","map","item","join","store","y","getFullYear","M","getMonth","d","getDate","h","getHours","m","getMinutes","s","getSeconds","ms","getMilliseconds","prevInputIndex","lastNonFormatting","lastFormatIndex","found","match","exec","length","atIndex","lastIndex","find","slice","value","key","newValue","date","Y","D","convertDateToTimeZone","timezone","tz","undefined","formatter","Intl","DateTimeFormat","convertDateFromTimeZone","systemTimezone","resolvedOptions","timeZone","createDateInTimeZone","baseDate","overrides","year","month","hours","minutes","seconds","milliseconds","dateOptions","day","dateFormatter","hour","minute","replace","dateTimeFormatter","startOfMonth","result","setDate","setHours","endOfMonth","setFullYear","MONDAY","startOfWeek","weekStartsOn","getDay","diff","endOfWeek","startOfDay","endOfDay","startOfTomorrow","startOfMinute","setSeconds","eachDayOfInterval","startDate","endDate","step","reversed","endTime","dates","push","reverse","isSameMonth","d1","d2","isLastDayOfMonth","isWithinInterval","interval","startTime","sort","a","b","isToday","isYesterday","yesterday","isMatch","isNaN","millisecondsInSecond","addDays","amount","subDays","addWeeks","subWeeks","addMonths","dayOfMonth","endOfDesiredMonth","setMonth","daysInMonth","subMonths","setYear","getDaysInMonth","lastDayOfMonth","midMonth","Math","min","setMinutes"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/lib/date.ts"],"sourcesContent":["import { isSameDate } from '@vkontakte/vkjs';\nimport { TZDateMini } from '@vkontakte/vkui-date-fns-tz';\n\nexport function parse(input: string, format: string, referenceDate: Date = new Date()): Date {\n const match2 = /^\\d\\d/; // 00 - 99\n const match4 = /^\\d{4}/; // 0000 - 9999\n\n const entries: Array<[string, RegExp, (val: string) => [string, number, boolean]]> = [\n ['yyyy', match4, (val) => ['Y', +val, true]],\n [\n 'MM',\n match2,\n (val) => {\n const numVal = +val;\n const okay = numVal > 0 && numVal <= 12;\n\n return ['M', numVal - 1, okay];\n },\n ],\n ['dd', match2, (val) => ['D', +val, true]],\n [\n 'HH',\n match2,\n (val) => {\n const numVal = parseInt(val, 10);\n const okay = numVal >= 0 && numVal < 24;\n\n return ['h', numVal, okay];\n },\n ],\n [\n 'mm',\n match2,\n (val) => {\n const numVal = parseInt(val, 10);\n const okay = numVal >= 0 && numVal < 60;\n\n return ['m', numVal, okay];\n },\n ],\n ];\n\n const superRegExp = new RegExp(entries.map((item) => item[0]).join('|'), 'g');\n\n const store: {\n [key: string]: number;\n } = {\n y: referenceDate.getFullYear(),\n M: referenceDate.getMonth(),\n d: referenceDate.getDate(),\n h: referenceDate.getHours(),\n m: referenceDate.getMinutes(),\n s: referenceDate.getSeconds(),\n ms: referenceDate.getMilliseconds(),\n };\n\n let prevInputIndex = 0;\n let lastNonFormatting = '';\n let lastFormatIndex = 0;\n let found = false;\n\n while (true) {\n const match = superRegExp.exec(format);\n\n if (!match) {\n break;\n }\n\n const length = match[0].length;\n const atIndex = superRegExp.lastIndex - length;\n\n const item = entries.find((item) => item[0] === match[0])!;\n\n lastNonFormatting = format.slice(lastFormatIndex, atIndex);\n lastFormatIndex = superRegExp.lastIndex;\n\n if (\n input.slice(prevInputIndex, prevInputIndex + lastNonFormatting.length) !== lastNonFormatting\n ) {\n return new Date('');\n }\n\n const value = input.slice(prevInputIndex + lastNonFormatting.length).match(item[1]);\n\n if (!value) {\n return new Date('');\n }\n\n prevInputIndex = prevInputIndex + lastNonFormatting.length + value[0].length;\n\n const [key, newValue, okay] = item[2](value[0]);\n\n if (!okay) {\n return new Date('');\n }\n\n store[key] = newValue;\n found = true;\n }\n\n if (!found) {\n return new Date('');\n }\n\n const date = new Date(store.Y, store.M, store.D, store.h, store.m, store.s, store.ms);\n\n // Since days of months are dynamic, they can't be validated in entries,\n // so we check it here, in the finalized date\n if (date.getMonth() !== store.M || date.getDate() !== store.D) {\n return new Date('');\n }\n\n return date;\n}\n\nexport const convertDateToTimeZone = (\n date?: Date | null | undefined,\n timezone?: string | undefined,\n): Date | undefined | null => {\n if (!timezone) {\n return date;\n }\n if (date === null) {\n return null;\n }\n return date ? TZDateMini.tz(timezone, date) : undefined;\n};\n\nconst formatter = /*#__PURE__*/ new Intl.DateTimeFormat();\n\nexport const convertDateFromTimeZone = (date: Date | null, timezone?: string): Date | null => {\n if (!timezone) {\n return date;\n }\n if (date === null) {\n return null;\n }\n // eslint-disable-next-line new-cap\n const systemTimezone = formatter.resolvedOptions().timeZone;\n return TZDateMini.tz(systemTimezone, date);\n};\n\nexport type CreateDateInTimeZoneOverrides = {\n year?: number | undefined;\n month?: number | undefined;\n date?: number | undefined;\n hours?: number | undefined;\n minutes?: number | undefined;\n seconds?: number | undefined;\n milliseconds?: number | undefined;\n};\n\nexport function createDateInTimeZone(\n baseDate: Date,\n timezone?: string,\n overrides?: CreateDateInTimeZoneOverrides,\n): Date {\n const year = overrides?.year ?? baseDate.getFullYear();\n const month = overrides?.month ?? baseDate.getMonth();\n const date = overrides?.date ?? baseDate.getDate();\n const hours = overrides?.hours ?? baseDate.getHours();\n const minutes = overrides?.minutes ?? baseDate.getMinutes();\n const seconds = overrides?.seconds ?? baseDate.getSeconds();\n const milliseconds = overrides?.milliseconds ?? baseDate.getMilliseconds();\n\n if (!timezone) {\n return new Date(year, month, date, hours, minutes, seconds, milliseconds);\n }\n return TZDateMini.tz(timezone, year, month, date, hours, minutes, seconds, milliseconds);\n}\n\nconst dateOptions: Intl.DateTimeFormatOptions = {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n};\n\n// dd.MM.yyyy\nexport const dateFormatter = /*#__PURE__*/ new Intl.DateTimeFormat('ru-RU', dateOptions);\n\nclass DateTimeFormat extends Intl.DateTimeFormat {\n constructor() {\n super('ru-RU', {\n ...dateOptions,\n hour: '2-digit',\n minute: '2-digit',\n });\n }\n\n format(date?: Date | number): string {\n return super.format(date).replace(',', '');\n }\n}\n\n// dd.MM.yyyy HH:mm\nexport const dateTimeFormatter = /*#__PURE__*/ new DateTimeFormat();\n\n/**\n * Возвращает дату начала месяца\n */\nexport function startOfMonth(date: Date): Date {\n const result = new Date(date);\n result.setDate(1);\n result.setHours(0, 0, 0, 0);\n return result;\n}\n\n/**\n * Возвращает дату конца месяца\n */\nexport function endOfMonth(date: Date): Date {\n const result = new Date(date);\n const month = result.getMonth();\n result.setFullYear(result.getFullYear(), month + 1, 0);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\ntype WeekOptions = { weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined };\n\nexport const MONDAY = 1;\n\n/**\n * Возвращает дату начала недели\n */\nexport function startOfWeek(date: Date, { weekStartsOn = MONDAY }: WeekOptions = {}): Date {\n const result = new Date(date);\n const day = result.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n result.setDate(result.getDate() - diff);\n result.setHours(0, 0, 0, 0);\n return result;\n}\n\n/**\n * Возвращает дату конца недели\n */\nexport function endOfWeek(date: Date, { weekStartsOn = MONDAY }: WeekOptions = {}): Date {\n const result = new Date(date);\n const day = result.getDay();\n const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n\n result.setDate(result.getDate() + diff);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\n/**\n * Возвращает дату начала дня\n */\nexport function startOfDay(date: Date): Date {\n const result = new Date(date);\n result.setHours(0, 0, 0, 0);\n return result;\n}\n\n/**\n * Возвращает дату конца дня\n */\nexport function endOfDay(date: Date): Date {\n const result = new Date(date);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\nexport function startOfTomorrow() {\n const date = new Date();\n const day = date.getDate();\n\n date.setDate(day + 1);\n date.setHours(0, 0, 0, 0);\n return date;\n}\n\n/**\n * Возвращает дату начала минуты\n */\nexport function startOfMinute(date: Date): Date {\n const result = new Date(date);\n result.setSeconds(0, 0);\n return result;\n}\n\nexport function eachDayOfInterval(\n startDate: Date,\n endDate: Date,\n { step = 1 }: { step?: number | undefined } = {},\n): Date[] {\n let reversed = +startDate > +endDate;\n const endTime = reversed ? +startDate : +endDate;\n const date = new Date(reversed ? endDate : startDate);\n date.setHours(0, 0, 0, 0);\n\n if (!step) {\n return [];\n }\n if (step < 0) {\n step = -step;\n reversed = !reversed;\n }\n\n const dates = [];\n\n while (+date <= endTime) {\n dates.push(new Date(date));\n date.setDate(date.getDate() + step);\n date.setHours(0, 0, 0, 0);\n }\n\n return reversed ? dates.reverse() : dates;\n}\n\n/**\n * Проверяет, что переданные даты относятся к одному и тому же месяцу\n *\n * @example\n * ```ts\n * import assert from 'node:assert';\n * import { isSameMonth } from './date.ts';\n *\n * const d1 = new Date();\n * const d2 = new Date();\n * assert.ok(isSameMonth(d1, d2));\n * ```\n */\nexport function isSameMonth(d1: Date, d2: Date): boolean {\n return d1.getMonth() === d2.getMonth() && d1.getFullYear() === d2.getFullYear();\n}\n\nexport function isLastDayOfMonth(date: Date) {\n return +endOfDay(date) === +endOfMonth(date);\n}\n\nexport function isWithinInterval(date: Date, interval: [Date, Date]) {\n const [startTime, endTime] = interval.sort((a, b) => +a - +b);\n\n return date >= startTime && date <= endTime;\n}\n\nexport function isToday(date: Date) {\n return isSameDate(date, new Date());\n}\n\nexport function isYesterday(date: Date) {\n const yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n\n return isSameDate(date, yesterday);\n}\n\nexport function isMatch(input: string, format: string): boolean {\n return !isNaN(+parse(input, format));\n}\n\nexport const millisecondsInSecond = 1000;\n\nexport function addDays(date: Date, amount: number): Date {\n const result = new Date(date);\n\n if (!amount) {\n return result;\n }\n\n result.setDate(result.getDate() + amount);\n return result;\n}\n\nexport function subDays(date: Date, amount: number): Date {\n return addDays(date, -amount);\n}\n\nexport function addWeeks(date: Date, amount: number): Date {\n return addDays(date, amount * 7);\n}\n\nexport function subWeeks(date: Date, amount: number): Date {\n return addWeeks(date, -amount);\n}\n\nexport function addMonths(date: Date, amount: number): Date {\n const result = new Date(date);\n\n if (!amount) {\n return result;\n }\n\n const dayOfMonth = result.getDate();\n\n const endOfDesiredMonth = new Date(date);\n endOfDesiredMonth.setMonth(result.getMonth() + amount + 1, 0); // Конец месяца\n const daysInMonth = endOfDesiredMonth.getDate();\n if (dayOfMonth >= daysInMonth) {\n // Если мы уже находимся в конце месяца, то это нужная дата\n return endOfDesiredMonth;\n }\n\n result.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n return result;\n}\n\nexport function subMonths(date: Date, amount: number): Date {\n return addMonths(date, -amount);\n}\n\nexport function setYear(date: Date, year: number): Date {\n const result = new Date(date);\n result.setFullYear(year);\n return result;\n}\n\nfunction getDaysInMonth(date: Date): number {\n const result = new Date(date);\n const lastDayOfMonth = new Date(result);\n lastDayOfMonth.setFullYear(result.getFullYear(), result.getMonth() + 1, 0);\n lastDayOfMonth.setHours(0, 0, 0, 0);\n return lastDayOfMonth.getDate();\n}\n\nexport function setMonth(date: Date, month: number): Date {\n const result = new Date(date);\n const year = result.getFullYear();\n const day = result.getDate();\n\n const midMonth = new Date(date);\n midMonth.setFullYear(year, month, 15);\n midMonth.setHours(0, 0, 0, 0);\n const daysInMonth = getDaysInMonth(midMonth);\n\n result.setMonth(month, Math.min(day, daysInMonth));\n return result;\n}\n\nexport function setHours(date: Date, hours: number): Date {\n const result = new Date(date);\n result.setHours(hours);\n return result;\n}\n\nexport function setMinutes(date: Date, minutes: number): Date {\n const result = new Date(date);\n result.setMinutes(minutes);\n return result;\n}\n"],"names":["isSameDate","TZDateMini","parse","input","format","referenceDate","Date","match2","match4","entries","val","numVal","okay","parseInt","superRegExp","RegExp","map","item","join","store","y","getFullYear","M","getMonth","d","getDate","h","getHours","m","getMinutes","s","getSeconds","ms","getMilliseconds","prevInputIndex","lastNonFormatting","lastFormatIndex","found","match","exec","length","atIndex","lastIndex","find","slice","value","key","newValue","date","Y","D","convertDateToTimeZone","timezone","tz","undefined","formatter","Intl","DateTimeFormat","convertDateFromTimeZone","systemTimezone","resolvedOptions","timeZone","createDateInTimeZone","baseDate","overrides","year","month","hours","minutes","seconds","milliseconds","dateOptions","day","dateFormatter","hour","minute","replace","dateTimeFormatter","startOfMonth","result","setDate","setHours","endOfMonth","setFullYear","MONDAY","startOfWeek","weekStartsOn","getDay","diff","endOfWeek","startOfDay","endOfDay","startOfTomorrow","startOfMinute","setSeconds","eachDayOfInterval","startDate","endDate","step","reversed","endTime","dates","push","reverse","isSameMonth","d1","d2","isLastDayOfMonth","isWithinInterval","interval","startTime","sort","a","b","isToday","isYesterday","yesterday","isMatch","isNaN","millisecondsInSecond","addDays","amount","subDays","addWeeks","subWeeks","addMonths","dayOfMonth","endOfDesiredMonth","setMonth","daysInMonth","subMonths","setYear","getDaysInMonth","lastDayOfMonth","midMonth","Math","min","setMinutes"],"mappings":"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"}
@@ -235,7 +235,7 @@ shown: shownProp, onShownChange: onShownChangeProp, onShownChanged: onShownChang
235
235
  if (shownLocalState.shown) {
236
236
  setShownFinalState(true);
237
237
  onShownChanged(true, shownLocalState.reason);
238
- } else if (hasCSSAnimation.current && !willBeHide) {
238
+ } else if (hasCSSAnimation.current) {
239
239
  setWillBeHide(true);
240
240
  } else {
241
241
  setShownFinalState(false);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"sourcesContent":["import * as React from 'react';\nimport { debounce, noop } from '@vkontakte/vkjs';\nimport { getWindow, isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';\nimport { useNavTransition } from '../../../components/NavTransitionContext/NavTransitionContext';\nimport { useCustomEnsuredControl } from '../../../hooks/useEnsuredControl';\nimport { useGlobalOnClickOutside } from '../../../hooks/useGlobalOnClickOutside';\nimport { useStableCallback } from '../../../hooks/useStableCallback';\nimport { contains, getActiveElementByAnotherElement } from '../../dom';\nimport { useIsomorphicLayoutEffect } from '../../useIsomorphicLayoutEffect';\nimport { autoUpdateFloatingElement, useFloating } from '../adapters';\nimport { convertFloatingDataToReactCSSProperties } from '../functions';\nimport type { UseFloatingOptions } from '../types/common';\nimport { DEFAULT_TRIGGER } from './constants';\nimport type {\n FloatingProps,\n ReferenceProps,\n ShownChangeReason,\n UseFloatingWithInteractionsProps,\n UseFloatingWithInteractionsReturn,\n} from './types';\nimport { useResolveTriggerType } from './useResolveTriggerType';\n\ntype LocalState = { shown: boolean; reason?: ShownChangeReason };\n\nconst whileElementsMounted: UseFloatingOptions['whileElementsMounted'] = (...args) =>\n /* istanbul ignore next: не знаю как проверить */\n autoUpdateFloatingElement(...args, { elementResize: true });\n\n/**\n * @private\n */\nexport const useFloatingWithInteractions = <T extends HTMLElement = HTMLElement>({\n trigger = DEFAULT_TRIGGER,\n\n // UseFloating\n placement: placementProp = 'bottom',\n strategy: strategyProp = 'fixed',\n middlewares,\n hoverDelay = 0,\n closeAfterClick = false,\n\n // disables\n disabled = false,\n disableInteractive = false,\n disableCloseOnClickOutside = false,\n disableCloseOnEscKey = false,\n\n // uncontrolled\n defaultShown = false,\n\n // controlled\n shown: shownProp,\n onShownChange: onShownChangeProp,\n onShownChanged: onShownChangedProp,\n}: UseFloatingWithInteractionsProps): UseFloatingWithInteractionsReturn<T> => {\n const memoizedValue = React.useMemo<LocalState | undefined>(\n () => (shownProp !== undefined ? { shown: shownProp } : undefined),\n [shownProp],\n );\n const { entering, animating } = useNavTransition();\n const [shownLocalState, setShownLocalState] = useCustomEnsuredControl<LocalState>({\n value: memoizedValue,\n disabled,\n defaultValue: { shown: defaultShown },\n onChange: useStableCallback(({ shown, reason }) => {\n if (onShownChangeProp) {\n onShownChangeProp(shown, reason);\n }\n }),\n });\n const onShownChanged = useStableCallback(onShownChangedProp ? onShownChangedProp : noop);\n const [shownFinalState, setShownFinalState] = React.useState(() => shownLocalState.shown);\n const [willBeHide, setWillBeHide] = React.useState(false);\n\n const hasCSSAnimation = React.useRef(false);\n\n const blockMouseEnterRef = React.useRef(false);\n const blockFocusRef = React.useRef(false);\n const blurTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n const handleCloseOnReferenceClickOutsideDisabled =\n disabled || disableCloseOnClickOutside || willBeHide || !shownLocalState.shown;\n const handleCloseOnFloatingClickOutsideDisabled =\n disableInteractive || handleCloseOnReferenceClickOutsideDisabled;\n\n const { triggerOnFocus, triggerOnClick, triggerOnHover } = useResolveTriggerType(trigger);\n\n // Библиотека `floating-ui`\n const { placement, x, y, strategy, refs, middlewareData } = useFloating<T>({\n strategy: strategyProp,\n placement: placementProp,\n ...(middlewares !== undefined ? { middleware: middlewares } : {}),\n ...(!animating && { whileElementsMounted }),\n });\n\n const commitShownLocalState = React.useCallback(\n (nextShown: boolean, reason: ShownChangeReason) => {\n setShownLocalState((prevState) => {\n if (prevState.shown !== nextShown || prevState.reason !== reason) {\n return {\n shown: nextShown,\n reason,\n };\n }\n /* istanbul ignore next: страховка, если вдруг на момент вызова обновления состояния, оно уже будет актуальным */\n return prevState;\n });\n },\n [setShownLocalState],\n );\n\n const [mouseEnterDelay, mouseLeaveDelay] =\n typeof hoverDelay === 'number' ? [hoverDelay, hoverDelay] : hoverDelay;\n\n const showWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(true, 'hover'), mouseEnterDelay),\n [mouseEnterDelay, commitShownLocalState],\n );\n\n const hideWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(false, 'hover'), mouseLeaveDelay),\n [mouseLeaveDelay, commitShownLocalState],\n );\n\n const handleFocusOnReference = useStableCallback(() => {\n // Повторный вызов события фокуса - следствие клика на reference-элемент\n if (shownLocalState.shown) {\n if (!closeAfterClick && shownLocalState.reason === 'hover') {\n return;\n }\n commitShownLocalState(false, 'focus');\n return;\n }\n if (blockFocusRef.current) {\n /* istanbul ignore next: в Vitest не воспроизводится баг на вебе (cм. onRestoreFocus) */\n blockFocusRef.current = false;\n return;\n }\n\n commitShownLocalState(true, 'focus');\n });\n\n const handleBlurOnReference = useStableCallback((event: React.FocusEvent) => {\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (!shownLocalState.shown) {\n clearTimeout(blurTimeoutRef.current);\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n blurTimeoutRef.current = setTimeout(function waitWindowBlurFire() {\n const reference = refs.reference.current;\n // Если пользователь покинул текущее окно в открытом состоянии, то\n // не закрываем всплывающий элемент.\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (!relatedTarget && getActiveElementByAnotherElement(reference) === reference) {\n /* istanbul ignore next */\n return;\n }\n\n // Если пользователь нажал на всплывающий элемент, то не закрываем всплывающий элемент.\n // Note: для этого элемент должен быть фокусируемый (например, за счёт `tabindex=\"-1\"`).\n if (contains(refs.floating.current, relatedTarget) || contains(reference, relatedTarget)) {\n return;\n }\n\n commitShownLocalState(false, 'focus');\n });\n });\n\n const handleClickOnReference = useStableCallback(() => {\n // Предыдущий триггер (фокус) уже вызвал открытие/закрытие всплывающего окна, игнорируем вызов\n if (shownLocalState.reason === 'focus') {\n commitShownLocalState(shownLocalState.shown, 'click');\n return;\n }\n commitShownLocalState(!shownLocalState.shown, 'click');\n });\n\n const handleClickOnReferenceForOnlyClose = useStableCallback(() => {\n blockMouseEnterRef.current = true;\n commitShownLocalState(false, 'click');\n });\n\n const handleMouseEnterOnBoth = useStableCallback((event: React.MouseEvent<HTMLElement>) => {\n if (willBeHide && event.currentTarget === refs.floating.current) {\n return;\n }\n\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n if (!blockMouseEnterRef.current && !shownLocalState.shown) {\n showWithDelay();\n }\n });\n\n const handleMouseLeaveOnBothForHoverAndFocusStates = useStableCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (willBeHide && event.currentTarget === refs.floating.current) {\n return;\n }\n\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (triggerOnHover) {\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n hideWithDelay();\n }\n },\n );\n\n const handleFloatingAnimationStart = () => {\n hasCSSAnimation.current = true;\n };\n\n const handleFloatingAnimationEnd = () => {\n if (willBeHide) {\n setShownFinalState(false);\n setWillBeHide(false);\n onShownChanged(false, shownLocalState.reason);\n }\n };\n\n const handleOnClose = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'callback');\n }, [commitShownLocalState]);\n\n const handleRestoreFocus: UseFloatingWithInteractionsReturn['onRestoreFocus'] = React.useCallback(\n (restoreFocus = true) => {\n if (!restoreFocus) {\n return false;\n }\n if (restoreFocus === true) {\n return triggerOnFocus ? blockFocusRef.current : true;\n } else if (restoreFocus === 'anchor-element') {\n return refs.reference.current as HTMLElement;\n } else if (restoreFocus instanceof HTMLElement) {\n return restoreFocus;\n }\n return false;\n },\n [refs.reference, triggerOnFocus],\n );\n\n const handleEscapeKeyDown = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'escape-key');\n }, [commitShownLocalState]);\n\n const handleClickOutside = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'click-outside');\n }, [commitShownLocalState]);\n\n useGlobalOnClickOutside(\n handleClickOutside,\n handleCloseOnReferenceClickOutsideDisabled ? null : refs.reference,\n handleCloseOnFloatingClickOutsideDisabled ? null : refs.floating,\n );\n\n useIsomorphicLayoutEffect(\n /**\n * Если пользователь покинул активное окно и:\n * 1. целевой элемент был в состоянии фокуса;\n * 2. всплывающий элемент был закрытом состоянии;\n * то фокус должен быть заблокирован, когда пользователь вернётся обратно. Иначе покажется\n * всплывающий элемент.\n */\n function setGlobalBlurForTriggerOnFocus() {\n if (!triggerOnFocus || !refs.reference.current) {\n return;\n }\n\n const handleGlobalBlur = () => {\n /* istanbul ignore next */\n const reference = refs.reference.current;\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (\n !shownLocalState.shown &&\n isHTMLElement(reference) &&\n reference === getActiveElementByAnotherElement(reference)\n ) {\n /* istanbul ignore next */\n blockFocusRef.current = true;\n }\n };\n\n const win = getWindow(refs.reference.current);\n win.addEventListener('blur', handleGlobalBlur);\n return () => {\n win.removeEventListener('blur', handleGlobalBlur);\n };\n },\n [triggerOnFocus, refs.reference, shownLocalState],\n );\n\n useIsomorphicLayoutEffect(\n function resolveShownStates() {\n if (willBeHide || shownLocalState.shown === shownFinalState) {\n return;\n }\n\n if (shownLocalState.shown) {\n setShownFinalState(true);\n onShownChanged(true, shownLocalState.reason);\n } else if (hasCSSAnimation.current && !willBeHide) {\n setWillBeHide(true);\n } else {\n setShownFinalState(false);\n }\n\n return () => {\n clearTimeout(blurTimeoutRef.current);\n };\n },\n [shownLocalState, shownFinalState, willBeHide, onShownChanged],\n );\n\n const referenceProps: ReferenceProps = {};\n const floatingProps: FloatingProps = { style: {} };\n\n if (shownFinalState) {\n floatingProps.style = convertFloatingDataToReactCSSProperties({\n strategy,\n x,\n y,\n middlewareData,\n });\n\n if (disableInteractive) {\n floatingProps.style.pointerEvents = 'none';\n }\n }\n\n if (triggerOnFocus) {\n referenceProps.onFocus = handleFocusOnReference;\n referenceProps.onBlur = handleBlurOnReference;\n }\n\n if (triggerOnClick) {\n referenceProps.onClick = handleClickOnReference;\n }\n\n if (triggerOnHover) {\n referenceProps.onMouseOver = handleMouseEnterOnBoth;\n\n if (closeAfterClick && !triggerOnClick) {\n referenceProps.onClick = handleClickOnReferenceForOnlyClose;\n }\n\n if (!disableInteractive) {\n floatingProps.onMouseOver = handleMouseEnterOnBoth;\n }\n }\n\n if (triggerOnHover || triggerOnFocus) {\n referenceProps.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n\n if (!disableInteractive) {\n floatingProps.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n }\n }\n\n if (shownFinalState) {\n floatingProps.onAnimationStart = handleFloatingAnimationStart;\n floatingProps.onAnimationEnd = handleFloatingAnimationEnd;\n }\n\n return {\n placement,\n shown: shownFinalState && !entering,\n willBeHide,\n refs,\n referenceProps,\n floatingProps,\n middlewareData,\n onClose: handleOnClose,\n // FocusTrap уже определяет нажатие на ESC, поэтому название события содержит конкретный код\n // кнопки вместо просто onKeyDown.\n onEscapeKeyDown: !shownFinalState || disableCloseOnEscKey ? undefined : handleEscapeKeyDown,\n // [Обход баги с FocusTrap]\n //\n // Если сфокусироваться на целевой элемент через нажатие, а потом нажать в область за пределами\n // целевого и всплывающего элемента, то появляется моргание из-за того, что FocusTrap\n // восстанавливает фокус, из-за чего всплывающий элемент снова показывается за счёт\n // `handleFocusOnReference`, а потом скрывается за счёт `handleBlurOnReference`.\n onRestoreFocus: handleRestoreFocus,\n };\n};\n"],"names":["React","debounce","noop","getWindow","isHTMLElement","useNavTransition","useCustomEnsuredControl","useGlobalOnClickOutside","useStableCallback","contains","getActiveElementByAnotherElement","useIsomorphicLayoutEffect","autoUpdateFloatingElement","useFloating","convertFloatingDataToReactCSSProperties","DEFAULT_TRIGGER","useResolveTriggerType","whileElementsMounted","args","elementResize","useFloatingWithInteractions","trigger","placement","placementProp","strategy","strategyProp","middlewares","hoverDelay","closeAfterClick","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","defaultShown","shown","shownProp","onShownChange","onShownChangeProp","onShownChanged","onShownChangedProp","memoizedValue","useMemo","undefined","entering","animating","shownLocalState","setShownLocalState","value","defaultValue","onChange","reason","shownFinalState","setShownFinalState","useState","willBeHide","setWillBeHide","hasCSSAnimation","useRef","blockMouseEnterRef","blockFocusRef","blurTimeoutRef","handleCloseOnReferenceClickOutsideDisabled","handleCloseOnFloatingClickOutsideDisabled","triggerOnFocus","triggerOnClick","triggerOnHover","x","y","refs","middlewareData","middleware","commitShownLocalState","useCallback","nextShown","prevState","mouseEnterDelay","mouseLeaveDelay","showWithDelay","hideWithDelay","handleFocusOnReference","current","handleBlurOnReference","event","clearTimeout","relatedTarget","setTimeout","waitWindowBlurFire","reference","floating","handleClickOnReference","handleClickOnReferenceForOnlyClose","handleMouseEnterOnBoth","currentTarget","cancel","handleMouseLeaveOnBothForHoverAndFocusStates","handleFloatingAnimationStart","handleFloatingAnimationEnd","handleOnClose","handleRestoreFocus","restoreFocus","HTMLElement","handleEscapeKeyDown","handleClickOutside","setGlobalBlurForTriggerOnFocus","handleGlobalBlur","win","addEventListener","removeEventListener","resolveShownStates","referenceProps","floatingProps","style","pointerEvents","onFocus","onBlur","onClick","onMouseOver","onMouseLeave","onAnimationStart","onAnimationEnd","onClose","onEscapeKeyDown","onRestoreFocus"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"sourcesContent":["import * as React from 'react';\nimport { debounce, noop } from '@vkontakte/vkjs';\nimport { getWindow, isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';\nimport { useNavTransition } from '../../../components/NavTransitionContext/NavTransitionContext';\nimport { useCustomEnsuredControl } from '../../../hooks/useEnsuredControl';\nimport { useGlobalOnClickOutside } from '../../../hooks/useGlobalOnClickOutside';\nimport { useStableCallback } from '../../../hooks/useStableCallback';\nimport { contains, getActiveElementByAnotherElement } from '../../dom';\nimport { useIsomorphicLayoutEffect } from '../../useIsomorphicLayoutEffect';\nimport { autoUpdateFloatingElement, useFloating } from '../adapters';\nimport { convertFloatingDataToReactCSSProperties } from '../functions';\nimport type { UseFloatingOptions } from '../types/common';\nimport { DEFAULT_TRIGGER } from './constants';\nimport type {\n FloatingProps,\n ReferenceProps,\n ShownChangeReason,\n UseFloatingWithInteractionsProps,\n UseFloatingWithInteractionsReturn,\n} from './types';\nimport { useResolveTriggerType } from './useResolveTriggerType';\n\ntype LocalState = { shown: boolean; reason?: ShownChangeReason };\n\nconst whileElementsMounted: UseFloatingOptions['whileElementsMounted'] = (...args) =>\n /* istanbul ignore next: не знаю как проверить */\n autoUpdateFloatingElement(...args, { elementResize: true });\n\n/**\n * @private\n */\nexport const useFloatingWithInteractions = <T extends HTMLElement = HTMLElement>({\n trigger = DEFAULT_TRIGGER,\n\n // UseFloating\n placement: placementProp = 'bottom',\n strategy: strategyProp = 'fixed',\n middlewares,\n hoverDelay = 0,\n closeAfterClick = false,\n\n // disables\n disabled = false,\n disableInteractive = false,\n disableCloseOnClickOutside = false,\n disableCloseOnEscKey = false,\n\n // uncontrolled\n defaultShown = false,\n\n // controlled\n shown: shownProp,\n onShownChange: onShownChangeProp,\n onShownChanged: onShownChangedProp,\n}: UseFloatingWithInteractionsProps): UseFloatingWithInteractionsReturn<T> => {\n const memoizedValue = React.useMemo<LocalState | undefined>(\n () => (shownProp !== undefined ? { shown: shownProp } : undefined),\n [shownProp],\n );\n const { entering, animating } = useNavTransition();\n const [shownLocalState, setShownLocalState] = useCustomEnsuredControl<LocalState>({\n value: memoizedValue,\n disabled,\n defaultValue: { shown: defaultShown },\n onChange: useStableCallback(({ shown, reason }) => {\n if (onShownChangeProp) {\n onShownChangeProp(shown, reason);\n }\n }),\n });\n const onShownChanged = useStableCallback(onShownChangedProp ? onShownChangedProp : noop);\n const [shownFinalState, setShownFinalState] = React.useState(() => shownLocalState.shown);\n const [willBeHide, setWillBeHide] = React.useState(false);\n\n const hasCSSAnimation = React.useRef(false);\n\n const blockMouseEnterRef = React.useRef(false);\n const blockFocusRef = React.useRef(false);\n const blurTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n const handleCloseOnReferenceClickOutsideDisabled =\n disabled || disableCloseOnClickOutside || willBeHide || !shownLocalState.shown;\n const handleCloseOnFloatingClickOutsideDisabled =\n disableInteractive || handleCloseOnReferenceClickOutsideDisabled;\n\n const { triggerOnFocus, triggerOnClick, triggerOnHover } = useResolveTriggerType(trigger);\n\n // Библиотека `floating-ui`\n const { placement, x, y, strategy, refs, middlewareData } = useFloating<T>({\n strategy: strategyProp,\n placement: placementProp,\n ...(middlewares !== undefined ? { middleware: middlewares } : {}),\n ...(!animating && { whileElementsMounted }),\n });\n\n const commitShownLocalState = React.useCallback(\n (nextShown: boolean, reason: ShownChangeReason) => {\n setShownLocalState((prevState) => {\n if (prevState.shown !== nextShown || prevState.reason !== reason) {\n return {\n shown: nextShown,\n reason,\n };\n }\n /* istanbul ignore next: страховка, если вдруг на момент вызова обновления состояния, оно уже будет актуальным */\n return prevState;\n });\n },\n [setShownLocalState],\n );\n\n const [mouseEnterDelay, mouseLeaveDelay] =\n typeof hoverDelay === 'number' ? [hoverDelay, hoverDelay] : hoverDelay;\n\n const showWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(true, 'hover'), mouseEnterDelay),\n [mouseEnterDelay, commitShownLocalState],\n );\n\n const hideWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(false, 'hover'), mouseLeaveDelay),\n [mouseLeaveDelay, commitShownLocalState],\n );\n\n const handleFocusOnReference = useStableCallback(() => {\n // Повторный вызов события фокуса - следствие клика на reference-элемент\n if (shownLocalState.shown) {\n if (!closeAfterClick && shownLocalState.reason === 'hover') {\n return;\n }\n commitShownLocalState(false, 'focus');\n return;\n }\n if (blockFocusRef.current) {\n /* istanbul ignore next: в Vitest не воспроизводится баг на вебе (cм. onRestoreFocus) */\n blockFocusRef.current = false;\n return;\n }\n\n commitShownLocalState(true, 'focus');\n });\n\n const handleBlurOnReference = useStableCallback((event: React.FocusEvent) => {\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (!shownLocalState.shown) {\n clearTimeout(blurTimeoutRef.current);\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n blurTimeoutRef.current = setTimeout(function waitWindowBlurFire() {\n const reference = refs.reference.current;\n // Если пользователь покинул текущее окно в открытом состоянии, то\n // не закрываем всплывающий элемент.\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (!relatedTarget && getActiveElementByAnotherElement(reference) === reference) {\n /* istanbul ignore next */\n return;\n }\n\n // Если пользователь нажал на всплывающий элемент, то не закрываем всплывающий элемент.\n // Note: для этого элемент должен быть фокусируемый (например, за счёт `tabindex=\"-1\"`).\n if (contains(refs.floating.current, relatedTarget) || contains(reference, relatedTarget)) {\n return;\n }\n\n commitShownLocalState(false, 'focus');\n });\n });\n\n const handleClickOnReference = useStableCallback(() => {\n // Предыдущий триггер (фокус) уже вызвал открытие/закрытие всплывающего окна, игнорируем вызов\n if (shownLocalState.reason === 'focus') {\n commitShownLocalState(shownLocalState.shown, 'click');\n return;\n }\n commitShownLocalState(!shownLocalState.shown, 'click');\n });\n\n const handleClickOnReferenceForOnlyClose = useStableCallback(() => {\n blockMouseEnterRef.current = true;\n commitShownLocalState(false, 'click');\n });\n\n const handleMouseEnterOnBoth = useStableCallback((event: React.MouseEvent<HTMLElement>) => {\n if (willBeHide && event.currentTarget === refs.floating.current) {\n return;\n }\n\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n if (!blockMouseEnterRef.current && !shownLocalState.shown) {\n showWithDelay();\n }\n });\n\n const handleMouseLeaveOnBothForHoverAndFocusStates = useStableCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (willBeHide && event.currentTarget === refs.floating.current) {\n return;\n }\n\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (triggerOnHover) {\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n hideWithDelay();\n }\n },\n );\n\n const handleFloatingAnimationStart = () => {\n hasCSSAnimation.current = true;\n };\n\n const handleFloatingAnimationEnd = () => {\n if (willBeHide) {\n setShownFinalState(false);\n setWillBeHide(false);\n onShownChanged(false, shownLocalState.reason);\n }\n };\n\n const handleOnClose = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'callback');\n }, [commitShownLocalState]);\n\n const handleRestoreFocus: UseFloatingWithInteractionsReturn['onRestoreFocus'] = React.useCallback(\n (restoreFocus = true) => {\n if (!restoreFocus) {\n return false;\n }\n if (restoreFocus === true) {\n return triggerOnFocus ? blockFocusRef.current : true;\n } else if (restoreFocus === 'anchor-element') {\n return refs.reference.current as HTMLElement;\n } else if (restoreFocus instanceof HTMLElement) {\n return restoreFocus;\n }\n return false;\n },\n [refs.reference, triggerOnFocus],\n );\n\n const handleEscapeKeyDown = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'escape-key');\n }, [commitShownLocalState]);\n\n const handleClickOutside = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'click-outside');\n }, [commitShownLocalState]);\n\n useGlobalOnClickOutside(\n handleClickOutside,\n handleCloseOnReferenceClickOutsideDisabled ? null : refs.reference,\n handleCloseOnFloatingClickOutsideDisabled ? null : refs.floating,\n );\n\n useIsomorphicLayoutEffect(\n /**\n * Если пользователь покинул активное окно и:\n * 1. целевой элемент был в состоянии фокуса;\n * 2. всплывающий элемент был закрытом состоянии;\n * то фокус должен быть заблокирован, когда пользователь вернётся обратно. Иначе покажется\n * всплывающий элемент.\n */\n function setGlobalBlurForTriggerOnFocus() {\n if (!triggerOnFocus || !refs.reference.current) {\n return;\n }\n\n const handleGlobalBlur = () => {\n /* istanbul ignore next */\n const reference = refs.reference.current;\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (\n !shownLocalState.shown &&\n isHTMLElement(reference) &&\n reference === getActiveElementByAnotherElement(reference)\n ) {\n /* istanbul ignore next */\n blockFocusRef.current = true;\n }\n };\n\n const win = getWindow(refs.reference.current);\n win.addEventListener('blur', handleGlobalBlur);\n return () => {\n win.removeEventListener('blur', handleGlobalBlur);\n };\n },\n [triggerOnFocus, refs.reference, shownLocalState],\n );\n\n useIsomorphicLayoutEffect(\n function resolveShownStates() {\n if (willBeHide || shownLocalState.shown === shownFinalState) {\n return;\n }\n\n if (shownLocalState.shown) {\n setShownFinalState(true);\n onShownChanged(true, shownLocalState.reason);\n } else if (hasCSSAnimation.current) {\n setWillBeHide(true);\n } else {\n setShownFinalState(false);\n }\n\n return () => {\n clearTimeout(blurTimeoutRef.current);\n };\n },\n [shownLocalState, shownFinalState, willBeHide, onShownChanged],\n );\n\n const referenceProps: ReferenceProps = {};\n const floatingProps: FloatingProps = { style: {} };\n\n if (shownFinalState) {\n floatingProps.style = convertFloatingDataToReactCSSProperties({\n strategy,\n x,\n y,\n middlewareData,\n });\n\n if (disableInteractive) {\n floatingProps.style.pointerEvents = 'none';\n }\n }\n\n if (triggerOnFocus) {\n referenceProps.onFocus = handleFocusOnReference;\n referenceProps.onBlur = handleBlurOnReference;\n }\n\n if (triggerOnClick) {\n referenceProps.onClick = handleClickOnReference;\n }\n\n if (triggerOnHover) {\n referenceProps.onMouseOver = handleMouseEnterOnBoth;\n\n if (closeAfterClick && !triggerOnClick) {\n referenceProps.onClick = handleClickOnReferenceForOnlyClose;\n }\n\n if (!disableInteractive) {\n floatingProps.onMouseOver = handleMouseEnterOnBoth;\n }\n }\n\n if (triggerOnHover || triggerOnFocus) {\n referenceProps.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n\n if (!disableInteractive) {\n floatingProps.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n }\n }\n\n if (shownFinalState) {\n floatingProps.onAnimationStart = handleFloatingAnimationStart;\n floatingProps.onAnimationEnd = handleFloatingAnimationEnd;\n }\n\n return {\n placement,\n shown: shownFinalState && !entering,\n willBeHide,\n refs,\n referenceProps,\n floatingProps,\n middlewareData,\n onClose: handleOnClose,\n // FocusTrap уже определяет нажатие на ESC, поэтому название события содержит конкретный код\n // кнопки вместо просто onKeyDown.\n onEscapeKeyDown: !shownFinalState || disableCloseOnEscKey ? undefined : handleEscapeKeyDown,\n // [Обход баги с FocusTrap]\n //\n // Если сфокусироваться на целевой элемент через нажатие, а потом нажать в область за пределами\n // целевого и всплывающего элемента, то появляется моргание из-за того, что FocusTrap\n // восстанавливает фокус, из-за чего всплывающий элемент снова показывается за счёт\n // `handleFocusOnReference`, а потом скрывается за счёт `handleBlurOnReference`.\n onRestoreFocus: handleRestoreFocus,\n };\n};\n"],"names":["React","debounce","noop","getWindow","isHTMLElement","useNavTransition","useCustomEnsuredControl","useGlobalOnClickOutside","useStableCallback","contains","getActiveElementByAnotherElement","useIsomorphicLayoutEffect","autoUpdateFloatingElement","useFloating","convertFloatingDataToReactCSSProperties","DEFAULT_TRIGGER","useResolveTriggerType","whileElementsMounted","args","elementResize","useFloatingWithInteractions","trigger","placement","placementProp","strategy","strategyProp","middlewares","hoverDelay","closeAfterClick","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","defaultShown","shown","shownProp","onShownChange","onShownChangeProp","onShownChanged","onShownChangedProp","memoizedValue","useMemo","undefined","entering","animating","shownLocalState","setShownLocalState","value","defaultValue","onChange","reason","shownFinalState","setShownFinalState","useState","willBeHide","setWillBeHide","hasCSSAnimation","useRef","blockMouseEnterRef","blockFocusRef","blurTimeoutRef","handleCloseOnReferenceClickOutsideDisabled","handleCloseOnFloatingClickOutsideDisabled","triggerOnFocus","triggerOnClick","triggerOnHover","x","y","refs","middlewareData","middleware","commitShownLocalState","useCallback","nextShown","prevState","mouseEnterDelay","mouseLeaveDelay","showWithDelay","hideWithDelay","handleFocusOnReference","current","handleBlurOnReference","event","clearTimeout","relatedTarget","setTimeout","waitWindowBlurFire","reference","floating","handleClickOnReference","handleClickOnReferenceForOnlyClose","handleMouseEnterOnBoth","currentTarget","cancel","handleMouseLeaveOnBothForHoverAndFocusStates","handleFloatingAnimationStart","handleFloatingAnimationEnd","handleOnClose","handleRestoreFocus","restoreFocus","HTMLElement","handleEscapeKeyDown","handleClickOutside","setGlobalBlurForTriggerOnFocus","handleGlobalBlur","win","addEventListener","removeEventListener","resolveShownStates","referenceProps","floatingProps","style","pointerEvents","onFocus","onBlur","onClick","onMouseOver","onMouseLeave","onAnimationStart","onAnimationEnd","onClose","onEscapeKeyDown","onRestoreFocus"],"mappings":"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"}
@@ -13,7 +13,7 @@ export const useMergeProps = (originalProps, slotProps)=>{
13
13
  if (!slotProps) {
14
14
  return filterProps(originalProps);
15
15
  }
16
- const { className: rootSlotClassName, style: rootSlotStyle, ...rootSlotProps } = slotProps || {};
16
+ const { className: rootSlotClassName, style: rootSlotStyle, ...rootSlotProps } = slotProps;
17
17
  const { className: originalClassName, style: originalSlotStyle, ...originalRestProps } = originalProps;
18
18
  const resolvedClassName = originalClassName || rootSlotClassName ? classNames(originalClassName, rootSlotClassName) : undefined;
19
19
  const resolvedStyle = originalSlotStyle || rootSlotStyle ? mergeStyle(originalSlotStyle, rootSlotStyle) : undefined;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useMergeProps.ts"],"sourcesContent":["import type { AllHTMLAttributes } from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { getMergedSameEventsByProps } from '../helpers/getMergedSameEventsByProps';\nimport { mergeStyle } from '../helpers/mergeStyle';\nimport { filterObject } from '../lib/object';\nimport type { HasRootRef } from '../types';\nimport { useExternRef } from './useExternRef';\n\ntype BaseProps<T extends HTMLElement = HTMLElement> = HasRootRef<T> &\n Pick<AllHTMLAttributes<T>, 'className' | 'style'>;\n\nconst filterProps = <T extends BaseProps = BaseProps>(props: T): T => {\n return filterObject(props, (value) => value !== undefined);\n};\n\nexport const useMergeProps = <T extends BaseProps = BaseProps>(\n originalProps: T,\n slotProps?: T | undefined,\n): T => {\n const originalSlotGetRef = originalProps.getRootRef;\n const rootSlotGetRef = slotProps?.getRootRef;\n\n const getRootRef = useExternRef(originalSlotGetRef, rootSlotGetRef);\n\n if (!slotProps) {\n return filterProps(originalProps);\n }\n\n const { className: rootSlotClassName, style: rootSlotStyle, ...rootSlotProps } = slotProps || {};\n\n const {\n className: originalClassName,\n style: originalSlotStyle,\n ...originalRestProps\n } = originalProps;\n\n const resolvedClassName =\n originalClassName || rootSlotClassName\n ? classNames(originalClassName, rootSlotClassName)\n : undefined;\n const resolvedStyle =\n originalSlotStyle || rootSlotStyle ? mergeStyle(originalSlotStyle, rootSlotStyle) : undefined;\n\n const mergedEventsByInjectProps: any = getMergedSameEventsByProps(\n originalRestProps,\n rootSlotProps,\n );\n\n const resolvedProps: T = {\n ...originalRestProps,\n ...rootSlotProps,\n ...mergedEventsByInjectProps,\n };\n\n if (resolvedClassName) {\n resolvedProps.className = resolvedClassName;\n }\n if (resolvedStyle) {\n resolvedProps.style = resolvedStyle;\n }\n if (rootSlotGetRef || originalSlotGetRef) {\n resolvedProps.getRootRef = getRootRef;\n }\n\n return filterProps(resolvedProps);\n};\n"],"names":["classNames","getMergedSameEventsByProps","mergeStyle","filterObject","useExternRef","filterProps","props","value","undefined","useMergeProps","originalProps","slotProps","originalSlotGetRef","getRootRef","rootSlotGetRef","className","rootSlotClassName","style","rootSlotStyle","rootSlotProps","originalClassName","originalSlotStyle","originalRestProps","resolvedClassName","resolvedStyle","mergedEventsByInjectProps","resolvedProps"],"mappings":"AACA,SAASA,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,0BAA0B,QAAQ,2CAAwC;AACnF,SAASC,UAAU,QAAQ,2BAAwB;AACnD,SAASC,YAAY,QAAQ,mBAAgB;AAE7C,SAASC,YAAY,QAAQ,oBAAiB;AAK9C,MAAMC,cAAc,CAAkCC;IACpD,OAAOH,aAAaG,OAAO,CAACC,QAAUA,UAAUC;AAClD;AAEA,OAAO,MAAMC,gBAAgB,CAC3BC,eACAC;IAEA,MAAMC,qBAAqBF,cAAcG,UAAU;IACnD,MAAMC,iBAAiBH,WAAWE;IAElC,MAAMA,aAAaT,aAAaQ,oBAAoBE;IAEpD,IAAI,CAACH,WAAW;QACd,OAAON,YAAYK;IACrB;IAEA,MAAM,EAAEK,WAAWC,iBAAiB,EAAEC,OAAOC,aAAa,EAAE,GAAGC,eAAe,GAAGR,aAAa,CAAC;IAE/F,MAAM,EACJI,WAAWK,iBAAiB,EAC5BH,OAAOI,iBAAiB,EACxB,GAAGC,mBACJ,GAAGZ;IAEJ,MAAMa,oBACJH,qBAAqBJ,oBACjBhB,WAAWoB,mBAAmBJ,qBAC9BR;IACN,MAAMgB,gBACJH,qBAAqBH,gBAAgBhB,WAAWmB,mBAAmBH,iBAAiBV;IAEtF,MAAMiB,4BAAiCxB,2BACrCqB,mBACAH;IAGF,MAAMO,gBAAmB;QACvB,GAAGJ,iBAAiB;QACpB,GAAGH,aAAa;QAChB,GAAGM,yBAAyB;IAC9B;IAEA,IAAIF,mBAAmB;QACrBG,cAAcX,SAAS,GAAGQ;IAC5B;IACA,IAAIC,eAAe;QACjBE,cAAcT,KAAK,GAAGO;IACxB;IACA,IAAIV,kBAAkBF,oBAAoB;QACxCc,cAAcb,UAAU,GAAGA;IAC7B;IAEA,OAAOR,YAAYqB;AACrB,EAAE"}
1
+ {"version":3,"sources":["../../src/hooks/useMergeProps.ts"],"sourcesContent":["import type { AllHTMLAttributes } from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { getMergedSameEventsByProps } from '../helpers/getMergedSameEventsByProps';\nimport { mergeStyle } from '../helpers/mergeStyle';\nimport { filterObject } from '../lib/object';\nimport type { HasRootRef } from '../types';\nimport { useExternRef } from './useExternRef';\n\ntype BaseProps<T extends HTMLElement = HTMLElement> = HasRootRef<T> &\n Pick<AllHTMLAttributes<T>, 'className' | 'style'>;\n\nconst filterProps = <T extends BaseProps = BaseProps>(props: T): T => {\n return filterObject(props, (value) => value !== undefined);\n};\n\nexport const useMergeProps = <T extends BaseProps = BaseProps>(\n originalProps: T,\n slotProps?: T | undefined,\n): T => {\n const originalSlotGetRef = originalProps.getRootRef;\n const rootSlotGetRef = slotProps?.getRootRef;\n\n const getRootRef = useExternRef(originalSlotGetRef, rootSlotGetRef);\n\n if (!slotProps) {\n return filterProps(originalProps);\n }\n\n const { className: rootSlotClassName, style: rootSlotStyle, ...rootSlotProps } = slotProps;\n\n const {\n className: originalClassName,\n style: originalSlotStyle,\n ...originalRestProps\n } = originalProps;\n\n const resolvedClassName =\n originalClassName || rootSlotClassName\n ? classNames(originalClassName, rootSlotClassName)\n : undefined;\n const resolvedStyle =\n originalSlotStyle || rootSlotStyle ? mergeStyle(originalSlotStyle, rootSlotStyle) : undefined;\n\n const mergedEventsByInjectProps: any = getMergedSameEventsByProps(\n originalRestProps,\n rootSlotProps,\n );\n\n const resolvedProps: T = {\n ...originalRestProps,\n ...rootSlotProps,\n ...mergedEventsByInjectProps,\n };\n\n if (resolvedClassName) {\n resolvedProps.className = resolvedClassName;\n }\n if (resolvedStyle) {\n resolvedProps.style = resolvedStyle;\n }\n if (rootSlotGetRef || originalSlotGetRef) {\n resolvedProps.getRootRef = getRootRef;\n }\n\n return filterProps(resolvedProps);\n};\n"],"names":["classNames","getMergedSameEventsByProps","mergeStyle","filterObject","useExternRef","filterProps","props","value","undefined","useMergeProps","originalProps","slotProps","originalSlotGetRef","getRootRef","rootSlotGetRef","className","rootSlotClassName","style","rootSlotStyle","rootSlotProps","originalClassName","originalSlotStyle","originalRestProps","resolvedClassName","resolvedStyle","mergedEventsByInjectProps","resolvedProps"],"mappings":"AACA,SAASA,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,0BAA0B,QAAQ,2CAAwC;AACnF,SAASC,UAAU,QAAQ,2BAAwB;AACnD,SAASC,YAAY,QAAQ,mBAAgB;AAE7C,SAASC,YAAY,QAAQ,oBAAiB;AAK9C,MAAMC,cAAc,CAAkCC;IACpD,OAAOH,aAAaG,OAAO,CAACC,QAAUA,UAAUC;AAClD;AAEA,OAAO,MAAMC,gBAAgB,CAC3BC,eACAC;IAEA,MAAMC,qBAAqBF,cAAcG,UAAU;IACnD,MAAMC,iBAAiBH,WAAWE;IAElC,MAAMA,aAAaT,aAAaQ,oBAAoBE;IAEpD,IAAI,CAACH,WAAW;QACd,OAAON,YAAYK;IACrB;IAEA,MAAM,EAAEK,WAAWC,iBAAiB,EAAEC,OAAOC,aAAa,EAAE,GAAGC,eAAe,GAAGR;IAEjF,MAAM,EACJI,WAAWK,iBAAiB,EAC5BH,OAAOI,iBAAiB,EACxB,GAAGC,mBACJ,GAAGZ;IAEJ,MAAMa,oBACJH,qBAAqBJ,oBACjBhB,WAAWoB,mBAAmBJ,qBAC9BR;IACN,MAAMgB,gBACJH,qBAAqBH,gBAAgBhB,WAAWmB,mBAAmBH,iBAAiBV;IAEtF,MAAMiB,4BAAiCxB,2BACrCqB,mBACAH;IAGF,MAAMO,gBAAmB;QACvB,GAAGJ,iBAAiB;QACpB,GAAGH,aAAa;QAChB,GAAGM,yBAAyB;IAC9B;IAEA,IAAIF,mBAAmB;QACrBG,cAAcX,SAAS,GAAGQ;IAC5B;IACA,IAAIC,eAAe;QACjBE,cAAcT,KAAK,GAAGO;IACxB;IACA,IAAIV,kBAAkBF,oBAAoB;QACxCc,cAAcb,UAAU,GAAGA;IAC7B;IAEA,OAAOR,YAAYqB;AACrB,EAAE"}
package/dist/lib/date.js CHANGED
@@ -248,7 +248,7 @@ export function eachDayOfInterval(startDate, endDate, { step = 1 } = {}) {
248
248
  const dates = [];
249
249
  while(+date <= endTime){
250
250
  dates.push(new Date(date));
251
- date.setDate(date.getDate() + 1);
251
+ date.setDate(date.getDate() + step);
252
252
  date.setHours(0, 0, 0, 0);
253
253
  }
254
254
  return reversed ? dates.reverse() : dates;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/date.ts"],"sourcesContent":["import { isSameDate } from '@vkontakte/vkjs';\nimport { TZDateMini } from '@vkontakte/vkui-date-fns-tz';\n\nexport function parse(input: string, format: string, referenceDate: Date = new Date()): Date {\n const match2 = /^\\d\\d/; // 00 - 99\n const match4 = /^\\d{4}/; // 0000 - 9999\n\n const entries: Array<[string, RegExp, (val: string) => [string, number, boolean]]> = [\n ['yyyy', match4, (val) => ['Y', +val, true]],\n [\n 'MM',\n match2,\n (val) => {\n const numVal = +val;\n const okay = numVal > 0 && numVal <= 12;\n\n return ['M', numVal - 1, okay];\n },\n ],\n ['dd', match2, (val) => ['D', +val, true]],\n [\n 'HH',\n match2,\n (val) => {\n const numVal = parseInt(val, 10);\n const okay = numVal >= 0 && numVal < 24;\n\n return ['h', numVal, okay];\n },\n ],\n [\n 'mm',\n match2,\n (val) => {\n const numVal = parseInt(val, 10);\n const okay = numVal >= 0 && numVal < 60;\n\n return ['m', numVal, okay];\n },\n ],\n ];\n\n const superRegExp = new RegExp(entries.map((item) => item[0]).join('|'), 'g');\n\n const store: {\n [key: string]: number;\n } = {\n y: referenceDate.getFullYear(),\n M: referenceDate.getMonth(),\n d: referenceDate.getDate(),\n h: referenceDate.getHours(),\n m: referenceDate.getMinutes(),\n s: referenceDate.getSeconds(),\n ms: referenceDate.getMilliseconds(),\n };\n\n let prevInputIndex = 0;\n let lastNonFormatting = '';\n let lastFormatIndex = 0;\n let found = false;\n\n while (true) {\n const match = superRegExp.exec(format);\n\n if (!match) {\n break;\n }\n\n const length = match[0].length;\n const atIndex = superRegExp.lastIndex - length;\n\n const item = entries.find((item) => item[0] === match[0])!;\n\n lastNonFormatting = format.slice(lastFormatIndex, atIndex);\n lastFormatIndex = superRegExp.lastIndex;\n\n if (\n input.slice(prevInputIndex, prevInputIndex + lastNonFormatting.length) !== lastNonFormatting\n ) {\n return new Date('');\n }\n\n const value = input.slice(prevInputIndex + lastNonFormatting.length).match(item[1]);\n\n if (!value) {\n return new Date('');\n }\n\n prevInputIndex = prevInputIndex + lastNonFormatting.length + value[0].length;\n\n const [key, newValue, okay] = item[2](value[0]);\n\n if (!okay) {\n return new Date('');\n }\n\n store[key] = newValue;\n found = true;\n }\n\n if (!found) {\n return new Date('');\n }\n\n const date = new Date(store.Y, store.M, store.D, store.h, store.m, store.s, store.ms);\n\n // Since days of months are dynamic, they can't be validated in entries,\n // so we check it here, in the finalized date\n if (date.getMonth() !== store.M || date.getDate() !== store.D) {\n return new Date('');\n }\n\n return date;\n}\n\nexport const convertDateToTimeZone = (\n date?: Date | null | undefined,\n timezone?: string | undefined,\n): Date | undefined | null => {\n if (!timezone) {\n return date;\n }\n if (date === null) {\n return null;\n }\n return date ? TZDateMini.tz(timezone, date) : undefined;\n};\n\nconst formatter = /*#__PURE__*/ new Intl.DateTimeFormat();\n\nexport const convertDateFromTimeZone = (date: Date | null, timezone?: string): Date | null => {\n if (!timezone) {\n return date;\n }\n if (date === null) {\n return null;\n }\n // eslint-disable-next-line new-cap\n const systemTimezone = formatter.resolvedOptions().timeZone;\n return TZDateMini.tz(systemTimezone, date);\n};\n\nexport type CreateDateInTimeZoneOverrides = {\n year?: number | undefined;\n month?: number | undefined;\n date?: number | undefined;\n hours?: number | undefined;\n minutes?: number | undefined;\n seconds?: number | undefined;\n milliseconds?: number | undefined;\n};\n\nexport function createDateInTimeZone(\n baseDate: Date,\n timezone?: string,\n overrides?: CreateDateInTimeZoneOverrides,\n): Date {\n const year = overrides?.year ?? baseDate.getFullYear();\n const month = overrides?.month ?? baseDate.getMonth();\n const date = overrides?.date ?? baseDate.getDate();\n const hours = overrides?.hours ?? baseDate.getHours();\n const minutes = overrides?.minutes ?? baseDate.getMinutes();\n const seconds = overrides?.seconds ?? baseDate.getSeconds();\n const milliseconds = overrides?.milliseconds ?? baseDate.getMilliseconds();\n\n if (!timezone) {\n return new Date(year, month, date, hours, minutes, seconds, milliseconds);\n }\n return TZDateMini.tz(timezone, year, month, date, hours, minutes, seconds, milliseconds);\n}\n\nconst dateOptions: Intl.DateTimeFormatOptions = {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n};\n\n// dd.MM.yyyy\nexport const dateFormatter = /*#__PURE__*/ new Intl.DateTimeFormat('ru-RU', dateOptions);\n\nclass DateTimeFormat extends Intl.DateTimeFormat {\n constructor() {\n super('ru-RU', {\n ...dateOptions,\n hour: '2-digit',\n minute: '2-digit',\n });\n }\n\n format(date?: Date | number): string {\n return super.format(date).replace(',', '');\n }\n}\n\n// dd.MM.yyyy HH:mm\nexport const dateTimeFormatter = /*#__PURE__*/ new DateTimeFormat();\n\n/**\n * Возвращает дату начала месяца\n */\nexport function startOfMonth(date: Date): Date {\n const result = new Date(date);\n result.setDate(1);\n result.setHours(0, 0, 0, 0);\n return result;\n}\n\n/**\n * Возвращает дату конца месяца\n */\nexport function endOfMonth(date: Date): Date {\n const result = new Date(date);\n const month = result.getMonth();\n result.setFullYear(result.getFullYear(), month + 1, 0);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\ntype WeekOptions = { weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined };\n\nexport const MONDAY = 1;\n\n/**\n * Возвращает дату начала недели\n */\nexport function startOfWeek(date: Date, { weekStartsOn = MONDAY }: WeekOptions = {}): Date {\n const result = new Date(date);\n const day = result.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n result.setDate(result.getDate() - diff);\n result.setHours(0, 0, 0, 0);\n return result;\n}\n\n/**\n * Возвращает дату конца недели\n */\nexport function endOfWeek(date: Date, { weekStartsOn = MONDAY }: WeekOptions = {}): Date {\n const result = new Date(date);\n const day = result.getDay();\n const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n\n result.setDate(result.getDate() + diff);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\n/**\n * Возвращает дату начала дня\n */\nexport function startOfDay(date: Date): Date {\n const result = new Date(date);\n result.setHours(0, 0, 0, 0);\n return result;\n}\n\n/**\n * Возвращает дату конца дня\n */\nexport function endOfDay(date: Date): Date {\n const result = new Date(date);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\nexport function startOfTomorrow() {\n const date = new Date();\n const day = date.getDate();\n\n date.setDate(day + 1);\n date.setHours(0, 0, 0, 0);\n return date;\n}\n\n/**\n * Возвращает дату начала минуты\n */\nexport function startOfMinute(date: Date): Date {\n const result = new Date(date);\n result.setSeconds(0, 0);\n return result;\n}\n\nexport function eachDayOfInterval(\n startDate: Date,\n endDate: Date,\n { step = 1 }: { step?: number | undefined } = {},\n): Date[] {\n let reversed = +startDate > +endDate;\n const endTime = reversed ? +startDate : +endDate;\n const date = new Date(reversed ? endDate : startDate);\n date.setHours(0, 0, 0, 0);\n\n if (!step) {\n return [];\n }\n if (step < 0) {\n step = -step;\n reversed = !reversed;\n }\n\n const dates = [];\n\n while (+date <= endTime) {\n dates.push(new Date(date));\n date.setDate(date.getDate() + 1);\n date.setHours(0, 0, 0, 0);\n }\n\n return reversed ? dates.reverse() : dates;\n}\n\n/**\n * Проверяет, что переданные даты относятся к одному и тому же месяцу\n *\n * @example\n * ```ts\n * import assert from 'node:assert';\n * import { isSameMonth } from './date.ts';\n *\n * const d1 = new Date();\n * const d2 = new Date();\n * assert.ok(isSameMonth(d1, d2));\n * ```\n */\nexport function isSameMonth(d1: Date, d2: Date): boolean {\n return d1.getMonth() === d2.getMonth() && d1.getFullYear() === d2.getFullYear();\n}\n\nexport function isLastDayOfMonth(date: Date) {\n return +endOfDay(date) === +endOfMonth(date);\n}\n\nexport function isWithinInterval(date: Date, interval: [Date, Date]) {\n const [startTime, endTime] = interval.sort((a, b) => +a - +b);\n\n return date >= startTime && date <= endTime;\n}\n\nexport function isToday(date: Date) {\n return isSameDate(date, new Date());\n}\n\nexport function isYesterday(date: Date) {\n const yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n\n return isSameDate(date, yesterday);\n}\n\nexport function isMatch(input: string, format: string): boolean {\n return !isNaN(+parse(input, format));\n}\n\nexport const millisecondsInSecond = 1000;\n\nexport function addDays(date: Date, amount: number): Date {\n const result = new Date(date);\n\n if (!amount) {\n return result;\n }\n\n result.setDate(result.getDate() + amount);\n return result;\n}\n\nexport function subDays(date: Date, amount: number): Date {\n return addDays(date, -amount);\n}\n\nexport function addWeeks(date: Date, amount: number): Date {\n return addDays(date, amount * 7);\n}\n\nexport function subWeeks(date: Date, amount: number): Date {\n return addWeeks(date, -amount);\n}\n\nexport function addMonths(date: Date, amount: number): Date {\n const result = new Date(date);\n\n if (!amount) {\n return result;\n }\n\n const dayOfMonth = result.getDate();\n\n const endOfDesiredMonth = new Date(date);\n endOfDesiredMonth.setMonth(result.getMonth() + amount + 1, 0); // Конец месяца\n const daysInMonth = endOfDesiredMonth.getDate();\n if (dayOfMonth >= daysInMonth) {\n // Если мы уже находимся в конце месяца, то это нужная дата\n return endOfDesiredMonth;\n }\n\n result.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n return result;\n}\n\nexport function subMonths(date: Date, amount: number): Date {\n return addMonths(date, -amount);\n}\n\nexport function setYear(date: Date, year: number): Date {\n const result = new Date(date);\n result.setFullYear(year);\n return result;\n}\n\nfunction getDaysInMonth(date: Date): number {\n const result = new Date(date);\n const lastDayOfMonth = new Date(result);\n lastDayOfMonth.setFullYear(result.getFullYear(), result.getMonth() + 1, 0);\n lastDayOfMonth.setHours(0, 0, 0, 0);\n return lastDayOfMonth.getDate();\n}\n\nexport function setMonth(date: Date, month: number): Date {\n const result = new Date(date);\n const year = result.getFullYear();\n const day = result.getDate();\n\n const midMonth = new Date(date);\n midMonth.setFullYear(year, month, 15);\n midMonth.setHours(0, 0, 0, 0);\n const daysInMonth = getDaysInMonth(midMonth);\n\n result.setMonth(month, Math.min(day, daysInMonth));\n return result;\n}\n\nexport function setHours(date: Date, hours: number): Date {\n const result = new Date(date);\n result.setHours(hours);\n return result;\n}\n\nexport function setMinutes(date: Date, minutes: number): Date {\n const result = new Date(date);\n result.setMinutes(minutes);\n return result;\n}\n"],"names":["isSameDate","TZDateMini","parse","input","format","referenceDate","Date","match2","match4","entries","val","numVal","okay","parseInt","superRegExp","RegExp","map","item","join","store","y","getFullYear","M","getMonth","d","getDate","h","getHours","m","getMinutes","s","getSeconds","ms","getMilliseconds","prevInputIndex","lastNonFormatting","lastFormatIndex","found","match","exec","length","atIndex","lastIndex","find","slice","value","key","newValue","date","Y","D","convertDateToTimeZone","timezone","tz","undefined","formatter","Intl","DateTimeFormat","convertDateFromTimeZone","systemTimezone","resolvedOptions","timeZone","createDateInTimeZone","baseDate","overrides","year","month","hours","minutes","seconds","milliseconds","dateOptions","day","dateFormatter","replace","hour","minute","dateTimeFormatter","startOfMonth","result","setDate","setHours","endOfMonth","setFullYear","MONDAY","startOfWeek","weekStartsOn","getDay","diff","endOfWeek","startOfDay","endOfDay","startOfTomorrow","startOfMinute","setSeconds","eachDayOfInterval","startDate","endDate","step","reversed","endTime","dates","push","reverse","isSameMonth","d1","d2","isLastDayOfMonth","isWithinInterval","interval","startTime","sort","a","b","isToday","isYesterday","yesterday","isMatch","isNaN","millisecondsInSecond","addDays","amount","subDays","addWeeks","subWeeks","addMonths","dayOfMonth","endOfDesiredMonth","setMonth","daysInMonth","subMonths","setYear","getDaysInMonth","lastDayOfMonth","midMonth","Math","min","setMinutes"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/lib/date.ts"],"sourcesContent":["import { isSameDate } from '@vkontakte/vkjs';\nimport { TZDateMini } from '@vkontakte/vkui-date-fns-tz';\n\nexport function parse(input: string, format: string, referenceDate: Date = new Date()): Date {\n const match2 = /^\\d\\d/; // 00 - 99\n const match4 = /^\\d{4}/; // 0000 - 9999\n\n const entries: Array<[string, RegExp, (val: string) => [string, number, boolean]]> = [\n ['yyyy', match4, (val) => ['Y', +val, true]],\n [\n 'MM',\n match2,\n (val) => {\n const numVal = +val;\n const okay = numVal > 0 && numVal <= 12;\n\n return ['M', numVal - 1, okay];\n },\n ],\n ['dd', match2, (val) => ['D', +val, true]],\n [\n 'HH',\n match2,\n (val) => {\n const numVal = parseInt(val, 10);\n const okay = numVal >= 0 && numVal < 24;\n\n return ['h', numVal, okay];\n },\n ],\n [\n 'mm',\n match2,\n (val) => {\n const numVal = parseInt(val, 10);\n const okay = numVal >= 0 && numVal < 60;\n\n return ['m', numVal, okay];\n },\n ],\n ];\n\n const superRegExp = new RegExp(entries.map((item) => item[0]).join('|'), 'g');\n\n const store: {\n [key: string]: number;\n } = {\n y: referenceDate.getFullYear(),\n M: referenceDate.getMonth(),\n d: referenceDate.getDate(),\n h: referenceDate.getHours(),\n m: referenceDate.getMinutes(),\n s: referenceDate.getSeconds(),\n ms: referenceDate.getMilliseconds(),\n };\n\n let prevInputIndex = 0;\n let lastNonFormatting = '';\n let lastFormatIndex = 0;\n let found = false;\n\n while (true) {\n const match = superRegExp.exec(format);\n\n if (!match) {\n break;\n }\n\n const length = match[0].length;\n const atIndex = superRegExp.lastIndex - length;\n\n const item = entries.find((item) => item[0] === match[0])!;\n\n lastNonFormatting = format.slice(lastFormatIndex, atIndex);\n lastFormatIndex = superRegExp.lastIndex;\n\n if (\n input.slice(prevInputIndex, prevInputIndex + lastNonFormatting.length) !== lastNonFormatting\n ) {\n return new Date('');\n }\n\n const value = input.slice(prevInputIndex + lastNonFormatting.length).match(item[1]);\n\n if (!value) {\n return new Date('');\n }\n\n prevInputIndex = prevInputIndex + lastNonFormatting.length + value[0].length;\n\n const [key, newValue, okay] = item[2](value[0]);\n\n if (!okay) {\n return new Date('');\n }\n\n store[key] = newValue;\n found = true;\n }\n\n if (!found) {\n return new Date('');\n }\n\n const date = new Date(store.Y, store.M, store.D, store.h, store.m, store.s, store.ms);\n\n // Since days of months are dynamic, they can't be validated in entries,\n // so we check it here, in the finalized date\n if (date.getMonth() !== store.M || date.getDate() !== store.D) {\n return new Date('');\n }\n\n return date;\n}\n\nexport const convertDateToTimeZone = (\n date?: Date | null | undefined,\n timezone?: string | undefined,\n): Date | undefined | null => {\n if (!timezone) {\n return date;\n }\n if (date === null) {\n return null;\n }\n return date ? TZDateMini.tz(timezone, date) : undefined;\n};\n\nconst formatter = /*#__PURE__*/ new Intl.DateTimeFormat();\n\nexport const convertDateFromTimeZone = (date: Date | null, timezone?: string): Date | null => {\n if (!timezone) {\n return date;\n }\n if (date === null) {\n return null;\n }\n // eslint-disable-next-line new-cap\n const systemTimezone = formatter.resolvedOptions().timeZone;\n return TZDateMini.tz(systemTimezone, date);\n};\n\nexport type CreateDateInTimeZoneOverrides = {\n year?: number | undefined;\n month?: number | undefined;\n date?: number | undefined;\n hours?: number | undefined;\n minutes?: number | undefined;\n seconds?: number | undefined;\n milliseconds?: number | undefined;\n};\n\nexport function createDateInTimeZone(\n baseDate: Date,\n timezone?: string,\n overrides?: CreateDateInTimeZoneOverrides,\n): Date {\n const year = overrides?.year ?? baseDate.getFullYear();\n const month = overrides?.month ?? baseDate.getMonth();\n const date = overrides?.date ?? baseDate.getDate();\n const hours = overrides?.hours ?? baseDate.getHours();\n const minutes = overrides?.minutes ?? baseDate.getMinutes();\n const seconds = overrides?.seconds ?? baseDate.getSeconds();\n const milliseconds = overrides?.milliseconds ?? baseDate.getMilliseconds();\n\n if (!timezone) {\n return new Date(year, month, date, hours, minutes, seconds, milliseconds);\n }\n return TZDateMini.tz(timezone, year, month, date, hours, minutes, seconds, milliseconds);\n}\n\nconst dateOptions: Intl.DateTimeFormatOptions = {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n};\n\n// dd.MM.yyyy\nexport const dateFormatter = /*#__PURE__*/ new Intl.DateTimeFormat('ru-RU', dateOptions);\n\nclass DateTimeFormat extends Intl.DateTimeFormat {\n constructor() {\n super('ru-RU', {\n ...dateOptions,\n hour: '2-digit',\n minute: '2-digit',\n });\n }\n\n format(date?: Date | number): string {\n return super.format(date).replace(',', '');\n }\n}\n\n// dd.MM.yyyy HH:mm\nexport const dateTimeFormatter = /*#__PURE__*/ new DateTimeFormat();\n\n/**\n * Возвращает дату начала месяца\n */\nexport function startOfMonth(date: Date): Date {\n const result = new Date(date);\n result.setDate(1);\n result.setHours(0, 0, 0, 0);\n return result;\n}\n\n/**\n * Возвращает дату конца месяца\n */\nexport function endOfMonth(date: Date): Date {\n const result = new Date(date);\n const month = result.getMonth();\n result.setFullYear(result.getFullYear(), month + 1, 0);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\ntype WeekOptions = { weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined };\n\nexport const MONDAY = 1;\n\n/**\n * Возвращает дату начала недели\n */\nexport function startOfWeek(date: Date, { weekStartsOn = MONDAY }: WeekOptions = {}): Date {\n const result = new Date(date);\n const day = result.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n result.setDate(result.getDate() - diff);\n result.setHours(0, 0, 0, 0);\n return result;\n}\n\n/**\n * Возвращает дату конца недели\n */\nexport function endOfWeek(date: Date, { weekStartsOn = MONDAY }: WeekOptions = {}): Date {\n const result = new Date(date);\n const day = result.getDay();\n const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n\n result.setDate(result.getDate() + diff);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\n/**\n * Возвращает дату начала дня\n */\nexport function startOfDay(date: Date): Date {\n const result = new Date(date);\n result.setHours(0, 0, 0, 0);\n return result;\n}\n\n/**\n * Возвращает дату конца дня\n */\nexport function endOfDay(date: Date): Date {\n const result = new Date(date);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\nexport function startOfTomorrow() {\n const date = new Date();\n const day = date.getDate();\n\n date.setDate(day + 1);\n date.setHours(0, 0, 0, 0);\n return date;\n}\n\n/**\n * Возвращает дату начала минуты\n */\nexport function startOfMinute(date: Date): Date {\n const result = new Date(date);\n result.setSeconds(0, 0);\n return result;\n}\n\nexport function eachDayOfInterval(\n startDate: Date,\n endDate: Date,\n { step = 1 }: { step?: number | undefined } = {},\n): Date[] {\n let reversed = +startDate > +endDate;\n const endTime = reversed ? +startDate : +endDate;\n const date = new Date(reversed ? endDate : startDate);\n date.setHours(0, 0, 0, 0);\n\n if (!step) {\n return [];\n }\n if (step < 0) {\n step = -step;\n reversed = !reversed;\n }\n\n const dates = [];\n\n while (+date <= endTime) {\n dates.push(new Date(date));\n date.setDate(date.getDate() + step);\n date.setHours(0, 0, 0, 0);\n }\n\n return reversed ? dates.reverse() : dates;\n}\n\n/**\n * Проверяет, что переданные даты относятся к одному и тому же месяцу\n *\n * @example\n * ```ts\n * import assert from 'node:assert';\n * import { isSameMonth } from './date.ts';\n *\n * const d1 = new Date();\n * const d2 = new Date();\n * assert.ok(isSameMonth(d1, d2));\n * ```\n */\nexport function isSameMonth(d1: Date, d2: Date): boolean {\n return d1.getMonth() === d2.getMonth() && d1.getFullYear() === d2.getFullYear();\n}\n\nexport function isLastDayOfMonth(date: Date) {\n return +endOfDay(date) === +endOfMonth(date);\n}\n\nexport function isWithinInterval(date: Date, interval: [Date, Date]) {\n const [startTime, endTime] = interval.sort((a, b) => +a - +b);\n\n return date >= startTime && date <= endTime;\n}\n\nexport function isToday(date: Date) {\n return isSameDate(date, new Date());\n}\n\nexport function isYesterday(date: Date) {\n const yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n\n return isSameDate(date, yesterday);\n}\n\nexport function isMatch(input: string, format: string): boolean {\n return !isNaN(+parse(input, format));\n}\n\nexport const millisecondsInSecond = 1000;\n\nexport function addDays(date: Date, amount: number): Date {\n const result = new Date(date);\n\n if (!amount) {\n return result;\n }\n\n result.setDate(result.getDate() + amount);\n return result;\n}\n\nexport function subDays(date: Date, amount: number): Date {\n return addDays(date, -amount);\n}\n\nexport function addWeeks(date: Date, amount: number): Date {\n return addDays(date, amount * 7);\n}\n\nexport function subWeeks(date: Date, amount: number): Date {\n return addWeeks(date, -amount);\n}\n\nexport function addMonths(date: Date, amount: number): Date {\n const result = new Date(date);\n\n if (!amount) {\n return result;\n }\n\n const dayOfMonth = result.getDate();\n\n const endOfDesiredMonth = new Date(date);\n endOfDesiredMonth.setMonth(result.getMonth() + amount + 1, 0); // Конец месяца\n const daysInMonth = endOfDesiredMonth.getDate();\n if (dayOfMonth >= daysInMonth) {\n // Если мы уже находимся в конце месяца, то это нужная дата\n return endOfDesiredMonth;\n }\n\n result.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n return result;\n}\n\nexport function subMonths(date: Date, amount: number): Date {\n return addMonths(date, -amount);\n}\n\nexport function setYear(date: Date, year: number): Date {\n const result = new Date(date);\n result.setFullYear(year);\n return result;\n}\n\nfunction getDaysInMonth(date: Date): number {\n const result = new Date(date);\n const lastDayOfMonth = new Date(result);\n lastDayOfMonth.setFullYear(result.getFullYear(), result.getMonth() + 1, 0);\n lastDayOfMonth.setHours(0, 0, 0, 0);\n return lastDayOfMonth.getDate();\n}\n\nexport function setMonth(date: Date, month: number): Date {\n const result = new Date(date);\n const year = result.getFullYear();\n const day = result.getDate();\n\n const midMonth = new Date(date);\n midMonth.setFullYear(year, month, 15);\n midMonth.setHours(0, 0, 0, 0);\n const daysInMonth = getDaysInMonth(midMonth);\n\n result.setMonth(month, Math.min(day, daysInMonth));\n return result;\n}\n\nexport function setHours(date: Date, hours: number): Date {\n const result = new Date(date);\n result.setHours(hours);\n return result;\n}\n\nexport function setMinutes(date: Date, minutes: number): Date {\n const result = new Date(date);\n result.setMinutes(minutes);\n return result;\n}\n"],"names":["isSameDate","TZDateMini","parse","input","format","referenceDate","Date","match2","match4","entries","val","numVal","okay","parseInt","superRegExp","RegExp","map","item","join","store","y","getFullYear","M","getMonth","d","getDate","h","getHours","m","getMinutes","s","getSeconds","ms","getMilliseconds","prevInputIndex","lastNonFormatting","lastFormatIndex","found","match","exec","length","atIndex","lastIndex","find","slice","value","key","newValue","date","Y","D","convertDateToTimeZone","timezone","tz","undefined","formatter","Intl","DateTimeFormat","convertDateFromTimeZone","systemTimezone","resolvedOptions","timeZone","createDateInTimeZone","baseDate","overrides","year","month","hours","minutes","seconds","milliseconds","dateOptions","day","dateFormatter","replace","hour","minute","dateTimeFormatter","startOfMonth","result","setDate","setHours","endOfMonth","setFullYear","MONDAY","startOfWeek","weekStartsOn","getDay","diff","endOfWeek","startOfDay","endOfDay","startOfTomorrow","startOfMinute","setSeconds","eachDayOfInterval","startDate","endDate","step","reversed","endTime","dates","push","reverse","isSameMonth","d1","d2","isLastDayOfMonth","isWithinInterval","interval","startTime","sort","a","b","isToday","isYesterday","yesterday","isMatch","isNaN","millisecondsInSecond","addDays","amount","subDays","addWeeks","subWeeks","addMonths","dayOfMonth","endOfDesiredMonth","setMonth","daysInMonth","subMonths","setYear","getDaysInMonth","lastDayOfMonth","midMonth","Math","min","setMinutes"],"mappings":"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"}
@@ -235,7 +235,7 @@ shown: shownProp, onShownChange: onShownChangeProp, onShownChanged: onShownChang
235
235
  if (shownLocalState.shown) {
236
236
  setShownFinalState(true);
237
237
  onShownChanged(true, shownLocalState.reason);
238
- } else if (hasCSSAnimation.current && !willBeHide) {
238
+ } else if (hasCSSAnimation.current) {
239
239
  setWillBeHide(true);
240
240
  } else {
241
241
  setShownFinalState(false);