codebay 0.0.1 → 0.2.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 (204) hide show
  1. package/.mochi/import-css/index-0nwv3654.css +18 -0
  2. package/.mochi/import-css/index-xndx4980.css +54 -0
  3. package/.mochi/manifest.json +1612 -0
  4. package/.mochi/server-island.js +1 -0
  5. package/.mochi/svelte-client/HydratableIsland-wrq79y0w.js +1 -0
  6. package/.mochi/svelte-client/_hydrate-AppShell_2rtnxn6pgp2rh-7xgbmxxg.js +2 -0
  7. package/.mochi/svelte-client/_hydrate-AvatarsView_257s9yq1wwr4f-3cnbjpz2.js +13 -0
  8. package/.mochi/svelte-client/_hydrate-InstanceView_2ma45l9bybfhl-2ntmdm3e.js +1 -0
  9. package/.mochi/svelte-client/_hydrate-SettingsView_8hmarwmf8onq-t08spym1.js +23 -0
  10. package/.mochi/svelte-client/chunk-04qv4w6w.js +2 -0
  11. package/.mochi/svelte-client/chunk-5jnepvzx.js +2 -0
  12. package/.mochi/svelte-client/chunk-hcztrd75.js +1 -0
  13. package/.mochi/svelte-client/chunk-qxwt25hn.js +4 -0
  14. package/.mochi/svelte-client/chunk-sjmcgh7f.js +2 -0
  15. package/.mochi/svelte-client/chunk-tr67wtwn.js +2 -0
  16. package/.mochi/svelte-compile/App-f0q5n4rk.server.js +1168 -0
  17. package/.mochi/svelte-compile/Avatars-p8gfef7x.server.js +332 -0
  18. package/.mochi/svelte-compile/ClientStats-z3tn9ad6.server.js +99 -0
  19. package/.mochi/svelte-compile/DefaultError-wh77vebf.server.js +52 -0
  20. package/.mochi/svelte-compile/Instance-atjwsczx.server.js +356 -0
  21. package/.mochi/svelte-compile/Settings-q88xw6h8.server.js +1173 -0
  22. package/.mochi/svelte-compile/chunk-4kwy539a.js +14 -0
  23. package/.mochi/svelte-compile/chunk-9bjk7yx6.js +81 -0
  24. package/.mochi/svelte-compile/chunk-btmcxhqy.js +58 -0
  25. package/.mochi/svelte-compile/chunk-sxqys3nw.js +1668 -0
  26. package/.mochi/svelte-compile/chunk-v6796ga4.js +3295 -0
  27. package/.mochi/svelte-compile/chunk-we0ggtws.js +34 -0
  28. package/.mochi/svelte-css/AppBar-3bxinv4pabv8l.css +1 -0
  29. package/.mochi/svelte-css/AppShell-36mpg5smnbmuw.css +1 -0
  30. package/.mochi/svelte-css/Avatar-24th63awm9mna.css +1 -0
  31. package/.mochi/svelte-css/AvatarEditor-1ryrs1md5g36y.css +1 -0
  32. package/.mochi/svelte-css/AvatarsView-3hq37u4dgtljn.css +1 -0
  33. package/.mochi/svelte-css/BackLink-2wlu0eovz9j86.css +1 -0
  34. package/.mochi/svelte-css/BranchBox-1yqu1q2mgnjwz.css +1 -0
  35. package/.mochi/svelte-css/Brand-1la7zw5uhcbl4.css +1 -0
  36. package/.mochi/svelte-css/Button-2vtbrzb5kgu25.css +1 -0
  37. package/.mochi/svelte-css/CheckmarkIcon-3qlazj2oc50jc.css +1 -0
  38. package/.mochi/svelte-css/ClientStats-19qzckq40p2q9.css +1 -0
  39. package/.mochi/svelte-css/CoinButton-1rej3sh3tkjud.css +1 -0
  40. package/.mochi/svelte-css/CredMenu-9hwgeptp7crb.css +1 -0
  41. package/.mochi/svelte-css/DashboardView-1cy4xpqhja9sx.css +1 -0
  42. package/.mochi/svelte-css/DefaultError-2b0daamydxgb2.css +1 -0
  43. package/.mochi/svelte-css/ErrorIcon-2x0tzsqxskw28.css +1 -0
  44. package/.mochi/svelte-css/FolderBrowser-1x428zb3f2kti.css +1 -0
  45. package/.mochi/svelte-css/HealthBox-er2her0jukwl.css +1 -0
  46. package/.mochi/svelte-css/IdeBar-2qoqi2ya9zdn3.css +1 -0
  47. package/.mochi/svelte-css/IdeLoader-26rlko8e00j3g.css +1 -0
  48. package/.mochi/svelte-css/InstanceCard-16f77aysm7lgp.css +1 -0
  49. package/.mochi/svelte-css/InstanceView-wq85bxtusont.css +1 -0
  50. package/.mochi/svelte-css/LoaderIcon-soq5wt3p05ye.css +1 -0
  51. package/.mochi/svelte-css/PortsBox-1t25b5yg7jva3.css +1 -0
  52. package/.mochi/svelte-css/SettingsCog-jftyadvo64qo.css +1 -0
  53. package/.mochi/svelte-css/SettingsView-1nfdwnm16cpp2.css +1 -0
  54. package/.mochi/svelte-css/Skeleton-8k69usiju43h.css +1 -0
  55. package/.mochi/svelte-css/StatusBadge-3mq0j7z6aq4j.css +1 -0
  56. package/.mochi/svelte-css/ThemePicker-1ir8jyocm8mvi.css +1 -0
  57. package/.mochi/svelte-css/ToastBar-3havgkmtofntq.css +1 -0
  58. package/.mochi/svelte-css/ToastIcon-2z5wrkc95khg0.css +1 -0
  59. package/.mochi/svelte-css/ToastMessage-2jfwb2og2lfa8.css +1 -0
  60. package/.mochi/svelte-css/ToastWrapper-1fbnym10rm2nv.css +1 -0
  61. package/.mochi/svelte-css/Toaster-kk60j193854n.css +1 -0
  62. package/.mochi/svelte-css/TopBar-2q87li6yt8ids.css +1 -0
  63. package/LICENSE +21 -0
  64. package/README.md +34 -3
  65. package/bin/codebay.ts +22 -0
  66. package/migrations/0001_init.sql +20 -0
  67. package/migrations/0002_port_forwards.sql +9 -0
  68. package/migrations/0003_options.sql +4 -0
  69. package/migrations/0004_instance_image.sql +1 -0
  70. package/package.json +87 -9
  71. package/public/sounds/done.wav +0 -0
  72. package/public/sounds/waiting.wav +0 -0
  73. package/src/__fixtures__/HelloWorld.svelte +4 -0
  74. package/src/additional-svelte-typings.d.ts +1 -0
  75. package/src/api.ts +61 -0
  76. package/src/avatars/anchor.ts +17 -0
  77. package/src/avatars/bear.ts +17 -0
  78. package/src/avatars/bee.ts +17 -0
  79. package/src/avatars/bob-marley.ts +17 -0
  80. package/src/avatars/car.ts +17 -0
  81. package/src/avatars/carpathians.ts +17 -0
  82. package/src/avatars/cat-body.ts +17 -0
  83. package/src/avatars/cat-sits.ts +17 -0
  84. package/src/avatars/cat.ts +17 -0
  85. package/src/avatars/celtic-cross.ts +17 -0
  86. package/src/avatars/cherry.ts +17 -0
  87. package/src/avatars/cotton.ts +17 -0
  88. package/src/avatars/crab.ts +17 -0
  89. package/src/avatars/crown.ts +17 -0
  90. package/src/avatars/diamond.ts +17 -0
  91. package/src/avatars/dog.ts +17 -0
  92. package/src/avatars/elephant.ts +17 -0
  93. package/src/avatars/fish.ts +17 -0
  94. package/src/avatars/fleur-de-lis.ts +17 -0
  95. package/src/avatars/flower.ts +17 -0
  96. package/src/avatars/fox.ts +17 -0
  97. package/src/avatars/frog.ts +17 -0
  98. package/src/avatars/ghost.ts +17 -0
  99. package/src/avatars/giraffe.ts +17 -0
  100. package/src/avatars/glasses.ts +17 -0
  101. package/src/avatars/heart.ts +17 -0
  102. package/src/avatars/index.ts +128 -0
  103. package/src/avatars/invader.ts +17 -0
  104. package/src/avatars/kangaroo.ts +17 -0
  105. package/src/avatars/key.ts +17 -0
  106. package/src/avatars/lightning.ts +17 -0
  107. package/src/avatars/mushroom.ts +17 -0
  108. package/src/avatars/name-prompts.ts +30 -0
  109. package/src/avatars/octopus.ts +17 -0
  110. package/src/avatars/owl.ts +17 -0
  111. package/src/avatars/penguin.ts +17 -0
  112. package/src/avatars/planet.ts +17 -0
  113. package/src/avatars/rabbit.ts +17 -0
  114. package/src/avatars/rat.ts +17 -0
  115. package/src/avatars/robot.ts +17 -0
  116. package/src/avatars/rocket.ts +17 -0
  117. package/src/avatars/sea.ts +17 -0
  118. package/src/avatars/serialize.ts +65 -0
  119. package/src/avatars/skull.ts +17 -0
  120. package/src/avatars/snail.ts +17 -0
  121. package/src/avatars/snake.ts +17 -0
  122. package/src/avatars/snakegame.ts +17 -0
  123. package/src/avatars/star.ts +17 -0
  124. package/src/avatars/svelte.ts +17 -0
  125. package/src/avatars/target.ts +17 -0
  126. package/src/avatars/tree.ts +17 -0
  127. package/src/avatars/types.ts +24 -0
  128. package/src/avatars/ukraine.ts +17 -0
  129. package/src/avatars/whale.ts +17 -0
  130. package/src/avatars/wheat.ts +17 -0
  131. package/src/avatars/yinyan.ts +17 -0
  132. package/src/components/AppBar.svelte +35 -0
  133. package/src/components/AppShell.svelte +302 -0
  134. package/src/components/Avatar.svelte +235 -0
  135. package/src/components/AvatarEditor.svelte +297 -0
  136. package/src/components/AvatarsView.svelte +115 -0
  137. package/src/components/BranchBox.svelte +32 -0
  138. package/src/components/Brand.svelte +41 -0
  139. package/src/components/Button.svelte +161 -0
  140. package/src/components/CoinButton.svelte +121 -0
  141. package/src/components/CredMenu.svelte +171 -0
  142. package/src/components/DashboardView.svelte +198 -0
  143. package/src/components/FolderBrowser.svelte +635 -0
  144. package/src/components/HealthBox.svelte +161 -0
  145. package/src/components/IdeBar.svelte +186 -0
  146. package/src/components/IdeLoader.svelte +135 -0
  147. package/src/components/InstanceCard.svelte +220 -0
  148. package/src/components/InstanceView.svelte +567 -0
  149. package/src/components/PortsBox.svelte +74 -0
  150. package/src/components/SettingsCog.svelte +22 -0
  151. package/src/components/SettingsView.svelte +1494 -0
  152. package/src/components/Skeleton.svelte +43 -0
  153. package/src/components/StatusBadge.svelte +54 -0
  154. package/src/components/ThemePicker.svelte +77 -0
  155. package/src/components/TopBar.svelte +64 -0
  156. package/src/components/UiShowcase.svelte +578 -0
  157. package/src/components/ui-showcase/ComponentDemo.svelte +85 -0
  158. package/src/container-injections/attention-hooks.ts +117 -0
  159. package/src/container-injections/claude-aliases.ts +43 -0
  160. package/src/container-injections/claude-code-credentials.ts +145 -0
  161. package/src/container-injections/claude-code-custom.ts +125 -0
  162. package/src/container-injections/claude-no-coauthor.ts +35 -0
  163. package/src/container-injections/claude-skip-permissions.ts +38 -0
  164. package/src/container-injections/claude-statusline.ts +109 -0
  165. package/src/container-injections/git-identity.ts +63 -0
  166. package/src/container-injections/git-safe-directory.ts +18 -0
  167. package/src/container-injections/github-credentials.ts +162 -0
  168. package/src/container-injections/host-env-vars.ts +108 -0
  169. package/src/container-injections/tmux.ts +67 -0
  170. package/src/fontsource.d.ts +3 -0
  171. package/src/index.ts +81 -0
  172. package/src/lib/auth.server.ts +95 -0
  173. package/src/lib/bridge.server.ts +34 -0
  174. package/src/lib/config.server.ts +140 -0
  175. package/src/lib/crypto.server.ts +12 -0
  176. package/src/lib/db.server.ts +196 -0
  177. package/src/lib/devcontainer.server.ts +511 -0
  178. package/src/lib/docker-client.server.ts +61 -0
  179. package/src/lib/docker.server.ts +139 -0
  180. package/src/lib/exec.server.ts +92 -0
  181. package/src/lib/git.server.ts +68 -0
  182. package/src/lib/health.server.ts +105 -0
  183. package/src/lib/injections.server.ts +72 -0
  184. package/src/lib/instances.server.ts +552 -0
  185. package/src/lib/links.ts +9 -0
  186. package/src/lib/picker.server.ts +46 -0
  187. package/src/lib/ports.server.ts +9 -0
  188. package/src/lib/proxy.server.ts +170 -0
  189. package/src/lib/repo-url.ts +60 -0
  190. package/src/lib/spawn.server.ts +14 -0
  191. package/src/lib/theme.server.ts +22 -0
  192. package/src/live.ts +50 -0
  193. package/src/pages/App.svelte +14 -0
  194. package/src/pages/Avatars.svelte +9 -0
  195. package/src/pages/Instance.svelte +9 -0
  196. package/src/pages/Settings.svelte +76 -0
  197. package/src/pages/UI.svelte +10 -0
  198. package/src/routes.ts +444 -0
  199. package/src/settings.ts +14 -0
  200. package/src/shell.html +100 -0
  201. package/src/sound.ts +69 -0
  202. package/src/theme.ts +24 -0
  203. package/src/types.ts +79 -0
  204. package/svelte.config.js +5 -0
