@xyo-network/react-xns 7.0.0 → 7.0.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"useXnsNameCaptureRouting.d.ts","sourceRoot":"","sources":["../../../../../../src/components/XnsNameCapture/hooks/routing/useXnsNameCaptureRouting.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAGzD,eAAO,MAAM,wBAAwB,GAAI,OAAO,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAclE,CAAA"}
1
+ {"version":3,"file":"useXnsNameCaptureRouting.d.ts","sourceRoot":"","sources":["../../../../../../src/components/XnsNameCapture/hooks/routing/useXnsNameCaptureRouting.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAGzD,eAAO,MAAM,wBAAwB,GAAI,OAAO,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAclE,CAAA"}
@@ -1,29 +1,34 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
-
4
1
  // src/components/EstimateName/EstimateNameTextField.tsx
5
2
  import { TextField, useTheme } from "@mui/material";
6
3
  import { alphaCss } from "@xylabs/react-theme";
7
4
  import { MIN_DOMAIN_LENGTH, XnsNameHelper } from "@xyo-network/xns-record-payloadset-plugins";
8
- import React, { useLayoutEffect, useMemo, useRef, useState } from "react";
9
- var XnsEstimateNameTextField = /* @__PURE__ */ __name(({ maskOutput = true, onChange: onChangeProp, onBlur: onBlurProp, value, ...props }) => {
5
+ import {
6
+ useLayoutEffect,
7
+ useMemo,
8
+ useRef,
9
+ useState
10
+ } from "react";
11
+ import { jsx } from "react/jsx-runtime";
12
+ var XnsEstimateNameTextField = ({
13
+ maskOutput = true,
14
+ onChange: onChangeProp,
15
+ onBlur: onBlurProp,
16
+ value,
17
+ ...props
18
+ }) => {
10
19
  const theme = useTheme();
11
20
  const [validLength, setValidLength] = useState(false);
12
21
  const inputRef = useRef(null);
13
22
  useMemo(() => {
14
23
  const validValueLength = !!(value && typeof value === "string" && value.length >= MIN_DOMAIN_LENGTH);
15
24
  setValidLength(validValueLength);
16
- }, [
17
- value
18
- ]);
25
+ }, [value]);
19
26
  useLayoutEffect(() => {
20
27
  if (inputRef.current && typeof value === "string") {
21
28
  inputRef.current.value = value;
22
29
  }
23
- }, [
24
- value
25
- ]);
26
- const handleChange = /* @__PURE__ */ __name((event) => {
30
+ }, [value]);
31
+ const handleChange = (event) => {
27
32
  if (maskOutput) {
28
33
  const value2 = event.target.value;
29
34
  event.target.value = XnsNameHelper.mask(value2);
@@ -32,66 +37,74 @@ var XnsEstimateNameTextField = /* @__PURE__ */ __name(({ maskOutput = true, onCh
32
37
  if (inputRef.current) {
33
38
  setValidLength(inputRef.current.value.length >= MIN_DOMAIN_LENGTH);
34
39
  }
35
- }, "handleChange");
36
- const handleBlur = /* @__PURE__ */ __name((event) => {
40
+ };
41
+ const handleBlur = (event) => {
37
42
  if (maskOutput) {
38
43
  const value2 = event.target.value;
39
- event.target.value = XnsNameHelper.mask(value2, {
40
- maskStartEndHyphens: true
41
- });
44
+ event.target.value = XnsNameHelper.mask(value2, { maskStartEndHyphens: true });
42
45
  }
43
46
  onBlurProp?.(event);
44
- }, "handleBlur");
45
- return /* @__PURE__ */ React.createElement(TextField, {
46
- inputRef,
47
- onBlur: handleBlur,
48
- onChange: handleChange,
49
- ...props,
50
- slotProps: {
51
- htmlInput: {
52
- style: {
53
- color: validLength ? theme.vars.palette.text.primary : alphaCss(theme.vars.palette.text.primary, 0.5)
54
- }
55
- }
47
+ };
48
+ return /* @__PURE__ */ jsx(
49
+ TextField,
50
+ {
51
+ inputRef,
52
+ onBlur: handleBlur,
53
+ onChange: handleChange,
54
+ ...props,
55
+ slotProps: { htmlInput: { style: { color: validLength ? theme.vars.palette.text.primary : alphaCss(theme.vars.palette.text.primary, 0.5) } } }
56
56
  }
57
- });
58
- }, "XnsEstimateNameTextField");
57
+ );
58
+ };
59
59
 
60
60
  // src/components/XnsNameCapture/Errors.tsx
61
- import { Alert, Snackbar, useMediaQuery, useTheme as useTheme2 } from "@mui/material";
61
+ import {
62
+ Alert,
63
+ Snackbar,
64
+ useMediaQuery,
65
+ useTheme as useTheme2
66
+ } from "@mui/material";
62
67
  import { FlexRow } from "@xylabs/react-flexbox";
63
- import React2 from "react";
64
- var XnsNameCaptureErrors = /* @__PURE__ */ __name(({ error, errorUi, resetError }) => {
68
+ import { Fragment, jsx as jsx2 } from "react/jsx-runtime";
69
+ var XnsNameCaptureErrors = ({
70
+ error,
71
+ errorUi,
72
+ resetError
73
+ }) => {
65
74
  const theme = useTheme2();
66
75
  const isMobile = useMediaQuery(theme.breakpoints.down("md"));
67
- return /* @__PURE__ */ React2.createElement(React2.Fragment, null, errorUi === "toast" ? /* @__PURE__ */ React2.createElement(Snackbar, {
68
- open: !!error,
69
- message: error?.toString(),
70
- autoHideDuration: 3e3,
71
- onClose: /* @__PURE__ */ __name(() => resetError?.(), "onClose"),
72
- anchorOrigin: {
73
- vertical: "bottom",
74
- horizontal: "center"
75
- }
76
- }, /* @__PURE__ */ React2.createElement(Alert, {
77
- severity: "error",
78
- sx: {
79
- width: "100%",
80
- display: isMobile && !error ? "none" : void 0,
81
- visibility: error ? "visible" : "hidden"
76
+ return /* @__PURE__ */ jsx2(Fragment, { children: errorUi === "toast" ? /* @__PURE__ */ jsx2(
77
+ Snackbar,
78
+ {
79
+ open: !!error,
80
+ message: error?.toString(),
81
+ autoHideDuration: 3e3,
82
+ onClose: () => resetError?.(),
83
+ anchorOrigin: { vertical: "bottom", horizontal: "center" },
84
+ children: /* @__PURE__ */ jsx2(
85
+ Alert,
86
+ {
87
+ severity: "error",
88
+ sx: {
89
+ width: "100%",
90
+ display: isMobile && !error ? "none" : void 0,
91
+ visibility: error ? "visible" : "hidden"
92
+ },
93
+ children: error?.message
94
+ }
95
+ )
82
96
  }
83
- }, error?.message)) : (() => {
84
- return /* @__PURE__ */ React2.createElement(FlexRow, {
85
- alignSelf: "stretch"
86
- }, /* @__PURE__ */ React2.createElement(Alert, {
87
- severity: "error",
88
- sx: {
89
- display: isMobile && !error ? "none" : void 0,
90
- visibility: error ? "visible" : "hidden"
97
+ ) : (() => {
98
+ return /* @__PURE__ */ jsx2(FlexRow, { alignSelf: "stretch", children: /* @__PURE__ */ jsx2(
99
+ Alert,
100
+ {
101
+ severity: "error",
102
+ sx: { display: isMobile && !error ? "none" : void 0, visibility: error ? "visible" : "hidden" },
103
+ children: error?.message
91
104
  }
92
- }, error?.message));
93
- })());
94
- }, "XnsNameCaptureErrors");
105
+ ) });
106
+ })() });
107
+ };
95
108
 
96
109
  // src/components/XnsNameCapture/hooks/routing/useXnsNameCaptureRouting.ts
97
110
  import { useMemo as useMemo2 } from "react";
@@ -99,41 +112,29 @@ import { useNavigate, useSearchParams } from "react-router-dom";
99
112
 
100
113
  // src/components/XnsNameCapture/hooks/routing/useXnsNameFromLocation.ts
101
114
  import { useLocation } from "react-router-dom";
102
- var useXnsNameFromLocation = /* @__PURE__ */ __name(() => {
115
+ var useXnsNameFromLocation = () => {
103
116
  const location = useLocation();
104
117
  const search = new URLSearchParams(location.search);
105
118
  const rawName = (search.get("xnsname") ?? search.get("name") ?? search.get("username") ?? "").toLowerCase();
106
119
  switch (rawName?.split(".").length) {
107
120
  case 1: {
108
- return [
109
- rawName,
110
- void 0
111
- ];
121
+ return [rawName, void 0];
112
122
  }
113
123
  case 2: {
114
124
  const rawNameParts = rawName.split(".");
115
125
  if (rawNameParts[1] !== "xyo") {
116
- return [
117
- ,
118
- new Error("Invalid xNS name [Bad root]")
119
- ];
126
+ return [, new Error("Invalid xNS name [Bad root]")];
120
127
  }
121
- return [
122
- rawNameParts[0],
123
- void 0
124
- ];
128
+ return [rawNameParts[0], void 0];
125
129
  }
126
130
  default: {
127
- return [
128
- ,
129
- new Error("Invalid xNS name [Too many parts]")
130
- ];
131
+ return [, new Error("Invalid xNS name [Too many parts]")];
131
132
  }
132
133
  }
133
- }, "useXnsNameFromLocation");
134
+ };
134
135
 
135
136
  // src/components/XnsNameCapture/hooks/routing/useXnsNameCaptureRouting.ts
136
- var useXnsNameCaptureRouting = /* @__PURE__ */ __name((props) => {
137
+ var useXnsNameCaptureRouting = (props) => {
137
138
  const [params] = useSearchParams();
138
139
  const navigate = useNavigate();
139
140
  const [name, error] = useXnsNameFromLocation();
@@ -143,13 +144,8 @@ var useXnsNameCaptureRouting = /* @__PURE__ */ __name((props) => {
143
144
  routingError: error,
144
145
  navigate: props.navigate ?? ((to) => navigate(to)),
145
146
  paramsString: props.paramsString ? `${props.paramsString}${params.toString()}` : params.toString()
146
- }), [
147
- props,
148
- params,
149
- name,
150
- error
151
- ]);
152
- }, "useXnsNameCaptureRouting");
147
+ }), [props, params, name, error]);
148
+ };
153
149
 
