@hh.ru/magritte-ui-nav-bar 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/NavBar-CrD8CEWb.js +118 -0
  2. package/NavBar-CrD8CEWb.js.map +1 -0
  3. package/index.css +289 -0
  4. package/index.d.ts +9 -0
  5. package/index.js +35 -0
  6. package/index.js.map +1 -0
  7. package/index.mock.d.ts +17 -0
  8. package/index.mock.js +47 -0
  9. package/index.mock.js.map +1 -0
  10. package/internal/KeyedSubscriptions.d.ts +41 -0
  11. package/internal/KeyedSubscriptions.js +79 -0
  12. package/internal/KeyedSubscriptions.js.map +1 -0
  13. package/internal/MetricsProvider.d.ts +77 -0
  14. package/internal/MetricsProvider.js +275 -0
  15. package/internal/MetricsProvider.js.map +1 -0
  16. package/internal/MorphStore.d.ts +10 -0
  17. package/internal/MorphStore.js +36 -0
  18. package/internal/MorphStore.js.map +1 -0
  19. package/internal/PaneStore.d.ts +60 -0
  20. package/internal/PaneStore.js +102 -0
  21. package/internal/PaneStore.js.map +1 -0
  22. package/internal/ProgressiveBlur.d.ts +7 -0
  23. package/internal/ProgressiveBlur.js +43 -0
  24. package/internal/ProgressiveBlur.js.map +1 -0
  25. package/internal/useAnimationRanges.d.ts +38 -0
  26. package/internal/useAnimationRanges.js +52 -0
  27. package/internal/useAnimationRanges.js.map +1 -0
  28. package/internal/useBindScrollToAnimationProgress.d.ts +9 -0
  29. package/internal/useBindScrollToAnimationProgress.js +82 -0
  30. package/internal/useBindScrollToAnimationProgress.js.map +1 -0
  31. package/internal/useDivider.d.ts +4 -0
  32. package/internal/useDivider.js +38 -0
  33. package/internal/useDivider.js.map +1 -0
  34. package/internal/useNavBarMetrics.d.ts +9 -0
  35. package/internal/useNavBarMetrics.js +34 -0
  36. package/internal/useNavBarMetrics.js.map +1 -0
  37. package/internal/useResetFocus.d.ts +3 -0
  38. package/internal/useResetFocus.js +31 -0
  39. package/internal/useResetFocus.js.map +1 -0
  40. package/internal/useScrollAdapter.d.ts +15 -0
  41. package/internal/useScrollAdapter.js +116 -0
  42. package/internal/useScrollAdapter.js.map +1 -0
  43. package/internal/useSnapScroll.d.ts +6 -0
  44. package/internal/useSnapScroll.js +148 -0
  45. package/internal/useSnapScroll.js.map +1 -0
  46. package/internal/useSyncMotionValue.d.ts +2 -0
  47. package/internal/useSyncMotionValue.js +9 -0
  48. package/internal/useSyncMotionValue.js.map +1 -0
  49. package/internal/utils.d.ts +207 -0
  50. package/internal/utils.js +359 -0
  51. package/internal/utils.js.map +1 -0
  52. package/package.json +38 -0
  53. package/public/Actions.d.ts +26 -0
  54. package/public/Actions.js +47 -0
  55. package/public/Actions.js.map +1 -0
  56. package/public/EnvironmentFingerprintNode.d.ts +7 -0
  57. package/public/EnvironmentFingerprintNode.js +70 -0
  58. package/public/EnvironmentFingerprintNode.js.map +1 -0
  59. package/public/LayoutMorph.d.ts +32 -0
  60. package/public/LayoutMorph.js +132 -0
  61. package/public/LayoutMorph.js.map +1 -0
  62. package/public/LayoutStage.d.ts +7 -0
  63. package/public/LayoutStage.js +87 -0
  64. package/public/LayoutStage.js.map +1 -0
  65. package/public/Morph.d.ts +28 -0
  66. package/public/Morph.js +66 -0
  67. package/public/Morph.js.map +1 -0
  68. package/public/NavBar.d.ts +57 -0
  69. package/public/NavBar.js +21 -0
  70. package/public/NavBar.js.map +1 -0
  71. package/public/Pane.d.ts +22 -0
  72. package/public/Pane.js +79 -0
  73. package/public/Pane.js.map +1 -0
  74. package/public/Stage.d.ts +10 -0
  75. package/public/Stage.js +43 -0
  76. package/public/Stage.js.map +1 -0
  77. package/public/TitleContainer.d.ts +24 -0
  78. package/public/TitleContainer.js +34 -0
  79. package/public/TitleContainer.js.map +1 -0
