html-to-ascii 0.2.3 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +250 -73
- package/dist/components/ASCII.d.ts +3 -1
- package/dist/components/ASCII.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +144 -131
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +2 -1
- package/dist/index.umd.js.map +1 -1
- package/dist/providers/ASCIIProvider.d.ts +2 -3
- package/dist/providers/ASCIIProvider.d.ts.map +1 -1
- package/dist/types/ASCIIProviderProps.d.ts +3 -0
- package/dist/types/ASCIIProviderProps.d.ts.map +1 -0
- package/dist/types/GridData.d.ts +15 -0
- package/dist/types/GridData.d.ts.map +1 -0
- package/dist/types/GridOptions.d.ts +17 -0
- package/dist/types/GridOptions.d.ts.map +1 -0
- package/dist/types/Rect.d.ts +10 -0
- package/dist/types/Rect.d.ts.map +1 -0
- package/package.json +5 -4
package/README.md
CHANGED
|
@@ -1,73 +1,250 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
1
|
+
```
|
|
2
|
+
__ __ __ __ _ _
|
|
3
|
+
/ /_ / /_____ ___ / / / /_____ ____ ___________(_|_)
|
|
4
|
+
/ __ \/ __/ __ `__ \/ /_____/ __/ __ \______/ __ `/ ___/ ___/ / /
|
|
5
|
+
/ / / / /_/ / / / / / /_____/ /_/ /_/ /_____/ /_/ (__ ) /__/ / /
|
|
6
|
+
/_/ /_/\__/_/ /_/ /_/_/ \__/\____/ \__,_/____/\___/_/_/
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
[![NPM Version][npm-image]][npm-url]
|
|
11
|
+
[![Downloads Stats][npm-downloads]][npm-url]
|
|
12
|
+
|
|
13
|
+
html-to-ascii is a React component that dynamically converts an HTML page into pure, selectable, ASCII text. None of that fake Canvas trickery here!
|
|
14
|
+
|
|
15
|
+
[[Changelog](https://github.com/zachariahwatson/html-to-ascii/blob/main/CHANGELOG.md)]
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
npm install html-to-ascii
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Add `<ASCIIProvider>` to the root of your project:
|
|
24
|
+
|
|
25
|
+
```jsx
|
|
26
|
+
import { StrictMode } from "react"
|
|
27
|
+
import { createRoot } from "react-dom/client"
|
|
28
|
+
import App from "./App.tsx"
|
|
29
|
+
import { ASCIIProvider } from "html-to-ascii"
|
|
30
|
+
|
|
31
|
+
createRoot(document.getElementById("root")!).render(
|
|
32
|
+
<StrictMode>
|
|
33
|
+
<ASCIIProvider>
|
|
34
|
+
<App />
|
|
35
|
+
</ASCIIProvider>
|
|
36
|
+
</StrictMode>,
|
|
37
|
+
)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Usage
|
|
41
|
+
|
|
42
|
+
### Quick Start
|
|
43
|
+
|
|
44
|
+
Wrap your page with `<ASCII>` and add the `ascii` class to any element you want to render:
|
|
45
|
+
|
|
46
|
+
```jsx
|
|
47
|
+
import { ASCII } from "html-to-ascii"
|
|
48
|
+
|
|
49
|
+
function App() {
|
|
50
|
+
return (
|
|
51
|
+
<ASCII>
|
|
52
|
+
<div className="flex justify-center"> <!---I'm not ASCII :(-->
|
|
53
|
+
<div className="text-center w-64 h-24 ascii">Look at me! I'm ASCII!</div>
|
|
54
|
+
</div>
|
|
55
|
+
</ASCII>
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export default App
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Output
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
┌─────────────────────────┐
|
|
66
|
+
│ Look at me! I'm ASCII! │
|
|
67
|
+
│ │
|
|
68
|
+
│ │
|
|
69
|
+
│ │
|
|
70
|
+
│ │
|
|
71
|
+
└─────────────────────────┘
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Customization
|
|
75
|
+
|
|
76
|
+
html-to-ascii supports three interchangeable methods for customizing the look of your boxes:
|
|
77
|
+
|
|
78
|
+
#### 1. Adding props to `<ASCIIProvider>`:
|
|
79
|
+
|
|
80
|
+
This method changes the global style for every element unless locally overridden.
|
|
81
|
+
_(A full list of options can be seen [here](#api))_
|
|
82
|
+
|
|
83
|
+
```html
|
|
84
|
+
<!--set the left and right borders to ":"-->
|
|
85
|
+
<ASCIIProvider l=":" r=":"></ASCIIProvider>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Output
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
┌─────────────────────────┐
|
|
92
|
+
: Look at me! I'm ASCII! :
|
|
93
|
+
: :
|
|
94
|
+
: :
|
|
95
|
+
: :
|
|
96
|
+
: :
|
|
97
|
+
└─────────────────────────┘
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
#### 2. Using class names on elements inside of `<ASCII>` to enable certain ASCII features:
|
|
101
|
+
|
|
102
|
+
_(A full list of class names can be seen [here](#api))_
|
|
103
|
+
|
|
104
|
+
```jsx
|
|
105
|
+
<ASCII>
|
|
106
|
+
<div className="flex justify-center">
|
|
107
|
+
<!--enable only the border-->
|
|
108
|
+
<div className="text-center w-64 h-24 ascii-border">
|
|
109
|
+
Hey! Where'd the text go?
|
|
110
|
+
<!--enable only text and the top right and bottom left corners-->
|
|
111
|
+
<div className="ascii-text ascii-border-tr ascii-border-bl w-full h-12">Right here!</div>
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
</ASCII>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Output
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
┌─────────────────────────┐
|
|
121
|
+
│ ┐│
|
|
122
|
+
│ │
|
|
123
|
+
│ Right here! │
|
|
124
|
+
│└ │
|
|
125
|
+
│ │
|
|
126
|
+
└─────────────────────────┘
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
#### 3. Using class names on elements inside of `<ASCII>` to override global styles:
|
|
130
|
+
|
|
131
|
+
This method allows you to add local styling to a single element without changing the styles of other elements. _(A full list of override class names can be seen [here](#api))_
|
|
132
|
+
|
|
133
|
+
```jsx
|
|
134
|
+
<ASCII>
|
|
135
|
+
<div className="flex justify-center">
|
|
136
|
+
<div className="text-center w-96 h-32 p-4 ascii">
|
|
137
|
+
I look so cool! B)
|
|
138
|
+
<br />
|
|
139
|
+
<br />
|
|
140
|
+
<!--override border styles-->
|
|
141
|
+
<div className="ascii ascii-l-║ ascii-r-║ ascii-t-═ ascii-b-═ ascii-tl-╔ ascii-tr-╗ ascii-br-╝ ascii-bl-╚ w-full h-12">
|
|
142
|
+
{"I look even *cooler* >B)"}
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
</ASCII>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Output
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
┌───────────────────────────────────────┐
|
|
153
|
+
│ │
|
|
154
|
+
│ I look so cool! B) │
|
|
155
|
+
│ ╔═══════════════════════════════════╗ │
|
|
156
|
+
│ ║ I look even *cooler* >B) ║ │
|
|
157
|
+
│ ║ ║ │
|
|
158
|
+
│ ╚═══════════════════════════════════╝ │
|
|
159
|
+
│ │
|
|
160
|
+
└───────────────────────────────────────┘
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Preserving Strings and ASCII Art
|
|
164
|
+
|
|
165
|
+
ASCII art can contain some weird character combinations, and sometimes that messes with the renderer (especially "\\" and "(" ). We don't want to escape any characters upon render because it would mess with the grid array length and such, so we can "sterilize" certain texts by using `String.raw` and `white-space: pre`:
|
|
166
|
+
|
|
167
|
+
```jsx
|
|
168
|
+
<ASCII>
|
|
169
|
+
<div className="flex justify-center">
|
|
170
|
+
<div className="w-[1000px] h-72 border text-center ascii whitespace-pre">
|
|
171
|
+
{String.raw`
|
|
172
|
+
_____ _ ______ _ ______ ______ _____ _____
|
|
173
|
+
|_ _| / // ____ `. / \ .' ____ \ .' ___ ||_ _||_ _|
|
|
174
|
+
| | / / `' __) | / _ \ | (___ \_|/ .' \_| | | | |
|
|
175
|
+
| | < < _ |__ '. / ___ \ _.____`. | | | | | |
|
|
176
|
+
_| |_ \ \| \____) | _/ / \ \_| \____) |\ `.___.'\ _| |_ _| |_
|
|
177
|
+
|_____| \_\\______.' |____| |____|\______.' `.____ .'|_____||_____|
|
|
178
|
+
|
|
179
|
+
`}
|
|
180
|
+
</div>
|
|
181
|
+
</ASCII>
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### API
|
|
185
|
+
|
|
186
|
+
#### `<ASCIIProvider>` Props:
|
|
187
|
+
|
|
188
|
+
| Prop | Type | Default | Description |
|
|
189
|
+
| ------ | --------- | ------- | --------------------- |
|
|
190
|
+
| `t` | `string?` | `'─'` | Top border |
|
|
191
|
+
| `ti` | `string?` | `'┴'` | Top intersection |
|
|
192
|
+
| `b` | `string?` | `'─'` | Bottom border |
|
|
193
|
+
| `bi` | `string?` | `'┬'` | Bottom intersection |
|
|
194
|
+
| `l` | `string?` | `'│'` | Left border |
|
|
195
|
+
| `li` | `string?` | `'┤'` | Left intersection |
|
|
196
|
+
| `r` | `string?` | `'│'` | Right border |
|
|
197
|
+
| `ri` | `string?` | `'├'` | Right intersection |
|
|
198
|
+
| `tl` | `string?` | `'┌'` | Top-left corner |
|
|
199
|
+
| `tr` | `string?` | `'┐'` | Top-right corner |
|
|
200
|
+
| `br` | `string?` | `'┘'` | Bottom-right corner |
|
|
201
|
+
| `bl` | `string?` | `'└'` | Bottom-left corner |
|
|
202
|
+
| `i` | `string?` | `'┼'` | Four-way intersection |
|
|
203
|
+
| `fill` | `string?` | `' '` | Element fill |
|
|
204
|
+
|
|
205
|
+
#### `<ASCII>` Class names:
|
|
206
|
+
|
|
207
|
+
| Class name | Description |
|
|
208
|
+
| ----------------- | ------------------------------------------- |
|
|
209
|
+
| `ascii` | Enable all |
|
|
210
|
+
| `ascii-border` | Enable all borders |
|
|
211
|
+
| `ascii-border-l` | Enable left border |
|
|
212
|
+
| `ascii-border-r` | Enable right border |
|
|
213
|
+
| `ascii-border-t` | Enable top border |
|
|
214
|
+
| `ascii-border-b` | Enable bottom border |
|
|
215
|
+
| `ascii-border-tl` | Enable top-left corner |
|
|
216
|
+
| `ascii-border-tr` | Enable top-right corner |
|
|
217
|
+
| `ascii-border-br` | Enable bottom-right corner |
|
|
218
|
+
| `ascii-border-bl` | Enable bottom-left corner |
|
|
219
|
+
| `ascii-text` | Enable text |
|
|
220
|
+
| `ascii-no-fill` | Disable element's fill (will be "see-thru") |
|
|
221
|
+
|
|
222
|
+
#### `<ASCII>` Override class names:
|
|
223
|
+
|
|
224
|
+
Replace '#' with your desired character
|
|
225
|
+
|
|
226
|
+
| Class name | Description |
|
|
227
|
+
| -------------- | --------------------- |
|
|
228
|
+
| `ascii-t-#` | Top border |
|
|
229
|
+
| `ascii-ti-#` | Top intersection |
|
|
230
|
+
| `ascii-b-#` | Bottom border |
|
|
231
|
+
| `ascii-bi-#` | Bottom intersection |
|
|
232
|
+
| `ascii-l-#` | Left border |
|
|
233
|
+
| `ascii-li-#` | Left intersection |
|
|
234
|
+
| `ascii-r-#` | Right border |
|
|
235
|
+
| `ascii-ri-#` | Right intersection |
|
|
236
|
+
| `ascii-tl-#` | Top-left corner |
|
|
237
|
+
| `ascii-tr-#` | Top-right corner |
|
|
238
|
+
| `ascii-br-#` | Bottom-right corner |
|
|
239
|
+
| `ascii-bl-#` | Bottom-left corner |
|
|
240
|
+
| `ascii-i-#` | Four-way intersection |
|
|
241
|
+
| `ascii-fill-#` | Element fill |
|
|
242
|
+
|
|
243
|
+
<!-- Markdown link & img dfn's -->
|
|
244
|
+
|
|
245
|
+
[npm-image]: https://img.shields.io/npm/v/datadog-metrics.svg?style=flat-square
|
|
246
|
+
[npm-url]: https://www.npmjs.com/package/html-to-ascii
|
|
247
|
+
[npm-downloads]: https://img.shields.io/npm/dm/datadog-metrics.svg?style=flat-square
|
|
248
|
+
[travis-image]: https://img.shields.io/travis/dbader/node-datadog-metrics/master.svg?style=flat-square
|
|
249
|
+
[travis-url]: https://travis-ci.org/dbader/node-datadog-metrics
|
|
250
|
+
[wiki]: https://github.com/yourname/yourproject/wiki
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export declare const ASCII: ({ children }: {
|
|
1
|
+
export declare const ASCII: ({ children, gridReveal, revealSpeed, }: {
|
|
2
2
|
children: React.ReactNode;
|
|
3
|
+
gridReveal?: boolean;
|
|
4
|
+
revealSpeed?: number;
|
|
3
5
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
4
6
|
//# sourceMappingURL=ASCII.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ASCII.d.ts","sourceRoot":"","sources":["../../lib/components/ASCII.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ASCII.d.ts","sourceRoot":"","sources":["../../lib/components/ASCII.tsx"],"names":[],"mappings":"AAkSA,eAAO,MAAM,KAAK,GAAI,wCAInB;IACF,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;CACpB,4CA+DA,CAAA"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +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
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AAEpB,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA"}
|
package/dist/index.es.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode('@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--spacing:.25rem;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.top-0{top:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.m-2{margin:calc(var(--spacing)*2)}.m-4{margin:calc(var(--spacing)*4)}.mt-4{margin-top:calc(var(--spacing)*4)}.flex{display:flex}.grid{display:grid}.h-8{height:calc(var(--spacing)*8)}.h-12{height:calc(var(--spacing)*12)}.h-24{height:calc(var(--spacing)*24)}.h-32{height:calc(var(--spacing)*32)}.h-64{height:calc(var(--spacing)*64)}.h-72{height:calc(var(--spacing)*72)}.w-64{width:calc(var(--spacing)*64)}.w-96{width:calc(var(--spacing)*96)}.w-\\[500px\\]{width:500px}.w-\\[1000px\\]{width:1000px}.w-full{width:100%}.resize{resize:both}.justify-center{justify-content:center}.border{border-style:var(--tw-border-style);border-width:1px}.bg-none{background-image:none}.p-4{padding:calc(var(--spacing)*4)}.p-10{padding:calc(var(--spacing)*10)}.text-center{text-align:center}.leading-none{--tw-leading:1;line-height:1}.wrap-break-word{overflow-wrap:break-word}.whitespace-pre{white-space:pre}.opacity-0{opacity:0}.opacity-100{opacity:1}}:root{height:100vh;margin:calc(var(--spacing)*0);font-family:Courier New,Courier,monospace}body,#root{height:100vh}a,button,input,textarea,select,area,label,details,summary{pointer-events:auto}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}')),document.head.appendChild(e)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
|
|
2
|
+
import { jsxs as $, jsx as R } from "react/jsx-runtime";
|
|
3
|
+
import { createContext as X, useContext as J, useState as E, useEffect as M, useRef as S, useReducer as K, useLayoutEffect as Q, useMemo as U } from "react";
|
|
4
|
+
const B = {
|
|
4
5
|
t: "─",
|
|
5
6
|
ti: "┴",
|
|
6
7
|
b: "─",
|
|
@@ -15,7 +16,7 @@ const m = {
|
|
|
15
16
|
bl: "└",
|
|
16
17
|
i: "┼",
|
|
17
18
|
fill: " "
|
|
18
|
-
},
|
|
19
|
+
}, I = X({
|
|
19
20
|
fontHeight: 0,
|
|
20
21
|
courierRatio: 0,
|
|
21
22
|
fontWidth: 0,
|
|
@@ -26,129 +27,128 @@ const m = {
|
|
|
26
27
|
rows: 0,
|
|
27
28
|
cols: 0,
|
|
28
29
|
grid: [],
|
|
29
|
-
options:
|
|
30
|
-
}),
|
|
31
|
-
function
|
|
32
|
-
const [
|
|
33
|
-
return
|
|
34
|
-
let
|
|
35
|
-
const
|
|
36
|
-
i((
|
|
30
|
+
options: B
|
|
31
|
+
}), V = () => J(I);
|
|
32
|
+
function Y(s, t = 1) {
|
|
33
|
+
const [c, i] = E(0);
|
|
34
|
+
return M(() => {
|
|
35
|
+
let e;
|
|
36
|
+
const l = () => {
|
|
37
|
+
i((n) => n >= s.length ? n : n + t), e = requestAnimationFrame(l);
|
|
37
38
|
};
|
|
38
|
-
return
|
|
39
|
-
}, [s, t]), s.slice(0,
|
|
39
|
+
return l(), () => cancelAnimationFrame(e);
|
|
40
|
+
}, [s, t]), s.slice(0, c);
|
|
40
41
|
}
|
|
41
|
-
const
|
|
42
|
-
const i = s /
|
|
43
|
-
return (t /
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
42
|
+
const C = (s, t, c) => {
|
|
43
|
+
const i = s / c.fontWidth | 0;
|
|
44
|
+
return (t / c.fontHeight | 0) * c.cols + i;
|
|
45
|
+
};
|
|
46
|
+
function b(s, t, c) {
|
|
47
|
+
for (const i of s)
|
|
48
|
+
if (i.startsWith(`ascii-${t}-`))
|
|
49
|
+
return i.slice(`ascii-${t}-`.length);
|
|
50
|
+
return c;
|
|
51
|
+
}
|
|
52
|
+
const Z = ({ rect: s, grid: t }) => {
|
|
53
|
+
const c = Math.floor(s.rect.left / t.fontWidth) * t.fontWidth, i = Math.floor(s.rect.right / t.fontWidth) * t.fontWidth, e = Math.floor(s.rect.top / t.fontHeight) * t.fontHeight, l = Math.floor(s.rect.bottom / t.fontHeight) * t.fontHeight, n = s.classList, f = n.contains("ascii"), a = n.contains("ascii-border"), h = n.contains("ascii-border-l"), u = n.contains("ascii-border-r"), p = n.contains("ascii-border-t"), m = n.contains("ascii-border-b"), w = n.contains("ascii-border-tl"), W = n.contains("ascii-border-tr"), H = n.contains("ascii-border-br"), x = n.contains("ascii-border-bl"), N = n.contains("ascii-no-fill"), T = n.contains("ascii-text"), F = b(n, "l", t.options.l), d = b(n, "r", t.options.r), O = b(n, "t", t.options.t), q = b(n, "b", t.options.b), G = b(n, "tl", t.options.tl), j = b(n, "tr", t.options.tr), z = b(n, "br", t.options.br), D = b(n, "bl", t.options.bl), P = b(n, "fill", t.options.fill), v = b(n, "li", t.options.li), L = b(n, "ri", t.options.ri), y = b(n, "ti", t.options.ti), A = b(n, "bi", t.options.bi), k = b(n, "i", t.options.i);
|
|
54
|
+
if (h || (f || a) && !u && !p && !m && !w && !W && !H && !x)
|
|
55
|
+
for (let o = e + t.fontHeight; o < l; o += t.fontHeight) {
|
|
56
|
+
const r = C(c, o, t);
|
|
57
|
+
switch (t.grid[r]) {
|
|
52
58
|
case t.options.t:
|
|
53
59
|
case t.options.b:
|
|
54
60
|
case t.options.tr:
|
|
55
61
|
case t.options.br:
|
|
56
|
-
t.grid[
|
|
62
|
+
t.grid[r] = v;
|
|
57
63
|
break;
|
|
58
64
|
default:
|
|
59
|
-
t.grid[
|
|
65
|
+
t.grid[r] = F;
|
|
60
66
|
}
|
|
61
67
|
}
|
|
62
|
-
if (
|
|
63
|
-
(o
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const e = r(i, o, t);
|
|
67
|
-
switch (t.grid[e]) {
|
|
68
|
+
if (u || (f || a) && !h && !p && !m && !w && !W && !H && !x)
|
|
69
|
+
for (let o = e + t.fontHeight; o < l; o += t.fontHeight) {
|
|
70
|
+
const r = C(i, o, t);
|
|
71
|
+
switch (t.grid[r]) {
|
|
68
72
|
case t.options.t:
|
|
69
73
|
case t.options.b:
|
|
70
74
|
case t.options.tl:
|
|
71
75
|
case t.options.bl:
|
|
72
|
-
t.grid[
|
|
76
|
+
t.grid[r] = L;
|
|
73
77
|
break;
|
|
74
78
|
default:
|
|
75
|
-
t.grid[
|
|
79
|
+
t.grid[r] = d;
|
|
76
80
|
}
|
|
77
81
|
}
|
|
78
|
-
if (
|
|
79
|
-
(o
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const e = r(o, c, t);
|
|
83
|
-
switch (t.grid[e]) {
|
|
82
|
+
if (p || (f || a) && !h && !u && !m && !w && !W && !H && !x)
|
|
83
|
+
for (let o = c + t.fontWidth; o < i; o += t.fontWidth) {
|
|
84
|
+
const r = C(o, e, t);
|
|
85
|
+
switch (t.grid[r]) {
|
|
84
86
|
case t.options.l:
|
|
85
87
|
case t.options.r:
|
|
86
88
|
case t.options.bl:
|
|
87
89
|
case t.options.br:
|
|
88
|
-
t.grid[
|
|
90
|
+
t.grid[r] = y;
|
|
89
91
|
break;
|
|
90
92
|
default:
|
|
91
|
-
t.grid[
|
|
93
|
+
t.grid[r] = O;
|
|
92
94
|
}
|
|
93
95
|
}
|
|
94
|
-
if (
|
|
95
|
-
(o
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const e = r(o, a, t);
|
|
99
|
-
switch (t.grid[e]) {
|
|
96
|
+
if (m || (f || a) && !h && !u && !p && !w && !W && !H && !x)
|
|
97
|
+
for (let o = c + t.fontWidth; o < i; o += t.fontWidth) {
|
|
98
|
+
const r = C(o, l, t);
|
|
99
|
+
switch (t.grid[r]) {
|
|
100
100
|
case t.options.l:
|
|
101
101
|
case t.options.r:
|
|
102
102
|
case t.options.tl:
|
|
103
103
|
case t.options.tr:
|
|
104
|
-
t.grid[
|
|
104
|
+
t.grid[r] = A;
|
|
105
105
|
break;
|
|
106
106
|
default:
|
|
107
|
-
t.grid[
|
|
107
|
+
t.grid[r] = q;
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
|
-
if (
|
|
111
|
-
const o =
|
|
110
|
+
if (w || p && h || (f || a) && !h && !u && !p && !m && !W && !H && !x) {
|
|
111
|
+
const o = C(c, e, t);
|
|
112
112
|
switch (t.grid[o]) {
|
|
113
113
|
case t.options.t:
|
|
114
114
|
case t.options.b:
|
|
115
115
|
case t.options.tr:
|
|
116
|
-
t.grid[o] =
|
|
116
|
+
t.grid[o] = A;
|
|
117
117
|
break;
|
|
118
118
|
case t.options.l:
|
|
119
119
|
case t.options.r:
|
|
120
120
|
case t.options.bl:
|
|
121
|
-
t.grid[o] =
|
|
121
|
+
t.grid[o] = L;
|
|
122
122
|
break;
|
|
123
123
|
case t.options.br:
|
|
124
|
-
t.grid[o] =
|
|
124
|
+
t.grid[o] = k;
|
|
125
125
|
break;
|
|
126
126
|
default:
|
|
127
|
-
t.grid[o] =
|
|
127
|
+
t.grid[o] = G;
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
|
-
if (
|
|
131
|
-
const o =
|
|
130
|
+
if (W || p && u || (f || a) && !h && !u && !p && !m && !w && !H && !x) {
|
|
131
|
+
const o = C(i, e, t);
|
|
132
132
|
switch (t.grid[o]) {
|
|
133
133
|
case t.options.t:
|
|
134
134
|
case t.options.b:
|
|
135
135
|
case t.options.tl:
|
|
136
|
-
t.grid[o] =
|
|
136
|
+
t.grid[o] = A;
|
|
137
137
|
break;
|
|
138
138
|
case t.options.l:
|
|
139
139
|
case t.options.r:
|
|
140
140
|
case t.options.br:
|
|
141
|
-
t.grid[o] =
|
|
141
|
+
t.grid[o] = v;
|
|
142
142
|
break;
|
|
143
143
|
case t.options.bl:
|
|
144
|
-
t.grid[o] =
|
|
144
|
+
t.grid[o] = k;
|
|
145
145
|
break;
|
|
146
146
|
default:
|
|
147
|
-
t.grid[o] =
|
|
147
|
+
t.grid[o] = j;
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
|
-
if (
|
|
151
|
-
const o =
|
|
150
|
+
if (H || m && u || (f || a) && !h && !u && !p && !m && !w && !W && !x) {
|
|
151
|
+
const o = C(i, l, t);
|
|
152
152
|
if (s.type === "textarea")
|
|
153
153
|
t.grid[o] = "▼";
|
|
154
154
|
else
|
|
@@ -156,129 +156,142 @@ const r = (s, t, n) => {
|
|
|
156
156
|
case t.options.l:
|
|
157
157
|
case t.options.r:
|
|
158
158
|
case t.options.tr:
|
|
159
|
-
t.grid[o] =
|
|
159
|
+
t.grid[o] = v;
|
|
160
160
|
break;
|
|
161
161
|
case t.options.t:
|
|
162
162
|
case t.options.b:
|
|
163
163
|
case t.options.bl:
|
|
164
|
-
t.grid[o] =
|
|
164
|
+
t.grid[o] = y;
|
|
165
165
|
break;
|
|
166
166
|
case t.options.tl:
|
|
167
|
-
t.grid[o] =
|
|
167
|
+
t.grid[o] = k;
|
|
168
168
|
break;
|
|
169
169
|
default:
|
|
170
|
-
t.grid[o] =
|
|
170
|
+
t.grid[o] = z;
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
|
-
if (
|
|
174
|
-
const o =
|
|
173
|
+
if (x || m && h || (f || a) && !h && !u && !p && !m && !w && !W && !H) {
|
|
174
|
+
const o = C(c, l, t);
|
|
175
175
|
switch (t.grid[o]) {
|
|
176
176
|
case t.options.l:
|
|
177
177
|
case t.options.r:
|
|
178
178
|
case t.options.tl:
|
|
179
|
-
t.grid[o] =
|
|
179
|
+
t.grid[o] = L;
|
|
180
180
|
break;
|
|
181
181
|
case t.options.t:
|
|
182
182
|
case t.options.b:
|
|
183
183
|
case t.options.br:
|
|
184
|
-
t.grid[o] =
|
|
184
|
+
t.grid[o] = y;
|
|
185
185
|
break;
|
|
186
186
|
case t.options.tr:
|
|
187
|
-
t.grid[o] =
|
|
187
|
+
t.grid[o] = k;
|
|
188
188
|
break;
|
|
189
189
|
default:
|
|
190
|
-
t.grid[o] =
|
|
190
|
+
t.grid[o] = D;
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
|
-
if (
|
|
194
|
-
for (let o =
|
|
195
|
-
for (let
|
|
196
|
-
t.grid[r
|
|
197
|
-
|
|
198
|
-
const
|
|
199
|
-
t.grid[r
|
|
193
|
+
if (!N)
|
|
194
|
+
for (let o = e + t.fontHeight; o < l; o += t.fontHeight)
|
|
195
|
+
for (let r = c + t.fontWidth; r < i; r += t.fontWidth)
|
|
196
|
+
t.grid[C(r, o, t)] = P;
|
|
197
|
+
(f || T) && s.characters.forEach((o) => {
|
|
198
|
+
const r = Math.round(o.rect.left / t.fontWidth) * t.fontWidth, _ = Math.round(o.rect.bottom / t.fontHeight) * t.fontHeight;
|
|
199
|
+
t.grid[C(r, _, t)] = o.char;
|
|
200
200
|
});
|
|
201
201
|
};
|
|
202
|
-
function
|
|
202
|
+
function g(s) {
|
|
203
203
|
return s.current ? Array.from(s.current.querySelectorAll('[class*="ascii"]')).map((t) => {
|
|
204
|
-
const
|
|
204
|
+
const c = [], i = document.createTreeWalker(t, NodeFilter.SHOW_TEXT);
|
|
205
205
|
for (; i.nextNode(); ) {
|
|
206
|
-
const
|
|
207
|
-
for (let
|
|
208
|
-
if (
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
const
|
|
212
|
-
|
|
206
|
+
const e = i.currentNode, l = e.textContent ?? "";
|
|
207
|
+
for (let n = 0; n < l.length; n++) {
|
|
208
|
+
if (l[n].trim() === "") continue;
|
|
209
|
+
const f = document.createRange();
|
|
210
|
+
f.setStart(e, n), f.setEnd(e, n + 1);
|
|
211
|
+
const a = f.getBoundingClientRect();
|
|
212
|
+
c.push({ char: l[n], rect: a });
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
215
|
return {
|
|
216
216
|
rect: t.getBoundingClientRect(),
|
|
217
|
-
characters:
|
|
217
|
+
characters: c,
|
|
218
218
|
type: t.tagName.toLowerCase(),
|
|
219
219
|
classList: t.classList
|
|
220
220
|
};
|
|
221
221
|
}) : [];
|
|
222
222
|
}
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
223
|
+
const st = ({
|
|
224
|
+
children: s,
|
|
225
|
+
gridReveal: t = !0,
|
|
226
|
+
revealSpeed: c = 30
|
|
227
|
+
}) => {
|
|
228
|
+
const i = S(null), e = V(), l = S([]), n = t ? Y(e.grid, c) : e.grid, [, f] = K((a) => a + 1, 0);
|
|
229
|
+
Q(() => {
|
|
230
|
+
if (!i.current) return;
|
|
231
|
+
let a;
|
|
232
|
+
const h = () => {
|
|
233
|
+
l.current = g(i), a = requestAnimationFrame(h), f();
|
|
230
234
|
};
|
|
231
|
-
return
|
|
235
|
+
return h(), () => cancelAnimationFrame(a);
|
|
232
236
|
}, []);
|
|
233
|
-
for (let
|
|
234
|
-
|
|
235
|
-
return
|
|
236
|
-
|
|
237
|
-
}), /* @__PURE__ */
|
|
238
|
-
/* @__PURE__ */
|
|
237
|
+
for (let a = 0; a < e.grid.length; a++)
|
|
238
|
+
e.grid[a] = " ";
|
|
239
|
+
return l.current.forEach((a) => {
|
|
240
|
+
Z({ rect: a, grid: e });
|
|
241
|
+
}), /* @__PURE__ */ $("div", { ref: i, className: "leading-none", children: [
|
|
242
|
+
/* @__PURE__ */ R(
|
|
239
243
|
"div",
|
|
240
244
|
{
|
|
241
|
-
style: { width:
|
|
245
|
+
style: { width: e.truncWidth, height: e.truncHeight },
|
|
242
246
|
className: "absolute opacity-0 top-0 left-0 bg-none pointer-events-none",
|
|
243
247
|
children: s
|
|
244
248
|
}
|
|
245
249
|
),
|
|
246
|
-
|
|
250
|
+
i.current && l.current && /* @__PURE__ */ R("div", { style: { width: e.truncWidth, height: e.truncHeight }, children: Array.from({ length: e.rows }, (a, h) => {
|
|
251
|
+
let u = "";
|
|
252
|
+
const p = h * e.cols, m = p + e.cols;
|
|
253
|
+
for (let w = p; w < m; w++)
|
|
254
|
+
u += n[w] ?? " ";
|
|
255
|
+
return /* @__PURE__ */ R("p", { children: u }, h);
|
|
256
|
+
}) })
|
|
247
257
|
] });
|
|
248
258
|
};
|
|
249
|
-
function
|
|
250
|
-
const [s, t] =
|
|
259
|
+
function tt() {
|
|
260
|
+
const [s, t] = E({
|
|
251
261
|
width: 0,
|
|
252
262
|
height: 0
|
|
253
263
|
});
|
|
254
|
-
return
|
|
255
|
-
const
|
|
256
|
-
return
|
|
264
|
+
return M(() => {
|
|
265
|
+
const c = () => t({ width: window.innerWidth, height: window.innerHeight });
|
|
266
|
+
return c(), window.addEventListener("resize", c), () => window.removeEventListener("resize", c);
|
|
257
267
|
}, []), s;
|
|
258
268
|
}
|
|
259
|
-
function
|
|
260
|
-
const i =
|
|
269
|
+
function ot({ width: s, height: t, ...c }) {
|
|
270
|
+
const i = {
|
|
271
|
+
...B,
|
|
272
|
+
...c
|
|
273
|
+
}, e = 16, l = 1229 / 2048, n = e * l, f = s - s % n, a = t - t % e, h = Math.floor(a / e), u = Math.floor(f / n), p = Array.from({ length: h * u }, () => i.fill);
|
|
261
274
|
return {
|
|
262
|
-
fontHeight:
|
|
263
|
-
courierRatio:
|
|
264
|
-
fontWidth:
|
|
265
|
-
truncWidth:
|
|
266
|
-
truncHeight:
|
|
267
|
-
windowWidth:
|
|
268
|
-
windowHeight:
|
|
275
|
+
fontHeight: e,
|
|
276
|
+
courierRatio: l,
|
|
277
|
+
fontWidth: n,
|
|
278
|
+
truncWidth: f,
|
|
279
|
+
truncHeight: a,
|
|
280
|
+
windowWidth: s,
|
|
281
|
+
windowHeight: t,
|
|
269
282
|
rows: h,
|
|
270
|
-
cols:
|
|
271
|
-
grid:
|
|
272
|
-
options:
|
|
283
|
+
cols: u,
|
|
284
|
+
grid: p,
|
|
285
|
+
options: i
|
|
273
286
|
};
|
|
274
287
|
}
|
|
275
|
-
function
|
|
276
|
-
const { width:
|
|
277
|
-
return /* @__PURE__ */
|
|
288
|
+
function ct({ children: s, ...t }) {
|
|
289
|
+
const { width: c, height: i } = tt(), e = U(() => ot({ width: c, height: i, ...t }), [c, i, t]);
|
|
290
|
+
return /* @__PURE__ */ R(I.Provider, { value: e, children: s });
|
|
278
291
|
}
|
|
279
292
|
export {
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
293
|
+
st as ASCII,
|
|
294
|
+
ct as ASCIIProvider,
|
|
295
|
+
V as useGridContext
|
|
283
296
|
};
|
|
284
297
|
//# sourceMappingURL=index.es.js.map
|
package/dist/index.es.js.map
CHANGED
|
@@ -1 +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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"}
|
|
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, useReducer, useRef } 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\nimport type { GridOptions } from \"../types/GridOptions\"\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\nfunction getCharOverride(cl: DOMTokenList, option: keyof GridOptions, fallback: string) {\r\n\tfor (const c of cl) {\r\n\t\tif (c.startsWith(`ascii-${option}-`)) {\r\n\t\t\treturn c.slice(`ascii-${option}-`.length)\r\n\t\t}\r\n\t}\r\n\treturn fallback\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\tconst cl = rect.classList\r\n\r\n\tconst hasASCII = cl.contains(\"ascii\")\r\n\tconst hasBorder = cl.contains(\"ascii-border\")\r\n\tconst hasL = cl.contains(\"ascii-border-l\")\r\n\tconst hasR = cl.contains(\"ascii-border-r\")\r\n\tconst hasT = cl.contains(\"ascii-border-t\")\r\n\tconst hasB = cl.contains(\"ascii-border-b\")\r\n\tconst hasTL = cl.contains(\"ascii-border-tl\")\r\n\tconst hasTR = cl.contains(\"ascii-border-tr\")\r\n\tconst hasBR = cl.contains(\"ascii-border-br\")\r\n\tconst hasBL = cl.contains(\"ascii-border-bl\")\r\n\tconst hasNoFill = cl.contains(\"ascii-no-fill\")\r\n\tconst hasText = cl.contains(\"ascii-text\")\r\n\r\n\tconst lChar = getCharOverride(cl, \"l\", grid.options.l)\r\n\tconst rChar = getCharOverride(cl, \"r\", grid.options.r)\r\n\tconst tChar = getCharOverride(cl, \"t\", grid.options.t)\r\n\tconst bChar = getCharOverride(cl, \"b\", grid.options.b)\r\n\tconst tlChar = getCharOverride(cl, \"tl\", grid.options.tl)\r\n\tconst trChar = getCharOverride(cl, \"tr\", grid.options.tr)\r\n\tconst brChar = getCharOverride(cl, \"br\", grid.options.br)\r\n\tconst blChar = getCharOverride(cl, \"bl\", grid.options.bl)\r\n\tconst fillChar = getCharOverride(cl, \"fill\", grid.options.fill)\r\n\tconst liChar = getCharOverride(cl, \"li\", grid.options.li)\r\n\tconst riChar = getCharOverride(cl, \"ri\", grid.options.ri)\r\n\tconst tiChar = getCharOverride(cl, \"ti\", grid.options.ti)\r\n\tconst biChar = getCharOverride(cl, \"bi\", grid.options.bi)\r\n\tconst iChar = getCharOverride(cl, \"i\", grid.options.i)\r\n\r\n\t//TODO: associate grid cells with the local options of the dom element - right now the intersections only look for the default characters\r\n\r\n\t//verticals\r\n\t//left\r\n\tif (hasL || ((hasASCII || hasBorder) && !hasR && !hasT && !hasB && !hasTL && !hasTR && !hasBR && !hasBL)) {\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] = liChar\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[l] = lChar\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t//right\r\n\tif (hasR || ((hasASCII || hasBorder) && !hasL && !hasT && !hasB && !hasTL && !hasTR && !hasBR && !hasBL)) {\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] = riChar\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[r] = rChar\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 (hasT || ((hasASCII || hasBorder) && !hasL && !hasR && !hasB && !hasTL && !hasTR && !hasBR && !hasBL)) {\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] = tiChar\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[t] = tChar\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t//bottom\r\n\tif (hasB || ((hasASCII || hasBorder) && !hasL && !hasR && !hasT && !hasTL && !hasTR && !hasBR && !hasBL)) {\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] = biChar\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[b] = bChar\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\thasTL ||\r\n\t\t(hasT && hasL) ||\r\n\t\t((hasASCII || hasBorder) && !hasL && !hasR && !hasT && !hasB && !hasTR && !hasBR && !hasBL)\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] = biChar\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] = riChar\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.br:\r\n\t\t\t\tgrid.grid[tl] = iChar\r\n\t\t\t\tbreak\r\n\t\t\tdefault:\r\n\t\t\t\tgrid.grid[tl] = tlChar\r\n\t\t}\r\n\t}\r\n\t//tr\r\n\tif (\r\n\t\thasTR ||\r\n\t\t(hasT && hasR) ||\r\n\t\t((hasASCII || hasBorder) && !hasL && !hasR && !hasT && !hasB && !hasTL && !hasBR && !hasBL)\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] = biChar\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] = liChar\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.bl:\r\n\t\t\t\tgrid.grid[tr] = iChar\r\n\t\t\t\tbreak\r\n\t\t\tdefault:\r\n\t\t\t\tgrid.grid[tr] = trChar\r\n\t\t}\r\n\t}\r\n\t//br\r\n\tif (\r\n\t\thasBR ||\r\n\t\t(hasB && hasR) ||\r\n\t\t((hasASCII || hasBorder) && !hasL && !hasR && !hasT && !hasB && !hasTL && !hasTR && !hasBL)\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] = liChar\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] = tiChar\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] = iChar\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[br] = brChar\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//bl\r\n\tif (\r\n\t\thasBL ||\r\n\t\t(hasB && hasL) ||\r\n\t\t((hasASCII || hasBorder) && !hasL && !hasR && !hasT && !hasB && !hasTL && !hasTR && !hasBR)\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] = riChar\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] = tiChar\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.tr:\r\n\t\t\t\tgrid.grid[bl] = iChar\r\n\t\t\t\tbreak\r\n\t\t\tdefault:\r\n\t\t\t\tgrid.grid[bl] = blChar\r\n\t\t}\r\n\t}\r\n\r\n\t//fill\r\n\tif (!hasNoFill) {\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)] = fillChar\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//characters\r\n\tif (hasASCII || hasText) {\r\n\t\trect.characters.forEach((c) => {\r\n\t\t\tconst cRectLeft = Math.round(c.rect.left / grid.fontWidth) * grid.fontWidth\r\n\t\t\tconst cRectBottom = Math.round(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 = ({\r\n\tchildren,\r\n\tgridReveal = true,\r\n\trevealSpeed = 30,\r\n}: {\r\n\tchildren: React.ReactNode\r\n\tgridReveal?: boolean\r\n\trevealSpeed?: number\r\n}) => {\r\n\tconst parentRef = useRef<HTMLDivElement | null>(null)\r\n\tconst grid = useGridContext()\r\n\t//const [rects, setRects] = useState<Rect[] | null>([])\r\n\tconst rectsRef = useRef<Rect[]>([])\r\n\tconst reveal = gridReveal ? useReveal(grid.grid, revealSpeed) : grid.grid\r\n\tconst [, forceRender] = useReducer((x) => x + 1, 0)\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\trectsRef.current = getElements(parentRef)\r\n\t\t\tframe = requestAnimationFrame(loop)\r\n\r\n\t\t\tforceRender()\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\trectsRef.current.forEach((rect) => {\r\n\t\tdrawRect({ rect, grid })\r\n\t})\r\n\r\n\treturn (\r\n\t\t<div ref={parentRef} className=\"leading-none\">\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 && rectsRef.current && (\r\n\t\t\t\t<div style={{ width: grid.truncWidth, height: grid.truncHeight }}>\r\n\t\t\t\t\t{Array.from({ length: grid.rows }, (_, r) => {\r\n\t\t\t\t\t\tlet str = \"\"\r\n\t\t\t\t\t\tconst start = r * grid.cols\r\n\t\t\t\t\t\tconst end = start + grid.cols\r\n\r\n\t\t\t\t\t\tfor (let i = start; i < end; i++) {\r\n\t\t\t\t\t\t\tstr += reveal[i] ?? String.fromCharCode(160)\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn <p key={r}>{str}</p>\r\n\t\t\t\t\t})}\r\n\t\t\t\t</div>\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{String.raw`${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 { useMemo } from \"react\"\r\nimport { GridContext } from \"../contexts/GridContext\"\r\nimport { useWindowDimensions } from \"../hooks/useWindowDimensions\"\r\nimport type { ASCIIProviderProps } from \"../types/ASCIIProviderProps\"\r\nimport type { GridData } from \"../types/GridData\"\r\nimport type { GridOptions } from \"../types/GridOptions\"\r\nimport { defaultOptions } from \"../utils/defaultOptions\"\r\n\r\nfunction initGrid({ width, height, ...options }: { width: number; height: number } & Partial<GridOptions>): GridData {\r\n\tconst mergedOptions: GridOptions = {\r\n\t\t...defaultOptions,\r\n\t\t...options,\r\n\t}\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 rows = Math.floor(truncHeight / fontHeight)\r\n\tconst cols = Math.floor(truncWidth / fontWidth)\r\n\tconst grid = Array.from({ length: rows * cols }, () => mergedOptions.fill)\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: width,\r\n\t\twindowHeight: height,\r\n\t\trows,\r\n\t\tcols,\r\n\t\tgrid,\r\n\t\toptions: mergedOptions,\r\n\t}\r\n}\r\n\r\nexport function ASCIIProvider({ children, ...options }: ASCIIProviderProps) {\r\n\t// const parentGrid = useContext(GridContext)\r\n\r\n\t// // if a grid already exists, reuse it\r\n\t// if (parentGrid) {\r\n\t// \treturn <GridContext.Provider value={parentGrid}>{children}</GridContext.Provider>\r\n\t// }\r\n\r\n\tconst { width, height } = useWindowDimensions()\r\n\tconst grid = useMemo(() => initGrid({ width, height, ...options }), [width, height, options])\r\n\t//const grid = initGrid({ width, height, ...options })\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","getCharOverride","cl","option","fallback","c","drawRect","rect","rectLeft","rectRight","rectTop","rectBottom","hasASCII","hasBorder","hasL","hasR","hasT","hasB","hasTL","hasTR","hasBR","hasBL","hasNoFill","hasText","lChar","rChar","tChar","bChar","tlChar","trChar","brChar","blChar","fillChar","liChar","riChar","tiChar","biChar","iChar","l","t","b","tl","tr","br","bl","cRectLeft","cRectBottom","getElements","ref","el","textWalker","textNode","text","range","ASCII","children","gridReveal","revealSpeed","parentRef","useRef","rectsRef","reveal","forceRender","useReducer","useLayoutEffect","jsxs","jsx","_","r","str","start","end","useWindowDimensions","dimensions","setDimensions","update","initGrid","width","height","options","mergedOptions","fontHeight","courierRatio","fontWidth","truncWidth","truncHeight","rows","cols","ASCIIProvider","useMemo"],"mappings":"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"}
|
package/dist/index.umd.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode('@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--spacing:.25rem;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.top-0{top:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.m-2{margin:calc(var(--spacing)*2)}.m-4{margin:calc(var(--spacing)*4)}.mt-4{margin-top:calc(var(--spacing)*4)}.flex{display:flex}.grid{display:grid}.h-8{height:calc(var(--spacing)*8)}.h-12{height:calc(var(--spacing)*12)}.h-24{height:calc(var(--spacing)*24)}.h-32{height:calc(var(--spacing)*32)}.h-64{height:calc(var(--spacing)*64)}.h-72{height:calc(var(--spacing)*72)}.w-64{width:calc(var(--spacing)*64)}.w-96{width:calc(var(--spacing)*96)}.w-\\[500px\\]{width:500px}.w-\\[1000px\\]{width:1000px}.w-full{width:100%}.resize{resize:both}.justify-center{justify-content:center}.border{border-style:var(--tw-border-style);border-width:1px}.bg-none{background-image:none}.p-4{padding:calc(var(--spacing)*4)}.p-10{padding:calc(var(--spacing)*10)}.text-center{text-align:center}.leading-none{--tw-leading:1;line-height:1}.wrap-break-word{overflow-wrap:break-word}.whitespace-pre{white-space:pre}.opacity-0{opacity:0}.opacity-100{opacity:1}}:root{height:100vh;margin:calc(var(--spacing)*0);font-family:Courier New,Courier,monospace}body,#root{height:100vh}a,button,input,textarea,select,area,label,details,summary{pointer-events:auto}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}')),document.head.appendChild(e)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
|
|
2
|
+
(function(W,x){typeof exports=="object"&&typeof module<"u"?x(exports,require("react/jsx-runtime"),require("react")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react"],x):(W=typeof globalThis<"u"?globalThis:W||self,x(W["html-to-ascii"]={},W.jsxRuntime,W.React))})(this,(function(W,x,C){"use strict";const L={t:"─",ti:"┴",b:"─",bi:"┬",l:"│",li:"┤",r:"│",ri:"├",tl:"┌",tr:"┐",br:"┘",bl:"└",i:"┼",fill:" "},T=C.createContext({fontHeight:0,courierRatio:0,fontWidth:0,truncWidth:0,truncHeight:0,windowWidth:0,windowHeight:0,rows:0,cols:0,grid:[],options:L}),E=()=>C.useContext(T);function M(s,t=1){const[c,i]=C.useState(0);return C.useEffect(()=>{let n;const l=()=>{i(e=>e>=s.length?e:e+t),n=requestAnimationFrame(l)};return l(),()=>cancelAnimationFrame(n)},[s,t]),s.slice(0,c)}const H=(s,t,c)=>{const i=s/c.fontWidth|0;return(t/c.fontHeight|0)*c.cols+i};function b(s,t,c){for(const i of s)if(i.startsWith(`ascii-${t}-`))return i.slice(`ascii-${t}-`.length);return c}const B=({rect:s,grid:t})=>{const c=Math.floor(s.rect.left/t.fontWidth)*t.fontWidth,i=Math.floor(s.rect.right/t.fontWidth)*t.fontWidth,n=Math.floor(s.rect.top/t.fontHeight)*t.fontHeight,l=Math.floor(s.rect.bottom/t.fontHeight)*t.fontHeight,e=s.classList,f=e.contains("ascii"),a=e.contains("ascii-border"),h=e.contains("ascii-border-l"),u=e.contains("ascii-border-r"),p=e.contains("ascii-border-t"),m=e.contains("ascii-border-b"),w=e.contains("ascii-border-tl"),k=e.contains("ascii-border-tr"),d=e.contains("ascii-border-br"),R=e.contains("ascii-border-bl"),G=e.contains("ascii-no-fill"),P=e.contains("ascii-text"),z=b(e,"l",t.options.l),D=b(e,"r",t.options.r),_=b(e,"t",t.options.t),$=b(e,"b",t.options.b),X=b(e,"tl",t.options.tl),J=b(e,"tr",t.options.tr),K=b(e,"br",t.options.br),Q=b(e,"bl",t.options.bl),U=b(e,"fill",t.options.fill),y=b(e,"li",t.options.li),S=b(e,"ri",t.options.ri),A=b(e,"ti",t.options.ti),I=b(e,"bi",t.options.bi),v=b(e,"i",t.options.i);if(h||(f||a)&&!u&&!p&&!m&&!w&&!k&&!d&&!R)for(let o=n+t.fontHeight;o<l;o+=t.fontHeight){const r=H(c,o,t);switch(t.grid[r]){case t.options.t:case t.options.b:case t.options.tr:case t.options.br:t.grid[r]=y;break;default:t.grid[r]=z}}if(u||(f||a)&&!h&&!p&&!m&&!w&&!k&&!d&&!R)for(let o=n+t.fontHeight;o<l;o+=t.fontHeight){const r=H(i,o,t);switch(t.grid[r]){case t.options.t:case t.options.b:case t.options.tl:case t.options.bl:t.grid[r]=S;break;default:t.grid[r]=D}}if(p||(f||a)&&!h&&!u&&!m&&!w&&!k&&!d&&!R)for(let o=c+t.fontWidth;o<i;o+=t.fontWidth){const r=H(o,n,t);switch(t.grid[r]){case t.options.l:case t.options.r:case t.options.bl:case t.options.br:t.grid[r]=A;break;default:t.grid[r]=_}}if(m||(f||a)&&!h&&!u&&!p&&!w&&!k&&!d&&!R)for(let o=c+t.fontWidth;o<i;o+=t.fontWidth){const r=H(o,l,t);switch(t.grid[r]){case t.options.l:case t.options.r:case t.options.tl:case t.options.tr:t.grid[r]=I;break;default:t.grid[r]=$}}if(w||p&&h||(f||a)&&!h&&!u&&!p&&!m&&!k&&!d&&!R){const o=H(c,n,t);switch(t.grid[o]){case t.options.t:case t.options.b:case t.options.tr:t.grid[o]=I;break;case t.options.l:case t.options.r:case t.options.bl:t.grid[o]=S;break;case t.options.br:t.grid[o]=v;break;default:t.grid[o]=X}}if(k||p&&u||(f||a)&&!h&&!u&&!p&&!m&&!w&&!d&&!R){const o=H(i,n,t);switch(t.grid[o]){case t.options.t:case t.options.b:case t.options.tl:t.grid[o]=I;break;case t.options.l:case t.options.r:case t.options.br:t.grid[o]=y;break;case t.options.bl:t.grid[o]=v;break;default:t.grid[o]=J}}if(d||m&&u||(f||a)&&!h&&!u&&!p&&!m&&!w&&!k&&!R){const o=H(i,l,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]=y;break;case t.options.t:case t.options.b:case t.options.bl:t.grid[o]=A;break;case t.options.tl:t.grid[o]=v;break;default:t.grid[o]=K}}if(R||m&&h||(f||a)&&!h&&!u&&!p&&!m&&!w&&!k&&!d){const o=H(c,l,t);switch(t.grid[o]){case t.options.l:case t.options.r:case t.options.tl:t.grid[o]=S;break;case t.options.t:case t.options.b:case t.options.br:t.grid[o]=A;break;case t.options.tr:t.grid[o]=v;break;default:t.grid[o]=Q}}if(!G)for(let o=n+t.fontHeight;o<l;o+=t.fontHeight)for(let r=c+t.fontWidth;r<i;r+=t.fontWidth)t.grid[H(r,o,t)]=U;(f||P)&&s.characters.forEach(o=>{const r=Math.round(o.rect.left/t.fontWidth)*t.fontWidth,V=Math.round(o.rect.bottom/t.fontHeight)*t.fontHeight;t.grid[H(r,V,t)]=o.char})};function N(s){return s.current?Array.from(s.current.querySelectorAll('[class*="ascii"]')).map(t=>{const c=[],i=document.createTreeWalker(t,NodeFilter.SHOW_TEXT);for(;i.nextNode();){const n=i.currentNode,l=n.textContent??"";for(let e=0;e<l.length;e++){if(l[e].trim()==="")continue;const f=document.createRange();f.setStart(n,e),f.setEnd(n,e+1);const a=f.getBoundingClientRect();c.push({char:l[e],rect:a})}}return{rect:t.getBoundingClientRect(),characters:c,type:t.tagName.toLowerCase(),classList:t.classList}}):[]}const j=({children:s,gridReveal:t=!0,revealSpeed:c=30})=>{const i=C.useRef(null),n=E(),l=C.useRef([]),e=t?M(n.grid,c):n.grid,[,f]=C.useReducer(a=>a+1,0);C.useLayoutEffect(()=>{if(!i.current)return;let a;const h=()=>{l.current=N(i),a=requestAnimationFrame(h),f()};return h(),()=>cancelAnimationFrame(a)},[]);for(let a=0;a<n.grid.length;a++)n.grid[a]=" ";return l.current.forEach(a=>{B({rect:a,grid:n})}),x.jsxs("div",{ref:i,className:"leading-none",children:[x.jsx("div",{style:{width:n.truncWidth,height:n.truncHeight},className:"absolute opacity-0 top-0 left-0 bg-none pointer-events-none",children:s}),i.current&&l.current&&x.jsx("div",{style:{width:n.truncWidth,height:n.truncHeight},children:Array.from({length:n.rows},(a,h)=>{let u="";const p=h*n.cols,m=p+n.cols;for(let w=p;w<m;w++)u+=e[w]??" ";return x.jsx("p",{children:u},h)})})]})};function F(){const[s,t]=C.useState({width:0,height:0});return C.useEffect(()=>{const c=()=>t({width:window.innerWidth,height:window.innerHeight});return c(),window.addEventListener("resize",c),()=>window.removeEventListener("resize",c)},[]),s}function q({width:s,height:t,...c}){const i={...L,...c},n=16,l=1229/2048,e=n*l,f=s-s%e,a=t-t%n,h=Math.floor(a/n),u=Math.floor(f/e),p=Array.from({length:h*u},()=>i.fill);return{fontHeight:n,courierRatio:l,fontWidth:e,truncWidth:f,truncHeight:a,windowWidth:s,windowHeight:t,rows:h,cols:u,grid:p,options:i}}function O({children:s,...t}){const{width:c,height:i}=F(),n=C.useMemo(()=>q({width:c,height:i,...t}),[c,i,t]);return x.jsx(T.Provider,{value:n,children:s})}W.ASCII=j,W.ASCIIProvider=O,W.useGridContext=E,Object.defineProperty(W,Symbol.toStringTag,{value:"Module"})}));
|
|
2
3
|
//# sourceMappingURL=index.umd.js.map
|
package/dist/index.umd.js.map
CHANGED
|
@@ -1 +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
|
+
{"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, useReducer, useRef } 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\nimport type { GridOptions } from \"../types/GridOptions\"\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\nfunction getCharOverride(cl: DOMTokenList, option: keyof GridOptions, fallback: string) {\r\n\tfor (const c of cl) {\r\n\t\tif (c.startsWith(`ascii-${option}-`)) {\r\n\t\t\treturn c.slice(`ascii-${option}-`.length)\r\n\t\t}\r\n\t}\r\n\treturn fallback\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\tconst cl = rect.classList\r\n\r\n\tconst hasASCII = cl.contains(\"ascii\")\r\n\tconst hasBorder = cl.contains(\"ascii-border\")\r\n\tconst hasL = cl.contains(\"ascii-border-l\")\r\n\tconst hasR = cl.contains(\"ascii-border-r\")\r\n\tconst hasT = cl.contains(\"ascii-border-t\")\r\n\tconst hasB = cl.contains(\"ascii-border-b\")\r\n\tconst hasTL = cl.contains(\"ascii-border-tl\")\r\n\tconst hasTR = cl.contains(\"ascii-border-tr\")\r\n\tconst hasBR = cl.contains(\"ascii-border-br\")\r\n\tconst hasBL = cl.contains(\"ascii-border-bl\")\r\n\tconst hasNoFill = cl.contains(\"ascii-no-fill\")\r\n\tconst hasText = cl.contains(\"ascii-text\")\r\n\r\n\tconst lChar = getCharOverride(cl, \"l\", grid.options.l)\r\n\tconst rChar = getCharOverride(cl, \"r\", grid.options.r)\r\n\tconst tChar = getCharOverride(cl, \"t\", grid.options.t)\r\n\tconst bChar = getCharOverride(cl, \"b\", grid.options.b)\r\n\tconst tlChar = getCharOverride(cl, \"tl\", grid.options.tl)\r\n\tconst trChar = getCharOverride(cl, \"tr\", grid.options.tr)\r\n\tconst brChar = getCharOverride(cl, \"br\", grid.options.br)\r\n\tconst blChar = getCharOverride(cl, \"bl\", grid.options.bl)\r\n\tconst fillChar = getCharOverride(cl, \"fill\", grid.options.fill)\r\n\tconst liChar = getCharOverride(cl, \"li\", grid.options.li)\r\n\tconst riChar = getCharOverride(cl, \"ri\", grid.options.ri)\r\n\tconst tiChar = getCharOverride(cl, \"ti\", grid.options.ti)\r\n\tconst biChar = getCharOverride(cl, \"bi\", grid.options.bi)\r\n\tconst iChar = getCharOverride(cl, \"i\", grid.options.i)\r\n\r\n\t//TODO: associate grid cells with the local options of the dom element - right now the intersections only look for the default characters\r\n\r\n\t//verticals\r\n\t//left\r\n\tif (hasL || ((hasASCII || hasBorder) && !hasR && !hasT && !hasB && !hasTL && !hasTR && !hasBR && !hasBL)) {\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] = liChar\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[l] = lChar\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t//right\r\n\tif (hasR || ((hasASCII || hasBorder) && !hasL && !hasT && !hasB && !hasTL && !hasTR && !hasBR && !hasBL)) {\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] = riChar\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[r] = rChar\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 (hasT || ((hasASCII || hasBorder) && !hasL && !hasR && !hasB && !hasTL && !hasTR && !hasBR && !hasBL)) {\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] = tiChar\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[t] = tChar\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t//bottom\r\n\tif (hasB || ((hasASCII || hasBorder) && !hasL && !hasR && !hasT && !hasTL && !hasTR && !hasBR && !hasBL)) {\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] = biChar\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[b] = bChar\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\thasTL ||\r\n\t\t(hasT && hasL) ||\r\n\t\t((hasASCII || hasBorder) && !hasL && !hasR && !hasT && !hasB && !hasTR && !hasBR && !hasBL)\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] = biChar\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] = riChar\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.br:\r\n\t\t\t\tgrid.grid[tl] = iChar\r\n\t\t\t\tbreak\r\n\t\t\tdefault:\r\n\t\t\t\tgrid.grid[tl] = tlChar\r\n\t\t}\r\n\t}\r\n\t//tr\r\n\tif (\r\n\t\thasTR ||\r\n\t\t(hasT && hasR) ||\r\n\t\t((hasASCII || hasBorder) && !hasL && !hasR && !hasT && !hasB && !hasTL && !hasBR && !hasBL)\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] = biChar\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] = liChar\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.bl:\r\n\t\t\t\tgrid.grid[tr] = iChar\r\n\t\t\t\tbreak\r\n\t\t\tdefault:\r\n\t\t\t\tgrid.grid[tr] = trChar\r\n\t\t}\r\n\t}\r\n\t//br\r\n\tif (\r\n\t\thasBR ||\r\n\t\t(hasB && hasR) ||\r\n\t\t((hasASCII || hasBorder) && !hasL && !hasR && !hasT && !hasB && !hasTL && !hasTR && !hasBL)\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] = liChar\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] = tiChar\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] = iChar\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgrid.grid[br] = brChar\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//bl\r\n\tif (\r\n\t\thasBL ||\r\n\t\t(hasB && hasL) ||\r\n\t\t((hasASCII || hasBorder) && !hasL && !hasR && !hasT && !hasB && !hasTL && !hasTR && !hasBR)\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] = riChar\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] = tiChar\r\n\t\t\t\tbreak\r\n\t\t\tcase grid.options.tr:\r\n\t\t\t\tgrid.grid[bl] = iChar\r\n\t\t\t\tbreak\r\n\t\t\tdefault:\r\n\t\t\t\tgrid.grid[bl] = blChar\r\n\t\t}\r\n\t}\r\n\r\n\t//fill\r\n\tif (!hasNoFill) {\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)] = fillChar\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//characters\r\n\tif (hasASCII || hasText) {\r\n\t\trect.characters.forEach((c) => {\r\n\t\t\tconst cRectLeft = Math.round(c.rect.left / grid.fontWidth) * grid.fontWidth\r\n\t\t\tconst cRectBottom = Math.round(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 = ({\r\n\tchildren,\r\n\tgridReveal = true,\r\n\trevealSpeed = 30,\r\n}: {\r\n\tchildren: React.ReactNode\r\n\tgridReveal?: boolean\r\n\trevealSpeed?: number\r\n}) => {\r\n\tconst parentRef = useRef<HTMLDivElement | null>(null)\r\n\tconst grid = useGridContext()\r\n\t//const [rects, setRects] = useState<Rect[] | null>([])\r\n\tconst rectsRef = useRef<Rect[]>([])\r\n\tconst reveal = gridReveal ? useReveal(grid.grid, revealSpeed) : grid.grid\r\n\tconst [, forceRender] = useReducer((x) => x + 1, 0)\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\trectsRef.current = getElements(parentRef)\r\n\t\t\tframe = requestAnimationFrame(loop)\r\n\r\n\t\t\tforceRender()\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\trectsRef.current.forEach((rect) => {\r\n\t\tdrawRect({ rect, grid })\r\n\t})\r\n\r\n\treturn (\r\n\t\t<div ref={parentRef} className=\"leading-none\">\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 && rectsRef.current && (\r\n\t\t\t\t<div style={{ width: grid.truncWidth, height: grid.truncHeight }}>\r\n\t\t\t\t\t{Array.from({ length: grid.rows }, (_, r) => {\r\n\t\t\t\t\t\tlet str = \"\"\r\n\t\t\t\t\t\tconst start = r * grid.cols\r\n\t\t\t\t\t\tconst end = start + grid.cols\r\n\r\n\t\t\t\t\t\tfor (let i = start; i < end; i++) {\r\n\t\t\t\t\t\t\tstr += reveal[i] ?? String.fromCharCode(160)\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn <p key={r}>{str}</p>\r\n\t\t\t\t\t})}\r\n\t\t\t\t</div>\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{String.raw`${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 { useMemo } from \"react\"\r\nimport { GridContext } from \"../contexts/GridContext\"\r\nimport { useWindowDimensions } from \"../hooks/useWindowDimensions\"\r\nimport type { ASCIIProviderProps } from \"../types/ASCIIProviderProps\"\r\nimport type { GridData } from \"../types/GridData\"\r\nimport type { GridOptions } from \"../types/GridOptions\"\r\nimport { defaultOptions } from \"../utils/defaultOptions\"\r\n\r\nfunction initGrid({ width, height, ...options }: { width: number; height: number } & Partial<GridOptions>): GridData {\r\n\tconst mergedOptions: GridOptions = {\r\n\t\t...defaultOptions,\r\n\t\t...options,\r\n\t}\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 rows = Math.floor(truncHeight / fontHeight)\r\n\tconst cols = Math.floor(truncWidth / fontWidth)\r\n\tconst grid = Array.from({ length: rows * cols }, () => mergedOptions.fill)\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: width,\r\n\t\twindowHeight: height,\r\n\t\trows,\r\n\t\tcols,\r\n\t\tgrid,\r\n\t\toptions: mergedOptions,\r\n\t}\r\n}\r\n\r\nexport function ASCIIProvider({ children, ...options }: ASCIIProviderProps) {\r\n\t// const parentGrid = useContext(GridContext)\r\n\r\n\t// // if a grid already exists, reuse it\r\n\t// if (parentGrid) {\r\n\t// \treturn <GridContext.Provider value={parentGrid}>{children}</GridContext.Provider>\r\n\t// }\r\n\r\n\tconst { width, height } = useWindowDimensions()\r\n\tconst grid = useMemo(() => initGrid({ width, height, ...options }), [width, height, options])\r\n\t//const grid = initGrid({ width, height, ...options })\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","getCharOverride","cl","option","fallback","c","drawRect","rect","rectLeft","rectRight","rectTop","rectBottom","hasASCII","hasBorder","hasL","hasR","hasT","hasB","hasTL","hasTR","hasBR","hasBL","hasNoFill","hasText","lChar","rChar","tChar","bChar","tlChar","trChar","brChar","blChar","fillChar","liChar","riChar","tiChar","biChar","iChar","l","t","b","tl","tr","br","bl","cRectLeft","cRectBottom","getElements","ref","el","textWalker","textNode","text","range","ASCII","children","gridReveal","revealSpeed","parentRef","useRef","rectsRef","reveal","forceRender","useReducer","useLayoutEffect","jsxs","jsx","_","r","str","start","end","useWindowDimensions","dimensions","setDimensions","update","initGrid","width","height","options","mergedOptions","fontHeight","courierRatio","fontWidth","truncWidth","truncHeight","rows","cols","ASCIIProvider","useMemo"],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
}): import("react/jsx-runtime").JSX.Element;
|
|
1
|
+
import { ASCIIProviderProps } from '../types/ASCIIProviderProps';
|
|
2
|
+
export declare function ASCIIProvider({ children, ...options }: ASCIIProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
4
3
|
//# sourceMappingURL=ASCIIProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ASCIIProvider.d.ts","sourceRoot":"","sources":["../../lib/providers/ASCIIProvider.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ASCIIProvider.d.ts","sourceRoot":"","sources":["../../lib/providers/ASCIIProvider.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAiCrE,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,EAAE,kBAAkB,2CAYzE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ASCIIProviderProps.d.ts","sourceRoot":"","sources":["../../lib/types/ASCIIProviderProps.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
}
|
|
15
|
+
//# sourceMappingURL=GridData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridData.d.ts","sourceRoot":"","sources":["../../lib/types/GridData.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,MAAM,WAAW,QAAQ;IACxB,UAAU,EAAE,MAAM,GAAG,CAAC,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;CAC9B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
}
|
|
17
|
+
//# sourceMappingURL=GridOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridOptions.d.ts","sourceRoot":"","sources":["../../lib/types/GridOptions.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC3B,CAAC,EAAE,MAAM,CAAA;IACT,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,EAAE,MAAM,CAAA;IACT,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,EAAE,MAAM,CAAA;IACT,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,EAAE,MAAM,CAAA;IACT,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,EAAE,MAAM,CAAA;IACT,IAAI,EAAE,MAAM,CAAA;CACZ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Rect.d.ts","sourceRoot":"","sources":["../../lib/types/Rect.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACpB,IAAI,EAAE,OAAO,CAAA;IACb,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,YAAY,CAAA;CACvB"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "html-to-ascii",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.3.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
10
11
|
"import": "./dist/index.es.js",
|
|
11
|
-
"require": "./dist/index.umd.js"
|
|
12
|
-
"types": "./dist/index.d.ts"
|
|
12
|
+
"require": "./dist/index.umd.js"
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"files": [
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
"@tailwindcss/vite": "^4.1.18",
|
|
26
26
|
"react": "^19.2.0",
|
|
27
27
|
"react-dom": "^19.2.0",
|
|
28
|
-
"tailwindcss": "^4.1.18"
|
|
28
|
+
"tailwindcss": "^4.1.18",
|
|
29
|
+
"vite-plugin-css-injected-by-js": "^3.5.2"
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
31
32
|
"@eslint/js": "^9.39.1",
|