@ali-hajeh/purple-navbar 1.0.0

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.
package/dist/index.js ADDED
@@ -0,0 +1,541 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ // src/components/Navbar.tsx
7
+
8
+ // src/utils.ts
9
+ var getMobileOperatingSystem = () => {
10
+ if (typeof navigator === "undefined") return "unknown";
11
+ const userAgent = navigator.userAgent || navigator.vendor;
12
+ if (/windows phone/i.test(userAgent)) {
13
+ return "Windows Phone";
14
+ }
15
+ if (/android/i.test(userAgent)) {
16
+ return "Android";
17
+ }
18
+ if (/iPad|iPhone|iPod/.test(userAgent)) {
19
+ return "iOS";
20
+ }
21
+ return "unknown";
22
+ };
23
+ var NavbarLogo = ({ onClick }) => {
24
+ const OS = getMobileOperatingSystem();
25
+ const staticLogo = /* @__PURE__ */ jsxRuntime.jsxs(
26
+ "svg",
27
+ {
28
+ className: "pn-navbar__logo",
29
+ width: "150",
30
+ height: "59",
31
+ viewBox: "0 0 150 59",
32
+ fill: "none",
33
+ xmlns: "http://www.w3.org/2000/svg",
34
+ onClick,
35
+ children: [
36
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { clipPath: "url(#clip0_static)", children: [
37
+ /* @__PURE__ */ jsxRuntime.jsx(
38
+ "path",
39
+ {
40
+ d: "M20.3888 17.2495V40.9579H17.6122L3.38621 23.279V40.9604H0V17.252H2.77659L17.0026 34.9333V17.252H20.3888V17.2495Z",
41
+ fill: "white"
42
+ }
43
+ ),
44
+ /* @__PURE__ */ jsxRuntime.jsx(
45
+ "path",
46
+ {
47
+ d: "M46.1479 29.1061C46.1479 22.3189 51.3803 17.252 58.4982 17.252C65.6162 17.252 70.7819 22.2844 70.7819 29.1061C70.7819 35.9279 65.5495 40.9603 58.4982 40.9603C51.4469 40.9603 46.1479 35.8934 46.1479 29.1061ZM67.4722 29.1061C67.4722 23.9725 63.6318 20.1988 58.4982 20.1988C53.3646 20.1988 49.4576 23.9725 49.4576 29.1061C49.4576 34.2397 53.298 38.0134 58.4982 38.0134C63.6985 38.0134 67.4722 34.2397 67.4722 29.1061Z",
48
+ fill: "#7D6FF6"
49
+ }
50
+ ),
51
+ /* @__PURE__ */ jsxRuntime.jsx(
52
+ "path",
53
+ {
54
+ d: "M104.661 32.7638V40.9603H101.307V32.6972L91.8916 17.252H95.5147L103.102 29.7503L110.723 17.252H114.077L104.661 32.7638Z",
55
+ fill: "white"
56
+ }
57
+ ),
58
+ /* @__PURE__ */ jsxRuntime.jsx(
59
+ "path",
60
+ {
61
+ d: "M143.835 35.032H131.235L128.627 40.9603H125.137L135.873 17.252H139.227L149.998 40.9603H146.441L143.832 35.032H143.835ZM142.65 32.322L137.536 20.7048L132.422 32.322H142.65Z",
62
+ fill: "white"
63
+ }
64
+ )
65
+ ] }),
66
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsx("clipPath", { id: "clip0_static", children: /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "150", height: "58.2097", fill: "white" }) }) })
67
+ ]
68
+ }
69
+ );
70
+ const animatedLogo = /* @__PURE__ */ jsxRuntime.jsxs(
71
+ "svg",
72
+ {
73
+ className: "pn-navbar__logo",
74
+ width: "150",
75
+ height: "59",
76
+ viewBox: "0 0 150 59",
77
+ fill: "none",
78
+ xmlns: "http://www.w3.org/2000/svg",
79
+ onClick,
80
+ children: [
81
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { clipPath: "url(#clip0_2469_22451)", className: "pn-navbar__logo-circle", children: [
82
+ /* @__PURE__ */ jsxRuntime.jsx(
83
+ "path",
84
+ {
85
+ d: "M32.2082 31.9272C33.7676 31.9272 35.0317 30.6631 35.0317 29.1038C35.0317 27.5444 33.7676 26.2803 32.2082 26.2803C30.6489 26.2803 29.3848 27.5444 29.3848 29.1038C29.3848 30.6631 30.6489 31.9272 32.2082 31.9272Z",
86
+ fill: "white"
87
+ }
88
+ ),
89
+ /* @__PURE__ */ jsxRuntime.jsx(
90
+ "path",
91
+ {
92
+ d: "M84.7688 31.9272C86.3282 31.9272 87.5923 30.6631 87.5923 29.1038C87.5923 27.5444 86.3282 26.2803 84.7688 26.2803C83.2094 26.2803 81.9453 27.5444 81.9453 29.1038C81.9453 30.6631 83.2094 31.9272 84.7688 31.9272Z",
93
+ fill: "white"
94
+ }
95
+ ),
96
+ /* @__PURE__ */ jsxRuntime.jsx(
97
+ "path",
98
+ {
99
+ d: "M39.9065 13.3447C41.4659 13.3447 42.73 12.0806 42.73 10.5212C42.73 8.96187 41.4659 7.69775 39.9065 7.69775C38.3471 7.69775 37.083 8.96187 37.083 10.5212C37.083 12.0806 38.3471 13.3447 39.9065 13.3447Z",
100
+ fill: "white"
101
+ }
102
+ ),
103
+ /* @__PURE__ */ jsxRuntime.jsx(
104
+ "path",
105
+ {
106
+ d: "M77.0706 50.5117C78.6299 50.5117 79.894 49.2476 79.894 47.6882C79.894 46.1289 78.6299 44.8647 77.0706 44.8647C75.5112 44.8647 74.2471 46.1289 74.2471 47.6882C74.2471 49.2476 75.5112 50.5117 77.0706 50.5117Z",
107
+ fill: "white"
108
+ }
109
+ ),
110
+ /* @__PURE__ */ jsxRuntime.jsx(
111
+ "path",
112
+ {
113
+ d: "M58.4885 5.64697C60.0479 5.64697 61.312 4.38285 61.312 2.82348C61.312 1.26412 60.0479 0 58.4885 0C56.9292 0 55.665 1.26412 55.665 2.82348C55.665 4.38285 56.9292 5.64697 58.4885 5.64697Z",
114
+ fill: "white"
115
+ }
116
+ ),
117
+ /* @__PURE__ */ jsxRuntime.jsx(
118
+ "path",
119
+ {
120
+ d: "M58.4885 58.2095C60.0479 58.2095 61.312 56.9454 61.312 55.386C61.312 53.8266 60.0479 52.5625 58.4885 52.5625C56.9292 52.5625 55.665 53.8266 55.665 55.386C55.665 56.9454 56.9292 58.2095 58.4885 58.2095Z",
121
+ fill: "white"
122
+ }
123
+ ),
124
+ /* @__PURE__ */ jsxRuntime.jsx(
125
+ "path",
126
+ {
127
+ d: "M58.5007 5.64697C60.0601 5.64697 61.3242 4.38285 61.3242 2.82348C61.3242 1.26412 60.0601 0 58.5007 0C56.9414 0 55.6772 1.26412 55.6772 2.82348C55.6772 4.38285 56.9414 5.64697 58.5007 5.64697Z",
128
+ fill: "white"
129
+ }
130
+ ),
131
+ /* @__PURE__ */ jsxRuntime.jsx(
132
+ "path",
133
+ {
134
+ d: "M58.5007 58.2095C60.0601 58.2095 61.3242 56.9454 61.3242 55.386C61.3242 53.8266 60.0601 52.5625 58.5007 52.5625C56.9414 52.5625 55.6772 53.8266 55.6772 55.386C55.6772 56.9454 56.9414 58.2095 58.5007 58.2095Z",
135
+ fill: "white"
136
+ }
137
+ ),
138
+ /* @__PURE__ */ jsxRuntime.jsx(
139
+ "path",
140
+ {
141
+ d: "M77.72 14.0063C79.2793 14.0063 80.5435 12.7422 80.5435 11.1829C80.5435 9.62349 79.2793 8.35938 77.72 8.35938C76.1606 8.35938 74.8965 9.62349 74.8965 11.1829C74.8965 12.7422 76.1606 14.0063 77.72 14.0063Z",
142
+ fill: "white"
143
+ }
144
+ ),
145
+ /* @__PURE__ */ jsxRuntime.jsx(
146
+ "path",
147
+ {
148
+ d: "M39.2795 49.8501C40.8389 49.8501 42.103 48.586 42.103 47.0266C42.103 45.4672 40.8389 44.2031 39.2795 44.2031C37.7202 44.2031 36.4561 45.4672 36.4561 47.0266C36.4561 48.586 37.7202 49.8501 39.2795 49.8501Z",
149
+ fill: "white"
150
+ }
151
+ )
152
+ ] }),
153
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { clipPath: "url(#clip0_2469_22451)", children: [
154
+ /* @__PURE__ */ jsxRuntime.jsx(
155
+ "path",
156
+ {
157
+ d: "M20.3888 17.2495V40.9579H17.6122L3.38621 23.279V40.9604H0V17.252H2.77659L17.0026 34.9333V17.252H20.3888V17.2495Z",
158
+ fill: "white"
159
+ }
160
+ ),
161
+ /* @__PURE__ */ jsxRuntime.jsx(
162
+ "path",
163
+ {
164
+ d: "M46.1479 29.1061C46.1479 22.3189 51.3803 17.252 58.4982 17.252C65.6162 17.252 70.7819 22.2844 70.7819 29.1061C70.7819 35.9279 65.5495 40.9603 58.4982 40.9603C51.4469 40.9603 46.1479 35.8934 46.1479 29.1061ZM67.4722 29.1061C67.4722 23.9725 63.6318 20.1988 58.4982 20.1988C53.3646 20.1988 49.4576 23.9725 49.4576 29.1061C49.4576 34.2397 53.298 38.0134 58.4982 38.0134C63.6985 38.0134 67.4722 34.2397 67.4722 29.1061Z",
165
+ fill: "#7D6FF6"
166
+ }
167
+ ),
168
+ /* @__PURE__ */ jsxRuntime.jsx(
169
+ "path",
170
+ {
171
+ d: "M104.661 32.7638V40.9603H101.307V32.6972L91.8916 17.252H95.5147L103.102 29.7503L110.723 17.252H114.077L104.661 32.7638Z",
172
+ fill: "white"
173
+ }
174
+ ),
175
+ /* @__PURE__ */ jsxRuntime.jsx(
176
+ "path",
177
+ {
178
+ d: "M143.835 35.032H131.235L128.627 40.9603H125.137L135.873 17.252H139.227L149.998 40.9603H146.441L143.832 35.032H143.835ZM142.65 32.322L137.536 20.7048L132.422 32.322H142.65Z",
179
+ fill: "white"
180
+ }
181
+ )
182
+ ] }),
183
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsx("clipPath", { id: "clip0_2469_22451", children: /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "150", height: "58.2097", fill: "white" }) }) })
184
+ ]
185
+ }
186
+ );
187
+ return OS === "iOS" ? staticLogo : animatedLogo;
188
+ };
189
+ var ExpandingText = ({
190
+ text,
191
+ onClick
192
+ }) => {
193
+ const [hover, setHover] = react.useState(false);
194
+ return /* @__PURE__ */ jsxRuntime.jsx(
195
+ "div",
196
+ {
197
+ className: "pn-navbar__expanding-text-wrapper",
198
+ onMouseEnter: () => setHover(true),
199
+ onMouseLeave: () => setHover(false),
200
+ onClick,
201
+ children: /* @__PURE__ */ jsxRuntime.jsx(
202
+ "p",
203
+ {
204
+ className: `pn-navbar__expanding-text ${hover ? "pn-navbar__expanding-text--active" : "pn-navbar__expanding-text--idle"}`,
205
+ children: text
206
+ }
207
+ )
208
+ }
209
+ );
210
+ };
211
+ var NavbarDropdown = ({ items }) => {
212
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pn-navbar__dropdown", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pn-navbar__dropdown-wrapper", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pn-navbar__dropdown-content", children: items.map((item, index) => /* @__PURE__ */ jsxRuntime.jsx(
213
+ ExpandingText,
214
+ {
215
+ text: item.label,
216
+ onClick: item.onClick
217
+ },
218
+ `${item.label}-${index}`
219
+ )) }) }) });
220
+ };
221
+ var NavbarLinks = ({ links }) => {
222
+ return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "pn-navbar__links", children: links.map((link, index) => {
223
+ const hasDropdown = link.dropdown && link.dropdown.length > 0;
224
+ return /* @__PURE__ */ jsxRuntime.jsxs(
225
+ "li",
226
+ {
227
+ className: `pn-navbar__link-item ${hasDropdown ? "pn-navbar__link-item--has-dropdown" : ""}`,
228
+ onClick: link.comingSoon || hasDropdown ? void 0 : link.onClick,
229
+ children: [
230
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pn-navbar__link-effect" }),
231
+ /* @__PURE__ */ jsxRuntime.jsxs(
232
+ "div",
233
+ {
234
+ className: `pn-navbar__link-button ${link.comingSoon ? "pn-navbar__link-button--coming-soon" : ""}`,
235
+ "data-tooltip": link.tooltip,
236
+ children: [
237
+ link.label,
238
+ link.comingSoon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "pn-navbar__soon-label", children: "Soon" })
239
+ ]
240
+ }
241
+ ),
242
+ hasDropdown && /* @__PURE__ */ jsxRuntime.jsx(NavbarDropdown, { items: link.dropdown })
243
+ ]
244
+ },
245
+ `${link.label}-${index}`
246
+ );
247
+ }) });
248
+ };
249
+ var NavbarActionButton = ({
250
+ label,
251
+ onClick,
252
+ variant = "primary"
253
+ }) => {
254
+ return /* @__PURE__ */ jsxRuntime.jsx(
255
+ "button",
256
+ {
257
+ className: `pn-navbar__action-btn pn-navbar__action-btn--${variant}`,
258
+ onClick,
259
+ children: label
260
+ }
261
+ );
262
+ };
263
+ var NavbarMobileToggle = ({
264
+ onClick
265
+ }) => {
266
+ return /* @__PURE__ */ jsxRuntime.jsx(
267
+ "button",
268
+ {
269
+ className: "pn-navbar__mobile-toggle",
270
+ onClick,
271
+ "aria-label": "Open menu",
272
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
273
+ "svg",
274
+ {
275
+ width: "28",
276
+ height: "16",
277
+ viewBox: "0 0 28 16",
278
+ fill: "none",
279
+ xmlns: "http://www.w3.org/2000/svg",
280
+ children: [
281
+ /* @__PURE__ */ jsxRuntime.jsx(
282
+ "path",
283
+ {
284
+ d: "M2 1.64062H26",
285
+ stroke: "white",
286
+ strokeWidth: "2.52632",
287
+ strokeLinecap: "round"
288
+ }
289
+ ),
290
+ /* @__PURE__ */ jsxRuntime.jsx(
291
+ "path",
292
+ {
293
+ d: "M6 7.95654H26",
294
+ stroke: "white",
295
+ strokeWidth: "2.3062",
296
+ strokeLinecap: "round"
297
+ }
298
+ ),
299
+ /* @__PURE__ */ jsxRuntime.jsx(
300
+ "path",
301
+ {
302
+ d: "M10 14.272H26",
303
+ stroke: "white",
304
+ strokeWidth: "2.06273",
305
+ strokeLinecap: "round"
306
+ }
307
+ )
308
+ ]
309
+ }
310
+ )
311
+ }
312
+ );
313
+ };
314
+ var NavbarDrawer = ({
315
+ isOpen,
316
+ onClose,
317
+ links,
318
+ actionButton,
319
+ onLogoClick
320
+ }) => {
321
+ const drawerRef = react.useRef(null);
322
+ const isClosingRef = react.useRef(false);
323
+ const closeAnimation = [{ right: "0" }, { right: "-234px" }];
324
+ const closeTiming = { duration: 500, iterations: 1 };
325
+ const handleClose = () => {
326
+ if (isClosingRef.current) return;
327
+ isClosingRef.current = true;
328
+ if (drawerRef.current) {
329
+ drawerRef.current.animate(closeAnimation, closeTiming);
330
+ }
331
+ setTimeout(() => {
332
+ isClosingRef.current = false;
333
+ onClose();
334
+ }, 470);
335
+ };
336
+ react.useEffect(() => {
337
+ if (!isOpen) return;
338
+ const handleClickOutside = (event) => {
339
+ if (drawerRef.current && !drawerRef.current.contains(event.target)) {
340
+ handleClose();
341
+ }
342
+ };
343
+ const handleEscape = (event) => {
344
+ if (event.key === "Escape") {
345
+ handleClose();
346
+ }
347
+ };
348
+ document.addEventListener("click", handleClickOutside);
349
+ document.addEventListener("keydown", handleEscape);
350
+ return () => {
351
+ document.removeEventListener("click", handleClickOutside);
352
+ document.removeEventListener("keydown", handleEscape);
353
+ };
354
+ }, [isOpen]);
355
+ if (!isOpen) return null;
356
+ const flattenedLinks = links.flatMap((link) => {
357
+ if (link.dropdown && link.dropdown.length > 0) {
358
+ return link.dropdown.map((item) => ({
359
+ label: item.label,
360
+ onClick: item.onClick
361
+ }));
362
+ }
363
+ return [{ label: link.label, onClick: link.onClick }];
364
+ });
365
+ return /* @__PURE__ */ jsxRuntime.jsxs("aside", { className: "pn-navbar__drawer", ref: drawerRef, children: [
366
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pn-navbar__drawer-header", children: [
367
+ /* @__PURE__ */ jsxRuntime.jsxs(
368
+ "svg",
369
+ {
370
+ className: "pn-navbar__drawer-logo",
371
+ width: "100",
372
+ height: "39",
373
+ viewBox: "0 0 150 59",
374
+ fill: "none",
375
+ xmlns: "http://www.w3.org/2000/svg",
376
+ onClick: () => {
377
+ handleClose();
378
+ onLogoClick?.();
379
+ },
380
+ children: [
381
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { clipPath: "url(#clip_drawer)", children: [
382
+ /* @__PURE__ */ jsxRuntime.jsx(
383
+ "path",
384
+ {
385
+ d: "M20.3888 17.2495V40.9579H17.6122L3.38621 23.279V40.9604H0V17.252H2.77659L17.0026 34.9333V17.252H20.3888V17.2495Z",
386
+ fill: "white"
387
+ }
388
+ ),
389
+ /* @__PURE__ */ jsxRuntime.jsx(
390
+ "path",
391
+ {
392
+ d: "M46.1479 29.1061C46.1479 22.3189 51.3803 17.252 58.4982 17.252C65.6162 17.252 70.7819 22.2844 70.7819 29.1061C70.7819 35.9279 65.5495 40.9603 58.4982 40.9603C51.4469 40.9603 46.1479 35.8934 46.1479 29.1061ZM67.4722 29.1061C67.4722 23.9725 63.6318 20.1988 58.4982 20.1988C53.3646 20.1988 49.4576 23.9725 49.4576 29.1061C49.4576 34.2397 53.298 38.0134 58.4982 38.0134C63.6985 38.0134 67.4722 34.2397 67.4722 29.1061Z",
393
+ fill: "#7D6FF6"
394
+ }
395
+ ),
396
+ /* @__PURE__ */ jsxRuntime.jsx(
397
+ "path",
398
+ {
399
+ d: "M104.661 32.7638V40.9603H101.307V32.6972L91.8916 17.252H95.5147L103.102 29.7503L110.723 17.252H114.077L104.661 32.7638Z",
400
+ fill: "white"
401
+ }
402
+ ),
403
+ /* @__PURE__ */ jsxRuntime.jsx(
404
+ "path",
405
+ {
406
+ d: "M143.835 35.032H131.235L128.627 40.9603H125.137L135.873 17.252H139.227L149.998 40.9603H146.441L143.832 35.032H143.835ZM142.65 32.322L137.536 20.7048L132.422 32.322H142.65Z",
407
+ fill: "white"
408
+ }
409
+ )
410
+ ] }),
411
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsx("clipPath", { id: "clip_drawer", children: /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "150", height: "58.2097", fill: "white" }) }) })
412
+ ]
413
+ }
414
+ ),
415
+ /* @__PURE__ */ jsxRuntime.jsx(
416
+ "button",
417
+ {
418
+ className: "pn-navbar__drawer-close",
419
+ onClick: handleClose,
420
+ "aria-label": "Close menu",
421
+ children: /* @__PURE__ */ jsxRuntime.jsx(
422
+ "svg",
423
+ {
424
+ width: "17",
425
+ height: "17",
426
+ viewBox: "0 0 17 17",
427
+ fill: "none",
428
+ xmlns: "http://www.w3.org/2000/svg",
429
+ children: /* @__PURE__ */ jsxRuntime.jsx(
430
+ "path",
431
+ {
432
+ d: "M1 1L16 16M16 1L1 16",
433
+ stroke: "white",
434
+ strokeWidth: "2",
435
+ strokeLinecap: "round"
436
+ }
437
+ )
438
+ }
439
+ )
440
+ }
441
+ )
442
+ ] }),
443
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pn-navbar__drawer-links", children: flattenedLinks.map((link, index) => /* @__PURE__ */ jsxRuntime.jsx(
444
+ ExpandingText,
445
+ {
446
+ text: link.label,
447
+ onClick: () => {
448
+ handleClose();
449
+ link.onClick?.();
450
+ }
451
+ },
452
+ `${link.label}-${index}`
453
+ )) }),
454
+ actionButton && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pn-navbar__drawer-actions", children: /* @__PURE__ */ jsxRuntime.jsx(
455
+ "button",
456
+ {
457
+ className: `pn-navbar__drawer-btn pn-navbar__drawer-btn--${actionButton.variant || "primary"}`,
458
+ onClick: () => {
459
+ actionButton.onClick?.();
460
+ },
461
+ children: actionButton.label
462
+ }
463
+ ) })
464
+ ] });
465
+ };
466
+ var Navbar = ({
467
+ links,
468
+ actionButton,
469
+ leftSlot,
470
+ rightSlot,
471
+ onLogoClick,
472
+ onMobileMenuOpen,
473
+ mobileMenuOpen,
474
+ onMobileMenuClose
475
+ }) => {
476
+ const [internalDrawerOpen, setInternalDrawerOpen] = react.useState(false);
477
+ const isControlled = mobileMenuOpen !== void 0;
478
+ const drawerOpen = isControlled ? mobileMenuOpen : internalDrawerOpen;
479
+ const handleOpenDrawer = () => {
480
+ if (isControlled) {
481
+ onMobileMenuOpen?.();
482
+ } else {
483
+ setInternalDrawerOpen(true);
484
+ onMobileMenuOpen?.();
485
+ }
486
+ };
487
+ const handleCloseDrawer = () => {
488
+ if (isControlled) {
489
+ onMobileMenuClose?.();
490
+ } else {
491
+ setInternalDrawerOpen(false);
492
+ onMobileMenuClose?.();
493
+ }
494
+ };
495
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
496
+ /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "pn-navbar", children: [
497
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pn-navbar__bottom-line" }),
498
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pn-navbar__content", children: [
499
+ /* @__PURE__ */ jsxRuntime.jsx(NavbarLogo, { onClick: onLogoClick }),
500
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pn-navbar__items", children: [
501
+ /* @__PURE__ */ jsxRuntime.jsx(NavbarLinks, { links }),
502
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pn-navbar__slots", children: [
503
+ leftSlot,
504
+ actionButton && /* @__PURE__ */ jsxRuntime.jsx(
505
+ NavbarActionButton,
506
+ {
507
+ label: actionButton.label,
508
+ onClick: actionButton.onClick,
509
+ variant: actionButton.variant
510
+ }
511
+ ),
512
+ rightSlot
513
+ ] })
514
+ ] }),
515
+ /* @__PURE__ */ jsxRuntime.jsx(NavbarMobileToggle, { onClick: handleOpenDrawer })
516
+ ] })
517
+ ] }),
518
+ /* @__PURE__ */ jsxRuntime.jsx(
519
+ NavbarDrawer,
520
+ {
521
+ isOpen: drawerOpen,
522
+ onClose: handleCloseDrawer,
523
+ links,
524
+ actionButton,
525
+ onLogoClick
526
+ }
527
+ )
528
+ ] });
529
+ };
530
+
531
+ exports.ExpandingText = ExpandingText;
532
+ exports.Navbar = Navbar;
533
+ exports.NavbarActionButton = NavbarActionButton;
534
+ exports.NavbarDrawer = NavbarDrawer;
535
+ exports.NavbarDropdown = NavbarDropdown;
536
+ exports.NavbarLinks = NavbarLinks;
537
+ exports.NavbarLogo = NavbarLogo;
538
+ exports.NavbarMobileToggle = NavbarMobileToggle;
539
+ exports.getMobileOperatingSystem = getMobileOperatingSystem;
540
+ //# sourceMappingURL=index.js.map
541
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils.ts","../src/components/NavbarLogo.tsx","../src/components/ExpandingText.tsx","../src/components/NavbarDropdown.tsx","../src/components/NavbarLinks.tsx","../src/components/NavbarActionButton.tsx","../src/components/NavbarMobileToggle.tsx","../src/components/NavbarDrawer.tsx","../src/components/Navbar.tsx"],"names":["jsxs","jsx","useState","useRef","useEffect","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["export type MobileOS = \"Windows Phone\" | \"Android\" | \"iOS\" | \"unknown\";\n\nexport const getMobileOperatingSystem = (): MobileOS => {\n if (typeof navigator === \"undefined\") return \"unknown\";\n \n const userAgent = navigator.userAgent || navigator.vendor;\n\n // Windows Phone must come first because its UA also contains \"Android\"\n if (/windows phone/i.test(userAgent)) {\n return \"Windows Phone\";\n }\n\n if (/android/i.test(userAgent)) {\n return \"Android\";\n }\n\n // iOS detection\n if (/iPad|iPhone|iPod/.test(userAgent)) {\n return \"iOS\";\n }\n\n return \"unknown\";\n};\n\n","import React from \"react\";\nimport { getMobileOperatingSystem } from \"../utils\";\n\ninterface NavbarLogoProps {\n onClick?: () => void;\n}\n\nexport const NavbarLogo: React.FC<NavbarLogoProps> = ({ onClick }) => {\n const OS = getMobileOperatingSystem();\n\n // Static logo for iOS (no animation support issues)\n const staticLogo = (\n <svg\n className=\"pn-navbar__logo\"\n width=\"150\"\n height=\"59\"\n viewBox=\"0 0 150 59\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n onClick={onClick}\n >\n <g clipPath=\"url(#clip0_static)\">\n <path\n d=\"M20.3888 17.2495V40.9579H17.6122L3.38621 23.279V40.9604H0V17.252H2.77659L17.0026 34.9333V17.252H20.3888V17.2495Z\"\n fill=\"white\"\n />\n <path\n d=\"M46.1479 29.1061C46.1479 22.3189 51.3803 17.252 58.4982 17.252C65.6162 17.252 70.7819 22.2844 70.7819 29.1061C70.7819 35.9279 65.5495 40.9603 58.4982 40.9603C51.4469 40.9603 46.1479 35.8934 46.1479 29.1061ZM67.4722 29.1061C67.4722 23.9725 63.6318 20.1988 58.4982 20.1988C53.3646 20.1988 49.4576 23.9725 49.4576 29.1061C49.4576 34.2397 53.298 38.0134 58.4982 38.0134C63.6985 38.0134 67.4722 34.2397 67.4722 29.1061Z\"\n fill=\"#7D6FF6\"\n />\n <path\n d=\"M104.661 32.7638V40.9603H101.307V32.6972L91.8916 17.252H95.5147L103.102 29.7503L110.723 17.252H114.077L104.661 32.7638Z\"\n fill=\"white\"\n />\n <path\n d=\"M143.835 35.032H131.235L128.627 40.9603H125.137L135.873 17.252H139.227L149.998 40.9603H146.441L143.832 35.032H143.835ZM142.65 32.322L137.536 20.7048L132.422 32.322H142.65Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_static\">\n <rect width=\"150\" height=\"58.2097\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n\n // Animated logo with rotating circles\n const animatedLogo = (\n <svg\n className=\"pn-navbar__logo\"\n width=\"150\"\n height=\"59\"\n viewBox=\"0 0 150 59\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n onClick={onClick}\n >\n <g clipPath=\"url(#clip0_2469_22451)\" className=\"pn-navbar__logo-circle\">\n <path\n d=\"M32.2082 31.9272C33.7676 31.9272 35.0317 30.6631 35.0317 29.1038C35.0317 27.5444 33.7676 26.2803 32.2082 26.2803C30.6489 26.2803 29.3848 27.5444 29.3848 29.1038C29.3848 30.6631 30.6489 31.9272 32.2082 31.9272Z\"\n fill=\"white\"\n />\n <path\n d=\"M84.7688 31.9272C86.3282 31.9272 87.5923 30.6631 87.5923 29.1038C87.5923 27.5444 86.3282 26.2803 84.7688 26.2803C83.2094 26.2803 81.9453 27.5444 81.9453 29.1038C81.9453 30.6631 83.2094 31.9272 84.7688 31.9272Z\"\n fill=\"white\"\n />\n <path\n d=\"M39.9065 13.3447C41.4659 13.3447 42.73 12.0806 42.73 10.5212C42.73 8.96187 41.4659 7.69775 39.9065 7.69775C38.3471 7.69775 37.083 8.96187 37.083 10.5212C37.083 12.0806 38.3471 13.3447 39.9065 13.3447Z\"\n fill=\"white\"\n />\n <path\n d=\"M77.0706 50.5117C78.6299 50.5117 79.894 49.2476 79.894 47.6882C79.894 46.1289 78.6299 44.8647 77.0706 44.8647C75.5112 44.8647 74.2471 46.1289 74.2471 47.6882C74.2471 49.2476 75.5112 50.5117 77.0706 50.5117Z\"\n fill=\"white\"\n />\n <path\n d=\"M58.4885 5.64697C60.0479 5.64697 61.312 4.38285 61.312 2.82348C61.312 1.26412 60.0479 0 58.4885 0C56.9292 0 55.665 1.26412 55.665 2.82348C55.665 4.38285 56.9292 5.64697 58.4885 5.64697Z\"\n fill=\"white\"\n />\n <path\n d=\"M58.4885 58.2095C60.0479 58.2095 61.312 56.9454 61.312 55.386C61.312 53.8266 60.0479 52.5625 58.4885 52.5625C56.9292 52.5625 55.665 53.8266 55.665 55.386C55.665 56.9454 56.9292 58.2095 58.4885 58.2095Z\"\n fill=\"white\"\n />\n <path\n d=\"M58.5007 5.64697C60.0601 5.64697 61.3242 4.38285 61.3242 2.82348C61.3242 1.26412 60.0601 0 58.5007 0C56.9414 0 55.6772 1.26412 55.6772 2.82348C55.6772 4.38285 56.9414 5.64697 58.5007 5.64697Z\"\n fill=\"white\"\n />\n <path\n d=\"M58.5007 58.2095C60.0601 58.2095 61.3242 56.9454 61.3242 55.386C61.3242 53.8266 60.0601 52.5625 58.5007 52.5625C56.9414 52.5625 55.6772 53.8266 55.6772 55.386C55.6772 56.9454 56.9414 58.2095 58.5007 58.2095Z\"\n fill=\"white\"\n />\n <path\n d=\"M77.72 14.0063C79.2793 14.0063 80.5435 12.7422 80.5435 11.1829C80.5435 9.62349 79.2793 8.35938 77.72 8.35938C76.1606 8.35938 74.8965 9.62349 74.8965 11.1829C74.8965 12.7422 76.1606 14.0063 77.72 14.0063Z\"\n fill=\"white\"\n />\n <path\n d=\"M39.2795 49.8501C40.8389 49.8501 42.103 48.586 42.103 47.0266C42.103 45.4672 40.8389 44.2031 39.2795 44.2031C37.7202 44.2031 36.4561 45.4672 36.4561 47.0266C36.4561 48.586 37.7202 49.8501 39.2795 49.8501Z\"\n fill=\"white\"\n />\n </g>\n <g clipPath=\"url(#clip0_2469_22451)\">\n <path\n d=\"M20.3888 17.2495V40.9579H17.6122L3.38621 23.279V40.9604H0V17.252H2.77659L17.0026 34.9333V17.252H20.3888V17.2495Z\"\n fill=\"white\"\n />\n <path\n d=\"M46.1479 29.1061C46.1479 22.3189 51.3803 17.252 58.4982 17.252C65.6162 17.252 70.7819 22.2844 70.7819 29.1061C70.7819 35.9279 65.5495 40.9603 58.4982 40.9603C51.4469 40.9603 46.1479 35.8934 46.1479 29.1061ZM67.4722 29.1061C67.4722 23.9725 63.6318 20.1988 58.4982 20.1988C53.3646 20.1988 49.4576 23.9725 49.4576 29.1061C49.4576 34.2397 53.298 38.0134 58.4982 38.0134C63.6985 38.0134 67.4722 34.2397 67.4722 29.1061Z\"\n fill=\"#7D6FF6\"\n />\n <path\n d=\"M104.661 32.7638V40.9603H101.307V32.6972L91.8916 17.252H95.5147L103.102 29.7503L110.723 17.252H114.077L104.661 32.7638Z\"\n fill=\"white\"\n />\n <path\n d=\"M143.835 35.032H131.235L128.627 40.9603H125.137L135.873 17.252H139.227L149.998 40.9603H146.441L143.832 35.032H143.835ZM142.65 32.322L137.536 20.7048L132.422 32.322H142.65Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_2469_22451\">\n <rect width=\"150\" height=\"58.2097\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n\n return OS === \"iOS\" ? staticLogo : animatedLogo;\n};\n\nexport default NavbarLogo;\n\n","import React, { useState } from \"react\";\n\ninterface ExpandingTextProps {\n text: string;\n onClick?: () => void;\n}\n\nexport const ExpandingText: React.FC<ExpandingTextProps> = ({\n text,\n onClick,\n}) => {\n const [hover, setHover] = useState(false);\n\n return (\n <div\n className=\"pn-navbar__expanding-text-wrapper\"\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n onClick={onClick}\n >\n <p\n className={`pn-navbar__expanding-text ${\n hover\n ? \"pn-navbar__expanding-text--active\"\n : \"pn-navbar__expanding-text--idle\"\n }`}\n >\n {text}\n </p>\n </div>\n );\n};\n\nexport default ExpandingText;\n\n","import React from \"react\";\nimport { DropdownItem } from \"../types\";\nimport { ExpandingText } from \"./ExpandingText\";\n\ninterface NavbarDropdownProps {\n items: DropdownItem[];\n}\n\nexport const NavbarDropdown: React.FC<NavbarDropdownProps> = ({ items }) => {\n return (\n <div className=\"pn-navbar__dropdown\">\n <div className=\"pn-navbar__dropdown-wrapper\">\n <div className=\"pn-navbar__dropdown-content\">\n {items.map((item, index) => (\n <ExpandingText\n key={`${item.label}-${index}`}\n text={item.label}\n onClick={item.onClick}\n />\n ))}\n </div>\n </div>\n </div>\n );\n};\n\nexport default NavbarDropdown;\n\n","import React from \"react\";\nimport { NavLinkItem } from \"../types\";\nimport { NavbarDropdown } from \"./NavbarDropdown\";\n\ninterface NavbarLinksProps {\n links: NavLinkItem[];\n}\n\nexport const NavbarLinks: React.FC<NavbarLinksProps> = ({ links }) => {\n return (\n <ul className=\"pn-navbar__links\">\n {links.map((link, index) => {\n const hasDropdown = link.dropdown && link.dropdown.length > 0;\n\n return (\n <li\n key={`${link.label}-${index}`}\n className={`pn-navbar__link-item ${\n hasDropdown ? \"pn-navbar__link-item--has-dropdown\" : \"\"\n }`}\n onClick={\n link.comingSoon || hasDropdown ? undefined : link.onClick\n }\n >\n <div className=\"pn-navbar__link-effect\" />\n <div\n className={`pn-navbar__link-button ${\n link.comingSoon ? \"pn-navbar__link-button--coming-soon\" : \"\"\n }`}\n data-tooltip={link.tooltip}\n >\n {link.label}\n {link.comingSoon && (\n <span className=\"pn-navbar__soon-label\">Soon</span>\n )}\n </div>\n {hasDropdown && <NavbarDropdown items={link.dropdown!} />}\n </li>\n );\n })}\n </ul>\n );\n};\n\nexport default NavbarLinks;\n\n","import React from \"react\";\nimport { ActionButtonProps } from \"../types\";\n\nexport const NavbarActionButton: React.FC<ActionButtonProps> = ({\n label,\n onClick,\n variant = \"primary\",\n}) => {\n return (\n <button\n className={`pn-navbar__action-btn pn-navbar__action-btn--${variant}`}\n onClick={onClick}\n >\n {label}\n </button>\n );\n};\n\nexport default NavbarActionButton;\n\n","import React from \"react\";\n\ninterface NavbarMobileToggleProps {\n onClick?: () => void;\n}\n\nexport const NavbarMobileToggle: React.FC<NavbarMobileToggleProps> = ({\n onClick,\n}) => {\n return (\n <button\n className=\"pn-navbar__mobile-toggle\"\n onClick={onClick}\n aria-label=\"Open menu\"\n >\n <svg\n width=\"28\"\n height=\"16\"\n viewBox=\"0 0 28 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2 1.64062H26\"\n stroke=\"white\"\n strokeWidth=\"2.52632\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M6 7.95654H26\"\n stroke=\"white\"\n strokeWidth=\"2.3062\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M10 14.272H26\"\n stroke=\"white\"\n strokeWidth=\"2.06273\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n );\n};\n\nexport default NavbarMobileToggle;\n\n","import React, { useRef, useEffect } from \"react\";\nimport { DrawerProps } from \"../types\";\nimport { ExpandingText } from \"./ExpandingText\";\n\nexport const NavbarDrawer: React.FC<DrawerProps> = ({\n isOpen,\n onClose,\n links,\n actionButton,\n onLogoClick,\n}) => {\n const drawerRef = useRef<HTMLElement>(null);\n const isClosingRef = useRef(false);\n\n const closeAnimation = [{ right: \"0\" }, { right: \"-234px\" }];\n const closeTiming = { duration: 500, iterations: 1 };\n\n const handleClose = () => {\n if (isClosingRef.current) return;\n isClosingRef.current = true;\n\n if (drawerRef.current) {\n drawerRef.current.animate(closeAnimation, closeTiming);\n }\n\n setTimeout(() => {\n isClosingRef.current = false;\n onClose();\n }, 470);\n };\n\n useEffect(() => {\n if (!isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n drawerRef.current &&\n !drawerRef.current.contains(event.target as Node)\n ) {\n handleClose();\n }\n };\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n handleClose();\n }\n };\n\n document.addEventListener(\"click\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n\n return () => {\n document.removeEventListener(\"click\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n // Flatten dropdown items for mobile display\n const flattenedLinks = links.flatMap((link) => {\n if (link.dropdown && link.dropdown.length > 0) {\n return link.dropdown.map((item) => ({\n label: item.label,\n onClick: item.onClick,\n }));\n }\n return [{ label: link.label, onClick: link.onClick }];\n });\n\n return (\n <aside className=\"pn-navbar__drawer\" ref={drawerRef}>\n <div className=\"pn-navbar__drawer-header\">\n {/* Static Noya logo for drawer */}\n <svg\n className=\"pn-navbar__drawer-logo\"\n width=\"100\"\n height=\"39\"\n viewBox=\"0 0 150 59\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n onClick={() => {\n handleClose();\n onLogoClick?.();\n }}\n >\n <g clipPath=\"url(#clip_drawer)\">\n <path\n d=\"M20.3888 17.2495V40.9579H17.6122L3.38621 23.279V40.9604H0V17.252H2.77659L17.0026 34.9333V17.252H20.3888V17.2495Z\"\n fill=\"white\"\n />\n <path\n d=\"M46.1479 29.1061C46.1479 22.3189 51.3803 17.252 58.4982 17.252C65.6162 17.252 70.7819 22.2844 70.7819 29.1061C70.7819 35.9279 65.5495 40.9603 58.4982 40.9603C51.4469 40.9603 46.1479 35.8934 46.1479 29.1061ZM67.4722 29.1061C67.4722 23.9725 63.6318 20.1988 58.4982 20.1988C53.3646 20.1988 49.4576 23.9725 49.4576 29.1061C49.4576 34.2397 53.298 38.0134 58.4982 38.0134C63.6985 38.0134 67.4722 34.2397 67.4722 29.1061Z\"\n fill=\"#7D6FF6\"\n />\n <path\n d=\"M104.661 32.7638V40.9603H101.307V32.6972L91.8916 17.252H95.5147L103.102 29.7503L110.723 17.252H114.077L104.661 32.7638Z\"\n fill=\"white\"\n />\n <path\n d=\"M143.835 35.032H131.235L128.627 40.9603H125.137L135.873 17.252H139.227L149.998 40.9603H146.441L143.832 35.032H143.835ZM142.65 32.322L137.536 20.7048L132.422 32.322H142.65Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip_drawer\">\n <rect width=\"150\" height=\"58.2097\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n\n {/* Close button */}\n <button\n className=\"pn-navbar__drawer-close\"\n onClick={handleClose}\n aria-label=\"Close menu\"\n >\n <svg\n width=\"17\"\n height=\"17\"\n viewBox=\"0 0 17 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 1L16 16M16 1L1 16\"\n stroke=\"white\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </div>\n\n <div className=\"pn-navbar__drawer-links\">\n {flattenedLinks.map((link, index) => (\n <ExpandingText\n key={`${link.label}-${index}`}\n text={link.label}\n onClick={() => {\n handleClose();\n link.onClick?.();\n }}\n />\n ))}\n </div>\n\n {actionButton && (\n <div className=\"pn-navbar__drawer-actions\">\n <button\n className={`pn-navbar__drawer-btn pn-navbar__drawer-btn--${\n actionButton.variant || \"primary\"\n }`}\n onClick={() => {\n actionButton.onClick?.();\n }}\n >\n {actionButton.label}\n </button>\n </div>\n )}\n </aside>\n );\n};\n\nexport default NavbarDrawer;\n\n","import React, { useState } from \"react\";\nimport { NavbarProps } from \"../types\";\nimport { NavbarLogo } from \"./NavbarLogo\";\nimport { NavbarLinks } from \"./NavbarLinks\";\nimport { NavbarActionButton } from \"./NavbarActionButton\";\nimport { NavbarMobileToggle } from \"./NavbarMobileToggle\";\nimport { NavbarDrawer } from \"./NavbarDrawer\";\n\nexport const Navbar: React.FC<NavbarProps> = ({\n links,\n actionButton,\n leftSlot,\n rightSlot,\n onLogoClick,\n onMobileMenuOpen,\n mobileMenuOpen,\n onMobileMenuClose,\n}) => {\n // Internal state for uncontrolled mode\n const [internalDrawerOpen, setInternalDrawerOpen] = useState(false);\n\n // Determine if we're in controlled or uncontrolled mode\n const isControlled = mobileMenuOpen !== undefined;\n const drawerOpen = isControlled ? mobileMenuOpen : internalDrawerOpen;\n\n const handleOpenDrawer = () => {\n if (isControlled) {\n onMobileMenuOpen?.();\n } else {\n setInternalDrawerOpen(true);\n onMobileMenuOpen?.();\n }\n };\n\n const handleCloseDrawer = () => {\n if (isControlled) {\n onMobileMenuClose?.();\n } else {\n setInternalDrawerOpen(false);\n onMobileMenuClose?.();\n }\n };\n\n return (\n <>\n <section className=\"pn-navbar\">\n <div className=\"pn-navbar__bottom-line\" />\n <div className=\"pn-navbar__content\">\n <NavbarLogo onClick={onLogoClick} />\n\n <div className=\"pn-navbar__items\">\n <NavbarLinks links={links} />\n\n <div className=\"pn-navbar__slots\">\n {leftSlot}\n {actionButton && (\n <NavbarActionButton\n label={actionButton.label}\n onClick={actionButton.onClick}\n variant={actionButton.variant}\n />\n )}\n {rightSlot}\n </div>\n </div>\n\n <NavbarMobileToggle onClick={handleOpenDrawer} />\n </div>\n </section>\n\n <NavbarDrawer\n isOpen={drawerOpen}\n onClose={handleCloseDrawer}\n links={links}\n actionButton={actionButton}\n onLogoClick={onLogoClick}\n />\n </>\n );\n};\n\nexport default Navbar;\n\n"]}