@coras-io/embed 0.2.0 → 0.3.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 (235) hide show
  1. package/CHANGELOG.md +127 -0
  2. package/README.md +8 -7
  3. package/dist/components/accordion/accordion-item/accordion-item.styles.js +1 -1
  4. package/dist/components/alert/alert.styles.js +14 -14
  5. package/dist/components/attraction-card/base/attraction-card.styles.js +7 -3
  6. package/dist/components/attraction-discovery/attraction-discovery.styles.js +1 -1
  7. package/dist/components/attraction-header/attraction-header.styles.js +1 -1
  8. package/dist/components/attraction-option/attraction-option.styles.js +4 -4
  9. package/dist/components/basket/basket.styles.js +27 -26
  10. package/dist/components/basket-empty/basket-empty.styles.js +1 -0
  11. package/dist/components/basket-item/basket-item.component.js +10 -4
  12. package/dist/components/basket-item/basket-item.styles.js +9 -3
  13. package/dist/components/basket-item-ticket/basket-item-ticket.styles.js +1 -3
  14. package/dist/components/basket-mobile/basket-mobile.styles.js +5 -5
  15. package/dist/components/better-carousel/better-carousel.styles.js +2 -0
  16. package/dist/components/bottom-drawer/bottom-drawer.styles.js +6 -4
  17. package/dist/components/button/button.component.d.ts +0 -1
  18. package/dist/components/button/button.component.js +1 -8
  19. package/dist/components/button/button.constants.d.ts +1 -1
  20. package/dist/components/button/button.constants.js +1 -1
  21. package/dist/components/button/button.styles.js +66 -39
  22. package/dist/components/calendar/base/calendar.styles.js +3 -5
  23. package/dist/components/calendar/multi/multi.styles.js +7 -0
  24. package/dist/components/category-tag/category-tag.styles.js +10 -7
  25. package/dist/components/checkbox/checkbox.styles.js +2 -2
  26. package/dist/components/chip/chip.styles.js +2 -2
  27. package/dist/components/collect-fida/collect-fida.component.js +5 -3
  28. package/dist/components/collect-fida/collect-fida.styles.js +9 -16
  29. package/dist/components/crypto-auth-modal/crypto-auth-modal.component.js +6 -4
  30. package/dist/components/crypto-auth-modal/crypto-auth-modal.styles.js +2 -2
  31. package/dist/components/dialog/dialog.styles.js +10 -17
  32. package/dist/components/drawer/drawer.component.js +6 -0
  33. package/dist/components/drawer/drawer.styles.js +17 -3
  34. package/dist/components/dropdown/dropdown.component.js +7 -0
  35. package/dist/components/dropdown/dropdown.styles.js +3 -6
  36. package/dist/components/expiration-timer/expiration-timer.styles.js +3 -3
  37. package/dist/components/explore-card/explore-card.styles.js +1 -1
  38. package/dist/components/filter-chip/filter-chip.styles.js +11 -9
  39. package/dist/components/filters-drawer/filters-drawer.component.js +1 -1
  40. package/dist/components/filters-drawer/filters-drawer.styles.js +6 -5
  41. package/dist/components/image/image.styles.js +3 -3
  42. package/dist/components/image-chip/image-chip.styles.js +1 -1
  43. package/dist/components/input-field/input-field.styles.js +22 -17
  44. package/dist/components/itinerary/itinerary-item/itinerary-item.styles.js +1 -1
  45. package/dist/components/joined-fields/joined-fields.styles.js +10 -6
  46. package/dist/components/loading-spinner/loading-spinner.styles.js +1 -1
  47. package/dist/components/location-image/location-image.component.d.ts +6 -0
  48. package/dist/components/location-image/location-image.component.js +15 -2
  49. package/dist/components/location-image/location-image.styles.js +1 -1
  50. package/dist/components/locations-results/locations-results.styles.js +4 -6
  51. package/dist/components/marketing-tag/marketing-tag.styles.js +1 -1
  52. package/dist/components/message-card/message-card.styles.js +6 -6
  53. package/dist/components/option-group/option-chip/option-chip.styles.js +4 -3
  54. package/dist/components/order-confirmation/order-confirmation-item/order-confirmation-item.styles.js +9 -0
  55. package/dist/components/order-confirmation/order-confirmation.component.js +4 -3
  56. package/dist/components/order-confirmation/order-confirmation.styles.js +1 -1
  57. package/dist/components/otp/otp.styles.js +6 -6
  58. package/dist/components/overlay/overlay.styles.js +5 -1
  59. package/dist/components/pay-in/pay-in.styles.js +2 -2
  60. package/dist/components/payment-fiat-method/payment-fiat-method.styles.js +20 -4
  61. package/dist/components/payment-option/payment-option.styles.js +10 -12
  62. package/dist/components/performance-time/performance-time.styles.js +2 -2
  63. package/dist/components/phone-country-code/phone-country-code.styles.js +1 -1
  64. package/dist/components/points/points.styles.js +1 -1
  65. package/dist/components/search-button/search-button.styles.js +15 -7
  66. package/dist/components/seated-selector/seated-selector.component.d.ts +2 -0
  67. package/dist/components/seated-selector/seated-selector.component.js +53 -10
  68. package/dist/components/seated-selector/seated-selector.styles.js +77 -14
  69. package/dist/components/seats-io/seats-io.component.d.ts +2 -0
  70. package/dist/components/seats-io/seats-io.component.js +25 -2
  71. package/dist/components/seats-io/seats-io.constants.d.ts +2 -1
  72. package/dist/components/seats-io/seats-io.constants.js +6 -1
  73. package/dist/components/seats-io/seats-io.transform.d.ts +8 -2
  74. package/dist/components/seats-io/seats-io.transform.js +12 -4
  75. package/dist/components/select-list/select-list.styles.js +1 -0
  76. package/dist/components/select-list/select-option/select-option.styles.js +3 -3
  77. package/dist/components/sort-dropdown/sort-dropdown.styles.js +1 -1
  78. package/dist/components/sort-list/sort-list.styles.js +1 -1
  79. package/dist/components/sport-options/sport-option/sport-option.styles.js +2 -2
  80. package/dist/components/star-rating/star-rating.component.d.ts +1 -0
  81. package/dist/components/star-rating/star-rating.component.js +19 -23
  82. package/dist/components/star-rating/star-rating.styles.js +32 -6
  83. package/dist/components/tab/tab.styles.js +1 -1
  84. package/dist/components/tabs/tabs.styles.js +1 -1
  85. package/dist/components/tag/tag.styles.js +7 -7
  86. package/dist/components/text-section/text-section.styles.js +2 -1
  87. package/dist/components/time-tag/time-tag.styles.js +1 -2
  88. package/dist/components/tooltip/tooltip.styles.js +3 -3
  89. package/dist/components/tour-ticket-type-selector/tour-ticket-type/tour-ticket-type.styles.js +2 -2
  90. package/dist/components/tour-ticket-type-selector/tour-ticket-type-selector.component.js +1 -1
  91. package/dist/components/tour-ticket-type-selector/tour-ticket-type-selector.styles.js +1 -10
  92. package/dist/components/transfer-modal/transfer-modal.component.js +3 -3
  93. package/dist/components/transfer-modal/transfer-modal.styles.js +6 -8
  94. package/dist/containers/basket/basket.component.d.ts +1 -1
  95. package/dist/containers/basket/basket.component.js +56 -25
  96. package/dist/containers/footer/footer.styles.js +4 -0
  97. package/dist/containers/navbar/navbar.component.d.ts +5 -1
  98. package/dist/containers/navbar/navbar.component.js +38 -9
  99. package/dist/containers/navbar/navbar.styles.js +38 -12
  100. package/dist/contexts/basket/basket.provider.d.ts +1 -0
  101. package/dist/contexts/basket/basket.provider.js +31 -4
  102. package/dist/contexts/properties.context.d.ts +4 -4
  103. package/dist/core/api/middlewares/booking-session/booking-session.constants.d.ts +1 -0
  104. package/dist/core/api/middlewares/booking-session/booking-session.constants.js +1 -0
  105. package/dist/core/api/middlewares/booking-session/booking-session.js +18 -27
  106. package/dist/core/api/middlewares/booking-session/booking-session.utils.d.ts +4 -4
  107. package/dist/core/api/middlewares/booking-session/booking-session.utils.js +13 -10
  108. package/dist/core/api/queries.js +3 -2
  109. package/dist/core/color-scheme.d.ts +14 -0
  110. package/dist/core/color-scheme.js +48 -0
  111. package/dist/core/currency/constants.d.ts +1 -1
  112. package/dist/core/currency/constants.js +4 -3
  113. package/dist/core/i18n/date.js +20 -9
  114. package/dist/core/i18n/locale-codes.d.ts +2 -2
  115. package/dist/core/i18n/locale-codes.js +4 -0
  116. package/dist/core/images/constants.d.ts +0 -5
  117. package/dist/core/images/constants.js +0 -5
  118. package/dist/core/images/helpers.d.ts +8 -0
  119. package/dist/core/images/helpers.js +14 -6
  120. package/dist/core/images/srcset.js +2 -2
  121. package/dist/core/storybook/demo.d.ts +4 -0
  122. package/dist/core/storybook/demo.js +17 -0
  123. package/dist/core/types/locales.d.ts +7 -0
  124. package/dist/core/utils/datetime.js +10 -4
  125. package/dist/core/utils/locale.d.ts +8 -1
  126. package/dist/core/utils/locale.js +10 -0
  127. package/dist/helpers/helpers.d.ts +1 -1
  128. package/dist/index.d.ts +2 -3
  129. package/dist/index.js +1 -2
  130. package/dist/locales/ar-SA.d.ts +279 -0
  131. package/dist/locales/ar-SA.js +288 -0
  132. package/dist/locales/da-DK.d.ts +100 -82
  133. package/dist/locales/da-DK.js +104 -89
  134. package/dist/locales/de-DE.d.ts +100 -82
  135. package/dist/locales/de-DE.js +104 -89
  136. package/dist/locales/en-IE.d.ts +250 -232
  137. package/dist/locales/en-IE.js +253 -238
  138. package/dist/locales/en-US.d.ts +100 -82
  139. package/dist/locales/en-US.js +105 -90
  140. package/dist/locales/es-ES.d.ts +100 -82
  141. package/dist/locales/es-ES.js +104 -89
  142. package/dist/locales/fr-FR.d.ts +100 -82
  143. package/dist/locales/fr-FR.js +104 -89
  144. package/dist/locales/fr-MA.d.ts +100 -82
  145. package/dist/locales/fr-MA.js +104 -89
  146. package/dist/locales/is-IS.d.ts +100 -82
  147. package/dist/locales/is-IS.js +104 -89
  148. package/dist/locales/it-IT.d.ts +100 -82
  149. package/dist/locales/it-IT.js +104 -89
  150. package/dist/locales/ms-MY.d.ts +100 -82
  151. package/dist/locales/ms-MY.js +104 -89
  152. package/dist/locales/nb-NO.d.ts +100 -82
  153. package/dist/locales/nb-NO.js +104 -89
  154. package/dist/locales/pl-PL.d.ts +100 -82
  155. package/dist/locales/pl-PL.js +104 -89
  156. package/dist/locales/pt-PT.d.ts +100 -82
  157. package/dist/locales/pt-PT.js +104 -89
  158. package/dist/locales/sv-SE.d.ts +100 -82
  159. package/dist/locales/sv-SE.js +104 -89
  160. package/dist/locales/th-TH.d.ts +100 -82
  161. package/dist/locales/th-TH.js +104 -89
  162. package/dist/locales/tr-TR.d.ts +100 -82
  163. package/dist/locales/tr-TR.js +104 -89
  164. package/dist/locales/zh-CN.d.ts +100 -82
  165. package/dist/locales/zh-CN.js +105 -90
  166. package/dist/locales/zh-HK.d.ts +279 -0
  167. package/dist/locales/zh-HK.js +288 -0
  168. package/dist/mixins/coinbase.mixin.js +1 -1
  169. package/dist/mixins/error-modal.styles.js +2 -2
  170. package/dist/mixins/location-search/location-search.js +3 -3
  171. package/dist/mixins/location-search/location-search.styles.js +6 -5
  172. package/dist/sdk/chrome.d.ts +9 -3
  173. package/dist/sdk/chrome.js +21 -9
  174. package/dist/sdk/element-adapter.js +11 -8
  175. package/dist/sdk/mount.d.ts +3 -3
  176. package/dist/sdk/mount.js +150 -42
  177. package/dist/sdk/navigation-intent.js +3 -0
  178. package/dist/sdk/page-registry.d.ts +14 -2
  179. package/dist/sdk/page-registry.js +33 -13
  180. package/dist/sdk/theme.d.ts +1 -15
  181. package/dist/sdk/theme.js +4 -39
  182. package/dist/sdk/types.d.ts +55 -24
  183. package/dist/sdk/url.d.ts +24 -3
  184. package/dist/sdk/url.js +66 -27
  185. package/dist/sdk/validation.d.ts +0 -7
  186. package/dist/sdk/validation.js +105 -47
  187. package/dist/styles/contrast-fixtures.d.ts +0 -5
  188. package/dist/styles/contrast-fixtures.js +79 -9
  189. package/dist/styles/contrast.js +4 -3
  190. package/dist/styles/defaults/component.js +17 -1
  191. package/dist/styles/primitives.d.ts +0 -10
  192. package/dist/styles/primitives.js +2 -12
  193. package/dist/styles/tokens.d.ts +1 -1
  194. package/dist/styles/tokens.generated.d.ts +1 -1
  195. package/dist/styles/tokens.generated.js +1 -1
  196. package/dist/styles/tokens.metadata.d.ts +1 -1
  197. package/dist/styles/tokens.metadata.js +360 -90
  198. package/dist/views/details-page/details-page.component.d.ts +5 -5
  199. package/dist/views/details-page/details-page.component.js +72 -79
  200. package/dist/views/details-page/details-page.styles.js +64 -9
  201. package/dist/views/help-page/help-page.component.d.ts +1 -0
  202. package/dist/views/help-page/help-page.component.js +11 -4
  203. package/dist/views/help-page/help-page.styles.js +21 -8
  204. package/dist/views/landing-page/landing-page.component.d.ts +4 -4
  205. package/dist/views/landing-page/landing-page.component.js +65 -65
  206. package/dist/views/landing-page/landing-page.styles.js +70 -3
  207. package/dist/views/payment-page/partials/activity-details/activity-details.styles.js +10 -33
  208. package/dist/views/payment-page/partials/billing-address/billing-address.styles.js +4 -9
  209. package/dist/views/payment-page/partials/confirmation/confirmation.styles.js +6 -6
  210. package/dist/views/payment-page/partials/hotel-pickup-list/hotel-pickup-list.styles.js +4 -4
  211. package/dist/views/payment-page/partials/payment-type-selector/payment-type-selector.styles.js +1 -0
  212. package/dist/views/payment-page/partials/stripe/stripe.component.d.ts +1 -1
  213. package/dist/views/payment-page/partials/stripe/stripe.component.js +11 -12
  214. package/dist/views/payment-page/partials/stripe/stripe.constants.d.ts +2 -15
  215. package/dist/views/payment-page/partials/stripe/stripe.constants.js +4 -17
  216. package/dist/views/payment-page/partials/stripe/stripe.styles.js +16 -23
  217. package/dist/views/payment-page/partials/stripe/stripe.utils.d.ts +25 -14
  218. package/dist/views/payment-page/partials/stripe/stripe.utils.js +111 -62
  219. package/dist/views/payment-page/partials/terms-checkbox/terms-checkbox.styles.js +1 -1
  220. package/dist/views/payment-page/payment-page.component.d.ts +1 -0
  221. package/dist/views/payment-page/payment-page.component.js +19 -9
  222. package/dist/views/payment-page/payment-page.styles.js +37 -32
  223. package/dist/views/payment-page/payment-page.utils.d.ts +7 -0
  224. package/dist/views/payment-page/payment-page.utils.js +29 -14
  225. package/dist/views/payment-page/payment-page.validators.js +9 -3
  226. package/dist/views/payment-page/services/payment-api.service.d.ts +1 -1
  227. package/dist/views/search-page/search-page.component.d.ts +1 -0
  228. package/dist/views/search-page/search-page.component.js +12 -6
  229. package/dist/views/search-page/search-page.styles.js +24 -2
  230. package/dist/views/suggestion-widget/suggestion-widget.styles.js +1 -1
  231. package/package.json +62 -75
  232. package/dist/custom-elements.json +0 -37397
  233. package/dist/sdk/meta.d.ts +0 -7
  234. package/dist/sdk/meta.js +0 -9
  235. package/dist/styles/tokens.css +0 -359
