payload-live-preview 2.2.2 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/README.md +35 -30
  2. package/dist/adapters/astro/PreviewBoundary.astro +17 -4
  3. package/dist/adapters/astro/RichText.astro +13 -2
  4. package/dist/adapters/astro/index.d.ts +7 -7
  5. package/dist/adapters/astro/index.js +1 -1
  6. package/dist/adapters/astro/index.js.map +1 -1
  7. package/dist/adapters/astro/middleware-entry.d.ts +3 -3
  8. package/dist/adapters/astro/middleware-entry.js +1 -1
  9. package/dist/adapters/astro/middleware-entry.js.map +1 -1
  10. package/dist/adapters/nextjs/index.d.ts +2 -2
  11. package/dist/adapters/nextjs/index.js +1 -1
  12. package/dist/adapters/nextjs/index.js.map +1 -1
  13. package/dist/adapters/nuxt/index.d.ts +4 -4
  14. package/dist/adapters/nuxt/index.js +1 -1
  15. package/dist/adapters/nuxt/index.js.map +1 -1
  16. package/dist/adapters/nuxt/module.d.ts +1 -1
  17. package/dist/adapters/react/index.d.ts +2 -2
  18. package/dist/adapters/react/index.js +1 -1
  19. package/dist/adapters/react/index.js.map +1 -1
  20. package/dist/adapters/sveltekit/index.d.ts +5 -5
  21. package/dist/adapters/sveltekit/index.js +1 -1
  22. package/dist/adapters/sveltekit/index.js.map +1 -1
  23. package/dist/adapters/vue/index.d.ts +2 -2
  24. package/dist/adapters/vue/index.js +1 -1
  25. package/dist/adapters/vue/index.js.map +1 -1
  26. package/dist/client.cjs +1 -1
  27. package/dist/client.cjs.map +1 -1
  28. package/dist/client.d.cts +15 -3
  29. package/dist/client.d.ts +15 -3
  30. package/dist/client.js +1 -1
  31. package/dist/client.js.map +1 -1
  32. package/dist/codegen-astro.js +1 -1
  33. package/dist/codegen-astro.js.map +1 -1
  34. package/dist/codegen-cli.js +1 -1
  35. package/dist/codegen-cli.js.map +1 -1
  36. package/dist/codegen.cjs +1 -1
  37. package/dist/codegen.cjs.map +1 -1
  38. package/dist/codegen.js +1 -1
  39. package/dist/codegen.js.map +1 -1
  40. package/dist/core.cjs +1 -1
  41. package/dist/core.cjs.map +1 -1
  42. package/dist/core.d.cts +139 -4
  43. package/dist/core.d.ts +139 -4
  44. package/dist/core.js +1 -1
  45. package/dist/core.js.map +1 -1
  46. package/dist/doctor-cli.d.ts +1 -1
  47. package/dist/doctor-cli.js +1 -1
  48. package/dist/doctor-cli.js.map +1 -1
  49. package/dist/doctor.d.ts +2 -2
  50. package/dist/doctor.js +1 -1
  51. package/dist/doctor.js.map +1 -1
  52. package/dist/{document-session-Bkd181PV.d.ts → document-session-BuYuO3ae.d.ts} +27 -2
  53. package/dist/{fragment-endpoint-CLRpNQ3n.d.ts → fragment-endpoint-CQE_7MKi.d.ts} +1 -1
  54. package/dist/fragment.cjs +1 -1
  55. package/dist/fragment.cjs.map +1 -1
  56. package/dist/fragment.d.cts +6 -2
  57. package/dist/fragment.d.ts +6 -2
  58. package/dist/fragment.js +1 -1
  59. package/dist/fragment.js.map +1 -1
  60. package/dist/index.cjs +1 -1
  61. package/dist/index.cjs.map +1 -1
  62. package/dist/index.d.cts +73 -12
  63. package/dist/index.d.ts +73 -12
  64. package/dist/index.js +1 -1
  65. package/dist/index.js.map +1 -1
  66. package/dist/lean.cjs +1 -1
  67. package/dist/lean.cjs.map +1 -1
  68. package/dist/lean.js +1 -1
  69. package/dist/lean.js.map +1 -1
  70. package/dist/lexical.cjs +1 -1
  71. package/dist/lexical.cjs.map +1 -1
  72. package/dist/lexical.d.cts +16 -4
  73. package/dist/lexical.d.ts +16 -4
  74. package/dist/lexical.js +1 -1
  75. package/dist/lexical.js.map +1 -1
  76. package/dist/{locals-zz2gi9dj.d.ts → locals-CyzDKfKU.d.ts} +7 -1
  77. package/dist/{middleware-CI-UTf6R.d.ts → middleware-Dnt6u4nF.d.ts} +2 -2
  78. package/dist/{options-CnYybG51.d.ts → options-DTzhFVJ4.d.ts} +13 -1
  79. package/dist/plugin.cjs +1 -1
  80. package/dist/plugin.cjs.map +1 -1
  81. package/dist/plugin.d.cts +15 -9
  82. package/dist/plugin.d.ts +15 -9
  83. package/dist/plugin.js +1 -1
  84. package/dist/plugin.js.map +1 -1
  85. package/dist/plugins.cjs +1 -1
  86. package/dist/plugins.cjs.map +1 -1
  87. package/dist/plugins.d.cts +8 -2
  88. package/dist/plugins.d.ts +8 -2
  89. package/dist/plugins.js +1 -1
  90. package/dist/plugins.js.map +1 -1
  91. package/dist/{probe-D-IHg9dF.d.ts → probe-afwdYebU.d.ts} +6 -2
  92. package/dist/server.cjs +1 -1
  93. package/dist/server.cjs.map +1 -1
  94. package/dist/server.d.cts +19 -1
  95. package/dist/server.d.ts +19 -1
  96. package/dist/server.js +1 -1
  97. package/dist/server.js.map +1 -1
  98. package/dist/structural.d.cts +2 -0
  99. package/dist/structural.d.ts +2 -0
  100. package/package.json +2 -1
