@inkweave/plugins 1.0.1 → 1.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/dist/index.js CHANGED
@@ -1,23 +1,86 @@
1
- var F = Object.defineProperty;
2
- var T = (e, t, s) => t in e ? F(e, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[t] = s;
3
- var r = (e, t, s) => T(e, typeof t != "symbol" ? t + "" : t, s);
4
- import { Patches as c, Tags as h, createSelectors as O, contentsStore as k, choicesStore as A, ChoiceParser as w } from "@inkweave/core";
5
- import { create as _ } from "zustand";
6
- import { persist as M } from "zustand/middleware";
7
- import { jsx as m } from "react/jsx-runtime";
8
- import { memo as y, useState as b, useEffect as L, useCallback as S, useRef as P } from "react";
9
- import { ChoiceComponents as $ } from "@inkweave/react";
10
- const D = {
1
+ import { Tags as p, Patches as d, ChoiceParser as O, createSelectors as U, contentsStore as j, choicesStore as B } from "@inkweave/core";
2
+ import { choiceStyles as C, ChoiceRegistry as R, useStory as q } from "@inkweave/react";
3
+ import { jsx as f } from "react/jsx-runtime";
4
+ import { memo as I, useRef as y, useEffect as v, useState as x, useCallback as w } from "react";
5
+ import { create as $ } from "zustand";
6
+ import { persist as K } from "zustand/middleware";
7
+ const o = class o {
8
+ static get sound() {
9
+ return o._sound;
10
+ }
11
+ static get music() {
12
+ return o._music;
13
+ }
14
+ static get sound_handler() {
15
+ return o._sound_handler;
16
+ }
17
+ static get music_handler() {
18
+ return o._music_handler;
19
+ }
20
+ static set_music(t) {
21
+ o._music = new Audio(t), o._music.loop = !0, o._music_handler = () => {
22
+ var n;
23
+ (n = o._music) == null || n.play();
24
+ }, o._music.addEventListener("canplaythrough", o._music_handler);
25
+ }
26
+ static set_sound(t) {
27
+ o._sound = new Audio(t), o._sound_handler = () => {
28
+ var n;
29
+ (n = o._sound) == null || n.play();
30
+ }, o._sound.addEventListener("canplaythrough", o._sound_handler);
31
+ }
32
+ static cleanupSound() {
33
+ o._sound && (o._sound.pause(), o._sound.currentTime = 0, o._sound.removeEventListener("canplaythrough", o._sound_handler), o._sound.src = ""), o._sound = null, o._sound_handler = () => {
34
+ };
35
+ }
36
+ static cleanupMusic() {
37
+ o._music && (o._music.pause(), o._music.currentTime = 0, o._music.removeEventListener("canplaythrough", o._music_handler), o._music.src = ""), o._music = null, o._music_handler = () => {
38
+ };
39
+ }
40
+ };
41
+ o._sound = null, o._music = null, o._sound_handler = () => {
42
+ }, o._music_handler = () => {
43
+ };
44
+ let c = o;
45
+ const E = (e, t) => t && "resolveFilename" in t ? t.resolveFilename(e) : e, _t = () => {
46
+ p.add("sound", (e, t) => {
47
+ e ? (c.cleanupSound(), c.set_sound(E(e, t.options.fileHandler))) : c.cleanupSound();
48
+ }), p.add("music", (e, t) => {
49
+ e ? (c.cleanupMusic(), c.set_music(E(e, t.options.fileHandler))) : c.cleanupMusic();
50
+ }), d.add(function() {
51
+ this.audio = c, this.cleanups.push(() => {
52
+ c.cleanupSound(), c.cleanupMusic();
53
+ });
54
+ }, {});
55
+ }, z = ({
56
+ choice: e,
57
+ onClick: t,
58
+ className: n = "",
59
+ children: s
60
+ }) => {
61
+ const a = y(null), r = y(t), i = parseFloat(e.val || "0");
62
+ r.current = t, v(() => {
63
+ if (!(i <= 0))
64
+ return a.current = setInterval(() => {
65
+ r.current();
66
+ }, i * 1e3), () => {
67
+ a.current && clearInterval(a.current);
68
+ };
69
+ }, [i]);
70
+ const m = `${C.button} ${n}`.trim();
71
+ return /* @__PURE__ */ f("a", { className: m, style: { display: "none" }, children: s });
72
+ }, G = I(z), Ct = () => {
73
+ O.add("auto", (e, t) => {
74
+ e.type = "auto", e.val = t;
75
+ }), R.register("auto", G), d.add(null, {});
76
+ }, H = {
11
77
  local: localStorage,
12
78
  session: sessionStorage
13
79
  };
14
- let E = "local";
15
- const f = () => D[E];
16
- class J {
80
+ let D = "local";
81
+ const _ = () => H[D];
82
+ class Q {
17
83
  constructor(t) {
18
- r(this, "data");
19
- r(this, "timestamp");
20
- r(this, "meta");
21
84
  this.data = JSON.stringify(t), this.timestamp = new Intl.DateTimeFormat(void 0, {
22
85
  month: "short",
23
86
  day: "numeric",
@@ -26,181 +89,129 @@ class J {
26
89
  }).format(Date.now()), this.meta = "autogenerated";
27
90
  }
28
91
  }
29
- const v = _()(
30
- M(
92
+ const b = $()(
93
+ K(
31
94
  (e, t) => ({
32
95
  storage: /* @__PURE__ */ new Map(),
33
- setStorage: (s, o, n) => {
34
- const i = new Map(t().storage), u = [...i.get(s) || []];
35
- u[o] = new J(n), i.set(s, u), e({ storage: i });
96
+ setStorage: (n, s, a) => {
97
+ const r = new Map(t().storage), i = [...r.get(n) || []];
98
+ i[s] = new Q(a), r.set(n, i), e({ storage: r });
36
99
  },
37
- changeFormat: (s) => {
38
- E = s;
100
+ changeFormat: (n) => {
101
+ D = n;
39
102
  }
40
103
  }),
41
104
  {
42
105
  name: "inkStory",
43
106
  storage: {
44
107
  getItem: (e) => {
45
- const t = f().getItem(e);
108
+ const t = _().getItem(e);
46
109
  if (!t) return null;
47
110
  try {
48
- const { state: s } = JSON.parse(t);
111
+ const { state: n } = JSON.parse(t);
49
112
  return {
50
113
  state: {
51
- ...s,
52
- storage: new Map(s.storage)
114
+ ...n,
115
+ storage: new Map(n.storage)
53
116
  }
54
117
  };
55
- } catch (s) {
56
- return console.error("InkWeave: Failed to parse storage data:", s), null;
118
+ } catch (n) {
119
+ return console.error("InkWeave: Failed to parse storage data:", n), null;
57
120
  }
58
121
  },
59
122
  setItem: (e, t) => {
60
- const s = JSON.stringify({
123
+ const n = JSON.stringify({
61
124
  state: {
62
125
  ...t.state,
63
- storage: Array.from(
64
- t.state.storage.entries()
65
- )
126
+ storage: Array.from(t.state.storage.entries())
66
127
  }
67
128
  });
68
- f().setItem(e, s);
129
+ _().setItem(e, n);
69
130
  },
70
131
  removeItem: (e) => {
71
- f().removeItem(e);
132
+ _().removeItem(e);
72
133
  }
73
134
  }
74
135
  }
75
136
  )
76
- );
77
- let C = {
137
+ ), N = {
78
138
  memory_format: "local"
79
- };
80
- const R = (e) => v((t) => t.storage.get(e) || null), W = (e, t) => {
81
- const s = {
139
+ }, X = (e) => b((t) => t.storage.get(e) || null), Y = (e, t) => {
140
+ const n = {
82
141
  state: t.story.state.toJson()
83
142
  };
84
- t.save_label.forEach((o) => {
85
- const n = t[o];
86
- o in t && n !== void 0 && (typeof n == "string" || typeof n == "number" || typeof n == "boolean" || Array.isArray(n)) && (s[o] = n);
87
- }), v.getState().setStorage(t.title, e, s);
88
- }, N = (e, t) => {
89
- let s = null;
143
+ t.save_label.forEach((s) => {
144
+ const a = t[s];
145
+ s in t && a !== void 0 && (typeof a == "string" || typeof a == "number" || typeof a == "boolean" || Array.isArray(a)) && (n[s] = a);
146
+ }), b.getState().setStorage(t.title, e, n);
147
+ }, Z = (e, t) => {
148
+ let n = null;
90
149
  try {
91
- s = JSON.parse(e);
92
- } catch (o) {
93
- console.error("InkWeave: Failed to parse save data:", o);
150
+ n = JSON.parse(e);
151
+ } catch (s) {
152
+ console.error("InkWeave: Failed to parse save data:", s);
94
153
  return;
95
154
  }
96
- s && (t.story.state.LoadJson(s.state), t.clear(), t.save_label.forEach((o) => {
97
- o in t && typeof t[o] < "u" && o in s && (t[o] = s[o]);
155
+ n && (t.story.state.LoadJson(n.state), t.clear(), t.save_label.forEach((s) => {
156
+ s in t && typeof t[s] < "u" && s in n && (t[s] = n[s]);
98
157
  }), t.continue());
99
- }, nt = () => {
100
- c.add(function() {
101
- v.getState().changeFormat(C.memory_format);
102
- }, C);
103
- }, j = { save: W, load: N, show: R }, x = ({ className: e = "", fallback: t = null }) => {
104
- const s = d((g) => g.image), [o, n] = b(!1);
105
- L(() => {
106
- n(!1);
107
- }, [s]);
108
- const i = S(() => {
109
- n(!0), console.warn(`InkWeave: Failed to load image: ${s}`);
110
- }, [s]), u = S(() => {
111
- n(!1);
112
- }, []);
113
- return s ? o ? t ? /* @__PURE__ */ m("div", { id: "inkweave-image", className: e, children: t }) : null : /* @__PURE__ */ m("div", { id: "inkweave-image", className: e, children: /* @__PURE__ */ m("img", { src: s, alt: "", onError: i, onLoad: u }) }) : null;
114
- }, at = y(x), d = _((e) => ({
115
- image: "",
116
- setImage: (t) => e({ image: t })
117
- })), B = (e, t) => t && "resolveFilename" in t ? t.resolveFilename(e) : e, it = () => {
118
- h.add("image", (e, t) => {
119
- e ? d.getState().setImage(B(e, t.options.fileHandler)) : d.getState().setImage("");
120
- }), c.add(function() {
121
- Object.defineProperty(this, "image", {
122
- get() {
123
- return d.getState().image;
124
- },
125
- set(e) {
126
- d.getState().setImage(e);
127
- }
128
- }), this.save_label.push("image"), this.clears.push(() => {
129
- this.image = "";
130
- });
131
- }, {});
132
- };
133
- class a {
134
- static get sound() {
135
- return this._sound;
136
- }
137
- static get music() {
138
- return this._music;
139
- }
140
- static get sound_handler() {
141
- return this._sound_handler;
142
- }
143
- static get music_handler() {
144
- return this._music_handler;
145
- }
146
- static set_music(t) {
147
- this._music = new Audio(t), this._music.loop = !0, this._music_handler = () => {
148
- var s;
149
- (s = this._music) == null || s.play();
150
- }, this._music.addEventListener("canplaythrough", this._music_handler);
151
- }
152
- static set_sound(t) {
153
- this._sound = new Audio(t), this._sound_handler = () => {
154
- var s;
155
- (s = this._sound) == null || s.play();
156
- }, this._sound.addEventListener("canplaythrough", this._sound_handler);
157
- }
158
- static cleanupSound() {
159
- this._sound && (this._sound.pause(), this._sound.currentTime = 0, this._sound.removeEventListener(
160
- "canplaythrough",
161
- this._sound_handler
162
- ), this._sound.src = ""), this._sound = null, this._sound_handler = () => {
163
- };
164
- }
165
- static cleanupMusic() {
166
- this._music && (this._music.pause(), this._music.currentTime = 0, this._music.removeEventListener(
167
- "canplaythrough",
168
- this._music_handler
169
- ), this._music.src = ""), this._music = null, this._music_handler = () => {
170
- };
171
- }
158
+ }, wt = () => {
159
+ d.add(() => {
160
+ b.getState().changeFormat(N.memory_format);
161
+ }, N);
162
+ }, V = { save: Y, load: Z, show: X }, tt = {
163
+ autosave_enabled: !0
164
+ }, It = () => {
165
+ p.add("autosave", (e, t) => {
166
+ t.options.autosave_enabled && V.save(1, t);
167
+ }), d.add(null, tt);
168
+ }, L = /* @__PURE__ */ new Map();
169
+ function et(e) {
170
+ return `${e.type}_${e.text}_${e.val || ""}`;
172
171
  }
173
- r(a, "_sound", null), r(a, "_music", null), r(a, "_sound_handler", () => {
174
- }), r(a, "_music_handler", () => {
175
- });
176
- const I = (e, t) => t && "resolveFilename" in t ? t.resolveFilename(e) : e, rt = () => {
177
- h.add("sound", (e, t) => {
178
- e ? (a.cleanupSound(), a.set_sound(I(e, t.options.fileHandler))) : a.cleanupSound();
179
- }), h.add("music", (e, t) => {
180
- e ? (a.cleanupMusic(), a.set_music(I(e, t.options.fileHandler))) : a.cleanupMusic();
181
- }), c.add(function() {
182
- this.audio = a, this.cleanups.push(() => {
183
- a.cleanupSound(), a.cleanupMusic();
184
- });
185
- }, {});
186
- }, U = `
187
- #inkweave-contents div,
188
- #inkweave-choices {
189
- opacity: 0;
190
- animation: inkFadeIn 0.5s forwards;
191
- animation-delay: var(--delay, 0s);
172
+ function nt(e) {
173
+ const t = L.get(e) || 0;
174
+ return Date.now() < t;
192
175
  }
193
- @keyframes inkFadeIn {
194
- from {
195
- opacity: 0;
196
- }
197
- to {
198
- opacity: 1;
199
- }
176
+ function ot(e) {
177
+ const t = L.get(e) || 0, n = Math.max(0, t - Date.now());
178
+ return Math.ceil(n / 1e3);
200
179
  }
201
- `, q = {
180
+ function st(e, t) {
181
+ L.set(e, Date.now() + t * 1e3);
182
+ }
183
+ const at = ({
184
+ choice: e,
185
+ onClick: t,
186
+ className: n = "",
187
+ children: s
188
+ }) => {
189
+ var M, F;
190
+ const a = parseFloat(e.val || "0"), r = et(e), i = q(), [, m] = x(0), g = y(!0), u = nt(r), T = ot(r);
191
+ v(() => () => {
192
+ g.current = !1;
193
+ }, []), v(() => {
194
+ if (!u) return;
195
+ const S = setInterval(() => {
196
+ g.current && m((k) => k + 1);
197
+ }, 1e3);
198
+ return () => clearInterval(S);
199
+ }, [u]);
200
+ const P = w(() => {
201
+ u || (t(), st(r, a), m((S) => S + 1));
202
+ }, [u, a, t, r]), A = `${((M = C) == null ? void 0 : M.button) || ""} ${n} ${u && ((F = C) == null ? void 0 : F.disabled) || ""}`.trim(), J = i.options.cdTemplate || "{text} ({time})", W = u && T > 0 ? J.replace("{text}", String(s)).replace("{time}", String(T)) : s;
203
+ return /* @__PURE__ */ f("a", { className: A, onClick: P, children: W });
204
+ }, rt = I(at), ct = {
205
+ cdTemplate: "{text} ({time})"
206
+ }, $t = () => {
207
+ O.add("cd", (e, t) => {
208
+ e.type = "cd", e.val = t;
209
+ }), R.register("cd", rt), d.add(null, ct);
210
+ }, it = {
211
+ // 控制文字显示延迟速度(秒),可通过初始化时传入 linedelay 参数修改
212
+ // 或在 Ink 中使用 #linedelay:0.2 动态调整
202
213
  linedelay: 0.05
203
- }, l = _((e) => ({
214
+ }, l = $((e) => ({
204
215
  contentComplete: !0,
205
216
  last_content: "",
206
217
  setContentComplete: (t) => e({ contentComplete: t }),
@@ -209,67 +220,88 @@ const I = (e, t) => t && "resolveFilename" in t ? t.resolveFilename(e) : e, rt =
209
220
  e({ last_content: "" });
210
221
  return;
211
222
  }
212
- const s = t[t.length - 1];
213
- e({ last_content: s });
223
+ const n = t[t.length - 1];
224
+ e({ last_content: n });
214
225
  }
215
- }));
216
- let p = null;
217
- const ct = () => {
218
- p || (p = document.createElement("style"), p.textContent = U, document.head.appendChild(p)), c.add(function() {
226
+ })), bt = () => {
227
+ p.add("linedelay", (e, t) => {
228
+ if (e != null) {
229
+ const n = parseFloat(e);
230
+ Number.isNaN(n) || (t.options.linedelay = n, n === 0 && l.getState().setContentComplete(!0));
231
+ }
232
+ }), d.add(function() {
219
233
  const e = this.choose, t = this;
220
- this.choose = function(n) {
221
- return t.options.linedelay != 0 && (l.getState().setContentComplete(!1), l.getState().setLastContent(t.contents)), e.call(t, n);
222
- }, Object.defineProperty(this, "visibleLines", {
234
+ this.choose = (a) => (t.options.linedelay !== 0 && (l.getState().setContentComplete(!1), l.getState().setLastContent(t.contents)), e.call(t, a)), Object.defineProperty(this, "visibleLines", {
223
235
  get() {
224
- const n = l.getState().last_content;
225
- return t.contents.lastIndexOf(n);
236
+ const a = l.getState().last_content;
237
+ return a ? t.contents.lastIndexOf(a) : -1;
226
238
  }
227
239
  }), Object.defineProperty(this, "choicesCanShow", {
228
240
  get() {
229
- return O(l).use.contentComplete();
241
+ return U(l).use.contentComplete();
230
242
  }
231
243
  });
232
- let s = null;
233
- const o = k.subscribe(() => {
234
- t.options.linedelay != 0 && (s && clearTimeout(s), s = setTimeout(() => {
244
+ let n = null;
245
+ const s = j.subscribe(() => {
246
+ if (n && clearTimeout(n), t.options.linedelay === 0) {
235
247
  l.getState().setContentComplete(!0);
236
- }, (t.contents.length - t.visibleLines) * t.options.linedelay * 1e3));
248
+ return;
249
+ }
250
+ n = setTimeout(
251
+ () => {
252
+ l.getState().setContentComplete(!0);
253
+ },
254
+ Math.max(
255
+ 0,
256
+ (t.contents.length - t.visibleLines) * t.options.linedelay * 1e3
257
+ )
258
+ );
237
259
  });
238
260
  this.cleanups.push(() => {
239
- o(), s && clearTimeout(s);
261
+ s(), n && clearTimeout(n);
240
262
  }), this.clears.push(() => {
241
- t.options.linedelay != 0 && l.getState().setContentComplete(!1), l.getState().setLastContent([]);
242
- });
243
- }, q);
244
- }, lt = () => {
245
- c.add(function() {
246
- let e = null;
247
- const t = A.subscribe(() => {
248
- e && clearTimeout(e), e = setTimeout(() => {
249
- const s = document.querySelector(
250
- "ul#inkweave-choices > li:last-child"
251
- );
252
- if (s) {
253
- const o = document.querySelector(
254
- "#inkweave-story"
255
- );
256
- o == null || o.scrollTo({
257
- top: s.offsetTop,
258
- behavior: "smooth"
259
- });
260
- }
261
- }, 0);
263
+ t.options.linedelay !== 0 && l.getState().setContentComplete(!1), l.getState().setLastContent([]);
262
264
  });
263
- this.cleanups.push(() => {
264
- t(), e && clearTimeout(e);
265
+ }, it);
266
+ }, lt = "_container_1a16a_1", ut = {
267
+ container: lt
268
+ }, dt = ({ className: e = "", fallback: t = null }) => {
269
+ const n = h((u) => u.image), [s, a] = x(!1);
270
+ v(() => {
271
+ a(!1);
272
+ }, []);
273
+ const r = y(n);
274
+ r.current = n;
275
+ const i = w(() => {
276
+ a(!0), console.warn(`InkWeave: Failed to load image: ${r.current}`);
277
+ }, []), m = w(() => {
278
+ a(!1);
279
+ }, []), g = `${ut.container} ${e}`.trim();
280
+ return n ? s ? t ? /* @__PURE__ */ f("div", { className: g, children: t }) : null : /* @__PURE__ */ f("div", { className: g, children: /* @__PURE__ */ f("img", { src: n, alt: "", onError: i, onLoad: m }) }) : null;
281
+ }, Lt = I(dt), h = $((e) => ({
282
+ image: "",
283
+ setImage: (t) => e({ image: t })
284
+ })), mt = (e, t) => t && "resolveFilename" in t ? t.resolveFilename(e) : e, Tt = () => {
285
+ p.add("image", (e, t) => {
286
+ e ? h.getState().setImage(mt(e, t.options.fileHandler)) : h.getState().setImage("");
287
+ }), d.add(function() {
288
+ Object.defineProperty(this, "image", {
289
+ get() {
290
+ return h.getState().image;
291
+ },
292
+ set(e) {
293
+ h.getState().setImage(e);
294
+ }
295
+ }), this.save_label.push("image"), this.clears.push(() => {
296
+ this.image = "";
265
297
  });
266
298
  }, {});
267
- }, z = ["http:", "https:"], ut = () => {
268
- h.add("linkopen", (e) => {
299
+ }, pt = ["http:", "https:"], Mt = () => {
300
+ p.add("linkopen", (e) => {
269
301
  if (e) {
270
302
  try {
271
303
  const t = new URL(e);
272
- if (!z.includes(t.protocol)) {
304
+ if (!pt.includes(t.protocol)) {
273
305
  console.warn("InkWeave: Blocked unsafe URL protocol:", t.protocol);
274
306
  return;
275
307
  }
@@ -280,67 +312,40 @@ const ct = () => {
280
312
  window.open(e, "_blank", "noopener,noreferrer");
281
313
  }
282
314
  });
283
- }, G = ({
284
- val: e,
285
- onClick: t,
286
- className: s = "",
287
- children: o
288
- }) => {
289
- const n = P(null), i = parseFloat(e || "0");
290
- return L(() => {
291
- if (!(i <= 0))
292
- return n.current = setInterval(() => {
293
- t();
294
- }, i * 1e3), () => {
295
- n.current && clearInterval(n.current);
296
- };
297
- }, [i, t]), /* @__PURE__ */ m("a", { className: `inkweave-btn ${s}`, style: { display: "none" }, children: o });
298
- }, H = y(G), dt = () => {
299
- w.add("auto", (e, t) => {
300
- e.type = "auto", e.val = t;
301
- }), $.register("auto", H), c.add(null, {});
302
- }, K = ({
303
- val: e,
304
- onClick: t,
305
- className: s = "",
306
- children: o
307
- }) => {
308
- const [n, i] = b(!1), u = parseFloat(e || "0"), g = () => {
309
- n || (t(), i(!0), setTimeout(() => {
310
- i(!1);
311
- }, u * 1e3));
312
- };
313
- return /* @__PURE__ */ m(
314
- "a",
315
- {
316
- className: `inkweave-btn ${s} ${n ? "disabled" : ""}`,
317
- onClick: g,
318
- children: o
319
- }
320
- );
321
- }, Q = y(K), mt = () => {
322
- w.add("cd", (e, t) => {
323
- e.type = "cd", e.val = t;
324
- }), $.register("cd", Q), c.add(null, {});
325
- }, X = {
326
- autosave_enabled: !0
327
- }, ht = () => {
328
- h.add("autosave", (e, t) => {
329
- t.options.autosave_enabled && j.save(2, t);
330
- }), c.add(null, X);
315
+ }, Ft = () => {
316
+ d.add(function() {
317
+ let e = null;
318
+ const t = B.subscribe(() => {
319
+ e && clearTimeout(e), e = setTimeout(() => {
320
+ const n = document.querySelector(
321
+ '[data-inkweave="choices"] > li:last-child'
322
+ );
323
+ if (n) {
324
+ const s = document.querySelector('[data-inkweave="story"]');
325
+ s == null || s.scrollTo({
326
+ top: n.offsetTop,
327
+ behavior: "smooth"
328
+ });
329
+ }
330
+ }, 0);
331
+ });
332
+ this.cleanups.push(() => {
333
+ t(), e && clearTimeout(e);
334
+ });
335
+ }, {});
331
336
  };
332
337
  export {
333
- at as Image,
334
- rt as loadAudio,
335
- dt as loadAutoButton,
336
- ht as loadAutosave,
337
- mt as loadCdButton,
338
- ct as loadFadeEffect,
339
- it as loadImage,
340
- ut as loadLinkopen,
341
- nt as loadMemory,
342
- lt as loadScrollafterchoice,
343
- j as memory,
344
- d as useStoryImage
338
+ Lt as Image,
339
+ _t as loadAudio,
340
+ Ct as loadAutoButton,
341
+ It as loadAutosave,
342
+ $t as loadCdButton,
343
+ bt as loadFadeEffect,
344
+ Tt as loadImage,
345
+ Mt as loadLinkopen,
346
+ wt as loadMemory,
347
+ Ft as loadScrollafterchoice,
348
+ V as memory,
349
+ h as useStoryImage
345
350
  };
346
351
  //# sourceMappingURL=index.js.map