lecodes-sdk 1.2.0 → 2.0.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.
Files changed (260) hide show
  1. package/README.md +5 -2
  2. package/dist/editor.d.ts +12 -0
  3. package/dist/global.d.ts +4 -8
  4. package/dist/host.d.ts +2 -3
  5. package/dist/types/animate/tween/Animation.d.ts +0 -3
  6. package/dist/types/animate/tween/animateValue.d.ts +4 -2
  7. package/dist/types/animate/tween/easing.d.ts +8 -0
  8. package/dist/types/animate/tween/spec.d.ts +15 -7
  9. package/dist/types/audio/audio.d.ts +2 -1
  10. package/dist/types/canvas/Canvas.d.ts +40 -108
  11. package/dist/types/canvas/gen/cssColor.d.ts +17 -0
  12. package/dist/types/canvas/gen/recorder.d.ts +118 -0
  13. package/dist/types/canvas/gen/spec.d.ts +144 -0
  14. package/dist/types/core/color.d.ts +3 -1
  15. package/dist/types/core/pins.d.ts +18 -0
  16. package/dist/types/g2/Node2D.d.ts +5 -8
  17. package/dist/types/g2/Scene2D.d.ts +6 -2
  18. package/dist/types/gl/Foliage.d.ts +30 -7
  19. package/dist/types/gl/Light.d.ts +8 -0
  20. package/dist/types/gl/Lightmap.d.ts +13 -2
  21. package/dist/types/gl/Material.d.ts +17 -3
  22. package/dist/types/gl/Model.d.ts +6 -2
  23. package/dist/types/gl/Node.d.ts +3 -6
  24. package/dist/types/gl/Scene.d.ts +41 -13
  25. package/dist/types/gl/Texture.d.ts +1 -1
  26. package/dist/types/gl/animation/Locomotion.d.ts +8 -1
  27. package/dist/types/inject.d.ts +11 -11
  28. package/dist/types/inject.editor.d.ts +1 -0
  29. package/dist/types/net/core.d.ts +7 -0
  30. package/dist/types/plugin.d.ts +76 -0
  31. package/dist/types/plugins/gen/camera/sdk/camera.d.ts +24 -0
  32. package/dist/types/plugins/gen/camera/sdk/camera.gen.d.ts +25 -0
  33. package/dist/types/plugins/{geolocation.d.ts → gen/geolocation/sdk/geolocation.d.ts} +2 -20
  34. package/dist/types/plugins/gen/geolocation/sdk/geolocation.gen.d.ts +31 -0
  35. package/dist/types/plugins/{map.d.ts → gen/map/sdk/map.d.ts} +9 -50
  36. package/dist/types/plugins/gen/map/sdk/map.gen.d.ts +53 -0
  37. package/dist/types/plugins/gen/push/sdk/push.d.ts +23 -0
  38. package/dist/types/plugins/gen/push/sdk/push.gen.d.ts +35 -0
  39. package/dist/types/plugins/{qr.d.ts → gen/qr-scanner/sdk/qr-scanner.d.ts} +2 -3
  40. package/dist/types/plugins/gen/qr-scanner/sdk/qr-scanner.gen.d.ts +15 -0
  41. package/dist/types/runtime/app.d.ts +9 -2
  42. package/dist/types/runtime/fetch.d.ts +2 -0
  43. package/dist/types/runtime/input.d.ts +1 -1
  44. package/dist/types/runtime/media.d.ts +6 -10
  45. package/dist/types/runtime/misc.d.ts +4 -1
  46. package/dist/types/runtime/net.d.ts +3 -2
  47. package/dist/types/runtime/touch.d.ts +32 -0
  48. package/dist/types/scene/defineScene.d.ts +43 -2
  49. package/dist/types/scene/editor.d.ts +52 -0
  50. package/dist/types/scene/gizmos.d.ts +7 -4
  51. package/dist/types/ui/NativeView.d.ts +6 -4
  52. package/dist/types/ui/UI.d.ts +1 -1
  53. package/dist/types/ui/UIBottomSheet.d.ts +6 -12
  54. package/dist/types/ui/UIButton.d.ts +12 -14
  55. package/dist/types/ui/UIContainer.d.ts +0 -6
  56. package/dist/types/ui/UIImage.d.ts +1 -4
  57. package/dist/types/ui/UIInput.d.ts +8 -24
  58. package/dist/types/ui/UIModal.d.ts +0 -2
  59. package/dist/types/ui/UINode.d.ts +70 -56
  60. package/dist/types/ui/UIPager.d.ts +28 -27
  61. package/dist/types/ui/UIPopover.d.ts +0 -2
  62. package/dist/types/ui/UIScreen.d.ts +12 -17
  63. package/dist/types/ui/UIScrollable.d.ts +1 -4
  64. package/dist/types/ui/UIText.d.ts +0 -2
  65. package/dist/types/ui/UIVideo.d.ts +3 -5
  66. package/dist/types/ui/UIVirtualizedList.d.ts +14 -16
  67. package/dist/types/ui/UIWidget.d.ts +10 -9
  68. package/dist/types/ui/colorKeys.gen.d.ts +9 -0
  69. package/dist/types/ui/presentable.d.ts +46 -32
  70. package/dist/types/ui/router.d.ts +18 -7
  71. package/dist/types/ui/styleColor.d.ts +1 -0
  72. package/dist/types/ui/transitions.d.ts +18 -0
  73. package/dist/types/ui/tree.d.ts +75 -0
  74. package/dist/types/version.d.ts +10 -0
  75. package/dist/types.json +1 -1
  76. package/package.json +12 -3
  77. package/prompts/2d.md +2 -6
  78. package/prompts/3d.md +1 -5
  79. package/prompts/README.md +1 -1
  80. package/prompts/canvas.md +9 -8
  81. package/prompts/compose.ts +1 -1
  82. package/prompts/core.md +3 -3
  83. package/prompts/design.md +1 -1
  84. package/prompts/dist/2d-game.md +473 -239
  85. package/prompts/dist/3d-app.md +553 -205
  86. package/prompts/dist/ar-app.md +435 -202
  87. package/prompts/dist/design.md +113 -95
  88. package/prompts/dist/ui-app.md +386 -170
  89. package/prompts/ui-design.md +2 -3
  90. package/prompts/ui.md +45 -37
  91. package/src/animate/tween/Animation.ts +34 -150
  92. package/src/animate/tween/Timeline.ts +175 -175
  93. package/src/animate/tween/animateValue.ts +6 -3
  94. package/src/animate/tween/easing.ts +10 -3
  95. package/src/animate/tween/spec.ts +41 -15
  96. package/src/audio/Sound.ts +3 -3
  97. package/src/audio/audio.ts +2 -1
  98. package/src/bridges/2d.d.ts +317 -0
  99. package/src/bridges/app.d.ts +91 -0
  100. package/src/bridges/audio.d.ts +97 -0
  101. package/src/bridges/canvas.d.ts +79 -0
  102. package/src/bridges/device.d.ts +72 -0
  103. package/src/bridges/fetch.d.ts +80 -0
  104. package/src/bridges/files.d.ts +70 -0
  105. package/src/bridges/gl.d.ts +1133 -0
  106. package/src/bridges/input.d.ts +72 -0
  107. package/src/bridges/media.d.ts +55 -0
  108. package/src/bridges/nav.d.ts +71 -0
  109. package/src/bridges/net.d.ts +52 -0
  110. package/src/bridges/service.d.ts +52 -0
  111. package/src/bridges/socket.d.ts +31 -0
  112. package/src/bridges/storage.d.ts +33 -0
  113. package/src/bridges/tree.d.ts +301 -0
  114. package/src/bridges/types.d.ts +49 -0
  115. package/src/canvas/Canvas.ts +114 -159
  116. package/src/canvas/gen/cssColor.ts +224 -0
  117. package/src/canvas/gen/recorder.ts +212 -0
  118. package/src/canvas/gen/spec.ts +201 -0
  119. package/src/chisel.ts +193 -0
  120. package/src/compile/assetMacro.ts +1 -1
  121. package/src/compile/bundler.ts +11 -2
  122. package/src/compile/compileProject.ts +43 -4
  123. package/src/compile/fontMacro.ts +3 -4
  124. package/src/compile/header.ts +26 -5
  125. package/src/compile/index.ts +3 -1
  126. package/src/compile/liteMaterial.ts +1 -1
  127. package/src/compile/sceneEditor.ts +11 -26
  128. package/src/core/color.ts +73 -30
  129. package/src/core/pins.ts +51 -0
  130. package/src/core/signals.ts +8 -1
  131. package/src/g2/CharacterController2D.ts +3 -3
  132. package/src/g2/Node2D.ts +57 -39
  133. package/src/g2/Physics2D.ts +2 -2
  134. package/src/g2/Scene2D.ts +35 -23
  135. package/src/g2/Texture2D.ts +1 -1
  136. package/src/g2/loop.ts +4 -4
  137. package/src/gl/CameraPlace.ts +52 -52
  138. package/src/gl/Foliage.ts +72 -17
  139. package/src/gl/Geometry.ts +1 -2
  140. package/src/gl/Light.ts +10 -0
  141. package/src/gl/Lightmap.ts +45 -29
  142. package/src/gl/Material.ts +95 -51
  143. package/src/gl/Mesh.ts +120 -120
  144. package/src/gl/Model.ts +21 -16
  145. package/src/gl/Node.ts +91 -24
  146. package/src/gl/Particles.ts +1 -1
  147. package/src/gl/Scene.ts +100 -44
  148. package/src/gl/Texture.ts +8 -7
  149. package/src/gl/animation/AnimationClip.ts +1 -1
  150. package/src/gl/animation/DynamicBone.ts +482 -482
  151. package/src/gl/animation/Locomotion.ts +8 -3
  152. package/src/gl/nav/NavMesh.ts +3 -4
  153. package/src/gl/physics/Physics.ts +2 -2
  154. package/src/gl/physics/physicsEvents.ts +3 -3
  155. package/src/gl/scenarios.ts +291 -291
  156. package/src/gl/terrain/Terrain.ts +4 -5
  157. package/src/gl/touch.ts +14 -15
  158. package/src/host.d.ts +2 -3
  159. package/src/inject.editor.ts +7 -0
  160. package/src/inject.ts +13 -16
  161. package/src/net/core.ts +6 -5
  162. package/src/net/index.ts +1 -1
  163. package/src/net/replication.ts +1 -1
  164. package/src/plugin.ts +191 -0
  165. package/src/plugins/gen/camera/contract.d.ts +27 -0
  166. package/src/plugins/gen/camera/sdk/camera.gen.ts +46 -0
  167. package/src/plugins/gen/camera/sdk/camera.ts +57 -0
  168. package/src/plugins/gen/geolocation/contract.d.ts +50 -0
  169. package/src/plugins/gen/geolocation/sdk/geolocation.gen.ts +54 -0
  170. package/src/plugins/{geolocation.ts → gen/geolocation/sdk/geolocation.ts} +22 -43
  171. package/src/plugins/gen/map/contract.d.ts +144 -0
  172. package/src/plugins/gen/map/sdk/map.gen.ts +88 -0
  173. package/src/plugins/{map.ts → gen/map/sdk/map.ts} +68 -102
  174. package/src/plugins/gen/push/contract.d.ts +61 -0
  175. package/src/plugins/gen/push/sdk/push.gen.ts +60 -0
  176. package/src/plugins/gen/push/sdk/push.ts +105 -0
  177. package/src/plugins/gen/qr-scanner/contract.d.ts +16 -0
  178. package/src/plugins/gen/qr-scanner/sdk/qr-scanner.gen.ts +29 -0
  179. package/src/plugins/gen/qr-scanner/sdk/qr-scanner.ts +52 -0
  180. package/src/plugins/permission.ts +5 -4
  181. package/src/runtime/app.ts +20 -9
  182. package/src/runtime/appEvents.ts +5 -4
  183. package/src/runtime/channel.ts +18 -15
  184. package/src/runtime/clipboard.ts +4 -3
  185. package/src/runtime/datetime.ts +2 -1
  186. package/src/runtime/device.ts +17 -15
  187. package/src/runtime/fetch.ts +30 -20
  188. package/src/runtime/files.ts +16 -15
  189. package/src/runtime/input.ts +12 -10
  190. package/src/runtime/media.ts +50 -46
  191. package/src/runtime/misc.ts +7 -3
  192. package/src/runtime/net.ts +8 -7
  193. package/src/runtime/rpc.ts +1 -3
  194. package/src/runtime/service.ts +19 -14
  195. package/src/runtime/share.ts +4 -3
  196. package/src/runtime/storage.ts +6 -4
  197. package/src/runtime/touch.ts +32 -0
  198. package/src/scene/defineScene.ts +61 -365
  199. package/src/scene/editor.ts +408 -0
  200. package/src/scene/editorPlugins.ts +3 -3
  201. package/src/scene/gizmos.ts +15 -9
  202. package/src/server/db/marci/query.ts +1 -1
  203. package/src/server/host.ts +1 -1
  204. package/src/server/runtime.ts +1 -1
  205. package/src/ui/NativeView.ts +72 -25
  206. package/src/ui/UI.ts +3 -3
  207. package/src/ui/UIBottomSheet.ts +16 -17
  208. package/src/ui/UIButton.ts +54 -16
  209. package/src/ui/UIContainer.ts +0 -6
  210. package/src/ui/UIImage.ts +34 -30
  211. package/src/ui/UIInput.ts +29 -37
  212. package/src/ui/UIModal.ts +1 -3
  213. package/src/ui/UINode.ts +347 -297
  214. package/src/ui/UIPager.ts +93 -78
  215. package/src/ui/UIPopover.ts +0 -2
  216. package/src/ui/UIScreen.ts +41 -36
  217. package/src/ui/UIScrollable.ts +19 -13
  218. package/src/ui/UISpacer.ts +1 -1
  219. package/src/ui/UITabs.ts +8 -6
  220. package/src/ui/UIText.ts +7 -17
  221. package/src/ui/UIVideo.ts +30 -27
  222. package/src/ui/UIVirtualizedList.ts +58 -59
  223. package/src/ui/UIWidget.ts +38 -18
  224. package/src/ui/colorKeys.gen.ts +37 -0
  225. package/src/ui/fonts.ts +2 -2
  226. package/src/ui/presentable.ts +59 -42
  227. package/src/ui/router.ts +52 -35
  228. package/src/ui/styleColor.ts +56 -0
  229. package/src/ui/theme.ts +7 -6
  230. package/src/ui/transitions.ts +249 -0
  231. package/src/ui/tree.ts +346 -0
  232. package/src/version.ts +24 -0
  233. package/tests/helpers/engineWorld.ts +11 -0
  234. package/tests/helpers/fakeTree.ts +353 -0
  235. package/tests/helpers/hostStubs.ts +31 -0
  236. package/tests/helpers/index.ts +14 -0
  237. package/tests/helpers/memoryMarci.ts +124 -0
  238. package/tests/helpers/phases.ts +23 -0
  239. package/tests/helpers/preload.ts +18 -0
  240. package/tests/helpers/stubApp.ts +2 -0
  241. package/tests/helpers/stubDevice.ts +2 -0
  242. package/tests/helpers/stubFetch.ts +2 -0
  243. package/tests/helpers/stubInput.ts +2 -0
  244. package/dist/inject.js +0 -4629
  245. package/dist/types/core/registry.d.ts +0 -7
  246. package/dist/types/plugins/camera.d.ts +0 -25
  247. package/dist/types/plugins/push.d.ts +0 -46
  248. package/src/bridges.d.ts +0 -1769
  249. package/src/compile/__tests__/assetIconMacro.test.ts +0 -219
  250. package/src/compile/__tests__/assetMacro.test.ts +0 -100
  251. package/src/compile/__tests__/assetName.test.ts +0 -55
  252. package/src/compile/__tests__/compile.test.ts +0 -310
  253. package/src/compile/__tests__/detectEntry.test.ts +0 -151
  254. package/src/compile/__tests__/fontMacro.test.ts +0 -199
  255. package/src/compile/__tests__/serverSplit.test.ts +0 -27
  256. package/src/core/__tests__/stateMachine.test.ts +0 -132
  257. package/src/core/registry.ts +0 -23
  258. package/src/plugins/camera.ts +0 -81
  259. package/src/plugins/push.ts +0 -132
  260. package/src/plugins/qr.ts +0 -73
