@absolutejs/absolute 0.19.0-beta.431 → 0.19.0-beta.433

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/vue/index.js CHANGED
@@ -1744,7 +1744,9 @@ var Image_default = "../Image-0pe96k20.vue";
1744
1744
  // src/vue/components/SuspenseSlot.ts
1745
1745
  import {
1746
1746
  defineComponent,
1747
- h
1747
+ h,
1748
+ onMounted,
1749
+ ref
1748
1750
  } from "vue";
1749
1751
  var renderVueNodesToHtml = async (nodes) => {
1750
1752
  const { createSSRApp, h: createVNode } = await import("vue");
@@ -1774,6 +1776,9 @@ var SuspenseSlot = defineComponent({
1774
1776
  timeoutMs: { default: undefined, type: Number }
1775
1777
  },
1776
1778
  setup(props, { slots }) {
1779
+ const isResolved = ref(false);
1780
+ const resolvedValue = ref(undefined);
1781
+ const hasError = ref(false);
1777
1782
  const usesFrameworkSlots = hasFrameworkSlots(slots.default, slots.fallback, slots.error, props.promise);
1778
1783
  if (typeof window === "undefined") {
1779
1784
  if (!usesFrameworkSlots && props.resolve) {
@@ -1791,7 +1796,12 @@ var SuspenseSlot = defineComponent({
1791
1796
  try {
1792
1797
  const value = props.resolve !== undefined ? await props.resolve() : props.promise !== undefined ? await props.promise : undefined;
1793
1798
  const nodes = slots.default?.({ value }) ?? [];
1794
- return renderVueNodesToHtml(nodes);
1799
+ const html = await renderVueNodesToHtml(nodes);
1800
+ return {
1801
+ html,
1802
+ kind: "vue-suspense",
1803
+ value
1804
+ };
1795
1805
  } catch (error) {
1796
1806
  const errorNodes = slots.error?.({ error });
1797
1807
  if (errorNodes !== undefined) {
@@ -1807,6 +1817,26 @@ var SuspenseSlot = defineComponent({
1807
1817
  });
1808
1818
  }
1809
1819
  }
1820
+ if (typeof window !== "undefined" && usesFrameworkSlots) {
1821
+ const consumers = window.__ABS_SLOT_CONSUMERS__ = window.__ABS_SLOT_CONSUMERS__ ?? {};
1822
+ let runtimeReady = false;
1823
+ consumers[props.id] = (payload) => {
1824
+ if (!runtimeReady)
1825
+ return false;
1826
+ if (!payload || typeof payload !== "object" || payload.kind !== "vue-suspense") {
1827
+ return false;
1828
+ }
1829
+ const candidate = payload;
1830
+ hasError.value = candidate.state === "error";
1831
+ resolvedValue.value = candidate.value;
1832
+ isResolved.value = candidate.state !== "error";
1833
+ return true;
1834
+ };
1835
+ onMounted(() => {
1836
+ runtimeReady = true;
1837
+ window.__ABS_SLOT_FLUSH__?.();
1838
+ });
1839
+ }
1810
1840
  return () => {
1811
1841
  if (!usesFrameworkSlots) {
1812
1842
  return h("div", {
@@ -1818,9 +1848,10 @@ var SuspenseSlot = defineComponent({
1818
1848
  }
1819
1849
  return h("div", {
1820
1850
  class: props.className,
1851
+ "data-allow-mismatch": "",
1821
1852
  "data-absolute-slot": "true",
1822
1853
  id: `slot-${props.id}`
1823
- }, slots.fallback?.() ?? undefined);
1854
+ }, hasError.value ? slots.error?.({ error: undefined }) ?? slots.fallback?.() ?? undefined : isResolved.value ? slots.default?.({ value: resolvedValue.value }) ?? undefined : slots.fallback?.() ?? undefined);
1824
1855
  };
1825
1856
  }
1826
1857
  });
@@ -1873,6 +1904,11 @@ var streamSwapRuntime = () => {
1873
1904
  return false;
1874
1905
  return payload.kind === "angular-defer";
1875
1906
  };
1907
+ const isVueSuspensePayload = (payload) => {
1908
+ if (!payload || typeof payload !== "object")
1909
+ return false;
1910
+ return payload.kind === "vue-suspense";
1911
+ };
1876
1912
  const resolveHtml = (payload) => {
1877
1913
  if (!payload || typeof payload !== "object") {
1878
1914
  return typeof payload === "string" ? payload : "";
@@ -1910,6 +1946,10 @@ var streamSwapRuntime = () => {
1910
1946
  window.dispatchEvent(new CustomEvent(SLOT_PATCH_EVENT, {
1911
1947
  detail: { html, id, payload }
1912
1948
  }));
1949
+ if (isVueSuspensePayload(payload)) {
1950
+ pending[id] = payload;
1951
+ return;
1952
+ }
1913
1953
  delete pending[id];
1914
1954
  };
1915
1955
  const flush = () => {
@@ -2801,5 +2841,5 @@ export {
2801
2841
  Image_default as Image
2802
2842
  };
2803
2843
 
2804
- //# debugId=3C988E739948010664756E2164756E21
2844
+ //# debugId=39766605452885A664756E2164756E21
2805
2845
  //# sourceMappingURL=index.js.map