property-practice-ui 0.2.0 → 0.3.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.
@@ -0,0 +1,2431 @@
1
+ import { useState, useMemo, useRef, useEffect } from 'react';
2
+ import styled40, { keyframes } from 'styled-components';
3
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
+ import { FaMinus, FaPlus as FaPlus$1, FaCheckCircle } from 'react-icons/fa';
5
+ import { FaPlus, FaCircleCheck, FaCircleExclamation, FaHouse, FaRegFolderOpen } from 'react-icons/fa6';
6
+ import { HiArrowUpRight, HiMinus, HiPlus } from 'react-icons/hi2';
7
+ import { HiX } from 'react-icons/hi';
8
+
9
+ // src/molecules/Accordion/Accordion.tsx
10
+
11
+ // src/tokens/colors.ts
12
+ var colors = {
13
+ background: {
14
+ primary: "#FFFFFF",
15
+ secondary: "#EEF1F5",
16
+ tertiary: "#1E4384",
17
+ subtle: "rgba(102, 153, 153, 1)",
18
+ blue: "#36b8e7",
19
+ brand: "#1D3C77",
20
+ success: "#00ab3fff",
21
+ error: "#F87171",
22
+ light: "#cacbcc"
23
+ },
24
+ border: {
25
+ primary: "#669999",
26
+ secondary: "rgba(30, 67, 132, 0.2)",
27
+ hover: "#cacbcc",
28
+ active: "#828282",
29
+ error: "#F87171",
30
+ focus: "#3B82F6",
31
+ brand: "#1D3C77",
32
+ light: "#f3f3f3"
33
+ },
34
+ text: {
35
+ brand: "#1D3C77",
36
+ primary: "#262626",
37
+ secondary: "#FFFFFF",
38
+ tertiary: "#669999",
39
+ subtle: "#919EB0",
40
+ light: "#b5b6b8ff",
41
+ error: "#F87171",
42
+ blue: "#3B82F6"
43
+ },
44
+ button: {
45
+ primary: "rgba(30, 67, 132, 0.2)",
46
+ hover: "rgba(30, 67, 132, 0.5)",
47
+ active: "rgba(30, 67, 132, 0.8)",
48
+ secondary: "rgba(30, 67, 132, 1)"
49
+ }
50
+ };
51
+
52
+ // src/tokens/radii.ts
53
+ var radii = {
54
+ sm: "4px",
55
+ md: "8px",
56
+ lg: "10px",
57
+ xl: "16px"
58
+ };
59
+
60
+ // src/tokens/spaces.ts
61
+ var spaces = {
62
+ 0: "0px",
63
+ 0.5: "2px",
64
+ 1: "4px",
65
+ 1.5: "6px",
66
+ 2: "8px",
67
+ 2.5: "10px",
68
+ 3: "12px",
69
+ 3.5: "14px",
70
+ 4: "16px",
71
+ 4.5: "18px",
72
+ 5: "20px",
73
+ 5.5: "22px",
74
+ 6: "24px",
75
+ 6.5: "28px",
76
+ 7: "34px",
77
+ 7.5: "38px",
78
+ 8: "44px",
79
+ 9: "56px",
80
+ 20: "150px"
81
+ };
82
+ var Container = styled40.div`
83
+ width: 100%;
84
+ padding: ${spaces[4]};
85
+ `;
86
+ var AccordionContent = ({ children }) => {
87
+ return /* @__PURE__ */ jsx(Container, { children });
88
+ };
89
+ var variants = ["brand", "teal", "blue"];
90
+ var StyledContainer = styled40.button`
91
+ padding: 0.75rem;
92
+ ${(props) => props.as === "button" ? `
93
+ width: 2.5rem;
94
+ height: 2.5rem;
95
+ ` : ""}
96
+ flex-shrink: 0;
97
+ background-color: ${(props) => {
98
+ switch (props.variant) {
99
+ case "brand":
100
+ return colors.background.brand;
101
+ case "teal":
102
+ return colors.background.subtle;
103
+ case "blue":
104
+ return colors.background.blue;
105
+ default:
106
+ return colors.background.brand;
107
+ }
108
+ }};
109
+ transition: all 0.2s;
110
+ border: none;
111
+ cursor: pointer;
112
+ display: flex;
113
+ align-items: center;
114
+ justify-content: center;
115
+
116
+ &:hover svg {
117
+ transform: rotate(45deg);
118
+ }
119
+ `;
120
+ var StyledIcon = styled40(HiArrowUpRight)`
121
+ width: 1rem;
122
+ height: 1rem;
123
+ color: ${colors.text.secondary};
124
+ transition: transform 0.2s;
125
+ `;
126
+ var ArrowButton = ({
127
+ onClick,
128
+ asChild = false,
129
+ variant = "brand"
130
+ }) => {
131
+ return /* @__PURE__ */ jsx(
132
+ StyledContainer,
133
+ {
134
+ as: asChild ? "div" : "button",
135
+ onClick,
136
+ variant,
137
+ children: /* @__PURE__ */ jsx(StyledIcon, { "aria-hidden": true })
138
+ }
139
+ );
140
+ };
141
+ ArrowButton.variants = variants;
142
+ var spin = keyframes`
143
+ to { transform: rotate(360deg); }
144
+ `;
145
+ var Ring = styled40.span`
146
+ display: inline-block;
147
+ width: ${({ size }) => typeof size === "number" ? `${size}px` : size};
148
+ height: ${({ size }) => typeof size === "number" ? `${size}px` : size};
149
+ border-radius: 50%;
150
+ box-sizing: border-box;
151
+
152
+ border: ${({ thickness }) => thickness}px solid ${colors.background.brand};
153
+
154
+ border-top-color: ${colors.border.active};
155
+
156
+ animation: ${spin} ${({ speed }) => speed} linear infinite;
157
+
158
+ @media (prefers-reduced-motion: reduce) {
159
+ animation: none;
160
+ border-top-color: ${colors.border.active};
161
+ }
162
+ `;
163
+ var Loader = ({
164
+ size = 32,
165
+ thickness = 3,
166
+ speed = "0.8s"
167
+ }) => {
168
+ return /* @__PURE__ */ jsx(
169
+ Ring,
170
+ {
171
+ role: "status",
172
+ "aria-live": "polite",
173
+ size,
174
+ thickness,
175
+ speed
176
+ }
177
+ );
178
+ };
179
+ var ButtonTypes = ["submit", "reset", "button"];
180
+ var StyledButton = styled40.button`
181
+ padding: ${spaces[2]} ${spaces[4]};
182
+ background-color: ${(props) => props.variant === "light" ? colors.button.primary : colors.button.secondary};
183
+ border-radius: ${radii.lg};
184
+ color: ${(props) => props.variant === "light" ? colors.text.primary : colors.text.secondary};
185
+ display: flex;
186
+ align-items: center;
187
+ justify-content: center;
188
+ gap: ${spaces[2]};
189
+ max-height: 34px;
190
+
191
+ &:hover {
192
+ background-color: ${colors.button.hover};
193
+ cursor: pointer;
194
+ }
195
+
196
+ &:active {
197
+ background-color: ${colors.button.active};
198
+ color: ${colors.text.secondary};
199
+ }
200
+
201
+ &:disabled {
202
+ background-color: ${colors.button.primary};
203
+ cursor: not-allowed;
204
+ color: ${colors.text.primary};
205
+ }
206
+ `;
207
+ var ButtonText = styled40.span`
208
+ font-size: 12px;
209
+ font-weight: 700;
210
+ `;
211
+ var Button = ({
212
+ onClick,
213
+ text,
214
+ type = "button",
215
+ disabled,
216
+ icon = void 0,
217
+ variant = "light",
218
+ isLoading
219
+ }) => {
220
+ return /* @__PURE__ */ jsx(
221
+ StyledButton,
222
+ {
223
+ type,
224
+ onClick,
225
+ disabled: disabled || isLoading,
226
+ variant,
227
+ children: !isLoading ? /* @__PURE__ */ jsxs(Fragment, { children: [
228
+ typeof icon !== "undefined" && icon,
229
+ /* @__PURE__ */ jsx(ButtonText, { children: text })
230
+ ] }) : /* @__PURE__ */ jsx(Loader, { size: "20px" })
231
+ }
232
+ );
233
+ };
234
+ Button.types = ButtonTypes;
235
+ var variants2 = ["primary", "secondary", "subtle", "error"];
236
+ var StyledDescription = styled40.p`
237
+ margin: 0;
238
+ font-size: 1rem;
239
+ line-height: 1.6;
240
+ color: ${(props) => {
241
+ switch (props.variant) {
242
+ case "primary":
243
+ return colors.text.primary;
244
+ case "secondary":
245
+ return colors.text.secondary;
246
+ case "subtle":
247
+ return colors.text.subtle;
248
+ case "error":
249
+ return colors.text.error;
250
+ default:
251
+ return colors.text.primary;
252
+ }
253
+ }};
254
+ `;
255
+ var Description = ({
256
+ children,
257
+ variant = "primary"
258
+ }) => {
259
+ return /* @__PURE__ */ jsx(StyledDescription, { variant, children });
260
+ };
261
+ Description.variants = variants2;
262
+ var StyledButton2 = styled40.button`
263
+ display: flex;
264
+ align-items: center;
265
+ height: 2.5rem;
266
+ border: none;
267
+ cursor: pointer;
268
+ transition: opacity 0.2s;
269
+ padding: 0;
270
+ background: transparent;
271
+
272
+ &:hover {
273
+ opacity: 0.9;
274
+ }
275
+ `;
276
+ var ExtendedButton = ({
277
+ text,
278
+ onClick,
279
+ arrowVariant = "teal",
280
+ textBgVariant = "brand",
281
+ textVariant = "secondary"
282
+ }) => {
283
+ return /* @__PURE__ */ jsxs(StyledButton2, { onClick, children: [
284
+ /* @__PURE__ */ jsx(ArrowButton, { asChild: true, variant: arrowVariant }),
285
+ /* @__PURE__ */ jsx(TextButton, { asChild: true, text, bgVariant: textBgVariant, textVariant, uppercase: false })
286
+ ] });
287
+ };
288
+ var Container2 = styled40.div`
289
+ display: flex;
290
+ gap: 1rem;
291
+ background-color: transparent;
292
+ `;
293
+ var ThumbnailWrapper = styled40.div`
294
+ width: ${(props) => props.$size || "3rem"};
295
+ height: ${(props) => props.$size || "3rem"};
296
+ border-radius: 50%;
297
+ background-color: ${(props) => colors.background[props.thumbnailBgColor]};
298
+ display: flex;
299
+ align-items: center;
300
+ justify-content: center;
301
+ flex-shrink: 0;
302
+ `;
303
+ var Content = styled40.div`
304
+ display: flex;
305
+ flex-direction: column;
306
+ gap: 0.25rem;
307
+ `;
308
+ var Title = styled40.h3`
309
+ margin: 0;
310
+ font-size: 1rem;
311
+ font-weight: 600;
312
+ color: ${(props) => colors.text[props.titleColor]};
313
+ `;
314
+ var Description2 = styled40.p`
315
+ margin: 0;
316
+ font-size: 0.875rem;
317
+ line-height: 1.5;
318
+ color: ${(props) => colors.text[props.descriptionColor]};
319
+ `;
320
+ var FeatureItem = ({
321
+ thumbnail,
322
+ title,
323
+ description,
324
+ thumbnailSize,
325
+ thumbnailBgColor = "brand",
326
+ titleColor = "primary",
327
+ descriptionVariant = "subtle"
328
+ }) => {
329
+ const getDescriptionColor = () => {
330
+ switch (descriptionVariant) {
331
+ case "primary":
332
+ return "primary";
333
+ case "secondary":
334
+ return "secondary";
335
+ case "subtle":
336
+ return "subtle";
337
+ case "error":
338
+ return "error";
339
+ default:
340
+ return "subtle";
341
+ }
342
+ };
343
+ return /* @__PURE__ */ jsxs(Container2, { children: [
344
+ /* @__PURE__ */ jsx(ThumbnailWrapper, { $size: thumbnailSize, thumbnailBgColor, children: thumbnail }),
345
+ /* @__PURE__ */ jsxs(Content, { children: [
346
+ /* @__PURE__ */ jsx(Title, { titleColor, children: title }),
347
+ /* @__PURE__ */ jsx(Description2, { descriptionColor: getDescriptionColor(), children: description })
348
+ ] })
349
+ ] });
350
+ };
351
+
352
+ // src/tokens/breakpoints.ts
353
+ var breakpoints = {
354
+ sm: "640px",
355
+ lg: "1024px"};
356
+ styled40.div`
357
+ width: 100%;
358
+ display: flex;
359
+ justify-content: center;
360
+ `;
361
+ styled40.div`
362
+ display: flex;
363
+ flex-direction: column;
364
+ padding: ${spaces[4]};
365
+ width: 100%;
366
+ max-width: ${breakpoints.lg};
367
+ gap: ${(props) => spaces[props.space]};
368
+ `;
369
+ var variants3 = {
370
+ h1: {
371
+ fontSize: "24px",
372
+ fontWeight: 700,
373
+ letterSpacing: "0.6px",
374
+ lineHeight: "32px"
375
+ },
376
+ h2: {
377
+ fontSize: "20px",
378
+ fontWeight: 700,
379
+ lineHeight: "28px",
380
+ letterSpacing: "0.4px"
381
+ },
382
+ h3: {
383
+ fontSize: "18px",
384
+ fontWeight: 600,
385
+ lineHeight: "28px",
386
+ letterSpacing: "0.2px"
387
+ }
388
+ };
389
+ var StyledText = styled40.h1`
390
+ color: ${(props) => colors.text[props?.color]};
391
+ font-size: ${(props) => variants3[props.variant].fontSize};
392
+ font-weight: ${(props) => variants3[props.variant].fontWeight};
393
+ letter-spacing: ${(props) => variants3[props.variant].letterSpacing};
394
+ line-height: ${(props) => variants3[props.variant].lineHeight};
395
+ `;
396
+ var Header = ({
397
+ children,
398
+ variant = "h1",
399
+ color = "primary"
400
+ }) => {
401
+ return /* @__PURE__ */ jsx(StyledText, { variant, color, children });
402
+ };
403
+
404
+ // src/types.ts
405
+ var InputTypes = ["number", "text", "email", "date"];
406
+ var StyledInput = styled40.input`
407
+ display: block;
408
+ height: 100%;
409
+ width: 100%;
410
+ outline: none;
411
+ background-color: transparent;
412
+ color: ${colors.text.subtle};
413
+ font-weight: 600;
414
+ `;
415
+ var Input = ({ name, onChange, ...rest }) => {
416
+ return /* @__PURE__ */ jsx(StyledInput, { name, onChange, ...rest });
417
+ };
418
+ Input.types = InputTypes;
419
+
420
+ // src/tokens/sizes.ts
421
+ var sizes = {
422
+ sm: "12px",
423
+ lg: "18px",
424
+ xl: "24px",
425
+ 0: "1px"};
426
+ var StyledLabel = styled40.span`
427
+ color: ${(props) => colors.text[props?.color]};
428
+ font-size: ${sizes.sm};
429
+ font-weight: ${(props) => props.fontWeight};
430
+ `;
431
+ var StyledFloatingLabel = styled40(StyledLabel)`
432
+ position: absolute;
433
+ left: 0;
434
+ bottom: 100%;
435
+ margin-left: ${spaces[3]};
436
+ margin-bottom: -${spaces[2.5]};
437
+ transform: translateY(-${spaces[0.5]});
438
+ background-color: ${colors.background.primary};
439
+ padding: 0 ${spaces[1]};
440
+ `;
441
+ var Label = ({
442
+ value,
443
+ color = "subtle",
444
+ fontWeight = "500"
445
+ }) => {
446
+ return /* @__PURE__ */ jsx(StyledLabel, { color, fontWeight, children: value });
447
+ };
448
+ var FloatingLabel = ({
449
+ value,
450
+ color = "subtle",
451
+ fontWeight = "500"
452
+ }) => {
453
+ return /* @__PURE__ */ jsx(StyledFloatingLabel, { color, fontWeight, children: value });
454
+ };
455
+ styled40.span`
456
+ display: inline-block;
457
+ padding: 0.5rem 1rem;
458
+ border-radius: 9999px;
459
+ font-size: 0.75rem;
460
+ font-weight: 600;
461
+ background-color: ${(props) => {
462
+ if (props.$inverse) return "transparent";
463
+ switch (props.variant) {
464
+ case "primary":
465
+ return colors.text.brand;
466
+ case "secondary":
467
+ return colors.text.blue;
468
+ case "subtle":
469
+ return colors.text.subtle;
470
+ case "error":
471
+ return colors.text.error;
472
+ default:
473
+ return colors.text.brand;
474
+ }
475
+ }};
476
+ color: ${(props) => {
477
+ if (props.$inverse) {
478
+ switch (props.variant) {
479
+ case "primary":
480
+ return colors.text.brand;
481
+ case "secondary":
482
+ return colors.text.blue;
483
+ case "subtle":
484
+ return colors.text.subtle;
485
+ case "error":
486
+ return colors.text.error;
487
+ default:
488
+ return colors.text.brand;
489
+ }
490
+ }
491
+ return colors.text.secondary;
492
+ }};
493
+ border: ${(props) => {
494
+ if (!props.$inverse) return "none";
495
+ switch (props.variant) {
496
+ case "primary":
497
+ return `1px solid ${colors.text.brand}`;
498
+ case "secondary":
499
+ return `1px solid ${colors.text.blue}`;
500
+ case "subtle":
501
+ return `1px solid ${colors.text.subtle}`;
502
+ case "error":
503
+ return `1px solid ${colors.text.error}`;
504
+ default:
505
+ return `1px solid ${colors.text.brand}`;
506
+ }
507
+ }};
508
+ `;
509
+ var Container4 = styled40.div`
510
+ border-radius: ${radii.md};
511
+ padding: ${spaces["3"]};
512
+ display: flex;
513
+ flex: 1;
514
+ gap: ${spaces[2]};
515
+ background-color: white;
516
+ align-items: center;
517
+ justify-content: center;
518
+ border-width: 1px;
519
+ border-color: ${colors.border.active};
520
+ transition:
521
+ background-color 0.25s ease,
522
+ box-shadow 0.35s ease,
523
+ transform 0.25s ease;
524
+
525
+ &:hover {
526
+ background-color: rgba(255, 255, 255, 0.96);
527
+ border-color: ${colors.border.hover};
528
+ cursor: pointer;
529
+ }
530
+
531
+ &:active {
532
+ background-color: rgba(255, 255, 255, 0.92);
533
+ }
534
+ `;
535
+ var Label2 = styled40.span`
536
+ font-size: 16px;
537
+ font-weight: ${(props) => props.isSelected ? "800" : "400"};
538
+ text-align: center;
539
+ `;
540
+ var RadioItem = ({ label, isSelected, onClick }) => {
541
+ return /* @__PURE__ */ jsxs(Container4, { onClick, children: [
542
+ isSelected && /* @__PURE__ */ jsx(FaCheckCircle, { color: colors.background.blue }),
543
+ /* @__PURE__ */ jsx(Label2, { isSelected, children: label })
544
+ ] });
545
+ };
546
+ styled40.div`
547
+ width: 100%;
548
+ `;
549
+ styled40.label`
550
+ display: block;
551
+ font-size: 13px;
552
+ font-weight: 600;
553
+ color: ${(props) => props.$color ? colors.text[props.$color] : colors.text.primary};
554
+ opacity: 0.8;
555
+ margin-bottom: 0.5rem;
556
+ `;
557
+ styled40.input`
558
+ box-sizing: border-box;
559
+ height: 2.75rem;
560
+ width: 100%;
561
+ border-radius: 6px;
562
+ border: 1px solid ${(props) => props.$borderColor || "#d1d5db"};
563
+ background-color: ${(props) => props.$bgColor ? colors.background[props.$bgColor] : colors.background?.secondary};
564
+ padding: 0 0.75rem;
565
+ font-size: 15px;
566
+ color: ${(props) => props.$textColor ? colors.text[props.$textColor] : colors.text.primary};
567
+ outline: none;
568
+
569
+ &::placeholder {
570
+ color: ${(props) => props.$placeholderColor ? colors.text[props.$placeholderColor] : colors.text.secondary};
571
+ }
572
+
573
+ &:focus {
574
+ box-shadow: 0 0 0 2px ${(props) => {
575
+ const color = props.$focusRingColor ? colors.text[props.$focusRingColor] : colors.text.primary;
576
+ return `${color}33`;
577
+ }};
578
+ }
579
+ `;
580
+ styled40.textarea`
581
+ box-sizing: border-box;
582
+ width: 100%;
583
+ border-radius: 6px;
584
+ border: 1px solid ${(props) => props.$borderColor || "#d1d5db"};
585
+ background-color: ${(props) => props.$bgColor ? colors.background[props.$bgColor] : colors.background?.secondary};
586
+ padding: 0.75rem;
587
+ font-size: 15px;
588
+ color: ${(props) => props.$textColor ? colors.text[props.$textColor] : colors.text.primary};
589
+ outline: none;
590
+
591
+ &::placeholder {
592
+ color: ${(props) => props.$placeholderColor ? colors.text[props.$placeholderColor] : colors.text.secondary};
593
+ }
594
+
595
+ &:focus {
596
+ box-shadow: 0 0 0 2px ${(props) => {
597
+ const color = props.$focusRingColor ? colors.text[props.$focusRingColor] : colors.text.primary;
598
+ return `${color}33`;
599
+ }};
600
+ }
601
+ `;
602
+ styled40.button`
603
+ width: 2.5rem;
604
+ height: 2.5rem;
605
+ display: flex;
606
+ align-items: center;
607
+ justify-content: center;
608
+ border-radius: 4px;
609
+ background-color: ${(props) => {
610
+ switch (props.variant) {
611
+ case "filled":
612
+ return colors.background.brand;
613
+ case "primary":
614
+ case "secondary":
615
+ case "inverse":
616
+ default:
617
+ return "transparent";
618
+ }
619
+ }};
620
+ border: 2px solid ${(props) => {
621
+ switch (props.variant) {
622
+ case "primary":
623
+ return colors.text.brand;
624
+ case "secondary":
625
+ return colors.text.blue;
626
+ case "inverse":
627
+ return colors.text.secondary;
628
+ case "filled":
629
+ return colors.background.brand;
630
+ default:
631
+ return colors.text.brand;
632
+ }
633
+ }};
634
+ color: ${(props) => {
635
+ switch (props.variant) {
636
+ case "primary":
637
+ return colors.text.brand;
638
+ case "secondary":
639
+ return colors.text.blue;
640
+ case "inverse":
641
+ return colors.text.secondary;
642
+ case "filled":
643
+ return colors.text.secondary;
644
+ default:
645
+ return colors.text.brand;
646
+ }
647
+ }};
648
+ cursor: pointer;
649
+ transition: all 0.2s;
650
+
651
+ &:hover {
652
+ opacity: 0.8;
653
+ }
654
+
655
+ svg {
656
+ width: 1.25rem;
657
+ height: 1.25rem;
658
+ }
659
+ `;
660
+ styled40.label`
661
+ display: flex;
662
+ align-items: flex-start;
663
+ gap: 0.75rem;
664
+ cursor: pointer;
665
+ font-size: 0.875rem;
666
+ line-height: 1.5;
667
+ `;
668
+ styled40.input.attrs({ type: "checkbox" })`
669
+ position: absolute;
670
+ opacity: 0;
671
+ cursor: pointer;
672
+ `;
673
+ styled40.div`
674
+ width: 1.25rem;
675
+ height: 1.25rem;
676
+ border: 2px solid ${(props) => {
677
+ if (props.$checked) {
678
+ switch (props.variant) {
679
+ case "primary":
680
+ return colors.text.brand;
681
+ case "secondary":
682
+ return colors.text.blue;
683
+ case "subtle":
684
+ return colors.text.subtle;
685
+ default:
686
+ return colors.text.brand;
687
+ }
688
+ }
689
+ return colors.text.subtle;
690
+ }};
691
+ border-radius: 4px;
692
+ background-color: ${(props) => {
693
+ if (props.$checked) {
694
+ switch (props.variant) {
695
+ case "primary":
696
+ return colors.text.brand;
697
+ case "secondary":
698
+ return colors.text.blue;
699
+ case "subtle":
700
+ return colors.text.subtle;
701
+ default:
702
+ return colors.text.brand;
703
+ }
704
+ }
705
+ return "transparent";
706
+ }};
707
+ display: flex;
708
+ align-items: center;
709
+ justify-content: center;
710
+ flex-shrink: 0;
711
+ transition: all 0.2s;
712
+
713
+ &::after {
714
+ content: '✓';
715
+ color: ${colors.text.secondary}; // white checkmark
716
+ font-size: 0.875rem;
717
+ font-weight: bold;
718
+ display: ${(props) => props.$checked ? "block" : "none"};
719
+ }
720
+ `;
721
+ styled40.span`
722
+ color: ${(props) => {
723
+ switch (props.variant) {
724
+ case "primary":
725
+ return colors.text.primary;
726
+ case "secondary":
727
+ return colors.text.blue;
728
+ case "subtle":
729
+ return colors.text.subtle;
730
+ default:
731
+ return colors.text.primary;
732
+ }
733
+ }};
734
+ `;
735
+ styled40.a`
736
+ color: ${(props) => {
737
+ switch (props.variant) {
738
+ case "primary":
739
+ return colors.text.brand;
740
+ case "secondary":
741
+ return colors.text.blue;
742
+ case "subtle":
743
+ return colors.text.subtle;
744
+ default:
745
+ return colors.text.brand;
746
+ }
747
+ }};
748
+ font-weight: 700;
749
+ text-decoration: underline;
750
+ cursor: pointer;
751
+
752
+ &:hover {
753
+ opacity: 0.8;
754
+ }
755
+ `;
756
+ var variants7 = {
757
+ sm: {
758
+ fontSize: "14px",
759
+ fontWeight: 500
760
+ },
761
+ md: {
762
+ fontSize: "16px",
763
+ fontWeight: 500
764
+ },
765
+ lg: {
766
+ fontSize: "18px",
767
+ fontWeight: 500
768
+ }
769
+ };
770
+ styled40.h1`
771
+ color: ${(props) => colors.text[props?.color]};
772
+ font-size: ${(props) => variants7[props.variant].fontSize};
773
+ font-weight: ${(props) => variants7[props.variant].fontWeight};
774
+ `;
775
+ var StyledTextarea = styled40.textarea`
776
+ display: block;
777
+ width: 100%;
778
+ height: 100%;
779
+ outline: none;
780
+ background-color: transparent;
781
+ color: ${colors.text.subtle};
782
+ font-weight: 600;
783
+ resize: vertical;
784
+ `;
785
+ var Textarea = ({
786
+ name,
787
+ onChange,
788
+ rows = 3,
789
+ ...rest
790
+ }) => {
791
+ return /* @__PURE__ */ jsx(StyledTextarea, { name, onChange, rows, ...rest });
792
+ };
793
+ Textarea.types = InputTypes;
794
+ var bgVariants = ["primary", "secondary", "tertiary", "subtle", "blue", "brand", "light", "transparent"];
795
+ var textVariants = ["brand", "primary", "secondary", "tertiary", "subtle", "light", "error", "blue"];
796
+ var StyledContainer2 = styled40.button`
797
+ padding: 0 1rem;
798
+ height: 2.5rem;
799
+ display: flex;
800
+ align-items: center;
801
+ flex-shrink:0;
802
+ white-space: nowrap;
803
+ background-color: ${(props) => {
804
+ if (props.bgVariant === "transparent") return "transparent";
805
+ return colors.background[props.bgVariant];
806
+ }};
807
+ transition: all 0.2s;
808
+ border: none;
809
+ cursor: pointer;
810
+
811
+ &:hover {
812
+ opacity: 0.9;
813
+ }
814
+ `;
815
+ var StyledText3 = styled40.span`
816
+ color: ${(props) => colors.text[props.textVariant]};
817
+ font-size: 0.75rem;
818
+ letter-spacing: 0.05em;
819
+ text-transform: ${(props) => props.$uppercase ? "uppercase" : "none"};
820
+ font-weight: ${(props) => props.$bold ? 700 : 600};
821
+ `;
822
+ var TextButton = ({
823
+ text,
824
+ onClick,
825
+ asChild = false,
826
+ bgVariant = "brand",
827
+ textVariant = "secondary",
828
+ uppercase = true,
829
+ bold = false
830
+ }) => {
831
+ return /* @__PURE__ */ jsx(
832
+ StyledContainer2,
833
+ {
834
+ as: asChild ? "div" : "button",
835
+ onClick,
836
+ bgVariant,
837
+ children: /* @__PURE__ */ jsx(StyledText3, { textVariant, $uppercase: uppercase, $bold: bold, children: text })
838
+ }
839
+ );
840
+ };
841
+ TextButton.bgVariants = bgVariants;
842
+ TextButton.textVariants = textVariants;
843
+ styled40.div`
844
+ display: inline-flex;
845
+ background-color: ${(props) => {
846
+ switch (props.variant) {
847
+ case "primary":
848
+ return colors.background.secondary;
849
+ case "secondary":
850
+ return colors.background.light;
851
+ case "subtle":
852
+ return colors.background.subtle;
853
+ default:
854
+ return colors.background.secondary;
855
+ }
856
+ }};
857
+ border-radius: 9999px;
858
+ padding: 0.25rem;
859
+ gap: 0.25rem;
860
+ `;
861
+ styled40.button`
862
+ padding: 0.5rem 1.5rem;
863
+ border-radius: 9999px;
864
+ border: none;
865
+ font-size: 0.875rem;
866
+ font-weight: 600;
867
+ cursor: pointer;
868
+ transition: all 0.2s;
869
+ text-transform: uppercase;
870
+ letter-spacing: 0.05em;
871
+
872
+ background-color: ${(props) => {
873
+ if (!props.$isActive) return "transparent";
874
+ switch (props.variant) {
875
+ case "primary":
876
+ return colors.background.brand;
877
+ case "secondary":
878
+ return colors.background.blue;
879
+ case "subtle":
880
+ return colors.background.subtle;
881
+ default:
882
+ return colors.background.brand;
883
+ }
884
+ }};
885
+
886
+ color: ${(props) => {
887
+ if (props.$isActive) {
888
+ return colors.text.secondary;
889
+ }
890
+ switch (props.variant) {
891
+ case "primary":
892
+ return colors.text.brand;
893
+ case "secondary":
894
+ return colors.text.blue;
895
+ case "subtle":
896
+ return colors.text.subtle;
897
+ default:
898
+ return colors.text.brand;
899
+ }
900
+ }};
901
+
902
+ &:hover {
903
+ opacity: ${(props) => props.$isActive ? 1 : 0.7};
904
+ }
905
+ `;
906
+ var Container6 = styled40.div`
907
+ display: flex;
908
+ align-items: center;
909
+ justify-content: space-between;
910
+ width: 100%;
911
+ `;
912
+ var HeaderContainer = styled40.div`
913
+ display: flex;
914
+ align-items: center;
915
+ gap: ${spaces[2]};
916
+
917
+ &:hover {
918
+ cursor: pointer;
919
+ }
920
+ `;
921
+ var AccordionHeader = ({
922
+ title,
923
+ isOpen,
924
+ buttonText,
925
+ onAccordionPress,
926
+ onButtonPress,
927
+ rightElement
928
+ }) => {
929
+ return /* @__PURE__ */ jsxs(Container6, { children: [
930
+ /* @__PURE__ */ jsxs(HeaderContainer, { onClick: onAccordionPress, children: [
931
+ /* @__PURE__ */ jsx(Fragment, { children: isOpen ? /* @__PURE__ */ jsx(FaMinus, { color: colors.text.primary, size: sizes.lg }) : /* @__PURE__ */ jsx(FaPlus$1, { color: colors.text.primary, size: sizes.lg }) }),
932
+ /* @__PURE__ */ jsx(Header, { variant: "h2", children: title })
933
+ ] }),
934
+ rightElement ? rightElement : /* @__PURE__ */ jsx(
935
+ Button,
936
+ {
937
+ text: buttonText,
938
+ icon: /* @__PURE__ */ jsx(FaPlus, { fontSize: "10px" }),
939
+ onClick: onButtonPress
940
+ }
941
+ )
942
+ ] });
943
+ };
944
+ var Container7 = styled40.div`
945
+ border-radius: ${radii.lg};
946
+ background-color: ${colors.background.secondary};
947
+ padding: ${spaces[4]};
948
+ `;
949
+ var Accordion = ({
950
+ buttonText,
951
+ onButtonPress,
952
+ title,
953
+ children,
954
+ rightElement
955
+ }) => {
956
+ const [isOpen, setIsOpen] = useState(false);
957
+ return /* @__PURE__ */ jsxs(Container7, { children: [
958
+ /* @__PURE__ */ jsx(
959
+ AccordionHeader,
960
+ {
961
+ isOpen,
962
+ buttonText,
963
+ onButtonPress,
964
+ onAccordionPress: () => setIsOpen((previousState) => !previousState),
965
+ title,
966
+ rightElement
967
+ }
968
+ ),
969
+ isOpen && /* @__PURE__ */ jsx(AccordionContent, { children })
970
+ ] });
971
+ };
972
+ var variants9 = ["primary", "inverse", "subtle"];
973
+ var AddressContainer = styled40.div`
974
+ display: flex;
975
+ flex-direction: column;
976
+ background-color: transparent;
977
+ padding: 2rem;
978
+
979
+ /* Desktop: normal spacing */
980
+ @media (min-width: 768px) {
981
+ gap: 1rem;
982
+ }
983
+
984
+ /* Mobile: no gap, handled by collapse */
985
+ @media (max-width: 767px) {
986
+ padding: 1rem;
987
+ gap: 0;
988
+ }
989
+ `;
990
+ var HeaderWrapper = styled40.div`
991
+ display: flex;
992
+ justify-content: space-between;
993
+ align-items: center;
994
+
995
+ /* Desktop: not clickable */
996
+ @media (min-width: 768px) {
997
+ cursor: default;
998
+ }
999
+
1000
+ /* Mobile: clickable */
1001
+ @media (max-width: 767px) {
1002
+ cursor: ${(props) => props.$isClickable ? "pointer" : "default"};
1003
+ padding: 0.5rem 0;
1004
+ user-select: none;
1005
+ }
1006
+ `;
1007
+ var ToggleIcon = styled40.div`
1008
+ display: none;
1009
+
1010
+ /* Only show on mobile */
1011
+ @media (max-width: 767px) {
1012
+ display: flex;
1013
+ align-items: center;
1014
+ font-size: 1.5rem;
1015
+
1016
+ color: ${(props) => {
1017
+ switch (props.variant) {
1018
+ case "primary":
1019
+ return colors.text.primary;
1020
+ case "inverse":
1021
+ return colors.text.secondary;
1022
+ case "subtle":
1023
+ return colors.text.subtle;
1024
+ default:
1025
+ return colors.text.primary;
1026
+ }
1027
+ }};
1028
+ }
1029
+ `;
1030
+ var CollapseContent = styled40.div`
1031
+ display: flex;
1032
+ flex-direction: column;
1033
+ gap: 1rem;
1034
+
1035
+ /* Desktop: always visible */
1036
+ @media (min-width: 768px) {
1037
+ display: flex;
1038
+ }
1039
+
1040
+ /* Mobile: collapsible */
1041
+ @media (max-width: 767px) {
1042
+ max-height: ${(props) => props.$isOpen ? "500px" : "0"};
1043
+ opacity: ${(props) => props.$isOpen ? "1" : "0"};
1044
+ overflow: hidden;
1045
+ transition: max-height 0.3s ease, opacity 0.3s ease;
1046
+ padding-top: ${(props) => props.$isOpen ? "1rem" : "0"};
1047
+ }
1048
+ `;
1049
+ var InfoSection = styled40.div`
1050
+ display: flex;
1051
+ flex-direction: column;
1052
+ gap: 0.5rem;
1053
+ `;
1054
+ var InfoText = styled40.p`
1055
+ margin: 0;
1056
+ font-size: 0.875rem;
1057
+ line-height: 1.6;
1058
+ color: ${(props) => {
1059
+ switch (props.variant) {
1060
+ case "primary":
1061
+ return colors.text.primary;
1062
+ case "inverse":
1063
+ return colors.text.secondary;
1064
+ case "subtle":
1065
+ return colors.text.subtle;
1066
+ default:
1067
+ return colors.text.primary;
1068
+ }
1069
+ }};
1070
+ font-weight: ${(props) => props.$bold ? 600 : 400};
1071
+ `;
1072
+ var ButtonWrapper = styled40.div`
1073
+ margin-top: 0.5rem;
1074
+ `;
1075
+ var Address = ({
1076
+ title,
1077
+ phone,
1078
+ email,
1079
+ addressLines,
1080
+ directionsText = "GET DIRECTIONS",
1081
+ onDirectionsClick,
1082
+ variant = "primary"
1083
+ }) => {
1084
+ const [isOpen, setIsOpen] = useState(false);
1085
+ const handleDirectionsClick = () => {
1086
+ if (onDirectionsClick) {
1087
+ onDirectionsClick();
1088
+ } else {
1089
+ const fullAddress = addressLines.join(", ");
1090
+ const encodedAddress = encodeURIComponent(fullAddress);
1091
+ const mapsUrl = `https://www.google.com/maps/search/?api=1&query=${encodedAddress}`;
1092
+ window.open(mapsUrl, "_blank");
1093
+ }
1094
+ };
1095
+ const getHeaderVariant = () => {
1096
+ switch (variant) {
1097
+ case "primary":
1098
+ return "primary";
1099
+ case "inverse":
1100
+ return "secondary";
1101
+ case "subtle":
1102
+ return "subtle";
1103
+ default:
1104
+ return "primary";
1105
+ }
1106
+ };
1107
+ const getButtonBgVariant = () => {
1108
+ return "transparent";
1109
+ };
1110
+ const getButtonTextVariant = () => {
1111
+ switch (variant) {
1112
+ case "primary":
1113
+ return "primary";
1114
+ case "inverse":
1115
+ return "secondary";
1116
+ case "subtle":
1117
+ return "subtle";
1118
+ default:
1119
+ return "primary";
1120
+ }
1121
+ };
1122
+ return /* @__PURE__ */ jsxs(AddressContainer, { children: [
1123
+ /* @__PURE__ */ jsxs(
1124
+ HeaderWrapper,
1125
+ {
1126
+ $isClickable: true,
1127
+ onClick: () => setIsOpen(!isOpen),
1128
+ children: [
1129
+ /* @__PURE__ */ jsx(Header, { variant: "h1", color: getHeaderVariant(), children: title }),
1130
+ /* @__PURE__ */ jsx(ToggleIcon, { variant, children: isOpen ? /* @__PURE__ */ jsx(HiMinus, {}) : /* @__PURE__ */ jsx(HiPlus, {}) })
1131
+ ]
1132
+ }
1133
+ ),
1134
+ /* @__PURE__ */ jsxs(CollapseContent, { $isOpen: isOpen, children: [
1135
+ /* @__PURE__ */ jsxs(InfoSection, { children: [
1136
+ phone && /* @__PURE__ */ jsx(InfoText, { variant, children: phone }),
1137
+ email && /* @__PURE__ */ jsx(InfoText, { variant, $bold: true, children: email.toUpperCase() }),
1138
+ addressLines.map((line, index) => /* @__PURE__ */ jsx(InfoText, { variant, children: line }, index))
1139
+ ] }),
1140
+ /* @__PURE__ */ jsx(ButtonWrapper, { children: /* @__PURE__ */ jsx(
1141
+ TextButton,
1142
+ {
1143
+ text: directionsText,
1144
+ onClick: handleDirectionsClick,
1145
+ bgVariant: getButtonBgVariant(),
1146
+ textVariant: getButtonTextVariant(),
1147
+ uppercase: true
1148
+ }
1149
+ ) })
1150
+ ] })
1151
+ ] });
1152
+ };
1153
+ Address.variants = variants9;
1154
+ var CheckboxWrapper = styled40.label`
1155
+ display: flex;
1156
+ align-items: center;
1157
+ gap: ${spaces[2]};
1158
+ cursor: pointer;
1159
+ font-size: 16px;
1160
+ color: ${colors.text.subtle};
1161
+ `;
1162
+ var HiddenCheckbox2 = styled40.input.attrs({ type: "checkbox" })`
1163
+ display: none;
1164
+ `;
1165
+ var StyledCheckbox2 = styled40.span`
1166
+ width: ${sizes.lg};
1167
+ height: ${sizes.lg};
1168
+ border: 1.5px solid ${colors.background.tertiary};
1169
+ border-radius: ${radii.md};
1170
+ background-color: ${({ checked }) => checked ? colors.background.tertiary : "transparent"};
1171
+ transition: all 0.2s ease-in-out;
1172
+ `;
1173
+ var CheckboxItem = ({
1174
+ label,
1175
+ onClick,
1176
+ checked
1177
+ }) => {
1178
+ return /* @__PURE__ */ jsxs(CheckboxWrapper, { onClick, children: [
1179
+ /* @__PURE__ */ jsx(HiddenCheckbox2, { checked, readOnly: true }),
1180
+ /* @__PURE__ */ jsx(StyledCheckbox2, { checked }),
1181
+ label
1182
+ ] });
1183
+ };
1184
+ var Container8 = styled40.div`
1185
+ display: flex;
1186
+ flex-direction: column;
1187
+ `;
1188
+ var OptionsContainer = styled40.div`
1189
+ display: flex;
1190
+ gap: ${spaces[4]};
1191
+ `;
1192
+ var Checkbox = ({
1193
+ error,
1194
+ label,
1195
+ onChange,
1196
+ options,
1197
+ value
1198
+ }) => {
1199
+ return /* @__PURE__ */ jsxs(Container8, { children: [
1200
+ typeof label === "string" && label?.length ? /* @__PURE__ */ jsx(
1201
+ Label,
1202
+ {
1203
+ value: label,
1204
+ color: typeof error === "string" && error?.length ? "error" : void 0,
1205
+ fontWeight: "600"
1206
+ }
1207
+ ) : null,
1208
+ /* @__PURE__ */ jsx(OptionsContainer, { children: options.map((option) => /* @__PURE__ */ jsx(
1209
+ CheckboxItem,
1210
+ {
1211
+ checked: value === option.value,
1212
+ label: option.label,
1213
+ onClick: () => onChange(option.value),
1214
+ value: option.value
1215
+ }
1216
+ )) })
1217
+ ] });
1218
+ };
1219
+ var Container9 = styled40.div`
1220
+ display: flex;
1221
+ flex-direction: column;
1222
+ gap: 1rem;
1223
+ background-color: #ffffff;
1224
+ width: 284px;
1225
+ height: 482px;
1226
+ padding: 1.5rem;
1227
+ border-radius: 8px;
1228
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
1229
+ flex-shrink: 0;
1230
+
1231
+ @media (max-width: 767px) {
1232
+ width: 70vw;
1233
+ }
1234
+ `;
1235
+ var ThumbnailWrapper2 = styled40.div`
1236
+ width: 180px;
1237
+ height: 180px;
1238
+ border-radius: 50%;
1239
+ background-color: ${(props) => colors.background[props.thumbnailBgColor]};
1240
+ display: flex;
1241
+ align-items: center;
1242
+ justify-content: center;
1243
+ flex-shrink: 0;
1244
+ align-self: center;
1245
+ `;
1246
+ var ButtonWrapper2 = styled40.div`
1247
+ display: flex;
1248
+ justify-content: flex-start;
1249
+ margin-top: auto;
1250
+ `;
1251
+ var ContentCard = ({
1252
+ thumbnail,
1253
+ title,
1254
+ description,
1255
+ onArrowClick,
1256
+ headerVariant = "h2",
1257
+ titleColor = "brand",
1258
+ descriptionVariant = "subtle",
1259
+ arrowVariant = "teal",
1260
+ thumbnailBgColor = "brand"
1261
+ }) => {
1262
+ return /* @__PURE__ */ jsxs(Container9, { children: [
1263
+ /* @__PURE__ */ jsx(ThumbnailWrapper2, { thumbnailBgColor, children: thumbnail }),
1264
+ /* @__PURE__ */ jsx(Header, { variant: headerVariant, color: titleColor, children: title }),
1265
+ /* @__PURE__ */ jsx(Description, { variant: descriptionVariant, children: description }),
1266
+ /* @__PURE__ */ jsx(ButtonWrapper2, { children: /* @__PURE__ */ jsx(
1267
+ ArrowButton,
1268
+ {
1269
+ onClick: onArrowClick,
1270
+ variant: arrowVariant
1271
+ }
1272
+ ) })
1273
+ ] });
1274
+ };
1275
+ var variants10 = ["primary", "secondary", "transparent"];
1276
+ var Container10 = styled40.div`
1277
+ display: flex;
1278
+ flex-direction: column;
1279
+ gap: 1.5rem;
1280
+ padding: 3rem 2rem;
1281
+ max-width: 500px;
1282
+
1283
+ /* Mobile adjustments */
1284
+ @media (max-width: 767px) {
1285
+ padding: 2rem 1rem;
1286
+ max-width: 100%;
1287
+ }
1288
+ `;
1289
+ var Header2 = styled40.h1`
1290
+ margin: 0;
1291
+ font-size: 2.5rem;
1292
+ font-weight: 700;
1293
+ line-height: 1.2;
1294
+ color: ${(props) => colors.text[props.textColor]};
1295
+
1296
+ /* Responsive font size */
1297
+ @media (max-width: 767px) {
1298
+ font-size: 2rem;
1299
+ }
1300
+
1301
+ @media (max-width: 480px) {
1302
+ font-size: 1.75rem;
1303
+ }
1304
+ `;
1305
+ var Description3 = styled40.p`
1306
+ margin: 0;
1307
+ font-size: 1.125rem;
1308
+ line-height: 1.6;
1309
+ color: ${(props) => colors.text[props.textColor]};
1310
+
1311
+ /* Responsive font size */
1312
+ @media (max-width: 767px) {
1313
+ font-size: 1rem;
1314
+ }
1315
+ `;
1316
+ var ButtonGroup = styled40.div`
1317
+ display: flex;
1318
+ gap: 1rem;
1319
+ align-items: center;
1320
+
1321
+ /* Stack vertically on mobile */
1322
+ @media (max-width: 767px) {
1323
+ flex-direction: column;
1324
+ align-items: stretch;
1325
+ width: 100%;
1326
+ }
1327
+ `;
1328
+ var CTAContainer = ({
1329
+ header,
1330
+ description,
1331
+ primaryButtonText,
1332
+ secondaryButtonText,
1333
+ onPrimaryClick,
1334
+ onSecondaryClick,
1335
+ variant = "transparent",
1336
+ headerTextColor = "secondary",
1337
+ descriptionTextColor = "secondary",
1338
+ primaryArrowVariant = "teal",
1339
+ primaryTextBgVariant = "brand",
1340
+ primaryTextVariant = "secondary",
1341
+ secondaryBgVariant = "transparent",
1342
+ secondaryTextVariant = "secondary"
1343
+ }) => {
1344
+ return /* @__PURE__ */ jsxs(Container10, { variant, children: [
1345
+ /* @__PURE__ */ jsx(Header2, { textColor: headerTextColor, children: header }),
1346
+ /* @__PURE__ */ jsx(Description3, { textColor: descriptionTextColor, children: description }),
1347
+ /* @__PURE__ */ jsxs(ButtonGroup, { children: [
1348
+ /* @__PURE__ */ jsx(
1349
+ ExtendedButton,
1350
+ {
1351
+ text: primaryButtonText,
1352
+ onClick: onPrimaryClick,
1353
+ arrowVariant: primaryArrowVariant,
1354
+ textBgVariant: primaryTextBgVariant,
1355
+ textVariant: primaryTextVariant
1356
+ }
1357
+ ),
1358
+ secondaryButtonText && /* @__PURE__ */ jsx(
1359
+ TextButton,
1360
+ {
1361
+ text: secondaryButtonText,
1362
+ onClick: onSecondaryClick,
1363
+ bgVariant: secondaryBgVariant,
1364
+ textVariant: secondaryTextVariant
1365
+ }
1366
+ )
1367
+ ] })
1368
+ ] });
1369
+ };
1370
+ CTAContainer.variants = variants10;
1371
+ var Container11 = styled40.div`
1372
+ width: 100%;
1373
+ `;
1374
+ var InnerContainer2 = styled40.div`
1375
+ position: relative;
1376
+ width: 100%;
1377
+ min-height: 58px;
1378
+ display: flex;
1379
+ align-items: center;
1380
+
1381
+ border-style: solid;
1382
+ border-width: ${(props) => props?.variant === "outline" ? sizes[0] : "0px"};
1383
+ border-color: ${(props) => props?.error ? colors.border.error : colors.border.active};
1384
+ border-radius: ${radii.lg};
1385
+
1386
+ padding: ${spaces[3]} ${spaces[3]} ${spaces[2]};
1387
+
1388
+ &:hover {
1389
+ border-color: ${colors.border.hover};
1390
+ cursor: text;
1391
+ }
1392
+
1393
+ &:focus-within {
1394
+ border-color: ${colors.border.focus};
1395
+ }
1396
+ `;
1397
+ var InputContainer = ({
1398
+ error,
1399
+ children,
1400
+ variant = "outline"
1401
+ }) => {
1402
+ return /* @__PURE__ */ jsxs(Container11, { children: [
1403
+ /* @__PURE__ */ jsx(InnerContainer2, { error, variant, children }),
1404
+ typeof error === "string" && /* @__PURE__ */ jsx(Label, { value: error, color: "error" })
1405
+ ] });
1406
+ };
1407
+ var Select = styled40.select`
1408
+ width: 100%;
1409
+ color: ${colors.text.subtle};
1410
+ background: transparent;
1411
+ font-weight: 600;
1412
+ border: none;
1413
+ outline: none;
1414
+ padding: 0;
1415
+ margin: 0;
1416
+
1417
+ &:focus,
1418
+ &:active,
1419
+ &:hover {
1420
+ border: none;
1421
+ outline: none;
1422
+ box-shadow: none;
1423
+ }
1424
+
1425
+ &:invalid {
1426
+ color: ${colors.text.subtle};
1427
+ }
1428
+ `;
1429
+ var OptionItem = styled40.option`
1430
+ color: ${(props) => props.disabled ? colors.text.light : colors.text.subtle};
1431
+ `;
1432
+ var Dropdown = ({
1433
+ error,
1434
+ onChange,
1435
+ options,
1436
+ value,
1437
+ label,
1438
+ name,
1439
+ placeholder = "Select an option",
1440
+ disabled
1441
+ }) => {
1442
+ const isInvalid = useMemo(
1443
+ () => error ? typeof error === "string" && error?.length > 0 : false,
1444
+ [error]
1445
+ );
1446
+ return /* @__PURE__ */ jsxs(InputContainer, { error, children: [
1447
+ typeof label === "string" && /* @__PURE__ */ jsx(
1448
+ FloatingLabel,
1449
+ {
1450
+ value: label,
1451
+ color: isInvalid ? "error" : "subtle",
1452
+ fontWeight: "600"
1453
+ }
1454
+ ),
1455
+ /* @__PURE__ */ jsxs(
1456
+ Select,
1457
+ {
1458
+ name,
1459
+ value: value ?? "",
1460
+ onChange: (e) => onChange(e.target.value),
1461
+ isInvalid,
1462
+ disabled,
1463
+ children: [
1464
+ /* @__PURE__ */ jsx(OptionItem, { value: "", disabled: true, hidden: true, children: placeholder }),
1465
+ options.map((option) => /* @__PURE__ */ jsx(OptionItem, { value: option.value, children: option.label }, option.value))
1466
+ ]
1467
+ }
1468
+ )
1469
+ ] });
1470
+ };
1471
+ var AccordionContainer = styled40.div`
1472
+ border-bottom: 1px solid ${colors.text.light};
1473
+ padding: 1.5rem 0;
1474
+ `;
1475
+ var AccordionHeader2 = styled40.button`
1476
+ width: 100%;
1477
+ display: flex;
1478
+ align-items: center;
1479
+ gap: 1rem;
1480
+ background: none;
1481
+ border: none;
1482
+ cursor: pointer;
1483
+ text-align: left;
1484
+ padding: 0;
1485
+ `;
1486
+ var NumberBadge = styled40.span`
1487
+ font-size: 1rem;
1488
+ font-weight: 600;
1489
+ color: ${(props) => colors.text[props.numberColor]};
1490
+ flex-shrink: 0;
1491
+ `;
1492
+ var HeaderWrapper2 = styled40.div`
1493
+ flex-grow: 1;
1494
+ `;
1495
+ var IconWrapper = styled40.div`
1496
+ color: ${(props) => colors.text[props.iconColor]};
1497
+ flex-shrink: 0;
1498
+ display: flex;
1499
+ align-items: center;
1500
+ justify-content: center;
1501
+ `;
1502
+ var AccordionContent2 = styled40.div`
1503
+ max-height: ${(props) => props.$isOpen ? "1000px" : "0"};
1504
+ overflow: hidden;
1505
+ transition: max-height 0.3s ease-in-out;
1506
+ padding-left: 2.5rem;
1507
+ margin-top: ${(props) => props.$isOpen ? "1rem" : "0"};
1508
+ `;
1509
+ var FAQAccordion = ({
1510
+ number,
1511
+ title,
1512
+ content,
1513
+ defaultOpen = false,
1514
+ headerVariant = "h3",
1515
+ numberColor = "brand",
1516
+ titleColor = "brand",
1517
+ iconColor = "brand",
1518
+ contentVariant = "primary"
1519
+ }) => {
1520
+ const [isOpen, setIsOpen] = useState(defaultOpen);
1521
+ return /* @__PURE__ */ jsxs(AccordionContainer, { children: [
1522
+ /* @__PURE__ */ jsxs(AccordionHeader2, { onClick: () => setIsOpen(!isOpen), children: [
1523
+ /* @__PURE__ */ jsx(NumberBadge, { numberColor, children: number }),
1524
+ /* @__PURE__ */ jsx(HeaderWrapper2, { children: /* @__PURE__ */ jsx(Header, { variant: headerVariant, color: titleColor, children: title }) }),
1525
+ /* @__PURE__ */ jsx(IconWrapper, { iconColor, children: isOpen ? /* @__PURE__ */ jsx(HiMinus, { size: 24 }) : /* @__PURE__ */ jsx(HiPlus, { size: 24 }) })
1526
+ ] }),
1527
+ /* @__PURE__ */ jsx(AccordionContent2, { $isOpen: isOpen, children: /* @__PURE__ */ jsx(Description, { variant: contentVariant, children: content }) })
1528
+ ] });
1529
+ };
1530
+ var Container12 = styled40.div`
1531
+ display: flex;
1532
+ flex-direction: column;
1533
+ `;
1534
+ var FeatureWrapper = styled40.div`
1535
+ padding: 1rem 0;
1536
+ border-bottom: 1px solid #e5e7eb;
1537
+
1538
+ &:last-child {
1539
+ border-bottom: none;
1540
+ }
1541
+ `;
1542
+ var FeatureContainer = ({
1543
+ items,
1544
+ thumbnailBgColor = "brand",
1545
+ titleColor = "primary",
1546
+ descriptionVariant = "subtle"
1547
+ }) => {
1548
+ return /* @__PURE__ */ jsx(Container12, { children: items.map((item, index) => /* @__PURE__ */ jsx(FeatureWrapper, { children: /* @__PURE__ */ jsx(
1549
+ FeatureItem,
1550
+ {
1551
+ thumbnail: item.thumbnail,
1552
+ title: item.title,
1553
+ description: item.description,
1554
+ thumbnailSize: item.thumbnailSize,
1555
+ thumbnailBgColor,
1556
+ titleColor,
1557
+ descriptionVariant
1558
+ }
1559
+ ) }, index)) });
1560
+ };
1561
+ var FileButton = ({
1562
+ onFileSelect,
1563
+ accept = [".pdf"],
1564
+ multiple = false,
1565
+ ...rest
1566
+ }) => {
1567
+ const fileInputRef = useRef(null);
1568
+ const handleClick = () => {
1569
+ if (fileInputRef.current) {
1570
+ fileInputRef.current.click();
1571
+ }
1572
+ };
1573
+ const handleFileChange = (event) => {
1574
+ const files = event.target.files;
1575
+ if (files && files.length > 0 && onFileSelect) {
1576
+ Array.from(files).forEach((file) => onFileSelect(file));
1577
+ }
1578
+ };
1579
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1580
+ /* @__PURE__ */ jsx(
1581
+ Button,
1582
+ {
1583
+ ...rest,
1584
+ icon: /* @__PURE__ */ jsx(FaPlus, { fontSize: "10px" }),
1585
+ onClick: handleClick
1586
+ }
1587
+ ),
1588
+ /* @__PURE__ */ jsx(
1589
+ "input",
1590
+ {
1591
+ type: "file",
1592
+ ref: fileInputRef,
1593
+ style: { display: "none" },
1594
+ onChange: handleFileChange,
1595
+ accept: accept?.map((item) => item).join(","),
1596
+ multiple
1597
+ }
1598
+ )
1599
+ ] });
1600
+ };
1601
+ var Input2 = ({ label, error, ...rest }) => {
1602
+ const isInvalid = useMemo(
1603
+ () => typeof error === "string" && error.length > 0,
1604
+ [error]
1605
+ );
1606
+ return /* @__PURE__ */ jsxs(InputContainer, { error, children: [
1607
+ typeof label === "string" && /* @__PURE__ */ jsx(
1608
+ FloatingLabel,
1609
+ {
1610
+ color: isInvalid ? "error" : "subtle",
1611
+ value: label,
1612
+ fontWeight: "600"
1613
+ }
1614
+ ),
1615
+ /* @__PURE__ */ jsx(Input, { ...rest })
1616
+ ] });
1617
+ };
1618
+ Input2.types = Input.types;
1619
+ var fadeIn = keyframes`
1620
+ from { opacity: 0 }
1621
+ to { opacity: 1 }
1622
+ `;
1623
+ keyframes`
1624
+ from { transform: translateY(8px) scale(.98); opacity: 0 }
1625
+ to { transform: translateY(0) scale(1); opacity: 1 }
1626
+ `;
1627
+ var Overlay = styled40.div`
1628
+ height: 100vh;
1629
+ width: 100vw;
1630
+ background-color: rgba(0, 0, 0, 0.4);
1631
+ position: fixed;
1632
+ inset: 0;
1633
+ z-index: 1000;
1634
+ display: flex;
1635
+ align-items: ${(props) => props.contentPosition === "center" ? "center" : props.contentPosition === "bottom" ? "flex-end" : "flex-start"};
1636
+ justify-content: center;
1637
+ animation: ${fadeIn} 160ms ease-out;
1638
+ `;
1639
+ var ContentContainer = styled40.div`
1640
+ position: relative;
1641
+ width: min(${breakpoints.sm}, 92vw);
1642
+ max-height: 86vh;
1643
+ overflow: auto;
1644
+ border-radius: ${radii.xl};
1645
+ padding: ${spaces[6]};
1646
+ background-color: ${colors.background.primary};
1647
+ `;
1648
+ var Modal = ({
1649
+ visible,
1650
+ contentPosition = "center",
1651
+ dismissable = true,
1652
+ onClose,
1653
+ children
1654
+ }) => {
1655
+ function onDismiss() {
1656
+ if (dismissable) {
1657
+ onClose();
1658
+ }
1659
+ }
1660
+ if (!visible) return /* @__PURE__ */ jsx(Fragment, {});
1661
+ return /* @__PURE__ */ jsx(Overlay, { contentPosition, onClick: onDismiss, children: /* @__PURE__ */ jsx(ContentContainer, { onClick: (e) => e.stopPropagation(), children }) });
1662
+ };
1663
+ var Container13 = styled40.div`
1664
+ display: flex;
1665
+ align-items: center ;
1666
+ justify-content: space-between;
1667
+ padding: ${spaces[2]} ${spaces[3]};
1668
+ background-color: ${(props) => props.isComplete ? colors.background.blue : colors.background.light};
1669
+ border-radius: ${radii.sm};
1670
+ `;
1671
+ var Row = styled40.div`
1672
+ display: flex;
1673
+ align-items: center;
1674
+ gap: ${spaces[2]};
1675
+ `;
1676
+ var OverviewRowItem = ({ isComplete, isMainHeader, title }) => {
1677
+ return /* @__PURE__ */ jsxs(Container13, { isComplete, children: [
1678
+ /* @__PURE__ */ jsx(Header, { variant: isMainHeader ? "h2" : "h3", color: isComplete ? "secondary" : "primary", children: title }),
1679
+ /* @__PURE__ */ jsxs(Row, { children: [
1680
+ /* @__PURE__ */ jsx(Header, { variant: "h3", color: isComplete ? "secondary" : "primary", children: isComplete ? "Complete" : "Information Outstanding" }),
1681
+ isComplete ? /* @__PURE__ */ jsx(FaCircleCheck, { color: colors.background.success }) : /* @__PURE__ */ jsx(FaCircleExclamation, { color: colors.background.error })
1682
+ ] })
1683
+ ] });
1684
+ };
1685
+ function Spinner(props) {
1686
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(
1687
+ "svg",
1688
+ {
1689
+ "aria-hidden": "true",
1690
+ className: "w-8 h-8 text-gray-200 animate-spin dark:text-gray-600 fill-blue-600",
1691
+ viewBox: "0 0 100 101",
1692
+ fill: "none",
1693
+ xmlns: "http://www.w3.org/2000/svg",
1694
+ ...props,
1695
+ children: [
1696
+ /* @__PURE__ */ jsx(
1697
+ "path",
1698
+ {
1699
+ d: "M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z",
1700
+ fill: "currentColor"
1701
+ }
1702
+ ),
1703
+ /* @__PURE__ */ jsx(
1704
+ "path",
1705
+ {
1706
+ d: "M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z",
1707
+ fill: "currentFill"
1708
+ }
1709
+ )
1710
+ ]
1711
+ }
1712
+ ) });
1713
+ }
1714
+ var Container14 = styled40.div`
1715
+ width: '100%';
1716
+ min-height: '100vh';
1717
+ padding-bottom: ${spaces[9]};
1718
+ `;
1719
+ var HeaderContainer2 = styled40.div`
1720
+ padding: ${spaces[4.5]} ${spaces[6]};
1721
+ display: flex;
1722
+ align-items: center;
1723
+ justify-content: space-between;
1724
+ `;
1725
+ var ContentContainer2 = styled40.div`
1726
+ border-top: 1px solid ${colors.border.hover};
1727
+ `;
1728
+ var SpinnerContainer = styled40.div`
1729
+ display: flex;
1730
+ width: 100%;
1731
+ padding: ${spaces[6]};
1732
+ align-items: center;
1733
+ justify-content: center;
1734
+ `;
1735
+ var PageLayout = ({
1736
+ title,
1737
+ children,
1738
+ isLoading = false,
1739
+ rightElement
1740
+ }) => {
1741
+ return /* @__PURE__ */ jsxs(Container14, { children: [
1742
+ /* @__PURE__ */ jsxs(HeaderContainer2, { children: [
1743
+ /* @__PURE__ */ jsx(Header, { color: "subtle", children: title }),
1744
+ " ",
1745
+ rightElement && rightElement
1746
+ ] }),
1747
+ isLoading ? /* @__PURE__ */ jsx(SpinnerContainer, { children: /* @__PURE__ */ jsx(Spinner, {}) }) : /* @__PURE__ */ jsx(ContentContainer2, { children })
1748
+ ] });
1749
+ };
1750
+ var variants11 = ["documents", "properties"];
1751
+ var Container15 = styled40.div`
1752
+ display: flex;
1753
+ flex-direction: column;
1754
+ align-items: center;
1755
+ justify-content: center;
1756
+ flex: 1;
1757
+ gap: ${spaces[4]};
1758
+ padding: ${spaces[8]};
1759
+ `;
1760
+ var EmptyState = ({ variant, message }) => {
1761
+ const size = sizes.xl;
1762
+ const color = colors.text.primary;
1763
+ const Icon = useMemo(() => {
1764
+ switch (variant) {
1765
+ case "documents":
1766
+ return /* @__PURE__ */ jsx(FaRegFolderOpen, { size, color });
1767
+ case "properties":
1768
+ return /* @__PURE__ */ jsx(FaHouse, { size, color });
1769
+ }
1770
+ }, [variant]);
1771
+ return /* @__PURE__ */ jsxs(Container15, { children: [
1772
+ Icon,
1773
+ /* @__PURE__ */ jsx(Header, { variant: "h3", children: message })
1774
+ ] });
1775
+ };
1776
+ EmptyState.variants = variants11;
1777
+ var Container16 = styled40.div`
1778
+ width: 100%;
1779
+ height: 100%;
1780
+ `;
1781
+ var PDFPreviewer = ({ url }) => {
1782
+ const [error, setError] = useState(null);
1783
+ useEffect(() => {
1784
+ setError(null);
1785
+ try {
1786
+ new URL(url);
1787
+ } catch {
1788
+ setError("Invalid preview URL");
1789
+ }
1790
+ }, [url]);
1791
+ if (typeof error === "string")
1792
+ return /* @__PURE__ */ jsx(EmptyState, { message: "Failed to load this document", variant: "documents" });
1793
+ return /* @__PURE__ */ jsx(Container16, { children: /* @__PURE__ */ jsx(
1794
+ "iframe",
1795
+ {
1796
+ src: `${url}#view=FitH&toolbar=1&navpanes=0`,
1797
+ title: "Document preview",
1798
+ allow: "clipboard-read; clipboard-write",
1799
+ referrerPolicy: "no-referrer",
1800
+ style: { width: "100%", height: "100%", border: "0" }
1801
+ }
1802
+ ) });
1803
+ };
1804
+ var Container17 = styled40.div`
1805
+ display: flex;
1806
+ gap: 1.5rem;
1807
+ align-items: center;
1808
+ max-width: 600px;
1809
+
1810
+ /* Mobile: stack vertically */
1811
+ @media (max-width: 767px) {
1812
+ flex-direction: column;
1813
+ align-items: flex-start;
1814
+ max-width: 100%;
1815
+ }
1816
+ `;
1817
+ var ImageWrapper = styled40.div`
1818
+ flex-shrink: 0;
1819
+ width: 180px;
1820
+ height: 180px;
1821
+ border-radius: 8px;
1822
+ overflow: hidden;
1823
+
1824
+ img {
1825
+ width: 100%;
1826
+ height: 100%;
1827
+ object-fit: cover;
1828
+ }
1829
+
1830
+ /* Mobile: full width */
1831
+ @media (max-width: 767px) {
1832
+ width: 100%;
1833
+ height: 200px;
1834
+ }
1835
+ `;
1836
+ var ContentWrapper = styled40.div`
1837
+ display: flex;
1838
+ flex-direction: column;
1839
+ gap: 1rem;
1840
+
1841
+ /* Mobile: full width */
1842
+ @media (max-width: 767px) {
1843
+ width: 100%;
1844
+ }
1845
+ `;
1846
+ var LogoWrapper = styled40.div`
1847
+ max-width: 200px;
1848
+
1849
+ img {
1850
+ width: 100%;
1851
+ height: auto;
1852
+ }
1853
+ `;
1854
+ var ProductInfo = ({
1855
+ image,
1856
+ logoImage,
1857
+ title,
1858
+ buttonText,
1859
+ onButtonClick,
1860
+ titleVariant = "h2",
1861
+ titleColor = "brand",
1862
+ buttonArrowVariant = "teal",
1863
+ buttonTextBgVariant = "brand",
1864
+ buttonTextVariant = "secondary"
1865
+ }) => {
1866
+ return /* @__PURE__ */ jsxs(Container17, { children: [
1867
+ /* @__PURE__ */ jsx(ImageWrapper, { children: /* @__PURE__ */ jsx("img", { src: image, alt: "Product" }) }),
1868
+ /* @__PURE__ */ jsxs(ContentWrapper, { children: [
1869
+ /* @__PURE__ */ jsx(LogoWrapper, { children: /* @__PURE__ */ jsx("img", { src: logoImage, alt: "Logo" }) }),
1870
+ /* @__PURE__ */ jsx(Header, { variant: titleVariant, color: titleColor, children: title }),
1871
+ /* @__PURE__ */ jsx(
1872
+ ExtendedButton,
1873
+ {
1874
+ text: buttonText,
1875
+ onClick: onButtonClick,
1876
+ arrowVariant: buttonArrowVariant,
1877
+ textBgVariant: buttonTextBgVariant,
1878
+ textVariant: buttonTextVariant
1879
+ }
1880
+ )
1881
+ ] })
1882
+ ] });
1883
+ };
1884
+ var Container18 = styled40.div``;
1885
+ var OptionsContainer2 = styled40.div`
1886
+ margin-top: ${spaces[2]};
1887
+ display: flex;
1888
+ flex-direction: row;
1889
+ flex: 1;
1890
+ gap: ${spaces[2]};
1891
+ `;
1892
+ var LabelContainer = styled40.div`
1893
+ padding-left: ${spaces[1]};
1894
+ `;
1895
+ var RadioGroup = ({
1896
+ label,
1897
+ options,
1898
+ value,
1899
+ onClick,
1900
+ className
1901
+ }) => {
1902
+ return /* @__PURE__ */ jsxs(Container18, { className, children: [
1903
+ typeof label === "string" && /* @__PURE__ */ jsx(LabelContainer, { children: /* @__PURE__ */ jsx(Label, { value: label, fontWeight: "600" }) }),
1904
+ /* @__PURE__ */ jsx(OptionsContainer2, { children: options.map((option, idx) => /* @__PURE__ */ jsx(
1905
+ RadioItem,
1906
+ {
1907
+ isSelected: value === option.value,
1908
+ label: option.label,
1909
+ disabled: option.disabled,
1910
+ onClick: () => onClick(option.value)
1911
+ },
1912
+ idx
1913
+ )) })
1914
+ ] });
1915
+ };
1916
+ var variants12 = ["primary", "secondary", "subtle"];
1917
+ var Overlay2 = styled40.div`
1918
+ position: fixed;
1919
+ top: 0;
1920
+ left: 0;
1921
+ right: 0;
1922
+ bottom: 0;
1923
+ background-color: rgba(0, 0, 0, 0.5);
1924
+ display: flex;
1925
+ align-items: center;
1926
+ justify-content: center;
1927
+ z-index: 1000;
1928
+ `;
1929
+ var ChartContainer = styled40.div`
1930
+ background-color: #ffffff;
1931
+ border-radius: 8px;
1932
+ padding: 2rem;
1933
+ max-width: 400px;
1934
+ width: 90%;
1935
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
1936
+ `;
1937
+ var HeaderSection = styled40.div`
1938
+ display: flex;
1939
+ justify-content: space-between;
1940
+ align-items: center;
1941
+ margin-bottom: 1.5rem;
1942
+ `;
1943
+ var CloseButton = styled40.button`
1944
+ background-color: ${(props) => {
1945
+ switch (props.variant) {
1946
+ case "primary":
1947
+ return colors.background.brand;
1948
+ case "secondary":
1949
+ return colors.background.blue;
1950
+ case "subtle":
1951
+ return colors.background.subtle;
1952
+ default:
1953
+ return colors.background.brand;
1954
+ }
1955
+ }};
1956
+ color: #ffffff;
1957
+ border: none;
1958
+ border-radius: 4px;
1959
+ width: 2rem;
1960
+ height: 2rem;
1961
+ display: flex;
1962
+ align-items: center;
1963
+ justify-content: center;
1964
+ cursor: pointer;
1965
+ transition: opacity 0.2s;
1966
+
1967
+ &:hover {
1968
+ opacity: 0.8;
1969
+ }
1970
+ `;
1971
+ var Table = styled40.table`
1972
+ width: 100%;
1973
+ border-collapse: collapse;
1974
+ `;
1975
+ var TableHeader = styled40.thead`
1976
+ border-bottom: 2px solid #e5e7eb;
1977
+ `;
1978
+ var TableHeaderCell = styled40.th`
1979
+ text-align: left;
1980
+ padding: 0.75rem 0;
1981
+ font-size: 0.875rem;
1982
+ font-weight: 700;
1983
+ text-transform: uppercase;
1984
+ color: ${(props) => {
1985
+ switch (props.variant) {
1986
+ case "primary":
1987
+ return colors.text.brand;
1988
+ case "secondary":
1989
+ return colors.text.blue;
1990
+ case "subtle":
1991
+ return colors.text.subtle;
1992
+ default:
1993
+ return colors.text.brand;
1994
+ }
1995
+ }};
1996
+ `;
1997
+ var TableBody = styled40.tbody``;
1998
+ var TableRow = styled40.tr`
1999
+ border-bottom: 1px solid #f3f4f6;
2000
+
2001
+ &:last-child {
2002
+ border-bottom: none;
2003
+ }
2004
+ `;
2005
+ var TableCell = styled40.td`
2006
+ padding: 0.75rem 0;
2007
+ font-size: 0.875rem;
2008
+ color: ${(props) => {
2009
+ switch (props.variant) {
2010
+ case "primary":
2011
+ case "secondary":
2012
+ return colors.text.primary;
2013
+ case "subtle":
2014
+ return colors.text.subtle;
2015
+ default:
2016
+ return colors.text.primary;
2017
+ }
2018
+ }};
2019
+ `;
2020
+ var RatesChart = ({
2021
+ title = "Rates chart",
2022
+ rates,
2023
+ onClose,
2024
+ variant = "primary"
2025
+ }) => {
2026
+ const getHeaderColor = () => {
2027
+ switch (variant) {
2028
+ case "primary":
2029
+ return "brand";
2030
+ case "secondary":
2031
+ return "primary";
2032
+ case "subtle":
2033
+ return "subtle";
2034
+ default:
2035
+ return "brand";
2036
+ }
2037
+ };
2038
+ return /* @__PURE__ */ jsx(Overlay2, { onClick: onClose, children: /* @__PURE__ */ jsxs(ChartContainer, { onClick: (e) => e.stopPropagation(), children: [
2039
+ /* @__PURE__ */ jsxs(HeaderSection, { children: [
2040
+ /* @__PURE__ */ jsx(Header, { variant: "h2", color: getHeaderColor(), children: title }),
2041
+ /* @__PURE__ */ jsx(CloseButton, { onClick: onClose, variant, children: /* @__PURE__ */ jsx(HiX, { size: 20 }) })
2042
+ ] }),
2043
+ /* @__PURE__ */ jsxs(Table, { children: [
2044
+ /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs("tr", { children: [
2045
+ /* @__PURE__ */ jsx(TableHeaderCell, { variant, children: "Transaction type" }),
2046
+ /* @__PURE__ */ jsx(TableHeaderCell, { variant, children: "Price" })
2047
+ ] }) }),
2048
+ /* @__PURE__ */ jsx(TableBody, { children: rates.map((rate, index) => /* @__PURE__ */ jsxs(TableRow, { children: [
2049
+ /* @__PURE__ */ jsx(TableCell, { variant, children: rate.transactionType }),
2050
+ /* @__PURE__ */ jsx(TableCell, { variant, children: rate.price })
2051
+ ] }, index)) })
2052
+ ] })
2053
+ ] }) });
2054
+ };
2055
+ RatesChart.variants = variants12;
2056
+ var Backdrop = styled40.div`
2057
+ display: none;
2058
+
2059
+ @media (max-width: 767px) {
2060
+ display: ${(props) => props.$isOpen ? "block" : "none"};
2061
+ position: fixed;
2062
+ top: 0;
2063
+ left: 0;
2064
+ right: 0;
2065
+ bottom: 0;
2066
+ background-color: rgba(0, 0, 0, 0.5);
2067
+ z-index: 9998;
2068
+ }
2069
+ `;
2070
+ var BackToTopWrapper = styled40.div`
2071
+ @media (max-width: 767px) {
2072
+ display: none;
2073
+ }
2074
+ `;
2075
+ var StyledNav = styled40.nav`
2076
+ width: 195px;
2077
+ display: flex;
2078
+ flex-direction: column;
2079
+ min-height: 500px;
2080
+ height: 100vh;
2081
+ padding-bottom: 15px;
2082
+
2083
+ @media (min-width: 768px) {
2084
+ position: relative;
2085
+ background-color: #ffffff;
2086
+ border-right: 1px solid #e5e7eb;
2087
+ }
2088
+
2089
+ @media (max-width: 767px) {
2090
+ position: fixed;
2091
+ top: 0;
2092
+ left: 0;
2093
+ width: 100%;
2094
+ z-index: 9999;
2095
+ background-color: ${(props) => colors.background[props.$mobileBgVariant]};
2096
+ border-right: 1px solid ${(props) => colors.border[props.$borderVariant]};
2097
+ transform: translateX(${(props) => props.$isOpen ? "0" : "-100%"});
2098
+ transition: transform 0.3s ease-in-out;
2099
+ box-shadow: ${(props) => props.$isOpen ? "2px 0 8px rgba(0, 0, 0, 0.15)" : "none"};
2100
+ }
2101
+ `;
2102
+ var CloseButton2 = styled40.button`
2103
+ background: none;
2104
+ border: none;
2105
+ font-size: 1.5rem;
2106
+ cursor: pointer;
2107
+ padding: 0.5rem;
2108
+ color: ${(props) => colors.border[props.$textVariant]};
2109
+
2110
+ &:hover {
2111
+ opacity: 0.7;
2112
+ }
2113
+ `;
2114
+ var MobileHeader = styled40.div`
2115
+ display: none;
2116
+
2117
+ @media (max-width: 767px) {
2118
+ display: flex;
2119
+ justify-content: space-between;
2120
+ align-items: center;
2121
+ padding: 1rem;
2122
+ }
2123
+ `;
2124
+ var NavList = styled40.ul`
2125
+ display: flex;
2126
+ flex-direction: column;
2127
+ list-style: none;
2128
+ margin: 0;
2129
+ padding: 0;
2130
+ `;
2131
+ var DesktopNavList = styled40(NavList)`
2132
+ @media (max-width: 767px) {
2133
+ display: none;
2134
+ }
2135
+ `;
2136
+ var MobileNavList = styled40(NavList)`
2137
+ display: none;
2138
+
2139
+ @media (max-width: 767px) {
2140
+ display: flex;
2141
+ }
2142
+ `;
2143
+ var NavItem = styled40.li`
2144
+ display: flex;
2145
+ `;
2146
+ var NavLink = styled40.a`
2147
+ display: flex;
2148
+ align-items: center;
2149
+ text-decoration: none;
2150
+ width: 100%;
2151
+ padding-left: 0.5rem;
2152
+
2153
+ ${(props) => !props.$isActive && `
2154
+ &:hover {
2155
+ font-weight: 100;
2156
+ }
2157
+ `}
2158
+ `;
2159
+ var ActiveTriangle = styled40.div`
2160
+ width: 0;
2161
+ height: 0;
2162
+ border-top: 4px solid transparent;
2163
+ border-left: 6px solid ${(props) => colors.border[props.triangleColor]};
2164
+ border-bottom: 4px solid transparent;
2165
+ flex-shrink: 0;
2166
+ margin-left: 1.5rem;
2167
+ `;
2168
+ var InactiveSpacer = styled40.span`
2169
+ width: 6px;
2170
+ margin-right: 0.5rem;
2171
+ flex-shrink: 0;
2172
+ `;
2173
+ var Divider = styled40.div`
2174
+ height: 1px;
2175
+ background-color: ${(props) => colors.border[props.dividerColor]};
2176
+ margin: 1rem;
2177
+ `;
2178
+ var Spacer = styled40.div`
2179
+ flex-grow: 1;
2180
+ `;
2181
+ var DesktopOnlySpacer = styled40(Spacer)`
2182
+ @media (max-width: 767px) {
2183
+ display: none;
2184
+ }
2185
+ `;
2186
+ var MobileButtonsWrapper = styled40.div`
2187
+ display: none;
2188
+
2189
+ @media (max-width: 767px) {
2190
+ display: flex;
2191
+ flex-direction: row;
2192
+ gap: 0.5rem;
2193
+ padding: 0 1rem;
2194
+ margin-top: auto;
2195
+ margin-bottom: 20px;
2196
+ }
2197
+ `;
2198
+ var SideNav = ({
2199
+ logo,
2200
+ items,
2201
+ activeItem,
2202
+ onBackToTop,
2203
+ isOpen = true,
2204
+ onClose,
2205
+ mobileButtons = [],
2206
+ mobileBgVariant = "tertiary",
2207
+ borderVariant = "primary",
2208
+ closeButtonVariant = "light",
2209
+ mobileActiveTextBgVariant = "transparent",
2210
+ mobileActiveTextVariant = "light",
2211
+ mobileInactiveTextBgVariant = "transparent",
2212
+ mobileInactiveTextVariant = "light",
2213
+ triangleColor = "primary",
2214
+ dividerColor = "light",
2215
+ activeTextBgVariant = "transparent",
2216
+ activeTextVariant = "brand",
2217
+ inactiveTextBgVariant = "transparent",
2218
+ inactiveTextVariant = "subtle",
2219
+ backToTopBgVariant = "transparent",
2220
+ backToTopTextVariant = "subtle"
2221
+ }) => {
2222
+ const renderNavItems = (isMobile) => items.map((item) => {
2223
+ const isActive = activeItem === item.href;
2224
+ return /* @__PURE__ */ jsx(NavItem, { children: /* @__PURE__ */ jsxs(NavLink, { href: item.href, $isActive: isActive, children: [
2225
+ isActive ? /* @__PURE__ */ jsx(ActiveTriangle, { triangleColor }) : /* @__PURE__ */ jsx(InactiveSpacer, {}),
2226
+ /* @__PURE__ */ jsx(
2227
+ TextButton,
2228
+ {
2229
+ asChild: true,
2230
+ text: item.label,
2231
+ bgVariant: isActive ? isMobile && mobileActiveTextBgVariant ? mobileActiveTextBgVariant : activeTextBgVariant : isMobile && mobileInactiveTextBgVariant ? mobileInactiveTextBgVariant : inactiveTextBgVariant,
2232
+ textVariant: isActive ? isMobile && mobileActiveTextVariant ? mobileActiveTextVariant : activeTextVariant : isMobile && mobileInactiveTextVariant ? mobileInactiveTextVariant : inactiveTextVariant,
2233
+ uppercase: false,
2234
+ bold: isActive
2235
+ }
2236
+ )
2237
+ ] }) }, item.href);
2238
+ });
2239
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
2240
+ /* @__PURE__ */ jsx(Backdrop, { $isOpen: isOpen, onClick: onClose }),
2241
+ /* @__PURE__ */ jsxs(
2242
+ StyledNav,
2243
+ {
2244
+ $isOpen: isOpen,
2245
+ $mobileBgVariant: mobileBgVariant,
2246
+ $borderVariant: borderVariant,
2247
+ children: [
2248
+ /* @__PURE__ */ jsxs(MobileHeader, { children: [
2249
+ logo,
2250
+ /* @__PURE__ */ jsx(CloseButton2, { onClick: onClose, "aria-label": "Close menu", $textVariant: closeButtonVariant, children: "\u2715" })
2251
+ ] }),
2252
+ /* @__PURE__ */ jsx(DesktopOnlySpacer, {}),
2253
+ /* @__PURE__ */ jsx(DesktopNavList, { children: renderNavItems(false) }),
2254
+ /* @__PURE__ */ jsx(MobileNavList, { children: renderNavItems(true) }),
2255
+ /* @__PURE__ */ jsx(Divider, { dividerColor }),
2256
+ /* @__PURE__ */ jsx(Spacer, {}),
2257
+ mobileButtons.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
2258
+ /* @__PURE__ */ jsx(Divider, { dividerColor }),
2259
+ /* @__PURE__ */ jsx(MobileButtonsWrapper, { children: mobileButtons.map((button, index) => /* @__PURE__ */ jsx(
2260
+ ExtendedButton,
2261
+ {
2262
+ text: button.text,
2263
+ onClick: button.onClick,
2264
+ textBgVariant: button.bgVariant || "transparent",
2265
+ textVariant: button.textVariant || "subtle",
2266
+ arrowVariant: button.arrowButton || "blue"
2267
+ },
2268
+ index
2269
+ )) })
2270
+ ] }),
2271
+ /* @__PURE__ */ jsx(BackToTopWrapper, { children: /* @__PURE__ */ jsx(
2272
+ TextButton,
2273
+ {
2274
+ text: "Back to top",
2275
+ onClick: onBackToTop,
2276
+ bgVariant: backToTopBgVariant,
2277
+ textVariant: backToTopTextVariant,
2278
+ uppercase: false
2279
+ }
2280
+ ) })
2281
+ ]
2282
+ }
2283
+ )
2284
+ ] });
2285
+ };
2286
+ var Overlay3 = styled40.div`
2287
+ position: fixed;
2288
+ top: 0;
2289
+ left: 0;
2290
+ right: 0;
2291
+ bottom: 0;
2292
+ background-color: rgba(0, 0, 0, 0.5);
2293
+ display: ${(props) => props.$isOpen ? "flex" : "none"};
2294
+ justify-content: flex-end;
2295
+ z-index: 1000;
2296
+ `;
2297
+ var PanelContainer = styled40.div`
2298
+ background-color: #ffffff;
2299
+ width: 100%;
2300
+ max-width: 400px;
2301
+ height: 100vh;
2302
+ padding: 3rem 2rem;
2303
+ box-shadow: -4px 0 15px rgba(0, 0, 0, 0.2);
2304
+ display: flex;
2305
+ flex-direction: column;
2306
+ gap: 2rem;
2307
+ transform: ${(props) => props.$isOpen ? "translateX(0)" : "translateX(100%)"};
2308
+ transition: transform 0.3s ease-in-out;
2309
+ overflow-y: auto;
2310
+ `;
2311
+ var CloseButton3 = styled40.button`
2312
+ position: absolute;
2313
+ top: 1.5rem;
2314
+ right: 1.5rem;
2315
+ background-color: ${(props) => colors.background[props.closeButtonBgColor]};
2316
+ color: #ffffff;
2317
+ border: none;
2318
+ border-radius: 4px;
2319
+ width: 2.5rem;
2320
+ height: 2.5rem;
2321
+ display: flex;
2322
+ align-items: center;
2323
+ justify-content: center;
2324
+ cursor: pointer;
2325
+ transition: opacity 0.2s;
2326
+ z-index: 10;
2327
+
2328
+ &:hover {
2329
+ opacity: 0.8;
2330
+ }
2331
+ `;
2332
+ var IconWrapper2 = styled40.div`
2333
+ width: 100%;
2334
+ display: flex;
2335
+ justify-content: center;
2336
+ margin-bottom: 1rem;
2337
+
2338
+ svg {
2339
+ width: 150px;
2340
+ height: 150px;
2341
+ }
2342
+
2343
+ img {
2344
+ width: 150px;
2345
+ height: 150px;
2346
+ object-fit: contain;
2347
+ }
2348
+ `;
2349
+ var ContentWrapper2 = styled40.div`
2350
+ display: flex;
2351
+ flex-direction: column;
2352
+ gap: 1.5rem;
2353
+ `;
2354
+ var SidePanel = ({
2355
+ isOpen,
2356
+ onClose,
2357
+ icon,
2358
+ title,
2359
+ description,
2360
+ buttonText,
2361
+ onButtonClick,
2362
+ closeButtonBgColor = "subtle",
2363
+ titleColor = "brand",
2364
+ descriptionVariant = "primary",
2365
+ buttonArrowVariant = "teal",
2366
+ buttonTextBgVariant = "brand",
2367
+ buttonTextVariant = "secondary"
2368
+ }) => {
2369
+ return /* @__PURE__ */ jsx(Overlay3, { $isOpen: isOpen, onClick: onClose, children: /* @__PURE__ */ jsxs(PanelContainer, { $isOpen: isOpen, onClick: (e) => e.stopPropagation(), children: [
2370
+ /* @__PURE__ */ jsx(CloseButton3, { onClick: onClose, closeButtonBgColor, children: /* @__PURE__ */ jsx(HiX, { size: 24 }) }),
2371
+ /* @__PURE__ */ jsx(IconWrapper2, { children: icon }),
2372
+ /* @__PURE__ */ jsxs(ContentWrapper2, { children: [
2373
+ /* @__PURE__ */ jsx(Header, { variant: "h2", color: titleColor, children: title }),
2374
+ /* @__PURE__ */ jsx(Description, { variant: descriptionVariant, children: description }),
2375
+ /* @__PURE__ */ jsx(
2376
+ ExtendedButton,
2377
+ {
2378
+ text: buttonText,
2379
+ onClick: onButtonClick,
2380
+ arrowVariant: buttonArrowVariant,
2381
+ textBgVariant: buttonTextBgVariant,
2382
+ textVariant: buttonTextVariant
2383
+ }
2384
+ )
2385
+ ] })
2386
+ ] }) });
2387
+ };
2388
+ var Container19 = styled40.div`
2389
+ width: 100%;
2390
+ background-color: ${(props) => props.isSelected ? colors.background.blue : colors.background.primary};
2391
+ border: 1px solid ${colors.background.blue};
2392
+ border-radius: ${radii.lg};
2393
+ display: flex;
2394
+ justify-content: center;
2395
+ align-items: center;
2396
+ padding: ${spaces[2]} ${spaces[3]};
2397
+ cursor: pointer;
2398
+ `;
2399
+ var StyledLabel2 = styled40.span`
2400
+ color: ${(props) => props.isSelected ? colors.text.secondary : colors.text.blue};
2401
+ font-size: ${sizes.sm};
2402
+ font-weight: 700;
2403
+ `;
2404
+ var StepperHeaderTab = ({
2405
+ title,
2406
+ isSelected,
2407
+ onClick
2408
+ }) => {
2409
+ return /* @__PURE__ */ jsx(Container19, { isSelected, onClick, children: /* @__PURE__ */ jsx(StyledLabel2, { isSelected, children: title }) });
2410
+ };
2411
+ var Textarea2 = ({ label, error, ...rest }) => {
2412
+ const isInvalid = useMemo(
2413
+ () => typeof error === "string" && error.length > 0,
2414
+ [error]
2415
+ );
2416
+ return /* @__PURE__ */ jsxs(InputContainer, { children: [
2417
+ typeof label === "string" && /* @__PURE__ */ jsx(
2418
+ FloatingLabel,
2419
+ {
2420
+ color: isInvalid ? "error" : "subtle",
2421
+ value: label,
2422
+ fontWeight: "600"
2423
+ }
2424
+ ),
2425
+ /* @__PURE__ */ jsx(Textarea, { ...rest })
2426
+ ] });
2427
+ };
2428
+
2429
+ export { Accordion, Address, CTAContainer, Checkbox, ContentCard, Dropdown, FAQAccordion, FeatureContainer, FileButton, Input2 as Input, Modal, OverviewRowItem, PDFPreviewer, PageLayout, ProductInfo, RadioGroup, RatesChart, SideNav, SidePanel, StepperHeaderTab, Textarea2 as Textarea };
2430
+ //# sourceMappingURL=molecules.js.map
2431
+ //# sourceMappingURL=molecules.js.map