react-window 1.8.10 → 2.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +9 -161
  2. package/dist/react-window.cjs +22 -0
  3. package/dist/react-window.d.ts +217 -0
  4. package/dist/react-window.js +812 -0
  5. package/docs/assets/index-DlGpNu0r.css +1 -0
  6. package/docs/assets/index-fVOw1dKb.js +67 -0
  7. package/docs/data/addresses.json +7954 -0
  8. package/docs/data/contacts.json +4202 -0
  9. package/docs/data/names.json +1002 -0
  10. package/docs/favicon.svg +16 -0
  11. package/docs/generated/README.md +1 -0
  12. package/docs/generated/code-snippets/CellComponent.json +4 -0
  13. package/docs/generated/code-snippets/FixedHeightList.json +4 -0
  14. package/docs/generated/code-snippets/FixedHeightRowComponent.json +4 -0
  15. package/docs/generated/code-snippets/FlexboxLayout.json +4 -0
  16. package/docs/generated/code-snippets/Grid.json +4 -0
  17. package/docs/generated/code-snippets/ListVariableRowHeights.json +4 -0
  18. package/docs/generated/code-snippets/columnWidth.json +4 -0
  19. package/docs/generated/code-snippets/gridRefClickEventHandler.json +3 -0
  20. package/docs/generated/code-snippets/listRefClickEventHandler.json +3 -0
  21. package/docs/generated/code-snippets/rowHeight.json +4 -0
  22. package/docs/generated/code-snippets/useGridRef.json +4 -0
  23. package/docs/generated/code-snippets/useGridRefImport.json +3 -0
  24. package/docs/generated/code-snippets/useListRef.json +4 -0
  25. package/docs/generated/code-snippets/useListRefImport.json +3 -0
  26. package/docs/generated/js-docs/Grid.json +314 -0
  27. package/docs/generated/js-docs/List.json +266 -0
  28. package/docs/index.html +30 -0
  29. package/docs/og.html +42 -0
  30. package/docs/og.png +0 -0
  31. package/docs/stats.html +4949 -0
  32. package/docs/svgs/checkbox-checked.svg +1 -0
  33. package/docs/svgs/checkbox-indeterminate.svg +1 -0
  34. package/docs/svgs/checkbox-unchecked.svg +1 -0
  35. package/docs/svgs/github.svg +3 -0
  36. package/docs/svgs/npm.svg +1 -0
  37. package/docs/svgs/radio-checked.svg +1 -0
  38. package/docs/svgs/radio-unchecked.svg +1 -0
  39. package/package.json +70 -90
  40. package/LICENSE.md +0 -21
  41. package/dist/index-dev.umd.js +0 -2
  42. package/dist/index-dev.umd.js.map +0 -1
  43. package/dist/index-prod.umd.js +0 -2
  44. package/dist/index-prod.umd.js.map +0 -1
  45. package/dist/index.cjs.js +0 -2087
  46. package/dist/index.cjs.js.flow +0 -3
  47. package/dist/index.cjs.js.map +0 -1
  48. package/dist/index.esm.js +0 -2076
  49. package/dist/index.esm.js.flow +0 -3
  50. package/dist/index.esm.js.map +0 -1
  51. package/src/FixedSizeGrid.js +0 -244
  52. package/src/FixedSizeList.js +0 -137
  53. package/src/VariableSizeGrid.js +0 -507
  54. package/src/VariableSizeList.js +0 -317
  55. package/src/areEqual.js +0 -18
  56. package/src/createGridComponent.js +0 -919
  57. package/src/createListComponent.js +0 -745
  58. package/src/domHelpers.js +0 -72
  59. package/src/index.js +0 -9
  60. package/src/shallowDiffers.js +0 -17
  61. package/src/shouldComponentUpdate.js +0 -16
  62. package/src/timer.js +0 -37