154
150
  // src/components/XnsNameCapture/SecondaryLink.tsx
155
151
  import { ArrowForwardRounded } from "@mui/icons-material";
@@ -157,42 +153,51 @@ import { Stack } from "@mui/material";
157
153
  import { LinkEx } from "@xylabs/react-link";
158
154
  import { useUserEvents } from "@xylabs/react-pixel";
159
155
  import { XnsNameHelper as XnsNameHelper2 } from "@xyo-network/xns-record-payloadset-plugins";
160
- import React3 from "react";
161
- var XnsCaptureSecondaryLink = /* @__PURE__ */ __name(({ funnel = "xns", navigate, onCaptureName, paramsString = "", intent, placement = "", setError, text = "Or make a free reservation", to = "/xns/reservation", xnsName, ...props }) => {
156
+ import { jsx as jsx3, jsxs } from "react/jsx-runtime";
157
+ var XnsCaptureSecondaryLink = ({
158
+ funnel = "xns",
159
+ navigate,
160
+ onCaptureName,
161
+ paramsString = "",
162
+ intent,
163
+ placement = "",
164
+ setError,
165
+ text = "Or make a free reservation",
166
+ to = "/xns/reservation",
167
+ xnsName,
168
+ ...props
169
+ }) => {
162
170
  const userEvents = useUserEvents("warn");
163
- return /* @__PURE__ */ React3.createElement(LinkEx, {
164
- paddingX: 0,
165
- color: "inherit",
166
- style: {
167
- textDecoration: "underline",
168
- textUnderlineOffset: "5px"
169
- },
170
- onClick: /* @__PURE__ */ __name(async () => {
171
- const formattedXnsName = `${xnsName}.xyo`;
172
- const helper = XnsNameHelper2.fromString(formattedXnsName);
173
- const [valid, errors] = await helper.validate();
174
- if (valid) {
175
- await userEvents?.userClick({
176
- funnel,
177
- placement,
178
- intent
179
- });
180
- navigate?.(`${to}?username=${xnsName}${paramsString}`);
181
- await onCaptureName?.(xnsName);
182
- } else {
183
- setError?.(new Error(errors.join(", ")));
184
- }
185
- }, "onClick"),
186
- ...props
187
- }, /* @__PURE__ */ React3.createElement(Stack, {
188
- flexDirection: "row",
189
- gap: 0.5,
190
- alignItems: "center",
191
- sx: {
192
- cursor: "pointer"
171
+ return /* @__PURE__ */ jsx3(
172
+ LinkEx,
173
+ {
174
+ paddingX: 0,
175
+ color: "inherit",
176
+ style: { textDecoration: "underline", textUnderlineOffset: "5px" },
177
+ onClick: async () => {
178
+ const formattedXnsName = `${xnsName}.xyo`;
179
+ const helper = XnsNameHelper2.fromString(formattedXnsName);
180
+ const [valid, errors] = await helper.validate();
181
+ if (valid) {
182
+ await userEvents?.userClick({
183
+ funnel,
184
+ placement,
185
+ intent
186
+ });
187
+ navigate?.(`${to}?username=${xnsName}${paramsString}`);
188
+ await onCaptureName?.(xnsName);
189
+ } else {
190
+ setError?.(new Error(errors.join(", ")));
191
+ }
192
+ },
193
+ ...props,
194
+ children: /* @__PURE__ */ jsxs(Stack, { flexDirection: "row", gap: 0.5, alignItems: "center", sx: { cursor: "pointer" }, children: [
195
+ text,
196
+ /* @__PURE__ */ jsx3(ArrowForwardRounded, {})
197
+ ] })
193
198
  }
194
- }, text, /* @__PURE__ */ React3.createElement(ArrowForwardRounded, null)));
195
- }, "XnsCaptureSecondaryLink");
199
+ );
200
+ };
196
201
 
197
202
  // src/components/XnsNameCapture/XnsNameCapture.tsx
198
203
  import { KeyboardArrowRightRounded } from "@mui/icons-material";
@@ -200,10 +205,10 @@ import { useMediaQuery as useMediaQuery2, useTheme as useTheme3 } from "@mui/mat
200
205
  import { ButtonEx } from "@xylabs/react-button";
201
206
  import { FlexCol, FlexRow as FlexRow2 } from "@xylabs/react-flexbox";
202
207
  import { MIN_DOMAIN_LENGTH as MIN_DOMAIN_LENGTH2, XnsNameHelper as XnsNameHelper3 } from "@xyo-network/xns-record-payloadset-plugins";
203
- import React4, { useCallback, useState as useState2 } from "react";
208
+ import { useCallback, useState as useState2 } from "react";
204
209
 
205
210
  // src/components/XnsNameCapture/lib/navigateWithUsername.ts
206
- var navigateWithUsername = /* @__PURE__ */ __name((xnsName, paramsString, navigate, to) => {
211
+ var navigateWithUsername = (xnsName, paramsString, navigate, to) => {
207
212
  const params = new URLSearchParams(paramsString);
208
213
  const usernameParam = params.get("username");
209
214
  if (usernameParam) {
@@ -217,21 +222,41 @@ var navigateWithUsername = /* @__PURE__ */ __name((xnsName, paramsString, naviga
217
222
  } else {
218
223
  navigate?.(`${to}?username=${xnsName}&${paramsString}`);
219
224
  }
220
- }, "navigateWithUsername");
225
+ };
221
226
 
222
227
  // src/components/XnsNameCapture/XnsNameCapture.tsx
223
- var XnsNameCapture = /* @__PURE__ */ __name(({ autoFocus = false, buttonText = "Buy My Name", children, defaultXnsName, disabled, errorUi = "alert", funnel = "xns", intent = "unset", mobileButtonText = "Buy", navigate, onCaptureName: onCaptureNameProp, onNameChange, paramsString = "", placement = "", routingError, showSecondary = false, to = "/xns/estimation", ...props }) => {
228
+ import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
229
+ var XnsNameCapture = ({
230
+ autoFocus = false,
231
+ buttonText = "Buy My Name",
232
+ children,
233
+ defaultXnsName,
234
+ disabled,
235
+ errorUi = "alert",
236
+ funnel = "xns",
237
+ intent = "unset",
238
+ mobileButtonText = "Buy",
239
+ navigate,
240
+ onCaptureName: onCaptureNameProp,
241
+ onNameChange,
242
+ paramsString = "",
243
+ placement = "",
244
+ routingError,
245
+ showSecondary = false,
246
+ to = "/xns/estimation",
247
+ ...props
248
+ }) => {
224
249
  const [xnsName, setXnsName] = useState2(() => defaultXnsName ?? "");
225
250
  const [error, setError] = useState2(routingError);
226
251
  const theme = useTheme3();
227
252
  const isMobile = useMediaQuery2(theme.breakpoints.down("md"));
228
253
  const captureDisabled = !xnsName || xnsName.length < MIN_DOMAIN_LENGTH2;
229
- const handleChange = /* @__PURE__ */ __name((event) => {
254
+ const handleChange = (event) => {
230
255
  const NsName = XnsNameHelper3.mask(event.target.value);
231
256
  onNameChange?.(NsName);
232
257
  setXnsName(NsName);
233
258
  setError(void 0);
234
- }, "handleChange");
259
+ };
235
260
  const onCaptureName = useCallback(async () => {
236
261
  if (captureDisabled) return;
237
262
  const formattedXnsName = `${xnsName}.xyo`;
@@ -243,80 +268,70 @@ var XnsNameCapture = /* @__PURE__ */ __name(({ autoFocus = false, buttonText = "
243
268
  } else {
244
269
  setError(new Error(errors.join(", ")));
245
270
  }
246
- }, [
247
- paramsString,
248
- to,
249
- xnsName,
250
- onCaptureNameProp,
251
- navigate
252
- ]);
271
+ }, [paramsString, to, xnsName, onCaptureNameProp, navigate]);
253
272
  const onKeyDown = useCallback(async (event) => {
254
273
  if (event.key === "Enter" && !captureDisabled) {
255
274
  await onCaptureName?.();
256
275
  }
257
- }, [
258
- captureDisabled,
259
- onCaptureName
260
- ]);
261
- return /* @__PURE__ */ React4.createElement(
262
- FlexCol,
263
- {
264
- gap: showSecondary ? 1.5 : 0,
265
- alignItems: "center",
266
- ...props
267
- },
268
- /* @__PURE__ */ React4.createElement(FlexRow2, {
269
- gap: 1
270
- }, /* @__PURE__ */ React4.createElement(XnsEstimateNameTextField, {
271
- autoFocus,
272
- disabled,
273
- label: "xNS Name",
274
- variant: "outlined",
275
- size: "small",
276
- value: xnsName ?? "",
277
- onKeyDown,
278
- onChange: handleChange,
279
- onBlur: handleChange
280
- }), /* @__PURE__ */ React4.createElement(ButtonEx, {
281
- disabled: captureDisabled,
282
- funnel,
283
- intent,
284
- placement,
285
- variant: "contained",
286
- color: "success",
287
- endIcon: /* @__PURE__ */ React4.createElement(KeyboardArrowRightRounded, null),
288
- onClick: onCaptureName
289
- }, isMobile ? mobileButtonText : buttonText)),
290
- showSecondary === true ? /* @__PURE__ */ React4.createElement(XnsCaptureSecondaryLink, {
291
- xnsName,
292
- placement,
293
- funnel,
294
- setError
295
- }) : null,
276
+ }, [captureDisabled, onCaptureName]);
277
+ return /* @__PURE__ */ jsxs2(FlexCol, { gap: showSecondary ? 1.5 : 0, alignItems: "center", ...props, children: [
278
+ /* @__PURE__ */ jsxs2(FlexRow2, { gap: 1, children: [
279
+ /* @__PURE__ */ jsx4(
280
+ XnsEstimateNameTextField,
281
+ {
282
+ autoFocus,
283
+ disabled,
284
+ label: "xNS Name",
285
+ variant: "outlined",
286
+ size: "small",
287
+ value: xnsName ?? "",
288
+ onKeyDown,
289
+ onChange: handleChange,
290
+ onBlur: handleChange
291
+ }
292
+ ),
293
+ /* @__PURE__ */ jsx4(
294
+ ButtonEx,
295
+ {
296
+ disabled: captureDisabled,
297
+ funnel,
298
+ intent,
299
+ placement,
300
+ variant: "contained",
301
+ color: "success",
302
+ endIcon: /* @__PURE__ */ jsx4(KeyboardArrowRightRounded, {}),
303
+ onClick: onCaptureName,
304
+ children: isMobile ? mobileButtonText : buttonText
305
+ }
306
+ )
307
+ ] }),
308
+ showSecondary === true ? /* @__PURE__ */ jsx4(
309
+ XnsCaptureSecondaryLink,
310
+ {
311
+ xnsName,
312
+ placement,
313
+ funnel,
314
+ setError
315
+ }
316
+ ) : null,
296
317
  // eslint-disable-next-line unicorn/prefer-logical-operator-over-ternary
297
318
  showSecondary ? showSecondary : null,
298
319
  children,
299
- /* @__PURE__ */ React4.createElement(XnsNameCaptureErrors, {
300
- error,
301
- errorUi,
302
- resetError: /* @__PURE__ */ __name(() => setError(void 0), "resetError")
303
- })
304
- );
305
- }, "XnsNameCapture");
320
+ /* @__PURE__ */ jsx4(XnsNameCaptureErrors, { error, errorUi, resetError: () => setError(void 0) })
321
+ ] });
322
+ };
306
323
 
307
324
  // src/components/XnsNameCapture/XnsNameCaptureWithContext.tsx
308
- import React5, { useMemo as useMemo3 } from "react";
309
- var XnsNameCaptureWithContext = /* @__PURE__ */ __name((props) => {
325
+ import { useMemo as useMemo3 } from "react";
326
+ import { jsx as jsx5 } from "react/jsx-runtime";
327
+ var XnsNameCaptureWithContext = (props) => {
310
328
  const routingProps = useXnsNameCaptureRouting(props);
311
329
  const updatedProps = useMemo3(() => ({
312
330
  ...props,
313
331
  ...routingProps
314
- }), [
315
- routingProps,
316
- props
317
- ]);
318
- return /* @__PURE__ */ React5.createElement(XnsNameCapture, updatedProps);
319
- }, "XnsNameCaptureWithContext");
332
+ }), [routingProps, props]);
333
+ return /* @__PURE__ */ jsx5(XnsNameCapture, { ...updatedProps });
334
+ };
320
335
  export {
321
336
  XnsCaptureSecondaryLink,
322
337
  XnsEstimateNameTextField,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/EstimateName/EstimateNameTextField.tsx","../../src/components/XnsNameCapture/Errors.tsx","../../src/components/XnsNameCapture/hooks/routing/useXnsNameCaptureRouting.ts","../../src/components/XnsNameCapture/hooks/routing/useXnsNameFromLocation.ts","../../src/components/XnsNameCapture/SecondaryLink.tsx","../../src/components/XnsNameCapture/XnsNameCapture.tsx","../../src/components/XnsNameCapture/lib/navigateWithUsername.ts","../../src/components/XnsNameCapture/XnsNameCaptureWithContext.tsx"],"sourcesContent":["import type { StandardTextFieldProps, TextFieldProps } from '@mui/material'\nimport { TextField, useTheme } from '@mui/material'\nimport { alphaCss } from '@xylabs/react-theme'\nimport { MIN_DOMAIN_LENGTH, XnsNameHelper } from '@xyo-network/xns-record-payloadset-plugins'\nimport React, {\n useLayoutEffect, useMemo, useRef, useState,\n} from 'react'\n\nexport interface XnsEstimateNameTextFieldProps {\n maskOutput?: boolean\n}\n\nexport const XnsEstimateNameTextField: React.FC<XnsEstimateNameTextFieldProps & TextFieldProps> = ({\n maskOutput = true, onChange: onChangeProp, onBlur: onBlurProp, value, ...props\n}) => {\n const theme = useTheme()\n const [validLength, setValidLength] = useState(false)\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n // watch for external changes to the value and update the validLength state\n useMemo(() => {\n const validValueLength = !!(value && typeof value === 'string' && value.length >= MIN_DOMAIN_LENGTH)\n setValidLength(validValueLength)\n }, [value])\n\n // Update the input value when the value prop changes\n // NOTE: the intent of this component is to remain uncontrolled to avoid the need to manage the value state\n // Therefore, we use useLayoutEffect to update the input value directly.\n useLayoutEffect(() => {\n if (inputRef.current && typeof value === 'string') {\n inputRef.current.value = value\n }\n }, [value])\n\n // override onChange to mask the input and update the event value\n const handleChange: StandardTextFieldProps['onChange'] = (event) => {\n if (maskOutput) {\n const value = event.target.value\n event.target.value = XnsNameHelper.mask(value)\n }\n onChangeProp?.(event)\n\n if (inputRef.current) {\n setValidLength(inputRef.current.value.length >= MIN_DOMAIN_LENGTH)\n }\n }\n\n // override onBlur to do a final mask of the input and update the event value\n const handleBlur: StandardTextFieldProps['onBlur'] = (event) => {\n if (maskOutput) {\n const value = event.target.value\n event.target.value = XnsNameHelper.mask(value, { maskStartEndHyphens: true })\n }\n onBlurProp?.(event)\n }\n\n return (\n <TextField\n inputRef={inputRef}\n onBlur={handleBlur}\n onChange={handleChange}\n {...props}\n slotProps={{ htmlInput: { style: { color: validLength ? theme.vars.palette.text.primary : alphaCss(theme.vars.palette.text.primary, 0.5) } } }}\n />\n )\n}\n","import {\n Alert, Snackbar, useMediaQuery, useTheme,\n} from '@mui/material'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport React from 'react'\n\nexport interface XnsNameCaptureErrorsProps {\n error?: Error\n errorUi?: 'alert' | 'toast'\n resetError?: () => void\n}\n\nexport const XnsNameCaptureErrors: React.FC<XnsNameCaptureErrorsProps> = ({\n error, errorUi, resetError,\n}) => {\n const theme = useTheme()\n const isMobile = useMediaQuery(theme.breakpoints.down('md'))\n\n return (\n <>\n {(errorUi === 'toast')\n ? (\n <Snackbar\n open={!!error}\n message={error?.toString()}\n autoHideDuration={3000}\n onClose={() => resetError?.()}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}\n >\n <Alert\n severity=\"error\"\n sx={{\n width: '100%', display: (isMobile && !error) ? 'none' : undefined, visibility: error ? 'visible' : 'hidden',\n }}\n >\n {error?.message}\n </Alert>\n </Snackbar>\n )\n : (() => {\n // setTimeout(() => setError(undefined), 1500)\n return (\n <FlexRow alignSelf=\"stretch\">\n <Alert\n severity=\"error\"\n sx={{ display: (isMobile && !error) ? 'none' : undefined, visibility: error ? 'visible' : 'hidden' }}\n >\n {error?.message}\n </Alert>\n </FlexRow>\n )\n })()}\n </>\n )\n}\n","import { useMemo } from 'react'\nimport { useNavigate, useSearchParams } from 'react-router-dom'\n\nimport type { XnsNameCaptureProps } from '../../Props.ts'\nimport { useXnsNameFromLocation } from './useXnsNameFromLocation.ts'\n\nexport const useXnsNameCaptureRouting = (props: XnsNameCaptureProps) => {\n const [params] = useSearchParams()\n\n const navigate = useNavigate()\n\n const [name, error] = useXnsNameFromLocation()\n\n return useMemo(() => ({\n ...props,\n defaultXnsName: name,\n routingError: error,\n navigate: props.navigate ?? ((to: string) => navigate(to)),\n paramsString: props.paramsString ? `${props.paramsString}${params.toString()}` : params.toString(),\n }), [props, params, name, error])\n}\n","import { useLocation } from 'react-router-dom'\n\n/**\n * Assumes the user was redirected with a link that contains a username query parameter.\n * @returns The xNS name from the URI username query parameter.\n */\nexport const useXnsNameFromLocation = (): [name: string | undefined, error: Error | undefined] => {\n const location = useLocation()\n const search = new URLSearchParams(location.search)\n const rawName = (search.get('xnsname') ?? search.get('name') ?? search.get('username') ?? '').toLowerCase()\n switch (rawName?.split('.').length) {\n case 1: {\n return [rawName, undefined]\n }\n case 2: {\n const rawNameParts = rawName.split('.')\n if (rawNameParts[1] !== 'xyo') {\n return [, new Error('Invalid xNS name [Bad root]')]\n }\n return [rawNameParts[0], undefined]\n }\n default: {\n return [, new Error('Invalid xNS name [Too many parts]')]\n }\n }\n}\n","import { ArrowForwardRounded } from '@mui/icons-material'\nimport { Stack } from '@mui/material'\nimport type { LinkExProps } from '@xylabs/react-link'\nimport { LinkEx } from '@xylabs/react-link'\nimport { useUserEvents } from '@xylabs/react-pixel'\nimport { XnsNameHelper } from '@xyo-network/xns-record-payloadset-plugins'\nimport type { Dispatch } from 'react'\nimport React from 'react'\n\nimport type {\n XnsNameCaptureBuyCallbacks, XnsNameCaptureRoutingProps, XnsNameCaptureTrackingProps,\n} from './Props.ts'\n\nexport type XnsCaptureSecondaryLinkProps = XnsNameCaptureTrackingProps & XnsNameCaptureRoutingProps & XnsNameCaptureBuyCallbacks & LinkExProps & {\n setError?: Dispatch<Error | undefined>\n text?: string\n xnsName: string\n}\n\nexport const XnsCaptureSecondaryLink: React.FC<XnsCaptureSecondaryLinkProps> = ({\n funnel = 'xns',\n navigate,\n onCaptureName,\n paramsString = '',\n intent,\n placement = '',\n setError,\n text = 'Or make a free reservation',\n to = '/xns/reservation',\n xnsName,\n ...props\n}) => {\n const userEvents = useUserEvents('warn')\n return (\n <LinkEx\n paddingX={0}\n color=\"inherit\"\n style={{ textDecoration: 'underline', textUnderlineOffset: '5px' }}\n onClick={async () => {\n const formattedXnsName = `${xnsName}.xyo`\n const helper = XnsNameHelper.fromString(formattedXnsName)\n const [valid, errors] = await helper.validate()\n if (valid) {\n await userEvents?.userClick({\n funnel, placement, intent,\n })\n navigate?.(`${to}?username=${xnsName}${paramsString}`)\n await onCaptureName?.(xnsName)\n } else {\n setError?.(new Error(errors.join(', ')))\n }\n }}\n {...props}\n >\n <Stack flexDirection=\"row\" gap={0.5} alignItems=\"center\" sx={{ cursor: 'pointer' }}>\n {text}\n <ArrowForwardRounded />\n </Stack>\n </LinkEx>\n )\n}\n","import { KeyboardArrowRightRounded } from '@mui/icons-material'\nimport type { StandardTextFieldProps } from '@mui/material'\nimport { useMediaQuery, useTheme } from '@mui/material'\nimport { ButtonEx } from '@xylabs/react-button'\nimport { FlexCol, FlexRow } from '@xylabs/react-flexbox'\nimport { MIN_DOMAIN_LENGTH, XnsNameHelper } from '@xyo-network/xns-record-payloadset-plugins'\nimport type { KeyboardEventHandler } from 'react'\nimport React, { useCallback, useState } from 'react'\n\nimport { XnsEstimateNameTextField } from '../EstimateName/index.ts'\nimport { XnsNameCaptureErrors } from './Errors.tsx'\nimport { navigateWithUsername } from './lib/index.ts'\nimport type { XnsNameCaptureProps } from './Props.ts'\nimport { XnsCaptureSecondaryLink } from './SecondaryLink.js'\n\nexport const XnsNameCapture: React.FC<XnsNameCaptureProps> = ({\n autoFocus = false,\n buttonText = 'Buy My Name',\n children,\n defaultXnsName,\n disabled,\n errorUi = 'alert',\n funnel = 'xns',\n intent = 'unset',\n mobileButtonText = 'Buy',\n navigate,\n onCaptureName: onCaptureNameProp,\n onNameChange,\n paramsString = '',\n placement = '',\n routingError,\n showSecondary = false,\n to = '/xns/estimation',\n ...props\n}) => {\n const [xnsName, setXnsName] = useState<string>(() => defaultXnsName ?? '')\n const [error, setError] = useState<Error | undefined>(routingError)\n\n const theme = useTheme()\n const isMobile = useMediaQuery(theme.breakpoints.down('md'))\n\n const captureDisabled = !xnsName || xnsName.length < MIN_DOMAIN_LENGTH\n\n const handleChange: StandardTextFieldProps['onChange'] = (event) => {\n const NsName = XnsNameHelper.mask(event.target.value)\n onNameChange?.(NsName)\n setXnsName(NsName)\n setError(undefined)\n }\n\n const onCaptureName = useCallback(async () => {\n if (captureDisabled) return\n const formattedXnsName = `${xnsName}.xyo`\n const helper = XnsNameHelper.fromString(formattedXnsName)\n const [valid, errors] = await helper.validate()\n if (valid) {\n await onCaptureNameProp?.(xnsName)\n\n navigateWithUsername(xnsName, paramsString, navigate, to)\n } else {\n setError(new Error(errors.join(', ')))\n }\n }, [paramsString, to, xnsName, onCaptureNameProp, navigate])\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = useCallback(async (event) => {\n if (event.key === 'Enter' && !captureDisabled) {\n await onCaptureName?.()\n }\n }, [captureDisabled, onCaptureName])\n\n return (\n <FlexCol gap={showSecondary ? 1.5 : 0} alignItems=\"center\" {...props}>\n <FlexRow gap={1}>\n <XnsEstimateNameTextField\n autoFocus={autoFocus}\n disabled={disabled}\n label=\"xNS Name\"\n variant=\"outlined\"\n size=\"small\"\n value={xnsName ?? ''}\n onKeyDown={onKeyDown}\n onChange={handleChange}\n onBlur={handleChange}\n />\n <ButtonEx\n disabled={captureDisabled}\n funnel={funnel}\n intent={intent}\n placement={placement}\n variant=\"contained\"\n color=\"success\"\n endIcon={<KeyboardArrowRightRounded />}\n onClick={onCaptureName}\n >\n {isMobile ? mobileButtonText : buttonText}\n </ButtonEx>\n </FlexRow>\n {(showSecondary === true)\n ? (\n <XnsCaptureSecondaryLink\n xnsName={xnsName}\n placement={placement}\n funnel={funnel}\n setError={setError}\n />\n )\n : null}\n {\n // eslint-disable-next-line unicorn/prefer-logical-operator-over-ternary\n showSecondary ? showSecondary : null\n }\n {children}\n <XnsNameCaptureErrors error={error} errorUi={errorUi} resetError={() => setError(undefined)} />\n </FlexCol>\n )\n}\n","import type { To } from 'react-router-dom'\n\nexport const navigateWithUsername = (xnsName: string, paramsString: string, navigate?: ((to: string) => void), to?: To) => {\n // avoid duplicating the username param\n const params = new URLSearchParams(paramsString)\n const usernameParam = params.get('username')\n if (usernameParam) {\n // if username param is the same as the xnsName, navigate\n if (usernameParam === xnsName) {\n navigate?.(`${to}?${paramsString}`)\n }\n if (usernameParam !== xnsName) {\n // if username param is different, replace it\n params.set('username', xnsName)\n navigate?.(`${to}?${params.toString()}`)\n }\n } else {\n // if no username param, include it\n navigate?.(`${to}?username=${xnsName}&${paramsString}`)\n }\n}\n","import React, { useMemo } from 'react'\n\nimport { useXnsNameCaptureRouting } from './hooks/index.ts'\nimport type { XnsNameCaptureProps } from './Props.ts'\nimport { XnsNameCapture } from './XnsNameCapture.tsx'\n\nexport const XnsNameCaptureWithContext: React.FC<XnsNameCaptureProps> = (props) => {\n const routingProps = useXnsNameCaptureRouting(props)\n\n const updatedProps = useMemo<XnsNameCaptureProps>(() => ({\n ...props,\n ...routingProps,\n }), [routingProps, props])\n\n return (\n <XnsNameCapture {...updatedProps} />\n )\n}\n"],"mappings":";;;;AACA,SAASA,WAAWC,gBAAgB;AACpC,SAASC,gBAAgB;AACzB,SAASC,mBAAmBC,qBAAqB;AACjD,OAAOC,SACLC,iBAAiBC,SAASC,QAAQC,gBAC7B;AAMA,IAAMC,2BAAqF,wBAAC,EACjGC,aAAa,MAAMC,UAAUC,cAAcC,QAAQC,YAAYC,OAAO,GAAGC,MAAAA,MAC1E;AACC,QAAMC,QAAQC,SAAAA;AACd,QAAM,CAACC,aAAaC,cAAAA,IAAkBC,SAAS,KAAA;AAE/C,QAAMC,WAAWC,OAAyB,IAAA;AAG1CC,UAAQ,MAAA;AACN,UAAMC,mBAAmB,CAAC,EAAEV,SAAS,OAAOA,UAAU,YAAYA,MAAMW,UAAUC;AAClFP,mBAAeK,gBAAAA;EACjB,GAAG;IAACV;GAAM;AAKVa,kBAAgB,MAAA;AACd,QAAIN,SAASO,WAAW,OAAOd,UAAU,UAAU;AACjDO,eAASO,QAAQd,QAAQA;IAC3B;EACF,GAAG;IAACA;GAAM;AAGV,QAAMe,eAAmD,wBAACC,UAAAA;AACxD,QAAIrB,YAAY;AACd,YAAMK,SAAQgB,MAAMC,OAAOjB;AAC3BgB,YAAMC,OAAOjB,QAAQkB,cAAcC,KAAKnB,MAAAA;IAC1C;AACAH,mBAAemB,KAAAA;AAEf,QAAIT,SAASO,SAAS;AACpBT,qBAAeE,SAASO,QAAQd,MAAMW,UAAUC,iBAAAA;IAClD;EACF,GAVyD;AAazD,QAAMQ,aAA+C,wBAACJ,UAAAA;AACpD,QAAIrB,YAAY;AACd,YAAMK,SAAQgB,MAAMC,OAAOjB;AAC3BgB,YAAMC,OAAOjB,QAAQkB,cAAcC,KAAKnB,QAAO;QAAEqB,qBAAqB;MAAK,CAAA;IAC7E;AACAtB,iBAAaiB,KAAAA;EACf,GANqD;AAQrD,SACE,sBAAA,cAACM,WAAAA;IACCf;IACAT,QAAQsB;IACRxB,UAAUmB;IACT,GAAGd;IACJsB,WAAW;MAAEC,WAAW;QAAEC,OAAO;UAAEC,OAAOtB,cAAcF,MAAMyB,KAAKC,QAAQC,KAAKC,UAAUC,SAAS7B,MAAMyB,KAAKC,QAAQC,KAAKC,SAAS,GAAA;QAAK;MAAE;IAAE;;AAGnJ,GAtDkG;;;ACZlG,SACEE,OAAOC,UAAUC,eAAeC,YAAAA,iBAC3B;AACP,SAASC,eAAe;AACxB,OAAOC,YAAW;AAQX,IAAMC,uBAA4D,wBAAC,EACxEC,OAAOC,SAASC,WAAU,MAC3B;AACC,QAAMC,QAAQC,UAAAA;AACd,QAAMC,WAAWC,cAAcH,MAAMI,YAAYC,KAAK,IAAA,CAAA;AAEtD,SACE,gBAAAC,OAAA,cAAAA,OAAA,UAAA,MACIR,YAAY,UAER,gBAAAQ,OAAA,cAACC,UAAAA;IACCC,MAAM,CAAC,CAACX;IACRY,SAASZ,OAAOa,SAAAA;IAChBC,kBAAkB;IAClBC,SAAS,6BAAMb,aAAAA,GAAN;IACTc,cAAc;MAAEC,UAAU;MAAUC,YAAY;IAAS;KAEzD,gBAAAT,OAAA,cAACU,OAAAA;IACCC,UAAS;IACTC,IAAI;MACFC,OAAO;MAAQC,SAAUlB,YAAY,CAACL,QAAS,SAASwB;MAAWC,YAAYzB,QAAQ,YAAY;IACrG;KAECA,OAAOY,OAAAA,CAAAA,KAIb,MAAA;AAEC,WACE,gBAAAH,OAAA,cAACiB,SAAAA;MAAQC,WAAU;OACjB,gBAAAlB,OAAA,cAACU,OAAAA;MACCC,UAAS;MACTC,IAAI;QAAEE,SAAUlB,YAAY,CAACL,QAAS,SAASwB;QAAWC,YAAYzB,QAAQ,YAAY;MAAS;OAElGA,OAAOY,OAAAA,CAAAA;EAIhB,GAAA,CAAA;AAGV,GA1CyE;;;ACZzE,SAASgB,WAAAA,gBAAe;AACxB,SAASC,aAAaC,uBAAuB;;;ACD7C,SAASC,mBAAmB;AAMrB,IAAMC,yBAAyB,6BAAA;AACpC,QAAMC,WAAWC,YAAAA;AACjB,QAAMC,SAAS,IAAIC,gBAAgBH,SAASE,MAAM;AAClD,QAAME,WAAWF,OAAOG,IAAI,SAAA,KAAcH,OAAOG,IAAI,MAAA,KAAWH,OAAOG,IAAI,UAAA,KAAe,IAAIC,YAAW;AACzG,UAAQF,SAASG,MAAM,GAAA,EAAKC,QAAAA;IAC1B,KAAK,GAAG;AACN,aAAO;QAACJ;QAASK;;IACnB;IACA,KAAK,GAAG;AACN,YAAMC,eAAeN,QAAQG,MAAM,GAAA;AACnC,UAAIG,aAAa,CAAA,MAAO,OAAO;AAC7B,eAAO;;UAAG,IAAIC,MAAM,6BAAA;;MACtB;AACA,aAAO;QAACD,aAAa,CAAA;QAAID;;IAC3B;IACA,SAAS;AACP,aAAO;;QAAG,IAAIE,MAAM,mCAAA;;IACtB;EACF;AACF,GAnBsC;;;ADA/B,IAAMC,2BAA2B,wBAACC,UAAAA;AACvC,QAAM,CAACC,MAAAA,IAAUC,gBAAAA;AAEjB,QAAMC,WAAWC,YAAAA;AAEjB,QAAM,CAACC,MAAMC,KAAAA,IAASC,uBAAAA;AAEtB,SAAOC,SAAQ,OAAO;IACpB,GAAGR;IACHS,gBAAgBJ;IAChBK,cAAcJ;IACdH,UAAUH,MAAMG,aAAa,CAACQ,OAAeR,SAASQ,EAAAA;IACtDC,cAAcZ,MAAMY,eAAe,GAAGZ,MAAMY,YAAY,GAAGX,OAAOY,SAAQ,CAAA,KAAOZ,OAAOY,SAAQ;EAClG,IAAI;IAACb;IAAOC;IAAQI;IAAMC;GAAM;AAClC,GAdwC;;;AENxC,SAASQ,2BAA2B;AACpC,SAASC,aAAa;AAEtB,SAASC,cAAc;AACvB,SAASC,qBAAqB;AAC9B,SAASC,iBAAAA,sBAAqB;AAE9B,OAAOC,YAAW;AAYX,IAAMC,0BAAkE,wBAAC,EAC9EC,SAAS,OACTC,UACAC,eACAC,eAAe,IACfC,QACAC,YAAY,IACZC,UACAC,OAAO,8BACPC,KAAK,oBACLC,SACA,GAAGC,MAAAA,MACJ;AACC,QAAMC,aAAaC,cAAc,MAAA;AACjC,SACE,gBAAAC,OAAA,cAACC,QAAAA;IACCC,UAAU;IACVC,OAAM;IACNC,OAAO;MAAEC,gBAAgB;MAAaC,qBAAqB;IAAM;IACjEC,SAAS,mCAAA;AACP,YAAMC,mBAAmB,GAAGZ,OAAAA;AAC5B,YAAMa,SAASC,eAAcC,WAAWH,gBAAAA;AACxC,YAAM,CAACI,OAAOC,MAAAA,IAAU,MAAMJ,OAAOK,SAAQ;AAC7C,UAAIF,OAAO;AACT,cAAMd,YAAYiB,UAAU;UAC1B5B;UAAQK;UAAWD;QACrB,CAAA;AACAH,mBAAW,GAAGO,EAAAA,aAAeC,OAAAA,GAAUN,YAAAA,EAAc;AACrD,cAAMD,gBAAgBO,OAAAA;MACxB,OAAO;AACLH,mBAAW,IAAIuB,MAAMH,OAAOI,KAAK,IAAA,CAAA,CAAA;MACnC;IACF,GAbS;IAcR,GAAGpB;KAEJ,gBAAAG,OAAA,cAACkB,OAAAA;IAAMC,eAAc;IAAMC,KAAK;IAAKC,YAAW;IAASC,IAAI;MAAEC,QAAQ;IAAU;KAC9E7B,MACD,gBAAAM,OAAA,cAACwB,qBAAAA,IAAAA,CAAAA,CAAAA;AAIT,GAzC+E;;;ACnB/E,SAASC,iCAAiC;AAE1C,SAASC,iBAAAA,gBAAeC,YAAAA,iBAAgB;AACxC,SAASC,gBAAgB;AACzB,SAASC,SAASC,WAAAA,gBAAe;AACjC,SAASC,qBAAAA,oBAAmBC,iBAAAA,sBAAqB;AAEjD,OAAOC,UAASC,aAAaC,YAAAA,iBAAgB;;;ACLtC,IAAMC,uBAAuB,wBAACC,SAAiBC,cAAsBC,UAAmCC,OAAAA;AAE7G,QAAMC,SAAS,IAAIC,gBAAgBJ,YAAAA;AACnC,QAAMK,gBAAgBF,OAAOG,IAAI,UAAA;AACjC,MAAID,eAAe;AAEjB,QAAIA,kBAAkBN,SAAS;AAC7BE,iBAAW,GAAGC,EAAAA,IAAMF,YAAAA,EAAc;IACpC;AACA,QAAIK,kBAAkBN,SAAS;AAE7BI,aAAOI,IAAI,YAAYR,OAAAA;AACvBE,iBAAW,GAAGC,EAAAA,IAAMC,OAAOK,SAAQ,CAAA,EAAI;IACzC;EACF,OAAO;AAELP,eAAW,GAAGC,EAAAA,aAAeH,OAAAA,IAAWC,YAAAA,EAAc;EACxD;AACF,GAlBoC;;;ADa7B,IAAMS,iBAAgD,wBAAC,EAC5DC,YAAY,OACZC,aAAa,eACbC,UACAC,gBACAC,UACAC,UAAU,SACVC,SAAS,OACTC,SAAS,SACTC,mBAAmB,OACnBC,UACAC,eAAeC,mBACfC,cACAC,eAAe,IACfC,YAAY,IACZC,cACAC,gBAAgB,OAChBC,KAAK,mBACL,GAAGC,MAAAA,MACJ;AACC,QAAM,CAACC,SAASC,UAAAA,IAAcC,UAAiB,MAAMlB,kBAAkB,EAAA;AACvE,QAAM,CAACmB,OAAOC,QAAAA,IAAYF,UAA4BN,YAAAA;AAEtD,QAAMS,QAAQC,UAAAA;AACd,QAAMC,WAAWC,eAAcH,MAAMI,YAAYC,KAAK,IAAA,CAAA;AAEtD,QAAMC,kBAAkB,CAACX,WAAWA,QAAQY,SAASC;AAErD,QAAMC,eAAmD,wBAACC,UAAAA;AACxD,UAAMC,SAASC,eAAcC,KAAKH,MAAMI,OAAOC,KAAK;AACpD3B,mBAAeuB,MAAAA;AACff,eAAWe,MAAAA;AACXZ,aAASiB,MAAAA;EACX,GALyD;AAOzD,QAAM9B,gBAAgB+B,YAAY,YAAA;AAChC,QAAIX,gBAAiB;AACrB,UAAMY,mBAAmB,GAAGvB,OAAAA;AAC5B,UAAMwB,SAASP,eAAcQ,WAAWF,gBAAAA;AACxC,UAAM,CAACG,OAAOC,MAAAA,IAAU,MAAMH,OAAOI,SAAQ;AAC7C,QAAIF,OAAO;AACT,YAAMlC,oBAAoBQ,OAAAA;AAE1B6B,2BAAqB7B,SAASN,cAAcJ,UAAUQ,EAAAA;IACxD,OAAO;AACLM,eAAS,IAAI0B,MAAMH,OAAOI,KAAK,IAAA,CAAA,CAAA;IACjC;EACF,GAAG;IAACrC;IAAcI;IAAIE;IAASR;IAAmBF;GAAS;AAE3D,QAAM0C,YAAkDV,YAAY,OAAOP,UAAAA;AACzE,QAAIA,MAAMkB,QAAQ,WAAW,CAACtB,iBAAiB;AAC7C,YAAMpB,gBAAAA;IACR;EACF,GAAG;IAACoB;IAAiBpB;GAAc;AAEnC,SACE,gBAAA2C,OAAA;IAACC;IAAAA;MAAQC,KAAKvC,gBAAgB,MAAM;MAAGwC,YAAW;MAAU,GAAGtC;;IAC7D,gBAAAmC,OAAA,cAACI,UAAAA;MAAQF,KAAK;OACZ,gBAAAF,OAAA,cAACK,0BAAAA;MACC1D;MACAI;MACAuD,OAAM;MACNC,SAAQ;MACRC,MAAK;MACLtB,OAAOpB,WAAW;MAClBgC;MACAW,UAAU7B;MACV8B,QAAQ9B;QAEV,gBAAAoB,OAAA,cAACW,UAAAA;MACC5D,UAAU0B;MACVxB;MACAC;MACAO;MACA8C,SAAQ;MACRK,OAAM;MACNC,SAAS,gBAAAb,OAAA,cAACc,2BAAAA,IAAAA;MACVC,SAAS1D;OAERgB,WAAWlB,mBAAmBP,UAAAA,CAAAA;IAGjCe,kBAAkB,OAEd,gBAAAqC,OAAA,cAACgB,yBAAAA;MACClD;MACAL;MACAR;MACAiB;SAGJ;;IAGFP,gBAAgBA,gBAAgB;IAEjCd;IACD,gBAAAmD,OAAA,cAACiB,sBAAAA;MAAqBhD;MAAcjB;MAAkBkE,YAAY,6BAAMhD,SAASiB,MAAAA,GAAf;;;AAGxE,GApG6D;;;AEf7D,OAAOgC,UAASC,WAAAA,gBAAe;AAMxB,IAAMC,4BAA2D,wBAACC,UAAAA;AACvE,QAAMC,eAAeC,yBAAyBF,KAAAA;AAE9C,QAAMG,eAAeC,SAA6B,OAAO;IACvD,GAAGJ;IACH,GAAGC;EACL,IAAI;IAACA;IAAcD;GAAM;AAEzB,SACE,gBAAAK,OAAA,cAACC,gBAAmBH,YAAAA;AAExB,GAXwE;","names":["TextField","useTheme","alphaCss","MIN_DOMAIN_LENGTH","XnsNameHelper","React","useLayoutEffect","useMemo","useRef","useState","XnsEstimateNameTextField","maskOutput","onChange","onChangeProp","onBlur","onBlurProp","value","props","theme","useTheme","validLength","setValidLength","useState","inputRef","useRef","useMemo","validValueLength","length","MIN_DOMAIN_LENGTH","useLayoutEffect","current","handleChange","event","target","XnsNameHelper","mask","handleBlur","maskStartEndHyphens","TextField","slotProps","htmlInput","style","color","vars","palette","text","primary","alphaCss","Alert","Snackbar","useMediaQuery","useTheme","FlexRow","React","XnsNameCaptureErrors","error","errorUi","resetError","theme","useTheme","isMobile","useMediaQuery","breakpoints","down","React","Snackbar","open","message","toString","autoHideDuration","onClose","anchorOrigin","vertical","horizontal","Alert","severity","sx","width","display","undefined","visibility","FlexRow","alignSelf","useMemo","useNavigate","useSearchParams","useLocation","useXnsNameFromLocation","location","useLocation","search","URLSearchParams","rawName","get","toLowerCase","split","length","undefined","rawNameParts","Error","useXnsNameCaptureRouting","props","params","useSearchParams","navigate","useNavigate","name","error","useXnsNameFromLocation","useMemo","defaultXnsName","routingError","to","paramsString","toString","ArrowForwardRounded","Stack","LinkEx","useUserEvents","XnsNameHelper","React","XnsCaptureSecondaryLink","funnel","navigate","onCaptureName","paramsString","intent","placement","setError","text","to","xnsName","props","userEvents","useUserEvents","React","LinkEx","paddingX","color","style","textDecoration","textUnderlineOffset","onClick","formattedXnsName","helper","XnsNameHelper","fromString","valid","errors","validate","userClick","Error","join","Stack","flexDirection","gap","alignItems","sx","cursor","ArrowForwardRounded","KeyboardArrowRightRounded","useMediaQuery","useTheme","ButtonEx","FlexCol","FlexRow","MIN_DOMAIN_LENGTH","XnsNameHelper","React","useCallback","useState","navigateWithUsername","xnsName","paramsString","navigate","to","params","URLSearchParams","usernameParam","get","set","toString","XnsNameCapture","autoFocus","buttonText","children","defaultXnsName","disabled","errorUi","funnel","intent","mobileButtonText","navigate","onCaptureName","onCaptureNameProp","onNameChange","paramsString","placement","routingError","showSecondary","to","props","xnsName","setXnsName","useState","error","setError","theme","useTheme","isMobile","useMediaQuery","breakpoints","down","captureDisabled","length","MIN_DOMAIN_LENGTH","handleChange","event","NsName","XnsNameHelper","mask","target","value","undefined","useCallback","formattedXnsName","helper","fromString","valid","errors","validate","navigateWithUsername","Error","join","onKeyDown","key","React","FlexCol","gap","alignItems","FlexRow","XnsEstimateNameTextField","label","variant","size","onChange","onBlur","ButtonEx","color","endIcon","KeyboardArrowRightRounded","onClick","XnsCaptureSecondaryLink","XnsNameCaptureErrors","resetError","React","useMemo","XnsNameCaptureWithContext","props","routingProps","useXnsNameCaptureRouting","updatedProps","useMemo","React","XnsNameCapture"]}
1
+ {"version":3,"sources":["../../src/components/EstimateName/EstimateNameTextField.tsx","../../src/components/XnsNameCapture/Errors.tsx","../../src/components/XnsNameCapture/hooks/routing/useXnsNameCaptureRouting.ts","../../src/components/XnsNameCapture/hooks/routing/useXnsNameFromLocation.ts","../../src/components/XnsNameCapture/SecondaryLink.tsx","../../src/components/XnsNameCapture/XnsNameCapture.tsx","../../src/components/XnsNameCapture/lib/navigateWithUsername.ts","../../src/components/XnsNameCapture/XnsNameCaptureWithContext.tsx"],"sourcesContent":["import type { StandardTextFieldProps, TextFieldProps } from '@mui/material'\nimport { TextField, useTheme } from '@mui/material'\nimport { alphaCss } from '@xylabs/react-theme'\nimport { MIN_DOMAIN_LENGTH, XnsNameHelper } from '@xyo-network/xns-record-payloadset-plugins'\nimport React, {\n useLayoutEffect, useMemo, useRef, useState,\n} from 'react'\n\nexport interface XnsEstimateNameTextFieldProps {\n maskOutput?: boolean\n}\n\nexport const XnsEstimateNameTextField: React.FC<XnsEstimateNameTextFieldProps & TextFieldProps> = ({\n maskOutput = true, onChange: onChangeProp, onBlur: onBlurProp, value, ...props\n}) => {\n const theme = useTheme()\n const [validLength, setValidLength] = useState(false)\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n // watch for external changes to the value and update the validLength state\n useMemo(() => {\n const validValueLength = !!(value && typeof value === 'string' && value.length >= MIN_DOMAIN_LENGTH)\n setValidLength(validValueLength)\n }, [value])\n\n // Update the input value when the value prop changes\n // NOTE: the intent of this component is to remain uncontrolled to avoid the need to manage the value state\n // Therefore, we use useLayoutEffect to update the input value directly.\n useLayoutEffect(() => {\n if (inputRef.current && typeof value === 'string') {\n inputRef.current.value = value\n }\n }, [value])\n\n // override onChange to mask the input and update the event value\n const handleChange: StandardTextFieldProps['onChange'] = (event) => {\n if (maskOutput) {\n const value = event.target.value\n event.target.value = XnsNameHelper.mask(value)\n }\n onChangeProp?.(event)\n\n if (inputRef.current) {\n setValidLength(inputRef.current.value.length >= MIN_DOMAIN_LENGTH)\n }\n }\n\n // override onBlur to do a final mask of the input and update the event value\n const handleBlur: StandardTextFieldProps['onBlur'] = (event) => {\n if (maskOutput) {\n const value = event.target.value\n event.target.value = XnsNameHelper.mask(value, { maskStartEndHyphens: true })\n }\n onBlurProp?.(event)\n }\n\n return (\n <TextField\n inputRef={inputRef}\n onBlur={handleBlur}\n onChange={handleChange}\n {...props}\n slotProps={{ htmlInput: { style: { color: validLength ? theme.vars.palette.text.primary : alphaCss(theme.vars.palette.text.primary, 0.5) } } }}\n />\n )\n}\n","import {\n Alert, Snackbar, useMediaQuery, useTheme,\n} from '@mui/material'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport React from 'react'\n\nexport interface XnsNameCaptureErrorsProps {\n error?: Error\n errorUi?: 'alert' | 'toast'\n resetError?: () => void\n}\n\nexport const XnsNameCaptureErrors: React.FC<XnsNameCaptureErrorsProps> = ({\n error, errorUi, resetError,\n}) => {\n const theme = useTheme()\n const isMobile = useMediaQuery(theme.breakpoints.down('md'))\n\n return (\n <>\n {(errorUi === 'toast')\n ? (\n <Snackbar\n open={!!error}\n message={error?.toString()}\n autoHideDuration={3000}\n onClose={() => resetError?.()}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}\n >\n <Alert\n severity=\"error\"\n sx={{\n width: '100%', display: (isMobile && !error) ? 'none' : undefined, visibility: error ? 'visible' : 'hidden',\n }}\n >\n {error?.message}\n </Alert>\n </Snackbar>\n )\n : (() => {\n // setTimeout(() => setError(undefined), 1500)\n return (\n <FlexRow alignSelf=\"stretch\">\n <Alert\n severity=\"error\"\n sx={{ display: (isMobile && !error) ? 'none' : undefined, visibility: error ? 'visible' : 'hidden' }}\n >\n {error?.message}\n </Alert>\n </FlexRow>\n )\n })()}\n </>\n )\n}\n","import { useMemo } from 'react'\nimport { useNavigate, useSearchParams } from 'react-router-dom'\n\nimport type { XnsNameCaptureProps } from '../../Props.ts'\nimport { useXnsNameFromLocation } from './useXnsNameFromLocation.ts'\n\nexport const useXnsNameCaptureRouting = (props: XnsNameCaptureProps) => {\n const [params] = useSearchParams()\n\n const navigate = useNavigate()\n\n const [name, error] = useXnsNameFromLocation()\n\n return useMemo(() => ({\n ...props,\n defaultXnsName: name,\n routingError: error,\n navigate: props.navigate ?? ((to: string) => navigate(to)),\n paramsString: props.paramsString ? `${props.paramsString}${params.toString()}` : params.toString(),\n }), [props, params, name, error])\n}\n","import { useLocation } from 'react-router-dom'\n\n/**\n * Assumes the user was redirected with a link that contains a username query parameter.\n * @returns The xNS name from the URI username query parameter.\n */\nexport const useXnsNameFromLocation = (): [name: string | undefined, error: Error | undefined] => {\n const location = useLocation()\n const search = new URLSearchParams(location.search)\n const rawName = (search.get('xnsname') ?? search.get('name') ?? search.get('username') ?? '').toLowerCase()\n switch (rawName?.split('.').length) {\n case 1: {\n return [rawName, undefined]\n }\n case 2: {\n const rawNameParts = rawName.split('.')\n if (rawNameParts[1] !== 'xyo') {\n return [, new Error('Invalid xNS name [Bad root]')]\n }\n return [rawNameParts[0], undefined]\n }\n default: {\n return [, new Error('Invalid xNS name [Too many parts]')]\n }\n }\n}\n","import { ArrowForwardRounded } from '@mui/icons-material'\nimport { Stack } from '@mui/material'\nimport type { LinkExProps } from '@xylabs/react-link'\nimport { LinkEx } from '@xylabs/react-link'\nimport { useUserEvents } from '@xylabs/react-pixel'\nimport { XnsNameHelper } from '@xyo-network/xns-record-payloadset-plugins'\nimport type { Dispatch } from 'react'\nimport React from 'react'\n\nimport type {\n XnsNameCaptureBuyCallbacks, XnsNameCaptureRoutingProps, XnsNameCaptureTrackingProps,\n} from './Props.ts'\n\nexport type XnsCaptureSecondaryLinkProps = XnsNameCaptureTrackingProps & XnsNameCaptureRoutingProps & XnsNameCaptureBuyCallbacks & LinkExProps & {\n setError?: Dispatch<Error | undefined>\n text?: string\n xnsName: string\n}\n\nexport const XnsCaptureSecondaryLink: React.FC<XnsCaptureSecondaryLinkProps> = ({\n funnel = 'xns',\n navigate,\n onCaptureName,\n paramsString = '',\n intent,\n placement = '',\n setError,\n text = 'Or make a free reservation',\n to = '/xns/reservation',\n xnsName,\n ...props\n}) => {\n const userEvents = useUserEvents('warn')\n return (\n <LinkEx\n paddingX={0}\n color=\"inherit\"\n style={{ textDecoration: 'underline', textUnderlineOffset: '5px' }}\n onClick={async () => {\n const formattedXnsName = `${xnsName}.xyo`\n const helper = XnsNameHelper.fromString(formattedXnsName)\n const [valid, errors] = await helper.validate()\n if (valid) {\n await userEvents?.userClick({\n funnel, placement, intent,\n })\n navigate?.(`${to}?username=${xnsName}${paramsString}`)\n await onCaptureName?.(xnsName)\n } else {\n setError?.(new Error(errors.join(', ')))\n }\n }}\n {...props}\n >\n <Stack flexDirection=\"row\" gap={0.5} alignItems=\"center\" sx={{ cursor: 'pointer' }}>\n {text}\n <ArrowForwardRounded />\n </Stack>\n </LinkEx>\n )\n}\n","import { KeyboardArrowRightRounded } from '@mui/icons-material'\nimport type { StandardTextFieldProps } from '@mui/material'\nimport { useMediaQuery, useTheme } from '@mui/material'\nimport { ButtonEx } from '@xylabs/react-button'\nimport { FlexCol, FlexRow } from '@xylabs/react-flexbox'\nimport { MIN_DOMAIN_LENGTH, XnsNameHelper } from '@xyo-network/xns-record-payloadset-plugins'\nimport type { KeyboardEventHandler } from 'react'\nimport React, { useCallback, useState } from 'react'\n\nimport { XnsEstimateNameTextField } from '../EstimateName/index.ts'\nimport { XnsNameCaptureErrors } from './Errors.tsx'\nimport { navigateWithUsername } from './lib/index.ts'\nimport type { XnsNameCaptureProps } from './Props.ts'\nimport { XnsCaptureSecondaryLink } from './SecondaryLink.js'\n\nexport const XnsNameCapture: React.FC<XnsNameCaptureProps> = ({\n autoFocus = false,\n buttonText = 'Buy My Name',\n children,\n defaultXnsName,\n disabled,\n errorUi = 'alert',\n funnel = 'xns',\n intent = 'unset',\n mobileButtonText = 'Buy',\n navigate,\n onCaptureName: onCaptureNameProp,\n onNameChange,\n paramsString = '',\n placement = '',\n routingError,\n showSecondary = false,\n to = '/xns/estimation',\n ...props\n}) => {\n const [xnsName, setXnsName] = useState<string>(() => defaultXnsName ?? '')\n const [error, setError] = useState<Error | undefined>(routingError)\n\n const theme = useTheme()\n const isMobile = useMediaQuery(theme.breakpoints.down('md'))\n\n const captureDisabled = !xnsName || xnsName.length < MIN_DOMAIN_LENGTH\n\n const handleChange: StandardTextFieldProps['onChange'] = (event) => {\n const NsName = XnsNameHelper.mask(event.target.value)\n onNameChange?.(NsName)\n setXnsName(NsName)\n setError(undefined)\n }\n\n const onCaptureName = useCallback(async () => {\n if (captureDisabled) return\n const formattedXnsName = `${xnsName}.xyo`\n const helper = XnsNameHelper.fromString(formattedXnsName)\n const [valid, errors] = await helper.validate()\n if (valid) {\n await onCaptureNameProp?.(xnsName)\n\n navigateWithUsername(xnsName, paramsString, navigate, to)\n } else {\n setError(new Error(errors.join(', ')))\n }\n }, [paramsString, to, xnsName, onCaptureNameProp, navigate])\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = useCallback(async (event) => {\n if (event.key === 'Enter' && !captureDisabled) {\n await onCaptureName?.()\n }\n }, [captureDisabled, onCaptureName])\n\n return (\n <FlexCol gap={showSecondary ? 1.5 : 0} alignItems=\"center\" {...props}>\n <FlexRow gap={1}>\n <XnsEstimateNameTextField\n autoFocus={autoFocus}\n disabled={disabled}\n label=\"xNS Name\"\n variant=\"outlined\"\n size=\"small\"\n value={xnsName ?? ''}\n onKeyDown={onKeyDown}\n onChange={handleChange}\n onBlur={handleChange}\n />\n <ButtonEx\n disabled={captureDisabled}\n funnel={funnel}\n intent={intent}\n placement={placement}\n variant=\"contained\"\n color=\"success\"\n endIcon={<KeyboardArrowRightRounded />}\n onClick={onCaptureName}\n >\n {isMobile ? mobileButtonText : buttonText}\n </ButtonEx>\n </FlexRow>\n {(showSecondary === true)\n ? (\n <XnsCaptureSecondaryLink\n xnsName={xnsName}\n placement={placement}\n funnel={funnel}\n setError={setError}\n />\n )\n : null}\n {\n // eslint-disable-next-line unicorn/prefer-logical-operator-over-ternary\n showSecondary ? showSecondary : null\n }\n {children}\n <XnsNameCaptureErrors error={error} errorUi={errorUi} resetError={() => setError(undefined)} />\n </FlexCol>\n )\n}\n","import type { To } from 'react-router-dom'\n\nexport const navigateWithUsername = (xnsName: string, paramsString: string, navigate?: ((to: string) => void), to?: To) => {\n // avoid duplicating the username param\n const params = new URLSearchParams(paramsString)\n const usernameParam = params.get('username')\n if (usernameParam) {\n // if username param is the same as the xnsName, navigate\n if (usernameParam === xnsName) {\n navigate?.(`${to}?${paramsString}`)\n }\n if (usernameParam !== xnsName) {\n // if username param is different, replace it\n params.set('username', xnsName)\n navigate?.(`${to}?${params.toString()}`)\n }\n } else {\n // if no username param, include it\n navigate?.(`${to}?username=${xnsName}&${paramsString}`)\n }\n}\n","import React, { useMemo } from 'react'\n\nimport { useXnsNameCaptureRouting } from './hooks/index.ts'\nimport type { XnsNameCaptureProps } from './Props.ts'\nimport { XnsNameCapture } from './XnsNameCapture.tsx'\n\nexport const XnsNameCaptureWithContext: React.FC<XnsNameCaptureProps> = (props) => {\n const routingProps = useXnsNameCaptureRouting(props)\n\n const updatedProps = useMemo<XnsNameCaptureProps>(() => ({\n ...props,\n ...routingProps,\n }), [routingProps, props])\n\n return (\n <XnsNameCapture {...updatedProps} />\n )\n}\n"],"mappings":"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","names":["value","useTheme","jsx","useMemo","useMemo","XnsNameHelper","jsx","useMediaQuery","useTheme","FlexRow","MIN_DOMAIN_LENGTH","XnsNameHelper","useState","jsx","jsxs","useState","useTheme","useMediaQuery","MIN_DOMAIN_LENGTH","XnsNameHelper","FlexRow","useMemo","jsx","useMemo"]}