package/package.json CHANGED
@@ -8,12 +8,20 @@
8
8
  "./compile/detectEntry": "./src/compile/detectEntry.ts",
9
9
  "./compile/shaderSchema": "./src/compile/shaderSchema.ts",
10
10
  "./compile/liteMaterial": "./src/compile/liteMaterial.ts",
11
+ "./color": "./src/core/color.ts",
11
12
  "./inject": "./src/inject.ts",
13
+ "./plugin": "./src/plugin.ts",
12
14
  "./server": "./src/server/host.ts",
13
15
  "./prompts/select": "./prompts/select.ts",
14
16
  "./global.d.ts": "./dist/global.d.ts",
15
17
  "./host.d.ts": "./dist/host.d.ts",
16
- "./types.json": "./dist/types.json"
18
+ "./editor.d.ts": "./dist/editor.d.ts",
19
+ "./types.json": "./dist/types.json",
20
+ "./bridges/*": "./src/bridges/*.d.ts",
21
+ "./ui/tree": "./src/ui/tree.ts",
22
+ "./testing": "./tests/helpers/index.ts",
23
+ "./testing/preload": "./tests/helpers/preload.ts",
24
+ "./version": "./src/version.ts"
17
25
  },
18
26
  "scripts": {
19
27
  "build": "bun run build-types.ts",
@@ -25,7 +33,7 @@
25
33
  "prepublishOnly": "bun run build"
26
34
  },
