@bagelink/blox 1.15.273 → 1.15.277

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 (34) hide show
  1. package/dist/CmsPageView.vue.d.ts.map +1 -1
  2. package/dist/{PreviewApp-DadFCvv9.js → PreviewApp-CMVaJ7u_.js} +1 -1
  3. package/dist/{PreviewApp-1tOhVrq-.cjs → PreviewApp-DPabYkJj.cjs} +1 -1
  4. package/dist/PreviewApp.vue.d.ts.map +1 -1
  5. package/dist/{PreviewApp.vue_vue_type_style_index_0_lang-CpZt3b1X.cjs → PreviewApp.vue_vue_type_style_index_0_lang-BE0hNpPg.cjs} +7 -1
  6. package/dist/{PreviewApp.vue_vue_type_style_index_0_lang-DIKjhzD_.js → PreviewApp.vue_vue_type_style_index_0_lang-DNhMmQCj.js} +7 -1
  7. package/dist/bridge.d.ts +2 -0
  8. package/dist/bridge.d.ts.map +1 -1
  9. package/dist/composables/useBloxRuntime.d.ts +5 -0
  10. package/dist/composables/useBloxRuntime.d.ts.map +1 -0
  11. package/dist/core.d.ts.map +1 -1
  12. package/dist/defineBlock.d.ts +5 -0
  13. package/dist/defineBlock.d.ts.map +1 -1
  14. package/dist/index.cjs +11 -2
  15. package/dist/index.d.ts +3 -2
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.mjs +39 -30
  18. package/dist/{prerender-1fZ-6d-3.js → prerender-BCRyYSNg.js} +18 -1
  19. package/dist/{prerender-52IAxpqw.cjs → prerender-DQ7D6auC.cjs} +17 -0
  20. package/dist/{routes-DE0OIzJr.js → routes-DUYnmvXF.js} +45 -37
  21. package/dist/{routes-B4RYeiGa.cjs → routes-DxMOiC2D.cjs} +9 -1
  22. package/dist/schema.d.ts +2 -0
  23. package/dist/schema.d.ts.map +1 -1
  24. package/dist/shard-runner-CZnX4qnn.cjs +123 -0
  25. package/dist/shard-runner-D4gCfCi3.js +101 -0
  26. package/dist/ssg/cli.cjs +45 -11
  27. package/dist/ssg/cli.mjs +42 -8
  28. package/dist/ssg/index.cjs +21 -21
  29. package/dist/ssg/index.mjs +3 -3
  30. package/dist/ssg/shard-runner.d.ts +45 -0
  31. package/dist/ssg/shard-runner.d.ts.map +1 -0
  32. package/dist/symbols.d.ts +8 -1
  33. package/dist/symbols.d.ts.map +1 -1
  34. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CmsPageView.vue.d.ts","sourceRoot":"","sources":["../src/CmsPageView.vue"],"names":[],"mappings":";AAgxBA,wBAMG"}
