@popmenu/ordering-ui 0.124.1 → 0.125.1

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,6 +1,7 @@
1
1
  import { ReactNode } from 'react';
2
2
  interface DialogTitleProps {
3
3
  title: string;
4
+ titleId: string;
4
5
  Icon?: ReactNode;
5
6
  onClose?: () => void;
6
7
  }
@@ -7,4 +7,6 @@ export interface DishDetailsReviewProps {
7
7
  content: string;
8
8
  /** time since the review was created */
9
9
  createdAgo: string;
10
+ /** image description, a11y requirement */
11
+ alt: string;
10
12
  }
@@ -24,5 +24,5 @@ export interface LocationCardProps extends Omit<MuiCardProps, 'onClick'> {
24
24
  /** The value of a card in respects to selection state. */
25
25
  value: number;
26
26
  /** Props passed to the CardActionArea rendered by SelectableCard. */
27
- CardActionAreaProps?: CardActionAreaProps;
27
+ CardActionAreaProps?: CardActionAreaProps & Record<`data-${string}`, string>;
28
28
  }
@@ -1,6 +1,8 @@
1
1
  import React from 'react';
2
2
  export declare type Maybe<T> = T | null;
3
3
  export interface MenuItemProps {
4
+ /** Label for the CardActionArea. */
5
+ ariaLabel: string;
4
6
  /** Renders the title of the dish */
5
7
  title?: Maybe<string>;
6
8
  /** Renders the price of the dish */
@@ -16,4 +16,6 @@ export interface QuantityPickerProps {
16
16
  preventManualChange?: boolean;
17
17
  /** indicates how the quantity picker will be used and changes styles accordingly */
18
18
  variation: 'itemCount' | 'modifierCount';
19
+ /** name of the modifier the quantity picker is assigned to */
20
+ name: string;
19
21
  }
package/build/index.es.js CHANGED
@@ -176,12 +176,12 @@ var useStyles$6 = makeStyles$1(function () { return ({
176
176
  }); });
177
177
  var MenuItemImg = function (props) {
178
178
  var _a = props.image, image = _a === void 0 ? {} : _a;
179
- var src = image.src, alt = image.alt;
179
+ var src = image.src;
180
180
  var classes = useStyles$6();
181
- if (!src || !alt) {
181
+ if (!src) {
182
182
  return null;
183
183
  }
184
- return (React__default.createElement(Box, { width: 125, height: "100%", borderRadius: 16, overflow: "hidden", flexShrink: 0 }, React__default.createElement("img", { src: src, alt: alt, className: classes.img })));
184
+ return (React__default.createElement(Box, { width: 125, height: "100%", borderRadius: 16, overflow: "hidden", flexShrink: 0 }, React__default.createElement("img", { src: src, alt: "", className: classes.img })));
185
185
  };
186
186
 
187
187
  var MenuItemInfo = function (props) {
@@ -1502,13 +1502,13 @@ StatusTag.defaultProps = {
1502
1502
  StatusTag.displayName = 'StatusTag';
1503
1503
 
1504
1504
  var MenuItem = forwardRef(function (props, ref) {
1505
- var onClick = props.onClick, id = props.id, description = props.description, isOutOfStock = props.isOutOfStock, title = props.title, loading = props.loading, isFeatured = props.isFeatured, image = props.image, likeCount = props.likeCount, reviewCount = props.reviewCount, price = props.price, available = props.available, itemTags = props.itemTags, className = props.className, restProps = __rest$1(props, ["onClick", "id", "description", "isOutOfStock", "title", "loading", "isFeatured", "image", "likeCount", "reviewCount", "price", "available", "itemTags", "className"]);
1505
+ var ariaLabel = props.ariaLabel, onClick = props.onClick, id = props.id, description = props.description, isOutOfStock = props.isOutOfStock, title = props.title, loading = props.loading, isFeatured = props.isFeatured, image = props.image, likeCount = props.likeCount, reviewCount = props.reviewCount, price = props.price, available = props.available, itemTags = props.itemTags, className = props.className, restProps = __rest$1(props, ["ariaLabel", "onClick", "id", "description", "isOutOfStock", "title", "loading", "isFeatured", "image", "likeCount", "reviewCount", "price", "available", "itemTags", "className"]);
1506
1506
  var classes = useMenuItemStyles(props);
1507
1507
  var handleClick = function (event) {
1508
1508
  onClick(id, event);
1509
1509
  };
1510
1510
  return (React__default.createElement(Card, __assign$1({ className: classNames(classes.card, className), ref: ref, elevation: 0, "data-component-type": "menu-item" }, restProps),
1511
- React__default.createElement(CardActionArea, { className: classes.cardActionArea, onClick: handleClick, disabled: loading },
1511
+ React__default.createElement(CardActionArea, { className: classes.cardActionArea, onClick: handleClick, disabled: loading, "aria-label": ariaLabel },
1512
1512
  React__default.createElement(MenuItemInfo, null,
1513
1513
  isFeatured && React__default.createElement(StatusTag, { color: "highlight", label: "Featured", variant: "filled", size: "sm" }),
1514
1514
  React__default.createElement(Box, { display: "flex", gridGap: 8, alignItems: "center" },
@@ -1622,7 +1622,7 @@ var OrderingAppContextProvider = function (props) {
1622
1622
  var DishCheckoutCard = function (props) {
1623
1623
  var _a;
1624
1624
  var id = props.id, name = props.name, quantity = props.quantity, modifierGroups = props.modifierGroups, onDelete = props.onDelete, onEdit = props.onEdit, onQuantityChange = props.onQuantityChange, price = props.price, specialInstructions = props.specialInstructions, disabled = props.disabled, warningMessage = props.warningMessage, _b = props.image, image = _b === void 0 ? {} : _b, messages = props.messages;
1625
- var src = image.src, alt = image.alt;
1625
+ var src = image.src;
1626
1626
  var classes = useDishCheckoutCardStyles(props);
1627
1627
  var appContext = useOrderingAppContext()[0];
1628
1628
  var _c = useState(false), open = _c[0], setOpen = _c[1];
@@ -1668,7 +1668,7 @@ var DishCheckoutCard = function (props) {
1668
1668
  };
1669
1669
  return (React__default.createElement(Box, { className: classes.root },
1670
1670
  React__default.createElement(Box, { display: "flex", gridGap: 3 },
1671
- src && alt && React__default.createElement("img", { src: src, alt: alt, className: classes.img }),
1671
+ src && React__default.createElement("img", { src: src, alt: "", className: classes.img }),
1672
1672
  React__default.createElement(Box, { flexGrow: 1 },
1673
1673
  React__default.createElement(Typography, { variant: "h2", className: classes.name }, name),
1674
1674
  modifierGroups && formatModifiers(modifierGroups),
@@ -1682,7 +1682,7 @@ var DishCheckoutCard = function (props) {
1682
1682
  React__default.createElement(Icon, { icon: SvgTrash, size: "large" })))),
1683
1683
  React__default.createElement(Box, { display: "flex", gridGap: 16, alignItems: "center" },
1684
1684
  React__default.createElement(FormControl, { variant: "outlined", hiddenLabel: true },
1685
- React__default.createElement(Select, { disabled: disabled, open: open, value: quantity, labelId: "select-label-" + id, "aria-label": labelString(name) + " quantity select", onClick: function () { return setOpen(!open); }, disableUnderline: true, onChange: handleQuantityChange, fullWidth: true, startAdornment: React__default.createElement(InputAdornment, { position: "start" },
1685
+ React__default.createElement(Select, { disabled: disabled, value: quantity, onOpen: function () { return setOpen(true); }, onClose: function () { return setOpen(false); }, SelectDisplayProps: { 'aria-label': labelString(name) + " quantity select" }, disableUnderline: true, onChange: handleQuantityChange, fullWidth: true, startAdornment: React__default.createElement(InputAdornment, { position: "start" },
1686
1686
  React__default.createElement(Icon, { icon: open ? SvgChevronUp : SvgChevronDown, size: "large" })), inputProps: { shrink: false }, MenuProps: {
1687
1687
  disablePortal: true,
1688
1688
  anchorOrigin: {
@@ -1704,13 +1704,13 @@ var DishCheckoutCard = function (props) {
1704
1704
  };
1705
1705
 
1706
1706
  var DishDetailsReview = forwardRef(function (props) {
1707
- var userName = props.userName, userAvatarUrl = props.userAvatarUrl, content = props.content, createdAgo = props.createdAgo;
1707
+ var userName = props.userName, userAvatarUrl = props.userAvatarUrl, content = props.content, createdAgo = props.createdAgo, alt = props.alt;
1708
1708
  return (React__default.createElement(Box, { display: "flex" },
1709
1709
  React__default.createElement(Box, { mr: 1 },
1710
- React__default.createElement(Avatar, { size: "small", src: userAvatarUrl })),
1710
+ React__default.createElement(Avatar, { size: "small", src: userAvatarUrl, alt: alt })),
1711
1711
  React__default.createElement(Box, { width: "100%" },
1712
1712
  React__default.createElement(Box, { display: "flex", justifyContent: "space-between", mb: 1 },
1713
- React__default.createElement(Typography, { color: "grey.600", style: { display: 'flex', alignItems: 'center' } }, userName),
1713
+ React__default.createElement(Typography, { variant: "body1", variantMapping: { body1: 'h3' }, color: "grey.600", style: { display: 'flex', alignItems: 'center' } }, userName),
1714
1714
  React__default.createElement(Typography, { color: "grey.600", variant: "subtitle1", style: { display: 'flex', alignItems: 'center' } }, createdAgo)),
1715
1715
  React__default.createElement(Typography, { color: "grey.900", weight: "regular" }, content))));
1716
1716
  });
@@ -1728,6 +1728,9 @@ var useDishModifierCardStyles = makeStyles(function (theme) { return ({
1728
1728
  error: {
1729
1729
  color: theme.palette.error.main,
1730
1730
  },
1731
+ helperText: {
1732
+ color: theme.palette.text.primary,
1733
+ },
1731
1734
  name: {
1732
1735
  fontSize: theme.spacing(2.25),
1733
1736
  marginBottom: theme.spacing(2),
@@ -1847,7 +1850,7 @@ var useEndAdornmentStyles = makeStyles(function (theme) { return ({
1847
1850
  }); });
1848
1851
 
1849
1852
  var QuantityPicker = function (props) {
1850
- var value = props.value, onChange = props.onChange, disabled = props.disabled, disableIncrement = props.disableIncrement, preventManualChange = props.preventManualChange, variation = props.variation;
1853
+ var value = props.value, onChange = props.onChange, disabled = props.disabled, disableIncrement = props.disableIncrement, preventManualChange = props.preventManualChange, variation = props.variation, name = props.name;
1851
1854
  var fieldClasses = useQuantityPickerStyles();
1852
1855
  var inputClasses = useQuantityInputStyles(props);
1853
1856
  var startAdornmentClasses = useStartAdornmentStyles(props);
@@ -1869,9 +1872,9 @@ var QuantityPicker = function (props) {
1869
1872
  return (React__default.createElement(TextField, { classes: fieldClasses, type: "number", variant: variation === 'itemCount' ? 'filled' : 'standard', value: value, disabled: disabled, onChange: handleChange, InputProps: {
1870
1873
  classes: inputClasses,
1871
1874
  disableUnderline: true,
1872
- endAdornment: (React__default.createElement(IconButton, { "aria-label": "plus one", className: endAdornmentClasses.root, color: "default", onClick: onIncrement, disabled: disabled || disableIncrement },
1875
+ endAdornment: (React__default.createElement(IconButton, { "aria-label": "increase quantity " + name, className: endAdornmentClasses.root, color: "default", onClick: onIncrement, disabled: disabled || disableIncrement },
1873
1876
  React__default.createElement(Icon, { icon: SvgPlusCircle }))),
1874
- startAdornment: (React__default.createElement(IconButton, { "aria-label": "minus one", className: startAdornmentClasses.root, color: "default", onClick: onDecrement, disabled: disabled || value <= 0 },
1877
+ startAdornment: (React__default.createElement(IconButton, { "aria-label": "decrease quantity " + name, className: startAdornmentClasses.root, color: "default", onClick: onDecrement, disabled: disabled || value <= 0 },
1875
1878
  React__default.createElement(Icon, { icon: SvgMinusCircle }))),
1876
1879
  } }));
1877
1880
  };
@@ -1970,7 +1973,7 @@ var MultipleQuantitySelectControl = function (props) {
1970
1973
  React__default.createElement(Label, { name: modifier.name, price: modifier.formattedPrice, disabled: isOutOfStock || modifier.outOfStock }),
1971
1974
  modifier.outOfStock && (React__default.createElement(Box, { minWidth: "90px", marginLeft: 2 },
1972
1975
  React__default.createElement(StatusTag, { color: "warning", label: "Out of stock", variant: "outlined", size: "md" }))),
1973
- !modifier.outOfStock && (React__default.createElement(QuantityPicker, { variation: "modifierCount", value: modifier.quantity, disableIncrement: disableNewSelections, preventManualChange: true, onChange: makeHandleChange(modifier), disabled: isOutOfStock || modifier.outOfStock }))),
1976
+ !modifier.outOfStock && (React__default.createElement(QuantityPicker, { variation: "modifierCount", value: modifier.quantity, disableIncrement: disableNewSelections, preventManualChange: true, onChange: makeHandleChange(modifier), disabled: isOutOfStock || modifier.outOfStock, name: modifier.name }))),
1974
1977
  React__default.createElement(Box, { display: "flex", alignItems: "flex-start", gridGap: 4 },
1975
1978
  modifier.hasModifiers && !modifier.outOfStock && (React__default.createElement(Options, { handleOptionsClick: function () { return handleOptionsClick(modifier.id); } })),
1976
1979
  selectionQuantity[modifier.id] &&
@@ -2020,12 +2023,13 @@ var getStatusTagProps = function (props) {
2020
2023
  return { color: color, label: label, variant: variant };
2021
2024
  };
2022
2025
  var DishModifierCard = function (props) {
2026
+ var _a;
2023
2027
  var aggregatePrice = props.aggregatePrice, name = props.name, disableNewSelections = props.disableNewSelections, modifiers = props.modifiers, value = props.value, messages = props.messages, onChange = props.onChange, type = props.type, error = props.error, isOutOfStock = props.isOutOfStock, isRequired = props.isRequired, handleOptionsClick = props.handleOptionsClick, selectionQuantity = props.selectionQuantity;
2024
2028
  var classes = useDishModifierCardStyles();
2025
2029
  return (React__default.createElement(Box, { className: classes.root },
2026
2030
  React__default.createElement(Box, { display: "flex", justifyContent: "space-between", width: "100%", alignItems: "center", height: "fit-content", marginBottom: 2 },
2027
2031
  React__default.createElement(StatusTag, __assign$1({}, getStatusTagProps(props))),
2028
- !isOutOfStock && (React__default.createElement(Typography, { variant: "subtitle1", className: error ? classes.error : undefined }, messages.helperText))),
2032
+ !isOutOfStock && (React__default.createElement(Typography, { variant: "subtitle1", className: classNames((_a = {}, _a[classes.error] = error, _a[classes.helperText] = !error, _a)) }, messages.helperText))),
2029
2033
  React__default.createElement(Typography, { className: classes.name }, name),
2030
2034
  React__default.createElement(Box, null,
2031
2035
  React__default.createElement(ModifierControls, { value: value, modifiers: modifiers, isOutOfStock: isOutOfStock, isRequired: isRequired, onChange: onChange, disableNewSelections: disableNewSelections, type: type, messages: messages, handleOptionsClick: handleOptionsClick, aggregatePrice: aggregatePrice, selectionQuantity: selectionQuantity }))));
@@ -2100,7 +2104,7 @@ var LocationCard = function (props) {
2100
2104
  onClick(value);
2101
2105
  };
2102
2106
  return (React__default.createElement(Card, __assign$1({ className: classes.root }, muiProps),
2103
- React__default.createElement(CardActionArea, __assign$1({ onClick: handleClick, role: "checkbox", "aria-checked": selected, disabled: outOfRange || Boolean(anyAvailability), classes: { focusHighlight: classes.actionAreaFocusHighlight } }, CardActionAreaProps),
2107
+ React__default.createElement(CardActionArea, __assign$1({ onClick: handleClick, role: "radio", "aria-checked": selected, disabled: outOfRange || Boolean(anyAvailability), classes: { focusHighlight: classes.actionAreaFocusHighlight } }, CardActionAreaProps),
2104
2108
  React__default.createElement(CardContent, { className: classes.content },
2105
2109
  React__default.createElement(Box, { className: classes.locationInfo },
2106
2110
  React__default.createElement(Box, { display: "flex", justifyContent: "space-between" },
@@ -2163,7 +2167,8 @@ var MenuDropdown = function (props) {
2163
2167
  return breakpoints.down('md');
2164
2168
  });
2165
2169
  return (React__default.createElement(FormControl, { hiddenLabel: true, classes: { root: classes.formControl } },
2166
- React__default.createElement(Select, { open: open, value: selectedOptionId, id: "menu-dropdown-select", "aria-label": props.label, onClick: function () { return setOpen(!open); }, disableUnderline: true, onChange: function (event) { return onSelect(event.target.value); }, fullWidth: true, startAdornment: React__default.createElement(InputAdornment, { position: "start" },
2170
+ React__default.createElement("label", { id: "menu-dropdown-label", className: "sr-only" }, props.label),
2171
+ React__default.createElement(Select, { SelectDisplayProps: { 'aria-labelledby': 'menu-dropdown-label' }, value: selectedOptionId, onOpen: function () { return setOpen(true); }, onClose: function () { return setOpen(false); }, disableUnderline: true, onChange: function (event) { return onSelect(event.target.value); }, fullWidth: true, startAdornment: React__default.createElement(InputAdornment, { position: "start" },
2167
2172
  React__default.createElement(Icon, { icon: SvgRestaurantMenu, size: isMobile ? 'extra-large' : 'large' })), IconComponent: function () { return (React__default.createElement(InputAdornment, { position: "end" },
2168
2173
  React__default.createElement(Icon, { color: "#0076CB", icon: open ? SvgChevronUp : SvgChevronDown, size: "large" }))); }, MenuProps: {
2169
2174
  disablePortal: true,
@@ -2274,7 +2279,7 @@ var useSelectableChipStyles = makeStyles(function (theme) { return ({
2274
2279
 
2275
2280
  var SelectableChip = function (props) {
2276
2281
  var classes = useSelectableChipStyles(props);
2277
- return (React__default.createElement(Tab, __assign$1({ classes: {
2282
+ return (React__default.createElement(Tab, __assign$1({ "data-tab-for-section-id": props.value, classes: {
2278
2283
  root: classes.root,
2279
2284
  selected: classes.selected,
2280
2285
  } }, props)));
@@ -2386,12 +2391,12 @@ var useStyles$1 = makeStyles$1(function () { return ({
2386
2391
  },
2387
2392
  }); });
2388
2393
  var DialogTitle = function (props) {
2389
- var Icon = props.Icon, title = props.title, onClose = props.onClose;
2394
+ var Icon = props.Icon, title = props.title, titleId = props.titleId, onClose = props.onClose;
2390
2395
  var classes = useStyles$1();
2391
2396
  return (React__default.createElement(DialogTitle$1, null,
2392
2397
  React__default.createElement(Box, { display: "flex", alignItems: "center", gridGap: 16 },
2393
2398
  Icon && Icon,
2394
- React__default.createElement(Typography$1, { component: "h1", variant: "h6" }, title)),
2399
+ React__default.createElement(Typography$1, { component: "h1", style: { fontSize: '1.25rem', fontWeight: 500, lineHeight: 1.6 }, id: titleId }, title)),
2395
2400
  onClose && (React__default.createElement(IconButton$1, { color: "inherit", className: classes.closeButton, "aria-label": "Close dialog", onClick: onClose },
2396
2401
  React__default.createElement(SvgX, null)))));
2397
2402
  };
@@ -2606,11 +2611,22 @@ var overrides = {
2606
2611
  '@global': {
2607
2612
  '*:focus-visible, a:focus-visible': {
2608
2613
  '&': {
2609
- outline: '2px solid #0076CB',
2610
- outlineOffset: '-4px',
2614
+ outline: '2px solid #0076CB !important',
2615
+ outlineOffset: -4,
2611
2616
  borderRadius: 8,
2612
2617
  },
2613
2618
  },
2619
+ 'sr-only': {
2620
+ position: 'absolute',
2621
+ width: 1,
2622
+ height: 1,
2623
+ padding: 0,
2624
+ margin: -1,
2625
+ overflow: 'hidden',
2626
+ clip: 'rect(0, 0, 0, 0)',
2627
+ whiteSpace: 'nowrap',
2628
+ borderWidth: 0,
2629
+ },
2614
2630
  },
2615
2631
  },
2616
2632
  };
@@ -2630,30 +2646,15 @@ var typography = {
2630
2646
  fontFamily: fonts.join(', '),
2631
2647
  h1: {
2632
2648
  fontWeight: 400,
2633
- fontSize: '6rem',
2634
- lineHeight: '9rem',
2649
+ fontSize: '1.25rem',
2650
+ lineHeight: '1.875rem',
2635
2651
  },
2636
2652
  h2: {
2637
- fontWeight: 400,
2638
- fontSize: '3.75rem',
2639
- lineHeight: '5.625rem',
2640
- },
2641
- h3: {
2642
- fontWeight: 400,
2643
- fontSize: '3rem',
2644
- lineHeight: '4.5rem',
2645
- },
2646
- h4: {
2647
- fontWeight: 400,
2648
- fontSize: '2.125rem',
2649
- lineHeight: '3.25rem',
2650
- },
2651
- h5: {
2652
2653
  fontWeight: 500,
2653
- fontSize: '1.5rem',
2654
- lineHeight: '2.25rem',
2654
+ fontSize: '1.125rem',
2655
+ lineHeight: '1.6875rem',
2655
2656
  },
2656
- h6: {
2657
+ h3: {
2657
2658
  fontWeight: 500,
2658
2659
  fontSize: '1.25rem',
2659
2660
  lineHeight: '1.875rem',