@xsolla/xui-toggletip 0.64.0-pr76.1768538499 → 0.64.0-pr78.1768542245
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/native/index.d.mts +3 -6
- package/native/index.d.ts +3 -6
- package/native/index.js +181 -42
- package/native/index.js.map +1 -1
- package/native/index.mjs +179 -40
- package/native/index.mjs.map +1 -1
- package/package.json +4 -4
- package/web/index.d.mts +3 -6
- package/web/index.d.ts +3 -6
- package/web/index.js +181 -42
- package/web/index.js.map +1 -1
- package/web/index.mjs +179 -40
- package/web/index.mjs.map +1 -1
package/native/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import React, { ReactNode
|
|
1
|
+
import React, { ReactNode } from 'react';
|
|
2
2
|
|
|
3
|
-
type ToggletipPlacement = "
|
|
3
|
+
type ToggletipPlacement = "top" | "top-left" | "top-right" | "bottom" | "bottom-left" | "bottom-right" | "left" | "right";
|
|
4
4
|
interface ToggletipProps {
|
|
5
5
|
/**
|
|
6
6
|
* Trigger element.
|
|
@@ -25,7 +25,7 @@ interface ToggletipProps {
|
|
|
25
25
|
width?: string;
|
|
26
26
|
/**
|
|
27
27
|
* Placement relative to control.
|
|
28
|
-
* @default "top
|
|
28
|
+
* @default "top"
|
|
29
29
|
*/
|
|
30
30
|
direction?: ToggletipPlacement;
|
|
31
31
|
/**
|
|
@@ -37,9 +37,6 @@ interface ToggletipProps {
|
|
|
37
37
|
* @default 12
|
|
38
38
|
*/
|
|
39
39
|
offset?: number;
|
|
40
|
-
style?: CSSProperties;
|
|
41
|
-
"data-testid"?: string;
|
|
42
|
-
className?: string;
|
|
43
40
|
}
|
|
44
41
|
|
|
45
42
|
declare const Toggletip: React.ForwardRefExoticComponent<ToggletipProps & React.RefAttributes<any>>;
|
package/native/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import React, { ReactNode
|
|
1
|
+
import React, { ReactNode } from 'react';
|
|
2
2
|
|
|
3
|
-
type ToggletipPlacement = "
|
|
3
|
+
type ToggletipPlacement = "top" | "top-left" | "top-right" | "bottom" | "bottom-left" | "bottom-right" | "left" | "right";
|
|
4
4
|
interface ToggletipProps {
|
|
5
5
|
/**
|
|
6
6
|
* Trigger element.
|
|
@@ -25,7 +25,7 @@ interface ToggletipProps {
|
|
|
25
25
|
width?: string;
|
|
26
26
|
/**
|
|
27
27
|
* Placement relative to control.
|
|
28
|
-
* @default "top
|
|
28
|
+
* @default "top"
|
|
29
29
|
*/
|
|
30
30
|
direction?: ToggletipPlacement;
|
|
31
31
|
/**
|
|
@@ -37,9 +37,6 @@ interface ToggletipProps {
|
|
|
37
37
|
* @default 12
|
|
38
38
|
*/
|
|
39
39
|
offset?: number;
|
|
40
|
-
style?: CSSProperties;
|
|
41
|
-
"data-testid"?: string;
|
|
42
|
-
className?: string;
|
|
43
40
|
}
|
|
44
41
|
|
|
45
42
|
declare const Toggletip: React.ForwardRefExoticComponent<ToggletipProps & React.RefAttributes<any>>;
|
package/native/index.js
CHANGED
|
@@ -35,7 +35,7 @@ __export(index_exports, {
|
|
|
35
35
|
module.exports = __toCommonJS(index_exports);
|
|
36
36
|
|
|
37
37
|
// src/Toggletip.tsx
|
|
38
|
-
var
|
|
38
|
+
var import_react5 = require("react");
|
|
39
39
|
|
|
40
40
|
// ../primitives-native/src/Box.tsx
|
|
41
41
|
var import_react_native = require("react-native");
|
|
@@ -519,50 +519,187 @@ TextAreaPrimitive.displayName = "TextAreaPrimitive";
|
|
|
519
519
|
|
|
520
520
|
// src/Toggletip.tsx
|
|
521
521
|
var import_xui_core = require("@xsolla/xui-core");
|
|
522
|
+
|
|
523
|
+
// src/useToggletip.ts
|
|
524
|
+
var import_react4 = require("react");
|
|
525
|
+
var getScrollParent = (element) => {
|
|
526
|
+
if (!element || element === document.body) {
|
|
527
|
+
return document.body;
|
|
528
|
+
}
|
|
529
|
+
const { overflow, overflowX, overflowY } = window.getComputedStyle(element);
|
|
530
|
+
const isScrollable = /(auto|scroll)/.test(overflow) || /(auto|scroll)/.test(overflowX) || /(auto|scroll)/.test(overflowY);
|
|
531
|
+
if (isScrollable && (element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth)) {
|
|
532
|
+
return element;
|
|
533
|
+
}
|
|
534
|
+
return getScrollParent(element.parentElement);
|
|
535
|
+
};
|
|
536
|
+
var getViewportBounds = (triggerElement) => {
|
|
537
|
+
const scrollParent = getScrollParent(triggerElement);
|
|
538
|
+
if (scrollParent === document.body) {
|
|
539
|
+
return {
|
|
540
|
+
top: 0,
|
|
541
|
+
left: 0,
|
|
542
|
+
right: window.visualViewport?.width || window.innerWidth,
|
|
543
|
+
bottom: window.visualViewport?.height || window.innerHeight,
|
|
544
|
+
width: window.visualViewport?.width || window.innerWidth,
|
|
545
|
+
height: window.visualViewport?.height || window.innerHeight
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
const rect = scrollParent.getBoundingClientRect();
|
|
549
|
+
return {
|
|
550
|
+
top: rect.top,
|
|
551
|
+
left: rect.left,
|
|
552
|
+
right: rect.right,
|
|
553
|
+
bottom: rect.bottom,
|
|
554
|
+
width: rect.width,
|
|
555
|
+
height: rect.height
|
|
556
|
+
};
|
|
557
|
+
};
|
|
558
|
+
var checkCollision = (triggerRect, toggletipRect, placement, offset, triggerElement) => {
|
|
559
|
+
const viewport = getViewportBounds(triggerElement);
|
|
560
|
+
const buffer = 10;
|
|
561
|
+
const space = {
|
|
562
|
+
top: triggerRect.top - viewport.top,
|
|
563
|
+
bottom: viewport.bottom - triggerRect.bottom,
|
|
564
|
+
left: triggerRect.left - viewport.left,
|
|
565
|
+
right: viewport.right - triggerRect.right
|
|
566
|
+
};
|
|
567
|
+
const triggerCenterY = triggerRect.top + triggerRect.height / 2;
|
|
568
|
+
const triggerCenterX = triggerRect.left + triggerRect.width / 2;
|
|
569
|
+
const fits = {
|
|
570
|
+
top: space.top >= toggletipRect.height + offset + buffer && triggerCenterX - toggletipRect.width / 2 >= viewport.left + buffer && triggerCenterX + toggletipRect.width / 2 <= viewport.right - buffer,
|
|
571
|
+
bottom: space.bottom >= toggletipRect.height + offset + buffer && triggerCenterX - toggletipRect.width / 2 >= viewport.left + buffer && triggerCenterX + toggletipRect.width / 2 <= viewport.right - buffer,
|
|
572
|
+
left: space.left >= toggletipRect.width + offset + buffer && triggerCenterY - toggletipRect.height / 2 >= viewport.top + buffer && triggerCenterY + toggletipRect.height / 2 <= viewport.bottom - buffer,
|
|
573
|
+
right: space.right >= toggletipRect.width + offset + buffer && triggerCenterY - toggletipRect.height / 2 >= viewport.top + buffer && triggerCenterY + toggletipRect.height / 2 <= viewport.bottom - buffer
|
|
574
|
+
};
|
|
575
|
+
const [primary, secondary] = placement.split("-");
|
|
576
|
+
const primaryFits = fits[primary];
|
|
577
|
+
if (primaryFits) {
|
|
578
|
+
return placement;
|
|
579
|
+
}
|
|
580
|
+
const opposites = {
|
|
581
|
+
top: "bottom",
|
|
582
|
+
bottom: "top",
|
|
583
|
+
left: "right",
|
|
584
|
+
right: "left"
|
|
585
|
+
};
|
|
586
|
+
const opposite = opposites[primary];
|
|
587
|
+
if (opposite && fits[opposite]) {
|
|
588
|
+
return secondary ? `${opposite}-${secondary}` : opposite;
|
|
589
|
+
}
|
|
590
|
+
const perpendicular = primary === "top" || primary === "bottom" ? ["right", "left"] : ["bottom", "top"];
|
|
591
|
+
for (const dir of perpendicular) {
|
|
592
|
+
if (fits[dir]) {
|
|
593
|
+
return dir;
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
const best = Object.entries(space).sort(([, a], [, b]) => b - a)[0];
|
|
597
|
+
return best[0];
|
|
598
|
+
};
|
|
599
|
+
var useToggletip = ({
|
|
600
|
+
open,
|
|
601
|
+
direction,
|
|
602
|
+
offset,
|
|
603
|
+
autoDirection = true
|
|
604
|
+
}) => {
|
|
605
|
+
const [newDirection, setNewDirection] = (0, import_react4.useState)(direction);
|
|
606
|
+
const referenceRef = (0, import_react4.useRef)(null);
|
|
607
|
+
const floatingRef = (0, import_react4.useRef)(null);
|
|
608
|
+
const setReference = (0, import_react4.useCallback)((node) => {
|
|
609
|
+
referenceRef.current = node;
|
|
610
|
+
}, []);
|
|
611
|
+
const setFloating = (0, import_react4.useCallback)((node) => {
|
|
612
|
+
floatingRef.current = node;
|
|
613
|
+
}, []);
|
|
614
|
+
(0, import_react4.useLayoutEffect)(() => {
|
|
615
|
+
if (!open || !autoDirection || !referenceRef.current || !floatingRef.current) {
|
|
616
|
+
return;
|
|
617
|
+
}
|
|
618
|
+
let rafId = null;
|
|
619
|
+
const updatePlacement = () => {
|
|
620
|
+
rafId = null;
|
|
621
|
+
if (!referenceRef.current || !floatingRef.current) return;
|
|
622
|
+
const triggerRect = referenceRef.current.getBoundingClientRect();
|
|
623
|
+
const toggletipRect = floatingRef.current.getBoundingClientRect();
|
|
624
|
+
const calculatedDirection = checkCollision(
|
|
625
|
+
triggerRect,
|
|
626
|
+
toggletipRect,
|
|
627
|
+
direction,
|
|
628
|
+
offset,
|
|
629
|
+
referenceRef.current
|
|
630
|
+
);
|
|
631
|
+
setNewDirection((prev) => {
|
|
632
|
+
if (prev === calculatedDirection) return prev;
|
|
633
|
+
return calculatedDirection;
|
|
634
|
+
});
|
|
635
|
+
};
|
|
636
|
+
const scheduleUpdate = () => {
|
|
637
|
+
if (rafId != null) return;
|
|
638
|
+
rafId = requestAnimationFrame(updatePlacement);
|
|
639
|
+
};
|
|
640
|
+
updatePlacement();
|
|
641
|
+
window.addEventListener("scroll", scheduleUpdate, true);
|
|
642
|
+
window.addEventListener("resize", scheduleUpdate);
|
|
643
|
+
const resizeObserver = new ResizeObserver(scheduleUpdate);
|
|
644
|
+
resizeObserver.observe(referenceRef.current);
|
|
645
|
+
resizeObserver.observe(floatingRef.current);
|
|
646
|
+
return () => {
|
|
647
|
+
if (rafId != null) cancelAnimationFrame(rafId);
|
|
648
|
+
window.removeEventListener("scroll", scheduleUpdate, true);
|
|
649
|
+
window.removeEventListener("resize", scheduleUpdate);
|
|
650
|
+
resizeObserver.disconnect();
|
|
651
|
+
};
|
|
652
|
+
}, [open, autoDirection, direction, offset]);
|
|
653
|
+
(0, import_react4.useLayoutEffect)(() => {
|
|
654
|
+
if (!open) {
|
|
655
|
+
setNewDirection(direction);
|
|
656
|
+
}
|
|
657
|
+
}, [open, direction]);
|
|
658
|
+
return {
|
|
659
|
+
refs: {
|
|
660
|
+
setReference,
|
|
661
|
+
setFloating
|
|
662
|
+
},
|
|
663
|
+
direction: newDirection
|
|
664
|
+
};
|
|
665
|
+
};
|
|
666
|
+
|
|
667
|
+
// src/Toggletip.tsx
|
|
522
668
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
523
669
|
var getPositionStyles = (placement, offset) => {
|
|
524
670
|
switch (placement) {
|
|
525
|
-
case "bottom
|
|
526
|
-
case "center":
|
|
671
|
+
case "bottom":
|
|
527
672
|
return {
|
|
528
673
|
top: `calc(100% + ${offset}px)`,
|
|
529
674
|
left: "50%",
|
|
530
675
|
transform: "translateX(-50%)"
|
|
531
676
|
};
|
|
532
|
-
case "bottom-
|
|
677
|
+
case "bottom-left":
|
|
533
678
|
return { top: `calc(100% + ${offset}px)`, left: 0 };
|
|
534
|
-
case "bottom-
|
|
679
|
+
case "bottom-right":
|
|
535
680
|
return { top: `calc(100% + ${offset}px)`, right: 0 };
|
|
536
|
-
case "top
|
|
681
|
+
case "top":
|
|
537
682
|
return {
|
|
538
683
|
bottom: `calc(100% + ${offset}px)`,
|
|
539
684
|
left: "50%",
|
|
540
685
|
transform: "translateX(-50%)"
|
|
541
686
|
};
|
|
542
|
-
case "top-
|
|
687
|
+
case "top-left":
|
|
543
688
|
return { bottom: `calc(100% + ${offset}px)`, left: 0 };
|
|
544
|
-
case "top-
|
|
689
|
+
case "top-right":
|
|
545
690
|
return { bottom: `calc(100% + ${offset}px)`, right: 0 };
|
|
546
|
-
case "left
|
|
691
|
+
case "left":
|
|
547
692
|
return {
|
|
548
693
|
right: `calc(100% + ${offset}px)`,
|
|
549
694
|
top: "50%",
|
|
550
695
|
transform: "translateY(-50%)"
|
|
551
696
|
};
|
|
552
|
-
case "
|
|
553
|
-
return { right: `calc(100% + ${offset}px)`, top: 0 };
|
|
554
|
-
case "left-end":
|
|
555
|
-
return { right: `calc(100% + ${offset}px)`, bottom: 0 };
|
|
556
|
-
case "right-center":
|
|
697
|
+
case "right":
|
|
557
698
|
return {
|
|
558
699
|
left: `calc(100% + ${offset}px)`,
|
|
559
700
|
top: "50%",
|
|
560
701
|
transform: "translateY(-50%)"
|
|
561
702
|
};
|
|
562
|
-
case "right-start":
|
|
563
|
-
return { left: `calc(100% + ${offset}px)`, top: 0 };
|
|
564
|
-
case "right-end":
|
|
565
|
-
return { left: `calc(100% + ${offset}px)`, bottom: 0 };
|
|
566
703
|
default:
|
|
567
704
|
return {
|
|
568
705
|
bottom: `calc(100% + ${offset}px)`,
|
|
@@ -571,26 +708,28 @@ var getPositionStyles = (placement, offset) => {
|
|
|
571
708
|
};
|
|
572
709
|
}
|
|
573
710
|
};
|
|
574
|
-
var Toggletip = (0,
|
|
711
|
+
var Toggletip = (0, import_react5.forwardRef)(
|
|
575
712
|
({
|
|
576
713
|
children,
|
|
577
714
|
title,
|
|
578
715
|
content,
|
|
579
716
|
footer,
|
|
580
717
|
width = "288px",
|
|
581
|
-
direction = "top
|
|
718
|
+
direction = "top",
|
|
582
719
|
autoDirection = true,
|
|
583
|
-
offset = 12
|
|
584
|
-
style,
|
|
585
|
-
"data-testid": dataTestId,
|
|
586
|
-
className,
|
|
587
|
-
...props
|
|
720
|
+
offset = 12
|
|
588
721
|
}, ref) => {
|
|
589
|
-
const [isOpen, setOpen] = (0,
|
|
590
|
-
const containerRef = (0,
|
|
722
|
+
const [isOpen, setOpen] = (0, import_react5.useState)(false);
|
|
723
|
+
const containerRef = (0, import_react5.useRef)(null);
|
|
591
724
|
const { theme } = (0, import_xui_core.useDesignSystem)();
|
|
725
|
+
const { refs, direction: newDirection } = useToggletip({
|
|
726
|
+
open: isOpen,
|
|
727
|
+
direction,
|
|
728
|
+
offset,
|
|
729
|
+
autoDirection
|
|
730
|
+
});
|
|
592
731
|
const toggleOpen = () => setOpen(!isOpen);
|
|
593
|
-
(0,
|
|
732
|
+
(0, import_react5.useEffect)(() => {
|
|
594
733
|
const handleClickOutside = (event) => {
|
|
595
734
|
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
596
735
|
setOpen(false);
|
|
@@ -601,27 +740,29 @@ var Toggletip = (0, import_react4.forwardRef)(
|
|
|
601
740
|
}
|
|
602
741
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
603
742
|
}, [isOpen]);
|
|
604
|
-
const positionStyles = (0,
|
|
605
|
-
() => getPositionStyles(
|
|
606
|
-
[
|
|
743
|
+
const positionStyles = (0, import_react5.useMemo)(
|
|
744
|
+
() => getPositionStyles(newDirection, offset),
|
|
745
|
+
[newDirection, offset]
|
|
607
746
|
);
|
|
608
747
|
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
609
748
|
Box,
|
|
610
749
|
{
|
|
611
|
-
ref:
|
|
750
|
+
ref: (node) => {
|
|
751
|
+
containerRef.current = node;
|
|
752
|
+
refs.setReference(node);
|
|
753
|
+
},
|
|
612
754
|
display: "inline-flex",
|
|
613
755
|
position: "relative",
|
|
614
|
-
className,
|
|
615
756
|
style: { height: "fit-content" },
|
|
616
757
|
children: [
|
|
617
758
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Box, { onPress: toggleOpen, style: { cursor: "pointer" }, children }),
|
|
618
759
|
isOpen && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
619
760
|
Box,
|
|
620
761
|
{
|
|
621
|
-
|
|
762
|
+
ref: refs.setFloating,
|
|
622
763
|
position: "absolute",
|
|
623
|
-
backgroundColor: theme.colors.background.
|
|
624
|
-
borderRadius:
|
|
764
|
+
backgroundColor: theme.colors.background.primary,
|
|
765
|
+
borderRadius: theme.radius.card,
|
|
625
766
|
borderWidth: 1,
|
|
626
767
|
borderColor: theme.colors.border.secondary,
|
|
627
768
|
padding: 12,
|
|
@@ -629,11 +770,10 @@ var Toggletip = (0, import_react4.forwardRef)(
|
|
|
629
770
|
zIndex: 2e3,
|
|
630
771
|
style: {
|
|
631
772
|
...positionStyles,
|
|
632
|
-
boxShadow: "0 4px 12px rgba(0, 36, 77, 0.2)"
|
|
633
|
-
...style
|
|
773
|
+
boxShadow: "0 4px 12px rgba(0, 36, 77, 0.2)"
|
|
634
774
|
},
|
|
635
775
|
children: [
|
|
636
|
-
title && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
776
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Box, { gap: 8, children: [
|
|
637
777
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
638
778
|
Text,
|
|
639
779
|
{
|
|
@@ -641,13 +781,12 @@ var Toggletip = (0, import_react4.forwardRef)(
|
|
|
641
781
|
fontSize: 24,
|
|
642
782
|
lineHeight: "28px",
|
|
643
783
|
fontWeight: "500",
|
|
644
|
-
marginBottom: 8,
|
|
645
784
|
children: title
|
|
646
785
|
}
|
|
647
786
|
),
|
|
648
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Divider, {
|
|
787
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Divider, { color: theme.colors.border.secondary })
|
|
649
788
|
] }),
|
|
650
|
-
content && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Box, {
|
|
789
|
+
content && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Box, { marginBottom: 16, marginTop: 16, children: typeof content === "string" || typeof content === "number" ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
651
790
|
Text,
|
|
652
791
|
{
|
|
653
792
|
color: theme.colors.content.primary,
|
package/native/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.tsx","../../src/Toggletip.tsx","../../../primitives-native/src/Box.tsx","../../../primitives-native/src/Text.tsx","../../../primitives-native/src/Spinner.tsx","../../../primitives-native/src/Icon.tsx","../../../primitives-native/src/Divider.tsx","../../../primitives-native/src/Input.tsx","../../../primitives-native/src/TextArea.tsx"],"sourcesContent":["export * from \"./Toggletip\";\nexport * from \"./types\";\n","import React, { forwardRef, useState, useRef, useEffect, useMemo } from \"react\";\n// @ts-ignore - this will be resolved at build time\nimport { Box, Text, Divider } from \"@xsolla/xui-primitives\";\nimport { useDesignSystem } from \"@xsolla/xui-core\";\nimport type { ToggletipPlacement, ToggletipProps } from \"./types\";\n\nconst getPositionStyles = (placement: ToggletipPlacement, offset: number) => {\n switch (placement) {\n case \"bottom-center\":\n case \"center\":\n return {\n top: `calc(100% + ${offset}px)`,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n };\n case \"bottom-start\":\n return { top: `calc(100% + ${offset}px)`, left: 0 };\n case \"bottom-end\":\n return { top: `calc(100% + ${offset}px)`, right: 0 };\n case \"top-center\":\n return {\n bottom: `calc(100% + ${offset}px)`,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n };\n case \"top-start\":\n return { bottom: `calc(100% + ${offset}px)`, left: 0 };\n case \"top-end\":\n return { bottom: `calc(100% + ${offset}px)`, right: 0 };\n case \"left-center\":\n return {\n right: `calc(100% + ${offset}px)`,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n };\n case \"left-start\":\n return { right: `calc(100% + ${offset}px)`, top: 0 };\n case \"left-end\":\n return { right: `calc(100% + ${offset}px)`, bottom: 0 };\n case \"right-center\":\n return {\n left: `calc(100% + ${offset}px)`,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n };\n case \"right-start\":\n return { left: `calc(100% + ${offset}px)`, top: 0 };\n case \"right-end\":\n return { left: `calc(100% + ${offset}px)`, bottom: 0 };\n default:\n return {\n bottom: `calc(100% + ${offset}px)`,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n };\n }\n};\n\nexport const Toggletip = forwardRef<any, ToggletipProps>(\n (\n {\n children,\n title,\n content,\n footer,\n width = \"288px\",\n direction = \"top-center\",\n autoDirection = true,\n offset = 12,\n style,\n \"data-testid\": dataTestId,\n className,\n ...props\n },\n ref\n ) => {\n const [isOpen, setOpen] = useState(false);\n const containerRef = useRef<any>(null);\n const { theme } = useDesignSystem();\n\n const toggleOpen = () => setOpen(!isOpen);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target)\n ) {\n setOpen(false);\n }\n };\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n return () =>\n document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [isOpen]);\n\n const positionStyles = useMemo(\n () => getPositionStyles(direction, offset),\n [direction, offset]\n );\n\n return (\n <Box\n ref={containerRef}\n display=\"inline-flex\"\n position=\"relative\"\n className={className}\n style={{ height: \"fit-content\" }}\n >\n <Box onPress={toggleOpen} style={{ cursor: \"pointer\" }}>\n {children}\n </Box>\n {isOpen && (\n <Box\n data-testid={dataTestId}\n position=\"absolute\"\n backgroundColor={theme.colors.background.secondary}\n borderRadius={12}\n borderWidth={1}\n borderColor={theme.colors.border.secondary}\n padding={12}\n width={width}\n zIndex={2000}\n style={{\n ...positionStyles,\n boxShadow: \"0 4px 12px rgba(0, 36, 77, 0.2)\",\n ...style,\n }}\n >\n {title && (\n <>\n <Text\n color={theme.colors.content.primary}\n fontSize={24}\n lineHeight=\"28px\"\n fontWeight=\"500\"\n marginBottom={8}\n >\n {title}\n </Text>\n <Divider marginBottom={12} />\n </>\n )}\n {content && (\n <Box marginVertical={16}>\n {typeof content === \"string\" || typeof content === \"number\" ? (\n <Text\n color={theme.colors.content.primary}\n fontSize={14}\n fontWeight=\"400\"\n >\n {content}\n </Text>\n ) : (\n content\n )}\n </Box>\n )}\n {footer && (\n <Box\n marginTop={20}\n flexDirection=\"row\"\n justifyContent=\"flex-end\"\n gap={12}\n >\n {footer}\n </Box>\n )}\n </Box>\n )}\n </Box>\n );\n }\n);\n\nToggletip.displayName = \"Toggletip\";\n","import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport { Text as RNText, TextStyle, AccessibilityRole } from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\n// Map web roles to React Native accessibility roles\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n id,\n role,\n ...props\n}) => {\n // Extract the first font name from a comma-separated list (e.g. for web-style font stacks)\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n // On native, if we don't have the custom font loaded, it's better to use the system font\n // to avoid rendering issues or missing text.\n if (resolvedFontFamily === \"Pilat Wide Bold\") {\n resolvedFontFamily = undefined;\n }\n\n const style: TextStyle = {\n color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n };\n\n // Map role to React Native accessibilityRole\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText style={style} testID={id} accessibilityRole={accessibilityRole}>\n {children}\n </RNText>\n );\n};\n","import type React from \"react\";\nimport { ActivityIndicator, View } from \"react-native\";\nimport type { SpinnerProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Spinner: React.FC<SpinnerProps> = ({\n color,\n size,\n role,\n \"aria-label\": ariaLabel,\n \"aria-live\": ariaLive,\n \"aria-describedby\": ariaDescribedBy,\n testID,\n}) => {\n return (\n <View\n accessible={true}\n accessibilityRole={role === \"status\" ? \"none\" : undefined}\n accessibilityLabel={ariaLabel}\n accessibilityLiveRegion={\n ariaLive === \"polite\"\n ? \"polite\"\n : ariaLive === \"assertive\"\n ? \"assertive\"\n : \"none\"\n }\n testID={testID}\n >\n <ActivityIndicator\n color={color}\n size={typeof size === \"number\" ? size : \"small\"}\n />\n </View>\n );\n};\n\nSpinner.displayName = \"Spinner\";\n","import React from \"react\";\nimport { View, ViewStyle } from \"react-native\";\nimport { IconProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Icon: React.FC<IconProps> = ({ children, color, size }) => {\n const style: ViewStyle = {\n width: typeof size === \"number\" ? size : undefined,\n height: typeof size === \"number\" ? size : undefined,\n alignItems: \"center\",\n justifyContent: \"center\",\n };\n\n // On native, we try to pass the color down to children (like Text primitives)\n // to mimic the CSS inheritance behavior of the web version.\n const childrenWithProps = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n // @ts-ignore - passing color down to potential Text/Icon children\n return React.cloneElement(child, {\n color: child.props.color || color,\n // Also pass size if child seems to be an icon that needs it\n size: child.props.size || size,\n });\n }\n return child;\n });\n\n return <View style={style}>{childrenWithProps}</View>;\n};\n","import React from \"react\";\nimport { View, ViewStyle } from \"react-native\";\nimport { DividerProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Divider: React.FC<DividerProps> = ({\n color,\n height,\n width,\n vertical,\n dashStroke,\n}) => {\n const style: ViewStyle = {\n backgroundColor: dashStroke\n ? \"transparent\"\n : color || \"rgba(255, 255, 255, 0.15)\",\n width: vertical ? (typeof width === \"number\" ? width : 1) : \"100%\",\n height: vertical ? \"100%\" : typeof height === \"number\" ? height : 1,\n ...(dashStroke && {\n borderStyle: \"dashed\",\n borderColor: color || \"rgba(255, 255, 255, 0.15)\",\n borderWidth: 0,\n ...(vertical\n ? { borderLeftWidth: typeof width === \"number\" ? width : 1 }\n : { borderTopWidth: typeof height === \"number\" ? height : 1 }),\n }),\n };\n\n return <View style={style} />;\n};\n","import React, { forwardRef } from \"react\";\nimport { TextInput as RNTextInput } from \"react-native\";\nimport { InputPrimitiveProps } from \"@xsolla/xui-primitives-core\";\n\n// Map web input types to React Native keyboard types\nconst keyboardTypeMap: Record<string, any> = {\n text: \"default\",\n number: \"numeric\",\n email: \"email-address\",\n tel: \"phone-pad\",\n url: \"url\",\n decimal: \"decimal-pad\",\n};\n\n// Map web inputMode to React Native keyboard types\nconst inputModeToKeyboardType: Record<string, any> = {\n none: \"default\",\n text: \"default\",\n decimal: \"decimal-pad\",\n numeric: \"number-pad\",\n tel: \"phone-pad\",\n search: \"default\",\n email: \"email-address\",\n url: \"url\",\n};\n\n// Map web autoComplete to React Native textContentType (iOS)\nconst autoCompleteToTextContentType: Record<string, any> = {\n \"one-time-code\": \"oneTimeCode\",\n email: \"emailAddress\",\n username: \"username\",\n password: \"password\",\n \"new-password\": \"newPassword\",\n tel: \"telephoneNumber\",\n \"postal-code\": \"postalCode\",\n name: \"name\",\n};\n\nexport const InputPrimitive = forwardRef<RNTextInput, InputPrimitiveProps>(\n (\n {\n value,\n placeholder,\n onChange,\n onChangeText,\n onFocus,\n onBlur,\n onKeyDown,\n disabled,\n secureTextEntry,\n style,\n color,\n fontSize,\n placeholderTextColor,\n maxLength,\n name,\n type,\n inputMode,\n autoComplete,\n id,\n \"aria-invalid\": ariaInvalid,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-label\": ariaLabel,\n \"aria-disabled\": ariaDisabled,\n \"data-testid\": dataTestId,\n },\n ref\n ) => {\n const handleChangeText = (text: string) => {\n onChangeText?.(text);\n\n // Create a synthetic event for onChange compatibility\n // Include nativeEvent and no-op methods to prevent runtime errors\n // when consumers expect DOM-like event behavior\n if (onChange) {\n const syntheticEvent = {\n target: { value: text },\n currentTarget: { value: text },\n type: \"change\",\n nativeEvent: { text },\n preventDefault: () => {},\n stopPropagation: () => {},\n isTrusted: false,\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n };\n\n // Determine keyboard type - inputMode takes precedence over type\n const keyboardType = inputMode\n ? inputModeToKeyboardType[inputMode] || \"default\"\n : type\n ? keyboardTypeMap[type] || \"default\"\n : \"default\";\n\n // Determine textContentType for iOS autofill\n const textContentType = autoComplete\n ? autoCompleteToTextContentType[autoComplete]\n : undefined;\n\n return (\n <RNTextInput\n ref={ref}\n value={value}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyPress={(e) => {\n // Map onKeyPress to onKeyDown for cross-platform compatibility\n // Include preventDefault to avoid runtime errors when consumers call it\n if (onKeyDown) {\n onKeyDown({\n key: e.nativeEvent.key,\n preventDefault: () => {},\n } as any);\n }\n }}\n editable={!disabled}\n secureTextEntry={secureTextEntry || type === \"password\"}\n keyboardType={keyboardType}\n textContentType={textContentType}\n style={[\n {\n color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n flex: 1,\n padding: 0,\n textAlign: (style as any)?.textAlign || \"left\",\n },\n style as any,\n ]}\n placeholderTextColor={placeholderTextColor}\n maxLength={maxLength}\n // React Native accessibility props\n testID={dataTestId || id}\n accessibilityLabel={ariaLabel}\n accessibilityHint={ariaDescribedBy}\n accessibilityState={{\n disabled: disabled || ariaDisabled,\n }}\n accessible={true}\n />\n );\n }\n);\n\nInputPrimitive.displayName = \"InputPrimitive\";\n","import React, { forwardRef } from \"react\";\nimport { TextInput as RNTextInput } from \"react-native\";\nimport { TextAreaPrimitiveProps } from \"@xsolla/xui-primitives-core\";\n\nexport const TextAreaPrimitive = forwardRef<\n RNTextInput,\n TextAreaPrimitiveProps\n>(\n (\n {\n value,\n placeholder,\n onChange,\n onChangeText,\n onFocus,\n onBlur,\n onKeyDown,\n disabled,\n style,\n color,\n fontSize,\n placeholderTextColor,\n maxLength,\n rows,\n id,\n \"aria-invalid\": ariaInvalid,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-label\": ariaLabel,\n \"aria-disabled\": ariaDisabled,\n \"data-testid\": dataTestId,\n },\n ref\n ) => {\n const handleChangeText = (text: string) => {\n onChangeText?.(text);\n\n if (onChange) {\n const syntheticEvent = {\n target: { value: text },\n currentTarget: { value: text },\n type: \"change\",\n nativeEvent: { text },\n preventDefault: () => {},\n stopPropagation: () => {},\n isTrusted: false,\n } as unknown as React.ChangeEvent<HTMLTextAreaElement>;\n onChange(syntheticEvent);\n }\n };\n\n return (\n <RNTextInput\n ref={ref}\n value={value}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyPress={(e) => {\n if (onKeyDown) {\n onKeyDown({\n key: e.nativeEvent.key,\n preventDefault: () => {},\n } as any);\n }\n }}\n editable={!disabled}\n multiline={true}\n numberOfLines={rows || 4}\n style={[\n {\n color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n flex: 1,\n padding: 0,\n textAlignVertical: \"top\",\n textAlign: (style as any)?.textAlign || \"left\",\n },\n style as any,\n ]}\n placeholderTextColor={placeholderTextColor}\n maxLength={maxLength}\n testID={dataTestId || id}\n accessibilityLabel={ariaLabel}\n accessibilityHint={ariaDescribedBy}\n accessibilityState={{\n disabled: disabled || ariaDisabled,\n }}\n accessible={true}\n />\n );\n }\n);\n\nTextAreaPrimitive.displayName = \"TextAreaPrimitive\";\n"],"mappings":"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","names":["import_react","import_react_native","import_jsx_runtime","RNText","import_react_native","import_jsx_runtime","import_react_native","import_jsx_runtime","import_react_native","import_jsx_runtime","import_react","import_react_native","import_jsx_runtime","RNTextInput","import_react","import_react_native","import_jsx_runtime","RNTextInput","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.tsx","../../src/Toggletip.tsx","../../../primitives-native/src/Box.tsx","../../../primitives-native/src/Text.tsx","../../../primitives-native/src/Spinner.tsx","../../../primitives-native/src/Icon.tsx","../../../primitives-native/src/Divider.tsx","../../../primitives-native/src/Input.tsx","../../../primitives-native/src/TextArea.tsx","../../src/useToggletip.ts"],"sourcesContent":["export * from \"./Toggletip\";\nexport * from \"./types\";\n","import React, { forwardRef, useState, useRef, useEffect, useMemo } from \"react\";\n// @ts-ignore - this will be resolved at build time\nimport { Box, Text, Divider } from \"@xsolla/xui-primitives\";\nimport { useDesignSystem } from \"@xsolla/xui-core\";\nimport { useToggletip } from \"./useToggletip\";\nimport type { ToggletipPlacement, ToggletipProps } from \"./types\";\n\nconst getPositionStyles = (placement: ToggletipPlacement, offset: number) => {\n switch (placement) {\n case \"bottom\":\n return {\n top: `calc(100% + ${offset}px)`,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n };\n case \"bottom-left\":\n return { top: `calc(100% + ${offset}px)`, left: 0 };\n case \"bottom-right\":\n return { top: `calc(100% + ${offset}px)`, right: 0 };\n case \"top\":\n return {\n bottom: `calc(100% + ${offset}px)`,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n };\n case \"top-left\":\n return { bottom: `calc(100% + ${offset}px)`, left: 0 };\n case \"top-right\":\n return { bottom: `calc(100% + ${offset}px)`, right: 0 };\n case \"left\":\n return {\n right: `calc(100% + ${offset}px)`,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n };\n case \"right\":\n return {\n left: `calc(100% + ${offset}px)`,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n };\n default:\n return {\n bottom: `calc(100% + ${offset}px)`,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n };\n }\n};\n\nexport const Toggletip = forwardRef<any, ToggletipProps>(\n (\n {\n children,\n title,\n content,\n footer,\n width = \"288px\",\n direction = \"top\",\n autoDirection = true,\n offset = 12,\n },\n ref\n ) => {\n const [isOpen, setOpen] = useState(false);\n const containerRef = useRef<any>(null);\n const { theme } = useDesignSystem();\n\n // Use custom hook for positioning (similar to Floating UI's useFloating)\n const { refs, direction: newDirection } = useToggletip({\n open: isOpen,\n direction,\n offset,\n autoDirection,\n });\n\n const toggleOpen = () => setOpen(!isOpen);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target)\n ) {\n setOpen(false);\n }\n };\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n return () =>\n document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [isOpen]);\n\n const positionStyles = useMemo(\n () => getPositionStyles(newDirection, offset),\n [newDirection, offset]\n );\n\n return (\n <Box\n ref={(node: any) => {\n containerRef.current = node;\n refs.setReference(node);\n }}\n display=\"inline-flex\"\n position=\"relative\"\n style={{ height: \"fit-content\" }}\n >\n <Box onPress={toggleOpen} style={{ cursor: \"pointer\" }}>\n {children}\n </Box>\n {isOpen && (\n <Box\n ref={refs.setFloating}\n position=\"absolute\"\n backgroundColor={theme.colors.background.primary}\n borderRadius={theme.radius.card}\n borderWidth={1}\n borderColor={theme.colors.border.secondary}\n padding={12}\n width={width}\n zIndex={2000}\n style={{\n ...positionStyles,\n boxShadow: \"0 4px 12px rgba(0, 36, 77, 0.2)\",\n }}\n >\n {title && (\n <Box gap={8}>\n <Text\n color={theme.colors.content.primary}\n fontSize={24}\n lineHeight=\"28px\"\n fontWeight=\"500\"\n >\n {title}\n </Text>\n <Divider color={theme.colors.border.secondary} />\n </Box>\n )}\n {content && (\n <Box marginBottom={16} marginTop={16}>\n {typeof content === \"string\" || typeof content === \"number\" ? (\n <Text\n color={theme.colors.content.primary}\n fontSize={14}\n fontWeight=\"400\"\n >\n {content}\n </Text>\n ) : (\n content\n )}\n </Box>\n )}\n {footer && (\n <Box\n marginTop={20}\n flexDirection=\"row\"\n justifyContent=\"flex-end\"\n gap={12}\n >\n {footer}\n </Box>\n )}\n </Box>\n )}\n </Box>\n );\n }\n);\n\nToggletip.displayName = \"Toggletip\";\n","import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport { Text as RNText, TextStyle, AccessibilityRole } from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\n// Map web roles to React Native accessibility roles\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n id,\n role,\n ...props\n}) => {\n // Extract the first font name from a comma-separated list (e.g. for web-style font stacks)\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n // On native, if we don't have the custom font loaded, it's better to use the system font\n // to avoid rendering issues or missing text.\n if (resolvedFontFamily === \"Pilat Wide Bold\") {\n resolvedFontFamily = undefined;\n }\n\n const style: TextStyle = {\n color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n };\n\n // Map role to React Native accessibilityRole\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText style={style} testID={id} accessibilityRole={accessibilityRole}>\n {children}\n </RNText>\n );\n};\n","import type React from \"react\";\nimport { ActivityIndicator, View } from \"react-native\";\nimport type { SpinnerProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Spinner: React.FC<SpinnerProps> = ({\n color,\n size,\n role,\n \"aria-label\": ariaLabel,\n \"aria-live\": ariaLive,\n \"aria-describedby\": ariaDescribedBy,\n testID,\n}) => {\n return (\n <View\n accessible={true}\n accessibilityRole={role === \"status\" ? \"none\" : undefined}\n accessibilityLabel={ariaLabel}\n accessibilityLiveRegion={\n ariaLive === \"polite\"\n ? \"polite\"\n : ariaLive === \"assertive\"\n ? \"assertive\"\n : \"none\"\n }\n testID={testID}\n >\n <ActivityIndicator\n color={color}\n size={typeof size === \"number\" ? size : \"small\"}\n />\n </View>\n );\n};\n\nSpinner.displayName = \"Spinner\";\n","import React from \"react\";\nimport { View, ViewStyle } from \"react-native\";\nimport { IconProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Icon: React.FC<IconProps> = ({ children, color, size }) => {\n const style: ViewStyle = {\n width: typeof size === \"number\" ? size : undefined,\n height: typeof size === \"number\" ? size : undefined,\n alignItems: \"center\",\n justifyContent: \"center\",\n };\n\n // On native, we try to pass the color down to children (like Text primitives)\n // to mimic the CSS inheritance behavior of the web version.\n const childrenWithProps = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n // @ts-ignore - passing color down to potential Text/Icon children\n return React.cloneElement(child, {\n color: child.props.color || color,\n // Also pass size if child seems to be an icon that needs it\n size: child.props.size || size,\n });\n }\n return child;\n });\n\n return <View style={style}>{childrenWithProps}</View>;\n};\n","import React from \"react\";\nimport { View, ViewStyle } from \"react-native\";\nimport { DividerProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Divider: React.FC<DividerProps> = ({\n color,\n height,\n width,\n vertical,\n dashStroke,\n}) => {\n const style: ViewStyle = {\n backgroundColor: dashStroke\n ? \"transparent\"\n : color || \"rgba(255, 255, 255, 0.15)\",\n width: vertical ? (typeof width === \"number\" ? width : 1) : \"100%\",\n height: vertical ? \"100%\" : typeof height === \"number\" ? height : 1,\n ...(dashStroke && {\n borderStyle: \"dashed\",\n borderColor: color || \"rgba(255, 255, 255, 0.15)\",\n borderWidth: 0,\n ...(vertical\n ? { borderLeftWidth: typeof width === \"number\" ? width : 1 }\n : { borderTopWidth: typeof height === \"number\" ? height : 1 }),\n }),\n };\n\n return <View style={style} />;\n};\n","import React, { forwardRef } from \"react\";\nimport { TextInput as RNTextInput } from \"react-native\";\nimport { InputPrimitiveProps } from \"@xsolla/xui-primitives-core\";\n\n// Map web input types to React Native keyboard types\nconst keyboardTypeMap: Record<string, any> = {\n text: \"default\",\n number: \"numeric\",\n email: \"email-address\",\n tel: \"phone-pad\",\n url: \"url\",\n decimal: \"decimal-pad\",\n};\n\n// Map web inputMode to React Native keyboard types\nconst inputModeToKeyboardType: Record<string, any> = {\n none: \"default\",\n text: \"default\",\n decimal: \"decimal-pad\",\n numeric: \"number-pad\",\n tel: \"phone-pad\",\n search: \"default\",\n email: \"email-address\",\n url: \"url\",\n};\n\n// Map web autoComplete to React Native textContentType (iOS)\nconst autoCompleteToTextContentType: Record<string, any> = {\n \"one-time-code\": \"oneTimeCode\",\n email: \"emailAddress\",\n username: \"username\",\n password: \"password\",\n \"new-password\": \"newPassword\",\n tel: \"telephoneNumber\",\n \"postal-code\": \"postalCode\",\n name: \"name\",\n};\n\nexport const InputPrimitive = forwardRef<RNTextInput, InputPrimitiveProps>(\n (\n {\n value,\n placeholder,\n onChange,\n onChangeText,\n onFocus,\n onBlur,\n onKeyDown,\n disabled,\n secureTextEntry,\n style,\n color,\n fontSize,\n placeholderTextColor,\n maxLength,\n name,\n type,\n inputMode,\n autoComplete,\n id,\n \"aria-invalid\": ariaInvalid,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-label\": ariaLabel,\n \"aria-disabled\": ariaDisabled,\n \"data-testid\": dataTestId,\n },\n ref\n ) => {\n const handleChangeText = (text: string) => {\n onChangeText?.(text);\n\n // Create a synthetic event for onChange compatibility\n // Include nativeEvent and no-op methods to prevent runtime errors\n // when consumers expect DOM-like event behavior\n if (onChange) {\n const syntheticEvent = {\n target: { value: text },\n currentTarget: { value: text },\n type: \"change\",\n nativeEvent: { text },\n preventDefault: () => {},\n stopPropagation: () => {},\n isTrusted: false,\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n };\n\n // Determine keyboard type - inputMode takes precedence over type\n const keyboardType = inputMode\n ? inputModeToKeyboardType[inputMode] || \"default\"\n : type\n ? keyboardTypeMap[type] || \"default\"\n : \"default\";\n\n // Determine textContentType for iOS autofill\n const textContentType = autoComplete\n ? autoCompleteToTextContentType[autoComplete]\n : undefined;\n\n return (\n <RNTextInput\n ref={ref}\n value={value}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyPress={(e) => {\n // Map onKeyPress to onKeyDown for cross-platform compatibility\n // Include preventDefault to avoid runtime errors when consumers call it\n if (onKeyDown) {\n onKeyDown({\n key: e.nativeEvent.key,\n preventDefault: () => {},\n } as any);\n }\n }}\n editable={!disabled}\n secureTextEntry={secureTextEntry || type === \"password\"}\n keyboardType={keyboardType}\n textContentType={textContentType}\n style={[\n {\n color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n flex: 1,\n padding: 0,\n textAlign: (style as any)?.textAlign || \"left\",\n },\n style as any,\n ]}\n placeholderTextColor={placeholderTextColor}\n maxLength={maxLength}\n // React Native accessibility props\n testID={dataTestId || id}\n accessibilityLabel={ariaLabel}\n accessibilityHint={ariaDescribedBy}\n accessibilityState={{\n disabled: disabled || ariaDisabled,\n }}\n accessible={true}\n />\n );\n }\n);\n\nInputPrimitive.displayName = \"InputPrimitive\";\n","import React, { forwardRef } from \"react\";\nimport { TextInput as RNTextInput } from \"react-native\";\nimport { TextAreaPrimitiveProps } from \"@xsolla/xui-primitives-core\";\n\nexport const TextAreaPrimitive = forwardRef<\n RNTextInput,\n TextAreaPrimitiveProps\n>(\n (\n {\n value,\n placeholder,\n onChange,\n onChangeText,\n onFocus,\n onBlur,\n onKeyDown,\n disabled,\n style,\n color,\n fontSize,\n placeholderTextColor,\n maxLength,\n rows,\n id,\n \"aria-invalid\": ariaInvalid,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-label\": ariaLabel,\n \"aria-disabled\": ariaDisabled,\n \"data-testid\": dataTestId,\n },\n ref\n ) => {\n const handleChangeText = (text: string) => {\n onChangeText?.(text);\n\n if (onChange) {\n const syntheticEvent = {\n target: { value: text },\n currentTarget: { value: text },\n type: \"change\",\n nativeEvent: { text },\n preventDefault: () => {},\n stopPropagation: () => {},\n isTrusted: false,\n } as unknown as React.ChangeEvent<HTMLTextAreaElement>;\n onChange(syntheticEvent);\n }\n };\n\n return (\n <RNTextInput\n ref={ref}\n value={value}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyPress={(e) => {\n if (onKeyDown) {\n onKeyDown({\n key: e.nativeEvent.key,\n preventDefault: () => {},\n } as any);\n }\n }}\n editable={!disabled}\n multiline={true}\n numberOfLines={rows || 4}\n style={[\n {\n color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n flex: 1,\n padding: 0,\n textAlignVertical: \"top\",\n textAlign: (style as any)?.textAlign || \"left\",\n },\n style as any,\n ]}\n placeholderTextColor={placeholderTextColor}\n maxLength={maxLength}\n testID={dataTestId || id}\n accessibilityLabel={ariaLabel}\n accessibilityHint={ariaDescribedBy}\n accessibilityState={{\n disabled: disabled || ariaDisabled,\n }}\n accessible={true}\n />\n );\n }\n);\n\nTextAreaPrimitive.displayName = \"TextAreaPrimitive\";\n","import { useState, useRef, useLayoutEffect, useCallback } from \"react\";\nimport type { ToggletipPlacement } from \"./types\";\n\ninterface UseToggletipOptions {\n open: boolean;\n direction: ToggletipPlacement;\n offset: number;\n autoDirection?: boolean;\n}\n\ninterface UseToggletipReturn {\n refs: {\n setReference: (node: any) => void;\n setFloating: (node: any) => void;\n };\n direction: ToggletipPlacement;\n}\n\n// Find scrollable parent\nconst getScrollParent = (element: HTMLElement | null): HTMLElement => {\n if (!element || element === document.body) {\n return document.body;\n }\n\n const { overflow, overflowX, overflowY } = window.getComputedStyle(element);\n const isScrollable =\n /(auto|scroll)/.test(overflow) ||\n /(auto|scroll)/.test(overflowX) ||\n /(auto|scroll)/.test(overflowY);\n\n // Check both vertical and horizontal scroll\n if (\n isScrollable &&\n (element.scrollHeight > element.clientHeight ||\n element.scrollWidth > element.clientWidth)\n ) {\n return element;\n }\n\n return getScrollParent(element.parentElement);\n};\n\n// Get viewport bounds\nconst getViewportBounds = (triggerElement: HTMLElement) => {\n const scrollParent = getScrollParent(triggerElement);\n\n if (scrollParent === document.body) {\n return {\n top: 0,\n left: 0,\n right: window.visualViewport?.width || window.innerWidth,\n bottom: window.visualViewport?.height || window.innerHeight,\n width: window.visualViewport?.width || window.innerWidth,\n height: window.visualViewport?.height || window.innerHeight,\n };\n }\n\n const rect = scrollParent.getBoundingClientRect();\n return {\n top: rect.top,\n left: rect.left,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height,\n };\n};\n\n// Collision detection\nconst checkCollision = (\n triggerRect: DOMRect,\n toggletipRect: DOMRect,\n placement: ToggletipPlacement,\n offset: number,\n triggerElement: HTMLElement\n): ToggletipPlacement => {\n const viewport = getViewportBounds(triggerElement);\n const buffer = 10;\n\n const space = {\n top: triggerRect.top - viewport.top,\n bottom: viewport.bottom - triggerRect.bottom,\n left: triggerRect.left - viewport.left,\n right: viewport.right - triggerRect.right,\n };\n\n const triggerCenterY = triggerRect.top + triggerRect.height / 2;\n const triggerCenterX = triggerRect.left + triggerRect.width / 2;\n\n const fits = {\n top:\n space.top >= toggletipRect.height + offset + buffer &&\n triggerCenterX - toggletipRect.width / 2 >= viewport.left + buffer &&\n triggerCenterX + toggletipRect.width / 2 <= viewport.right - buffer,\n bottom:\n space.bottom >= toggletipRect.height + offset + buffer &&\n triggerCenterX - toggletipRect.width / 2 >= viewport.left + buffer &&\n triggerCenterX + toggletipRect.width / 2 <= viewport.right - buffer,\n left:\n space.left >= toggletipRect.width + offset + buffer &&\n triggerCenterY - toggletipRect.height / 2 >= viewport.top + buffer &&\n triggerCenterY + toggletipRect.height / 2 <= viewport.bottom - buffer,\n right:\n space.right >= toggletipRect.width + offset + buffer &&\n triggerCenterY - toggletipRect.height / 2 >= viewport.top + buffer &&\n triggerCenterY + toggletipRect.height / 2 <= viewport.bottom - buffer,\n };\n\n const [primary, secondary] = placement.split(\"-\");\n const primaryFits = fits[primary as keyof typeof fits];\n\n if (primaryFits) {\n return placement;\n }\n\n const opposites: Record<string, string> = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n };\n\n const opposite = opposites[primary];\n if (opposite && fits[opposite as keyof typeof fits]) {\n return secondary\n ? (`${opposite}-${secondary}` as ToggletipPlacement)\n : (opposite as ToggletipPlacement);\n }\n\n const perpendicular =\n primary === \"top\" || primary === \"bottom\"\n ? [\"right\", \"left\"]\n : [\"bottom\", \"top\"];\n\n for (const dir of perpendicular) {\n if (fits[dir as keyof typeof fits]) {\n return dir as ToggletipPlacement;\n }\n }\n\n const best = Object.entries(space).sort(([, a], [, b]) => b - a)[0];\n return best[0] as ToggletipPlacement;\n};\n\nexport const useToggletip = ({\n open,\n direction,\n offset,\n autoDirection = true,\n}: UseToggletipOptions): UseToggletipReturn => {\n const [newDirection, setNewDirection] = useState(direction);\n const referenceRef = useRef<any>(null);\n const floatingRef = useRef<any>(null);\n\n const setReference = useCallback((node: any) => {\n referenceRef.current = node;\n }, []);\n\n const setFloating = useCallback((node: any) => {\n floatingRef.current = node;\n }, []);\n\n // Collision detection + continuous updates\n useLayoutEffect(() => {\n if (\n !open ||\n !autoDirection ||\n !referenceRef.current ||\n !floatingRef.current\n ) {\n return;\n }\n\n let rafId: number | null = null;\n\n const updatePlacement = () => {\n rafId = null;\n if (!referenceRef.current || !floatingRef.current) return;\n\n const triggerRect = referenceRef.current.getBoundingClientRect();\n const toggletipRect = floatingRef.current.getBoundingClientRect();\n const calculatedDirection = checkCollision(\n triggerRect,\n toggletipRect,\n direction,\n offset,\n referenceRef.current\n );\n\n setNewDirection((prev) => {\n if (prev === calculatedDirection) return prev;\n return calculatedDirection;\n });\n };\n\n const scheduleUpdate = () => {\n if (rafId != null) return;\n rafId = requestAnimationFrame(updatePlacement);\n };\n\n updatePlacement();\n\n window.addEventListener(\"scroll\", scheduleUpdate, true);\n window.addEventListener(\"resize\", scheduleUpdate);\n\n const resizeObserver = new ResizeObserver(scheduleUpdate);\n resizeObserver.observe(referenceRef.current);\n resizeObserver.observe(floatingRef.current);\n\n return () => {\n if (rafId != null) cancelAnimationFrame(rafId);\n window.removeEventListener(\"scroll\", scheduleUpdate, true);\n window.removeEventListener(\"resize\", scheduleUpdate);\n resizeObserver.disconnect();\n };\n }, [open, autoDirection, direction, offset]);\n\n // Reset direction when closed\n useLayoutEffect(() => {\n if (!open) {\n setNewDirection(direction);\n }\n }, [open, direction]);\n\n return {\n refs: {\n setReference,\n setFloating,\n },\n direction: newDirection,\n };\n};\n"],"mappings":"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","names":["import_react","import_react_native","import_jsx_runtime","RNText","import_react_native","import_jsx_runtime","import_react_native","import_jsx_runtime","import_react_native","import_jsx_runtime","import_react","import_react_native","import_jsx_runtime","RNTextInput","import_react","import_react_native","import_jsx_runtime","RNTextInput","import_react","import_jsx_runtime"]}
|