@royaloperahouse/chord 2.7.0-c-development → 2.7.0-d-development

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/dist/chord.esm.js CHANGED
@@ -4208,12 +4208,14 @@ var TextField = /*#__PURE__*/forwardRef(function (_ref, ref) {
4208
4208
 
4209
4209
  return /*#__PURE__*/React__default.createElement(Container$1, null, /*#__PURE__*/React__default.createElement("label", null, !!label && /*#__PURE__*/React__default.createElement(TextLabel$1, {
4210
4210
  darkMode: darkMode,
4211
- "data-testid": "text-field-text-label"
4211
+ "data-testid": "text-field-text-label",
4212
+ "aria-hidden": "true"
4212
4213
  }, /*#__PURE__*/React__default.createElement(AltHeader, {
4213
4214
  level: 6
4214
4215
  }, label)), /*#__PURE__*/React__default.createElement(InputWrapper, {
4215
4216
  width: width
4216
4217
  }, /*#__PURE__*/React__default.createElement(Input, Object.assign({
4218
+ "aria-label": label,
4217
4219
  isPasswordField: isPasswordField,
4218
4220
  type: inputType,
4219
4221
  error: error,
@@ -4227,7 +4229,10 @@ var TextField = /*#__PURE__*/forwardRef(function (_ref, ref) {
4227
4229
  level: 1
4228
4230
  }, showHideButtonText)))), !!error && /*#__PURE__*/React__default.createElement(ErrorLabel$1, {
4229
4231
  darkMode: darkMode,
4230
- "data-testid": "text-field-error-label"
4232
+ id: inputProps.name + "-error",
4233
+ "data-testid": "text-field-error-label",
4234
+ role: "alert",
4235
+ "aria-live": "assertive"
4231
4236
  }, /*#__PURE__*/React__default.createElement(AltHeader, {
4232
4237
  level: 6
4233
4238
  }, error)));
@@ -9105,32 +9110,43 @@ var getConcatenatedPropLength = function getConcatenatedPropLength(array, prop)
9105
9110
  }, 0);
9106
9111
  };
9107
9112
 
9108
- var concatenateMusicTitle = function concatenateMusicTitle(musicTitle) {
9109
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, musicTitle.map(function (title, index) {
9110
- if (musicTitle.length > 1 && index === musicTitle.length - 1) {
9111
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, ' ', "and ", /*#__PURE__*/React__default.createElement("i", {
9112
- key: index
9113
- }, title));
9114
- } else if (index > 0) {
9115
- return /*#__PURE__*/React__default.createElement("i", {
9116
- key: index
9117
- }, ", ", title);
9113
+ var DEFAULT_COLUMN_COUNT = 4;
9114
+ var DEFAULT_LARGE_COLUMN_SPAN = 2;
9115
+ var DEFAULT_CHARACTER_THRESHOLD = 180;
9116
+
9117
+ var concatenateMusicTitle = function concatenateMusicTitle(musicTitle, index) {
9118
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, {
9119
+ key: "music-" + index
9120
+ }, musicTitle.map(function (title, idx) {
9121
+ if (musicTitle.length > 1 && idx === musicTitle.length - 1) {
9122
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, {
9123
+ key: "music-" + index + "-" + idx + "-" + title
9124
+ }, ' ', "and ", /*#__PURE__*/React__default.createElement("i", null, title));
9125
+ } else if (idx > 0) {
9126
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, {
9127
+ key: "music-" + index + "-" + idx + "-" + title
9128
+ }, /*#__PURE__*/React__default.createElement("i", null, ", ", title));
9118
9129
  }
9119
9130
 
9120
- return /*#__PURE__*/React__default.createElement("i", {
9121
- key: index
9122
- }, title);
9131
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, {
9132
+ key: "music-" + index + "-" + idx + "-" + title
9133
+ }, /*#__PURE__*/React__default.createElement("i", null, title));
9123
9134
  }));
9124
9135
  };
9125
9136
 