@@ -6,7 +6,7 @@ export default css `
6
6
  :host {
7
7
  --sport-option-color: var(--coras-color-text);
8
8
  --sport-option-shadow: var(--coras-shadow-sm);
9
- --sport-option-section-border-color: var(--coras-color-neutral-200);
9
+ --sport-option-section-border-color: var(--coras-color-card-border);
10
10
  --sport-option-section-border-radius: var(--coras-radius-md);
11
11
  --sport-option-font-weight: var(--coras-font-weight-normal);
12
12
  --sport-option-label-font-size: var(--coras-font-size-sm);
@@ -49,7 +49,7 @@ export default css `
49
49
  border-left: none;
50
50
  border-top-right-radius: var(--sport-option-section-border-radius);
51
51
  border-bottom-right-radius: var(--sport-option-section-border-radius);
52
- background-color: var(--coras-color-primary-50);
52
+ background-color: var(--coras-color-primary-tint);
53
53
 
54
54
  coras-button {
55
55
  margin-left: 1rem;
@@ -10,6 +10,7 @@ export declare class CorasStarRating extends LitElement {
10
10
  static styles: CSSResultGroup;
11
11
  rating: number;
12
12
  private get normalizedRating();
13
+ private renderStarShape;
13
14
  private renderStar;
14
15
  render(): TemplateResult<1>;
15
16
  }
@@ -4,11 +4,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { html, LitElement, } from "lit";
7
+ import { html, LitElement, nothing, } from "lit";
8
8
  import { property } from "lit/decorators.js";
9
9
  import { range } from "lit/directives/range.js";
10
10
  import { map } from "lit/directives/map.js";
11
11
  import styles from "./star-rating.styles.js";
12
+ const STAR_PATH = "M9 14.25l-5.584 2.936 1.066-6.218L.465 6.564l6.243-.907L9 0l2.792 5.657 6.243.907-4.517 4.404 1.066 6.218";
12
13
  /**
13
14
  * A component that displays a star rating.
14
15
  *
@@ -25,6 +26,17 @@ export class CorasStarRating extends LitElement {
25
26
  get normalizedRating() {
26
27
  return Math.max(0, Math.min(5, Math.round(this.rating * 2) / 2));
27
28
  }
29
+ renderStarShape() {
30
+ return html `
31
+ <svg
32
+ viewBox="0 0 18 18"
33
+ aria-hidden="true"
34
+ xmlns="http://www.w3.org/2000/svg"
35
+ >
36
+ <path d="${STAR_PATH}" />
37
+ </svg>
38
+ `;
39
+ }
28
40
  renderStar(index) {
29
41
  const starValue = index + 1;
30
42
  const isFull = starValue <= this.normalizedRating;
@@ -35,16 +47,12 @@ export class CorasStarRating extends LitElement {
35
47
  else if (isHalf)
36
48
  className = "star star--half";
37
49
  return html `
38
- <svg
39
- class="${className}"
40
- viewBox="0 0 18 18"
41
- aria-hidden="true"
42
- xmlns="http://www.w3.org/2000/svg"
43
- >
44
- <path
45
- d="M9 14.25l-5.584 2.936 1.066-6.218L.465 6.564l6.243-.907L9 0l2.792 5.657 6.243.907-4.517 4.404 1.066 6.218"
46
- />
47
- </svg>
50
+ <span class="${className}">
51
+ <span class="star-base">${this.renderStarShape()}</span>
52
+ ${isFull || isHalf
53
+ ? html `<span class="star-fill">${this.renderStarShape()}</span>`
54
+ : nothing}
55
+ </span>
48
56
  `;
49
57
  }
50
58
  render() {
@@ -54,18 +62,6 @@ export class CorasStarRating extends LitElement {
54
62
  role="img"
55
63
  aria-label="${this.normalizedRating} out of 5 stars"
56
64
  >
57
- <svg width="0" height="0" style="position: absolute;">
58
- <defs>
59
- <linearGradient id="half-gradient">
60
- <stop offset="50%" stop-color="var(--star-rating-color)" />
61
- <stop
62
- offset="50%"
63
- stop-color="var(--star-rating-background-color)"
64
- />
65
- </linearGradient>
66
- </defs>
67
- </svg>
68
-
69
65
  ${map(range(5), (i) => this.renderStar(i))}
70
66
  <span class="sr-only">${this.normalizedRating} out of 5 stars</span>
71
67
  </div>
@@ -7,7 +7,14 @@ export default css `
7
7
  display: inline-flex;
8
8
  align-items: center;
9
9
  --star-rating-color: var(--coras-color-primary);
10
- --star-rating-background-color: var(--coras-color-neutral-200);
10
+ /* The unearned part of the track is the rating colour faded rather than a
11
+ flat grey, so it reads as the same mark and composites correctly over a
12
+ light or a dark surface. It follows an overridden star colour too. */
13
+ --star-rating-background-color: color-mix(
14
+ in srgb,
15
+ var(--star-rating-color) 25%,
16
+ transparent
17
+ );
11
18
  --star-size: 1.125rem;
12
19
  --star-gap: 0.125rem;
13
20
  }
