@wrnrlr/prelude 0.0.1 → 0.1.2

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/index.html DELETED
@@ -1,230 +0,0 @@
1
- <!DOCTYPE html>
2
- <head>
3
- <title>Counter</title>
4
- <link href="https://unpkg.com/prismjs@1.29.0/themes/prism.css" rel="stylesheet" />
5
- <script src="https://unpkg.com/prismjs@1.29.0/components/prism-core.min.js"></script>
6
- <script src="https://unpkg.com/prismjs@1.29.0/plugins/autoloader/prism-autoloader.min.js"></script>
7
- </head>
8
-
9
- <nav style="display: flex; justify-content: space-between; padding: 0.25rem 0.5rem; align-items: center;">
10
- <div>
11
- <img src="./banner.svg" alt="PreludeJS Logo" style="height: 3rem;">
12
- </div>
13
- <div style="display: flex; gap: 0.75rem;">
14
- <a href="/docs/index.html">Get Started</a>
15
- <a href="/docs/modules.html">API</a>
16
- <a href="#examples">Examples</a>
17
- <a href="https://github.com/wrnrlr/prelude">Github</a>
18
- </div>
19
- </nav>
20
-
21
- <section class="jumbo">
22
- <img class="logo" src="./logo.svg" alt="PreludeJS Logo" style="width: 300px">
23
- <div style="width: 900px">
24
- <h1>A <em>signal</em> based frontend library with fine-grained reactivity</h1>
25
- <h2>Prelude lets you develop web application in a familiar component-based functional style</h2>
26
- <p></p>
27
- <div style="display: flex; gap: 0.75rem;">
28
- <a href="/docs/index.html">Learn More</a>
29
- <a href="/docs/modules.html">API Reference</a>
30
- </div>
31
- </div>
32
- </section>
33
-
34
- <section>
35
- <div style="width: 900px">
36
- <h1></h1>
37
- <p>Prelude works directly in the browser using just vanilla JavaScript
38
- but for more complex applications it can also be writen in TypeScript and used together with a bundler like Vite.</p>
39
- <pre><code class="language-js">
40
- import {h, signal, render} from 'https://esm.sh/wrnrlr/prelude'
41
-
42
- const count = signal(1)
43
-
44
- function Counter(props) {
45
- const onClick = e => props.count(i => i+1)
46
- return [
47
- props.value,
48
- h('button', {value:props.value, onClick})
49
- ]
50
- }
51
-
52
- render(h(Counter, {value:signal})), document.body)
53
- </code></pre>
54
- <p>Try out this example for yourself <a href="http://codepen.io">here!</a></p>
55
- </div>
56
- </section>
57
-
58
- <section>
59
- <div class="wide wrapper">
60
- <h3>Signals with two-way data-binding</h3>
61
- <h2></h2>
62
- <p>Signals are nothing more then a function that allows you to both get and set a value.</p>
63
- <pre><code class="language-javascript">
64
- const a = signal(1)
65
- a() // 1
66
- a(2) // 2
67
- </code></pre>
68
- <p>Signals can be combined with other functions </p>
69
- <h3>Hyperscript: A DSL for HTML</h3>
70
- <p>Simple tags components</p>
71
- <pre><code class="language-javascript">
72
- h('h1', 'Hello World!')
73
- </code></pre>
74
- <p>Higher order components</p>
75
- <pre><code class="language-javascript">
76
- function Greet(props) {
77
- return h('h1', ['Hello', props.children])
78
- }
79
-
80
- h(Greet, 'Bob')
81
- </code></pre>
82
- </div>
83
- </section>
84
-
85
- <section id="examples" style="padding: 2rem; display: flex; flex-direction: column; justify-content: center;">
86
- <div style="width: 900px">
87
- <h1>Check out our examples yourself</h1>
88
- <h2>See how easy it is to developer a variaty of different web applications with Prelude.</h2>
89
- </div>
90
- <ul style="display: flex; gap: 1.5rem; list-style: none">
91
- <li>
92
- <a href="./example/counter.html" class="card">
93
- <div class="title">Counter</div>
94
- <iframe class="example" title="Counter" src="./example/counter.html" scrolling="no"></iframe>
95
- </a>
96
- </li>
97
- <li>
98
- <a href="./example/todo.html" class="card">
99
- <div class="title">Todo</div>
100
- <iframe class="example" title="Todo" src="./example/todo.html" scrolling="no"></iframe>
101
- </a>
102
- </li>
103
- <li>
104
- <a href="./example/form.html" class="card">
105
- <div class="title">Form</div>
106
- <iframe class="example" title="Form" src="./example/form.html" scrolling="no"></iframe>
107
- </a>
108
- </li>
109
- </ul>
110
- <div style="width: 900px">
111
- <p><a href="">All Examples</a></p>
112
- </div>
113
- </section>
114
-
115
- <section>
116
- <div style="width: 900px">
117
- <h1>Welcome to our community!</h1>
118
- <h2>Free and Open Source Software</h2>
119
- <ul>
120
- <li>Only 10kb minified js, small bundle size for a lot of power</li>
121
- <li>Typescript support</li>
122
- <li>Fully documented</li>
123
- <li>Extensivaly tested</li>
124
- <li>No seperate build process requires, works directly in the browser</li>
125
- </ul>
126
- </div>
127
- </section>
128
-
129
- <section style="display:flex; flex-direction:row; padding: 2rem; background-color: white">
130
- <div style="display: flex; flex-direction:column; flex-grow: 2; align-self: stretch; justify-content: space-between">
131
- <div style="display: flex; gap: 0.75rem">
132
- <a href="/">Home</a>
133
- <a href="/docs/index.html">Quick Guide</a>
134
- <a href="/docs/modules.html">API Reference</a>
135
- </div>
136
- <div style="display: flex; gap: 0.75rem">
137
- <a href="https://github.com/wrnrlr/prelude">Github</a>
138
- <a href="https://npm.com/@wrnrlr/prelude">NPM</a>
139
- <a href="https://jsr.io/@wrnrlr/prelude">JSR</a>
140
- </div>
141
- <div>Some Right Reserved &copy; 2024</div>
142
- </div>
143
- <img class="emblem" src="./logo.svg" style="width: 100px">
144
- </section>
145
-
146
- <style >
147
- @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+Warang+Citi&display=swap');
148
- @import url('/presets.css')
149
-
150
- html {
151
- font-size: 20px;
152
- font-family: "Noto Sans Warang Citi", sans-serif;
153
- font-weight: 400;
154
- font-style: normal;
155
- margin: 0;
156
- display: flex;
157
- width: 100%;
158
- height: 100%
159
- }
160
-
161
- body {
162
- margin: 0;
163
- flex-grow: 2;
164
- width: 100%;
165
- height: 100%;
166
- }
167
-
168
- a { color: dodgerblue; }
169
- a:visited { color: dodgerblue; }
170
-
171
- h1 { font-size: 2.5rem; color: var(--slate-900); font-weight: bolder }
172
- h2 { font-size: 2rem; color: var(--slate-700); line-height: 1.5 }
173
-
174
- section {
175
- padding: 2rem;
176
- display: flex;
177
- align-items: center;
178
- justify-content: center;
179
- flex-direction: column;
180
- }
181
- section:nth-child(even) { background-color: var(--neutral-100); }
182
- section:nth-child(odd) { background-color: var(--neutral-200); }
183
-
184
- section > .wrapper { width: 700px }
185
- section > .wide.wrapper { width: 900px }
186
-
187
- /* Top Navigation */
188
-
189
- iframe.example {
190
- zoom: 1.0;
191
- width: 100%;
192
- height:100%;
193
- border: none;
194
- overflow: hidden;
195
- background-color: var(--neutral-50)
196
- }
197
-
198
- /* iframe.example > a {
199
- position: absolute;
200
- top: 0;
201
- left: 0;
202
- width: 100%;
203
- height: 100%;
204
- background: rgba(0.3, 1, 0, 0.0);
205
- cursor: pointer;
206
- } */
207
-
208
- .card {
209
- width: 20rem;
210
- height: 16rem;
211
- display: flex;
212
- flex-direction: column;
213
- /* border: 1px solid var(--neutral-400); */
214
- /* border-radius: 0.5em 0.5em 0 0; */
215
- }
216
-
217
- .card > .title {
218
- font-weight: bold;
219
- color: var(--gray-700);
220
- padding: 0.5em;
221
- background-color: var(--gray-300);
222
- border-radius: 0.5em 0.5em 0 0;
223
- /* border-bottom: 1px solid var(--gray-400); */
224
- }
225
-
226
- a.card {
227
- text-decoration: none;
228
- }
229
-
230
- </style>
package/presets.css DELETED
@@ -1,284 +0,0 @@
1
- @font-face {font-family:BasicIcons;src:url(/static/fa.woff2) format('woff2');}
2
- *, ::before, ::after {box-sizing: border-box; margin: 0; min-width: 0}
3
- html {
4
- height: 100%;
5
- hanging-punctuation: first last;
6
- font-family:system-ui,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji';
7
- line-height: 1.15; -webkit-text-size-adjust: 100%;
8
- -moz-tab-size: 4; tab-size: 4;
9
- font-size: 18px;
10
- color: var(--neutral-950);
11
- background-color: var(--neutral-50);
12
- }
13
- body {height: 100%}
14
- hr {height: 0;color: inherit;}
15
- abbr[title] {text-decoration: underline dotted}
16
- b,strong {font-weight: bolder}
17
- code,kbd,samp,pre {font-family:ui-monospace,SFMono-Regular,Consolas,'Liberation Mono',Menlo,monospace;font-size: 1em;}
18
- small {font-size: 80%;}
19
- sub,sup {font-size: 75%;line-height: 0;position: relative;vertical-align: baseline;}
20
- sub {bottom: -0.25em}
21
- sup {top: -0.5em}
22
- table {border-collapse: collapse; text-indent: 0; border-color: inherit;}
23
- button,input,optgroup,select,textarea {font-family:inherit;font-size:100%;line-height:1.15;}
24
- button, select {text-transform: none}
25
- button, [type='button'], [type='reset'], [type='submit'] {-webkit-appearance: button}
26
- ::-moz-focus-inner {border-style: none;padding: 0;}
27
- :-moz-focusring {outline: 1px dotted ButtonText;}
28
- :-moz-ui-invalid {box-shadow: none;}
29
- legend {padding: 0}
30
- progress {vertical-align: baseline}
31
- ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {height: auto;margin: 0}
32
- [type='search'] {-webkit-appearance: textfield; outline-offset: -2px;}
33
- ::-webkit-search-decoration {-webkit-appearance: none;}
34
- ::-webkit-file-upload-button {-webkit-appearance: button;font: inherit;}
35
-
36
- h1,h2,h3,h4,h5,h6 {text-wrap:balance}
37
- p {max-width:62ch;text-wrap:pretty}
38
- dialog {padding:0;border-width:0}
39
- button,input {padding:0;border-width:0;background-color:transparent}
40
- input:focus,button:focus {outline:none}
41
- summary {display: list-item;}
42
-
43
- :root {
44
- --slate-50: #f8fafc;
45
- --slate-100: #f1f5f9;
46
- --slate-200: #e2e8f0;
47
- --slate-300: #cbd5e1;
48
- --slate-400: #94a3b8;
49
- --slate-500: #64748b;
50
- --slate-600: #475569;
51
- --slate-700: #334155;
52
- --slate-800: #1e293b;
53
- --slate-900: #0f172a;
54
- --slate-950: #020617;
55
-
56
- --gray-50: #f9fafb;
57
- --gray-100: #f3f4f6;
58
- --gray-200: #e5e7eb;
59
- --gray-300: #d1d5db;
60
- --gray-400: #9ca3af;
61
- --gray-500: #6b7280;
62
- --gray-600: #4b5563;
63
- --gray-700: #374151;
64
- --gray-800: #1f2937;
65
- --gray-900: #111827;
66
- --gray-950: #030712;
67
-
68
- --red-50: #f9fafb;
69
- --red-100: #f3f4f6;
70
- --red-200: #e5e7eb;
71
- --red-300: #d1d5db;
72
- --red-400: #9ca3af;
73
- --red-500: #6b7280;
74
- --red-600: #4b5563;
75
- --red-700: #374151;
76
- --red-800: #1f2937;
77
- --red-900: #111827;
78
- --red-950: #030712;
79
-
80
- /* red */
81
- --red-50: #fef2f2;
82
- --red-100: #fee2e2;
83
- --red-200: #fecaca;
84
- --red-300: #fca5a5;
85
- --red-400: #f87171;
86
- --red-500: #ef4444;
87
- --red-600: #dc2626;
88
- --red-700: #b91c1c;
89
- --red-800: #991b1b;
90
- --red-900: #7f1d1d;
91
- --red-950: #450a0a;
92
-
93
- --orange-50: #fff7ed;
94
- --orange-100: #ffedd5;
95
- --orange-200: #fed7aa;
96
- --orange-300: #fdba74;
97
- --orange-400: #fb923c;
98
- --orange-500: #f97316;
99
- --orange-600: #ea580c;
100
- --orange-700: #c2410c;
101
- --orange-800: #9a3412;
102
- --orange-900: #7c2d12;
103
- --orange-950: #431407;
104
-
105
- --yellow-50: #fefce8;
106
- --yellow-100: #fef9c3;
107
- --yellow-200: #fef08a;
108
- --yellow-300: #fde047;
109
- --yellow-400: #facc15;
110
- --yellow-500: #eab308;
111
- --yellow-600: #ca8a04;
112
- --yellow-700: #a16207;
113
- --yellow-800: #854d0e;
114
- --yellow-900: #713f12;
115
- --yellow-950: #422006;
116
-
117
- --lime-50: #f7fee7;
118
- --lime-100: #ecfccb;
119
- --lime-200: #d9f99d;
120
- --lime-300: #bef264;
121
- --lime-400: #a3e635;
122
- --lime-500: #84cc16;
123
- --lime-600: #65a30d;
124
- --lime-700: #4d7c0f;
125
- --lime-800: #3f6212;
126
- --lime-900: #365314;
127
- --lime-950: #1a2e05;
128
-
129
- --green-50: #f0fdf4;
130
- --green-100: #dcfce7;
131
- --green-200: #bbf7d0;
132
- --green-300: #86efac;
133
- --green-400: #4ade80;
134
- --green-500: #22c55e;
135
- --green-600: #16a34a;
136
- --green-700: #15803d;
137
- --green-800: #166534;
138
- --green-900: #14532d;
139
- --green-950: #052e16;
140
-
141
- --emrald-50: #ecfdf5;
142
- --emrald-100: #d1fae5;
143
- --emrald-200: #a7f3d0;
144
- --emrald-300: #6ee7b7;
145
- --emrald-400: #34d399;
146
- --emrald-500: #10b981;
147
- --emrald-600: #059669;
148
- --emrald-700: #047857;
149
- --emrald-800: #065f46;
150
- --emrald-900: #064e3b;
151
- --emrald-950: #022c22;
152
-
153
- --teal-50: #f0fdfa;
154
- --teal-100: #ccfbf1;
155
- --teal-200: #99f6e4;
156
- --teal-300: #5eead4;
157
- --teal-400: #2dd4bf;
158
- --teal-500: #14b8a6;
159
- --teal-600: #0d9488;
160
- --teal-700: #0f766e;
161
- --teal-800: #115e59;
162
- --teal-900: #134e4a;
163
- --teal-950: #042f2e;
164
-
165
- --cyan-50: #ecfeff;
166
- --cyan-100: #cffafe;
167
- --cyan-200: #a5f3fc;
168
- --cyan-300: #67e8f9;
169
- --cyan-400: #22d3ee;
170
- --cyan-500: #06b6d4;
171
- --cyan-600: #0891b2;
172
- --cyan-700: #0e7490;
173
- --cyan-800: #155e75;
174
- --cyan-900: #164e63;
175
- --cyan-950: #083344;
176
-
177
- --sky-50: #f0f9ff;
178
- --sky-100: #e0f2fe;
179
- --sky-200: #bae6fd;
180
- --sky-300: #7dd3fc;
181
- --sky-400: #38bdf8;
182
- --sky-500: #0ea5e9;
183
- --sky-600: #0284c7;
184
- --sky-700: #0369a1;
185
- --sky-800: #075985;
186
- --sky-900: #0c4a6e;
187
- --sky-950: #082f49;
188
-
189
- --blue-50: #eff6ff;
190
- --blue-100: #dbeafe;
191
- --blue-200: #bfdbfe;
192
- --blue-300: #93c5fd;
193
- --blue-400: #60a5fa;
194
- --blue-500: #3b82f6;
195
- --blue-600: #2563eb;
196
- --blue-700: #1d4ed8;
197
- --blue-800: #1e40af;
198
- --blue-900: #1e3a8a;
199
- --blue-950: #172554;
200
-
201
- --indigo-50: #eef2ff;
202
- --indigo-100: #e0e7ff;
203
- --indigo-200: #c7d2fe;
204
- --indigo-300: #a5b4fc;
205
- --indigo-400: #818cf8;
206
- --indigo-500: #6366f1;
207
- --indigo-600: #4f46e5;
208
- --indigo-700: #4338ca;
209
- --indigo-800: #3730a3;
210
- --indigo-900: #312e81;
211
- --indigo-950: #1e1b4b;
212
-
213
- --violet-50: #f5f3ff;
214
- --violet-100: #ede9fe;
215
- --violet-200: #ddd6fe;
216
- --violet-300: #c4b5fd;
217
- --violet-400: #a78bfa;
218
- --violet-500: #8b5cf6;
219
- --violet-600: #7c3aed;
220
- --violet-700: #6d28d9;
221
- --violet-800: #5b21b6;
222
- --violet-900: #4c1d95;
223
- --violet-950: #2e1065;
224
-
225
- --purple-50: #faf5ff;
226
- --purple-100: #f3e8ff;
227
- --purple-200: #e9d5ff;
228
- --purple-300: #d8b4fe;
229
- --purple-400: #c084fc;
230
- --purple-500: #a855f7;
231
- --purple-600: #9333ea;
232
- --purple-700: #7e22ce;
233
- --purple-800: #6b21a8;
234
- --purple-900: #581c87;
235
- --purple-950: #3b0764;
236
-
237
- --fuchsia-50: #fdf4ff;
238
- --fuchsia-100: #fae8ff;
239
- --fuchsia-200: #f5d0fe;
240
- --fuchsia-300: #f0abfc;
241
- --fuchsia-400: #e879f9;
242
- --fuchsia-500: #d946ef;
243
- --fuchsia-600: #c026d3;
244
- --fuchsia-700: #a21caf;
245
- --fuchsia-800: #86198f;
246
- --fuchsia-900: #701a75;
247
- --fuchsia-950: #4a044e;
248
-
249
- --pink-50: #fdf2f8;
250
- --pink-100: #fce7f3;
251
- --pink-200: #fbcfe8;
252
- --pink-300: #f9a8d4;
253
- --pink-400: #f472b6;
254
- --pink-500: #ec4899;
255
- --pink-600: #db2777;
256
- --pink-700: #be185d;
257
- --pink-800: #9d174d;
258
- --pink-900: #831843;
259
- --pink-950: #500724;
260
-
261
- --rose-50: #fff1f2;
262
- --rose-100: #ffe4e6;
263
- --rose-200: #fecdd3;
264
- --rose-300: #fda4af;
265
- --rose-400: #fb7185;
266
- --rose-500: #f43f5e;
267
- --rose-600: #e11d48;
268
- --rose-700: #be123c;
269
- --rose-800: #9f1239;
270
- --rose-900: #881337;
271
- --rose-950: #4c0519;
272
-
273
- --neutral-50: #fafafa;
274
- --neutral-100: #f5f5f5;
275
- --neutral-200: #e5e5e5;
276
- --neutral-300: #d4d4d4;
277
- --neutral-400: #a3a3a3;
278
- --neutral-500: #737373;
279
- --neutral-600: #525252;
280
- --neutral-700: #404040;
281
- --neutral-800: #262626;
282
- --neutral-900: #171717;
283
- --neutral-950: #0a0a0a;
284
- }
package/public/logo.svg DELETED
@@ -1,5 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!-- Generated by Pixelmator Pro 3.2.3 -->
3
- <svg width="709" height="709" viewBox="0 0 709 709" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
4
- <path id="Rectangle" fill="none" stroke="#444444" stroke-width="40" stroke-linecap="round" stroke-linejoin="round" d="M 76 617 L 631 617 L 631 94 C 631 94 26 450 358 450 C 682 450 76 94 76 94 L 76 617 Z"/>
5
- </svg>
package/test/runtime.js DELETED
@@ -1,7 +0,0 @@
1
- import {runtime} from '../src/runtime.ts'
2
- import {signal,root} from '../src/reactive.ts'
3
- import {assertEquals} from '@std/assert'
4
-
5
- // const {window} = new JSDOM('<!DOCTYPE html>')
6
- // const {document,MouseEvent} = window
7
- // const r = runtime(window)
package/typedoc.jsonc DELETED
@@ -1,31 +0,0 @@
1
- {
2
- "name": "prelude",
3
- "hostedBaseUrl": "https://wrnrlr.github.io/prelude",
4
- "useHostedBaseUrlForAbsoluteLinks": false,
5
- "out":"./public/docs/",
6
- "compilerOptions": {
7
- "strict": true,
8
- "allowJs": true,
9
- "checkJs": false,
10
- "noImplicitThis": false,
11
- "allowImportingTsExtensions": true,
12
- "lib": [],
13
- "target": ["esnext"],
14
- "downlevelIteration": true
15
- },
16
- "entryPoints": ["./src/mod.ts"],
17
- "navigation": {
18
- "includeCategories": true,
19
- "includeGroups": false,
20
- "includeFolders": true
21
- },
22
- "visibilityFilters": {
23
- "protected": false,
24
- "private": false,
25
- "inherited": true,
26
- "external": false,
27
- "@alpha": false,
28
- "@beta": false
29
- },
30
- "categorizeByGroup": true
31
- }
File without changes