styled-hairomin 0.2.7 → 0.3.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.
@@ -0,0 +1,2213 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var styled = require('styled-components');
5
+ var fa = require('react-icons/fa');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+ var Link = require('next/link');
8
+
9
+ const variantStyles$4 = {
10
+ elevated: {
11
+ background: "#fff"},
12
+ bordered: {
13
+ background: "#f8f9fa"},
14
+ gradient: {
15
+ background: "linear-gradient(135deg, #0066cc 0%, #004080 100%)"}
16
+ };
17
+ const ElevatedCard = styled.div`
18
+ width: 100%;
19
+ max-width: 350px;
20
+ background: ${variantStyles$4.elevated.background};
21
+ border-radius: 20px;
22
+ overflow: hidden;
23
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15);
24
+ transition: all 0.4s ease;
25
+ cursor: pointer;
26
+
27
+ &:hover {
28
+ transform: translateY(-10px);
29
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.25);
30
+ }
31
+
32
+ @media (max-width: 768px) {
33
+ max-width: 100%;
34
+ }
35
+ `;
36
+ const ElevatedImageWrapper = styled.div`
37
+ position: relative;
38
+ height: 220px;
39
+ overflow: hidden;
40
+ `;
41
+ const ElevatedImage = styled.img`
42
+ width: 100%;
43
+ height: 100%;
44
+ object-fit: cover;
45
+ transition: transform 0.4s;
46
+
47
+ ${ElevatedCard}:hover & {
48
+ transform: scale(1.1);
49
+ }
50
+ `;
51
+ const Badge = styled.div`
52
+ position: absolute;
53
+ top: 15px;
54
+ right: 15px;
55
+ background: rgba(0, 102, 204, 0.95);
56
+ color: #fff;
57
+ padding: 0.5rem 1rem;
58
+ border-radius: 25px;
59
+ font-weight: 700;
60
+ font-size: 14px;
61
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
62
+ `;
63
+ const ElevatedContent = styled.div`
64
+ padding: 1.5rem;
65
+ `;
66
+ const ElevatedTitle = styled.h3`
67
+ margin: 0 0 0.8rem;
68
+ font-size: 1.5rem;
69
+ font-weight: 700;
70
+ color: #0066cc;
71
+ `;
72
+ const ElevatedFeatures = styled.div`
73
+ display: flex;
74
+ gap: 1.2rem;
75
+ margin: 1rem 0;
76
+ color: #7f8c8d;
77
+ font-size: 14px;
78
+ `;
79
+ const Feature = styled.div`
80
+ display: flex;
81
+ align-items: center;
82
+ gap: 0.4rem;
83
+ `;
84
+ const ElevatedFooter = styled.div`
85
+ display: flex;
86
+ justify-content: space-between;
87
+ align-items: center;
88
+ margin-top: 1.2rem;
89
+ padding-top: 1rem;
90
+ border-top: 1px solid #ecf0f1;
91
+ `;
92
+ const Price = styled.div`
93
+ font-size: 1.6rem;
94
+ font-weight: 800;
95
+ color: #0066cc;
96
+
97
+ span {
98
+ font-size: 0.9rem;
99
+ font-weight: 400;
100
+ color: #95a5a6;
101
+ }
102
+
103
+ @media (max-width: 768px) {
104
+ font-size: 1.3rem;
105
+
106
+ span {
107
+ font-size: 0.8rem;
108
+ }
109
+ }
110
+ `;
111
+ const Rating = styled.div`
112
+ display: flex;
113
+ align-items: center;
114
+ gap: 0.3rem;
115
+ color: #f39c12;
116
+ font-weight: 600;
117
+ `;
118
+
119
+ /* ====== VARIANT BORDERED: Card dengan outline dan ikon ====== */
120
+ const BorderedCard = styled.div`
121
+ width: 100%;
122
+ max-width: 380px;
123
+ background: ${variantStyles$4.bordered.background};
124
+ border: 3px solid #dee2e6;
125
+ border-radius: 16px;
126
+ overflow: hidden;
127
+ transition: all 0.3s ease;
128
+ cursor: pointer;
129
+
130
+ &:hover {
131
+ border-color: #6c757d;
132
+ box-shadow: 0 8px 24px rgba(108, 117, 125, 0.2);
133
+ }
134
+
135
+ @media (max-width: 768px) {
136
+ max-width: 100%;
137
+ }
138
+ `;
139
+ const BorderedContent = styled.div`
140
+ padding: 1.8rem;
141
+ `;
142
+ const BorderedHeader = styled.div`
143
+ display: flex;
144
+ justify-content: space-between;
145
+ align-items: start;
146
+ margin-bottom: 1rem;
147
+ `;
148
+ const BorderedTitle = styled.h3`
149
+ margin: 0;
150
+ font-size: 1.4rem;
151
+ font-weight: 700;
152
+ color: #0066cc;
153
+ `;
154
+ const BorderedLocation = styled.div`
155
+ display: flex;
156
+ align-items: center;
157
+ gap: 0.4rem;
158
+ color: #6c757d;
159
+ font-size: 14px;
160
+ margin: 0.5rem 0 1rem;
161
+ `;
162
+ const BorderedImage = styled.img`
163
+ width: 100%;
164
+ height: 200px;
165
+ object-fit: cover;
166
+ border-radius: 12px;
167
+ margin: 1rem 0;
168
+ `;
169
+ const BorderedDescription = styled.p`
170
+ color: #495057;
171
+ font-size: 14px;
172
+ line-height: 1.6;
173
+ margin: 1rem 0;
174
+ `;
175
+ const BorderedFooter = styled.div`
176
+ display: flex;
177
+ justify-content: space-between;
178
+ align-items: center;
179
+ margin-top: 1.5rem;
180
+ padding-top: 1rem;
181
+ border-top: 2px solid #dee2e6;
182
+ flex-wrap: wrap;
183
+ gap: 1rem;
184
+
185
+ @media (max-width: 480px) {
186
+ flex-direction: column;
187
+ align-items: stretch;
188
+ text-align: center;
189
+ }
190
+ `;
191
+ const BorderedPrice = styled.div`
192
+ font-size: 1.8rem;
193
+ font-weight: 800;
194
+ color: #0066cc;
195
+
196
+ @media (max-width: 768px) {
197
+ font-size: 1.5rem;
198
+ }
199
+ `;
200
+ const BookButton = styled.button`
201
+ background: #0066cc;
202
+ color: white;
203
+ border: none;
204
+ padding: 0.7rem 1.5rem;
205
+ border-radius: 8px;
206
+ font-weight: 600;
207
+ cursor: pointer;
208
+ transition: all 0.3s;
209
+
210
+ &:hover {
211
+ background: #0052a3;
212
+ transform: scale(1.05);
213
+ }
214
+ `;
215
+
216
+ /* ====== VARIANT GRADIENT: Card gradien berwarna ====== */
217
+ const GradientCard = styled.div`
218
+ width: 100%;
219
+ max-width: 320px;
220
+ background: ${variantStyles$4.gradient.background};
221
+ border-radius: 24px;
222
+ overflow: visible;
223
+ position: relative;
224
+ box-shadow: 0 15px 45px rgba(245, 87, 108, 0.4);
225
+ transition: all 0.4s ease;
226
+ cursor: pointer;
227
+
228
+ &:hover {
229
+ transform: scale(1.05) rotate(2deg);
230
+ }
231
+
232
+ @media (max-width: 768px) {
233
+ max-width: 100%;
234
+
235
+ &:hover {
236
+ transform: none;
237
+ }
238
+ }
239
+ `;
240
+ const GradientImageWrapper = styled.div`
241
+ padding: 1.5rem 1.5rem 0;
242
+ `;
243
+ const GradientImage = styled.img`
244
+ width: 100%;
245
+ height: 240px;
246
+ object-fit: cover;
247
+ border-radius: 16px;
248
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);
249
+ `;
250
+ const GradientContent = styled.div`
251
+ padding: 1.5rem;
252
+ color: white;
253
+ `;
254
+ const GradientTitle = styled.h3`
255
+ margin: 0 0 0.5rem;
256
+ font-size: 1.6rem;
257
+ font-weight: 800;
258
+ text-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
259
+ `;
260
+ const GradientDescription = styled.p`
261
+ margin: 0.5rem 0 1rem;
262
+ opacity: 0.95;
263
+ font-size: 14px;
264
+ line-height: 1.5;
265
+ `;
266
+ const GradientFooter = styled.div`
267
+ display: flex;
268
+ justify-content: space-between;
269
+ align-items: center;
270
+ `;
271
+ const GradientPrice = styled.div`
272
+ font-size: 2rem;
273
+ font-weight: 900;
274
+ text-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
275
+
276
+ @media (max-width: 768px) {
277
+ font-size: 1.5rem;
278
+ }
279
+ `;
280
+ const GradientRating = styled.div`
281
+ background: rgba(255, 255, 255, 0.25);
282
+ backdrop-filter: blur(10px);
283
+ padding: 0.5rem 1rem;
284
+ border-radius: 20px;
285
+ font-weight: 700;
286
+ display: flex;
287
+ align-items: center;
288
+ gap: 0.3rem;
289
+ `;
290
+ function CardVariant({
291
+ variant = "elevated",
292
+ data
293
+ }) {
294
+ switch (variant) {
295
+ case "elevated":
296
+ return /*#__PURE__*/jsxRuntime.jsxs(ElevatedCard, {
297
+ children: [/*#__PURE__*/jsxRuntime.jsxs(ElevatedImageWrapper, {
298
+ children: [/*#__PURE__*/jsxRuntime.jsx(ElevatedImage, {
299
+ src: data.image,
300
+ alt: data.title
301
+ }), /*#__PURE__*/jsxRuntime.jsx(Badge, {
302
+ children: data.badge
303
+ })]
304
+ }), /*#__PURE__*/jsxRuntime.jsxs(ElevatedContent, {
305
+ children: [/*#__PURE__*/jsxRuntime.jsx(ElevatedTitle, {
306
+ children: data.title
307
+ }), /*#__PURE__*/jsxRuntime.jsxs(ElevatedFeatures, {
308
+ children: [/*#__PURE__*/jsxRuntime.jsxs(Feature, {
309
+ children: [/*#__PURE__*/jsxRuntime.jsx(fa.FaBed, {}), " Kasur Lembut"]
310
+ }), /*#__PURE__*/jsxRuntime.jsxs(Feature, {
311
+ children: [/*#__PURE__*/jsxRuntime.jsx(fa.FaWifi, {}), " WiFi Gratis"]
312
+ })]
313
+ }), /*#__PURE__*/jsxRuntime.jsxs(ElevatedFooter, {
314
+ children: [/*#__PURE__*/jsxRuntime.jsxs(Price, {
315
+ children: [data.price, /*#__PURE__*/jsxRuntime.jsx("span", {
316
+ children: "/malam"
317
+ })]
318
+ }), /*#__PURE__*/jsxRuntime.jsxs(Rating, {
319
+ children: [/*#__PURE__*/jsxRuntime.jsx(fa.FaStar, {}), " ", data.rating]
320
+ })]
321
+ })]
322
+ })]
323
+ });
324
+ case "bordered":
325
+ return /*#__PURE__*/jsxRuntime.jsx(BorderedCard, {
326
+ children: /*#__PURE__*/jsxRuntime.jsxs(BorderedContent, {
327
+ children: [/*#__PURE__*/jsxRuntime.jsx(BorderedHeader, {
328
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
329
+ children: [/*#__PURE__*/jsxRuntime.jsx(BorderedTitle, {
330
+ children: data.title
331
+ }), /*#__PURE__*/jsxRuntime.jsxs(BorderedLocation, {
332
+ children: [/*#__PURE__*/jsxRuntime.jsx(fa.FaMapMarkerAlt, {}), " ", data.location]
333
+ })]
334
+ })
335
+ }), /*#__PURE__*/jsxRuntime.jsx(BorderedImage, {
336
+ src: data.image,
337
+ alt: data.title
338
+ }), /*#__PURE__*/jsxRuntime.jsx(BorderedDescription, {
339
+ children: data.description
340
+ }), /*#__PURE__*/jsxRuntime.jsxs(BorderedFooter, {
341
+ children: [/*#__PURE__*/jsxRuntime.jsx(BorderedPrice, {
342
+ children: data.price
343
+ }), /*#__PURE__*/jsxRuntime.jsx(BookButton, {
344
+ children: "Pesan Sekarang"
345
+ })]
346
+ })]
347
+ })
348
+ });
349
+ case "gradient":
350
+ return /*#__PURE__*/jsxRuntime.jsxs(GradientCard, {
351
+ children: [/*#__PURE__*/jsxRuntime.jsx(GradientImageWrapper, {
352
+ children: /*#__PURE__*/jsxRuntime.jsx(GradientImage, {
353
+ src: data.image,
354
+ alt: data.title
355
+ })
356
+ }), /*#__PURE__*/jsxRuntime.jsxs(GradientContent, {
357
+ children: [/*#__PURE__*/jsxRuntime.jsx(GradientTitle, {
358
+ children: data.title
359
+ }), /*#__PURE__*/jsxRuntime.jsx(GradientDescription, {
360
+ children: data.description
361
+ }), /*#__PURE__*/jsxRuntime.jsxs(GradientFooter, {
362
+ children: [/*#__PURE__*/jsxRuntime.jsx(GradientPrice, {
363
+ children: data.price
364
+ }), /*#__PURE__*/jsxRuntime.jsxs(GradientRating, {
365
+ children: ["\u2605 ", data.rating]
366
+ })]
367
+ })]
368
+ })]
369
+ });
370
+ default:
371
+ return null;
372
+ }
373
+ }
374
+
375
+ const variantStyles$3 = {
376
+ solid: {
377
+ background: "#0066cc",
378
+ color: "#fff",
379
+ hover: "#0052a3"
380
+ },
381
+ outline: {
382
+ background: "transparent",
383
+ color: "#0066cc",
384
+ border: "#0066cc",
385
+ hover: "#0066cc"
386
+ },
387
+ pill: {
388
+ background: "linear-gradient(135deg, #0066cc 0%, #004080 100%)",
389
+ color: "#fff"}
390
+ };
391
+ const SolidButton = styled.button`
392
+ display: inline-flex;
393
+ align-items: center;
394
+ justify-content: center;
395
+ gap: 0.8rem;
396
+ padding: 1rem 2.2rem;
397
+ font-size: 16px;
398
+ font-weight: 700;
399
+ border-radius: 12px;
400
+ border: none;
401
+ cursor: pointer;
402
+ transition: all 0.3s ease;
403
+ font-family: "Poppins", sans-serif;
404
+ background: ${variantStyles$3.solid.background};
405
+ color: ${variantStyles$3.solid.color};
406
+ box-shadow: 0 4px 15px rgba(0, 102, 204, 0.3);
407
+ text-transform: uppercase;
408
+ letter-spacing: 0.5px;
409
+
410
+ &:hover {
411
+ background: ${variantStyles$3.solid.hover};
412
+ transform: translateY(-3px);
413
+ box-shadow: 0 6px 20px rgba(0, 102, 204, 0.4);
414
+ }
415
+
416
+ &:active {
417
+ transform: translateY(-1px);
418
+ }
419
+
420
+ svg {
421
+ font-size: 18px;
422
+ transition: transform 0.3s;
423
+ flex-shrink: 0;
424
+ }
425
+
426
+ &:hover svg {
427
+ transform: translateX(5px);
428
+ }
429
+
430
+ @media (max-width: 768px) {
431
+ padding: 0.8rem 1.5rem;
432
+ font-size: 13px;
433
+ gap: 0.5rem;
434
+ width: 100%;
435
+
436
+ svg {
437
+ font-size: 14px;
438
+ }
439
+ }
440
+ `;
441
+
442
+ /* ====== VARIANT OUTLINE: Tombol dengan border dan efek fill saat hover ====== */
443
+ const OutlineButton = styled.button`
444
+ display: inline-flex;
445
+ align-items: center;
446
+ justify-content: center;
447
+ gap: 0.6rem;
448
+ padding: 0.9rem 2rem;
449
+ font-size: 15px;
450
+ font-weight: 600;
451
+ border-radius: 8px;
452
+ border: 2px solid ${variantStyles$3.outline.border};
453
+ background: ${variantStyles$3.outline.background};
454
+ color: ${variantStyles$3.outline.color};
455
+ cursor: pointer;
456
+ transition: all 0.3s ease;
457
+ font-family: "Inter", sans-serif;
458
+ position: relative;
459
+ overflow: hidden;
460
+
461
+ &::before {
462
+ content: "";
463
+ position: absolute;
464
+ top: 0;
465
+ left: -100%;
466
+ width: 100%;
467
+ height: 100%;
468
+ background: ${variantStyles$3.outline.hover};
469
+ transition: left 0.4s ease;
470
+ z-index: 0;
471
+ }
472
+
473
+ &:hover::before {
474
+ left: 0;
475
+ }
476
+
477
+ &:hover {
478
+ color: white;
479
+ border-color: ${variantStyles$3.outline.hover};
480
+ }
481
+
482
+ span, svg {
483
+ position: relative;
484
+ z-index: 1;
485
+ }
486
+
487
+ svg {
488
+ transition: transform 0.3s;
489
+ flex-shrink: 0;
490
+ }
491
+
492
+ &:hover svg {
493
+ transform: scale(1.2);
494
+ }
495
+
496
+ @media (max-width: 768px) {
497
+ padding: 0.7rem 1.5rem;
498
+ font-size: 13px;
499
+ gap: 0.5rem;
500
+ width: 100%;
501
+ }
502
+ `;
503
+
504
+ /* ====== VARIANT PILL: Tombol bulat dengan gradien ====== */
505
+ const PillButton = styled.button`
506
+ display: inline-flex;
507
+ align-items: center;
508
+ justify-content: center;
509
+ gap: 0.7rem;
510
+ padding: 1.1rem 2.5rem;
511
+ font-size: 15px;
512
+ font-weight: 700;
513
+ border-radius: 50px;
514
+ border: none;
515
+ cursor: pointer;
516
+ transition: all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);
517
+ font-family: "Poppins", sans-serif;
518
+ background: ${variantStyles$3.pill.background};
519
+ color: ${variantStyles$3.pill.color};
520
+ box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4);
521
+ position: relative;
522
+ overflow: hidden;
523
+
524
+ &::after {
525
+ content: "";
526
+ position: absolute;
527
+ top: 50%;
528
+ left: 50%;
529
+ width: 0;
530
+ height: 0;
531
+ border-radius: 50%;
532
+ background: rgba(255, 255, 255, 0.2);
533
+ transform: translate(-50%, -50%);
534
+ transition: width 0.6s, height 0.6s;
535
+ }
536
+
537
+ &:hover::after {
538
+ width: 300px;
539
+ height: 300px;
540
+ }
541
+
542
+ &:hover {
543
+ transform: scale(1.05);
544
+ box-shadow: 0 12px 35px rgba(0, 102, 204, 0.6);
545
+ }
546
+
547
+ span, svg {
548
+ position: relative;
549
+ z-index: 1;
550
+ }
551
+
552
+ svg {
553
+ animation: bounce 2s infinite;
554
+ flex-shrink: 0;
555
+ }
556
+
557
+ @keyframes bounce {
558
+ 0%, 100% { transform: translateY(0); }
559
+ 50% { transform: translateY(-5px); }
560
+ }
561
+
562
+ @media (max-width: 768px) {
563
+ padding: 0.9rem 2rem;
564
+ font-size: 13px;
565
+ gap: 0.5rem;
566
+ width: 100%;
567
+ }
568
+ `;
569
+ function ButtonVariant({
570
+ variant = "solid",
571
+ onClick,
572
+ data
573
+ }) {
574
+ switch (variant) {
575
+ case "solid":
576
+ return /*#__PURE__*/jsxRuntime.jsxs(SolidButton, {
577
+ onClick: onClick,
578
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
579
+ children: data?.label || "Konfirmasi Pemesanan"
580
+ }), data?.icon || /*#__PURE__*/jsxRuntime.jsx(fa.FaChevronRight, {})]
581
+ });
582
+ case "outline":
583
+ return /*#__PURE__*/jsxRuntime.jsxs(OutlineButton, {
584
+ onClick: onClick,
585
+ children: [data?.icon || /*#__PURE__*/jsxRuntime.jsx(fa.FaCheck, {}), /*#__PURE__*/jsxRuntime.jsx("span", {
586
+ children: data?.label || "Tambah ke Favorit"
587
+ })]
588
+ });
589
+ case "pill":
590
+ return /*#__PURE__*/jsxRuntime.jsxs(PillButton, {
591
+ onClick: onClick,
592
+ children: [data?.icon || /*#__PURE__*/jsxRuntime.jsx(fa.FaDownload, {}), /*#__PURE__*/jsxRuntime.jsx("span", {
593
+ children: data?.label || "Unduh"
594
+ })]
595
+ });
596
+ default:
597
+ return null;
598
+ }
599
+ }
600
+
601
+ const variantStyles$2 = {
602
+ modern: {
603
+ background: "linear-gradient(135deg, #0066cc 0%, #003d99 100%)",
604
+ color: "#fff"
605
+ },
606
+ minimal: {
607
+ background: "#ffffff",
608
+ color: "#0066cc",
609
+ border: "1px solid #e1e8ed"
610
+ },
611
+ glassmorphism: {
612
+ background: "rgba(0, 102, 204, 0.15)",
613
+ color: "#fff"}
614
+ };
615
+
616
+ // ====== VARIANT MODERN: Elevated header with icons ======
617
+ const ModernHeader = styled.header`
618
+ display: flex;
619
+ justify-content: space-between;
620
+ align-items: center;
621
+ padding: 1rem 2.5rem;
622
+ background: ${variantStyles$2.modern.background};
623
+ color: ${variantStyles$2.modern.color};
624
+ box-shadow: 0 8px 32px rgba(0, 102, 204, 0.3);
625
+ border-radius: 20px;
626
+ margin-bottom: 1.5rem;
627
+ font-family: "Poppins", sans-serif;
628
+ max-width: 100%;
629
+ box-sizing: border-box;
630
+
631
+ @media (max-width: 768px) {
632
+ flex-direction: row;
633
+ gap: 0.5rem;
634
+ padding: 0.6rem 0.8rem;
635
+ border-radius: 12px;
636
+ }
637
+ `;
638
+ const ModernLogo = styled.div`
639
+ font-size: 1.6rem;
640
+ font-weight: 800;
641
+ letter-spacing: -1px;
642
+ display: flex;
643
+ align-items: center;
644
+ gap: 0.5rem;
645
+
646
+ &::before {
647
+ content: "🏨";
648
+ font-size: 2rem;
649
+ }
650
+
651
+ @media (max-width: 768px) {
652
+ font-size: 1rem;
653
+ gap: 0.3rem;
654
+
655
+ &::before {
656
+ font-size: 1.2rem;
657
+ }
658
+ }
659
+ `;
660
+ const ModernNav = styled.nav`
661
+ display: flex;
662
+ gap: 2rem;
663
+ align-items: center;
664
+
665
+ @media (max-width: 768px) {
666
+ display: none;
667
+ }
668
+ `;
669
+ const ModernLink = styled.a`
670
+ color: inherit;
671
+ text-decoration: none;
672
+ font-weight: 500;
673
+ font-size: 15px;
674
+ position: relative;
675
+ transition: all 0.3s;
676
+
677
+ &::after {
678
+ content: "";
679
+ position: absolute;
680
+ bottom: -5px;
681
+ left: 0;
682
+ width: 0;
683
+ height: 3px;
684
+ background: white;
685
+ transition: width 0.3s;
686
+ }
687
+
688
+ &:hover::after {
689
+ width: 100%;
690
+ }
691
+ `;
692
+ const IconButton = styled.button`
693
+ background: rgba(255, 255, 255, 0.2);
694
+ border: none;
695
+ color: white;
696
+ width: 40px;
697
+ height: 40px;
698
+ border-radius: 50%;
699
+ display: flex;
700
+ align-items: center;
701
+ justify-content: center;
702
+ cursor: pointer;
703
+ transition: all 0.3s;
704
+
705
+ &:hover {
706
+ background: rgba(255, 255, 255, 0.3);
707
+ transform: scale(1.1);
708
+ }
709
+
710
+ @media (max-width: 768px) {
711
+ width: 28px;
712
+ height: 28px;
713
+
714
+ svg {
715
+ font-size: 11px;
716
+ }
717
+ }
718
+ `;
719
+ const IconGroup = styled.div`
720
+ display: flex;
721
+ gap: 0.8rem;
722
+
723
+ @media (max-width: 768px) {
724
+ gap: 0.3rem;
725
+ }
726
+ `;
727
+
728
+ // ====== VARIANT MINIMAL: Clean centered header ======
729
+ const MinimalHeader = styled.header`
730
+ background: ${variantStyles$2.minimal.background};
731
+ color: ${variantStyles$2.minimal.color};
732
+ border: ${variantStyles$2.minimal.border};
733
+ padding: 1.5rem 2rem;
734
+ border-radius: 0;
735
+ border-left: none;
736
+ border-right: none;
737
+ margin-bottom: 1.5rem;
738
+ font-family: "Inter", sans-serif;
739
+ max-width: 100%;
740
+ box-sizing: border-box;
741
+
742
+ @media (max-width: 768px) {
743
+ padding: 0.6rem 0.8rem;
744
+ }
745
+ `;
746
+ const MinimalContainer = styled.div`
747
+ max-width: 1200px;
748
+ margin: 0 auto;
749
+ display: flex;
750
+ justify-content: space-between;
751
+ align-items: center;
752
+ `;
753
+ const MinimalLogo = styled.div`
754
+ font-size: 1.3rem;
755
+ font-weight: 700;
756
+ color: #2c3e50;
757
+ text-transform: uppercase;
758
+ letter-spacing: 2px;
759
+
760
+ @media (max-width: 768px) {
761
+ font-size: 0.9rem;
762
+ letter-spacing: 1px;
763
+ }
764
+ `;
765
+ const MinimalNav = styled.nav`
766
+ display: flex;
767
+ gap: 3rem;
768
+
769
+ @media (max-width: 768px) {
770
+ display: none;
771
+ }
772
+ `;
773
+ const MinimalLink = styled.a`
774
+ color: #7f8c8d;
775
+ text-decoration: none;
776
+ font-weight: 500;
777
+ font-size: 14px;
778
+ text-transform: uppercase;
779
+ letter-spacing: 1px;
780
+ transition: color 0.3s;
781
+
782
+ &:hover {
783
+ color: #2c3e50;
784
+ }
785
+ `;
786
+ const MinimalButton = styled.button`
787
+ background: #0066cc;
788
+ color: white;
789
+ border: none;
790
+ padding: 0.7rem 1.8rem;
791
+ border-radius: 25px;
792
+ font-weight: 600;
793
+ cursor: pointer;
794
+ transition: all 0.3s;
795
+ font-size: 14px;
796
+
797
+ &:hover {
798
+ background: #0052a3;
799
+ transform: translateY(-2px);
800
+ box-shadow: 0 4px 12px rgba(0, 102, 204, 0.3);
801
+ }
802
+
803
+ @media (max-width: 768px) {
804
+ padding: 0.4rem 0.8rem;
805
+ font-size: 10px;
806
+ }
807
+ `;
808
+ const MinimalMobileMenu = styled.button`
809
+ display: none;
810
+ background: #f0f4f8;
811
+ border: none;
812
+ color: #2c3e50;
813
+ width: 32px;
814
+ height: 32px;
815
+ border-radius: 6px;
816
+ align-items: center;
817
+ justify-content: center;
818
+ cursor: pointer;
819
+ transition: all 0.3s;
820
+
821
+ &:hover {
822
+ background: #e2e8f0;
823
+ }
824
+
825
+ @media (max-width: 768px) {
826
+ display: flex;
827
+ }
828
+ `;
829
+ const MinimalActions = styled.div`
830
+ display: flex;
831
+ align-items: center;
832
+ gap: 0.5rem;
833
+ `;
834
+
835
+ // ====== VARIANT GLASSMORPHISM: Glass effect with backdrop blur ======
836
+ const GlassHeader = styled.header`
837
+ background: ${variantStyles$2.glassmorphism.background};
838
+ backdrop-filter: blur(10px);
839
+ -webkit-backdrop-filter: blur(10px);
840
+ border: 1px solid rgba(255, 255, 255, 0.2);
841
+ color: ${variantStyles$2.glassmorphism.color};
842
+ padding: 1.2rem 2rem;
843
+ border-radius: 16px;
844
+ margin-bottom: 1.5rem;
845
+ font-family: "Poppins", sans-serif;
846
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
847
+ display: flex;
848
+ justify-content: space-between;
849
+ align-items: center;
850
+ max-width: 100%;
851
+ box-sizing: border-box;
852
+
853
+ @media (max-width: 768px) {
854
+ padding: 0.6rem 0.8rem;
855
+ border-radius: 12px;
856
+ }
857
+ `;
858
+ const GlassLogo = styled.div`
859
+ font-size: 1.5rem;
860
+ font-weight: 700;
861
+ background: linear-gradient(135deg, #fff, #a8edea);
862
+ -webkit-background-clip: text;
863
+ -webkit-text-fill-color: transparent;
864
+ background-clip: text;
865
+
866
+ @media (max-width: 768px) {
867
+ font-size: 0.9rem;
868
+ }
869
+ `;
870
+ const GlassNav = styled.nav`
871
+ display: flex;
872
+ gap: 1.5rem;
873
+ align-items: center;
874
+
875
+ @media (max-width: 768px) {
876
+ display: none;
877
+ }
878
+ `;
879
+ const GlassLink = styled.a`
880
+ color: rgba(255, 255, 255, 0.9);
881
+ text-decoration: none;
882
+ font-weight: 500;
883
+ padding: 0.5rem 1rem;
884
+ border-radius: 8px;
885
+ transition: all 0.3s;
886
+
887
+ &:hover {
888
+ background: rgba(255, 255, 255, 0.15);
889
+ }
890
+ `;
891
+ const GlassSearch = styled.div`
892
+ display: flex;
893
+ align-items: center;
894
+ background: rgba(255, 255, 255, 0.1);
895
+ border-radius: 25px;
896
+ padding: 0.5rem 1.2rem;
897
+ gap: 0.5rem;
898
+ border: 1px solid rgba(255, 255, 255, 0.2);
899
+
900
+ input {
901
+ background: transparent;
902
+ border: none;
903
+ outline: none;
904
+ color: white;
905
+ font-size: 14px;
906
+
907
+ &::placeholder {
908
+ color: rgba(255, 255, 255, 0.6);
909
+ }
910
+ }
911
+
912
+ @media (max-width: 768px) {
913
+ display: none;
914
+ }
915
+ `;
916
+ const GlassMobileNav = styled.nav`
917
+ display: none;
918
+
919
+ @media (max-width: 768px) {
920
+ display: flex;
921
+ gap: 0.3rem;
922
+ align-items: center;
923
+ }
924
+ `;
925
+ const GlassMobileLink = styled.a`
926
+ color: rgba(255, 255, 255, 0.9);
927
+ text-decoration: none;
928
+ font-weight: 500;
929
+ font-size: 9px;
930
+ padding: 0.25rem 0.4rem;
931
+ border-radius: 4px;
932
+ background: rgba(255, 255, 255, 0.1);
933
+ transition: all 0.3s;
934
+
935
+ &:hover {
936
+ background: rgba(255, 255, 255, 0.2);
937
+ }
938
+ `;
939
+
940
+ // Helper function to normalize links (support both string and { label, href } format)
941
+ const normalizeLink$1 = link => {
942
+ if (typeof link === 'string') {
943
+ return {
944
+ label: link,
945
+ href: '#'
946
+ };
947
+ }
948
+ return {
949
+ label: link.label,
950
+ href: link.href || '#'
951
+ };
952
+ };
953
+ function HeaderVariant({
954
+ variant = "modern",
955
+ data
956
+ }) {
957
+ const defaultData = {
958
+ modern: {
959
+ logo: "ResortHub",
960
+ links: ["Beranda", "Kamar", "Fasilitas", "Hubungi"]
961
+ },
962
+ minimal: {
963
+ logo: "RESORT",
964
+ links: ["Beranda", "Kamar", "Tentang", "Hubungi"],
965
+ buttonText: "Pesan Sekarang"
966
+ },
967
+ glassmorphism: {
968
+ logo: "✦ Resort Surgawi",
969
+ links: ["Beranda", "Jelajahi", "Layanan"],
970
+ searchPlaceholder: "Cari..."
971
+ }
972
+ };
973
+ const headerData = data || defaultData[variant];
974
+ switch (variant) {
975
+ case "modern":
976
+ return /*#__PURE__*/jsxRuntime.jsxs(ModernHeader, {
977
+ children: [/*#__PURE__*/jsxRuntime.jsx(ModernLogo, {
978
+ children: headerData.logo
979
+ }), /*#__PURE__*/jsxRuntime.jsx(ModernNav, {
980
+ children: headerData.links.map((link, idx) => {
981
+ const {
982
+ label,
983
+ href
984
+ } = normalizeLink$1(link);
985
+ return /*#__PURE__*/jsxRuntime.jsx(ModernLink, {
986
+ href: href,
987
+ children: label
988
+ }, idx);
989
+ })
990
+ }), /*#__PURE__*/jsxRuntime.jsxs(IconGroup, {
991
+ children: [/*#__PURE__*/jsxRuntime.jsx(IconButton, {
992
+ children: /*#__PURE__*/jsxRuntime.jsx(fa.FaSearch, {})
993
+ }), /*#__PURE__*/jsxRuntime.jsx(IconButton, {
994
+ children: /*#__PURE__*/jsxRuntime.jsx(fa.FaBell, {})
995
+ }), /*#__PURE__*/jsxRuntime.jsx(IconButton, {
996
+ children: /*#__PURE__*/jsxRuntime.jsx(fa.FaBars, {})
997
+ })]
998
+ })]
999
+ });
1000
+ case "minimal":
1001
+ return /*#__PURE__*/jsxRuntime.jsx(MinimalHeader, {
1002
+ children: /*#__PURE__*/jsxRuntime.jsxs(MinimalContainer, {
1003
+ children: [/*#__PURE__*/jsxRuntime.jsx(MinimalLogo, {
1004
+ children: headerData.logo
1005
+ }), /*#__PURE__*/jsxRuntime.jsx(MinimalNav, {
1006
+ children: headerData.links.map((link, idx) => {
1007
+ const {
1008
+ label,
1009
+ href
1010
+ } = normalizeLink$1(link);
1011
+ return /*#__PURE__*/jsxRuntime.jsx(MinimalLink, {
1012
+ href: href,
1013
+ children: label
1014
+ }, idx);
1015
+ })
1016
+ }), /*#__PURE__*/jsxRuntime.jsxs(MinimalActions, {
1017
+ children: [/*#__PURE__*/jsxRuntime.jsx(MinimalButton, {
1018
+ children: headerData.buttonText
1019
+ }), /*#__PURE__*/jsxRuntime.jsx(MinimalMobileMenu, {
1020
+ children: /*#__PURE__*/jsxRuntime.jsx(fa.FaBars, {})
1021
+ })]
1022
+ })]
1023
+ })
1024
+ });
1025
+ case "glassmorphism":
1026
+ return /*#__PURE__*/jsxRuntime.jsxs(GlassHeader, {
1027
+ children: [/*#__PURE__*/jsxRuntime.jsx(GlassLogo, {
1028
+ children: headerData.logo
1029
+ }), /*#__PURE__*/jsxRuntime.jsxs(GlassNav, {
1030
+ children: [headerData.links.map((link, idx) => {
1031
+ const {
1032
+ label,
1033
+ href
1034
+ } = normalizeLink$1(link);
1035
+ return /*#__PURE__*/jsxRuntime.jsx(GlassLink, {
1036
+ href: href,
1037
+ children: label
1038
+ }, idx);
1039
+ }), /*#__PURE__*/jsxRuntime.jsxs(GlassSearch, {
1040
+ children: [/*#__PURE__*/jsxRuntime.jsx(fa.FaSearch, {
1041
+ size: 14
1042
+ }), /*#__PURE__*/jsxRuntime.jsx("input", {
1043
+ type: "text",
1044
+ placeholder: headerData.searchPlaceholder
1045
+ })]
1046
+ })]
1047
+ }), /*#__PURE__*/jsxRuntime.jsx(GlassMobileNav, {
1048
+ children: headerData.links.map((link, idx) => {
1049
+ const {
1050
+ label,
1051
+ href
1052
+ } = normalizeLink$1(link);
1053
+ return /*#__PURE__*/jsxRuntime.jsx(GlassMobileLink, {
1054
+ href: href,
1055
+ children: label
1056
+ }, idx);
1057
+ })
1058
+ })]
1059
+ });
1060
+ default:
1061
+ return null;
1062
+ }
1063
+ }
1064
+
1065
+ const variantStyles$1 = {
1066
+ stacked: {
1067
+ background: "#0a2e5a",
1068
+ color: "#ecf0f1"
1069
+ },
1070
+ columns: {
1071
+ background: "linear-gradient(135deg, #0066cc 0%, #004080 100%)",
1072
+ color: "#fff"
1073
+ },
1074
+ centered: {
1075
+ background: "#0a2e5a",
1076
+ color: "#eee"
1077
+ }
1078
+ };
1079
+
1080
+ /* ====== VARIANT STACKED: Vertical sections ====== */
1081
+ const StackedFooter = styled.footer`
1082
+ background: ${variantStyles$1.stacked.background};
1083
+ color: ${variantStyles$1.stacked.color};
1084
+ padding: 3rem 2rem 1.5rem;
1085
+ font-family: "Inter", sans-serif;
1086
+ border-top: 4px solid #0066cc;
1087
+ max-width: 100%;
1088
+ box-sizing: border-box;
1089
+ overflow-x: hidden;
1090
+
1091
+ @media (max-width: 768px) {
1092
+ padding: 1rem 0.5rem 0.8rem;
1093
+ }
1094
+ `;
1095
+ const StackedSection = styled.div`
1096
+ max-width: 1200px;
1097
+ margin: 0 auto 2rem;
1098
+ padding-bottom: 2rem;
1099
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
1100
+
1101
+ @media (max-width: 768px) {
1102
+ margin: 0 auto 1rem;
1103
+ padding-bottom: 1rem;
1104
+ }
1105
+ `;
1106
+ const StackedBrand = styled.div`
1107
+ margin-bottom: 1.5rem;
1108
+
1109
+ h2 {
1110
+ font-size: 2rem;
1111
+ font-weight: 800;
1112
+ margin: 0 0 0.5rem;
1113
+ color: #3498db;
1114
+ }
1115
+
1116
+ p {
1117
+ margin: 0;
1118
+ opacity: 0.8;
1119
+ font-size: 14px;
1120
+ max-width: 400px;
1121
+ }
1122
+
1123
+ @media (max-width: 768px) {
1124
+ text-align: center;
1125
+ margin-bottom: 1rem;
1126
+
1127
+ h2 {
1128
+ font-size: 1.3rem;
1129
+ }
1130
+
1131
+ p {
1132
+ max-width: 100%;
1133
+ font-size: 12px;
1134
+ }
1135
+ }
1136
+ `;
1137
+ const StackedLinks = styled.div`
1138
+ display: grid;
1139
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
1140
+ gap: 2rem;
1141
+ margin: 2rem 0;
1142
+
1143
+ @media (max-width: 576px) {
1144
+ grid-template-columns: repeat(3, 1fr);
1145
+ gap: 0.5rem;
1146
+ margin: 1rem 0;
1147
+ text-align: center;
1148
+ justify-items: center;
1149
+ }
1150
+ `;
1151
+ const LinkGroup = styled.div`
1152
+ h4 {
1153
+ font-size: 1rem;
1154
+ font-weight: 700;
1155
+ margin: 0 0 1rem;
1156
+ text-transform: uppercase;
1157
+ letter-spacing: 1px;
1158
+ }
1159
+
1160
+ a {
1161
+ display: block;
1162
+ color: inherit;
1163
+ text-decoration: none;
1164
+ margin: 0.6rem 0;
1165
+ opacity: 0.8;
1166
+ font-size: 14px;
1167
+ transition: all 0.3s;
1168
+
1169
+ &:hover {
1170
+ opacity: 1;
1171
+ padding-left: 5px;
1172
+ color: #3498db;
1173
+ }
1174
+ }
1175
+
1176
+ @media (max-width: 576px) {
1177
+ h4 {
1178
+ font-size: 0.75rem;
1179
+ margin: 0 0 0.5rem;
1180
+ }
1181
+
1182
+ a {
1183
+ margin: 0.3rem 0;
1184
+ font-size: 11px;
1185
+ }
1186
+ }
1187
+ `;
1188
+ const StackedBottom = styled.div`
1189
+ max-width: 1200px;
1190
+ margin: 0 auto;
1191
+ display: flex;
1192
+ justify-content: space-between;
1193
+ align-items: center;
1194
+ padding-top: 1.5rem;
1195
+ font-size: 13px;
1196
+ opacity: 0.7;
1197
+
1198
+ @media (max-width: 768px) {
1199
+ flex-direction: column;
1200
+ gap: 0.8rem;
1201
+ text-align: center;
1202
+ font-size: 10px;
1203
+ padding-top: 1rem;
1204
+ }
1205
+ `;
1206
+ const SocialIcons = styled.div`
1207
+ display: flex;
1208
+ gap: 1rem;
1209
+
1210
+ a {
1211
+ color: inherit;
1212
+ width: 36px;
1213
+ height: 36px;
1214
+ display: flex;
1215
+ align-items: center;
1216
+ justify-content: center;
1217
+ border-radius: 50%;
1218
+ background: rgba(255, 255, 255, 0.1);
1219
+ transition: all 0.3s;
1220
+
1221
+ &:hover {
1222
+ background: #3498db;
1223
+ transform: translateY(-3px);
1224
+ }
1225
+ }
1226
+
1227
+ @media (max-width: 576px) {
1228
+ gap: 0.5rem;
1229
+
1230
+ a {
1231
+ width: 28px;
1232
+ height: 28px;
1233
+ font-size: 12px;
1234
+ }
1235
+ }
1236
+ `;
1237
+
1238
+ /* ====== VARIANT COLUMNS: Multi-column layout ====== */
1239
+ const ColumnsFooter = styled.footer`
1240
+ background: ${variantStyles$1.columns.background};
1241
+ color: ${variantStyles$1.columns.color};
1242
+ padding: 4rem 3rem 2rem;
1243
+ font-family: "Poppins", sans-serif;
1244
+ max-width: 100%;
1245
+ box-sizing: border-box;
1246
+ overflow-x: hidden;
1247
+
1248
+ @media (max-width: 768px) {
1249
+ padding: 1rem 0.5rem 0.8rem;
1250
+ }
1251
+ `;
1252
+ const ColumnsGrid = styled.div`
1253
+ max-width: 1200px;
1254
+ margin: 0 auto;
1255
+ display: grid;
1256
+ grid-template-columns: 2fr 1fr 1fr 1fr;
1257
+ gap: 3rem;
1258
+ margin-bottom: 3rem;
1259
+
1260
+ @media (max-width: 968px) {
1261
+ grid-template-columns: 1fr 1fr;
1262
+ gap: 2rem;
1263
+ }
1264
+
1265
+ @media (max-width: 576px) {
1266
+ grid-template-columns: 1fr 1fr;
1267
+ gap: 1rem;
1268
+ margin-bottom: 1.5rem;
1269
+ }
1270
+ `;
1271
+ const ColumnBox = styled.div`
1272
+ h3 {
1273
+ font-size: 1.2rem;
1274
+ font-weight: 700;
1275
+ margin: 0 0 1.5rem;
1276
+ position: relative;
1277
+ padding-bottom: 0.8rem;
1278
+
1279
+ &::after {
1280
+ content: "";
1281
+ position: absolute;
1282
+ bottom: 0;
1283
+ left: 0;
1284
+ width: 50px;
1285
+ height: 3px;
1286
+ background: linear-gradient(90deg, #667eea, #764ba2);
1287
+ }
1288
+ }
1289
+
1290
+ p {
1291
+ margin: 0.8rem 0;
1292
+ opacity: 0.85;
1293
+ font-size: 14px;
1294
+ line-height: 1.7;
1295
+ }
1296
+
1297
+ a {
1298
+ display: block;
1299
+ color: inherit;
1300
+ text-decoration: none;
1301
+ margin: 0.7rem 0;
1302
+ opacity: 0.8;
1303
+ font-size: 14px;
1304
+ transition: all 0.3s;
1305
+
1306
+ &:hover {
1307
+ opacity: 1;
1308
+ color: #667eea;
1309
+ transform: translateX(5px);
1310
+ }
1311
+ }
1312
+
1313
+ @media (max-width: 576px) {
1314
+ h3 {
1315
+ font-size: 0.9rem;
1316
+ margin: 0 0 0.8rem;
1317
+ padding-bottom: 0.5rem;
1318
+
1319
+ &::after {
1320
+ width: 30px;
1321
+ height: 2px;
1322
+ }
1323
+ }
1324
+
1325
+ p {
1326
+ font-size: 11px;
1327
+ margin: 0.4rem 0;
1328
+ line-height: 1.5;
1329
+ }
1330
+
1331
+ a {
1332
+ font-size: 11px;
1333
+ margin: 0.4rem 0;
1334
+ }
1335
+ }
1336
+ `;
1337
+ const ContactItem = styled.div`
1338
+ display: flex;
1339
+ align-items: center;
1340
+ gap: 0.8rem;
1341
+ margin: 1rem 0;
1342
+ font-size: 14px;
1343
+
1344
+ svg {
1345
+ color: #667eea;
1346
+ font-size: 16px;
1347
+ }
1348
+ `;
1349
+ const ColumnsDivider = styled.div`
1350
+ max-width: 1200px;
1351
+ margin: 0 auto;
1352
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
1353
+ padding-top: 2rem;
1354
+ display: flex;
1355
+ justify-content: space-between;
1356
+ align-items: center;
1357
+ font-size: 13px;
1358
+ opacity: 0.7;
1359
+
1360
+ @media (max-width: 768px) {
1361
+ flex-direction: column;
1362
+ gap: 1rem;
1363
+ text-align: center;
1364
+ }
1365
+ `;
1366
+
1367
+ /* ====== VARIANT CENTERED: Center-aligned footer ====== */
1368
+ const CenteredFooter = styled.footer`
1369
+ background: ${variantStyles$1.centered.background};
1370
+ color: ${variantStyles$1.centered.color};
1371
+ padding: 3rem 2rem;
1372
+ font-family: "Poppins", sans-serif;
1373
+ text-align: center;
1374
+ max-width: 100%;
1375
+ box-sizing: border-box;
1376
+ overflow-x: hidden;
1377
+
1378
+ @media (max-width: 768px) {
1379
+ padding: 1.5rem 0.5rem;
1380
+ }
1381
+ `;
1382
+ const CenteredContent = styled.div`
1383
+ max-width: 800px;
1384
+ margin: 0 auto;
1385
+ `;
1386
+ const CenteredLogo = styled.div`
1387
+ font-size: 2.5rem;
1388
+ font-weight: 900;
1389
+ margin-bottom: 1rem;
1390
+ background: linear-gradient(135deg, #667eea, #764ba2);
1391
+ -webkit-background-clip: text;
1392
+ -webkit-text-fill-color: transparent;
1393
+ background-clip: text;
1394
+ `;
1395
+ const CenteredTagline = styled.p`
1396
+ font-size: 16px;
1397
+ opacity: 0.8;
1398
+ margin: 1rem 0 2rem;
1399
+ line-height: 1.6;
1400
+ `;
1401
+ const CenteredNav = styled.nav`
1402
+ display: flex;
1403
+ justify-content: center;
1404
+ gap: 2rem;
1405
+ margin: 2rem 0;
1406
+ flex-wrap: wrap;
1407
+
1408
+ a {
1409
+ color: inherit;
1410
+ text-decoration: none;
1411
+ font-weight: 500;
1412
+ font-size: 15px;
1413
+ transition: all 0.3s;
1414
+
1415
+ &:hover {
1416
+ color: #667eea;
1417
+ }
1418
+ }
1419
+ `;
1420
+ const CenteredSocial = styled.div`
1421
+ display: flex;
1422
+ justify-content: center;
1423
+ gap: 1.5rem;
1424
+ margin: 2.5rem 0;
1425
+
1426
+ a {
1427
+ color: inherit;
1428
+ width: 45px;
1429
+ height: 45px;
1430
+ display: flex;
1431
+ align-items: center;
1432
+ justify-content: center;
1433
+ border-radius: 50%;
1434
+ border: 2px solid rgba(255, 255, 255, 0.2);
1435
+ transition: all 0.3s;
1436
+ font-size: 18px;
1437
+
1438
+ &:hover {
1439
+ background: linear-gradient(135deg, #667eea, #764ba2);
1440
+ border-color: transparent;
1441
+ transform: scale(1.1);
1442
+ }
1443
+ }
1444
+ `;
1445
+ const CenteredCopyright = styled.div`
1446
+ margin-top: 2rem;
1447
+ padding-top: 2rem;
1448
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
1449
+ font-size: 13px;
1450
+ opacity: 0.6;
1451
+ `;
1452
+
1453
+ // Helper function to normalize links (support both string and { label, href } format)
1454
+ const normalizeLink = link => {
1455
+ if (typeof link === 'string') {
1456
+ return {
1457
+ label: link,
1458
+ href: '#'
1459
+ };
1460
+ }
1461
+ return {
1462
+ label: link.label,
1463
+ href: link.href || '#'
1464
+ };
1465
+ };
1466
+ function FooterVariant({
1467
+ variant = "stacked",
1468
+ data
1469
+ }) {
1470
+ const defaultData = {
1471
+ stacked: {
1472
+ brandName: "Paradise Resort",
1473
+ brandDesc: "Rasakan kemewahan dan kenyamanan di jantung surga. Liburan impian Anda menanti.",
1474
+ linkGroups: [{
1475
+ title: "Tautan Cepat",
1476
+ links: ["Beranda", "Kamar", "Fasilitas", "Galeri"]
1477
+ }, {
1478
+ title: "Layanan",
1479
+ links: ["Spa & Wellness", "Restoran", "Bar Kolam", "Aktivitas"]
1480
+ }, {
1481
+ title: "Bantuan",
1482
+ links: ["Hubungi Kami", "FAQ", "Kebijakan Privasi", "Syarat & Ketentuan"]
1483
+ }],
1484
+ copyright: "© 2025 Paradise Resort. Hak cipta dilindungi."
1485
+ },
1486
+ columns: {
1487
+ aboutTitle: "Tentang Resort",
1488
+ aboutDesc: "Resort tepi pantai premium yang menawarkan fasilitas kelas dunia, layanan luar biasa, dan pengalaman tak terlupakan untuk semua tamu.",
1489
+ phone: "+62 (555) 123-4567",
1490
+ email: "info@paradiseresort.com",
1491
+ address: "Jl. Pantai No. 123, Pulau Tropis",
1492
+ columns: [{
1493
+ title: "Jelajahi",
1494
+ links: ["Akomodasi", "Kuliner", "Acara", "Pernikahan", "Penawaran"]
1495
+ }, {
1496
+ title: "Kebijakan",
1497
+ links: ["Kebijakan Pemesanan", "Pembatalan", "Privasi", "Syarat & Ketentuan", "Peta Situs"]
1498
+ }, {
1499
+ title: "Newsletter",
1500
+ desc: "Berlangganan untuk penawaran eksklusif dan info terbaru"
1501
+ }]
1502
+ },
1503
+ centered: {
1504
+ logo: "✦ PARADISE ✦",
1505
+ tagline: "Tempat kemewahan bertemu ketenangan. Temukan pelarian sempurna Anda di destinasi resort kelas dunia kami.",
1506
+ links: ["Beranda", "Kamar", "Kuliner", "Spa", "Acara", "Kontak"],
1507
+ copyright: "© 2025 Paradise Resort. Hak cipta dilindungi. | Kebijakan Privasi | Syarat Penggunaan"
1508
+ }
1509
+ };
1510
+ const footerData = data || defaultData[variant];
1511
+ switch (variant) {
1512
+ case "stacked":
1513
+ return /*#__PURE__*/jsxRuntime.jsxs(StackedFooter, {
1514
+ children: [/*#__PURE__*/jsxRuntime.jsxs(StackedSection, {
1515
+ children: [/*#__PURE__*/jsxRuntime.jsxs(StackedBrand, {
1516
+ children: [/*#__PURE__*/jsxRuntime.jsx("h2", {
1517
+ children: footerData.brandName
1518
+ }), /*#__PURE__*/jsxRuntime.jsx("p", {
1519
+ children: footerData.brandDesc
1520
+ })]
1521
+ }), /*#__PURE__*/jsxRuntime.jsx(StackedLinks, {
1522
+ children: footerData.linkGroups.map((group, idx) => /*#__PURE__*/jsxRuntime.jsxs(LinkGroup, {
1523
+ children: [/*#__PURE__*/jsxRuntime.jsx("h4", {
1524
+ children: group.title
1525
+ }), group.links.map((link, linkIdx) => {
1526
+ const {
1527
+ label,
1528
+ href
1529
+ } = normalizeLink(link);
1530
+ return /*#__PURE__*/jsxRuntime.jsx("a", {
1531
+ href: href,
1532
+ children: label
1533
+ }, linkIdx);
1534
+ })]
1535
+ }, idx))
1536
+ })]
1537
+ }), /*#__PURE__*/jsxRuntime.jsxs(StackedBottom, {
1538
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
1539
+ children: footerData.copyright
1540
+ }), /*#__PURE__*/jsxRuntime.jsxs(SocialIcons, {
1541
+ children: [/*#__PURE__*/jsxRuntime.jsx("a", {
1542
+ href: "#",
1543
+ children: /*#__PURE__*/jsxRuntime.jsx(fa.FaFacebookF, {})
1544
+ }), /*#__PURE__*/jsxRuntime.jsx("a", {
1545
+ href: "#",
1546
+ children: /*#__PURE__*/jsxRuntime.jsx(fa.FaInstagram, {})
1547
+ }), /*#__PURE__*/jsxRuntime.jsx("a", {
1548
+ href: "#",
1549
+ children: /*#__PURE__*/jsxRuntime.jsx(fa.FaTwitter, {})
1550
+ }), /*#__PURE__*/jsxRuntime.jsx("a", {
1551
+ href: "#",
1552
+ children: /*#__PURE__*/jsxRuntime.jsx(fa.FaLinkedin, {})
1553
+ })]
1554
+ })]
1555
+ })]
1556
+ });
1557
+ case "columns":
1558
+ return /*#__PURE__*/jsxRuntime.jsxs(ColumnsFooter, {
1559
+ children: [/*#__PURE__*/jsxRuntime.jsxs(ColumnsGrid, {
1560
+ children: [/*#__PURE__*/jsxRuntime.jsxs(ColumnBox, {
1561
+ children: [/*#__PURE__*/jsxRuntime.jsx("h3", {
1562
+ children: footerData.aboutTitle
1563
+ }), /*#__PURE__*/jsxRuntime.jsx("p", {
1564
+ children: footerData.aboutDesc
1565
+ }), /*#__PURE__*/jsxRuntime.jsxs(ContactItem, {
1566
+ children: [/*#__PURE__*/jsxRuntime.jsx(fa.FaPhone, {}), /*#__PURE__*/jsxRuntime.jsx("span", {
1567
+ children: footerData.phone
1568
+ })]
1569
+ }), /*#__PURE__*/jsxRuntime.jsxs(ContactItem, {
1570
+ children: [/*#__PURE__*/jsxRuntime.jsx(fa.FaEnvelope, {}), /*#__PURE__*/jsxRuntime.jsx("span", {
1571
+ children: footerData.email
1572
+ })]
1573
+ }), /*#__PURE__*/jsxRuntime.jsxs(ContactItem, {
1574
+ children: [/*#__PURE__*/jsxRuntime.jsx(fa.FaMapMarkerAlt, {}), /*#__PURE__*/jsxRuntime.jsx("span", {
1575
+ children: footerData.address
1576
+ })]
1577
+ })]
1578
+ }), footerData.columns.map((col, idx) => /*#__PURE__*/jsxRuntime.jsxs(ColumnBox, {
1579
+ children: [/*#__PURE__*/jsxRuntime.jsx("h3", {
1580
+ children: col.title
1581
+ }), col.links && col.links.map((link, linkIdx) => {
1582
+ const {
1583
+ label,
1584
+ href
1585
+ } = normalizeLink(link);
1586
+ return /*#__PURE__*/jsxRuntime.jsx("a", {
1587
+ href: href,
1588
+ children: label
1589
+ }, linkIdx);
1590
+ }), col.desc && /*#__PURE__*/jsxRuntime.jsx("p", {
1591
+ children: col.desc
1592
+ }), idx === footerData.columns.length - 1 && /*#__PURE__*/jsxRuntime.jsxs(SocialIcons, {
1593
+ style: {
1594
+ justifyContent: 'flex-start',
1595
+ marginTop: '1.5rem'
1596
+ },
1597
+ children: [/*#__PURE__*/jsxRuntime.jsx("a", {
1598
+ href: "#",
1599
+ children: /*#__PURE__*/jsxRuntime.jsx(fa.FaFacebookF, {})
1600
+ }), /*#__PURE__*/jsxRuntime.jsx("a", {
1601
+ href: "#",
1602
+ children: /*#__PURE__*/jsxRuntime.jsx(fa.FaInstagram, {})
1603
+ }), /*#__PURE__*/jsxRuntime.jsx("a", {
1604
+ href: "#",
1605
+ children: /*#__PURE__*/jsxRuntime.jsx(fa.FaTwitter, {})
1606
+ })]
1607
+ })]
1608
+ }, idx))]
1609
+ }), /*#__PURE__*/jsxRuntime.jsxs(ColumnsDivider, {
1610
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
1611
+ children: "\xA9 2025 Paradise Resort. Hak Cipta Dilindungi."
1612
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
1613
+ children: "Dirancang dengan \u2764\uFE0F untuk pengalaman mewah"
1614
+ })]
1615
+ })]
1616
+ });
1617
+ case "centered":
1618
+ return /*#__PURE__*/jsxRuntime.jsx(CenteredFooter, {
1619
+ children: /*#__PURE__*/jsxRuntime.jsxs(CenteredContent, {
1620
+ children: [/*#__PURE__*/jsxRuntime.jsx(CenteredLogo, {
1621
+ children: footerData.logo
1622
+ }), /*#__PURE__*/jsxRuntime.jsx(CenteredTagline, {
1623
+ children: footerData.tagline
1624
+ }), /*#__PURE__*/jsxRuntime.jsx(CenteredNav, {
1625
+ children: footerData.links.map((link, idx) => {
1626
+ const {
1627
+ label,
1628
+ href
1629
+ } = normalizeLink(link);
1630
+ return /*#__PURE__*/jsxRuntime.jsx("a", {
1631
+ href: href,
1632
+ children: label
1633
+ }, idx);
1634
+ })
1635
+ }), /*#__PURE__*/jsxRuntime.jsxs(CenteredSocial, {
1636
+ children: [/*#__PURE__*/jsxRuntime.jsx("a", {
1637
+ href: "#",
1638
+ children: /*#__PURE__*/jsxRuntime.jsx(fa.FaFacebookF, {})
1639
+ }), /*#__PURE__*/jsxRuntime.jsx("a", {
1640
+ href: "#",
1641
+ children: /*#__PURE__*/jsxRuntime.jsx(fa.FaInstagram, {})
1642
+ }), /*#__PURE__*/jsxRuntime.jsx("a", {
1643
+ href: "#",
1644
+ children: /*#__PURE__*/jsxRuntime.jsx(fa.FaTwitter, {})
1645
+ }), /*#__PURE__*/jsxRuntime.jsx("a", {
1646
+ href: "#",
1647
+ children: /*#__PURE__*/jsxRuntime.jsx(fa.FaLinkedin, {})
1648
+ })]
1649
+ }), /*#__PURE__*/jsxRuntime.jsx(CenteredCopyright, {
1650
+ children: footerData.copyright
1651
+ })]
1652
+ })
1653
+ });
1654
+ default:
1655
+ return null;
1656
+ }
1657
+ }
1658
+
1659
+ const variantStyles = {
1660
+ compact: {
1661
+ background: "#2c3e50",
1662
+ color: "#ecf0f1",
1663
+ hover: "#34495e",
1664
+ title: "Menu"
1665
+ },
1666
+ expanded: {
1667
+ background: "linear-gradient(180deg, #232526 0%, #414345 100%)",
1668
+ color: "#fff",
1669
+ hover: "rgba(255,255,255,0.1)",
1670
+ title: "Navigation"
1671
+ },
1672
+ floating: {
1673
+ background: "rgba(255, 255, 255, 0.95)",
1674
+ color: "#2c3e50",
1675
+ hover: "#f0f0f0",
1676
+ title: "Components"
1677
+ }
1678
+ };
1679
+
1680
+ // Default icons mapping
1681
+ const defaultIcons = {
1682
+ header: /*#__PURE__*/jsxRuntime.jsx(fa.FaHome, {}),
1683
+ card: /*#__PURE__*/jsxRuntime.jsx(fa.FaBed, {}),
1684
+ button: /*#__PURE__*/jsxRuntime.jsx(fa.FaConciergeBell, {}),
1685
+ footer: /*#__PURE__*/jsxRuntime.jsx(fa.FaInfoCircle, {}),
1686
+ sidebar: /*#__PURE__*/jsxRuntime.jsx(fa.FaUser, {})
1687
+ };
1688
+
1689
+ // Default items fallback
1690
+ const defaultItems = [{
1691
+ name: "Header",
1692
+ href: "#",
1693
+ icon: /*#__PURE__*/jsxRuntime.jsx(fa.FaHome, {})
1694
+ }, {
1695
+ name: "Card",
1696
+ href: "#",
1697
+ icon: /*#__PURE__*/jsxRuntime.jsx(fa.FaBed, {})
1698
+ }, {
1699
+ name: "Button",
1700
+ href: "#",
1701
+ icon: /*#__PURE__*/jsxRuntime.jsx(fa.FaConciergeBell, {})
1702
+ }, {
1703
+ name: "Footer",
1704
+ href: "#",
1705
+ icon: /*#__PURE__*/jsxRuntime.jsx(fa.FaInfoCircle, {})
1706
+ }, {
1707
+ name: "Sidebar",
1708
+ href: "#",
1709
+ icon: /*#__PURE__*/jsxRuntime.jsx(fa.FaUser, {})
1710
+ }];
1711
+ const CompactSidebar = styled.aside`
1712
+ font-family: "Inter", sans-serif;
1713
+ background: ${variantStyles.compact.background};
1714
+ color: ${variantStyles.compact.color};
1715
+ width: 70px;
1716
+ min-height: 100vh;
1717
+ display: flex;
1718
+ flex-direction: column;
1719
+ align-items: center;
1720
+ padding: 1.5rem 0;
1721
+ gap: 0.5rem;
1722
+ position: sticky;
1723
+ top: 0;
1724
+ border-right: 3px solid #3498db;
1725
+
1726
+ @media (max-width: 768px) {
1727
+ min-height: auto;
1728
+ height: 100%;
1729
+ padding: 1rem 0;
1730
+ }
1731
+ `;
1732
+ const CompactTitle = styled.div`
1733
+ writing-mode: vertical-rl;
1734
+ text-orientation: mixed;
1735
+ font-weight: 800;
1736
+ font-size: 1.1rem;
1737
+ margin-bottom: 2rem;
1738
+ letter-spacing: 2px;
1739
+ color: #3498db;
1740
+
1741
+ @media (max-width: 768px) {
1742
+ font-size: 0.9rem;
1743
+ margin-bottom: 1.5rem;
1744
+ }
1745
+ `;
1746
+ const CompactItemLink = styled(Link)`
1747
+ width: 50px;
1748
+ height: 50px;
1749
+ display: flex;
1750
+ align-items: center;
1751
+ justify-content: center;
1752
+ background: none;
1753
+ border: none;
1754
+ color: inherit;
1755
+ border-radius: 12px;
1756
+ cursor: pointer;
1757
+ transition: all 0.3s ease;
1758
+ position: relative;
1759
+ text-decoration: none;
1760
+
1761
+ svg {
1762
+ font-size: 22px;
1763
+ }
1764
+
1765
+ &:hover {
1766
+ background: ${variantStyles.compact.hover};
1767
+ transform: scale(1.1);
1768
+ }
1769
+
1770
+ &::after {
1771
+ content: attr(data-label);
1772
+ position: absolute;
1773
+ left: 70px;
1774
+ background: #2c3e50;
1775
+ color: white;
1776
+ padding: 0.5rem 1rem;
1777
+ border-radius: 6px;
1778
+ font-size: 14px;
1779
+ white-space: nowrap;
1780
+ opacity: 0;
1781
+ pointer-events: none;
1782
+ transition: opacity 0.3s;
1783
+ z-index: 1000;
1784
+ }
1785
+
1786
+ &:hover::after {
1787
+ opacity: 1;
1788
+ }
1789
+
1790
+ @media (max-width: 768px) {
1791
+ width: 40px;
1792
+ height: 40px;
1793
+
1794
+ svg {
1795
+ font-size: 18px;
1796
+ }
1797
+
1798
+ &::after {
1799
+ display: none;
1800
+ }
1801
+ }
1802
+ `;
1803
+ const CompactItemButton = styled.button`
1804
+ width: 50px;
1805
+ height: 50px;
1806
+ display: flex;
1807
+ align-items: center;
1808
+ justify-content: center;
1809
+ background: none;
1810
+ border: none;
1811
+ color: inherit;
1812
+ border-radius: 12px;
1813
+ cursor: pointer;
1814
+ transition: all 0.3s ease;
1815
+ position: relative;
1816
+
1817
+ svg {
1818
+ font-size: 22px;
1819
+ }
1820
+
1821
+ &:hover {
1822
+ background: ${variantStyles.compact.hover};
1823
+ transform: scale(1.1);
1824
+ }
1825
+
1826
+ &::after {
1827
+ content: attr(data-label);
1828
+ position: absolute;
1829
+ left: 70px;
1830
+ background: #2c3e50;
1831
+ color: white;
1832
+ padding: 0.5rem 1rem;
1833
+ border-radius: 6px;
1834
+ font-size: 14px;
1835
+ white-space: nowrap;
1836
+ opacity: 0;
1837
+ pointer-events: none;
1838
+ transition: opacity 0.3s;
1839
+ z-index: 1000;
1840
+ }
1841
+
1842
+ &:hover::after {
1843
+ opacity: 1;
1844
+ }
1845
+
1846
+ @media (max-width: 768px) {
1847
+ width: 40px;
1848
+ height: 40px;
1849
+
1850
+ svg {
1851
+ font-size: 18px;
1852
+ }
1853
+
1854
+ &::after {
1855
+ display: none;
1856
+ }
1857
+ }
1858
+ `;
1859
+ const ExpandedSidebar = styled.aside`
1860
+ font-family: "Poppins", sans-serif;
1861
+ background: ${variantStyles.expanded.background};
1862
+ color: ${variantStyles.expanded.color};
1863
+ width: 260px;
1864
+ min-height: 100vh;
1865
+ padding: 2rem 1rem;
1866
+ display: flex;
1867
+ flex-direction: column;
1868
+ gap: 0.3rem;
1869
+ position: sticky;
1870
+ top: 0;
1871
+ box-shadow: 4px 0 15px rgba(0, 0, 0, 0.2);
1872
+
1873
+ @media (max-width: 400px) {
1874
+ width: 100%;
1875
+ min-height: auto;
1876
+ }
1877
+ `;
1878
+ const ExpandedTitle = styled.h2`
1879
+ font-size: 1.5rem;
1880
+ font-weight: 800;
1881
+ margin: 0 0 2rem 1rem;
1882
+ letter-spacing: 1px;
1883
+ background: linear-gradient(135deg, #667eea, #764ba2);
1884
+ -webkit-background-clip: text;
1885
+ -webkit-text-fill-color: transparent;
1886
+ background-clip: text;
1887
+ `;
1888
+ const ExpandedSection = styled.div`
1889
+ margin-bottom: 1.5rem;
1890
+ `;
1891
+ const SectionLabel = styled.div`
1892
+ font-size: 11px;
1893
+ text-transform: uppercase;
1894
+ letter-spacing: 1.5px;
1895
+ opacity: 0.5;
1896
+ margin: 1rem 0 0.5rem 1rem;
1897
+ font-weight: 700;
1898
+ `;
1899
+ const ExpandedItemLink = styled(Link)`
1900
+ width: 100%;
1901
+ display: flex;
1902
+ align-items: center;
1903
+ justify-content: space-between;
1904
+ padding: 0.9rem 1.2rem;
1905
+ background: none;
1906
+ border: none;
1907
+ color: inherit;
1908
+ border-radius: 12px;
1909
+ cursor: pointer;
1910
+ transition: all 0.3s ease;
1911
+ font-size: 15px;
1912
+ font-weight: 500;
1913
+ position: relative;
1914
+ overflow: hidden;
1915
+ text-decoration: none;
1916
+
1917
+ &::before {
1918
+ content: "";
1919
+ position: absolute;
1920
+ left: 0;
1921
+ top: 0;
1922
+ height: 100%;
1923
+ width: 4px;
1924
+ background: linear-gradient(135deg, #667eea, #764ba2);
1925
+ opacity: 0;
1926
+ transition: opacity 0.3s;
1927
+ }
1928
+
1929
+ &:hover::before {
1930
+ opacity: 1;
1931
+ }
1932
+
1933
+ &:hover {
1934
+ background: ${variantStyles.expanded.hover};
1935
+ transform: translateX(5px);
1936
+ }
1937
+ `;
1938
+ const ExpandedItemButton = styled.button`
1939
+ width: 100%;
1940
+ display: flex;
1941
+ align-items: center;
1942
+ justify-content: space-between;
1943
+ padding: 0.9rem 1.2rem;
1944
+ background: none;
1945
+ border: none;
1946
+ color: inherit;
1947
+ border-radius: 12px;
1948
+ cursor: pointer;
1949
+ transition: all 0.3s ease;
1950
+ font-size: 15px;
1951
+ font-weight: 500;
1952
+ position: relative;
1953
+ overflow: hidden;
1954
+
1955
+ &::before {
1956
+ content: "";
1957
+ position: absolute;
1958
+ left: 0;
1959
+ top: 0;
1960
+ height: 100%;
1961
+ width: 4px;
1962
+ background: linear-gradient(135deg, #667eea, #764ba2);
1963
+ opacity: 0;
1964
+ transition: opacity 0.3s;
1965
+ }
1966
+
1967
+ &:hover::before {
1968
+ opacity: 1;
1969
+ }
1970
+
1971
+ &:hover {
1972
+ background: ${variantStyles.expanded.hover};
1973
+ transform: translateX(5px);
1974
+ }
1975
+ `;
1976
+ const ItemLeft = styled.div`
1977
+ display: flex;
1978
+ align-items: center;
1979
+ gap: 1rem;
1980
+
1981
+ svg {
1982
+ font-size: 18px;
1983
+ opacity: 0.8;
1984
+ }
1985
+ `;
1986
+ const FloatingSidebar = styled.aside`
1987
+ font-family: "Poppins", sans-serif;
1988
+ background: ${variantStyles.floating.background};
1989
+ color: ${variantStyles.floating.color};
1990
+ width: 240px;
1991
+ min-height: calc(100vh - 40px);
1992
+ margin: 20px;
1993
+ padding: 2rem 0.8rem;
1994
+ display: flex;
1995
+ flex-direction: column;
1996
+ gap: 0.5rem;
1997
+ position: sticky;
1998
+ top: 20px;
1999
+ border-radius: 24px;
2000
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.1);
2001
+ border: 1px solid rgba(0, 0, 0, 0.05);
2002
+
2003
+ @media (max-width: 400px) {
2004
+ width: calc(100% - 40px);
2005
+ }
2006
+ `;
2007
+ const FloatingTitle = styled.h3`
2008
+ font-size: 1.2rem;
2009
+ font-weight: 700;
2010
+ margin: 0 0 1.5rem 1rem;
2011
+ color: #2c3e50;
2012
+ `;
2013
+ const FloatingItemLink = styled(Link)`
2014
+ width: 100%;
2015
+ display: flex;
2016
+ align-items: center;
2017
+ gap: 1rem;
2018
+ padding: 1rem 1.2rem;
2019
+ background: none;
2020
+ border: none;
2021
+ color: inherit;
2022
+ border-radius: 14px;
2023
+ cursor: pointer;
2024
+ transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
2025
+ font-size: 15px;
2026
+ font-weight: 600;
2027
+ text-decoration: none;
2028
+
2029
+ svg {
2030
+ font-size: 20px;
2031
+ padding: 8px;
2032
+ background: linear-gradient(135deg, #667eea20, #764ba220);
2033
+ border-radius: 10px;
2034
+ color: #667eea;
2035
+ transition: all 0.3s;
2036
+ }
2037
+
2038
+ &:hover {
2039
+ background: ${variantStyles.floating.hover};
2040
+ transform: scale(1.05);
2041
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
2042
+ }
2043
+
2044
+ &:hover svg {
2045
+ background: linear-gradient(135deg, #667eea, #764ba2);
2046
+ color: white;
2047
+ transform: rotate(10deg);
2048
+ }
2049
+ `;
2050
+ const FloatingItemButton = styled.button`
2051
+ width: 100%;
2052
+ display: flex;
2053
+ align-items: center;
2054
+ gap: 1rem;
2055
+ padding: 1rem 1.2rem;
2056
+ background: none;
2057
+ border: none;
2058
+ color: inherit;
2059
+ border-radius: 14px;
2060
+ cursor: pointer;
2061
+ transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
2062
+ font-size: 15px;
2063
+ font-weight: 600;
2064
+
2065
+ svg {
2066
+ font-size: 20px;
2067
+ padding: 8px;
2068
+ background: linear-gradient(135deg, #667eea20, #764ba220);
2069
+ border-radius: 10px;
2070
+ color: #667eea;
2071
+ transition: all 0.3s;
2072
+ }
2073
+
2074
+ &:hover {
2075
+ background: ${variantStyles.floating.hover};
2076
+ transform: scale(1.05);
2077
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
2078
+ }
2079
+
2080
+ &:hover svg {
2081
+ background: linear-gradient(135deg, #667eea, #764ba2);
2082
+ color: white;
2083
+ transform: rotate(10deg);
2084
+ }
2085
+ `;
2086
+
2087
+ // Helper function to get icon for an item
2088
+ const getItemIcon = item => {
2089
+ if (item.icon) return item.icon;
2090
+ const name = (item.name || item.label || "").toLowerCase();
2091
+ return defaultIcons[name] || /*#__PURE__*/jsxRuntime.jsx(fa.FaHome, {});
2092
+ };
2093
+
2094
+ // Helper function to get item display name
2095
+ const getItemName = item => {
2096
+ return item.name || item.label || "Menu";
2097
+ };
2098
+ function SidebarVariant({
2099
+ variant = "compact",
2100
+ items,
2101
+ onSelect,
2102
+ title
2103
+ }) {
2104
+ // Use provided items or fallback to defaults
2105
+ const menuItems = items && items.length > 0 ? items : defaultItems;
2106
+
2107
+ // Get title based on variant or use custom title
2108
+ const sidebarTitle = title || variantStyles[variant]?.title || "Menu";
2109
+ const renderCompactItem = (item, index) => {
2110
+ const icon = getItemIcon(item);
2111
+ const name = getItemName(item);
2112
+ const hasHref = item.href && item.href !== "";
2113
+ if (hasHref) {
2114
+ return /*#__PURE__*/jsxRuntime.jsx(CompactItemLink, {
2115
+ href: item.href,
2116
+ "data-label": name,
2117
+ onClick: () => onSelect?.(name.toLowerCase()),
2118
+ children: icon
2119
+ }, item.name || item.label || index);
2120
+ }
2121
+ return /*#__PURE__*/jsxRuntime.jsx(CompactItemButton, {
2122
+ "data-label": name,
2123
+ onClick: () => onSelect?.(name.toLowerCase()),
2124
+ children: icon
2125
+ }, item.name || item.label || index);
2126
+ };
2127
+ const renderExpandedItem = (item, index) => {
2128
+ const icon = getItemIcon(item);
2129
+ const name = getItemName(item);
2130
+ const hasHref = item.href && item.href !== "";
2131
+ if (hasHref) {
2132
+ return /*#__PURE__*/jsxRuntime.jsxs(ExpandedItemLink, {
2133
+ href: item.href,
2134
+ onClick: () => onSelect?.(name.toLowerCase()),
2135
+ children: [/*#__PURE__*/jsxRuntime.jsxs(ItemLeft, {
2136
+ children: [icon, /*#__PURE__*/jsxRuntime.jsx("span", {
2137
+ children: name
2138
+ })]
2139
+ }), /*#__PURE__*/jsxRuntime.jsx(fa.FaChevronRight, {
2140
+ size: 14,
2141
+ style: {
2142
+ opacity: 0.5
2143
+ }
2144
+ })]
2145
+ }, item.name || item.label || index);
2146
+ }
2147
+ return /*#__PURE__*/jsxRuntime.jsxs(ExpandedItemButton, {
2148
+ onClick: () => onSelect?.(name.toLowerCase()),
2149
+ children: [/*#__PURE__*/jsxRuntime.jsxs(ItemLeft, {
2150
+ children: [icon, /*#__PURE__*/jsxRuntime.jsx("span", {
2151
+ children: name
2152
+ })]
2153
+ }), /*#__PURE__*/jsxRuntime.jsx(fa.FaChevronRight, {
2154
+ size: 14,
2155
+ style: {
2156
+ opacity: 0.5
2157
+ }
2158
+ })]
2159
+ }, item.name || item.label || index);
2160
+ };
2161
+ const renderFloatingItem = (item, index) => {
2162
+ const icon = getItemIcon(item);
2163
+ const name = getItemName(item);
2164
+ const hasHref = item.href && item.href !== "";
2165
+ if (hasHref) {
2166
+ return /*#__PURE__*/jsxRuntime.jsxs(FloatingItemLink, {
2167
+ href: item.href,
2168
+ onClick: () => onSelect?.(name.toLowerCase()),
2169
+ children: [icon, /*#__PURE__*/jsxRuntime.jsx("span", {
2170
+ children: name
2171
+ })]
2172
+ }, item.name || item.label || index);
2173
+ }
2174
+ return /*#__PURE__*/jsxRuntime.jsxs(FloatingItemButton, {
2175
+ onClick: () => onSelect?.(name.toLowerCase()),
2176
+ children: [icon, /*#__PURE__*/jsxRuntime.jsx("span", {
2177
+ children: name
2178
+ })]
2179
+ }, item.name || item.label || index);
2180
+ };
2181
+ switch (variant) {
2182
+ case "compact":
2183
+ return /*#__PURE__*/jsxRuntime.jsxs(CompactSidebar, {
2184
+ children: [/*#__PURE__*/jsxRuntime.jsx(CompactTitle, {
2185
+ children: sidebarTitle
2186
+ }), menuItems.map((item, index) => renderCompactItem(item, index))]
2187
+ });
2188
+ case "expanded":
2189
+ return /*#__PURE__*/jsxRuntime.jsxs(ExpandedSidebar, {
2190
+ children: [/*#__PURE__*/jsxRuntime.jsx(ExpandedTitle, {
2191
+ children: sidebarTitle
2192
+ }), /*#__PURE__*/jsxRuntime.jsxs(ExpandedSection, {
2193
+ children: [/*#__PURE__*/jsxRuntime.jsx(SectionLabel, {
2194
+ children: "Components"
2195
+ }), menuItems.map((item, index) => renderExpandedItem(item, index))]
2196
+ })]
2197
+ });
2198
+ case "floating":
2199
+ return /*#__PURE__*/jsxRuntime.jsxs(FloatingSidebar, {
2200
+ children: [/*#__PURE__*/jsxRuntime.jsx(FloatingTitle, {
2201
+ children: sidebarTitle
2202
+ }), menuItems.map((item, index) => renderFloatingItem(item, index))]
2203
+ });
2204
+ default:
2205
+ return null;
2206
+ }
2207
+ }
2208
+
2209
+ exports.ButtonVariant = ButtonVariant;
2210
+ exports.CardVariant = CardVariant;
2211
+ exports.FooterVariant = FooterVariant;
2212
+ exports.HeaderVariant = HeaderVariant;
2213
+ exports.SidebarVariant = SidebarVariant;