@popmenu/ordering-ui 0.85.1 → 0.86.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.
package/build/index.js CHANGED
@@ -808,12 +808,12 @@ var Button = React.forwardRef(function (props, ref) {
808
808
  });
809
809
  Button.displayName = 'Button';
810
810
 
811
- var Checkbox = React.forwardRef(function (props, ref) {
811
+ var Checkbox$1 = React.forwardRef(function (props, ref) {
812
812
  var label = props.label, disabled = props.disabled, LabelProps = props.LabelProps, muiProps = __rest(props, ["label", "disabled", "LabelProps"]);
813
813
  var control = React__default['default'].createElement(MuiCheckbox__default['default'], __assign({ disabled: label ? undefined : disabled }, muiProps));
814
814
  return label ? (React__default['default'].createElement(FormControlLabel__default['default'], __assign({ disabled: disabled, inputRef: ref, control: control, label: label }, LabelProps))) : (control);
815
815
  });
816
- Checkbox.displayName = 'Checkbox';
816
+ Checkbox$1.displayName = 'Checkbox';
817
817
 
818
818
  var getBackground = function (theme) { return function (props) {
819
819
  var variant = props.variant, severity = props.severity;
@@ -1083,12 +1083,12 @@ Paper.defaultProps = {
1083
1083
  legacyStyles: false,
1084
1084
  };
1085
1085
 
1086
- var Radio = React.forwardRef(function (props, ref) {
1086
+ var Radio$1 = React.forwardRef(function (props, ref) {
1087
1087
  var label = props.label, disabled = props.disabled, LabelProps = props.LabelProps, muiProps = __rest(props, ["label", "disabled", "LabelProps"]);
1088
1088
  var control = React__default['default'].createElement(MuiRadio__default['default'], __assign({ disabled: label ? undefined : disabled }, muiProps));
1089
1089
  return label ? (React__default['default'].createElement(FormControlLabel__default['default'], __assign({ disabled: disabled, inputRef: ref, control: control, label: label }, LabelProps))) : (control);
1090
1090
  });
1091
- Radio.displayName = 'Radio';
1091
+ Radio$1.displayName = 'Radio';
1092
1092
 
1093
1093
  styles.makeStyles(function () { return ({
1094
1094
  textfield: {
@@ -1128,13 +1128,13 @@ var useSwitchStyles = styles.makeStyles(function (theme) { return ({
1128
1128
  track: {},
1129
1129
  }); });
1130
1130
 
1131
- var Switch = React.forwardRef(function (props, ref) {
1131
+ var Switch$1 = React.forwardRef(function (props, ref) {
1132
1132
  var label = props.label, disabled = props.disabled, LabelProps = props.LabelProps, muiProps = __rest(props, ["label", "disabled", "LabelProps"]);
1133
1133
  var classes = useSwitchStyles(props);
1134
1134
  var control = React__default['default'].createElement(MuiSwitch__default['default'], __assign({ classes: classes, disabled: label ? undefined : disabled }, muiProps));
1135
1135
  return label ? (React__default['default'].createElement(FormControlLabel__default['default'], __assign({ disabled: disabled, inputRef: ref, control: control, label: label }, LabelProps))) : (control);
1136
1136
  });
1137
- Switch.displayName = 'Switch';
1137
+ Switch$1.displayName = 'Switch';
1138
1138
 
1139
1139
  var useToggleButtonStyles = styles.makeStyles(function (theme) { return ({
1140
1140
  root: {
@@ -1308,8 +1308,112 @@ var MenuItemTags = function (props) {
1308
1308
  return (React__default['default'].createElement(ItemTagGroup, null, itemTags === null || itemTags === void 0 ? void 0 : itemTags.slice(0, 5).map(function (itemTag) { return (React__default['default'].createElement(ItemTag, { key: itemTag.name, alt: itemTag.name, color: itemTag.color }, itemTag.abbr)); })));
1309
1309
  };
1310
1310
 
1311
+ var useStatusTagStyles = styles.makeStyles(function (theme) { return ({
1312
+ root: {
1313
+ borderRadius: '5px',
1314
+ display: 'flex',
1315
+ padding: theme.spacing(1),
1316
+ alignItems: 'center',
1317
+ justifyContent: 'center',
1318
+ width: 'fit-content',
1319
+ },
1320
+ filled: {
1321
+ backgroundColor: theme.palette.grey[100],
1322
+ color: theme.palette.grey[900],
1323
+ },
1324
+ outlined: {
1325
+ border: "1px solid var(--surfaces-card-stroke, " + theme.palette.grey[900] + ")",
1326
+ },
1327
+ small: {
1328
+ padding: theme.spacing(0.25, 0.75),
1329
+ },
1330
+ default: {
1331
+ color: theme.palette.grey[900],
1332
+ },
1333
+ warning: {
1334
+ borderColor: theme.palette.warning.dark,
1335
+ color: theme.palette.warning.dark,
1336
+ },
1337
+ error: {
1338
+ borderColor: theme.palette.error.main,
1339
+ color: theme.palette.error.main,
1340
+ },
1341
+ }); });
1342
+
1343
+ var classnames = {exports: {}};
1344
+
1345
+ /*!
1346
+ Copyright (c) 2018 Jed Watson.
1347
+ Licensed under the MIT License (MIT), see
1348
+ http://jedwatson.github.io/classnames
1349
+ */
1350
+
1351
+ (function (module) {
1352
+ /* global define */
1353
+
1354
+ (function () {
1355
+
1356
+ var hasOwn = {}.hasOwnProperty;
1357
+
1358
+ function classNames() {
1359
+ var classes = [];
1360
+
1361
+ for (var i = 0; i < arguments.length; i++) {
1362
+ var arg = arguments[i];
1363
+ if (!arg) continue;
1364
+
1365
+ var argType = typeof arg;
1366
+
1367
+ if (argType === 'string' || argType === 'number') {
1368
+ classes.push(arg);
1369
+ } else if (Array.isArray(arg)) {
1370
+ if (arg.length) {
1371
+ var inner = classNames.apply(null, arg);
1372
+ if (inner) {
1373
+ classes.push(inner);
1374
+ }
1375
+ }
1376
+ } else if (argType === 'object') {
1377
+ if (arg.toString === Object.prototype.toString) {
1378
+ for (var key in arg) {
1379
+ if (hasOwn.call(arg, key) && arg[key]) {
1380
+ classes.push(key);
1381
+ }
1382
+ }
1383
+ } else {
1384
+ classes.push(arg.toString());
1385
+ }
1386
+ }
1387
+ }
1388
+
1389
+ return classes.join(' ');
1390
+ }
1391
+
1392
+ if (module.exports) {
1393
+ classNames.default = classNames;
1394
+ module.exports = classNames;
1395
+ } else {
1396
+ window.classNames = classNames;
1397
+ }
1398
+ }());
1399
+ }(classnames));
1400
+
1401
+ var classNames = classnames.exports;
1402
+
1403
+ var StatusTag = function (props) {
1404
+ var variant = props.variant, label = props.label, _a = props.size, size = _a === void 0 ? 'md' : _a, _b = props.color, color = _b === void 0 ? 'default' : _b;
1405
+ var classes = useStatusTagStyles(props);
1406
+ return (React__default['default'].createElement(core.Box, { className: classNames([classes.root, classes[color], classes[variant], size === 'sm' ? classes.small : '']) },
1407
+ React__default['default'].createElement(Typography, { variant: "caption" }, label)));
1408
+ };
1409
+ StatusTag.defaultProps = {
1410
+ color: 'default',
1411
+ error: false,
1412
+ };
1413
+ StatusTag.displayName = 'StatusTag';
1414
+
1311
1415
  var MenuItem = React.forwardRef(function (props, ref) {
1312
- var onClick = props.onClick, id = props.id, title = props.title, description = props.description;
1416
+ var onClick = props.onClick, id = props.id, title = props.title, description = props.description, isOutOfStock = props.isOutOfStock;
1313
1417
  var classes = useDishCardStyles(props);
1314
1418
  var handleClick = function (event) {
1315
1419
  onClick(id, event);
@@ -1317,7 +1421,9 @@ var MenuItem = React.forwardRef(function (props, ref) {
1317
1421
  return (React__default['default'].createElement(core.Card, { className: classes.card, ref: ref, elevation: 0, "data-component-type": "menu-item" },
1318
1422
  React__default['default'].createElement(core.CardActionArea, { className: classes.cardActionArea, onClick: handleClick },
1319
1423
  React__default['default'].createElement(MenuItemInfo, null,
1320
- React__default['default'].createElement(core.Typography, { className: classes.cardTitle }, title),
1424
+ React__default['default'].createElement(core.Box, { display: "flex", gridGap: 8, alignItems: "center" },
1425
+ React__default['default'].createElement(core.Typography, { className: classes.cardTitle }, title),
1426
+ isOutOfStock && React__default['default'].createElement(StatusTag, { color: "warning", label: "Out of stock", variant: "outlined", size: "sm" })),
1321
1427
  React__default['default'].createElement(core.Typography, { className: classes.cardDescription, paragraph: true }, description),
1322
1428
  React__default['default'].createElement(MenuItemReactions, { likeCount: props.likeCount, reviewCount: props.reviewCount }),
1323
1429
  React__default['default'].createElement(core.Box, { display: "flex", justifyContent: "space-between", alignItems: "end", flexGrow: 1 },
@@ -1510,117 +1616,21 @@ var useLabelStyles = styles.makeStyles(function (theme) { return ({
1510
1616
  label: {
1511
1617
  margin: theme.spacing(0.5, 0),
1512
1618
  },
1513
- price: {
1514
- color: theme.palette.grey[700],
1515
- },
1516
- }); });
1517
-
1518
- var useStatusTagStyles = styles.makeStyles(function (theme) { return ({
1519
- root: {
1520
- borderRadius: '5px',
1521
- display: 'flex',
1522
- padding: theme.spacing(1),
1523
- alignItems: 'center',
1524
- justifyContent: 'center',
1525
- width: 'fit-content',
1526
- },
1527
- filled: {
1528
- backgroundColor: theme.palette.grey[100],
1529
- color: theme.palette.grey[900],
1530
- },
1531
- outlined: {
1532
- border: "1px solid var(--surfaces-card-stroke, " + theme.palette.grey[900] + ")",
1533
- },
1534
- default: {
1535
- color: theme.palette.grey[900],
1536
- },
1537
- warning: {
1538
- borderColor: theme.palette.warning.dark,
1619
+ outOfStock: {
1539
1620
  color: theme.palette.warning.dark,
1540
1621
  },
1541
- error: {
1542
- borderColor: theme.palette.error.main,
1543
- color: theme.palette.error.main,
1622
+ price: {
1623
+ color: theme.palette.grey[700],
1544
1624
  },
1545
1625
  }); });
1546
1626
 
1547
- var classnames = {exports: {}};
1548
-
1549
- /*!
1550
- Copyright (c) 2018 Jed Watson.
1551
- Licensed under the MIT License (MIT), see
1552
- http://jedwatson.github.io/classnames
1553
- */
1554
-
1555
- (function (module) {
1556
- /* global define */
1557
-
1558
- (function () {
1559
-
1560
- var hasOwn = {}.hasOwnProperty;
1561
-
1562
- function classNames() {
1563
- var classes = [];
1564
-
1565
- for (var i = 0; i < arguments.length; i++) {
1566
- var arg = arguments[i];
1567
- if (!arg) continue;
1568
-
1569
- var argType = typeof arg;
1570
-
1571
- if (argType === 'string' || argType === 'number') {
1572
- classes.push(arg);
1573
- } else if (Array.isArray(arg)) {
1574
- if (arg.length) {
1575
- var inner = classNames.apply(null, arg);
1576
- if (inner) {
1577
- classes.push(inner);
1578
- }
1579
- }
1580
- } else if (argType === 'object') {
1581
- if (arg.toString === Object.prototype.toString) {
1582
- for (var key in arg) {
1583
- if (hasOwn.call(arg, key) && arg[key]) {
1584
- classes.push(key);
1585
- }
1586
- }
1587
- } else {
1588
- classes.push(arg.toString());
1589
- }
1590
- }
1591
- }
1592
-
1593
- return classes.join(' ');
1594
- }
1595
-
1596
- if (module.exports) {
1597
- classNames.default = classNames;
1598
- module.exports = classNames;
1599
- } else {
1600
- window.classNames = classNames;
1601
- }
1602
- }());
1603
- }(classnames));
1604
-
1605
- var classNames = classnames.exports;
1606
-
1607
- var StatusTag = function (props) {
1608
- var variant = props.variant, label = props.label, _a = props.color, color = _a === void 0 ? 'default' : _a;
1609
- var classes = useStatusTagStyles(props);
1610
- return (React__default['default'].createElement(core.Box, { className: classNames([classes.root, classes[color], classes[variant]]) },
1611
- React__default['default'].createElement(Typography, { variant: "caption" }, label)));
1612
- };
1613
- StatusTag.defaultProps = {
1614
- color: 'default',
1615
- error: false,
1616
- };
1617
- StatusTag.displayName = 'StatusTag';
1618
-
1619
1627
  var Label = function (props) {
1620
- var name = props.name, price = props.price, disabled = props.disabled;
1628
+ var name = props.name, price = props.price, disabled = props.disabled, isOutOfStock = props.isOutOfStock;
1621
1629
  var classes = useLabelStyles();
1622
1630
  return (React__default['default'].createElement(core.Box, { display: "flex", flexDirection: "column", className: classes.label },
1623
- React__default['default'].createElement(core.Typography, null, name),
1631
+ React__default['default'].createElement(core.Box, { display: "flex", alignItems: "center", gridGap: 8 },
1632
+ React__default['default'].createElement(core.Typography, null, name),
1633
+ !isOutOfStock && disabled && (React__default['default'].createElement(core.Typography, { variant: "caption", className: classes.outOfStock }, "Out of stock"))),
1624
1634
  price && React__default['default'].createElement(core.Typography, { className: !disabled ? classes.price : '' },
1625
1635
  "+ ",
1626
1636
  price)));
@@ -1642,9 +1652,9 @@ var CheckboxGroup = function (props) {
1642
1652
  };
1643
1653
  return (React__default['default'].createElement(core.Box, { display: "flex", flexDirection: "column" }, modifiers.map(function (modifier, index) {
1644
1654
  var targetValue = value === null || value === void 0 ? void 0 : value.find(function (v) { return v.id == modifier.id; });
1645
- return (React__default['default'].createElement(core.FormControlLabel, { key: index, value: modifier.id, control: React__default['default'].createElement(core.Checkbox, { className: classes.radio, disabled: (!targetValue && disableNewSelections) || isOutOfStock }), label: React__default['default'].createElement(Label, { name: modifier.name, price: modifier.price
1655
+ return (React__default['default'].createElement(core.FormControlLabel, { key: index, value: modifier.id, control: React__default['default'].createElement(core.Checkbox, { className: classes.radio, disabled: (!targetValue && disableNewSelections) || isOutOfStock || modifier.outOfStock }), label: React__default['default'].createElement(Label, { name: modifier.name, price: modifier.price
1646
1656
  ? "" + (appContext && appContext.currencySymbol) + Number(modifier.price).toFixed(2)
1647
- : null, disabled: isOutOfStock }), className: classes.root, checked: !!targetValue, onChange: handleChange }));
1657
+ : null, disabled: isOutOfStock || modifier.outOfStock, isOutOfStock: isOutOfStock }), className: classes.root, checked: !!targetValue, onChange: handleChange }));
1648
1658
  })));
1649
1659
  };
1650
1660
  var RadioGroup = function (props) {
@@ -1662,7 +1672,7 @@ var RadioGroup = function (props) {
1662
1672
  },
1663
1673
  ]);
1664
1674
  };
1665
- return (React__default['default'].createElement(MuiRadioGroup__default['default'], { name: "selectedModifiers", value: value ? value[0].id : '', onChange: handleChange }, modifiers.map(function (modifier, index) { return (React__default['default'].createElement(core.FormControlLabel, { key: index, value: modifier.id, control: React__default['default'].createElement(core.Radio, { className: classes.radio, disabled: isOutOfStock }), label: React__default['default'].createElement(Label, { name: modifier.name, price: modifier.price ? "" + (appContext && appContext.currencySymbol) + Number(modifier.price).toFixed(2) : null, disabled: isOutOfStock }) })); })));
1675
+ return (React__default['default'].createElement(MuiRadioGroup__default['default'], { name: "selectedModifiers", value: value ? value[0].id : '', onChange: handleChange }, modifiers.map(function (modifier, index) { return (React__default['default'].createElement(core.FormControlLabel, { key: index, value: modifier.id, control: React__default['default'].createElement(core.Radio, { className: classes.radio, disabled: isOutOfStock || modifier.outOfStock }), label: React__default['default'].createElement(Label, { name: modifier.name, price: modifier.price ? "" + (appContext && appContext.currencySymbol) + Number(modifier.price).toFixed(2) : null, disabled: isOutOfStock || modifier.outOfStock, isOutOfStock: isOutOfStock }) })); })));
1666
1676
  };
1667
1677
 
1668
1678
  var ModifierOptionsControl = function (props) {
@@ -1680,17 +1690,18 @@ var ModifierOptionsControl = function (props) {
1680
1690
  var DishModifierCard = function (props) {
1681
1691
  var name = props.name, disableNewSelections = props.disableNewSelections, modifiers = props.modifiers, value = props.value, messages = props.messages, onChange = props.onChange, type = props.type, error = props.error, isRequired = props.isRequired, isOutOfStock = props.isOutOfStock;
1682
1692
  var optionalText = messages.optionalText, outOfStockText = messages.outOfStockText, requiredText = messages.requiredText, helperText = messages.helperText;
1693
+ var isFullyOutOfStock = isOutOfStock || !modifiers.some(function (modifier) { return !modifier.outOfStock; });
1683
1694
  var classes = useDishModifierCardStyles();
1684
1695
  var color = 'default';
1685
1696
  switch (true) {
1686
1697
  case error:
1687
1698
  color = 'error';
1688
- case isOutOfStock:
1699
+ case isFullyOutOfStock:
1689
1700
  color = 'warning';
1690
1701
  }
1691
1702
  var label = optionalText;
1692
1703
  switch (true) {
1693
- case isOutOfStock:
1704
+ case isFullyOutOfStock:
1694
1705
  label = outOfStockText;
1695
1706
  break;
1696
1707
  case isRequired:
@@ -1702,11 +1713,11 @@ var DishModifierCard = function (props) {
1702
1713
  React__default['default'].createElement(core.Box, { className: classes.nameContainer },
1703
1714
  React__default['default'].createElement(Typography, { className: classes.name }, name),
1704
1715
  React__default['default'].createElement(core.Box, { className: classes.statusTagContainer },
1705
- React__default['default'].createElement(StatusTag, { variant: isRequired || isOutOfStock ? 'outlined' : 'filled', label: label, color: color }))),
1706
- React__default['default'].createElement(Typography, { variant: "subtitle1", className: error ? classes.error : undefined }, helperText)),
1716
+ React__default['default'].createElement(StatusTag, { variant: isRequired || isFullyOutOfStock ? 'outlined' : 'filled', label: label, color: color }))),
1717
+ !isFullyOutOfStock && (React__default['default'].createElement(Typography, { variant: "subtitle1", className: error ? classes.error : undefined }, helperText))),
1707
1718
  React__default['default'].createElement(core.Box, null,
1708
1719
  React__default['default'].createElement(core.FormControl, null,
1709
- React__default['default'].createElement(ModifierOptionsControl, { type: type, modifiers: modifiers, value: value, onChange: onChange, disableNewSelections: disableNewSelections, isOutOfStock: isOutOfStock })))));
1720
+ React__default['default'].createElement(ModifierOptionsControl, { type: type, modifiers: modifiers, value: value, onChange: onChange, disableNewSelections: disableNewSelections, isOutOfStock: isFullyOutOfStock })))));
1710
1721
  };
1711
1722
  DishModifierCard.displayName = 'DishModifierCard';
1712
1723
 
@@ -2124,6 +2135,50 @@ var DialogSection = function (props) {
2124
2135
  return (React__default['default'].createElement(core.Box, { paddingTop: 4, paddingBottom: props.borderBottom ? 4 : 0, paddingX: props.edgeToEdge ? 0 : 2, borderBottom: props.borderBottom ? '1px solid #E0E0E0' : undefined }, props.children));
2125
2136
  };
2126
2137
 
2138
+ var Switch = core.withStyles(function (_a) {
2139
+ var palette = _a.palette;
2140
+ return ({
2141
+ checked: {
2142
+ '& $thumb': {
2143
+ backgroundColor: palette.success.main,
2144
+ },
2145
+ '&& + $track': {
2146
+ backgroundColor: palette.success.main,
2147
+ opacity: 0.5,
2148
+ },
2149
+ },
2150
+ switchBase: {
2151
+ color: palette.grey[300],
2152
+ },
2153
+ thumb: {},
2154
+ track: {},
2155
+ });
2156
+ })(core.Switch);
2157
+
2158
+ var Checkbox = core.withStyles(function (_a) {
2159
+ var palette = _a.palette;
2160
+ return ({
2161
+ checked: {},
2162
+ root: {
2163
+ '&$checked': {
2164
+ color: palette.info.main,
2165
+ },
2166
+ },
2167
+ });
2168
+ })(core.Checkbox);
2169
+
2170
+ var Radio = core.withStyles(function (_a) {
2171
+ var palette = _a.palette;
2172
+ return ({
2173
+ checked: {},
2174
+ root: {
2175
+ '&$checked': {
2176
+ color: palette.info.main,
2177
+ },
2178
+ },
2179
+ });
2180
+ })(core.Radio);
2181
+
2127
2182
  var palette = {
2128
2183
  primary: {
2129
2184
  light: '#7B7FA3',
@@ -2286,6 +2341,7 @@ var orderingTheme = {
2286
2341
  };
2287
2342
 
2288
2343
  exports.Button = Button$1;
2344
+ exports.Checkbox = Checkbox;
2289
2345
  exports.DialogSection = DialogSection;
2290
2346
  exports.DialogTitle = DialogTitle;
2291
2347
  exports.DishCheckoutCard = DishCheckoutCard;
@@ -2304,12 +2360,14 @@ exports.OrderingAppContext = OrderingAppContext;
2304
2360
  exports.OrderingAppContextProvider = OrderingAppContextProvider;
2305
2361
  exports.PageSection = PageSection;
2306
2362
  exports.QuantityPicker = QuantityPicker;
2363
+ exports.Radio = Radio;
2307
2364
  exports.ReactionCounter = ReactionCounter;
2308
2365
  exports.ReactionCounterGroup = ReactionCounterGroup;
2309
2366
  exports.SelectableChip = SelectableChip;
2310
2367
  exports.SelectableChipGroup = SelectableChipGroup;
2311
2368
  exports.SelectedMenuFiltersList = SelectedMenuFiltersList;
2312
2369
  exports.StatusTag = StatusTag;
2370
+ exports.Switch = Switch;
2313
2371
  exports.orderingTheme = orderingTheme;
2314
2372
  exports.useOrderingAppContext = useOrderingAppContext;
2315
2373
  Object.keys(core).forEach(function (k) {