@@ -81,6 +81,8 @@ declare const DIAGNOSTIC_CODES: Readonly<{
81
81
  readonly UnattributableUpdate: "LP0202";
82
82
  /** An update carried a value for a field the page binds nowhere; editing it changes nothing on this page. */
83
83
  readonly UnboundField: "LP0203";
84
+ /** In development: a bound path covers its group under the `descendant` default, which 3.0 changes. */
85
+ readonly CoverageDefaultChanges: "LP0204";
84
86
  /** The visibility gate held offscreen writes back until they scroll into view. */
85
87
  readonly VisibilityGateDeferred: "LP0301";
86
88
  /** A value was refused because the attribute or the value itself is unsafe. */
@@ -105,7 +107,7 @@ declare const DIAGNOSTIC_CODES: Readonly<{
105
107
  readonly UnrenderedBlockKept: "LP0410";
106
108
  /** A patch cannot reach what the server would have drawn; `onUnfaithfulPatch` decided what happens next. */
107
109
  readonly UnfaithfulPatch: "LP0411";
108
- /** The first write to a date, number or checkbox binding replaced a different reading of the same value. */
110
+ /** The first write to a date, number, checkbox, select or radio binding replaced a different reading of the same value. */
109
111
  readonly ServerFormatReplaced: "LP0412";
110
112
  /** A Lexical block has no renderer, and the write could not keep the markup the server rendered for it; it is gone. */
111
113
  readonly UnrenderedBlockLost: "LP0413";
@@ -125,7 +127,7 @@ declare const DIAGNOSTIC_CODES: Readonly<{
125
127
  readonly StartupFailed: "LP0605";
126
128
  /** Sending the ready handshake failed. */
127
129
  readonly ReadyFailed: "LP0606";
128
- /** The page declared hydration, but no React commit, Vue mount or SvelteKit mount came within the cap; the runtime started without waiting. */
130
+ /** The page declared hydration, but no React commit, Vue mount, SvelteKit mount or `markHydrated()` call came within the cap; the runtime started without waiting. */
129
131
  readonly HydrationWaitTimedOut: "LP0607";
130
132
  /** The audit found no runtime in a response that carried preview intent. */
131
133
  readonly AuditRuntimeMissing: "LP0701";
@@ -167,6 +169,8 @@ declare const DIAGNOSTIC_CODES: Readonly<{
167
169
  readonly V2ReadinessGap: "LP0709";
168
170
  /** The preview runtime is served to anonymous visitors, not only inside the admin frame. */
169
171
  readonly RuntimeOnPublicPage: "LP0710";
172
+ /** An element carries attributes that only mean something beside `data-payload-field`, and has none. */
173
+ readonly AuditModifierWithoutField: "LP0711";
170
174
  }>;
171
175
  /** A diagnostic code, as it appears in log output and on the `error` event. */
172
176
  type DiagnosticCode = (typeof DIAGNOSTIC_CODES)[keyof typeof DIAGNOSTIC_CODES];
@@ -282,6 +286,8 @@ interface RenderContext {
282
286
  * completes the sentence 'field "x" …' in LP0411.
283
287
  */
284
288
  readonly reportUnfaithful?: (target: CachedElement, reason: string) => void;
289
+ /** The route of a Lexical internal link, as `internalLinkPattern` gives it. */
290
+ readonly internalLinkPattern?: string;
285
291
  }
286
292
  /**
287
293
  * A renderer writes one value into its element. It must not throw: one bad
package/dist/plugins.d.ts CHANGED
@@ -81,6 +81,8 @@ declare const DIAGNOSTIC_CODES: Readonly<{
81
81
  readonly UnattributableUpdate: "LP0202";
82
82
  /** An update carried a value for a field the page binds nowhere; editing it changes nothing on this page. */
83
83
  readonly UnboundField: "LP0203";
84
+ /** In development: a bound path covers its group under the `descendant` default, which 3.0 changes. */
85
+ readonly CoverageDefaultChanges: "LP0204";
84
86
  /** The visibility gate held offscreen writes back until they scroll into view. */
85
87
  readonly VisibilityGateDeferred: "LP0301";
86
88
  /** A value was refused because the attribute or the value itself is unsafe. */
@@ -105,7 +107,7 @@ declare const DIAGNOSTIC_CODES: Readonly<{
105
107
  readonly UnrenderedBlockKept: "LP0410";
106
108
  /** A patch cannot reach what the server would have drawn; `onUnfaithfulPatch` decided what happens next. */
107
109
  readonly UnfaithfulPatch: "LP0411";
108
- /** The first write to a date, number or checkbox binding replaced a different reading of the same value. */
110
+ /** The first write to a date, number, checkbox, select or radio binding replaced a different reading of the same value. */
109
111
  readonly ServerFormatReplaced: "LP0412";
110
112
  /** A Lexical block has no renderer, and the write could not keep the markup the server rendered for it; it is gone. */
111
113
  readonly UnrenderedBlockLost: "LP0413";
@@ -125,7 +127,7 @@ declare const DIAGNOSTIC_CODES: Readonly<{
125
127
  readonly StartupFailed: "LP0605";
126
128
  /** Sending the ready handshake failed. */
127
129
  readonly ReadyFailed: "LP0606";
128
- /** The page declared hydration, but no React commit, Vue mount or SvelteKit mount came within the cap; the runtime started without waiting. */
130
+ /** The page declared hydration, but no React commit, Vue mount, SvelteKit mount or `markHydrated()` call came within the cap; the runtime started without waiting. */
129
131
  readonly HydrationWaitTimedOut: "LP0607";
130
132
  /** The audit found no runtime in a response that carried preview intent. */
131
133
  readonly AuditRuntimeMissing: "LP0701";
@@ -167,6 +169,8 @@ declare const DIAGNOSTIC_CODES: Readonly<{
167
169
  readonly V2ReadinessGap: "LP0709";
168
170
  /** The preview runtime is served to anonymous visitors, not only inside the admin frame. */
169
171
  readonly RuntimeOnPublicPage: "LP0710";
172
+ /** An element carries attributes that only mean something beside `data-payload-field`, and has none. */
173
+ readonly AuditModifierWithoutField: "LP0711";
170
174
  }>;
171
175
  /** A diagnostic code, as it appears in log output and on the `error` event. */
172
176
  type DiagnosticCode = (typeof DIAGNOSTIC_CODES)[keyof typeof DIAGNOSTIC_CODES];
@@ -282,6 +286,8 @@ interface RenderContext {
282
286
  * completes the sentence 'field "x" …' in LP0411.
283
287
  */
284
288
  readonly reportUnfaithful?: (target: CachedElement, reason: string) => void;
289
+ /** The route of a Lexical internal link, as `internalLinkPattern` gives it. */
290
+ readonly internalLinkPattern?: string;
285
291
  }
286
292
  /**
287
293
  * A renderer writes one value into its element. It must not throw: one bad
package/dist/plugins.js CHANGED
@@ -1,2 +1,2 @@
1
- function e(e){return("object"==typeof e&&null!==e||"function"==typeof e)&&"function"==typeof e.then&&(Promise.resolve(e).catch(()=>{}),!0)}function t(t){return(...n)=>{try{e(t(...n))}catch{}}}var n=t((...e)=>console.error(...e)),r=()=>{},i=class{#e;#t;#n=/* @__PURE__ */new Set;#r="staging";constructor(e,t){this.#e=e,this.#t=t}assertOpen(){if("closed"===this.#r)throw new Error(`Plugin context for "${this.#e}" is no longer active`)}get active(){return"active"===this.#r}eligible(){return"closed"!==this.#r}own(e){return this.assertOpen(),this.#i({kind:"cleanup",acquire:void 0,finalize:void 0,cleanup:e,disposed:!1})}stage(e,t,n){this.assertOpen();const r={kind:e,acquire:t,finalize:n,cleanup:void 0,disposed:!1},i=this.#i(r);if("active"===this.#r)try{this.#o(r)}catch(e){throw this.#s(r),e}return i}counts(){const e={transform:0,renderer:0,subscription:0,cleanup:0};for(const t of this.#n)e[t.kind]+=1;return e}commit(){if("staging"!==this.#r)throw new Error(`Plugin context for "${this.#e}" cannot be committed`);this.#r="committing";try{for(const e of this.#n)this.#o(e);this.#r="active"}catch(e){throw this.close(),e}}close(){if("closed"!==this.#r){this.#r="closed";for(const e of[...this.#n].reverse())this.#s(e);this.#n.clear()}}#i(e){return this.#n.add(e),()=>{this.#s(e)}}#o(e){if(e.disposed||void 0!==e.cleanup||void 0===e.acquire)return;const t=e.acquire();e.cleanup=t??r}#s(t){if(t.disposed)return;t.disposed=!0,this.#n.delete(t);const n=t.cleanup;if(t.cleanup=void 0,void 0!==n)try{e(n())&&this.#t(`plugin "${this.#e}" cleanup returned a Promise/thenable; cleanups must be synchronous`)}catch(e){this.#t(`plugin "${this.#e}" cleanup failed:`,e)}try{t.finalize?.()}catch(e){this.#t(`plugin "${this.#e}" cleanup failed:`,e)}}},o=class{#a;#c;#l=/* @__PURE__ */new Set;constructor(e,t){this.#a=e,this.#c=t}on(e,t){return this.#u("on",e,t)}once(e,t){return this.#u("once",e,t)}off(e,t){const n=t;for(const t of[...this.#l])t.event===e&&t.handler===n&&t.dispose()}emit(e,t){return this.#c.assertOpen(),this.#a.emit(e,t)}emitWhile(e,t,n){return this.#c.assertOpen(),this.#a.emitWhile(e,t,()=>{if(!this.#c.eligible())return!1;const e=n();return!!this.#c.eligible()&&e})}listenerCount(e){let t=0;for(const n of this.#l)n.event===e&&(t+=1);return t}removeAllListeners(e){for(const t of[...this.#l])void 0!==e&&t.event!==e||t.dispose()}eventNames(){const e=/* @__PURE__ */new Set;for(const t of this.#l)e.add(t.event);return[...e]}#u(e,t,n){this.#c.assertOpen();const i=n,o=[...this.#l].find(n=>n.kind===e&&n.event===t&&n.handler===i);if(void 0!==o)return o.dispose;let s=r,a=!0;const c=async t=>{this.#c.active&&a&&("once"===e&&s(),await n(t))},l={kind:e,event:t,handler:i,dispose:r};return s=this.#c.stage("subscription",()=>this.#a[e](t,c),()=>{a=!1,this.#l.delete(l)}),l.dispose=s,this.#l.add(l),s}},s=class{#a;#d;#h;#f;#t;#p=/* @__PURE__ */new Map;#g=/* @__PURE__ */new Map;#m=/* @__PURE__ */new Map;#v=/* @__PURE__ */new Set;#y=/* @__PURE__ */new Map;#w=Promise.resolve();#b=0;constructor(e){this.#a=e.events,this.#d=e.config,this.#h=e.registerFieldRenderer,this.#t=t(e.log);const n=e.onTransformError;this.#f=void 0===n?void 0:t((...e)=>{const t=e[0];try{return n(t)}catch(e){return void this.#t("transform error reporter failed:",e)}})}register(e){return this.#b>0?this.#P(e,!1):this.#S(()=>this.#P(e,!0))}unregister(e){return this.#b>0?this.#x(e,!1):this.#S(async()=>{await this.#x(e,!0)})}destroyAll(){return this.#b>0?this.#L(!1):this.#S(async()=>{await this.#L(!0)})}applyTransforms(t,n,r,i){const o=this.#y.get(t);if(void 0===o||0===o.length)return n;let s=n;for(const a of[...o]){if(!a.active)continue;const{transform:o}=a;if(!1===i?.())return n;try{s=o(s,{fieldName:t,element:r.element,allFields:r.allFields});const a=e(s);if(!1===i?.())return n;if(a)throw new TypeError(`Transform for "${t}" returned a Promise/thenable; transforms must be synchronous`)}catch(e){if(!1===i?.())return n;const r=e instanceof Error?e:new Error(String(e));return this.#t(`transform for "${t}" failed:`,r),this.#f?.(r),n}}return s}list(){return[...this.#p.keys()]}snapshot(){const e=[],t=(e,t,n,r)=>{const i=r.counts();return{name:e,version:t,state:n,registrations:{transforms:i.transform,renderers:i.renderer,subscriptions:i.subscription,cleanups:i.cleanup}}};for(const[n,r]of this.#g)e.push(t(n,void 0,"initializing",r.scope));for(const[n,r]of this.#p)e.push(t(n,r.plugin.version,"active",r.scope));for(const t of this.#m.keys())e.push({name:t,version:void 0,state:"tearing-down",registrations:{transforms:0,renderers:0,subscriptions:0,cleanups:0}});return e}get size(){return this.#p.size}async#P(e,t){if(this.#p.has(e.name)||this.#g.has(e.name)||this.#m.has(e.name))return void this.#t(`plugin "${e.name}" already registered`);const n=function(e,t){if(void 0!==e){if(void 0!==e.runtime&&!function(e,t){const n=function(e){const t=/^v?(\d+)\.(\d+)\.(\d+)/.exec(e.trim());if(null!==t)return[Number(t[1]),Number(t[2]),Number(t[3])]}(e);return void 0!==n&&t.split("||").some(e=>{const r=e.trim().split(/\s+/).filter(e=>e.length>0);return 0===r.length?""===e.trim()&&""===t.trim():r.every(e=>function(e,t){const n=t.trim();if(""===n||"*"===n)return!0;const r=/^(\^|~|>=|<=|>|<|=)?\s*v?(\d+)\.(\d+)\.(\d+)/.exec(n);if(null===r)return!1;const i=r[1]??"=",o=[Number(r[2]),Number(r[3]),Number(r[4])],s=function(e,t){for(let n=0;n<3;n+=1){const r=(e[n]??0)-(t[n]??0);if(0!==r)return r}return 0}(e,o);switch(i){case"=":return 0===s;case">":return s>0;case">=":return s>=0;case"<":return s<0;case"<=":return s<=0;case"~":return s>=0&&e[0]===o[0]&&e[1]===o[1];case"^":return!(s<0)&&(o[0]>0?e[0]===o[0]:o[1]>0?0===e[0]&&e[1]===o[1]:0===e[0]&&0===e[1]&&e[2]===o[2]);default:return!1}}(n,e))})}(t,e.runtime))return`declares runtime ${e.runtime}, this runtime is ${t}`;if(void 0!==e.protocol){if(!Number.isInteger(e.protocol)||e.protocol<1)return`declares an invalid protocol version ${String(e.protocol)}`;if(e.protocol<4)return`declares protocol ${String(e.protocol)}, this runtime speaks ${String(4)}`}}}(e.compat,"2.2.2");if(void 0!==n)return void this.#A(e.name,n);const r=new i(e.name,this.#t),o=this.#k(e.name,r),s={scope:r,cancelled:!1};this.#g.set(e.name,s);try{if(await this.#$(()=>e.init(o),t),s.cancelled)return;r.commit()}catch(t){return r.close(),void(s.cancelled||this.#t(`plugin "${e.name}" init failed:`,t))}finally{this.#g.get(e.name)===s&&this.#g.delete(e.name)}this.#p.set(e.name,{plugin:e,scope:r}),this.#t(`plugin "${e.name}" registered`)}#A(e,t){const n=`plugin "${e}" refused: ${t}`;this.#t(n),this.#a.emit("error",{error:new Error(n),context:"plugin",code:"LP0103"})}#k(e,t){return{events:new o(this.#a,t),registerFieldRenderer:e=>{t.stage("renderer",()=>{const t=this.#h(e);return"function"==typeof t?t:void 0})},registerTransform:(e,n)=>{const r={transform:n,active:!1};t.stage("transform",()=>{r.active=!0;const t=this.#y.get(e);return void 0===t?this.#y.set(e,[r]):t.push(r),()=>{r.active=!1;const t=this.#y.get(e);if(void 0===t)return;const n=t.indexOf(r);n>=0&&t.splice(n,1),0===t.length&&this.#y.delete(e)}})},registerCleanup:e=>{t.own(e)},getConfig:()=>this.#d,log:(...t)=>{this.#t(`[${e}]`,...t)}}}#x(e,t){const n=this.#g.get(e);if(void 0!==n)return n.cancelled=!0,n.scope.close(),Promise.resolve();const r=this.#m.get(e);if(void 0!==r)return this.#v.has(e)?Promise.resolve():t?this.#C(r):r;const i=this.#p.get(e);if(void 0===i)return Promise.resolve();this.#p.delete(e),i.scope.close();const o=Promise.resolve().then(()=>this.#N(e,i.plugin,t));return this.#m.set(e,o),o.then(()=>{this.#m.get(e)===o&&this.#m.delete(e)}),o}async#N(e,t,n){if(void 0!==t.destroy){this.#v.add(e);try{await this.#$(()=>t.destroy?.(),n)}catch(t){this.#t(`plugin "${e}" destroy failed:`,t)}finally{this.#v.delete(e)}}}async#L(e){for(const e of this.#g.values())e.cancelled=!0,e.scope.close();const t=[...this.#p.keys()];for(const n of t)await this.#x(n,e)}async#$(e,t){t?await this.#C(Promise.resolve().then(e)):await e()}async#C(e){this.#b+=1;try{await e}finally{this.#b-=1}}#S(e){const t=this.#w.then(e);return this.#w=t.catch(e=>{this.#t("plugin manager mutation failed:",e)}),t}},a="payload-live-preview-highlight",c=/* @__PURE__ */new WeakMap,l=/* @__PURE__ */new WeakMap,u={name:"highlight",version:"1.0.0",init:e=>{if("undefined"==typeof document||"undefined"==typeof window)return;const t="function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,n=function(e,t){let n=c.get(e);void 0===n||n.connected()||(c.delete(e),n=void 0),void 0===n&&(n=function(e,t){const n=e.getElementById(a);if(n instanceof HTMLStyleElement)return{pluginOwned:!1,connected:()=>n.isConnected,remove:()=>{},owners:0};const r=function(e,t){try{if(!Array.isArray(e.adoptedStyleSheets)||"function"!=typeof CSSStyleSheet)return;const n=new CSSStyleSheet;if("function"!=typeof n.replaceSync)return;return n.replaceSync(t),e.adoptedStyleSheets=[...e.adoptedStyleSheets,n],n}catch{return}}(e,t);if(void 0!==r)return{pluginOwned:!0,connected:()=>e.adoptedStyleSheets.includes(r),remove:()=>{e.adoptedStyleSheets=e.adoptedStyleSheets.filter(e=>e!==r)},owners:0};const i=e.createElement("style");return i.id=a,i.textContent=t,e.head.appendChild(i),{pluginOwned:!0,connected:()=>i.isConnected,remove:()=>{i.remove()},owners:0}}(e,t?".lp-highlight{outline:2px solid rgba(0,102,204,0.85);outline-offset:2px;}":"@keyframes lp-highlight{0%{outline:2px solid rgba(0,102,204,0.85);outline-offset:2px}100%{outline:2px solid transparent;outline-offset:2px}}.lp-highlight{animation:lp-highlight 0.6s ease-out;}"),c.set(e,n));const r=n;r.owners+=1;let i=!0;return()=>{i&&(i=!1,r.owners-=1,r.owners>0||(c.get(e)===r&&c.delete(e),r.pluginOwned&&r.remove()))}}(document,t),r=t?1e3:600,i=/* @__PURE__ */new WeakMap,o=/* @__PURE__ */new Set;e.registerCleanup?.(()=>{for(const e of[...o])e();n()}),e.events.on("elementUpdate",e=>{const t=e.element;i.get(t)?.();const n=function(e){let t=l.get(e);void 0===t&&(t={owners:0,pluginAdded:!e.classList.contains("lp-highlight")},l.set(e,t));const n=t;n.owners+=1,e.classList.add("lp-highlight");let r=!0;return()=>{r&&(r=!1,n.owners-=1,n.owners>0||(l.delete(e),n.pluginAdded&&e.classList.remove("lp-highlight")))}}(t);let s=!1;const a=()=>{s||(s=!0,window.clearTimeout(c),i.get(t)===a&&i.delete(t),o.delete(a),n())},c=window.setTimeout(a,r);o.add(a),i.set(t,a)})}},d={name:"debug",version:"1.0.0",init:e=>{e.events.on("init",()=>{e.log("init")}),e.events.on("connect",t=>{e.log("connect ←",t.origin)}),e.events.on("disconnect",t=>{e.log("disconnect (",t.reason,")")}),e.events.on("cacheRefresh",t=>{e.log("cacheRefresh",t.elementCount,"elements,",t.fieldCount,"fields")}),e.events.on("beforeUpdate",t=>{e.log("beforeUpdate",Object.keys(t.data.fields).length,"fields")}),e.events.on("afterUpdate",t=>{e.log("afterUpdate",t.updatedCount,"in",t.durationMs.toFixed(2),"ms")}),e.events.on("error",t=>{e.log("error in",t.context,":",t.error.message)})}};function h(){let e=0,t=0,n=0;return{name:"analytics",version:"1.0.0",init:r=>{r.events.on("afterUpdate",r=>{e+=1,t+=r.updatedCount,n+=r.durationMs})},getStats:()=>({updateCount:e,totalElements:t,totalDurationMs:n,averageDurationMs:0===e?0:n/e})}}var f="payload-live-preview:scroll";function p(){"undefined"!=typeof window&&(function(){if("undefined"!=typeof window)try{sessionStorage.setItem(f,JSON.stringify({href:window.location.href,x:window.scrollX,y:window.scrollY}))}catch{}}(),window.location.reload())}function g(e={}){const t=e.strategy??"silent";return{name:"document-save",version:"1.1.0",init:n=>{let r=!0;const i=/* @__PURE__ */new Set;n.registerCleanup?.(()=>{r=!1;for(const e of i)e.abort();i.clear()}),function(){if("undefined"!=typeof window)try{const e=sessionStorage.getItem(f);if(null===e)return;sessionStorage.removeItem(f);const t=JSON.parse(e);if(t.href!==window.location.href)return;window.scrollTo(t.x??0,t.y??0)}catch{}}(),n.events.on("documentSave",()=>{if(!r)return;if("silent"===t)return;if("reload"===t)return void p();const o=new AbortController;i.add(o);const s="fetch"===t?async function(e,t,n){if(e.handler)try{await e.handler(n)}catch(e){if(!r||n.aborted)return;t("document-save handler threw:",e)}else t("document-save: fetch strategy selected but no handler supplied")}(e,n.log,o.signal):async function(e,t,n,r){if("undefined"==typeof fetch)return void t("document-save: revalidate strategy needs fetch — not available");const i=e.revalidateUrl??"/api/revalidate";let o=!1;try{const s=await fetch(i,{method:"POST",signal:n,headers:{"Content-Type":"application/json",...e.revalidateHeaders??{}},body:JSON.stringify({source:"payload-live-preview"})});if(!r()||n.aborted)return;o=s.ok,o||t("document-save revalidate non-2xx:",s.status)}catch(e){if(!r()||n.aborted)return;t("document-save revalidate failed:",e)}o||"reload"!==e.onRevalidateFailure||p()}(e,n.log,o.signal,()=>r);s.finally(()=>{i.delete(o)})})}}}function m(e){if(null==e)return[];const t=/* @__PURE__ */new Set,n=[];for(const r of e.split(/[\s,]+/)){const e=r.trim();0===e.length||t.has(e)||(t.add(e),n.push(e))}return n}var v="data-payload-island";function y(e){return function(e){return"astro-island"===e.tagName.toLowerCase()||e.hasAttribute(v)}(e)&&!("patch"===e.getAttribute(v))}function isInsideIsland(e){let t=e;for(;null!==t;){if(y(t))return!0;t=t.parentElement}return!1}var w="data-payload-field",b="data-payload-depends",P="data-payload-guessed",S="data-payload-covers";function x(e){if((e.getAttribute("data-payload-fragment")??"").length>0)return"fragment";const t=e.getAttribute("data-payload-strategy");return null!==t?"route"===t?"route":void 0:e.hasAttribute(w)&&null!==e.closest("head")?"route":void 0}function L(e){switch(typeof e){case"string":return e.length>65536?void 0:`s:${e}`;case"number":return`n:${Object.is(e,-0)?"-0":String(e)}`;case"boolean":return"b:"+(e?"1":"0");case"bigint":return`i:${String(e)}`;case"undefined":return"u";case"object":{if(null===e)return"z";let t;try{t=JSON.stringify(e)}catch{return}return t.length>65536?void 0:`o:${t}`}case"symbol":case"function":return}}function A(e){return"object"==typeof e&&null!==e}function k(e){return Array.isArray(e)?"array":A(e)?"object":"scalar"}function $(e,t){return A(e)?e[t]:void 0}function C(e,t){return("string"==typeof t||"number"==typeof t)&&A(e)&&!Array.isArray(e)&&e.id===t}function N(e,t){if(!A(e)||!A(t))return C(e,t)||C(t,e)||L(e)===L(t);if(Array.isArray(e)!==Array.isArray(t))return!1;const n=Object.keys(t);return n.length===Object.keys(e).length&&n.every(n=>Object.hasOwn(e,n)&&N($(e,n),$(t,n)))}function O(e,t){const n=L(t),r=L(e);return void 0!==n&&n===r||!(!C(e,t)&&!C(t,e))||void 0!==n&&void 0!==r&&N(e,t)}function T(e,t,n,r){const i=[];let o=0;const s=(e,t,n,a)=>{if(o+=1,r.covers(e)||O(t,n))return;if(!((void 0===t||k(t)===k(n))&&A(n)&&r.reachesBelow(e)&&a<8))return void i.push({path:e,value:n});const c=function(e,t){const n=new Set(Object.keys(t));if(A(e))for(const t of Object.keys(e))n.add(t);return[...n]}(t,n);0===c.length&&i.push({path:e,value:n});for(const r of c){if(o>=1024)return void i.push({path:e,value:n});s(`${e}.${r}`,$(t,r),$(n,r),a+1)}};return s(e,t,n,0),i}var U=/* @__PURE__ */new Set(["id","_id","createdAt","updatedAt","createdBy","updatedBy","_status","globalType","collection","locale","localized"]);function E(e,t){if(void 0===t||0===t.length)return e;const n=`_${t}`;return e.endsWith(n)?e.slice(0,-n.length):e}function R(e,t){const n=new Set(e),r=[...t],i=(e,t)=>{const n=`${t}.`;for(const t of e)if(t.startsWith(n))return!0;return!1};return{covers:e=>n.has(e)||r.some(t=>t===e||e.startsWith(`${t}.`)),reachesBelow:e=>i(n,e)||i(r,e)}}var z="payload-live-preview-unbound",q={"bottom-right":"bottom:12px;right:12px;","bottom-left":"bottom:12px;left:12px;","top-right":"top:12px;right:12px;","top-left":"top:12px;left:12px;"};function F(e,t,n,r=[],i="descendant"){const o=[...t],s=function(e,t,n){const r=R(e,n),i=e=>r.covers(e)||r.reachesBelow(e);return e=>{if(i(e))return!0;const n=E(e,t);return n!==e&&i(n)}}(o,n,r),a=Object.keys(e).filter(e=>!U.has(e)&&!s(e));return"declared"===i&&a.push(...function(e,t,n,r){const i=R(t,r),o=[];for(const[t,r]of Object.entries(e)){if(U.has(t))continue;const e=E(t,n);if(!i.covers(e)&&i.reachesBelow(e))for(const{path:t}of T(e,void 0,r,i))o.push(t)}return o}(e,o,n,r)),[...new Set(a)].sort((e,t)=>e.localeCompare(t))}function M(e,t){const n=e.createElement("textarea");n.value=t,n.setAttribute("readonly",""),n.style.cssText="position:fixed;opacity:0;pointer-events:none;",e.body.append(n),n.select(),n.remove()}function j(e,t,n){const r=e.createElement("button");return r.type="button",r.textContent=n,r.style.cssText="display:block;width:100%;text-align:left;margin:2px 0;padding:2px 4px;border:0;border-radius:3px;background:#222;color:#7fd1ff;font:inherit;cursor:pointer;",r.title=`Copy ${w}="${t}"`,r.addEventListener("click",()=>{!function(e,t){const n=e.defaultView?.navigator.clipboard;null==n?M(e,t):n.writeText(t).catch(()=>{M(e,t)})}(e,`${w}="${t}"`),r.textContent=`${n} ✓`}),r}function B(e={}){return{name:"unbound-fields",version:"1.0.0",init:t=>{const n=e.root??("undefined"==typeof document?void 0:document);if(void 0===n)return;if((e.onlyWithDebug??1)&&!0!==t.getConfig().debug)return void t.log("not mounted: the client runs without `debug: true`");const r=function(e,t){const n=function(e){return 9===e.nodeType?e:e.ownerDocument}(e);if(null==n?.body)return null;const r=n.createElement("aside");r.id=z,r.style.cssText="position:fixed;z-index:2147483646;max-width:280px;max-height:40vh;overflow:auto;font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;background:#111;color:#eee;border:1px solid #333;border-radius:6px;padding:8px 10px;box-shadow:0 4px 16px rgba(0,0,0,0.4);"+t,r.setAttribute("aria-hidden","true"),r.hidden=!0;const i=e=>{const t=n.createElement("div");return t.textContent=e,t.style.cssText="font-weight:600;margin-bottom:4px;",t},o=i("Unbound fields"),s=n.createElement("div"),a=i("Guessed bindings");a.setAttribute("data-testid","guessed-bindings");const c=n.createElement("div");return r.append(o,s,a,c),n.body.append(r),{update:(e,t)=>{r.isConnected||(n.getElementById(z)?.remove(),n.body.append(r)),r.hidden=0===e.length&&0===t.length,o.hidden=0===e.length,s.replaceChildren(...e.map(e=>j(n,e,e))),a.hidden=0===t.length,c.replaceChildren(...t.map(({field:e,matched:t})=>j(n,e,`${e} ← ${JSON.stringify(t)}`)))},destroy:()=>{r.remove()}}}(n,q[e.position??"bottom-right"]);if(null===r)return;t.registerCleanup?.(r.destroy);const i="declared"===t.getConfig().subfieldCoverage?"declared":"descendant",o=t.getConfig().strategies??{};t.events.on("afterUpdate",e=>{const s=F(e.data.fields,function(e){const t=[];for(const n of e.querySelectorAll(`[${w}]`)){const e=n.getAttribute(w);null!==e&&e.length>0&&t.push(e)}return t}(n),e.data.locale,function(e,t){const n=[];for(const t of e.querySelectorAll(`[${S}]`))n.push(...m(t.getAttribute(S)));for(const r of e.querySelectorAll(`[${b}]`)){const e=x(r);void 0!==e&&void 0!==t[e]&&(isInsideIsland(r)||n.push(...m(r.getAttribute(b))))}return n}(n,o),i),a=function(e){const t=[];for(const n of e.querySelectorAll(`[${P}]`)){const e=n.getAttribute(w);null!==e&&0!==e.length&&t.push({field:e,matched:n.getAttribute(P)??""})}return t}(n);r.update(s,a),s.length>0&&t.log("unbound:",s.join(", ")),a.length>0&&t.log("guessed:",a.map(e=>e.field).join(", "))})}}}var EventEmitter=class{#O=/* @__PURE__ */new Map;#T=/* @__PURE__ */new Map;on(e,t){return this.#U(this.#O,e,t)}once(e,t){return this.#U(this.#T,e,t)}off(e,t){this.#E(this.#O,e,t),this.#E(this.#T,e,t)}async emit(e,t){await this.#R(e,t)}async emitWhile(e,t,n){return this.#R(e,t,n)}async#R(e,t,n){const r=()=>n?.()??!0;if(!r())return!1;const i=this.#O.get(e);if(i)for(const n of[...i]){if(!r())return!1;if(await this.#z(n,t,e),!r())return!1}if(!r())return!1;const o=this.#T.get(e);if(o&&o.size>0){const n=[...o];this.#T.delete(e);for(const i of n){if(!r())return!1;if(await this.#z(i,t,e),!r())return!1}}return r()}listenerCount(e){return(this.#O.get(e)?.size??0)+(this.#T.get(e)?.size??0)}removeAllListeners(e){if(void 0===e)return this.#O.clear(),void this.#T.clear();this.#O.delete(e),this.#T.delete(e)}eventNames(){const e=/* @__PURE__ */new Set;for(const t of this.#O.keys())e.add(t);for(const t of this.#T.keys())e.add(t);return[...e]}#U(e,t,n){let r=e.get(t);return r||(r=/* @__PURE__ */new Set,e.set(t,r)),r.add(n),()=>{this.#E(e,t,n)}}#E(e,t,n){const r=e.get(t);void 0!==r&&(r.delete(n),0===r.size&&e.delete(t))}async#z(e,t,r){try{await e(t)}catch(e){const t="string"==typeof r||"number"==typeof r?String(r):"<event>";n(`[live-preview] LP0601: handler for "${t}" threw:`,e)}}},H=Object.freeze({NoTrustedOrigin:"LP0101",ReferrerOnlyTrust:"LP0102",PluginIncompatible:"LP0103",ProfileFeatureOmitted:"LP0104",OrphanField:"LP0201",UnattributableUpdate:"LP0202",UnboundField:"LP0203",VisibilityGateDeferred:"LP0301",UnsafeAttributeWrite:"LP0401",TextTargetHasChildren:"LP0402",MissingArrayTemplate:"LP0403",StructuralItemUnkeyed:"LP0404",StructuralDuplicateKey:"LP0405",StructuralUnstableKeys:"LP0406",UnsupportedStrategy:"LP0407",UnknownValueFormat:"LP0408",SanitizerDroppedAttribute:"LP0409",UnrenderedBlockKept:"LP0410",UnfaithfulPatch:"LP0411",ServerFormatReplaced:"LP0412",UnrenderedBlockLost:"LP0413",MessageRejected:"LP0501",TokenRejected:"LP0502",ProtocolShapeUnknown:"LP0503",HandlerThrew:"LP0601",TransformThrew:"LP0602",RendererThrew:"LP0603",StartupFailed:"LP0605",ReadyFailed:"LP0606",HydrationWaitTimedOut:"LP0607",AuditRuntimeMissing:"LP0701",AuditNoFrameAncestors:"LP0702",AuditFrameOptionsBlocks:"LP0703",AuditBindingsExposed:"LP0704",AuditGateThresholdExceeded:"LP0705",AuditUnownedBindings:"LP0706",AuditNoBindings:"LP0707",AuditNotAPage:"LP0708",FragmentRequestFailed:"LP0801",FragmentResponseInvalid:"LP0802",FragmentUnauthorized:"LP0803",FragmentSuperseded:"LP0804",RouteRefreshLoop:"LP0805",FragmentStrategyUnavailable:"LP0806",UnboundChangeRefresh:"LP0807",EscalationUnavailable:"LP0808",IslandStartUnavailable:"LP0809",RouteRefreshUnconfirmed:"LP0810",V2ReadinessGap:"LP0709",RuntimeOnPublicPage:"LP0710"});export{H as DIAGNOSTIC_CODES,EventEmitter,s as PluginManager,h as createAnalyticsPlugin,B as createUnboundFieldsOverlayPlugin,d as debugPlugin,g as documentSavePlugin,u as highlightPlugin,F as unboundFieldNames};
1
+ function e(e){return("object"==typeof e&&null!==e||"function"==typeof e)&&"function"==typeof e.then&&(Promise.resolve(e).catch(()=>{}),!0)}function t(t){return(...n)=>{try{e(t(...n))}catch{}}}var n=t((...e)=>console.error(...e)),r=()=>{},i=class{#e;#t;#n=/* @__PURE__ */new Set;#r="staging";constructor(e,t){this.#e=e,this.#t=t}assertOpen(){if("closed"===this.#r)throw new Error(`Plugin context for "${this.#e}" is no longer active`)}get active(){return"active"===this.#r}eligible(){return"closed"!==this.#r}own(e){return this.assertOpen(),this.#i({kind:"cleanup",acquire:void 0,finalize:void 0,cleanup:e,disposed:!1})}stage(e,t,n){this.assertOpen();const r={kind:e,acquire:t,finalize:n,cleanup:void 0,disposed:!1},i=this.#i(r);if("active"===this.#r)try{this.#o(r)}catch(e){throw this.#s(r),e}return i}counts(){const e={transform:0,renderer:0,subscription:0,cleanup:0};for(const t of this.#n)e[t.kind]+=1;return e}commit(){if("staging"!==this.#r)throw new Error(`Plugin context for "${this.#e}" cannot be committed`);this.#r="committing";try{for(const e of this.#n)this.#o(e);this.#r="active"}catch(e){throw this.close(),e}}close(){if("closed"!==this.#r){this.#r="closed";for(const e of[...this.#n].reverse())this.#s(e);this.#n.clear()}}#i(e){return this.#n.add(e),()=>{this.#s(e)}}#o(e){if(e.disposed||void 0!==e.cleanup||void 0===e.acquire)return;const t=e.acquire();e.cleanup=t??r}#s(t){if(t.disposed)return;t.disposed=!0,this.#n.delete(t);const n=t.cleanup;if(t.cleanup=void 0,void 0!==n)try{e(n())&&this.#t(`plugin "${this.#e}" cleanup returned a Promise/thenable; cleanups must be synchronous`)}catch(e){this.#t(`plugin "${this.#e}" cleanup failed:`,e)}try{t.finalize?.()}catch(e){this.#t(`plugin "${this.#e}" cleanup failed:`,e)}}},o=class{#a;#c;#l=/* @__PURE__ */new Set;constructor(e,t){this.#a=e,this.#c=t}on(e,t){return this.#u("on",e,t)}once(e,t){return this.#u("once",e,t)}off(e,t){const n=t;for(const t of[...this.#l])t.event===e&&t.handler===n&&t.dispose()}emit(e,t){return this.#c.assertOpen(),this.#a.emit(e,t)}emitWhile(e,t,n){return this.#c.assertOpen(),this.#a.emitWhile(e,t,()=>{if(!this.#c.eligible())return!1;const e=n();return!!this.#c.eligible()&&e})}listenerCount(e){let t=0;for(const n of this.#l)n.event===e&&(t+=1);return t}removeAllListeners(e){for(const t of[...this.#l])void 0!==e&&t.event!==e||t.dispose()}eventNames(){const e=/* @__PURE__ */new Set;for(const t of this.#l)e.add(t.event);return[...e]}#u(e,t,n){this.#c.assertOpen();const i=n,o=[...this.#l].find(n=>n.kind===e&&n.event===t&&n.handler===i);if(void 0!==o)return o.dispose;let s=r,a=!0;const c=async t=>{this.#c.active&&a&&("once"===e&&s(),await n(t))},l={kind:e,event:t,handler:i,dispose:r};return s=this.#c.stage("subscription",()=>this.#a[e](t,c),()=>{a=!1,this.#l.delete(l)}),l.dispose=s,this.#l.add(l),s}},s=class{#a;#d;#h;#f;#t;#p=/* @__PURE__ */new Map;#g=/* @__PURE__ */new Map;#m=/* @__PURE__ */new Map;#v=/* @__PURE__ */new Set;#y=/* @__PURE__ */new Map;#w=Promise.resolve();#b=0;constructor(e){this.#a=e.events,this.#d=e.config,this.#h=e.registerFieldRenderer,this.#t=t(e.log);const n=e.onTransformError;this.#f=void 0===n?void 0:t((...e)=>{const t=e[0];try{return n(t)}catch(e){return void this.#t("transform error reporter failed:",e)}})}register(e){return this.#b>0?this.#P(e,!1):this.#S(()=>this.#P(e,!0))}unregister(e){return this.#b>0?this.#L(e,!1):this.#S(async()=>{await this.#L(e,!0)})}destroyAll(){return this.#b>0?this.#x(!1):this.#S(async()=>{await this.#x(!0)})}applyTransforms(t,n,r,i){const o=this.#y.get(t);if(void 0===o||0===o.length)return n;let s=n;for(const a of[...o]){if(!a.active)continue;const{transform:o}=a;if(!1===i?.())return n;try{s=o(s,{fieldName:t,element:r.element,allFields:r.allFields});const a=e(s);if(!1===i?.())return n;if(a)throw new TypeError(`Transform for "${t}" returned a Promise/thenable; transforms must be synchronous`)}catch(e){if(!1===i?.())return n;const r=e instanceof Error?e:new Error(String(e));return this.#t(`transform for "${t}" failed:`,r),this.#f?.(r),n}}return s}list(){return[...this.#p.keys()]}snapshot(){const e=[],t=(e,t,n,r)=>{const i=r.counts();return{name:e,version:t,state:n,registrations:{transforms:i.transform,renderers:i.renderer,subscriptions:i.subscription,cleanups:i.cleanup}}};for(const[n,r]of this.#g)e.push(t(n,void 0,"initializing",r.scope));for(const[n,r]of this.#p)e.push(t(n,r.plugin.version,"active",r.scope));for(const t of this.#m.keys())e.push({name:t,version:void 0,state:"tearing-down",registrations:{transforms:0,renderers:0,subscriptions:0,cleanups:0}});return e}get size(){return this.#p.size}async#P(e,t){if(this.#p.has(e.name)||this.#g.has(e.name)||this.#m.has(e.name))return void this.#t(`plugin "${e.name}" already registered`);const n=function(e,t){if(void 0!==e){if(void 0!==e.runtime&&!function(e,t){const n=function(e){const t=/^v?(\d+)\.(\d+)\.(\d+)/.exec(e.trim());if(null!==t)return[Number(t[1]),Number(t[2]),Number(t[3])]}(e);return void 0!==n&&t.split("||").some(e=>{const r=e.trim().split(/\s+/).filter(e=>e.length>0);return 0===r.length?""===e.trim()&&""===t.trim():r.every(e=>function(e,t){const n=t.trim();if(""===n||"*"===n)return!0;const r=/^(\^|~|>=|<=|>|<|=)?\s*v?(\d+)\.(\d+)\.(\d+)/.exec(n);if(null===r)return!1;const i=r[1]??"=",o=[Number(r[2]),Number(r[3]),Number(r[4])],s=function(e,t){for(let n=0;n<3;n+=1){const r=(e[n]??0)-(t[n]??0);if(0!==r)return r}return 0}(e,o);switch(i){case"=":return 0===s;case">":return s>0;case">=":return s>=0;case"<":return s<0;case"<=":return s<=0;case"~":return s>=0&&e[0]===o[0]&&e[1]===o[1];case"^":return!(s<0)&&(o[0]>0?e[0]===o[0]:o[1]>0?0===e[0]&&e[1]===o[1]:0===e[0]&&0===e[1]&&e[2]===o[2]);default:return!1}}(n,e))})}(t,e.runtime))return`declares runtime ${e.runtime}, this runtime is ${t}`;if(void 0!==e.protocol){if(!Number.isInteger(e.protocol)||e.protocol<1)return`declares an invalid protocol version ${String(e.protocol)}`;if(e.protocol<4)return`declares protocol ${String(e.protocol)}, this runtime speaks ${String(4)}`}}}(e.compat,"2.3.1");if(void 0!==n)return void this.#A(e.name,n);const r=new i(e.name,this.#t),o=this.#k(e.name,r),s={scope:r,cancelled:!1};this.#g.set(e.name,s);try{if(await this.#$(()=>e.init(o),t),s.cancelled)return;r.commit()}catch(t){return r.close(),void(s.cancelled||this.#t(`plugin "${e.name}" init failed:`,t))}finally{this.#g.get(e.name)===s&&this.#g.delete(e.name)}this.#p.set(e.name,{plugin:e,scope:r}),this.#t(`plugin "${e.name}" registered`)}#A(e,t){const n=`plugin "${e}" refused: ${t}`;this.#t(n),this.#a.emit("error",{error:new Error(n),context:"plugin",code:"LP0103"})}#k(e,t){return{events:new o(this.#a,t),registerFieldRenderer:e=>{t.stage("renderer",()=>{const t=this.#h(e);return"function"==typeof t?t:void 0})},registerTransform:(e,n)=>{const r={transform:n,active:!1};t.stage("transform",()=>{r.active=!0;const t=this.#y.get(e);return void 0===t?this.#y.set(e,[r]):t.push(r),()=>{r.active=!1;const t=this.#y.get(e);if(void 0===t)return;const n=t.indexOf(r);n>=0&&t.splice(n,1),0===t.length&&this.#y.delete(e)}})},registerCleanup:e=>{t.own(e)},getConfig:()=>this.#d,log:(...t)=>{this.#t(`[${e}]`,...t)}}}#L(e,t){const n=this.#g.get(e);if(void 0!==n)return n.cancelled=!0,n.scope.close(),Promise.resolve();const r=this.#m.get(e);if(void 0!==r)return this.#v.has(e)?Promise.resolve():t?this.#C(r):r;const i=this.#p.get(e);if(void 0===i)return Promise.resolve();this.#p.delete(e),i.scope.close();const o=Promise.resolve().then(()=>this.#N(e,i.plugin,t));return this.#m.set(e,o),o.then(()=>{this.#m.get(e)===o&&this.#m.delete(e)}),o}async#N(e,t,n){if(void 0!==t.destroy){this.#v.add(e);try{await this.#$(()=>t.destroy?.(),n)}catch(t){this.#t(`plugin "${e}" destroy failed:`,t)}finally{this.#v.delete(e)}}}async#x(e){for(const e of this.#g.values())e.cancelled=!0,e.scope.close();const t=[...this.#p.keys()];for(const n of t)await this.#L(n,e)}async#$(e,t){t?await this.#C(Promise.resolve().then(e)):await e()}async#C(e){this.#b+=1;try{await e}finally{this.#b-=1}}#S(e){const t=this.#w.then(e);return this.#w=t.catch(e=>{this.#t("plugin manager mutation failed:",e)}),t}},a="payload-live-preview-highlight",c=/* @__PURE__ */new WeakMap,l=/* @__PURE__ */new WeakMap,u={name:"highlight",version:"1.0.0",init:e=>{if("undefined"==typeof document||"undefined"==typeof window)return;const t="function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,n=function(e,t){let n=c.get(e);void 0===n||n.connected()||(c.delete(e),n=void 0),void 0===n&&(n=function(e,t){const n=e.getElementById(a);if(n instanceof HTMLStyleElement)return{pluginOwned:!1,connected:()=>n.isConnected,remove:()=>{},owners:0};const r=function(e,t){try{if(!Array.isArray(e.adoptedStyleSheets)||"function"!=typeof CSSStyleSheet)return;const n=new CSSStyleSheet;if("function"!=typeof n.replaceSync)return;return n.replaceSync(t),e.adoptedStyleSheets=[...e.adoptedStyleSheets,n],n}catch{return}}(e,t);if(void 0!==r)return{pluginOwned:!0,connected:()=>e.adoptedStyleSheets.includes(r),remove:()=>{e.adoptedStyleSheets=e.adoptedStyleSheets.filter(e=>e!==r)},owners:0};const i=e.createElement("style");return i.id=a,i.textContent=t,e.head.appendChild(i),{pluginOwned:!0,connected:()=>i.isConnected,remove:()=>{i.remove()},owners:0}}(e,t?".lp-highlight{outline:2px solid rgba(0,102,204,0.85);outline-offset:2px;}":"@keyframes lp-highlight{0%{outline:2px solid rgba(0,102,204,0.85);outline-offset:2px}100%{outline:2px solid transparent;outline-offset:2px}}.lp-highlight{animation:lp-highlight 0.6s ease-out;}"),c.set(e,n));const r=n;r.owners+=1;let i=!0;return()=>{i&&(i=!1,r.owners-=1,r.owners>0||(c.get(e)===r&&c.delete(e),r.pluginOwned&&r.remove()))}}(document,t),r=t?1e3:600,i=/* @__PURE__ */new WeakMap,o=/* @__PURE__ */new Set;e.registerCleanup?.(()=>{for(const e of[...o])e();n()}),e.events.on("elementUpdate",e=>{const t=e.element;i.get(t)?.();const n=function(e){let t=l.get(e);void 0===t&&(t={owners:0,pluginAdded:!e.classList.contains("lp-highlight")},l.set(e,t));const n=t;n.owners+=1,e.classList.add("lp-highlight");let r=!0;return()=>{r&&(r=!1,n.owners-=1,n.owners>0||(l.delete(e),n.pluginAdded&&e.classList.remove("lp-highlight")))}}(t);let s=!1;const a=()=>{s||(s=!0,window.clearTimeout(c),i.get(t)===a&&i.delete(t),o.delete(a),n())},c=window.setTimeout(a,r);o.add(a),i.set(t,a)})}},d={name:"debug",version:"1.0.0",init:e=>{e.events.on("init",()=>{e.log("init")}),e.events.on("connect",t=>{e.log("connect ←",t.origin)}),e.events.on("disconnect",t=>{e.log("disconnect (",t.reason,")")}),e.events.on("cacheRefresh",t=>{e.log("cacheRefresh",t.elementCount,"elements,",t.fieldCount,"fields")}),e.events.on("beforeUpdate",t=>{e.log("beforeUpdate",Object.keys(t.data.fields).length,"fields")}),e.events.on("afterUpdate",t=>{e.log("afterUpdate",t.updatedCount,"in",t.durationMs.toFixed(2),"ms")}),e.events.on("error",t=>{e.log("error in",t.context,":",t.error.message)})}};function h(){let e=0,t=0,n=0;return{name:"analytics",version:"1.0.0",init:r=>{r.events.on("afterUpdate",r=>{e+=1,t+=r.updatedCount,n+=r.durationMs})},getStats:()=>({updateCount:e,totalElements:t,totalDurationMs:n,averageDurationMs:0===e?0:n/e})}}var f="payload-live-preview:scroll";function p(){"undefined"!=typeof window&&(function(){if("undefined"!=typeof window)try{sessionStorage.setItem(f,JSON.stringify({href:window.location.href,x:window.scrollX,y:window.scrollY}))}catch{}}(),window.location.reload())}function g(e={}){const t=e.strategy??"silent";return{name:"document-save",version:"1.1.0",init:n=>{let r=!0;const i=/* @__PURE__ */new Set;n.registerCleanup?.(()=>{r=!1;for(const e of i)e.abort();i.clear()}),function(){if("undefined"!=typeof window)try{const e=sessionStorage.getItem(f);if(null===e)return;sessionStorage.removeItem(f);const t=JSON.parse(e);if(t.href!==window.location.href)return;window.scrollTo(t.x??0,t.y??0)}catch{}}(),n.events.on("documentSave",()=>{if(!r)return;if("silent"===t)return;if("reload"===t)return void p();const o=new AbortController;i.add(o);const s="fetch"===t?async function(e,t,n){if(e.handler)try{await e.handler(n)}catch(e){if(!r||n.aborted)return;t("document-save handler threw:",e)}else t("document-save: fetch strategy selected but no handler supplied")}(e,n.log,o.signal):async function(e,t,n,r){if("undefined"==typeof fetch)return void t("document-save: revalidate strategy needs fetch — not available");const i=e.revalidateUrl??"/api/revalidate";let o=!1;try{const s=await fetch(i,{method:"POST",signal:n,headers:{"Content-Type":"application/json",...e.revalidateHeaders??{}},body:JSON.stringify({source:"payload-live-preview"})});if(!r()||n.aborted)return;o=s.ok,o||t("document-save revalidate non-2xx:",s.status)}catch(e){if(!r()||n.aborted)return;t("document-save revalidate failed:",e)}o||"reload"!==e.onRevalidateFailure||p()}(e,n.log,o.signal,()=>r);s.finally(()=>{i.delete(o)})})}}}function m(e){if(null==e)return[];const t=/* @__PURE__ */new Set,n=[];for(const r of e.split(/[\s,]+/)){const e=r.trim();0===e.length||t.has(e)||(t.add(e),n.push(e))}return n}var v="data-payload-island";function y(e){return function(e){return"astro-island"===e.tagName.toLowerCase()||e.hasAttribute(v)}(e)&&!("patch"===e.getAttribute(v))}function isInsideIsland(e){let t=e;for(;null!==t;){if(y(t))return!0;t=t.parentElement}return!1}var w="data-payload-field",b="data-payload-depends",P="data-payload-guessed",S="data-payload-covers";function L(e){if((e.getAttribute("data-payload-fragment")??"").length>0)return"fragment";const t=e.getAttribute("data-payload-strategy");return null!==t?"route"===t?"route":void 0:e.hasAttribute(w)&&null!==e.closest("head")?"route":void 0}function x(e){switch(typeof e){case"string":return e.length>65536?void 0:`s:${e}`;case"number":return`n:${Object.is(e,-0)?"-0":String(e)}`;case"boolean":return"b:"+(e?"1":"0");case"bigint":return`i:${String(e)}`;case"undefined":return"u";case"object":{if(null===e)return"z";let t;try{t=JSON.stringify(e)}catch{return}return t.length>65536?void 0:`o:${t}`}case"symbol":case"function":return}}function A(e){return"object"==typeof e&&null!==e}function k(e){return Array.isArray(e)?"array":A(e)?"object":"scalar"}function $(e,t){return A(e)?e[t]:void 0}function C(e,t){return("string"==typeof t||"number"==typeof t)&&A(e)&&!Array.isArray(e)&&e.id===t}function N(e,t){if(!A(e)||!A(t))return C(e,t)||C(t,e)||x(e)===x(t);if(Array.isArray(e)!==Array.isArray(t))return!1;const n=Object.keys(t);return n.length===Object.keys(e).length&&n.every(n=>Object.hasOwn(e,n)&&N($(e,n),$(t,n)))}function O(e,t){const n=x(t),r=x(e);return void 0!==n&&n===r||!(!C(e,t)&&!C(t,e))||void 0!==n&&void 0!==r&&N(e,t)}function T(e,t,n,r){const i=[];let o=0;const s=(e,t,n,a)=>{if(o+=1,r.covers(e)||O(t,n))return;if(!((void 0===t||k(t)===k(n))&&A(n)&&r.reachesBelow(e)&&a<8))return void i.push({path:e,value:n});const c=function(e,t){const n=new Set(Object.keys(t));if(A(e))for(const t of Object.keys(e))n.add(t);return[...n]}(t,n);0===c.length&&i.push({path:e,value:n});for(const r of c){if(o>=1024)return void i.push({path:e,value:n});s(`${e}.${r}`,$(t,r),$(n,r),a+1)}};return s(e,t,n,0),i}var U=/* @__PURE__ */new Set(["id","_id","createdAt","updatedAt","createdBy","updatedBy","_status","globalType","collection","locale","localized"]);function E(e,t){if(void 0===t||0===t.length)return e;const n=`_${t}`;return e.endsWith(n)?e.slice(0,-n.length):e}function R(e,t){const n=new Set(e),r=[...t],i=(e,t)=>{const n=`${t}.`;for(const t of e)if(t.startsWith(n))return!0;return!1};return{covers:e=>n.has(e)||r.some(t=>t===e||e.startsWith(`${t}.`)),reachesBelow:e=>i(n,e)||i(r,e)}}var z="payload-live-preview-unbound",F={"bottom-right":"bottom:12px;right:12px;","bottom-left":"bottom:12px;left:12px;","top-right":"top:12px;right:12px;","top-left":"top:12px;left:12px;"};function q(e,t,n,r=[],i="descendant"){const o=[...t],s=function(e,t,n){const r=R(e,n),i=e=>r.covers(e)||r.reachesBelow(e);return e=>{if(i(e))return!0;const n=E(e,t);return n!==e&&i(n)}}(o,n,r),a=Object.keys(e).filter(e=>!U.has(e)&&!s(e));return"declared"===i&&a.push(...function(e,t,n,r){const i=R(t,r),o=[];for(const[t,r]of Object.entries(e)){if(U.has(t))continue;const e=E(t,n);if(!i.covers(e)&&i.reachesBelow(e))for(const{path:t}of T(e,void 0,r,i))o.push(t)}return o}(e,o,n,r)),[...new Set(a)].sort((e,t)=>e.localeCompare(t))}function M(e,t){const n=e.createElement("textarea");n.value=t,n.setAttribute("readonly",""),n.style.cssText="position:fixed;opacity:0;pointer-events:none;",e.body.append(n),n.select(),n.remove()}function j(e,t,n){const r=e.createElement("button");return r.type="button",r.textContent=n,r.style.cssText="display:block;width:100%;text-align:left;margin:2px 0;padding:2px 4px;border:0;border-radius:3px;background:#222;color:#7fd1ff;font:inherit;cursor:pointer;",r.title=`Copy ${w}="${t}"`,r.addEventListener("click",()=>{!function(e,t){const n=e.defaultView?.navigator.clipboard;null==n?M(e,t):n.writeText(t).catch(()=>{M(e,t)})}(e,`${w}="${t}"`),r.textContent=`${n} ✓`}),r}function B(e={}){return{name:"unbound-fields",version:"1.0.0",init:t=>{const n=e.root??("undefined"==typeof document?void 0:document);if(void 0===n)return;if((e.onlyWithDebug??1)&&!0!==t.getConfig().debug)return void t.log("not mounted: the client runs without `debug: true`");const r=function(e,t){const n=function(e){return 9===e.nodeType?e:e.ownerDocument}(e);if(null==n?.body)return null;const r=n.createElement("aside");r.id=z,r.style.cssText="position:fixed;z-index:2147483646;max-width:280px;max-height:40vh;overflow:auto;font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;background:#111;color:#eee;border:1px solid #333;border-radius:6px;padding:8px 10px;box-shadow:0 4px 16px rgba(0,0,0,0.4);"+t,r.setAttribute("aria-hidden","true"),r.hidden=!0;const i=e=>{const t=n.createElement("div");return t.textContent=e,t.style.cssText="font-weight:600;margin-bottom:4px;",t},o=i("Unbound fields"),s=n.createElement("div"),a=i("Guessed bindings");a.setAttribute("data-testid","guessed-bindings");const c=n.createElement("div");return r.append(o,s,a,c),n.body.append(r),{update:(e,t)=>{r.isConnected||(n.getElementById(z)?.remove(),n.body.append(r)),r.hidden=0===e.length&&0===t.length,o.hidden=0===e.length,s.replaceChildren(...e.map(e=>j(n,e,e))),a.hidden=0===t.length,c.replaceChildren(...t.map(({field:e,matched:t})=>j(n,e,`${e} ← ${JSON.stringify(t)}`)))},destroy:()=>{r.remove()}}}(n,F[e.position??"bottom-right"]);if(null===r)return;t.registerCleanup?.(r.destroy);const i="declared"===t.getConfig().subfieldCoverage?"declared":"descendant",o=t.getConfig().strategies??{};t.events.on("afterUpdate",e=>{const s=q(e.data.fields,function(e){const t=[];for(const n of e.querySelectorAll(`[${w}]`)){const e=n.getAttribute(w);null!==e&&e.length>0&&t.push(e)}return t}(n),e.data.locale,function(e,t){const n=[];for(const t of e.querySelectorAll(`[${S}]`))n.push(...m(t.getAttribute(S)));for(const r of e.querySelectorAll(`[${b}]`)){const e=L(r);void 0!==e&&void 0!==t[e]&&(isInsideIsland(r)||n.push(...m(r.getAttribute(b))))}return n}(n,o),i),a=function(e){const t=[];for(const n of e.querySelectorAll(`[${P}]`)){const e=n.getAttribute(w);null!==e&&0!==e.length&&t.push({field:e,matched:n.getAttribute(P)??""})}return t}(n);r.update(s,a),s.length>0&&t.log("unbound:",s.join(", ")),a.length>0&&t.log("guessed:",a.map(e=>e.field).join(", "))})}}}var EventEmitter=class{#O=/* @__PURE__ */new Map;#T=/* @__PURE__ */new Map;on(e,t){return this.#U(this.#O,e,t)}once(e,t){return this.#U(this.#T,e,t)}off(e,t){this.#E(this.#O,e,t),this.#E(this.#T,e,t)}async emit(e,t){await this.#R(e,t)}async emitWhile(e,t,n){return this.#R(e,t,n)}async#R(e,t,n){const r=()=>n?.()??!0;if(!r())return!1;const i=this.#O.get(e);if(i)for(const n of[...i]){if(!r())return!1;if(await this.#z(n,t,e),!r())return!1}if(!r())return!1;const o=this.#T.get(e);if(o&&o.size>0){const n=[...o];this.#T.delete(e);for(const i of n){if(!r())return!1;if(await this.#z(i,t,e),!r())return!1}}return r()}listenerCount(e){return(this.#O.get(e)?.size??0)+(this.#T.get(e)?.size??0)}removeAllListeners(e){if(void 0===e)return this.#O.clear(),void this.#T.clear();this.#O.delete(e),this.#T.delete(e)}eventNames(){const e=/* @__PURE__ */new Set;for(const t of this.#O.keys())e.add(t);for(const t of this.#T.keys())e.add(t);return[...e]}#U(e,t,n){let r=e.get(t);return r||(r=/* @__PURE__ */new Set,e.set(t,r)),r.add(n),()=>{this.#E(e,t,n)}}#E(e,t,n){const r=e.get(t);void 0!==r&&(r.delete(n),0===r.size&&e.delete(t))}async#z(e,t,r){try{await e(t)}catch(e){const t="string"==typeof r||"number"==typeof r?String(r):"<event>";n(`[live-preview] LP0601: handler for "${t}" threw:`,e)}}},H=Object.freeze({NoTrustedOrigin:"LP0101",ReferrerOnlyTrust:"LP0102",PluginIncompatible:"LP0103",ProfileFeatureOmitted:"LP0104",OrphanField:"LP0201",UnattributableUpdate:"LP0202",UnboundField:"LP0203",CoverageDefaultChanges:"LP0204",VisibilityGateDeferred:"LP0301",UnsafeAttributeWrite:"LP0401",TextTargetHasChildren:"LP0402",MissingArrayTemplate:"LP0403",StructuralItemUnkeyed:"LP0404",StructuralDuplicateKey:"LP0405",StructuralUnstableKeys:"LP0406",UnsupportedStrategy:"LP0407",UnknownValueFormat:"LP0408",SanitizerDroppedAttribute:"LP0409",UnrenderedBlockKept:"LP0410",UnfaithfulPatch:"LP0411",ServerFormatReplaced:"LP0412",UnrenderedBlockLost:"LP0413",MessageRejected:"LP0501",TokenRejected:"LP0502",ProtocolShapeUnknown:"LP0503",HandlerThrew:"LP0601",TransformThrew:"LP0602",RendererThrew:"LP0603",StartupFailed:"LP0605",ReadyFailed:"LP0606",HydrationWaitTimedOut:"LP0607",AuditRuntimeMissing:"LP0701",AuditNoFrameAncestors:"LP0702",AuditFrameOptionsBlocks:"LP0703",AuditBindingsExposed:"LP0704",AuditGateThresholdExceeded:"LP0705",AuditUnownedBindings:"LP0706",AuditNoBindings:"LP0707",AuditNotAPage:"LP0708",FragmentRequestFailed:"LP0801",FragmentResponseInvalid:"LP0802",FragmentUnauthorized:"LP0803",FragmentSuperseded:"LP0804",RouteRefreshLoop:"LP0805",FragmentStrategyUnavailable:"LP0806",UnboundChangeRefresh:"LP0807",EscalationUnavailable:"LP0808",IslandStartUnavailable:"LP0809",RouteRefreshUnconfirmed:"LP0810",V2ReadinessGap:"LP0709",RuntimeOnPublicPage:"LP0710",AuditModifierWithoutField:"LP0711"});export{H as DIAGNOSTIC_CODES,EventEmitter,s as PluginManager,h as createAnalyticsPlugin,B as createUnboundFieldsOverlayPlugin,d as debugPlugin,g as documentSavePlugin,u as highlightPlugin,q as unboundFieldNames};
2
2
  //# sourceMappingURL=plugins.js.map