1
+ {"version":3,"file":"CmsPageView.vue.d.ts","sourceRoot":"","sources":["../src/CmsPageView.vue"],"names":[],"mappings":";AAwxBA,wBAMG"}
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "./PreviewApp.vue_vue_type_style_index_0_lang-DIKjhzD_.js";
1
+ import { _ as _sfc_main } from "./PreviewApp.vue_vue_type_style_index_0_lang-DNhMmQCj.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const PreviewApp_vue_vue_type_style_index_0_lang = require("./PreviewApp.vue_vue_type_style_index_0_lang-CpZt3b1X.cjs");
3
+ const PreviewApp_vue_vue_type_style_index_0_lang = require("./PreviewApp.vue_vue_type_style_index_0_lang-BE0hNpPg.cjs");
4
4
  exports.default = PreviewApp_vue_vue_type_style_index_0_lang._sfc_main;
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewApp.vue.d.ts","sourceRoot":"","sources":["../src/PreviewApp.vue"],"names":[],"mappings":";AAqSA,wBAMG"}
1
+ {"version":3,"file":"PreviewApp.vue.d.ts","sourceRoot":"","sources":["../src/PreviewApp.vue"],"names":[],"mappings":";AAiTA,wBAMG"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  const vue = require("vue");
3
- const routes = require("./routes-B4RYeiGa.cjs");
3
+ const routes = require("./routes-DxMOiC2D.cjs");
4
4
  function sendToEditor(msg) {
5
5
  window.parent.postMessage(cloneForPostMessage(msg), "*");
6
6
  }
@@ -159,7 +159,12 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
159
159
  const selectedIndex = vue.ref(null);
160
160
  const hoveredIndex = vue.ref(null);
161
161
  const globalBlockTypes = vue.ref([]);
162
+ const runtimeLoading = vue.ref(true);
162
163
  vue.provide("contexts", contexts);
164
+ vue.provide(routes.BLOX_RUNTIME_KEY, {
165
+ isPreview: vue.ref(true),
166
+ loading: runtimeLoading
167
+ });
163
168
  let heightObserver = null;
164
169
  function onMessage(event) {
165
170
  var _a;
@@ -169,6 +174,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
169
174
  blocks.value = ((_a = msg.page.page.content) == null ? void 0 : _a.blocks) ?? [];
170
175
  contexts.value = msg.page.contexts ?? {};
171
176
  setLocale(msg.locale);
177
+ runtimeLoading.value = false;
172
178
  break;
173
179
  case "BLOX_SET_LOCALE":
174
180
  setLocale(msg.locale);
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, inject, ref, h, provide, onMounted, onUnmounted, openBlock, createElementBlock, createVNode, unref, nextTick } from "vue";
2
- import { e as BLOX_REGISTRY_KEY, u as useLocale } from "./routes-DE0OIzJr.js";
2
+ import { e as BLOX_REGISTRY_KEY, u as useLocale, f as BLOX_RUNTIME_KEY } from "./routes-DUYnmvXF.js";
3
3
  function sendToEditor(msg) {
4
4
  window.parent.postMessage(cloneForPostMessage(msg), "*");
5
5
  }
@@ -158,7 +158,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
158
158
  const selectedIndex = ref(null);
159
159
  const hoveredIndex = ref(null);
160
160
  const globalBlockTypes = ref([]);
161
+ const runtimeLoading = ref(true);
161
162
  provide("contexts", contexts);
163
+ provide(BLOX_RUNTIME_KEY, {
164
+ isPreview: ref(true),
165
+ loading: runtimeLoading
166
+ });
162
167
  let heightObserver = null;
163
168
  function onMessage(event) {
164
169
  var _a;
@@ -168,6 +173,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
168
173
  blocks.value = ((_a = msg.page.page.content) == null ? void 0 : _a.blocks) ?? [];
169
174
  contexts.value = msg.page.contexts ?? {};
170
175
  setLocale(msg.locale);
176
+ runtimeLoading.value = false;
171
177
  break;
172
178
  case "BLOX_SET_LOCALE":
173
179
  setLocale(msg.locale);
package/dist/bridge.d.ts CHANGED
@@ -12,6 +12,8 @@ export interface BlockSchemaInfo {
12
12
  category?: string;
13
13
  thumbnail?: string;
14
14
  order?: number;
15
+ /** Hide from the add-block picker while preserving existing instances. */
16
+ pickerHidden?: boolean;
15
17
  /** True for site-level global blocks (nav/footer). See {@link BlockMeta.global}. */
16
18
  global?: boolean;
17
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAE1D,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,UAAU,CAAC,EAAE,qBAAqB,CAAA;IAClC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB;AAMD,MAAM,MAAM,aAAa,GACpB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,KAAK,EAAE,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE;AAC7B;;;;GAIG;GACD;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE;AACrD;;;;;GAKG;GACD;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAMnD,MAAM,MAAM,cAAc,GACrB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AACpD;;;;;GAKG;GACD;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAM3C,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAEtD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAEjF"}
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAE1D,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,UAAU,CAAC,EAAE,qBAAqB,CAAA;IAClC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0EAA0E;IAC1E,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB;AAMD,MAAM,MAAM,aAAa,GACpB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,KAAK,EAAE,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE;AAC7B;;;;GAIG;GACD;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE;AACrD;;;;;GAKG;GACD;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAMnD,MAAM,MAAM,cAAc,GACrB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AACpD;;;;;GAKG;GACD;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAM3C,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAEtD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAEjF"}
@@ -0,0 +1,5 @@
1
+ export declare function useBloxRuntime(): {
2
+ isPreview: import('vue').Ref<boolean, boolean> | import('vue').ComputedRef<boolean>;
3
+ loading: import('vue').Ref<boolean, boolean> | import('vue').ComputedRef<boolean>;
4
+ };
5
+ //# sourceMappingURL=useBloxRuntime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBloxRuntime.d.ts","sourceRoot":"","sources":["../../src/composables/useBloxRuntime.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc;;;EAO7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAa,MAAM,KAAK,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,WAAW,CAAA;AAkB5D,4GAA4G;AAC5G,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,cAAc,CAAA;AAE5D,MAAM,WAAW,WAAY,SAAQ,eAAe;IACnD,qIAAqI;IACrI,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC1C;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACrD,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,SAAS,CAAC,EAAE,eAAe,CAAA;CAC3B;AAED,qBAAa,YAAY;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAChE,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,UAAU,CAAC,CAAiB;gBAExB,OAAO,CAAC,EAAE,WAAW;IASjC,uEAAuE;IACvE,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAED,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI;IAgC3E,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,IAAI;IA6BnE,+EAA+E;IAC/E,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAI9C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAyBpC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI;CAoC9C;AAMD,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,YAAY,CAS9D"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAa,MAAM,KAAK,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,WAAW,CAAA;AAkB5D,4GAA4G;AAC5G,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,cAAc,CAAA;AAE5D,MAAM,WAAW,WAAY,SAAQ,eAAe;IACnD,qIAAqI;IACrI,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC1C;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACrD,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,SAAS,CAAC,EAAE,eAAe,CAAA;CAC3B;AAED,qBAAa,YAAY;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAChE,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,UAAU,CAAC,CAAiB;gBAExB,OAAO,CAAC,EAAE,WAAW;IASjC,uEAAuE;IACvE,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAED,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI;IAiC3E,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,IAAI;IA8BnE,+EAA+E;IAC/E,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAI9C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAyBpC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI;CAoC9C;AAMD,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,YAAY,CAS9D"}
@@ -40,6 +40,11 @@ export interface BlockMeta {
40
40
  thumbnail?: string;
41
41
  /** Sort order in the editor block picker. Lower values appear first. Defaults to 100. */
42
42
  order?: number;
43
+ /**
44
+ * Hide this block from the editor picker while keeping it registered so
45
+ * existing page instances continue to render and remain editable.
46
+ */
47
+ pickerHidden?: boolean;
43
48
  /**
44
49
  * When true, this block is a *global* (site-level) block: its content is
45
50
  * shared across every page and stored on the website (`blox_global_block`),
@@ -1 +1 @@
1
- {"version":3,"file":"defineBlock.d.ts","sourceRoot":"","sources":["../src/defineBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAErD,yFAAyF;AACzF,MAAM,WAAW,eAAe;IAC/B,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,eAAe,GAAG,eAAe,EAAE,CAAA;AAEjF,MAAM,WAAW,SAAS;IACzB,kGAAkG;IAClG,IAAI,EAAE,MAAM,CAAA;IACZ,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAA;IACb,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sFAAsF;IACtF,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,yGAAyG;IACzG,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,qBAAqB,CAAA;IAClC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yFAAyF;IACzF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,kGAAkG;AAClG,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAmBtD"}
1
+ {"version":3,"file":"defineBlock.d.ts","sourceRoot":"","sources":["../src/defineBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAErD,yFAAyF;AACzF,MAAM,WAAW,eAAe;IAC/B,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,eAAe,GAAG,eAAe,EAAE,CAAA;AAEjF,MAAM,WAAW,SAAS;IACzB,kGAAkG;IAClG,IAAI,EAAE,MAAM,CAAA;IACZ,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAA;IACb,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sFAAsF;IACtF,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,yGAAyG;IACzG,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,qBAAqB,CAAA;IAClC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yFAAyF;IACzF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,kGAAkG;AAClG,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAmBtD"}
package/dist/index.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const routes = require("./routes-B4RYeiGa.cjs");
4
- const PreviewApp_vue_vue_type_style_index_0_lang = require("./PreviewApp.vue_vue_type_style_index_0_lang-CpZt3b1X.cjs");
3
+ const routes = require("./routes-DxMOiC2D.cjs");
4
+ const PreviewApp_vue_vue_type_style_index_0_lang = require("./PreviewApp.vue_vue_type_style_index_0_lang-BE0hNpPg.cjs");
5
5
  const vue = require("vue");
6
6
  const vueRouter = require("vue-router");
7
7
  const pinia = require("pinia");
@@ -119,6 +119,13 @@ function usePageContext(key) {
119
119
  return value;
120
120
  });
121
121
  }
122
+ function useBloxRuntime() {
123
+ const runtime = vue.inject(routes.BLOX_RUNTIME_KEY, null);
124
+ return {
125
+ isPreview: (runtime == null ? void 0 : runtime.isPreview) ?? vue.computed(() => false),
126
+ loading: (runtime == null ? void 0 : runtime.loading) ?? vue.computed(() => false)
127
+ };
128
+ }
122
129
  function useContentSeo(item, head) {
123
130
  const route = safeRoute();
124
131
  const { locale } = routes.useLocale();
@@ -354,6 +361,7 @@ exports.BLOX_DATA_KEY = routes.BLOX_DATA_KEY;
354
361
  exports.BLOX_DATA_WINDOW_KEY = routes.BLOX_DATA_WINDOW_KEY;
355
362
  exports.BLOX_LAYOUT_KEY = routes.BLOX_LAYOUT_KEY;
356
363
  exports.BLOX_LOCALE_STRATEGY_KEY = routes.BLOX_LOCALE_STRATEGY_KEY;
364
+ exports.BLOX_RUNTIME_KEY = routes.BLOX_RUNTIME_KEY;
357
365
  exports.BloxInstance = routes.BloxInstance;
358
366
  exports.CmsPageView = routes._sfc_main$1;
359
367
  exports.ContentDetailView = routes._sfc_main$2;
@@ -402,6 +410,7 @@ exports.createBloxApp = createBloxApp;
402
410
  exports.defineBlock = defineBlock;
403
411
  exports.injectPlausible = injectPlausible;
404
412
  exports.serializeRegistry = serializeRegistry;
413
+ exports.useBloxRuntime = useBloxRuntime;
405
414
  exports.useContentSeo = useContentSeo;
406
415
  exports.useGlobalBlock = useGlobalBlock;
407
416
  exports.useLocaleNav = useLocaleNav;
package/dist/index.d.ts CHANGED
@@ -15,6 +15,7 @@ export { useLocale } from './composables/useLocale';
15
15
  export type { Locale } from './composables/useLocale';
16
16
  export { useLocaleNav } from './composables/useLocaleNav';
17
17
  export { usePageContext } from './composables/usePageContext';
18
+ export { useBloxRuntime } from './composables/useBloxRuntime';
18
19
  export { classifyLink, installSmartLinks, isAbsoluteExternal, isSpecialScheme, normalizeLink, normalizeTo, toInternalPath, } from './smartLinks';
19
20
  export type { LinkKind } from './smartLinks';
20
21
  export { BloxInstance, createBlox } from './core';
@@ -33,7 +34,7 @@ export { default as PreviewRenderer } from './PreviewRenderer';
33
34
  export { buildBloxManifest, serializeRegistry } from './manifest';
34
35
  export type { BloxManifest, BlockManifestEntry } from './manifest';
35
36
  export type { BlockComponent, BlockDefinition, BlockSchema } from './schema';
36
- export { BLOX_ADMIN_CONFIG_KEY, BLOX_CONFIG_KEY, BLOX_LAYOUT_KEY, BLOX_LOCALE_STRATEGY_KEY } from './symbols';
37
- export type { BloxAdminConfig, BloxConfig, BloxLayoutConfig } from './symbols';
37
+ export { BLOX_ADMIN_CONFIG_KEY, BLOX_CONFIG_KEY, BLOX_LAYOUT_KEY, BLOX_LOCALE_STRATEGY_KEY, BLOX_RUNTIME_KEY } from './symbols';
38
+ export type { BloxAdminConfig, BloxConfig, BloxLayoutConfig, BloxRuntimeContext } from './symbols';
38
39
  export { applyLayoutChrome, isSoloContentPage } from './layout';
39
40
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAChH,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAKnD,YAAY,EACX,cAAc,EACd,KAAK,EAEL,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,cAAc,EACd,QAAQ,EACR,eAAe,EACf,cAAc,EACd,WAAW,GACX,MAAM,aAAa,CAAA;AAIpB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACtD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAI9E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAK3E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAKjD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAExE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvI,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAClG,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,YAAY,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAK7D,OAAO,EACN,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,WAAW,EACX,cAAc,GACd,MAAM,cAAc,CAAA;AACrB,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAK5C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACjD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAKxD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAChE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAK5F,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAEnG,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAKjD,OAAO,EACN,aAAa,EACb,aAAa,EACb,eAAe,EACf,2BAA2B,EAC3B,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,aAAa,EACb,WAAW,EACX,WAAW,EACX,iBAAiB,GACjB,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAEhG,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAK9D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACjE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAKlE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAI5E,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,eAAe,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC/H,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAClG,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA"}
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import { f as BLOX_LOCALE_STRATEGY_KEY, u as useLocale, n as normalizeLink, h as useSeo, j as getRegistryData, k as getItemBySlug, l as getItemById, m as getContentRoute, p as provideBloxData, d as createBlox, g as generateContentRoutes, o as installContentFallback, i as installLocaleAwareResolve, a as setActiveLocale, q as installSmartLinks, r as consumePendingLocaleSwitch } from "./routes-DE0OIzJr.js";
2
- import { _, t, v, w, B, x, y, z, A, C, P, D, E, c, b, F, G, H, I, J, K, L, M, N, O, Q, R, S, s, T, U, V, W } from "./routes-DE0OIzJr.js";
3
- import { _ as _2, P as P2, s as s2, a } from "./PreviewApp.vue_vue_type_style_index_0_lang-DIKjhzD_.js";
1
+ import { h as BLOX_LOCALE_STRATEGY_KEY, u as useLocale, n as normalizeLink, f as BLOX_RUNTIME_KEY, j as useSeo, k as getRegistryData, l as getItemBySlug, m as getItemById, o as getContentRoute, p as provideBloxData, d as createBlox, g as generateContentRoutes, q as installContentFallback, i as installLocaleAwareResolve, a as setActiveLocale, r as installSmartLinks, t as consumePendingLocaleSwitch } from "./routes-DUYnmvXF.js";
2
+ import { _, v, w, x, B, y, z, A, C, D, P, E, F, c, b, G, H, I, J, K, L, M, N, O, Q, R, S, T, s, U, V, W, X } from "./routes-DUYnmvXF.js";
3
+ import { _ as _2, P as P2, s as s2, a } from "./PreviewApp.vue_vue_type_style_index_0_lang-DNhMmQCj.js";
4
4
  import { defineComponent, resolveComponent, openBlock, createBlock, withCtx, Transition, resolveDynamicComponent, inject, ref, watch, onMounted, onUnmounted, computed, onServerPrefetch, toValue, createApp, h, Suspense, markRaw } from "vue";
5
5
  import { useRouter, useRoute } from "vue-router";
6
6
  import { createPinia } from "pinia";
@@ -118,6 +118,13 @@ function usePageContext(key) {
118
118
  return value;
119
119
  });
120
120
  }
121
+ function useBloxRuntime() {
122
+ const runtime = inject(BLOX_RUNTIME_KEY, null);
123
+ return {
124
+ isPreview: (runtime == null ? void 0 : runtime.isPreview) ?? computed(() => false),
125
+ loading: (runtime == null ? void 0 : runtime.loading) ?? computed(() => false)
126
+ };
127
+ }
121
128
  function useContentSeo(item, head) {
122
129
  const route = safeRoute();
123
130
  const { locale } = useLocale();
@@ -348,59 +355,61 @@ function buildBloxManifest(blox) {
348
355
  }
349
356
  export {
350
357
  _ as AdminEditBar,
351
- t as BLOX_ADMIN_CONFIG_KEY,
352
- v as BLOX_CONFIG_KEY,
353
- w as BLOX_DATA_KEY,
358
+ v as BLOX_ADMIN_CONFIG_KEY,
359
+ w as BLOX_CONFIG_KEY,
360
+ x as BLOX_DATA_KEY,
354
361
  B as BLOX_DATA_WINDOW_KEY,
355
- x as BLOX_LAYOUT_KEY,
362
+ y as BLOX_LAYOUT_KEY,
356
363
  BLOX_LOCALE_STRATEGY_KEY,
357
- y as BloxInstance,
364
+ BLOX_RUNTIME_KEY,
365
+ z as BloxInstance,
358
366
  _sfc_main as BloxRouterView,
359
- z as CmsPageView,
360
- A as ContentDetailView,
361
- C as ContentHost,
367
+ A as CmsPageView,
368
+ C as ContentDetailView,
369
+ D as ContentHost,
362
370
  P as PageRenderer,
363
371
  _2 as PreviewApp,
364
372
  P2 as PreviewRenderer,
365
- D as applyLayoutChrome,
373
+ E as applyLayoutChrome,
366
374
  buildBloxManifest,
367
- E as classifyLink,
375
+ F as classifyLink,
368
376
  c as collectBloxData,
369
377
  b as collectBloxSeo,
370
- F as configureApi,
371
- G as contentRoutes,
378
+ G as configureApi,
379
+ H as contentRoutes,
372
380
  createBlox,
373
381
  createBloxApp,
374
382
  defineBlock,
375
- H as defineContent,
383
+ I as defineContent,
376
384
  generateContentRoutes,
377
385
  getContentRoute,
378
- I as getContentRouteByCollection,
386
+ J as getContentRouteByCollection,
379
387
  getItemById,
380
388
  getItemBySlug,
381
- J as getWebsiteId,
382
- K as getWebsiteIdSync,
389
+ K as getWebsiteId,
390
+ L as getWebsiteIdSync,
383
391
  injectPlausible,
384
392
  installContentFallback,
385
393
  installSmartLinks,
386
- L as isAbsoluteExternal,
387
- M as isSoloContentPage,
388
- N as isSpecialScheme,
389
- O as listItems,
394
+ M as isAbsoluteExternal,
395
+ N as isSoloContentPage,
396
+ O as isSpecialScheme,
397
+ Q as listItems,
390
398
  normalizeLink,
391
- Q as normalizeTo,
399
+ R as normalizeTo,
392
400
  provideBloxData,
393
- R as provideContentItem,
394
- S as resolvePath,
401
+ S as provideContentItem,
402
+ T as resolvePath,
395
403
  s2 as sendToEditor,
396
404
  a as sendToPreview,
397
405
  serializeRegistry,
398
406
  s as setApiOrigin,
399
- T as toInternalPath,
400
- U as useBloxEdit,
401
- V as useContentItem,
407
+ U as toInternalPath,
408
+ V as useBloxEdit,
409
+ useBloxRuntime,
410
+ W as useContentItem,
402
411
  useContentSeo,
403
- W as useData,
412
+ X as useData,
404
413
  useGlobalBlock,
405
414
  useLocale,
406
415
  useLocaleNav,
@@ -111,6 +111,12 @@ function extractCollectionRefs(pages) {
111
111
  }
112
112
  return refs;
113
113
  }
114
+ const cmsRoutes = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
115
+ __proto__: null,
116
+ expandLocalePaths,
117
+ fetchCmsPrerenderPaths,
118
+ fetchCmsSiteData
119
+ }, Symbol.toStringTag, { value: "Module" }));
114
120
  async function polyfillBloxSsgGlobals(options) {
115
121
  const { env } = await import("node:process");
116
122
  const pageUrl = (options == null ? void 0 : options.pageUrl) ?? env.BAGELINK_API_URL ?? "https://example.com/";
@@ -547,6 +553,15 @@ async function mergeLlmParts(options) {
547
553
  }
548
554
  return { pages: pages.length };
549
555
  }
556
+ const llmArtifacts = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
557
+ __proto__: null,
558
+ buildJsonLd,
559
+ extractPageText,
560
+ generateLlmsFullTxt,
561
+ generateLlmsTxt,
562
+ isPathExcluded,
563
+ mergeLlmParts
564
+ }, Symbol.toStringTag, { value: "Module" }));
550
565
  async function prerender({
551
566
  root = process.cwd(),
552
567
  clientOutDir = "dist/client",
@@ -887,5 +902,7 @@ export {
887
902
  generateSitemapXml as m,
888
903
  getSiteIconFlags as n,
889
904
  mergeLlmParts as o,
890
- polyfillBloxSsgGlobals as p
905
+ polyfillBloxSsgGlobals as p,
906
+ cmsRoutes as q,
907
+ llmArtifacts as r
891
908
  };
@@ -134,6 +134,12 @@ function extractCollectionRefs(pages) {
134
134
  }
135
135
  return refs;
136
136
  }
137
+ const cmsRoutes = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
138
+ __proto__: null,
139
+ expandLocalePaths,
140
+ fetchCmsPrerenderPaths,
141
+ fetchCmsSiteData
142
+ }, Symbol.toStringTag, { value: "Module" }));
137
143
  async function polyfillBloxSsgGlobals(options) {
138
144
  const { env } = await import("node:process");
139
145
  const pageUrl = (options == null ? void 0 : options.pageUrl) ?? env.BAGELINK_API_URL ?? "https://example.com/";
@@ -570,6 +576,15 @@ async function mergeLlmParts(options) {
570
576
  }
571
577
  return { pages: pages.length };
572
578
  }
579
+ const llmArtifacts = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
580
+ __proto__: null,
581
+ buildJsonLd,
582
+ extractPageText,
583
+ generateLlmsFullTxt,
584
+ generateLlmsTxt,
585
+ isPathExcluded,
586
+ mergeLlmParts
587
+ }, Symbol.toStringTag, { value: "Module" }));
573
588
  async function prerender({
574
589
  root = process.cwd(),
575
590
  clientOutDir = "dist/client",
@@ -897,6 +912,7 @@ function discoverInternalLinks(html) {
897
912
  exports.buildJsonLd = buildJsonLd;
898
913
  exports.buildPageHead = buildPageHead;
899
914
  exports.buildSiteHead = buildSiteHead;
915
+ exports.cmsRoutes = cmsRoutes;
900
916
  exports.extractPageText = extractPageText;
901
917
  exports.fetchCmsPrerenderPaths = fetchCmsPrerenderPaths;
902
918
  exports.fetchCmsSiteData = fetchCmsSiteData;
@@ -906,6 +922,7 @@ exports.generateNetlifyRedirects = generateNetlifyRedirects;
906
922
  exports.generateRobotsTxt = generateRobotsTxt;
907
923
  exports.generateSitemapXml = generateSitemapXml;
908
924
  exports.getSiteIconFlags = getSiteIconFlags;
925
+ exports.llmArtifacts = llmArtifacts;
909
926
  exports.mergeLlmParts = mergeLlmParts;
910
927
  exports.polyfillBloxSsgGlobals = polyfillBloxSsgGlobals;
911
928
  exports.prerender = prerender;
@@ -85,6 +85,7 @@ async function getItemById(collection, id, locale2) {
85
85
  const BLOX_REGISTRY_KEY = Symbol("blox:registry");
86
86
  const BLOX_CONFIG_KEY = Symbol("blox:config");
87
87
  const BLOX_LOCALE_STRATEGY_KEY = Symbol("blox:locale-strategy");
88
+ const BLOX_RUNTIME_KEY = Symbol("blox:runtime");
88
89
  const BLOX_ADMIN_CONFIG_KEY = Symbol("blox:admin-config");
89
90
  const BLOX_LAYOUT_KEY = Symbol("blox:layout");
90
91
  const STORAGE_KEY = "blox:edit";
@@ -317,6 +318,10 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
317
318
  const error = ref(null);
318
319
  const initialLoading = ref(true);
319
320
  const navigating = ref(false);
321
+ provide(BLOX_RUNTIME_KEY, {
322
+ isPreview: ref(false),
323
+ loading: computed(() => initialLoading.value || navigating.value)
324
+ });
320
325
  function navigableAlternates(alternates, resolvedSlug) {
321
326
  const keys = Object.keys(alternates ?? {});
322
327
  if (!keys.length) return { [locale2.value]: resolvedSlug };
@@ -903,6 +908,7 @@ class BloxInstance {
903
908
  category: meta.category,
904
909
  thumbnail: meta.thumbnail,
905
910
  order: meta.order,
911
+ pickerHidden: meta.pickerHidden,
906
912
  global: meta.global
907
913
  }
908
914
  };
@@ -932,6 +938,7 @@ class BloxInstance {
932
938
  category: meta.category,
933
939
  thumbnail: meta.thumbnail,
934
940
  order: meta.order,
941
+ pickerHidden: meta.pickerHidden,
935
942
  global: meta.global
936
943
  }
937
944
  };
@@ -957,7 +964,7 @@ class BloxInstance {
957
964
  }
958
965
  router.addRoute({
959
966
  path: "/_blox_preview",
960
- component: () => import("./PreviewApp-DadFCvv9.js"),
967
+ component: () => import("./PreviewApp-CMVaJ7u_.js"),
961
968
  beforeEnter: () => window.parent !== window ? true : "/"
962
969
  });
963
970
  router.addRoute({ path: "/:pathMatch(.*)*", component: _sfc_main$2 });
@@ -1231,54 +1238,55 @@ function installContentFallback(router, supportedLocales, defaultLocale) {
1231
1238
  });
1232
1239
  }
1233
1240
  export {
1234
- _sfc_main$1 as A,
1241
+ _sfc_main$2 as A,
1235
1242
  BLOX_DATA_WINDOW_KEY as B,
1236
- _sfc_main as C,
1237
- applyLayoutChrome as D,
1238
- classifyLink as E,
1239
- configureApi as F,
1240
- contentRoutes as G,
1241
- defineContent as H,
1242
- getContentRouteByCollection as I,
1243
- getWebsiteId as J,
1244
- getWebsiteIdSync as K,
1245
- isAbsoluteExternal as L,
1246
- isSoloContentPage as M,
1247
- isSpecialScheme as N,
1248
- listItems as O,
1243
+ _sfc_main$1 as C,
1244
+ _sfc_main as D,
1245
+ applyLayoutChrome as E,
1246
+ classifyLink as F,
1247
+ configureApi as G,
1248
+ contentRoutes as H,
1249
+ defineContent as I,
1250
+ getContentRouteByCollection as J,
1251
+ getWebsiteId as K,
1252
+ getWebsiteIdSync as L,
1253
+ isAbsoluteExternal as M,
1254
+ isSoloContentPage as N,
1255
+ isSpecialScheme as O,
1249
1256
  PageRenderer as P,
1250
- normalizeTo as Q,
1251
- provideContentItem as R,
1252
- resolvePath as S,
1253
- toInternalPath as T,
1254
- useBloxEdit as U,
1255
- useContentItem as V,
1256
- useData as W,
1257
+ listItems as Q,
1258
+ normalizeTo as R,
1259
+ provideContentItem as S,
1260
+ resolvePath as T,
1261
+ toInternalPath as U,
1262
+ useBloxEdit as V,
1263
+ useContentItem as W,
1264
+ useData as X,
1257
1265
  _sfc_main$3 as _,
1258
1266
  setActiveLocale as a,
1259
1267
  collectBloxSeo as b,
1260
1268
  collectBloxData as c,
1261
1269
  createBlox as d,
1262
1270
  BLOX_REGISTRY_KEY as e,
1263
- BLOX_LOCALE_STRATEGY_KEY as f,
1271
+ BLOX_RUNTIME_KEY as f,
1264
1272
  generateContentRoutes as g,
1265
- useSeo as h,
1273
+ BLOX_LOCALE_STRATEGY_KEY as h,
1266
1274
  installLocaleAwareResolve as i,
1267
- getRegistryData as j,
1268
- getItemBySlug as k,
1269
- getItemById as l,
1270
- getContentRoute as m,
1275
+ useSeo as j,
1276
+ getRegistryData as k,
1277
+ getItemBySlug as l,
1278
+ getItemById as m,
1271
1279
  normalizeLink as n,
1272
- installContentFallback as o,
1280
+ getContentRoute as o,
1273
1281
  provideBloxData as p,
1274
- installSmartLinks as q,
1275
- consumePendingLocaleSwitch as r,
1282
+ installContentFallback as q,
1283
+ installSmartLinks as r,
1276
1284
  setApiOrigin as s,
1277
- BLOX_ADMIN_CONFIG_KEY as t,
1285
+ consumePendingLocaleSwitch as t,
1278
1286
  useLocale as u,
1279
- BLOX_CONFIG_KEY as v,
1280
- BLOX_DATA_KEY as w,
1281
- BLOX_LAYOUT_KEY as x,
1282
- BloxInstance as y,
1283
- _sfc_main$2 as z
1287
+ BLOX_ADMIN_CONFIG_KEY as v,
1288
+ BLOX_CONFIG_KEY as w,
1289
+ BLOX_DATA_KEY as x,
1290
+ BLOX_LAYOUT_KEY as y,
1291
+ BloxInstance as z
1284
1292
  };
@@ -86,6 +86,7 @@ async function getItemById(collection, id, locale2) {
86
86
  const BLOX_REGISTRY_KEY = Symbol("blox:registry");
87
87
  const BLOX_CONFIG_KEY = Symbol("blox:config");
88
88
  const BLOX_LOCALE_STRATEGY_KEY = Symbol("blox:locale-strategy");
89
+ const BLOX_RUNTIME_KEY = Symbol("blox:runtime");
89
90
  const BLOX_ADMIN_CONFIG_KEY = Symbol("blox:admin-config");
90
91
  const BLOX_LAYOUT_KEY = Symbol("blox:layout");
91
92
  const STORAGE_KEY = "blox:edit";
@@ -318,6 +319,10 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
318
319
  const error = vue.ref(null);
319
320
  const initialLoading = vue.ref(true);
320
321
  const navigating = vue.ref(false);
322
+ vue.provide(BLOX_RUNTIME_KEY, {
323
+ isPreview: vue.ref(false),
324
+ loading: vue.computed(() => initialLoading.value || navigating.value)
325
+ });
321
326
  function navigableAlternates(alternates, resolvedSlug) {
322
327
  const keys = Object.keys(alternates ?? {});
323
328
  if (!keys.length) return { [locale2.value]: resolvedSlug };
@@ -904,6 +909,7 @@ class BloxInstance {
904
909
  category: meta.category,
905
910
  thumbnail: meta.thumbnail,
906
911
  order: meta.order,
912
+ pickerHidden: meta.pickerHidden,
907
913
  global: meta.global
908
914
  }
909
915
  };
@@ -933,6 +939,7 @@ class BloxInstance {
933
939
  category: meta.category,
934
940
  thumbnail: meta.thumbnail,
935
941
  order: meta.order,
942
+ pickerHidden: meta.pickerHidden,
936
943
  global: meta.global
937
944
  }
938
945
  };
@@ -958,7 +965,7 @@ class BloxInstance {
958
965
  }
959
966
  router.addRoute({
960
967
  path: "/_blox_preview",
961
- component: () => Promise.resolve().then(() => require("./PreviewApp-1tOhVrq-.cjs")),
968
+ component: () => Promise.resolve().then(() => require("./PreviewApp-DPabYkJj.cjs")),
962
969
  beforeEnter: () => window.parent !== window ? true : "/"
963
970
  });
964
971
  router.addRoute({ path: "/:pathMatch(.*)*", component: _sfc_main$2 });
@@ -1238,6 +1245,7 @@ exports.BLOX_DATA_WINDOW_KEY = BLOX_DATA_WINDOW_KEY;
1238
1245
  exports.BLOX_LAYOUT_KEY = BLOX_LAYOUT_KEY;
1239
1246
  exports.BLOX_LOCALE_STRATEGY_KEY = BLOX_LOCALE_STRATEGY_KEY;
1240
1247
  exports.BLOX_REGISTRY_KEY = BLOX_REGISTRY_KEY;
1248
+ exports.BLOX_RUNTIME_KEY = BLOX_RUNTIME_KEY;
1241
1249
  exports.BloxInstance = BloxInstance;
1242
1250
  exports.PageRenderer = PageRenderer;
1243
1251
  exports._sfc_main = _sfc_main$3;
package/dist/schema.d.ts CHANGED
@@ -22,6 +22,8 @@ export interface BlockSchema {
22
22
  thumbnail?: string;
23
23
  /** Sort order in the editor block picker. Lower values appear first. Defaults to 100. */
24
24
  order?: number;
25
+ /** Hide from the add-block picker while preserving existing instances. */
26
+ pickerHidden?: boolean;
25
27
  /** True for site-level global blocks (nav/footer). See {@link BlockMeta.global}. */
26
28
  global?: boolean;
27
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AACpC,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAErE,MAAM,WAAW,WAAW;IAC3B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,qBAAqB,CAAA;IAClC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yFAAyF;IACzF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,WAAW,CAAA;CACnB;AAED,+EAA+E;AAC/E,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AACpC,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAErE,MAAM,WAAW,WAAW;IAC3B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,qBAAqB,CAAA;IAClC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yFAAyF;IACzF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0EAA0E;IAC1E,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,WAAW,CAAA;CACnB;AAED,+EAA+E;AAC/E,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAA"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
25
+ const node_child_process = require("node:child_process");
26
+ const os = require("node:os");
27
+ const path = require("node:path");
28
+ const process = require("node:process");
29
+ const AUTO_SHARD_CAP = Number(process.env.BLOX_SSG_SHARD_CAP) || 6;
30
+ const PREFETCH_BUDGET = Number(process.env.BLOX_SSG_PREFETCH_BUDGET) || 24;
31
+ function resolveShardCount(shards) {
32
+ if (shards === "auto") {
33
+ const cores = os.cpus().length || 4;
34
+ return Math.max(1, Math.min(cores, AUTO_SHARD_CAP));
35
+ }
36
+ return Math.max(1, Math.floor(shards));
37
+ }
38
+ async function enumerateRoutes(cmd) {
39
+ return new Promise((resolve, reject) => {
40
+ const child = node_child_process.spawn(cmd, { shell: true, stdio: ["ignore", "pipe", "inherit"] });
41
+ let out = "";
42
+ child.stdout.on("data", (d) => {
43
+ out += d.toString();
44
+ });
45
+ child.on("error", reject);
46
+ child.on(
47
+ "close",
48
+ (code) => code === 0 ? resolve(out.split(/\s+/).filter(Boolean)) : reject(new Error(`routes-cmd exited ${code}`))
49
+ );
50
+ });
51
+ }
52
+ function runShard(index, total, paths, opts, llmPartsDir) {
53
+ return new Promise((resolve) => {
54
+ const args = [
55
+ `--mode=${opts.mode}`,
56
+ `--shard=${index}/${total}`,
57
+ "--no-crawl",
58
+ `--llm-parts=${path.join(llmPartsDir, `part.${index}.json`)}`,
59
+ ...opts.passthroughArgs,
60
+ ...paths
61
+ ];
62
+ const child = node_child_process.spawn("blox-ssg", args, {
63
+ stdio: ["ignore", "inherit", "inherit"],
64
+ env: {
65
+ ...process.env,
66
+ // Divide the global prefetch budget across shards so N processes
67
+ // don't collectively overwhelm the API.
68
+ BLOX_SSG_PREFETCH: String(Math.max(2, Math.floor(PREFETCH_BUDGET / total)))
69
+ }
70
+ });
71
+ child.on("close", (code) => resolve(code ?? 0));
72
+ child.on("error", (err) => {
73
+ console.error(`[blox-ssg] shard ${index} failed to spawn: ${err.message}`);
74
+ resolve(1);
75
+ });
76
+ });
77
+ }
78
+ async function runSharded(opts) {
79
+ const total = resolveShardCount(opts.shards);
80
+ const paths = [...opts.extraPaths];
81
+ if (opts.routesCmd) {
82
+ const enumerated = await enumerateRoutes(opts.routesCmd);
83
+ for (const p of enumerated) if (!paths.includes(p)) paths.push(p);
84
+ console.log(`[blox-ssg] routes-cmd enumerated ${enumerated.length} route(s)`);
85
+ }
86
+ console.log(`[blox-ssg] sharded run · ${total} shard(s) · ${paths.length} extra path(s)`);
87
+ const llmPartsDir = path.resolve("dist", ".llm-parts");
88
+ await (await import("node:fs/promises")).mkdir(llmPartsDir, { recursive: true }).catch(() => {
89
+ });
90
+ const start = Date.now();
91
+ const codes = total === 1 ? [await runShard(0, 1, paths, opts, llmPartsDir)] : await Promise.all(Array.from({ length: total }, (_, i) => runShard(i, total, paths, opts, llmPartsDir)));
92
+ const failed = codes.findIndex((c) => c !== 0);
93
+ if (failed !== -1) {
94
+ console.error(`[blox-ssg] shard ${failed} exited with code ${codes[failed]}`);
95
+ return codes[failed];
96
+ }
97
+ if (process.env.BLOX_SSG_LLM !== "0") {
98
+ try {
99
+ const [{ mergeLlmParts }, { fetchCmsSiteData }] = await Promise.all([
100
+ Promise.resolve().then(() => require("./prerender-DQ7D6auC.cjs")).then((n) => n.llmArtifacts),
101
+ Promise.resolve().then(() => require("./prerender-DQ7D6auC.cjs")).then((n) => n.cmsRoutes)
102
+ ]);
103
+ let website = null;
104
+ try {
105
+ website = (await fetchCmsSiteData(opts.apiBase, opts.websiteName)).website;
106
+ } catch {
107
+ }
108
+ const partFiles = Array.from({ length: total }, (_, i) => path.join(llmPartsDir, `part.${i}.json`));
109
+ const { pages } = await mergeLlmParts({
110
+ partFiles,
111
+ outDir: path.resolve("dist"),
112
+ website,
113
+ config: { fullText: process.env.BLOX_SSG_LLM_FULL !== "0" }
114
+ });
115
+ console.log(`[blox-ssg] merged llms.txt (${pages} pages)`);
116
+ } catch (e) {
117
+ console.warn(`[blox-ssg] llms merge skipped: ${e.message}`);
118
+ }
119
+ }
120
+ console.log(`[blox-ssg] sharded run done in ${((Date.now() - start) / 1e3).toFixed(1)}s`);
121
+ return 0;
122
+ }
123
+ exports.runSharded = runSharded;
@@ -0,0 +1,101 @@
1
+ import { spawn } from "node:child_process";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import process from "node:process";
5
+ const AUTO_SHARD_CAP = Number(process.env.BLOX_SSG_SHARD_CAP) || 6;
6
+ const PREFETCH_BUDGET = Number(process.env.BLOX_SSG_PREFETCH_BUDGET) || 24;
7
+ function resolveShardCount(shards) {
8
+ if (shards === "auto") {
9
+ const cores = os.cpus().length || 4;
10
+ return Math.max(1, Math.min(cores, AUTO_SHARD_CAP));
11
+ }
12
+ return Math.max(1, Math.floor(shards));
13
+ }
14
+ async function enumerateRoutes(cmd) {
15
+ return new Promise((resolve, reject) => {
16
+ const child = spawn(cmd, { shell: true, stdio: ["ignore", "pipe", "inherit"] });
17
+ let out = "";
18
+ child.stdout.on("data", (d) => {
19
+ out += d.toString();
20
+ });
21
+ child.on("error", reject);
22
+ child.on(
23
+ "close",
24
+ (code) => code === 0 ? resolve(out.split(/\s+/).filter(Boolean)) : reject(new Error(`routes-cmd exited ${code}`))
25
+ );
26
+ });
27
+ }
28
+ function runShard(index, total, paths, opts, llmPartsDir) {
29
+ return new Promise((resolve) => {
30
+ const args = [
31
+ `--mode=${opts.mode}`,
32
+ `--shard=${index}/${total}`,
33
+ "--no-crawl",
34
+ `--llm-parts=${path.join(llmPartsDir, `part.${index}.json`)}`,
35
+ ...opts.passthroughArgs,
36
+ ...paths
37
+ ];
38
+ const child = spawn("blox-ssg", args, {
39
+ stdio: ["ignore", "inherit", "inherit"],
40
+ env: {
41
+ ...process.env,
42
+ // Divide the global prefetch budget across shards so N processes
43
+ // don't collectively overwhelm the API.
44
+ BLOX_SSG_PREFETCH: String(Math.max(2, Math.floor(PREFETCH_BUDGET / total)))
45
+ }
46
+ });
47
+ child.on("close", (code) => resolve(code ?? 0));
48
+ child.on("error", (err) => {
49
+ console.error(`[blox-ssg] shard ${index} failed to spawn: ${err.message}`);
50
+ resolve(1);
51
+ });
52
+ });
53
+ }
54
+ async function runSharded(opts) {
55
+ const total = resolveShardCount(opts.shards);
56
+ const paths = [...opts.extraPaths];
57
+ if (opts.routesCmd) {
58
+ const enumerated = await enumerateRoutes(opts.routesCmd);
59
+ for (const p of enumerated) if (!paths.includes(p)) paths.push(p);
60
+ console.log(`[blox-ssg] routes-cmd enumerated ${enumerated.length} route(s)`);
61
+ }
62
+ console.log(`[blox-ssg] sharded run · ${total} shard(s) · ${paths.length} extra path(s)`);
63
+ const llmPartsDir = path.resolve("dist", ".llm-parts");
64
+ await (await import("node:fs/promises")).mkdir(llmPartsDir, { recursive: true }).catch(() => {
65
+ });
66
+ const start = Date.now();
67
+ const codes = total === 1 ? [await runShard(0, 1, paths, opts, llmPartsDir)] : await Promise.all(Array.from({ length: total }, (_, i) => runShard(i, total, paths, opts, llmPartsDir)));
68
+ const failed = codes.findIndex((c) => c !== 0);
69
+ if (failed !== -1) {
70
+ console.error(`[blox-ssg] shard ${failed} exited with code ${codes[failed]}`);
71
+ return codes[failed];
72
+ }
73
+ if (process.env.BLOX_SSG_LLM !== "0") {
74
+ try {
75
+ const [{ mergeLlmParts }, { fetchCmsSiteData }] = await Promise.all([
76
+ import("./prerender-BCRyYSNg.js").then((n) => n.r),
77
+ import("./prerender-BCRyYSNg.js").then((n) => n.q)
78
+ ]);
79
+ let website = null;
80
+ try {
81
+ website = (await fetchCmsSiteData(opts.apiBase, opts.websiteName)).website;
82
+ } catch {
83
+ }
84
+ const partFiles = Array.from({ length: total }, (_, i) => path.join(llmPartsDir, `part.${i}.json`));
85
+ const { pages } = await mergeLlmParts({
86
+ partFiles,
87
+ outDir: path.resolve("dist"),
88
+ website,
89
+ config: { fullText: process.env.BLOX_SSG_LLM_FULL !== "0" }
90
+ });
91
+ console.log(`[blox-ssg] merged llms.txt (${pages} pages)`);
92
+ } catch (e) {
93
+ console.warn(`[blox-ssg] llms merge skipped: ${e.message}`);
94
+ }
95
+ }
96
+ console.log(`[blox-ssg] sharded run done in ${((Date.now() - start) / 1e3).toFixed(1)}s`);
97
+ return 0;
98
+ }
99
+ export {
100
+ runSharded
101
+ };
package/dist/ssg/cli.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bun
2
2
  "use strict";
3
3
  const process = require("node:process");
4
- const prerender = require("../prerender-52IAxpqw.cjs");
4
+ const cmsRoutes = require("../prerender-DQ7D6auC.cjs");
5
5
  function installFetchTimeout() {
6
6
  const ms = Number(process.env.BLOX_SSG_FETCH_TIMEOUT_MS) || 2e4;
7
7
  const original = globalThis.fetch;
@@ -48,12 +48,21 @@ async function main() {
48
48
  let shardIndex = 0;
49
49
  let shardTotal = 1;
50
50
  let llmPartsFile = "";
51
+ let shardsOpt = null;
52
+ let routesCmd = "";
53
+ const passthroughArgs = [];
51
54
  const excludePaths = ["/_blox_preview"];
52
55
  for (const a of argv) {
53
56
  if (a === "--crawl") {
54
57
  crawl = true;
58
+ passthroughArgs.push(a);
55
59
  } else if (a === "--no-crawl") {
56
60
  crawl = false;
61
+ } else if (a.startsWith("--shards=")) {
62
+ const v = a.slice("--shards=".length);
63
+ shardsOpt = v === "auto" ? "auto" : Number.isInteger(Number(v)) ? Number(v) : null;
64
+ } else if (a.startsWith("--routes-cmd=")) {
65
+ routesCmd = a.slice("--routes-cmd=".length);
57
66
  } else if (a.startsWith("--shard=")) {
58
67
  const [i, n] = a.slice("--shard=".length).split("/").map(Number);
59
68
  if (Number.isInteger(i) && Number.isInteger(n) && n > 0 && i >= 0 && i < n) {
@@ -68,29 +77,54 @@ Usage:
68
77
  blox-ssg [options] [extra-paths...]
69
78
 
70
79
  Options:
71
- --mode=<env> Environment from bgl.config.ts (default: production)
72
- --crawl Discover internal links from rendered HTML
73
- --no-crawl Disable crawling (default)
74
- --exclude=<path> Exclude path prefix from rendering
75
- --help, -h Show this help
80
+ --mode=<env> Environment from bgl.config.ts (default: production)
81
+ --crawl Discover internal links from rendered HTML
82
+ --no-crawl Disable crawling (default)
83
+ --exclude=<path> Exclude path prefix from rendering
84
+ --shards=<n|auto> Render in N parallel child processes (auto = min(cores, cap)).
85
+ Avoids the single-process happy-dom leak on large sites and
86
+ parallelizes CPU-bound SSR. Merges each shard's llms parts.
87
+ --shard=<i/n> (internal) Render only this shard's slice — set by --shards.
88
+ --routes-cmd=<cmd> Shell command whose stdout (whitespace-separated) is the
89
+ route list. For router-driven sites with no CMS pages.
90
+ --help, -h Show this help
76
91
 
77
92
  Environment:
78
- BAGELINK_API_URL Override API base URL
79
- WEBSITE_NAME Override CMS website name
93
+ BAGELINK_API_URL Override API base URL
94
+ WEBSITE_NAME Override CMS website name
95
+ BLOX_SSG_SHARD_CAP Cap for --shards=auto (default 6)
96
+ BLOX_SSG_PREFETCH_BUDGET Global /resolve-path prefetch budget across shards (24)
80
97
  `);
81
98
  process.exit(0);
82
99
  } else if (a.startsWith("--mode=")) {
83
100
  mode = a.slice("--mode=".length);
84
101
  } else if (a.startsWith("--exclude=")) {
85
102
  excludePaths.push(a.slice("--exclude=".length));
103
+ passthroughArgs.push(a);
86
104
  } else if (a.startsWith("--llm-parts=")) {
87
105
  llmPartsFile = a.slice("--llm-parts=".length);
88
106
  } else {
89
107
  extraPaths.push(a);
90
108
  }
91
109
  }
110
+ if (shardsOpt !== null || routesCmd) {
111
+ const { apiBase: apiBase2, websiteName: configWebsiteName2 } = await resolveApiBase(mode);
112
+ const websiteName2 = process.env.WEBSITE_NAME ?? configWebsiteName2 ?? "default";
113
+ const { runSharded } = await Promise.resolve().then(() => require("../shard-runner-CZnX4qnn.cjs"));
114
+ const code = await runSharded({
115
+ shards: shardsOpt ?? "auto",
116
+ mode,
117
+ apiBase: apiBase2,
118
+ websiteName: websiteName2,
119
+ extraPaths,
120
+ passthroughArgs,
121
+ routesCmd: routesCmd || void 0
122
+ });
123
+ process.exitCode = code;
124
+ return;
125
+ }
92
126
  const { apiBase, websiteName: configWebsiteName } = await resolveApiBase(mode);
93
- await prerender.polyfillBloxSsgGlobals({ pageUrl: apiBase });
127
+ await cmsRoutes.polyfillBloxSsgGlobals({ pageUrl: apiBase });
94
128
  const websiteName = process.env.WEBSITE_NAME ?? configWebsiteName ?? "default";
95
129
  console.log(`Fetching routes from ${apiBase} (mode: ${mode}, site: ${websiteName})…`);
96
130
  let paths = [];
@@ -99,7 +133,7 @@ Environment:
99
133
  let redirects = [];
100
134
  const collections = {};
101
135
  try {
102
- const siteData = await prerender.fetchCmsSiteData(apiBase, websiteName);
136
+ const siteData = await cmsRoutes.fetchCmsSiteData(apiBase, websiteName);
103
137
  paths = siteData.paths;
104
138
  website = siteData.website;
105
139
  websiteId = siteData.websiteId;
@@ -148,7 +182,7 @@ Environment:
148
182
  }
149
183
  const startTime = Date.now();
150
184
  try {
151
- const result = await prerender.prerender({
185
+ const result = await cmsRoutes.prerender({
152
186
  root: process.cwd(),
153
187
  clientOutDir: "dist",
154
188
  serverEntry: "dist/server/main.server.js",
package/dist/ssg/cli.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  import process from "node:process";
3
- import { p as polyfillBloxSsgGlobals, f as fetchCmsSiteData, a as prerender } from "../prerender-1fZ-6d-3.js";
3
+ import { p as polyfillBloxSsgGlobals, f as fetchCmsSiteData, a as prerender } from "../prerender-BCRyYSNg.js";
4
4
  function installFetchTimeout() {
5
5
  const ms = Number(process.env.BLOX_SSG_FETCH_TIMEOUT_MS) || 2e4;
6
6
  const original = globalThis.fetch;
@@ -47,12 +47,21 @@ async function main() {
47
47
  let shardIndex = 0;
48
48
  let shardTotal = 1;
49
49
  let llmPartsFile = "";
50
+ let shardsOpt = null;
51
+ let routesCmd = "";
52
+ const passthroughArgs = [];
50
53
  const excludePaths = ["/_blox_preview"];
51
54
  for (const a of argv) {
52
55
  if (a === "--crawl") {
53
56
  crawl = true;
57
+ passthroughArgs.push(a);
54
58
  } else if (a === "--no-crawl") {
55
59
  crawl = false;
60
+ } else if (a.startsWith("--shards=")) {
61
+ const v = a.slice("--shards=".length);
62
+ shardsOpt = v === "auto" ? "auto" : Number.isInteger(Number(v)) ? Number(v) : null;
63
+ } else if (a.startsWith("--routes-cmd=")) {
64
+ routesCmd = a.slice("--routes-cmd=".length);
56
65
  } else if (a.startsWith("--shard=")) {
57
66
  const [i, n] = a.slice("--shard=".length).split("/").map(Number);
58
67
  if (Number.isInteger(i) && Number.isInteger(n) && n > 0 && i >= 0 && i < n) {
@@ -67,27 +76,52 @@ Usage:
67
76
  blox-ssg [options] [extra-paths...]
68
77
 
69
78
  Options:
70
- --mode=<env> Environment from bgl.config.ts (default: production)
71
- --crawl Discover internal links from rendered HTML
72
- --no-crawl Disable crawling (default)
73
- --exclude=<path> Exclude path prefix from rendering
74
- --help, -h Show this help
79
+ --mode=<env> Environment from bgl.config.ts (default: production)
80
+ --crawl Discover internal links from rendered HTML
81
+ --no-crawl Disable crawling (default)
82
+ --exclude=<path> Exclude path prefix from rendering
83
+ --shards=<n|auto> Render in N parallel child processes (auto = min(cores, cap)).
84
+ Avoids the single-process happy-dom leak on large sites and
85
+ parallelizes CPU-bound SSR. Merges each shard's llms parts.
86
+ --shard=<i/n> (internal) Render only this shard's slice — set by --shards.
87
+ --routes-cmd=<cmd> Shell command whose stdout (whitespace-separated) is the
88
+ route list. For router-driven sites with no CMS pages.
89
+ --help, -h Show this help
75
90
 
76
91
  Environment:
77
- BAGELINK_API_URL Override API base URL
78
- WEBSITE_NAME Override CMS website name
92
+ BAGELINK_API_URL Override API base URL
93
+ WEBSITE_NAME Override CMS website name
94
+ BLOX_SSG_SHARD_CAP Cap for --shards=auto (default 6)
95
+ BLOX_SSG_PREFETCH_BUDGET Global /resolve-path prefetch budget across shards (24)
79
96
  `);
80
97
  process.exit(0);
81
98
  } else if (a.startsWith("--mode=")) {
82
99
  mode = a.slice("--mode=".length);
83
100
  } else if (a.startsWith("--exclude=")) {
84
101
  excludePaths.push(a.slice("--exclude=".length));
102
+ passthroughArgs.push(a);
85
103
  } else if (a.startsWith("--llm-parts=")) {
86
104
  llmPartsFile = a.slice("--llm-parts=".length);
87
105
  } else {
88
106
  extraPaths.push(a);
89
107
  }
90
108
  }
109
+ if (shardsOpt !== null || routesCmd) {
110
+ const { apiBase: apiBase2, websiteName: configWebsiteName2 } = await resolveApiBase(mode);
111
+ const websiteName2 = process.env.WEBSITE_NAME ?? configWebsiteName2 ?? "default";
112
+ const { runSharded } = await import("../shard-runner-D4gCfCi3.js");
113
+ const code = await runSharded({
114
+ shards: shardsOpt ?? "auto",
115
+ mode,
116
+ apiBase: apiBase2,
117
+ websiteName: websiteName2,
118
+ extraPaths,
119
+ passthroughArgs,
120
+ routesCmd: routesCmd || void 0
121
+ });
122
+ process.exitCode = code;
123
+ return;
124
+ }
91
125
  const { apiBase, websiteName: configWebsiteName } = await resolveApiBase(mode);
92
126
  await polyfillBloxSsgGlobals({ pageUrl: apiBase });
93
127
  const websiteName = process.env.WEBSITE_NAME ?? configWebsiteName ?? "default";
@@ -22,11 +22,11 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
22
22
  mod
23
23
  ));
24
24
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
25
- const prerender = require("../prerender-52IAxpqw.cjs");
25
+ const cmsRoutes = require("../prerender-DQ7D6auC.cjs");
26
26
  const ssg_client = require("./client.cjs");
27
27
  const pinia = require("pinia");
28
28
  const vue = require("vue");
29
- const routes = require("../routes-B4RYeiGa.cjs");
29
+ const routes = require("../routes-DxMOiC2D.cjs");
30
30
  async function renderBloxSsgPage(options) {
31
31
  var _a, _b, _c;
32
32
  const {
@@ -61,7 +61,7 @@ async function renderBloxSsgPage(options) {
61
61
  const seoOverride = seoHead && Object.keys(seoHead).length > 0 ? seoHead : void 0;
62
62
  const bloxData = dataRegistry && collectData ? collectData(dataRegistry) : {};
63
63
  const dataScript = Object.keys(bloxData).length > 0 ? `<script>window[${JSON.stringify(routes.BLOX_DATA_WINDOW_KEY)}]=${safeJson(bloxData)};${"<"}/script>` : "";
64
- let head = prerender.buildPageHead({
64
+ let head = cmsRoutes.buildPageHead({
65
65
  url,
66
66
  resolvedData,
67
67
  website,
@@ -70,9 +70,9 @@ async function renderBloxSsgPage(options) {
70
70
  stateScript: [stateScript, collectionsScript, websiteIdScript, dataScript].filter(Boolean).join("\n")
71
71
  });
72
72
  const seoData = resolvedData;
73
- const primary = prerender.primaryContextEntry(seoData == null ? void 0 : seoData.contexts);
73
+ const primary = cmsRoutes.primaryContextEntry(seoData == null ? void 0 : seoData.contexts);
74
74
  if ((llm == null ? void 0 : llm.jsonLd) !== false) {
75
- const jsonLd = prerender.buildJsonLd({
75
+ const jsonLd = cmsRoutes.buildJsonLd({
76
76
  url,
77
77
  page: seoData == null ? void 0 : seoData.page,
78
78
  website,
@@ -92,7 +92,7 @@ ${jsonLd}`;
92
92
  url,
93
93
  title,
94
94
  description,
95
- text: (llm == null ? void 0 : llm.fullText) !== false ? prerender.extractPageText(html) : void 0
95
+ text: (llm == null ? void 0 : llm.fullText) !== false ? cmsRoutes.extractPageText(html) : void 0
96
96
  };
97
97
  }
98
98
  const lang = locale || (website == null ? void 0 : website.default_locale) || "en";
@@ -234,21 +234,21 @@ function createBloxSSREntry(options) {
234
234
  }
235
235
  return { render, prefetchResolve };
236
236
  }
237
- exports.buildJsonLd = prerender.buildJsonLd;
238
- exports.buildPageHead = prerender.buildPageHead;
239
- exports.buildSiteHead = prerender.buildSiteHead;
240
- exports.extractPageText = prerender.extractPageText;
241
- exports.fetchCmsPrerenderPaths = prerender.fetchCmsPrerenderPaths;
242
- exports.fetchCmsSiteData = prerender.fetchCmsSiteData;
243
- exports.generateLlmsFullTxt = prerender.generateLlmsFullTxt;
244
- exports.generateLlmsTxt = prerender.generateLlmsTxt;
245
- exports.generateNetlifyRedirects = prerender.generateNetlifyRedirects;
246
- exports.generateRobotsTxt = prerender.generateRobotsTxt;
247
- exports.generateSitemapXml = prerender.generateSitemapXml;
248
- exports.getSiteIconFlags = prerender.getSiteIconFlags;
249
- exports.mergeLlmParts = prerender.mergeLlmParts;
250
- exports.polyfillBloxSsgGlobals = prerender.polyfillBloxSsgGlobals;
251
- exports.prerender = prerender.prerender;
237
+ exports.buildJsonLd = cmsRoutes.buildJsonLd;
238
+ exports.buildPageHead = cmsRoutes.buildPageHead;
239
+ exports.buildSiteHead = cmsRoutes.buildSiteHead;
240
+ exports.extractPageText = cmsRoutes.extractPageText;
241
+ exports.fetchCmsPrerenderPaths = cmsRoutes.fetchCmsPrerenderPaths;
242
+ exports.fetchCmsSiteData = cmsRoutes.fetchCmsSiteData;
243
+ exports.generateLlmsFullTxt = cmsRoutes.generateLlmsFullTxt;
244
+ exports.generateLlmsTxt = cmsRoutes.generateLlmsTxt;
245
+ exports.generateNetlifyRedirects = cmsRoutes.generateNetlifyRedirects;
246
+ exports.generateRobotsTxt = cmsRoutes.generateRobotsTxt;
247
+ exports.generateSitemapXml = cmsRoutes.generateSitemapXml;
248
+ exports.getSiteIconFlags = cmsRoutes.getSiteIconFlags;
249
+ exports.mergeLlmParts = cmsRoutes.mergeLlmParts;
250
+ exports.polyfillBloxSsgGlobals = cmsRoutes.polyfillBloxSsgGlobals;
251
+ exports.prerender = cmsRoutes.prerender;
252
252
  exports.BLOX_COLLECTIONS_WINDOW_KEY = ssg_client.BLOX_COLLECTIONS_WINDOW_KEY;
253
253
  exports.BLOX_DATA_WINDOW_KEY = ssg_client.BLOX_DATA_WINDOW_KEY;
254
254
  exports.BLOX_PAGE_SEO_WINDOW_KEY = ssg_client.BLOX_PAGE_SEO_WINDOW_KEY;
@@ -1,10 +1,10 @@
1
- import { b as buildPageHead, c as primaryContextEntry, d as buildJsonLd, e as extractPageText } from "../prerender-1fZ-6d-3.js";
2
- import { g, h, f, i, j, k, l, m, n, o, p, a } from "../prerender-1fZ-6d-3.js";
1
+ import { b as buildPageHead, c as primaryContextEntry, d as buildJsonLd, e as extractPageText } from "../prerender-BCRyYSNg.js";
2
+ import { g, h, f, i, j, k, l, m, n, o, p, a } from "../prerender-BCRyYSNg.js";
3
3
  import { BLOX_STATE_WINDOW_KEY, BLOX_COLLECTIONS_WINDOW_KEY, BLOX_WEBSITE_ID_WINDOW_KEY } from "./client.mjs";
4
4
  import { BLOX_DATA_WINDOW_KEY, BLOX_PAGE_SEO_WINDOW_KEY, getCollectionCache, getEmbeddedWebsiteId, installBloxStateCache, installCollectionCache } from "./client.mjs";
5
5
  import { createPinia } from "pinia";
6
6
  import { createSSRApp, h as h2, Suspense, markRaw } from "vue";
7
- import { B as BLOX_DATA_WINDOW_KEY2, s as setApiOrigin, a as setActiveLocale, c as collectBloxData, b as collectBloxSeo, p as provideBloxData, d as createBlox, g as generateContentRoutes, i as installLocaleAwareResolve } from "../routes-DE0OIzJr.js";
7
+ import { B as BLOX_DATA_WINDOW_KEY2, s as setApiOrigin, a as setActiveLocale, c as collectBloxData, b as collectBloxSeo, p as provideBloxData, d as createBlox, g as generateContentRoutes, i as installLocaleAwareResolve } from "../routes-DUYnmvXF.js";
8
8
  async function renderBloxSsgPage(options) {
9
9
  var _a, _b, _c;
10
10
  const {
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Built-in sharded SSG runner (coordinator).
3
+ *
4
+ * Vue SSR (`renderToString`) is CPU-bound and single-threaded, and a single
5
+ * long-lived `blox-ssg` process also accumulates happy-dom/window/timer state
6
+ * under bun — on large sites (thousands of pages) that leak eventually crashes
7
+ * the process silently. Splitting the work across N short-lived child processes
8
+ * (each rendering a disjoint `--shard=i/n` slice into the same `dist`) both
9
+ * parallelizes the CPU-bound render AND keeps each process well under the leak
10
+ * threshold.
11
+ *
12
+ * This module is the coordinator: it enumerates the route list once (optionally
13
+ * via an external `--routes-cmd` for router-driven sites that don't use CMS page
14
+ * discovery), then spawns the shards, divides the resolve-prefetch budget across
15
+ * them, and merges each shard's llms part file into the final llms.txt.
16
+ *
17
+ * Activated by `--shards=<n|auto>` on the CLI. Without it, the CLI runs a single
18
+ * in-process render exactly as before (full backward compat).
19
+ */
20
+ export interface ShardRunnerOptions {
21
+ /** Number of shards, or 'auto' → min(cores, cap). */
22
+ shards: number | 'auto';
23
+ /** CLI mode (passed through to each shard as --mode=). */
24
+ mode: string;
25
+ /** Resolved API base (for the post-run llms merge). */
26
+ apiBase: string;
27
+ /** CMS website name (for the post-run llms merge). */
28
+ websiteName: string;
29
+ /** Extra paths already parsed from argv (router-driven sites, static routes). */
30
+ extraPaths: string[];
31
+ /** Other pass-through flags to forward verbatim to each shard (e.g. --exclude=…, --crawl). */
32
+ passthroughArgs: string[];
33
+ /**
34
+ * Optional shell command whose stdout (whitespace-separated) is a list of
35
+ * routes to render. Run once by the coordinator; the paths are forwarded to
36
+ * every shard. Lets router-driven sites (no CMS page discovery) enumerate
37
+ * their own routes without a bespoke runner script.
38
+ */
39
+ routesCmd?: string;
40
+ }
41
+ /**
42
+ * Coordinate a sharded prerender. Returns the process exit code.
43
+ */
44
+ export declare function runSharded(opts: ShardRunnerOptions): Promise<number>;
45
+ //# sourceMappingURL=shard-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shard-runner.d.ts","sourceRoot":"","sources":["../../src/ssg/shard-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,MAAM,WAAW,kBAAkB;IAClC,qDAAqD;IACrD,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAA;IACf,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAA;IACnB,iFAAiF;IACjF,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,8FAA8F;IAC9F,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAyDD;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA0D1E"}
package/dist/symbols.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { InjectionKey } from 'vue';
1
+ import { InjectionKey, Ref } from 'vue';
2
2
  import { LocaleStrategy } from './localeStrategy';
3
3
  import { BlockDefinition } from './schema';
4
4
  export declare const BLOX_REGISTRY_KEY: InjectionKey<Record<string, BlockDefinition>>;
@@ -8,6 +8,13 @@ export interface BloxConfig {
8
8
  }
9
9
  export declare const BLOX_CONFIG_KEY: InjectionKey<BloxConfig>;
10
10
  export declare const BLOX_LOCALE_STRATEGY_KEY: InjectionKey<LocaleStrategy>;
11
+ export interface BloxRuntimeContext {
12
+ /** True only inside the Page Designer preview iframe. */
13
+ isPreview: Ref<boolean>;
14
+ /** True while the current page/context payload is still being resolved. */
15
+ loading: Ref<boolean>;
16
+ }
17
+ export declare const BLOX_RUNTIME_KEY: InjectionKey<BloxRuntimeContext>;
11
18
  /**
12
19
  * Opt-in "edit this page" feature for marketing sites.
13
20
  *
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,KAAK,CAAA;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/C,eAAO,MAAM,iBAAiB,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAClD,CAAA;AAE1B,MAAM,WAAW,UAAU;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,UAAU,CAAyB,CAAA;AAE9E,eAAO,MAAM,wBAAwB,EAAE,YAAY,CAAC,cAAc,CAAkC,CAAA;AAEpG;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAA;IACjB,sFAAsF;IACtF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,qBAAqB,EAAE,YAAY,CAAC,eAAe,CAClC,CAAA;AAE9B;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,uEAAuE;IACvE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4DAA4D;IAC5D,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,gBAAgB,CACnC,CAAA"}
1
+ {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/C,eAAO,MAAM,iBAAiB,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAClD,CAAA;AAE1B,MAAM,WAAW,UAAU;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,UAAU,CAAyB,CAAA;AAE9E,eAAO,MAAM,wBAAwB,EAAE,YAAY,CAAC,cAAc,CAAkC,CAAA;AAEpG,MAAM,WAAW,kBAAkB;IAClC,yDAAyD;IACzD,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACvB,2EAA2E;IAC3E,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;CACrB;AAED,eAAO,MAAM,gBAAgB,EAAE,YAAY,CAAC,kBAAkB,CAA0B,CAAA;AAExF;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAA;IACjB,sFAAsF;IACtF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,qBAAqB,EAAE,YAAY,CAAC,eAAe,CAClC,CAAA;AAE9B;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,uEAAuE;IACvE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4DAA4D;IAC5D,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,gBAAgB,CACnC,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bagelink/blox",
3
3
  "type": "module",
4
- "version": "1.15.273",
4
+ "version": "1.15.277",
5
5
  "description": "Blox page builder library for drag-and-drop page building and static data management",
6
6
  "author": {
7
7
  "name": "Bagel Studio",