@auth0/quantum-product 2.5.8 → 2.6.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.
Files changed (48) hide show
  1. package/breadcrumbs/breadcrumbs-item/breadcrumbs-item.js +2 -2
  2. package/button/button.d.ts +1 -0
  3. package/button/button.js +2 -2
  4. package/card/card.d.ts +1 -0
  5. package/card/card.js +2 -2
  6. package/chip/chip.d.ts +1 -0
  7. package/chip/chip.js +2 -2
  8. package/date-picker/date-picker-classes.d.ts +10 -0
  9. package/date-picker/date-picker-classes.js +21 -0
  10. package/date-picker/date-picker-context.d.ts +10 -0
  11. package/date-picker/date-picker-context.js +36 -0
  12. package/date-picker/date-picker-popover.d.ts +4 -0
  13. package/date-picker/date-picker-popover.js +458 -0
  14. package/date-picker/date-picker-state.d.ts +24 -0
  15. package/date-picker/date-picker-state.js +95 -0
  16. package/date-picker/date-picker-types.d.ts +43 -0
  17. package/date-picker/date-picker-types.js +2 -0
  18. package/date-picker/date-picker-utils.d.ts +47 -0
  19. package/date-picker/date-picker-utils.js +165 -0
  20. package/date-picker/date-picker.d.ts +9 -0
  21. package/date-picker/date-picker.js +164 -0
  22. package/date-picker/index.d.ts +11 -0
  23. package/date-picker/index.js +17 -0
  24. package/esm/breadcrumbs/breadcrumbs-item/breadcrumbs-item.js +2 -2
  25. package/esm/button/button.js +2 -2
  26. package/esm/card/card.js +2 -2
  27. package/esm/chip/chip.js +2 -2
  28. package/esm/date-picker/date-picker-classes.js +16 -0
  29. package/esm/date-picker/date-picker-context.js +9 -0
  30. package/esm/date-picker/date-picker-popover.js +429 -0
  31. package/esm/date-picker/date-picker-state.js +66 -0
  32. package/esm/date-picker/date-picker-types.js +1 -0
  33. package/esm/date-picker/date-picker-utils.js +153 -0
  34. package/esm/date-picker/date-picker.js +135 -0
  35. package/esm/date-picker/index.js +5 -0
  36. package/esm/icon-button/icon-button.js +14 -3
  37. package/esm/index.js +1 -0
  38. package/esm/link/link.js +2 -2
  39. package/esm/tabs/tab/tab.js +2 -2
  40. package/icon-button/icon-button.d.ts +4 -0
  41. package/icon-button/icon-button.js +14 -3
  42. package/index.d.ts +1 -0
  43. package/index.js +1 -0
  44. package/link/link.d.ts +4 -0
  45. package/link/link.js +2 -2
  46. package/package.json +3 -2
  47. package/tabs/tab/tab.d.ts +1 -0
  48. package/tabs/tab/tab.js +2 -2
