@skyscanner/backpack-web 42.24.0-dev-v27397479883.1 → 42.25.0-dev-v27529988690.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -25,65 +25,65 @@ To contribute please see [contributing.md](CONTRIBUTING.md).
25
25
  ## List of packages
26
26
 
27
27
  [`bpk-animate-height`](/packages/bpk-animate-height)
28
- [`bpk-component-accordion`](/packages/bpk-component-accordion)
29
- [`bpk-component-autosuggest`](/packages/bpk-component-autosuggest)
30
- [`bpk-component-badge`](/packages/bpk-component-badge)
31
- [`bpk-component-banner-alert`](/packages/bpk-component-banner-alert)
32
- [`bpk-component-barchart`](/packages/bpk-component-barchart)
33
- [`bpk-component-blockquote`](/packages/bpk-component-blockquote)
34
- [`bpk-component-bottom-sheet`](/packages/bpk-component-bottom-sheet)
35
- [`bpk-component-breadcrumb`](/packages/bpk-component-breadcrumb)
36
- [`bpk-component-breakpoint`](/packages/bpk-component-breakpoint)
37
- [`bpk-component-button`](/packages/bpk-component-button)
38
- [`bpk-component-calendar`](/packages/bpk-component-calendar)
39
- [`bpk-component-card`](/packages/bpk-component-card)
40
- [`bpk-component-checkbox`](/packages/bpk-component-checkbox)
41
- [`bpk-component-chip`](/packages/bpk-component-chip)
42
- [`bpk-component-close-button`](/packages/bpk-component-close-button)
43
- [`bpk-component-code`](/packages/bpk-component-code)
44
- [`bpk-component-datatable`](/packages/bpk-component-datatable)
45
- [`bpk-component-datepicker`](/packages/bpk-component-datepicker)
46
- [`bpk-component-description-list`](/packages/bpk-component-description-list)
47
- [`bpk-component-dialog`](/packages/bpk-component-dialog)
48
- [`bpk-component-drawer`](/packages/bpk-component-drawer)
49
- [`bpk-component-fieldset`](/packages/bpk-component-fieldset)
50
- [`bpk-component-form-validation`](/packages/bpk-component-form-validation)
51
- [`bpk-component-graphic-promotion`](/packages/bpk-component-graphic-promotion)
52
- [`bpk-component-grid-toggle`](/packages/bpk-component-grid-toggle)
53
- [`bpk-component-horizontal-nav`](/packages/bpk-component-horizontal-nav)
54
- [`bpk-component-icon`](/packages/bpk-component-icon)
55
- [`bpk-component-image`](/packages/bpk-component-image)
56
- [`bpk-component-infinite-scroll`](/packages/bpk-component-infinite-scroll)
57
- [`bpk-component-input`](/packages/bpk-component-input)
58
- [`bpk-component-label`](/packages/bpk-component-label)
59
- [`bpk-component-link`](/packages/bpk-component-link)
60
- [`bpk-component-list`](/packages/bpk-component-list)
61
- [`bpk-component-loading-button`](/packages/bpk-component-loading-button)
62
- [`bpk-component-mobile-scroll-container`](/packages/bpk-component-mobile-scroll-container)
63
- [`bpk-component-modal`](/packages/bpk-component-modal)
64
- [`bpk-component-navigation-bar`](/packages/bpk-component-navigation-bar)
65
- [`bpk-component-nudger`](/packages/bpk-component-nudger)
66
- [`bpk-component-page-indicator`](/packages/bpk-component-page-indicator)
67
- [`bpk-component-pagination`](/packages/bpk-component-pagination)
68
- [`bpk-component-panel`](/packages/bpk-component-panel)
69
- [`bpk-component-phone-input`](/packages/bpk-component-phone-input)
70
- [`bpk-component-popover`](/packages/bpk-component-popover)
71
- [`bpk-component-price-range`](/packages/bpk-component-price-range)
72
- [`bpk-component-progress`](/packages/bpk-component-progress)
73
- [`bpk-component-radio`](/packages/bpk-component-radio)
74
- [`bpk-component-rtl-toggle`](/packages/bpk-component-rtl-toggle)
75
- [`bpk-component-section-list`](/packages/bpk-component-section-list)
76
- [`bpk-component-select`](/packages/bpk-component-select)
77
- [`bpk-component-slider`](/packages/bpk-component-slider)
78
- [`bpk-component-spinner`](/packages/bpk-component-spinner)
79
- [`bpk-component-star-rating`](/packages/bpk-component-star-rating)
80
- [`bpk-component-switch`](/packages/bpk-component-switch)
81
- [`bpk-component-table`](/packages/bpk-component-table)
82
- [`bpk-component-text`](/packages/bpk-component-text)
83
- [`bpk-component-textarea`](/packages/bpk-component-textarea)
28
+ [`bpk-component-accordion`](/packages/backpack-web/src/bpk-component-accordion)
29
+ [`bpk-component-autosuggest`](/packages/backpack-web/src/bpk-component-autosuggest)
30
+ [`bpk-component-badge`](/packages/backpack-web/src/bpk-component-badge)
31
+ [`bpk-component-banner-alert`](/packages/backpack-web/src/bpk-component-banner-alert)
32
+ [`bpk-component-barchart`](/packages/backpack-web/src/bpk-component-barchart)
33
+ [`bpk-component-blockquote`](/packages/backpack-web/src/bpk-component-blockquote)
34
+ [`bpk-component-bottom-sheet`](/packages/backpack-web/src/bpk-component-bottom-sheet)
35
+ [`bpk-component-breadcrumb`](/packages/backpack-web/src/bpk-component-breadcrumb)
36
+ [`bpk-component-breakpoint`](/packages/backpack-web/src/bpk-component-breakpoint)
37
+ [`bpk-component-button`](/packages/backpack-web/src/bpk-component-button)
38
+ [`bpk-component-calendar`](/packages/backpack-web/src/bpk-component-calendar)
39
+ [`bpk-component-card`](/packages/backpack-web/src/bpk-component-card)
40
+ [`bpk-component-checkbox`](/packages/backpack-web/src/bpk-component-checkbox)
41
+ [`bpk-component-chip`](/packages/backpack-web/src/bpk-component-chip)
42
+ [`bpk-component-close-button`](/packages/backpack-web/src/bpk-component-close-button)
43
+ [`bpk-component-code`](/packages/backpack-web/src/bpk-component-code)
44
+ [`bpk-component-datatable`](/packages/backpack-web/src/bpk-component-datatable)
45
+ [`bpk-component-datepicker`](/packages/backpack-web/src/bpk-component-datepicker)
46
+ [`bpk-component-description-list`](/packages/backpack-web/src/bpk-component-description-list)
47
+ [`bpk-component-dialog`](/packages/backpack-web/src/bpk-component-dialog)
48
+ [`bpk-component-drawer`](/packages/backpack-web/src/bpk-component-drawer)
49
+ [`bpk-component-fieldset`](/packages/backpack-web/src/bpk-component-fieldset)
50
+ [`bpk-component-form-validation`](/packages/backpack-web/src/bpk-component-form-validation)
51
+ [`bpk-component-graphic-promotion`](/packages/backpack-web/src/bpk-component-graphic-promotion)
52
+ [`bpk-component-grid-toggle`](/packages/backpack-web/src/bpk-component-grid-toggle)
53
+ [`bpk-component-horizontal-nav`](/packages/backpack-web/src/bpk-component-horizontal-nav)
54
+ [`bpk-component-icon`](/packages/backpack-web/src/bpk-component-icon)
55
+ [`bpk-component-image`](/packages/backpack-web/src/bpk-component-image)
56
+ [`bpk-component-infinite-scroll`](/packages/backpack-web/src/bpk-component-infinite-scroll)
57
+ [`bpk-component-input`](/packages/backpack-web/src/bpk-component-input)
58
+ [`bpk-component-label`](/packages/backpack-web/src/bpk-component-label)
59
+ [`bpk-component-link`](/packages/backpack-web/src/bpk-component-link)
60
+ [`bpk-component-list`](/packages/backpack-web/src/bpk-component-list)
61
+ [`bpk-component-loading-button`](/packages/backpack-web/src/bpk-component-loading-button)
62
+ [`bpk-component-mobile-scroll-container`](/packages/backpack-web/src/bpk-component-mobile-scroll-container)
63
+ [`bpk-component-modal`](/packages/backpack-web/src/bpk-component-modal)
64
+ [`bpk-component-navigation-bar`](/packages/backpack-web/src/bpk-component-navigation-bar)
65
+ [`bpk-component-nudger`](/packages/backpack-web/src/bpk-component-nudger)
66
+ [`bpk-component-page-indicator`](/packages/backpack-web/src/bpk-component-page-indicator)
67
+ [`bpk-component-pagination`](/packages/backpack-web/src/bpk-component-pagination)
68
+ [`bpk-component-panel`](/packages/backpack-web/src/bpk-component-panel)
69
+ [`bpk-component-phone-input`](/packages/backpack-web/src/bpk-component-phone-input)
70
+ [`bpk-component-popover`](/packages/backpack-web/src/bpk-component-popover)
71
+ [`bpk-component-price-range`](/packages/backpack-web/src/bpk-component-price-range)
72
+ [`bpk-component-progress`](/packages/backpack-web/src/bpk-component-progress)
73
+ [`bpk-component-radio`](/packages/backpack-web/src/bpk-component-radio)
74
+ [`bpk-component-rtl-toggle`](/packages/backpack-web/src/bpk-component-rtl-toggle)
75
+ [`bpk-component-section-list`](/packages/backpack-web/src/bpk-component-section-list)
76
+ [`bpk-component-select`](/packages/backpack-web/src/bpk-component-select)
77
+ [`bpk-component-slider`](/packages/backpack-web/src/bpk-component-slider)
78
+ [`bpk-component-spinner`](/packages/backpack-web/src/bpk-component-spinner)
79
+ [`bpk-component-star-rating`](/packages/backpack-web/src/bpk-component-star-rating)
80
+ [`bpk-component-switch`](/packages/backpack-web/src/bpk-component-switch)
81
+ [`bpk-component-table`](/packages/backpack-web/src/bpk-component-table)
82
+ [`bpk-component-text`](/packages/backpack-web/src/bpk-component-text)
83
+ [`bpk-component-textarea`](/packages/backpack-web/src/bpk-component-textarea)
84
84
  [`bpk-theming`](/packages/bpk-theming)
