@xylabs/react-button 7.1.10 → 7.1.12

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.
@@ -1,14 +1,14 @@
1
1
  import type { Meta } from '@storybook/react-vite';
2
2
  import { ButtonEx } from './ButtonEx.tsx';
3
3
  declare const StorybookEntry: Meta<typeof ButtonEx>;
4
- declare const Default: import(".store/storybook-virtual-880380e42c/package/internal/csf").AnnotatedStoryFn<import("@storybook/react-vite").ReactRenderer, import("./ButtonExProps.tsx").ButtonExProps>;
5
- declare const BusyCircular: import(".store/storybook-virtual-880380e42c/package/internal/csf").AnnotatedStoryFn<import("@storybook/react-vite").ReactRenderer, import("./ButtonExProps.tsx").ButtonExProps>;
6
- declare const BusyLinear: import(".store/storybook-virtual-880380e42c/package/internal/csf").AnnotatedStoryFn<import("@storybook/react-vite").ReactRenderer, import("./ButtonExProps.tsx").ButtonExProps>;
7
- declare const Href: import(".store/storybook-virtual-880380e42c/package/internal/csf").AnnotatedStoryFn<import("@storybook/react-vite").ReactRenderer, import("./ButtonExProps.tsx").ButtonExProps>;
8
- declare const HrefTarget: import(".store/storybook-virtual-880380e42c/package/internal/csf").AnnotatedStoryFn<import("@storybook/react-vite").ReactRenderer, import("./ButtonExProps.tsx").ButtonExProps>;
9
- declare const HrefTargetOnClick: import(".store/storybook-virtual-880380e42c/package/internal/csf").AnnotatedStoryFn<import("@storybook/react-vite").ReactRenderer, import("./ButtonExProps.tsx").ButtonExProps>;
10
- declare const HrefTargetWithEvents: import(".store/storybook-virtual-880380e42c/package/internal/csf").AnnotatedStoryFn<import("@storybook/react-vite").ReactRenderer, import("./ButtonExProps.tsx").ButtonExProps>;
11
- declare const HrefTargetOnClickWithEvents: import(".store/storybook-virtual-880380e42c/package/internal/csf").AnnotatedStoryFn<import("@storybook/react-vite").ReactRenderer, import("./ButtonExProps.tsx").ButtonExProps>;
4
+ declare const Default: import("storybook/internal/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("./ButtonExProps.tsx").ButtonExProps>;
5
+ declare const BusyCircular: import("storybook/internal/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("./ButtonExProps.tsx").ButtonExProps>;
6
+ declare const BusyLinear: import("storybook/internal/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("./ButtonExProps.tsx").ButtonExProps>;
7
+ declare const Href: import("storybook/internal/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("./ButtonExProps.tsx").ButtonExProps>;
8
+ declare const HrefTarget: import("storybook/internal/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("./ButtonExProps.tsx").ButtonExProps>;
9
+ declare const HrefTargetOnClick: import("storybook/internal/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("./ButtonExProps.tsx").ButtonExProps>;
10
+ declare const HrefTargetWithEvents: import("storybook/internal/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("./ButtonExProps.tsx").ButtonExProps>;
11
+ declare const HrefTargetOnClickWithEvents: import("storybook/internal/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("./ButtonExProps.tsx").ButtonExProps>;
12
12
  export { BusyCircular, BusyLinear, Default, Href, HrefTarget, HrefTargetOnClick, HrefTargetOnClickWithEvents, HrefTargetWithEvents, };
13
13
  export default StorybookEntry;
14
14
  //# sourceMappingURL=ButtonEx.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonEx.stories.d.ts","sourceRoot":"","sources":["../../../src/components/ButtonEx.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAW,MAAM,uBAAuB,CAAA;AAK1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,QAAA,MAAM,cAAc,EAKf,IAAI,CAAC,OAAO,QAAQ,CAAC,CAAA;AAwC1B,QAAA,MAAM,OAAO,iLAA2B,CAAA;AAGxC,QAAA,MAAM,YAAY,iLAA2B,CAAA;AAG7C,QAAA,MAAM,UAAU,iLAA2B,CAAA;AAG3C,QAAA,MAAM,IAAI,iLAA2B,CAAA;AAGrC,QAAA,MAAM,UAAU,iLAA2B,CAAA;AAG3C,QAAA,MAAM,iBAAiB,iLAA2B,CAAA;AAKlD,QAAA,MAAM,oBAAoB,iLAA6B,CAAA;AAGvD,QAAA,MAAM,2BAA2B,iLAA6B,CAAA;AAK9D,OAAO,EACL,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,iBAAiB,EAAE,2BAA2B,EACnG,oBAAoB,GACrB,CAAA;AAED,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"ButtonEx.stories.d.ts","sourceRoot":"","sources":["../../../src/components/ButtonEx.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAW,MAAM,uBAAuB,CAAA;AAK1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,QAAA,MAAM,cAAc,EAKf,IAAI,CAAC,OAAO,QAAQ,CAAC,CAAA;AAwC1B,QAAA,MAAM,OAAO,0IAA2B,CAAA;AAGxC,QAAA,MAAM,YAAY,0IAA2B,CAAA;AAG7C,QAAA,MAAM,UAAU,0IAA2B,CAAA;AAG3C,QAAA,MAAM,IAAI,0IAA2B,CAAA;AAGrC,QAAA,MAAM,UAAU,0IAA2B,CAAA;AAG3C,QAAA,MAAM,iBAAiB,0IAA2B,CAAA;AAKlD,QAAA,MAAM,oBAAoB,0IAA6B,CAAA;AAGvD,QAAA,MAAM,2BAA2B,0IAA6B,CAAA;AAK9D,OAAO,EACL,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,iBAAiB,EAAE,2BAA2B,EACnG,oBAAoB,GACrB,CAAA;AAED,eAAe,cAAc,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonExBase.d.ts","sourceRoot":"","sources":["../../../src/components/ButtonExBase.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExD,QAAA,MAAM,YAAY;oFAEf,aAAa;;CAoDf,CAAA;AAID,OAAO,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"ButtonExBase.d.ts","sourceRoot":"","sources":["../../../src/components/ButtonExBase.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExD,QAAA,MAAM,YAAY;oFAEf,aAAa;;CAoDf,CAAA;AAID,OAAO,EAAE,YAAY,EAAE,CAAA"}
@@ -1,13 +1,12 @@
1
1
  // src/components/ButtonExBase.tsx
2
2
  import { Button, useTheme } from "@mui/material";
3
- import { toPromise } from "@xylabs/promise";
4
3
  import { useUserEvents } from "@xylabs/react-pixel";
5
4
  import {
6
5
  BusyCircularProgress,
7
6
  BusyLinearProgress,
8
7
  mergeBoxlikeStyles
9
8
  } from "@xylabs/react-shared";
10
- import { isString } from "@xylabs/typeof";
9
+ import { isString, toPromise } from "@xylabs/sdk-js";
11
10
  import { jsx, jsxs } from "react/jsx-runtime";
12
11
  var ButtonExBase = ({
13
12
  ref,
@@ -72,7 +71,7 @@ var ButtonExBase = ({
72
71
  ButtonExBase.displayName = "ButtonExBaseXYLabs";
73
72
 
74
73
  // src/components/ButtonExTo.tsx
75
- import { isDefined } from "@xylabs/typeof";
74
+ import { isDefined } from "@xylabs/sdk-js";
76
75
  import { useNavigate } from "react-router-dom";
77
76
  import { jsx as jsx2 } from "react/jsx-runtime";
78
77
  var ButtonToEx = ({
@@ -106,7 +105,7 @@ var ButtonEx = ({ ref, ...props }) => {
106
105
  ButtonEx.displayName = "ButtonExXYLabs";
107
106
 
108
107
  // src/components/ButtonExProps.tsx
109
- import { isDefined as isDefined2, isString as isString2 } from "@xylabs/typeof";
108
+ import { isDefined as isDefined2, isString as isString2 } from "@xylabs/sdk-js";
110
109
  var asButtonHrefOrToProps = ({
111
110
  href,
112
111
  to,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/ButtonExBase.tsx","../../src/components/ButtonExTo.tsx","../../src/components/ButtonEx.tsx","../../src/components/ButtonExProps.tsx"],"sourcesContent":["import { Button, useTheme } from '@mui/material'\nimport { toPromise } from '@xylabs/promise'\nimport { useUserEvents } from '@xylabs/react-pixel'\nimport {\n BusyCircularProgress, BusyLinearProgress, mergeBoxlikeStyles,\n} from '@xylabs/react-shared'\nimport { isString } from '@xylabs/typeof'\nimport type { MouseEvent } from 'react'\nimport React from 'react'\n\nimport type { ButtonExProps } from './ButtonExProps.tsx'\n\nconst ButtonExBase = ({\n ref, funnel, intent, target, placement, disableUserEvents, href, ...props\n}: ButtonExProps) => {\n const theme = useTheme()\n const userEvents = useUserEvents()\n const {\n busy, busyVariant = 'linear', busyOpacity, onClick, children, ...rootProps\n } = mergeBoxlikeStyles<ButtonExProps>(theme, props)\n\n const localOnClick = (event: MouseEvent<HTMLButtonElement>) => {\n if (busy) {\n // If it is busy, do not allow href clicks\n event.preventDefault()\n } else {\n const elementName = props['aria-label'] ?? event.currentTarget.textContent\n // we do this crazy navigate thing so that we can set it up outside the promise so that safari does not block it\n const windowToNavigate = () => (isString(target) && isString(href)) ? window.open('', target) ?? globalThis : globalThis\n const callOnClickAndFollowHref = (windowToNav = windowToNavigate()) => {\n onClick?.(event)\n if (isString(href)) {\n windowToNav.location.href = href\n }\n }\n if (!disableUserEvents && userEvents) {\n event.preventDefault()\n const windowToNav = windowToNavigate()\n if (isString(href)) {\n toPromise(userEvents.userClick({\n elementName, intent, funnel, placement,\n })).then(() => {\n callOnClickAndFollowHref(windowToNav)\n }).catch((ex) => {\n console.error('User event failed', elementName, funnel, placement, ex)\n callOnClickAndFollowHref(windowToNav)\n })\n }\n onClick?.(event)\n } else {\n callOnClickAndFollowHref()\n }\n }\n }\n\n return (\n <Button ref={ref} href={href} onClick={localOnClick} target={target} {...rootProps}>\n {busy && busyVariant === 'linear'\n ? <BusyLinearProgress rounded opacity={busyOpacity ?? 0} />\n : null}\n {busy && busyVariant === 'circular'\n ? <BusyCircularProgress rounded size={24} opacity={busyOpacity ?? 0.5} />\n : null}\n {children}\n </Button>\n )\n}\n\nButtonExBase.displayName = 'ButtonExBaseXYLabs'\n\nexport { ButtonExBase }\n","import { isDefined } from '@xylabs/typeof'\nimport type { MouseEvent } from 'react'\nimport React from 'react'\nimport { useNavigate } from 'react-router-dom'\n\nimport { ButtonExBase } from './ButtonExBase.tsx'\nimport type { ButtonExProps } from './ButtonExProps.tsx'\n\nconst ButtonToEx = ({\n ref, to, toOptions, onClick, ...props\n}: ButtonExProps) => {\n const navigate = useNavigate()\n const localOnClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event)\n if (isDefined(to)) {\n void navigate(to, toOptions)\n }\n }\n\n return <ButtonExBase ref={ref} onClick={localOnClick} {...props} />\n}\n\nButtonToEx.displayName = 'ButtonToExXYLabs'\n\nexport { ButtonToEx }\n","import React from 'react'\n\nimport { ButtonExBase } from './ButtonExBase.tsx'\nimport type { ButtonExProps } from './ButtonExProps.tsx'\nimport { ButtonToEx } from './ButtonExTo.tsx'\n\nconst ButtonEx = ({ ref, ...props }: ButtonExProps) => {\n if (props.to === undefined) {\n return <ButtonExBase {...props} />\n } else {\n const { to, ...additionalProps } = props\n return <ButtonToEx to={to} ref={ref} {...additionalProps} />\n }\n}\n\nButtonEx.displayName = 'ButtonExXYLabs'\n\nexport { ButtonEx }\n","import type { ButtonProps } from '@mui/material'\nimport type { BoxlikeComponentProps, BusyProps } from '@xylabs/react-shared'\nimport { isDefined, isString } from '@xylabs/typeof'\nimport type { NavigateOptions, To } from 'react-router-dom'\n\nexport interface ButtonOnlyHrefProps {\n href?: string\n to?: never\n toOptions?: never\n}\n\nexport interface ButtonOnlyToProps {\n href?: never\n to?: To\n toOptions?: NavigateOptions\n}\n\nexport interface ButtonNoToOrHrefProps {\n href?: never\n to?: never\n toOptions?: never\n}\n\nexport type ButtonHrefOrToOrNoProps = ButtonOnlyHrefProps | ButtonOnlyToProps | ButtonNoToOrHrefProps\n\nexport interface ButtonHrefAndToProps {\n href?: string\n to?: To\n toOptions?: NavigateOptions\n}\n\nexport const asButtonHrefOrToProps = ({\n href, to, toOptions,\n}: ButtonHrefAndToProps): ButtonHrefOrToOrNoProps => {\n if (isString(href) && (isDefined(to) || isDefined(toOptions))) {\n throw new Error('ButtonExProps: cannot have both href and to')\n }\n return isString(href) ? { href } : isDefined(to) ? { to, toOptions } : {}\n}\n\nexport interface ButtonBaseExProps extends Omit<ButtonProps, 'href'>, BoxlikeComponentProps, BusyProps {\n disableUserEvents?: boolean\n funnel?: string\n intent?: string\n placement?: string\n target?: string\n}\n\nexport type ButtonExProps = ButtonBaseExProps & ButtonHrefOrToOrNoProps\n"],"mappings":"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","names":["jsx","jsx","isDefined","isString"]}
1
+ {"version":3,"sources":["../../src/components/ButtonExBase.tsx","../../src/components/ButtonExTo.tsx","../../src/components/ButtonEx.tsx","../../src/components/ButtonExProps.tsx"],"sourcesContent":["import { Button, useTheme } from '@mui/material'\nimport { useUserEvents } from '@xylabs/react-pixel'\nimport {\n BusyCircularProgress, BusyLinearProgress, mergeBoxlikeStyles,\n} from '@xylabs/react-shared'\nimport { isString, toPromise } from '@xylabs/sdk-js'\nimport type { MouseEvent } from 'react'\nimport React from 'react'\n\nimport type { ButtonExProps } from './ButtonExProps.tsx'\n\nconst ButtonExBase = ({\n ref, funnel, intent, target, placement, disableUserEvents, href, ...props\n}: ButtonExProps) => {\n const theme = useTheme()\n const userEvents = useUserEvents()\n const {\n busy, busyVariant = 'linear', busyOpacity, onClick, children, ...rootProps\n } = mergeBoxlikeStyles<ButtonExProps>(theme, props)\n\n const localOnClick = (event: MouseEvent<HTMLButtonElement>) => {\n if (busy) {\n // If it is busy, do not allow href clicks\n event.preventDefault()\n } else {\n const elementName = props['aria-label'] ?? event.currentTarget.textContent\n // we do this crazy navigate thing so that we can set it up outside the promise so that safari does not block it\n const windowToNavigate = () => (isString(target) && isString(href)) ? window.open('', target) ?? globalThis : globalThis\n const callOnClickAndFollowHref = (windowToNav = windowToNavigate()) => {\n onClick?.(event)\n if (isString(href)) {\n windowToNav.location.href = href\n }\n }\n if (!disableUserEvents && userEvents) {\n event.preventDefault()\n const windowToNav = windowToNavigate()\n if (isString(href)) {\n toPromise(userEvents.userClick({\n elementName, intent, funnel, placement,\n })).then(() => {\n callOnClickAndFollowHref(windowToNav)\n }).catch((ex) => {\n console.error('User event failed', elementName, funnel, placement, ex)\n callOnClickAndFollowHref(windowToNav)\n })\n }\n onClick?.(event)\n } else {\n callOnClickAndFollowHref()\n }\n }\n }\n\n return (\n <Button ref={ref} href={href} onClick={localOnClick} target={target} {...rootProps}>\n {busy && busyVariant === 'linear'\n ? <BusyLinearProgress rounded opacity={busyOpacity ?? 0} />\n : null}\n {busy && busyVariant === 'circular'\n ? <BusyCircularProgress rounded size={24} opacity={busyOpacity ?? 0.5} />\n : null}\n {children}\n </Button>\n )\n}\n\nButtonExBase.displayName = 'ButtonExBaseXYLabs'\n\nexport { ButtonExBase }\n","import { isDefined } from '@xylabs/sdk-js'\nimport type { MouseEvent } from 'react'\nimport React from 'react'\nimport { useNavigate } from 'react-router-dom'\n\nimport { ButtonExBase } from './ButtonExBase.tsx'\nimport type { ButtonExProps } from './ButtonExProps.tsx'\n\nconst ButtonToEx = ({\n ref, to, toOptions, onClick, ...props\n}: ButtonExProps) => {\n const navigate = useNavigate()\n const localOnClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event)\n if (isDefined(to)) {\n void navigate(to, toOptions)\n }\n }\n\n return <ButtonExBase ref={ref} onClick={localOnClick} {...props} />\n}\n\nButtonToEx.displayName = 'ButtonToExXYLabs'\n\nexport { ButtonToEx }\n","import React from 'react'\n\nimport { ButtonExBase } from './ButtonExBase.tsx'\nimport type { ButtonExProps } from './ButtonExProps.tsx'\nimport { ButtonToEx } from './ButtonExTo.tsx'\n\nconst ButtonEx = ({ ref, ...props }: ButtonExProps) => {\n if (props.to === undefined) {\n return <ButtonExBase {...props} />\n } else {\n const { to, ...additionalProps } = props\n return <ButtonToEx to={to} ref={ref} {...additionalProps} />\n }\n}\n\nButtonEx.displayName = 'ButtonExXYLabs'\n\nexport { ButtonEx }\n","import type { ButtonProps } from '@mui/material'\nimport type { BoxlikeComponentProps, BusyProps } from '@xylabs/react-shared'\nimport { isDefined, isString } from '@xylabs/sdk-js'\nimport type { NavigateOptions, To } from 'react-router-dom'\n\nexport interface ButtonOnlyHrefProps {\n href?: string\n to?: never\n toOptions?: never\n}\n\nexport interface ButtonOnlyToProps {\n href?: never\n to?: To\n toOptions?: NavigateOptions\n}\n\nexport interface ButtonNoToOrHrefProps {\n href?: never\n to?: never\n toOptions?: never\n}\n\nexport type ButtonHrefOrToOrNoProps = ButtonOnlyHrefProps | ButtonOnlyToProps | ButtonNoToOrHrefProps\n\nexport interface ButtonHrefAndToProps {\n href?: string\n to?: To\n toOptions?: NavigateOptions\n}\n\nexport const asButtonHrefOrToProps = ({\n href, to, toOptions,\n}: ButtonHrefAndToProps): ButtonHrefOrToOrNoProps => {\n if (isString(href) && (isDefined(to) || isDefined(toOptions))) {\n throw new Error('ButtonExProps: cannot have both href and to')\n }\n return isString(href) ? { href } : isDefined(to) ? { to, toOptions } : {}\n}\n\nexport interface ButtonBaseExProps extends Omit<ButtonProps, 'href'>, BoxlikeComponentProps, BusyProps {\n disableUserEvents?: boolean\n funnel?: string\n intent?: string\n placement?: string\n target?: string\n}\n\nexport type ButtonExProps = ButtonBaseExProps & ButtonHrefOrToOrNoProps\n"],"mappings":"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","names":["jsx","jsx","isDefined","isString"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xylabs/react-button",
3
- "version": "7.1.10",
3
+ "version": "7.1.12",
4
4
  "description": "Common React library for all XY Labs projects that use React",
5
5
  "keywords": [
6
6
  "utility",
@@ -41,17 +41,16 @@
41
41
  "packages/*"
42
42
  ],
43
43
  "dependencies": {
44
- "@xylabs/promise": "~5.0.64",
45
- "@xylabs/react-pixel": "~7.1.10",
46
- "@xylabs/react-shared": "~7.1.10",
47
- "@xylabs/typeof": "~5.0.64"
44
+ "@xylabs/react-pixel": "~7.1.12",
45
+ "@xylabs/react-shared": "~7.1.12",
46
+ "@xylabs/sdk-js": "~5.0.64"
48
47
  },
49
48
  "devDependencies": {
50
49
  "@mui/material": "~7.3.7",
51
50
  "@storybook/react-vite": "~10.2.1",
52
51
  "@types/react": "^19.2.10",
53
- "@xylabs/react-flexbox": "~7.1.10",
54
- "@xylabs/react-pixel": "~7.1.10",
52
+ "@xylabs/react-flexbox": "~7.1.12",
53
+ "@xylabs/react-pixel": "~7.1.12",
55
54
  "@xylabs/ts-scripts-yarn3": "~7.3.2",
56
55
  "@xylabs/tsconfig": "~7.3.2",
57
56
  "@xylabs/tsconfig-dom": "~7.3.2",
@@ -61,13 +60,15 @@
61
60
  "react-router-dom": "^7.13.0",
62
61
  "storybook": "~10.2.1",
63
62
  "typescript": "^5.9.3",
64
- "vite": "~7.3.1"
63
+ "vite": "~7.3.1",
64
+ "zod": "^4.3.6"
65
65
  },
66
66
  "peerDependencies": {
67
67
  "@mui/material": ">=6 <8",
68
68
  "react": "^19",
69
69
  "react-dom": "^19",
70
- "react-router-dom": "^7"
70
+ "react-router-dom": "^7",
71
+ "zod": "^4"
71
72
  },
72
73
  "publishConfig": {
73
74
  "access": "public"
@@ -1,10 +1,9 @@
1
1
  import { Button, useTheme } from '@mui/material'
2
- import { toPromise } from '@xylabs/promise'
3
2
  import { useUserEvents } from '@xylabs/react-pixel'
4
3
  import {
5
4
  BusyCircularProgress, BusyLinearProgress, mergeBoxlikeStyles,
6
5
  } from '@xylabs/react-shared'
7
- import { isString } from '@xylabs/typeof'
6
+ import { isString, toPromise } from '@xylabs/sdk-js'
8
7
  import type { MouseEvent } from 'react'
9
8
  import React from 'react'
10
9
 
@@ -1,6 +1,6 @@
1
1
  import type { ButtonProps } from '@mui/material'
2
2
  import type { BoxlikeComponentProps, BusyProps } from '@xylabs/react-shared'
3
- import { isDefined, isString } from '@xylabs/typeof'
3
+ import { isDefined, isString } from '@xylabs/sdk-js'
4
4
  import type { NavigateOptions, To } from 'react-router-dom'
5
5
 
6
6
  export interface ButtonOnlyHrefProps {
@@ -1,4 +1,4 @@
1
- import { isDefined } from '@xylabs/typeof'
1
+ import { isDefined } from '@xylabs/sdk-js'
2
2
  import type { MouseEvent } from 'react'
3
3
  import React from 'react'
4
4
  import { useNavigate } from 'react-router-dom'