@@ -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, analyticsId = props.analyticsId, iconButtonProps = __rest(props, ["isLoading", "SpinnerProps", "children", "label", "color", "variant", "size", "disabled", "edge", "shape", "tooltipPlacement", "onTooltipClose", "analyticsId"]);
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 }, (analyticsId && { 'data-analytics-id': analyticsId }), 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';
package/esm/link/link.js CHANGED
@@ -124,14 +124,14 @@ var EndIcon = styled('span', { name: linkComponentName, slot: 'EndIcon' })(funct
124
124
  export var Link = React.forwardRef(function (props, ref) {
125
125
  var className = props.className, children = props.children, startIcon = props.startIcon, endIcon = props.endIcon, _a = props.color, color = _a === void 0 ? 'primary' : _a, _b = props.component, component = _b === void 0 ? 'a' : _b, _c = props.underline, underline = _c === void 0 ? 'none' : _c, _d = props.variant, variant = _d === void 0 ? 'inherit' : _d,
126
126
  // remove to avoid forwarding
127
- propClasses = props.classes, rootProps = __rest(props, ["className", "children", "startIcon", "endIcon", "color", "component", "underline", "variant", "classes"]);
127
+ propClasses = props.classes, analyticsId = props.analyticsId, rootProps = __rest(props, ["className", "children", "startIcon", "endIcon", "color", "component", "underline", "variant", "classes", "analyticsId"]);
128
128
  var classes = useMergedClasses(linkClasses, getLinkUtilityClass, propClasses);
129
129
  var ownerState = {
130
130
  color: color,
131
131
  component: component,
132
132
  underline: underline,
133
133
  };
134
- return (React.createElement(Root, __assign({ color: color === 'inherit' ? color : undefined, component: component, className: clsx([classes.root, className]), ref: ref, ownerState: ownerState, variant: variant }, rootProps),
134
+ return (React.createElement(Root, __assign({ color: color === 'inherit' ? color : undefined, component: component, className: clsx([classes.root, className]), ref: ref, ownerState: ownerState, variant: variant }, (analyticsId && { 'data-analytics-id': analyticsId }), rootProps),
135
135
  !!startIcon && (React.createElement(StartIcon, { className: clsx(classes.icon, classes.startIcon, classes.startIcon) }, startIcon)),
136
136
  children,
137
137
  !!endIcon && React.createElement(EndIcon, { className: clsx(classes.icon, classes.endIcon) }, endIcon)));
@@ -43,9 +43,9 @@ var LabelContainer = styled('div')(function (_a) {
43
43
  });
44
44
  });
45
45
  export var Tab = React.forwardRef(function (_a, ref) {
46
- var value = _a.value, productReleaseStage = _a.productReleaseStage, label = _a.label, _b = _a.sx, sx = _b === void 0 ? {} : _b, tabProps = __rest(_a, ["value", "productReleaseStage", "label", "sx"]);
46
+ var value = _a.value, productReleaseStage = _a.productReleaseStage, label = _a.label, _b = _a.sx, sx = _b === void 0 ? {} : _b, analyticsId = _a.analyticsId, tabProps = __rest(_a, ["value", "productReleaseStage", "label", "sx", "analyticsId"]);
47
47
  var _c = useTabsContext(), getTabProps = _c.getTabProps, fullWidth = _c.fullWidth;
48
48
  return (React.createElement(MuiTab, __assign({ ref: ref }, getTabProps(value), { value: value, label: React.createElement(StackLayout, { gutter: 0 },
49
49
  React.createElement(LabelContainer, { width: sx === null || sx === void 0 ? void 0 : sx.width, maxWidth: sx === null || sx === void 0 ? void 0 : sx.maxWidth, title: label }, label),
50
- productReleaseStage && React.createElement(AvailabilityLabel, { productReleaseStage: productReleaseStage })) }, tabProps, { fullWidth: fullWidth })));
50
+ productReleaseStage && React.createElement(AvailabilityLabel, { productReleaseStage: productReleaseStage })) }, (analyticsId && { 'data-analytics-id': analyticsId }), tabProps, { fullWidth: fullWidth })));
51
51
  });
@@ -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,9 @@ 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>;
21
+ analyticsId?: string;
18
22
  }, DefaultElementType>;
19
23
  export interface IExtendIconButtonTypeMap<M extends OverridableTypeMap> {
20
24
  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, analyticsId = props.analyticsId, iconButtonProps = __rest(props, ["isLoading", "SpinnerProps", "children", "label", "color", "variant", "size", "disabled", "edge", "shape", "tooltipPlacement", "onTooltipClose", "analyticsId"]);
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 }, (analyticsId && { 'data-analytics-id': analyticsId }), 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/link/link.d.ts CHANGED
@@ -44,6 +44,10 @@ export interface ILinkTypeMap<P = {}, D extends React.ElementType = 'a'> {
44
44
  * @default 'none'
45
45
  */
46
46
  underline?: 'none' | 'hover';
47
+ /**
48
+ * Analytics ID
49
+ */
50
+ analyticsId?: string;
47
51
  };
48
52
  defaultComponent: D;
49
53
  }