@@ -19,20 +26,39 @@ export default css `
19
26
  }
20
27
 
21
28
  .star {
29
+ position: relative;
30
+ display: block;
22
31
  width: var(--star-size);
23
32
  height: var(--star-size);
24
33
  }
25
34
 
26
- .star--full {
35
+ .star svg {
36
+ display: block;
37
+ width: var(--star-size);
38
+ height: var(--star-size);
39
+ }
40
+
41
+ .star-base {
42
+ fill: var(--star-rating-background-color);
43
+ }
44
+
45
+ /* A paint-server reference such as url(#gradient) does not resolve from a
46
+ stylesheet inside a shadow root, so the coloured part of a star is a second
47
+ copy clipped by its container rather than a gradient fill. */
48
+ .star-fill {
49
+ position: absolute;
50
+ inset-block: 0;
51
+ inset-inline-start: 0;
52
+ overflow: hidden;
27
53
  fill: var(--star-rating-color);
28
54
  }
29
55
 
30
- .star--half {
31
- fill: url(#half-gradient);
56
+ .star--full .star-fill {
57
+ width: 100%;
32
58
  }
33
59
 
34
- .star--empty {
35
- fill: var(--star-rating-background-color);
60
+ .star--half .star-fill {
61
+ width: 50%;
36
62
  }
37
63
 
38
64
  .sr-only {
@@ -14,7 +14,7 @@ export default css `
14
14
  --tab-font-size: var(--coras-font-size-base);
