@xylabs/react-button 7.1.11 → 7.1.13
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/browser/components/ButtonEx.stories.d.ts +8 -8
- package/dist/browser/components/ButtonEx.stories.d.ts.map +1 -1
- package/dist/browser/components/ButtonExBase.d.ts.map +1 -1
- package/dist/browser/index.mjs +3 -4
- package/dist/browser/index.mjs.map +1 -1
- package/package.json +10 -9
- package/src/components/ButtonExBase.tsx +1 -2
- package/src/components/ButtonExProps.tsx +1 -1
- package/src/components/ButtonExTo.tsx +1 -1
|
@@ -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("
|
|
5
|
-
declare const BusyCircular: import("
|
|
6
|
-
declare const BusyLinear: import("
|
|
7
|
-
declare const Href: import("
|
|
8
|
-
declare const HrefTarget: import("
|
|
9
|
-
declare const HrefTargetOnClick: import("
|
|
10
|
-
declare const HrefTargetWithEvents: import("
|
|
11
|
-
declare const HrefTargetOnClickWithEvents: import("
|
|
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,
|
|
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":"
|
|
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"}
|
package/dist/browser/index.mjs
CHANGED
|
@@ -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/
|
|
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/
|
|
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/
|
|
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 {
|
|
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.
|
|
3
|
+
"version": "7.1.13",
|
|
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/
|
|
45
|
-
"@xylabs/react-
|
|
46
|
-
"@xylabs/
|
|
47
|
-
"@xylabs/typeof": "~5.0.64"
|
|
44
|
+
"@xylabs/react-pixel": "~7.1.13",
|
|
45
|
+
"@xylabs/react-shared": "~7.1.13",
|
|
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.
|
|
54
|
-
"@xylabs/react-pixel": "~7.1.
|
|
52
|
+
"@xylabs/react-flexbox": "~7.1.13",
|
|
53
|
+
"@xylabs/react-pixel": "~7.1.13",
|
|
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/
|
|
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/
|
|
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 {
|