@@ -0,0 +1,118 @@
1
+ import './index.css';
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
3
+ import React, { createContext, useContext, useRef, useLayoutEffect } from 'react';
4
+ import classNames from 'classnames';
5
+ import { useMotionValue, frame, motion } from 'motion/react';
6
+ import { Divider } from '@hh.ru/magritte-ui-divider';
7
+ import { Layer } from '@hh.ru/magritte-ui-layer';
8
+ import { MetricsProvider } from './internal/MetricsProvider.js';
9
+ import { ProgressiveBlur } from './internal/ProgressiveBlur.js';
10
+ import { useAnimationRanges } from './internal/useAnimationRanges.js';
11
+ import { useBindScrollToAnimationProgress } from './internal/useBindScrollToAnimationProgress.js';
12
+ import { useDivider } from './internal/useDivider.js';
13
+ import { useNavBarMetrics } from './internal/useNavBarMetrics.js';
14
+ import { useResetFocus } from './internal/useResetFocus.js';
15
+ import { useScrollAdapter } from './internal/useScrollAdapter.js';
16
+ import { useSnapScroll } from './internal/useSnapScroll.js';
17
+ import { useSyncMotionValue } from './internal/useSyncMotionValue.js';
18
+ import { useInitOnce, scheduleMicro, scheduleMacro, remap, lerp } from './internal/utils.js';
19
+
20
+ var styles = {"actions-container":"magritte-actions-container___CBgYW_1-0-1","actionsContainer":"magritte-actions-container___CBgYW_1-0-1","actions-no-children":"magritte-actions-no-children___rgJUl_1-0-1","actionsNoChildren":"magritte-actions-no-children___rgJUl_1-0-1","actions-left-slot":"magritte-actions-left-slot___DNOj0_1-0-1","actionsLeftSlot":"magritte-actions-left-slot___DNOj0_1-0-1","actions-right-slot":"magritte-actions-right-slot___aodtj_1-0-1","actionsRightSlot":"magritte-actions-right-slot___aodtj_1-0-1","navbar-transparent-end":"magritte-navbar-transparent-end___6KqLR_1-0-1","navbarTransparentEnd":"magritte-navbar-transparent-end___6KqLR_1-0-1","actions-start-stage":"magritte-actions-start-stage___MJ67a_1-0-1","actionsStartStage":"magritte-actions-start-stage___MJ67a_1-0-1","actions-side-slot-content":"magritte-actions-side-slot-content___TlHrX_1-0-1","actionsSideSlotContent":"magritte-actions-side-slot-content___TlHrX_1-0-1","actions-icon-morph":"magritte-actions-icon-morph___-nNgW_1-0-1","actionsIconMorph":"magritte-actions-icon-morph___-nNgW_1-0-1","navbar-transparent-start":"magritte-navbar-transparent-start___wysv0_1-0-1","navbarTransparentStart":"magritte-navbar-transparent-start___wysv0_1-0-1","actions-end-stage":"magritte-actions-end-stage___qHtTV_1-0-1","actionsEndStage":"magritte-actions-end-stage___qHtTV_1-0-1","navbar-not-transparent":"magritte-navbar-not-transparent___5KZNp_1-0-1","navbarNotTransparent":"magritte-navbar-not-transparent___5KZNp_1-0-1","actions-only-stage":"magritte-actions-only-stage___cg10A_1-0-1","actionsOnlyStage":"magritte-actions-only-stage___cg10A_1-0-1","actions-side-slot-content-clone":"magritte-actions-side-slot-content-clone___jDxVm_1-0-1","actionsSideSlotContentClone":"magritte-actions-side-slot-content-clone___jDxVm_1-0-1","actions-center-slot":"magritte-actions-center-slot___hLAy6_1-0-1","actionsCenterSlot":"magritte-actions-center-slot___hLAy6_1-0-1","actions-center-slot-centered":"magritte-actions-center-slot-centered___merXQ_1-0-1","actionsCenterSlotCentered":"magritte-actions-center-slot-centered___merXQ_1-0-1","title-container-wrapper":"magritte-title-container-wrapper___DQUcj_1-0-1","titleContainerWrapper":"magritte-title-container-wrapper___DQUcj_1-0-1","title-main-part":"magritte-title-main-part___npoHN_1-0-1","titleMainPart":"magritte-title-main-part___npoHN_1-0-1","centered":"magritte-centered___Y2mlP_1-0-1","title-left-slot":"magritte-title-left-slot___HTE7h_1-0-1","titleLeftSlot":"magritte-title-left-slot___HTE7h_1-0-1","title-container":"magritte-title-container___y9AIx_1-0-1","titleContainer":"magritte-title-container___y9AIx_1-0-1","subtitle-container":"magritte-subtitle-container___nVUBu_1-0-1","subtitleContainer":"magritte-subtitle-container___nVUBu_1-0-1","title-morph-item":"magritte-title-morph-item___t7Wf3_1-0-1","titleMorphItem":"magritte-title-morph-item___t7Wf3_1-0-1","title":"magritte-title___ZbLgP_1-0-1","pane-content":"magritte-pane-content___UVmC6_1-0-1","paneContent":"magritte-pane-content___UVmC6_1-0-1","pane-background":"magritte-pane-background___PDZAX_1-0-1","paneBackground":"magritte-pane-background___PDZAX_1-0-1","morph-item":"magritte-morph-item___8kF46_1-0-1","morphItem":"magritte-morph-item___8kF46_1-0-1","morph-item-top":"magritte-morph-item-top___WPEkn_1-0-1","morphItemTop":"magritte-morph-item-top___WPEkn_1-0-1","morph-item-bottom":"magritte-morph-item-bottom___zNbsF_1-0-1","morphItemBottom":"magritte-morph-item-bottom___zNbsF_1-0-1","morph-item-left":"magritte-morph-item-left___T6AMW_1-0-1","morphItemLeft":"magritte-morph-item-left___T6AMW_1-0-1","morph-item-right":"magritte-morph-item-right___EuT1E_1-0-1","morphItemRight":"magritte-morph-item-right___EuT1E_1-0-1","pane":"magritte-pane___f8eFC_1-0-1","start-state-container":"magritte-start-state-container___giBVb_1-0-1","startStateContainer":"magritte-start-state-container___giBVb_1-0-1","end-state-container":"magritte-end-state-container___uiW8Q_1-0-1","endStateContainer":"magritte-end-state-container___uiW8Q_1-0-1","content-container":"magritte-content-container___7s7vv_1-0-1","contentContainer":"magritte-content-container___7s7vv_1-0-1","next-pane":"magritte-next-pane___H2oxQ_1-0-1","nextPane":"magritte-next-pane___H2oxQ_1-0-1","nav-bar":"magritte-nav-bar___RRGe0_1-0-1","navBar":"magritte-nav-bar___RRGe0_1-0-1","nav-bar-overlay":"magritte-nav-bar-overlay___Mq5ZD_1-0-1","navBarOverlay":"magritte-nav-bar-overlay___Mq5ZD_1-0-1","nav-bar-overlay-wrapper":"magritte-nav-bar-overlay-wrapper___y1VpY_1-0-1","navBarOverlayWrapper":"magritte-nav-bar-overlay-wrapper___y1VpY_1-0-1","nav-bar-content-container":"magritte-nav-bar-content-container___H-WMO_1-0-1","navBarContentContainer":"magritte-nav-bar-content-container___H-WMO_1-0-1","nav-bar-panes-container":"magritte-nav-bar-panes-container___5ZDLa_1-0-1","navBarPanesContainer":"magritte-nav-bar-panes-container___5ZDLa_1-0-1","nav-bar-progressive-blur":"magritte-nav-bar-progressive-blur___qyeUV_1-0-1","navBarProgressiveBlur":"magritte-nav-bar-progressive-blur___qyeUV_1-0-1","nav-bar-stage":"magritte-nav-bar-stage___amDz7_1-0-1","navBarStage":"magritte-nav-bar-stage___amDz7_1-0-1","metrics-mode":"magritte-metrics-mode___h38aX_1-0-1","metricsMode":"magritte-metrics-mode___h38aX_1-0-1","layout-morph":"magritte-layout-morph___I3SPy_1-0-1","layoutMorph":"magritte-layout-morph___I3SPy_1-0-1","animation-stage-progress":"magritte-animation-stage-progress___5FthT_1-0-1","animationStageProgress":"magritte-animation-stage-progress___5FthT_1-0-1","layout-morph-start":"magritte-layout-morph-start___9-krP_1-0-1","layoutMorphStart":"magritte-layout-morph-start___9-krP_1-0-1","layout-morph-end":"magritte-layout-morph-end___LIg4d_1-0-1","layoutMorphEnd":"magritte-layout-morph-end___LIg4d_1-0-1","divider-container":"magritte-divider-container___-NdWi_1-0-1","dividerContainer":"magritte-divider-container___-NdWi_1-0-1"};
21
+
22
+ const NavBarContext = createContext(null);
23
+ const useNavBarContext = () => useContext(NavBarContext);
24
+ const NavBar = ({ children, transparent = false, startTriggerPosition = 'start', endTriggerPosition, progressiveBlur = false, overlay = false, snapScroll: scrollSnapping = true, showDivider = false, animationProgress, }) => {
25
+ const blurScaleY = useMotionValue(1);
26
+ const paneStoreRegistry = useInitOnce(() => new Set());
27
+ const prevFullHeight = useRef(0);
28
+ const rootRef = useRef(null);
29
+ const [scrollAdapter, scrollPosition] = useScrollAdapter(rootRef);
30
+ const [getMetrics, invalidateMetrics] = useNavBarMetrics(paneStoreRegistry, rootRef, scrollAdapter);
31
+ const [getAnimationRanges, invalidateAnimationRanges] = useAnimationRanges(paneStoreRegistry);
32
+ const [bindScrollToAnimation, getClosestStops, totalAnimationProgress] = useBindScrollToAnimationProgress(scrollPosition, getMetrics, getAnimationRanges, scrollAdapter, startTriggerPosition, endTriggerPosition);
33
+ const snapScroll = useSnapScroll(scrollPosition, totalAnimationProgress, scrollAdapter, getClosestStops, scrollSnapping);
34
+ // При получении размеров важно дождаться применения MotionValue к DOM, поэтому используем frame.render
35
+ const bindScrollToAnimationScheduled = useInitOnce(() => scheduleMicro(() => frame.render(bindScrollToAnimation)));
36
+ const dividerStyle = useDivider(scrollPosition, totalAnimationProgress, getMetrics, showDivider, overlay);
37
+ useResetFocus(rootRef, scrollPosition);
38
+ useSyncMotionValue(totalAnimationProgress, animationProgress);
39
+ const registerPaneStore = useInitOnce(() => {
40
+ const subscriptions = [];
41
+ const updateAnimationParams = () => {
42
+ subscriptions.length = 0;
43
+ invalidateMetrics();
44
+ invalidateAnimationRanges();
45
+ bindScrollToAnimationScheduled();
46
+ const navBarMetrics = getMetrics();
47
+ const fullPanesStartHeight = navBarMetrics.bottom - navBarMetrics.top;
48
+ let scroll = scrollAdapter.getScrollTop();
49
+ if (prevFullHeight.current !== null && scroll !== 0) {
50
+ const heightDelta = fullPanesStartHeight - prevFullHeight.current;
51
+ scroll += heightDelta;
52
+ requestAnimationFrame(() => {
53
+ scrollPosition.jump(scrollAdapter.getScrollTop() - 1);
54
+ scrollPosition.jump(scrollAdapter.getScrollTop());
55
+ });
56
+ }
57
+ const animationRanges = getAnimationRanges();
58
+ [...paneStoreRegistry.values()].forEach((paneStore) => {
59
+ const range = animationRanges.get(paneStore.get('id'));
60
+ if (!range) {
61
+ return;
62
+ }
63
+ const remapFn = remap(range[0] === 0 && range[1] === 0
64
+ ? [0, 1]
65
+ : [range[0] / navBarMetrics.heightDelta, range[1] / navBarMetrics.heightDelta], [0, 1]);
66
+ const motionValue = paneStore.get('motionValue');
67
+ motionValue.set(remapFn(totalAnimationProgress.get()));
68
+ subscriptions.push(totalAnimationProgress.on('change', (value) => motionValue.set(remapFn(value))));
69
+ });
70
+ subscriptions.push(totalAnimationProgress.on('change', (value) => blurScaleY.set(lerp(1, 1 - navBarMetrics.heightDelta / fullPanesStartHeight, value))));
71
+ prevFullHeight.current = fullPanesStartHeight;
72
+ };
73
+ // основной триггер запуска updateAnimationParams это изменения размеров, обработка которых происходит
74
+ // в очереди микрозадач, поэтому откладываем запуск функции до перехдоа к макрозадачам, чтобы сократить
75
+ // количество вызовов при массовых изменениях
76
+ const onChange = scheduleMacro(updateAnimationParams);
77
+ return (paneStore) => {
78
+ const unsubscribe = paneStore.onChange(['startHeight', 'endHeight', 'top', 'foldable'], onChange);
79
+ paneStoreRegistry.add(paneStore);
80
+ return () => {
81
+ paneStoreRegistry.delete(paneStore);
82
+ unsubscribe();
83
+ };
84
+ };
85
+ });
86
+ useLayoutEffect(() => {
87
+ bindScrollToAnimation();
88
+ snapScroll();
89
+ if (!rootRef.current || (typeof startTriggerPosition === 'string' && !endTriggerPosition)) {
90
+ return void 0;
91
+ }
92
+ return scrollAdapter.onResize(bindScrollToAnimationScheduled);
93
+ }, [
94
+ startTriggerPosition,
95
+ endTriggerPosition,
96
+ bindScrollToAnimation,
97
+ bindScrollToAnimationScheduled,
98
+ snapScroll,
99
+ scrollAdapter,
100
+ ]);
101
+ // Вкладываем панели друг в друга через проп nextPane
102
+ const items = React.Children.toArray(children);
103
+ const nested = items.reduceRight((acc, child) => {
104
+ return React.cloneElement(child, {
105
+ ...child.props,
106
+ nextPane: acc,
107
+ });
108
+ }, null);
109
+ return (jsx(Layer, { layer: "navigation-bar", children: jsx(MetricsProvider, { className: classNames(styles.navBar, {
110
+ [styles.navbarTransparentStart]: transparent === 'start',
111
+ [styles.navbarTransparentEnd]: transparent === 'end',
112
+ [styles.navbarNotTransparent]: !transparent,
113
+ [styles.navBarOverlay]: overlay,
114
+ }), ref: rootRef, measureClassName: styles.metricsMode, children: jsx("div", { className: styles.navBarOverlayWrapper, children: jsxs("div", { className: styles.navBarContentContainer, children: [jsx(motion.div, { style: { '--magritte-ui-navbar-animation-progress': totalAnimationProgress }, className: styles.navBarPanesContainer, children: jsx(NavBarContext.Provider, { value: registerPaneStore, children: nested }) }), progressiveBlur && (jsx(ProgressiveBlur, { className: styles.navBarProgressiveBlur, detail: 4, blurAmount: 3, blurHeight: 100, style: { scaleY: blurScaleY } })), jsx(motion.div, { className: styles.dividerContainer, style: dividerStyle, children: jsx(Divider, {}) })] }) }) }) }));
115
+ };
116
+
117
+ export { NavBar as N, styles as s, useNavBarContext as u };
118
+ //# sourceMappingURL=NavBar-CrD8CEWb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavBar-CrD8CEWb.js","sources":["../src/public/NavBar.tsx"],"sourcesContent":["import React, { createContext, type RefObject, useContext, useLayoutEffect, useRef, type FC } from 'react';\nimport classNames from 'classnames';\nimport { useMotionValue, motion, type MotionStyle, MotionValue, frame } from 'motion/react';\n\nimport { Divider, type ShowDivider } from '@hh.ru/magritte-ui-divider';\nimport { Layer } from '@hh.ru/magritte-ui-layer';\nimport { MetricsProvider } from '@hh.ru/magritte-ui-nav-bar/internal/MetricsProvider';\nimport { PaneStore } from '@hh.ru/magritte-ui-nav-bar/internal/PaneStore';\nimport { ProgressiveBlur } from '@hh.ru/magritte-ui-nav-bar/internal/ProgressiveBlur';\nimport { useAnimationRanges } from '@hh.ru/magritte-ui-nav-bar/internal/useAnimationRanges';\nimport { useBindScrollToAnimationProgress } from '@hh.ru/magritte-ui-nav-bar/internal/useBindScrollToAnimationProgress';\nimport { useDivider } from '@hh.ru/magritte-ui-nav-bar/internal/useDivider';\nimport { useNavBarMetrics } from '@hh.ru/magritte-ui-nav-bar/internal/useNavBarMetrics';\nimport { useResetFocus } from '@hh.ru/magritte-ui-nav-bar/internal/useResetFocus';\nimport { useScrollAdapter } from '@hh.ru/magritte-ui-nav-bar/internal/useScrollAdapter';\nimport { useSnapScroll } from '@hh.ru/magritte-ui-nav-bar/internal/useSnapScroll';\nimport { useSyncMotionValue } from '@hh.ru/magritte-ui-nav-bar/internal/useSyncMotionValue';\nimport { lerp, remap, scheduleMicro, scheduleMacro, useInitOnce } from '@hh.ru/magritte-ui-nav-bar/internal/utils';\nimport { type PaneElement, type InternalPaneProps } from '@hh.ru/magritte-ui-nav-bar/public/Pane';\n\nimport styles from './nav-bar.less';\n\ntype PaneStoreContextValue = ((store: PaneStore) => VoidFunction) | null;\nconst NavBarContext = createContext<PaneStoreContextValue>(null);\n\nexport const useNavBarContext = (): PaneStoreContextValue => useContext(NavBarContext);\n\nexport interface NavBarProps {\n /**\n * В качестве потомков могут передаваться только компоненты <Pane />\n */\n children: PaneElement | PaneElement[];\n /**\n * Управляет режимом прозрачности:\n * -- Прозрачность отключена (`false`)\n * -- Прозрачный всегда (`true`)\n * -- Прозрачный в начале анимации (`start`)\n * -- Прозрачный в конце анимации (`end`)\n */\n transparent?: 'start' | 'end' | boolean;\n /**\n * Управляет позицией триггера начала анимации\n */\n startTriggerPosition?: 'start' | 'full-area' | RefObject<HTMLElement>;\n /**\n * Управляет позицией триггера конца анимации. Если не передан вычисляется автоматически на основе изменения\n * высоты навбара в процессе анимации и позиции триггера начала анмиации.\n */\n endTriggerPosition?: RefObject<HTMLElement>;\n /**\n * Включает progressive blur. Эффект может не работать в некоторых вариантах верстки.\n */\n progressiveBlur?: boolean;\n /**\n * Включает режим когда NavBar не занимает место в лейауте и контент располагается под ним.\n */\n overlay?: boolean;\n /**\n * Управляет режимом автодоскролла. По умолчанию включен.\n */\n snapScroll?: boolean;\n /**\n * Управляет режимом отображения дивайдера:\n * - `false` дивайдер отключен\n * - `always` дивайдер отображается постоянно\n * - `with-scroll` дивайдер отображается только когда контент подскроллен под NavBar\n */\n showDivider?: ShowDivider;\n /**\n * Принимает MotionValue значение которого будет обновляться синхронно с анимацией всего NavBar.\n * Прогресс анимации представляется в виде числа 0..1\n * Предназначен для синхронизации внешних анимаций с анимациями NavBar.\n */\n animationProgress?: MotionValue<number>;\n}\n\nexport const NavBar: FC<NavBarProps> = ({\n children,\n transparent = false,\n startTriggerPosition = 'start',\n endTriggerPosition,\n progressiveBlur = false,\n overlay = false,\n snapScroll: scrollSnapping = true,\n showDivider = false,\n animationProgress,\n}) => {\n const blurScaleY = useMotionValue(1);\n const paneStoreRegistry = useInitOnce(() => new Set<PaneStore>());\n const prevFullHeight = useRef<null | number>(0);\n const rootRef = useRef<HTMLDivElement>(null);\n\n const [scrollAdapter, scrollPosition] = useScrollAdapter(rootRef);\n const [getMetrics, invalidateMetrics] = useNavBarMetrics(paneStoreRegistry, rootRef, scrollAdapter);\n const [getAnimationRanges, invalidateAnimationRanges] = useAnimationRanges(paneStoreRegistry);\n const [bindScrollToAnimation, getClosestStops, totalAnimationProgress] = useBindScrollToAnimationProgress(\n scrollPosition,\n getMetrics,\n getAnimationRanges,\n scrollAdapter,\n startTriggerPosition,\n endTriggerPosition\n );\n const snapScroll = useSnapScroll(\n scrollPosition,\n totalAnimationProgress,\n scrollAdapter,\n getClosestStops,\n scrollSnapping\n );\n\n // При получении размеров важно дождаться применения MotionValue к DOM, поэтому используем frame.render\n const bindScrollToAnimationScheduled = useInitOnce(() => scheduleMicro(() => frame.render(bindScrollToAnimation)));\n const dividerStyle = useDivider(scrollPosition, totalAnimationProgress, getMetrics, showDivider, overlay);\n useResetFocus(rootRef, scrollPosition);\n useSyncMotionValue(totalAnimationProgress, animationProgress);\n\n const registerPaneStore = useInitOnce(() => {\n const subscriptions: VoidFunction[] = [];\n\n const updateAnimationParams = () => {\n subscriptions.length = 0;\n invalidateMetrics();\n invalidateAnimationRanges();\n bindScrollToAnimationScheduled();\n const navBarMetrics = getMetrics();\n const fullPanesStartHeight = navBarMetrics.bottom - navBarMetrics.top;\n\n let scroll = scrollAdapter.getScrollTop();\n if (prevFullHeight.current !== null && scroll !== 0) {\n const heightDelta = fullPanesStartHeight - prevFullHeight.current;\n scroll += heightDelta;\n\n requestAnimationFrame(() => {\n scrollPosition.jump(scrollAdapter.getScrollTop() - 1);\n scrollPosition.jump(scrollAdapter.getScrollTop());\n });\n }\n\n const animationRanges = getAnimationRanges();\n [...paneStoreRegistry.values()].forEach((paneStore) => {\n const range = animationRanges.get(paneStore.get('id'));\n if (!range) {\n return;\n }\n const remapFn = remap(\n range[0] === 0 && range[1] === 0\n ? [0, 1]\n : [range[0] / navBarMetrics.heightDelta, range[1] / navBarMetrics.heightDelta],\n [0, 1]\n );\n const motionValue = paneStore.get('motionValue');\n motionValue.set(remapFn(totalAnimationProgress.get()));\n subscriptions.push(totalAnimationProgress.on('change', (value) => motionValue.set(remapFn(value))));\n });\n\n subscriptions.push(\n totalAnimationProgress.on('change', (value) =>\n blurScaleY.set(lerp(1, 1 - navBarMetrics.heightDelta / fullPanesStartHeight, value))\n )\n );\n prevFullHeight.current = fullPanesStartHeight;\n };\n\n // основной триггер запуска updateAnimationParams это изменения размеров, обработка которых происходит\n // в очереди микрозадач, поэтому откладываем запуск функции до перехдоа к макрозадачам, чтобы сократить\n // количество вызовов при массовых изменениях\n const onChange = scheduleMacro(updateAnimationParams);\n\n return (paneStore: PaneStore) => {\n const unsubscribe = paneStore.onChange(['startHeight', 'endHeight', 'top', 'foldable'], onChange);\n paneStoreRegistry.add(paneStore);\n return () => {\n paneStoreRegistry.delete(paneStore);\n unsubscribe();\n };\n };\n });\n\n useLayoutEffect(() => {\n bindScrollToAnimation();\n snapScroll();\n if (!rootRef.current || (typeof startTriggerPosition === 'string' && !endTriggerPosition)) {\n return void 0;\n }\n return scrollAdapter.onResize(bindScrollToAnimationScheduled);\n }, [\n startTriggerPosition,\n endTriggerPosition,\n bindScrollToAnimation,\n bindScrollToAnimationScheduled,\n snapScroll,\n scrollAdapter,\n ]);\n\n // Вкладываем панели друг в друга через проп nextPane\n const items = React.Children.toArray(children) as PaneElement[];\n\n const nested = items.reduceRight<PaneElement | null>((acc, child) => {\n return React.cloneElement<InternalPaneProps>(child, {\n ...child.props,\n nextPane: acc,\n }) as PaneElement;\n }, null);\n\n return (\n <Layer layer=\"navigation-bar\">\n <MetricsProvider\n className={classNames(styles.navBar, {\n [styles.navbarTransparentStart]: transparent === 'start',\n [styles.navbarTransparentEnd]: transparent === 'end',\n [styles.navbarNotTransparent]: !transparent,\n [styles.navBarOverlay]: overlay,\n })}\n ref={rootRef}\n measureClassName={styles.metricsMode}\n >\n <div className={styles.navBarOverlayWrapper}>\n <div className={styles.navBarContentContainer}>\n <motion.div\n style={{ '--magritte-ui-navbar-animation-progress': totalAnimationProgress } as MotionStyle}\n className={styles.navBarPanesContainer}\n >\n <NavBarContext.Provider value={registerPaneStore}>{nested}</NavBarContext.Provider>\n </motion.div>\n {progressiveBlur && (\n <ProgressiveBlur\n className={styles.navBarProgressiveBlur}\n detail={4}\n blurAmount={3}\n blurHeight={100}\n style={{ scaleY: blurScaleY }}\n />\n )}\n <motion.div className={styles.dividerContainer} style={dividerStyle}>\n <Divider />\n </motion.div>\n </div>\n </div>\n </MetricsProvider>\n </Layer>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
package/index.css ADDED
@@ -0,0 +1,289 @@
1
+ :root{
2
+ --magritte-color-background-body-v23-2-2:#ffffff;
3
+ }
4
+
5
+ .magritte-night-theme{
6
+ --magritte-color-background-body-v23-2-2:#000000;
7
+ }
8
+ .magritte-actions-container___CBgYW_1-0-1{
9
+ display:flex;
10
+ flex-direction:row;
11
+ gap:12px;
12
+ }
13
+ .magritte-actions-no-children___rgJUl_1-0-1{
14
+ justify-content:space-between;
15
+ }
16
+ .magritte-actions-left-slot___DNOj0_1-0-1,
17
+ .magritte-actions-right-slot___aodtj_1-0-1{
18
+ display:grid;
19
+ flex:0 0 auto;
20
+ }
21
+ .magritte-navbar-transparent-end___6KqLR_1-0-1 .magritte-actions-start-stage___MJ67a_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > .magritte-actions-icon-morph___-nNgW_1-0-1:first-child,
22
+ .magritte-navbar-transparent-start___wysv0_1-0-1 .magritte-actions-end-stage___qHtTV_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > .magritte-actions-icon-morph___-nNgW_1-0-1:first-child,
23
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-start-stage___MJ67a_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > .magritte-actions-icon-morph___-nNgW_1-0-1:first-child,
24
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-end-stage___qHtTV_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > .magritte-actions-icon-morph___-nNgW_1-0-1:first-child,
25
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-only-stage___cg10A_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > .magritte-actions-icon-morph___-nNgW_1-0-1:first-child{
26
+ margin-left:-8px;
27
+ }
28
+ .magritte-navbar-transparent-end___6KqLR_1-0-1 .magritte-actions-start-stage___MJ67a_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > .magritte-actions-icon-morph___-nNgW_1-0-1:last-child,
29
+ .magritte-navbar-transparent-start___wysv0_1-0-1 .magritte-actions-end-stage___qHtTV_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > .magritte-actions-icon-morph___-nNgW_1-0-1:last-child,
30
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-start-stage___MJ67a_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > .magritte-actions-icon-morph___-nNgW_1-0-1:last-child,
31
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-end-stage___qHtTV_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > .magritte-actions-icon-morph___-nNgW_1-0-1:last-child,
32
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-only-stage___cg10A_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > .magritte-actions-icon-morph___-nNgW_1-0-1:last-child{
33
+ margin-right:-8px;
34
+ }
35
+ .magritte-navbar-transparent-end___6KqLR_1-0-1 .magritte-actions-start-stage___MJ67a_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content-clone___jDxVm_1-0-1 > :last-child,
36
+ .magritte-navbar-transparent-start___wysv0_1-0-1 .magritte-actions-end-stage___qHtTV_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content-clone___jDxVm_1-0-1 > :last-child,
37
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-start-stage___MJ67a_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content-clone___jDxVm_1-0-1 > :last-child,
38
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-end-stage___qHtTV_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content-clone___jDxVm_1-0-1 > :last-child,
39
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-only-stage___cg10A_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content-clone___jDxVm_1-0-1 > :last-child,
40
+ .magritte-navbar-transparent-end___6KqLR_1-0-1 .magritte-actions-start-stage___MJ67a_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > :last-child:not(.magritte-actions-icon-morph___-nNgW_1-0-1),
41
+ .magritte-navbar-transparent-start___wysv0_1-0-1 .magritte-actions-end-stage___qHtTV_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > :last-child:not(.magritte-actions-icon-morph___-nNgW_1-0-1),
42
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-start-stage___MJ67a_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > :last-child:not(.magritte-actions-icon-morph___-nNgW_1-0-1),
43
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-end-stage___qHtTV_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > :last-child:not(.magritte-actions-icon-morph___-nNgW_1-0-1),
44
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-only-stage___cg10A_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > :last-child:not(.magritte-actions-icon-morph___-nNgW_1-0-1){
45
+ --magritte-ui-icon-margin-right-override:-8px;
46
+ }
47
+ .magritte-navbar-transparent-end___6KqLR_1-0-1 .magritte-actions-start-stage___MJ67a_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content-clone___jDxVm_1-0-1 > :first-child,
48
+ .magritte-navbar-transparent-start___wysv0_1-0-1 .magritte-actions-end-stage___qHtTV_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content-clone___jDxVm_1-0-1 > :first-child,
49
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-start-stage___MJ67a_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content-clone___jDxVm_1-0-1 > :first-child,
50
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-end-stage___qHtTV_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content-clone___jDxVm_1-0-1 > :first-child,
51
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-only-stage___cg10A_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content-clone___jDxVm_1-0-1 > :first-child,
52
+ .magritte-navbar-transparent-end___6KqLR_1-0-1 .magritte-actions-start-stage___MJ67a_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > :first-child:not(.magritte-actions-icon-morph___-nNgW_1-0-1),
53
+ .magritte-navbar-transparent-start___wysv0_1-0-1 .magritte-actions-end-stage___qHtTV_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > :first-child:not(.magritte-actions-icon-morph___-nNgW_1-0-1),
54
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-start-stage___MJ67a_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > :first-child:not(.magritte-actions-icon-morph___-nNgW_1-0-1),
55
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-end-stage___qHtTV_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > :first-child:not(.magritte-actions-icon-morph___-nNgW_1-0-1),
56
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-actions-only-stage___cg10A_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > :first-child:not(.magritte-actions-icon-morph___-nNgW_1-0-1){
57
+ --magritte-ui-icon-margin-left-override:-8px;
58
+ }
59
+ .magritte-navbar-transparent-start___wysv0_1-0-1 .magritte-actions-only-stage___cg10A_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > :first-child,
60
+ .magritte-navbar-transparent-start___wysv0_1-0-1 .magritte-actions-only-stage___cg10A_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content-clone___jDxVm_1-0-1 > :first-child{
61
+ --magritte-ui-icon-margin-left-override:calc(-8px * var(--magritte-ui-navbar-animation-progress));
62
+ }
63
+ .magritte-navbar-transparent-start___wysv0_1-0-1 .magritte-actions-only-stage___cg10A_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > :last-child,
64
+ .magritte-navbar-transparent-start___wysv0_1-0-1 .magritte-actions-only-stage___cg10A_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content-clone___jDxVm_1-0-1 > :last-child{
65
+ --magritte-ui-icon-margin-right-override:calc(-8px * var(--magritte-ui-navbar-animation-progress));
66
+ }
67
+ .magritte-navbar-transparent-end___6KqLR_1-0-1 .magritte-actions-only-stage___cg10A_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > :first-child,
68
+ .magritte-navbar-transparent-end___6KqLR_1-0-1 .magritte-actions-only-stage___cg10A_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content-clone___jDxVm_1-0-1 > :first-child{
69
+ --magritte-ui-icon-margin-left-override:calc(-8px * (1 - var(--magritte-ui-navbar-animation-progress)));
70
+ }
71
+ .magritte-navbar-transparent-end___6KqLR_1-0-1 .magritte-actions-only-stage___cg10A_1-0-1 .magritte-actions-right-slot___aodtj_1-0-1 .magritte-actions-side-slot-content___TlHrX_1-0-1 > :last-child,
72
+ .magritte-navbar-transparent-end___6KqLR_1-0-1 .magritte-actions-only-stage___cg10A_1-0-1 .magritte-actions-left-slot___DNOj0_1-0-1 .magritte-actions-side-slot-content-clone___jDxVm_1-0-1 > :last-child{
73
+ --magritte-ui-icon-margin-right-override:calc(-8px * (1 - var(--magritte-ui-navbar-animation-progress)));
74
+ }
75
+ .magritte-actions-center-slot___hLAy6_1-0-1{
76
+ display:flex;
77
+ flex:1 1 auto;
78
+ min-width:0;
79
+ }
80
+ .magritte-actions-center-slot___hLAy6_1-0-1.magritte-actions-center-slot-centered___merXQ_1-0-1{
81
+ justify-content:center;
82
+ }
83
+ .magritte-actions-side-slot-content___TlHrX_1-0-1,
84
+ .magritte-actions-side-slot-content-clone___jDxVm_1-0-1{
85
+ grid-area:1 / 1;
86
+ display:flex;
87
+ align-items:center;
88
+ gap:4px;
89
+ }
90
+ .magritte-actions-side-slot-content-clone___jDxVm_1-0-1{
91
+ visibility:hidden;
92
+ z-index:0;
93
+ pointer-events:none;
94
+ user-select:none;
95
+ contain:style layout;
96
+ }
97
+ .magritte-title-container-wrapper___DQUcj_1-0-1{
98
+ display:flex;
99
+ flex-direction:row;
100
+ align-items:center;
101
+ flex:0 1 auto;
102
+ min-width:0;
103
+ gap:12px;
104
+ }
105
+ .magritte-title-main-part___npoHN_1-0-1{
106
+ display:flex;
107
+ flex-direction:column;
108
+ flex:0 1 auto;
109
+ min-width:0;
110
+ }
111
+ .magritte-title-main-part___npoHN_1-0-1.magritte-centered___Y2mlP_1-0-1{
112
+ align-items:center;
113
+ }
114
+ .magritte-title-left-slot___HTE7h_1-0-1{
115
+ display:flex;
116
+ align-items:center;
117
+ flex:0 0 auto;
118
+ }
119
+ .magritte-title-container___y9AIx_1-0-1{
120
+ display:flex;
121
+ flex-direction:row;
122
+ align-items:center;
123
+ gap:6px;
124
+ }
125
+ .magritte-subtitle-container___nVUBu_1-0-1{
126
+ display:flex;
127
+ }
128
+ .magritte-title-morph-item___t7Wf3_1-0-1{
129
+ display:flex;
130
+ min-width:0;
131
+ }
132
+ .magritte-title___ZbLgP_1-0-1{
133
+ display:flex;
134
+ flex:0 1 auto;
135
+ min-width:0;
136
+ }
137
+ .magritte-pane-content___UVmC6_1-0-1{
138
+ position:relative;
139
+ pointer-events:none;
140
+ z-index:2;
141
+ }
142
+ .magritte-pane-background___PDZAX_1-0-1{
143
+ position:absolute;
144
+ background-color:var(--magritte-ui-nav-bar-background-color-override, var(--magritte-color-background-body-v23-2-2));
145
+ opacity:0;
146
+ inset:0;
147
+ z-index:-1;
148
+ transform-origin:0 0;
149
+ }
150
+ .magritte-navbar-transparent-start___wysv0_1-0-1 .magritte-pane-background___PDZAX_1-0-1{
151
+ opacity:calc(var(--magritte-ui-navbar-animation-progress) * 0.95);
152
+ }
153
+ .magritte-navbar-transparent-end___6KqLR_1-0-1 .magritte-pane-background___PDZAX_1-0-1{
154
+ opacity:calc((1 - var(--magritte-ui-navbar-animation-progress)) * 0.95);
155
+ }
156
+ .magritte-navbar-not-transparent___5KZNp_1-0-1 .magritte-pane-background___PDZAX_1-0-1{
157
+ opacity:0.95;
158
+ }
159
+ .magritte-morph-item___8kF46_1-0-1{
160
+ line-height:0;
161
+ transform-origin:var(--magritte-ui-morph-item-transform-origin-x, center) var(--magritte-ui-morph-item-transform-origin-y, center);
162
+ }
163
+ .magritte-morph-item-top___WPEkn_1-0-1{
164
+ --magritte-ui-morph-item-transform-origin-y:top;
165
+ }
166
+ .magritte-morph-item-bottom___zNbsF_1-0-1{
167
+ --magritte-ui-morph-item-transform-origin-y:bottom;
168
+ }
169
+ .magritte-morph-item-left___T6AMW_1-0-1{
170
+ --magritte-ui-morph-item-transform-origin-x:left;
171
+ }
172
+ .magritte-morph-item-right___EuT1E_1-0-1{
173
+ --magritte-ui-morph-item-transform-origin-x:right;
174
+ }
175
+ .magritte-pane___f8eFC_1-0-1{
176
+ position:relative;
177
+ overflow:hidden;
178
+ pointer-events:none;
179
+ }
180
+ .magritte-start-state-container___giBVb_1-0-1{
181
+ position:relative;
182
+ z-index:1;
183
+ box-sizing:border-box;
184
+ pointer-events:auto;
185
+ }
186
+ .magritte-end-state-container___uiW8Q_1-0-1{
187
+ position:absolute;
188
+ z-index:0;
189
+ top:0;
190
+ width:100%;
191
+ box-sizing:border-box;
192
+ pointer-events:none;
193
+ opacity:0;
194
+ }
195
+ .magritte-content-container___7s7vv_1-0-1{
196
+ box-sizing:border-box;
197
+ }
198
+ .magritte-next-pane___H2oxQ_1-0-1{
199
+ position:relative;
200
+ }
201
+ .magritte-nav-bar___RRGe0_1-0-1{
202
+ top:0;
203
+ position:sticky;
204
+ pointer-events:none;
205
+ overflow-anchor:none;
206
+ z-index:10;
207
+ }
208
+ .magritte-nav-bar-overlay___Mq5ZD_1-0-1 .magritte-nav-bar-overlay-wrapper___y1VpY_1-0-1{
209
+ position:absolute;
210
+ inset:0;
211
+ }
212
+ .magritte-nav-bar-content-container___H-WMO_1-0-1{
213
+ display:grid;
214
+ position:relative;
215
+ }
216
+ .magritte-nav-bar-panes-container___5ZDLa_1-0-1{
217
+ position:relative;
218
+ z-index:1;
219
+ grid-area:1 / 1;
220
+ min-width:0;
221
+ }
222
+ .magritte-nav-bar-progressive-blur___qyeUV_1-0-1{
223
+ position:relative;
224
+ z-index:0;
225
+ transform-origin:0 0;
226
+ grid-area:1 / 1;
227
+ min-width:0;
228
+ }
229
+ .magritte-nav-bar-content-container___H-WMO_1-0-1 :not(.magritte-next-pane___H2oxQ_1-0-1) .magritte-nav-bar-stage___amDz7_1-0-1,
230
+ .magritte-nav-bar-content-container___H-WMO_1-0-1 :not(.magritte-next-pane___H2oxQ_1-0-1) .nav-bar-layout-animation-stage-start,
231
+ .magritte-nav-bar-content-container___H-WMO_1-0-1 :not(.magritte-next-pane___H2oxQ_1-0-1) .nav-bar-layout-animation-stage-end{
232
+ padding-top:calc(8px + var(--magritte-ui-nav-bar-padding-top-override, 0px));
233
+ }
234
+ .magritte-nav-bar-stage___amDz7_1-0-1{
235
+ padding:8px var(--magritte-ui-nav-bar-stage-horizontal-padding-override, 16px);
236
+ }
237
+ .magritte-metrics-mode___h38aX_1-0-1 .magritte-morph-item___8kF46_1-0-1,
238
+ .magritte-metrics-mode___h38aX_1-0-1 .magritte-pane___f8eFC_1-0-1,
239
+ .magritte-metrics-mode___h38aX_1-0-1 .magritte-next-pane___H2oxQ_1-0-1{
240
+ transform:none !important;
241
+ }
242
+ .nav-bar-layout-animation-stage-end,
243
+ .nav-bar-layout-animation-stage-start{
244
+ padding:8px var(--magritte-ui-nav-bar-stage-horizontal-padding-override, 16px);
245
+ position:static !important;
246
+ width:auto !important;
247
+ height:auto !important;
248
+ transform:none !important;
249
+ }
250
+ .nav-bar-layout-animation-stage-end .magritte-layout-morph___I3SPy_1-0-1,
251
+ .nav-bar-layout-animation-stage-start .magritte-layout-morph___I3SPy_1-0-1{
252
+ position:static !important;
253
+ width:auto !important;
254
+ height:auto !important;
255
+ transform:none !important;
256
+ }
257
+ .magritte-layout-morph___I3SPy_1-0-1{
258
+ display:block;
259
+ position:absolute;
260
+ transform-origin:var(--magritte-ui-morph-item-transform-origin-x, center) var(--magritte-ui-morph-item-transform-origin-y, center);
261
+ z-index:3;
262
+ }
263
+ .magritte-animation-stage-progress___5FthT_1-0-1 .magritte-layout-morph___I3SPy_1-0-1 > *{
264
+ margin:0 !important;
265
+ }
266
+ .magritte-layout-morph-start___9-krP_1-0-1{
267
+ z-index:2;
268
+ }
269
+ .magritte-layout-morph-end___LIg4d_1-0-1{
270
+ z-index:1;
271
+ }
272
+ .nav-bar-layout-animation-stage-start .magritte-layout-morph___I3SPy_1-0-1{
273
+ display:contents;
274
+ }
275
+ .nav-bar-layout-animation-stage-start .magritte-layout-morph-end___LIg4d_1-0-1{
276
+ display:none;
277
+ }
278
+ .nav-bar-layout-animation-stage-end .magritte-layout-morph___I3SPy_1-0-1{
279
+ display:contents;
280
+ }
281
+ .nav-bar-layout-animation-stage-end .magritte-layout-morph-start___9-krP_1-0-1{
282
+ display:none;
283
+ }
284
+ .magritte-divider-container___-NdWi_1-0-1{
285
+ position:absolute;
286
+ width:100%;
287
+ bottom:0;
288
+ z-index:1;
289
+ }
package/index.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export { Actions, type ActionsProps } from '@hh.ru/magritte-ui-nav-bar/public/Actions';
2
+ export { NavBar, type NavBarProps } from '@hh.ru/magritte-ui-nav-bar/public/NavBar';
3
+ export { ExternalPane as Pane, type ExternalPaneProps as PaneProps } from '@hh.ru/magritte-ui-nav-bar/public/Pane';
4
+ export { ExternalStage as Stage } from '@hh.ru/magritte-ui-nav-bar/public/Stage';
5
+ export { Morph, type MorphProps } from '@hh.ru/magritte-ui-nav-bar/public/Morph';
6
+ export { TitleContainer, type TitleContainerProps } from '@hh.ru/magritte-ui-nav-bar/public/TitleContainer';
7
+ export { LayoutStage } from '@hh.ru/magritte-ui-nav-bar/public/LayoutStage';
8
+ export { LayoutMorph, type LayoutMorphProps } from '@hh.ru/magritte-ui-nav-bar/public/LayoutMorph';
9
+ export { EnvironmentFingerprintNode, type EnvironmentFingerprintNodeProps, } from '@hh.ru/magritte-ui-nav-bar/public/EnvironmentFingerprintNode';
package/index.js ADDED
@@ -0,0 +1,35 @@
1
+ import './index.css';
2
+ export { Actions } from './public/Actions.js';
3
+ export { N as NavBar } from './NavBar-CrD8CEWb.js';
4
+ export { ExternalPane as Pane } from './public/Pane.js';
5
+ export { ExternalStage as Stage } from './public/Stage.js';
6
+ export { Morph } from './public/Morph.js';
7
+ export { TitleContainer } from './public/TitleContainer.js';
8
+ export { LayoutStage } from './public/LayoutStage.js';
9
+ export { LayoutMorph } from './public/LayoutMorph.js';
10
+ export { EnvironmentFingerprintNode } from './public/EnvironmentFingerprintNode.js';
11
+ import 'react/jsx-runtime';
12
+ import 'react';
13
+ import 'classnames';
14
+ import '@hh.ru/magritte-ui-icon';
15
+ import 'motion/react';
16
+ import '@hh.ru/magritte-ui-divider';
17
+ import '@hh.ru/magritte-ui-layer';
18
+ import './internal/MetricsProvider.js';
19
+ import './internal/utils.js';
20
+ import './internal/ProgressiveBlur.js';
21
+ import './internal/useAnimationRanges.js';
22
+ import './internal/useBindScrollToAnimationProgress.js';
23
+ import './internal/useDivider.js';
24
+ import './internal/useNavBarMetrics.js';
25
+ import './internal/useResetFocus.js';
26
+ import './internal/useScrollAdapter.js';
27
+ import '@hh.ru/magritte-internal-custom-scroll';
28
+ import './internal/useSnapScroll.js';
29
+ import './internal/useSyncMotionValue.js';
30
+ import './internal/MorphStore.js';
31
+ import './internal/KeyedSubscriptions.js';
32
+ import './internal/PaneStore.js';
33
+ import 'motion';
34
+ import '@hh.ru/magritte-common-use-when-font-loaded';
35
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,17 @@
1
+ import { ForwardRefExoticComponent } from 'react';
2
+ export { type ActionsProps } from '@hh.ru/magritte-ui-nav-bar/public/Actions';
3
+ export { type NavBarProps } from '@hh.ru/magritte-ui-nav-bar/public/NavBar';
4
+ export { type ExternalPaneProps as PaneProps } from '@hh.ru/magritte-ui-nav-bar/public/Pane';
5
+ export { type MorphProps } from '@hh.ru/magritte-ui-nav-bar/public/Morph';
6
+ export { type TitleContainerProps } from '@hh.ru/magritte-ui-nav-bar/public/TitleContainer';
7
+ export { type LayoutMorphProps } from '@hh.ru/magritte-ui-nav-bar/public/LayoutMorph';
8
+ export { type EnvironmentFingerprintNodeProps } from '@hh.ru/magritte-ui-nav-bar/public/EnvironmentFingerprintNode';
9
+ export declare const NavBar: ForwardRefExoticComponent<Record<string, unknown>>;
10
+ export declare const Actions: ForwardRefExoticComponent<Record<string, unknown>>;
11
+ export declare const TitleContainer: ForwardRefExoticComponent<Record<string, unknown>>;
12
+ export declare const Pane: ForwardRefExoticComponent<Record<string, unknown>>;
13
+ export declare const Morph: ForwardRefExoticComponent<Record<string, unknown>>;
14
+ export declare const Stage: ForwardRefExoticComponent<Record<string, unknown>>;
15
+ export declare const LayoutMorph: ForwardRefExoticComponent<Record<string, unknown>>;
16
+ export declare const LayoutStage: ForwardRefExoticComponent<Record<string, unknown>>;
17
+ export declare const EnvironmentFingerprintNode: ForwardRefExoticComponent<Record<string, unknown>>;
package/index.mock.js ADDED
@@ -0,0 +1,47 @@
1
+ import './index.css';
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import { forwardRef } from 'react';
4
+
5
+ function enhance(mockComponent, staticProps) {
6
+ // удаляем внутренний свойства реакта, чтобы не перезаписать ими mockComponent
7
+ delete staticProps.type;
8
+ delete staticProps.$$typeof;
9
+ delete staticProps.render;
10
+ for (const prop in staticProps) {
11
+ mockComponent[prop] = staticProps[prop];
12
+ }
13
+ }
14
+ const MockComponent = ({ style, ...props }) => (
15
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
16
+ // @ts-ignore
17
+ // eslint-disable-next-line react/jsx-no-undef
18
+ jsx("magritte-component-mock", { "style-data": style, ...props }));
19
+ /**
20
+ * Возвращает mock React компонента
21
+ */
22
+ const mockComponent = (componentName, staticProps = {}, { withChildren, innerDependence, WrapperComponent } = {}) => {
23
+ const mockWrapper = forwardRef(({ children, ...props }, ref) => {
24
+ const mock = (
25
+ // eslint-disable-next-line react/jsx-no-undef
26
+ jsxs(MockComponent, { ...props, _component: componentName, children: [innerDependence ? innerDependence(props, ref) : null, withChildren ? children : null] }));
27
+ return WrapperComponent ? jsx(WrapperComponent, { ...props, children: mock }) : mock;
28
+ });
29
+ staticProps && enhance(mockWrapper, staticProps);
30
+ mockWrapper.displayName = 'magritte-ref';
31
+ return mockWrapper;
32
+ };
33
+
34
+ const NavBar = mockComponent('NavBar', undefined, {
35
+ withChildren: true,
36
+ });
37
+ const Actions = mockComponent('Action', undefined, { withChildren: true });
38
+ const TitleContainer = mockComponent('TitleContainer', undefined, { withChildren: true });
39
+ const Pane = mockComponent('Pane', undefined, { withChildren: true });
40
+ const Morph = mockComponent('Morph', undefined, { withChildren: true });
41
+ const Stage = mockComponent('Stage', undefined, { withChildren: true });
42
+ const LayoutMorph = mockComponent('LayoutMorph', undefined, { withChildren: true });
43
+ const LayoutStage = mockComponent('LayoutStage', undefined, { withChildren: true });
44
+ const EnvironmentFingerprintNode = mockComponent('EnvironmentFingerprintNode', undefined, { withChildren: true });
45
+
46
+ export { Actions, EnvironmentFingerprintNode, LayoutMorph, LayoutStage, Morph, NavBar, Pane, Stage, TitleContainer };
47
+ //# sourceMappingURL=index.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mock.js","sources":["../../mock-component/lib/setupMockComponent.js","../src/index.mock.ts"],"sourcesContent":["import { jsxs, jsx } from 'react/jsx-runtime';\nimport { forwardRef } from 'react';\n\nfunction enhance(mockComponent, staticProps) {\n // удаляем внутренний свойства реакта, чтобы не перезаписать ими mockComponent\n delete staticProps.type;\n delete staticProps.$$typeof;\n delete staticProps.render;\n for (const prop in staticProps) {\n mockComponent[prop] = staticProps[prop];\n }\n}\nconst MockComponent = ({ style, ...props }) => (\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\n// eslint-disable-next-line react/jsx-no-undef\njsx(\"magritte-component-mock\", { \"style-data\": style, ...props }));\nconst MockComponentRenderProp = ({ style, ...props }) => (\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\n// eslint-disable-next-line react/jsx-no-undef\njsx(\"magritte-component-mock-render-prop\", { \"style-data\": style, ...props }));\n/**\n * Возвращает mock React компонента\n */\nconst mockComponent = (componentName, staticProps = {}, { withChildren, innerDependence, WrapperComponent } = {}) => {\n const mockWrapper = forwardRef(({ children, ...props }, ref) => {\n const mock = (\n // eslint-disable-next-line react/jsx-no-undef\n jsxs(MockComponent, { ...props, _component: componentName, children: [innerDependence ? innerDependence(props, ref) : null, withChildren ? children : null] }));\n return WrapperComponent ? jsx(WrapperComponent, { ...props, children: mock }) : mock;\n });\n staticProps && enhance(mockWrapper, staticProps);\n mockWrapper.displayName = 'magritte-ref';\n return mockWrapper;\n};\n/**\n * Возвращает mock React компонента, который рендерит переданный в него пропс render\n *\n * @param {String} componentName наименование компонента\n * @param {Object} [staticProps] объект со свойствами, которыми необходимо усилить mock\n * @param {Object} [options] параметры мока\n * @param {boolean} [options.withChildren] флаг отвечает за рендеринг children компонента\n * @param {React.Component} [options.innerDependence] Реакт компонент, который рендерится внутри мока.\n * Необходим, когда mock компоненту требуется иметь\n * дополнительные элементы\n */\nconst mockComponentRenderProp = (componentName, staticProps, { withChildren, innerDependence, renderArguments } = { renderArguments: [] }) => {\n const mockWrapper = ({ render, children, ...props }) => (jsxs(MockComponentRenderProp, { ...props, _component: componentName, children: [innerDependence ? innerDependence(props) : null, withChildren ? children : null, render?.(...(renderArguments || []))] }));\n staticProps && enhance(mockWrapper, staticProps);\n mockWrapper.displayName = 'magritte-component-mock-render-prop';\n return mockWrapper;\n};\n\nexport { mockComponent, mockComponentRenderProp };\n//# sourceMappingURL=setupMockComponent.js.map\n","import { ForwardRefExoticComponent } from 'react';\n\nimport { mockComponent } from '@hh.ru/magritte-ui-mock-component';\n\nexport { type ActionsProps } from '@hh.ru/magritte-ui-nav-bar/public/Actions';\nexport { type NavBarProps } from '@hh.ru/magritte-ui-nav-bar/public/NavBar';\nexport { type ExternalPaneProps as PaneProps } from '@hh.ru/magritte-ui-nav-bar/public/Pane';\nexport { type MorphProps } from '@hh.ru/magritte-ui-nav-bar/public/Morph';\nexport { type TitleContainerProps } from '@hh.ru/magritte-ui-nav-bar/public/TitleContainer';\nexport { type LayoutMorphProps } from '@hh.ru/magritte-ui-nav-bar/public/LayoutMorph';\nexport { type EnvironmentFingerprintNodeProps } from '@hh.ru/magritte-ui-nav-bar/public/EnvironmentFingerprintNode';\n\nexport const NavBar: ForwardRefExoticComponent<Record<string, unknown>> = mockComponent('NavBar', undefined, {\n withChildren: true,\n});\n\nexport const Actions = mockComponent('Action', undefined, { withChildren: true });\nexport const TitleContainer = mockComponent('TitleContainer', undefined, { withChildren: true });\nexport const Pane = mockComponent('Pane', undefined, { withChildren: true });\nexport const Morph = mockComponent('Morph', undefined, { withChildren: true });\nexport const Stage = mockComponent('Stage', undefined, { withChildren: true });\nexport const LayoutMorph = mockComponent('LayoutMorph', undefined, { withChildren: true });\nexport const LayoutStage = mockComponent('LayoutStage', undefined, { withChildren: true });\nexport const EnvironmentFingerprintNode: ForwardRefExoticComponent<Record<string, unknown>> = mockComponent(\n 'EnvironmentFingerprintNode',\n undefined,\n { withChildren: true }\n);\n"],"names":[],"mappings":";;;AAGA,SAAS,OAAO,CAAC,aAAa,EAAE,WAAW,EAAE;AAC7C;AACA,IAAI,OAAO,WAAW,CAAC,IAAI,CAAC;AAC5B,IAAI,OAAO,WAAW,CAAC,QAAQ,CAAC;AAChC,IAAI,OAAO,WAAW,CAAC,MAAM,CAAC;AAC9B,IAAI,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;AACpC,QAAQ,aAAa,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AAChD,KAAK;AACL,CAAC;AACD,MAAM,aAAa,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE;AAC1C;AACA;AACA;AACA,GAAG,CAAC,yBAAyB,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;AAMnE;AACA;AACA;AACA,MAAM,aAAa,GAAG,CAAC,aAAa,EAAE,WAAW,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,GAAG,EAAE,KAAK;AACrH,IAAI,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK;AACpE,QAAQ,MAAM,IAAI;AAClB;AACA,QAAQ,IAAI,CAAC,aAAa,EAAE,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,eAAe,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,YAAY,GAAG,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACxK,QAAQ,OAAO,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,EAAE,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;AAC7F,KAAK,CAAC,CAAC;AACP,IAAI,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AACrD,IAAI,WAAW,CAAC,WAAW,GAAG,cAAc,CAAC;AAC7C,IAAI,OAAO,WAAW,CAAC;AACvB,CAAC;;MCvBY,MAAM,GAAuD,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE;AACzG,IAAA,YAAY,EAAE,IAAI;AACrB,CAAA,EAAE;AAEU,MAAA,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE;AACrE,MAAA,cAAc,GAAG,aAAa,CAAC,gBAAgB,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE;AACpF,MAAA,IAAI,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE;AAChE,MAAA,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE;AAClE,MAAA,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE;AAClE,MAAA,WAAW,GAAG,aAAa,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE;AAC9E,MAAA,WAAW,GAAG,aAAa,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE;AAC9E,MAAA,0BAA0B,GAAuD,aAAa,CACvG,4BAA4B,EAC5B,SAAS,EACT,EAAE,YAAY,EAAE,IAAI,EAAE;;;;"}