@auth0/quantum-product 2.5.8 → 2.5.9

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.
@@ -0,0 +1,135 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __rest = (this && this.__rest) || function (s, e) {
13
+ var t = {};
14
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
+ t[p] = s[p];
16
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
+ t[p[i]] = s[p[i]];
20
+ }
21
+ return t;
22
+ };
23
+ var __read = (this && this.__read) || function (o, n) {
24
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
25
+ if (!m) return o;
26
+ var i = m.call(o), r, ar = [], e;
27
+ try {
28
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
29
+ }
30
+ catch (error) { e = { error: error }; }
31
+ finally {
32
+ try {
33
+ if (r && !r.done && (m = i["return"])) m.call(i);
34
+ }
35
+ finally { if (e) throw e.error; }
36
+ }
37
+ return ar;
38
+ };
39
+ import * as React from 'react';
40
+ import { CalendarIcon } from '../icon';
41
+ import { styled } from '../styled';
42
+ import { useMergedClasses } from '../styles/classes';
43
+ import { TextField } from '../text-field';
44
+ import clsx from '../utils/clsx';
45
+ import { datePickerClasses, datePickerComponentName, getDatePickerUtilityClass } from './date-picker-classes';
46
+ import { DatePickerContext } from './date-picker-context';
47
+ import { DatePickerPopover } from './date-picker-popover';
48
+ import { useDatePickerState } from './date-picker-state';
49
+ import { formatDate, parseDate, parseTimestamp } from './date-picker-utils';
50
+ var Root = styled('div', { name: datePickerComponentName, slot: 'Root' })({
51
+ position: 'relative',
52
+ width: '100%',
53
+ });
54
+ export var DatePicker = React.forwardRef(function (props, ref) {
55
+ var value = props.value, onChange = props.onChange, _a = props.dateFormat, dateFormat = _a === void 0 ? 'MM/dd/yyyy' : _a, _b = props.timeFormat, timeFormat = _b === void 0 ? 'HH:mm:ss' : _b, _c = props.placeholder, placeholder = _c === void 0 ? dateFormat + (props.showTimeInput ? ' ' + timeFormat : '') : _c, _d = props.disabled, disabled = _d === void 0 ? false : _d, _e = props.fullWidth, fullWidth = _e === void 0 ? false : _e, _f = props.size, size = _f === void 0 ? 'medium' : _f, _g = props.readOnly, readOnly = _g === void 0 ? false : _g, _h = props.required, required = _h === void 0 ? false : _h, _j = props.error, error = _j === void 0 ? false : _j, helperText = props.helperText, options = props.options, _k = props.isRangeSelection, isRangeSelection = _k === void 0 ? false : _k, _l = props.showTwoMonths, showTwoMonths = _l === void 0 ? false : _l, _m = props.showTimeInput, showTimeInput = _m === void 0 ? false : _m, _o = props.allowTimestampPasting, allowTimestampPasting = _o === void 0 ? false : _o, _p = props.timestampUnit, timestampUnit = _p === void 0 ? 'ms' : _p, _q = props.TextFieldProps, TextFieldProps = _q === void 0 ? {} : _q, propClasses = props.classes, externalState = props.state, rootProps = __rest(props, ["value", "onChange", "dateFormat", "timeFormat", "placeholder", "disabled", "fullWidth", "size", "readOnly", "required", "error", "helperText", "options", "isRangeSelection", "showTwoMonths", "showTimeInput", "allowTimestampPasting", "timestampUnit", "TextFieldProps", "classes", "state"]);
56
+ var classes = useMergedClasses(datePickerClasses, getDatePickerUtilityClass, propClasses);
57
+ var internalState = useDatePickerState();
58
+ var _r = externalState || internalState, triggerProps = _r.triggerProps, popoverProps = _r.popoverProps;
59
+ var _s = __read(React.useState(value || ''), 2), displayValue = _s[0], setDisplayValue = _s[1];
60
+ var inputRef = React.useRef(null);
61
+ React.useEffect(function () {
62
+ setDisplayValue(value || '');
63
+ }, [value]);
64
+ var handleDateSelect = function (newValue, shouldClose) {
65
+ if (shouldClose === void 0) { shouldClose = true; }
66
+ setDisplayValue(newValue);
67
+ if (onChange) {
68
+ onChange(newValue);
69
+ }
70
+ if (shouldClose) {
71
+ popoverProps.onClose();
72
+ }
73
+ };
74
+ var handlePaste = function (event) {
75
+ if (!allowTimestampPasting)
76
+ return;
77
+ var pastedText = event.clipboardData.getData('text');
78
+ var timestamp = parseInt(pastedText, 10);
79
+ if (!isNaN(timestamp)) {
80
+ event.preventDefault();
81
+ var date = parseTimestamp(timestamp, timestampUnit);
82
+ if (date) {
83
+ var formatString = showTimeInput ? "".concat(dateFormat, " ").concat(timeFormat) : dateFormat;
84
+ var formattedDate = formatDate(date, formatString);
85
+ setDisplayValue(formattedDate);
86
+ if (onChange) {
87
+ onChange(formattedDate);
88
+ }
89
+ }
90
+ }
91
+ };
92
+ var handleInputChange = function (event) {
93
+ var newValue = event.target.value;
94
+ setDisplayValue(newValue);
95
+ if (newValue === '') {
96
+ if (onChange) {
97
+ onChange('');
98
+ }
99
+ return;
100
+ }
101
+ if (isRangeSelection) {
102
+ return;
103
+ }
104
+ var formatString = showTimeInput ? "".concat(dateFormat, " ").concat(timeFormat) : dateFormat;
105
+ var date = parseDate(newValue, formatString);
106
+ if (date) {
107
+ var formattedDate = formatDate(date, formatString);
108
+ if (onChange) {
109
+ onChange(formattedDate);
110
+ }
111
+ }
112
+ };
113
+ var ownerState = {
114
+ size: size,
115
+ isRangeSelection: isRangeSelection,
116
+ showTimeInput: showTimeInput,
117
+ };
118
+ return (React.createElement(DatePickerContext.Provider, { value: {
119
+ dateFormat: dateFormat,
120
+ timeFormat: timeFormat,
121
+ onSelectDate: handleDateSelect,
122
+ isRangeSelection: isRangeSelection,
123
+ showTimeInput: showTimeInput,
124
+ } },
125
+ React.createElement(Root, __assign({ ref: ref, className: clsx(classes.root), ownerState: ownerState }, rootProps),
126
+ React.createElement(TextField, __assign({ value: displayValue, onChange: handleInputChange, onPaste: handlePaste, placeholder: placeholder, disabled: disabled, fullWidth: fullWidth, size: size, readOnly: readOnly, required: required, error: error, helperText: helperText, inputRef: inputRef, endAdornment: React.createElement(CalendarIcon, null), className: classes.input }, triggerProps, { onClick: function (e) {
127
+ if (!disabled && !readOnly) {
128
+ triggerProps.onClick(e);
129
+ }
130
+ if (TextFieldProps.onClick) {
131
+ TextFieldProps.onClick(e);
132
+ }
133
+ } }, TextFieldProps)),
134
+ React.createElement(DatePickerPopover, __assign({}, popoverProps, { onDateSelect: handleDateSelect, options: options, value: displayValue, dateFormat: dateFormat, timeFormat: timeFormat, showTwoMonths: showTwoMonths, isRangeSelection: isRangeSelection, showTimeInput: showTimeInput })))));
135
+ });
@@ -0,0 +1,5 @@
1
+ export { DatePicker } from './date-picker';
2
+ export { DatePickerPopover } from './date-picker-popover';
3
+ export { DatePickerContext, useDatePickerContext } from './date-picker-context';
4
+ export { DatePickerStateProvider, useDatePickerState, useDatePickerStateContext } from './date-picker-state';
5
+ export { datePickerClasses, datePickerPopoverClasses } from './date-picker-classes';
@@ -22,6 +22,7 @@ var __rest = (this && this.__rest) || function (s, e) {
22
22
  };
