hyperbook 0.98.2 → 0.99.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.
@@ -0,0 +1,98 @@
1
+ /// <reference path="../hyperbook.types.js" />
2
+
3
+ const KIRI_BASE = "https://grid.space/kiri/";
4
+
5
+ /**
6
+ * Convert any URL (relative, root-relative, or absolute) to the format
7
+ * kiri expects in its load/wrk params.
8
+ *
9
+ * Kiri's parseOpt splits on ":" to separate key from value, so the value
10
+ * must NOT contain colons (e.g. "localhost:8080" would break it).
11
+ * Kiri then prepends `${location.protocol}//` to reconstruct the full URL.
12
+ *
13
+ * For relative/root-relative paths we resolve against the current origin.
14
+ * For absolute URLs we strip the protocol prefix.
15
+ *
16
+ * @param {string} url
17
+ * @returns {string}
18
+ */
19
+ function toKiriUrlParam(url) {
20
+ const absolute = new URL(url, window.location.href).href;
21
+ return absolute.replace(/^https?:\/\//, "");
22
+ }
23
+
24
+ /**
25
+ * Build the kiri:moto iframe URL from directive options.
26
+ *
27
+ * Kiri reads URL params via parseOpt which uses "key:value" pairs
28
+ * separated by commas (NOT the standard "key=value&key2=value2" format):
29
+ * ?mode:FDM → api.mode.set(mode)
30
+ * ?load:host/path → api.platform.load_url(`${proto}//${value}`)
31
+ * ?wrk:host/path → set_ctrl.import_url(`${proto}//${value}`)
32
+ *
33
+ * Shared settings are loaded via the URL hash fragment (not a query param):
34
+ * #setting/key → restore saved settings by key
35
+ *
36
+ * @param {{ mode?: string, model?: string, workspace?: string, settings?: string }} opts
37
+ * @returns {string}
38
+ */
39
+ function buildKiriUrl({ mode, model, workspace, settings }) {
40
+ const parts = [];
41
+
42
+ if (mode) {
43
+ parts.push(`mode:${encodeURIComponent(mode)}`);
44
+ }
45
+
46
+ if (model) {
47
+ parts.push(`load:${toKiriUrlParam(model)}`);
48
+ }
49
+
50
+ if (workspace) {
51
+ parts.push(`wrk:${toKiriUrlParam(workspace)}`);
52
+ }
53
+
54
+ let url = KIRI_BASE;
55
+ if (parts.length) {
56
+ url += `?${parts.join(",")}`;
57
+ }
58
+ if (settings) {
59
+ url += `#${settings}`;
60
+ }
61
+ return url;
62
+ }
63
+
64
+ /**
65
+ * Set up one .directive-kirimoto element.
66
+ * @param {HTMLElement} el
67
+ */
68
+ function initDirective(el) {
69
+ const iframe = el.querySelector("iframe");
70
+ if (!iframe) return;
71
+
72
+ const mode = el.dataset.mode || null;
73
+ const model = el.dataset.model || null;
74
+ const workspace = el.dataset.workspace || null;
75
+ const settings = el.dataset.settings || null;
76
+
77
+ iframe.src = buildKiriUrl({ mode, model, workspace, settings });
78
+ }
79
+
80
+ /**
81
+ * Kiri:Moto directive integration.
82
+ * @memberof hyperbook
83
+ */
84
+ hyperbook.kirimoto = (function () {
85
+ /**
86
+ * @param {HTMLElement} el - the Fullscreen button element
87
+ */
88
+ function openFullscreen(el) {
89
+ const iframe = el.closest(".directive-kirimoto").querySelector("iframe");
90
+ if (iframe) {
91
+ iframe.requestFullscreen();
92
+ }
93
+ }
94
+
95
+ document.querySelectorAll(".directive-kirimoto").forEach(initDirective);
96
+
97
+ return { openFullscreen };
98
+ })();
@@ -0,0 +1,322 @@
1
+ {
2
+ "deviceName": "Craftbot Plus Pro 0.6",
3
+ "new": false,
4
+ "mode": "FDM",
5
+ "internal": 0,
6
+ "bedWidth": 255,
7
+ "bedDepth": 200,
8
+ "bedHeight": 2,
9
+ "maxHeight": 200,
10
+ "bedRound": false,
11
+ "bedBelt": false,
12
+ "deviceZMax": 0,
13
+ "originCenter": false,
14
+ "extrudeAbs": false,
15
+ "spindleMax": 0,
16
+ "gcodeFan": [
17
+ "M106 S{fan_speed}"
18
+ ],
19
+ "gcodeTrack": [
20
+ "M73 P{progress}"
21
+ ],
22
+ "gcodeLayer": [
23
+ ";; LAYER {layer} of {layers}",
24
+ "M117 Layer {layer} of {layers}"
25
+ ],
26
+ "gcodePre": [
27
+ "G21 ; set units to millimeters",
28
+ "G90 ; use absolute coordinates",
29
+ "M83 ; use relative distances for extruder",
30
+ "M106 S0 ; turn off cooling fan",
31
+ "G92 E0 ; zero the extruded length",
32
+ "G1 F1800 ; set feedrate",
33
+ "M104 S{temp} ; set extruder temp",
34
+ "M140 S{bed_temp} ; set bed temp",
35
+ "M190 S{bed_temp} ; wait for bed temp",
36
+ "M109 S{temp} ; wait for extruder temp",
37
+ "G28 ; home all axes",
38
+ "G1 Z15.0 F6000 ; move nozzle away from bed",
39
+ "G1 X0 Y0 ; move to origin",
40
+ "G1 Z0.3 ; lower nozzle to first layer height",
41
+ "G92 E0 ; zero the extruded length again",
42
+ "G1 E8 F50 ; purge a little filament (larger nozzle)",
43
+ "G92 E0 ; zero the extruded length again",
44
+ "M117 Printing..."
45
+ ],
46
+ "gcodePost": [
47
+ "M104 S0 ; turn off extruder",
48
+ "M140 S0 ; turn off bed",
49
+ "M106 S0 ; turn off fan",
50
+ "G1 E-2 F300 ; retract filament (larger nozzle)",
51
+ "G1 Z10 F3000 ; raise Z",
52
+ "G28 X Y ; home X and Y",
53
+ "M84 ; disable steppers",
54
+ "M117 Print Done"
55
+ ],
56
+ "gcodeProc": "",
57
+ "gcodeDwell": [],
58
+ "gcodeSpindle": [],
59
+ "gcodeChange": [],
60
+ "gcodeFExt": "gcode",
61
+ "gcodeSpace": true,
62
+ "gcodeStrip": false,
63
+ "gcodeLaserOn": [],
64
+ "gcodeLaserOff": [],
65
+ "extruders": [
66
+ {
67
+ "extFilament": 1.75,
68
+ "extNozzle": 0.6,
69
+ "extOffsetX": 0,
70
+ "extOffsetY": 0
71
+ }
72
+ ],
73
+ "fwRetract": false,
74
+ "profiles": [
75
+ {
76
+ "processName": "Craftbot Plus Pro 0.30mm Standard 0.6mm",
77
+ "sliceHeight": 0.3,
78
+ "sliceShells": 2,
79
+ "sliceShellOrder": "in-out",
80
+ "sliceLayerStart": "center",
81
+ "sliceFillAngle": 45,
82
+ "sliceFillOverlap": 0.4,
83
+ "sliceFillSparse": 0.1,
84
+ "sliceFillType": "hex",
85
+ "sliceAdaptive": false,
86
+ "sliceMinHeight": 0,
87
+ "sliceSupportDensity": 0.2,
88
+ "sliceSupportOffset": 0.4,
89
+ "sliceSupportGap": 0.5,
90
+ "sliceSupportSize": 6,
91
+ "sliceSupportArea": 0.25,
92
+ "sliceSupportExtra": 0,
93
+ "sliceSupportAngle": 60,
94
+ "sliceSupportNozzle": 0,
95
+ "sliceSolidMinArea": 1,
96
+ "sliceSolidLayers": 3,
97
+ "sliceBottomLayers": 2,
98
+ "sliceTopLayers": 3,
99
+ "firstLayerRate": 20,
100
+ "firstLayerPrintMult": 1,
101
+ "firstLayerYOffset": 0,
102
+ "firstLayerBrim": 0,
103
+ "firstLayerBeltLead": 200,
104
+ "firstLayerFanSpeed": 0,
105
+ "outputTemp": 215,
106
+ "outputBedTemp": 65,
107
+ "outputFanSpeed": 255,
108
+ "outputFeedrate": 40,
109
+ "outputFinishrate": 25,
110
+ "outputSeekrate": 150,
111
+ "outputShellMult": 1.1,
112
+ "outputFillMult": 1.15,
113
+ "outputSparseMult": 1.15,
114
+ "outputRetractDist": 2,
115
+ "outputRetractSpeed": 80,
116
+ "outputRetractWipe": 2,
117
+ "outputRetractDwell": 0,
118
+ "outputShortPoly": 50,
119
+ "outputMinSpeed": 1,
120
+ "outputCoastDist": 0,
121
+ "outputLayerRetract": false,
122
+ "zHopDistance": 0.12,
123
+ "antiBacklash": 0,
124
+ "sliceFillWidth": 1,
125
+ "sliceFillRate": 0,
126
+ "sliceSupportEnable": false,
127
+ "firstSliceHeight": 0.3,
128
+ "firstLayerFillRate": 35,
129
+ "firstLayerLineMult": 1,
130
+ "firstLayerNozzleTemp": 0,
131
+ "firstLayerBedTemp": 0,
132
+ "firstLayerBrimTrig": 0,
133
+ "firstLayerBrimGap": 0,
134
+ "outputRaft": false,
135
+ "outputRaftSpacing": 0.2,
136
+ "outputBrimCount": 0,
137
+ "outputBrimOffset": 2,
138
+ "outputPurgeTower": 0,
139
+ "outputInvertX": false,
140
+ "outputInvertY": false,
141
+ "arcTolerance": 0,
142
+ "ranges": [],
143
+ "outputLoops": 0,
144
+ "firstLayerBrimIn": 0,
145
+ "firstLayerBeltBump": 0,
146
+ "outputBeltFirst": false,
147
+ "sliceFillRepeat": 4,
148
+ "sliceLineWidth": 0,
149
+ "sliceSupportSpan": 5,
150
+ "sliceSupportOutline": true,
151
+ "firstLayerFlatten": 0,
152
+ "outputDraftShield": false,
153
+ "outputAvoidGaps": true,
154
+ "sliceDetectThin": "off",
155
+ "beltAnchor": 200
156
+ },
157
+ {
158
+ "processName": "Craftbot Plus Pro 0.40mm Superdraft 0.6mm",
159
+ "sliceHeight": 0.4,
160
+ "sliceShells": 1,
161
+ "sliceShellOrder": "in-out",
162
+ "sliceLayerStart": "center",
163
+ "sliceFillAngle": 45,
164
+ "sliceFillOverlap": 0.4,
165
+ "sliceFillSparse": 0.2,
166
+ "sliceFillType": "hex",
167
+ "sliceAdaptive": false,
168
+ "sliceMinHeight": 0,
169
+ "sliceSupportDensity": 0.15,
170
+ "sliceSupportOffset": 0.4,
171
+ "sliceSupportGap": 0.5,
172
+ "sliceSupportSize": 8,
173
+ "sliceSupportArea": 0.25,
174
+ "sliceSupportExtra": 0,
175
+ "sliceSupportAngle": 60,
176
+ "sliceSupportNozzle": 0,
177
+ "sliceSolidMinArea": 1,
178
+ "sliceSolidLayers": 2,
179
+ "sliceBottomLayers": 1,
180
+ "sliceTopLayers": 2,
181
+ "firstLayerRate": 25,
182
+ "firstLayerPrintMult": 1,
183
+ "firstLayerYOffset": 0,
184
+ "firstLayerBrim": 0,
185
+ "firstLayerBeltLead": 200,
186
+ "firstLayerFanSpeed": 0,
187
+ "outputTemp": 220,
188
+ "outputBedTemp": 70,
189
+ "outputFanSpeed": 200,
190
+ "outputFeedrate": 80,
191
+ "outputFinishrate": 40,
192
+ "outputSeekrate": 200,
193
+ "outputShellMult": 1.15,
194
+ "outputFillMult": 1.25,
195
+ "outputSparseMult": 1.25,
196
+ "outputRetractDist": 2,
197
+ "outputRetractSpeed": 80,
198
+ "outputRetractWipe": 2,
199
+ "outputRetractDwell": 0,
200
+ "outputShortPoly": 50,
201
+ "outputMinSpeed": 1,
202
+ "outputCoastDist": 0,
203
+ "outputLayerRetract": false,
204
+ "zHopDistance": 0,
205
+ "antiBacklash": 0,
206
+ "sliceFillWidth": 1,
207
+ "sliceFillRate": 0,
208
+ "sliceSupportEnable": false,
209
+ "firstSliceHeight": 0.4,
210
+ "firstLayerFillRate": 40,
211
+ "firstLayerLineMult": 1,
212
+ "firstLayerNozzleTemp": 0,
213
+ "firstLayerBedTemp": 0,
214
+ "firstLayerBrimTrig": 0,
215
+ "firstLayerBrimGap": 0,
216
+ "outputRaft": false,
217
+ "outputRaftSpacing": 0.2,
218
+ "outputBrimCount": 0,
219
+ "outputBrimOffset": 2,
220
+ "outputPurgeTower": 0,
221
+ "outputInvertX": false,
222
+ "outputInvertY": false,
223
+ "arcTolerance": 0,
224
+ "ranges": [],
225
+ "outputLoops": 0,
226
+ "firstLayerBrimIn": 0,
227
+ "firstLayerBeltBump": 0,
228
+ "outputBeltFirst": false,
229
+ "sliceFillRepeat": 2,
230
+ "sliceLineWidth": 0,
231
+ "sliceSupportSpan": 8,
232
+ "sliceSupportOutline": false,
233
+ "firstLayerFlatten": 0,
234
+ "outputDraftShield": false,
235
+ "outputAvoidGaps": true,
236
+ "sliceDetectThin": "off",
237
+ "beltAnchor": 200
238
+ },
239
+ {
240
+ "processName": "Craftbot Plus Pro 0.50mm Fast 0.6mm",
241
+ "sliceHeight": 0.5,
242
+ "sliceShells": 1,
243
+ "sliceShellOrder": "in-out",
244
+ "sliceLayerStart": "center",
245
+ "sliceFillAngle": 45,
246
+ "sliceFillOverlap": 0.4,
247
+ "sliceFillSparse": 0.2,
248
+ "sliceFillType": "hex",
249
+ "sliceAdaptive": false,
250
+ "sliceMinHeight": 0,
251
+ "sliceSupportDensity": 0.15,
252
+ "sliceSupportOffset": 0.4,
253
+ "sliceSupportGap": 0.5,
254
+ "sliceSupportSize": 8,
255
+ "sliceSupportArea": 0.25,
256
+ "sliceSupportExtra": 0,
257
+ "sliceSupportAngle": 60,
258
+ "sliceSupportNozzle": 0,
259
+ "sliceSolidMinArea": 1,
260
+ "sliceSolidLayers": 2,
261
+ "sliceBottomLayers": 1,
262
+ "sliceTopLayers": 2,
263
+ "firstLayerRate": 30,
264
+ "firstLayerPrintMult": 1,
265
+ "firstLayerYOffset": 0,
266
+ "firstLayerBrim": 0,
267
+ "firstLayerBeltLead": 200,
268
+ "firstLayerFanSpeed": 0,
269
+ "outputTemp": 225,
270
+ "outputBedTemp": 75,
271
+ "outputFanSpeed": 150,
272
+ "outputFeedrate": 100,
273
+ "outputFinishrate": 50,
274
+ "outputSeekrate": 250,
275
+ "outputShellMult": 1.2,
276
+ "outputFillMult": 1.3,
277
+ "outputSparseMult": 1.3,
278
+ "outputRetractDist": 2,
279
+ "outputRetractSpeed": 80,
280
+ "outputRetractWipe": 2,
281
+ "outputRetractDwell": 0,
282
+ "outputShortPoly": 50,
283
+ "outputMinSpeed": 1,
284
+ "outputCoastDist": 0,
285
+ "outputLayerRetract": false,
286
+ "zHopDistance": 0,
287
+ "antiBacklash": 0,
288
+ "sliceFillWidth": 1,
289
+ "sliceFillRate": 0,
290
+ "sliceSupportEnable": false,
291
+ "firstSliceHeight": 0.5,
292
+ "firstLayerFillRate": 45,
293
+ "firstLayerLineMult": 1,
294
+ "firstLayerNozzleTemp": 0,
295
+ "firstLayerBedTemp": 0,
296
+ "firstLayerBrimTrig": 0,
297
+ "firstLayerBrimGap": 0,
298
+ "outputRaft": false,
299
+ "outputRaftSpacing": 0.2,
300
+ "outputBrimCount": 0,
301
+ "outputBrimOffset": 2,
302
+ "outputPurgeTower": 0,
303
+ "outputInvertX": false,
304
+ "outputInvertY": false,
305
+ "arcTolerance": 0,
306
+ "ranges": [],
307
+ "outputLoops": 0,
308
+ "firstLayerBrimIn": 0,
309
+ "firstLayerBeltBump": 0,
310
+ "outputBeltFirst": false,
311
+ "sliceFillRepeat": 2,
312
+ "sliceLineWidth": 0,
313
+ "sliceSupportSpan": 8,
314
+ "sliceSupportOutline": false,
315
+ "firstLayerFlatten": 0,
316
+ "outputDraftShield": false,
317
+ "outputAvoidGaps": true,
318
+ "sliceDetectThin": "off",
319
+ "beltAnchor": 200
320
+ }
321
+ ]
322
+ }