firefly-compiler 0.4.78 → 0.4.80

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 (67) hide show
  1. package/compiler/Builder.ff +2 -2
  2. package/compiler/Compiler.ff +1 -1
  3. package/compiler/Inference.ff +2 -1
  4. package/compiler/JsEmitter.ff +11 -17
  5. package/compiler/Main.ff +3 -3
  6. package/compiler/ModuleCache.ff +1 -1
  7. package/compiler/Tokenizer.ff +1 -1
  8. package/compiler/Unification.ff +1 -1
  9. package/core/.firefly/include/package-lock.json +267 -97
  10. package/core/.firefly/include/package.json +1 -1
  11. package/core/Float.ff +25 -0
  12. package/core/Lock.ff +1 -1
  13. package/core/NodeSystem.ff +1 -1
  14. package/core/Stream.ff +9 -9
  15. package/core/Task.ff +3 -3
  16. package/core/Try.ff +25 -4
  17. package/experimental/s3/S3TestAuthorizationHeader.ff +2 -1
  18. package/experimental/s3/S3TestPut.ff +2 -1
  19. package/fireflysite/CommunityOverview.ff +2 -2
  20. package/fireflysite/CountingButtonDemo.ff +1 -1
  21. package/fireflysite/DocumentParser.ff +332 -0
  22. package/fireflysite/ExamplesOverview.ff +11 -2
  23. package/fireflysite/FrontPage.ff +344 -0
  24. package/fireflysite/{GuideIntroduction.ff → GettingStarted.ff} +1 -25
  25. package/fireflysite/Guide.ff +239 -104
  26. package/fireflysite/Main.ff +100 -51
  27. package/fireflysite/MatchingPasswordsDemo.ff +13 -17
  28. package/fireflysite/PackagesOverview.ff +1 -1
  29. package/fireflysite/PostgresqlDemo.ff +34 -0
  30. package/fireflysite/ReferenceAll.ff +19 -0
  31. package/fireflysite/ReferenceIntroduction.ff +11 -0
  32. package/fireflysite/Styles.ff +358 -97
  33. package/fireflysite/Test.ff +38 -0
  34. package/fireflysite/assets/font/NotoSansMono-Regular.ttf +0 -0
  35. package/fireflysite/assets/font/NunitoSans-VariableFont_YTLC,opsz,wdth,wght.ttf +0 -0
  36. package/fireflysite/assets/image/autocomplete-small.png +0 -0
  37. package/fireflysite/assets/image/autocomplete.png +0 -0
  38. package/fireflysite/assets/image/edit-time-error.png +0 -0
  39. package/fireflysite/assets/image/firefly-logo-yellow.png +0 -0
  40. package/fireflysite/assets/markdown/reference/BaseTypes.md +209 -0
  41. package/fireflysite/assets/markdown/reference/FunctionsAndMethods.md +208 -0
  42. package/fireflysite/assets/markdown/reference/ModulesAndPackages.md +168 -0
  43. package/fireflysite/assets/markdown/reference/PatternMatching.md +224 -0
  44. package/fireflysite/assets/markdown/reference/StatementsAndExpressions.md +86 -0
  45. package/fireflysite/assets/markdown/reference/TraitsAndInstances.md +100 -0
  46. package/fireflysite/assets/markdown/reference/UserDefinedTypes.md +184 -0
  47. package/fireflysite/assets/markdown/scratch/ControlFlow.md +136 -0
  48. package/fireflysite/assets/markdown/scratch/Toc.md +41 -0
  49. package/lsp/Handler.ff +4 -4
  50. package/lsp/LanguageServer.ff +5 -5
  51. package/lux/Lux.ff +9 -9
  52. package/lux/Main2.ff +1 -1
  53. package/output/js/ff/compiler/Builder.mjs +4 -4
  54. package/output/js/ff/compiler/Inference.mjs +2 -2
  55. package/output/js/ff/compiler/JsEmitter.mjs +18 -72
  56. package/output/js/ff/compiler/Main.mjs +4 -4
  57. package/output/js/ff/compiler/ModuleCache.mjs +4 -4
  58. package/output/js/ff/core/Float.mjs +50 -0
  59. package/output/js/ff/core/NodeSystem.mjs +4 -4
  60. package/output/js/ff/core/Task.mjs +8 -8
  61. package/output/js/ff/core/Try.mjs +98 -4
  62. package/package.json +1 -1
  63. package/postgresql/Pg.ff +1 -1
  64. package/vscode/package.json +15 -1
  65. package/vscode/syntaxes/firefly-markdown-injection.json +45 -0
  66. package/webserver/.firefly/include/package-lock.json +7 -1
  67. /package/fireflysite/{firefly-logo-notext.png → assets/image/firefly-logo-notext.png} +0 -0