9126
9137
  var CreditListing = function CreditListing(_ref) {
9127
9138
  var roles = _ref.roles,
9128
9139
  _ref$columnCount = _ref.columnCount,
9129
- columnCount = _ref$columnCount === void 0 ? 4 : _ref$columnCount;
9130
- var charThreshold = 180;
9131
- return /*#__PURE__*/React__default.createElement(CreditListingWrapper, {
9132
- columnCount: columnCount
9133
- }, roles.map(function (_ref2, index) {
9140
+ columnCount = _ref$columnCount === void 0 ? DEFAULT_COLUMN_COUNT : _ref$columnCount,
9141
+ _ref$expandLargeEntri = _ref.expandLargeEntries,
9142
+ expandLargeEntries = _ref$expandLargeEntri === void 0 ? false : _ref$expandLargeEntri,
9143
+ _ref$largeColumnSpan = _ref.largeColumnSpan,
9144
+ largeColumnSpan = _ref$largeColumnSpan === void 0 ? DEFAULT_LARGE_COLUMN_SPAN : _ref$largeColumnSpan,
9145
+ _ref$characterThresho = _ref.characterThreshold,
9146
+ characterThreshold = _ref$characterThresho === void 0 ? DEFAULT_CHARACTER_THRESHOLD : _ref$characterThresho;
9147
+ var creditEntries = [];
9148
+ var nextColumnStart = 1;
9149
+ roles.forEach(function (_ref2, index) {
9134
9150
  var name = _ref2.name,
9135
9151
  people = _ref2.people,
9136
9152
  description = _ref2.description,
@@ -9138,13 +9154,42 @@ var CreditListing = function CreditListing(_ref) {
9138
9154
  replacement = _ref2.replacement,
9139
9155
  additionalInfo = _ref2.additionalInfo,
9140
9156
  dataROH = _ref2.dataROH;
9141
- var namesLength = getConcatenatedPropLength(people, 'name');
9142
- var columnSpanDesktop = namesLength > charThreshold ? people.length > 2 ? 4 : 2 : 1;
9143
- return /*#__PURE__*/React__default.createElement(GridItem, {
9144
- columnSpanDesktop: columnSpanDesktop,
9145
- columnSpanDevice: columnSpanDesktop,
9146
- columnSpanSmallDevice: 2,
9147
- key: name + "-" + index
9157
+
9158
+ var _ref3 = function () {
9159
+ if (expandLargeEntries && columnCount > 1) {
9160
+ var namesLength = getConcatenatedPropLength(people, 'name');
9161
+
9162
+ var _columnSpan = namesLength > characterThreshold ? largeColumnSpan : 1;
9163
+
9164
+ var unboundedEnd = nextColumnStart + _columnSpan;
9165
+
9166
+ var _columnStart = unboundedEnd > columnCount + 1 ? 1 : nextColumnStart;
9167
+
9168
+ var columnEnd = _columnStart + _columnSpan;
9169
+ nextColumnStart = columnEnd % columnCount || columnCount;
9170
+ return {
9171
+ columnStart: _columnStart,
9172
+ columnSpan: _columnSpan
9173
+ };
9174
+ } else {
9175
+ return {
9176
+ columnStart: 0,
9177
+ columnSpan: 1
9178
+ };
9179
+ }
9180
+ }(),
9181
+ columnStart = _ref3.columnStart,
9182
+ columnSpan = _ref3.columnSpan;
9183
+
9184
+ creditEntries.push( /*#__PURE__*/React__default.createElement(GridItem, {
9185
+ columnStartDesktop: columnStart,
9186
+ columnSpanDesktop: columnSpan,
9187
+ columnStartDevice: 1,
9188
+ columnSpanDevice: 1,
9189
+ columnStartSmallDevice: 1,
9190
+ columnSpanSmallDevice: 1,
9191
+ key: "credit-entry-" + name + "-" + index,
9192
+ "data-testid": "credit-entry"
9148
9193
  }, /*#__PURE__*/React__default.createElement(TextWrapper$2, null, /*#__PURE__*/React__default.createElement(RoleWrapper$1, {
9149
9194
  title: "role",
9150
9195
  "data-roh": dataROH
@@ -9168,12 +9213,16 @@ var CreditListing = function CreditListing(_ref) {
9168
9213
  tag: "p"
9169
9214
  }, replacement)), musicTitle && musicTitle.length > 0 && /*#__PURE__*/React__default.createElement(BodyText, {
9170
9215
  level: 1,
9171
- tag: "p"
9172
- }, concatenateMusicTitle(musicTitle)), additionalInfo && /*#__PURE__*/React__default.createElement(BodyText, {
9216
+ tag: "p",
9217
+ key: "music-" + musicTitle + "-text"
9218
+ }, concatenateMusicTitle(musicTitle, index)), additionalInfo && /*#__PURE__*/React__default.createElement(BodyText, {
9173
9219
  level: 1,
9174
9220
  tag: "p"
9175
- }, additionalInfo)));
9176
- }));
9221
+ }, additionalInfo))));
9222
+ });
9223
+ return /*#__PURE__*/React__default.createElement(CreditListingWrapper, {
9224
+ columnCount: columnCount
9225
+ }, creditEntries);
9177
9226
  };