85
- [`bpk-component-ticket`](/packages/bpk-component-ticket)
86
- [`bpk-component-tooltip`](/packages/bpk-component-tooltip)
85
+ [`bpk-component-ticket`](/packages/backpack-web/src/bpk-component-ticket)
86
+ [`bpk-component-tooltip`](/packages/backpack-web/src/bpk-component-tooltip)
87
87
  [`bpk-react-utils`](/packages/bpk-react-utils)
88
88
  [`bpk-mixins`](/packages/bpk-mixins)
89
89
  [`bpk-stylesheets`](/packages/bpk-stylesheets)
@@ -16,7 +16,7 @@
16
16
  * limitations under the License.
17
17
  */
18
18
 
19
- import { useEffect, useState } from 'react';
19
+ import { createContext, useContext, useEffect, useRef, useState } from 'react';
20
20
  import { LocaleProvider } from '@ark-ui/react';
21
21
  import { ChakraProvider, createSystem, defaultBaseConfig } from '@chakra-ui/react';
22
22
  import createCache from '@emotion/cache';
@@ -31,9 +31,23 @@ import { jsx as _jsx } from "react/jsx-runtime";
31
31
  * See: https://chakra-ui.com/guides/component-bundle-optimization
32
32
  */
33
33
  const bpkSystem = createSystem(defaultBaseConfig, createBpkConfig());