15
15
  --tab-font-weight: var(--coras-font-weight-medium);
16
16
  --tab-shadow: var(--coras-shadow-sm);
17
- --tab-border-bottom-color: var(--coras-color-secondary-500);
17
+ --tab-border-bottom-color: var(--coras-color-secondary);
18
18
  --tab-chip-selected-background-color: var(--coras-color-primary);
19
19
  --tab-chip-font-size: var(--coras-font-size-base);
20
20
  --tab-chip-line-height: var(--coras-font-size-base);
@@ -6,7 +6,7 @@ export default css `
6
6
  :host {
7
7
  --tabs-border-bottom-color: color-mix(
8
8
  in srgb,
9
- var(--coras-color-error-500),
9
+ var(--coras-color-error),
10
10
  transparent 96%
11
11
  );
12
12
  --tabs-gap: 0;
@@ -14,13 +14,13 @@ export default css `
14
14
  --tag-font-weight: var(--coras-font-weight-semibold);
15
15
 
16
16
  --tag-color-blue: var(--coras-color-text);
17
- --tag-background-color-blue: var(--coras-color-primary-300);
18
- --tag-color-green: var(--coras-color-success-900);
19
- --tag-background-color-green: var(--coras-color-success-50);
20
- --tag-color-red: var(--coras-color-error-900);
21
- --tag-background-color-red: var(--coras-color-error-50);
22
- --tag-color-purple: var(--coras-color-info-500);
23
- --tag-background-color-purple: var(--coras-color-info-50);
17
+ --tag-background-color-blue: var(--coras-color-primary-tint);
18
+ --tag-color-green: var(--coras-color-success);
19
+ --tag-background-color-green: var(--coras-color-success-background);
20
+ --tag-color-red: var(--coras-color-error);
21
+ --tag-background-color-red: var(--coras-color-error-background);
22
+ --tag-color-purple: var(--coras-color-info);
23
+ --tag-background-color-purple: var(--coras-color-info-background);
24
24
  }
