@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 +58 -58
- package/bpk-component-layout/src/BpkProvider.js +52 -15
- package/package.json +1 -1
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
|
|
35
|
-
|
|
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
|
-
|
|
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
|
-
|
|
122
|
-
|
|
123
|
-
const [
|
|
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
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
};
|