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.
@@ -1,3 +1,4 @@
1
1
  export declare const ASCII: ({ children }: {
2
2
  children: React.ReactNode;
3
3
  }) => import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=ASCII.d.ts.map
@@ -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"}
@@ -1,2 +1,3 @@
1
1
  import { GridData } from '../types/GridData';
2
2
  export declare const GridContext: import('react').Context<GridData>;
3
+ //# sourceMappingURL=GridContext.d.ts.map
@@ -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"}
@@ -1 +1,2 @@
1
1
  export declare const useGridContext: () => import('../types/GridData').GridData;
2
+ //# sourceMappingURL=useGridContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGridContext.d.ts","sourceRoot":"","sources":["../../lib/hooks/useGridContext.tsx"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,4CAE1B,CAAA"}
@@ -1 +1,2 @@
1
1
  export declare function useReveal(grid: string[], speed?: number): string[];
2
+ //# sourceMappingURL=useReveal.d.ts.map
@@ -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"}
@@ -2,3 +2,4 @@ export declare function useWindowDimensions(): {
2
2
  width: number;
3
3
  height: number;
4
4
  };
5
+ //# sourceMappingURL=useWindowDimensions.d.ts.map
@@ -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.tsx';
2
- export { useGridContext } from './hooks/useGridContext.tsx';
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 p, jsx as b } from "react/jsx-runtime";
2
- import { createContext as h, useContext as u, useState as f, useEffect as m, useRef as L, useLayoutEffect as w } from "react";
3
- const W = {
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
- }, k = h({
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: W
30
- }), H = () => u(k);
31
- function x(s, t = 1) {
32
- const [n, a] = f(0);
33
- return m(() => {
34
- let i;
35
- const c = () => {
36
- a((o) => o >= s.length ? o : o + t), i = requestAnimationFrame(c);
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 c(), () => cancelAnimationFrame(i);
38
+ return a(), () => cancelAnimationFrame(c);
39
39
  }, [s, t]), s.slice(0, n);
40
40
  }
41
41
  const r = (s, t, n) => {
42
- const a = s / n.fontWidth | 0;
43
- return (t / n.fontHeight | 0) * n.cols + a;
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, a = Math.floor(s.rect.right / t.fontWidth) * t.fontWidth, i = Math.floor(s.rect.top / t.fontHeight) * t.fontHeight, c = Math.floor(s.rect.bottom / t.fontHeight) * t.fontHeight;
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 = i + t.fontHeight; o < c; o += t.fontHeight) {
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 = i + t.fontHeight; o < c; o += t.fontHeight) {
66
- const e = r(a, o, t);
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 < a; o += t.fontWidth) {
82
- const e = r(o, i, t);
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 < a; o += t.fontWidth) {
98
- const e = r(o, c, t);
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, i, t);
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(a, i, t);
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(a, c, t);
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, c, t);
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 = i + t.fontHeight; o < c; o += t.fontHeight)
195
- for (let e = n + t.fontWidth; e < a; e += t.fontWidth)
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 C(s) {
202
+ function R(s) {
203
203
  return s.current ? Array.from(s.current.querySelectorAll('[class*="ascii"]')).map((t) => {
204
- const n = [], a = document.createTreeWalker(t, NodeFilter.SHOW_TEXT);
205
- for (; a.nextNode(); ) {
206
- const i = a.currentNode, c = i.textContent ?? "";
207
- for (let o = 0; o < c.length; o++) {
208
- if (c[o].trim() === "") continue;
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(i, o), e.setEnd(i, o + 1);
210
+ e.setStart(c, o), e.setEnd(c, o + 1);
211
211
  const l = e.getBoundingClientRect();
212
- n.push({ char: c[o], rect: l });
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 A = ({ children: s }) => {
224
- const t = L(null), n = H(), [a, i] = f([]), c = x(n.grid, 30);
225
- w(() => {
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
- i(C(t)), o = requestAnimationFrame(e);
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 a?.forEach((o) => {
235
+ return i?.forEach((o) => {
236
236
  y({ rect: o, grid: n });
237
- }), /* @__PURE__ */ p("div", { ref: t, children: [
238
- /* @__PURE__ */ b(
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__ */ b("div", { style: { width: n.truncWidth, height: n.truncHeight }, className: "leading-none wrap-break-word", children: c.join("") })
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
- A as ASCII,
251
- H as useGridContext
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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"}
@@ -1,3 +1,4 @@
1
1
  export declare function ASCIIProvider({ children }: {
2
2
  children: React.ReactNode;
3
3
  }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=ASCIIProvider.d.ts.map
@@ -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"}
@@ -1,2 +1,3 @@
1
1
  import { GridOptions } from '../types/GridOptions';
2
2
  export declare const defaultOptions: GridOptions;
3
+ //# sourceMappingURL=defaultOptions.d.ts.map
@@ -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.1",
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
  ],
@@ -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
- }
@@ -1,16 +0,0 @@
1
- export interface GridOptions {
2
- t: string;
3
- ti: string;
4
- b: string;
5
- bi: string;
6
- l: string;
7
- li: string;
8
- r: string;
9
- ri: string;
10
- tl: string;
11
- tr: string;
12
- br: string;
13
- bl: string;
14
- i: string;
15
- fill: string;
16
- }
@@ -1,9 +0,0 @@
1
- export interface Rect {
2
- rect: DOMRect;
3
- characters: {
4
- char: string;
5
- rect: DOMRect;
6
- }[];
7
- type: string;
8
- classList: DOMTokenList;
9
- }