27
35
  "dependencies": {
28
- "@letary/chisel": "^0.10.0"
36
+ "@letary/chisel": "^0.13.0"
29
37
  },
30
38
  "devDependencies": {
31
39
  "@types/bun": "^1.3.14",
@@ -33,11 +41,12 @@
33
41
  "typescript": "~5.8.3",
34
42
  "gl-matrix": "^3.4.4"
35
43
  },
36
- "version": "1.2.0",
44
+ "version": "2.0.1",
37
45
  "files": [
38
46
  "src",
39
47
  "dist",
40
48
  "prompts",
49
+ "tests/helpers",
41
50
  "README.md"
42
51
  ],
43
52
  "publishConfig": {
package/prompts/2d.md CHANGED
@@ -5,7 +5,7 @@ Scene2D + nodes (Sprite, Tilemap) + aspects (SpriteAnimation, Shape2D/Physics2D/
5
5
  // ===== SCENE & NODES =====
6
6
 
7
7
  new Scene2D(options?: {
8
- background?: Color // clear color (hex string or 0xRRGGBB); settable later via scene.background
8
+ background?: Color // clear color (any CSS color or 0xRRGGBB); settable later via scene.background
9
9
  filter?: 'nearest' | 'linear' // texture sampling; default nearest (crisp pixel art), 'linear' for hi-res
10
10
  }) // art. filter is GLOBAL (one sampler for all textures), re-applied on open()
11
11
 
@@ -63,7 +63,7 @@ new Sprite(options?: {
63
63
  // [0.5, 1] = bottom-center = "feet" — use on Y-sorted layers
64
64
  size?: Vec2Like // world size; default = texture pixel dims (1 texel = 1 world unit)
65
65
  frame?: [u0, v0, u1, v1] // normalized UV sub-rect
66
- color?: Color // tint MULTIPLIED with the texture; hex/packed only (default white = untinted)
66
+ color?: Color // tint MULTIPLIED with the texture (default white = untinted)
67
67
  opacity?: number // 0..1
68
68
  layer?: number
69
69
  position?: Vec2Like
@@ -259,10 +259,6 @@ sprite.aspect(Shape2D, { box: [12, 20] }) // ✅ declare the extents you want
259
259
  setLoop(() => sprite.setFramePx(...)) // WRONG
260
260
  sprite.aspect(SpriteAnimation, { size: [32, 48], clips: { walk: [0,1,2,3] } }) // ✅ then anim.play('walk')
261
261
 
262
- // ❌ CSS color strings on sprites — engine colors are hex/packed only (Canvas fillStyle is the exception)
263
- sprite.color = 'rgba(255,0,0,0.5)' // WRONG
264
- sprite.color = '#ff0000'; sprite.opacity = 0.5 // ✅
265
-
266
262
  // ❌ attaching SpriteAnimation before the sprite has a texture — throws (the grid slices from it)
267
263
  // ❌ attaching Physics2D before Shape2D on the same node — throws (attach the shape first)
268
264
  // ❌ setting spawn position AFTER attaching Physics2D — the body already seeded from [0,0]; position first
package/prompts/3d.md CHANGED
@@ -86,7 +86,7 @@ material.map = tex // Texture | Canvas | null
86
86
 
87
87
  // Custom compiled shaders (.mat files) — load, then set uniforms by name (chainable):
88
88
  const mat = new Material(await fetch(asset('./hologram.mat'), { useOnce: true }))
89
- .set('baseColor', '#ffa200') // '#rrggbb' / '#rrggbbaa' hex STRINGS only
89
+ .set('baseColor', '#ffa200') // color STRINGS only (any CSS color); a number is a float
90
90
  .set('roughness', 0.54) // number → float, boolean → bool
91
91
  .set('glowMap', tex) // Texture → sampler
92
92
  .set('dir', [0, 1, 0]) // number[] / Float32Array → vector. NOT a Vec3 — spread it: [...v]
@@ -294,10 +294,6 @@ mat.set('lightDir', dir)
294
294
  Light.point(...)
295
295
  // ✅ Light.sun() + scene IBL is the whole lighting model; fake glows with unlit/bloom/particles
296
296
 
297
- // ❌ rgba()/named colors in 3D APIs — silently black
298
- Material.lit({ color: 'rgba(255, 0, 0, 0.5)' })
299
- // ✅ hex string or packed int: '#ff0000' / '#ff000080' / 0xff0000
300
-
301
297
  // ❌ a fresh Material per frame (or per particle) to animate a look
302
298
  setLoop(() => { mesh.material = Material.lit({ color: next() }) })
303
299
  // ✅ mutate the one material: mesh.material.color = next() / mat.set('progress', t)
package/prompts/README.md CHANGED
@@ -137,6 +137,6 @@ escalation directive (above) lets it swap in the right engine module instead of
137
137
  `docs/check.mjs`. When a global is added, update docs, then the module, then index.md.
138
138
  - Known corrections baked into these prompts (do not regress; see `docs/AUTHORING.md`):
139
139
  `onEndReached(thresholdPx, cb)` (threshold first), `bgSize: cover|contain|tile` (no `fill`),
140
- track `deltaX/deltaY` are per-move, engine colors are hex/packed-int only, `animate` can't
140
+ track `deltaX/deltaY` are per-move, colors are CSS strings / 0xRRGGBB / [r,g,b(,a)] everywhere, `animate` can't
141
141
  tween strings/colors, `node.physics` (not `.body`), no `Camera2D.follow`, no
142
142
  `UIScrollable.scrollTo`, models can't be cloned.
package/prompts/canvas.md CHANGED
@@ -8,20 +8,21 @@ const c = new Canvas(width, height, { pixelRatio: device.pixelRatio })
8
8
  // width/height are LOGICAL units — author all drawing logical; pixelRatio only multiplies baked
9
9
  // resolution (crispness), never the on-screen size.
10
10
 
11
- c.fillStyle = '#ff8800' // CSS color STRINGS work here (the exception to engine hex-only colors);
12
- c.lineCap = 'round' // also strokeStyle, lineWidth, lineJoin, globalAlpha,
11
+ c.fillStyle = '#ff8800' // any CSS color string, as everywhere in the SDK;
12
+ c.lineCap = 'round' // also strokeStyle, lineWidth, lineJoin, miterLimit, globalAlpha, letterSpacing,
13
+ c.setLineDash([4, 2]) // dashes; a gradient: c.fillStyle = c.createLinearGradient(x0,y0,x1,y1).addColorStop(0,'#fff').addColorStop(1,'transparent')
13
14
  c.font = 'bold 16px sans-serif' // textAlign ('left'|'center'|'right'), textBaseline
14
15
  // custom fonts: draw only AFTER await registerFont(...)
15
16
  c.fillRect(x, y, w, h) / c.strokeRect / c.clearRect
16
- c.beginPath().moveTo(x,y).lineTo(x,y).arc(x,y,r,a0,a1).rect(x,y,w,h).roundRect(x,y,w,h,r).closePath() // all chain
17
- c.fill() / c.stroke() / c.fillText(text, x, y) / c.strokeText(text, x, y)
18
- c.measureText(text): { width, ascent, descent } // in the CURRENT font, logical px
19
- c.drawImage(bmp: Bitmap, dx, dy [, dw, dh]) // blits a Bitmap only (from c.toBitmap()), nothing else
17
+ c.beginPath().moveTo(x,y).lineTo(x,y).arc(x,y,r,a0,a1).arcTo(x1,y1,x2,y2,r).ellipse(x,y,rx,ry,rot,a0,a1).rect(x,y,w,h).roundRect(x,y,w,h,r).closePath() // all chain
18
+ c.fill('evenodd'?) / c.stroke() / c.clip() / c.fillText(text, x, y) / c.strokeText(text, x, y)
19
+ c.measureText(text): { width, ascent, descent } // in the CURRENT font and letterSpacing, logical px
20
+ c.drawImage(bmp: Bitmap, dx, dy [, dw, dh]) // blits a Bitmap only (c.toBitmap(), await c.loadImage(SvgSource(svg) | fetchResponse))
20
21
 
21
22
  c.update(): this // after redrawing, push new pixels to EVERY texture/image this canvas produced
22
23
  c.reset(): this // discard the recorded drawing to start over
23
24
  c.resize(w, h): this // new logical size (takes effect next bake; measure-then-resize works pre-bake)
24
25
  c.toBitmap(): Bitmap // rasterized snapshot, usable with drawImage
25
- // GOTCHA: reset() clears the recorded STATE too — font/fillStyle/textAlign fall back to defaults on
26
- // the next bake (getters still report old values). Re-set font & friends after every reset().
26
+ // GOTCHA: reset() clears the recorded STATE too — font/fillStyle/textAlign fall back to defaults
27
+ // (the getters report the defaults again). Re-set font & friends after every reset().
27
28
  // Ever-growing drawings: flatten — const snap = c.toBitmap(); c.reset(); c.drawImage(snap, 0, 0)
@@ -1,4 +1,4 @@
1
- // Compose the prompt bundles from the modules. Run from packages/sdk:
1
+ // Compose the prompt bundles from the modules. Run from sdk:
2
2
  // bun run prompts/compose.ts
3
3
  // Writes prompts/dist/<bundle>.md and prints token-ish size stats.
4
4
 
package/prompts/core.md CHANGED
@@ -202,9 +202,9 @@ Mathf.clamp(v, min, max) / .lerp(a, b, t) / .remap(v, inMin, inMax, outMin, outM
202
202
  Mathf.damp(a, b, lambda, dt) / .moveTowards(a, b, maxDelta)
203
203
  Mathf.random(min, max) / .randomInt(min, max) // randomInt inclusive both ends
204
204
 
205
- // Colors: hex string "#e33" | "#ff3333" | "#ff3333cc" or packed int 0xff3333.
206
- // rgba(...) / named colors DON'T work in 2D/3D APIs (silently become black). UI styles are the
207
- // exception — they also accept rgb()/rgba() and basic names ("white", "black", "transparent", …).
205
+ // Colors (every API, UI and engine alike): any CSS color string ("#e33", "#ff3333cc", "rgb(255 0 0 / 50%)",
206
+ // "hsl(0 100% 50%)", "red" — the CSS names, green = #008000), packed int 0xff3333 (opaque 0xRRGGBB),
207
+ // or [r, g, b(, a)] 0..1. A non-color throws. var(--x) only in UI styles.
208
208
 
209
209
  // ===== NETWORK =====
210
210
 
package/prompts/design.md CHANGED
@@ -50,7 +50,7 @@ import { colors, spacing, radius } from "./tokens"
50
50
  export const PrimaryButton = (label: string, o: { name?: string, disabled?: boolean } = {}) =>
51
51
  UIButton(UIText(label).style({ fontSize: 16, fontWeight: 700, color: o.disabled ? colors.muted : colors.onAccent }))
52
52
  .style({ height: 52, borderRadius: radius.md, bgColor: o.disabled ? colors.accentDeep : colors.accent,
53
- justifyContent: "center", alignItems: "center", name: o.name, onPressed: { bgColor: colors.accentPressed } })
53
+ justifyContent: "center", alignItems: "center", name: o.name, $pressed: { bgColor: colors.accentPressed } })
54
54
 
55
55
  export const SectionLabel = (t: string) =>
56
56
  UIText(t.toUpperCase()).style({ fontSize: 11, fontWeight: 600, letterSpacing: 2, color: colors.faint })