@droppii-org/chat-sdk 0.1.30 → 0.1.32

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.
Files changed (42) hide show
  1. package/dist/components/biz-thread-detail/BizLinkInputPreview.d.ts +7 -0
  2. package/dist/components/biz-thread-detail/BizLinkInputPreview.d.ts.map +1 -0
  3. package/dist/components/biz-thread-detail/BizLinkInputPreview.js +16 -0
  4. package/dist/components/biz-thread-detail/BizLinkMessageCard.d.ts +6 -0
  5. package/dist/components/biz-thread-detail/BizLinkMessageCard.d.ts.map +1 -0
  6. package/dist/components/biz-thread-detail/BizLinkMessageCard.js +21 -0
  7. package/dist/components/biz-thread-detail/BizLinkTextContent.d.ts +6 -0
  8. package/dist/components/biz-thread-detail/BizLinkTextContent.d.ts.map +1 -0
  9. package/dist/components/biz-thread-detail/BizLinkTextContent.js +11 -0
  10. package/dist/components/biz-thread-detail/BizMessageBubble.d.ts +2 -1
  11. package/dist/components/biz-thread-detail/BizMessageBubble.d.ts.map +1 -1
  12. package/dist/components/biz-thread-detail/BizMessageBubble.js +1 -1
  13. package/dist/components/biz-thread-detail/BizMessageContent.d.ts +7 -0
  14. package/dist/components/biz-thread-detail/BizMessageContent.d.ts.map +1 -0
  15. package/dist/components/biz-thread-detail/BizMessageContent.js +26 -0
  16. package/dist/components/biz-thread-detail/BizThreadDetailInput.d.ts.map +1 -1
  17. package/dist/components/biz-thread-detail/BizThreadDetailInput.js +15 -4
  18. package/dist/components/biz-thread-detail/item/BizMessageItem.d.ts.map +1 -1
  19. package/dist/components/biz-thread-detail/item/BizMessageItem.js +3 -2
  20. package/dist/hooks/biz/useBizSendMessage.d.ts.map +1 -1
  21. package/dist/hooks/biz/useBizSendMessage.js +6 -2
  22. package/dist/hooks/common/useFetchUrlMetadata.d.ts +9 -0
  23. package/dist/hooks/common/useFetchUrlMetadata.d.ts.map +1 -0
  24. package/dist/hooks/common/useFetchUrlMetadata.js +21 -0
  25. package/dist/locales/vi/biz-inbox.json +6 -1
  26. package/dist/services/query.d.ts +1 -0
  27. package/dist/services/query.d.ts.map +1 -1
  28. package/dist/services/query.js +1 -0
  29. package/dist/services/routes.d.ts +1 -0
  30. package/dist/services/routes.d.ts.map +1 -1
  31. package/dist/services/routes.js +1 -0
  32. package/dist/styles/global.css +1 -1
  33. package/dist/tsconfig.tsbuildinfo +1 -1
  34. package/dist/utils/bizLink.d.ts +13 -0
  35. package/dist/utils/bizLink.d.ts.map +1 -0
  36. package/dist/utils/bizLink.js +77 -0
  37. package/dist/utils/bizMessage.d.ts.map +1 -1
  38. package/dist/utils/bizMessage.js +4 -1
  39. package/dist/utils/openBizLink.d.ts +3 -0
  40. package/dist/utils/openBizLink.d.ts.map +1 -0
  41. package/dist/utils/openBizLink.js +18 -0
  42. package/package.json +127 -126
