@xylabs/react-button 6.3.13 → 6.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,44 +1,2 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { ButtonProps } from '@mui/material';
3
- import { BoxlikeComponentProps, BusyProps } from '@xylabs/react-shared';
4
- import { To, NavigateOptions } from 'react-router-dom';
5
-
6
- interface ButtonOnlyHrefProps {
7
- href?: string;
8
- to?: never;
9
- toOptions?: never;
10
- }
11
- interface ButtonOnlyToProps {
12
- href?: never;
13
- to?: To;
14
- toOptions?: NavigateOptions;
15
- }
16
- interface ButtonNoToOrHrefProps {
17
- href?: never;
18
- to?: never;
19
- toOptions?: never;
20
- }
21
- type ButtonHrefOrToOrNoProps = ButtonOnlyHrefProps | ButtonOnlyToProps | ButtonNoToOrHrefProps;
22
- interface ButtonHrefAndToProps {
23
- href?: string;
24
- to?: To;
25
- toOptions?: NavigateOptions;
26
- }
27
- declare const asButtonHrefOrToProps: (props: ButtonHrefAndToProps) => ButtonHrefOrToOrNoProps;
28
- interface ButtonBaseExProps extends Omit<ButtonProps, 'href'>, BoxlikeComponentProps, BusyProps {
29
- disableUserEvents?: boolean;
30
- funnel?: string;
31
- intent?: string;
32
- placement?: string;
33
- target?: string;
34
- }
35
- type ButtonExProps = ButtonBaseExProps & ButtonHrefOrToOrNoProps;
36
-
37
- declare const ButtonEx: {
38
- ({ ref, ...props }: ButtonExProps): react_jsx_runtime.JSX.Element;
39
- displayName: string;
40
- };
41
- //# sourceMappingURL=ButtonEx.d.ts.map
42
-
43
- export { ButtonEx, asButtonHrefOrToProps };
44
- export type { ButtonBaseExProps, ButtonExProps, ButtonHrefAndToProps, ButtonHrefOrToOrNoProps, ButtonNoToOrHrefProps, ButtonOnlyHrefProps, ButtonOnlyToProps };
1
+ export * from './components/index.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -1,45 +1,31 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/components/ButtonEx.tsx
5
+ import React3 from "react";
6
+
1
7
  // src/components/ButtonExBase.tsx
2
8
  import { Button, useTheme } from "@mui/material";
3
9
  import { toPromise } from "@xylabs/promise";
4
10
  import { useUserEvents } from "@xylabs/react-pixel";