package/link/link.js CHANGED
@@ -153,14 +153,14 @@ var EndIcon = (0, styled_1.styled)('span', { name: link_classes_1.linkComponentN
153
153
  exports.Link = React.forwardRef(function (props, ref) {
154
154
  var className = props.className, children = props.children, startIcon = props.startIcon, endIcon = props.endIcon, _a = props.color, color = _a === void 0 ? 'primary' : _a, _b = props.component, component = _b === void 0 ? 'a' : _b, _c = props.underline, underline = _c === void 0 ? 'none' : _c, _d = props.variant, variant = _d === void 0 ? 'inherit' : _d,
155
155
  // remove to avoid forwarding
156
- propClasses = props.classes, rootProps = __rest(props, ["className", "children", "startIcon", "endIcon", "color", "component", "underline", "variant", "classes"]);
156
+ propClasses = props.classes, analyticsId = props.analyticsId, rootProps = __rest(props, ["className", "children", "startIcon", "endIcon", "color", "component", "underline", "variant", "classes", "analyticsId"]);
157
157
  var classes = (0, classes_1.useMergedClasses)(link_classes_1.linkClasses, link_classes_1.getLinkUtilityClass, propClasses);
158
158
  var ownerState = {
159
159
  color: color,
160
160
  component: component,
161
161
  underline: underline,
162
162
  };
163
- return (React.createElement(Root, __assign({ color: color === 'inherit' ? color : undefined, component: component, className: (0, clsx_1.default)([classes.root, className]), ref: ref, ownerState: ownerState, variant: variant }, rootProps),
163
+ return (React.createElement(Root, __assign({ color: color === 'inherit' ? color : undefined, component: component, className: (0, clsx_1.default)([classes.root, className]), ref: ref, ownerState: ownerState, variant: variant }, (analyticsId && { 'data-analytics-id': analyticsId }), rootProps),
164
164
  !!startIcon && (React.createElement(StartIcon, { className: (0, clsx_1.default)(classes.icon, classes.startIcon, classes.startIcon) }, startIcon)),
165
165
  children,
166
166
  !!endIcon && React.createElement(EndIcon, { className: (0, clsx_1.default)(classes.icon, classes.endIcon) }, endIcon)));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@auth0/quantum-product",
3
- "version": "2.5.8",
3
+ "version": "2.6.0",
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": "*",
package/tabs/tab/tab.d.ts CHANGED
@@ -3,6 +3,7 @@ import { OverridableComponent, OverrideProps } from '../../overridable-component
3
3
  import { TabTypeMap } from '@mui/material/Tab';
4
4
  type ITabTypeMap<ExtraPropsType = {}, DefaultElementType extends React.ElementType = TabTypeMap['defaultComponent']> = TabTypeMap<ExtraPropsType & {
5
5
  productReleaseStage?: 'beta' | 'earlyAccess' | 'generalAvailability';
6
+ analyticsId?: string;
6
7
  }, DefaultElementType>;
7
8
  export type ITabProps<D extends React.ElementType = ITabTypeMap['defaultComponent'], P = {}> = OverrideProps<ITabTypeMap<P, D>, D>;
8
9
  export declare const Tab: OverridableComponent<ITabTypeMap<{}, "div">>;
package/tabs/tab/tab.js CHANGED
@@ -72,9 +72,9 @@ var LabelContainer = (0, styled_1.styled)('div')(function (_a) {
72
72
  });
73
73
  });
74
74
  exports.Tab = React.forwardRef(function (_a, ref) {
75
- var value = _a.value, productReleaseStage = _a.productReleaseStage, label = _a.label, _b = _a.sx, sx = _b === void 0 ? {} : _b, tabProps = __rest(_a, ["value", "productReleaseStage", "label", "sx"]);
75
+ var value = _a.value, productReleaseStage = _a.productReleaseStage, label = _a.label, _b = _a.sx, sx = _b === void 0 ? {} : _b, analyticsId = _a.analyticsId, tabProps = __rest(_a, ["value", "productReleaseStage", "label", "sx", "analyticsId"]);
76
76
  var _c = (0, tabs_context_1.useTabsContext)(), getTabProps = _c.getTabProps, fullWidth = _c.fullWidth;
77
77
  return (React.createElement(Tab_1.default, __assign({ ref: ref }, getTabProps(value), { value: value, label: React.createElement(stack_layout_1.StackLayout, { gutter: 0 },
78
78
  React.createElement(LabelContainer, { width: sx === null || sx === void 0 ? void 0 : sx.width, maxWidth: sx === null || sx === void 0 ? void 0 : sx.maxWidth, title: label }, label),
79
- productReleaseStage && React.createElement(AvailabilityLabel, { productReleaseStage: productReleaseStage })) }, tabProps, { fullWidth: fullWidth })));
79
+ productReleaseStage && React.createElement(AvailabilityLabel, { productReleaseStage: productReleaseStage })) }, (analyticsId && { 'data-analytics-id': analyticsId }), tabProps, { fullWidth: fullWidth })));
80
80
  });