@atom-learning/components 2.59.1 → 2.59.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.
@@ -1,5 +1,5 @@
1
+ import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
1
2
  import React from 'react';
2
- import { CSS } from '../../stitches';
3
3
  import { NavigationMenuDropdown } from './NavigationMenuDropdown';
4
4
  import { NavigationMenuDropdownContent } from './NavigationMenuDropdownContent';
5
5
  import { NavigationMenuDropdownItem, NavigationMenuDropdownItemTitle } from './NavigationMenuDropdownItem';
@@ -13,8 +13,226 @@ declare type NavigationMenuSubComponents = {
13
13
  DropdownItemTitle: typeof NavigationMenuDropdownItemTitle;
14
14
  DropdownTrigger: typeof NavigationMenuDropdownTrigger;
15
15
  };
16
- declare type NavigationMenuProps = {
17
- css?: CSS;
18
- };
16
+ declare const StyledMenu: import("@stitches/react/types/styled-component").StyledComponent<React.ForwardRefExoticComponent<NavigationMenuPrimitive.NavigationMenuProps & React.RefAttributes<HTMLElement>>, {}, {
17
+ sm: string;
18
+ md: string;
19
+ lg: string;
20
+ xl: string;
21
+ reducedMotion: string;
22
+ allowMotion: string;
23
+ hover: string;
24
+ }, import("@stitches/react/types/css-util").CSS<{
25
+ sm: string;
26
+ md: string;
27
+ lg: string;
28
+ xl: string;
29
+ reducedMotion: string;
30
+ allowMotion: string;
31
+ hover: string;
32
+ }, {
33
+ colors: {
34
+ textForeground: any;
35
+ textSubtle: any;
36
+ textPlaceholder: any;
37
+ background: any;
38
+ backgroundAccent: any;
39
+ grey100: any;
40
+ grey200: any;
41
+ grey300: any;
42
+ grey400: any;
43
+ grey500: any;
44
+ grey600: any;
45
+ grey700: any;
46
+ grey800: any;
47
+ grey900: any;
48
+ grey1000: any;
49
+ grey1100: any;
50
+ grey1200: any;
51
+ blue100: any;
52
+ blue200: any;
53
+ blue300: any;
54
+ blue400: any;
55
+ blue500: any;
56
+ blue600: any;
57
+ blue700: any;
58
+ blue800: any;
59
+ blue900: any;
60
+ blue1000: any;
61
+ blue1100: any;
62
+ blue1200: any;
63
+ purple100: any;
64
+ purple200: any;
65
+ purple300: any;
66
+ purple400: any;
67
+ purple500: any;
68
+ purple600: any;
69
+ purple700: any;
70
+ purple800: any;
71
+ purple900: any;
72
+ purple1000: any;
73
+ purple1100: any;
74
+ purple1200: any;
75
+ tonal50: any;
76
+ tonal100: any;
77
+ tonal200: any;
78
+ tonal300: any;
79
+ tonal400: any;
80
+ tonal500: any;
81
+ tonal600: any;
82
+ alpha100: any;
83
+ alpha150: any;
84
+ alpha200: any;
85
+ alpha250: any;
86
+ alpha600: any;
87
+ primaryLight: any;
88
+ primary: any;
89
+ primaryMid: any;
90
+ primaryDark: any;
91
+ secondary: any;
92
+ brandRed: any;
93
+ brandRedAccent: any;
94
+ brandGreen: any;
95
+ brandGreenAccent: any;
96
+ brandPurple: any;
97
+ brandPurpleAccent: any;
98
+ brandYellow: any;
99
+ brandYellowAccent: any;
100
+ successLight: any;
101
+ success: any;
102
+ successMid: any;
103
+ successDark: any;
104
+ dangerLight: any;
105
+ danger: any;
106
+ dangerMid: any;
107
+ dangerDark: any;
108
+ warningLight: any;
109
+ warning: any;
110
+ warningMid: any;
111
+ warningDark: any;
112
+ warningText: any;
113
+ subjectEnglish: any;
114
+ subjectMaths: any;
115
+ subjectScience: any;
116
+ subjectVerbalReasoning: any;
117
+ subjectNonVerbalReasoning: any;
118
+ subjectCreativeWriting: any;
119
+ subjectExamSkills: any;
120
+ };
121
+ space: {
122
+ "0": any;
123
+ "1": any;
124
+ "2": any;
125
+ "3": any;
126
+ "4": any;
127
+ "5": any;
128
+ "6": any;
129
+ "7": any;
130
+ "8": any;
131
+ "9": any;
132
+ "24": any;
133
+ };
134
+ fontSizes: {
135
+ xs: any;
136
+ sm: any;
137
+ md: any;
138
+ lg: any;
139
+ xl: any;
140
+ "2xl": any;
141
+ "3xl": any;
142
+ "4xl": any;
143
+ };
144
+ fonts: {
145
+ sans: any;
146
+ mono: any;
147
+ display: any;
148
+ body: any;
149
+ };
150
+ sizes: {
151
+ "0": any;
152
+ "1": any;
153
+ "2": any;
154
+ "3": any;
155
+ "4": any;
156
+ "5": any;
157
+ "6": any;
158
+ "7": any;
159
+ "8": any;
160
+ };
161
+ radii: {
162
+ "0": any;
163
+ "1": any;
164
+ "2": any;
165
+ "3": any;
166
+ round: any;
167
+ };
168
+ shadows: {
169
+ "0": any;
170
+ "1": any;
171
+ "2": any;
172
+ "3": any;
173
+ };
174
+ ratios: {
175
+ "16-9": any;
176
+ "3-2": any;
177
+ "4-3": any;
178
+ "1-1": any;
179
+ "3-4": any;
180
+ };
181
+ }, import("@stitches/react/types/config").DefaultThemeMap, {
182
+ bg: (value: import("@stitches/react/types/css-util").WithPropertyValue<"background">) => {
183
+ background: import("@stitches/react/types/css-util").WithPropertyValue<"background">;
184
+ };
185
+ size: (value: string | number | import("@stitches/react/types/css-util").WithScaleValue<"size">) => {
186
+ height: string | number | import("@stitches/react/types/css-util").WithScaleValue<"size">;
187
+ width: string | number | import("@stitches/react/types/css-util").WithScaleValue<"size">;
188
+ };
189
+ p: (value: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">) => {
190
+ padding: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
191
+ };
192
+ pt: (value: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">) => {
193
+ paddingTop: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
194
+ };
195
+ pr: (value: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">) => {
196
+ paddingRight: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
197
+ };
198
+ pb: (value: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">) => {
199
+ paddingBottom: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
200
+ };
201
+ pl: (value: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">) => {
202
+ paddingLeft: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
203
+ };
204
+ px: (value: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">) => {
205
+ paddingLeft: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
206
+ paddingRight: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
207
+ };
208
+ py: (value: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">) => {
209
+ paddingTop: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
210
+ paddingBottom: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
211
+ };
212
+ m: (value: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">) => {
213
+ margin: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
214
+ };
215
+ mt: (value: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">) => {
216
+ marginTop: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
217
+ };
218
+ mr: (value: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">) => {
219
+ marginRight: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
220
+ };
221
+ mb: (value: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">) => {
222
+ marginBottom: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
223
+ };
224
+ ml: (value: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">) => {
225
+ marginLeft: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
226
+ };
227
+ mx: (value: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">) => {
228
+ marginLeft: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
229
+ marginRight: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
230
+ };
231
+ my: (value: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">) => {
232
+ marginTop: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
233
+ marginBottom: string | number | import("@stitches/react/types/css-util").WithScaleValue<"space">;
234
+ };
235
+ }>>;
236
+ declare type NavigationMenuProps = React.ComponentProps<typeof StyledMenu>;
19
237
  export declare const NavigationMenu: React.FC<NavigationMenuProps> & NavigationMenuSubComponents;
