@activecollab/components 2.0.293 → 2.0.295
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/cjs/components/Input/InputUrl.js +2 -1
- package/dist/cjs/components/Input/InputUrl.js.map +1 -1
- package/dist/cjs/utils/stringUtils.js +16 -0
- package/dist/cjs/utils/stringUtils.js.map +1 -0
- package/dist/cjs/utils/stringUtils.test.js +24 -0
- package/dist/cjs/utils/stringUtils.test.js.map +1 -0
- package/dist/esm/components/Input/InputUrl.d.ts.map +1 -1
- package/dist/esm/components/Input/InputUrl.js +2 -1
- package/dist/esm/components/Input/InputUrl.js.map +1 -1
- package/dist/esm/utils/stringUtils.d.ts +6 -0
- package/dist/esm/utils/stringUtils.d.ts.map +1 -0
- package/dist/esm/utils/stringUtils.js +10 -0
- package/dist/esm/utils/stringUtils.js.map +1 -0
- package/dist/esm/utils/stringUtils.test.d.ts +2 -0
- package/dist/esm/utils/stringUtils.test.d.ts.map +1 -0
- package/dist/esm/utils/stringUtils.test.js +22 -0
- package/dist/esm/utils/stringUtils.test.js.map +1 -0
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,6 +9,7 @@ var _Input = require("./Input");
|
|
|
9
9
|
var _InputSelect = require("./InputSelect");
|
|
10
10
|
var _Styles = require("./Styles");
|
|
11
11
|
var _utils = require("../../utils");
|
|
12
|
+
var _stringUtils = require("../../utils/stringUtils");
|
|
12
13
|
var _excluded = ["size", "disabled", "value", "onChange", "scheme"];
|
|
13
14
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
14
15
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
@@ -114,7 +115,7 @@ var InputUrl = exports.InputUrl = /*#__PURE__*/(0, _react.forwardRef)(function (
|
|
|
114
115
|
}, [onChange, value]);
|
|
115
116
|
var handlePaste = function handlePaste(e) {
|
|
116
117
|
e.preventDefault();
|
|
117
|
-
var paste = e.clipboardData.getData("text");
|
|
118
|
+
var paste = (0, _stringUtils.sanitizeAndTrim)(e.clipboardData.getData("text"));
|
|
118
119
|
var _separatePrefixFromVa3 = separatePrefixFromValue(paste),
|
|
119
120
|
newPrefix = _separatePrefixFromVa3.newPrefix,
|
|
120
121
|
newValue = _separatePrefixFromVa3.newValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputUrl.js","names":["_react","_interopRequireWildcard","require","_Input","_InputSelect","_Styles","_utils","_excluded","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","l","Symbol","iterator","u","next","done","push","value","return","isArray","_objectWithoutProperties","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","defaultOptions","id","InputUrl","exports","forwardRef","_ref","ref","_ref$size","size","disabled","_ref$value","defaultValue","onChange","scheme","rest","inputRef","useRef","handleRef","useForkRef","options","useMemo","map","_useState","useState","_useState2","prefix","setPrefix","_useState3","_useState4","setValue","separatePrefixFromValue","fullValue","newPrefix","newValue","forEach","option","startsWith","replace","useEffect","_separatePrefixFromVa","handleChange","useCallback","inputValue","target","_separatePrefixFromVa2","handleSelectChange","val","setTimeout","_inputRef$current","current","focus","handlePaste","preventDefault","paste","clipboardData","getData","_separatePrefixFromVa3","startAdornmentComponent","createElement","InputSelect","key","selected","StyledInputSelectTrigger","$disabled","$size","Input","type","onPaste","startAdornment","displayName"],"sources":["../../../../src/components/Input/InputUrl.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { Input, InputProps } from \"./Input\";\nimport { InputSelect } from \"./InputSelect\";\nimport { StyledInputSelectTrigger } from \"./Styles\";\nimport { useForkRef } from \"../../utils\";\n\nexport interface InputUrlProps\n extends Omit<\n InputProps,\n \"type\" | \"startAdornment\" | \"onChange\" | \"value\" | \"size\"\n > {\n /** Input value */\n value?: string;\n /** onChange function */\n onChange?: (val: string) => void;\n /** Input size */\n size?: \"regular\" | \"big\" | \"biggest\";\n scheme?: string[] | string;\n}\n\nconst defaultOptions = [\n { id: \"https://\", name: \"https://\" },\n { id: \"http://\", name: \"http://\" },\n];\n\nexport const InputUrl = forwardRef<HTMLInputElement, InputUrlProps>(\n (\n {\n size = \"regular\",\n disabled,\n value: defaultValue = \"\",\n onChange,\n scheme,\n ...rest\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const handleRef = useForkRef(ref, inputRef);\n\n const options = useMemo(() => {\n if (scheme && scheme.length > 0) {\n if (Array.isArray(scheme)) {\n return scheme.map((i) => ({ id: i, name: i }));\n } else {\n return [{ id: scheme, name: scheme }];\n }\n }\n return defaultOptions;\n }, [scheme]);\n\n const [prefix, setPrefix] = useState(options[0].id);\n\n const [value, setValue] = useState(\"\");\n\n const separatePrefixFromValue = (\n fullValue: string\n ): { newPrefix: string; newValue: string } => {\n let newPrefix = prefix;\n let newValue = fullValue;\n\n options.forEach((option) => {\n if (fullValue.startsWith(option.id)) {\n newPrefix = option.id;\n newValue = fullValue.replace(option.id, \"\");\n }\n });\n\n setValue(newValue);\n return { newPrefix, newValue };\n };\n\n useEffect(() => {\n const { newPrefix, newValue } = separatePrefixFromValue(defaultValue);\n setPrefix(newPrefix);\n setValue(newValue);\n // eslint-disable-next-line\n }, [defaultValue]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n if (!inputValue.startsWith(prefix)) {\n const { newPrefix, newValue } = separatePrefixFromValue(inputValue);\n setPrefix(newPrefix);\n setValue(newValue);\n typeof onChange === \"function\" && onChange(newPrefix + newValue);\n } else {\n const newValue = inputValue.replace(prefix, \"\");\n setValue(newValue);\n typeof onChange === \"function\" && onChange(prefix + newValue);\n }\n },\n // eslint-disable-next-line\n [onChange, prefix]\n );\n\n const handleSelectChange = useCallback(\n (val: string | number | (string | number)[]) => {\n setPrefix(val as string);\n setTimeout(() => {\n inputRef.current?.focus();\n }, 200);\n typeof onChange === \"function\" && onChange((val as string) + value);\n },\n [onChange, value]\n );\n\n const handlePaste = (e: React.ClipboardEvent) => {\n e.preventDefault();\n const paste = e.clipboardData.getData(\"text\");\n const { newPrefix, newValue } = separatePrefixFromValue(paste);\n if (newPrefix !== prefix) {\n setPrefix(newPrefix);\n }\n setValue(newValue);\n\n if (typeof onChange === \"function\") {\n onChange(newPrefix + newValue);\n }\n };\n\n const startAdornmentComponent = useMemo(() => {\n if (options.length > 1) {\n return (\n <InputSelect\n key={prefix}\n size={size}\n onChange={handleSelectChange}\n options={options}\n selected={prefix}\n disabled={disabled}\n />\n );\n } else {\n return (\n <StyledInputSelectTrigger\n key={prefix}\n $disabled={disabled}\n $size={size}\n >\n {prefix}\n </StyledInputSelectTrigger>\n );\n }\n }, [disabled, handleSelectChange, options, prefix, size]);\n\n useEffect(() => {\n if (options.length > 0 && !defaultValue) {\n setPrefix(options[0].id);\n }\n }, [defaultValue, options]);\n\n return (\n <Input\n {...rest}\n ref={handleRef}\n size={size}\n value={value}\n disabled={disabled}\n type=\"text\"\n onPaste={handlePaste}\n onChange={handleChange}\n data-testid=\"InputUrl\"\n startAdornment={startAdornmentComponent}\n />\n );\n }\n);\n\nInputUrl.displayName = \"InputUrl\";\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"InputUrl.js","names":["_react","_interopRequireWildcard","require","_Input","_InputSelect","_Styles","_utils","_stringUtils","_excluded","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","l","Symbol","iterator","u","next","done","push","value","return","isArray","_objectWithoutProperties","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","defaultOptions","id","InputUrl","exports","forwardRef","_ref","ref","_ref$size","size","disabled","_ref$value","defaultValue","onChange","scheme","rest","inputRef","useRef","handleRef","useForkRef","options","useMemo","map","_useState","useState","_useState2","prefix","setPrefix","_useState3","_useState4","setValue","separatePrefixFromValue","fullValue","newPrefix","newValue","forEach","option","startsWith","replace","useEffect","_separatePrefixFromVa","handleChange","useCallback","inputValue","target","_separatePrefixFromVa2","handleSelectChange","val","setTimeout","_inputRef$current","current","focus","handlePaste","preventDefault","paste","sanitizeAndTrim","clipboardData","getData","_separatePrefixFromVa3","startAdornmentComponent","createElement","InputSelect","key","selected","StyledInputSelectTrigger","$disabled","$size","Input","type","onPaste","startAdornment","displayName"],"sources":["../../../../src/components/Input/InputUrl.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { Input, InputProps } from \"./Input\";\nimport { InputSelect } from \"./InputSelect\";\nimport { StyledInputSelectTrigger } from \"./Styles\";\nimport { useForkRef } from \"../../utils\";\nimport { sanitizeAndTrim } from \"../../utils/stringUtils\";\n\nexport interface InputUrlProps\n extends Omit<\n InputProps,\n \"type\" | \"startAdornment\" | \"onChange\" | \"value\" | \"size\"\n > {\n /** Input value */\n value?: string;\n /** onChange function */\n onChange?: (val: string) => void;\n /** Input size */\n size?: \"regular\" | \"big\" | \"biggest\";\n scheme?: string[] | string;\n}\n\nconst defaultOptions = [\n { id: \"https://\", name: \"https://\" },\n { id: \"http://\", name: \"http://\" },\n];\n\nexport const InputUrl = forwardRef<HTMLInputElement, InputUrlProps>(\n (\n {\n size = \"regular\",\n disabled,\n value: defaultValue = \"\",\n onChange,\n scheme,\n ...rest\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const handleRef = useForkRef(ref, inputRef);\n\n const options = useMemo(() => {\n if (scheme && scheme.length > 0) {\n if (Array.isArray(scheme)) {\n return scheme.map((i) => ({ id: i, name: i }));\n } else {\n return [{ id: scheme, name: scheme }];\n }\n }\n return defaultOptions;\n }, [scheme]);\n\n const [prefix, setPrefix] = useState(options[0].id);\n\n const [value, setValue] = useState(\"\");\n\n const separatePrefixFromValue = (\n fullValue: string\n ): { newPrefix: string; newValue: string } => {\n let newPrefix = prefix;\n let newValue = fullValue;\n\n options.forEach((option) => {\n if (fullValue.startsWith(option.id)) {\n newPrefix = option.id;\n newValue = fullValue.replace(option.id, \"\");\n }\n });\n\n setValue(newValue);\n return { newPrefix, newValue };\n };\n\n useEffect(() => {\n const { newPrefix, newValue } = separatePrefixFromValue(defaultValue);\n setPrefix(newPrefix);\n setValue(newValue);\n // eslint-disable-next-line\n }, [defaultValue]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n if (!inputValue.startsWith(prefix)) {\n const { newPrefix, newValue } = separatePrefixFromValue(inputValue);\n setPrefix(newPrefix);\n setValue(newValue);\n typeof onChange === \"function\" && onChange(newPrefix + newValue);\n } else {\n const newValue = inputValue.replace(prefix, \"\");\n setValue(newValue);\n typeof onChange === \"function\" && onChange(prefix + newValue);\n }\n },\n // eslint-disable-next-line\n [onChange, prefix]\n );\n\n const handleSelectChange = useCallback(\n (val: string | number | (string | number)[]) => {\n setPrefix(val as string);\n setTimeout(() => {\n inputRef.current?.focus();\n }, 200);\n typeof onChange === \"function\" && onChange((val as string) + value);\n },\n [onChange, value]\n );\n\n const handlePaste = (e: React.ClipboardEvent) => {\n e.preventDefault();\n const paste = sanitizeAndTrim(e.clipboardData.getData(\"text\"));\n\n const { newPrefix, newValue } = separatePrefixFromValue(paste);\n if (newPrefix !== prefix) {\n setPrefix(newPrefix);\n }\n setValue(newValue);\n\n if (typeof onChange === \"function\") {\n onChange(newPrefix + newValue);\n }\n };\n\n const startAdornmentComponent = useMemo(() => {\n if (options.length > 1) {\n return (\n <InputSelect\n key={prefix}\n size={size}\n onChange={handleSelectChange}\n options={options}\n selected={prefix}\n disabled={disabled}\n />\n );\n } else {\n return (\n <StyledInputSelectTrigger\n key={prefix}\n $disabled={disabled}\n $size={size}\n >\n {prefix}\n </StyledInputSelectTrigger>\n );\n }\n }, [disabled, handleSelectChange, options, prefix, size]);\n\n useEffect(() => {\n if (options.length > 0 && !defaultValue) {\n setPrefix(options[0].id);\n }\n }, [defaultValue, options]);\n\n return (\n <Input\n {...rest}\n ref={handleRef}\n size={size}\n value={value}\n disabled={disabled}\n type=\"text\"\n onPaste={handlePaste}\n onChange={handleChange}\n data-testid=\"InputUrl\"\n startAdornment={startAdornmentComponent}\n />\n );\n }\n);\n\nInputUrl.displayName = \"InputUrl\";\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.sanitizeAndTrim = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Sanitizes a string by replacing non-breaking spaces and other special whitespace
|
|
9
|
+
* with standard spaces, then trims the result.
|
|
10
|
+
*/
|
|
11
|
+
var sanitizeAndTrim = exports.sanitizeAndTrim = function sanitizeAndTrim(value) {
|
|
12
|
+
return value.replace(/\u00a0/g, " ") // Replace (\u00a0)
|
|
13
|
+
.replace(/\s+/g, " ") // Replace multiple whitespace with single space
|
|
14
|
+
.trim(); // Trim leading/trailing whitespace
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=stringUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringUtils.js","names":["sanitizeAndTrim","exports","value","replace","trim"],"sources":["../../../src/utils/stringUtils.ts"],"sourcesContent":["/**\n * Sanitizes a string by replacing non-breaking spaces and other special whitespace\n * with standard spaces, then trims the result.\n */\nexport const sanitizeAndTrim = (value: string): string => {\n return value\n .replace(/\\u00a0/g, \" \") // Replace (\\u00a0)\n .replace(/\\s+/g, \" \") // Replace multiple whitespace with single space\n .trim(); // Trim leading/trailing whitespace\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACO,IAAMA,eAAe,GAAAC,OAAA,CAAAD,eAAA,GAAG,SAAlBA,eAAeA,CAAIE,KAAa,EAAa;EACxD,OAAOA,KAAK,CACTC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;EAAA,CACxBA,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;EAAA,CACrBC,IAAI,CAAC,CAAC,CAAC,CAAC;AACb,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _stringUtils = require("./stringUtils");
|
|
4
|
+
describe("sanitizeAndTrim", function () {
|
|
5
|
+
it("should trim standard whitespace", function () {
|
|
6
|
+
expect((0, _stringUtils.sanitizeAndTrim)(" hello ")).toBe("hello");
|
|
7
|
+
});
|
|
8
|
+
it("should replace non-breaking spaces (\u00a0) with standard spaces", function () {
|
|
9
|
+
// \u00a0 is
|
|
10
|
+
expect((0, _stringUtils.sanitizeAndTrim)("hello\u00a0world")).toBe("hello world");
|
|
11
|
+
});
|
|
12
|
+
it("should replace multiple whitespaces with a single space", function () {
|
|
13
|
+
expect((0, _stringUtils.sanitizeAndTrim)("hello world")).toBe("hello world");
|
|
14
|
+
expect((0, _stringUtils.sanitizeAndTrim)("hello \u00a0 world")).toBe("hello world");
|
|
15
|
+
});
|
|
16
|
+
it("should trim after replacing non-breaking spaces", function () {
|
|
17
|
+
expect((0, _stringUtils.sanitizeAndTrim)("\u00a0hello\u00a0")).toBe("hello");
|
|
18
|
+
});
|
|
19
|
+
it("should return an empty string if input is only whitespace", function () {
|
|
20
|
+
expect((0, _stringUtils.sanitizeAndTrim)(" ")).toBe("");
|
|
21
|
+
expect((0, _stringUtils.sanitizeAndTrim)("\u00a0\u00a0\u00a0")).toBe("");
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=stringUtils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringUtils.test.js","names":["_stringUtils","require","describe","it","expect","sanitizeAndTrim","toBe"],"sources":["../../../src/utils/stringUtils.test.ts"],"sourcesContent":["import { sanitizeAndTrim } from \"./stringUtils\";\n\ndescribe(\"sanitizeAndTrim\", () => {\n it(\"should trim standard whitespace\", () => {\n expect(sanitizeAndTrim(\" hello \")).toBe(\"hello\");\n });\n\n it(\"should replace non-breaking spaces (\\u00a0) with standard spaces\", () => {\n // \\u00a0 is \n expect(sanitizeAndTrim(\"hello\\u00a0world\")).toBe(\"hello world\");\n });\n\n it(\"should replace multiple whitespaces with a single space\", () => {\n expect(sanitizeAndTrim(\"hello world\")).toBe(\"hello world\");\n expect(sanitizeAndTrim(\"hello \\u00a0 world\")).toBe(\"hello world\");\n });\n\n it(\"should trim after replacing non-breaking spaces\", () => {\n expect(sanitizeAndTrim(\"\\u00a0hello\\u00a0\")).toBe(\"hello\");\n });\n\n it(\"should return an empty string if input is only whitespace\", () => {\n expect(sanitizeAndTrim(\" \")).toBe(\"\");\n expect(sanitizeAndTrim(\"\\u00a0\\u00a0\\u00a0\")).toBe(\"\");\n });\n});\n"],"mappings":";;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEAC,QAAQ,CAAC,iBAAiB,EAAE,YAAM;EAChCC,EAAE,CAAC,iCAAiC,EAAE,YAAM;IAC1CC,MAAM,CAAC,IAAAC,4BAAe,EAAC,WAAW,CAAC,CAAC,CAACC,IAAI,CAAC,OAAO,CAAC;EACpD,CAAC,CAAC;EAEFH,EAAE,CAAC,kEAAkE,EAAE,YAAM;IAC3E;IACAC,MAAM,CAAC,IAAAC,4BAAe,EAAC,kBAAkB,CAAC,CAAC,CAACC,IAAI,CAAC,aAAa,CAAC;EACjE,CAAC,CAAC;EAEFH,EAAE,CAAC,yDAAyD,EAAE,YAAM;IAClEC,MAAM,CAAC,IAAAC,4BAAe,EAAC,eAAe,CAAC,CAAC,CAACC,IAAI,CAAC,aAAa,CAAC;IAC5DF,MAAM,CAAC,IAAAC,4BAAe,EAAC,qBAAqB,CAAC,CAAC,CAACC,IAAI,CAAC,aAAa,CAAC;EACpE,CAAC,CAAC;EAEFH,EAAE,CAAC,iDAAiD,EAAE,YAAM;IAC1DC,MAAM,CAAC,IAAAC,4BAAe,EAAC,mBAAmB,CAAC,CAAC,CAACC,IAAI,CAAC,OAAO,CAAC;EAC5D,CAAC,CAAC;EAEFH,EAAE,CAAC,2DAA2D,EAAE,YAAM;IACpEC,MAAM,CAAC,IAAAC,4BAAe,EAAC,KAAK,CAAC,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC;IACvCF,MAAM,CAAC,IAAAC,4BAAe,EAAC,oBAAoB,CAAC,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC;EACxD,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputUrl.d.ts","sourceRoot":"","sources":["../../../../src/components/Input/InputUrl.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AAEf,OAAO,EAAS,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"InputUrl.d.ts","sourceRoot":"","sources":["../../../../src/components/Input/InputUrl.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AAEf,OAAO,EAAS,UAAU,EAAE,MAAM,SAAS,CAAC;AAM5C,MAAM,WAAW,aACf,SAAQ,IAAI,CACV,UAAU,EACV,MAAM,GAAG,gBAAgB,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAC1D;IACD,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,iBAAiB;IACjB,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,SAAS,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;CAC5B;AAOD,eAAO,MAAM,QAAQ,wFAgJpB,CAAC"}
|
|
@@ -6,6 +6,7 @@ import { Input } from "./Input";
|
|
|
6
6
|
import { InputSelect } from "./InputSelect";
|
|
7
7
|
import { StyledInputSelectTrigger } from "./Styles";
|
|
8
8
|
import { useForkRef } from "../../utils";
|
|
9
|
+
import { sanitizeAndTrim } from "../../utils/stringUtils";
|
|
9
10
|
const defaultOptions = [{
|
|
10
11
|
id: "https://",
|
|
11
12
|
name: "https://"
|
|
@@ -94,7 +95,7 @@ export const InputUrl = /*#__PURE__*/forwardRef((_ref, ref) => {
|
|
|
94
95
|
}, [onChange, value]);
|
|
95
96
|
const handlePaste = e => {
|
|
96
97
|
e.preventDefault();
|
|
97
|
-
const paste = e.clipboardData.getData("text");
|
|
98
|
+
const paste = sanitizeAndTrim(e.clipboardData.getData("text"));
|
|
98
99
|
const {
|
|
99
100
|
newPrefix,
|
|
100
101
|
newValue
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputUrl.js","names":["React","forwardRef","useCallback","useEffect","useMemo","useRef","useState","Input","InputSelect","StyledInputSelectTrigger","useForkRef","defaultOptions","id","name","InputUrl","_ref","ref","size","disabled","value","defaultValue","onChange","scheme","rest","_objectWithoutPropertiesLoose","_excluded","inputRef","handleRef","options","length","Array","isArray","map","i","prefix","setPrefix","setValue","separatePrefixFromValue","fullValue","newPrefix","newValue","forEach","option","startsWith","replace","handleChange","e","inputValue","target","handleSelectChange","val","setTimeout","_inputRef$current","current","focus","handlePaste","preventDefault","paste","clipboardData","getData","startAdornmentComponent","createElement","key","selected","$disabled","$size","_extends","type","onPaste","startAdornment","displayName"],"sources":["../../../../src/components/Input/InputUrl.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { Input, InputProps } from \"./Input\";\nimport { InputSelect } from \"./InputSelect\";\nimport { StyledInputSelectTrigger } from \"./Styles\";\nimport { useForkRef } from \"../../utils\";\n\nexport interface InputUrlProps\n extends Omit<\n InputProps,\n \"type\" | \"startAdornment\" | \"onChange\" | \"value\" | \"size\"\n > {\n /** Input value */\n value?: string;\n /** onChange function */\n onChange?: (val: string) => void;\n /** Input size */\n size?: \"regular\" | \"big\" | \"biggest\";\n scheme?: string[] | string;\n}\n\nconst defaultOptions = [\n { id: \"https://\", name: \"https://\" },\n { id: \"http://\", name: \"http://\" },\n];\n\nexport const InputUrl = forwardRef<HTMLInputElement, InputUrlProps>(\n (\n {\n size = \"regular\",\n disabled,\n value: defaultValue = \"\",\n onChange,\n scheme,\n ...rest\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const handleRef = useForkRef(ref, inputRef);\n\n const options = useMemo(() => {\n if (scheme && scheme.length > 0) {\n if (Array.isArray(scheme)) {\n return scheme.map((i) => ({ id: i, name: i }));\n } else {\n return [{ id: scheme, name: scheme }];\n }\n }\n return defaultOptions;\n }, [scheme]);\n\n const [prefix, setPrefix] = useState(options[0].id);\n\n const [value, setValue] = useState(\"\");\n\n const separatePrefixFromValue = (\n fullValue: string\n ): { newPrefix: string; newValue: string } => {\n let newPrefix = prefix;\n let newValue = fullValue;\n\n options.forEach((option) => {\n if (fullValue.startsWith(option.id)) {\n newPrefix = option.id;\n newValue = fullValue.replace(option.id, \"\");\n }\n });\n\n setValue(newValue);\n return { newPrefix, newValue };\n };\n\n useEffect(() => {\n const { newPrefix, newValue } = separatePrefixFromValue(defaultValue);\n setPrefix(newPrefix);\n setValue(newValue);\n // eslint-disable-next-line\n }, [defaultValue]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n if (!inputValue.startsWith(prefix)) {\n const { newPrefix, newValue } = separatePrefixFromValue(inputValue);\n setPrefix(newPrefix);\n setValue(newValue);\n typeof onChange === \"function\" && onChange(newPrefix + newValue);\n } else {\n const newValue = inputValue.replace(prefix, \"\");\n setValue(newValue);\n typeof onChange === \"function\" && onChange(prefix + newValue);\n }\n },\n // eslint-disable-next-line\n [onChange, prefix]\n );\n\n const handleSelectChange = useCallback(\n (val: string | number | (string | number)[]) => {\n setPrefix(val as string);\n setTimeout(() => {\n inputRef.current?.focus();\n }, 200);\n typeof onChange === \"function\" && onChange((val as string) + value);\n },\n [onChange, value]\n );\n\n const handlePaste = (e: React.ClipboardEvent) => {\n e.preventDefault();\n const paste = e.clipboardData.getData(\"text\");\n const { newPrefix, newValue } = separatePrefixFromValue(paste);\n if (newPrefix !== prefix) {\n setPrefix(newPrefix);\n }\n setValue(newValue);\n\n if (typeof onChange === \"function\") {\n onChange(newPrefix + newValue);\n }\n };\n\n const startAdornmentComponent = useMemo(() => {\n if (options.length > 1) {\n return (\n <InputSelect\n key={prefix}\n size={size}\n onChange={handleSelectChange}\n options={options}\n selected={prefix}\n disabled={disabled}\n />\n );\n } else {\n return (\n <StyledInputSelectTrigger\n key={prefix}\n $disabled={disabled}\n $size={size}\n >\n {prefix}\n </StyledInputSelectTrigger>\n );\n }\n }, [disabled, handleSelectChange, options, prefix, size]);\n\n useEffect(() => {\n if (options.length > 0 && !defaultValue) {\n setPrefix(options[0].id);\n }\n }, [defaultValue, options]);\n\n return (\n <Input\n {...rest}\n ref={handleRef}\n size={size}\n value={value}\n disabled={disabled}\n type=\"text\"\n onPaste={handlePaste}\n onChange={handleChange}\n data-testid=\"InputUrl\"\n startAdornment={startAdornmentComponent}\n />\n );\n }\n);\n\nInputUrl.displayName = \"InputUrl\";\n"],"mappings":";;;AAAA,OAAOA,KAAK,IACVC,UAAU,EACVC,WAAW,EACXC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AAEd,SAASC,KAAK,QAAoB,SAAS;AAC3C,SAASC,WAAW,QAAQ,eAAe;AAC3C,SAASC,wBAAwB,QAAQ,UAAU;AACnD,SAASC,UAAU,QAAQ,aAAa;AAgBxC,MAAMC,cAAc,GAAG,CACrB;EAAEC,EAAE,EAAE,UAAU;EAAEC,IAAI,EAAE;AAAW,CAAC,EACpC;EAAED,EAAE,EAAE,SAAS;EAAEC,IAAI,EAAE;AAAU,CAAC,CACnC;AAED,OAAO,MAAMC,QAAQ,gBAAGb,UAAU,CAChC,CAAAc,IAAA,EASEC,GAAG,KACA;EAAA,IATH;MACEC,IAAI,GAAG,SAAS;MAChBC,QAAQ;MACRC,KAAK,EAAEC,YAAY,GAAG,EAAE;MACxBC,QAAQ;MACRC;IAEF,CAAC,GAAAP,IAAA;IADIQ,IAAI,GAAAC,6BAAA,CAAAT,IAAA,EAAAU,SAAA;EAIT,MAAMC,QAAQ,GAAGrB,MAAM,CAA0B,IAAI,CAAC;EACtD,MAAMsB,SAAS,GAAGjB,UAAU,CAACM,GAAG,EAAEU,QAAQ,CAAC;EAE3C,MAAME,OAAO,GAAGxB,OAAO,CAAC,MAAM;IAC5B,IAAIkB,MAAM,IAAIA,MAAM,CAACO,MAAM,GAAG,CAAC,EAAE;MAC/B,IAAIC,KAAK,CAACC,OAAO,CAACT,MAAM,CAAC,EAAE;QACzB,OAAOA,MAAM,CAACU,GAAG,CAAEC,CAAC,KAAM;UAAErB,EAAE,EAAEqB,CAAC;UAAEpB,IAAI,EAAEoB;QAAE,CAAC,CAAC,CAAC;MAChD,CAAC,MAAM;QACL,OAAO,CAAC;UAAErB,EAAE,EAAEU,MAAM;UAAET,IAAI,EAAES;QAAO,CAAC,CAAC;MACvC;IACF;IACA,OAAOX,cAAc;EACvB,CAAC,EAAE,CAACW,MAAM,CAAC,CAAC;EAEZ,MAAM,CAACY,MAAM,EAAEC,SAAS,CAAC,GAAG7B,QAAQ,CAACsB,OAAO,CAAC,CAAC,CAAC,CAAChB,EAAE,CAAC;EAEnD,MAAM,CAACO,KAAK,EAAEiB,QAAQ,CAAC,GAAG9B,QAAQ,CAAC,EAAE,CAAC;EAEtC,MAAM+B,uBAAuB,GAC3BC,SAAiB,IAC2B;IAC5C,IAAIC,SAAS,GAAGL,MAAM;IACtB,IAAIM,QAAQ,GAAGF,SAAS;IAExBV,OAAO,CAACa,OAAO,CAAEC,MAAM,IAAK;MAC1B,IAAIJ,SAAS,CAACK,UAAU,CAACD,MAAM,CAAC9B,EAAE,CAAC,EAAE;QACnC2B,SAAS,GAAGG,MAAM,CAAC9B,EAAE;QACrB4B,QAAQ,GAAGF,SAAS,CAACM,OAAO,CAACF,MAAM,CAAC9B,EAAE,EAAE,EAAE,CAAC;MAC7C;IACF,CAAC,CAAC;IAEFwB,QAAQ,CAACI,QAAQ,CAAC;IAClB,OAAO;MAAED,SAAS;MAAEC;IAAS,CAAC;EAChC,CAAC;EAEDrC,SAAS,CAAC,MAAM;IACd,MAAM;MAAEoC,SAAS;MAAEC;IAAS,CAAC,GAAGH,uBAAuB,CAACjB,YAAY,CAAC;IACrEe,SAAS,CAACI,SAAS,CAAC;IACpBH,QAAQ,CAACI,QAAQ,CAAC;IAClB;EACF,CAAC,EAAE,CAACpB,YAAY,CAAC,CAAC;EAElB,MAAMyB,YAAY,GAAG3C,WAAW,CAC7B4C,CAAsC,IAAK;IAC1C,MAAMC,UAAU,GAAGD,CAAC,CAACE,MAAM,CAAC7B,KAAK;IACjC,IAAI,CAAC4B,UAAU,CAACJ,UAAU,CAACT,MAAM,CAAC,EAAE;MAClC,MAAM;QAAEK,SAAS;QAAEC;MAAS,CAAC,GAAGH,uBAAuB,CAACU,UAAU,CAAC;MACnEZ,SAAS,CAACI,SAAS,CAAC;MACpBH,QAAQ,CAACI,QAAQ,CAAC;MAClB,OAAOnB,QAAQ,KAAK,UAAU,IAAIA,QAAQ,CAACkB,SAAS,GAAGC,QAAQ,CAAC;IAClE,CAAC,MAAM;MACL,MAAMA,QAAQ,GAAGO,UAAU,CAACH,OAAO,CAACV,MAAM,EAAE,EAAE,CAAC;MAC/CE,QAAQ,CAACI,QAAQ,CAAC;MAClB,OAAOnB,QAAQ,KAAK,UAAU,IAAIA,QAAQ,CAACa,MAAM,GAAGM,QAAQ,CAAC;IAC/D;EACF,CAAC;EACD;EACA,CAACnB,QAAQ,EAAEa,MAAM,CACnB,CAAC;EAED,MAAMe,kBAAkB,GAAG/C,WAAW,CACnCgD,GAA0C,IAAK;IAC9Cf,SAAS,CAACe,GAAa,CAAC;IACxBC,UAAU,CAAC,MAAM;MAAA,IAAAC,iBAAA;MACf,CAAAA,iBAAA,GAAA1B,QAAQ,CAAC2B,OAAO,aAAhBD,iBAAA,CAAkBE,KAAK,CAAC,CAAC;IAC3B,CAAC,EAAE,GAAG,CAAC;IACP,OAAOjC,QAAQ,KAAK,UAAU,IAAIA,QAAQ,CAAE6B,GAAG,GAAc/B,KAAK,CAAC;EACrE,CAAC,EACD,CAACE,QAAQ,EAAEF,KAAK,CAClB,CAAC;EAED,MAAMoC,WAAW,GAAIT,CAAuB,IAAK;IAC/CA,CAAC,CAACU,cAAc,CAAC,CAAC;IAClB,MAAMC,KAAK,GAAGX,CAAC,CAACY,aAAa,CAACC,OAAO,CAAC,MAAM,CAAC;IAC7C,MAAM;MAAEpB,SAAS;MAAEC;IAAS,CAAC,GAAGH,uBAAuB,CAACoB,KAAK,CAAC;IAC9D,IAAIlB,SAAS,KAAKL,MAAM,EAAE;MACxBC,SAAS,CAACI,SAAS,CAAC;IACtB;IACAH,QAAQ,CAACI,QAAQ,CAAC;IAElB,IAAI,OAAOnB,QAAQ,KAAK,UAAU,EAAE;MAClCA,QAAQ,CAACkB,SAAS,GAAGC,QAAQ,CAAC;IAChC;EACF,CAAC;EAED,MAAMoB,uBAAuB,GAAGxD,OAAO,CAAC,MAAM;IAC5C,IAAIwB,OAAO,CAACC,MAAM,GAAG,CAAC,EAAE;MACtB,oBACE7B,KAAA,CAAA6D,aAAA,CAACrD,WAAW;QACVsD,GAAG,EAAE5B,MAAO;QACZjB,IAAI,EAAEA,IAAK;QACXI,QAAQ,EAAE4B,kBAAmB;QAC7BrB,OAAO,EAAEA,OAAQ;QACjBmC,QAAQ,EAAE7B,MAAO;QACjBhB,QAAQ,EAAEA;MAAS,CACpB,CAAC;IAEN,CAAC,MAAM;MACL,oBACElB,KAAA,CAAA6D,aAAA,CAACpD,wBAAwB;QACvBqD,GAAG,EAAE5B,MAAO;QACZ8B,SAAS,EAAE9C,QAAS;QACpB+C,KAAK,EAAEhD;MAAK,GAEXiB,MACuB,CAAC;IAE/B;EACF,CAAC,EAAE,CAAChB,QAAQ,EAAE+B,kBAAkB,EAAErB,OAAO,EAAEM,MAAM,EAAEjB,IAAI,CAAC,CAAC;EAEzDd,SAAS,CAAC,MAAM;IACd,IAAIyB,OAAO,CAACC,MAAM,GAAG,CAAC,IAAI,CAACT,YAAY,EAAE;MACvCe,SAAS,CAACP,OAAO,CAAC,CAAC,CAAC,CAAChB,EAAE,CAAC;IAC1B;EACF,CAAC,EAAE,CAACQ,YAAY,EAAEQ,OAAO,CAAC,CAAC;EAE3B,oBACE5B,KAAA,CAAA6D,aAAA,CAACtD,KAAK,EAAA2D,QAAA,KACA3C,IAAI;IACRP,GAAG,EAAEW,SAAU;IACfV,IAAI,EAAEA,IAAK;IACXE,KAAK,EAAEA,KAAM;IACbD,QAAQ,EAAEA,QAAS;IACnBiD,IAAI,EAAC,MAAM;IACXC,OAAO,EAAEb,WAAY;IACrBlC,QAAQ,EAAEwB,YAAa;IACvB,eAAY,UAAU;IACtBwB,cAAc,EAAET;EAAwB,EACzC,CAAC;AAEN,CACF,CAAC;AAED9C,QAAQ,CAACwD,WAAW,GAAG,UAAU","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"InputUrl.js","names":["React","forwardRef","useCallback","useEffect","useMemo","useRef","useState","Input","InputSelect","StyledInputSelectTrigger","useForkRef","sanitizeAndTrim","defaultOptions","id","name","InputUrl","_ref","ref","size","disabled","value","defaultValue","onChange","scheme","rest","_objectWithoutPropertiesLoose","_excluded","inputRef","handleRef","options","length","Array","isArray","map","i","prefix","setPrefix","setValue","separatePrefixFromValue","fullValue","newPrefix","newValue","forEach","option","startsWith","replace","handleChange","e","inputValue","target","handleSelectChange","val","setTimeout","_inputRef$current","current","focus","handlePaste","preventDefault","paste","clipboardData","getData","startAdornmentComponent","createElement","key","selected","$disabled","$size","_extends","type","onPaste","startAdornment","displayName"],"sources":["../../../../src/components/Input/InputUrl.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { Input, InputProps } from \"./Input\";\nimport { InputSelect } from \"./InputSelect\";\nimport { StyledInputSelectTrigger } from \"./Styles\";\nimport { useForkRef } from \"../../utils\";\nimport { sanitizeAndTrim } from \"../../utils/stringUtils\";\n\nexport interface InputUrlProps\n extends Omit<\n InputProps,\n \"type\" | \"startAdornment\" | \"onChange\" | \"value\" | \"size\"\n > {\n /** Input value */\n value?: string;\n /** onChange function */\n onChange?: (val: string) => void;\n /** Input size */\n size?: \"regular\" | \"big\" | \"biggest\";\n scheme?: string[] | string;\n}\n\nconst defaultOptions = [\n { id: \"https://\", name: \"https://\" },\n { id: \"http://\", name: \"http://\" },\n];\n\nexport const InputUrl = forwardRef<HTMLInputElement, InputUrlProps>(\n (\n {\n size = \"regular\",\n disabled,\n value: defaultValue = \"\",\n onChange,\n scheme,\n ...rest\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const handleRef = useForkRef(ref, inputRef);\n\n const options = useMemo(() => {\n if (scheme && scheme.length > 0) {\n if (Array.isArray(scheme)) {\n return scheme.map((i) => ({ id: i, name: i }));\n } else {\n return [{ id: scheme, name: scheme }];\n }\n }\n return defaultOptions;\n }, [scheme]);\n\n const [prefix, setPrefix] = useState(options[0].id);\n\n const [value, setValue] = useState(\"\");\n\n const separatePrefixFromValue = (\n fullValue: string\n ): { newPrefix: string; newValue: string } => {\n let newPrefix = prefix;\n let newValue = fullValue;\n\n options.forEach((option) => {\n if (fullValue.startsWith(option.id)) {\n newPrefix = option.id;\n newValue = fullValue.replace(option.id, \"\");\n }\n });\n\n setValue(newValue);\n return { newPrefix, newValue };\n };\n\n useEffect(() => {\n const { newPrefix, newValue } = separatePrefixFromValue(defaultValue);\n setPrefix(newPrefix);\n setValue(newValue);\n // eslint-disable-next-line\n }, [defaultValue]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n if (!inputValue.startsWith(prefix)) {\n const { newPrefix, newValue } = separatePrefixFromValue(inputValue);\n setPrefix(newPrefix);\n setValue(newValue);\n typeof onChange === \"function\" && onChange(newPrefix + newValue);\n } else {\n const newValue = inputValue.replace(prefix, \"\");\n setValue(newValue);\n typeof onChange === \"function\" && onChange(prefix + newValue);\n }\n },\n // eslint-disable-next-line\n [onChange, prefix]\n );\n\n const handleSelectChange = useCallback(\n (val: string | number | (string | number)[]) => {\n setPrefix(val as string);\n setTimeout(() => {\n inputRef.current?.focus();\n }, 200);\n typeof onChange === \"function\" && onChange((val as string) + value);\n },\n [onChange, value]\n );\n\n const handlePaste = (e: React.ClipboardEvent) => {\n e.preventDefault();\n const paste = sanitizeAndTrim(e.clipboardData.getData(\"text\"));\n\n const { newPrefix, newValue } = separatePrefixFromValue(paste);\n if (newPrefix !== prefix) {\n setPrefix(newPrefix);\n }\n setValue(newValue);\n\n if (typeof onChange === \"function\") {\n onChange(newPrefix + newValue);\n }\n };\n\n const startAdornmentComponent = useMemo(() => {\n if (options.length > 1) {\n return (\n <InputSelect\n key={prefix}\n size={size}\n onChange={handleSelectChange}\n options={options}\n selected={prefix}\n disabled={disabled}\n />\n );\n } else {\n return (\n <StyledInputSelectTrigger\n key={prefix}\n $disabled={disabled}\n $size={size}\n >\n {prefix}\n </StyledInputSelectTrigger>\n );\n }\n }, [disabled, handleSelectChange, options, prefix, size]);\n\n useEffect(() => {\n if (options.length > 0 && !defaultValue) {\n setPrefix(options[0].id);\n }\n }, [defaultValue, options]);\n\n return (\n <Input\n {...rest}\n ref={handleRef}\n size={size}\n value={value}\n disabled={disabled}\n type=\"text\"\n onPaste={handlePaste}\n onChange={handleChange}\n data-testid=\"InputUrl\"\n startAdornment={startAdornmentComponent}\n />\n );\n }\n);\n\nInputUrl.displayName = \"InputUrl\";\n"],"mappings":";;;AAAA,OAAOA,KAAK,IACVC,UAAU,EACVC,WAAW,EACXC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AAEd,SAASC,KAAK,QAAoB,SAAS;AAC3C,SAASC,WAAW,QAAQ,eAAe;AAC3C,SAASC,wBAAwB,QAAQ,UAAU;AACnD,SAASC,UAAU,QAAQ,aAAa;AACxC,SAASC,eAAe,QAAQ,yBAAyB;AAgBzD,MAAMC,cAAc,GAAG,CACrB;EAAEC,EAAE,EAAE,UAAU;EAAEC,IAAI,EAAE;AAAW,CAAC,EACpC;EAAED,EAAE,EAAE,SAAS;EAAEC,IAAI,EAAE;AAAU,CAAC,CACnC;AAED,OAAO,MAAMC,QAAQ,gBAAGd,UAAU,CAChC,CAAAe,IAAA,EASEC,GAAG,KACA;EAAA,IATH;MACEC,IAAI,GAAG,SAAS;MAChBC,QAAQ;MACRC,KAAK,EAAEC,YAAY,GAAG,EAAE;MACxBC,QAAQ;MACRC;IAEF,CAAC,GAAAP,IAAA;IADIQ,IAAI,GAAAC,6BAAA,CAAAT,IAAA,EAAAU,SAAA;EAIT,MAAMC,QAAQ,GAAGtB,MAAM,CAA0B,IAAI,CAAC;EACtD,MAAMuB,SAAS,GAAGlB,UAAU,CAACO,GAAG,EAAEU,QAAQ,CAAC;EAE3C,MAAME,OAAO,GAAGzB,OAAO,CAAC,MAAM;IAC5B,IAAImB,MAAM,IAAIA,MAAM,CAACO,MAAM,GAAG,CAAC,EAAE;MAC/B,IAAIC,KAAK,CAACC,OAAO,CAACT,MAAM,CAAC,EAAE;QACzB,OAAOA,MAAM,CAACU,GAAG,CAAEC,CAAC,KAAM;UAAErB,EAAE,EAAEqB,CAAC;UAAEpB,IAAI,EAAEoB;QAAE,CAAC,CAAC,CAAC;MAChD,CAAC,MAAM;QACL,OAAO,CAAC;UAAErB,EAAE,EAAEU,MAAM;UAAET,IAAI,EAAES;QAAO,CAAC,CAAC;MACvC;IACF;IACA,OAAOX,cAAc;EACvB,CAAC,EAAE,CAACW,MAAM,CAAC,CAAC;EAEZ,MAAM,CAACY,MAAM,EAAEC,SAAS,CAAC,GAAG9B,QAAQ,CAACuB,OAAO,CAAC,CAAC,CAAC,CAAChB,EAAE,CAAC;EAEnD,MAAM,CAACO,KAAK,EAAEiB,QAAQ,CAAC,GAAG/B,QAAQ,CAAC,EAAE,CAAC;EAEtC,MAAMgC,uBAAuB,GAC3BC,SAAiB,IAC2B;IAC5C,IAAIC,SAAS,GAAGL,MAAM;IACtB,IAAIM,QAAQ,GAAGF,SAAS;IAExBV,OAAO,CAACa,OAAO,CAAEC,MAAM,IAAK;MAC1B,IAAIJ,SAAS,CAACK,UAAU,CAACD,MAAM,CAAC9B,EAAE,CAAC,EAAE;QACnC2B,SAAS,GAAGG,MAAM,CAAC9B,EAAE;QACrB4B,QAAQ,GAAGF,SAAS,CAACM,OAAO,CAACF,MAAM,CAAC9B,EAAE,EAAE,EAAE,CAAC;MAC7C;IACF,CAAC,CAAC;IAEFwB,QAAQ,CAACI,QAAQ,CAAC;IAClB,OAAO;MAAED,SAAS;MAAEC;IAAS,CAAC;EAChC,CAAC;EAEDtC,SAAS,CAAC,MAAM;IACd,MAAM;MAAEqC,SAAS;MAAEC;IAAS,CAAC,GAAGH,uBAAuB,CAACjB,YAAY,CAAC;IACrEe,SAAS,CAACI,SAAS,CAAC;IACpBH,QAAQ,CAACI,QAAQ,CAAC;IAClB;EACF,CAAC,EAAE,CAACpB,YAAY,CAAC,CAAC;EAElB,MAAMyB,YAAY,GAAG5C,WAAW,CAC7B6C,CAAsC,IAAK;IAC1C,MAAMC,UAAU,GAAGD,CAAC,CAACE,MAAM,CAAC7B,KAAK;IACjC,IAAI,CAAC4B,UAAU,CAACJ,UAAU,CAACT,MAAM,CAAC,EAAE;MAClC,MAAM;QAAEK,SAAS;QAAEC;MAAS,CAAC,GAAGH,uBAAuB,CAACU,UAAU,CAAC;MACnEZ,SAAS,CAACI,SAAS,CAAC;MACpBH,QAAQ,CAACI,QAAQ,CAAC;MAClB,OAAOnB,QAAQ,KAAK,UAAU,IAAIA,QAAQ,CAACkB,SAAS,GAAGC,QAAQ,CAAC;IAClE,CAAC,MAAM;MACL,MAAMA,QAAQ,GAAGO,UAAU,CAACH,OAAO,CAACV,MAAM,EAAE,EAAE,CAAC;MAC/CE,QAAQ,CAACI,QAAQ,CAAC;MAClB,OAAOnB,QAAQ,KAAK,UAAU,IAAIA,QAAQ,CAACa,MAAM,GAAGM,QAAQ,CAAC;IAC/D;EACF,CAAC;EACD;EACA,CAACnB,QAAQ,EAAEa,MAAM,CACnB,CAAC;EAED,MAAMe,kBAAkB,GAAGhD,WAAW,CACnCiD,GAA0C,IAAK;IAC9Cf,SAAS,CAACe,GAAa,CAAC;IACxBC,UAAU,CAAC,MAAM;MAAA,IAAAC,iBAAA;MACf,CAAAA,iBAAA,GAAA1B,QAAQ,CAAC2B,OAAO,aAAhBD,iBAAA,CAAkBE,KAAK,CAAC,CAAC;IAC3B,CAAC,EAAE,GAAG,CAAC;IACP,OAAOjC,QAAQ,KAAK,UAAU,IAAIA,QAAQ,CAAE6B,GAAG,GAAc/B,KAAK,CAAC;EACrE,CAAC,EACD,CAACE,QAAQ,EAAEF,KAAK,CAClB,CAAC;EAED,MAAMoC,WAAW,GAAIT,CAAuB,IAAK;IAC/CA,CAAC,CAACU,cAAc,CAAC,CAAC;IAClB,MAAMC,KAAK,GAAG/C,eAAe,CAACoC,CAAC,CAACY,aAAa,CAACC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9D,MAAM;MAAEpB,SAAS;MAAEC;IAAS,CAAC,GAAGH,uBAAuB,CAACoB,KAAK,CAAC;IAC9D,IAAIlB,SAAS,KAAKL,MAAM,EAAE;MACxBC,SAAS,CAACI,SAAS,CAAC;IACtB;IACAH,QAAQ,CAACI,QAAQ,CAAC;IAElB,IAAI,OAAOnB,QAAQ,KAAK,UAAU,EAAE;MAClCA,QAAQ,CAACkB,SAAS,GAAGC,QAAQ,CAAC;IAChC;EACF,CAAC;EAED,MAAMoB,uBAAuB,GAAGzD,OAAO,CAAC,MAAM;IAC5C,IAAIyB,OAAO,CAACC,MAAM,GAAG,CAAC,EAAE;MACtB,oBACE9B,KAAA,CAAA8D,aAAA,CAACtD,WAAW;QACVuD,GAAG,EAAE5B,MAAO;QACZjB,IAAI,EAAEA,IAAK;QACXI,QAAQ,EAAE4B,kBAAmB;QAC7BrB,OAAO,EAAEA,OAAQ;QACjBmC,QAAQ,EAAE7B,MAAO;QACjBhB,QAAQ,EAAEA;MAAS,CACpB,CAAC;IAEN,CAAC,MAAM;MACL,oBACEnB,KAAA,CAAA8D,aAAA,CAACrD,wBAAwB;QACvBsD,GAAG,EAAE5B,MAAO;QACZ8B,SAAS,EAAE9C,QAAS;QACpB+C,KAAK,EAAEhD;MAAK,GAEXiB,MACuB,CAAC;IAE/B;EACF,CAAC,EAAE,CAAChB,QAAQ,EAAE+B,kBAAkB,EAAErB,OAAO,EAAEM,MAAM,EAAEjB,IAAI,CAAC,CAAC;EAEzDf,SAAS,CAAC,MAAM;IACd,IAAI0B,OAAO,CAACC,MAAM,GAAG,CAAC,IAAI,CAACT,YAAY,EAAE;MACvCe,SAAS,CAACP,OAAO,CAAC,CAAC,CAAC,CAAChB,EAAE,CAAC;IAC1B;EACF,CAAC,EAAE,CAACQ,YAAY,EAAEQ,OAAO,CAAC,CAAC;EAE3B,oBACE7B,KAAA,CAAA8D,aAAA,CAACvD,KAAK,EAAA4D,QAAA,KACA3C,IAAI;IACRP,GAAG,EAAEW,SAAU;IACfV,IAAI,EAAEA,IAAK;IACXE,KAAK,EAAEA,KAAM;IACbD,QAAQ,EAAEA,QAAS;IACnBiD,IAAI,EAAC,MAAM;IACXC,OAAO,EAAEb,WAAY;IACrBlC,QAAQ,EAAEwB,YAAa;IACvB,eAAY,UAAU;IACtBwB,cAAc,EAAET;EAAwB,EACzC,CAAC;AAEN,CACF,CAAC;AAED9C,QAAQ,CAACwD,WAAW,GAAG,UAAU","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/stringUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,MAK/C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitizes a string by replacing non-breaking spaces and other special whitespace
|
|
3
|
+
* with standard spaces, then trims the result.
|
|
4
|
+
*/
|
|
5
|
+
export const sanitizeAndTrim = value => {
|
|
6
|
+
return value.replace(/\u00a0/g, " ") // Replace (\u00a0)
|
|
7
|
+
.replace(/\s+/g, " ") // Replace multiple whitespace with single space
|
|
8
|
+
.trim(); // Trim leading/trailing whitespace
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=stringUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringUtils.js","names":["sanitizeAndTrim","value","replace","trim"],"sources":["../../../src/utils/stringUtils.ts"],"sourcesContent":["/**\n * Sanitizes a string by replacing non-breaking spaces and other special whitespace\n * with standard spaces, then trims the result.\n */\nexport const sanitizeAndTrim = (value: string): string => {\n return value\n .replace(/\\u00a0/g, \" \") // Replace (\\u00a0)\n .replace(/\\s+/g, \" \") // Replace multiple whitespace with single space\n .trim(); // Trim leading/trailing whitespace\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA,OAAO,MAAMA,eAAe,GAAIC,KAAa,IAAa;EACxD,OAAOA,KAAK,CACTC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;EAAA,CACxBA,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;EAAA,CACrBC,IAAI,CAAC,CAAC,CAAC,CAAC;AACb,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringUtils.test.d.ts","sourceRoot":"","sources":["../../../src/utils/stringUtils.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { sanitizeAndTrim } from "./stringUtils";
|
|
2
|
+
describe("sanitizeAndTrim", () => {
|
|
3
|
+
it("should trim standard whitespace", () => {
|
|
4
|
+
expect(sanitizeAndTrim(" hello ")).toBe("hello");
|
|
5
|
+
});
|
|
6
|
+
it("should replace non-breaking spaces (\u00a0) with standard spaces", () => {
|
|
7
|
+
// \u00a0 is
|
|
8
|
+
expect(sanitizeAndTrim("hello\u00a0world")).toBe("hello world");
|
|
9
|
+
});
|
|
10
|
+
it("should replace multiple whitespaces with a single space", () => {
|
|
11
|
+
expect(sanitizeAndTrim("hello world")).toBe("hello world");
|
|
12
|
+
expect(sanitizeAndTrim("hello \u00a0 world")).toBe("hello world");
|
|
13
|
+
});
|
|
14
|
+
it("should trim after replacing non-breaking spaces", () => {
|
|
15
|
+
expect(sanitizeAndTrim("\u00a0hello\u00a0")).toBe("hello");
|
|
16
|
+
});
|
|
17
|
+
it("should return an empty string if input is only whitespace", () => {
|
|
18
|
+
expect(sanitizeAndTrim(" ")).toBe("");
|
|
19
|
+
expect(sanitizeAndTrim("\u00a0\u00a0\u00a0")).toBe("");
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=stringUtils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringUtils.test.js","names":["sanitizeAndTrim","describe","it","expect","toBe"],"sources":["../../../src/utils/stringUtils.test.ts"],"sourcesContent":["import { sanitizeAndTrim } from \"./stringUtils\";\n\ndescribe(\"sanitizeAndTrim\", () => {\n it(\"should trim standard whitespace\", () => {\n expect(sanitizeAndTrim(\" hello \")).toBe(\"hello\");\n });\n\n it(\"should replace non-breaking spaces (\\u00a0) with standard spaces\", () => {\n // \\u00a0 is \n expect(sanitizeAndTrim(\"hello\\u00a0world\")).toBe(\"hello world\");\n });\n\n it(\"should replace multiple whitespaces with a single space\", () => {\n expect(sanitizeAndTrim(\"hello world\")).toBe(\"hello world\");\n expect(sanitizeAndTrim(\"hello \\u00a0 world\")).toBe(\"hello world\");\n });\n\n it(\"should trim after replacing non-breaking spaces\", () => {\n expect(sanitizeAndTrim(\"\\u00a0hello\\u00a0\")).toBe(\"hello\");\n });\n\n it(\"should return an empty string if input is only whitespace\", () => {\n expect(sanitizeAndTrim(\" \")).toBe(\"\");\n expect(sanitizeAndTrim(\"\\u00a0\\u00a0\\u00a0\")).toBe(\"\");\n });\n});\n"],"mappings":"AAAA,SAASA,eAAe,QAAQ,eAAe;AAE/CC,QAAQ,CAAC,iBAAiB,EAAE,MAAM;EAChCC,EAAE,CAAC,iCAAiC,EAAE,MAAM;IAC1CC,MAAM,CAACH,eAAe,CAAC,WAAW,CAAC,CAAC,CAACI,IAAI,CAAC,OAAO,CAAC;EACpD,CAAC,CAAC;EAEFF,EAAE,CAAC,kEAAkE,EAAE,MAAM;IAC3E;IACAC,MAAM,CAACH,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAACI,IAAI,CAAC,aAAa,CAAC;EACjE,CAAC,CAAC;EAEFF,EAAE,CAAC,yDAAyD,EAAE,MAAM;IAClEC,MAAM,CAACH,eAAe,CAAC,eAAe,CAAC,CAAC,CAACI,IAAI,CAAC,aAAa,CAAC;IAC5DD,MAAM,CAACH,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAACI,IAAI,CAAC,aAAa,CAAC;EACpE,CAAC,CAAC;EAEFF,EAAE,CAAC,iDAAiD,EAAE,MAAM;IAC1DC,MAAM,CAACH,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAACI,IAAI,CAAC,OAAO,CAAC;EAC5D,CAAC,CAAC;EAEFF,EAAE,CAAC,2DAA2D,EAAE,MAAM;IACpEC,MAAM,CAACH,eAAe,CAAC,KAAK,CAAC,CAAC,CAACI,IAAI,CAAC,EAAE,CAAC;IACvCD,MAAM,CAACH,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAACI,IAAI,CAAC,EAAE,CAAC;EACxD,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
package/dist/index.js
CHANGED
|
@@ -19181,6 +19181,16 @@
|
|
|
19181
19181
|
componentId: "sc-1lmb5y-0"
|
|
19182
19182
|
})(["flex-shrink:0"]);
|
|
19183
19183
|
|
|
19184
|
+
/**
|
|
19185
|
+
* Sanitizes a string by replacing non-breaking spaces and other special whitespace
|
|
19186
|
+
* with standard spaces, then trims the result.
|
|
19187
|
+
*/
|
|
19188
|
+
var sanitizeAndTrim = function sanitizeAndTrim(value) {
|
|
19189
|
+
return value.replace(/\u00a0/g, " ") // Replace (\u00a0)
|
|
19190
|
+
.replace(/\s+/g, " ") // Replace multiple whitespace with single space
|
|
19191
|
+
.trim(); // Trim leading/trailing whitespace
|
|
19192
|
+
};
|
|
19193
|
+
|
|
19184
19194
|
var _excluded$H = ["size", "disabled", "value", "onChange", "scheme"];
|
|
19185
19195
|
var defaultOptions = [{
|
|
19186
19196
|
id: "https://",
|
|
@@ -19276,7 +19286,7 @@
|
|
|
19276
19286
|
}, [onChange, value]);
|
|
19277
19287
|
var handlePaste = function handlePaste(e) {
|
|
19278
19288
|
e.preventDefault();
|
|
19279
|
-
var paste = e.clipboardData.getData("text");
|
|
19289
|
+
var paste = sanitizeAndTrim(e.clipboardData.getData("text"));
|
|
19280
19290
|
var _separatePrefixFromVa3 = separatePrefixFromValue(paste),
|
|
19281
19291
|
newPrefix = _separatePrefixFromVa3.newPrefix,
|
|
19282
19292
|
newValue = _separatePrefixFromVa3.newValue;
|