9178
9227
 
9179
9228
  var _templateObject$13, _templateObject2$M, _templateObject3$D, _templateObject4$v, _templateObject5$p, _templateObject6$j, _templateObject7$d, _templateObject8$a, _templateObject9$5, _templateObject10$5, _templateObject11$2, _templateObject12$1, _templateObject13$1, _templateObject14$1, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20, _templateObject21;
@@ -11260,14 +11309,14 @@ var Wrapper$8 = /*#__PURE__*/styled('div')(_templateObject$1k || (_templateObjec
11260
11309
  return "var(--base-color-" + theme + ")";
11261
11310
  });
11262
11311
  var SignUpFormWrapper = /*#__PURE__*/styled(Grid)(_templateObject2$Z || (_templateObject2$Z = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n gap: 0 var(--grid-column-gap);\n margin-bottom: 32px;\n"])));
11263
- var SignUpTitleWrapper = /*#__PURE__*/styled('div')(_templateObject3$P || (_templateObject3$P = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n text-align: left;\n position: relative;\n top: -25px;\n left: -20px;\n background: var(--base-color-white);\n display: inline-block;\n padding: 0 20px;\n \n @media ", " {\n top: -18px;\n padding: 0 13px;\n left: -13px;\n }\n"])), devices.mobile);
11312
+ var SignUpTitleWrapper = /*#__PURE__*/styled('div')(_templateObject3$P || (_templateObject3$P = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n text-align: left;\n position: relative;\n top: -25px;\n left: -20px;\n background: var(--base-color-white);\n display: inline-block;\n padding: 0 20px;\n\n @media ", " {\n top: -18px;\n padding: 0 13px;\n left: -13px;\n }\n"])), devices.mobile);
11264
11313
  var Error$1 = /*#__PURE__*/styled.div(_templateObject4$E || (_templateObject4$E = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n margin-top: 20px;\n color: var(--base-color-errorstate);\n a {\n text-decoration: underline;\n color: inherit;\n }\n"])));
11265
11314
  var Form = /*#__PURE__*/styled.form(_templateObject5$x || (_templateObject5$x = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n margin-top: 20px;\n align-items: center;\n ", " {\n margin-top: -20px;\n }\n a[href] {\n color: inherit;\n }\n"])), Error$1);
11266
- var FormFooterWrapper = /*#__PURE__*/styled.div(_templateObject6$p || (_templateObject6$p = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n margin-top: 32px;\n display: flex;\n gap: 21px;\n align-items: center;\n \n @media ", " {\n flex-direction: column-reverse;\n align-items: flex-start;\n margin-bottom: 20px;\n }\n"])), devices.mobile);
11315
+ var FormFooterWrapper = /*#__PURE__*/styled.div(_templateObject6$p || (_templateObject6$p = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n margin-top: 32px;\n display: flex;\n gap: 21px;\n align-items: center;\n\n @media ", " {\n flex-direction: column-reverse;\n align-items: flex-start;\n margin-bottom: 20px;\n }\n"])), devices.mobile);
11267
11316
  var ServerError = /*#__PURE__*/styled.div(_templateObject7$h || (_templateObject7$h = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n text-align: left;\n color: var(--base-color-errorstate);\n"])));
11268
- var CTALinkWrapper = /*#__PURE__*/styled.a(_templateObject8$d || (_templateObject8$d = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n color: var(--base-color-black);\n div {\n font-size: 14px;\n }\n"])));
11317
+ var CTALinkWrapper = /*#__PURE__*/styled.a(_templateObject8$d || (_templateObject8$d = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n color: var(--base-color-black);\n div {\n text-decoration: underline;\n }\n"])));
11269
11318
  var ButtonWrapper$3 = /*#__PURE__*/styled.button(_templateObject9$8 || (_templateObject9$8 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n all: unset;\n width: fit-content;\n\n @media ", " {\n width: 100%;\n }\n &:focus {\n outline: 3px solid var(--base-color-lapislazuli);\n }\n"])), devices.mobile);
11270
- var FieldsWrapper = /*#__PURE__*/styled.div(_templateObject10$8 || (_templateObject10$8 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 36px;\n\n @media ", " {\n grid-template-columns: 1fr;\n gap: 20px;\n }\n\n"])), devices.mobile);
11319
+ var FieldsWrapper = /*#__PURE__*/styled.div(_templateObject10$8 || (_templateObject10$8 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 36px;\n\n @media ", " {\n grid-template-columns: 1fr;\n gap: 20px;\n }\n"])), devices.mobile);
11271
11320
 
11272
11321
  var regex = {
11273
11322
  signInEmail: /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
@@ -11277,13 +11326,45 @@ var regex = {
11277
11326
  var formValidationMessages = {
11278
11327
  requiredFieldMessage: 'Please complete this field',
11279
11328
  firstName: {
11280
- invalid: 'Please enter your first name'
11329
+ invalid: 'Please enter your full first name',
11330
+ required: 'Please enter a first name'
11331
+ },
11332
+ lastName: {
11333
+ required: 'Please enter a last name'
11281
11334
  },
11282
11335
  email: {
11283
11336
  required: 'Please enter an email address',
11284
11337
  invalid: 'Enter an email address in the correct format, like name@example.com'
11285
11338
  }
11286
11339
  };
11340
+ var getFormErrorMessage = function getFormErrorMessage(field, value) {
11341
+ var errorMessage;
11342
+
11343
+ if (!value) {
11344
+ switch (field) {
11345
+ case 'firstName':
11346
+ errorMessage = formValidationMessages.firstName.required;
11347
+ break;
11348
+
11349
+ case 'lastName':
11350
+ errorMessage = formValidationMessages.lastName.required;
11351
+ break;
11352
+
11353
+ case 'email':
11354
+ errorMessage = formValidationMessages.email.required;
11355
+ break;
11356
+
11357
+ default:
11358
+ errorMessage = formValidationMessages.requiredFieldMessage;
11359
+ }
11360
+ } else if (field === 'email' && !regex.signInEmail.test(value)) {
11361
+ errorMessage = formValidationMessages.email.invalid;
11362
+ } else if (field === 'firstName' && !regex.firstName.test(value)) {
11363
+ errorMessage = formValidationMessages.firstName.invalid;
11364
+ }
11365
+
11366
+ return errorMessage;
11367
+ };
11287
11368
 
11288
11369
  var themeToColor = function themeToColor(theme) {
11289
11370
  switch (theme) {
@@ -11344,6 +11425,21 @@ var SignUpForm = function SignUpForm(_ref) {
11344
11425
  };
11345
11426
  };
11346
11427
 
11428
+ var handleBlur = function handleBlur(field) {
11429
+ return function () {
11430
+ var value = formValues[field];
11431
+ var formErrorMessage = getFormErrorMessage(field, value);
11432
+
11433
+ if (formErrorMessage) {
11434
+ setErrors(function (prev) {
11435
+ var _extends4;
11436
+
11437
+ return _extends({}, prev, (_extends4 = {}, _extends4[field] = formErrorMessage, _extends4));
11438
+ });
11439
+ }
11440
+ };
11441
+ };
11442
+
11347
11443
  var handleFormSubmit = /*#__PURE__*/function () {
11348
11444
  var _ref2 = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee(e) {
11349
11445
  var formErrors, response;
@@ -11365,13 +11461,13 @@ var SignUpForm = function SignUpForm(_ref) {
11365
11461
 
11366
11462
  if (!isLoggedIn) {
11367
11463
  if (!formValues.firstName) {
11368
- formErrors.firstName = formValidationMessages.requiredFieldMessage;
11464
+ formErrors.firstName = formValidationMessages.firstName.required;
11369
11465
  } else if (!regex.firstName.test(formValues.firstName)) {
11370
11466
  formErrors.firstName = formValidationMessages.firstName.invalid;
11371
11467
  }
11372
11468
 
11373
11469
  if (!formValues.lastName) {
11374
- formErrors.lastName = formValidationMessages.requiredFieldMessage;
11470
+ formErrors.lastName = formValidationMessages.lastName.required;
11375
11471
  }
11376
11472
 
11377
11473
  if (!formValues.email) {
@@ -11455,6 +11551,10 @@ var SignUpForm = function SignUpForm(_ref) {
11455
11551
  maxLength: 20,
11456
11552
  error: errors.firstName,
11457
11553
  onChange: handleChange('firstName'),
11554
+ onBlur: handleBlur('firstName'),
11555
+ "aria-required": "true",
11556
+ "aria-invalid": !!errors.firstName,
11557
+ "aria-describedby": errors.firstName ? 'firstName-error' : undefined,
11458
11558
  autoComplete: "given-name"
11459
11559
  }), /*#__PURE__*/React__default.createElement(TextField, {
11460
11560
  label: "Last name",
@@ -11464,6 +11564,10 @@ var SignUpForm = function SignUpForm(_ref) {
11464
11564
  value: formValues.lastName,
11465
11565
  error: errors.lastName,
11466
11566
  onChange: handleChange('lastName'),
11567
+ onBlur: handleBlur('lastName'),
11568
+ "aria-required": "true",
11569
+ "aria-invalid": !!errors.lastName,
11570
+ "aria-describedby": errors.lastName ? 'lastName-error' : undefined,
11467
11571
  autoComplete: "family-name"
11468
11572
  }), /*#__PURE__*/React__default.createElement(TextField, {
11469
11573
  label: "Email",
@@ -11472,15 +11576,20 @@ var SignUpForm = function SignUpForm(_ref) {
11472
11576
  value: formValues.email,
11473
11577
  error: errors.email || errors.serverError,
11474
11578
  onChange: handleChange('email'),
11579
+ onBlur: handleBlur('email'),
11580
+ "aria-required": "true",
11581
+ "aria-invalid": !!errors.email,
11582
+ "aria-describedby": errors.email ? 'email-error' : undefined,
11475
11583
  maxLength: 80
11476
11584
  })), isLoggedIn && !!errors.serverError && /*#__PURE__*/React__default.createElement(GridItem, {
11477
11585
  columnStartDesktop: 2,
11478
11586
  columnSpanDesktop: 12,
11479
- columnStartTablet: 2,
11480
- columnSpanTablet: 12,
11481
11587
  columnStartDevice: 2,
11482
11588
  columnSpanDevice: 12
11483
- }, /*#__PURE__*/React__default.createElement(ServerError, null, /*#__PURE__*/React__default.createElement(AltHeader, {
11589
+ }, /*#__PURE__*/React__default.createElement(ServerError, {
11590
+ role: "alert",
11591
+ "aria-live": "assertive"
11592
+ }, /*#__PURE__*/React__default.createElement(AltHeader, {
11484
11593
  level: 6
11485
11594
  }, errors.serverError))), /*#__PURE__*/React__default.createElement(FormFooterWrapper, null, /*#__PURE__*/React__default.createElement(ButtonWrapper$3, {
11486
11595
  type: "submit"
@@ -11489,7 +11598,7 @@ var SignUpForm = function SignUpForm(_ref) {
11489
11598
  }, "Sign up")), /*#__PURE__*/React__default.createElement(CTALinkWrapper, {
11490
11599
  href: ctaPrivacy.link
11491
11600
  }, /*#__PURE__*/React__default.createElement(BodyText, {
11492
- level: 2
11601
+ level: 1
11493
11602
  }, ctaPrivacy.text)))))));
11494
11603
  };
11495
11604