5
- import {
6
- BusyCircularProgress,
7
- BusyLinearProgress,
8
- mergeBoxlikeStyles
9
- } from "@xylabs/react-shared";
10
- import { jsx, jsxs } from "react/jsx-runtime";
11
- var ButtonExBase = ({
12
- ref,
13
- funnel,
14
- intent,
15
- target,
16
- placement,
17
- disableUserEvents,
18
- href,
19
- ...props
20
- }) => {
11
+ import { BusyCircularProgress, BusyLinearProgress, mergeBoxlikeStyles } from "@xylabs/react-shared";
12
+ import React from "react";
13
+ var ButtonExBase = /* @__PURE__ */ __name(({ ref, funnel, intent, target, placement, disableUserEvents, href, ...props }) => {
21
14
  const theme = useTheme();
22
15
  const userEvents = useUserEvents();
23
- const {
24
- busy,
25
- busyVariant = "linear",
26
- busyOpacity,
27
- onClick,
28
- children,
29
- ...rootProps
30
- } = mergeBoxlikeStyles(theme, props);
31
- const localOnClick = (event) => {
16
+ const { busy, busyVariant = "linear", busyOpacity, onClick, children, ...rootProps } = mergeBoxlikeStyles(theme, props);
17
+ const localOnClick = /* @__PURE__ */ __name((event) => {
32
18
  if (busy) {
33
19
  event.preventDefault();
34
20
  } else {
35
21
  const elementName = props["aria-label"] ?? event.currentTarget.textContent;
36
- const windowToNavigate = () => target && href ? window.open("", target) ?? globalThis : globalThis;
37
- const callOnClickAndFollowHref = (windowToNav = windowToNavigate()) => {
22
+ const windowToNavigate = /* @__PURE__ */ __name(() => target && href ? window.open("", target) ?? globalThis : globalThis, "windowToNavigate");
23
+ const callOnClickAndFollowHref = /* @__PURE__ */ __name((windowToNav = windowToNavigate()) => {
38
24
  onClick?.(event);
39
25
  if (href) {
40
26
  windowToNav.location.href = href;
41
27
  }
42
- };
28
+ }, "callOnClickAndFollowHref");
43
29
  if (!disableUserEvents && userEvents) {
44
30
  event.preventDefault();
45
31
  const windowToNav = windowToNavigate();
@@ -61,55 +47,70 @@ var ButtonExBase = ({
61
47
  callOnClickAndFollowHref();
62
48
  }
63
49
  }
64
- };
65
- return /* @__PURE__ */ jsxs(Button, { ref, href, onClick: localOnClick, target, ...rootProps, children: [
66
- busy && busyVariant === "linear" ? /* @__PURE__ */ jsx(BusyLinearProgress, { rounded: true, opacity: busyOpacity ?? 0 }) : null,
67
- busy && busyVariant === "circular" ? /* @__PURE__ */ jsx(BusyCircularProgress, { rounded: true, size: 24, opacity: busyOpacity ?? 0.5 }) : null,
68
- children
69
- ] });
70
- };
50
+ }, "localOnClick");
51
+ return /* @__PURE__ */ React.createElement(Button, {
52
+ ref,
53
+ href,
54
+ onClick: localOnClick,
55
+ target,
56
+ ...rootProps
57
+ }, busy && busyVariant === "linear" ? /* @__PURE__ */ React.createElement(BusyLinearProgress, {
58
+ rounded: true,
59
+ opacity: busyOpacity ?? 0
60
+ }) : null, busy && busyVariant === "circular" ? /* @__PURE__ */ React.createElement(BusyCircularProgress, {
61
+ rounded: true,
62
+ size: 24,
63
+ opacity: busyOpacity ?? 0.5
64
+ }) : null, children);
65
+ }, "ButtonExBase");
71
66
  ButtonExBase.displayName = "ButtonExBaseXYLabs";
72
67
 
73
68
  // src/components/ButtonExTo.tsx
69
+ import React2 from "react";
74
70
  import { useNavigate } from "react-router-dom";
75
- import { jsx as jsx2 } from "react/jsx-runtime";
76
- var ButtonToEx = ({
77
- ref,
78
- to,
79
- toOptions,
80
- onClick,
81
- ...props
82
- }) => {
71
+ var ButtonToEx = /* @__PURE__ */ __name(({ ref, to, toOptions, onClick, ...props }) => {
83
72
  const navigate = useNavigate();
84
- const localOnClick = (event) => {
73
+ const localOnClick = /* @__PURE__ */ __name((event) => {
85
74
  onClick?.(event);
86
75
  if (to) {
87
76
  void navigate(to, toOptions);
88
77
  }
89
- };
90
- return /* @__PURE__ */ jsx2(ButtonExBase, { ref, onClick: localOnClick, ...props });
91
- };
78
+ }, "localOnClick");
79
+ return /* @__PURE__ */ React2.createElement(ButtonExBase, {
80
+ ref,
81
+ onClick: localOnClick,
82
+ ...props
83
+ });
84
+ }, "ButtonToEx");
92
85
  ButtonToEx.displayName = "ButtonToExXYLabs";
93
86
 
94
87
  // src/components/ButtonEx.tsx
95
- import { jsx as jsx3 } from "react/jsx-runtime";
96
- var ButtonEx = ({ ref, ...props }) => {
88
+ var ButtonEx = /* @__PURE__ */ __name(({ ref, ...props }) => {
97
89
  if (props.to) {
98
90
  const { to, ...additionalProps } = props;
99
- return /* @__PURE__ */ jsx3(ButtonToEx, { to, ref, ...additionalProps });
91
+ return /* @__PURE__ */ React3.createElement(ButtonToEx, {
92
+ to,
93
+ ref,
94
+ ...additionalProps
95
+ });
100
96
  } else {
101
- return /* @__PURE__ */ jsx3(ButtonExBase, { ...props });
97
+ return /* @__PURE__ */ React3.createElement(ButtonExBase, props);
102
98
  }
103
- };
99
+ }, "ButtonEx");
104
100
  ButtonEx.displayName = "ButtonExXYLabs";
105
101
 
106
102
  // src/components/ButtonExProps.tsx
107
- var asButtonHrefOrToProps = (props) => {
103
+ var asButtonHrefOrToProps = /* @__PURE__ */ __name((props) => {
108
104
  if (props.href && (props.to || props.toOptions)) {
109
105
  throw new Error("ButtonExProps: cannot have both href and to");
110
106
  }
111
- return props.href ? { href: props.href } : props.to ? { to: props.to, toOptions: props.toOptions } : {};
112
- };
107
+ return props.href ? {
108
+ href: props.href
109
+ } : props.to ? {
110
+ to: props.to,
111
+ toOptions: props.toOptions
112
+ } : {};
113
+ }, "asButtonHrefOrToProps");
113
114
  export {
114
115
  ButtonEx,
115
116
  asButtonHrefOrToProps
@@ -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 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 = () => (target && href) ? window.open('', target) ?? globalThis : globalThis\n const callOnClickAndFollowHref = (windowToNav = windowToNavigate()) => {\n onClick?.(event)\n if (href) {\n windowToNav.location.href = href\n }\n }\n if (!disableUserEvents && userEvents) {\n event.preventDefault()\n const windowToNav = windowToNavigate()\n if (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 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 (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) {\n const { to, ...additionalProps } = props\n return <ButtonToEx to={to} ref={ref} {...additionalProps} />\n } else {\n return <ButtonExBase {...props} />\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 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 = (props: ButtonHrefAndToProps): ButtonHrefOrToOrNoProps => {\n if (props.href && (props.to || props.toOptions)) {\n throw new Error('ButtonExProps: cannot have both href and to')\n }\n return props.href ? { href: props.href } : props.to ? { to: props.to, toOptions: props.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"]}
1
+ {"version":3,"sources":["../../src/components/ButtonEx.tsx","../../src/components/ButtonExBase.tsx","../../src/components/ButtonExTo.tsx","../../src/components/ButtonExProps.tsx"],"sourcesContent":["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) {\n const { to, ...additionalProps } = props\n return <ButtonToEx to={to} ref={ref} {...additionalProps} />\n } else {\n return <ButtonExBase {...props} />\n }\n}\n\nButtonEx.displayName = 'ButtonExXYLabs'\n\nexport { ButtonEx }\n","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 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 = () => (target && href) ? window.open('', target) ?? globalThis : globalThis\n const callOnClickAndFollowHref = (windowToNav = windowToNavigate()) => {\n onClick?.(event)\n if (href) {\n windowToNav.location.href = href\n }\n }\n if (!disableUserEvents && userEvents) {\n event.preventDefault()\n const windowToNav = windowToNavigate()\n if (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 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 (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 type { ButtonProps } from '@mui/material'\nimport type { BoxlikeComponentProps, BusyProps } from '@xylabs/react-shared'\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 = (props: ButtonHrefAndToProps): ButtonHrefOrToOrNoProps => {\n if (props.href && (props.to || props.toOptions)) {\n throw new Error('ButtonExProps: cannot have both href and to')\n }\n return props.href ? { href: props.href } : props.to ? { to: props.to, toOptions: props.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":["React","Button","useTheme","toPromise","useUserEvents","BusyCircularProgress","BusyLinearProgress","mergeBoxlikeStyles","React","ButtonExBase","ref","funnel","intent","target","placement","disableUserEvents","href","props","theme","useTheme","userEvents","useUserEvents","busy","busyVariant","busyOpacity","onClick","children","rootProps","mergeBoxlikeStyles","localOnClick","event","preventDefault","elementName","currentTarget","textContent","windowToNavigate","window","open","globalThis","callOnClickAndFollowHref","windowToNav","location","toPromise","userClick","then","catch","ex","console","error","Button","BusyLinearProgress","rounded","opacity","BusyCircularProgress","size","displayName","React","useNavigate","ButtonToEx","ref","to","toOptions","onClick","props","navigate","useNavigate","localOnClick","event","React","ButtonExBase","displayName","ButtonEx","ref","props","to","additionalProps","React","ButtonToEx","ButtonExBase","displayName","asButtonHrefOrToProps","props","href","to","toOptions","Error"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xylabs/react-button",
3
- "version": "6.3.13",
3
+ "version": "6.4.0",
4
4
  "description": "Common React library for all XY Labs projects that use React",
5
5
  "keywords": [
6
6
  "utility",
@@ -37,23 +37,23 @@
37
37
  "packages/*"
38
38
  ],
39
39
  "dependencies": {
40
- "@xylabs/promise": "^4.13.15",
41
- "@xylabs/react-pixel": "^6.3.13",
42
- "@xylabs/react-shared": "^6.3.13",
43
- "react-router-dom": "^7.6.3"
40
+ "@xylabs/promise": "^4.15.0",
41
+ "@xylabs/react-pixel": "^6.4.0",
42
+ "@xylabs/react-shared": "^6.4.0",
43
+ "react-router-dom": "^7.7.1"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@mui/material": "^7.2.0",
47
- "@storybook/react-vite": "^9.0.16",
47
+ "@storybook/react-vite": "^9.0.18",
48
48
  "@types/react": "^19.1.8",
49
- "@xylabs/react-flexbox": "^6.3.13",
50
- "@xylabs/react-pixel": "^6.3.13",
51
- "@xylabs/ts-scripts-yarn3": "^7.0.0-rc.24",
52
- "@xylabs/tsconfig-react": "^7.0.0-rc.24",
53
- "knip": "^5.61.3",
54
- "react": "^19.1.0",
55
- "react-dom": "^19.1.0",
56
- "storybook": "^9.0.16",
49
+ "@xylabs/react-flexbox": "^6.4.0",
50
+ "@xylabs/react-pixel": "^6.4.0",
51
+ "@xylabs/ts-scripts-yarn3": "^7.0.1",
52
+ "@xylabs/tsconfig-react": "^7.0.1",
53
+ "knip": "^5.62.0",
54
+ "react": "^19.1.1",
55
+ "react-dom": "^19.1.1",
56
+ "storybook": "^9.0.18",
57
57
  "typescript": "^5.8.3"
58
58
  },
59
59
  "peerDependencies": {