34
- const createBpkEmotionCache = () => createCache({
35
- key: 'bpk'
34
+ const isCypressEnv = () => {
35
+ if (typeof window === 'undefined') return false;
36
+ const win = window;
37
+ if (win.Cypress || win.hotelsDisableEmotionSpeedy) return true;
38
+ try {
39
+ return Boolean(win.parent?.Cypress);
40
+ } catch {
41
+ return false;
42
+ }
43
+ };
44
+ const createBpkEmotionCache = speedy => createCache({
45
+ key: 'css',
46
+ ...(speedy !== undefined && {
47
+ speedy
48
+ })
36
49
  });
50
+ const BpkEmotionCacheContext = /*#__PURE__*/createContext(null);
37
51
  // Fallback locale mapping used when no explicit locale is available on the document.
38
52
  // Maps DOM direction to minimal BCP 47 locales understood by Ark's isRTL() utility.
39
53
  // 'ar-SA' is the minimal RTL locale — Ark only uses it to derive dir='rtl'.
@@ -78,7 +92,15 @@ const getArkLocale = () => {
78
92
  if (lang && getLangDir(lang) === explicitDir) return lang;
79
93
  return FALLBACK_LOCALE_BY_DIRECTION[explicitDir];
80
94
  }
81
- return lang || 'en-US';
95
+ if (lang) {
96
+ try {
97
+ const locale = new Intl.Locale(lang);
98
+ if (locale) return lang;
99
+ } catch {
100
+ // Invalid locale string — fall through to default
101
+ }
102
+ }
103
+ return 'en-US';
82
104
  };
83
105
 
84
106
  // Reactive hook: subscribes to document.documentElement[dir] and [lang] changes
@@ -118,18 +140,33 @@ const useArkLocale = () => {
118
140
  export const BpkProvider = ({
119
141
  children
120
142
  }) => {
121
- // Initialise Emotion before Chakra's inner cache so legacy hydrate consumers
122
- // do not bail on SSR className mismatches.
123
- const [cache] = useState(createBpkEmotionCache);
143
+ const parentCache = useContext(BpkEmotionCacheContext);
144
+ const isNested = parentCache !== null;
145
+ const [isCypress] = useState(isCypressEnv);
146
+ const [ownCache, setOwnCache] = useState(() => isNested ? parentCache : createBpkEmotionCache(isCypress ? false : undefined));
147
+ const hasRecreated = useRef(false);
124
148
  const locale = useArkLocale();
125
- return /*#__PURE__*/_jsx(CacheProvider, {
126
- value: cache,
127
- children: /*#__PURE__*/_jsx(ChakraProvider, {
128
- value: bpkSystem,
129
- children: /*#__PURE__*/_jsx(LocaleProvider, {
130
- locale: locale,
131
- children: children
132
- })
149
+ useEffect(() => {
150
+ if (isNested || !isCypress) return;
151
+ if (hasRecreated.current) return;
152
+ hasRecreated.current = true;
153
+ setOwnCache(createBpkEmotionCache(false));
154
+ }, [isCypress, isNested]);
155
+ const inner = /*#__PURE__*/_jsx(ChakraProvider, {
156
+ value: bpkSystem,
157
+ children: /*#__PURE__*/_jsx(LocaleProvider, {
158
+ locale: locale,
159
+ children: children
160
+ })
161
+ });
162
+ if (isNested) {
163
+ return inner;
164
+ }
165
+ return /*#__PURE__*/_jsx(BpkEmotionCacheContext.Provider, {
166
+ value: ownCache,
167
+ children: /*#__PURE__*/_jsx(CacheProvider, {
168
+ value: ownCache,
169
+ children: inner
133
170
  })
134
171
  });
135
172
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skyscanner/backpack-web",
3
- "version": "42.24.0-dev-v27397479883.1",
3
+ "version": "42.25.0-dev-v27529988690.1",
4
4
  "description": "Backpack Design System web library",
5
5
  "repository": {
6
6
  "type": "git",