html-to-ascii 0.2.1 → 0.2.3
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/components/ASCII.d.ts +1 -0
- package/dist/components/ASCII.d.ts.map +1 -0
- package/dist/contexts/GridContext.d.ts +1 -0
- package/dist/contexts/GridContext.d.ts.map +1 -0
- package/dist/hooks/useGridContext.d.ts +1 -0
- package/dist/hooks/useGridContext.d.ts.map +1 -0
- package/dist/hooks/useReveal.d.ts +1 -0
- package/dist/hooks/useReveal.d.ts.map +1 -0
- package/dist/hooks/useWindowDimensions.d.ts +1 -0
- package/dist/hooks/useWindowDimensions.d.ts.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/{html-to-ascii.js → index.es.js} +79 -47
- package/dist/index.es.js.map +1 -0
- package/dist/index.umd.js +2 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/providers/ASCIIProvider.d.ts +1 -0
- package/dist/providers/ASCIIProvider.d.ts.map +1 -0
- package/dist/utils/defaultOptions.d.ts +1 -0
- package/dist/utils/defaultOptions.d.ts.map +1 -0
- package/package.json +8 -1
- package/dist/types/GridData.d.ts +0 -14
- package/dist/types/GridOptions.d.ts +0 -16
- package/dist/types/Rect.d.ts +0 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ASCII.d.ts","sourceRoot":"","sources":["../../lib/components/ASCII.tsx"],"names":[],"mappings":"AA4QA,eAAO,MAAM,KAAK,GAAI,cAAc;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,4CA8ChE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridContext.d.ts","sourceRoot":"","sources":["../../lib/contexts/GridContext.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAGjD,eAAO,MAAM,WAAW,mCAYtB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGridContext.d.ts","sourceRoot":"","sources":["../../lib/hooks/useGridContext.tsx"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,4CAE1B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useReveal.d.ts","sourceRoot":"","sources":["../../lib/hooks/useReveal.tsx"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,SAAI,YAoBlD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWindowDimensions.d.ts","sourceRoot":"","sources":["../../lib/hooks/useWindowDimensions.tsx"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB;;;EAclC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
export { ASCII } from './components/ASCII
|
|
2
|
-
export { useGridContext } from './hooks/useGridContext
|
|
1
|
+
export { ASCII } from './components/ASCII';
|
|
2
|
+
export { useGridContext } from './hooks/useGridContext';
|
|
3
|
+
export { ASCIIProvider } from './providers/ASCIIProvider';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { createContext as
|
|
3
|
-
const
|
|
1
|
+
import { jsxs as H, jsx as f } from "react/jsx-runtime";
|
|
2
|
+
import { createContext as W, useContext as k, useState as b, useEffect as u, useRef as x, useLayoutEffect as v } from "react";
|
|
3
|
+
const m = {
|
|
4
4
|
t: "─",
|
|
5
5
|
ti: "┴",
|
|
6
6
|
b: "─",
|
|
@@ -15,7 +15,7 @@ const W = {
|
|
|
15
15
|
bl: "└",
|
|
16
16
|
i: "┼",
|
|
17
17
|
fill: " "
|
|
18
|
-
},
|
|
18
|
+
}, w = W({
|
|
19
19
|
fontHeight: 0,
|
|
20
20
|
courierRatio: 0,
|
|
21
21
|
fontWidth: 0,
|
|
@@ -26,27 +26,27 @@ const W = {
|
|
|
26
26
|
rows: 0,
|
|
27
27
|
cols: 0,
|
|
28
28
|
grid: [],
|
|
29
|
-
options:
|
|
30
|
-
}),
|
|
31
|
-
function
|
|
32
|
-
const [n,
|
|
33
|
-
return
|
|
34
|
-
let
|
|
35
|
-
const
|
|
36
|
-
|
|
29
|
+
options: m
|
|
30
|
+
}), C = () => k(w);
|
|
31
|
+
function d(s, t = 1) {
|
|
32
|
+
const [n, i] = b(0);
|
|
33
|
+
return u(() => {
|
|
34
|
+
let c;
|
|
35
|
+
const a = () => {
|
|
36
|
+
i((o) => o >= s.length ? o : o + t), c = requestAnimationFrame(a);
|
|
37
37
|
};
|
|
38
|
-
return
|
|
38
|
+
return a(), () => cancelAnimationFrame(c);
|
|
39
39
|
}, [s, t]), s.slice(0, n);
|
|
40
40
|
}
|
|
41
41
|
const r = (s, t, n) => {
|
|
42
|
-
const
|
|
43
|
-
return (t / n.fontHeight | 0) * n.cols +
|
|
42
|
+
const i = s / n.fontWidth | 0;
|
|
43
|
+
return (t / n.fontHeight | 0) * n.cols + i;
|
|
44
44
|
}, y = ({ rect: s, grid: t }) => {
|
|
45
|
-
const n = Math.floor(s.rect.left / t.fontWidth) * t.fontWidth,
|
|
45
|
+
const n = Math.floor(s.rect.left / t.fontWidth) * t.fontWidth, i = Math.floor(s.rect.right / t.fontWidth) * t.fontWidth, c = Math.floor(s.rect.top / t.fontHeight) * t.fontHeight, a = Math.floor(s.rect.bottom / t.fontHeight) * t.fontHeight;
|
|
46
46
|
if (s.classList.contains("ascii-border") && !["ascii-border-l", "ascii-border-r", "ascii-border-t", "ascii-border-b"].some(
|
|
47
47
|
(o) => s.classList.contains(o)
|
|
48
48
|
) || s.classList.contains("ascii-border-l"))
|
|
49
|
-
for (let o =
|
|
49
|
+
for (let o = c + t.fontHeight; o < a; o += t.fontHeight) {
|
|
50
50
|
const e = r(n, o, t);
|
|
51
51
|
switch (t.grid[e]) {
|
|
52
52
|
case t.options.t:
|
|
@@ -62,8 +62,8 @@ const r = (s, t, n) => {
|
|
|
62
62
|
if (s.classList.contains("ascii-border") && !["ascii-border-l", "ascii-border-r", "ascii-border-t", "ascii-border-b"].some(
|
|
63
63
|
(o) => s.classList.contains(o)
|
|
64
64
|
) || s.classList.contains("ascii-border-r"))
|
|
65
|
-
for (let o =
|
|
66
|
-
const e = r(
|
|
65
|
+
for (let o = c + t.fontHeight; o < a; o += t.fontHeight) {
|
|
66
|
+
const e = r(i, o, t);
|
|
67
67
|
switch (t.grid[e]) {
|
|
68
68
|
case t.options.t:
|
|
69
69
|
case t.options.b:
|
|
@@ -78,8 +78,8 @@ const r = (s, t, n) => {
|
|
|
78
78
|
if (s.classList.contains("ascii-border") && !["ascii-border-l", "ascii-border-r", "ascii-border-t", "ascii-border-b"].some(
|
|
79
79
|
(o) => s.classList.contains(o)
|
|
80
80
|
) || s.classList.contains("ascii-border-t"))
|
|
81
|
-
for (let o = n + t.fontWidth; o <
|
|
82
|
-
const e = r(o,
|
|
81
|
+
for (let o = n + t.fontWidth; o < i; o += t.fontWidth) {
|
|
82
|
+
const e = r(o, c, t);
|
|
83
83
|
switch (t.grid[e]) {
|
|
84
84
|
case t.options.l:
|
|
85
85
|
case t.options.r:
|
|
@@ -94,8 +94,8 @@ const r = (s, t, n) => {
|
|
|
94
94
|
if (s.classList.contains("ascii-border") && !["ascii-border-l", "ascii-border-r", "ascii-border-t", "ascii-border-b"].some(
|
|
95
95
|
(o) => s.classList.contains(o)
|
|
96
96
|
) || s.classList.contains("ascii-border-b"))
|
|
97
|
-
for (let o = n + t.fontWidth; o <
|
|
98
|
-
const e = r(o,
|
|
97
|
+
for (let o = n + t.fontWidth; o < i; o += t.fontWidth) {
|
|
98
|
+
const e = r(o, a, t);
|
|
99
99
|
switch (t.grid[e]) {
|
|
100
100
|
case t.options.l:
|
|
101
101
|
case t.options.r:
|
|
@@ -108,7 +108,7 @@ const r = (s, t, n) => {
|
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
if (["ascii-border", "ascii-border-tl"].some((o) => s.classList.contains(o)) || ["ascii-border-l", "ascii-border-t"].every((o) => s.classList.contains(o))) {
|
|
111
|
-
const o = r(n,
|
|
111
|
+
const o = r(n, c, t);
|
|
112
112
|
switch (t.grid[o]) {
|
|
113
113
|
case t.options.t:
|
|
114
114
|
case t.options.b:
|
|
@@ -128,7 +128,7 @@ const r = (s, t, n) => {
|
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
if (["ascii-border", "ascii-border-tr"].some((o) => s.classList.contains(o)) || ["ascii-border-r", "ascii-border-t"].every((o) => s.classList.contains(o))) {
|
|
131
|
-
const o = r(
|
|
131
|
+
const o = r(i, c, t);
|
|
132
132
|
switch (t.grid[o]) {
|
|
133
133
|
case t.options.t:
|
|
134
134
|
case t.options.b:
|
|
@@ -148,7 +148,7 @@ const r = (s, t, n) => {
|
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
if (["ascii-border", "ascii-border-br"].some((o) => s.classList.contains(o)) || ["ascii-border-r", "ascii-border-b"].every((o) => s.classList.contains(o))) {
|
|
151
|
-
const o = r(
|
|
151
|
+
const o = r(i, a, t);
|
|
152
152
|
if (s.type === "textarea")
|
|
153
153
|
t.grid[o] = "▼";
|
|
154
154
|
else
|
|
@@ -171,7 +171,7 @@ const r = (s, t, n) => {
|
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
if (["ascii-border", "ascii-border-bl"].some((o) => s.classList.contains(o)) || ["ascii-border-l", "ascii-border-b"].every((o) => s.classList.contains(o))) {
|
|
174
|
-
const o = r(n,
|
|
174
|
+
const o = r(n, a, t);
|
|
175
175
|
switch (t.grid[o]) {
|
|
176
176
|
case t.options.l:
|
|
177
177
|
case t.options.r:
|
|
@@ -191,25 +191,25 @@ const r = (s, t, n) => {
|
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
193
|
if (s.classList.contains("ascii-fill"))
|
|
194
|
-
for (let o =
|
|
195
|
-
for (let e = n + t.fontWidth; e <
|
|
194
|
+
for (let o = c + t.fontHeight; o < a; o += t.fontHeight)
|
|
195
|
+
for (let e = n + t.fontWidth; e < i; e += t.fontWidth)
|
|
196
196
|
t.grid[r(e, o, t)] = t.options.fill;
|
|
197
197
|
s.classList.contains("ascii-text") && s.characters.forEach((o) => {
|
|
198
198
|
const e = Math.floor(o.rect.left / t.fontWidth) * t.fontWidth, l = Math.floor(o.rect.bottom / t.fontHeight) * t.fontHeight;
|
|
199
199
|
t.grid[r(e, l, t)] = o.char;
|
|
200
200
|
});
|
|
201
201
|
};
|
|
202
|
-
function
|
|
202
|
+
function R(s) {
|
|
203
203
|
return s.current ? Array.from(s.current.querySelectorAll('[class*="ascii"]')).map((t) => {
|
|
204
|
-
const n = [],
|
|
205
|
-
for (;
|
|
206
|
-
const
|
|
207
|
-
for (let o = 0; o <
|
|
208
|
-
if (
|
|
204
|
+
const n = [], i = document.createTreeWalker(t, NodeFilter.SHOW_TEXT);
|
|
205
|
+
for (; i.nextNode(); ) {
|
|
206
|
+
const c = i.currentNode, a = c.textContent ?? "";
|
|
207
|
+
for (let o = 0; o < a.length; o++) {
|
|
208
|
+
if (a[o].trim() === "") continue;
|
|
209
209
|
const e = document.createRange();
|
|
210
|
-
e.setStart(
|
|
210
|
+
e.setStart(c, o), e.setEnd(c, o + 1);
|
|
211
211
|
const l = e.getBoundingClientRect();
|
|
212
|
-
n.push({ char:
|
|
212
|
+
n.push({ char: a[o], rect: l });
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
215
|
return {
|
|
@@ -220,22 +220,22 @@ function C(s) {
|
|
|
220
220
|
};
|
|
221
221
|
}) : [];
|
|
222
222
|
}
|
|
223
|
-
const
|
|
224
|
-
const t =
|
|
225
|
-
|
|
223
|
+
const I = ({ children: s }) => {
|
|
224
|
+
const t = x(null), n = C(), [i, c] = b([]), a = d(n.grid, 30);
|
|
225
|
+
v(() => {
|
|
226
226
|
if (!t.current) return;
|
|
227
227
|
let o;
|
|
228
228
|
const e = () => {
|
|
229
|
-
|
|
229
|
+
c(R(t)), o = requestAnimationFrame(e);
|
|
230
230
|
};
|
|
231
231
|
return e(), () => cancelAnimationFrame(o);
|
|
232
232
|
}, []);
|
|
233
233
|
for (let o = 0; o < n.grid.length; o++)
|
|
234
234
|
n.grid[o] = " ";
|
|
235
|
-
return
|
|
235
|
+
return i?.forEach((o) => {
|
|
236
236
|
y({ rect: o, grid: n });
|
|
237
|
-
}), /* @__PURE__ */
|
|
238
|
-
/* @__PURE__ */
|
|
237
|
+
}), /* @__PURE__ */ H("div", { ref: t, children: [
|
|
238
|
+
/* @__PURE__ */ f(
|
|
239
239
|
"div",
|
|
240
240
|
{
|
|
241
241
|
style: { width: n.truncWidth, height: n.truncHeight },
|
|
@@ -243,10 +243,42 @@ const A = ({ children: s }) => {
|
|
|
243
243
|
children: s
|
|
244
244
|
}
|
|
245
245
|
),
|
|
246
|
-
t.current && /* @__PURE__ */
|
|
246
|
+
t.current && /* @__PURE__ */ f("div", { style: { width: n.truncWidth, height: n.truncHeight }, className: "leading-none wrap-break-word", children: a.join("") })
|
|
247
247
|
] });
|
|
248
248
|
};
|
|
249
|
+
function A() {
|
|
250
|
+
const [s, t] = b({
|
|
251
|
+
width: 0,
|
|
252
|
+
height: 0
|
|
253
|
+
});
|
|
254
|
+
return u(() => {
|
|
255
|
+
const n = () => t({ width: window.innerWidth, height: window.innerHeight });
|
|
256
|
+
return n(), window.addEventListener("resize", n), () => window.removeEventListener("resize", n);
|
|
257
|
+
}, []), s;
|
|
258
|
+
}
|
|
259
|
+
function E({ width: s, height: t }) {
|
|
260
|
+
const i = 0.60009765625, c = 16 * i, a = s - s % c, o = t - t % 16, e = s, l = t, h = Math.floor(o / 16), p = Math.floor(a / c), L = Array.from({ length: h * p }, () => " ");
|
|
261
|
+
return {
|
|
262
|
+
fontHeight: 16,
|
|
263
|
+
courierRatio: i,
|
|
264
|
+
fontWidth: c,
|
|
265
|
+
truncWidth: a,
|
|
266
|
+
truncHeight: o,
|
|
267
|
+
windowWidth: e,
|
|
268
|
+
windowHeight: l,
|
|
269
|
+
rows: h,
|
|
270
|
+
cols: p,
|
|
271
|
+
grid: L,
|
|
272
|
+
options: m
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
function F({ children: s }) {
|
|
276
|
+
const { width: t, height: n } = A(), i = E({ width: t, height: n });
|
|
277
|
+
return /* @__PURE__ */ f(w.Provider, { value: i, children: s });
|
|
278
|
+
}
|
|
249
279
|
export {
|
|
250
|
-
|
|
251
|
-
|
|
280
|
+
I as ASCII,
|
|
281
|
+
F as ASCIIProvider,
|
|
282
|
+
C as useGridContext
|
|
252
283
|
};
|
|
284
|
+
//# sourceMappingURL=index.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../lib/utils/defaultOptions.tsx","../lib/contexts/GridContext.tsx","../lib/hooks/useGridContext.tsx","../lib/hooks/useReveal.tsx","../lib/components/ASCII.tsx","../lib/hooks/useWindowDimensions.tsx","../lib/providers/ASCIIProvider.tsx"],"sourcesContent":["import type { GridOptions } from \"../types/GridOptions\"\r\n\r\nexport const defaultOptions: GridOptions = {\r\n\tt: \"─\",\r\n\tti: \"┴\",\r\n\tb: \"─\",\r\n\tbi: \"┬\",\r\n\tl: \"│\",\r\n\tli: \"┤\",\r\n\tr: \"│\",\r\n\tri: \"├\",\r\n\ttl: \"┌\",\r\n\ttr: \"┐\",\r\n\tbr: \"┘\",\r\n\tbl: \"└\",\r\n\ti: \"┼\",\r\n\tfill: String.fromCharCode(160),\r\n}\r\n","import { createContext } from \"react\"\r\nimport type { GridData } from \"../types/GridData\"\r\nimport { defaultOptions } from \"../utils/defaultOptions\"\r\n\r\nexport const GridContext = createContext<GridData>({\r\n\tfontHeight: 0,\r\n\tcourierRatio: 0,\r\n\tfontWidth: 0,\r\n\ttruncWidth: 0,\r\n\ttruncHeight: 0,\r\n\twindowWidth: 0,\r\n\twindowHeight: 0,\r\n\trows: 0,\r\n\tcols: 0,\r\n\tgrid: [],\r\n\toptions: defaultOptions,\r\n})\r\n","import { useContext } from \"react\"\r\nimport { GridContext } from \"../contexts/GridContext\"\r\n\r\nexport const useGridContext = () => {\r\n\treturn useContext(GridContext)\r\n}\r\n","import { useEffect, useState } from \"react\"\r\n\r\nexport function useReveal(grid: string[], speed = 1) {\r\n\tconst [index, setIndex] = useState(0)\r\n\tuseEffect(() => {\r\n\t\tlet frame: number\r\n\r\n\t\tconst loop = () => {\r\n\t\t\tsetIndex((i) => {\r\n\t\t\t\tif (i >= grid.length) return i\r\n\t\t\t\treturn i + speed\r\n\t\t\t})\r\n\r\n\t\t\tframe = requestAnimationFrame(loop)\r\n\t\t}\r\n\r\n\t\tloop()\r\n\r\n\t\treturn () => cancelAnimationFrame(frame)\r\n\t}, [grid, speed])\r\n\r\n\treturn grid.slice(0, index)\r\n}\r\n","import { useLayoutEffect, useRef, useState } from \"react\"\r\nimport type { GridData } from \"../types/GridData\"\r\nimport type { Rect } from \"../types/Rect\"\r\nimport { useGridContext } from \"../hooks/useGridContext\"\r\nimport { useReveal } from \"../hooks/useReveal\"\r\n\r\nconst getIndex = (x: number, y: number, grid: GridData) => {\r\n\tconst col = (x / grid.fontWidth) | 0\r\n\tconst row = (y / grid.fontHeight) | 0\r\n\treturn row * grid.cols + col\r\n}\r\n\r\nconst drawRect = ({ rect, grid }: { rect: Rect; grid: GridData }) => {\r\n\tconst rectLeft = Math.floor(rect.rect.left / grid.fontWidth) * grid.fontWidth\r\n\tconst rectRight = Math.floor(rect.rect.right / grid.fontWidth) * grid.fontWidth\r\n\tconst rectTop = Math.floor(rect.rect.top / grid.fontHeight) * grid.fontHeight\r\n\tconst rectBottom = Math.floor(rect.rect.bottom / grid.fontHeight) * grid.fontHeight\r\n\r\n\t//verticals\r\n\t//left\r\n\tif (\r\n\t\t(rect.classList.contains(\"ascii-border\") &&\r\n\t\t\t![\"ascii-border-l\", \"ascii-border-r\", \"ascii-border-t\", \"ascii-border-b\"].some((c) =>\r\n\t\t\t\trect.classList.contains(c),\r\n\t\t\t)) ||\r\n\t\trect.classList.contains(\"ascii-border-l\")\r\n\t) {\r\n\t\tfor (let i = rectTop + grid.fontHeight; i < rectBottom; i += grid.fontHeight) {\r\n\t\t\tconst l = getIndex(rectLeft, i, grid)\r\n\r\n\t\t\tswitch (grid.grid[l]) {\r\n\t\t\t\tcase grid.options.t:\r\n\t\t\t\tcase grid.options.b:\r\n\t\t\t\tcase grid.options.tr:\r\n\t\t\t\tcase grid.options.br:\r\n\t\t\t\t\tgrid.grid[l] = grid.options.li\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[l] = grid.options.l\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t//right\r\n\tif (\r\n\t\t(rect.classList.contains(\"ascii-border\") &&\r\n\t\t\t![\"ascii-border-l\", \"ascii-border-r\", \"ascii-border-t\", \"ascii-border-b\"].some((c) =>\r\n\t\t\t\trect.classList.contains(c),\r\n\t\t\t)) ||\r\n\t\trect.classList.contains(\"ascii-border-r\")\r\n\t) {\r\n\t\tfor (let i = rectTop + grid.fontHeight; i < rectBottom; i += grid.fontHeight) {\r\n\t\t\tconst r = getIndex(rectRight, i, grid)\r\n\r\n\t\t\tswitch (grid.grid[r]) {\r\n\t\t\t\tcase grid.options.t:\r\n\t\t\t\tcase grid.options.b:\r\n\t\t\t\tcase grid.options.tl:\r\n\t\t\t\tcase grid.options.bl:\r\n\t\t\t\t\tgrid.grid[r] = grid.options.ri\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[r] = grid.options.r\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//horizontals\r\n\t//top\r\n\tif (\r\n\t\t(rect.classList.contains(\"ascii-border\") &&\r\n\t\t\t![\"ascii-border-l\", \"ascii-border-r\", \"ascii-border-t\", \"ascii-border-b\"].some((c) =>\r\n\t\t\t\trect.classList.contains(c),\r\n\t\t\t)) ||\r\n\t\trect.classList.contains(\"ascii-border-t\")\r\n\t) {\r\n\t\tfor (let i = rectLeft + grid.fontWidth; i < rectRight; i += grid.fontWidth) {\r\n\t\t\tconst t = getIndex(i, rectTop, grid)\r\n\r\n\t\t\tswitch (grid.grid[t]) {\r\n\t\t\t\tcase grid.options.l:\r\n\t\t\t\tcase grid.options.r:\r\n\t\t\t\tcase grid.options.bl:\r\n\t\t\t\tcase grid.options.br:\r\n\t\t\t\t\tgrid.grid[t] = grid.options.ti\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[t] = grid.options.t\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t//bottom\r\n\tif (\r\n\t\t(rect.classList.contains(\"ascii-border\") &&\r\n\t\t\t![\"ascii-border-l\", \"ascii-border-r\", \"ascii-border-t\", \"ascii-border-b\"].some((c) =>\r\n\t\t\t\trect.classList.contains(c),\r\n\t\t\t)) ||\r\n\t\trect.classList.contains(\"ascii-border-b\")\r\n\t) {\r\n\t\tfor (let i = rectLeft + grid.fontWidth; i < rectRight; i += grid.fontWidth) {\r\n\t\t\tconst b = getIndex(i, rectBottom, grid)\r\n\t\t\tswitch (grid.grid[b]) {\r\n\t\t\t\tcase grid.options.l:\r\n\t\t\t\tcase grid.options.r:\r\n\t\t\t\tcase grid.options.tl:\r\n\t\t\t\tcase grid.options.tr:\r\n\t\t\t\t\tgrid.grid[b] = grid.options.bi\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[b] = grid.options.b\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//corners\r\n\t//tl\r\n\tif (\r\n\t\t[\"ascii-border\", \"ascii-border-tl\"].some((c) => rect.classList.contains(c)) ||\r\n\t\t[\"ascii-border-l\", \"ascii-border-t\"].every((c) => rect.classList.contains(c))\r\n\t) {\r\n\t\tconst tl = getIndex(rectLeft, rectTop, grid)\r\n\t\tswitch (grid.grid[tl]) {\r\n\t\t\tcase grid.options.t:\r\n\t\t\tcase grid.options.b:\r\n\t\t\tcase grid.options.tr:\r\n\t\t\t\tgrid.grid[tl] = grid.options.bi\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.l:\r\n\t\t\tcase grid.options.r:\r\n\t\t\tcase grid.options.bl:\r\n\t\t\t\tgrid.grid[tl] = grid.options.ri\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.br:\r\n\t\t\t\tgrid.grid[tl] = grid.options.i\r\n\t\t\t\tbreak\r\n\t\t\tdefault:\r\n\t\t\t\tgrid.grid[tl] = grid.options.tl\r\n\t\t}\r\n\t}\r\n\t//tr\r\n\tif (\r\n\t\t[\"ascii-border\", \"ascii-border-tr\"].some((c) => rect.classList.contains(c)) ||\r\n\t\t[\"ascii-border-r\", \"ascii-border-t\"].every((c) => rect.classList.contains(c))\r\n\t) {\r\n\t\tconst tr = getIndex(rectRight, rectTop, grid)\r\n\t\tswitch (grid.grid[tr]) {\r\n\t\t\tcase grid.options.t:\r\n\t\t\tcase grid.options.b:\r\n\t\t\tcase grid.options.tl:\r\n\t\t\t\tgrid.grid[tr] = grid.options.bi\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.l:\r\n\t\t\tcase grid.options.r:\r\n\t\t\tcase grid.options.br:\r\n\t\t\t\tgrid.grid[tr] = grid.options.li\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.bl:\r\n\t\t\t\tgrid.grid[tr] = grid.options.i\r\n\t\t\t\tbreak\r\n\t\t\tdefault:\r\n\t\t\t\tgrid.grid[tr] = grid.options.tr\r\n\t\t}\r\n\t}\r\n\t//br\r\n\tif (\r\n\t\t[\"ascii-border\", \"ascii-border-br\"].some((c) => rect.classList.contains(c)) ||\r\n\t\t[\"ascii-border-r\", \"ascii-border-b\"].every((c) => rect.classList.contains(c))\r\n\t) {\r\n\t\tconst br = getIndex(rectRight, rectBottom, grid)\r\n\t\tif (rect.type === \"textarea\") {\r\n\t\t\tgrid.grid[br] = \"▼\"\r\n\t\t} else {\r\n\t\t\tswitch (grid.grid[br]) {\r\n\t\t\t\tcase grid.options.l:\r\n\t\t\t\tcase grid.options.r:\r\n\t\t\t\tcase grid.options.tr:\r\n\t\t\t\t\tgrid.grid[br] = grid.options.li\r\n\t\t\t\t\tbreak\r\n\t\t\t\tcase grid.options.t:\r\n\t\t\t\tcase grid.options.b:\r\n\t\t\t\tcase grid.options.bl:\r\n\t\t\t\t\tgrid.grid[br] = grid.options.ti\r\n\t\t\t\t\tbreak\r\n\t\t\t\tcase grid.options.tl:\r\n\t\t\t\t\tgrid.grid[br] = grid.options.i\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[br] = grid.options.br\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//bl\r\n\tif (\r\n\t\t[\"ascii-border\", \"ascii-border-bl\"].some((c) => rect.classList.contains(c)) ||\r\n\t\t[\"ascii-border-l\", \"ascii-border-b\"].every((c) => rect.classList.contains(c))\r\n\t) {\r\n\t\tconst bl = getIndex(rectLeft, rectBottom, grid)\r\n\t\tswitch (grid.grid[bl]) {\r\n\t\t\tcase grid.options.l:\r\n\t\t\tcase grid.options.r:\r\n\t\t\tcase grid.options.tl:\r\n\t\t\t\tgrid.grid[bl] = grid.options.ri\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.t:\r\n\t\t\tcase grid.options.b:\r\n\t\t\tcase grid.options.br:\r\n\t\t\t\tgrid.grid[bl] = grid.options.ti\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.tr:\r\n\t\t\t\tgrid.grid[bl] = grid.options.i\r\n\t\t\t\tbreak\r\n\t\t\tdefault:\r\n\t\t\t\tgrid.grid[bl] = grid.options.bl\r\n\t\t}\r\n\t}\r\n\r\n\t//fill\r\n\tif (rect.classList.contains(\"ascii-fill\")) {\r\n\t\tfor (let y = rectTop + grid.fontHeight; y < rectBottom; y += grid.fontHeight) {\r\n\t\t\tfor (let x = rectLeft + grid.fontWidth; x < rectRight; x += grid.fontWidth) {\r\n\t\t\t\tgrid.grid[getIndex(x, y, grid)] = grid.options.fill\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//characters\r\n\tif (rect.classList.contains(\"ascii-text\")) {\r\n\t\trect.characters.forEach((c) => {\r\n\t\t\tconst cRectLeft = Math.floor(c.rect.left / grid.fontWidth) * grid.fontWidth\r\n\t\t\tconst cRectBottom = Math.floor(c.rect.bottom / grid.fontHeight) * grid.fontHeight\r\n\t\t\tgrid.grid[getIndex(cRectLeft, cRectBottom, grid)] = c.char\r\n\t\t})\r\n\t}\r\n}\r\n\r\nfunction getElements(ref: React.RefObject<HTMLDivElement | null>): Rect[] {\r\n\tif (!ref.current) return []\r\n\treturn Array.from(ref.current.querySelectorAll<HTMLElement>('[class*=\"ascii\"]')).map((el) => {\r\n\t\t//console.log(\"element\", el)\r\n\t\tconst c: { char: string; rect: DOMRect }[] = []\r\n\t\tconst textWalker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT)\r\n\r\n\t\twhile (textWalker.nextNode()) {\r\n\t\t\tconst textNode = textWalker.currentNode as Text\r\n\t\t\tconst text = textNode.textContent ?? \"\"\r\n\r\n\t\t\tfor (let i = 0; i < text.length; i++) {\r\n\t\t\t\tif (text[i].trim() === \"\") continue\r\n\t\t\t\t//console.log(text[i])\r\n\t\t\t\tconst range = document.createRange()\r\n\t\t\t\trange.setStart(textNode, i)\r\n\t\t\t\trange.setEnd(textNode, i + 1)\r\n\r\n\t\t\t\tconst rect = range.getBoundingClientRect()\r\n\t\t\t\t//if (rect.width === 0 || rect.height === 0) continue\r\n\r\n\t\t\t\tc.push({ char: text[i], rect })\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn {\r\n\t\t\trect: el.getBoundingClientRect(),\r\n\t\t\tcharacters: c,\r\n\t\t\ttype: el.tagName.toLowerCase(),\r\n\t\t\tclassList: el.classList,\r\n\t\t}\r\n\t})\r\n}\r\n\r\nexport const ASCII = ({ children }: { children: React.ReactNode }) => {\r\n\tconst parentRef = useRef<HTMLDivElement | null>(null)\r\n\tconst grid = useGridContext()\r\n\tconst [rects, setRects] = useState<Rect[] | null>([])\r\n\tconst reveal = useReveal(grid.grid, 30)\r\n\r\n\tuseLayoutEffect(() => {\r\n\t\tif (!parentRef.current) return\r\n\r\n\t\tlet frame: number\r\n\r\n\t\tconst loop = () => {\r\n\t\t\tsetRects(getElements(parentRef))\r\n\t\t\tframe = requestAnimationFrame(loop)\r\n\t\t}\r\n\r\n\t\tloop()\r\n\r\n\t\treturn () => cancelAnimationFrame(frame)\r\n\t}, [])\r\n\r\n\t// clear canvas\r\n\t// maybe find better way\r\n\tfor (let i = 0; i < grid.grid.length; i++) {\r\n\t\tgrid.grid[i] = String.fromCharCode(160)\r\n\t}\r\n\r\n\trects?.forEach((rect) => {\r\n\t\tdrawRect({ rect, grid })\r\n\t})\r\n\r\n\treturn (\r\n\t\t<div ref={parentRef}>\r\n\t\t\t<div\r\n\t\t\t\tstyle={{ width: grid.truncWidth, height: grid.truncHeight }}\r\n\t\t\t\tclassName=\"absolute opacity-0 top-0 left-0 bg-none pointer-events-none\"\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t</div>\r\n\t\t\t{parentRef.current && (\r\n\t\t\t\t<div style={{ width: grid.truncWidth, height: grid.truncHeight }} className=\"leading-none wrap-break-word\">\r\n\t\t\t\t\t{reveal.join(\"\")}\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t</div>\r\n\t)\r\n}\r\n","import { useEffect, useState } from \"react\"\r\n\r\nexport function useWindowDimensions() {\r\n\tconst [dimensions, setDimensions] = useState({\r\n\t\twidth: 0,\r\n\t\theight: 0,\r\n\t})\r\n\tuseEffect(() => {\r\n\t\tconst update = () => setDimensions({ width: window.innerWidth, height: window.innerHeight })\r\n\r\n\t\tupdate() // Set initial size\r\n\t\twindow.addEventListener(\"resize\", update)\r\n\t\treturn () => window.removeEventListener(\"resize\", update)\r\n\t}, [])\r\n\r\n\treturn dimensions\r\n}\r\n","import { GridContext } from \"../contexts/GridContext\"\r\nimport { useWindowDimensions } from \"../hooks/useWindowDimensions\"\r\nimport type { GridData } from \"../types/GridData\"\r\nimport { defaultOptions } from \"../utils/defaultOptions\"\r\n\r\nfunction initGrid({ width, height }: { width: number; height: number }): GridData {\r\n\tconst fontHeight = 16\r\n\tconst courierRatio = 1229 / 2048\r\n\tconst fontWidth = fontHeight * courierRatio\r\n\tconst truncWidth = width - (width % fontWidth)\r\n\tconst truncHeight = height - (height % fontHeight)\r\n\tconst windowWidth = width\r\n\tconst windowHeight = height\r\n\tconst rows = Math.floor(truncHeight / fontHeight)\r\n\tconst cols = Math.floor(truncWidth / fontWidth)\r\n\tconst grid = Array.from({ length: rows * cols }, () => String.fromCharCode(160))\r\n\tconst options = defaultOptions\r\n\treturn {\r\n\t\tfontHeight,\r\n\t\tcourierRatio,\r\n\t\tfontWidth,\r\n\t\ttruncWidth,\r\n\t\ttruncHeight,\r\n\t\twindowWidth,\r\n\t\twindowHeight,\r\n\t\trows,\r\n\t\tcols,\r\n\t\tgrid,\r\n\t\toptions,\r\n\t}\r\n}\r\n\r\nexport function ASCIIProvider({ children }: { children: React.ReactNode }) {\r\n\tconst { width, height } = useWindowDimensions()\r\n\tconst grid = initGrid({ width, height })\r\n\treturn <GridContext.Provider value={grid}>{children}</GridContext.Provider>\r\n}\r\n"],"names":["defaultOptions","GridContext","createContext","useGridContext","useContext","useReveal","grid","speed","index","setIndex","useState","useEffect","frame","loop","i","getIndex","x","y","col","drawRect","rect","rectLeft","rectRight","rectTop","rectBottom","c","l","r","t","b","tl","tr","br","bl","cRectLeft","cRectBottom","getElements","ref","el","textWalker","textNode","text","range","ASCII","children","parentRef","useRef","rects","setRects","reveal","useLayoutEffect","jsxs","jsx","useWindowDimensions","dimensions","setDimensions","update","initGrid","width","height","courierRatio","fontWidth","truncWidth","truncHeight","windowWidth","windowHeight","rows","cols","ASCIIProvider"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(r,b){typeof exports=="object"&&typeof module<"u"?b(exports,require("react/jsx-runtime"),require("react")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react"],b):(r=typeof globalThis<"u"?globalThis:r||self,b(r["html-to-ascii"]={},r.jsxRuntime,r.React))})(this,(function(r,b,f){"use strict";const p={t:"─",ti:"┴",b:"─",bi:"┬",l:"│",li:"┤",r:"│",ri:"├",tl:"┌",tr:"┐",br:"┘",bl:"└",i:"┼",fill:" "},u=f.createContext({fontHeight:0,courierRatio:0,fontWidth:0,truncWidth:0,truncHeight:0,windowWidth:0,windowHeight:0,rows:0,cols:0,grid:[],options:p}),m=()=>f.useContext(u);function d(s,t=1){const[e,i]=f.useState(0);return f.useEffect(()=>{let c;const a=()=>{i(o=>o>=s.length?o:o+t),c=requestAnimationFrame(a)};return a(),()=>cancelAnimationFrame(c)},[s,t]),s.slice(0,e)}const l=(s,t,e)=>{const i=s/e.fontWidth|0;return(t/e.fontHeight|0)*e.cols+i},H=({rect:s,grid:t})=>{const e=Math.floor(s.rect.left/t.fontWidth)*t.fontWidth,i=Math.floor(s.rect.right/t.fontWidth)*t.fontWidth,c=Math.floor(s.rect.top/t.fontHeight)*t.fontHeight,a=Math.floor(s.rect.bottom/t.fontHeight)*t.fontHeight;if(s.classList.contains("ascii-border")&&!["ascii-border-l","ascii-border-r","ascii-border-t","ascii-border-b"].some(o=>s.classList.contains(o))||s.classList.contains("ascii-border-l"))for(let o=c+t.fontHeight;o<a;o+=t.fontHeight){const n=l(e,o,t);switch(t.grid[n]){case t.options.t:case t.options.b:case t.options.tr:case t.options.br:t.grid[n]=t.options.li;break;default:t.grid[n]=t.options.l}}if(s.classList.contains("ascii-border")&&!["ascii-border-l","ascii-border-r","ascii-border-t","ascii-border-b"].some(o=>s.classList.contains(o))||s.classList.contains("ascii-border-r"))for(let o=c+t.fontHeight;o<a;o+=t.fontHeight){const n=l(i,o,t);switch(t.grid[n]){case t.options.t:case t.options.b:case t.options.tl:case t.options.bl:t.grid[n]=t.options.ri;break;default:t.grid[n]=t.options.r}}if(s.classList.contains("ascii-border")&&!["ascii-border-l","ascii-border-r","ascii-border-t","ascii-border-b"].some(o=>s.classList.contains(o))||s.classList.contains("ascii-border-t"))for(let o=e+t.fontWidth;o<i;o+=t.fontWidth){const n=l(o,c,t);switch(t.grid[n]){case t.options.l:case t.options.r:case t.options.bl:case t.options.br:t.grid[n]=t.options.ti;break;default:t.grid[n]=t.options.t}}if(s.classList.contains("ascii-border")&&!["ascii-border-l","ascii-border-r","ascii-border-t","ascii-border-b"].some(o=>s.classList.contains(o))||s.classList.contains("ascii-border-b"))for(let o=e+t.fontWidth;o<i;o+=t.fontWidth){const n=l(o,a,t);switch(t.grid[n]){case t.options.l:case t.options.r:case t.options.tl:case t.options.tr:t.grid[n]=t.options.bi;break;default:t.grid[n]=t.options.b}}if(["ascii-border","ascii-border-tl"].some(o=>s.classList.contains(o))||["ascii-border-l","ascii-border-t"].every(o=>s.classList.contains(o))){const o=l(e,c,t);switch(t.grid[o]){case t.options.t:case t.options.b:case t.options.tr:t.grid[o]=t.options.bi;break;case t.options.l:case t.options.r:case t.options.bl:t.grid[o]=t.options.ri;break;case t.options.br:t.grid[o]=t.options.i;break;default:t.grid[o]=t.options.tl}}if(["ascii-border","ascii-border-tr"].some(o=>s.classList.contains(o))||["ascii-border-r","ascii-border-t"].every(o=>s.classList.contains(o))){const o=l(i,c,t);switch(t.grid[o]){case t.options.t:case t.options.b:case t.options.tl:t.grid[o]=t.options.bi;break;case t.options.l:case t.options.r:case t.options.br:t.grid[o]=t.options.li;break;case t.options.bl:t.grid[o]=t.options.i;break;default:t.grid[o]=t.options.tr}}if(["ascii-border","ascii-border-br"].some(o=>s.classList.contains(o))||["ascii-border-r","ascii-border-b"].every(o=>s.classList.contains(o))){const o=l(i,a,t);if(s.type==="textarea")t.grid[o]="▼";else switch(t.grid[o]){case t.options.l:case t.options.r:case t.options.tr:t.grid[o]=t.options.li;break;case t.options.t:case t.options.b:case t.options.bl:t.grid[o]=t.options.ti;break;case t.options.tl:t.grid[o]=t.options.i;break;default:t.grid[o]=t.options.br}}if(["ascii-border","ascii-border-bl"].some(o=>s.classList.contains(o))||["ascii-border-l","ascii-border-b"].every(o=>s.classList.contains(o))){const o=l(e,a,t);switch(t.grid[o]){case t.options.l:case t.options.r:case t.options.tl:t.grid[o]=t.options.ri;break;case t.options.t:case t.options.b:case t.options.br:t.grid[o]=t.options.ti;break;case t.options.tr:t.grid[o]=t.options.i;break;default:t.grid[o]=t.options.bl}}if(s.classList.contains("ascii-fill"))for(let o=c+t.fontHeight;o<a;o+=t.fontHeight)for(let n=e+t.fontWidth;n<i;n+=t.fontWidth)t.grid[l(n,o,t)]=t.options.fill;s.classList.contains("ascii-text")&&s.characters.forEach(o=>{const n=Math.floor(o.rect.left/t.fontWidth)*t.fontWidth,h=Math.floor(o.rect.bottom/t.fontHeight)*t.fontHeight;t.grid[l(n,h,t)]=o.char})};function W(s){return s.current?Array.from(s.current.querySelectorAll('[class*="ascii"]')).map(t=>{const e=[],i=document.createTreeWalker(t,NodeFilter.SHOW_TEXT);for(;i.nextNode();){const c=i.currentNode,a=c.textContent??"";for(let o=0;o<a.length;o++){if(a[o].trim()==="")continue;const n=document.createRange();n.setStart(c,o),n.setEnd(c,o+1);const h=n.getBoundingClientRect();e.push({char:a[o],rect:h})}}return{rect:t.getBoundingClientRect(),characters:e,type:t.tagName.toLowerCase(),classList:t.classList}}):[]}const x=({children:s})=>{const t=f.useRef(null),e=m(),[i,c]=f.useState([]),a=d(e.grid,30);f.useLayoutEffect(()=>{if(!t.current)return;let o;const n=()=>{c(W(t)),o=requestAnimationFrame(n)};return n(),()=>cancelAnimationFrame(o)},[]);for(let o=0;o<e.grid.length;o++)e.grid[o]=" ";return i?.forEach(o=>{H({rect:o,grid:e})}),b.jsxs("div",{ref:t,children:[b.jsx("div",{style:{width:e.truncWidth,height:e.truncHeight},className:"absolute opacity-0 top-0 left-0 bg-none pointer-events-none",children:s}),t.current&&b.jsx("div",{style:{width:e.truncWidth,height:e.truncHeight},className:"leading-none wrap-break-word",children:a.join("")})]})};function k(){const[s,t]=f.useState({width:0,height:0});return f.useEffect(()=>{const e=()=>t({width:window.innerWidth,height:window.innerHeight});return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]),s}function C({width:s,height:t}){const i=.60009765625,c=16*i,a=s-s%c,o=t-t%16,n=s,h=t,w=Math.floor(o/16),L=Math.floor(a/c),y=Array.from({length:w*L},()=>" ");return{fontHeight:16,courierRatio:i,fontWidth:c,truncWidth:a,truncHeight:o,windowWidth:n,windowHeight:h,rows:w,cols:L,grid:y,options:p}}function v({children:s}){const{width:t,height:e}=k(),i=C({width:t,height:e});return b.jsx(u.Provider,{value:i,children:s})}r.ASCII=x,r.ASCIIProvider=v,r.useGridContext=m,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})}));
|
|
2
|
+
//# sourceMappingURL=index.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../lib/utils/defaultOptions.tsx","../lib/contexts/GridContext.tsx","../lib/hooks/useGridContext.tsx","../lib/hooks/useReveal.tsx","../lib/components/ASCII.tsx","../lib/hooks/useWindowDimensions.tsx","../lib/providers/ASCIIProvider.tsx"],"sourcesContent":["import type { GridOptions } from \"../types/GridOptions\"\r\n\r\nexport const defaultOptions: GridOptions = {\r\n\tt: \"─\",\r\n\tti: \"┴\",\r\n\tb: \"─\",\r\n\tbi: \"┬\",\r\n\tl: \"│\",\r\n\tli: \"┤\",\r\n\tr: \"│\",\r\n\tri: \"├\",\r\n\ttl: \"┌\",\r\n\ttr: \"┐\",\r\n\tbr: \"┘\",\r\n\tbl: \"└\",\r\n\ti: \"┼\",\r\n\tfill: String.fromCharCode(160),\r\n}\r\n","import { createContext } from \"react\"\r\nimport type { GridData } from \"../types/GridData\"\r\nimport { defaultOptions } from \"../utils/defaultOptions\"\r\n\r\nexport const GridContext = createContext<GridData>({\r\n\tfontHeight: 0,\r\n\tcourierRatio: 0,\r\n\tfontWidth: 0,\r\n\ttruncWidth: 0,\r\n\ttruncHeight: 0,\r\n\twindowWidth: 0,\r\n\twindowHeight: 0,\r\n\trows: 0,\r\n\tcols: 0,\r\n\tgrid: [],\r\n\toptions: defaultOptions,\r\n})\r\n","import { useContext } from \"react\"\r\nimport { GridContext } from \"../contexts/GridContext\"\r\n\r\nexport const useGridContext = () => {\r\n\treturn useContext(GridContext)\r\n}\r\n","import { useEffect, useState } from \"react\"\r\n\r\nexport function useReveal(grid: string[], speed = 1) {\r\n\tconst [index, setIndex] = useState(0)\r\n\tuseEffect(() => {\r\n\t\tlet frame: number\r\n\r\n\t\tconst loop = () => {\r\n\t\t\tsetIndex((i) => {\r\n\t\t\t\tif (i >= grid.length) return i\r\n\t\t\t\treturn i + speed\r\n\t\t\t})\r\n\r\n\t\t\tframe = requestAnimationFrame(loop)\r\n\t\t}\r\n\r\n\t\tloop()\r\n\r\n\t\treturn () => cancelAnimationFrame(frame)\r\n\t}, [grid, speed])\r\n\r\n\treturn grid.slice(0, index)\r\n}\r\n","import { useLayoutEffect, useRef, useState } from \"react\"\r\nimport type { GridData } from \"../types/GridData\"\r\nimport type { Rect } from \"../types/Rect\"\r\nimport { useGridContext } from \"../hooks/useGridContext\"\r\nimport { useReveal } from \"../hooks/useReveal\"\r\n\r\nconst getIndex = (x: number, y: number, grid: GridData) => {\r\n\tconst col = (x / grid.fontWidth) | 0\r\n\tconst row = (y / grid.fontHeight) | 0\r\n\treturn row * grid.cols + col\r\n}\r\n\r\nconst drawRect = ({ rect, grid }: { rect: Rect; grid: GridData }) => {\r\n\tconst rectLeft = Math.floor(rect.rect.left / grid.fontWidth) * grid.fontWidth\r\n\tconst rectRight = Math.floor(rect.rect.right / grid.fontWidth) * grid.fontWidth\r\n\tconst rectTop = Math.floor(rect.rect.top / grid.fontHeight) * grid.fontHeight\r\n\tconst rectBottom = Math.floor(rect.rect.bottom / grid.fontHeight) * grid.fontHeight\r\n\r\n\t//verticals\r\n\t//left\r\n\tif (\r\n\t\t(rect.classList.contains(\"ascii-border\") &&\r\n\t\t\t![\"ascii-border-l\", \"ascii-border-r\", \"ascii-border-t\", \"ascii-border-b\"].some((c) =>\r\n\t\t\t\trect.classList.contains(c),\r\n\t\t\t)) ||\r\n\t\trect.classList.contains(\"ascii-border-l\")\r\n\t) {\r\n\t\tfor (let i = rectTop + grid.fontHeight; i < rectBottom; i += grid.fontHeight) {\r\n\t\t\tconst l = getIndex(rectLeft, i, grid)\r\n\r\n\t\t\tswitch (grid.grid[l]) {\r\n\t\t\t\tcase grid.options.t:\r\n\t\t\t\tcase grid.options.b:\r\n\t\t\t\tcase grid.options.tr:\r\n\t\t\t\tcase grid.options.br:\r\n\t\t\t\t\tgrid.grid[l] = grid.options.li\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[l] = grid.options.l\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t//right\r\n\tif (\r\n\t\t(rect.classList.contains(\"ascii-border\") &&\r\n\t\t\t![\"ascii-border-l\", \"ascii-border-r\", \"ascii-border-t\", \"ascii-border-b\"].some((c) =>\r\n\t\t\t\trect.classList.contains(c),\r\n\t\t\t)) ||\r\n\t\trect.classList.contains(\"ascii-border-r\")\r\n\t) {\r\n\t\tfor (let i = rectTop + grid.fontHeight; i < rectBottom; i += grid.fontHeight) {\r\n\t\t\tconst r = getIndex(rectRight, i, grid)\r\n\r\n\t\t\tswitch (grid.grid[r]) {\r\n\t\t\t\tcase grid.options.t:\r\n\t\t\t\tcase grid.options.b:\r\n\t\t\t\tcase grid.options.tl:\r\n\t\t\t\tcase grid.options.bl:\r\n\t\t\t\t\tgrid.grid[r] = grid.options.ri\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[r] = grid.options.r\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//horizontals\r\n\t//top\r\n\tif (\r\n\t\t(rect.classList.contains(\"ascii-border\") &&\r\n\t\t\t![\"ascii-border-l\", \"ascii-border-r\", \"ascii-border-t\", \"ascii-border-b\"].some((c) =>\r\n\t\t\t\trect.classList.contains(c),\r\n\t\t\t)) ||\r\n\t\trect.classList.contains(\"ascii-border-t\")\r\n\t) {\r\n\t\tfor (let i = rectLeft + grid.fontWidth; i < rectRight; i += grid.fontWidth) {\r\n\t\t\tconst t = getIndex(i, rectTop, grid)\r\n\r\n\t\t\tswitch (grid.grid[t]) {\r\n\t\t\t\tcase grid.options.l:\r\n\t\t\t\tcase grid.options.r:\r\n\t\t\t\tcase grid.options.bl:\r\n\t\t\t\tcase grid.options.br:\r\n\t\t\t\t\tgrid.grid[t] = grid.options.ti\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[t] = grid.options.t\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t//bottom\r\n\tif (\r\n\t\t(rect.classList.contains(\"ascii-border\") &&\r\n\t\t\t![\"ascii-border-l\", \"ascii-border-r\", \"ascii-border-t\", \"ascii-border-b\"].some((c) =>\r\n\t\t\t\trect.classList.contains(c),\r\n\t\t\t)) ||\r\n\t\trect.classList.contains(\"ascii-border-b\")\r\n\t) {\r\n\t\tfor (let i = rectLeft + grid.fontWidth; i < rectRight; i += grid.fontWidth) {\r\n\t\t\tconst b = getIndex(i, rectBottom, grid)\r\n\t\t\tswitch (grid.grid[b]) {\r\n\t\t\t\tcase grid.options.l:\r\n\t\t\t\tcase grid.options.r:\r\n\t\t\t\tcase grid.options.tl:\r\n\t\t\t\tcase grid.options.tr:\r\n\t\t\t\t\tgrid.grid[b] = grid.options.bi\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[b] = grid.options.b\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//corners\r\n\t//tl\r\n\tif (\r\n\t\t[\"ascii-border\", \"ascii-border-tl\"].some((c) => rect.classList.contains(c)) ||\r\n\t\t[\"ascii-border-l\", \"ascii-border-t\"].every((c) => rect.classList.contains(c))\r\n\t) {\r\n\t\tconst tl = getIndex(rectLeft, rectTop, grid)\r\n\t\tswitch (grid.grid[tl]) {\r\n\t\t\tcase grid.options.t:\r\n\t\t\tcase grid.options.b:\r\n\t\t\tcase grid.options.tr:\r\n\t\t\t\tgrid.grid[tl] = grid.options.bi\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.l:\r\n\t\t\tcase grid.options.r:\r\n\t\t\tcase grid.options.bl:\r\n\t\t\t\tgrid.grid[tl] = grid.options.ri\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.br:\r\n\t\t\t\tgrid.grid[tl] = grid.options.i\r\n\t\t\t\tbreak\r\n\t\t\tdefault:\r\n\t\t\t\tgrid.grid[tl] = grid.options.tl\r\n\t\t}\r\n\t}\r\n\t//tr\r\n\tif (\r\n\t\t[\"ascii-border\", \"ascii-border-tr\"].some((c) => rect.classList.contains(c)) ||\r\n\t\t[\"ascii-border-r\", \"ascii-border-t\"].every((c) => rect.classList.contains(c))\r\n\t) {\r\n\t\tconst tr = getIndex(rectRight, rectTop, grid)\r\n\t\tswitch (grid.grid[tr]) {\r\n\t\t\tcase grid.options.t:\r\n\t\t\tcase grid.options.b:\r\n\t\t\tcase grid.options.tl:\r\n\t\t\t\tgrid.grid[tr] = grid.options.bi\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.l:\r\n\t\t\tcase grid.options.r:\r\n\t\t\tcase grid.options.br:\r\n\t\t\t\tgrid.grid[tr] = grid.options.li\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.bl:\r\n\t\t\t\tgrid.grid[tr] = grid.options.i\r\n\t\t\t\tbreak\r\n\t\t\tdefault:\r\n\t\t\t\tgrid.grid[tr] = grid.options.tr\r\n\t\t}\r\n\t}\r\n\t//br\r\n\tif (\r\n\t\t[\"ascii-border\", \"ascii-border-br\"].some((c) => rect.classList.contains(c)) ||\r\n\t\t[\"ascii-border-r\", \"ascii-border-b\"].every((c) => rect.classList.contains(c))\r\n\t) {\r\n\t\tconst br = getIndex(rectRight, rectBottom, grid)\r\n\t\tif (rect.type === \"textarea\") {\r\n\t\t\tgrid.grid[br] = \"▼\"\r\n\t\t} else {\r\n\t\t\tswitch (grid.grid[br]) {\r\n\t\t\t\tcase grid.options.l:\r\n\t\t\t\tcase grid.options.r:\r\n\t\t\t\tcase grid.options.tr:\r\n\t\t\t\t\tgrid.grid[br] = grid.options.li\r\n\t\t\t\t\tbreak\r\n\t\t\t\tcase grid.options.t:\r\n\t\t\t\tcase grid.options.b:\r\n\t\t\t\tcase grid.options.bl:\r\n\t\t\t\t\tgrid.grid[br] = grid.options.ti\r\n\t\t\t\t\tbreak\r\n\t\t\t\tcase grid.options.tl:\r\n\t\t\t\t\tgrid.grid[br] = grid.options.i\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[br] = grid.options.br\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//bl\r\n\tif (\r\n\t\t[\"ascii-border\", \"ascii-border-bl\"].some((c) => rect.classList.contains(c)) ||\r\n\t\t[\"ascii-border-l\", \"ascii-border-b\"].every((c) => rect.classList.contains(c))\r\n\t) {\r\n\t\tconst bl = getIndex(rectLeft, rectBottom, grid)\r\n\t\tswitch (grid.grid[bl]) {\r\n\t\t\tcase grid.options.l:\r\n\t\t\tcase grid.options.r:\r\n\t\t\tcase grid.options.tl:\r\n\t\t\t\tgrid.grid[bl] = grid.options.ri\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.t:\r\n\t\t\tcase grid.options.b:\r\n\t\t\tcase grid.options.br:\r\n\t\t\t\tgrid.grid[bl] = grid.options.ti\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.tr:\r\n\t\t\t\tgrid.grid[bl] = grid.options.i\r\n\t\t\t\tbreak\r\n\t\t\tdefault:\r\n\t\t\t\tgrid.grid[bl] = grid.options.bl\r\n\t\t}\r\n\t}\r\n\r\n\t//fill\r\n\tif (rect.classList.contains(\"ascii-fill\")) {\r\n\t\tfor (let y = rectTop + grid.fontHeight; y < rectBottom; y += grid.fontHeight) {\r\n\t\t\tfor (let x = rectLeft + grid.fontWidth; x < rectRight; x += grid.fontWidth) {\r\n\t\t\t\tgrid.grid[getIndex(x, y, grid)] = grid.options.fill\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//characters\r\n\tif (rect.classList.contains(\"ascii-text\")) {\r\n\t\trect.characters.forEach((c) => {\r\n\t\t\tconst cRectLeft = Math.floor(c.rect.left / grid.fontWidth) * grid.fontWidth\r\n\t\t\tconst cRectBottom = Math.floor(c.rect.bottom / grid.fontHeight) * grid.fontHeight\r\n\t\t\tgrid.grid[getIndex(cRectLeft, cRectBottom, grid)] = c.char\r\n\t\t})\r\n\t}\r\n}\r\n\r\nfunction getElements(ref: React.RefObject<HTMLDivElement | null>): Rect[] {\r\n\tif (!ref.current) return []\r\n\treturn Array.from(ref.current.querySelectorAll<HTMLElement>('[class*=\"ascii\"]')).map((el) => {\r\n\t\t//console.log(\"element\", el)\r\n\t\tconst c: { char: string; rect: DOMRect }[] = []\r\n\t\tconst textWalker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT)\r\n\r\n\t\twhile (textWalker.nextNode()) {\r\n\t\t\tconst textNode = textWalker.currentNode as Text\r\n\t\t\tconst text = textNode.textContent ?? \"\"\r\n\r\n\t\t\tfor (let i = 0; i < text.length; i++) {\r\n\t\t\t\tif (text[i].trim() === \"\") continue\r\n\t\t\t\t//console.log(text[i])\r\n\t\t\t\tconst range = document.createRange()\r\n\t\t\t\trange.setStart(textNode, i)\r\n\t\t\t\trange.setEnd(textNode, i + 1)\r\n\r\n\t\t\t\tconst rect = range.getBoundingClientRect()\r\n\t\t\t\t//if (rect.width === 0 || rect.height === 0) continue\r\n\r\n\t\t\t\tc.push({ char: text[i], rect })\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn {\r\n\t\t\trect: el.getBoundingClientRect(),\r\n\t\t\tcharacters: c,\r\n\t\t\ttype: el.tagName.toLowerCase(),\r\n\t\t\tclassList: el.classList,\r\n\t\t}\r\n\t})\r\n}\r\n\r\nexport const ASCII = ({ children }: { children: React.ReactNode }) => {\r\n\tconst parentRef = useRef<HTMLDivElement | null>(null)\r\n\tconst grid = useGridContext()\r\n\tconst [rects, setRects] = useState<Rect[] | null>([])\r\n\tconst reveal = useReveal(grid.grid, 30)\r\n\r\n\tuseLayoutEffect(() => {\r\n\t\tif (!parentRef.current) return\r\n\r\n\t\tlet frame: number\r\n\r\n\t\tconst loop = () => {\r\n\t\t\tsetRects(getElements(parentRef))\r\n\t\t\tframe = requestAnimationFrame(loop)\r\n\t\t}\r\n\r\n\t\tloop()\r\n\r\n\t\treturn () => cancelAnimationFrame(frame)\r\n\t}, [])\r\n\r\n\t// clear canvas\r\n\t// maybe find better way\r\n\tfor (let i = 0; i < grid.grid.length; i++) {\r\n\t\tgrid.grid[i] = String.fromCharCode(160)\r\n\t}\r\n\r\n\trects?.forEach((rect) => {\r\n\t\tdrawRect({ rect, grid })\r\n\t})\r\n\r\n\treturn (\r\n\t\t<div ref={parentRef}>\r\n\t\t\t<div\r\n\t\t\t\tstyle={{ width: grid.truncWidth, height: grid.truncHeight }}\r\n\t\t\t\tclassName=\"absolute opacity-0 top-0 left-0 bg-none pointer-events-none\"\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t</div>\r\n\t\t\t{parentRef.current && (\r\n\t\t\t\t<div style={{ width: grid.truncWidth, height: grid.truncHeight }} className=\"leading-none wrap-break-word\">\r\n\t\t\t\t\t{reveal.join(\"\")}\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t</div>\r\n\t)\r\n}\r\n","import { useEffect, useState } from \"react\"\r\n\r\nexport function useWindowDimensions() {\r\n\tconst [dimensions, setDimensions] = useState({\r\n\t\twidth: 0,\r\n\t\theight: 0,\r\n\t})\r\n\tuseEffect(() => {\r\n\t\tconst update = () => setDimensions({ width: window.innerWidth, height: window.innerHeight })\r\n\r\n\t\tupdate() // Set initial size\r\n\t\twindow.addEventListener(\"resize\", update)\r\n\t\treturn () => window.removeEventListener(\"resize\", update)\r\n\t}, [])\r\n\r\n\treturn dimensions\r\n}\r\n","import { GridContext } from \"../contexts/GridContext\"\r\nimport { useWindowDimensions } from \"../hooks/useWindowDimensions\"\r\nimport type { GridData } from \"../types/GridData\"\r\nimport { defaultOptions } from \"../utils/defaultOptions\"\r\n\r\nfunction initGrid({ width, height }: { width: number; height: number }): GridData {\r\n\tconst fontHeight = 16\r\n\tconst courierRatio = 1229 / 2048\r\n\tconst fontWidth = fontHeight * courierRatio\r\n\tconst truncWidth = width - (width % fontWidth)\r\n\tconst truncHeight = height - (height % fontHeight)\r\n\tconst windowWidth = width\r\n\tconst windowHeight = height\r\n\tconst rows = Math.floor(truncHeight / fontHeight)\r\n\tconst cols = Math.floor(truncWidth / fontWidth)\r\n\tconst grid = Array.from({ length: rows * cols }, () => String.fromCharCode(160))\r\n\tconst options = defaultOptions\r\n\treturn {\r\n\t\tfontHeight,\r\n\t\tcourierRatio,\r\n\t\tfontWidth,\r\n\t\ttruncWidth,\r\n\t\ttruncHeight,\r\n\t\twindowWidth,\r\n\t\twindowHeight,\r\n\t\trows,\r\n\t\tcols,\r\n\t\tgrid,\r\n\t\toptions,\r\n\t}\r\n}\r\n\r\nexport function ASCIIProvider({ children }: { children: React.ReactNode }) {\r\n\tconst { width, height } = useWindowDimensions()\r\n\tconst grid = initGrid({ width, height })\r\n\treturn <GridContext.Provider value={grid}>{children}</GridContext.Provider>\r\n}\r\n"],"names":["defaultOptions","GridContext","createContext","useGridContext","useContext","useReveal","grid","speed","index","setIndex","useState","useEffect","frame","loop","i","getIndex","x","y","col","drawRect","rect","rectLeft","rectRight","rectTop","rectBottom","c","l","r","t","b","tl","tr","br","bl","cRectLeft","cRectBottom","getElements","ref","el","textWalker","textNode","text","range","ASCII","children","parentRef","useRef","rects","setRects","reveal","useLayoutEffect","jsxs","jsx","useWindowDimensions","dimensions","setDimensions","update","initGrid","width","height","courierRatio","fontWidth","truncWidth","truncHeight","windowWidth","windowHeight","rows","cols","ASCIIProvider"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ASCIIProvider.d.ts","sourceRoot":"","sources":["../../lib/providers/ASCIIProvider.tsx"],"names":[],"mappings":"AAgCA,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAIxE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultOptions.d.ts","sourceRoot":"","sources":["../../lib/utils/defaultOptions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEvD,eAAO,MAAM,cAAc,EAAE,WAe5B,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "html-to-ascii",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.3",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.es.js",
|
|
11
|
+
"require": "./dist/index.umd.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
8
15
|
"files": [
|
|
9
16
|
"dist"
|
|
10
17
|
],
|
package/dist/types/GridData.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { GridOptions } from './GridOptions';
|
|
2
|
-
export interface GridData {
|
|
3
|
-
fontHeight: number | 0;
|
|
4
|
-
courierRatio: number;
|
|
5
|
-
fontWidth: number;
|
|
6
|
-
truncWidth: number;
|
|
7
|
-
truncHeight: number;
|
|
8
|
-
windowWidth: number;
|
|
9
|
-
windowHeight: number;
|
|
10
|
-
rows: number;
|
|
11
|
-
cols: number;
|
|
12
|
-
grid: string[];
|
|
13
|
-
options: Required<GridOptions>;
|
|
14
|
-
}
|