@telus-uds/components-base 3.18.0 → 3.20.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.
- package/CHANGELOG.md +32 -1
- package/jest.config.cjs +10 -2
- package/lib/cjs/Box/Box.js +114 -62
- package/lib/cjs/Box/backgroundImageStylesMap.js +136 -28
- package/lib/cjs/Button/ButtonDropdown.js +1 -0
- package/lib/cjs/Carousel/Carousel.js +1 -1
- package/lib/cjs/ExpandCollapseMini/ExpandCollapseMiniControl.js +8 -21
- package/lib/cjs/Link/LinkBase.js +8 -9
- package/lib/cjs/MultiSelectFilter/MultiSelectFilter.js +10 -10
- package/lib/cjs/Spacer/Spacer.js +65 -5
- package/lib/cjs/StepTracker/Step.js +12 -1
- package/lib/cjs/StepTracker/StepTracker.js +15 -4
- package/lib/cjs/TabBar/TabBar.js +4 -2
- package/lib/cjs/TabBar/index.js +2 -0
- package/lib/cjs/Tooltip/Backdrop.js +1 -1
- package/lib/cjs/utils/index.js +17 -1
- package/lib/cjs/utils/isTouchDevice.js +34 -0
- package/lib/cjs/utils/useMediaQuerySpacing.js +121 -0
- package/lib/esm/Box/Box.js +113 -63
- package/lib/esm/Box/backgroundImageStylesMap.js +134 -27
- package/lib/esm/Button/ButtonDropdown.js +1 -0
- package/lib/esm/Carousel/Carousel.js +2 -2
- package/lib/esm/ExpandCollapseMini/ExpandCollapseMiniControl.js +8 -21
- package/lib/esm/Link/LinkBase.js +8 -9
- package/lib/esm/MultiSelectFilter/MultiSelectFilter.js +10 -10
- package/lib/esm/Spacer/Spacer.js +66 -6
- package/lib/esm/StepTracker/Step.js +12 -1
- package/lib/esm/StepTracker/StepTracker.js +15 -4
- package/lib/esm/TabBar/TabBar.js +4 -2
- package/lib/esm/TabBar/index.js +2 -0
- package/lib/esm/Tooltip/Backdrop.js +1 -1
- package/lib/esm/utils/index.js +3 -1
- package/lib/esm/utils/isTouchDevice.js +27 -0
- package/lib/esm/utils/useMediaQuerySpacing.js +116 -0
- package/lib/package.json +2 -2
- package/package.json +2 -2
- package/src/Box/Box.jsx +97 -55
- package/src/Box/backgroundImageStylesMap.js +48 -15
- package/src/Button/ButtonDropdown.jsx +1 -0
- package/src/Carousel/Carousel.jsx +3 -2
- package/src/ExpandCollapseMini/ExpandCollapseMiniControl.jsx +9 -16
- package/src/Link/LinkBase.jsx +11 -9
- package/src/MultiSelectFilter/MultiSelectFilter.jsx +11 -10
- package/src/Spacer/Spacer.jsx +54 -7
- package/src/StepTracker/Step.jsx +47 -27
- package/src/StepTracker/StepTracker.jsx +9 -1
- package/src/TabBar/TabBar.jsx +3 -1
- package/src/TabBar/index.js +3 -0
- package/src/Tooltip/Backdrop.jsx +1 -1
- package/src/utils/index.js +2 -0
- package/src/utils/isTouchDevice.js +34 -0
- package/src/utils/useMediaQuerySpacing.js +124 -0
|
@@ -71,7 +71,6 @@ const selectContainerStyle = (windowHeight, windowWidth) => ({
|
|
|
71
71
|
width: windowWidth
|
|
72
72
|
});
|
|
73
73
|
const TOTAL_COLUMNS = 12;
|
|
74
|
-
const MAX_ITEMS_THRESHOLD = 12;
|
|
75
74
|
const MultiSelectFilter = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) => {
|
|
76
75
|
let {
|
|
77
76
|
label,
|
|
@@ -178,12 +177,13 @@ const MultiSelectFilter = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) =>
|
|
|
178
177
|
});
|
|
179
178
|
const colSizeNotMobile = items.length > rowLimit ? 2 : 1;
|
|
180
179
|
const colSize = viewport !== 'xs' ? colSizeNotMobile : 1;
|
|
181
|
-
|
|
182
|
-
|
|
180
|
+
let rowLength = items.length;
|
|
181
|
+
if (viewport !== 'xs' && colSize === 2) {
|
|
182
|
+
rowLength = Math.ceil(items.length / 2);
|
|
183
|
+
}
|
|
183
184
|
_react.default.useEffect(() => {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
}, [colSize]);
|
|
185
|
+
setMaxWidth(items.length >= rowLimit);
|
|
186
|
+
}, [items.length, rowLimit]);
|
|
187
187
|
_react.default.useEffect(() => setCheckedIds(currentValues ?? []), [currentValues]);
|
|
188
188
|
const uniqueFields = ['id', 'label'];
|
|
189
189
|
if (!(0, _utils.containUniqueFields)(items, uniqueFields)) {
|
|
@@ -430,14 +430,14 @@ const MultiSelectFilter = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) =>
|
|
|
430
430
|
dismissWhenPressedOutside: dismissWhenPressedOutside,
|
|
431
431
|
onClose: onClose,
|
|
432
432
|
overlaidPosition: overlaidPosition,
|
|
433
|
-
maxHeight: items.length
|
|
433
|
+
maxHeight: items.length >= rowLimit ? true : maxHeight,
|
|
434
434
|
maxHeightSize: maxHeightSize,
|
|
435
435
|
maxWidthSize: maxWidthSize,
|
|
436
436
|
minHeight: minHeight,
|
|
437
437
|
minWidth: minWidth,
|
|
438
438
|
tokens: {
|
|
439
439
|
...tokens,
|
|
440
|
-
maxWidth: items.length
|
|
440
|
+
maxWidth: items.length >= rowLimit ? true : maxWidth,
|
|
441
441
|
borderColor: containerBorderColor
|
|
442
442
|
},
|
|
443
443
|
copy: copy,
|
|
@@ -489,9 +489,9 @@ MultiSelectFilter.propTypes = {
|
|
|
489
489
|
*/
|
|
490
490
|
label: _propTypes.default.string.isRequired,
|
|
491
491
|
/**
|
|
492
|
-
* The text for the subtitle
|
|
492
|
+
* The text for the subtitle. Can also be JSX.
|
|
493
493
|
*/
|
|
494
|
-
subtitle: _propTypes.default.string,
|
|
494
|
+
subtitle: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.node]),
|
|
495
495
|
/**
|
|
496
496
|
* An optional unique string may be provided to identify the ButtonDropdown.
|
|
497
497
|
* If not provided, the label is used.
|
package/lib/cjs/Spacer/Spacer.js
CHANGED
|
@@ -6,9 +6,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _react = _interopRequireDefault(require("react"));
|
|
8
8
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
-
var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
|
|
10
9
|
var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
|
|
10
|
+
var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
|
|
11
11
|
var _utils = require("../utils");
|
|
12
|
+
var _useMediaQuerySpacing = _interopRequireDefault(require("../utils/useMediaQuerySpacing"));
|
|
13
|
+
var _useTheme = _interopRequireDefault(require("../ThemeProvider/useTheme"));
|
|
12
14
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
13
15
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
16
|
/**
|
|
@@ -65,13 +67,66 @@ const Spacer = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
|
|
|
65
67
|
let {
|
|
66
68
|
space = 1,
|
|
67
69
|
direction = 'column',
|
|
70
|
+
dataSet,
|
|
68
71
|
...rest
|
|
69
72
|
} = _ref;
|
|
70
|
-
const
|
|
71
|
-
|
|
73
|
+
const {
|
|
74
|
+
themeOptions: {
|
|
75
|
+
enableMediaQueryStyleSheet
|
|
76
|
+
}
|
|
77
|
+
} = (0, _useTheme.default)();
|
|
78
|
+
const {
|
|
79
|
+
sizeByViewport
|
|
80
|
+
} = (0, _useMediaQuerySpacing.default)(space);
|
|
81
|
+
const fallbackSize = (0, _utils.useSpacingScale)(space);
|
|
82
|
+
const sizeStyle = selectSizeStyle(fallbackSize, direction);
|
|
83
|
+
let spacerStyles;
|
|
84
|
+
let dataSetValue = dataSet;
|
|
85
|
+
if (enableMediaQueryStyleSheet) {
|
|
86
|
+
const sizeKey = direction === 'row' ? 'width' : 'height';
|
|
87
|
+
const stylesByViewport = {
|
|
88
|
+
xs: {
|
|
89
|
+
[sizeKey]: sizeByViewport.xs,
|
|
90
|
+
...staticStyles.stretch
|
|
91
|
+
},
|
|
92
|
+
sm: {
|
|
93
|
+
[sizeKey]: sizeByViewport.sm,
|
|
94
|
+
...staticStyles.stretch
|
|
95
|
+
},
|
|
96
|
+
md: {
|
|
97
|
+
[sizeKey]: sizeByViewport.md,
|
|
98
|
+
...staticStyles.stretch
|
|
99
|
+
},
|
|
100
|
+
lg: {
|
|
101
|
+
[sizeKey]: sizeByViewport.lg,
|
|
102
|
+
...staticStyles.stretch
|
|
103
|
+
},
|
|
104
|
+
xl: {
|
|
105
|
+
[sizeKey]: sizeByViewport.xl,
|
|
106
|
+
...staticStyles.stretch
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
const mediaQueryStyles = (0, _utils.createMediaQueryStyles)(stylesByViewport);
|
|
110
|
+
const {
|
|
111
|
+
ids,
|
|
112
|
+
styles
|
|
113
|
+
} = _utils.StyleSheet.create({
|
|
114
|
+
spacer: {
|
|
115
|
+
...mediaQueryStyles
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
spacerStyles = styles.spacer;
|
|
119
|
+
dataSetValue = {
|
|
120
|
+
media: ids.spacer,
|
|
121
|
+
...dataSet
|
|
122
|
+
};
|
|
123
|
+
} else {
|
|
124
|
+
spacerStyles = [staticStyles.stretch, sizeStyle];
|
|
125
|
+
}
|
|
72
126
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
73
127
|
ref: ref,
|
|
74
|
-
style:
|
|
128
|
+
style: spacerStyles,
|
|
129
|
+
dataSet: dataSetValue,
|
|
75
130
|
...selectProps(rest)
|
|
76
131
|
});
|
|
77
132
|
});
|
|
@@ -90,7 +145,12 @@ Spacer.propTypes = {
|
|
|
90
145
|
* - `'column'` (default) applies space vertically; has a fixed height and not width.
|
|
91
146
|
* - `'row'` applies space horizontally; has a fixed width and not height.
|
|
92
147
|
*/
|
|
93
|
-
direction: _propTypes.default.oneOf(['column', 'row'])
|
|
148
|
+
direction: _propTypes.default.oneOf(['column', 'row']),
|
|
149
|
+
/**
|
|
150
|
+
* Data attributes to be applied to the element. When media query stylesheet is enabled,
|
|
151
|
+
* this will include media query IDs for responsive styling.
|
|
152
|
+
*/
|
|
153
|
+
dataSet: _propTypes.default.object
|
|
94
154
|
};
|
|
95
155
|
const staticStyles = _StyleSheet.default.create({
|
|
96
156
|
stretch: {
|
|
@@ -157,6 +157,13 @@ const getStepTestID = (isCompleted, isCurrent) => {
|
|
|
157
157
|
}
|
|
158
158
|
return testID;
|
|
159
159
|
};
|
|
160
|
+
const selectBarContainerStyles = (themeTokens, isCompleted, isCurrent) => ({
|
|
161
|
+
backgroundColor: isCompleted ? themeTokens.barCompletedBackgroundColor : themeTokens.barBackgroundColor,
|
|
162
|
+
height: themeTokens.barHeight,
|
|
163
|
+
...(isCurrent && {
|
|
164
|
+
backgroundColor: themeTokens.barCurrentBackgroundColor
|
|
165
|
+
})
|
|
166
|
+
});
|
|
160
167
|
|
|
161
168
|
/**
|
|
162
169
|
* A single step of a StepTracker.
|
|
@@ -169,6 +176,7 @@ const Step = /*#__PURE__*/_react.default.forwardRef((_ref8, ref) => {
|
|
|
169
176
|
stepCount = 0,
|
|
170
177
|
stepIndex = 0,
|
|
171
178
|
tokens,
|
|
179
|
+
isBarVariant,
|
|
172
180
|
...rest
|
|
173
181
|
} = _ref8;
|
|
174
182
|
const {
|
|
@@ -197,7 +205,10 @@ const Step = /*#__PURE__*/_react.default.forwardRef((_ref8, ref) => {
|
|
|
197
205
|
accessibilityCurrent: status === stepIndex,
|
|
198
206
|
ref: ref,
|
|
199
207
|
...selectProps(rest),
|
|
200
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.
|
|
208
|
+
children: [isBarVariant && /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
209
|
+
style: selectBarContainerStyles(themeTokens, isCompleted, isCurrent),
|
|
210
|
+
testID: getStepTestID(isCompleted, isCurrent)
|
|
211
|
+
}), !isBarVariant && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_StackView.default, {
|
|
201
212
|
direction: "row",
|
|
202
213
|
space: 0,
|
|
203
214
|
tokens: {
|
|
@@ -19,6 +19,7 @@ var _Step = _interopRequireDefault(require("./Step"));
|
|
|
19
19
|
var _dictionary = _interopRequireDefault(require("./dictionary"));
|
|
20
20
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
21
21
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
22
|
+
const STYLE_BAR_VARIANT = 'bar';
|
|
22
23
|
const [selectProps, selectedSystemPropTypes] = (0, _utils.selectSystemProps)([_utils.a11yProps, _utils.viewProps]);
|
|
23
24
|
const selectContainerStyles = _ref => {
|
|
24
25
|
let {
|
|
@@ -59,6 +60,14 @@ const selectStepTrackerLabelStyles = (_ref3, themeOptions) => {
|
|
|
59
60
|
themeOptions
|
|
60
61
|
});
|
|
61
62
|
};
|
|
63
|
+
const selectStepsContainerStyles = _ref4 => {
|
|
64
|
+
let {
|
|
65
|
+
barGap
|
|
66
|
+
} = _ref4;
|
|
67
|
+
return {
|
|
68
|
+
gap: barGap
|
|
69
|
+
};
|
|
70
|
+
};
|
|
62
71
|
|
|
63
72
|
/**
|
|
64
73
|
* StepTracker component shows the current position in a sequence of steps.
|
|
@@ -92,7 +101,7 @@ const selectStepTrackerLabelStyles = (_ref3, themeOptions) => {
|
|
|
92
101
|
* - `accessibilityValue.text` (`aria-valuetext`): `<Current Step Label>`,
|
|
93
102
|
*
|
|
94
103
|
*/
|
|
95
|
-
const StepTracker = /*#__PURE__*/_react.default.forwardRef((
|
|
104
|
+
const StepTracker = /*#__PURE__*/_react.default.forwardRef((_ref5, ref) => {
|
|
96
105
|
let {
|
|
97
106
|
current = 0,
|
|
98
107
|
copy = 'en',
|
|
@@ -101,7 +110,8 @@ const StepTracker = /*#__PURE__*/_react.default.forwardRef((_ref4, ref) => {
|
|
|
101
110
|
tokens,
|
|
102
111
|
variant,
|
|
103
112
|
...rest
|
|
104
|
-
} =
|
|
113
|
+
} = _ref5;
|
|
114
|
+
const isBarVariant = variant?.style === STYLE_BAR_VARIANT;
|
|
105
115
|
const viewport = (0, _ViewportProvider.useViewport)();
|
|
106
116
|
const {
|
|
107
117
|
showStepTrackerLabel,
|
|
@@ -147,7 +157,7 @@ const StepTracker = /*#__PURE__*/_react.default.forwardRef((_ref4, ref) => {
|
|
|
147
157
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_StackView.default, {
|
|
148
158
|
space: 0,
|
|
149
159
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
150
|
-
style: staticStyles.stepsContainer,
|
|
160
|
+
style: [staticStyles.stepsContainer, selectStepsContainerStyles(themeTokens)],
|
|
151
161
|
accessibilityRole: stepsContainerAccessibilityRole,
|
|
152
162
|
children: steps.map((label, index) => {
|
|
153
163
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Step.default, {
|
|
@@ -158,7 +168,8 @@ const StepTracker = /*#__PURE__*/_react.default.forwardRef((_ref4, ref) => {
|
|
|
158
168
|
stepCount: steps.length,
|
|
159
169
|
tokens: themeTokens,
|
|
160
170
|
accessibilityRole: stepAccessibilityRole,
|
|
161
|
-
accessibilityCurrent: current === index && _Platform.default.OS === 'web' && 'step'
|
|
171
|
+
accessibilityCurrent: current === index && _Platform.default.OS === 'web' && 'step',
|
|
172
|
+
isBarVariant: isBarVariant
|
|
162
173
|
}, label);
|
|
163
174
|
})
|
|
164
175
|
}), showStepTrackerLabel && /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
package/lib/cjs/TabBar/TabBar.js
CHANGED
|
@@ -91,7 +91,8 @@ const TabBar = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) => {
|
|
|
91
91
|
iconActive: item.iconActive,
|
|
92
92
|
onPress: () => handlePress(item.id),
|
|
93
93
|
id: `tab-item-${index}`,
|
|
94
|
-
accessibilityRole: "tablist"
|
|
94
|
+
accessibilityRole: "tablist",
|
|
95
|
+
tokens: item.tokens
|
|
95
96
|
}, item.id))
|
|
96
97
|
})
|
|
97
98
|
});
|
|
@@ -105,7 +106,8 @@ TabBar.propTypes = {
|
|
|
105
106
|
icon: _propTypes.default.node,
|
|
106
107
|
iconActive: _propTypes.default.node,
|
|
107
108
|
label: _propTypes.default.string.isRequired,
|
|
108
|
-
href: _propTypes.default.string
|
|
109
|
+
href: _propTypes.default.string,
|
|
110
|
+
tokens: (0, _utils.getTokensPropType)('TabBarItem')
|
|
109
111
|
})).isRequired,
|
|
110
112
|
/** Id of the initially selected item. */
|
|
111
113
|
initiallySelectedItem: _propTypes.default.number,
|
package/lib/cjs/TabBar/index.js
CHANGED
|
@@ -5,5 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _TabBar = _interopRequireDefault(require("./TabBar"));
|
|
8
|
+
var _TabBarItem = _interopRequireDefault(require("./TabBarItem"));
|
|
8
9
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
_TabBar.default.Item = _TabBarItem.default;
|
|
9
11
|
var _default = exports.default = _TabBar.default;
|
package/lib/cjs/utils/index.js
CHANGED
|
@@ -8,6 +8,7 @@ var _exportNames = {
|
|
|
8
8
|
useCopy: true,
|
|
9
9
|
useHash: true,
|
|
10
10
|
useSpacingScale: true,
|
|
11
|
+
useMediaQuerySpacing: true,
|
|
11
12
|
useResponsiveProp: true,
|
|
12
13
|
useOverlaidPosition: true,
|
|
13
14
|
useSafeLayoutEffect: true,
|
|
@@ -21,7 +22,8 @@ var _exportNames = {
|
|
|
21
22
|
convertFromMegaByteToByte: true,
|
|
22
23
|
formatImageSource: true,
|
|
23
24
|
getSpacingScale: true,
|
|
24
|
-
useVariants: true
|
|
25
|
+
useVariants: true,
|
|
26
|
+
isTouchDevice: true
|
|
25
27
|
};
|
|
26
28
|
Object.defineProperty(exports, "BaseView", {
|
|
27
29
|
enumerable: true,
|
|
@@ -65,6 +67,12 @@ Object.defineProperty(exports, "info", {
|
|
|
65
67
|
return _info.default;
|
|
66
68
|
}
|
|
67
69
|
});
|
|
70
|
+
Object.defineProperty(exports, "isTouchDevice", {
|
|
71
|
+
enumerable: true,
|
|
72
|
+
get: function () {
|
|
73
|
+
return _isTouchDevice.default;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
68
76
|
Object.defineProperty(exports, "transformGradient", {
|
|
69
77
|
enumerable: true,
|
|
70
78
|
get: function () {
|
|
@@ -83,6 +91,12 @@ Object.defineProperty(exports, "useHash", {
|
|
|
83
91
|
return _useHash.default;
|
|
84
92
|
}
|
|
85
93
|
});
|
|
94
|
+
Object.defineProperty(exports, "useMediaQuerySpacing", {
|
|
95
|
+
enumerable: true,
|
|
96
|
+
get: function () {
|
|
97
|
+
return _useMediaQuerySpacing.default;
|
|
98
|
+
}
|
|
99
|
+
});
|
|
86
100
|
Object.defineProperty(exports, "useOverlaidPosition", {
|
|
87
101
|
enumerable: true,
|
|
88
102
|
get: function () {
|
|
@@ -219,6 +233,7 @@ var _info = _interopRequireDefault(require("./info"));
|
|
|
219
233
|
var _useCopy = _interopRequireDefault(require("./useCopy"));
|
|
220
234
|
var _useHash = _interopRequireDefault(require("./useHash"));
|
|
221
235
|
var _useSpacingScale = _interopRequireDefault(require("./useSpacingScale"));
|
|
236
|
+
var _useMediaQuerySpacing = _interopRequireDefault(require("./useMediaQuerySpacing"));
|
|
222
237
|
var _useResponsiveProp = _interopRequireWildcard(require("./useResponsiveProp"));
|
|
223
238
|
Object.keys(_useResponsiveProp).forEach(function (key) {
|
|
224
239
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -256,6 +271,7 @@ var _convertFromMegaByteToByte = _interopRequireDefault(require("./convertFromMe
|
|
|
256
271
|
var _formatImageSource = _interopRequireDefault(require("./formatImageSource"));
|
|
257
272
|
var _getSpacingScale = _interopRequireDefault(require("./getSpacingScale"));
|
|
258
273
|
var _useVariants = _interopRequireDefault(require("./useVariants"));
|
|
274
|
+
var _isTouchDevice = _interopRequireDefault(require("./isTouchDevice"));
|
|
259
275
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
260
276
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
261
277
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
/**
|
|
10
|
+
* Determines if the current device supports touch interactions
|
|
11
|
+
*
|
|
12
|
+
* @returns {boolean} True if the device supports touch, false otherwise
|
|
13
|
+
*/
|
|
14
|
+
const isTouchDevice = () => {
|
|
15
|
+
if (_Platform.default.OS !== 'web') {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
if (typeof window !== 'undefined') {
|
|
19
|
+
if ('ontouchstart' in window) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
if (window.navigator && window.navigator.maxTouchPoints > 0) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
if (window.navigator && window.navigator.msMaxTouchPoints > 0) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
if (window.matchMedia && window.matchMedia('(pointer: coarse)').matches) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return false;
|
|
33
|
+
};
|
|
34
|
+
var _default = exports.default = isTouchDevice;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _ThemeProvider = require("../ThemeProvider");
|
|
8
|
+
var _useResponsiveProp = require("./useResponsiveProp");
|
|
9
|
+
/**
|
|
10
|
+
* @typedef {import('@telus-uds/system-constants/viewports').Viewport} Viewport
|
|
11
|
+
* @typedef {import('./props/spacingProps.js').SpacingValue} SpacingValue
|
|
12
|
+
* @typedef {import('./props/spacingProps.js').SpacingIndex} SpacingIndex
|
|
13
|
+
* @typedef {import('./props/spacingProps.js').SpacingObject} SpacingObject
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* A utility hook that simplifies implementing media query-based responsive spacing.
|
|
18
|
+
*
|
|
19
|
+
* This hook handles the complexity of:
|
|
20
|
+
* - Detecting if a space value is responsive (has viewport keys)
|
|
21
|
+
* - Fetching theme tokens for each viewport
|
|
22
|
+
* - Resolving the correct space index for each viewport
|
|
23
|
+
* - Extracting actual pixel values from theme tokens
|
|
24
|
+
*
|
|
25
|
+
* ## Usage
|
|
26
|
+
*
|
|
27
|
+
* ```jsx
|
|
28
|
+
* const { sizeByViewport } = useMediaQuerySpacing(space, 'spacingScale')
|
|
29
|
+
*
|
|
30
|
+
* // Use sizeByViewport to create media query styles
|
|
31
|
+
* const stylesByViewport = {
|
|
32
|
+
* xs: { padding: sizeByViewport.xs },
|
|
33
|
+
* sm: { padding: sizeByViewport.sm },
|
|
34
|
+
* md: { padding: sizeByViewport.md },
|
|
35
|
+
* lg: { padding: sizeByViewport.lg },
|
|
36
|
+
* xl: { padding: sizeByViewport.xl }
|
|
37
|
+
* }
|
|
38
|
+
* const mediaQueryStyles = createMediaQueryStyles(stylesByViewport)
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* ## Parameters
|
|
42
|
+
*
|
|
43
|
+
* @param {SpacingValue} spaceValue - A spacing value (number or responsive object with viewport keys)
|
|
44
|
+
* @param {string} tokenKey - The theme token key to use (e.g., 'spacingScale', 'Typography')
|
|
45
|
+
* @param {object} [tokens={}] - Additional tokens to pass to useThemeTokens
|
|
46
|
+
* @param {object} [variant={}] - Variant to pass to useThemeTokens
|
|
47
|
+
*
|
|
48
|
+
* ## Returns
|
|
49
|
+
*
|
|
50
|
+
* @returns {{
|
|
51
|
+
* spaceIndexByViewport: { xs: number, sm: number, md: number, lg: number, xl: number },
|
|
52
|
+
* sizeByViewport: { xs: number, sm: number, md: number, lg: number, xl: number },
|
|
53
|
+
* tokensByViewport: { xs: object, sm: object, md: object, lg: object, xl: object }
|
|
54
|
+
* }}
|
|
55
|
+
*
|
|
56
|
+
* - `spaceIndexByViewport`: The resolved space index for each viewport
|
|
57
|
+
* - `sizeByViewport`: The actual pixel/number values for each viewport
|
|
58
|
+
* - `tokensByViewport`: The full theme tokens for each viewport (for advanced use cases)
|
|
59
|
+
*/
|
|
60
|
+
const useMediaQuerySpacing = function (spaceValue) {
|
|
61
|
+
let tokenKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'spacingScale';
|
|
62
|
+
let tokens = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
63
|
+
let variant = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
64
|
+
const isResponsive = typeof spaceValue === 'object' && spaceValue !== null && !spaceValue.space && !spaceValue.options;
|
|
65
|
+
const getSpaceIndex = viewport => {
|
|
66
|
+
if (isResponsive) {
|
|
67
|
+
return (0, _useResponsiveProp.resolveResponsiveProp)(spaceValue, viewport);
|
|
68
|
+
}
|
|
69
|
+
if (typeof spaceValue === 'number') {
|
|
70
|
+
return spaceValue;
|
|
71
|
+
}
|
|
72
|
+
return spaceValue?.space ?? 1;
|
|
73
|
+
};
|
|
74
|
+
const spaceIndexByViewport = {
|
|
75
|
+
xs: getSpaceIndex('xs'),
|
|
76
|
+
sm: getSpaceIndex('sm'),
|
|
77
|
+
md: getSpaceIndex('md'),
|
|
78
|
+
lg: getSpaceIndex('lg'),
|
|
79
|
+
xl: getSpaceIndex('xl')
|
|
80
|
+
};
|
|
81
|
+
const tokensXs = (0, _ThemeProvider.useThemeTokens)(tokenKey, tokens, variant, {
|
|
82
|
+
space: spaceIndexByViewport.xs,
|
|
83
|
+
viewport: 'xs'
|
|
84
|
+
});
|
|
85
|
+
const tokensSm = (0, _ThemeProvider.useThemeTokens)(tokenKey, tokens, variant, {
|
|
86
|
+
space: spaceIndexByViewport.sm,
|
|
87
|
+
viewport: 'sm'
|
|
88
|
+
});
|
|
89
|
+
const tokensMd = (0, _ThemeProvider.useThemeTokens)(tokenKey, tokens, variant, {
|
|
90
|
+
space: spaceIndexByViewport.md,
|
|
91
|
+
viewport: 'md'
|
|
92
|
+
});
|
|
93
|
+
const tokensLg = (0, _ThemeProvider.useThemeTokens)(tokenKey, tokens, variant, {
|
|
94
|
+
space: spaceIndexByViewport.lg,
|
|
95
|
+
viewport: 'lg'
|
|
96
|
+
});
|
|
97
|
+
const tokensXl = (0, _ThemeProvider.useThemeTokens)(tokenKey, tokens, variant, {
|
|
98
|
+
space: spaceIndexByViewport.xl,
|
|
99
|
+
viewport: 'xl'
|
|
100
|
+
});
|
|
101
|
+
const sizeByViewport = {
|
|
102
|
+
xs: tokensXs.size ?? 0,
|
|
103
|
+
sm: tokensSm.size ?? 0,
|
|
104
|
+
md: tokensMd.size ?? 0,
|
|
105
|
+
lg: tokensLg.size ?? 0,
|
|
106
|
+
xl: tokensXl.size ?? 0
|
|
107
|
+
};
|
|
108
|
+
const tokensByViewport = {
|
|
109
|
+
xs: tokensXs,
|
|
110
|
+
sm: tokensSm,
|
|
111
|
+
md: tokensMd,
|
|
112
|
+
lg: tokensLg,
|
|
113
|
+
xl: tokensXl
|
|
114
|
+
};
|
|
115
|
+
return {
|
|
116
|
+
spaceIndexByViewport,
|
|
117
|
+
sizeByViewport,
|
|
118
|
+
tokensByViewport
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
var _default = exports.default = useMediaQuerySpacing;
|