@royaloperahouse/chord 0.7.25 → 0.7.28

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/CHANGELOG.md CHANGED
@@ -1,7 +1,21 @@
1
1
  # CHANGELOG
2
2
 
3
+
4
+ ## [0.7.28]
5
+ - Order PeopleListing component by presence of headshot
6
+ - Show four listings per row on large desktop
7
+
8
+ ## [0.7.27]
9
+ - Extend ContactCard capabilities
10
+ - Extend Tertiary Button text length
11
+
12
+ ## [0.7.26]
13
+ - Add storybook-deployer package
14
+ - Update README with instructions for deployment
15
+
3
16
  ## [0.7.25]
4
17
  - PeopleListing: add headshot
18
+
5
19
  ## [0.7.24]
6
20
  - Add new ContactCard component
7
21
 
package/README.GIT CHANGED
@@ -42,6 +42,29 @@ yarn build-storybook
42
42
 
43
43
  This will create a static copy in `./storybook-static`, and there is an index.html page inside the core directory. This allows the site to be previewed directly in the git repository via serving pages (it needs to be configured for that branch).
44
44
 
45
+ To deploy the storybook publically:
46
+
47
+ ### Prerequisites
48
+
49
+ Make sure you have credentials for the *parent* 'Royal Opera House' AWS account in your `~/.aws/credentials` file. The deploy script expects these to be called `[parent]`.
50
+
51
+ You can get these values at:
52
+
53
+ AWS 'Your Applications' page -> 'Royal Opera House' -> 'Developer Access' ->
54
+ 'Command line or programmatic access'
55
+
56
+ ### Deployment
57
+
58
+ To deploy, first *build* the storybook as above
59
+
60
+ then use:
61
+
62
+ ```bash
63
+ yarn deploy-storybook
64
+ ```
65
+
66
+ This will deploy the contents of `./storybook-static` to S3 as a static site accessible at [chord.roh.org.uk](chord.roh.org.uk)
67
+
45
68
  To build the package use:
46
69
 