20
238
  export {};
@@ -1,2 +1,2 @@
1
- import*as m from"@radix-ui/react-navigation-menu";import t from"react";import{MAX_Z_INDEX as N}from"../../constants/zIndices.js";import{keyframes as D,styled as n}from"../../stitches.js";import{fadeOut as M}from"../../utilities/style/keyframe-animations.js";import{NavigationMenuContext as E}from"./NavigationMenuContext.js";import{NavigationMenuDropdown as x}from"./NavigationMenuDropdown.js";import{NavigationMenuDropdownContent as h}from"./NavigationMenuDropdownContent.js";import{NavigationMenuDropdownItem as C,NavigationMenuDropdownItemTitle as I}from"./NavigationMenuDropdownItem.js";import{NavigationMenuDropdownTrigger as $}from"./NavigationMenuDropdownTrigger.js";import{NavigationMenuLink as T}from"./NavigationMenuLink.js";const L=D({"0%, 50%":{opacity:0},"100%":{opacity:1}}),_=n(m.Root,{display:"flex",justifyContent:"center",position:"relative"}),k=n(m.List,{all:"unset",display:"flex",justifyContent:"center",alignItems:"center",gap:"$1",listStyle:"none"}),S=n(m.Viewport,{zIndex:N}),j=n("div",{position:"absolute",left:0,top:"100%",width:"100%",display:"flex",justifyContent:"center"}),o=({children:f,css:u})=>{const[p,l]=t.useState(),[r,d]=t.useState(),[i,c]=t.useState(0),a=t.useRef(null),s=200;t.useLayoutEffect(()=>{a.current&&c(a.current.offsetWidth)},[]),t.useEffect(()=>{let e;return r===""&&(e=setTimeout(()=>l(null),s)),()=>{e!==null&&clearTimeout(e)}},[r]);const g=(e,y)=>{if(e&&i&&r===y){const v=i/2,w=i-e.offsetLeft-e.offsetWidth+e.offsetWidth/2;l(Math.round(v-w))}return e};return t.createElement(E.Provider,{value:{onNodeUpdate:g}},t.createElement(_,{onValueChange:d,css:u},t.createElement(k,{ref:a},f),t.createElement(j,null,t.createElement(S,{css:{transform:`translateX(${p||0}px)`,'&[data-state="open"]':{animation:`${L} ${s}ms ease`},'&[data-state="closed"]':{animation:`${M} ${s}ms ease-out`}}}))))};o.Link=T,o.Dropdown=x,o.DropdownContent=h,o.DropdownItem=C,o.DropdownItemTitle=I,o.DropdownTrigger=$,o.displayName="NavigationMenu";export{o as NavigationMenu};
1
+ import*as m from"@radix-ui/react-navigation-menu";import t from"react";import{MAX_Z_INDEX as N}from"../../constants/zIndices.js";import{keyframes as D,styled as n}from"../../stitches.js";import{fadeOut as E}from"../../utilities/style/keyframe-animations.js";import{NavigationMenuContext as h}from"./NavigationMenuContext.js";import{NavigationMenuDropdown as x}from"./NavigationMenuDropdown.js";import{NavigationMenuDropdownContent as C}from"./NavigationMenuDropdownContent.js";import{NavigationMenuDropdownItem as I,NavigationMenuDropdownItemTitle as $}from"./NavigationMenuDropdownItem.js";import{NavigationMenuDropdownTrigger as T}from"./NavigationMenuDropdownTrigger.js";import{NavigationMenuLink as L}from"./NavigationMenuLink.js";const _=D({"0%, 50%":{opacity:0},"100%":{opacity:1}}),k=n(m.Root,{display:"flex",justifyContent:"center",position:"relative"}),S=n(m.List,{all:"unset",display:"flex",justifyContent:"center",alignItems:"center",gap:"$1",listStyle:"none"}),j=n(m.Viewport,{zIndex:N}),V=n("div",{position:"absolute",left:0,top:"100%",width:"100%",display:"flex",justifyContent:"center"}),o=({children:f,css:u,...p})=>{const[d,l]=t.useState(),[r,c]=t.useState(),[i,g]=t.useState(0),a=t.useRef(null),s=200;t.useLayoutEffect(()=>{a.current&&g(a.current.offsetWidth)},[]),t.useEffect(()=>{let e;return r===""&&(e=setTimeout(()=>l(null),s)),()=>{e!==null&&clearTimeout(e)}},[r]);const v=(e,y)=>{if(e&&i&&r===y){const w=i/2,M=i-e.offsetLeft-e.offsetWidth+e.offsetWidth/2;l(Math.round(w-M))}return e};return t.createElement(h.Provider,{value:{onNodeUpdate:v}},t.createElement(k,{onValueChange:c,css:u,...p},t.createElement(S,{ref:a},f),t.createElement(V,null,t.createElement(j,{css:{transform:`translateX(${d||0}px)`,'&[data-state="open"]':{animation:`${_} ${s}ms ease`},'&[data-state="closed"]':{animation:`${E} ${s}ms ease-out`}}}))))};o.Link=L,o.Dropdown=x,o.DropdownContent=C,o.DropdownItem=I,o.DropdownItemTitle=$,o.DropdownTrigger=T,o.displayName="NavigationMenu";export{o as NavigationMenu};
2
2
  //# sourceMappingURL=NavigationMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationMenu.js","sources":["../../../src/components/navigation/NavigationMenu.tsx"],"sourcesContent":["import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu'\nimport React from 'react'\n\nimport { MAX_Z_INDEX } from '~/constants/zIndices'\nimport { CSS, keyframes, styled } from '~/stitches'\nimport { fadeOut } from '~/utilities/style/keyframe-animations'\n\nimport { NavigationMenuContext } from './NavigationMenuContext'\nimport { NavigationMenuDropdown } from './NavigationMenuDropdown'\nimport { NavigationMenuDropdownContent } from './NavigationMenuDropdownContent'\nimport {\n NavigationMenuDropdownItem,\n NavigationMenuDropdownItemTitle\n} from './NavigationMenuDropdownItem'\nimport { NavigationMenuDropdownTrigger } from './NavigationMenuDropdownTrigger'\nimport { NavigationMenuLink } from './NavigationMenuLink'\n\ntype NavigationMenuSubComponents = {\n Link: typeof NavigationMenuLink\n Dropdown: typeof NavigationMenuDropdown\n DropdownContent: typeof NavigationMenuDropdownContent\n DropdownItem: typeof NavigationMenuDropdownItem\n DropdownItemTitle: typeof NavigationMenuDropdownItemTitle\n DropdownTrigger: typeof NavigationMenuDropdownTrigger\n}\n\nconst delayedFadeIn = keyframes({\n '0%, 50%': { opacity: 0 },\n '100%': { opacity: 1 }\n})\n\nconst StyledMenu = styled(NavigationMenuPrimitive.Root, {\n display: 'flex',\n justifyContent: 'center',\n position: 'relative'\n})\n\nconst StyledList = styled(NavigationMenuPrimitive.List, {\n all: 'unset',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n gap: '$1',\n listStyle: 'none'\n})\n\nconst StyledViewport = styled(NavigationMenuPrimitive.Viewport, {\n zIndex: MAX_Z_INDEX\n})\n\nconst ViewportPosition = styled('div', {\n position: 'absolute',\n left: 0,\n top: '100%',\n width: '100%',\n display: 'flex',\n justifyContent: 'center'\n})\n\ntype NavigationMenuProps = {\n css?: CSS\n}\n\nexport const NavigationMenu: React.FC<NavigationMenuProps> &\n NavigationMenuSubComponents = ({ children, css }) => {\n const [offset, setOffset] = React.useState<number | null | undefined>()\n const [activeItem, setActiveItem] = React.useState<string | undefined>()\n const [listWidth, setListWidth] = React.useState(0)\n const listRef = React.useRef<HTMLUListElement>(null)\n const fadeDuration = 200\n\n React.useLayoutEffect(() => {\n if (listRef.current) {\n setListWidth(listRef.current.offsetWidth)\n }\n }, [])\n\n React.useEffect(() => {\n let timer: NodeJS.Timer\n\n // Delay transitioning back to initial position\n // to allow enough time for fadeOut animation to complete\n if (activeItem === '') {\n timer = setTimeout(() => setOffset(null), fadeDuration)\n }\n\n return () => {\n if (timer !== null) {\n clearTimeout(timer)\n }\n }\n }, [activeItem])\n\n // https://github.com/radix-ui/primitives/issues/1462\n const onNodeUpdate = (trigger: HTMLButtonElement, itemValue: string) => {\n if (trigger && listWidth && activeItem === itemValue) {\n const listCenter = listWidth / 2\n\n const triggerOffsetRight =\n listWidth -\n trigger.offsetLeft -\n trigger.offsetWidth +\n trigger.offsetWidth / 2\n\n setOffset(Math.round(listCenter - triggerOffsetRight))\n }\n\n return trigger\n }\n\n return (\n <NavigationMenuContext.Provider value={{ onNodeUpdate }}>\n <StyledMenu onValueChange={setActiveItem} css={css}>\n <StyledList ref={listRef}>{children}</StyledList>\n <ViewportPosition>\n <StyledViewport\n css={{\n transform: `translateX(${offset || 0}px)`,\n '&[data-state=\"open\"]': {\n animation: `${delayedFadeIn} ${fadeDuration}ms ease`\n },\n '&[data-state=\"closed\"]': {\n animation: `${fadeOut} ${fadeDuration}ms ease-out`\n }\n }}\n />\n </ViewportPosition>\n </StyledMenu>\n </NavigationMenuContext.Provider>\n )\n}\n\nNavigationMenu.Link = NavigationMenuLink\nNavigationMenu.Dropdown = NavigationMenuDropdown\nNavigationMenu.DropdownContent = NavigationMenuDropdownContent\nNavigationMenu.DropdownItem = NavigationMenuDropdownItem\nNavigationMenu.DropdownItemTitle = NavigationMenuDropdownItemTitle\nNavigationMenu.DropdownTrigger = NavigationMenuDropdownTrigger\n\nNavigationMenu.displayName = 'NavigationMenu'\n"],"names":["delayedFadeIn","keyframes","StyledMenu","styled","NavigationMenuPrimitive","StyledList","StyledViewport","MAX_Z_INDEX","ViewportPosition","NavigationMenu","children","css","offset","setOffset","React","activeItem","setActiveItem","listWidth","setListWidth","listRef","fadeDuration","timer","onNodeUpdate","trigger","itemValue","listCenter","triggerOffsetRight","NavigationMenuContext","fadeOut","NavigationMenuLink","NavigationMenuDropdown","NavigationMenuDropdownContent","NavigationMenuDropdownItem","NavigationMenuDropdownItemTitle","NavigationMenuDropdownTrigger"],"mappings":"+tBA0BA,MAAMA,EAAgBC,EAAU,CAC9B,UAAW,CAAE,QAAS,CAAE,EACxB,OAAQ,CAAE,QAAS,CAAE,CACvB,CAAC,EAEKC,EAAaC,EAAOC,EAAwB,KAAM,CACtD,QAAS,OACT,eAAgB,SAChB,SAAU,UACZ,CAAC,EAEKC,EAAaF,EAAOC,EAAwB,KAAM,CACtD,IAAK,QACL,QAAS,OACT,eAAgB,SAChB,WAAY,SACZ,IAAK,KACL,UAAW,MACb,CAAC,EAEKE,EAAiBH,EAAOC,EAAwB,SAAU,CAC9D,OAAQG,CACV,CAAC,EAEKC,EAAmBL,EAAO,MAAO,CACrC,SAAU,WACV,KAAM,EACN,IAAK,OACL,MAAO,OACP,QAAS,OACT,eAAgB,QAClB,CAAC,EAMYM,EACmB,CAAC,CAAE,SAAAC,EAAU,IAAAC,CAAI,IAAM,CACrD,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAM,SAC5B,EAAA,CAACC,EAAYC,CAAa,EAAIF,EAAM,SAAA,EACpC,CAACG,EAAWC,CAAY,EAAIJ,EAAM,SAAS,CAAC,EAC5CK,EAAUL,EAAM,OAAyB,IAAI,EAC7CM,EAAe,IAErBN,EAAM,gBAAgB,IAAM,CACtBK,EAAQ,SACVD,EAAaC,EAAQ,QAAQ,WAAW,CAE5C,EAAG,CAAE,CAAA,EAELL,EAAM,UAAU,IAAM,CACpB,IAAIO,EAIJ,OAAIN,IAAe,KACjBM,EAAQ,WAAW,IAAMR,EAAU,IAAI,EAAGO,CAAY,GAGjD,IAAM,CACPC,IAAU,MACZ,aAAaA,CAAK,CAEtB,CACF,EAAG,CAACN,CAAU,CAAC,EAGf,MAAMO,EAAe,CAACC,EAA4BC,IAAsB,CACtE,GAAID,GAAWN,GAAaF,IAAeS,EAAW,CACpD,MAAMC,EAAaR,EAAY,EAEzBS,EACJT,EACAM,EAAQ,WACRA,EAAQ,YACRA,EAAQ,YAAc,EAExBV,EAAU,KAAK,MAAMY,EAAaC,CAAkB,CAAC,CACvD,CAEA,OAAOH,CACT,EAEA,OACET,EAAA,cAACa,EAAsB,SAAtB,CAA+B,MAAO,CAAE,aAAAL,CAAa,CACpDR,EAAAA,EAAA,cAACZ,EAAA,CAAW,cAAec,EAAe,IAAKL,CAC7CG,EAAAA,EAAA,cAACT,EAAA,CAAW,IAAKc,CAAAA,EAAUT,CAAS,EACpCI,EAAA,cAACN,EAAA,KACCM,EAAA,cAACR,EAAA,CACC,IAAK,CACH,UAAW,cAAcM,GAAU,OACnC,uBAAwB,CACtB,UAAW,GAAGZ,KAAiBoB,UACjC,EACA,yBAA0B,CACxB,UAAW,GAAGQ,KAAWR,cAC3B,CACF,CAAA,CACF,CACF,CACF,CACF,CAEJ,EAEAX,EAAe,KAAOoB,EACtBpB,EAAe,SAAWqB,EAC1BrB,EAAe,gBAAkBsB,EACjCtB,EAAe,aAAeuB,EAC9BvB,EAAe,kBAAoBwB,EACnCxB,EAAe,gBAAkByB,EAEjCzB,EAAe,YAAc"}
