@dreamtree-org/twreact-ui 1.3.9 → 1.3.11
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 +32 -0
- package/ai-skills/dreamtree-ui.md +12 -7
- package/dist/ai-schema.json +156 -29
- package/dist/charts/index.js +195 -66
- package/dist/components/blocks/AppShell.d.ts.map +1 -1
- package/dist/components/charts/CartesianChart.d.ts.map +1 -1
- package/dist/components/charts/ChartFrame.d.ts.map +1 -1
- package/dist/components/charts/useChartLayout.d.ts +25 -0
- package/dist/components/charts/useChartLayout.d.ts.map +1 -0
- package/dist/components/core/Accordion.d.ts.map +1 -1
- package/dist/components/core/Button.d.ts.map +1 -1
- package/dist/components/core/Checkbox.d.ts.map +1 -1
- package/dist/components/core/ColorPicker.d.ts.map +1 -1
- package/dist/components/core/DatePicker.d.ts.map +1 -1
- package/dist/components/core/Form.d.ts.map +1 -1
- package/dist/components/core/Input.d.ts.map +1 -1
- package/dist/components/core/Loader.d.ts.map +1 -1
- package/dist/components/core/LocationPicker.d.ts.map +1 -1
- package/dist/components/core/PriceRangePicker.d.ts +0 -29
- package/dist/components/core/PriceRangePicker.d.ts.map +1 -1
- package/dist/components/core/ProgressBar.d.ts.map +1 -1
- package/dist/components/core/Radio.d.ts.map +1 -1
- package/dist/components/core/Rate.d.ts.map +1 -1
- package/dist/components/core/RoundedTag.d.ts.map +1 -1
- package/dist/components/core/Skeleton.d.ts.map +1 -1
- package/dist/components/core/Slider.d.ts.map +1 -1
- package/dist/components/core/SpeechToText.d.ts.map +1 -1
- package/dist/components/core/Switch.d.ts.map +1 -1
- package/dist/components/core/Table/ColumnMenu.d.ts.map +1 -1
- package/dist/components/core/Table/Pagination.d.ts.map +1 -1
- package/dist/components/core/Table/TableRow.d.ts.map +1 -1
- package/dist/components/core/Table/helpers.d.ts +2 -0
- package/dist/components/core/Table/helpers.d.ts.map +1 -1
- package/dist/components/core/Tabs.d.ts +2 -5
- package/dist/components/core/Tabs.d.ts.map +1 -1
- package/dist/components/core/TextToSpeech.d.ts +2 -7
- package/dist/components/core/TextToSpeech.d.ts.map +1 -1
- package/dist/components/core/Textarea.d.ts.map +1 -1
- package/dist/components/core/Tooltip.d.ts.map +1 -1
- package/dist/components/feedback/Alert.d.ts.map +1 -1
- package/dist/components/feedback/Dialog.d.ts.map +1 -1
- package/dist/components/feedback/Toast.d.ts.map +1 -1
- package/dist/components/navigation/Breadcrumbs.d.ts.map +1 -1
- package/dist/components/navigation/FootNav.d.ts.map +1 -1
- package/dist/components/navigation/Sidebar.d.ts.map +1 -1
- package/dist/components/utility/Avatar.d.ts +8 -0
- package/dist/components/utility/Avatar.d.ts.map +1 -1
- package/dist/components/utility/AvatarGroup.d.ts +4 -0
- package/dist/components/utility/AvatarGroup.d.ts.map +1 -0
- package/dist/components/utility/Badge.d.ts.map +1 -1
- package/dist/components/utility/Card.d.ts.map +1 -1
- package/dist/components/utility/Carousel.d.ts.map +1 -1
- package/dist/components/utility/FileUpload.d.ts.map +1 -1
- package/dist/components/utility/Pagination.d.ts.map +1 -1
- package/dist/components/utility/Sortable.d.ts.map +1 -1
- package/dist/components/utility/Stepper.d.ts.map +1 -1
- package/dist/esm/components/blocks/AppShell.js +24 -18
- package/dist/esm/components/blocks/EmptyState.js +1 -1
- package/dist/esm/components/blocks/ErrorState.js +1 -1
- package/dist/esm/components/blocks/LoadingState.js +4 -4
- package/dist/esm/components/blocks/StatCard.js +6 -6
- package/dist/esm/components/blocks/StatusPill.js +5 -8
- package/dist/esm/components/charts/CartesianChart.js +85 -62
- package/dist/esm/components/charts/ChartFrame.js +12 -5
- package/dist/esm/components/charts/useChartLayout.js +105 -0
- package/dist/esm/components/core/Accordion.js +40 -9
- package/dist/esm/components/core/Button.js +49 -25
- package/dist/esm/components/core/Checkbox.js +71 -45
- package/dist/esm/components/core/ColorPicker.js +49 -48
- package/dist/esm/components/core/DatePicker.js +97 -58
- package/dist/esm/components/core/Form.js +35 -8
- package/dist/esm/components/core/Input.js +89 -20
- package/dist/esm/components/core/Loader.js +30 -44
- package/dist/esm/components/core/LocationPicker.js +82 -16
- package/dist/esm/components/core/PriceRangePicker.js +205 -218
- package/dist/esm/components/core/ProgressBar.js +8 -12
- package/dist/esm/components/core/Radio.js +43 -15
- package/dist/esm/components/core/Rate.js +109 -50
- package/dist/esm/components/core/RoundedTag.js +27 -10
- package/dist/esm/components/core/Skeleton.js +13 -14
- package/dist/esm/components/core/Slider.js +24 -6
- package/dist/esm/components/core/SpeechToText.js +68 -16
- package/dist/esm/components/core/Switch.js +88 -16
- package/dist/esm/components/core/Table/ColumnMenu.js +2 -4
- package/dist/esm/components/core/Table/Pagination.js +15 -18
- package/dist/esm/components/core/Table/TableRow.js +2 -2
- package/dist/esm/components/core/Table/helpers.js +33 -1
- package/dist/esm/components/core/Tabs.js +185 -37
- package/dist/esm/components/core/TextToSpeech.js +121 -28
- package/dist/esm/components/core/Textarea.js +10 -2
- package/dist/esm/components/core/Tooltip.js +100 -28
- package/dist/esm/components/feedback/Alert.js +21 -11
- package/dist/esm/components/feedback/Dialog.js +44 -100
- package/dist/esm/components/feedback/Toast.js +24 -5
- package/dist/esm/components/navigation/Breadcrumbs.js +97 -35
- package/dist/esm/components/navigation/FootNav.js +102 -13
- package/dist/esm/components/navigation/Sidebar.js +13 -61
- package/dist/esm/components/utility/Avatar.js +37 -22
- package/dist/esm/components/utility/AvatarGroup.js +56 -0
- package/dist/esm/components/utility/Badge.js +43 -23
- package/dist/esm/components/utility/Card.js +32 -8
- package/dist/esm/components/utility/Carousel.js +165 -38
- package/dist/esm/components/utility/FileUpload.js +106 -31
- package/dist/esm/components/utility/Pagination.js +33 -15
- package/dist/esm/components/utility/Sortable.js +6 -2
- package/dist/esm/components/utility/Stepper.js +110 -47
- package/dist/esm/hooks/useFocusTrap.js +10 -2
- package/dist/esm/hooks/useSliderValues.js +8 -2
- package/dist/esm/hooks/useSortable.js +107 -5
- package/dist/esm/index.js +1 -0
- package/dist/esm/utils/touchTarget.js +4 -1
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useSliderValues.d.ts +6 -2
- package/dist/hooks/useSliderValues.d.ts.map +1 -1
- package/dist/hooks/useSortable.d.ts +11 -1
- package/dist/hooks/useSortable.d.ts.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.esm.css +1 -1
- package/dist/index.esm.js +3734 -2174
- package/dist/index.js +3732 -2171
- package/dist/types/charts.d.ts +3 -1
- package/dist/types/charts.d.ts.map +1 -1
- package/dist/types/index.d.ts +64 -9
- package/dist/types/index.d.ts.map +1 -1
- package/doc/README.md +1 -0
- package/mcp/catalog.snapshot.json +350 -121
- package/package.json +1 -1
|
@@ -19,6 +19,14 @@ var sizeToPx = function sizeToPx(size) {
|
|
|
19
19
|
return 24;
|
|
20
20
|
}
|
|
21
21
|
};
|
|
22
|
+
// Keyframes live in tailwind.config.js (DTUI-48) — no per-instance <style> tag.
|
|
23
|
+
// `speed` reaches the animation through the --dt-loader-speed custom property.
|
|
24
|
+
// Under prefers-reduced-motion the spinner slows right down (it still signals
|
|
25
|
+
// "busy"); the bouncing dots and sliding bar stop.
|
|
26
|
+
var SPIN = "animate-loader-spin motion-reduce:[animation-duration:3s]";
|
|
27
|
+
// Default track colour, dark-safe. A `secondaryColor` prop overrides it inline.
|
|
28
|
+
var TRACK_STROKE = "stroke-black/[0.08] dark:stroke-white/15";
|
|
29
|
+
var TRACK_BG = "bg-black/[0.08] dark:bg-white/15";
|
|
22
30
|
var Loader = /*#__PURE__*/forwardRef(function Loader(_ref, ref) {
|
|
23
31
|
var _ref$size = _ref.size,
|
|
24
32
|
size = _ref$size === void 0 ? "md" : _ref$size,
|
|
@@ -28,8 +36,7 @@ var Loader = /*#__PURE__*/forwardRef(function Loader(_ref, ref) {
|
|
|
28
36
|
thickness = _ref$thickness === void 0 ? 2.5 : _ref$thickness,
|
|
29
37
|
_ref$color = _ref.color,
|
|
30
38
|
color = _ref$color === void 0 ? "currentColor" : _ref$color,
|
|
31
|
-
|
|
32
|
-
secondaryColor = _ref$secondaryColor === void 0 ? "rgba(0,0,0,0.08)" : _ref$secondaryColor,
|
|
39
|
+
secondaryColor = _ref.secondaryColor,
|
|
33
40
|
_ref$variant = _ref.variant,
|
|
34
41
|
variant = _ref$variant === void 0 ? "spinner" : _ref$variant,
|
|
35
42
|
_ref$className = _ref.className,
|
|
@@ -45,32 +52,29 @@ var Loader = /*#__PURE__*/forwardRef(function Loader(_ref, ref) {
|
|
|
45
52
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
46
53
|
var px = sizeToPx(size);
|
|
47
54
|
var wrapperClass = cn(inline ? "inline-flex" : "flex", "items-center gap-2", className);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
var rotateTo = reverse ? "0 12 12" : "360 12 12";
|
|
55
|
+
var rootStyle = _objectSpread2({
|
|
56
|
+
"--dt-loader-speed": "".concat(speed, "s")
|
|
57
|
+
}, style);
|
|
52
58
|
return jsxs("div", _objectSpread2(_objectSpread2({
|
|
53
59
|
ref: ref,
|
|
54
60
|
role: "progressbar",
|
|
55
61
|
"aria-label": ariaLabel,
|
|
56
62
|
className: wrapperClass,
|
|
57
|
-
style:
|
|
63
|
+
style: rootStyle
|
|
58
64
|
}, rest), {}, {
|
|
59
|
-
children: [
|
|
60
|
-
children: "\n @keyframes loader-bounce {\n 0%, 80%, 100% { transform: translateY(0); opacity: 0.9 }\n 40% { transform: translateY(-6px); opacity: 1 }\n }\n @keyframes loader-bar {\n 0% { transform: translateX(-35%); }\n 100% { transform: translateX(135%); }\n }\n "
|
|
61
|
-
}), variant === "spinner" && jsxs("svg", {
|
|
65
|
+
children: [variant === "spinner" && jsxs("svg", {
|
|
62
66
|
width: px,
|
|
63
67
|
height: px,
|
|
64
68
|
viewBox: "0 0 24 24",
|
|
65
69
|
fill: "none",
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
},
|
|
70
|
+
"aria-hidden": "true",
|
|
71
|
+
className: cn("block", SPIN, reverse && "[animation-direction:reverse]"),
|
|
69
72
|
xmlns: "http://www.w3.org/2000/svg",
|
|
70
73
|
children: [jsx("circle", {
|
|
71
74
|
cx: "12",
|
|
72
75
|
cy: "12",
|
|
73
76
|
r: 10 - thickness,
|
|
77
|
+
className: secondaryColor ? undefined : TRACK_STROKE,
|
|
74
78
|
stroke: secondaryColor,
|
|
75
79
|
strokeWidth: thickness
|
|
76
80
|
}), jsx("path", {
|
|
@@ -79,60 +83,42 @@ var Loader = /*#__PURE__*/forwardRef(function Loader(_ref, ref) {
|
|
|
79
83
|
strokeWidth: thickness,
|
|
80
84
|
strokeLinecap: "round",
|
|
81
85
|
strokeLinejoin: "round",
|
|
82
|
-
strokeDasharray: "24"
|
|
83
|
-
children: jsx("animateTransform", {
|
|
84
|
-
attributeName: "transform",
|
|
85
|
-
attributeType: "XML",
|
|
86
|
-
type: "rotate",
|
|
87
|
-
from: rotateFrom,
|
|
88
|
-
to: rotateTo,
|
|
89
|
-
dur: animDur,
|
|
90
|
-
repeatCount: "indefinite"
|
|
91
|
-
})
|
|
86
|
+
strokeDasharray: "24"
|
|
92
87
|
})]
|
|
93
88
|
}), variant === "dots" && jsx("div", {
|
|
89
|
+
className: "inline-flex items-center",
|
|
94
90
|
style: {
|
|
95
|
-
display: "inline-flex",
|
|
96
|
-
alignItems: "center",
|
|
97
91
|
gap: Math.max(2, Math.round(px / 8))
|
|
98
92
|
},
|
|
99
93
|
children: [0, 1, 2].map(function (i) {
|
|
100
94
|
return jsx("span", {
|
|
101
95
|
"aria-hidden": true,
|
|
96
|
+
className: "inline-block rounded-full animate-loader-bounce motion-reduce:animate-none",
|
|
102
97
|
style: {
|
|
103
98
|
width: px / 4,
|
|
104
99
|
height: px / 4,
|
|
105
|
-
borderRadius: "9999px",
|
|
106
|
-
display: "inline-block",
|
|
107
100
|
background: color,
|
|
108
|
-
|
|
101
|
+
animationDelay: "".concat(Math.round(i * speed * 1000 / 6) / 1000, "s")
|
|
109
102
|
}
|
|
110
103
|
}, i);
|
|
111
104
|
})
|
|
112
105
|
}), variant === "bar" && jsx("div", {
|
|
113
106
|
"aria-hidden": true,
|
|
114
|
-
|
|
107
|
+
className: cn("relative overflow-hidden rounded-full", !secondaryColor && TRACK_BG),
|
|
108
|
+
style: _objectSpread2({
|
|
115
109
|
width: Math.max(72, px * 2.5),
|
|
116
|
-
height: Math.max(6, px / 6)
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
position: "relative"
|
|
121
|
-
},
|
|
110
|
+
height: Math.max(6, px / 6)
|
|
111
|
+
}, secondaryColor ? {
|
|
112
|
+
background: secondaryColor
|
|
113
|
+
} : {}),
|
|
122
114
|
children: jsx("div", {
|
|
115
|
+
className: "absolute inset-y-0 left-0 w-[35%] animate-loader-bar motion-reduce:animate-none",
|
|
123
116
|
style: {
|
|
124
|
-
|
|
125
|
-
left: 0,
|
|
126
|
-
top: 0,
|
|
127
|
-
bottom: 0,
|
|
128
|
-
width: "35%",
|
|
129
|
-
background: "linear-gradient(90deg, ".concat(color, ", ").concat(secondaryColor, ")"),
|
|
130
|
-
transform: "translateX(-35%)",
|
|
131
|
-
animation: "loader-bar ".concat(speed, "s linear infinite")
|
|
117
|
+
background: "linear-gradient(90deg, ".concat(color, ", ").concat(secondaryColor || "transparent", ")")
|
|
132
118
|
}
|
|
133
119
|
})
|
|
134
120
|
}), text && jsx("span", {
|
|
135
|
-
className: "text-sm text-primary-500",
|
|
121
|
+
className: "text-sm text-primary-500 dark:text-primary-400",
|
|
136
122
|
children: text
|
|
137
123
|
})]
|
|
138
124
|
}));
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { objectWithoutProperties as _objectWithoutProperties, slicedToArray as _slicedToArray, objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
3
3
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
-
import React, { forwardRef, useState, cloneElement } from 'react';
|
|
4
|
+
import React, { forwardRef, useState, useId, cloneElement } from 'react';
|
|
5
5
|
import { cn } from '../../utils/cn.js';
|
|
6
|
+
import { PRESS_FEEDBACK, TOUCH_TARGET } from '../../utils/touchTarget.js';
|
|
6
7
|
|
|
7
|
-
var _excluded = ["value", "onChange", "inputProps", "icon", "iconProps", "iconPosition", "placeholder", "className"];
|
|
8
|
+
var _excluded = ["value", "onChange", "inputProps", "icon", "iconProps", "iconPosition", "placeholder", "fullWidth", "className"];
|
|
9
|
+
// User-facing copy for GeolocationPositionError codes (and "unsupported").
|
|
10
|
+
var LOCATION_ERROR_MESSAGES = {
|
|
11
|
+
unsupported: "Location isn't available in this browser.",
|
|
12
|
+
1: "Location permission was denied. Allow it in your browser settings, or type the coordinates.",
|
|
13
|
+
2: "Your location couldn't be determined. Try again, or type the coordinates.",
|
|
14
|
+
3: "Finding your location took too long. Try again.",
|
|
15
|
+
"default": "Couldn't get your location. Try again, or type the coordinates."
|
|
16
|
+
};
|
|
8
17
|
function formatCoords(coords) {
|
|
9
18
|
if (!coords) return "";
|
|
10
19
|
var lat = Number(coords.lat);
|
|
@@ -40,6 +49,8 @@ var LocationPicker = /*#__PURE__*/forwardRef(function LocationPicker(_ref, ref)
|
|
|
40
49
|
iconPosition = _ref$iconPosition === void 0 ? "right" : _ref$iconPosition,
|
|
41
50
|
_ref$placeholder = _ref.placeholder,
|
|
42
51
|
placeholder = _ref$placeholder === void 0 ? "lat, lng" : _ref$placeholder,
|
|
52
|
+
_ref$fullWidth = _ref.fullWidth,
|
|
53
|
+
fullWidth = _ref$fullWidth === void 0 ? false : _ref$fullWidth,
|
|
43
54
|
className = _ref.className,
|
|
44
55
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
45
56
|
var _useState = useState(function () {
|
|
@@ -48,12 +59,23 @@ var LocationPicker = /*#__PURE__*/forwardRef(function LocationPicker(_ref, ref)
|
|
|
48
59
|
_useState2 = _slicedToArray(_useState, 2),
|
|
49
60
|
text = _useState2[0],
|
|
50
61
|
setText = _useState2[1];
|
|
62
|
+
// Geolocation request state, shown in the UI (DTUI-42).
|
|
63
|
+
var _useState3 = useState("idle"),
|
|
64
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
65
|
+
status = _useState4[0],
|
|
66
|
+
setStatus = _useState4[1]; // "idle" | "loading" | "error"
|
|
67
|
+
var _useState5 = useState(""),
|
|
68
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
69
|
+
errorMessage = _useState6[0],
|
|
70
|
+
setErrorMessage = _useState6[1];
|
|
71
|
+
var messageId = "location-picker-msg-".concat(useId());
|
|
72
|
+
var loading = status === "loading";
|
|
51
73
|
// Re-sync the text when the external `value` changes (adjust-during-render
|
|
52
74
|
// pattern, avoids a cascading effect render).
|
|
53
|
-
var
|
|
54
|
-
|
|
55
|
-
prevValue =
|
|
56
|
-
setPrevValue =
|
|
75
|
+
var _useState7 = useState(value),
|
|
76
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
77
|
+
prevValue = _useState8[0],
|
|
78
|
+
setPrevValue = _useState8[1];
|
|
57
79
|
if (value !== prevValue) {
|
|
58
80
|
setPrevValue(value);
|
|
59
81
|
setText(formatCoords(value));
|
|
@@ -77,15 +99,22 @@ var LocationPicker = /*#__PURE__*/forwardRef(function LocationPicker(_ref, ref)
|
|
|
77
99
|
lng: Number(position.coords.longitude)
|
|
78
100
|
};
|
|
79
101
|
setText(formatCoords(coords));
|
|
102
|
+
setStatus("idle");
|
|
103
|
+
setErrorMessage("");
|
|
80
104
|
if (typeof onChange === "function") onChange(coords);
|
|
81
105
|
};
|
|
82
106
|
var handleGeoError = function handleGeoError(err) {
|
|
83
107
|
console.error("LocationPicker geolocation error:", err);
|
|
108
|
+
setStatus("error");
|
|
109
|
+
setErrorMessage(LOCATION_ERROR_MESSAGES[err === null || err === void 0 ? void 0 : err.code] || LOCATION_ERROR_MESSAGES["default"]);
|
|
84
110
|
};
|
|
85
111
|
var handleIconClick = function handleIconClick(e) {
|
|
86
112
|
var _navigator;
|
|
113
|
+
if (loading) return;
|
|
87
114
|
if (!((_navigator = navigator) !== null && _navigator !== void 0 && _navigator.geolocation)) {
|
|
88
115
|
console.error("LocationPicker: geolocation not supported in this browser");
|
|
116
|
+
setStatus("error");
|
|
117
|
+
setErrorMessage(LOCATION_ERROR_MESSAGES.unsupported);
|
|
89
118
|
if (typeof iconProps.onClick === "function") {
|
|
90
119
|
try {
|
|
91
120
|
iconProps.onClick(e);
|
|
@@ -95,6 +124,8 @@ var LocationPicker = /*#__PURE__*/forwardRef(function LocationPicker(_ref, ref)
|
|
|
95
124
|
}
|
|
96
125
|
return;
|
|
97
126
|
}
|
|
127
|
+
setStatus("loading");
|
|
128
|
+
setErrorMessage("");
|
|
98
129
|
navigator.geolocation.getCurrentPosition(handleGeoSuccess, handleGeoError, {
|
|
99
130
|
enableHighAccuracy: true,
|
|
100
131
|
timeout: 10000
|
|
@@ -127,33 +158,68 @@ var LocationPicker = /*#__PURE__*/forwardRef(function LocationPicker(_ref, ref)
|
|
|
127
158
|
strokeWidth: "1.2"
|
|
128
159
|
})]
|
|
129
160
|
});
|
|
161
|
+
var Spinner = jsxs("svg", {
|
|
162
|
+
className: "w-4 h-4 animate-spin motion-reduce:animate-none",
|
|
163
|
+
viewBox: "0 0 24 24",
|
|
164
|
+
fill: "none",
|
|
165
|
+
"aria-hidden": "true",
|
|
166
|
+
"data-testid": "location-picker-spinner",
|
|
167
|
+
children: [jsx("circle", {
|
|
168
|
+
cx: "12",
|
|
169
|
+
cy: "12",
|
|
170
|
+
r: "9",
|
|
171
|
+
stroke: "currentColor",
|
|
172
|
+
strokeOpacity: "0.25",
|
|
173
|
+
strokeWidth: "2.5"
|
|
174
|
+
}), jsx("path", {
|
|
175
|
+
d: "M21 12a9 9 0 0 0-9-9",
|
|
176
|
+
stroke: "currentColor",
|
|
177
|
+
strokeWidth: "2.5",
|
|
178
|
+
strokeLinecap: "round"
|
|
179
|
+
})]
|
|
180
|
+
});
|
|
130
181
|
var iconButton = jsx("button", _objectSpread2(_objectSpread2({
|
|
131
182
|
type: "button",
|
|
132
183
|
onClick: handleIconClick
|
|
133
184
|
}, iconProps), {}, {
|
|
134
185
|
"aria-label": iconProps["aria-label"] || "Use my location",
|
|
135
|
-
|
|
136
|
-
|
|
186
|
+
"aria-busy": loading || undefined,
|
|
187
|
+
"aria-describedby": status !== "idle" ? messageId : iconProps["aria-describedby"],
|
|
188
|
+
className: cn("inline-flex items-center justify-center rounded-md p-1 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200", "focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500", "transition-colors duration-fast motion-reduce:transition-none", loading && "cursor-wait", TOUCH_TARGET, PRESS_FEEDBACK, "transition-[color,background-color,border-color,transform]", iconProps.className),
|
|
189
|
+
children: loading ? Spinner : icon ? /*#__PURE__*/React.isValidElement(icon) ? /*#__PURE__*/cloneElement(icon) : icon : DefaultIcon
|
|
137
190
|
}));
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
191
|
+
// The 44px touch target is wider than p-1, so leave room for it on coarse pointers.
|
|
192
|
+
var inputPaddingClass = iconPosition === "right" ? "pr-10 [@media(pointer:coarse)]:pr-12" : "pl-10 [@media(pointer:coarse)]:pl-12";
|
|
193
|
+
return jsxs("div", _objectSpread2(_objectSpread2({
|
|
194
|
+
className: cn(fullWidth ? "flex w-full flex-col" : "inline-flex flex-col", className),
|
|
195
|
+
"data-status": status
|
|
141
196
|
}, rest), {}, {
|
|
142
|
-
children: jsxs("div", {
|
|
143
|
-
className: "relative",
|
|
197
|
+
children: [jsxs("div", {
|
|
198
|
+
className: cn("relative", fullWidth && "w-full"),
|
|
144
199
|
children: [jsx("input", _objectSpread2(_objectSpread2({
|
|
145
200
|
ref: ref,
|
|
146
201
|
type: "text",
|
|
147
|
-
placeholder: placeholder
|
|
202
|
+
placeholder: placeholder,
|
|
203
|
+
"aria-describedby": status !== "idle" ? messageId : undefined
|
|
148
204
|
}, inputProps), {}, {
|
|
149
205
|
value: text,
|
|
150
206
|
onChange: handleInputChange,
|
|
151
|
-
className: cn("
|
|
207
|
+
className: cn("rounded-md border border-gray-300 bg-white py-2 px-3 text-sm text-gray-900 placeholder-gray-400 shadow-sm focus:border-primary-500 focus:ring-1 focus:ring-primary-500", "dark:border-gray-600 dark:bg-gray-900 dark:text-gray-100 dark:placeholder-gray-500", "[@media(pointer:coarse)]:text-base", fullWidth ? "w-full" : "min-w-[200px]", status === "error" && "border-error-500 dark:border-error-400", inputProps.className, inputPaddingClass)
|
|
152
208
|
})), jsx("div", {
|
|
153
209
|
className: cn("absolute inset-y-0 flex items-center", iconPosition === "right" ? "right-2" : "left-2"),
|
|
154
210
|
children: iconButton
|
|
155
211
|
})]
|
|
156
|
-
})
|
|
212
|
+
}), status === "loading" && jsx("p", {
|
|
213
|
+
id: messageId,
|
|
214
|
+
role: "status",
|
|
215
|
+
className: "mt-1 text-xs text-gray-500 dark:text-gray-400",
|
|
216
|
+
children: "Finding your location\u2026"
|
|
217
|
+
}), status === "error" && jsx("p", {
|
|
218
|
+
id: messageId,
|
|
219
|
+
role: "alert",
|
|
220
|
+
className: "mt-1 text-xs text-error-600 dark:text-error-400",
|
|
221
|
+
children: errorMessage
|
|
222
|
+
})]
|
|
157
223
|
}));
|
|
158
224
|
});
|
|
159
225
|
LocationPicker.displayName = "LocationPicker";
|