@@ -1,19 +1,19 @@
1
1
  import Css from ff:lux
2
2
 
3
- mobileMediaQuery = "@media only screen and (max-width: 600px)"
4
- desktopMediaQuery = "@media only screen and (min-width: 1500px)"
3
+ mobileMediaQuery: String = "@media only screen and (max-width: 840px)"
4
+ mobileOrTabletMediaQuery: String = "@media only screen and (max-width: 1140px)"
5
5
 
6
6
  pageCss: CssClass = CssClass(
7
7
  [
8
8
  Css.display("flex")
9
9
  Css.flexDirection("column")
10
10
  Css.minHeight("100vh")
11
- Css.fontFamily("'Helvetica Neue', Helvetica, Arial, sans-serif")
11
+ Css.fontFamily("'Firefly Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif")
12
12
  Css.textRendering("optimizeLegibility")
13
13
  ]
14
14
  [
15
15
  CssNest("*:focus-visible", [
16
- Css.outline("2px solid #4fc1ff")
16
+ Css.outline("2px solid #ecc45e")
17
17
  Css.outlineOffset("2px")
18
18
  ], [])
19
19
  ]
@@ -22,12 +22,13 @@ pageCss: CssClass = CssClass(
22
22
 
23
23
  whiteLinkCss: CssClass = CssClass(
24
24
  [
25
- Css.color("#dadada")
25
+ Css.color("#000000")
26
26
  Css.textDecoration("none")
27
+ Css.fontWeight("600")
27
28
  ]
28
29
  [
29
30
  CssNest("&:hover", [Css.textDecoration("underline")], [])
30
- CssNest("&[aria-current='page']", [Css.color("#4ec9b0")], [])
31
+ CssNest("&[aria-current='page']", [Css.color("#000000")], [])
31
32
  ]
32
33
  []
33
34
  )
@@ -43,80 +44,173 @@ greenLinkCss: CssClass = CssClass(
43
44
  []
44
45
  )
45
46
 
46
- topbarCss: CssClass = CssClass(
47
+ searchInputCss: CssClass = CssClass(
47
48
  [
48
- Css.display("flex")
49
- Css.gap("30px")
50
- Css.paddingLeft("20px")
51
- Css.paddingRight("30px")
52
- Css.lineHeight("49px")
53
- Css.fontSize("17px")
54
- Css.backgroundColor("#34373d")
55
- Css.borderBottom("1px solid #2b2d30")
49
+ Css.appearance("none")
56
50
  Css.boxSizing("border-box")
51
+ Css.marginLeft("20px")
52
+ Css.marginRight("25px")
53
+ Css.width("calc(100% - 20px - 25px)")
54
+ Css.display("flex")
55
+ Css.border("none")
56
+ Css.borderBottom("2px solid #000000")
57
+ Css.backgroundColor("#ffffff50")
58
+ Css.color("#000000")
59
+ Css.height("34px")
60
+ Css.fontSize("16px")
61
+ Css.borderRadius("0")
62
+ Css.paddingLeft("5px")
63
+ Css.paddingRight("5px")
64
+ Css.paddingTop("0")
65
+ Css.paddingBottom("0")
66
+ Css.marginBottom("20px")
57
67
  ]
58
68
  [
59
- CssNest(mobileMediaQuery, [
60
- Css.paddingLeft("20px")
61
- Css.paddingRight("20px")
62
- Css.gap("10px")
63
- Css.fontSize("15px")
64
- Css.overflowX("auto")
65
- Css.justifyContent("space-between")
69
+ CssNest("&::placeholder", [
70
+ Css.color("#000000")
71
+ Css.opacity("unset")
72
+ Css.fontSize("16px")
73
+ ], [])
74
+ CssNest("&:focus::placeholder", [
75
+ Css.opacity("0")
66
76
  ], [])
67
77
  ]
68
78
  []
69
79
  )
70
80
 
71
- topbarFireflyCss: CssClass = CssClass(
81
+ guideCss: CssClass = CssClass(
72
82
  [
73
- Css.marginRight("auto")
74
- Css.fontSize("19px")
83
+ Css.display("flex")
84
+ Css.minHeight("100vh")
75
85
  ]
76
- [
77
- CssNest(mobileMediaQuery, [
78
- Css.fontSize("15px")
86
+ []
87
+ []
88
+ )
89
+
90
+ guideTopbarCss: CssClass = CssClass(
91
+ [
92
+ Css.display("none")
93
+ Css.justifyContent("space-between")
94
+ Css.alignItems("center")
95
+ Css.backgroundColor("#ecc45e")
96
+ Css.color("#000000")
97
+ Css.position("fixed")
98
+ Css.top("0")
99
+ Css.left("0")
100
+ Css.right("0")
101
+ Css.height("76px")
102
+ ]
103
+ [
104
+ CssNest(mobileOrTabletMediaQuery, [
105
+ Css.display("flex")
79
106
  ], [])
80
107
  ]
81
108
  []
82
109
  )
83
110
 
84
- searchInputCss: CssClass = CssClass(
111
+ guideTopbarLogoCss: CssClass = CssClass(
112
+ [
113
+ Css.display("flex")
114
+ Css.gap("20px")
115
+ Css.alignItems("center")
116
+ Css.justifyContent("center")
117
+ Css.fontSize("25px")
118
+ Css.letterSpacing("5px")
119
+ Css.textTransform("uppercase")
120
+ Css.color("inherit")
121
+ Css.textDecoration("none")
122
+ Css.height("70px")
123
+ Css.paddingLeft("20px")
124
+ ]
85
125
  [
126
+ CssNest("&>img", [Css.width("70px")], [])
127
+ ]
128
+ []
129
+ )
130
+
131
+ guideTopbarButtonCss: CssClass = CssClass(
132
+ [
133
+ Css.display("none")
86
134
  Css.appearance("none")
135
+ Css.border("none")
136
+ Css.outline("none")
137
+ Css.background("""url('data:image/svg+xml,<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(%23clip0_788_122)"><rect x="4" y="9" width="25" height="2" rx="1" fill="%23000000"/><rect x="4" y="17" width="25" height="2" rx="1" fill="%23000000"/><rect x="4" y="25" width="25" height="2" rx="1" fill="%23000000"/></g><defs><clipPath id="clip0_788_122"><rect width="50" height="50" fill="white"/></clipPath></defs></svg>') no-repeat center""")
138
+ Css.backgroundSize("60px 60px")
139
+ Css.backgroundPosition("20px 16px")
140
+ Css.fontSize("20px")
141
+ Css.cursor("pointer")
142
+ Css.webkitTapHighlightColor("transparent")
143
+ Css.padding("0")
144
+ Css.margin("0")
145
+ Css.height("76px")
146
+ Css.width("76px")
147
+ Css.marginLeft("auto")
148
+ ]
149
+ [
150
+ CssNest(mobileOrTabletMediaQuery, [
151
+ Css.display("block")
152
+ ], [])
153
+ ]
154
+ []
155
+ )
156
+
157
+ guideSidebarButtonCss: CssClass = CssClass(
158
+ [
159
+ Css.position("fixed")
160
+ Css.bottom("-68px")
161
+ Css.right("-65px")
162
+ Css.width("70px")
163
+ Css.height("70px")
164
+ Css.padding("0")
87
165
  Css.boxSizing("border-box")
88
- Css.marginLeft("15px")
89
- Css.marginRight("25px")
90
- Css.width("calc(100% - 15px - 25px)")
91
- Css.display("flex")
166
+ Css.background("""url('data:image/svg+xml,<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(%23clip0_788_122)"><rect x="4" y="9" width="30" height="3" rx="1" fill="%23ecc45e"/><rect x="4" y="17" width="21" height="3" rx="1" fill="%23ecc45e"/><rect x="4" y="25" width="13" height="3" rx="1" fill="%23ecc45e"/></g><defs><clipPath id="clip0_788_122"><rect width="50" height="50" fill="white"/></clipPath></defs></svg>') no-repeat center""")
167
+ Css.backgroundSize("70px 70px")
168
+ Css.appearance("none")
92
169
  Css.border("none")
93
- Css.backgroundColor("#34373d")
94
- Css.color("#dadada")
95
- Css.height("34px")
96
- Css.fontSize("15px")
97
- Css.borderRadius("17px")
98
- Css.paddingLeft("15px")
99
- Css.paddingRight("15px")
100
- Css.paddingTop("0")
101
- Css.paddingBottom("0")
102
- Css.marginBottom("20px")
170
+ Css.outline("none")
171
+ Css.transformOrigin("top left")
172
+ Css.transform("rotate(180deg) scale(0, 0)")
173
+ Css.transition("100ms transform")
103
174
  ]
104
175
  [
105
- CssNest("&::placeholder", [
106
- Css.color("#dadada")
107
- Css.opacity("0.7")
176
+ CssNest(mobileOrTabletMediaQuery, [
177
+ Css.display("block")
178
+ Css.transform("rotate(180deg) scale(1, 1)")
179
+ ], [])
180
+ ]
181
+ []
182
+ )
183
+
184
+ guideSidebarButtonOpenCss: CssClass = CssClass(
185
+ []
186
+ [
187
+ CssNest(mobileOrTabletMediaQuery, [
188
+ Css.transform("rotate(180deg) scale(0, 1)")
108
189
  ], [])
109
190
  ]
110
191
  []
111
192
  )
112
193
 
113
- guideCss: CssClass = CssClass(
194
+ guideSidebarBackdropCss: CssClass = CssClass(
114
195
  [
115
- Css.display("flex")
196
+ Css.display("none")
197
+ Css.position("fixed")
198
+ Css.top("0")
199
+ Css.bottom("0px")
200
+ Css.left("0")
201
+ Css.right("0px")
202
+ Css.backgroundColor("rgba(20, 20, 0, 0.6)")
203
+ Css.touchAction("none")
116
204
  ]
205
+ []
206
+ []
207
+ )
208
+
209
+ guideSidebarBackdropOpenCss: CssClass = CssClass(
210
+ []
117
211
  [
118
- CssNest(mobileMediaQuery, [
119
- Css.flexDirection("column")
212
+ CssNest(mobileOrTabletMediaQuery, [
213
+ Css.display("block")
120
214
  ], [])
121
215
  ]
122
216
  []
@@ -124,79 +218,150 @@ guideCss: CssClass = CssClass(
124
218
 
125
219
  guideSidebarCss: CssClass = CssClass(
126
220
  [
221
+ Css.position("fixed")
222
+ Css.top("0")
223
+ Css.bottom("0")
224
+ Css.left("0")
127
225
  Css.width("300px")
128
- Css.minHeight("calc(100vh - 50px)")
129
- Css.paddingTop("20px")
130
- Css.backgroundColor("#2b2d30")
131
226
  Css.boxSizing("border-box")
227
+ Css.paddingTop("10px")
228
+ Css.backgroundColor("#ecc45e")
229
+ Css.overflowY("auto")
230
+ Css.transition("200ms transform")
231
+ Css.scrollbarWidth("thin")
232
+ Css.scrollbarColor("#333333 #ecc45e")
132
233
  ]
133
234
  [
134
- CssNest(mobileMediaQuery, [
235
+ CssNest(mobileOrTabletMediaQuery, [
135
236
  Css.order("2")
136
- Css.width("100%")
237
+ Css.width("calc(100% - 50px)")
238
+ Css.maxWidth("300px")
239
+ Css.minHeight("auto")
137
240
  Css.height("auto")
138
241
  Css.paddingTop("20px")
139
242
  Css.paddingBottom("20px")
243
+ Css.transform("translateX(-110%)")
244
+ Css.outline("1px solid rgba(0, 0, 0, 0.15)")
245
+ ], [])
246
+ CssNest("& *:focus-visible", [
247
+ Css.outline("2px solid #000000")
248
+ Css.outlineOffset("2px")
249
+ ], [])
250
+ ]
251
+ []
252
+ )
253
+
254
+ guideSidebarOpenCss: CssClass = CssClass(
255
+ []
256
+ [
257
+ CssNest(mobileOrTabletMediaQuery, [
258
+ Css.transform("translateX(0)")
140
259
  ], [])
141
260
  ]
142
261
  []
143
262
  )
144
263
 
145
- guideSidebarUlCss: CssClass = CssClass(
264
+ guideSidebarLogoCss: CssClass = CssClass(
265
+ [
266
+ Css.display("flex")
267
+ Css.gap("20px")
268
+ Css.alignItems("center")
269
+ Css.justifyContent("center")
270
+ Css.fontSize("30px")
271
+ Css.letterSpacing("5px")
272
+ Css.textTransform("uppercase")
273
+ Css.color("inherit")
274
+ Css.textDecoration("none")
275
+ Css.height("100px")
276
+ ]
277
+ [
278
+ CssNest("&>img", [Css.width("100px")], [])
279
+ CssNest("&>div", [Css.width("145px")], [])
280
+ CssNest(mobileOrTabletMediaQuery, [
281
+ Css.display("none")
282
+ ], [])
283
+ ]
284
+ []
285
+ )
286
+
287
+ guideSidebarUl1Css: CssClass = CssClass(
146
288
  [
147
289
  Css.display("flex")
148
290
  Css.flexDirection("column")
149
- Css.gap("25px")
291
+ Css.gap("35px")
150
292
  Css.listStyle("none")
151
293
  Css.margin("0px")
152
294
  Css.padding("20px")
295
+ Css.opacity("0.85")
296
+ Css.transition("100ms opacity")
297
+ ]
298
+ [
299
+ CssNest(mobileOrTabletMediaQuery, [
300
+ Css.opacity("1.00")
301
+ ], [])
302
+ CssNest("&:hover", [
303
+ Css.opacity("1.00")
304
+ ], [])
153
305
  ]
154
- []
155
306
  []
156
307
  )
157
308
 
158
- guideSidebarLiCss: CssClass = CssClass(
309
+ guideSidebarLi1Css: CssClass = CssClass(
159
310
  [
160
311
  Css.listStyle("none")
312
+ Css.fontSize("17px")
161
313
  ]
162
314
  []
163
315
  []
164
316
  )
165
317
 
166
- guideMainCss: CssClass = CssClass(
318
+ guideSidebarUl2Css: CssClass = CssClass(
167
319
  [
168
- Css.flex("1")
169
320
  Css.display("flex")
170
- Css.justifyContent("center")
171
- Css.padding("20px")
172
- Css.paddingTop("70px")
173
- Css.position("relative")
174
- Css.boxSizing("content-box")
321
+ Css.flexDirection("column")
322
+ Css.gap("15px")
323
+ Css.listStyle("none")
324
+ Css.margin("0px")
325
+ Css.paddingLeft("15px")
326
+ Css.paddingTop("20px")
327
+ Css.paddingRight("0")
328
+ Css.paddingBottom("5px")
329
+ Css.fontSize("17px")
175
330
  ]
331
+ []
332
+ []
333
+ )
334
+
335
+ guideSidebarLi2Css: CssClass = CssClass(
176
336
  [
177
- CssNest(mobileMediaQuery, [
178
- Css.paddingTop("30px")
179
- ], [])
180
- CssNest(desktopMediaQuery, [
181
- Css.paddingRight("200px")
182
- ], [])
337
+ Css.listStyle("none")
183
338
  ]
184
339
  []
340
+ []
185
341
  )
186
342
 
187
- guideSoleDocumentCss: CssClass = CssClass(
343
+ guideMainCss: CssClass = CssClass(
188
344
  [
189
345
  Css.flex("1")
190
346
  Css.display("flex")
191
347
  Css.justifyContent("center")
192
- Css.padding("20px")
193
- Css.paddingTop("70px")
348
+ Css.marginLeft("300px")
349
+ Css.paddingLeft("20px")
350
+ Css.paddingRight("calc(max(20px, 25vw - 300px))")
351
+ Css.paddingTop("80px")
352
+ Css.paddingBottom("80px")
194
353
  Css.position("relative")
195
354
  Css.boxSizing("content-box")
355
+ Css.color("#333333")
356
+ Css.fontWeight("500")
196
357
  ]
197
358
  [
198
- CssNest(mobileMediaQuery, [
199
- Css.paddingTop("30px")
359
+ CssNest(mobileOrTabletMediaQuery, [
360
+ Css.marginLeft("0")
361
+ Css.paddingLeft("20px")
362
+ Css.paddingRight("20px")
363
+ Css.paddingTop("120px")
364
+ Css.paddingBottom("70px")
200
365
  ], [])
201
366
  ]
202
367
  []
@@ -209,10 +374,64 @@ guideDocumentCss: CssClass = CssClass(
209
374
  Css.fontSize("17px")
210
375
  Css.lineHeight("1.7")
211
376
  ]
377
+ []
378
+ []
379
+ )
380
+
381
+ guideSplitCss: CssClass = CssClass(
382
+ [
383
+ Css.display("flex")
384
+ Css.gap("30px")
385
+ Css.justifyContent("space-between")
386
+ Css.alignItems("stretch")
387
+ Css.marginTop("170px")
388
+ Css.marginBottom("170px")
389
+ ]
212
390
  [
391
+ CssNest("&>div:first-child", [
392
+ Css.width("calc(345px - 15px)")
393
+ Css.paddingTop("10px")
394
+ Css.paddingBottom("15px")
395
+ ], [])
396
+ CssNest("&>div:last-child", [
397
+ Css.width("calc(455px - 15px)")
398
+ ], [])
399
+ CssNest("&>div>:first-child", [
400
+ Css.marginTop("0")
401
+ ], [])
402
+ CssNest("&>div>:last-child", [
403
+ Css.marginBottom("0")
404
+ ], [])
405
+ CssNest("&>div>pre", [
406
+ Css.overflowX("hidden")
407
+ Css.minHeight("100%")
408
+ ], [])
213
409
  CssNest(mobileMediaQuery, [
214
- Css.fontSize("16px")
215
- Css.lineHeight("1.6")
410
+ Css.flexDirection("column")
411
+ ], [
412
+ CssNest("&>div:first-child", [
413
+ Css.width("auto")
414
+ ], [])
415
+ CssNest("&>div:last-child", [
416
+ Css.width("auto")
417
+ ], [])
418
+ CssNest("&>div>pre", [
419
+ Css.overflowX("auto")
420
+ ], [])
421
+ ])
422
+ ]
423
+ []
424
+ )
425
+
426
+ guideSplitHeadingCss: CssClass = CssClass(
427
+ [
428
+ Css.fontSize("23px")
429
+ Css.fontWeight("600")
430
+ Css.margin("0")
431
+ ]
432
+ [
433
+ CssNest(mobileMediaQuery, [
434
+ Css.fontSize("21px")
216
435
  ], [])
217
436
  ]
218
437
  []
@@ -221,11 +440,12 @@ guideDocumentCss: CssClass = CssClass(
221
440
  guideH1Css: CssClass = CssClass(
222
441
  [
223
442
  Css.fontSize("32px")
443
+ Css.fontWeight("600")
224
444
  Css.marginTop("0px")
225
445
  ]
226
446
  [
227
447
  CssNest(mobileMediaQuery, [
228
- Css.fontSize("30px")
448
+ Css.fontSize("26px")
229
449
  ], [])
230
450
  ]
231
451
  []
@@ -234,11 +454,12 @@ guideH1Css: CssClass = CssClass(
234
454
  guideH2Css: CssClass = CssClass(
235
455
  [
236
456
  Css.fontSize("28px")
237
- Css.marginTop("40px")
457
+ Css.fontWeight("600")
458
+ Css.marginTop("70px")
238
459
  ]
239
460
  [
240
461
  CssNest(mobileMediaQuery, [
241
- Css.fontSize("25px")
462
+ Css.fontSize("23px")
242
463
  ], [])
243
464
  ]
244
465
  []
@@ -246,14 +467,21 @@ guideH2Css: CssClass = CssClass(
246
467
 
247
468
  guideCodeCss: CssClass = CssClass(
248
469
  [
249
- Css.fontFamily("Consolas, 'Liberation Mono', Menlo, Courier, monospace")
250
- Css.fontSize("17px")
251
- Css.lineHeight("1.4")
252
- Css.color("#4ec9b0")
470
+ Css.fontFamily("'Firefly Mono', monospace")
471
+ Css.fontSize("15px")
472
+ Css.lineHeight("1.3")
473
+ Css.color("#000000")
474
+ Css.whiteSpace("pre-wrap")
475
+ Css.wordBreak("break-all")
253
476
  ]
254
477
  [
255
478
  CssNest(mobileMediaQuery, [
256
- Css.fontSize("16px")
479
+ Css.fontSize("14px")
480
+ Css.lineHeight("1.4")
481
+ ], [])
482
+ CssNest("pre>&", [
483
+ Css.color("#4ec9b0")
484
+ Css.whiteSpace("pre")
257
485
  ], [])
258
486
  ]
259
487
  []
@@ -261,11 +489,10 @@ guideCodeCss: CssClass = CssClass(
261
489
 
262
490
  guideCodeBlockCss: CssClass = CssClass(
263
491
  [
264
- Css.lineHeight("1.4")
265
- Css.backgroundColor("#2b2d30")
266
- Css.padding("12px 18px")
267
- Css.paddingBottom("14px")
268
- Css.border("1px solid #232323")
492
+ Css.lineHeight("1.3")
493
+ Css.background("#1f1f1f")
494
+ Css.padding("20px 25px")
495
+ Css.margin("30px 0")
269
496
  Css.borderRadius("5px")
270
497
  Css.boxSizing("border-box")
271
498
  Css.overflowX("auto")
@@ -273,13 +500,14 @@ guideCodeBlockCss: CssClass = CssClass(
273
500
  ]
274
501
  [
275
502
  CssNest(mobileMediaQuery, [
276
- Css.maxWidth("calc(100% + 40px)")
503
+ Css.maxWidth("calc(100vw)")
277
504
  Css.marginLeft("-20px")
278
505
  Css.marginRight("-20px")
279
506
  Css.borderRadius("0")
280
507
  Css.borderLeft("none")
281
508
  Css.borderRight("none")
282
- Css.padding("12px 20px")
509
+ Css.padding("20px 20px")
510
+ Css.lineHeight("1.4")
283
511
  ], [])
284
512
  ]
285
513
  []
@@ -287,16 +515,49 @@ guideCodeBlockCss: CssClass = CssClass(
287
515
 
288
516
  guideLinkCss: CssClass = CssClass(
289
517
  [
290
- Css.color("#4fc1ff")
518
+ Css.color("#000000")
519
+ Css.textDecoration("2px #ecc45e underline")
520
+ Css.fontWeight("600")
521
+ ]
522
+ [
523
+ CssNest("&:hover", [
524
+ Css.textDecoration("2px #ecc45e underline")
525
+ ], [])
526
+ ]
527
+ []
528
+ )
529
+
530
+ guideNextButtonCss: CssClass = CssClass(
531
+ [
532
+ Css.marginTop("100px")
533
+ ]
534
+ []
535
+ []
536
+ )
537
+
538
+ guideButtonCss: CssClass = CssClass(
539
+ [
540
+ Css.padding("15px 30px")
541
+ Css.borderRadius("5px")
542
+ Css.background("#ecc45e")
543
+ Css.color("#000000")
544
+ Css.border("2px solid black")
291
545
  Css.textDecoration("none")
546
+ Css.fontSize("17px")
547
+ Css.fontWeight("600")
292
548
  ]
293
549
  [
294
- CssNest("&:hover", [Css.textDecoration("underline")], [])
550
+ CssNest(mobileMediaQuery, [
551
+ Css.fontSize("15px")
552
+ ], [])
553
+ CssNest("&::after", [
554
+ Css.content("' →'")
555
+ ], [])
295
556
  ]
296
557
  []
297
558
  )
298
559
 
299
- codeCommentCss: CssClass = CssClass([Css.color("#6a9955")], [], [])
560
+ codeCommentCss: CssClass = CssClass([Css.color("#757c8a")], [], [])
300
561
  codeStringCss: CssClass = CssClass([Css.color("#ce9178")], [], [])
301
562
  codeNumberCss: CssClass = CssClass([Css.color("#b5cea8")], [], [])
302
563
  codeKeywordCss: CssClass = CssClass([Css.color("#569cd6")], [], [])
@@ -0,0 +1,38 @@
1
+ import WebServer from ff:webserver // This is required to run the file.
2
+
3
+ nodeMain(system: NodeSystem) {
4
+ let f = {x, y => Pair(x, y)}
5
+ let g = {Pair(_, _)}
6
+ Log.show(f(1, 2))
7
+ Log.show(g(1, 2))
8
+ Log.show(factorial(5))
9
+ Log.show(factorialTail(5))
10
+ Log.show([1, 2].map({x => x + x}))
11
+
12
+ let x = {a, b => Pair(a, b)}(1, 2)
13
+ let f0: () => Unit = {42}
14
+ let p = {Pair(1, _)}
15
+ let p2 = {Pair(_, _)}
16
+
17
+ let increment: Int => Int = {i => i + 1}
18
+ let plus: (Int, Int) => Int = {a, b => a + b}
19
+
20
+ Log.show([1, 2].map(increment))
21
+
22
+ }
23
+
24
+ factorial(n: Int): Int {
25
+ if(n == 0) {
26
+ 1
27
+ } else {
28
+ n * factorial(n - 1)
29
+ }
30
+ }
31
+
32
+ factorialTail(n: Int, acc: Int = 1): Int {
33
+ if(n == 0) {
34
+ acc
35
+ } else {
36
+ tailcall factorialTail(n - 1, n * acc)
37
+ }
38
+ }