@x-plat/design-system 0.1.1

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 (165) hide show
  1. package/README.md +123 -0
  2. package/dist/attributes-DJIWir_0.d.cts +7 -0
  3. package/dist/attributes-DJIWir_0.d.ts +7 -0
  4. package/dist/breakpoints-DsXkJgdl.d.cts +35 -0
  5. package/dist/breakpoints-DsXkJgdl.d.ts +35 -0
  6. package/dist/colors-BG91q_uV.d.cts +133 -0
  7. package/dist/colors-BG91q_uV.d.ts +133 -0
  8. package/dist/components/Button/index.cjs +203 -0
  9. package/dist/components/Button/index.css +1231 -0
  10. package/dist/components/Button/index.d.cts +132 -0
  11. package/dist/components/Button/index.d.ts +132 -0
  12. package/dist/components/Button/index.js +176 -0
  13. package/dist/components/Card/index.cjs +56 -0
  14. package/dist/components/Card/index.css +27 -0
  15. package/dist/components/Card/index.d.cts +13 -0
  16. package/dist/components/Card/index.d.ts +13 -0
  17. package/dist/components/Card/index.js +29 -0
  18. package/dist/components/Chart/index.cjs +393 -0
  19. package/dist/components/Chart/index.css +4 -0
  20. package/dist/components/Chart/index.d.cts +10 -0
  21. package/dist/components/Chart/index.d.ts +10 -0
  22. package/dist/components/Chart/index.js +367 -0
  23. package/dist/components/CheckBox/index.cjs +1116 -0
  24. package/dist/components/CheckBox/index.css +598 -0
  25. package/dist/components/CheckBox/index.d.cts +132 -0
  26. package/dist/components/CheckBox/index.d.ts +132 -0
  27. package/dist/components/CheckBox/index.js +1089 -0
  28. package/dist/components/Chip/index.cjs +193 -0
  29. package/dist/components/Chip/index.css +1227 -0
  30. package/dist/components/Chip/index.d.cts +132 -0
  31. package/dist/components/Chip/index.d.ts +132 -0
  32. package/dist/components/Chip/index.js +166 -0
  33. package/dist/components/DatePicker/index.cjs +1653 -0
  34. package/dist/components/DatePicker/index.css +1417 -0
  35. package/dist/components/DatePicker/index.d.cts +56 -0
  36. package/dist/components/DatePicker/index.d.ts +56 -0
  37. package/dist/components/DatePicker/index.js +1613 -0
  38. package/dist/components/HtmlTypeWriter/index.cjs +172 -0
  39. package/dist/components/HtmlTypeWriter/index.css +23 -0
  40. package/dist/components/HtmlTypeWriter/index.d.cts +14 -0
  41. package/dist/components/HtmlTypeWriter/index.d.ts +14 -0
  42. package/dist/components/HtmlTypeWriter/index.js +135 -0
  43. package/dist/components/ImageSelector/index.cjs +1063 -0
  44. package/dist/components/ImageSelector/index.css +85 -0
  45. package/dist/components/ImageSelector/index.d.cts +10 -0
  46. package/dist/components/ImageSelector/index.d.ts +10 -0
  47. package/dist/components/ImageSelector/index.js +1026 -0
  48. package/dist/components/Input/index.cjs +410 -0
  49. package/dist/components/Input/index.css +74 -0
  50. package/dist/components/Input/index.d.cts +23 -0
  51. package/dist/components/Input/index.d.ts +23 -0
  52. package/dist/components/Input/index.js +372 -0
  53. package/dist/components/Modal/index.cjs +101 -0
  54. package/dist/components/Modal/index.css +39 -0
  55. package/dist/components/Modal/index.d.cts +16 -0
  56. package/dist/components/Modal/index.d.ts +16 -0
  57. package/dist/components/Modal/index.js +64 -0
  58. package/dist/components/PopOver/index.cjs +176 -0
  59. package/dist/components/PopOver/index.css +27 -0
  60. package/dist/components/PopOver/index.d.cts +15 -0
  61. package/dist/components/PopOver/index.d.ts +15 -0
  62. package/dist/components/PopOver/index.js +139 -0
  63. package/dist/components/Radio/index.cjs +257 -0
  64. package/dist/components/Radio/index.css +777 -0
  65. package/dist/components/Radio/index.d.cts +154 -0
  66. package/dist/components/Radio/index.d.ts +154 -0
  67. package/dist/components/Radio/index.js +219 -0
  68. package/dist/components/Select/index.cjs +1203 -0
  69. package/dist/components/Select/index.css +136 -0
  70. package/dist/components/Select/index.d.cts +44 -0
  71. package/dist/components/Select/index.d.ts +44 -0
  72. package/dist/components/Select/index.js +1165 -0
  73. package/dist/components/Swiper/index.cjs +144 -0
  74. package/dist/components/Swiper/index.d.cts +24 -0
  75. package/dist/components/Swiper/index.d.ts +24 -0
  76. package/dist/components/Swiper/index.js +128 -0
  77. package/dist/components/Switch/index.cjs +240 -0
  78. package/dist/components/Switch/index.css +780 -0
  79. package/dist/components/Switch/index.d.cts +131 -0
  80. package/dist/components/Switch/index.d.ts +131 -0
  81. package/dist/components/Switch/index.js +203 -0
  82. package/dist/components/Tab/index.cjs +122 -0
  83. package/dist/components/Tab/index.css +59 -0
  84. package/dist/components/Tab/index.d.cts +18 -0
  85. package/dist/components/Tab/index.d.ts +18 -0
  86. package/dist/components/Tab/index.js +85 -0
  87. package/dist/components/Table/index.cjs +384 -0
  88. package/dist/components/Table/index.css +4093 -0
  89. package/dist/components/Table/index.d.cts +174 -0
  90. package/dist/components/Table/index.d.ts +174 -0
  91. package/dist/components/Table/index.js +343 -0
  92. package/dist/components/TextArea/index.cjs +114 -0
  93. package/dist/components/TextArea/index.css +34 -0
  94. package/dist/components/TextArea/index.d.cts +6 -0
  95. package/dist/components/TextArea/index.d.ts +6 -0
  96. package/dist/components/TextArea/index.js +77 -0
  97. package/dist/components/Tooltip/index.cjs +210 -0
  98. package/dist/components/Tooltip/index.css +599 -0
  99. package/dist/components/Tooltip/index.d.cts +134 -0
  100. package/dist/components/Tooltip/index.d.ts +134 -0
  101. package/dist/components/Tooltip/index.js +173 -0
  102. package/dist/components/Video/index.cjs +269 -0
  103. package/dist/components/Video/index.css +71 -0
  104. package/dist/components/Video/index.d.cts +15 -0
  105. package/dist/components/Video/index.d.ts +15 -0
  106. package/dist/components/Video/index.js +232 -0
  107. package/dist/components/index.cjs +3221 -0
  108. package/dist/components/index.css +9972 -0
  109. package/dist/components/index.d.cts +23 -0
  110. package/dist/components/index.d.ts +23 -0
  111. package/dist/components/index.js +3167 -0
  112. package/dist/index.cjs +8216 -0
  113. package/dist/index.css +10087 -0
  114. package/dist/index.d.cts +31 -0
  115. package/dist/index.d.ts +31 -0
  116. package/dist/index.js +7855 -0
  117. package/dist/layout/Grid/FullGrid/index.cjs +54 -0
  118. package/dist/layout/Grid/FullGrid/index.css +21 -0
  119. package/dist/layout/Grid/FullGrid/index.d.cts +9 -0
  120. package/dist/layout/Grid/FullGrid/index.d.ts +9 -0
  121. package/dist/layout/Grid/FullGrid/index.js +27 -0
  122. package/dist/layout/Grid/FullScreen/index.cjs +54 -0
  123. package/dist/layout/Grid/FullScreen/index.css +23 -0
  124. package/dist/layout/Grid/FullScreen/index.d.cts +9 -0
  125. package/dist/layout/Grid/FullScreen/index.d.ts +9 -0
  126. package/dist/layout/Grid/FullScreen/index.js +27 -0
  127. package/dist/layout/Grid/GapGrid/index.cjs +32 -0
  128. package/dist/layout/Grid/GapGrid/index.d.cts +12 -0
  129. package/dist/layout/Grid/GapGrid/index.d.ts +12 -0
  130. package/dist/layout/Grid/GapGrid/index.js +11 -0
  131. package/dist/layout/Grid/Item/index.cjs +71 -0
  132. package/dist/layout/Grid/Item/index.css +19 -0
  133. package/dist/layout/Grid/Item/index.d.cts +20 -0
  134. package/dist/layout/Grid/Item/index.d.ts +20 -0
  135. package/dist/layout/Grid/Item/index.js +44 -0
  136. package/dist/layout/Grid/index.cjs +95 -0
  137. package/dist/layout/Grid/index.css +65 -0
  138. package/dist/layout/Grid/index.d.cts +5 -0
  139. package/dist/layout/Grid/index.d.ts +5 -0
  140. package/dist/layout/Grid/index.js +65 -0
  141. package/dist/layout/Header/index.cjs +45 -0
  142. package/dist/layout/Header/index.css +11 -0
  143. package/dist/layout/Header/index.d.cts +10 -0
  144. package/dist/layout/Header/index.d.ts +10 -0
  145. package/dist/layout/Header/index.js +18 -0
  146. package/dist/layout/Layout/index.cjs +44 -0
  147. package/dist/layout/Layout/index.css +23 -0
  148. package/dist/layout/Layout/index.d.cts +15 -0
  149. package/dist/layout/Layout/index.d.ts +15 -0
  150. package/dist/layout/Layout/index.js +17 -0
  151. package/dist/layout/SideBar/index.cjs +101 -0
  152. package/dist/layout/SideBar/index.css +10 -0
  153. package/dist/layout/SideBar/index.d.cts +16 -0
  154. package/dist/layout/SideBar/index.d.ts +16 -0
  155. package/dist/layout/SideBar/index.js +62 -0
  156. package/dist/layout/index.cjs +188 -0
  157. package/dist/layout/index.css +112 -0
  158. package/dist/layout/index.d.cts +8 -0
  159. package/dist/layout/index.d.ts +8 -0
  160. package/dist/layout/index.js +143 -0
  161. package/dist/tokens/index.cjs +6225 -0
  162. package/dist/tokens/index.d.cts +593 -0
  163. package/dist/tokens/index.d.ts +593 -0
  164. package/dist/tokens/index.js +5900 -0
  165. package/package.json +86 -0
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/components/HtmlTypeWriter/index.ts
31
+ var HtmlTypeWriter_exports = {};
32
+ __export(HtmlTypeWriter_exports, {
33
+ HtmlTypewriter: () => HtmlTypeWriter_default
34
+ });
35
+ module.exports = __toCommonJS(HtmlTypeWriter_exports);
36
+
37
+ // src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
38
+ var import_react2 = __toESM(require("react"), 1);
39
+
40
+ // src/components/HtmlTypeWriter/utils.ts
41
+ var import_react = __toESM(require("react"), 1);
42
+ var voidTags = /* @__PURE__ */ new Set([
43
+ "br",
44
+ "img",
45
+ "hr",
46
+ "input",
47
+ "meta",
48
+ "link",
49
+ "area",
50
+ "base",
51
+ "col",
52
+ "embed",
53
+ "param",
54
+ "source",
55
+ "track",
56
+ "wbr"
57
+ ]);
58
+ function decodeHtmlEntities(str) {
59
+ return str.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, '"').replace(/&#x27;/g, "'").replace(/&#39;/g, "'").replace(/&#(\d+);/g, (_, code) => String.fromCharCode(Number(code))).replace(
60
+ /&#x([0-9a-fA-F]+);/g,
61
+ (_, code) => String.fromCharCode(parseInt(code, 16))
62
+ );
63
+ }
64
+ function buildRangeMap(root) {
65
+ const rangeMap = /* @__PURE__ */ new WeakMap();
66
+ let index = 0;
67
+ function assign(node) {
68
+ if (node.nodeType === Node.TEXT_NODE) {
69
+ const len = (node.textContent || "").length;
70
+ rangeMap.set(node, { start: index, end: index + len });
71
+ index += len;
72
+ return;
73
+ }
74
+ if (node.nodeType === Node.ELEMENT_NODE) {
75
+ const el = node;
76
+ const tag = el.tagName.toLowerCase();
77
+ const start = index;
78
+ if (voidTags.has(tag)) {
79
+ rangeMap.set(node, { start: index, end: index + 1 });
80
+ index += 1;
81
+ return;
82
+ }
83
+ Array.from(el.childNodes).forEach(assign);
84
+ rangeMap.set(node, { start, end: index });
85
+ return;
86
+ }
87
+ rangeMap.set(node, { start: index, end: index });
88
+ }
89
+ Array.from(root.childNodes).forEach(assign);
90
+ return { rangeMap, totalLength: index };
91
+ }
92
+ function convertNodeToReactWithRange(node, typedLen, rangeMap) {
93
+ const range = rangeMap.get(node);
94
+ if (!range) return null;
95
+ if (range.start >= typedLen) return null;
96
+ if (node.nodeType === Node.TEXT_NODE) {
97
+ const text = node.textContent || "";
98
+ if (range.end <= typedLen) return text;
99
+ return text.slice(0, typedLen - range.start);
100
+ }
101
+ if (node.nodeType !== Node.ELEMENT_NODE) return null;
102
+ const element = node;
103
+ const tag = element.tagName.toLowerCase();
104
+ const props = {};
105
+ Array.from(element.attributes).forEach((attr) => {
106
+ props[attr.name] = attr.value;
107
+ });
108
+ if (voidTags.has(tag)) {
109
+ return import_react.default.createElement(tag, props);
110
+ }
111
+ const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
112
+ return import_react.default.createElement(tag, props, ...children);
113
+ }
114
+ function htmlToReactProgressive(root, typedLen, rangeMap) {
115
+ const nodes = Array.from(root.childNodes).map((child, idx) => {
116
+ const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
117
+ return node == null ? null : import_react.default.createElement(import_react.default.Fragment, { key: idx }, node);
118
+ }).filter(Boolean);
119
+ return nodes.length === 0 ? null : nodes;
120
+ }
121
+
122
+ // src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
123
+ var import_jsx_runtime = require("react/jsx-runtime");
124
+ var HtmlTypeWriter = ({
125
+ html,
126
+ duration = 20,
127
+ onDone,
128
+ onChange
129
+ }) => {
130
+ const [typedLen, setTypedLen] = import_react2.default.useState(0);
131
+ const doneCalledRef = import_react2.default.useRef(false);
132
+ const { doc, rangeMap, totalLength } = import_react2.default.useMemo(() => {
133
+ const decoded = decodeHtmlEntities(html);
134
+ const doc2 = new DOMParser().parseFromString(decoded, "text/html");
135
+ const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
136
+ return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
137
+ }, [html]);
138
+ import_react2.default.useEffect(() => {
139
+ setTypedLen(0);
140
+ doneCalledRef.current = false;
141
+ }, [html]);
142
+ import_react2.default.useEffect(() => {
143
+ if (!totalLength) return;
144
+ if (typedLen >= totalLength) return;
145
+ const timer = window.setInterval(() => {
146
+ setTypedLen((prev) => Math.min(prev + 1, totalLength));
147
+ }, duration);
148
+ return () => window.clearInterval(timer);
149
+ }, [typedLen, totalLength, duration]);
150
+ import_react2.default.useEffect(() => {
151
+ if (typedLen > 0 && typedLen < totalLength) {
152
+ onChange?.();
153
+ }
154
+ }, [typedLen, totalLength, onChange]);
155
+ import_react2.default.useEffect(() => {
156
+ if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
157
+ doneCalledRef.current = true;
158
+ onDone?.();
159
+ }
160
+ }, [typedLen, totalLength, onDone]);
161
+ const parsed = import_react2.default.useMemo(
162
+ () => htmlToReactProgressive(doc.body, typedLen, rangeMap),
163
+ [doc.body, typedLen, rangeMap]
164
+ );
165
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
166
+ };
167
+ HtmlTypeWriter.displayName = "HtmlTypeWriter";
168
+ var HtmlTypeWriter_default = HtmlTypeWriter;
169
+ // Annotate the CommonJS export names for ESM import in node:
170
+ 0 && (module.exports = {
171
+ HtmlTypewriter
172
+ });
@@ -0,0 +1,23 @@
1
+ /* src/components/HtmlTypeWriter/htmlTypeWriter.scss */
2
+ .lib-xplat-htmlTypewriter {
3
+ font-size: 16px;
4
+ }
5
+ .lib-xplat-htmlTypewriter h1,
6
+ .lib-xplat-htmlTypewriter h2,
7
+ .lib-xplat-htmlTypewriter h3,
8
+ .lib-xplat-htmlTypewriter h4,
9
+ .lib-xplat-htmlTypewriter h5,
10
+ .lib-xplat-htmlTypewriter h6 {
11
+ font-weight: 600;
12
+ }
13
+ .lib-xplat-htmlTypewriter h3 {
14
+ font-size: 28px;
15
+ }
16
+ .lib-xplat-htmlTypewriter h4 {
17
+ font-size: 20px;
18
+ }
19
+ .lib-xplat-htmlTypewriter hr {
20
+ color: #E5E5E5;
21
+ margin-top: 1rem;
22
+ margin-bottom: 1rem;
23
+ }
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface HtmlTypewriterProps {
4
+ html: string;
5
+ duration?: number;
6
+ onDone?: () => void;
7
+ onChange?: () => void;
8
+ }
9
+ declare const HtmlTypeWriter: {
10
+ ({ html, duration, onDone, onChange, }: HtmlTypewriterProps): react_jsx_runtime.JSX.Element;
11
+ displayName: string;
12
+ };
13
+
14
+ export { HtmlTypeWriter as HtmlTypewriter };
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface HtmlTypewriterProps {
4
+ html: string;
5
+ duration?: number;
6
+ onDone?: () => void;
7
+ onChange?: () => void;
8
+ }
9
+ declare const HtmlTypeWriter: {
10
+ ({ html, duration, onDone, onChange, }: HtmlTypewriterProps): react_jsx_runtime.JSX.Element;
11
+ displayName: string;
12
+ };
13
+
14
+ export { HtmlTypeWriter as HtmlTypewriter };
@@ -0,0 +1,135 @@
1
+ // src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
2
+ import React2 from "react";
3
+
4
+ // src/components/HtmlTypeWriter/utils.ts
5
+ import React from "react";
6
+ var voidTags = /* @__PURE__ */ new Set([
7
+ "br",
8
+ "img",
9
+ "hr",
10
+ "input",
11
+ "meta",
12
+ "link",
13
+ "area",
14
+ "base",
15
+ "col",
16
+ "embed",
17
+ "param",
18
+ "source",
19
+ "track",
20
+ "wbr"
21
+ ]);
22
+ function decodeHtmlEntities(str) {
23
+ return str.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, '"').replace(/&#x27;/g, "'").replace(/&#39;/g, "'").replace(/&#(\d+);/g, (_, code) => String.fromCharCode(Number(code))).replace(
24
+ /&#x([0-9a-fA-F]+);/g,
25
+ (_, code) => String.fromCharCode(parseInt(code, 16))
26
+ );
27
+ }
28
+ function buildRangeMap(root) {
29
+ const rangeMap = /* @__PURE__ */ new WeakMap();
30
+ let index = 0;
31
+ function assign(node) {
32
+ if (node.nodeType === Node.TEXT_NODE) {
33
+ const len = (node.textContent || "").length;
34
+ rangeMap.set(node, { start: index, end: index + len });
35
+ index += len;
36
+ return;
37
+ }
38
+ if (node.nodeType === Node.ELEMENT_NODE) {
39
+ const el = node;
40
+ const tag = el.tagName.toLowerCase();
41
+ const start = index;
42
+ if (voidTags.has(tag)) {
43
+ rangeMap.set(node, { start: index, end: index + 1 });
44
+ index += 1;
45
+ return;
46
+ }
47
+ Array.from(el.childNodes).forEach(assign);
48
+ rangeMap.set(node, { start, end: index });
49
+ return;
50
+ }
51
+ rangeMap.set(node, { start: index, end: index });
52
+ }
53
+ Array.from(root.childNodes).forEach(assign);
54
+ return { rangeMap, totalLength: index };
55
+ }
56
+ function convertNodeToReactWithRange(node, typedLen, rangeMap) {
57
+ const range = rangeMap.get(node);
58
+ if (!range) return null;
59
+ if (range.start >= typedLen) return null;
60
+ if (node.nodeType === Node.TEXT_NODE) {
61
+ const text = node.textContent || "";
62
+ if (range.end <= typedLen) return text;
63
+ return text.slice(0, typedLen - range.start);
64
+ }
65
+ if (node.nodeType !== Node.ELEMENT_NODE) return null;
66
+ const element = node;
67
+ const tag = element.tagName.toLowerCase();
68
+ const props = {};
69
+ Array.from(element.attributes).forEach((attr) => {
70
+ props[attr.name] = attr.value;
71
+ });
72
+ if (voidTags.has(tag)) {
73
+ return React.createElement(tag, props);
74
+ }
75
+ const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
76
+ return React.createElement(tag, props, ...children);
77
+ }
78
+ function htmlToReactProgressive(root, typedLen, rangeMap) {
79
+ const nodes = Array.from(root.childNodes).map((child, idx) => {
80
+ const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
81
+ return node == null ? null : React.createElement(React.Fragment, { key: idx }, node);
82
+ }).filter(Boolean);
83
+ return nodes.length === 0 ? null : nodes;
84
+ }
85
+
86
+ // src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
87
+ import { jsx } from "react/jsx-runtime";
88
+ var HtmlTypeWriter = ({
89
+ html,
90
+ duration = 20,
91
+ onDone,
92
+ onChange
93
+ }) => {
94
+ const [typedLen, setTypedLen] = React2.useState(0);
95
+ const doneCalledRef = React2.useRef(false);
96
+ const { doc, rangeMap, totalLength } = React2.useMemo(() => {
97
+ const decoded = decodeHtmlEntities(html);
98
+ const doc2 = new DOMParser().parseFromString(decoded, "text/html");
99
+ const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
100
+ return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
101
+ }, [html]);
102
+ React2.useEffect(() => {
103
+ setTypedLen(0);
104
+ doneCalledRef.current = false;
105
+ }, [html]);
106
+ React2.useEffect(() => {
107
+ if (!totalLength) return;
108
+ if (typedLen >= totalLength) return;
109
+ const timer = window.setInterval(() => {
110
+ setTypedLen((prev) => Math.min(prev + 1, totalLength));
111
+ }, duration);
112
+ return () => window.clearInterval(timer);
113
+ }, [typedLen, totalLength, duration]);
114
+ React2.useEffect(() => {
115
+ if (typedLen > 0 && typedLen < totalLength) {
116
+ onChange?.();
117
+ }
118
+ }, [typedLen, totalLength, onChange]);
119
+ React2.useEffect(() => {
120
+ if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
121
+ doneCalledRef.current = true;
122
+ onDone?.();
123
+ }
124
+ }, [typedLen, totalLength, onDone]);
125
+ const parsed = React2.useMemo(
126
+ () => htmlToReactProgressive(doc.body, typedLen, rangeMap),
127
+ [doc.body, typedLen, rangeMap]
128
+ );
129
+ return /* @__PURE__ */ jsx("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
130
+ };
131
+ HtmlTypeWriter.displayName = "HtmlTypeWriter";
132
+ var HtmlTypeWriter_default = HtmlTypeWriter;
133
+ export {
134
+ HtmlTypeWriter_default as HtmlTypewriter
135
+ };