@prokodo/ui 0.0.49 → 0.0.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/accordion/{Accordion.module.scss.js → Accordion.base.module.scss.js} +2 -8
- package/dist/components/accordion/Accordion.effects.client.js +16 -0
- package/dist/components/accordion/Accordion.effects.module.scss.js +8 -0
- package/dist/components/accordion/Accordion.view.js +84 -80
- package/dist/components/animated/Animated.module.scss.js +2 -8
- package/dist/components/avatar/Avatar.module.scss.js +2 -8
- package/dist/components/button/Button.module.scss.js +2 -8
- package/dist/components/calendly/Calendly.client.js +98 -22
- package/dist/components/calendly/Calendly.server.js +3 -2
- package/dist/components/calendly/Calendly.view.js +2 -1
- package/dist/components/card/{Card.module.scss.js → Card.base.module.scss.js} +2 -12
- package/dist/components/card/Card.effects.client.js +16 -0
- package/dist/components/card/Card.effects.module.scss.js +14 -0
- package/dist/components/card/Card.view.js +15 -4
- package/dist/components/carousel/Carousel.client.js +44 -20
- package/dist/components/carousel/Carousel.lazy.js +1 -1
- package/dist/components/carousel/Carousel.module.scss.js +2 -8
- package/dist/components/chip/Chip.module.scss.js +2 -8
- package/dist/components/datePicker/DatePicker.client.js +52 -51
- package/dist/components/datePicker/DatePicker.view.js +14 -3
- package/dist/components/dialog/Dialog.module.scss.js +2 -8
- package/dist/components/drawer/{Drawer.module.scss.js → Drawer.base.module.scss.js} +27 -32
- package/dist/components/drawer/Drawer.client.js +19 -2
- package/dist/components/drawer/Drawer.effects.client.js +16 -0
- package/dist/components/drawer/Drawer.effects.module.scss.js +29 -0
- package/dist/components/drawer/Drawer.server.js +0 -1
- package/dist/components/drawer/Drawer.view.js +44 -40
- package/dist/components/dynamic-list/DynamicList.module.scss.js +2 -8
- package/dist/components/form/Form.client.js +131 -54
- package/dist/components/form/Form.module.scss.js +2 -8
- package/dist/components/form/FormField.module.scss.js +2 -8
- package/dist/components/form/FormResponse.module.scss.js +2 -8
- package/dist/components/grid/Grid.module.scss.js +2 -8
- package/dist/components/grid/GridRow.module.scss.js +2 -8
- package/dist/components/headline/{Headline.module.scss.js → Headline.base.module.scss.js} +2 -15
- package/dist/components/headline/Headline.effects.client.js +14 -0
- package/dist/components/headline/Headline.effects.module.scss.js +13 -0
- package/dist/components/headline/Headline.js +28 -18
- package/dist/components/icon/Icon.module.scss.js +2 -8
- package/dist/components/image/Image.module.scss.js +2 -8
- package/dist/components/image-text/ImageText.module.scss.js +2 -8
- package/dist/components/input/Input.client.js +12 -1
- package/dist/components/input/Input.module.scss.js +3 -8
- package/dist/components/input/Input.view.js +10 -2
- package/dist/components/inputOTP/InputOTP.js +124 -41
- package/dist/components/inputOTP/InputOTP.module.scss.js +2 -8
- package/dist/components/label/Label.module.scss.js +2 -8
- package/dist/components/link/Link.module.scss.js +2 -8
- package/dist/components/list/List.module.scss.js +2 -8
- package/dist/components/loading/Loading.client.js +68 -0
- package/dist/components/loading/Loading.js +9 -55
- package/dist/components/loading/Loading.lazy.js +15 -0
- package/dist/components/loading/Loading.server.js +16 -0
- package/dist/components/loading/Loading.view.js +124 -0
- package/dist/components/lottie/Lottie.module.scss.js +2 -8
- package/dist/components/post-item/PostItem.module.scss.js +2 -8
- package/dist/components/post-item/PostItemAuthor.module.scss.js +2 -8
- package/dist/components/post-teaser/PostTeaser.module.scss.js +2 -8
- package/dist/components/post-widget/PostWidget.module.scss.js +2 -8
- package/dist/components/post-widget-carousel/PostWidgetCarousel.module.scss.js +2 -8
- package/dist/components/progressBar/ProgressBar.module.scss.js +1 -7
- package/dist/components/quote/Quote.module.scss.js +2 -8
- package/dist/components/rich-text/RichText.client.js +54 -23
- package/dist/components/rich-text/RichText.js +1 -1
- package/dist/components/rich-text/RichText.lazy.js +1 -1
- package/dist/components/rich-text/RichText.module.scss.js +4 -8
- package/dist/components/rich-text/RichText.server.js +2 -1
- package/dist/components/select/Select.module.scss.js +2 -8
- package/dist/components/sidenav/SideNav.module.scss.js +2 -8
- package/dist/components/skeleton/{Skeleton.module.scss.js → Skeleton.base.module.scss.js} +2 -8
- package/dist/components/skeleton/Skeleton.effects.client.js +16 -0
- package/dist/components/skeleton/Skeleton.effects.module.scss.js +7 -0
- package/dist/components/skeleton/Skeleton.js +21 -18
- package/dist/components/slider/Slider.client.js +70 -30
- package/dist/components/slider/Slider.module.scss.js +2 -8
- package/dist/components/snackbar/Snackbar.module.scss.js +2 -8
- package/dist/components/stepper/Stepper.module.scss.js +2 -8
- package/dist/components/switch/Switch.module.scss.js +2 -8
- package/dist/components/table/Table.module.scss.js +2 -8
- package/dist/components/table/TableCell.module.scss.js +2 -8
- package/dist/components/teaser/Teaser.module.scss.js +2 -8
- package/dist/constants/project.js +1 -1
- package/dist/hooks/useResponsiveValue.js +123 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/components/accordion/Accordion.effects.client.d.ts +5 -0
- package/dist/types/components/calendly/Calendly.server.d.ts +1 -1
- package/dist/types/components/calendly/Calendly.view.d.ts +1 -1
- package/dist/types/components/card/Card.effects.client.d.ts +7 -0
- package/dist/types/components/carousel/Carousel.d.ts +2 -0
- package/dist/types/components/carousel/Carousel.lazy.d.ts +2 -0
- package/dist/types/components/carousel/Carousel.model.d.ts +14 -0
- package/dist/types/components/datePicker/DatePicker.view.d.ts +3 -5
- package/dist/types/components/drawer/Drawer.effects.client.d.ts +5 -0
- package/dist/types/components/headline/Headline.effects.client.d.ts +1 -0
- package/dist/types/components/input/Input.client.d.ts +1 -1
- package/dist/types/components/input/Input.view.d.ts +1 -1
- package/dist/types/components/loading/Loading.client.d.ts +4 -0
- package/dist/types/components/loading/Loading.d.ts +4 -2
- package/dist/types/components/loading/Loading.lazy.d.ts +5 -0
- package/dist/types/components/loading/Loading.model.d.ts +16 -1
- package/dist/types/components/loading/Loading.server.d.ts +4 -0
- package/dist/types/components/loading/Loading.view.d.ts +6 -0
- package/dist/types/components/loading/index.d.ts +2 -2
- package/dist/types/components/rich-text/RichText.d.ts +1 -1
- package/dist/types/components/rich-text/RichText.lazy.d.ts +1 -1
- package/dist/types/components/rich-text/RichText.model.d.ts +3 -3
- package/dist/types/components/skeleton/Skeleton.effects.client.d.ts +5 -0
- package/dist/types/components/slider/Slider.model.d.ts +1 -0
- package/dist/types/hooks/useResponsiveValue.d.ts +21 -0
- package/dist/ui.css +1078 -1543
- package/package.json +1 -1
- package/dist/components/loading/Loading.module.scss.js +0 -22
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
|
-
import { memo, useState, useEffect
|
|
5
|
+
import { memo, useCallback, useMemo, useState, useEffect } from "react";
|
|
6
6
|
import { SliderView } from "./Slider.view.js";
|
|
7
7
|
function SliderClient(props) {
|
|
8
8
|
const {
|
|
@@ -11,41 +11,81 @@ function SliderClient(props) {
|
|
|
11
11
|
onFocus,
|
|
12
12
|
onBlur,
|
|
13
13
|
min = 0,
|
|
14
|
-
max = 100
|
|
14
|
+
max = 100,
|
|
15
|
+
step = 1,
|
|
16
|
+
marks = false,
|
|
17
|
+
snap = "none"
|
|
15
18
|
} = props;
|
|
16
|
-
const
|
|
19
|
+
const clamp = useCallback((v) => Math.min(Math.max(v, min), max), [min, max]);
|
|
20
|
+
const markValues = useMemo(() => {
|
|
21
|
+
if (Array.isArray(marks)) {
|
|
22
|
+
return [...new Set(marks.map((m) => m.value))].filter((v) => typeof v === "number").sort((a, b) => a - b);
|
|
23
|
+
}
|
|
24
|
+
if (marks === true) {
|
|
25
|
+
const pts = [];
|
|
26
|
+
if (step > 0) {
|
|
27
|
+
for (let v = min; v <= max; v += step) pts.push(+v.toFixed(4));
|
|
28
|
+
if (pts.length === 0 || pts[pts.length - 1] !== max) pts.push(max);
|
|
29
|
+
}
|
|
30
|
+
return pts;
|
|
31
|
+
}
|
|
32
|
+
return [];
|
|
33
|
+
}, [marks, min, max, step]);
|
|
34
|
+
const snapToStep = useCallback(
|
|
35
|
+
(v) => clamp(step > 0 ? Math.round((v - min) / step) * step + min : v),
|
|
36
|
+
[clamp, step, min]
|
|
37
|
+
);
|
|
38
|
+
const snapToMarks = useCallback((v) => {
|
|
39
|
+
const c = clamp(v);
|
|
40
|
+
const arr = markValues;
|
|
41
|
+
if (arr.length === 0) return snapToStep(c);
|
|
42
|
+
let best = c, bestD = Infinity;
|
|
43
|
+
for (const mv of arr) {
|
|
44
|
+
const d = Math.abs(c - mv);
|
|
45
|
+
if (d < bestD) {
|
|
46
|
+
best = mv;
|
|
47
|
+
bestD = d;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return clamp(best);
|
|
51
|
+
}, [clamp, markValues, snapToStep]);
|
|
52
|
+
const quantize = useCallback((v) => {
|
|
53
|
+
switch (snap) {
|
|
54
|
+
case "step":
|
|
55
|
+
return snapToStep(v);
|
|
56
|
+
case "marks":
|
|
57
|
+
return snapToMarks(v);
|
|
58
|
+
default:
|
|
59
|
+
return clamp(v);
|
|
60
|
+
}
|
|
61
|
+
}, [snap, snapToMarks, snapToStep, clamp]);
|
|
62
|
+
const initial = useMemo(() => {
|
|
17
63
|
const numeric = typeof controlledValue === "number" ? controlledValue : typeof controlledValue === "string" ? Number(controlledValue) : min;
|
|
18
|
-
return
|
|
19
|
-
});
|
|
64
|
+
return quantize(numeric);
|
|
65
|
+
}, [controlledValue, min, quantize]);
|
|
66
|
+
const [internalValue, setInternalValue] = useState(initial);
|
|
20
67
|
useEffect(() => {
|
|
21
68
|
if (controlledValue !== void 0) {
|
|
22
|
-
const
|
|
23
|
-
|
|
69
|
+
const n = typeof controlledValue === "number" ? controlledValue : typeof controlledValue === "string" ? Number(controlledValue) : min;
|
|
70
|
+
const q = quantize(n);
|
|
71
|
+
setInternalValue((prev) => prev === q ? prev : q);
|
|
24
72
|
}
|
|
25
|
-
}, [controlledValue, min,
|
|
73
|
+
}, [controlledValue, min, quantize]);
|
|
26
74
|
const [isFocused, setIsFocused] = useState(false);
|
|
27
|
-
const handleFocus = useCallback(
|
|
28
|
-
(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
);
|
|
41
|
-
const handleChange = useCallback(
|
|
42
|
-
(e) => {
|
|
43
|
-
const newVal = Number(e.target.value);
|
|
44
|
-
setInternalValue(newVal);
|
|
45
|
-
onChange == null ? void 0 : onChange(e, newVal);
|
|
46
|
-
},
|
|
47
|
-
[onChange]
|
|
48
|
-
);
|
|
75
|
+
const handleFocus = useCallback((e) => {
|
|
76
|
+
setIsFocused(true);
|
|
77
|
+
onFocus == null ? void 0 : onFocus(e);
|
|
78
|
+
}, [onFocus]);
|
|
79
|
+
const handleBlur = useCallback((e) => {
|
|
80
|
+
setIsFocused(false);
|
|
81
|
+
onBlur == null ? void 0 : onBlur(e);
|
|
82
|
+
}, [onBlur]);
|
|
83
|
+
const handleChange = useCallback((e) => {
|
|
84
|
+
const raw = Number(e.currentTarget.value);
|
|
85
|
+
const q = quantize(raw);
|
|
86
|
+
setInternalValue((prev) => prev === q ? prev : q);
|
|
87
|
+
onChange == null ? void 0 : onChange(e, q);
|
|
88
|
+
}, [onChange, quantize]);
|
|
49
89
|
return /* @__PURE__ */ jsx(
|
|
50
90
|
SliderView,
|
|
51
91
|
{
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
const gradientMove = "gradientMove";
|
|
2
|
-
const fadeInKeyframe = "fadeInKeyframe";
|
|
3
1
|
const styles = {
|
|
4
2
|
"prokodo-Slider": "prokodo-Slider",
|
|
5
3
|
"prokodo-Slider__label": "prokodo-Slider__label",
|
|
@@ -13,12 +11,8 @@ const styles = {
|
|
|
13
11
|
"prokodo-Slider__input": "prokodo-Slider__input",
|
|
14
12
|
"prokodo-Slider__thumb": "prokodo-Slider__thumb",
|
|
15
13
|
"prokodo-Slider__thumb--focused": "prokodo-Slider__thumb--focused",
|
|
16
|
-
"prokodo-Slider__valueText": "prokodo-Slider__valueText"
|
|
17
|
-
gradientMove,
|
|
18
|
-
fadeInKeyframe
|
|
14
|
+
"prokodo-Slider__valueText": "prokodo-Slider__valueText"
|
|
19
15
|
};
|
|
20
16
|
export {
|
|
21
|
-
styles as default
|
|
22
|
-
fadeInKeyframe,
|
|
23
|
-
gradientMove
|
|
17
|
+
styles as default
|
|
24
18
|
};
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
const gradientMove = "gradientMove";
|
|
2
|
-
const fadeInKeyframe = "fadeInKeyframe";
|
|
3
1
|
const styles = {
|
|
4
2
|
"prokodo-Snackbar": "prokodo-Snackbar",
|
|
5
3
|
"prokodo-Snackbar--success": "prokodo-Snackbar--success",
|
|
@@ -19,12 +17,8 @@ const styles = {
|
|
|
19
17
|
"prokodo-SnackbarProvider__snackbar--is-top": "prokodo-SnackbarProvider__snackbar--is-top",
|
|
20
18
|
"prokodo-SnackbarProvider__snackbar--is-bottom": "prokodo-SnackbarProvider__snackbar--is-bottom",
|
|
21
19
|
"prokodo-SnackbarProvider__snackbar--is-left": "prokodo-SnackbarProvider__snackbar--is-left",
|
|
22
|
-
"prokodo-SnackbarProvider__snackbar--is-right": "prokodo-SnackbarProvider__snackbar--is-right"
|
|
23
|
-
gradientMove,
|
|
24
|
-
fadeInKeyframe
|
|
20
|
+
"prokodo-SnackbarProvider__snackbar--is-right": "prokodo-SnackbarProvider__snackbar--is-right"
|
|
25
21
|
};
|
|
26
22
|
export {
|
|
27
|
-
styles as default
|
|
28
|
-
fadeInKeyframe,
|
|
29
|
-
gradientMove
|
|
23
|
+
styles as default
|
|
30
24
|
};
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
const gradientMove = "gradientMove";
|
|
2
|
-
const fadeInKeyframe = "fadeInKeyframe";
|
|
3
1
|
const styles = {
|
|
4
2
|
"prokodo-Stepper": "prokodo-Stepper",
|
|
5
3
|
"prokodo-Stepper__step": "prokodo-Stepper__step",
|
|
@@ -15,12 +13,8 @@ const styles = {
|
|
|
15
13
|
"prokodo-Stepper__label": "prokodo-Stepper__label",
|
|
16
14
|
"prokodo-Stepper__label--is-active": "prokodo-Stepper__label--is-active",
|
|
17
15
|
"prokodo-Stepper__label__text": "prokodo-Stepper__label__text",
|
|
18
|
-
"prokodo-Stepper__label__text--is-active": "prokodo-Stepper__label__text--is-active"
|
|
19
|
-
gradientMove,
|
|
20
|
-
fadeInKeyframe
|
|
16
|
+
"prokodo-Stepper__label__text--is-active": "prokodo-Stepper__label__text--is-active"
|
|
21
17
|
};
|
|
22
18
|
export {
|
|
23
|
-
styles as default
|
|
24
|
-
fadeInKeyframe,
|
|
25
|
-
gradientMove
|
|
19
|
+
styles as default
|
|
26
20
|
};
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
const gradientMove = "gradientMove";
|
|
2
|
-
const fadeInKeyframe = "fadeInKeyframe";
|
|
3
1
|
const styles = {
|
|
4
2
|
"prokodo-Switch": "prokodo-Switch",
|
|
5
3
|
"prokodo-Switch__label": "prokodo-Switch__label",
|
|
@@ -20,12 +18,8 @@ const styles = {
|
|
|
20
18
|
"prokodo-Switch__icon--warning": "prokodo-Switch__icon--warning",
|
|
21
19
|
"prokodo-Switch__track": "prokodo-Switch__track",
|
|
22
20
|
"prokodo-Switch__track--checked": "prokodo-Switch__track--checked",
|
|
23
|
-
"prokodo-Switch__track--disabled": "prokodo-Switch__track--disabled"
|
|
24
|
-
gradientMove,
|
|
25
|
-
fadeInKeyframe
|
|
21
|
+
"prokodo-Switch__track--disabled": "prokodo-Switch__track--disabled"
|
|
26
22
|
};
|
|
27
23
|
export {
|
|
28
|
-
styles as default
|
|
29
|
-
fadeInKeyframe,
|
|
30
|
-
gradientMove
|
|
24
|
+
styles as default
|
|
31
25
|
};
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
const gradientMove = "gradientMove";
|
|
2
|
-
const fadeInKeyframe = "fadeInKeyframe";
|
|
3
1
|
const styles = {
|
|
4
2
|
"prokodo-Table": "prokodo-Table",
|
|
5
3
|
"prokodo-Table__container": "prokodo-Table__container",
|
|
@@ -11,12 +9,8 @@ const styles = {
|
|
|
11
9
|
"prokodo-Table__head__cell": "prokodo-Table__head__cell",
|
|
12
10
|
"prokodo-Table__body__row": "prokodo-Table__body__row",
|
|
13
11
|
"prokodo-Table__body__row--has-link": "prokodo-Table__body__row--has-link",
|
|
14
|
-
"prokodo-Table__caption": "prokodo-Table__caption"
|
|
15
|
-
gradientMove,
|
|
16
|
-
fadeInKeyframe
|
|
12
|
+
"prokodo-Table__caption": "prokodo-Table__caption"
|
|
17
13
|
};
|
|
18
14
|
export {
|
|
19
|
-
styles as default
|
|
20
|
-
fadeInKeyframe,
|
|
21
|
-
gradientMove
|
|
15
|
+
styles as default
|
|
22
16
|
};
|
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
const gradientMove = "gradientMove";
|
|
2
|
-
const fadeInKeyframe = "fadeInKeyframe";
|
|
3
1
|
const styles = {
|
|
4
2
|
"prokodo-TableCell": "prokodo-TableCell",
|
|
5
3
|
"prokodo-TableCell__inner": "prokodo-TableCell__inner",
|
|
6
|
-
"prokodo-TableCell__icon": "prokodo-TableCell__icon"
|
|
7
|
-
gradientMove,
|
|
8
|
-
fadeInKeyframe
|
|
4
|
+
"prokodo-TableCell__icon": "prokodo-TableCell__icon"
|
|
9
5
|
};
|
|
10
6
|
export {
|
|
11
|
-
styles as default
|
|
12
|
-
fadeInKeyframe,
|
|
13
|
-
gradientMove
|
|
7
|
+
styles as default
|
|
14
8
|
};
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
const gradientMove = "gradientMove";
|
|
2
|
-
const fadeInKeyframe = "fadeInKeyframe";
|
|
3
1
|
const styles = {
|
|
4
2
|
"prokodo-Teaser": "prokodo-Teaser",
|
|
5
3
|
"prokodo-Teaser__card": "prokodo-Teaser__card",
|
|
@@ -14,12 +12,8 @@ const styles = {
|
|
|
14
12
|
"prokodo-Teaser__content--align-left": "prokodo-Teaser__content--align-left",
|
|
15
13
|
"prokodo-Teaser__content--align-right": "prokodo-Teaser__content--align-right",
|
|
16
14
|
"prokodo-Teaser__link": "prokodo-Teaser__link",
|
|
17
|
-
"prokodo-Teaser__link__icon": "prokodo-Teaser__link__icon"
|
|
18
|
-
gradientMove,
|
|
19
|
-
fadeInKeyframe
|
|
15
|
+
"prokodo-Teaser__link__icon": "prokodo-Teaser__link__icon"
|
|
20
16
|
};
|
|
21
17
|
export {
|
|
22
|
-
styles as default
|
|
23
|
-
fadeInKeyframe,
|
|
24
|
-
gradientMove
|
|
18
|
+
styles as default
|
|
25
19
|
};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { useState, useRef, useEffect, useMemo } from "react";
|
|
4
|
+
function addMQChangeListener(mql, handler) {
|
|
5
|
+
var _a;
|
|
6
|
+
if ("addEventListener" in mql) {
|
|
7
|
+
mql.addEventListener("change", handler);
|
|
8
|
+
return () => mql.removeEventListener("change", handler);
|
|
9
|
+
}
|
|
10
|
+
const legacy = mql;
|
|
11
|
+
(_a = legacy.addListener) == null ? void 0 : _a.call(legacy, handler);
|
|
12
|
+
return () => {
|
|
13
|
+
var _a2;
|
|
14
|
+
return (_a2 = legacy.removeListener) == null ? void 0 : _a2.call(legacy, handler);
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
__name(addMQChangeListener, "addMQChangeListener");
|
|
18
|
+
function useResponsiveValue(opts) {
|
|
19
|
+
const { fallback } = opts;
|
|
20
|
+
const [val, setVal] = useState(fallback);
|
|
21
|
+
const containerRef = useRef(null);
|
|
22
|
+
const [containerWidth, setContainerWidth] = useState(0);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
const hasContainerRules = Array.isArray(opts.containerRules) && opts.containerRules.length > 0;
|
|
25
|
+
if (!hasContainerRules) return;
|
|
26
|
+
const el = containerRef.current;
|
|
27
|
+
if (!el || typeof ResizeObserver === "undefined") return;
|
|
28
|
+
const ro = new ResizeObserver((entries) => {
|
|
29
|
+
var _a, _b;
|
|
30
|
+
const w = ((_b = (_a = entries[0]) == null ? void 0 : _a.contentRect) == null ? void 0 : _b.width) ?? 0;
|
|
31
|
+
setContainerWidth(w);
|
|
32
|
+
});
|
|
33
|
+
ro.observe(el);
|
|
34
|
+
return () => ro.disconnect();
|
|
35
|
+
}, [opts.containerRules]);
|
|
36
|
+
const queriesKey = useMemo(
|
|
37
|
+
() => JSON.stringify(opts.valuesByQueries ?? []),
|
|
38
|
+
[opts.valuesByQueries]
|
|
39
|
+
);
|
|
40
|
+
const valuesByBreakpointKey = useMemo(
|
|
41
|
+
() => JSON.stringify(opts.valuesByBreakpoint ?? {}),
|
|
42
|
+
[opts.valuesByBreakpoint]
|
|
43
|
+
);
|
|
44
|
+
const breakpointsKey = useMemo(
|
|
45
|
+
() => JSON.stringify(opts.breakpoints ?? {}),
|
|
46
|
+
[opts.breakpoints]
|
|
47
|
+
);
|
|
48
|
+
const containerRulesKey = useMemo(
|
|
49
|
+
() => JSON.stringify(opts.containerRules ?? []),
|
|
50
|
+
[opts.containerRules]
|
|
51
|
+
);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (typeof window === "undefined" || !("matchMedia" in window)) return;
|
|
54
|
+
const disposers = [];
|
|
55
|
+
const queryPairs = opts.valuesByQueries ?? [];
|
|
56
|
+
const queryMQLs = queryPairs.map(([q]) => window.matchMedia(q));
|
|
57
|
+
queryMQLs.forEach((mql) => disposers.push(addMQChangeListener(mql, compute)));
|
|
58
|
+
const bpOrder = ["xl", "lg", "md", "sm", "xs"];
|
|
59
|
+
const bps = opts.breakpoints;
|
|
60
|
+
const valuesByBp = opts.valuesByBreakpoint;
|
|
61
|
+
const bpMQLs = [];
|
|
62
|
+
if (bps && valuesByBp) {
|
|
63
|
+
for (const k of bpOrder) {
|
|
64
|
+
if (k in valuesByBp && bps[k] != null) {
|
|
65
|
+
const mql = window.matchMedia(`(min-width:${bps[k]}px)`);
|
|
66
|
+
bpMQLs.push({ key: k, mql });
|
|
67
|
+
disposers.push(addMQChangeListener(mql, compute));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function compute() {
|
|
72
|
+
var _a;
|
|
73
|
+
const rules = opts.containerRules ?? [];
|
|
74
|
+
if (rules.length) {
|
|
75
|
+
const hit = rules.find((r) => {
|
|
76
|
+
const minOk = r.min == null || containerWidth >= r.min;
|
|
77
|
+
const maxOk = r.max == null || containerWidth < r.max;
|
|
78
|
+
return minOk && maxOk;
|
|
79
|
+
});
|
|
80
|
+
if (hit) {
|
|
81
|
+
setVal(hit.value);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
for (let i = 0; i < queryPairs.length; i++) {
|
|
86
|
+
const mql = queryMQLs[i];
|
|
87
|
+
if (mql != null && mql.matches === true) {
|
|
88
|
+
const v = (_a = queryPairs[i]) == null ? void 0 : _a[1];
|
|
89
|
+
setVal(v);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (bps && valuesByBp) {
|
|
94
|
+
for (const { key, mql } of bpMQLs) {
|
|
95
|
+
if (mql.matches && key in valuesByBp) {
|
|
96
|
+
setVal(valuesByBp[key]);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
setVal(fallback);
|
|
102
|
+
}
|
|
103
|
+
__name(compute, "compute");
|
|
104
|
+
compute();
|
|
105
|
+
return () => disposers.forEach((d) => d());
|
|
106
|
+
}, [
|
|
107
|
+
opts.breakpoints,
|
|
108
|
+
opts.containerRules,
|
|
109
|
+
opts.valuesByBreakpoint,
|
|
110
|
+
opts.valuesByQueries,
|
|
111
|
+
fallback,
|
|
112
|
+
containerWidth,
|
|
113
|
+
queriesKey,
|
|
114
|
+
valuesByBreakpointKey,
|
|
115
|
+
breakpointsKey,
|
|
116
|
+
containerRulesKey
|
|
117
|
+
]);
|
|
118
|
+
return useMemo(() => ({ value: val, ref: containerRef }), [val]);
|
|
119
|
+
}
|
|
120
|
+
__name(useResponsiveValue, "useResponsiveValue");
|
|
121
|
+
export {
|
|
122
|
+
useResponsiveValue
|
|
123
|
+
};
|