1
+ {"version":3,"file":"NavigationMenu.js","sources":["../../../src/components/navigation/NavigationMenu.tsx"],"sourcesContent":["import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu'\nimport React from 'react'\n\nimport { MAX_Z_INDEX } from '~/constants/zIndices'\nimport { CSS, keyframes, styled } from '~/stitches'\nimport { fadeOut } from '~/utilities/style/keyframe-animations'\n\nimport { NavigationMenuContext } from './NavigationMenuContext'\nimport { NavigationMenuDropdown } from './NavigationMenuDropdown'\nimport { NavigationMenuDropdownContent } from './NavigationMenuDropdownContent'\nimport {\n NavigationMenuDropdownItem,\n NavigationMenuDropdownItemTitle\n} from './NavigationMenuDropdownItem'\nimport { NavigationMenuDropdownTrigger } from './NavigationMenuDropdownTrigger'\nimport { NavigationMenuLink } from './NavigationMenuLink'\n\ntype NavigationMenuSubComponents = {\n Link: typeof NavigationMenuLink\n Dropdown: typeof NavigationMenuDropdown\n DropdownContent: typeof NavigationMenuDropdownContent\n DropdownItem: typeof NavigationMenuDropdownItem\n DropdownItemTitle: typeof NavigationMenuDropdownItemTitle\n DropdownTrigger: typeof NavigationMenuDropdownTrigger\n}\n\nconst delayedFadeIn = keyframes({\n '0%, 50%': { opacity: 0 },\n '100%': { opacity: 1 }\n})\n\nconst StyledMenu = styled(NavigationMenuPrimitive.Root, {\n display: 'flex',\n justifyContent: 'center',\n position: 'relative'\n})\n\nconst StyledList = styled(NavigationMenuPrimitive.List, {\n all: 'unset',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n gap: '$1',\n listStyle: 'none'\n})\n\nconst StyledViewport = styled(NavigationMenuPrimitive.Viewport, {\n zIndex: MAX_Z_INDEX\n})\n\nconst ViewportPosition = styled('div', {\n position: 'absolute',\n left: 0,\n top: '100%',\n width: '100%',\n display: 'flex',\n justifyContent: 'center'\n})\n\ntype NavigationMenuProps = React.ComponentProps<typeof StyledMenu>\n\nexport const NavigationMenu: React.FC<NavigationMenuProps> &\n NavigationMenuSubComponents = ({ children, css, ...props }) => {\n const [offset, setOffset] = React.useState<number | null | undefined>()\n const [activeItem, setActiveItem] = React.useState<string | undefined>()\n const [listWidth, setListWidth] = React.useState(0)\n const listRef = React.useRef<HTMLUListElement>(null)\n const fadeDuration = 200\n\n React.useLayoutEffect(() => {\n if (listRef.current) {\n setListWidth(listRef.current.offsetWidth)\n }\n }, [])\n\n React.useEffect(() => {\n let timer: NodeJS.Timer\n\n // Delay transitioning back to initial position\n // to allow enough time for fadeOut animation to complete\n if (activeItem === '') {\n timer = setTimeout(() => setOffset(null), fadeDuration)\n }\n\n return () => {\n if (timer !== null) {\n clearTimeout(timer)\n }\n }\n }, [activeItem])\n\n // https://github.com/radix-ui/primitives/issues/1462\n const onNodeUpdate = (trigger: HTMLButtonElement, itemValue: string) => {\n if (trigger && listWidth && activeItem === itemValue) {\n const listCenter = listWidth / 2\n\n const triggerOffsetRight =\n listWidth -\n trigger.offsetLeft -\n trigger.offsetWidth +\n trigger.offsetWidth / 2\n\n setOffset(Math.round(listCenter - triggerOffsetRight))\n }\n\n return trigger\n }\n\n return (\n <NavigationMenuContext.Provider value={{ onNodeUpdate }}>\n <StyledMenu onValueChange={setActiveItem} css={css} {...props}>\n <StyledList ref={listRef}>{children}</StyledList>\n <ViewportPosition>\n <StyledViewport\n css={{\n transform: `translateX(${offset || 0}px)`,\n '&[data-state=\"open\"]': {\n animation: `${delayedFadeIn} ${fadeDuration}ms ease`\n },\n '&[data-state=\"closed\"]': {\n animation: `${fadeOut} ${fadeDuration}ms ease-out`\n }\n }}\n />\n </ViewportPosition>\n </StyledMenu>\n </NavigationMenuContext.Provider>\n )\n}\n\nNavigationMenu.Link = NavigationMenuLink\nNavigationMenu.Dropdown = NavigationMenuDropdown\nNavigationMenu.DropdownContent = NavigationMenuDropdownContent\nNavigationMenu.DropdownItem = NavigationMenuDropdownItem\nNavigationMenu.DropdownItemTitle = NavigationMenuDropdownItemTitle\nNavigationMenu.DropdownTrigger = NavigationMenuDropdownTrigger\n\nNavigationMenu.displayName = 'NavigationMenu'\n"],"names":["delayedFadeIn","keyframes","StyledMenu","styled","NavigationMenuPrimitive","StyledList","StyledViewport","MAX_Z_INDEX","ViewportPosition","NavigationMenu","children","css","props","offset","setOffset","React","activeItem","setActiveItem","listWidth","setListWidth","listRef","fadeDuration","timer","onNodeUpdate","trigger","itemValue","listCenter","triggerOffsetRight","NavigationMenuContext","fadeOut","NavigationMenuLink","NavigationMenuDropdown","NavigationMenuDropdownContent","NavigationMenuDropdownItem","NavigationMenuDropdownItemTitle","NavigationMenuDropdownTrigger"],"mappings":"+tBA0BA,MAAMA,EAAgBC,EAAU,CAC9B,UAAW,CAAE,QAAS,CAAE,EACxB,OAAQ,CAAE,QAAS,CAAE,CACvB,CAAC,EAEKC,EAAaC,EAAOC,EAAwB,KAAM,CACtD,QAAS,OACT,eAAgB,SAChB,SAAU,UACZ,CAAC,EAEKC,EAAaF,EAAOC,EAAwB,KAAM,CACtD,IAAK,QACL,QAAS,OACT,eAAgB,SAChB,WAAY,SACZ,IAAK,KACL,UAAW,MACb,CAAC,EAEKE,EAAiBH,EAAOC,EAAwB,SAAU,CAC9D,OAAQG,CACV,CAAC,EAEKC,EAAmBL,EAAO,MAAO,CACrC,SAAU,WACV,KAAM,EACN,IAAK,OACL,MAAO,OACP,QAAS,OACT,eAAgB,QAClB,CAAC,EAIYM,EACmB,CAAC,CAAE,SAAAC,EAAU,IAAAC,KAAQC,CAAM,IAAM,CAC/D,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAM,SAAA,EAC5B,CAACC,EAAYC,CAAa,EAAIF,EAAM,SAA6B,EACjE,CAACG,EAAWC,CAAY,EAAIJ,EAAM,SAAS,CAAC,EAC5CK,EAAUL,EAAM,OAAyB,IAAI,EAC7CM,EAAe,IAErBN,EAAM,gBAAgB,IAAM,CACtBK,EAAQ,SACVD,EAAaC,EAAQ,QAAQ,WAAW,CAE5C,EAAG,CAAE,CAAA,EAELL,EAAM,UAAU,IAAM,CACpB,IAAIO,EAIJ,OAAIN,IAAe,KACjBM,EAAQ,WAAW,IAAMR,EAAU,IAAI,EAAGO,CAAY,GAGjD,IAAM,CACPC,IAAU,MACZ,aAAaA,CAAK,CAEtB,CACF,EAAG,CAACN,CAAU,CAAC,EAGf,MAAMO,EAAe,CAACC,EAA4BC,IAAsB,CACtE,GAAID,GAAWN,GAAaF,IAAeS,EAAW,CACpD,MAAMC,EAAaR,EAAY,EAEzBS,EACJT,EACAM,EAAQ,WACRA,EAAQ,YACRA,EAAQ,YAAc,EAExBV,EAAU,KAAK,MAAMY,EAAaC,CAAkB,CAAC,CACvD,CAEA,OAAOH,CACT,EAEA,OACET,EAAA,cAACa,EAAsB,SAAtB,CAA+B,MAAO,CAAE,aAAAL,CAAa,CACpDR,EAAAA,EAAA,cAACb,EAAA,CAAW,cAAee,EAAe,IAAKN,EAAM,GAAGC,CACtDG,EAAAA,EAAA,cAACV,EAAA,CAAW,IAAKe,CAAAA,EAAUV,CAAS,EACpCK,EAAA,cAACP,EAAA,KACCO,EAAA,cAACT,EAAA,CACC,IAAK,CACH,UAAW,cAAcO,GAAU,OACnC,uBAAwB,CACtB,UAAW,GAAGb,KAAiBqB,UACjC,EACA,yBAA0B,CACxB,UAAW,GAAGQ,KAAWR,cAC3B,CACF,CAAA,CACF,CACF,CACF,CACF,CAEJ,EAEAZ,EAAe,KAAOqB,EACtBrB,EAAe,SAAWsB,EAC1BtB,EAAe,gBAAkBuB,EACjCvB,EAAe,aAAewB,EAC9BxB,EAAe,kBAAoByB,EACnCzB,EAAe,gBAAkB0B,EAEjC1B,EAAe,YAAc"}