@bitrise/bitkit-v2 0.3.247 → 0.3.248
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/BitkitLabelTooltip/BitkitLabelTooltip.js +4 -0
- package/dist/components/BitkitLabelTooltip/BitkitLabelTooltip.js.map +1 -1
- package/dist/components/BitkitOverflowTooltip/BitkitOverflowTooltip.js +4 -0
- package/dist/components/BitkitOverflowTooltip/BitkitOverflowTooltip.js.map +1 -1
- package/dist/components/BitkitTooltip/BitkitTooltip.js +4 -0
- package/dist/components/BitkitTooltip/BitkitTooltip.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,12 +1,15 @@
|
|
|
1
|
+
import { useRef } from "react";
|
|
1
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
3
|
import { Portal } from "@chakra-ui/react/portal";
|
|
3
4
|
import { Tooltip } from "@chakra-ui/react/tooltip";
|
|
4
5
|
//#region lib/components/BitkitLabelTooltip/BitkitLabelTooltip.tsx
|
|
5
6
|
var BitkitLabelTooltip = ({ children, disabled, placement = "top", text }) => {
|
|
7
|
+
const triggerRef = useRef(null);
|
|
6
8
|
return /* @__PURE__ */ jsxs(Tooltip.Root, {
|
|
7
9
|
disabled,
|
|
8
10
|
paddingSize: "sm",
|
|
9
11
|
positioning: {
|
|
12
|
+
getAnchorElement: () => triggerRef.current,
|
|
10
13
|
placement,
|
|
11
14
|
offset: {
|
|
12
15
|
mainAxis: 4,
|
|
@@ -15,6 +18,7 @@ var BitkitLabelTooltip = ({ children, disabled, placement = "top", text }) => {
|
|
|
15
18
|
},
|
|
16
19
|
textStyle: "sm/semibold",
|
|
17
20
|
children: [/* @__PURE__ */ jsx(Tooltip.Trigger, {
|
|
21
|
+
ref: triggerRef,
|
|
18
22
|
asChild: true,
|
|
19
23
|
children
|
|
20
24
|
}), /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Tooltip.Positioner, { children: /* @__PURE__ */ jsx(Tooltip.Content, { children: text }) }) })]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitkitLabelTooltip.js","names":[],"sources":["../../../lib/components/BitkitLabelTooltip/BitkitLabelTooltip.tsx"],"sourcesContent":["import { Portal } from '@chakra-ui/react/portal';\nimport { Tooltip, type TooltipRootProps } from '@chakra-ui/react/tooltip';\nimport { type ReactNode } from 'react';\n\nexport type BitkitLabelTooltipProps = {\n children: ReactNode;\n disabled?: TooltipRootProps['disabled'];\n placement?: NonNullable<TooltipRootProps['positioning']>['placement'];\n text: string;\n};\n\nconst BitkitLabelTooltip = ({ children, disabled, placement = 'top', text }: BitkitLabelTooltipProps) => {\n return (\n <Tooltip.Root\n disabled={disabled}\n paddingSize=\"sm\"\n positioning={{ placement, offset: { mainAxis: 4, crossAxis: 0 } }}\n textStyle=\"sm/semibold\"\n >\n <Tooltip.Trigger asChild
|
|
1
|
+
{"version":3,"file":"BitkitLabelTooltip.js","names":[],"sources":["../../../lib/components/BitkitLabelTooltip/BitkitLabelTooltip.tsx"],"sourcesContent":["import { Portal } from '@chakra-ui/react/portal';\nimport { Tooltip, type TooltipRootProps } from '@chakra-ui/react/tooltip';\nimport { type ReactNode, type Ref, useRef } from 'react';\n\nexport type BitkitLabelTooltipProps = {\n children: ReactNode;\n disabled?: TooltipRootProps['disabled'];\n placement?: NonNullable<TooltipRootProps['positioning']>['placement'];\n text: string;\n};\n\nconst BitkitLabelTooltip = ({ children, disabled, placement = 'top', text }: BitkitLabelTooltipProps) => {\n // Anchor positioning to the trigger node by ref rather than relying on Zag's\n // id/data-scope lookup. When the trigger is also wrapped by another `asChild`\n // trigger (e.g. Menu.Trigger, Dialog.CloseTrigger), the outer trigger's id and\n // data-scope/data-part overwrite ours on the shared node, so `getTriggerEl()`\n // can't find it and the tooltip loses its anchor. `getAnchorElement` takes\n // precedence over the id lookup, so this is safe in the standalone case too.\n const triggerRef = useRef<HTMLElement>(null);\n\n return (\n <Tooltip.Root\n disabled={disabled}\n paddingSize=\"sm\"\n positioning={{ getAnchorElement: () => triggerRef.current, placement, offset: { mainAxis: 4, crossAxis: 0 } }}\n textStyle=\"sm/semibold\"\n >\n <Tooltip.Trigger ref={triggerRef as Ref<HTMLButtonElement>} asChild>\n {children}\n </Tooltip.Trigger>\n <Portal>\n <Tooltip.Positioner>\n <Tooltip.Content>{text}</Tooltip.Content>\n </Tooltip.Positioner>\n </Portal>\n </Tooltip.Root>\n );\n};\n\nBitkitLabelTooltip.displayName = 'BitkitLabelTooltip';\n\nexport default BitkitLabelTooltip;\n"],"mappings":";;;;;AAWA,IAAM,sBAAsB,EAAE,UAAU,UAAU,YAAY,OAAO,WAAoC;CAOvG,MAAM,aAAa,OAAoB,IAAI;CAE3C,OACE,qBAAC,QAAQ,MAAT;EACY;EACV,aAAY;EACZ,aAAa;GAAE,wBAAwB,WAAW;GAAS;GAAW,QAAQ;IAAE,UAAU;IAAG,WAAW;GAAE;EAAE;EAC5G,WAAU;YAJZ,CAME,oBAAC,QAAQ,SAAT;GAAiB,KAAK;GAAsC,SAAA;GACzD;EACc,CAAA,GACjB,oBAAC,QAAD,EAAA,UACE,oBAAC,QAAQ,YAAT,EAAA,UACE,oBAAC,QAAQ,SAAT,EAAA,UAAkB,KAAsB,CAAA,EACtB,CAAA,EACd,CAAA,CACI;;AAElB;AAEA,mBAAmB,cAAc"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { rem } from "../../theme/themeUtils.js";
|
|
2
|
+
import { useRef } from "react";
|
|
2
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
4
|
import { Tooltip } from "@chakra-ui/react/tooltip";
|
|
4
5
|
//#region lib/components/BitkitOverflowTooltip/BitkitOverflowTooltip.tsx
|
|
5
6
|
var BitkitOverflowTooltip = ({ children, disabled, placement = "right", text }) => {
|
|
7
|
+
const triggerRef = useRef(null);
|
|
6
8
|
return /* @__PURE__ */ jsxs(Tooltip.Root, {
|
|
7
9
|
disabled,
|
|
8
10
|
paddingSize: "sm",
|
|
9
11
|
positioning: {
|
|
12
|
+
getAnchorElement: () => triggerRef.current,
|
|
10
13
|
placement,
|
|
11
14
|
offset: {
|
|
12
15
|
mainAxis: 4,
|
|
@@ -16,6 +19,7 @@ var BitkitOverflowTooltip = ({ children, disabled, placement = "right", text })
|
|
|
16
19
|
textStyle: "sm/regular",
|
|
17
20
|
variant: "light",
|
|
18
21
|
children: [/* @__PURE__ */ jsx(Tooltip.Trigger, {
|
|
22
|
+
ref: triggerRef,
|
|
19
23
|
asChild: true,
|
|
20
24
|
children
|
|
21
25
|
}), /* @__PURE__ */ jsx(Tooltip.Positioner, { children: /* @__PURE__ */ jsx(Tooltip.Content, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitkitOverflowTooltip.js","names":[],"sources":["../../../lib/components/BitkitOverflowTooltip/BitkitOverflowTooltip.tsx"],"sourcesContent":["import { Tooltip, type TooltipRootProps } from '@chakra-ui/react/tooltip';\nimport { type ReactNode } from 'react';\n\nimport { rem } from '../../theme/themeUtils';\n\nexport type BitkitOverflowTooltipProps = {\n children: ReactNode;\n disabled?: TooltipRootProps['disabled'];\n placement?: NonNullable<TooltipRootProps['positioning']>['placement'];\n text: string;\n};\n\nconst BitkitOverflowTooltip = ({ children, disabled, placement = 'right', text }: BitkitOverflowTooltipProps) => {\n return (\n <Tooltip.Root\n disabled={disabled}\n paddingSize=\"sm\"\n positioning={{ placement, offset: { mainAxis: 4, crossAxis: 0 } }}\n textStyle=\"sm/regular\"\n variant=\"light\"\n >\n <Tooltip.Trigger asChild
|
|
1
|
+
{"version":3,"file":"BitkitOverflowTooltip.js","names":[],"sources":["../../../lib/components/BitkitOverflowTooltip/BitkitOverflowTooltip.tsx"],"sourcesContent":["import { Tooltip, type TooltipRootProps } from '@chakra-ui/react/tooltip';\nimport { type ReactNode, type Ref, useRef } from 'react';\n\nimport { rem } from '../../theme/themeUtils';\n\nexport type BitkitOverflowTooltipProps = {\n children: ReactNode;\n disabled?: TooltipRootProps['disabled'];\n placement?: NonNullable<TooltipRootProps['positioning']>['placement'];\n text: string;\n};\n\nconst BitkitOverflowTooltip = ({ children, disabled, placement = 'right', text }: BitkitOverflowTooltipProps) => {\n // Anchor positioning to the trigger node by ref rather than relying on Zag's\n // id/data-scope lookup. When the trigger is also wrapped by another `asChild`\n // trigger (e.g. Menu.Trigger), the outer trigger's id and data-scope/data-part\n // overwrite ours on the shared node, so `getTriggerEl()` can't find it and the\n // tooltip loses its anchor. `getAnchorElement` takes precedence over the id\n // lookup, so this is safe in the standalone case too.\n const triggerRef = useRef<HTMLElement>(null);\n\n return (\n <Tooltip.Root\n disabled={disabled}\n paddingSize=\"sm\"\n positioning={{ getAnchorElement: () => triggerRef.current, placement, offset: { mainAxis: 4, crossAxis: 0 } }}\n textStyle=\"sm/regular\"\n variant=\"light\"\n >\n <Tooltip.Trigger ref={triggerRef as Ref<HTMLButtonElement>} asChild>\n {children}\n </Tooltip.Trigger>\n <Tooltip.Positioner>\n <Tooltip.Content css={{ maxWidth: rem(800) }}>{text}</Tooltip.Content>\n </Tooltip.Positioner>\n </Tooltip.Root>\n );\n};\n\nBitkitOverflowTooltip.displayName = 'BitkitOverflowTooltip';\n\nexport default BitkitOverflowTooltip;\n"],"mappings":";;;;;AAYA,IAAM,yBAAyB,EAAE,UAAU,UAAU,YAAY,SAAS,WAAuC;CAO/G,MAAM,aAAa,OAAoB,IAAI;CAE3C,OACE,qBAAC,QAAQ,MAAT;EACY;EACV,aAAY;EACZ,aAAa;GAAE,wBAAwB,WAAW;GAAS;GAAW,QAAQ;IAAE,UAAU;IAAG,WAAW;GAAE;EAAE;EAC5G,WAAU;EACV,SAAQ;YALV,CAOE,oBAAC,QAAQ,SAAT;GAAiB,KAAK;GAAsC,SAAA;GACzD;EACc,CAAA,GACjB,oBAAC,QAAQ,YAAT,EAAA,UACE,oBAAC,QAAQ,SAAT;GAAiB,KAAK,EAAE,UAAU,IAAI,GAAG,EAAE;aAAI;EAAsB,CAAA,EACnD,CAAA,CACR;;AAElB;AAEA,sBAAsB,cAAc"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { rem } from "../../theme/themeUtils.js";
|
|
2
2
|
import BitkitColorButton from "../BitkitColorButton/BitkitColorButton.js";
|
|
3
3
|
import { Box } from "@chakra-ui/react/box";
|
|
4
|
+
import { useRef } from "react";
|
|
4
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
6
|
import { Tooltip } from "@chakra-ui/react/tooltip";
|
|
6
7
|
import { Link } from "@chakra-ui/react/link";
|
|
7
8
|
//#region lib/components/BitkitTooltip/BitkitTooltip.tsx
|
|
8
9
|
var BitkitTooltip = ({ button, children, closeOnClick, disabled, icon: Icon, learnMoreTarget, learnMoreUrl, onOpenChange, open, openDelay, placement = "top", text }) => {
|
|
9
10
|
const isInteractive = !!learnMoreUrl || !!button;
|
|
11
|
+
const triggerRef = useRef(null);
|
|
10
12
|
return /* @__PURE__ */ jsxs(Tooltip.Root, {
|
|
11
13
|
closeOnClick,
|
|
12
14
|
disabled,
|
|
@@ -16,6 +18,7 @@ var BitkitTooltip = ({ button, children, closeOnClick, disabled, icon: Icon, lea
|
|
|
16
18
|
openDelay,
|
|
17
19
|
paddingSize: isInteractive ? "lg" : void 0,
|
|
18
20
|
positioning: {
|
|
21
|
+
getAnchorElement: () => triggerRef.current,
|
|
19
22
|
placement,
|
|
20
23
|
offset: {
|
|
21
24
|
mainAxis: 4,
|
|
@@ -23,6 +26,7 @@ var BitkitTooltip = ({ button, children, closeOnClick, disabled, icon: Icon, lea
|
|
|
23
26
|
}
|
|
24
27
|
},
|
|
25
28
|
children: [/* @__PURE__ */ jsx(Tooltip.Trigger, {
|
|
29
|
+
ref: triggerRef,
|
|
26
30
|
asChild: true,
|
|
27
31
|
children
|
|
28
32
|
}), /* @__PURE__ */ jsx(Tooltip.Positioner, { children: /* @__PURE__ */ jsxs(Tooltip.Content, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitkitTooltip.js","names":[],"sources":["../../../lib/components/BitkitTooltip/BitkitTooltip.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport { Link } from '@chakra-ui/react/link';\nimport { Tooltip, type TooltipRootProps } from '@chakra-ui/react/tooltip';\nimport { type ReactNode } from 'react';\n\nimport { type BitkitIconComponent } from '../../icons';\nimport { rem } from '../../theme/themeUtils';\nimport BitkitColorButton, { type BitkitColorButtonProps } from '../BitkitColorButton/BitkitColorButton';\n\nexport type BitkitTooltipProps = {\n button?: BitkitColorButtonProps;\n children: ReactNode;\n closeOnClick?: TooltipRootProps['closeOnClick'];\n disabled?: TooltipRootProps['disabled'];\n icon?: BitkitIconComponent;\n learnMoreTarget?: HTMLAnchorElement['target'];\n learnMoreUrl?: string;\n onOpenChange?: TooltipRootProps['onOpenChange'];\n open?: TooltipRootProps['open'];\n openDelay?: TooltipRootProps['openDelay'];\n placement?: NonNullable<TooltipRootProps['positioning']>['placement'];\n text: string;\n};\n\nconst BitkitTooltip = ({\n button,\n children,\n closeOnClick,\n disabled,\n icon: Icon,\n learnMoreTarget,\n learnMoreUrl,\n onOpenChange,\n open,\n openDelay,\n placement = 'top',\n text,\n}: BitkitTooltipProps) => {\n const isInteractive = !!learnMoreUrl || !!button;\n\n return (\n <Tooltip.Root\n closeOnClick={closeOnClick}\n disabled={disabled}\n interactive={isInteractive || undefined}\n onOpenChange={onOpenChange}\n open={open}\n openDelay={openDelay}\n paddingSize={isInteractive ? 'lg' : undefined}\n positioning={{ placement, offset: { mainAxis: 4, crossAxis: 0 } }}\n >\n <Tooltip.Trigger asChild
|
|
1
|
+
{"version":3,"file":"BitkitTooltip.js","names":[],"sources":["../../../lib/components/BitkitTooltip/BitkitTooltip.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport { Link } from '@chakra-ui/react/link';\nimport { Tooltip, type TooltipRootProps } from '@chakra-ui/react/tooltip';\nimport { type ReactNode, type Ref, useRef } from 'react';\n\nimport { type BitkitIconComponent } from '../../icons';\nimport { rem } from '../../theme/themeUtils';\nimport BitkitColorButton, { type BitkitColorButtonProps } from '../BitkitColorButton/BitkitColorButton';\n\nexport type BitkitTooltipProps = {\n button?: BitkitColorButtonProps;\n children: ReactNode;\n closeOnClick?: TooltipRootProps['closeOnClick'];\n disabled?: TooltipRootProps['disabled'];\n icon?: BitkitIconComponent;\n learnMoreTarget?: HTMLAnchorElement['target'];\n learnMoreUrl?: string;\n onOpenChange?: TooltipRootProps['onOpenChange'];\n open?: TooltipRootProps['open'];\n openDelay?: TooltipRootProps['openDelay'];\n placement?: NonNullable<TooltipRootProps['positioning']>['placement'];\n text: string;\n};\n\nconst BitkitTooltip = ({\n button,\n children,\n closeOnClick,\n disabled,\n icon: Icon,\n learnMoreTarget,\n learnMoreUrl,\n onOpenChange,\n open,\n openDelay,\n placement = 'top',\n text,\n}: BitkitTooltipProps) => {\n const isInteractive = !!learnMoreUrl || !!button;\n\n // Anchor positioning to the trigger node by ref rather than relying on Zag's\n // id/data-scope lookup. When the trigger is also wrapped by another `asChild`\n // trigger (e.g. Menu.Trigger), the outer trigger's id and data-scope/data-part\n // overwrite ours on the shared node, so `getTriggerEl()` can't find it and the\n // tooltip loses its anchor. `getAnchorElement` takes precedence over the id\n // lookup, so this is safe in the standalone case too.\n const triggerRef = useRef<HTMLElement>(null);\n\n return (\n <Tooltip.Root\n closeOnClick={closeOnClick}\n disabled={disabled}\n interactive={isInteractive || undefined}\n onOpenChange={onOpenChange}\n open={open}\n openDelay={openDelay}\n paddingSize={isInteractive ? 'lg' : undefined}\n positioning={{ getAnchorElement: () => triggerRef.current, placement, offset: { mainAxis: 4, crossAxis: 0 } }}\n >\n <Tooltip.Trigger ref={triggerRef as Ref<HTMLButtonElement>} asChild>\n {children}\n </Tooltip.Trigger>\n <Tooltip.Positioner>\n <Tooltip.Content maxWidth={rem(320)} css={isInteractive && { minWidth: rem(240) }}>\n <Tooltip.Arrow>\n <Tooltip.ArrowTip />\n </Tooltip.Arrow>\n <Box display=\"flex\" gap=\"8\">\n {text}\n {Icon && <Icon flexShrink=\"0\" size=\"16\" />}\n </Box>\n {isInteractive && (\n <Box alignItems=\"center\" display=\"flex\" gap=\"16\" marginBlockStart=\"16\">\n {learnMoreUrl && (\n <Link\n color=\"sys/purple/highlight\"\n href={learnMoreUrl}\n rel={learnMoreTarget === '_blank' ? 'noopener noreferrer' : undefined}\n target={learnMoreTarget}\n >\n Learn more\n </Link>\n )}\n {button && <BitkitColorButton css={{ marginInlineStart: 'auto' }} {...button} />}\n </Box>\n )}\n </Tooltip.Content>\n </Tooltip.Positioner>\n </Tooltip.Root>\n );\n};\n\nBitkitTooltip.displayName = 'BitkitTooltip';\n\nexport default BitkitTooltip;\n"],"mappings":";;;;;;;;AAwBA,IAAM,iBAAiB,EACrB,QACA,UACA,cACA,UACA,MAAM,MACN,iBACA,cACA,cACA,MACA,WACA,YAAY,OACZ,WACwB;CACxB,MAAM,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,CAAC;CAQ1C,MAAM,aAAa,OAAoB,IAAI;CAE3C,OACE,qBAAC,QAAQ,MAAT;EACgB;EACJ;EACV,aAAa,iBAAiB,KAAA;EAChB;EACR;EACK;EACX,aAAa,gBAAgB,OAAO,KAAA;EACpC,aAAa;GAAE,wBAAwB,WAAW;GAAS;GAAW,QAAQ;IAAE,UAAU;IAAG,WAAW;GAAE;EAAE;YAR9G,CAUE,oBAAC,QAAQ,SAAT;GAAiB,KAAK;GAAsC,SAAA;GACzD;EACc,CAAA,GACjB,oBAAC,QAAQ,YAAT,EAAA,UACE,qBAAC,QAAQ,SAAT;GAAiB,UAAU,IAAI,GAAG;GAAG,KAAK,iBAAiB,EAAE,UAAU,IAAI,GAAG,EAAE;aAAhF;IACE,oBAAC,QAAQ,OAAT,EAAA,UACE,oBAAC,QAAQ,UAAT,CAAmB,CAAA,EACN,CAAA;IACf,qBAAC,KAAD;KAAK,SAAQ;KAAO,KAAI;eAAxB,CACG,MACA,QAAQ,oBAAC,MAAD;MAAM,YAAW;MAAI,MAAK;KAAM,CAAA,CACtC;;IACJ,iBACC,qBAAC,KAAD;KAAK,YAAW;KAAS,SAAQ;KAAO,KAAI;KAAK,kBAAiB;eAAlE,CACG,gBACC,oBAAC,MAAD;MACE,OAAM;MACN,MAAM;MACN,KAAK,oBAAoB,WAAW,wBAAwB,KAAA;MAC5D,QAAQ;gBACT;KAEK,CAAA,GAEP,UAAU,oBAAC,mBAAD;MAAmB,KAAK,EAAE,mBAAmB,OAAO;MAAG,GAAI;KAAS,CAAA,CAC5E;;GAEQ;KACC,CAAA,CACR;;AAElB;AAEA,cAAc,cAAc"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitrise/bitkit-v2",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.248",
|
|
5
5
|
"description": "Bitrise Design System Components built with Chakra UI V3",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"react",
|
|
@@ -72,14 +72,14 @@
|
|
|
72
72
|
"@figma-export/cli": "^6.4.0",
|
|
73
73
|
"@figma-export/output-components-as-svg": "^6.4.0",
|
|
74
74
|
"@figma-export/transform-svg-with-svgo": "^6.4.0",
|
|
75
|
-
"@google-cloud/storage": "^7.
|
|
75
|
+
"@google-cloud/storage": "^7.21.0",
|
|
76
76
|
"@storybook/addon-docs": "^10.4.2",
|
|
77
77
|
"@storybook/addon-mcp": "^0.6.0",
|
|
78
78
|
"@storybook/mcp": "^0.7.0",
|
|
79
79
|
"@storybook/react-vite": "^10.4.2",
|
|
80
80
|
"@svgr/plugin-jsx": "^8.1.0",
|
|
81
|
-
"@types/node": "^24.13.
|
|
82
|
-
"@types/react": "^18.3.
|
|
81
|
+
"@types/node": "^24.13.1",
|
|
82
|
+
"@types/react": "^18.3.31",
|
|
83
83
|
"@types/react-dom": "^18.3.7",
|
|
84
84
|
"@vitejs/plugin-react": "^6.0.2",
|
|
85
85
|
"react": "^18.3.1",
|