25
25
 
26
26
  span {
@@ -9,6 +9,7 @@ export default css `
9
9
 
10
10
  .label {
11
11
  color: var(--coras-color-text);
12
+ font-family: var(--coras-font-family-heading);
12
13
  font-weight: var(--coras-font-weight-semibold);
13
14
  font-size: 22px;
14
15
  line-height: 30px;
@@ -82,7 +83,7 @@ export default css `
82
83
  }
83
84
 
84
85
  ::slotted(a) {
85
- color: var(--coras-color-primary-500);
86
+ color: var(--coras-color-link);
86
87
  text-decoration: underline;
87
88
  font-size: inherit;
88
89
  }
@@ -6,7 +6,6 @@ export default css `
6
6
  :host {
7
7
  display: flex;
8
8
 
9
- /* Tags keep a fixed pill shape, exempt from the brand radius. */
10
9
  --time-tag-border-radius: var(--coras-radius-full);
11
10
  --time-tag-font-size: var(--coras-font-size-xs);
12
11
  --time-tag-font-weight: var(--coras-font-weight-semibold);
@@ -14,7 +13,7 @@ export default css `
14
13
 
15
14
  --time-tag-line-height: 16px;
16
15
  --time-tag-letter-spacing: 0.01em;
17
- --time-tag-background-color: var(--coras-color-info-50);
16
+ --time-tag-background-color: var(--coras-color-info-background);
18
17
  }
19
18
 
20
19
  svg {
@@ -4,9 +4,9 @@ export default css `
4
4
  ${component}
5
5
 
6
6
  :host {
7
- --tooltip-background-color: var(--coras-color-surface);
8
- --tooltip-arrow-icon-color: var(--coras-color-primary-400);
9
- --tooltip-border-color: var(--coras-color-neutral-200);
7
+ --tooltip-background-color: var(--coras-color-card);
8
+ --tooltip-arrow-icon-color: var(--coras-color-primary);
9
+ --tooltip-border-color: var(--coras-color-card-border);
10
10
  --tooltip-border-radius: var(--coras-radius-sm);
11
11
  --tooltip-content-shadow: var(--coras-shadow-md);
12
12
  --tooltip-font-size: var(--coras-font-size-sm);
@@ -17,8 +17,8 @@ export default css `
17
17
  --coras-font-weight-semibold
18
18
  );
19
19
  --tour-ticket-type-counter-value-line-height: var(--coras-font-size-2xl);
20
- --tour-ticket-type-hover-background-color: var(--coras-color-surface-hover);
21
- --tour-ticket-type-disabled-color: var(--coras-color-neutral-500);
20
+ --tour-ticket-type-hover-background-color: var(--coras-color-card-hover);
21
+ --tour-ticket-type-disabled-color: var(--coras-color-text-disabled);
22
22
 
23
23
  display: flex;
24
24
  flex-direction: row;
@@ -31,7 +31,7 @@ export class CorasTourTicketTypeSelector extends LitElement {
31
31
  <coras-button
32
32
  slot="trigger"
33
33
  variant="outlined"
34
- radius="small"
34
+ radius="field"
35
35
  height="md"
36
36
  border-color="light"
37
37
  expanded
@@ -9,9 +9,7 @@ export default css `
9
9
  );
10
10
  --tour-ticket-type-selector-options-border-radius: var(--coras-radius-sm);
11
11
  --tour-ticket-type-selector-options-box-shadow: var(--coras-shadow-md);
12
- --tour-ticket-type-selector-open-arrow-color: var(
13
- --coras-color-primary-500
14
- );
12
+ --tour-ticket-type-selector-open-arrow-color: var(--coras-color-primary);
15
13
 
16
14
  display: inline-flex;
17
15
  max-width: 100%;
@@ -19,13 +17,6 @@ export default css `
19
17
  coras-dropdown {
20
18
  width: 100%;
21
19
  }
22
-
23
- /* The trigger is a button, so its radius follows the brand button radius
24
- (which tracks the general brand radius until a separate button radius is
25
- set) rather than a fixed field radius. */
26
- coras-button {
27
- --button-border-radius-small: var(--coras-radius-button);
28
- }
29
20
  }