@@ -0,0 +1,332 @@
1
+ // @bun
2
+ import {
3
+ AppBar,
4
+ Avatar,
5
+ Button,
6
+ COLS,
7
+ OFF,
8
+ ON,
9
+ ROWS,
10
+ Toaster,
11
+ avatars,
12
+ dist_default
13
+ } from "./chunk-sxqys3nw.js";
14
+ import {
15
+ HydratableBoundary,
16
+ Icon,
17
+ emitIslandProps
18
+ } from "./chunk-v6796ga4.js";
19
+ import"./chunk-we0ggtws.js";
20
+
21
+ // src/pages/Avatars.svelte
22
+ import"svelte/internal/flags/async";
23
+ import * as $7 from "svelte/internal/server";
24
+
25
+ // src/components/AvatarsView.svelte
26
+ import"svelte/internal/flags/async";
27
+ import * as $6 from "svelte/internal/server";
28
+
29
+ // src/components/AvatarEditor.svelte
30
+ import"svelte/internal/flags/async";
31
+ import * as $5 from "svelte/internal/server";
32
+
33
+ // node_modules/@lucide/svelte/dist/icons/copy.svelte
34
+ import"svelte/internal/flags/async";
35
+ import * as $ from "svelte/internal/server";
36
+ function Copy($$renderer, $$props) {
37
+ let { $$slots, $$events, ...props } = $$props;
38
+ const iconNode = [
39
+ [
40
+ "rect",
41
+ { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2" }
42
+ ],
43
+ [
44
+ "path",
45
+ { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" }
46
+ ]
47
+ ];
48
+ Icon($$renderer, $.spread_props([{ name: "copy" }, props, { iconNode }]));
49
+ }
50
+ // node_modules/@lucide/svelte/dist/icons/eraser.svelte
51
+ import"svelte/internal/flags/async";
52
+ import * as $2 from "svelte/internal/server";
53
+ function Eraser($$renderer, $$props) {
54
+ let { $$slots, $$events, ...props } = $$props;
55
+ const iconNode = [
56
+ [
57
+ "path",
58
+ {
59
+ d: "M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21"
60
+ }
61
+ ],
62
+ ["path", { d: "m5.082 11.09 8.828 8.828" }]
63
+ ];
64
+ Icon($$renderer, $2.spread_props([{ name: "eraser" }, props, { iconNode }]));
65
+ }
66
+ // node_modules/@lucide/svelte/dist/icons/contrast.svelte
67
+ import"svelte/internal/flags/async";
68
+ import * as $3 from "svelte/internal/server";
69
+ function Contrast($$renderer, $$props) {
70
+ let { $$slots, $$events, ...props } = $$props;
71
+ const iconNode = [
72
+ ["circle", { cx: "12", cy: "12", r: "10" }],
73
+ ["path", { d: "M12 18a6 6 0 0 0 0-12v12z" }]
74
+ ];
75
+ Icon($$renderer, $3.spread_props([{ name: "contrast" }, props, { iconNode }]));
76
+ }
77
+ // node_modules/@lucide/svelte/dist/icons/external-link.svelte
78
+ import"svelte/internal/flags/async";
79
+ import * as $4 from "svelte/internal/server";
80
+ function External_link($$renderer, $$props) {
81
+ let { $$slots, $$events, ...props } = $$props;
82
+ const iconNode = [
83
+ ["path", { d: "M15 3h6v6" }],
84
+ ["path", { d: "M10 14 21 3" }],
85
+ [
86
+ "path",
87
+ {
88
+ d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"
89
+ }
90
+ ]
91
+ ];
92
+ Icon($$renderer, $4.spread_props([{ name: "external-link" }, props, { iconNode }]));
93
+ }
94
+ // src/avatars/serialize.ts
95
+ var REPO_URL = "https://github.com/khromov/codebay";
96
+ function normalizeName(raw) {
97
+ return raw.trim().toLowerCase().replace(/[^a-z0-9-]+/g, "-").replace(/^-+|-+$/g, "");
98
+ }
99
+ function cellsToPixels(cells) {
100
+ const rows = [];
101
+ for (let r = 0;r < ROWS; r++) {
102
+ let row = "";
103
+ for (let c = 0;c < COLS; c++) {
104
+ row += cells[r * COLS + c] === ON ? "#" : ".";
105
+ }
106
+ rows.push(row);
107
+ }
108
+ return rows;
109
+ }
110
+ function toModuleSource(art) {
111
+ const rows = art.pixels.map((row) => ` '${row}'`).join(`,
112
+ `);
113
+ return `import type { AvatarArt } from './types.ts';
114
+
115
+ const art: AvatarArt = {
116
+ name: '${art.name}',
117
+ pixels: [
118
+ ${rows}
119
+ ]
120
+ };
121
+
122
+ export default art;
123
+ `;
124
+ }
125
+ function toIssueUrl(art) {
126
+ const title = `Avatar contribution: ${art.name}`;
127
+ const body = [
128
+ "Hi! I drew this avatar in the editor easter egg and I'd love to see it in the official set.",
129
+ "",
130
+ "```",
131
+ ...art.pixels,
132
+ "```",
133
+ "",
134
+ `Ready-to-paste module (\`src/avatars/${art.name}.ts\`, plus a line in \`src/avatars/index.ts\`):`,
135
+ "",
136
+ "```ts",
137
+ toModuleSource(art).trimEnd(),
138
+ "```",
139
+ "",
140
+ "_It should satisfy `src/avatars/avatars.test.ts`: exactly 8\xD78, only `#`/`.` pixels, unique name._"
141
+ ].join(`
142
+ `);
143
+ const params = new URLSearchParams({ title, body });
144
+ return `${REPO_URL}/issues/new?${params}`;
145
+ }
146
+
147
+ // src/components/AvatarEditor.svelte
148
+ function AvatarEditor($$renderer, $$props) {
149
+ $$renderer.component(($$renderer2) => {
150
+ let { namePlaceholder } = $$props;
151
+ let cells = Array(ROWS * COLS).fill(OFF);
152
+ let avatarName = "";
153
+ const slug = $5.derived(() => normalizeName(avatarName));
154
+ const art = $5.derived(() => ({ name: slug() || "my-avatar", pixels: cellsToPixels(cells) }));
155
+ const canContribute = $5.derived(() => slug().length > 0 && cells.some((c) => c === ON));
156
+ let gridEl = null;
157
+ let painting = false;
158
+ let paintValue = ON;
159
+ const RING_CELLS = Array.from({ length: 100 }, (_, i) => ({ r: Math.floor(i / 10), c: i % 10 })).filter(({ r, c }) => r === 0 || r === 9 || c === 0 || c === 9);
160
+ function cellAt(e) {
161
+ if (!gridEl)
162
+ return null;
163
+ const rect = gridEl.getBoundingClientRect();
164
+ const c = Math.floor((e.clientX - rect.left) / rect.width * COLS);
165
+ const r = Math.floor((e.clientY - rect.top) / rect.height * ROWS);
166
+ if (r < 0 || r >= ROWS || c < 0 || c >= COLS)
167
+ return null;
168
+ return r * COLS + c;
169
+ }
170
+ function onpointerdown(e) {
171
+ const i = cellAt(e);
172
+ if (i == null)
173
+ return;
174
+ e.currentTarget.setPointerCapture?.(e.pointerId);
175
+ painting = true;
176
+ paintValue = cells[i] === ON ? OFF : ON;
177
+ cells[i] = paintValue;
178
+ }
179
+ function onpointermove(e) {
180
+ if (!painting)
181
+ return;
182
+ const i = cellAt(e);
183
+ if (i != null)
184
+ cells[i] = paintValue;
185
+ }
186
+ function stopPainting() {
187
+ painting = false;
188
+ }
189
+ function clear() {
190
+ cells = Array(ROWS * COLS).fill(OFF);
191
+ }
192
+ function invert() {
193
+ cells = cells.map((c) => c === ON ? OFF : ON);
194
+ }
195
+ async function copyModule() {
196
+ try {
197
+ await navigator.clipboard.writeText(toModuleSource(art()));
198
+ dist_default("Copied \u2014 paste it into the GitHub issue");
199
+ } catch (err) {
200
+ dist_default.error(`Copy failed: ${err.message}`);
201
+ }
202
+ }
203
+ $$renderer2.push(`<section class="editor svelte-qu6vp4"><div class="head svelte-qu6vp4"><h2 class="svelte-qu6vp4">Draw your own avatar</h2></div> <div class="body svelte-qu6vp4"><div class="grid-frame svelte-qu6vp4"><!--[-->`);
204
+ const each_array = $5.ensure_array_like(RING_CELLS);
205
+ for (let i = 0, $$length = each_array.length;i < $$length; i++) {
206
+ let { r, c } = each_array[i];
207
+ $$renderer2.push(`<span class="ring-cell svelte-qu6vp4"${$5.attr_style(`grid-row:${$5.stringify(r + 1)};grid-column:${$5.stringify(c + 1)}`)} aria-hidden="true"></span>`);
208
+ }
209
+ $$renderer2.push(`<!--]--> <div class="grid svelte-qu6vp4" role="img" aria-label="8 by 8 pixel drawing canvas"><!--[-->`);
210
+ const each_array_1 = $5.ensure_array_like(cells);
211
+ for (let i = 0, $$length = each_array_1.length;i < $$length; i++) {
212
+ let cell = each_array_1[i];
213
+ $$renderer2.push(`<span${$5.attr_class("cell svelte-qu6vp4", undefined, { on: cell === ON })}></span>`);
214
+ }
215
+ $$renderer2.push(`<!--]--></div></div> <div class="side svelte-qu6vp4"><div class="preview"><div class="preview-label svelte-qu6vp4">Preview</div> <div class="preview-row svelte-qu6vp4">`);
216
+ Avatar($$renderer2, { art: art(), name: art().name, scale: 6 });
217
+ $$renderer2.push(`<!----> `);
218
+ Avatar($$renderer2, { art: art(), name: art().name, scale: 3 });
219
+ $$renderer2.push(`<!----></div></div> <label class="name-field svelte-qu6vp4"><span class="preview-label svelte-qu6vp4">Name</span> <input type="text"${$5.attr("value", avatarName)}${$5.attr("placeholder", namePlaceholder)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off" maxlength="24" class="svelte-qu6vp4"/></label> <div class="tools svelte-qu6vp4">`);
220
+ Button($$renderer2, {
221
+ size: "sm",
222
+ icon: Eraser,
223
+ onclick: clear,
224
+ children: ($$renderer3) => {
225
+ $$renderer3.push(`<!---->Clear`);
226
+ },
227
+ $$slots: { default: true }
228
+ });
229
+ $$renderer2.push(`<!----> `);
230
+ Button($$renderer2, {
231
+ size: "sm",
232
+ icon: Contrast,
233
+ onclick: invert,
234
+ children: ($$renderer3) => {
235
+ $$renderer3.push(`<!---->Invert`);
236
+ },
237
+ $$slots: { default: true }
238
+ });
239
+ $$renderer2.push(`<!----></div></div></div> <div class="foot svelte-qu6vp4"><span class="hint svelte-qu6vp4">Draw something, then open an issue to get it into the official set.</span> <div class="actions svelte-qu6vp4">`);
240
+ Button($$renderer2, {
241
+ size: "sm",
242
+ icon: Copy,
243
+ disabled: !canContribute(),
244
+ onclick: copyModule,
245
+ children: ($$renderer3) => {
246
+ $$renderer3.push(`<!---->Copy`);
247
+ },
248
+ $$slots: { default: true }
249
+ });
250
+ $$renderer2.push(`<!----> `);
251
+ Button($$renderer2, {
252
+ size: "sm",
253
+ variant: "primary",
254
+ icon: External_link,
255
+ disabled: !canContribute(),
256
+ href: toIssueUrl(art()),
257
+ target: "_blank",
258
+ rel: "noopener",
259
+ children: ($$renderer3) => {
260
+ $$renderer3.push(`<!---->Open GitHub issue`);
261
+ },
262
+ $$slots: { default: true }
263
+ });
264
+ $$renderer2.push(`<!----></div></div></section>`);
265
+ });
266
+ }
267
+
268
+ // src/components/AvatarsView.svelte
269
+ function AvatarsView($$renderer, $$props) {
270
+ $$renderer.component(($$renderer2) => {
271
+ let { namePlaceholder } = $$props;
272
+ $$renderer2.push(`<div class="page svelte-fkq7sr">`);
273
+ AppBar($$renderer2, {
274
+ children: ($$renderer3) => {
275
+ $$renderer3.push(`<span class="title svelte-fkq7sr">Avatars</span>`);
276
+ },
277
+ $$slots: { default: true }
278
+ });
279
+ $$renderer2.push(`<!----> <main class="content svelte-fkq7sr">`);
280
+ AvatarEditor($$renderer2, { namePlaceholder });
281
+ $$renderer2.push(`<!----> <section class="catalog svelte-fkq7sr"><header class="svelte-fkq7sr"><h2 class="svelte-fkq7sr">The set</h2> <p class="svelte-fkq7sr">${$6.escape(avatars.length)} hand-crafted 8\xD78 sprites</p></header> <ul class="svelte-fkq7sr"><!--[-->`);
282
+ const each_array = $6.ensure_array_like(avatars);
283
+ for (let $$index = 0, $$length = each_array.length;$$index < $$length; $$index++) {
284
+ let art = each_array[$$index];
285
+ $$renderer2.push(`<li class="svelte-fkq7sr">`);
286
+ Avatar($$renderer2, { art, name: art.name, scale: 8, interactive: true });
287
+ $$renderer2.push(`<!----> <span class="label svelte-fkq7sr">${$6.escape(art.name)}</span></li>`);
288
+ }
289
+ $$renderer2.push(`<!--]--></ul></section></main></div> `);
290
+ Toaster($$renderer2, {
291
+ toastOptions: {
292
+ style: "border:1px solid var(--ink); background:var(--bg-card); color:var(--ink); box-shadow:4px 4px 0 var(--ink); font-family:var(--font-mono); font-size:13px;"
293
+ }
294
+ });
295
+ $$renderer2.push(`<!---->`);
296
+ });
297
+ }
298
+
299
+ // src/pages/Avatars.svelte
300
+ function Avatars($$renderer, $$props) {
301
+ $$renderer.component(($$renderer2) => {
302
+ let { namePlaceholder } = $$props;
303
+ if (true) {
304
+ let failed = function($$renderer3, error) {
305
+ $$renderer3.push(`<mochi-island-failure data-component="AvatarsView"${$7.attr("data-message", error.message)}></mochi-island-failure>`);
306
+ };
307
+ $$renderer2.push("<!--[0-->");
308
+ $$renderer2.boundary({ failed }, ($$renderer3) => {
309
+ $$renderer3.push(`<!--[-->`);
310
+ {
311
+ HydratableBoundary($$renderer3, {
312
+ children: ($$renderer4) => {
313
+ $$renderer4.push(`<mochi-hydratable-island component-name="AvatarsView_257s9yq1wwr4f" component-url="__MOCHI_COMPONENT_URL__AvatarsView_257s9yq1wwr4f__"${$7.attr("props-ref", emitIslandProps({ namePlaceholder }))}>`);
314
+ $$renderer4.push(`<!--[-->`);
315
+ {
316
+ AvatarsView($$renderer4, { namePlaceholder });
317
+ }
318
+ $$renderer4.push(`<!--]-->`);
319
+ $$renderer4.push(`</mochi-hydratable-island>`);
320
+ },
321
+ $$slots: { default: true }
322
+ });
323
+ }
324
+ $$renderer3.push(`<!--]-->`);
325
+ });
326
+ }
327
+ $$renderer2.push(`<!--]-->`);
328
+ });
329
+ }
330
+ export {
331
+ Avatars as default
332
+ };
@@ -0,0 +1,99 @@
1
+ // @bun
2
+ import"./chunk-we0ggtws.js";
3
+
4
+ // node_modules/mochi-framework/src/templates/ClientStats/ClientStats.svelte
5
+ import"svelte/internal/flags/async";
6
+ import * as $ from "svelte/internal/server";
7
+
8
+ // node_modules/mochi-framework/src/vendor/pretty-bytes/index.ts
9
+ var BYTE_UNITS = ["B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
10
+ var BIBYTE_UNITS = ["B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"];
11
+ var BIT_UNITS = ["b", "kbit", "Mbit", "Gbit", "Tbit", "Pbit", "Ebit", "Zbit", "Ybit"];
12
+ var BIBIT_UNITS = ["b", "kibit", "Mibit", "Gibit", "Tibit", "Pibit", "Eibit", "Zibit", "Yibit"];
13
+ function toLocaleString(n, locale, options) {
14
+ if (typeof locale === "string" || Array.isArray(locale)) {
15
+ return n.toLocaleString(locale, options);
16
+ }
17
+ if (locale === true || options !== undefined) {
18
+ return n.toLocaleString(undefined, options);
19
+ }
20
+ return String(n);
21
+ }
22
+ function buildLocaleOptions(options) {
23
+ const { minimumFractionDigits, maximumFractionDigits } = options;
24
+ if (minimumFractionDigits === undefined && maximumFractionDigits === undefined) {
25
+ return;
26
+ }
27
+ return {
28
+ ...minimumFractionDigits !== undefined && { minimumFractionDigits },
29
+ ...maximumFractionDigits !== undefined && { maximumFractionDigits },
30
+ roundingMode: "trunc"
31
+ };
32
+ }
33
+ function prettyBytes(input, options) {
34
+ if (!Number.isFinite(input)) {
35
+ throw new TypeError(`Expected a finite number, got ${typeof input}: ${input}`);
36
+ }
37
+ const opts = {
38
+ bits: false,
39
+ binary: false,
40
+ space: true,
41
+ nonBreakingSpace: false,
42
+ ...options
43
+ };
44
+ const UNITS = opts.bits ? opts.binary ? BIBIT_UNITS : BIT_UNITS : opts.binary ? BIBYTE_UNITS : BYTE_UNITS;
45
+ const separator = opts.space ? opts.nonBreakingSpace ? "\xA0" : " " : "";
46
+ if (opts.signed && input === 0) {
47
+ return ` 0${separator}${UNITS[0]}`;
48
+ }
49
+ const isNegative = input < 0;
50
+ const prefix = isNegative ? "-" : opts.signed ? "+" : "";
51
+ let n = isNegative ? -input : input;
52
+ const localeOptions = buildLocaleOptions(opts);
53
+ if (n < 1) {
54
+ return prefix + toLocaleString(n, opts.locale, localeOptions) + separator + UNITS[0];
55
+ }
56
+ const exponent = Math.min(Math.floor(opts.binary ? Math.log(n) / Math.log(1024) : Math.log10(n) / 3), UNITS.length - 1);
57
+ n = n / (opts.binary ? 1024 : 1000) ** exponent;
58
+ if (!localeOptions) {
59
+ const minPrecision = Math.max(3, Math.floor(n).toString().length);
60
+ n = Number(n.toPrecision(minPrecision));
61
+ }
62
+ return prefix + toLocaleString(n, opts.locale, localeOptions) + separator + UNITS[exponent];
63
+ }
64
+
65
+ // node_modules/mochi-framework/src/debug-bar/utils.ts
66
+ var formatSize = prettyBytes;
67
+
68
+ // node_modules/mochi-framework/src/templates/ClientStats/ClientStats.svelte
69
+ function ClientStats($$renderer, $$props) {
70
+ $$renderer.component(($$renderer2) => {
71
+ let { stats } = $$props;
72
+ const totalSize = $.derived(() => stats.outputs.reduce((sum, o) => sum + o.size, 0));
73
+ $.head("kvp4dv", $$renderer2, ($$renderer3) => {
74
+ $$renderer3.title(($$renderer4) => {
75
+ $$renderer4.push(`<title>Runtime bundle stats</title>`);
76
+ });
77
+ $$renderer3.push(`<meta name="viewport" content="width=device-width, initial-scale=1"/>`);
78
+ });
79
+ $$renderer2.push(`<h1 class="svelte-kvp4dv">Runtime bundle stats</h1> <p class="subtitle svelte-kvp4dv">Total: ${$.escape(formatSize(totalSize()))} across ${$.escape(stats.outputs.length)} file(s)</p> <!--[-->`);
80
+ const each_array = $.ensure_array_like(stats.outputs);
81
+ for (let $$index_1 = 0, $$length = each_array.length;$$index_1 < $$length; $$index_1++) {
82
+ let output = each_array[$$index_1];
83
+ const barMax = output.inputs[0]?.size || 1;
84
+ $$renderer2.push(`<section class="svelte-kvp4dv"><h2 class="svelte-kvp4dv">${$.escape(output.name)} <span class="total svelte-kvp4dv">${$.escape(formatSize(output.size))}</span></h2> <table class="svelte-kvp4dv"><thead><tr><th class="svelte-kvp4dv">Module</th><th class="svelte-kvp4dv"></th><th class="svelte-kvp4dv">Size</th><th class="svelte-kvp4dv">%</th></tr></thead><tbody><!--[-->`);
85
+ const each_array_1 = $.ensure_array_like(output.inputs);
86
+ for (let $$index = 0, $$length2 = each_array_1.length;$$index < $$length2; $$index++) {
87
+ let inp = each_array_1[$$index];
88
+ const barW = Math.round(inp.size / barMax * 200);
89
+ const pct = (inp.size / output.size * 100).toFixed(1);
90
+ $$renderer2.push(`<tr><td class="path svelte-kvp4dv">${$.escape(inp.path)}</td><td class="bar svelte-kvp4dv"><div class="bar-fill svelte-kvp4dv"${$.attr_style("", { width: `${$.stringify(barW)}px` })}></div></td><td class="size svelte-kvp4dv">${$.escape(formatSize(inp.size))}</td><td class="pct svelte-kvp4dv">${$.escape(pct)}%</td></tr>`);
91
+ }
92
+ $$renderer2.push(`<!--]--></tbody></table></section>`);
93
+ }
94
+ $$renderer2.push(`<!--]-->`);
95
+ });
96
+ }
97
+ export {
98
+ ClientStats as default
99
+ };
@@ -0,0 +1,52 @@
1
+ // @bun
2
+ import"./chunk-we0ggtws.js";
3
+
4
+ // node_modules/mochi-framework/src/templates/DefaultError.svelte
5
+ import"svelte/internal/flags/async";
6
+ import * as $2 from "svelte/internal/server";
7
+
8
+ // node_modules/mochi-framework/src/templates/BackLink.svelte
9
+ import"svelte/internal/flags/async";
10
+ import * as $ from "svelte/internal/server";
11
+ import { onMount } from "svelte";
12
+ function BackLink($$renderer, $$props) {
13
+ $$renderer.component(($$renderer2) => {
14
+ let showBack = false;
15
+ onMount(() => {
16
+ showBack = document.referrer !== "" && document.referrer.startsWith(location.origin);
17
+ });
18
+ function handleClick(e) {
19
+ if (showBack) {
20
+ e.preventDefault();
21
+ history.back();
22
+ }
23
+ }
24
+ $$renderer2.push(`<a href="/" class="svelte-8oqqxp">${$.escape(showBack ? "\u2190 Go back" : "Go home \u2192")}</a>`);
25
+ });
26
+ }
27
+
28
+ // node_modules/mochi-framework/src/templates/DefaultError.svelte
29
+ function DefaultError($$renderer, $$props) {
30
+ $$renderer.component(($$renderer2) => {
31
+ let { error } = $$props;
32
+ $2.head("gaasgn", $$renderer2, ($$renderer3) => {
33
+ $$renderer3.title(($$renderer4) => {
34
+ $$renderer4.push(`<title>${$2.escape(error.status)} ${$2.escape(error.message)}</title>`);
35
+ });
36
+ $$renderer3.push(`<meta name="viewport" content="width=device-width, initial-scale=1"/>`);
37
+ });
38
+ $$renderer2.push(`<div class="wrap svelte-gaasgn"><header class="topbar svelte-gaasgn"><span class="brand svelte-gaasgn"><span class="logo svelte-gaasgn" aria-hidden="true">\uD83C\uDF61</span><span>mochi</span></span></header> <main class="stage svelte-gaasgn"><section class="panel svelte-gaasgn"><p class="status svelte-gaasgn">${$2.escape(error.status)}</p> <p class="message svelte-gaasgn">${$2.escape(error.message)}</p> <div class="actions svelte-gaasgn">`);
39
+ BackLink($$renderer2, { "mochi:hydrate": true });
40
+ $$renderer2.push(`<!----></div> `);
41
+ if (error.stack) {
42
+ $$renderer2.push("<!--[0-->");
43
+ $$renderer2.push(`<div class="divider svelte-gaasgn"></div> <div class="stack-label svelte-gaasgn">Stack trace</div> <pre class="stack svelte-gaasgn">${$2.escape(error.stack)}</pre>`);
44
+ } else {
45
+ $$renderer2.push("<!--[-1-->");
46
+ }
47
+ $$renderer2.push(`<!--]--></section></main></div>`);
48
+ });
49
+ }
50
+ export {
51
+ DefaultError as default
52
+ };