47
70
  ```bash
@@ -2118,7 +2118,7 @@ var TertiaryButtonWrapper = /*#__PURE__*/styled__default.a(_templateObject$5 ||
2118
2118
  var color = _ref.color;
2119
2119
  return color;
2120
2120
  });
2121
- var TertiaryIconWrapper = /*#__PURE__*/styled__default.span(_templateObject2 || (_templateObject2 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n width: var(--button-icon-width);\n height: var(--button-icon-height);\n margin-left: var(--button-icon-margin);\n display: inline-block;\n"])));
2121
+ var TertiaryIconWrapper = /*#__PURE__*/styled__default.span(_templateObject2 || (_templateObject2 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n width: var(--button-icon-width);\n min-width: 20px;\n height: var(--button-icon-height);\n margin-left: var(--button-icon-margin);\n display: inline-block;\n"])));
2122
2122
 
2123
2123
  var _excluded$3 = ["children", "color"];
2124
2124
 
@@ -2127,7 +2127,7 @@ var Button$1 = function Button(_ref) {
2127
2127
  color = _ref.color,
2128
2128
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
2129
2129
 
2130
- var truncatedString = children.substring(0, 30);
2130
+ var truncatedString = children.substring(0, 100);
2131
2131
  return /*#__PURE__*/React__default.createElement(TertiaryButtonWrapper, Object.assign({}, rest, {
2132
2132
  color: color
2133
2133
  }), truncatedString, /*#__PURE__*/React__default.createElement(TertiaryIconWrapper, {
@@ -4988,10 +4988,16 @@ var Cards = function Cards(_ref) {
4988
4988
 
4989
4989
  var _templateObject$H, _templateObject2$q, _templateObject3$j, _templateObject4$d, _templateObject5$9;
4990
4990
  var ContentWrapper = /*#__PURE__*/styled__default.div(_templateObject$H || (_templateObject$H = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n & > div {\n margin-bottom: 2px;\n\n &:first-child {\n margin-bottom: 4px;\n\n @media ", " {\n margin-bottom: 6px;\n }\n }\n }\n\n @media ", " {\n grid-column: 2 / span 12;\n }\n"])), devices.mobile, devices.mobileAndTablet);
4991
- var Wrapper$2 = /*#__PURE__*/styled__default.div(_templateObject2$q || (_templateObject2$q = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n border-top: 2px solid var(--base-color-lightgrey);\n border-bottom: 2px solid var(--base-color-lightgrey);\n padding: 30px 0;\n\n @media ", " {\n display: grid;\n grid-template-columns: var(--grid-template-columns);\n grid-template-rows: max-content;\n gap: var(--grid-column-gap);\n margin: 0;\n }\n"])), devices.mobileAndTablet);
4991
+ var Wrapper$2 = /*#__PURE__*/styled__default.div(_templateObject2$q || (_templateObject2$q = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n ", "\n ", "\n padding: 30px 0;\n\n @media ", " {\n display: grid;\n grid-template-columns: var(--grid-template-columns);\n grid-template-rows: max-content;\n gap: var(--grid-column-gap);\n margin: 0;\n }\n"])), function (_ref) {
4992
+ var hideBottomBorder = _ref.hideBottomBorder;
4993
+ return "border-bottom: " + (hideBottomBorder ? 'none' : '2px solid var(--base-color-midgrey)') + ";";
4994
+ }, function (_ref2) {
4995
+ var hideTopBorder = _ref2.hideTopBorder;
4996
+ return "border-top: " + (hideTopBorder ? 'none' : '2px solid var(--base-color-midgrey)') + ";";
4997
+ }, devices.mobileAndTablet);
4992
4998
  var AddressWrapperDesktop = /*#__PURE__*/styled__default.div(_templateObject3$j || (_templateObject3$j = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n @media ", " {\n display: none;\n }\n"])), devices.mobile);
4993
4999
  var AddressWrapperMobile = /*#__PURE__*/styled__default.div(_templateObject4$d || (_templateObject4$d = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: none;\n\n & > div {\n margin-bottom: 2px;\n }\n\n @media ", " {\n display: block;\n }\n"])), devices.mobile);
4994
- var DetailsWrapper = /*#__PURE__*/styled__default.div(_templateObject5$9 || (_templateObject5$9 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n\n @media ", " {\n flex-direction: column;\n margin: 4px 0;\n }\n\n div {\n text-decoration: underline;\n\n &:before {\n display: inline-block;\n content: '';\n background-color: var(--base-color-black);\n width: 1px;\n height: 18px;\n margin: 0 8px -4px;\n\n @media ", " {\n display: none;\n }\n }\n\n &:first-child:before {\n display: none;\n }\n }\n"])), devices.mobile, devices.mobile);
5000
+ var DetailsWrapper = /*#__PURE__*/styled__default.div(_templateObject5$9 || (_templateObject5$9 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n\n @media ", " {\n flex-direction: column;\n margin: 4px 0;\n }\n\n a {\n font-size: var(--font-size-body-1);\n font-family: var(--font-family-body);\n font-feature-settings: var(--font-feature-settings-body);\n font-weight: var(--font-weight-body-1);\n letter-spacing: var(--letter-spacing-body-1);\n line-height: var(--line-height-body-1);\n text-transform: var(--text-transform-body);\n color: var(--base-color-black);\n text-decoration: underline;\n\n &:before {\n display: inline-block;\n content: '';\n background-color: var(--base-color-black);\n width: 1px;\n height: 18px;\n margin: 0 8px -4px;\n\n @media ", " {\n display: none;\n }\n }\n\n &:first-child:before {\n display: none;\n }\n }\n"])), devices.mobile, devices.mobile);
4995
5001
 
4996
5002
  var divideAddressString = function divideAddressString(address) {
4997
5003
  return address.split(',').map(function (chunk) {
@@ -5007,30 +5013,45 @@ var ContactCard = function ContactCard(_ref) {
5007
5013
  email = _ref.email,
5008
5014
  phone = _ref.phone,
5009
5015
  website = _ref.website,
5010
- address = _ref.address;
5016
+ address = _ref.address,
5017
+ _ref$hideBottomBorder = _ref.hideBottomBorder,
5018
+ hideBottomBorder = _ref$hideBottomBorder === void 0 ? false : _ref$hideBottomBorder,
5019
+ _ref$hideTopBorder = _ref.hideTopBorder,
5020
+ hideTopBorder = _ref$hideTopBorder === void 0 ? false : _ref$hideTopBorder;
5011
5021
  var hasDetails = email || phone || website;
5022
+ var addressString = address == null ? void 0 : address.substring(0, 110);
5023
+ var descriptionText = description == null ? void 0 : description.substring(0, 110);
5012
5024
  return /*#__PURE__*/React__default.createElement(Grid, null, /*#__PURE__*/React__default.createElement(GridItem, {
5013
5025
  columnStartDesktop: 3,
5014
5026
  columnSpanDesktop: 8,
5015
5027
  columnStartDevice: 1,
5016
5028
  columnSpanDevice: 14
5017
- }, /*#__PURE__*/React__default.createElement(Wrapper$2, null, /*#__PURE__*/React__default.createElement(ContentWrapper, null, /*#__PURE__*/React__default.createElement(BodyText, {
5029
+ }, /*#__PURE__*/React__default.createElement(Wrapper$2, {
5030
+ "data-testid": "contact-card-wrapper",
5031
+ hideBottomBorder: hideBottomBorder,
5032
+ hideTopBorder: hideTopBorder
5033
+ }, /*#__PURE__*/React__default.createElement(ContentWrapper, null, /*#__PURE__*/React__default.createElement(BodyText, {
5018
5034
  level: 1
5019
- }, name), description && /*#__PURE__*/React__default.createElement(Subtitle, {
5035
+ }, name), descriptionText && /*#__PURE__*/React__default.createElement(Subtitle, {
5020
5036
  level: 2
5021
- }, description), hasDetails && /*#__PURE__*/React__default.createElement(DetailsWrapper, {
5037
+ }, descriptionText), hasDetails && /*#__PURE__*/React__default.createElement(DetailsWrapper, {
5022
5038
  "data-testid": "contact-card-details-block"
5023
- }, email && /*#__PURE__*/React__default.createElement(BodyText, {
5024
- level: 1
5025
- }, email), phone && /*#__PURE__*/React__default.createElement(BodyText, {
5026
- level: 1
5027
- }, phone), website && /*#__PURE__*/React__default.createElement(BodyText, {
5028
- level: 1
5029
- }, website)), address && /*#__PURE__*/React__default.createElement("div", {
5039
+ }, email && /*#__PURE__*/React__default.createElement("a", {
5040
+ tabIndex: 0,
5041
+ href: "mailto:" + email
5042
+ }, email), phone && /*#__PURE__*/React__default.createElement("a", {
5043
+ tabIndex: 0,
5044
+ href: "tel:" + phone
5045
+ }, phone), website && /*#__PURE__*/React__default.createElement("a", {
5046
+ tabIndex: 0,
5047
+ href: website,
5048
+ target: "_blank",
5049
+ rel: "noreferrer"
5050
+ }, website)), addressString && /*#__PURE__*/React__default.createElement("div", {
5030
5051
  "data-testid": "contact-card-address-block"
5031
5052
  }, /*#__PURE__*/React__default.createElement(AddressWrapperDesktop, null, /*#__PURE__*/React__default.createElement(BodyText, {
5032
5053
  level: 1
5033
- }, address)), /*#__PURE__*/React__default.createElement(AddressWrapperMobile, null, divideAddressString(address)))))));
5054
+ }, addressString)), /*#__PURE__*/React__default.createElement(AddressWrapperMobile, null, divideAddressString(addressString)))))));
5034
5055
  };
5035
5056
 
5036
5057
  var _templateObject$I, _templateObject2$r, _templateObject3$k, _templateObject4$e, _templateObject5$a;
@@ -5239,7 +5260,7 @@ var PageHeadingStream = function PageHeadingStream(_ref) {
5239
5260
  };
5240
5261
 
5241
5262
  var _templateObject$L, _templateObject2$u, _templateObject3$n, _templateObject4$h, _templateObject5$d, _templateObject6$a;
5242
- var PeopleListingGrid = /*#__PURE__*/styled__default(Grid)(_templateObject$L || (_templateObject$L = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n gap: var(--line-height-people-listing-gap) var(--grid-column-gap);\n\n p {\n margin: 0;\n }\n\n grid-template-columns: 1fr 1fr 1fr;\n\n @media ", " {\n grid-template-columns: 1fr;\n }\n @media ", " {\n grid-template-columns: 1fr 1fr;\n }\n"])), devices.mobile, devices.tablet);
5263
+ var PeopleListingGrid = /*#__PURE__*/styled__default(Grid)(_templateObject$L || (_templateObject$L = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n gap: var(--line-height-people-listing-gap) var(--grid-column-gap);\n\n p {\n margin: 0;\n }\n\n grid-template-columns: 1fr 1fr 1fr;\n\n @media ", " {\n grid-template-columns: 1fr;\n }\n\n @media ", " {\n grid-template-columns: 1fr 1fr;\n }\n\n @media ", " {\n grid-template-columns: 1fr 1fr 1fr 1fr;\n }\n"])), devices.mobile, devices.tablet, devices.largeDesktop);
5243
5264
  var PersonWrapper = /*#__PURE__*/styled__default.div(_templateObject2$u || (_templateObject2$u = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: grid;\n grid-template-columns: 60px 1fr;\n grid-template-areas: 'headshot role-person';\n grid-column-gap: 10px;\n"])));
5244
5265
  var HeadshotWrapper = /*#__PURE__*/styled__default.div(_templateObject3$n || (_templateObject3$n = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n grid-area: headshot;\n img {\n width: 60px;\n height: 60px;\n }\n"])));
5245
5266
  var RoleWrapper = /*#__PURE__*/styled__default.div(_templateObject4$h || (_templateObject4$h = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n color: var(--base-color-darkgrey);\n overflow-wrap: break-word;\n margin-bottom: 4px;\n"])));
@@ -5259,7 +5280,11 @@ var Person = function Person(_ref) {
5259
5280
  }, name), personSeparator ? /*#__PURE__*/React__default.createElement("span", null, separator) : null) : /*#__PURE__*/React__default.createElement("span", null, name, personSeparator));
5260
5281
  };
5261
5282
 
5262
- var textSection = function textSection(role) {
5283
+ function hasHeadshot(role) {
5284
+ return +(!!role.people[0].headshot && role.people[0].useHeadshot);
5285
+ }
5286
+
5287
+ function textSection(role) {
5263
5288
  return /*#__PURE__*/React__default.createElement(TextWrapper$2, null, /*#__PURE__*/React__default.createElement(RoleWrapper, {
5264
5289
  title: "role",
5265
5290
  "data-roh": role.dataROH
@@ -5275,14 +5300,16 @@ var textSection = function textSection(role) {
5275
5300
  withSeparator: role.people.length !== personIndex + 1
5276
5301
  });
5277
5302
  })));
5278
- };
5303
+ }
5279
5304
 
5280
5305
  var PeopleListing = function PeopleListing(_ref) {
5281
5306
  var roles = _ref.roles;
5282
- return /*#__PURE__*/React__default.createElement(PeopleListingGrid, null, roles.map(function (role, index) {
5307
+ return /*#__PURE__*/React__default.createElement(PeopleListingGrid, null, roles.sort(function (a, b) {
5308
+ return hasHeadshot(b) - hasHeadshot(a);
5309
+ }).map(function (role, index) {
5283
5310
  return /*#__PURE__*/React__default.createElement(GridItem, {
5284
5311
  key: role.name + "-" + index
5285
- }, role.people[0].headshot && role.people[0].useHeadshot ? /*#__PURE__*/React__default.createElement(PersonWrapper, null, /*#__PURE__*/React__default.createElement(HeadshotWrapper, null, /*#__PURE__*/React__default.createElement("img", {
5312
+ }, !!hasHeadshot(role) ? /*#__PURE__*/React__default.createElement(PersonWrapper, null, /*#__PURE__*/React__default.createElement(HeadshotWrapper, null, /*#__PURE__*/React__default.createElement("img", {
5286
5313
  src: role.people[0].headshot,
5287
5314
  alt: role.people[0].name
5288
5315
  })), textSection(role)) : textSection(role));