30
21
 
31
22
  :host #arrow {
@@ -154,6 +154,7 @@ let CorasTransferModal = class CorasTransferModal extends LitElement {
154
154
  return msg("Verify your payment");
155
155
  }
156
156
  renderMfaContent() {
157
+ const phone = html `<strong>${this.maskedPhone}</strong>`;
157
158
  return html `
158
159
  <div class="mfa-state">
159
160
  <div class="payment-summary">
@@ -171,9 +172,8 @@ let CorasTransferModal = class CorasTransferModal extends LitElement {
171
172
 
172
173
  <p class="mfa-instruction">
173
174
  ${this.maskedPhone
174
- ? msg(html `A verification code has been sent to
175
- <strong>${this.maskedPhone}</strong>. Enter the 6-digit code
176
- below to confirm your payment.`)
175
+ ? msg(html `A verification code has been sent to ${phone}. Enter the
176
+ 6-digit code below to confirm your payment.`)
177
177
  : msg("A verification code has been sent to your registered phone number. Enter the 6-digit code below to confirm your payment.")}
178
178
  </p>
179
179
 
@@ -17,7 +17,7 @@ export default css `
17
17
  }
18
18
 
19
19
  .error-message {
20
- background: var(--coras-color-error-surface, #fef2f2);
20
+ background: var(--coras-color-error-background, #fef2f2);
21
21
  color: var(--coras-color-error, #dc2626);
22
22
  padding: 0.75rem 1rem;
23
23
  border-radius: var(--coras-radius-md, 8px);
@@ -33,7 +33,7 @@ export default css `
33
33
  .loading-spinner {
34
34
  width: 40px;
35
35
  height: 40px;
36
- border: 3px solid var(--coras-color-border, #e0e0e0);
36
+ border: 3px solid var(--coras-color-card-border, #e0e0e0);
37
37
  border-top-color: var(--coras-color-primary, #0052ff);
38
38
  border-radius: 50%;
39
39
  animation: spin 1s linear infinite;
@@ -47,17 +47,15 @@ export default css `
47
47
  }
48
48
 
49
49
  .loading-text {
50
- color: var(--coras-color-text-secondary, #666666);
50
+ color: var(--coras-color-text-muted, #666666);
51
51
  font-size: 0.875rem;
52
52
  }
53
53
 
54
- /* MFA Verification State */
55
54
  .mfa-state {
56
55
  text-align: center;
57
56
  padding: 0.5rem 0;
58
57
  }
59
58
 
60
- /* Payment summary block */
61
59
  .payment-summary {
62
60
  margin-bottom: 1rem;
63
61
  }
@@ -79,7 +77,7 @@ export default css `
79
77
  }
80
78
 
81
79
  .mfa-instruction {
82
- color: var(--coras-color-text-secondary, #666666);
80
+ color: var(--coras-color-text-muted, #666666);
83
81
  font-size: 0.875rem;
84
82
  line-height: 1.5;
85
83
  margin-bottom: 1.5rem;
@@ -102,7 +100,7 @@ export default css `
102
100
 
103
101
  .mfa-disclaimer {
104
102
  font-size: 0.75rem;
105
- color: var(--coras-color-text-secondary, #666666);
103
+ color: var(--coras-color-text-muted, #666666);
106
104
  line-height: 1.4;
107
105
  margin-top: 1rem;
108
106
  margin-bottom: 0;
@@ -131,7 +129,7 @@ export default css `
131
129
  }
132
130
 
133
131
  .resend-link:hover {
134
- color: var(--coras-color-primary-hover, #0040cc);
132
+ color: var(--coras-color-main-button-hover, #0040cc);
135
133
  }
136
134
 
137
135
  .resend-link:disabled {
@@ -19,7 +19,7 @@ export declare class CorasBasket extends LitElement {
19
19
  private handleRemoveItem;
20
20
  private renderCheckoutButton;
21
21
  private renderTickets;
22
- private getSeatInfo;
22
+ private getSeatDetails;
23
23
  private renderBasketItems;
24
24
  render(): import("lit").TemplateResult<1>;
25
25
  }
@@ -17,7 +17,7 @@ import "../../contexts/basket/basket.js";
17
17
  import { basketContext } from "../../contexts/basket/basket.context.js";
18
18
  import { property } from "lit/decorators.js";
19
19
  import { currencyContext, localeContext, assetsURLContext, } from "../../contexts/properties.context.js";
20
- import { localized, msg } from "@lit/localize";
20
+ import { localized, msg, str } from "@lit/localize";
21
21
  import { convertToLocaleCurrency } from "../../core/currency/index.js";
22
22
  import { formatDateTimeForDisplay, formatTimeForDisplay, } from "../../core/utils/datetime.js";
23
23
  let CorasBasket = class CorasBasket extends LitElement {
@@ -102,7 +102,12 @@ let CorasBasket = class CorasBasket extends LitElement {
102
102
  ${Array.from(ticketGroups.values()).map((group) => {
103
103
  const ticket = group.ticket;
104
104
  const ticketCount = group.count;
105
- const ticketName = ticket.name || msg("Ticket");
105
+ // Label by price type ("Adult", "Infant", …) - that's what the
106
+ // breakdown shows. `name` is a mostly-empty generic label that falls
107
+ // back to "Ticket".
108
+ const ticketName = ("price_type" in ticket && ticket.price_type) ||
109
+ ticket.name ||
110
+ msg("Ticket");
106
111
  let ticketPrice = "";
107
112
  if (ticket.full_price !== undefined) {
108
113
  ticketPrice = this.getFormattedPrice(ticket.full_price);
@@ -122,22 +127,45 @@ let CorasBasket = class CorasBasket extends LitElement {
122
127
  })}
123
128
  `;
124
129
  }
125
- getSeatInfo(reservation) {
126
- const seatInfo = [];
127
- if (reservation.tickets) {
128
- for (const ticket of reservation.tickets) {
129
- if ("section" in ticket && ticket.section) {
130
- seatInfo.push(`Section: ${ticket.section}`);
131
- }
132
- if ("row_name" in ticket && ticket.row_name) {
133
- seatInfo.push(`Row: ${ticket.row_name}`);
134
- }
135
- if ("seat_name" in ticket && ticket.seat_name) {
136
- seatInfo.push(`Seat: ${ticket.seat_name}`);
137
- }
130
+ // Collapses a reservation's per-ticket seat data into a section line and a
131
+ // seat line ("Row 9, Seats 11, 12", or bare labels like "F5, F6" when the API
132
+ // gives seat names without a separate row/number). General-admission tickets
133
+ // carry no seat fields, so both come back empty and the seat row is dropped.
134
+ getSeatDetails(reservation) {
135
+ const tickets = reservation.tickets;
136
+ if (!tickets || tickets.length === 0) {
137
+ return { section: "", seats: "" };
138
+ }
139
+ const sections = new Set();
140
+ const seatsByRow = new Map();
141
+ const looseSeats = [];
142
+ for (const ticket of tickets) {
143
+ const section = "section" in ticket ? ticket.section : undefined;
144
+ const rowName = "row_name" in ticket ? ticket.row_name : undefined;
145
+ const seatNumber = "seat_number" in ticket ? ticket.seat_number : undefined;
146
+ const seatName = "seat_name" in ticket ? ticket.seat_name : undefined;
147
+ if (section) {
148
+ sections.add(section);
149
+ }
150
+ const row = rowName?.toString().trim();
151
+ const number = seatNumber?.toString().trim();
152
+ if (row && number) {
153
+ const seats = seatsByRow.get(row) ?? [];
154
+ seats.push(number);
155
+ seatsByRow.set(row, seats);
156
+ }
157
+ else if (seatName) {
158
+ looseSeats.push(seatName);
138
159
  }
139
160
  }
140
- return seatInfo;
161
+ const rowSeats = [...seatsByRow.entries()].map(([row, seats]) => {
162
+ const seatList = seats.join(", ");
163
+ return msg(str `Row ${row}, Seats ${seatList}`);
164
+ });
165
+ return {
166
+ section: [...sections].join(", "),
167
+ seats: [...rowSeats, ...looseSeats].join(" · "),
168
+ };
141
169
  }
142
170
  renderBasketItems() {
143
171
  if (!this.basket?.value?.items || this.basket.value.items.length === 0) {
@@ -165,7 +193,15 @@ let CorasBasket = class CorasBasket extends LitElement {
165
193
  const imageUrl = reservation.images
166
194
  ? Object.values(reservation.images)[0] || ""
167
195
  : "";
168
- const seatInfo = this.getSeatInfo(reservation);
196
+ const { section, seats } = this.getSeatDetails(reservation);
197
+ const tickets = reservation.tickets ?? [];
198
+ const distinctPriceTypes = new Set(tickets.map((ticket) => ticket.price_type_id).filter(Boolean));
199
+ // Show the per-ticket "ea" price on the item header only when every
200
+ // ticket is the same type, so the average is the true unit price. Mixed
201
+ // types get their own per-type "ea" lines in the breakdown instead.
202
+ const unitPrice = tickets.length > 0 && distinctPriceTypes.size <= 1
203
+ ? this.getFormattedPrice(reservation.total_price / reservation.number_of_tickets)
204
+ : "";
169
205
  const ticketsHtml = this.renderTickets(reservation.tickets || [], reservation.number_of_tickets, reservation.total_price);
170
206
  return html `
171
207
  <coras-basket-item
@@ -177,17 +213,12 @@ let CorasBasket = class CorasBasket extends LitElement {
177
213
  date="${date}"
178
214
  time="${time}"
179
215
  quantity="${reservation.number_of_tickets}"
180
- price="${this.getFormattedPrice(reservation.total_price / reservation.number_of_tickets)}"
216
+ section="${section}"
217
+ seats="${seats}"
218
+ price="${unitPrice}"
181
219
  total-price="${this.getFormattedPrice(reservation.total_price)}"
182
220
  expires-in="${reservation.expires_in}"
183
221
  >
184
- ${seatInfo.length > 0
185
- ? html `
186
- <div slot="details" class="seat-info">
187
- ${seatInfo.join(" | ")}
188
- </div>
189
- `
190
- : html ``}
191
222
  ${ticketsHtml}
192
223
  <coras-icon
193
224
  slot="remove-button"
@@ -6,8 +6,11 @@ export default css `
6
6
  :host {
7
7
  --footer-background: var(--coras-footer-background-color);
8
8
  --footer-text-color: var(--coras-footer-text-color);
9
+ --footer-border-top: var(--coras-footer-border-top);
10
+ --footer-padding-bottom: var(--coras-footer-padding-bottom);
9
11
 
10
12
  background-color: var(--footer-background);
13
+ border-top: var(--footer-border-top);
11
14
 
12
15
  width: 100%;
13
16
  pointer-events: none;
@@ -19,6 +22,7 @@ export default css `
19
22
  margin: 0 auto;
20
23
  width: 100%;
21
24
  padding: var(--coras-footer-padding);
25
+ padding-bottom: var(--footer-padding-bottom);
22
26
  pointer-events: auto;
23
27
 
24
28
  coras-footer-menu-item {
@@ -20,7 +20,7 @@ import type { SearchMixinInterface } from "../../mixins/search-mixin/types.js";
20
20
  import type { PageName } from "../../core/types/shared.js";
21
21
  import type { paths } from "../../core/types/api-schema.js";
22
22
  import type { Client } from "openapi-fetch";
23
- declare const CorasNavBar_base: import("../../contexts/utils.js").Constructor<SearchMixinInterface> & typeof LitElement;
23
+ declare const CorasNavBar_base: import("../../contexts/utils.js").Constructor<SearchMixinInterface> & typeof LitElement & (new (...args: any[]) => import("@lit-labs/signals").SignalWatcherApi);
24
24
  export declare class CorasNavBar extends CorasNavBar_base implements SearchMixinInterface {
25
25
  static styles: CSSResultGroup;
26
26
  assetsURL: string;
@@ -30,6 +30,9 @@ export declare class CorasNavBar extends CorasNavBar_base implements SearchMixin
30
30
  showBasket: boolean;
31
31
  showSearch: boolean;
32
32
  logo?: string;
33
+ logoDark?: string;
34
+ navbarLogo?: string;
35
+ private readonly colorScheme;
33
36
  locale: SupportedLocales;
34
37
  locales: SupportedLocales[];
35
38
  currency: SupportedCurrencies;
@@ -94,6 +97,7 @@ export declare class CorasNavBar extends CorasNavBar_base implements SearchMixin
94
97
  private renderMobileMenuIcon;
95
98
  private renderReturnButton;
96
99
  private renderMobileMenuDrawer;
100
+ private handleLogoClick;
97
101
  private renderBrand;
98
102
  private renderSearchOnlyHeader;
99
103
  private renderFullHeader;
@@ -6,6 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { html, LitElement, nothing } from "lit";
8
8
  import { property, state } from "lit/decorators.js";
9
+ import { ColorSchemeController } from "../../core/color-scheme.js";
9
10
  import { when } from "lit/directives/when.js";
10
11
  import { localized, msg } from "@lit/localize";
11
12
  import { consume, ContextConsumer } from "@lit/context";
@@ -45,6 +46,8 @@ let CorasNavBar = class CorasNavBar extends SearchMixin(SignalWatcher(LitElement
45
46
  this.showCurrencySelector = true;
46
47
  this.showBasket = true;
47
48
  this.showSearch = true;
49
+ // Reactive effective scheme, so the fallback logo swaps light/dark live.
50
+ this.colorScheme = new ColorSchemeController(this);
48
51
  this.searchValue = "";
49
52
  this.isCurrenciesDropdownOpen = false;
50
53
  this.isLocalesDropdownOpen = false;
@@ -89,6 +92,15 @@ let CorasNavBar = class CorasNavBar extends SearchMixin(SignalWatcher(LitElement
89
92
  this.searchValue = event.detail.value;
90
93
  this.throttledSearch(event);
91
94
  };
95
+ // The logo is a home link. The embed owns no router, so it dispatches a
96
+ // `landing` navigation the host applies (a no-op when already on landing).
97
+ this.handleLogoClick = () => {
98
+ this.dispatchPageUpdate({
99
+ page: "landing",
100
+ locale: this.locale,
101
+ currency: this.currency,
102
+ });
103
+ };
92
104
  }
93
105
  static { this.styles = styles; }
94
106
  get shouldRenderMobileMenu() {
@@ -596,18 +608,29 @@ let CorasNavBar = class CorasNavBar extends SearchMixin(SignalWatcher(LitElement
596
608
  </coras-drawer>
597
609
  `;
598
610
  }
599
- // The host's `brand` slot wins; the default logo is slot fallback content
600
- // shown only when nothing is slotted and `config.theme.logo` is set.
611
+ // The host's `brand` slot wins and keeps its own semantics: slotted content is
612
+ // projected as-is, never wrapped, so a slotted link/button is not nested inside
613
+ // our button (invalid interactive-in-interactive) and owns its own navigation.
614
+ // The home-link button wraps only the SDK fallback logo, and is rendered as the
615
+ // slot's fallback content, so nothing focusable exists when there is no logo and
616
+ // nothing slotted.
601
617
  renderBrand() {
618
+ const logo = this.navbarLogo ||
619
+ (this.colorScheme.scheme === "dark" && this.logoDark
620
+ ? this.logoDark
621
+ : this.logo);
602
622
  return html `
603
623
  <slot name="brand">
604
- ${this.logo
605
- ? html `<img
606
- class="brand-logo"
607
- part="brand-logo"
608
- src=${this.logo}
609
- alt=""
610
- />`
624
+ ${logo
625
+ ? html `<button
626
+ class="brand-button"
627
+ part="brand-button"
628
+ type="button"
629
+ aria-label=${msg("Go to the home page")}
630
+ @click=${this.handleLogoClick}
631
+ >
632
+ <img class="brand-logo" part="brand-logo" src=${logo} alt="" />
633
+ </button>`
611
634
  : nothing}
612
635
  </slot>
613
636
  `;
@@ -679,6 +702,12 @@ __decorate([
679
702
  __decorate([
680
703
  property({ type: String })
681
704
  ], CorasNavBar.prototype, "logo", void 0);
705
+ __decorate([
706
+ property({ type: String, attribute: "logo-dark" })
707
+ ], CorasNavBar.prototype, "logoDark", void 0);
708
+ __decorate([
709
+ property({ type: String, attribute: "navbar-logo" })
710
+ ], CorasNavBar.prototype, "navbarLogo", void 0);
682
711
  __decorate([
683
712
  consume({ context: localeContext, subscribe: true })
684
713
  ], CorasNavBar.prototype, "locale", void 0);