@withl5e/l5e 0.1.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 (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +24 -0
  3. package/dist/action.js +10 -0
  4. package/dist/action.js.map +1 -0
  5. package/dist/client-D67hK4Yy.js +9 -0
  6. package/dist/client-D67hK4Yy.js.map +1 -0
  7. package/dist/entry-server-Ckh6zfgm.js +258 -0
  8. package/dist/entry-server-Ckh6zfgm.js.map +1 -0
  9. package/dist/entry-server.js +12 -0
  10. package/dist/entry-server.js.map +1 -0
  11. package/dist/generateMetadata-C5QsMS-H.js +144 -0
  12. package/dist/generateMetadata-C5QsMS-H.js.map +1 -0
  13. package/dist/index-BIt7MJT9.js +163 -0
  14. package/dist/index-BIt7MJT9.js.map +1 -0
  15. package/dist/index.js +49 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/island/client.js +5 -0
  18. package/dist/island/client.js.map +1 -0
  19. package/dist/island/runtime.js +98 -0
  20. package/dist/island/runtime.js.map +1 -0
  21. package/dist/island.js +39 -0
  22. package/dist/island.js.map +1 -0
  23. package/dist/jsx-runtime-C2Vw67N2.js +256 -0
  24. package/dist/jsx-runtime-C2Vw67N2.js.map +1 -0
  25. package/dist/jsx-runtime.js +26 -0
  26. package/dist/jsx-runtime.js.map +1 -0
  27. package/dist/middleware.js +9 -0
  28. package/dist/middleware.js.map +1 -0
  29. package/dist/seo.js +7 -0
  30. package/dist/seo.js.map +1 -0
  31. package/dist/server.js +489 -0
  32. package/dist/server.js.map +1 -0
  33. package/dist/swap/server.js +15 -0
  34. package/dist/swap/server.js.map +1 -0
  35. package/dist/swap.js +121 -0
  36. package/dist/swap.js.map +1 -0
  37. package/dist/tooltip.js +129 -0
  38. package/dist/tooltip.js.map +1 -0
  39. package/dist/vite-plugin.js +381 -0
  40. package/dist/vite-plugin.js.map +1 -0
  41. package/index.ts +1 -0
  42. package/package.json +129 -0
  43. package/src/action/define-action.ts +8 -0
  44. package/src/action/index.ts +2 -0
  45. package/src/action/types.ts +21 -0
  46. package/src/core/bundler.ts +275 -0
  47. package/src/core/const.ts +2 -0
  48. package/src/core/entry-server.d.ts +1 -0
  49. package/src/core/entry-server.ts +381 -0
  50. package/src/core/exceptions.ts +80 -0
  51. package/src/core/head-priority.ts +15 -0
  52. package/src/core/index.ts +40 -0
  53. package/src/core/jsx-runtime.ts +325 -0
  54. package/src/core/jsx-types.d.ts +548 -0
  55. package/src/core/render.ts +181 -0
  56. package/src/core/request.ts +31 -0
  57. package/src/core/server.ts +740 -0
  58. package/src/core/vite-plugin.ts +779 -0
  59. package/src/island/ClientIsland.ts +71 -0
  60. package/src/island/client.ts +3 -0
  61. package/src/island/index.ts +3 -0
  62. package/src/island/runtime.ts +149 -0
  63. package/src/island/strategy-registry.ts +10 -0
  64. package/src/island/types.ts +28 -0
  65. package/src/middleware/defineMiddleware.ts +5 -0
  66. package/src/middleware/index.ts +133 -0
  67. package/src/middleware/sequence.ts +105 -0
  68. package/src/middleware/types.ts +28 -0
  69. package/src/seo/generateMetadata.tsx +559 -0
  70. package/src/seo/index.ts +10 -0
  71. package/src/seo/mergeMetadata.ts +200 -0
  72. package/src/seo/types.ts +316 -0
  73. package/src/swap/SwapResponse.tsx +16 -0
  74. package/src/swap/create-swap.ts +121 -0
  75. package/src/swap/index.ts +8 -0
  76. package/src/swap/parse.ts +12 -0
  77. package/src/swap/server.ts +1 -0
  78. package/src/swap/swap.ts +57 -0
  79. package/src/swap/types.ts +47 -0
  80. package/src/swap/utils.ts +7 -0
  81. package/src/tooltip/index.ts +2 -0
  82. package/src/tooltip/tooltip-loader.ts +108 -0
  83. package/src/tooltip/tooltip-runtime.ts +173 -0
  84. package/types.d.ts +14 -0
@@ -0,0 +1,548 @@
1
+ // JSX typings for classic runtime using l5e
2
+ // Custom JSX runtime (not React) - uses HTML standard attributes
3
+ import type { JSXChild, RenderedNode } from './jsx-runtime';
4
+
5
+ // Override React types if present
6
+ declare global {
7
+ namespace JSX {
8
+ // The return type of JSX expressions - override React.Element
9
+ type Element = JSXChild | RenderedNode;
10
+
11
+ // Base HTML attributes (HTML standard, not React)
12
+ interface HTMLAttributes {
13
+ // Standard HTML attributes
14
+ id?: string;
15
+ /**
16
+ * HTML class attribute (string only, not boolean like React className)
17
+ * Use classList prop for conditional classes with object/array syntax
18
+ */
19
+ class?: string;
20
+ /**
21
+ * HTML style attribute (string only, not object like React)
22
+ * Format: "property: value; property2: value2;"
23
+ */
24
+ style?: string;
25
+ title?: string;
26
+ lang?: string;
27
+ dir?: 'ltr' | 'rtl' | 'auto';
28
+ hidden?: boolean | string;
29
+ tabindex?: number | string;
30
+ role?: string;
31
+ 'aria-label'?: string;
32
+ 'aria-labelledby'?: string;
33
+ 'aria-describedby'?: string;
34
+ 'aria-hidden'?: boolean | string;
35
+ 'aria-checked'?: boolean | string;
36
+ 'data-*'?: string;
37
+ [key: `data-${string}`]: string | undefined;
38
+ [key: `aria-${string}`]: string | boolean | undefined;
39
+ // Microdata attributes (HTML standard)
40
+ itemscope?: boolean | string;
41
+ itemtype?: string;
42
+ itemprop?: string;
43
+ // JSX-specific (for key prop in loops, not HTML standard but needed for JSX)
44
+ key?: string | number;
45
+ // l5e framework special props
46
+ /**
47
+ * Set HTML content directly without escaping (use with caution)
48
+ * This prop is filtered out during rendering and used to set innerHTML
49
+ */
50
+ setHtml?: string | number | unknown;
51
+ /**
52
+ * Set text content with HTML escaping
53
+ * This prop is filtered out during rendering and used to set textContent
54
+ */
55
+ setText?: string | number | unknown;
56
+ /**
57
+ * Set class names from array, object, or string
58
+ * - Array: ['class1', 'class2'] -> 'class1 class2'
59
+ * - Object: { class1: true, class2: false } -> 'class1'
60
+ * - String: 'class1 class2' -> 'class1 class2'
61
+ * This prop is filtered out during rendering and merged with 'class' prop
62
+ */
63
+ classList?: string | string[] | Record<string, boolean>;
64
+ /**
65
+ * Add cache tag for cache invalidation
66
+ * Can be string, array of strings, or object with boolean values
67
+ * This prop is filtered out during rendering and used for cache management
68
+ */
69
+ cacheTag?: string | string[] | Record<string, boolean>;
70
+ }
71
+
72
+ // Microdata attributes interface (HTML standard)
73
+ interface MicrodataAttributes {
74
+ itemscope?: boolean | string;
75
+ itemtype?: string;
76
+ itemprop?: string;
77
+ }
78
+
79
+ // Extended HTML attributes with microdata
80
+ interface HTMLAttributesWithMicrodata extends HTMLAttributes, MicrodataAttributes {}
81
+
82
+ // Form attributes
83
+ interface FormAttributes extends HTMLAttributes {
84
+ for?: string; // HTML standard, not htmlFor
85
+ name?: string;
86
+ value?: string | number;
87
+ disabled?: boolean | string;
88
+ readonly?: boolean | string;
89
+ required?: boolean | string;
90
+ checked?: boolean | string;
91
+ selected?: boolean | string;
92
+ multiple?: boolean | string;
93
+ autofocus?: boolean | string;
94
+ autocomplete?: string;
95
+ placeholder?: string;
96
+ pattern?: string;
97
+ min?: string | number;
98
+ max?: string | number;
99
+ step?: string | number;
100
+ minlength?: string;
101
+ maxlength?: string;
102
+ size?: number;
103
+ accept?: string;
104
+ capture?: string;
105
+ }
106
+
107
+ // Media attributes
108
+ interface MediaAttributes extends HTMLAttributes {
109
+ src?: string;
110
+ alt?: string;
111
+ width?: number | string;
112
+ height?: number | string;
113
+ poster?: string;
114
+ controls?: boolean | string;
115
+ autoplay?: boolean | string;
116
+ loop?: boolean | string;
117
+ muted?: boolean | string;
118
+ preload?: string;
119
+ playsinline?: boolean | string;
120
+ }
121
+
122
+ // Link attributes
123
+ interface AnchorAttributes extends HTMLAttributes, MicrodataAttributes {
124
+ href?: string;
125
+ target?: string;
126
+ rel?: string;
127
+ download?: string;
128
+ hreflang?: string;
129
+ type?: string;
130
+ ping?: string;
131
+ }
132
+
133
+ // Table attributes
134
+ interface TableCellAttributes extends HTMLAttributes {
135
+ colspan?: number; // HTML standard, not colSpan
136
+ rowspan?: number; // HTML standard, not rowSpan
137
+ headers?: string;
138
+ scope?: 'col' | 'row' | 'colgroup' | 'rowgroup';
139
+ abbr?: string;
140
+ }
141
+
142
+ // List attributes
143
+ interface ListAttributes extends HTMLAttributes {
144
+ type?: string;
145
+ start?: number;
146
+ reversed?: boolean | string;
147
+ }
148
+
149
+ // Input attributes
150
+ interface InputAttributes extends FormAttributes {
151
+ type?: string;
152
+ inputmode?: string;
153
+ }
154
+
155
+ // Textarea attributes
156
+ interface TextareaAttributes extends FormAttributes {
157
+ rows?: string;
158
+ cols?: string;
159
+ wrap?: string;
160
+ }
161
+
162
+ // Select attributes
163
+ interface SelectAttributes extends FormAttributes {
164
+ size?: number;
165
+ }
166
+
167
+ // Option attributes
168
+ interface OptionAttributes extends HTMLAttributes {
169
+ value?: string | number;
170
+ selected?: boolean | string;
171
+ disabled?: boolean | string;
172
+ label?: string;
173
+ }
174
+
175
+ // SVG attributes (HTML standard, not React)
176
+ interface SVGAttributes extends HTMLAttributes {
177
+ // Common SVG attributes
178
+ viewBox?: string;
179
+ width?: number | string;
180
+ height?: number | string;
181
+ x?: number | string;
182
+ y?: number | string;
183
+ preserveAspectRatio?: string;
184
+ xmlns?: string;
185
+ version?: string;
186
+ baseProfile?: string;
187
+ contentScriptType?: string;
188
+ contentStyleType?: string;
189
+
190
+ // Presentation attributes
191
+ fill?: string;
192
+ 'fill-opacity'?: number | string;
193
+ 'fill-rule'?: 'nonzero' | 'evenodd' | 'inherit';
194
+ stroke?: string;
195
+ 'stroke-width'?: number | string;
196
+ 'stroke-linecap'?: 'butt' | 'round' | 'square' | 'inherit';
197
+ 'stroke-linejoin'?: 'miter' | 'round' | 'bevel' | 'inherit';
198
+ 'stroke-miterlimit'?: number | string;
199
+ 'stroke-dasharray'?: string;
200
+ 'stroke-dashoffset'?: number | string;
201
+ 'stroke-opacity'?: number | string;
202
+ opacity?: number | string;
203
+ transform?: string;
204
+ 'transform-origin'?: string;
205
+
206
+ // Path-specific attributes
207
+ d?: string;
208
+ pathLength?: number | string;
209
+
210
+ // Circle-specific attributes
211
+ cx?: number | string;
212
+ cy?: number | string;
213
+ r?: number | string;
214
+
215
+ // Ellipse-specific attributes
216
+ rx?: number | string;
217
+ ry?: number | string;
218
+
219
+ // Rectangle-specific attributes
220
+ x1?: number | string;
221
+ y1?: number | string;
222
+ x2?: number | string;
223
+ y2?: number | string;
224
+
225
+ // Line-specific attributes
226
+ points?: string;
227
+
228
+ // Text-specific attributes
229
+ dx?: number | string;
230
+ dy?: number | string;
231
+ 'text-anchor'?: 'start' | 'middle' | 'end' | 'inherit';
232
+ 'dominant-baseline'?: string;
233
+ 'alignment-baseline'?: string;
234
+ 'font-family'?: string;
235
+ 'font-size'?: number | string;
236
+ 'font-weight'?: number | string | 'normal' | 'bold' | 'bolder' | 'lighter';
237
+ 'font-style'?: 'normal' | 'italic' | 'oblique' | 'inherit';
238
+ 'text-decoration'?: string;
239
+ 'letter-spacing'?: number | string;
240
+ 'word-spacing'?: number | string;
241
+ 'text-transform'?: string;
242
+
243
+ // Gradient attributes
244
+ offset?: number | string;
245
+ 'stop-color'?: string;
246
+ 'stop-opacity'?: number | string;
247
+ x1?: number | string;
248
+ y1?: number | string;
249
+ x2?: number | string;
250
+ y2?: number | string;
251
+ gradientUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
252
+ gradientTransform?: string;
253
+ spreadMethod?: 'pad' | 'reflect' | 'repeat';
254
+ fx?: number | string;
255
+ fy?: number | string;
256
+ fr?: number | string;
257
+ cx?: number | string;
258
+ cy?: number | string;
259
+ r?: number | string;
260
+
261
+ // Pattern attributes
262
+ patternUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
263
+ patternContentUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
264
+ patternTransform?: string;
265
+
266
+ // Clip and mask attributes
267
+ clipPath?: string;
268
+ 'clip-rule'?: 'nonzero' | 'evenodd' | 'inherit';
269
+ mask?: string;
270
+ 'mask-type'?: 'luminance' | 'alpha';
271
+
272
+ // Filter attributes
273
+ filter?: string;
274
+ 'flood-color'?: string;
275
+ 'flood-opacity'?: number | string;
276
+ 'lighting-color'?: string;
277
+
278
+ // Marker attributes
279
+ markerStart?: string;
280
+ markerMid?: string;
281
+ markerEnd?: string;
282
+ 'marker-units'?: 'strokeWidth' | 'userSpaceOnUse';
283
+ 'marker-width'?: number | string;
284
+ 'marker-height'?: number | string;
285
+ orient?: string | 'auto' | 'auto-start-reverse';
286
+
287
+ // Use element attributes
288
+ href?: string;
289
+ 'xlink:href'?: string;
290
+
291
+ // Image element attributes
292
+ src?: string;
293
+ 'xlink:href'?: string;
294
+ preserveAspectRatio?: string;
295
+
296
+ // Animation attributes
297
+ attributeName?: string;
298
+ attributeType?: 'CSS' | 'XML' | 'auto';
299
+ begin?: string;
300
+ dur?: string;
301
+ end?: string;
302
+ repeatCount?: number | string | 'indefinite';
303
+ repeatDur?: string | 'indefinite';
304
+ restart?: 'always' | 'whenNotActive' | 'never';
305
+ fill?: 'remove' | 'freeze';
306
+ calcMode?: 'discrete' | 'linear' | 'paced' | 'spline';
307
+ values?: string;
308
+ keyTimes?: string;
309
+ keySplines?: string;
310
+ from?: string | number;
311
+ to?: string | number;
312
+ by?: string | number;
313
+ type?: string;
314
+ additive?: 'replace' | 'sum';
315
+ accumulate?: 'none' | 'sum';
316
+
317
+ // Foreign object attributes
318
+ requiredExtensions?: string;
319
+ requiredFeatures?: string;
320
+ systemLanguage?: string;
321
+
322
+ // Allow any SVG-specific attributes
323
+ [key: string]: any;
324
+ }
325
+
326
+ // Intrinsic elements with proper HTML attributes
327
+ interface IntrinsicElements {
328
+ // Text content
329
+ div: HTMLAttributes;
330
+ span: HTMLAttributesWithMicrodata;
331
+ p: HTMLAttributes;
332
+ h1: HTMLAttributes;
333
+ h2: HTMLAttributes;
334
+ h3: HTMLAttributes;
335
+ h4: HTMLAttributes;
336
+ h5: HTMLAttributes;
337
+ h6: HTMLAttributes;
338
+ strong: HTMLAttributes;
339
+ em: HTMLAttributes;
340
+ b: HTMLAttributes;
341
+ i: HTMLAttributes;
342
+ u: HTMLAttributes;
343
+ s: HTMLAttributes;
344
+ small: HTMLAttributes;
345
+ sub: HTMLAttributes;
346
+ sup: HTMLAttributes;
347
+ code: HTMLAttributes;
348
+ pre: HTMLAttributes;
349
+ blockquote: HTMLAttributes;
350
+ q: HTMLAttributes;
351
+ cite: HTMLAttributes;
352
+ abbr: HTMLAttributes;
353
+ mark: HTMLAttributes;
354
+ del: HTMLAttributes;
355
+ ins: HTMLAttributes;
356
+ kbd: HTMLAttributes;
357
+ samp: HTMLAttributes;
358
+ var: HTMLAttributes;
359
+ time: HTMLAttributes & { datetime?: string };
360
+ address: HTMLAttributes;
361
+
362
+ // Lists
363
+ ul: ListAttributes;
364
+ ol: ListAttributes & MicrodataAttributes;
365
+ li: HTMLAttributesWithMicrodata & { value?: string | number }; // li can have value attribute
366
+ dl: HTMLAttributes;
367
+ dt: HTMLAttributes;
368
+ dd: HTMLAttributes;
369
+
370
+ // Links
371
+ a: AnchorAttributes;
372
+
373
+ // Images and media
374
+ img: MediaAttributes & {
375
+ loading?: 'lazy' | 'eager';
376
+ decoding?: 'async' | 'sync' | 'auto';
377
+ key?: string | number;
378
+ };
379
+ video: MediaAttributes;
380
+ audio: MediaAttributes;
381
+ source: HTMLAttributes & {
382
+ src?: string;
383
+ type?: string;
384
+ srcset?: string;
385
+ media?: string;
386
+ key?: string | number;
387
+ };
388
+ track: HTMLAttributes & {
389
+ kind?: string;
390
+ src?: string;
391
+ srclang?: string;
392
+ label?: string;
393
+ default?: boolean | string;
394
+ };
395
+ picture: HTMLAttributes;
396
+ canvas: HTMLAttributes & { width?: number | string; height?: number | string };
397
+
398
+ // Tables
399
+ table: HTMLAttributes;
400
+ caption: HTMLAttributes;
401
+ thead: HTMLAttributes;
402
+ tbody: HTMLAttributes;
403
+ tfoot: HTMLAttributes;
404
+ tr: HTMLAttributes;
405
+ th: TableCellAttributes;
406
+ td: TableCellAttributes;
407
+ colgroup: HTMLAttributes;
408
+ col: HTMLAttributes & { span?: number };
409
+
410
+ // Forms
411
+ form: HTMLAttributes & {
412
+ action?: string;
413
+ method?: string;
414
+ enctype?: string;
415
+ novalidate?: boolean | string;
416
+ };
417
+ input: InputAttributes;
418
+ textarea: TextareaAttributes;
419
+ button: FormAttributes & { type?: 'button' | 'submit' | 'reset' };
420
+ select: SelectAttributes;
421
+ option: OptionAttributes;
422
+ optgroup: HTMLAttributes & { label?: string; disabled?: boolean | string };
423
+ label: FormAttributes;
424
+ fieldset: HTMLAttributes & { disabled?: boolean | string; form?: string; name?: string };
425
+ legend: HTMLAttributes;
426
+ datalist: HTMLAttributes;
427
+ output: HTMLAttributes & { for?: string; form?: string; name?: string };
428
+
429
+ // Interactive
430
+ details: HTMLAttributes & { open?: boolean | string };
431
+ summary: HTMLAttributes;
432
+ dialog: HTMLAttributes & { open?: boolean | string };
433
+
434
+ // Semantic
435
+ header: HTMLAttributes;
436
+ footer: HTMLAttributes;
437
+ nav: HTMLAttributes;
438
+ main: HTMLAttributes;
439
+ article: HTMLAttributes;
440
+ section: HTMLAttributes;
441
+ aside: HTMLAttributes;
442
+ figure: HTMLAttributes;
443
+ figcaption: HTMLAttributes;
444
+
445
+ // Other
446
+ hr: HTMLAttributes;
447
+ br: HTMLAttributes;
448
+ wbr: HTMLAttributes;
449
+ meta: HTMLAttributes & {
450
+ name?: string;
451
+ content?: string;
452
+ charset?: string;
453
+ 'http-equiv'?: string;
454
+ property?: string;
455
+ };
456
+ link: HTMLAttributes & {
457
+ rel?: string;
458
+ href?: string;
459
+ type?: string;
460
+ media?: string;
461
+ sizes?: string;
462
+ crossorigin?: string;
463
+ };
464
+ style: HTMLAttributes & { type?: string; media?: string };
465
+ script: HTMLAttributes & {
466
+ src?: string;
467
+ type?: string;
468
+ async?: boolean | string;
469
+ defer?: boolean | string;
470
+ crossorigin?: string;
471
+ integrity?: string;
472
+ };
473
+ noscript: HTMLAttributes;
474
+ iframe: HTMLAttributes & {
475
+ src?: string;
476
+ srcdoc?: string;
477
+ name?: string;
478
+ sandbox?: string;
479
+ allow?: string;
480
+ allowfullscreen?: boolean | string;
481
+ width?: number | string;
482
+ height?: number | string;
483
+ };
484
+ embed: HTMLAttributes & {
485
+ src?: string;
486
+ type?: string;
487
+ width?: number | string;
488
+ height?: number | string;
489
+ };
490
+ object: HTMLAttributes & {
491
+ data?: string;
492
+ type?: string;
493
+ width?: number | string;
494
+ height?: number | string;
495
+ form?: string;
496
+ name?: string;
497
+ };
498
+ param: HTMLAttributes & { name?: string; value?: string };
499
+ area: HTMLAttributes & {
500
+ alt?: string;
501
+ coords?: string;
502
+ shape?: string;
503
+ href?: string;
504
+ target?: string;
505
+ rel?: string;
506
+ download?: string;
507
+ };
508
+ map: HTMLAttributes & { name?: string };
509
+ svg: SVGAttributes;
510
+ path: SVGAttributes;
511
+ circle: SVGAttributes;
512
+ rect: SVGAttributes;
513
+ line: SVGAttributes;
514
+ polyline: SVGAttributes;
515
+ polygon: SVGAttributes;
516
+ ellipse: SVGAttributes;
517
+ g: SVGAttributes;
518
+ defs: SVGAttributes;
519
+ use: SVGAttributes;
520
+ symbol: SVGAttributes;
521
+ mask: SVGAttributes;
522
+ clipPath: SVGAttributes;
523
+ pattern: SVGAttributes;
524
+ marker: SVGAttributes;
525
+ linearGradient: SVGAttributes;
526
+ radialGradient: SVGAttributes;
527
+ stop: SVGAttributes;
528
+ text: SVGAttributes;
529
+ tspan: SVGAttributes;
530
+ textPath: SVGAttributes;
531
+ tref: SVGAttributes;
532
+ foreignObject: SVGAttributes;
533
+ image: SVGAttributes;
534
+ switch: SVGAttributes;
535
+ view: SVGAttributes;
536
+ animate: SVGAttributes;
537
+ animateTransform: SVGAttributes;
538
+ animateMotion: SVGAttributes;
539
+ mpath: SVGAttributes;
540
+ set: SVGAttributes;
541
+
542
+ // Allow any other element with HTML attributes
543
+ [elemName: string]: HTMLAttributes | any;
544
+ }
545
+ }
546
+ }
547
+
548
+ export {};