@@ -0,0 +1,13 @@
1
+ export declare const normalizeBizLinkUrl: (link: string) => string;
2
+ export declare const extractBizLinkUrls: (text: string) => string[];
3
+ export type BizTextSegment = {
4
+ type: "text";
5
+ value: string;
6
+ } | {
7
+ type: "link";
8
+ value: string;
9
+ url: string;
10
+ };
11
+ export declare const parseBizTextWithLinks: (text: string) => BizTextSegment[];
12
+ export declare const getHostLabel: (url: string) => string;
13
+ //# sourceMappingURL=bizLink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bizLink.d.ts","sourceRoot":"","sources":["../../src/utils/bizLink.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,MAKlD,CAAC;AA+BF,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG,MAAM,EAYvD,CAAC;AAEF,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,cAAc,EAwBlE,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,MAM1C,CAAC"}
@@ -0,0 +1,77 @@
1
+ const PROTOCOL_URL_REGEX = /\bhttps?:\/\/[^\s<>"']*[^\s<>"',.!?()[\]{}]/gi;
2
+ const BARE_DOMAIN_REGEX = /\b(?!(?:https?:\/\/))(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z][a-z0-9-]{0,62}(?:\/[^\s<>"',.!?()[\]{}]*)?\b/gi;
3
+ export const normalizeBizLinkUrl = (link) => {
4
+ const trimmed = link.trim();
5
+ if (!trimmed)
6
+ return trimmed;
7
+ if (/^https?:\/\//i.test(trimmed))
8
+ return trimmed;
9
+ return `https://${trimmed}`;
10
+ };
11
+ const findLinkRanges = (text) => {
12
+ const ranges = [];
13
+ const addMatches = (regex) => {
14
+ const re = new RegExp(regex.source, regex.flags);
15
+ let match;
16
+ while ((match = re.exec(text)) !== null) {
17
+ ranges.push({
18
+ text: match[0],
19
+ start: match.index,
20
+ end: match.index + match[0].length,
21
+ });
22
+ }
23
+ };
24
+ addMatches(PROTOCOL_URL_REGEX);
25
+ addMatches(BARE_DOMAIN_REGEX);
26
+ ranges.sort((a, b) => a.start - b.start);
27
+ const deduped = [];
28
+ for (const range of ranges) {
29
+ if (deduped.some((r) => range.start < r.end && r.start < range.end))
30
+ continue;
31
+ deduped.push(range);
32
+ }
33
+ return deduped;
34
+ };
35
+ export const extractBizLinkUrls = (text) => {
36
+ const seen = new Set();
37
+ const urls = [];
38
+ for (const { text: raw } of findLinkRanges(text)) {
39
+ const url = normalizeBizLinkUrl(raw);
40
+ if (seen.has(url))
41
+ continue;
42
+ seen.add(url);
43
+ urls.push(url);
44
+ }
45
+ return urls;
46
+ };
47
+ export const parseBizTextWithLinks = (text) => {
48
+ const ranges = findLinkRanges(text);
49
+ if (!ranges.length)
50
+ return [{ type: "text", value: text }];
51
+ const segments = [];
52
+ let cursor = 0;
53
+ for (const { text: raw, start, end } of ranges) {
54
+ if (start > cursor) {
55
+ segments.push({ type: "text", value: text.slice(cursor, start) });
56
+ }
57
+ segments.push({
58
+ type: "link",
59
+ value: raw,
60
+ url: normalizeBizLinkUrl(raw),
61
+ });
62
+ cursor = end;
63
+ }
64
+ if (cursor < text.length) {
65
+ segments.push({ type: "text", value: text.slice(cursor) });
66
+ }
67
+ return segments;
68
+ };
69
+ export const getHostLabel = (url) => {
70
+ var _a;
71
+ try {
72
+ return new URL(normalizeBizLinkUrl(url)).host;
73
+ }
74
+ catch (_b) {
75
+ return (_a = url.replace(/^https?:\/\//i, "").split("/")[0]) !== null && _a !== void 0 ? _a : url;
76
+ }
77
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"bizMessage.d.ts","sourceRoot":"","sources":["../../src/utils/bizMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAazC,eAAO,MAAM,oBAAoB,GAAI,SAAS;IAC5C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,YAKA,CAAC;AAuCF,eAAO,MAAM,qBAAqB,GAChC,WAAW,MAAM,EACjB,eAAe,MAAM,GAAG,SAAS,EACjC,GAAG,SAAS,EACZ,aAAa,OAAO,WAiBrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,SAAS,WAAW,KAAG,MACR,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,oBAAoB,GAC/B,SAAS,WAAW,EACpB,aAAa,WAAW,EAAE,EAC1B,QAAQ,MAAM,EACd,qBAAmB,KAClB,iBAqBF,CAAC"}
1
+ {"version":3,"file":"bizMessage.d.ts","sourceRoot":"","sources":["../../src/utils/bizMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAazC,eAAO,MAAM,oBAAoB,GAAI,SAAS;IAC5C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,YAKA,CAAC;AAuCF,eAAO,MAAM,qBAAqB,GAChC,WAAW,MAAM,EACjB,eAAe,MAAM,GAAG,SAAS,EACjC,GAAG,SAAS,EACZ,aAAa,OAAO,WAiBrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,SAAS,WAAW,KAAG,MAIxD,CAAC;AAEL,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,oBAAoB,GAC/B,SAAS,WAAW,EACpB,aAAa,WAAW,EAAE,EAC1B,QAAQ,MAAM,EACd,qBAAmB,KAClB,iBAqBF,CAAC"}
@@ -57,7 +57,10 @@ export const parseBizLatestMessage = (latestMsg, currentUserId, t, isGroupChat)
57
57
  return "";
58
58
  }
59
59
  };
60
- export const getBizMessageContent = (message) => { var _a, _b, _c; return (_c = (_b = (_a = message.textElem) === null || _a === void 0 ? void 0 : _a.content) !== null && _b !== void 0 ? _b : message.content) !== null && _c !== void 0 ? _c : ""; };
60
+ export const getBizMessageContent = (message) => {
61
+ var _a, _b, _c, _d, _e;
62
+ return (_e = (_d = (_b = (_a = message.textElem) === null || _a === void 0 ? void 0 : _a.content) !== null && _b !== void 0 ? _b : (_c = message.urlTextElem) === null || _c === void 0 ? void 0 : _c.content) !== null && _d !== void 0 ? _d : message.content) !== null && _e !== void 0 ? _e : "";
63
+ };
61
64
  export const getBizMessageDisplay = (message, allMessages, userID, isGroupChat = false) => {
62
65
  const isMine = message.sendID === userID;
63
66
  const previousMessage = getVisibleNeighbor(allMessages, message, "prev");
@@ -0,0 +1,3 @@
1
+ import type { TFunction } from "i18next";
2
+ export declare const openBizLink: (url: string, t: TFunction) => boolean;
3
+ //# sourceMappingURL=openBizLink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openBizLink.d.ts","sourceRoot":"","sources":["../../src/utils/openBizLink.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,EAAE,GAAG,SAAS,KAAG,OAkBvD,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { message as antdMessage } from "antd";
2
+ import { normalizeBizLinkUrl } from "./bizLink";
3
+ export const openBizLink = (url, t) => {
4
+ if (!url || typeof window === "undefined")
5
+ return false;
6
+ try {
7
+ const opened = window.open(normalizeBizLinkUrl(url), "_blank", "noopener,noreferrer");
8
+ if (!opened) {
9
+ antdMessage.error(t("link_open_error"));
10
+ return false;
11
+ }
12
+ return true;
13
+ }
14
+ catch (_a) {
15
+ antdMessage.error(t("link_open_error"));
16
+ return false;
17
+ }
18
+ };
package/package.json CHANGED
@@ -1,126 +1,127 @@
1
- {
2
- "name": "@droppii-org/chat-sdk",
3
- "version": "0.1.30",
4
- "description": "Droppii React Chat SDK",
5
- "main": "./dist/index.js",
6
- "types": "./dist/index.d.ts",
7
- "exports": {
8
- ".": {
9
- "import": "./dist/index.js",
10
- "types": "./dist/index.d.ts"
11
- },
12
- "./components/*": {
13
- "import": "./dist/components/*.js",
14
- "types": "./dist/components/*.d.ts"
15
- },
16
- "./hooks/*": {
17
- "import": "./dist/hooks/*.js",
18
- "types": "./dist/hooks/*.d.ts"
19
- },
20
- "./context/*": {
21
- "import": "./dist/context/*.js",
22
- "types": "./dist/context/*.d.ts"
23
- },
24
- "./types/*": {
25
- "import": "./dist/types/*.js",
26
- "types": "./dist/types/*.d.ts"
27
- },
28
- "./screens/*": {
29
- "import": "./dist/screens/*.js",
30
- "types": "./dist/screens/*.d.ts"
31
- },
32
- "./assets/*": {
33
- "import": "./dist/assets/*.js",
34
- "types": "./dist/assets/*.d.ts"
35
- },
36
- "./constants/*": {
37
- "import": "./dist/constants/*.js",
38
- "types": "./dist/constants/*.d.ts"
39
- },
40
- "./layout/*": {
41
- "import": "./dist/layout/*.js",
42
- "types": "./dist/layout/*.d.ts"
43
- },
44
- "./utils/*": {
45
- "import": "./dist/utils/*.js",
46
- "types": "./dist/utils/*.d.ts"
47
- },
48
- "./services/*": {
49
- "import": "./dist/services/*.js",
50
- "types": "./dist/services/*.d.ts"
51
- },
52
- "./locales/*": "./dist/locales/*",
53
- "./styles/global.css": "./dist/styles/global.css"
54
- },
55
- "files": [
56
- "dist"
57
- ],
58
- "keywords": [
59
- "chat",
60
- "sdk",
61
- "react",
62
- "messenger-style"
63
- ],
64
- "author": "Garru",
65
- "license": "MIT",
66
- "publishConfig": {
67
- "access": "public"
68
- },
69
- "dependencies": {
70
- "@ant-design/icons": "^6.0.0",
71
- "@lexical/code": "^0.34.0",
72
- "@lexical/html": "^0.34.0",
73
- "@lexical/link": "^0.34.0",
74
- "@lexical/list": "^0.34.0",
75
- "@lexical/react": "^0.34.0",
76
- "@lexical/rich-text": "^0.34.0",
77
- "@openim/wasm-client-sdk": "3.8.3-patch.10",
78
- "@tailwindcss/postcss": "^4.1.12",
79
- "@tanstack/react-query": "^5.85.5",
80
- "ahooks": "^3.9.4",
81
- "antd": "^5.27.0",
82
- "axios": "^1.11.0",
83
- "clsx": "^2.0.0",
84
- "dayjs": "^1.11.13",
85
- "dompurify": "^3.3.1",
86
- "i18next": "^25.5.2",
87
- "jwt-decode": "^4.0.0",
88
- "lexical": "^0.34.0",
89
- "lodash": "^4.17.21",
90
- "lucide-react": "^0.263.1",
91
- "mitt": "^3.0.1",
92
- "postcss": "^8.5.6",
93
- "query-string": "^9.3.1",
94
- "react-i18next": "^15.7.3",
95
- "react-icomoon": "^2.6.1",
96
- "react-infinite-scroll-component": "^6.1.0",
97
- "react-sticky-box": "^2.0.5",
98
- "react-virtuoso": "^4.14.0",
99
- "tailwind-merge": "^2.0.0",
100
- "tailwindcss": "^3.3.0",
101
- "uuid": "^11.1.0",
102
- "zustand": "^5.0.7"
103
- },
104
- "peerDependencies": {
105
- "react": "^18.0.0",
106
- "react-dom": "^18.0.0"
107
- },
108
- "devDependencies": {
109
- "@types/dompurify": "^3.2.0",
110
- "@types/lodash": "^4.17.20",
111
- "@types/node": "^20.0.0",
112
- "@types/react": "^18.2.37",
113
- "@types/react-dom": "^18.2.15",
114
- "shx": "^0.4.0",
115
- "tsc-alias": "^1.8.17",
116
- "typescript": "^5.2.2"
117
- },
118
- "scripts": {
119
- "build": "pnpm build:css && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && pnpm copy-assets",
120
- "build:css": "tailwindcss -i ./src/styles/global.css -o ./dist/styles/global.css --minify",
121
- "dev": "tsc --noEmit --watch",
122
- "lint": "eslint src/",
123
- "type-check": "tsc --noEmit",
124
- "copy-assets": "shx cp -r src/assets dist && shx cp -r src/locales dist"
125
- }
126
- }
1
+ {
2
+ "name": "@droppii-org/chat-sdk",
3
+ "version": "0.1.32",
4
+ "description": "Droppii React Chat SDK",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "types": "./dist/index.d.ts"
11
+ },
12
+ "./components/*": {
13
+ "import": "./dist/components/*.js",
14
+ "types": "./dist/components/*.d.ts"
15
+ },
16
+ "./hooks/*": {
17
+ "import": "./dist/hooks/*.js",
18
+ "types": "./dist/hooks/*.d.ts"
19
+ },
20
+ "./context/*": {
21
+ "import": "./dist/context/*.js",
22
+ "types": "./dist/context/*.d.ts"
23
+ },
24
+ "./types/*": {
25
+ "import": "./dist/types/*.js",
26
+ "types": "./dist/types/*.d.ts"
27
+ },
28
+ "./screens/*": {
29
+ "import": "./dist/screens/*.js",
30
+ "types": "./dist/screens/*.d.ts"
31
+ },
32
+ "./assets/*": {
33
+ "import": "./dist/assets/*.js",
34
+ "types": "./dist/assets/*.d.ts"
35
+ },
36
+ "./constants/*": {
37
+ "import": "./dist/constants/*.js",
38
+ "types": "./dist/constants/*.d.ts"
39
+ },
40
+ "./layout/*": {
41
+ "import": "./dist/layout/*.js",
42
+ "types": "./dist/layout/*.d.ts"
43
+ },
44
+ "./utils/*": {
45
+ "import": "./dist/utils/*.js",
46
+ "types": "./dist/utils/*.d.ts"
47
+ },
48
+ "./services/*": {
49
+ "import": "./dist/services/*.js",
50
+ "types": "./dist/services/*.d.ts"
51
+ },
52
+ "./locales/*": "./dist/locales/*",
53
+ "./styles/global.css": "./dist/styles/global.css"
54
+ },
55
+ "files": [
56
+ "dist"
57
+ ],
58
+ "scripts": {
59
+ "build": "pnpm build:css && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && pnpm copy-assets",
60
+ "build:css": "tailwindcss -i ./src/styles/global.css -o ./dist/styles/global.css --minify",
61
+ "dev": "tsc --noEmit --watch",
62
+ "lint": "eslint src/",
63
+ "type-check": "tsc --noEmit",
64
+ "prepublishOnly": "pnpm build",
65
+ "copy-assets": "shx cp -r src/assets dist && shx cp -r src/locales dist"
66
+ },
67
+ "keywords": [
68
+ "chat",
69
+ "sdk",
70
+ "react",
71
+ "messenger-style"
72
+ ],
73
+ "author": "Garru",
74
+ "license": "MIT",
75
+ "publishConfig": {
76
+ "access": "public"
77
+ },
78
+ "dependencies": {
79
+ "@ant-design/icons": "^6.0.0",
80
+ "@lexical/code": "^0.34.0",
81
+ "@lexical/html": "^0.34.0",
82
+ "@lexical/link": "^0.34.0",
83
+ "@lexical/list": "^0.34.0",
84
+ "@lexical/react": "^0.34.0",
85
+ "@lexical/rich-text": "^0.34.0",
86
+ "@openim/wasm-client-sdk": "3.8.3-patch.10",
87
+ "@tailwindcss/postcss": "^4.1.12",
88
+ "@tanstack/react-query": "^5.85.5",
89
+ "ahooks": "^3.9.4",
90
+ "antd": "^5.27.0",
91
+ "axios": "^1.11.0",
92
+ "clsx": "^2.0.0",
93
+ "dayjs": "^1.11.13",
94
+ "dompurify": "^3.3.1",
95
+ "i18next": "^25.5.2",
96
+ "jwt-decode": "^4.0.0",
97
+ "lexical": "^0.34.0",
98
+ "lodash": "^4.17.21",
99
+ "lucide-react": "^0.263.1",
100
+ "mitt": "^3.0.1",
101
+ "postcss": "^8.5.6",
102
+ "query-string": "^9.3.1",
103
+ "react-i18next": "^15.7.3",
104
+ "react-icomoon": "^2.6.1",
105
+ "react-infinite-scroll-component": "^6.1.0",
106
+ "react-sticky-box": "^2.0.5",
107
+ "react-virtuoso": "^4.14.0",
108
+ "tailwind-merge": "^2.0.0",
109
+ "tailwindcss": "^3.3.0",
110
+ "uuid": "^11.1.0",
111
+ "zustand": "^5.0.7"
112
+ },
113
+ "peerDependencies": {
114
+ "react": "^18.0.0",
115
+ "react-dom": "^18.0.0"
116
+ },
117
+ "devDependencies": {
118
+ "@types/dompurify": "^3.2.0",
119
+ "@types/lodash": "^4.17.20",
120
+ "@types/node": "^20.0.0",
121
+ "@types/react": "^18.2.37",
122
+ "@types/react-dom": "^18.2.15",
123
+ "shx": "^0.4.0",
124
+ "tsc-alias": "^1.8.17",
125
+ "typescript": "^5.2.2"
126
+ }
127
+ }