@@ -0,0 +1,314 @@
1
+ {
2
+ "tags": {},
3
+ "filePath": "lib/components/grid/Grid.tsx",
4
+ "description": "",
5
+ "displayName": "Grid",
6
+ "methods": [],
7
+ "props": {
8
+ "className": {
9
+ "defaultValue": null,
10
+ "description": "CSS class name.",
11
+ "name": "className",
12
+ "declarations": [
13
+ {
14
+ "fileName": "react-window/lib/components/grid/types.ts",
15
+ "name": "TypeLiteral"
16
+ }
17
+ ],
18
+ "required": false,
19
+ "type": {
20
+ "name": "enum",
21
+ "raw": "string | undefined",
22
+ "value": [
23
+ {
24
+ "value": "undefined"
25
+ },
26
+ {
27
+ "value": "string"
28
+ }
29
+ ]
30
+ }
31
+ },
32
+ "defaultHeight": {
33
+ "defaultValue": null,
34
+ "description": "Default height of grid for initial render.\nThis value is important for server rendering.",
35
+ "name": "defaultHeight",
36
+ "declarations": [
37
+ {
38
+ "fileName": "react-window/lib/components/grid/types.ts",
39
+ "name": "TypeLiteral"
40
+ }
41
+ ],
42
+ "required": false,
43
+ "type": {
44
+ "name": "enum",
45
+ "raw": "number | undefined",
46
+ "value": [
47
+ {
48
+ "value": "undefined"
49
+ },
50
+ {
51
+ "value": "number"
52
+ }
53
+ ]
54
+ }
55
+ },
56
+ "defaultWidth": {
57
+ "defaultValue": null,
58
+ "description": "Default width of grid for initial render.\nThis value is important for server rendering.",
59
+ "name": "defaultWidth",
60
+ "declarations": [
61
+ {
62
+ "fileName": "react-window/lib/components/grid/types.ts",
63
+ "name": "TypeLiteral"
64
+ }
65
+ ],
66
+ "required": false,
67
+ "type": {
68
+ "name": "enum",
69
+ "raw": "number | undefined",
70
+ "value": [
71
+ {
72
+ "value": "undefined"
73
+ },
74
+ {
75
+ "value": "number"
76
+ }
77
+ ]
78
+ }
79
+ },
80
+ "cellComponent": {
81
+ "defaultValue": null,
82
+ "description": "React component responsible for rendering a cell.\n\nThis component will receive an `index` and `style` prop by default.\nAdditionally it will receive prop values passed to `cellProps`.\n\n⚠️ The prop types for this component are exported as `GridComponentProps`",
83
+ "name": "cellComponent",
84
+ "declarations": [
85
+ {
86
+ "fileName": "react-window/lib/components/grid/types.ts",
87
+ "name": "TypeLiteral"
88
+ }
89
+ ],
90
+ "required": true,
91
+ "type": {
92
+ "name": "(props: { columnIndex: number; rowIndex: number; style: CSSProperties; } & CellProps) => ReactNode"
93
+ }
94
+ },
95
+ "cellProps": {
96
+ "defaultValue": null,
97
+ "description": "Additional props to be passed to the cellComponent.\n\n⚠️ This object must not contain either an `columnIndex`, `rowIndex`, or `style` prop.",
98
+ "name": "cellProps",
99
+ "declarations": [
100
+ {
101
+ "fileName": "react-window/lib/components/grid/types.ts",
102
+ "name": "TypeLiteral"
103
+ }
104
+ ],
105
+ "required": true,
106
+ "type": {
107
+ "name": "ExcludeForbiddenKeys<CellProps>"
108
+ }
109
+ },
110
+ "columnCount": {
111
+ "defaultValue": null,
112
+ "description": "Number of columns to be rendered in the grid.",
113
+ "name": "columnCount",
114
+ "declarations": [
115
+ {
116
+ "fileName": "react-window/lib/components/grid/types.ts",
117
+ "name": "TypeLiteral"
118
+ }
119
+ ],
120
+ "required": true,
121
+ "type": {
122
+ "name": "number"
123
+ }
124
+ },
125
+ "columnWidth": {
126
+ "defaultValue": null,
127
+ "description": "Column width (in pixels) or a function that returns a column width (in pixels) given an index and `cellProps`.",
128
+ "name": "columnWidth",
129
+ "declarations": [
130
+ {
131
+ "fileName": "react-window/lib/components/grid/types.ts",
132
+ "name": "TypeLiteral"
133
+ }
134
+ ],
135
+ "required": true,
136
+ "type": {
137
+ "name": "enum",
138
+ "raw": "number | ((index: number, cellProps: CellProps) => number)",
139
+ "value": [
140
+ {
141
+ "value": "number"
142
+ },
143
+ {
144
+ "value": "(index: number, cellProps: CellProps) => number",
145
+ "description": "",
146
+ "fullComment": "",
147
+ "tags": {}
148
+ }
149
+ ]
150
+ }
151
+ },
152
+ "gridRef": {
153
+ "defaultValue": null,
154
+ "description": "Ref used to interact with this component's imperative API.\n\nThis API has imperative methods for scrolling and a getter for the outermost DOM element.\n\n⚠️ The `useGridRef` hook is exported for convenience use in TypeScript projects.",
155
+ "name": "gridRef",
156
+ "declarations": [
157
+ {
158
+ "fileName": "react-window/lib/components/grid/types.ts",
159
+ "name": "TypeLiteral"
160
+ }
161
+ ],
162
+ "required": false,
163
+ "type": {
164
+ "name": "enum",
165
+ "raw": "Ref<GridImperativeAPI> | undefined",
166
+ "value": [
167
+ {
168
+ "value": "undefined"
169
+ },
170
+ {
171
+ "value": "null"
172
+ },
173
+ {
174
+ "value": "(instance: GridImperativeAPI | null) => void | (() => VoidOrUndefinedOnly)",
175
+ "description": "",
176
+ "fullComment": "",
177
+ "tags": {}
178
+ },
179
+ {
180
+ "value": "RefObject<GridImperativeAPI | null>",
181
+ "description": "Created by {@link createRef}, or {@link useRef} when passed `null`.",
182
+ "fullComment": "Created by {@link createRef}, or {@link useRef} when passed `null`.\n@template T The type of the ref's value.\n@example ```tsx\nconst ref = createRef<HTMLDivElement>();\n\nref.current = document.createElement('div'); // Error\n```",
183
+ "tags": {
184
+ "template": "T The type of the ref's value.",
185
+ "example": "```tsx\nconst ref = createRef<HTMLDivElement>();\n\nref.current = document.createElement('div'); // Error\n```"
186
+ }
187
+ }
188
+ ]
189
+ }
190
+ },
191
+ "onCellsRendered": {
192
+ "defaultValue": null,
193
+ "description": "Callback notified when the range of rendered cells changes.",
194
+ "name": "onCellsRendered",
195
+ "declarations": [
196
+ {
197
+ "fileName": "react-window/lib/components/grid/types.ts",
198
+ "name": "TypeLiteral"
199
+ }
200
+ ],
201
+ "required": false,
202
+ "type": {
203
+ "name": "enum",
204
+ "raw": "((args: { columnStartIndex: number; columnStopIndex: number; rowStartIndex: number; rowStopIndex: number; }) => void) | undefined",
205
+ "value": [
206
+ {
207
+ "value": "undefined"
208
+ },
209
+ {
210
+ "value": "(args: { columnStartIndex: number; columnStopIndex: number; rowStartIndex: number; rowStopIndex: number; }) => void",
211
+ "description": "",
212
+ "fullComment": "",
213
+ "tags": {}
214
+ }
215
+ ]
216
+ }
217
+ },
218
+ "overscanCount": {
219
+ "defaultValue": {
220
+ "value": "3"
221
+ },
222
+ "description": "How many additional rows/columns to render outside of the visible area.\nThis can reduce visual flickering near the edges of a grid when scrolling.",
223
+ "name": "overscanCount",
224
+ "declarations": [
225
+ {
226
+ "fileName": "react-window/lib/components/grid/types.ts",
227
+ "name": "TypeLiteral"
228
+ }
229
+ ],
230
+ "required": false,
231
+ "type": {
232
+ "name": "enum",
233
+ "raw": "number | undefined",
234
+ "value": [
235
+ {
236
+ "value": "undefined"
237
+ },
238
+ {
239
+ "value": "number"
240
+ }
241
+ ]
242
+ }
243
+ },
244
+ "rowCount": {
245
+ "defaultValue": null,
246
+ "description": "Number of rows to be rendered in the grid.",
247
+ "name": "rowCount",
248
+ "declarations": [
249
+ {
250
+ "fileName": "react-window/lib/components/grid/types.ts",
251
+ "name": "TypeLiteral"
252
+ }
253
+ ],
254
+ "required": true,
255
+ "type": {
256
+ "name": "number"
257
+ }
258
+ },
259
+ "rowHeight": {
260
+ "defaultValue": null,
261
+ "description": "Row height (in pixels) or a function that returns a row height (in pixels) given an index and `cellProps`.",
262
+ "name": "rowHeight",
263
+ "declarations": [
264
+ {
265
+ "fileName": "react-window/lib/components/grid/types.ts",
266
+ "name": "TypeLiteral"
267
+ }
268
+ ],
269
+ "required": true,
270
+ "type": {
271
+ "name": "enum",
272
+ "raw": "number | ((index: number, cellProps: CellProps) => number)",
273
+ "value": [
274
+ {
275
+ "value": "number"
276
+ },
277
+ {
278
+ "value": "(index: number, cellProps: CellProps) => number",
279
+ "description": "",
280
+ "fullComment": "",
281
+ "tags": {}
282
+ }
283
+ ]
284
+ }
285
+ },
286
+ "style": {
287
+ "defaultValue": null,
288
+ "description": "Optional CSS properties.\nThe grid of cells will fill the height and width defined by this style.",
289
+ "name": "style",
290
+ "declarations": [
291
+ {
292
+ "fileName": "react-window/lib/components/grid/types.ts",
293
+ "name": "TypeLiteral"
294
+ }
295
+ ],
296
+ "required": false,
297
+ "type": {
298
+ "name": "enum",
299
+ "raw": "CSSProperties | undefined",
300
+ "value": [
301
+ {
302
+ "value": "undefined"
303
+ },
304
+ {
305
+ "value": "CSSProperties",
306
+ "description": "",
307
+ "fullComment": "",
308
+ "tags": {}
309
+ }
310
+ ]
311
+ }
312
+ }
313
+ }
314
+ }
@@ -0,0 +1,266 @@
1
+ {
2
+ "tags": {},
3
+ "filePath": "lib/components/list/List.tsx",
4
+ "description": "",
5
+ "displayName": "List",
6
+ "methods": [],
7
+ "props": {
8
+ "className": {
9
+ "defaultValue": null,
10
+ "description": "CSS class name.",
11
+ "name": "className",
12
+ "parent": {
13
+ "fileName": "react-window/node_modules/.pnpm/@types+react@19.1.8/node_modules/@types/react/index.d.ts",
14
+ "name": "HTMLAttributes"
15
+ },
16
+ "declarations": [
17
+ {
18
+ "fileName": "react-window/node_modules/.pnpm/@types+react@19.1.8/node_modules/@types/react/index.d.ts",
19
+ "name": "HTMLAttributes"
20
+ },
21
+ {
22
+ "fileName": "react-window/lib/components/list/types.ts",
23
+ "name": "TypeLiteral"
24
+ }
25
+ ],
26
+ "required": false,
27
+ "type": {
28
+ "name": "enum",
29
+ "raw": "string | undefined",
30
+ "value": [
31
+ {
32
+ "value": "undefined"
33
+ },
34
+ {
35
+ "value": "string"
36
+ }
37
+ ]
38
+ }
39
+ },
40
+ "style": {
41
+ "defaultValue": null,
42
+ "description": "Optional CSS properties.\nThe list of rows will fill the height defined by this style.",
43
+ "name": "style",
44
+ "parent": {
45
+ "fileName": "react-window/node_modules/.pnpm/@types+react@19.1.8/node_modules/@types/react/index.d.ts",
46
+ "name": "HTMLAttributes"
47
+ },
48
+ "declarations": [
49
+ {
50
+ "fileName": "react-window/node_modules/.pnpm/@types+react@19.1.8/node_modules/@types/react/index.d.ts",
51
+ "name": "HTMLAttributes"
52
+ },
53
+ {
54
+ "fileName": "react-window/lib/components/list/types.ts",
55
+ "name": "TypeLiteral"
56
+ }
57
+ ],
58
+ "required": false,
59
+ "type": {
60
+ "name": "enum",
61
+ "raw": "CSSProperties | undefined",
62
+ "value": [
63
+ {
64
+ "value": "undefined"
65
+ },
66
+ {
67
+ "value": "CSSProperties",
68
+ "description": "",
69
+ "fullComment": "",
70
+ "tags": {}
71
+ }
72
+ ]
73
+ }
74
+ },
75
+ "defaultHeight": {
76
+ "defaultValue": {
77
+ "value": "0"
78
+ },
79
+ "description": "Default height of list for initial render.\nThis value is important for server rendering.",
80
+ "name": "defaultHeight",
81
+ "declarations": [
82
+ {
83
+ "fileName": "react-window/lib/components/list/types.ts",
84
+ "name": "TypeLiteral"
85
+ }
86
+ ],
87
+ "required": false,
88
+ "type": {
89
+ "name": "enum",
90
+ "raw": "number | undefined",
91
+ "value": [
92
+ {
93
+ "value": "undefined"
94
+ },
95
+ {
96
+ "value": "number"
97
+ }
98
+ ]
99
+ }
100
+ },
101
+ "listRef": {
102
+ "defaultValue": null,
103
+ "description": "Ref used to interact with this component's imperative API.\n\nThis API has imperative methods for scrolling and a getter for the outermost DOM element.\n\n⚠️ The `useListRef` hook is exported for convenience use in TypeScript projects.",
104
+ "name": "listRef",
105
+ "declarations": [
106
+ {
107
+ "fileName": "react-window/lib/components/list/types.ts",
108
+ "name": "TypeLiteral"
109
+ }
110
+ ],
111
+ "required": false,
112
+ "type": {
113
+ "name": "enum",
114
+ "raw": "Ref<ListImperativeAPI> | undefined",
115
+ "value": [
116
+ {
117
+ "value": "undefined"
118
+ },
119
+ {
120
+ "value": "null"
121
+ },
122
+ {
123
+ "value": "(instance: ListImperativeAPI | null) => void | (() => VoidOrUndefinedOnly)",
124
+ "description": "",
125
+ "fullComment": "",
126
+ "tags": {}
127
+ },
128
+ {
129
+ "value": "RefObject<ListImperativeAPI | null>",
130
+ "description": "Created by {@link createRef}, or {@link useRef} when passed `null`.",
131
+ "fullComment": "Created by {@link createRef}, or {@link useRef} when passed `null`.\n@template T The type of the ref's value.\n@example ```tsx\nconst ref = createRef<HTMLDivElement>();\n\nref.current = document.createElement('div'); // Error\n```",
132
+ "tags": {
133
+ "template": "T The type of the ref's value.",
134
+ "example": "```tsx\nconst ref = createRef<HTMLDivElement>();\n\nref.current = document.createElement('div'); // Error\n```"
135
+ }
136
+ }
137
+ ]
138
+ }
139
+ },
140
+ "rowComponent": {
141
+ "defaultValue": null,
142
+ "description": "React component responsible for rendering a row.\n\nThis component will receive an `index` and `style` prop by default.\nAdditionally it will receive prop values passed to `rowProps`.\n\n⚠️ The prop types for this component are exported as `RowComponentProps`",
143
+ "name": "rowComponent",
144
+ "declarations": [
145
+ {
146
+ "fileName": "react-window/lib/components/list/types.ts",
147
+ "name": "TypeLiteral"
148
+ }
149
+ ],
150
+ "required": true,
151
+ "type": {
152
+ "name": "(props: { index: number; style: CSSProperties; } & RowProps) => ReactNode"
153
+ }
154
+ },
155
+ "rowCount": {
156
+ "defaultValue": null,
157
+ "description": "Number of items to be rendered in the list.",
158
+ "name": "rowCount",
159
+ "declarations": [
160
+ {
161
+ "fileName": "react-window/lib/components/list/types.ts",
162
+ "name": "TypeLiteral"
163
+ }
164
+ ],
165
+ "required": true,
166
+ "type": {
167
+ "name": "number"
168
+ }
169
+ },
170
+ "rowHeight": {
171
+ "defaultValue": null,
172
+ "description": "Row height (in pixels) or a function that returns a row height (in pixels) given its index and `rowProps` data.",
173
+ "name": "rowHeight",
174
+ "declarations": [
175
+ {
176
+ "fileName": "react-window/lib/components/list/types.ts",
177
+ "name": "TypeLiteral"
178
+ }
179
+ ],
180
+ "required": true,
181
+ "type": {
182
+ "name": "enum",
183
+ "raw": "number | ((index: number, rowProps: RowProps) => number)",
184
+ "value": [
185
+ {
186
+ "value": "number"
187
+ },
188
+ {
189
+ "value": "(index: number, rowProps: RowProps) => number",
190
+ "description": "",
191
+ "fullComment": "",
192
+ "tags": {}
193
+ }
194
+ ]
195
+ }
196
+ },
197
+ "rowProps": {
198
+ "defaultValue": null,
199
+ "description": "Additional props to be passed to the rowComponent.\n\n⚠️ This object must not contain either an `index` or `style` prop.",
200
+ "name": "rowProps",
201
+ "declarations": [
202
+ {
203
+ "fileName": "react-window/lib/components/list/types.ts",
204
+ "name": "TypeLiteral"
205
+ }
206
+ ],
207
+ "required": true,
208
+ "type": {
209
+ "name": "ExcludeForbiddenKeys<RowProps>"
210
+ }
211
+ },
212
+ "onRowsRendered": {
213
+ "defaultValue": null,
214
+ "description": "Callback notified when the range of visible rows changes.",
215
+ "name": "onRowsRendered",
216
+ "declarations": [
217
+ {
218
+ "fileName": "react-window/lib/components/list/types.ts",
219
+ "name": "TypeLiteral"
220
+ }
221
+ ],
222
+ "required": false,
223
+ "type": {
224
+ "name": "enum",
225
+ "raw": "((args: { startIndex: number; stopIndex: number; }) => void) | undefined",
226
+ "value": [
227
+ {
228
+ "value": "undefined"
229
+ },
230
+ {
231
+ "value": "(args: { startIndex: number; stopIndex: number; }) => void",
232
+ "description": "",
233
+ "fullComment": "",
234
+ "tags": {}
235
+ }
236
+ ]
237
+ }
238
+ },
239
+ "overscanCount": {
240
+ "defaultValue": {
241
+ "value": "3"
242
+ },
243
+ "description": "How many additional rows to render outside of the visible area.\nThis can reduce visual flickering near the edges of a list when scrolling.",
244
+ "name": "overscanCount",
245
+ "declarations": [
246
+ {
247
+ "fileName": "react-window/lib/components/list/types.ts",
248
+ "name": "TypeLiteral"
249
+ }
250
+ ],
251
+ "required": false,
252
+ "type": {
253
+ "name": "enum",
254
+ "raw": "number | undefined",
255
+ "value": [
256
+ {
257
+ "value": "undefined"
258
+ },
259
+ {
260
+ "value": "number"
261
+ }
262
+ ]
263
+ }
264
+ }
265
+ }
266
+ }
@@ -0,0 +1,30 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>react-window | render everything</title>
5
+
6
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
7
+
8
+ <meta charset="UTF-8" />
9
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
10
+ <meta
11
+ property="og:title"
12
+ content="react-window: React components for rendering large lists and grids"
13
+ />
14
+ <meta property="og:type" content="website" />
15
+ <meta property="og:url" content="https://react-window.vercel.app/" />
16
+ <!-- Update URL after v2 merge -->
17
+ <meta
18
+ property="og:image"
19
+ content="https://react-window-git-issues-821-brian-vaughns-projects.vercel.app/og.png"
20
+ />
21
+ <meta property="og:image:width" content="1500" />
22
+ <meta property="og:image:height" content="500" />
23
+ <script type="module" crossorigin src="/assets/index-fVOw1dKb.js"></script>
24
+ <link rel="stylesheet" crossorigin href="/assets/index-DlGpNu0r.css">
25
+ </head>
26
+ <body>
27
+ <div id="root"></div>
28
+
29
+ </body>
30
+ </html>
package/docs/og.html ADDED
@@ -0,0 +1,42 @@
1
+ <html>
2
+ <head>
3
+ <script src="https://cdn.tailwindcss.com"></script>
4
+
5
+ <style type="text/tailwindcss">
6
+ main {
7
+ width: 1200px;
8
+ height: 630px;
9
+ /*
10
+ background-image: linear-gradient(to right bottom, #34d399 0%, #0ea5e9 30%, #6e11b0 70%, #ec4899 100%);
11
+ background-image: linear-gradient(to right, #34d399 0%, #0ea5e9 50%, #ec4899 100%);
12
+ */
13
+ background-image: linear-gradient(to right, #0ea5e9 0%, #34d399 100%);
14
+ }
15
+ </style>
16
+
17
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script>
18
+
19
+ <script>
20
+ function savePageAsPng() {
21
+ const captureElement = document.getElementById("capture-area"); // Or document.body for the whole page
22
+
23
+ html2canvas(captureElement).then((canvas) => {
24
+ const imageData = canvas.toDataURL("image/png"); // Get data URL in PNG format
25
+ const link = document.createElement("a");
26
+ link.download = "webpage-screenshot.png"; // Set desired filename
27
+ link.href = imageData;
28
+ link.click(); // Programmatically click the link to trigger download
29
+ });
30
+ }
31
+ </script>
32
+ </head>
33
+ <body class="p-4">
34
+ <main
35
+ class="flex flex-col items-center justify-center gap-10"
36
+ id="capture-area"
37
+ >
38
+ <div class="text-8xl text-black font-bold">react-window</div>
39
+ <div class="text-7xl text-white">render everything</div>
40
+ </main>
41
+ </body>
42
+ </html>
package/docs/og.png ADDED
Binary file