23
23
  import * as React from 'react';
24
24
  import { capitalize } from '@mui/material';
25
+ import { Spinner } from '../spinner';
25
26
  import MuiIconButton, { iconButtonClasses } from '@mui/material/IconButton';
26
27
  import { styled } from '../styled';
27
28
  import { useIconButtonContext } from './icon-button-context';
@@ -29,6 +30,13 @@ import { Tooltip } from '../tooltip';
29
30
  export var IconButtonComponentName = 'QuantumIconButton';
30
31
  export { iconButtonClasses };
31
32
  var Root = styled(Tooltip, { name: IconButtonComponentName, slot: 'Tooltip' })({});
33
+ var ButtonSpinner = styled(Spinner, {
34
+ name: IconButtonComponentName,
35
+ slot: 'Spinner',
36
+ })({
37
+ position: 'inherit',
38
+ left: '-0.5rem',
39
+ });
32
40
  // using any here to work arround TS perf issues with OverrideableComponent and styled
33
41
  var StyledIconButton = styled(MuiIconButton, {
34
42
  name: IconButtonComponentName,
@@ -36,7 +44,7 @@ var StyledIconButton = styled(MuiIconButton, {
36
44
  })(function (_a) {
37
45
  var _b;
38
46
  var theme = _a.theme, edge = _a.edge, ownerState = _a.ownerState, color = _a.color;
39
- return (__assign(__assign(__assign({}, (edge === 'end' && __assign({ marginRight: -11 }))), (_b = { '&:focus,&.Mui-focusVisible': color === 'danger'
47
+ return (__assign(__assign(__assign(__assign({}, (edge === 'end' && __assign({ marginRight: -11 }))), (_b = { '&:focus,&.Mui-focusVisible': color === 'danger'
40
48
  ? theme.mixins.focusRing({ color: theme.tokens.color_border_focus_state_danger })
41
49
  : theme.mixins.focusRing(), padding: 0, borderRadius: '4px', transition: theme.transitions.create(['background-color', 'box-shadow', 'border-color', 'color'], {
42
50
  duration: theme.transitions.duration.short,
@@ -48,6 +56,9 @@ var StyledIconButton = styled(MuiIconButton, {
48
56
  width: '1em',
49
57
  }, _b)), (ownerState.shape === 'circular' && {
50
58
  borderRadius: '50%',
59
+ })), (ownerState.isLoading && {
60
+ color: theme.tokens.color_fg_default,
61
+ backgroundColor: theme.palette.action.disabledBackground,
51
62
  })));
52
63
  });
53
64
  var DisabledWrapper = styled('span', {
@@ -62,9 +73,9 @@ var DisabledWrapper = styled('span', {
62
73
  });
63
74
  export var IconButton = React.forwardRef(function (props, ref) {
64
75
  var iconButtonContext = useIconButtonContext();
65
- var children = props.children, label = props.label, _a = props.color, color = _a === void 0 ? 'default' : _a, _b = props.variant, variant = _b === void 0 ? 'link' : _b, _c = props.size, size = _c === void 0 ? 'medium' : _c, disabled = props.disabled, edgeProp = props.edge, _d = props.shape, shape = _d === void 0 ? 'default' : _d, tooltipPlacement = props.tooltipPlacement, onTooltipClose = props.onTooltipClose, iconButtonProps = __rest(props, ["children", "label", "color", "variant", "size", "disabled", "edge", "shape", "tooltipPlacement", "onTooltipClose"]);
76
+ var isLoading = props.isLoading, _a = props.SpinnerProps, SpinnerProps = _a === void 0 ? {} : _a, children = props.children, label = props.label, _b = props.color, color = _b === void 0 ? 'default' : _b, _c = props.variant, variant = _c === void 0 ? 'link' : _c, _d = props.size, size = _d === void 0 ? 'medium' : _d, disabled = props.disabled, edgeProp = props.edge, _e = props.shape, shape = _e === void 0 ? 'default' : _e, tooltipPlacement = props.tooltipPlacement, onTooltipClose = props.onTooltipClose, iconButtonProps = __rest(props, ["isLoading", "SpinnerProps", "children", "label", "color", "variant", "size", "disabled", "edge", "shape", "tooltipPlacement", "onTooltipClose"]);
66
77
  var edge = edgeProp != null ? edgeProp : iconButtonContext.edge;
67
78
  var captizedLable = label ? capitalize(label) : null;
68
- var button = (React.createElement(StyledIconButton, __assign({ color: color, ref: ref, edge: edge, disabled: disabled, size: size, variant: variant, ownerState: { shape: shape }, "aria-label": captizedLable }, iconButtonProps), children));
79
+ var button = (React.createElement(StyledIconButton, __assign({ color: color, ref: ref, edge: edge, disabled: disabled || isLoading, size: size, variant: variant, ownerState: { shape: shape, isLoading: isLoading }, "aria-label": captizedLable }, iconButtonProps), isLoading ? React.createElement(ButtonSpinner, __assign({}, SpinnerProps)) : React.createElement(React.Fragment, null, children)));
69
80
  return (React.createElement(Root, { title: captizedLable, placement: tooltipPlacement, onClose: onTooltipClose }, disabled ? React.createElement(DisabledWrapper, null, button) : button));
70
81
  });
package/esm/index.js CHANGED
@@ -25,6 +25,7 @@ export * from './copy-button';
25
25
  export * from './css-baseline';
26
26
  export * from './danger-zone';
27
27
  export * from './data-table';
28
+ export * from './date-picker';
28
29
  export * from './description-block';
29
30
  export * from './dialog';
30
31
  export * from './divider';
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import { ISpinnerProps } from '../spinner';
2
3
  import { iconButtonClasses, IconButtonTypeMap } from '@mui/material/IconButton';
3
4
  import { OverridableComponent, OverrideProps, OverridableTypeMap } from '../overridable-component';
4
5
  import { ITooltipProps } from '../tooltip';
@@ -15,6 +16,8 @@ export type IIconButtonTypeMap<ExtraPropsType = {}, DefaultElementType extends R
15
16
  href?: string;
16
17
  label: string;
17
18
  target?: string;
19
+ isLoading?: boolean;
20
+ SpinnerProps?: Partial<ISpinnerProps>;
18
21
  }, DefaultElementType>;
19
22
  export interface IExtendIconButtonTypeMap<M extends OverridableTypeMap> {
20
23
  props: M['props'] & (M['props'] extends {
@@ -48,6 +48,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
48
48
  exports.IconButton = exports.iconButtonClasses = exports.IconButtonComponentName = void 0;
49
49
  var React = __importStar(require("react"));
50
50
  var material_1 = require("@mui/material");
51
+ var spinner_1 = require("../spinner");
51
52
  var IconButton_1 = __importStar(require("@mui/material/IconButton"));
52
53
  Object.defineProperty(exports, "iconButtonClasses", { enumerable: true, get: function () { return IconButton_1.iconButtonClasses; } });
53
54
  var styled_1 = require("../styled");
@@ -55,6 +56,13 @@ var icon_button_context_1 = require("./icon-button-context");
55
56
  var tooltip_1 = require("../tooltip");
56
57
  exports.IconButtonComponentName = 'QuantumIconButton';
57
58
  var Root = (0, styled_1.styled)(tooltip_1.Tooltip, { name: exports.IconButtonComponentName, slot: 'Tooltip' })({});
59
+ var ButtonSpinner = (0, styled_1.styled)(spinner_1.Spinner, {
60
+ name: exports.IconButtonComponentName,
61
+ slot: 'Spinner',
62
+ })({
63
+ position: 'inherit',
64
+ left: '-0.5rem',
65
+ });
58
66
  // using any here to work arround TS perf issues with OverrideableComponent and styled
59
67
  var StyledIconButton = (0, styled_1.styled)(IconButton_1.default, {
60
68
  name: exports.IconButtonComponentName,
@@ -62,7 +70,7 @@ var StyledIconButton = (0, styled_1.styled)(IconButton_1.default, {
62
70
  })(function (_a) {
63
71
  var _b;
64
72
  var theme = _a.theme, edge = _a.edge, ownerState = _a.ownerState, color = _a.color;
65
- return (__assign(__assign(__assign({}, (edge === 'end' && __assign({ marginRight: -11 }))), (_b = { '&:focus,&.Mui-focusVisible': color === 'danger'
73
+ return (__assign(__assign(__assign(__assign({}, (edge === 'end' && __assign({ marginRight: -11 }))), (_b = { '&:focus,&.Mui-focusVisible': color === 'danger'
66
74
  ? theme.mixins.focusRing({ color: theme.tokens.color_border_focus_state_danger })
67
75
  : theme.mixins.focusRing(), padding: 0, borderRadius: '4px', transition: theme.transitions.create(['background-color', 'box-shadow', 'border-color', 'color'], {
68
76
  duration: theme.transitions.duration.short,
@@ -74,6 +82,9 @@ var StyledIconButton = (0, styled_1.styled)(IconButton_1.default, {
74
82
  width: '1em',
75
83
  }, _b)), (ownerState.shape === 'circular' && {
76
84
  borderRadius: '50%',
85
+ })), (ownerState.isLoading && {
86
+ color: theme.tokens.color_fg_default,
87
+ backgroundColor: theme.palette.action.disabledBackground,
77
88
  })));
78
89
  });
79
90
  var DisabledWrapper = (0, styled_1.styled)('span', {
@@ -88,9 +99,9 @@ var DisabledWrapper = (0, styled_1.styled)('span', {
88
99
  });
89
100
  exports.IconButton = React.forwardRef(function (props, ref) {
90
101
  var iconButtonContext = (0, icon_button_context_1.useIconButtonContext)();
91
- var children = props.children, label = props.label, _a = props.color, color = _a === void 0 ? 'default' : _a, _b = props.variant, variant = _b === void 0 ? 'link' : _b, _c = props.size, size = _c === void 0 ? 'medium' : _c, disabled = props.disabled, edgeProp = props.edge, _d = props.shape, shape = _d === void 0 ? 'default' : _d, tooltipPlacement = props.tooltipPlacement, onTooltipClose = props.onTooltipClose, iconButtonProps = __rest(props, ["children", "label", "color", "variant", "size", "disabled", "edge", "shape", "tooltipPlacement", "onTooltipClose"]);
102
+ var isLoading = props.isLoading, _a = props.SpinnerProps, SpinnerProps = _a === void 0 ? {} : _a, children = props.children, label = props.label, _b = props.color, color = _b === void 0 ? 'default' : _b, _c = props.variant, variant = _c === void 0 ? 'link' : _c, _d = props.size, size = _d === void 0 ? 'medium' : _d, disabled = props.disabled, edgeProp = props.edge, _e = props.shape, shape = _e === void 0 ? 'default' : _e, tooltipPlacement = props.tooltipPlacement, onTooltipClose = props.onTooltipClose, iconButtonProps = __rest(props, ["isLoading", "SpinnerProps", "children", "label", "color", "variant", "size", "disabled", "edge", "shape", "tooltipPlacement", "onTooltipClose"]);
92
103
  var edge = edgeProp != null ? edgeProp : iconButtonContext.edge;
93
104
  var captizedLable = label ? (0, material_1.capitalize)(label) : null;
94
- var button = (React.createElement(StyledIconButton, __assign({ color: color, ref: ref, edge: edge, disabled: disabled, size: size, variant: variant, ownerState: { shape: shape }, "aria-label": captizedLable }, iconButtonProps), children));
105
+ var button = (React.createElement(StyledIconButton, __assign({ color: color, ref: ref, edge: edge, disabled: disabled || isLoading, size: size, variant: variant, ownerState: { shape: shape, isLoading: isLoading }, "aria-label": captizedLable }, iconButtonProps), isLoading ? React.createElement(ButtonSpinner, __assign({}, SpinnerProps)) : React.createElement(React.Fragment, null, children)));
95
106
  return (React.createElement(Root, { title: captizedLable, placement: tooltipPlacement, onClose: onTooltipClose }, disabled ? React.createElement(DisabledWrapper, null, button) : button));
96
107
  });
package/index.d.ts CHANGED
@@ -25,6 +25,7 @@ export * from './copy-button';
25
25
  export * from './css-baseline';
26
26
  export * from './danger-zone';
27
27
  export * from './data-table';
28
+ export * from './date-picker';
28
29
  export * from './description-block';
29
30
  export * from './dialog';
30
31
  export * from './divider';
package/index.js CHANGED
@@ -41,6 +41,7 @@ __exportStar(require("./copy-button"), exports);
41
41
  __exportStar(require("./css-baseline"), exports);
42
42
  __exportStar(require("./danger-zone"), exports);
43
43
  __exportStar(require("./data-table"), exports);
44
+ __exportStar(require("./date-picker"), exports);
44
45
  __exportStar(require("./description-block"), exports);
45
46
  __exportStar(require("./dialog"), exports);
46
47
  __exportStar(require("./divider"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@auth0/quantum-product",
3
- "version": "2.5.8",
3
+ "version": "2.5.9",
4
4
  "sideEffects": false,
5
5
  "license": "Apache-2.0",
6
6
  "publishConfig": {
@@ -17,7 +17,8 @@
17
17
  "@mui/system": "5.15.9",
18
18
  "@mui/utils": "5.15.9",
19
19
  "clsx": "^1.2.1",
20
- "md5": "^2.3.0"
20
+ "md5": "^2.3.0",
21
+ "react-day-picker": "^9.6.7"
21
22
  },
22
23
  "peerDependencies": {
23
24
  "react": "*",