@brightsideoy/kama 1.0.0-alpha.2 → 1.0.0-alpha.21

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 (101) hide show
  1. package/bin/cli.js +604 -364
  2. package/content/definitions/block-kama-forms.yaml +5 -0
  3. package/content/definitions/blocks/button.yaml +15 -5
  4. package/content/definitions/blocks/image-gallery.yaml +34 -0
  5. package/content/definitions/blocks/node-list.yaml +75 -0
  6. package/content/definitions/blocks/youtube.yaml +8 -0
  7. package/content/definitions/field-sets/access.yaml +10 -0
  8. package/content/definitions/field-sets/channel-base.yaml +7 -0
  9. package/content/definitions/field-sets/page-base.yaml +16 -1
  10. package/content/definitions/nodes/article.yaml +17 -1
  11. package/content/definitions/taxonomies/categories.yaml +5 -2
  12. package/content/definitions/taxonomies/media-tag.yaml +15 -0
  13. package/content/definitions/taxonomies/tags.yaml +5 -2
  14. package/content/forms/contact.yaml +44 -0
  15. package/content/forms/subscription.yaml +32 -0
  16. package/definitions/editor/default.ts +15 -1
  17. package/dist/assets/AssetEditor-B4W7tV1a.js +1 -0
  18. package/dist/assets/AssetEditor-D9sz6bfN.css +1 -0
  19. package/dist/assets/CmsBadge-BNsgxyyB.css +1 -0
  20. package/dist/assets/CmsBadge-D0Ob9qPU.js +1 -0
  21. package/dist/assets/CmsButton-BQ85-YXn.css +1 -0
  22. package/dist/assets/CmsButton-CbOfxvjr.js +1 -0
  23. package/dist/assets/CmsDataRow--H4iI_u_.js +1 -0
  24. package/dist/assets/CmsDataRow-CYNxfVaZ.css +1 -0
  25. package/dist/assets/CmsFieldTaxonomy-CVlKL-l2.css +1 -0
  26. package/dist/assets/CmsFieldTaxonomy-C_AwHDwY.js +1 -0
  27. package/dist/assets/CmsHelp-BO_vWABq.css +1 -0
  28. package/dist/assets/CmsHelp-BQkr9KyU.js +1 -0
  29. package/dist/assets/CmsImagePreview-CujwG8r_.css +1 -0
  30. package/dist/assets/CmsImagePreview-DuHPBzml.js +1 -0
  31. package/dist/assets/CmsPaneResizer-B62ZqsnE.js +1 -0
  32. package/dist/assets/CmsPaneResizer-Dkidd4pI.css +1 -0
  33. package/dist/assets/CmsPublisher-CugEqTD8.css +1 -0
  34. package/dist/assets/CmsPublisher-XSCPrp5L.js +3 -0
  35. package/dist/assets/CmsUserCenter-Ac0GywlR.css +1 -0
  36. package/dist/assets/CmsUserCenter-D3XDzKDC.js +1 -0
  37. package/dist/assets/EditorSplitPreview-BzKh4wFB.css +1 -0
  38. package/dist/assets/EditorSplitPreview-Cp2x0O_P.js +1 -0
  39. package/dist/assets/NodeContextMenu-BYeWzmQ5.css +1 -0
  40. package/dist/assets/NodeContextMenu-C_HWBGeb.js +1 -0
  41. package/dist/assets/NodeEditor-4TsNvk2f.css +1 -0
  42. package/dist/assets/NodeEditor-DA5GRtRP.js +161 -0
  43. package/dist/assets/StatusPill-CbeW5SMT.js +1 -0
  44. package/dist/assets/StatusPill-Dlm6uvGe.css +1 -0
  45. package/dist/assets/TrashWorkspace-CATe46WF.js +1 -0
  46. package/dist/assets/TrashWorkspace-DtMgxg13.css +1 -0
  47. package/dist/assets/_plugin-vue_export-helper-CQxWhVtr.js +5 -0
  48. package/dist/assets/circle-check-A-QeFqt3.js +1 -0
  49. package/dist/assets/database-hg5SqKLG.js +1 -0
  50. package/dist/assets/folder-tree-BWYot72H.js +1 -0
  51. package/dist/assets/globe-BraoljaN.js +1 -0
  52. package/dist/assets/history-pqIbKK9u.js +1 -0
  53. package/dist/assets/index-CY0VYSyt.css +1 -0
  54. package/dist/assets/index-DdG9Pozx.js +14 -0
  55. package/dist/assets/layers-B6RgfpPR.js +1 -0
  56. package/dist/assets/loader-circle-BoUkhDjq.js +1 -0
  57. package/dist/assets/monitor-CrpvInqG.js +1 -0
  58. package/dist/assets/panel-left-close-CVFakVaA.js +1 -0
  59. package/dist/assets/plus-CX_GHzXs.js +1 -0
  60. package/dist/assets/rotate-ccw-CWE4pOjs.js +1 -0
  61. package/dist/assets/save-Ctv8vW9H.js +1 -0
  62. package/dist/assets/schema-helpers-DvficKko.js +1 -0
  63. package/dist/assets/send-F-mJeL54.js +1 -0
  64. package/dist/assets/smartphone-EPce6VdP.js +1 -0
  65. package/dist/assets/trash-2-CAUF1KtI.js +1 -0
  66. package/dist/assets/useLocalStorage-C805uplI.js +1 -0
  67. package/dist/assets/useNodes-CqFlc72m.js +1 -0
  68. package/dist/assets/user-IFlT6mYq.js +1 -0
  69. package/dist/build-seed.js +495 -0
  70. package/dist/{dist-Dy7-HUEG.js → dist-3Xc2TTZw.js} +3189 -1394
  71. package/dist/index.html +34 -2
  72. package/dist/index.js +3116 -1315
  73. package/dist/schema-compiler.js +5 -5
  74. package/documentation/EXTENSIONS.md +204 -0
  75. package/extension-registry.js +5 -0
  76. package/package.json +13 -6
  77. package/schema.sql +44 -1
  78. package/templates/astro-starter/src/components/blocks/BlockRenderer.astro +9 -0
  79. package/templates/astro-starter/src/components/blocks/Form.astro +143 -0
  80. package/templates/astro-starter/src/components/blocks/HeaderImage.astro +6 -12
  81. package/templates/astro-starter/src/components/blocks/ImageBlock.astro +5 -6
  82. package/templates/astro-starter/src/components/blocks/NodeList.astro +274 -0
  83. package/templates/astro-starter/src/components/global/Breadcrumb.astro +50 -9
  84. package/templates/astro-starter/src/components/global/Footer.astro +7 -46
  85. package/templates/astro-starter/src/components/global/Header.astro +10 -16
  86. package/templates/astro-starter/src/components/global/NavigationMenu.astro +68 -49
  87. package/templates/astro-starter/src/components/ui/KamaImage.astro +13 -5
  88. package/templates/astro-starter/src/layouts/StandardLayout.astro +4 -3
  89. package/templates/astro-starter/src/lib/cms.ts +33 -11
  90. package/templates/astro-starter/src/lib/media/kama-image-service.ts +15 -4
  91. package/templates/astro-starter/src/lib/media/media-proxy.ts +22 -3
  92. package/templates/astro-starter/src/lib/media/media-url.ts +17 -3
  93. package/templates/astro-starter/src/middleware.ts +158 -100
  94. package/templates/astro-starter/src/pages/[...slug].astro +77 -3
  95. package/templates/astro-starter/src/pages/api/load-nodes.ts +68 -0
  96. package/templates/astro-starter/src/pages/api/partials/node-cards.astro +101 -0
  97. package/templates/kama-worker/index.js +38 -15
  98. package/templates/kama-worker/server.js +13 -5
  99. package/templates/kama-worker/setup-local-db.mjs +17 -0
  100. package/dist/assets/index-F2rfUymo.css +0 -1
  101. package/dist/assets/index-lXxH3VFK.js +0 -164
@@ -0,0 +1 @@
1
+ import{n as e}from"./_plugin-vue_export-helper-CQxWhVtr.js";var t=e(`layers`,[[`path`,{d:`M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z`,key:`zw3jo`}],[`path`,{d:`M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12`,key:`1wduqc`}],[`path`,{d:`M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17`,key:`kqbvx6`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./_plugin-vue_export-helper-CQxWhVtr.js";var t=e(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./_plugin-vue_export-helper-CQxWhVtr.js";var t=e(`file-braces`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1`,key:`1oajmo`}],[`path`,{d:`M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1`,key:`mpwhp6`}]]),n=e(`maximize-2`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]),r=e(`minimize-2`,[[`path`,{d:`m14 10 7-7`,key:`oa77jy`}],[`path`,{d:`M20 10h-6V4`,key:`mjg0md`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M4 14h6v6`,key:`rmj7iw`}]]),i=e(`monitor`,[[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`,key:`48i651`}],[`line`,{x1:`8`,x2:`16`,y1:`21`,y2:`21`,key:`1svkeh`}],[`line`,{x1:`12`,x2:`12`,y1:`17`,y2:`21`,key:`vw1qmm`}]]);export{t as i,r as n,n as r,i as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./_plugin-vue_export-helper-CQxWhVtr.js";var t=e(`panel-left-close`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`m16 15-3-3 3-3`,key:`14y99z`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{P as e,j as t,n,v as r}from"./_plugin-vue_export-helper-CQxWhVtr.js";import{l as i,o as a,t as o,u as s}from"./useNodes-CqFlc72m.js";import{f as c,i as l,n as u,r as d,s as f}from"./schema-helpers-DvficKko.js";t();function p(){let{allChannels:t,activeChannelSettings:n,selectedChannelId:p,selectedLanguage:m,channelSnapshot:h,channelTemplateSchema:g,channelSchemas:_,validationErrors:v,setViewMode:y}=f(),{validateAgainstSchema:b}=s(),{fetchChannels:x,syncSystemMetadata:S}=i(),{confirmNavigation:C}=a(),w=()=>u(_,c),T=r(()=>l(w())),E=()=>{h.value=JSON.stringify(n.value||{})},D=async()=>{if(!n.value)return!1;v.value={};let e=w(),r=n.value.channelType||n.value.type||Object.keys(e)[0]||`website`,i=e[r]||g.value,a=d(i,g.value);if(!await b(n.value,{fields:a},`channel`))return!1;try{let e=n.value.id,i=n.value.isNew||String(e||``).startsWith(`draft-`)?null:typeof e==`number`?e:Number(e)||null,a={...JSON.parse(JSON.stringify(n.value)),id:i,channelType:r};delete a.isNew;let o=await fetch(`/api/cms/channels.json`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(a)});if(o.ok){let e=await o.json();n.value.id=e.id,delete n.value.isNew,await S(),p.value=String(e.id);let i=t.value.find(t=>String(t.id)===String(e.id));return i&&(n.value={...i,channelType:i.channelType||i.type||r,trees:Array.isArray(i.trees)?[...i.trees]:[]}),E(),await y(`channel`,!0),!0}{let e=await o.json().catch(()=>({}));return o.status===409&&e.field?v.value={[e.field]:e.error||`This key is already in use.`}:alert(e.error||`Failed to save channel settings.`),!1}}catch(e){return console.error(`[CMS] Error saving channel:`,e),!1}},O=async()=>{n.value=null,h.value=``,await y(`none`,!0)},k=async e=>{let t=e||n.value?.id;if(t){if(String(t).startsWith(`draft-`)){await O();return}try{let e=await fetch(`/api/cms/channels.json?id=${t}`,{method:`DELETE`});if(e.ok)n.value=null,h.value=``,await S(),p.value=`all`,await y(`none`,!0);else{let t=await e.json().catch(()=>({}));alert(`Failed to delete channel. ${t.error||`Check server console.`}`)}}catch{alert(`Network error: Could not reach server to delete the channel.`)}}},A=async()=>{if(!await C())return!1;let e=p.value;(!e||e===`all`)&&t.value.length>0&&(e=String(t.value[0].id),p.value=e);let r=t.value.find(t=>String(t.id)===String(e));if(r){let e=w(),t=Object.keys(e)[0]||`website`,i=r.channelType||r.type||t,a=JSON.parse(JSON.stringify(r));a.channelType=i,a.trees=Array.isArray(r.trees)?[...r.trees]:[];let s=e[i];if(s){let e={};o(e,s),Object.keys(e).forEach(t=>{(a[t]===void 0||a[t]===null)&&(a[t]=e[t])})}n.value=a,E(),v.value={},await y(`channel`,!0)}return!0},j=async e=>{if(!await C())return!1;let t={id:`draft-${Date.now()}`,isNew:!0,key:``,label:``,channelType:``,domain:`localhost`,baseUrl:`http://localhost:3000`,defaultLanguage:`en`,trees:[]};return n.value=t,E(),v.value={},await y(`channel`,!0),!0};return{allChannels:t,activeChannelSettings:n,selectedChannelId:p,selectedLanguage:m,channelTypeOptions:T,fetchChannels:x,saveChannelSettings:D,cancelNewChannel:O,deleteChannel:k,openCurrentChannelSettings:A,handleAddNewChannel:j,onChannelSelectChange:async t=>{let r=t.target,i=String(n.value?.id||`all`);r.value===`__add_new__`?await j()||e(()=>{p.value=i}):await A()||e(()=>{p.value=i})},updateChannelSnapshot:E}}var m=n(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),h=n(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]);export{m as n,p as r,h as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./_plugin-vue_export-helper-CQxWhVtr.js";var t=e(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]),n=e(`image`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}]]),r=e(`link-2`,[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]),i=e(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]);export{t as i,r as n,n as r,i as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./_plugin-vue_export-helper-CQxWhVtr.js";var t=e(`save`,[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`,key:`1c8476`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`,key:`1ydtos`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`,key:`t51u73`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{$ as e,D as t,Q as n,Y as r,et as i,j as a,v as o}from"./_plugin-vue_export-helper-CQxWhVtr.js";function s(e){return e?{nodes:e.nodes||{},trees:e.trees||{},blocks:e.blocks||{},nodeLayouts:e.nodeLayouts||{},blockLayouts:e.blockLayouts||{},channels:e.channels||{},taxonomies:e.taxonomies||{},treeExposedFields:e.treeExposedFields||[`summary`]}:{nodes:{},trees:{},blocks:{},nodeLayouts:{},blockLayouts:{},channels:{},taxonomies:{},treeExposedFields:[`summary`]}}function c(e){return s(e).nodes}function l(e){return s(e).trees}function ee(e){return s(e).blocks}function u(e){return s(e).nodeLayouts}function d(e){return s(e).blockLayouts}function f(e){return s(e).channels}function te(e){return s(e).taxonomies}r();var p=e(!1),ne=e(`Unsaved Changes`),re=e(`You have unsaved changes. Are you sure you want to discard them?`),ie=e(`Discard Changes`),ae=e(`Keep Editing`),m;function oe(){return{isOpen:p,title:ne,message:re,confirmLabel:ie,cancelLabel:ae,confirmDiscard:(e,t,n,r)=>(e&&(re.value=e),t&&(ne.value=t),ie.value=n||`Discard Changes`,ae.value=r||`Keep Editing`,p.value=!0,new Promise(e=>{m=e})),handleConfirm:()=>{p.value=!1,m&&m(!0)},handleCancel:()=>{p.value=!1,m&&m(!1)}}}r();var h=`kama_cms_offline_queue`,g=new Map,_=new Map,v=e({hasConflict:!1,nodeId:null,serverData:null});function se(){let{isPendingOfflineSave:e,isDocumentUnverified:t}=ot(),n=()=>{if(typeof window>`u`)return{};try{let e=localStorage.getItem(h);return e?JSON.parse(e):{}}catch(e){return console.warn(`⚠️ Failed to parse offline queue from LocalStorage:`,e),{}}},r=(t,r)=>{if(!(typeof window>`u`))try{let i=n();i[String(t)]={data:JSON.parse(JSON.stringify(r)),timestamp:Date.now()},localStorage.setItem(h,JSON.stringify(i)),e.value=!0}catch(e){console.error(`❌ Failed to persist offline draft to storage:`,e)}},i=e=>n()[String(e)]||null,a=t=>{if(!(typeof window>`u`))try{let r=n();delete r[String(t)],localStorage.setItem(h,JSON.stringify(r));let i=Object.keys(r);e.value=i.length>0}catch(e){console.warn(`⚠️ Failed to clear offline draft from storage:`,e)}},o=e=>{t.value=e},s=async t=>{let r=n(),i=Object.keys(r);if(i.length===0){e.value=!1;return}e.value=!0;for(let e of i)try{await t(e)&&a(e)}catch(t){console.error(`❌ Auto-sync failed for node ${e}:`,t)}let o=Object.keys(n());e.value=o.length>0},c=e=>g.get(String(e)),l=(e,t)=>{g.set(String(e),{node:JSON.parse(JSON.stringify(t.node)),blocks:JSON.parse(JSON.stringify(t.blocks)),regionMeta:JSON.parse(JSON.stringify(t.regionMeta))}),String(v.value.nodeId)===String(e)&&p()},ee=e=>{g.delete(String(e)),a(e)},u=()=>{g.clear(),_.clear()},d=e=>_.get(e),f=(e,t)=>{_.set(e,JSON.parse(JSON.stringify(t)))},te=e=>{_.clear();let t=String(e);for(let[e]of g.entries())e!==t&&g.delete(e)},p=()=>{v.value={hasConflict:!1,nodeId:null,serverData:null}};return{conflictState:v,getCachedDocument:c,saveToCache:l,clearCache:ee,clearEntireCache:u,invalidateAfterSave:te,clearConflict:p,evaluateServerResponse:(e,t,n)=>{let r=c(e);if(i(e))return v.value={hasConflict:!0,nodeId:e,serverData:t},{action:`show_conflict_warning`};if(!r)return n?(v.value={hasConflict:!0,nodeId:e,serverData:t},{action:`show_conflict_warning`}):{action:`update_silently`};let a=new Date(r.node.updatedAt||0).getTime();return new Date(t.node.updatedAt||0).getTime()>a&&n?(v.value={hasConflict:!0,nodeId:e,serverData:t},{action:`show_conflict_warning`}):{action:`update_silently`}},resolveWithServer:e=>{if(!v.value.serverData||!v.value.nodeId)return;let t=v.value.serverData,n=v.value.nodeId;a(n),l(String(n),t),e(t),p()},resolveWithLocal:()=>{p()},getCachedInheritedRegion:d,setCachedInheritedRegion:f,persistOfflineDraft:r,getPersistedOfflineDraft:i,clearPersistedOfflineDraft:a,processOfflineQueue:s,markUnverified:o}}var y={"Content-Type":`application/json`},ce={async getNode(e){return fetch(`/api/cms/nodes.json?id=${e}`)},async getInheritedRegion(e,t,n,r){let i=r?`&channelId=${r}`:``;return fetch(`/api/v1/node/${encodeURIComponent(e)}?treeId=${t}&lang=${n}&preview=true${i}`)},async saveNode(e){return fetch(`/api/cms/nodes.json`,{method:`POST`,headers:y,body:JSON.stringify({node:e})})},async createInTree(e){return fetch(`/api/cms/tree.json`,{method:`POST`,headers:y,body:JSON.stringify(e)})},async publishNode(e){return fetch(`/api/cms/nodes/publish`,{method:`POST`,headers:y,body:JSON.stringify({id:e})})},async publishNodesBatch(e){return fetch(`/api/cms/nodes/publish/batch`,{method:`POST`,headers:y,body:JSON.stringify({ids:e})})},async deleteNode(e){return fetch(`/api/cms/nodes.json?id=${e}`,{method:`DELETE`})},async restoreNode(e){return fetch(`/api/cms/nodes/restore`,{method:`POST`,headers:y,body:JSON.stringify({id:e})})},async purgeNode(e){return fetch(`/api/cms/nodes/purge?id=${e}`,{method:`DELETE`})},async toggleVisibility(e,t){return fetch(`/api/cms/nodes/${e}/toggle-visibility`,{method:`POST`,headers:y,body:JSON.stringify({isHidden:t})})},async getNodeRevisions(e){return fetch(`/api/cms/nodes/${e}/revisions`)},async getSnapshot(e,t){return fetch(`/api/cms/nodes/${e}/revisions/${t}`)},async restoreSnapshot(e,t){return fetch(`/api/cms/nodes/${e}/revisions/${t}/restore`,{method:`POST`,headers:y})}},le=`modulepreload`,ue=function(e){return`/`+e},de={},fe=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=ue(t,n),t=s(t),t in de)return;de[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:le,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};r(),a();var b=n({}),pe=(e,t,n)=>{b[e]||(b[e]={}),b[e][t]=n},x=(e,t,n=null)=>b[e]?.[t]??n;typeof window<`u`&&!window.Kama&&(window.Kama=Object.freeze({state:{get:x,set:pe,raw:b},events:{emit:(e,t)=>{window.dispatchEvent(new CustomEvent(e,{detail:t}))},on:(e,t)=>{let n=e=>t(e.detail);return window.addEventListener(e,n),()=>window.removeEventListener(e,n)}}}));var S=e(typeof navigator<`u`&&!navigator.onLine),C=e(S.value?`offline`:`online`),w=e(!1),me=e(!1),he=e(Date.now());typeof window<`u`&&setInterval(()=>{he.value=Date.now()},15e3);var ge=e(null),_e=e(!1),ve=e(!1),T=e(null),E=e(null);typeof window<`u`&&(window.addEventListener(`online`,()=>{S.value=!1,C.value=`online`;let e=se();e.processOfflineQueue(async t=>{try{let n=e.getPersistedOfflineDraft(t);if(!n)return!0;let r=n.data,i=[];Object.entries(r.blocks||{}).forEach(([e,t])=>{r.regionMeta?.[e]?.isInherited||t.forEach((t,n)=>{i.push({instanceId:String(t.instanceId||t.id),componentId:t.componentId||t.elementType||`text-block`,elementType:t.componentId||t.elementType||`text-block`,region:e,sortOrder:n,data:t.data||{}})})});let a={id:typeof t==`number`?t:Number(t)||null,...r.node,blocks:i};return delete a.isNew,delete a._draftParentId,delete a._isTreeDraft,delete a.trees,(await ce.saveNode(a)).ok}catch{return!1}})}),window.addEventListener(`offline`,()=>{S.value=!0,C.value=`offline`}));var D=e({type:`dashboard`}),O=e(`none`),k=e(`content`),ye=e(!1),be=e([]),A=e(null),xe=e(``),Se=e(null),Ce=e([]),j=e(null),we=e(``),Te=e([]),M=e([]),Ee=e(`all`),De=e(``),Oe=e(`updatedAt`),ke=e(`DESC`),Ae=e(null),N=e({}),je=e(null),Me=e(null),P=e({}),F=e({}),I=e({}),L=e({}),R=e({}),z=e({}),B=e(!1),V=e(!1),H=e(!1),Ne=i({sidebar:[],topbar:[],views:{}});typeof window<`u`&&(async()=>{try{let e=await fetch(`/api/cms/ui-extensions`,{headers:{Accept:`application/json`}});if(!e.ok)return;let n=await e.json(),r={sidebar:[],topbar:[],views:{}};for(let e of n)if(e.ui&&(e.ui.sidebar&&r.sidebar.push(...e.ui.sidebar),e.ui.topbar&&r.topbar.push(...e.ui.topbar),e.ui.views&&Array.isArray(e.ui.views)))for(let n of e.ui.views)n.id&&n.url&&(r.views[n.id]=t(async()=>(await fe(()=>import(n.url),[])).default));Ne.value=r}catch(e){console.warn(`⚠️ [CMS Extensions] Failed to load UI extensions from backend:`,e)}})();var U=()=>({id:``,title:``,slug:``,nodeType:`node`,channelId:``,language:null,isHidden:!1,status:`draft`,publishedAt:null,children:[],disabledRegions:{}}),W=e(U()),G=e({}),Pe=e({}),Fe=e(null),Ie=e({}),K=e(``),q=e(``),J=e(``),Le=e(``),Re=e({total:0,byType:[]}),ze=e(!1),Be=()=>{ze.value=!1},Ve=o(()=>D.value.type===`dashboard`?`none`:D.value.type),He=o(()=>D.value.type===`node`&&D.value.id||null),Ue=o(()=>w.value),Y=o(()=>T.value!==null),X=(e,t)=>{if(!e)return{};let n={};for(let[t,r]of Object.entries(e))t!==`isHidden`&&t!==`hidden`&&t!==`is_hidden`&&t!==`channels`&&t!==`trees`&&t!==`hasUnpublishedChanges`&&t!==`status`&&t!==`path`&&t!==`routePath`&&(n[t]=r&&typeof r==`object`&&typeof r.id==`string`&&r.id.startsWith(`ast_`)?r.id:r);let r=e.nodeType||e.contentType,i=r?t[r]:null;if(i?.fields)for(let[e,t]of Object.entries(i.fields))t?.liveSync===!0&&delete n[e];return n},Z=o(()=>{if(H.value||Y.value||!K.value)return!1;let e=JSON.stringify({node:X(W.value,F.value),blocks:G.value}),t=JSON.parse(K.value||`{}`);return e!==JSON.stringify({node:X(t.node||{},F.value),blocks:t.blocks||{}})}),We=o(()=>!q.value||!A.value?!1:JSON.stringify(A.value)!==q.value),Ge=o(()=>!J.value||!j.value?!1:JSON.stringify(j.value)!==J.value),Ke=o(()=>Y.value||!W.value?.id?!1:W.value.hasUnpublishedChanges===!0||W.value.status===`draft`||Z.value),qe=async()=>{let{confirmDiscard:e}=oe(),t=W.value?.isNew===!0&&String(W.value?.id||``).startsWith(`draft-`),n=!!(W.value?.title||``).trim(),r=Object.values(G.value||{}).some(e=>e.length>0),i=n||r,a=Z.value&&(!t||i);return Ve.value===`node`&&(a||me.value)?await e(`You have unsaved changes on the active document. Are you sure you want to discard them?`,`Discard Document Changes?`,`Discard Changes`,`Keep Editing`):!0},Q=async(e,t=!1,n)=>!t&&T.value===null&&!await qe()?!1:(n!==void 0&&(O.value=n),D.value=e,T.value=null,E.value=null,e.type===`channel`||e.type===`tree`||e.type===`taxonomy`?k.value=`settings`:e.type===`node`&&(k.value=`content`),e.type!==`node`&&e.type!==`asset`&&(W.value=U(),K.value=``,G.value={}),e.type!==`channel`&&(A.value=null,q.value=``),e.type!==`tree`&&(j.value=null,J.value=``),!0),Je=async(e,t=!1)=>e===`none`?Q({type:`dashboard`},t,`none`):Q({type:e},t,e===`tree`||e===`channel`?e:void 0),Ye=(e=!1)=>Je(`none`,e),Xe=(e,t=`vault`,n=!1)=>Q({type:`node`,id:e},n,t),Ze=(e,t=!1)=>Q({type:`channel`,id:e},t,`channel`),Qe=(e,t=!1)=>Q({type:`tree`,id:e},t,`tree`),$e=(e=!1)=>Q({type:`publisher`},e,`none`),et=(e,t=!1)=>Q({type:`extension`,id:e},t,`none`),tt=()=>{W.value=U(),G.value={},Pe.value={},Fe.value=null,Ie.value={},K.value=``,H.value=!1,w.value=!1,T.value=null,E.value=null},nt=(e,t,n)=>{if(!e&&!n)return;let r=t=>e&&String(t.id)===String(e)||n&&t.treeNodeId&&String(t.treeNodeId)===String(n);W.value&&r(W.value)&&Object.assign(W.value,t);let i=e=>{if(Array.isArray(e))for(let n=0;n<e.length;n++)r(e[n])&&Object.assign(e[n],t),e[n].children&&e[n].children.length>0&&i(e[n].children)};if(i(Te.value),Array.isArray(M.value))for(let e=0;e<M.value.length;e++)r(M.value[e])&&Object.assign(M.value[e],t)},rt=e=>{e.nodes&&(F.value=e.nodes),e.trees&&(P.value=e.trees),e.channels&&(N.value=e.channels),e.taxonomies&&(z.value=e.taxonomies),(e.blocks||e.elements)&&(I.value=e.blocks||e.elements),L.value=e.nodeLayouts&&Object.keys(e.nodeLayouts).length>0?e.nodeLayouts:u(),R.value=e.blockLayouts&&Object.keys(e.blockLayouts).length>0?e.blockLayouts:d(),e.channelTemplate!==void 0&&(Ae.value=e.channelTemplate),e.userTemplate!==void 0&&(je.value=e.userTemplate),e.treeTemplate!==void 0&&(Me.value=e.treeTemplate),V.value=!0},it=async(e=`/api/cms/schemas.json`)=>{if(!B.value){B.value=!0;try{let t=await fetch(e,{headers:{Accept:`application/json`}});if(!t.ok)throw Error(`Failed to load schemas`);rt(await t.json())}catch(e){console.warn(`⚠️ API failed to load schemas, using local fallbacks`,e),F.value=c(),P.value=l(),N.value=f(),I.value=ee(),z.value=te(),L.value=u(),R.value=d(),V.value=!0}finally{B.value=!1}}},at=(e,t)=>{console.log(`[Notification - ${t}] ${e}`)};function ot(){return{isOffline:S,connectionStatus:C,isDocumentUnverified:w,isPendingOfflineSave:me,nowTicker:he,isReadOnlyMode:Ue,isSnapshotMode:Y,isSaving:_e,isAutoSavePending:ve,blockClipboard:ge,activeSnapshotVersion:T,draftBackup:E,activeView:D,activeViewMode:Ve,activeContentId:He,workspaceContext:O,setViewMode:Je,navigateTo:Q,goToDashboard:Ye,openNode:Xe,openChannel:Ze,openTree:Qe,openPublisher:$e,openExtensionView:et,activeTab:k,shouldFocusTitle:ye,allChannels:be,activeChannelSettings:A,selectedChannelId:xe,selectedLanguage:Se,availableTrees:Ce,activeTreeSettings:j,selectedTreeId:we,nodeTree:Te,vaultNodes:M,currentVaultType:Ee,currentVaultSearch:De,currentVaultSort:Oe,currentVaultOrder:ke,channelTemplateSchema:Ae,channelSchemas:N,userTemplateSchema:je,treeTemplateSchema:Me,treeSchemas:P,nodeSchemas:F,blockSchemas:I,nodeLayoutSchemas:L,blockLayoutSchemas:R,taxonomySchemas:z,isSchemasLoading:B,isSchemasLoaded:V,setSchemas:rt,fetchSchemas:it,isDocumentLoading:H,activeNode:W,resetActiveNode:tt,isNodeDirty:Z,isChannelDirty:We,isTreeDirty:Ge,hasUnpublishedChanges:Ke,nodeSnapshot:K,channelSnapshot:q,siteSnapshot:q,treeSnapshot:J,taxonomySnapshot:Le,updateNodeInState:nt,blocks:G,regionMeta:Pe,selectedBlock:Fe,validationErrors:Ie,vaultStats:Re,hasLoadedStats:ze,invalidateStats:Be,confirmDiscardUnsaved:qe,setNotification:at,uiExtensions:Ne,extensionState:b,setExtensionState:pe,getExtensionState:x}}function st(e,t){let n=e.value||{};return Object.keys(n).length===0&&(n=t(),e.value=n),n}function $(e,t){let n={...t?.fields||{},...e?.fields||{}};return e?.tabs&&typeof e.tabs==`object`&&Object.values(e.tabs).forEach(e=>{e?.fields&&typeof e.fields==`object`&&(n={...n,...e.fields})}),n}function ct(e){return Object.values(e||{}).map(e=>({value:e.id,label:e.label||e.id}))}function lt(e,t=!1){let n=t?`label`:`title`;if(!e)return[{key:n,config:{type:`text`,label:`Page Title`}}];let r=$(e),i=[];if(e.titleTemplate){let t=[...e.titleTemplate.matchAll(/{([^}]+)}/g)];for(let e of t){let t=e[1].trim();if(!i.some(e=>e.key===t)){let e=r[t]||{type:`text`,label:t};i.push({key:t,config:{...e}})}}if(i.length>0)return i}return r[n]?[{key:n,config:{...r[n]}}]:[{key:n,config:{type:`text`,label:e.label||`Page Title`}}]}function ut(e,t){if(!t)return`Untitled ${e?.label||`Node`}`;if($(e).title&&t.title&&String(t.title).trim()!==``)return String(t.title).trim();if(e?.titleTemplate){let n=e.titleTemplate.replace(/{([^}]+)}/g,(e,n)=>{let r=t[n.trim()];return r==null?``:String(r)});if(n=n.replace(/\s+/g,` `).replace(/^[\s,\-]+|[\s,\-]+$/g,``).trim(),n)return n}return t.title&&String(t.title).trim()!==``?String(t.title).trim():`Untitled ${e?.label||`Node`}`}export{lt as a,fe as c,oe as d,f,ct as i,ce as l,st as n,X as o,l as p,$ as r,ot as s,ut as t,se as u};
@@ -0,0 +1 @@
1
+ import{n as e}from"./_plugin-vue_export-helper-CQxWhVtr.js";var t=e(`clock`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}]]),n=e(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]);export{t as n,n as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./_plugin-vue_export-helper-CQxWhVtr.js";var t=e(`smartphone`,[[`rect`,{width:`14`,height:`20`,x:`5`,y:`2`,rx:`2`,ry:`2`,key:`1yt0o3`}],[`path`,{d:`M12 18h.01`,key:`mhygvu`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./_plugin-vue_export-helper-CQxWhVtr.js";var t=e(`file`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}]]),n=e(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]);export{t as n,n as t};
@@ -0,0 +1 @@
1
+ import{$ as e,W as t,Y as n,j as r,n as i}from"./_plugin-vue_export-helper-CQxWhVtr.js";var a=i(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),o=i(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),s=i(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);n(),r();function c(n,r){let i=typeof window<`u`,a=r;if(i){let e=localStorage.getItem(n);if(e!==null)try{a=JSON.parse(e)}catch{a=e}}let o=e(a);return t(o,e=>{i&&localStorage.setItem(n,JSON.stringify(e))},{deep:!0}),o}export{a as i,s as n,o as r,c as t};
@@ -0,0 +1 @@
1
+ import{$ as e,At as t,P as n,W as r,Y as i,j as a,v as o}from"./_plugin-vue_export-helper-CQxWhVtr.js";import{a as s,d as c,l,n as u,o as d,p as f,r as p,s as m,t as h,u as g}from"./schema-helpers-DvficKko.js";var _=t({iban:()=>v}),v=(e,t,n)=>!e||!t||/^[A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}$/.test(String(e).toUpperCase())?``:n.rules?.customMessage||`Invalid IBAN format.`,y=t({isMagicWord:()=>b}),b=(e,t,n)=>e&&e.toLowerCase()!==`magic`?n.rules?.customMessage||`You didn't say the magic word!`:``,x=e=>e==null||typeof e==`string`&&e.trim()===``,S={required:(e,t,n)=>(t===!0||String(t).toLowerCase()===`true`)&&x(e)?n.rules?.customMessage||`${n.label||`This field`} is required.`:``,min:(e,t,n)=>x(e)||typeof t!=`number`?``:typeof e==`number`&&e<t?n.rules?.customMessage||`${n.label||`Field`} must be at least ${t}.`:typeof e==`string`&&e.length<t?n.rules?.customMessage||`${n.label||`Field`} must be at least ${t} characters.`:``,max:(e,t,n)=>x(e)||typeof t!=`number`?``:typeof e==`number`&&e>t?n.rules?.customMessage||`${n.label||`Field`} cannot exceed ${t}.`:typeof e==`string`&&e.length>t?n.rules?.customMessage||`${n.label||`Field`} cannot exceed ${t} characters.`:``,email:(e,t,n)=>t!==!0&&String(t).toLowerCase()!==`true`||x(e)||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(e))?``:n.rules?.customMessage||`Please enter a valid email address.`,pattern:(e,t,n)=>{if(x(e)||!t||typeof t!=`string`)return``;try{if(!new RegExp(t).test(String(e)))return n.rules?.customMessage||`${n.label||`Field`} format is invalid.`}catch{console.warn(`[Validators] Invalid pattern for ${n.label||`field`}:`,t)}return``},unique:async(e,t,n,r)=>(t!==!0&&String(t).toLowerCase()!==`true`||x(e),``),uniqueSibling:async(e,t,n,r)=>(t!==!0&&String(t).toLowerCase()!==`true`||x(e),``)};function C(e,t){S[e]=t}function w(){let e=Object.assign({"../../definitions/validators/iban.ts":_,"../../definitions/validators/magic-word.ts":y});for(let t in e){let n=e[t];if(!n)continue;let r=t.split(`/`).pop()?.replace(/\.ts$/,``)||``;for(let[e,t]of Object.entries(n))typeof t==`function`&&C(e==="default"?r:e,t)}}w();function T(e,t,n){if(!n||typeof n!=`object`)return``;let r=n.rules||{},i={fieldKey:e};if((n.required===!0||String(n.required).toLowerCase()===`true`||r.required===!0||String(r.required).toLowerCase()===`true`)&&x(t))return r.customMessage||`${n.label||e} is required.`;for(let[e,a]of Object.entries(r)){if(e===`customMessage`||e===`uniqueMessage`||e===`unique`||e===`uniqueSibling`||e===`required`)continue;let r=S[e];if(r){let e=r(t,a,n,i);if(typeof e==`string`&&e!==``)return e}}return``}async function E(e,t,n,r){if(!n||typeof n!=`object`)return``;let i=T(e,t,n);if(i)return i;let a={...n.rules};n.unique!==void 0&&a.unique===void 0&&(a.unique=n.unique);let o={fieldKey:e,entityType:r?.entityType,excludeId:r?.excludeId,formData:r?.formData};for(let[e,r]of Object.entries(a)){if(e===`customMessage`||e===`uniqueMessage`)continue;let i=S[e];if(i){let e=await i(t,r,n,o);if(e)return e}}return``}function D(e){for(let t in e){let n=e[t];if(n)for(let[e,t]of Object.entries(n))typeof t==`function`&&C(e,t)}}function ee(){let{validationErrors:e}=m(),t=(e,t)=>{if(e)return t in e?e[t]:t.split(`.`).reduce((e,t)=>e&&e[t]!==void 0?e[t]:void 0,e)};return{validateAgainstSchema:async(n,r,i)=>{let a={};if(!n||!r)return e.value=a,!0;let o={...r.fields||{}};if(r.tabs&&typeof r.tabs==`object`&&Object.values(r.tabs).forEach(e=>{e?.fields&&(Array.isArray(e.fields)?e.fields.forEach(e=>{typeof e==`object`&&e&&Object.entries(e).forEach(([e,t])=>{o[e]={...o[e]||{},...t}})}):typeof e.fields==`object`&&Object.entries(e.fields).forEach(([e,t])=>{o[e]={...o[e]||{},...t}}))}),Object.keys(o).length===0)return e.value=a,!0;let s=n.id,c=typeof s==`number`||s&&!String(s).startsWith(`draft-`)?String(s):``;for(let[e,r]of Object.entries(o)){if(!r||typeof r!=`object`)continue;let o=await E(e,t(n,e),r,{entityType:i,excludeId:c,formData:n});o&&(a[e]=o)}return e.value=a,Object.keys(a).length===0}}}var O=null,k=null;function te(){let{allChannels:e,selectedChannelId:t,availableTrees:n,channelSchemas:r,treeSchemas:i}=m(),a=async()=>{O?.abort(),O=new AbortController;try{let[n,i]=await Promise.all([fetch(`/api/cms/schemas.json`,{signal:O.signal}),fetch(`/api/cms/channels.json`,{signal:O.signal})]);if(n.ok){let e=await n.json();e.channelSchemas&&(r.value=e.channelSchemas)}if(i.ok){let n=await i.json();e.value=n.channels||[],!t.value&&n.channels?.length>0&&(t.value=String(n.channels[0].id))}}catch(e){if(e instanceof DOMException&&e.name===`AbortError`)return;console.error(`[CMS Sync] Failed to fetch channels:`,e)}},o=async()=>{k?.abort(),k=new AbortController;try{let[e,t]=await Promise.all([fetch(`/api/cms/schemas.json`,{signal:k.signal}),fetch(`/api/cms/trees.json`,{signal:k.signal})]);if(e.ok){let t=await e.json();t.treeSchemas&&(i.value=t.treeSchemas)}if(t.ok){let e=await t.json();n.value=Array.isArray(e)?e:[]}}catch(e){if(e instanceof DOMException&&e.name===`AbortError`)return;console.error(`[CMS Sync] Failed to load trees:`,e)}};return{fetchChannels:a,fetchTrees:o,syncSystemMetadata:async()=>{await Promise.all([a(),o()])}}}function A(e){return e===!0||e===1||String(e)===`true`||String(e)===`1`}function ne(e,t=Date.now()){if(!e)return{isDraft:!1,isUnpublishedDraft:!1,isHidden:!1,isScheduled:!1,isUpcoming:!1,isShowing:!1,isPassed:!1,isCurrentlyVisible:!1,hasUnpublishedChanges:!1,statusBadge:`active`,badgeLabel:`Unknown`};let n=!!(e.isNew||!e.id||String(e.id).startsWith(`draft-`)),r=!n&&e.status===`draft`&&!e.publishedAt,i=A(e.isHidden)||A(e.disabled),a=!n&&!r&&A(e.hasUnpublishedChanges),o={};if(e.dataJson)try{o=typeof e.dataJson==`string`?JSON.parse(e.dataJson):e.dataJson}catch{}let s=!r&&o.startShowingAt!==void 0?o.startShowingAt:e.startShowingAt,c=!r&&o.stopShowingAt!==void 0?o.stopShowingAt:e.stopShowingAt,l=s?new Date(s).getTime():null,u=c?new Date(c).getTime():null,d=!!(l||u),f=t,p=!0,m=!1,h=!1,g=!1;d&&(l&&f<l?(p=!1,m=!0):u&&f>u?(p=!1,h=!0):g=!0);let _=!n&&!r&&!i&&p,v=`active`,y=`Visible`;return n?(v=`draft`,y=`Unsaved`):r?(v=`unpublished_draft`,y=`Draft`):a?(v=`unpublished_changes`,y=`Unpublished Changes`):i?(v=`hidden`,y=`Hidden`):m?(v=`scheduled_pending`,y=`Upcoming`):h?(v=`scheduled_expired`,y=`Expired`):g&&d&&(y=`Currently Showing`),{isDraft:n,isUnpublishedDraft:r,isHidden:i,isScheduled:d,isUpcoming:m,isShowing:g,isPassed:h,isCurrentlyVisible:_,hasUnpublishedChanges:a,statusBadge:v,badgeLabel:y}}i();var j=e({}),M=e([]),N=e({}),P=e(!1),F=()=>{let e=[];Object.values(j.value).forEach(t=>{Array.isArray(t)&&e.push(...t)}),M.value=e};function I(){let{taxonomySchemas:e,setNotification:t,setViewMode:n,taxonomySnapshot:r}=m(),i=async e=>{if(e){P.value=!0;try{let t=await fetch(`/api/cms/taxonomies/${e}`);if(t.ok){let n=await t.json(),r=n.items||n.terms||(Array.isArray(n)?n:[]);j.value={...j.value,[e]:r.map(t=>({...t,taxonomy:t.taxonomy||e}))}}else j.value={...j.value,[e]:[]};F()}catch(t){console.error(`[useTaxonomies] Failed to fetch terms:`,t),j.value={...j.value,[e]:[]}}finally{P.value=!1}}};return{terms:M,termsMap:j,activeTerm:N,isLoading:P,fetchTerms:i,fetchAllTaxonomies:async()=>{let t=e.value||{},n=Object.keys(t);n.length>0&&await Promise.all(n.map(e=>i(e)))},loadTerm:async(e,a)=>{if(String(a)===`new`||String(a).startsWith(`draft-`)){N.value={id:`draft-${Date.now()}`,key:``,label:``,taxonomy:e,parentId:null},r&&(r.value=JSON.stringify(N.value));return}let o=M.value.find(e=>String(e.id)===String(a));if(o)N.value={...o,...o.data||{}},r&&(r.value=JSON.stringify(N.value));else{await i(e);let o=M.value.find(e=>String(e.id)===String(a));o?(N.value={...o,...o.data||{}},r&&(r.value=JSON.stringify(N.value))):(t(`Term not found`,`error`),n(`none`))}},saveTerm:async e=>{if(!N.value||!N.value.label)return t(`Label is required`,`error`),!1;let n=String(N.value.id).startsWith(`draft-`),a=n?`POST`:`PUT`,o=n?`/api/cms/taxonomies/${e}`:`/api/cms/taxonomies/${e}/${N.value.id}`,s=[`id`,`taxonomy`,`key`,`label`,`parentId`,`sortOrder`,`createdAt`,`updatedAt`,`data`,`dataJson`],c={};for(let e of Object.keys(N.value))s.includes(e)||(c[e]=N.value[e]);let l={label:N.value.label,key:N.value.key,parentId:N.value.parentId,sortOrder:N.value.sortOrder,data:c};try{let s=await fetch(o,{method:a,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)}),c=await s.json();return s.ok?(t(`Term ${n?`created`:`updated`} successfully`,`success`),await i(e),n&&c.id&&(N.value.id=c.id),r&&(r.value=JSON.stringify(N.value)),!0):(t(c.error||`Failed to save term`,`error`),!1)}catch{return t(`An error occurred while saving`,`error`),!1}},deleteTerm:async(e,n)=>{try{return(await fetch(`/api/cms/taxonomies/${e}/${n}`,{method:`DELETE`})).ok?(t(`Term deleted successfully`,`success`),await i(e),!0):(t(`Failed to delete term`,`error`),!1)}catch{return t(`An error occurred while deleting`,`error`),!1}}}}a();var L=(e,t)=>{if(!e)return{};let n={},r=e.nodeType||e.contentType,i=r?t[r]:null,a=new Set([`id`,`title`,`slug`,`nodeType`,`channelId`,`language`]);i&&(i.fields&&Object.entries(i.fields).forEach(([e,t])=>{t?.liveSync!==!0&&a.add(e)}),i.tabs&&Object.values(i.tabs).forEach(e=>{e.fields&&Object.entries(e.fields).forEach(([e,t])=>{t?.liveSync!==!0&&a.add(e)})}));let o=Object.keys(e).filter(e=>a.has(e)).sort();for(let t of o){let r=e[t];n[t]=r&&typeof r==`object`&&typeof r.id==`string`&&r.id.startsWith(`ast_`)?r.id:r}return n};function R(){let e=m(),{activeTerm:t}=I(),{confirmDiscard:n}=c(),r=o(()=>{if(e.isDocumentLoading.value||e.isSnapshotMode.value||!e.nodeSnapshot.value)return!1;let t=JSON.parse(e.nodeSnapshot.value||`{}`),n=t.node||{};return e.activeNode.value.id===n.id&&JSON.stringify({node:L(e.activeNode.value,e.nodeSchemas.value),blocks:e.blocks.value})!==JSON.stringify({node:L(n,e.nodeSchemas.value),blocks:t.blocks||{}})}),i=o(()=>e.isSnapshotMode.value||!e.treeSnapshot.value||!e.activeTreeSettings.value?!1:JSON.stringify(e.activeTreeSettings.value)!==e.treeSnapshot.value),a=o(()=>e.isSnapshotMode.value||!e.channelSnapshot.value||!e.activeChannelSettings.value?!1:JSON.stringify(e.activeChannelSettings.value)!==e.channelSnapshot.value),s=o(()=>e.isSnapshotMode.value||!e.taxonomySnapshot.value||!t.value?!1:JSON.stringify(t.value)!==e.taxonomySnapshot.value),l=o(()=>e.isSnapshotMode.value?!1:e.activeViewMode.value===`node`?r.value:e.activeViewMode.value===`tree`?i.value:e.activeViewMode.value===`channel`?a.value:e.activeViewMode.value===`taxonomy`&&s.value);return{isNodeDirty:r,isTreeDirty:i,isChannelDirty:a,isTaxonomyDirty:s,isGlobalDirty:l,confirmNavigation:async()=>!l.value||await n(`You have unsaved changes. If you leave, your changes will be lost.`,`Discard unsaved changes?`,`Discard Changes`,`Cancel`)}}a(),i();var re=0,z=0,B=e({});function V(){let{allChannels:t,selectedChannelId:n,selectedLanguage:r,availableTrees:i,activeTreeSettings:a,selectedTreeId:s,nodeTree:c,vaultNodes:l,treeTemplateSchema:d,treeSchemas:h,activeNode:g,blocks:_,regionMeta:v,selectedBlock:y,validationErrors:b,nodeSnapshot:x,treeSnapshot:S,activeTab:C,shouldFocusTitle:w,setViewMode:T,currentVaultType:E,currentVaultSearch:D,currentVaultSort:O,currentVaultOrder:k}=m(),{validateAgainstSchema:ne}=ee(),{fetchTrees:j,fetchChannels:M,syncSystemMetadata:N}=te(),{confirmNavigation:P}=R(),F=e(!1),I=e(!0),L=e(0),V=()=>u(h,f),H=()=>{S.value=JSON.stringify(a.value||{})},U=o(()=>{if(!n.value||n.value===`all`)return i.value.map(e=>({id:e.id,key:e.key,label:e.label||e.key||`Tree ${e.id}`}));let e=t.value.find(e=>String(e.id)===String(n.value));return!e||!Array.isArray(e.trees)?[]:e.trees.map(e=>{let t=typeof e==`object`?e.treeId||e.id:e;if(!t)return null;let n=i.value.find(e=>String(e.id)===String(t)||e.key===t);return n?{id:n.id,key:n.key,label:n.label||n.key||`Tree ${n.id}`}:null}).filter(Boolean)}),W=(e,t,n=null)=>{for(let r of e){if(String(r.id)===String(t))return n;if(r.children&&r.children.length>0){let e=W(r.children,t,r);if(e)return e}}return null},G=(e,t)=>{if(!e||!Array.isArray(e))return!1;for(let n of e){if(String(n.id)===String(t.id))return n.disabledRegions={...t.disabledRegions||{}},t.channels&&(n.channels=t.channels),t.title!==void 0&&(n.title=t.title),t.slug!==void 0&&(n.slug=t.slug),t.isHidden!==void 0&&(n.isHidden=A(t.isHidden)),t.status!==void 0&&(n.status=t.status),t.isDraft!==void 0&&(n.isDraft=A(t.isDraft)),t.draftDataJson!==void 0&&(n.draftDataJson=t.draftDataJson),t.dataJson!==void 0&&(n.dataJson=t.dataJson),!0;if(n.children&&n.children.length>0&&G(n.children,t))return!0}return!1},K=o(()=>g.value?.id?!!W(c.value,g.value.id):!1),ie=e=>B.value[e]||[],ae=async e=>{if(e)try{let t=n.value&&n.value!==`all`?`&channelId=${n.value}`:``,i=await fetch(`/api/cms/tree.json?treeId=${e}&lang=${r.value}&preview=true${t}`);if(i.ok){let t=await i.json(),n=Array.isArray(t)?t:t.tree||[],r=new Set,a=[];for(let e of n){if(e.deletedAt&&String(e.deletedAt).trim()!==``)continue;let t=String(e.id);r.has(t)||(r.add(t),a.push({...e,isHidden:A(e.isHidden),isDraft:e.isDraft===void 0?void 0:A(e.isDraft)}))}B.value[e]=a,String(e)===String(s.value)&&(c.value=a)}}catch(t){console.error(`[CMS] Failed to fetch nodes for tree ${e}:`,t)}},q=async()=>{if(!s.value){c.value=[];return}++re,await ae(s.value)},oe=async(e,t)=>{B.value[e]=t,String(e)===String(s.value)&&(c.value=t);try{let i={treeId:e,language:r.value,tree:t};n.value&&n.value!==`all`&&(i.channelId=n.value);let a=await fetch(`/api/cms/tree.json`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i)});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(`[Tree Save] HTTP ${a.status}: ${e.error||`Unknown error`}`)}}catch(t){throw console.error(`[Tree Sync] Failed to save node order for tree ${e}:`,t),t}},se=async()=>{s.value&&await oe(s.value,B.value[s.value]||c.value)},J=async e=>{let t=!1,r=``,i=``;typeof e==`string`?(E.value=e,t=!0):e&&typeof e==`object`&&(t=e.reset??!1,e.type!==void 0&&(E.value=e.type),e.search!==void 0&&(D.value=e.search),e.sort!==void 0&&(O.value=e.sort),e.order!==void 0&&(k.value=e.order),e.ensureItemId&&(r=e.ensureItemId),e.assetId&&(i=e.assetId));let a=Array.isArray(E.value)&&E.value.length>0?E.value.join(`,`):E.value||`all`,o=D.value||``;if(!t&&F.value||!t&&!I.value)return;let s=++z;t&&(L.value=0,I.value=!0,l.value=[]),F.value=!0;try{let e=new URLSearchParams({limit:`50`,offset:String(L.value),sort:O.value,order:k.value});a&&a!==`all`&&e.append(`type`,a),o.trim()&&e.append(`q`,o.trim()),n.value&&n.value!==`all`&&e.append(`channelId`,n.value),r&&e.append(`ensureItemId`,r),i&&e.append(`assetId`,i);let c=await fetch(`/api/cms/nodes.json?${e.toString()}`);if(s!==z)return;if(!c.ok)throw Error(`Failed to fetch vault nodes (${c.status})`);let u=await c.json(),d=(Array.isArray(u)?u:u.items||[]).map(e=>({...e,isHidden:A(e.isHidden)}));I.value=!Array.isArray(u)&&!!u.hasMore,l.value=t?d:[...l.value,...d],L.value+=d.length}catch(e){s===z&&console.error(`[CMS] Failed to fetch vault nodes:`,e)}finally{s===z&&(F.value=!1)}},Y=async e=>{if(!n.value||n.value===`all`)return;let r=t.value.findIndex(e=>String(e.id)===String(n.value));if(r>-1){let n=t.value[r],a=Array.isArray(n.trees)?[...n.trees]:[],o=i.value.find(t=>String(t.id)===String(e)||t.key===e),c=o?o.id:e,l=o?o.key:String(e);a.some(e=>String(typeof e==`object`?e.treeId||e.id:e)===String(c)||(typeof e==`object`?e.treeId||e.id:e)===l)||(a.push({treeId:c,key:l}),(await fetch(`/api/cms/channels.json`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({...n,trees:a})})).ok&&await M()),s.value=String(c),await q()}},X=async e=>{if(!n.value||n.value===`all`)return;let r=t.value.findIndex(e=>String(e.id)===String(n.value));if(r>-1){let n={...t.value[r]};Array.isArray(n.trees)&&(n.trees=n.trees.filter(t=>String(typeof t==`object`?t.treeId||t.id:t)!==String(e)),await fetch(`/api/cms/channels.json`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)}),await M());let i=U.value;s.value=i.length>0?String(i[0].id):``,await q()}},Z=async(e,r)=>{if(!n.value||n.value===`all`)return;let i=t.value.findIndex(e=>String(e.id)===String(n.value));if(i>-1){let n={...t.value[i]},a=Array.isArray(n.trees)?[...n.trees]:[];if(e<0||e>=a.length||r<0||r>=a.length)return;let[o]=a.splice(e,1);a.splice(r,0,o),n.trees=a,t.value[i]=n;try{await fetch(`/api/cms/channels.json`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)})}catch(e){console.error(`Failed to reorder channel trees:`,e)}}},Q=async()=>{a.value=null,S.value=``,await T(`none`,!0)};return{currentChannelTrees:U,hasParentNode:K,isLoading:F,hasMore:I,treeNodesMap:B,getNodesForTree:ie,fetchNodeTreeForId:ae,saveTreeOrderForId:oe,reorderChannelTrees:Z,fetchTrees:j,fetchNodeTree:q,fetchVaultNodes:J,linkTreeToChannel:Y,unlinkTreeFromChannel:X,handleAddNewTree:async()=>{if(!await P())return!1;let e={id:`draft-${Date.now()}`,isNew:!0,key:``,label:``,treeType:``,channels:n.value&&n.value!==`all`?[Number(n.value)||n.value]:[]};return a.value=e,H(),b.value={},await T(`tree`,!0),!0},cancelNewTree:Q,saveTreeSettings:async()=>{if(!a.value)return!1;b.value={};let e=V(),t=!a.value.id||String(a.value.id).startsWith(`draft-`),r=a.value.treeType||Object.keys(e)[0]||`navigation`,i=e[r]||{};if(!await ne(a.value,{fields:p(i,d.value)},`tree`))return!1;try{let e=a.value.id,i={...JSON.parse(JSON.stringify(a.value)),id:t?null:typeof e==`number`?e:Number(e)||null,treeType:r};delete i.isNew;let o=await fetch(`/api/cms/trees.json`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i)});if(o.ok){let e=(await o.json()).id;return a.value.id=e,a.value.treeType=r,delete a.value.isNew,await N(),H(),t&&n.value&&n.value!==`all`?await Y(e):(s.value=String(e),await q()),await T(`tree`,!0),!0}{let e=await o.json().catch(()=>({}));return o.status===409&&e.field&&(b.value={[e.field]:e.error||`This key is already in use.`}),!1}}catch(e){return console.error(`[CMS] Error saving tree settings:`,e),!1}},deleteTree:async e=>{let n=e||a.value?.id;if(n){if(String(n).startsWith(`draft-`)){await Q();return}try{let e=await fetch(`/api/cms/trees.json?id=${n}`,{method:`DELETE`});if(e.ok){a.value=null,t.value.forEach(e=>{Array.isArray(e.trees)&&(e.trees=e.trees.filter(e=>{let t=typeof e==`object`?e.treeId||e.id:e;return String(t)!==String(n)}))}),await N();let e=U.value;if(e.length>0){let t=String(e[0].id);s.value=t,await q()}else s.value=``,c.value=[],await T(`none`,!0)}else{let t=await e.json().catch(()=>({}));alert(`Failed to delete tree. ${t.error||`Check server console.`}`)}}catch{alert(`Network error: Could not reach server to delete the tree.`)}}},saveTreeOrder:se,attachVaultNodeToTree:async(e,t=null)=>{if(!s.value)return alert(`Please select a Navigation Tree before attaching content.`);try{let i={action:`attach`,contentId:e,treeId:s.value,language:r.value,parentId:t?t.id:null};n.value&&n.value!==`all`&&(i.channelId=n.value),(await fetch(`/api/cms/tree.json`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i)})).ok&&(await q(),await J({reset:!0,ensureItemId:String(e)}))}catch(e){console.error(`[CMS] Failed to attach vault node to tree:`,e)}},detachTreeNode:async e=>{try{(await fetch(`/api/cms/tree.json`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`detach`,contentId:e,treeId:s.value})})).ok&&await q()}catch(e){console.error(`[CMS] Failed to detach tree node:`,e)}},findParentNodeInTree:W,updateNodeInTree:G,handleTreeChange:async e=>{if(e?.added?.element?._isNew){if(!await T(`node`))return;let t=e.added.element;delete t._isNew,_.value={},v.value={},y.value=null;let r=A(t.isHidden),i={...t,parentId:null,isHidden:r,status:`draft`,blocks:[]};n.value&&n.value!==`all`&&(i.channels=[n.value]);let a=await fetch(`/api/cms/nodes.json`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i)});if(a.ok){let e=await a.json();t.id=e.id,t.treeNodeId=e.id}g.value={...t,isHidden:r,status:`draft`,isNew:!1,disabledRegions:{}},C.value=`content`,w.value=!0,x.value=JSON.stringify({node:g.value,blocks:_.value})}await se()},openTreeSettings:async e=>{if(!await P())return!1;let t=i.value.find(t=>String(t.id)===String(e)||t.key===e),r=t?.treeType||t?.type||Object.keys(h.value||{})[0]||`navigation`;return a.value=t?{...t,treeType:r,channels:Array.isArray(t.channels)?[...t.channels]:[]}:{id:null,key:String(e),label:String(e),treeType:r,channels:n.value&&n.value!==`all`?[Number(n.value)||n.value]:[]},s.value=String(t?t.id:e),H(),b.value={},await T(`tree`,!0),!0},checkUnsavedChanges:P,updateTreeSnapshot:H}}function H(e){if(Array.isArray(e))for(let t=e.length-1;t>=0;t--)e[t].isNew||String(e[t].id).startsWith(`draft-`)?e.splice(t,1):e[t].children&&e[t].children.length>0&&H(e[t].children)}function U(){let e=m(),t=V(),{confirmNavigation:n}=R(),r=()=>null,i=async()=>{if(!await n())return;H(e.nodeTree.value),e.selectedBlock.value=null,e.setViewMode(`node`),e.validationErrors.value={};let t=e.selectedChannelId.value&&e.selectedChannelId.value!==`all`?Number(e.selectedChannelId.value)||e.selectedChannelId.value:``,i={id:`draft-${Date.now()}`,title:``,slug:``,nodeType:``,layoutId:`inherit`,channelId:t,channels:t?[t]:[],language:r(),status:`draft`,children:[],isNew:!0,_draftParentId:null,_isTreeDraft:!0,disabledRegions:{}};e.nodeTree.value.push(i),e.activeNode.value=i,e.blocks.value={},e.regionMeta.value={},e.activeTab.value=`settings`,e.shouldFocusTitle.value=!0,$(e)},a=async t=>{if(!t)return;let n=t.dataJson||t,r=t.id;if(r&&!String(r).startsWith(`draft-`))try{let e=await l.getNode(r);if(e.ok){let t=await e.json();t&&t.node&&(n=t.node)}}catch{console.warn(`Failed to fetch full parent data for draft inheritance`)}if(n&&typeof n==`object`){let t=JSON.parse(JSON.stringify(n));t.subpageLayoutId&&t.subpageLayoutId!==`inherit`&&(e.activeNode.value.resolvedLayoutId=t.subpageLayoutId);let r=new Set;e.nodeSchemas.value&&Object.values(e.nodeSchemas.value).forEach(e=>{let t={...e.fields||{}};Object.values(e.tabs||{}).forEach(e=>{Object.assign(t,e.fields||{})}),Object.entries(t).forEach(([e,t])=>{t.inheritsFromParent&&r.add(e)})}),Object.entries(t).forEach(([t,n])=>{r.has(t)&&n!=null&&(e.activeNode.value[t]===void 0||e.activeNode.value[t]===``)&&(e.activeNode.value[t]=n)})}try{let{resolveInheritedRegion:r}=le(),i=String(e.selectedChannelId.value||``),a=n.subpageLayoutId;(!a||a===`inherit`)&&(a=n.resolvedLayoutId||n.layoutId);let o=a?e.nodeLayoutSchemas.value[a]:null,s=[];if(o?.regions)for(let[e,t]of Object.entries(o.regions)){let n=t.inherit||t.inherited;(n===`parent`||n===!0||String(n).toLowerCase()===`true`)&&s.push(e)}for(let n of s){let a=await r(t,n,i,``);a&&a.blocks&&a.blocks.length>0&&(e.blocks.value[n]=JSON.parse(JSON.stringify(a.blocks)),e.regionMeta.value[n]={isInherited:!0,inheritedFromId:String(a.inheritedFromId),inheritedFromTitle:a.inheritedFromTitle})}}catch(e){console.warn(`[Draft Hierarchy] Failed to resolve inherited region:`,e)}};return{handleAddRootNode:i,handleAddChild:async t=>{if(String(t.id).startsWith(`draft-`)){typeof window<`u`&&window.dispatchEvent(new CustomEvent(`cms-toast`,{detail:{type:`warning`,message:`Please save this parent page before adding sub-pages to it.`}}));return}if(!await n())return;H(e.nodeTree.value),e.selectedBlock.value=null,e.setViewMode(`node`),e.validationErrors.value={};let i=e.selectedChannelId.value&&e.selectedChannelId.value!==`all`?Number(e.selectedChannelId.value)||e.selectedChannelId.value:``,o=t.id,s={id:`draft-${Date.now()}`,title:``,slug:``,nodeType:``,layoutId:`inherit`,channelId:i,channels:i?[i]:[],language:r(),status:`draft`,children:[],isNew:!0,_draftParentId:o,_isTreeDraft:!0,disabledRegions:{}};t.children||=[],t.children.push(s),e.activeNode.value=s,e.blocks.value={},e.regionMeta.value={},e.activeTab.value=`settings`,e.shouldFocusTitle.value=!0,await a(t),$(e)},handleAddSibling:async i=>{if(String(i.id).startsWith(`draft-`)){typeof window<`u`&&window.dispatchEvent(new CustomEvent(`cms-toast`,{detail:{type:`warning`,message:`Please save this new page before adding sibling pages next to it.`}}));return}if(!await n())return;H(e.nodeTree.value),e.selectedBlock.value=null,e.setViewMode(`node`),e.validationErrors.value={};let o=i.id||``,s=t.findParentNodeInTree(e.nodeTree.value,o),c=s?s.children:e.nodeTree.value,l=c?c.findIndex(e=>e===i||String(e.id)===String(o)):-1,u=e.selectedChannelId.value&&e.selectedChannelId.value!==`all`?Number(e.selectedChannelId.value)||e.selectedChannelId.value:``,d={id:`draft-${Date.now()}`,title:``,slug:``,nodeType:``,layoutId:`inherit`,channelId:u,channels:u?[u]:[],language:r(),status:`draft`,children:[],isNew:!0,_draftParentId:s?s.id:null,_isTreeDraft:!0,disabledRegions:{}};c&&l!==-1?c.splice(l+1,0,d):c&&c.push(d),e.activeNode.value=d,e.blocks.value={},e.regionMeta.value={},e.activeTab.value=`settings`,e.shouldFocusTitle.value=!1,s&&await a(s),$(e)}}}a();var W=null,G=null,K=null;function ie(e){if(!e||typeof e!=`object`)return{};try{return JSON.parse(JSON.stringify(e))}catch{return{}}}function ae(e,t,n,i,a,o){let c=m(),u=V(),d=g(),{confirmNavigation:f,isGlobalDirty:_}=R(),v=(e,t)=>{typeof window<`u`&&(window.dispatchEvent(new CustomEvent(`cms-node-updated`,{detail:{nodeId:e,action:t}})),t.startsWith(`asset-`)&&window.dispatchEvent(new CustomEvent(`cms-assets-updated`)))};r(()=>c.activeNode.value?.nodeType,(e,t)=>{if(c.activeNode.value?.isNew&&e&&e!==t&&!Object.values(c.blocks.value||{}).some(e=>e.length>0)){let t=c.nodeSchemas.value[e];t&&J(c.activeNode.value,t),$(c)}});let y=async e=>{if(!await f())return!1;let t=i.value,n=Object.keys(t),r=e;if(r===void 0){let e=c.currentVaultType.value;if(typeof e==`string`&&e!==`all`&&n.includes(e))r=e;else if(Array.isArray(e)){let t=e.filter(e=>n.includes(e));t.length===1&&(r=t[0])}}let a=r?t[r]||c.nodeSchemas.value[r]:null,s=c.selectedChannelId.value&&c.selectedChannelId.value!==`all`?Number(c.selectedChannelId.value)||c.selectedChannelId.value:``,l={id:`draft-${Date.now()}`,isNew:!0,title:``,slug:``,nodeType:r||``,layoutId:`inherit`,channelId:s,language:c.selectedLanguage.value||null,status:`draft`,channels:s?[s]:[],disabledRegions:{},_isTreeDraft:!1};a&&J(l,a),c.activeNode.value=l,c.blocks.value={},c.regionMeta.value={},c.selectedBlock.value=null,$(c),c.validationErrors.value={};let u=o.value.find(e=>e.key!==`content`&&e.key!==`connections`)?.key||`settings`;return c.activeTab.value=u,c.setViewMode(`node`),c.shouldFocusTitle.value=!0,!0},b=async e=>await y(e),x=async()=>{c.activeNode.value.isNew=!1;let e=t=>{for(let n=t.length-1;n>=0;n--)t[n].isNew||String(t[n].id).startsWith(`draft-`)?t.splice(n,1):t[n].children&&e(t[n].children)};e(c.nodeTree.value),c.selectedBlock.value=null,c.resetActiveNode(),c.nodeTree.value.length>0?await t(c.nodeTree.value[0]):c.setViewMode(`none`,!0)},S=async()=>{if(c.isDocumentUnverified.value||c.isDocumentLoading.value)return;if(c.isOffline.value){d.persistOfflineDraft(c.activeNode.value.id,{node:c.activeNode.value,blocks:c.blocks.value,regionMeta:c.regionMeta.value}),$(c);return}let e=c.nodeSchemas.value[c.activeNode.value.nodeType];if(!s(e).some(({key:e})=>{let t=c.activeNode.value[e];return t!=null&&String(t).trim()!==``}))return;let t=p(e).title?String(c.activeNode.value.title):h(e,c.activeNode.value),n=c.activeNode.value.slug?String(c.activeNode.value.slug).trim():``;n||=(t.trim()||`draft-page`).toLowerCase().replace(/[^a-z0-9\s-]/g,``).replace(/[\s-]+/g,`-`).replace(/^-+|-+$/g,``)||`draft-page-${Date.now()}`;let r=!!c.activeNode.value._isTreeDraft,i=c.activeNode.value.id||c.activeContentId.value,a=typeof i==`number`?i:Number(i)||null,o=c.activeNode.value.isNew||r||String(i||``).startsWith(`draft-`);if(!o&&!_.value&&!c.isPendingOfflineSave.value)return;let f={...c.activeNode.value};f.slug=n,f.title=t;let m=c.activeNode.value.status===`published`||c.activeNode.value.publishedAt?`published`:`draft`;f.status=m,delete f.id,delete f.isNew,delete f._draftParentId,delete f._isTreeDraft,delete f.children,delete f.treeNodeId;let g=A(c.activeNode.value.isHidden);f.isHidden=g;let y=c.selectedChannelId.value&&c.selectedChannelId.value!==`all`?Number(c.selectedChannelId.value)||c.selectedChannelId.value:null,b=Y(c.activeNode.value.channels).map(e=>typeof e==`string`&&!isNaN(Number(e))?Number(e):e);c.activeNode.value.channels===void 0&&y&&(b=[y]),f.channels=b,f.channelId=b.length>0?b[0]:``;let x=[];Object.entries(c.blocks.value||{}).forEach(([e,t])=>{c.regionMeta.value[e]?.isInherited||Array.isArray(t)&&t.forEach((t,n)=>{x.push({instanceId:String(t.instanceId||t.id||`block-${Date.now()}`),componentId:String(t.componentId||t.elementType||`text`),elementType:String(t.componentId||t.elementType||`text`),region:String(e||`content`),sortOrder:n,data:ie(t.data)})})});try{let e=null,i;if(i=o&&r?await l.createInTree({action:`create`,title:f.title,slug:n,nodeType:c.activeNode.value.nodeType,treeId:c.selectedTreeId.value,parentId:c.activeNode.value._draftParentId||null,channels:b,channelId:b.length>0?b[0]:null,isHidden:g,nodeData:{...f,status:m,blocks:x}}):o?await l.saveNode({id:null,...f,status:m,blocks:x}):await l.saveNode({id:a,...f,status:m,blocks:x}),i.ok){let s=await i.json();e=s.id||s.nodeId||a;let l=c.activeNode.value.id;c.activeNode.value.id=String(e),c.activeNode.value.slug=n,c.activeNode.value.title=t,c.activeNode.value.treeNodeId=String(e);let f=s.hasUnpublishedChanges===!0;if(c.activeNode.value.isNew=!1,c.activeNode.value.status=m,c.activeNode.value.hasUnpublishedChanges=f,c.activeNode.value.channels=b,delete c.activeNode.value._isTreeDraft,delete c.activeNode.value._draftParentId,c.nodeTree.value&&e){let i=r=>{for(let a=0;a<r.length;a++){if(r[a]===c.activeNode.value||String(r[a].id)===String(l)||String(r[a].id).startsWith(`draft-`))return r[a].id=String(e),r[a].treeNodeId=String(e),r[a].title=t,r[a].slug=n,r[a].isNew=!1,delete r[a]._isTreeDraft,delete r[a]._draftParentId,!0;if(r[a].children&&i(r[a].children))return!0}return!1};i(c.nodeTree.value),o&&r&&u.saveTreeOrder()}c.updateNodeInState(e,{title:t,slug:n,status:m,hasUnpublishedChanges:f,isHidden:g},String(e)),$(c),d.clearPersistedOfflineDraft(e),d.invalidateAfterSave(e),d.saveToCache(e,{node:c.activeNode.value,blocks:c.blocks.value,regionMeta:c.regionMeta.value}),c.invalidateStats(),v(e,o?`create`:`update`)}else{let e=await i.json().catch(()=>({}));if(i.status===409&&(e.field===`slug`||e.error?.toLowerCase().includes(`slug`)||e.error?.toLowerCase().includes(`exists`))){let e=Math.random().toString(36).substring(2,6),t=`${n}-${e}`;return c.activeNode.value.slug=t,typeof window<`u`&&window.dispatchEvent(new CustomEvent(`cms-toast`,{detail:{type:`warning`,message:`The URL slug "${n}" was already in use. It has been auto-appended to "${t}".`}})),c.validationErrors.value.slug&&delete c.validationErrors.value.slug,await S()}i.status===409&&e.field&&(c.validationErrors.value={...c.validationErrors.value,[e.field]:e.error||`This value is already in use.`})}}catch(e){console.error(`Network error auto-saving node draft:`,e),d.persistOfflineDraft(a||c.activeNode.value.id,{node:c.activeNode.value,blocks:c.blocks.value,regionMeta:c.regionMeta.value}),$(c)}},C=async()=>{c.isSaving.value=!0,c.isAutoSavePending.value=!1,W&&=(clearTimeout(W),null);try{G||=S(),await G}finally{G=null,K||(c.isSaving.value=!1)}};return r([()=>c.activeNode.value,()=>c.blocks.value],()=>{if(!c.activeNode.value?.id||c.isDocumentLoading.value||c.activeNode.value.isNew&&!c.activeNode.value.nodeType)return;let e=h(c.nodeSchemas.value[c.activeNode.value.nodeType],c.activeNode.value);if(c.activeNode.value.isNew&&e.startsWith(`Untitled`)){c.isAutoSavePending.value=!1;return}c.isAutoSavePending.value=!0,W&&clearTimeout(W),W=setTimeout(()=>{C()},1e3)},{deep:!0}),{handleAddNewNode:y,createVaultNode:b,cancelNewNode:x,saveNewNode:async()=>await C(),saveNode:C,publishNode:async()=>c.isDocumentUnverified.value?!1:K||(K=(async()=>{c.isSaving.value=!0;try{if(!await e())return!1;W||c.isAutoSavePending.value||_.value?await C():G&&await G;let t=c.activeNode.value.id||c.activeContentId.value,n=typeof t==`number`?t:Number(t)||null;if(!n)return!1;let r=await l.publishNode(n);if(r.ok){let e=await r.json();return c.activeNode.value.status=`published`,c.activeNode.value.publishedAt=e.publishedAt,c.activeNode.value.hasUnpublishedChanges=!1,c.updateNodeInState(n,{status:`published`,publishedAt:e.publishedAt,hasUnpublishedChanges:!1},String(n)),$(c),d.invalidateAfterSave(n),d.saveToCache(n,{node:c.activeNode.value,blocks:c.blocks.value,regionMeta:c.regionMeta.value}),c.invalidateStats(),await u.fetchNodeTree(),await u.fetchVaultNodes({reset:!0,ensureItemId:String(n)}),v(n,`publish`),!0}}finally{K=null,c.isSaving.value=!1}return!1})(),K),deleteNode:async e=>{let t=e||c.activeNode.value?.id||c.activeContentId.value;if(!t||String(t).startsWith(`draft-`))return x(),!0;try{if((await l.deleteNode(t)).ok)return d.invalidateAfterSave(t),c.invalidateStats(),c.nodeTree.value&&c.nodeTree.value.length>0&&await u.fetchNodeTree(),await u.fetchVaultNodes({reset:!0}),String(c.activeNode.value?.id)===String(t)&&x(),v(t,`delete`),!0}catch(e){console.error(`[CMS] Failed to delete node:`,e)}return!1},restoreNode:async e=>{if(!e)return!1;try{if((await l.restoreNode(e)).ok)return c.invalidateStats(),await u.fetchVaultNodes({reset:!0}),v(e,`restore`),!0}catch(e){console.error(`[CMS] Failed to restore node:`,e)}return!1},purgeNode:async e=>{if(!e)return!1;try{if((await l.purgeNode(e)).ok)return c.invalidateStats(),await u.fetchVaultNodes({reset:!0}),v(e,`purge`),!0}catch(e){console.error(`[CMS] Failed to purge node:`,e)}return!1},toggleNodeVisibility:async e=>{if(!e||!e.id||String(e.id).startsWith(`draft-`))return!1;let t=!A(e.isHidden);try{let n=await l.toggleVisibility(e.id,t);if(n.ok){let r=await n.json().catch(()=>({}));return e.isHidden=t,c.updateNodeInState(e.id,{isHidden:t},e.id),String(c.activeNode.value?.id)===String(e.id)?($(c),d.saveToCache(e.id,{node:JSON.parse(JSON.stringify(c.activeNode.value)),blocks:JSON.parse(JSON.stringify(c.blocks.value)),regionMeta:JSON.parse(JSON.stringify(c.regionMeta.value))})):d.invalidateAfterSave(e.id),r.cacheInvalidated===!1&&typeof window<`u`&&window.dispatchEvent(new CustomEvent(`cms-toast`,{detail:{type:`warning`,message:`Visibility changed, but one or more site caches could not be confirmed purged. Check the Worker logs.`}})),v(e.id,`update`),!0}}catch(e){console.error(`[CMS] Failed to toggle node visibility:`,e)}return!1},restoreSnapshot:async e=>{let n=c.activeNode.value?.id;if(!n||String(n).startsWith(`draft-`))return!1;c.isSaving.value=!0;try{if((await l.restoreSnapshot(n,e)).ok)return c.activeSnapshotVersion.value=null,c.draftBackup.value=null,d.clearCache(n),await t({id:n,nodeType:c.activeNode.value.nodeType,treeNodeId:c.activeNode.value.treeNodeId}),c.activeNode.value.status=`draft`,c.activeNode.value.hasUnpublishedChanges=!0,c.updateNodeInState(n,{...c.activeNode.value,status:`draft`,hasUnpublishedChanges:!0,title:c.activeNode.value.title,isHidden:A(c.activeNode.value.isHidden)},c.activeNode.value.treeNodeId),$(c),c.invalidateStats(),await u.fetchNodeTree(),v(n,`restore-snapshot`),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`cms-toast`,{detail:{type:`success`,message:`Version ${e} restored successfully.`}})),!0}catch(e){console.error(`[CMS] Failed to restore snapshot:`,e)}finally{c.isSaving.value=!1}return!1}}}a();var q=0;function oe(e){return e&&{...e,isHidden:A(e.isHidden)}}function se(e,t=!1){if(!e)return``;let n=new Date,r=String(e).toLowerCase().trim(),i=e=>{let n=e=>e.toString().padStart(2,`0`),r=`${e.getFullYear()}-${n(e.getMonth()+1)}-${n(e.getDate())}`;return t?r:`${r}T${n(e.getHours())}:${n(e.getMinutes())}`};if(r===`now`||r===`today`)return i(n);let a=r.match(/^([+-])\s*(\d+)\s*(minute|hour|day|week|month|year)s?$/);if(a){let e=a[1]===`+`?1:-1,t=parseInt(a[2],10)*e,r=a[3],o=new Date(n);return r===`minute`?o.setMinutes(o.getMinutes()+t):r===`hour`?o.setHours(o.getHours()+t):r===`day`?o.setDate(o.getDate()+t):r===`week`?o.setDate(o.getDate()+t*7):r===`month`?o.setMonth(o.getMonth()+t):r===`year`&&o.setFullYear(o.getFullYear()+t),i(o)}return String(e)}function J(e,t){let n=e=>e==null||e===``,r=t=>{t&&Object.entries(t).forEach(([t,r])=>{r?.default!==void 0&&n(e[t])&&(e[t]=r.type===`datetime`||r.type===`date`?se(r.default,r.type===`date`):r.default)})};r(t?.fields),t?.tabs&&Object.values(t.tabs).forEach(e=>r(e?.fields))}function Y(e){if(!e)return[];if(Array.isArray(e))return e.map(e=>typeof e==`object`&&e?e.id||e.channelId:e).filter(Boolean);if(typeof e==`string`)try{let t=JSON.parse(e);return Array.isArray(t)?Y(t):[e]}catch{return[e]}return[e]}function X(e,t){if(!e)return!1;if(!t||e===t.defaultLayout)return!0;let n=null,r=e=>{e&&(Array.isArray(e)?e.forEach(e=>{e.layoutId&&(n=e.layoutId)}):e.layoutId&&(n=e.layoutId))};if(r(t.fields),!n&&t.tabs&&Object.values(t.tabs).forEach(e=>r(e.fields)),!n)return!1;let i=n.allowedLayouts;return i?typeof i==`string`?i===e:!Array.isArray(i)||i.length===0||i.includes(e):!0}function Z(e,t,n,r){let i=e?.layoutId,a=e?.nodeType?t.nodeSchemas.value[e.nodeType]:null;if((!i||i===`inherit`)&&!e?.resolvedLayoutId&&n&&r){let t=r.findParentNodeInTree(n.nodeTree.value,e?._draftParentId||e?.parentId||``);for(;t;){if(t.subpageLayoutId&&t.subpageLayoutId!==`inherit`){X(t.subpageLayoutId,a)&&(i=t.subpageLayoutId);break}if(t.layoutId&&t.layoutId!==`inherit`){X(t.layoutId,a)&&(i=t.layoutId);break}if(t.resolvedLayoutId){X(t.resolvedLayoutId,a)&&(i=t.resolvedLayoutId);break}t=r.findParentNodeInTree(n.nodeTree.value,t.parentId||``)}}!i||i===`inherit`?(i=e?.resolvedLayoutId,i&&!X(i,a)&&(i=null),i||=a?.defaultLayout):X(i,a)||(i=a?.defaultLayout);let o=i?t.nodeLayoutSchemas.value[i]:null;return o?.regions&&Object.keys(o.regions).length>0?o.regions:{content:{label:`Content`}}}var Q=e=>e===`parent`||e===!0||String(e).toLowerCase()===`true`;function ce(e,t){let n=e.activeNode.value,r=n?.nodeType?e.nodeSchemas.value[n.nodeType]:null,i=n?.layoutId;(!i||i===`inherit`)&&(i=n?.resolvedLayoutId||r?.defaultLayout);let a=i?e.nodeLayoutSchemas.value[i]:null,o=a?.regions&&Object.keys(a.regions).length>0?a.regions:{content:{label:`Content`}},s=new Set(Object.keys(o)),c=t=>{Array.isArray(t)&&t.forEach(t=>{let n=t.componentId||t.elementType,r=e.blockLayoutSchemas.value[n];r?.regions&&Object.keys(r.regions).forEach(n=>{let r=`${t.instanceId||t.id}_${n}`;s.add(r),e.blocks.value[r]&&c(e.blocks.value[r])})})};return t&&Array.isArray(t)&&t.forEach(t=>{let n=t.componentId||t.elementType,r=e.blockLayoutSchemas.value[n];r?.regions&&Object.keys(r.regions).forEach(e=>{let n=`${t.instanceId||t.id}_${e}`;s.add(n)})}),Object.keys(o).forEach(t=>c(e.blocks.value[t]||[])),s}function $(e){if(!e.activeNode.value)return;ce(e).forEach(t=>{e.blocks.value[t]||(e.blocks.value[t]=[])}),e.activeNode.value.disabledRegions||(e.activeNode.value.disabledRegions={}),e.activeNode.value.channels||(e.activeNode.value.channels=[]);let t=d(JSON.parse(JSON.stringify(e.activeNode.value)),e.nodeSchemas.value),n=JSON.parse(JSON.stringify(e.blocks.value));e.nodeSnapshot.value=JSON.stringify({node:t,blocks:n})}function le(){let e=m(),t=V(),i=g(),a=U(),{confirmNavigation:s}=R(),c=()=>$(e),u=o(()=>e.nodeSchemas.value[e.activeNode.value?.nodeType]||null),d=o(()=>Z(e.activeNode.value,{nodeSchemas:e.nodeSchemas,nodeLayoutSchemas:e.nodeLayoutSchemas},e,t)),f=o(()=>{let t=[],n=e.activeNode.value,r=e.nodeSchemas.value[n?.nodeType];if(r){if(r.hasCanvas===!0&&t.push({key:`content`,label:`Content`}),r.tabs&&typeof r.tabs==`object`)for(let[e,n]of Object.entries(r.tabs)){let r=typeof n==`string`?n:n?.label||e;t.push({key:e,label:r})}t.filter(e=>e.key!==`content`).length===0&&t.push({key:`settings`,label:r.label||`Settings`}),t.push({key:`connections`,label:`Connections`})}return t}),p=o(()=>{let t={};for(let[n,r]of Object.entries(e.nodeSchemas.value||{})){let e=r.inTree;(e===!0||String(e)===`true`||e===1)&&(t[n]=r)}return t}),h=o(()=>Object.keys(p.value).map(e=>({value:e,label:p.value[e].label||e}))),_=o(()=>{let t={};for(let[n,r]of Object.entries(e.nodeSchemas.value||{}))r.inVault!==!1&&String(r.inVault)!==`false`&&(t[n]=r);return t}),v=o(()=>Object.keys(_.value).map(e=>({value:e,label:_.value[e].label||e}))),y=o(()=>e.workspaceContext.value===`tree`),b=t=>{if(!e.activeNode.value?.nodeType)return t===`settings`||t===`content`||t===`node`?{nodeType:{label:`Select Node Type`,type:`select`,options:y.value?h.value:v.value,rules:{required:!0}}}:{};let n=u.value;if(!n)return{};let r=t;t===`node`&&!n.tabs?.node&&n.tabs?.settings&&(r=`settings`);let i=n.tabs?.[r]?.fields||n.fields||{},a=JSON.parse(JSON.stringify(i));return a.nodeType&&(a.nodeType.type=`select`,a.nodeType.options=y.value?h.value:v.value),a},x=o(()=>Object.keys(e.validationErrors.value).length===0),S=e=>{},C=async()=>{e.validationErrors.value={};let t=!0,n=``,r=u.value;if(!r)return!1;let i={...r.fields||{}};r.tabs&&Object.values(r.tabs).forEach(e=>{Object.assign(i,e.fields||{})});let a=e.activeNode.value?.id,o=typeof a==`number`||a&&!String(a).startsWith(`draft-`)?String(a):``,s=e.activeNode.value?.treeId||e.selectedTreeId.value||e.activeTreeSettings.value?.id,c=e.activeNode.value?._draftParentId??e.activeNode.value?.parentId??null,l={...e.activeNode.value,treeId:s,parentId:c};for(let[a,s]of Object.entries(i)){let i=e.activeNode.value[a],c=await E(a,i,s,{entityType:`node`,excludeId:e.activeNode.value?.treeNodeId||o,formData:l});if(c&&(e.validationErrors.value[a]=c,t=!1,!n)){for(let[e,t]of Object.entries(r.tabs||{}))if(t.fields?.[a]){n=e;break}}}if(!t){let t=n||f.value.find(e=>e.key!==`content`&&e.key!==`connections`)?.key||`content`;return e.activeTab.value!==t&&(e.activeTab.value=t),e.shouldFocusTitle.value=!0,!1}return!0},w=(e,t)=>{let n={},r=t.filter(e=>typeof e==`object`&&!!e),i=new Set(r.map(e=>String(e.blockId||e.instanceId||e.id))),a=!0;for(;a;){a=!1;for(let[t,r]of Object.entries(e))if(!(n[t]||!r||!Array.isArray(r))){for(let e of i)if(e&&(t.startsWith(`${e}_`)||t.startsWith(`${e}-`))){n[t]=r,r.forEach(e=>{e&&i.add(String(e.blockId||e.instanceId||e.id))}),a=!0;break}}}return n},T=async(n,r,a,o)=>{if(!n||n.isNew||String(n.id||``).startsWith(`draft-`))return{blocks:[]};let s=n;for(;s;){let n=i.getCachedDocument(s.id);if(!n)try{let e=await l.getNode(s.id);if(e.ok){let t=await e.json(),r=t.node||{},a={};Array.isArray(t.blocks)&&t.blocks.forEach(e=>{let t=e.region||`content`;a[t]||(a[t]=[]);let n=typeof e.data==`string`?JSON.parse(e.data):e.data||{};a[t].push({instanceId:String(e.instanceId||e.id),blockId:String(e.blockId||e.instanceId||e.id),componentId:String(e.componentId||e.elementType||`text`),region:t,data:{...n}})}),n={node:r,blocks:a,regionMeta:{}},i.saveToCache(s.id,n)}}catch(e){console.error(`⚠️ Failed to fetch parent node for inheritance:`,e);break}if(n){if(n.node?.disabledRegions?.[r])return{blocks:[]};if(n.blocks?.[r]?.length>0)return{blocks:n.blocks[r],subRegions:w(n.blocks,n.blocks[r]),inheritedFromId:String(n.node.id),inheritedFromTitle:n.node.title||n.node.slug}}let a=t.findParentNodeInTree(e.nodeTree.value,s.id||s.treeNodeId||``);if(!a||String(a.id)===String(s.id))break;s=a}return{blocks:[]}},D=async(r,a)=>{if(String(e.activeNode.value?.id)===String(r.id)&&!e.activeNode.value?.isNew)return a?.workspaceContext&&(e.workspaceContext.value=a.workspaceContext),a?.selectedTreeId&&(e.selectedTreeId.value=a.selectedTreeId),a?.beforeLoad?.(),!0;if(e.activeNode.value?.isNew&&String(e.activeNode.value.id||``).startsWith(`draft-`)||!await s())return!1;a?.workspaceContext&&(e.workspaceContext.value=a.workspaceContext),a?.selectedTreeId&&(e.selectedTreeId.value=a.selectedTreeId),a?.beforeLoad?.(),e.selectedBlock.value=null,e.nodeSnapshot.value=``,e.selectedTreeId.value&&(e.nodeTree.value=t.getNodesForTree(e.selectedTreeId.value)),e.isDocumentLoading.value=!0,i.clearConflict(),i.markUnverified(!1);let o=++q,c=String(r.id),u=i.getCachedDocument(c),d=i.getPersistedOfflineDraft(r.id);H(e.nodeTree.value),e.validationErrors.value={};let p=e.nodeSchemas.value[r.nodeType]||Object.values(e.nodeSchemas.value)[0],m=t.findParentNodeInTree(e.nodeTree.value,r.id||r.treeNodeId||``),h=Y(r.channels||r.channelId).map(e=>typeof e==`string`&&!isNaN(Number(e))?Number(e):e),g=String(h[0]||e.selectedChannelId.value||``),_=r.language||e.activeTreeSettings.value?.defaultLanguage||e.selectedLanguage.value||``;if(d)return e.setViewMode(`node`),e.activeNode.value=JSON.parse(JSON.stringify(d.data.node)),e.blocks.value=JSON.parse(JSON.stringify(d.data.blocks)),e.regionMeta.value=JSON.parse(JSON.stringify(d.data.regionMeta)),$(e),e.isDocumentLoading.value=!1,e.isPendingOfflineSave.value=!0,!0;if(u)return e.setViewMode(`node`),e.activeNode.value=JSON.parse(JSON.stringify(u.node)),e.blocks.value=JSON.parse(JSON.stringify(u.blocks)),e.regionMeta.value=JSON.parse(JSON.stringify(u.regionMeta)),$(e),e.isDocumentLoading.value=!1,!0;try{let a=await l.getNode(r.id);if(o!==q)return!1;if(a.ok){let s=await a.json(),c=s.node||r,l=c.disabledRegions||{},u=c.channels||c.channelId||h,d={...oe(c),id:c.id||r.id,treeNodeId:c.treeNodeId||r.treeNodeId,isNew:!1,disabledRegions:l,channels:Y(u).map(e=>typeof e==`string`&&!isNaN(Number(e))?Number(e):e),trees:c.trees||[]};J(d,p);let v=Z(d,{nodeSchemas:e.nodeSchemas,nodeLayoutSchemas:e.nodeLayoutSchemas},e,t),y={};for(let e of Object.keys(v))Q(v[e].inherit)&&m&&(y[e]=T(m,e,g,_));let b={};for(let[e,t]of Object.entries(y))b[e]=await t;if(o!==q)return!1;let x={},S={},C=new Set(Object.keys(v));if(Array.isArray(s.blocks)&&s.blocks.forEach(e=>C.add(e.region||`content`)),C.forEach(e=>{x[e]=[]}),Array.isArray(s.blocks)){let t=new Set;[...s.blocks].sort((e,t)=>{let n=String(e.region||``).includes(`_`),r=String(t.region||``).includes(`_`);return n&&!r?1:!n&&r?-1:0}).forEach(n=>{let r=n.instanceId||n.id;if(t.has(r))return;t.add(r);let i=n.region||`content`;x[i]||(x[i]=[]);let a=e.blockSchemas.value[n.componentId||n.elementType],o=typeof n.data==`string`?JSON.parse(n.data):n.data||{};a?.fields&&Object.entries(a.fields).forEach(([e,t])=>{(o[e]===void 0||o[e]===null)&&(o[e]=t.default===void 0?``:t.default)}),x[i].push({instanceId:String(r),blockId:String(n.blockId||n.instanceId||n.id),componentId:String(n.componentId||n.elementType||`text`),region:i,data:{...o}})})}for(let e of Object.keys(v)){let t=x[e]&&x[e].length>0,n=l[e];if(Q(v[e].inherit)&&!t&&!n&&m){let t=b[e];if(t&&t.blocks&&t.blocks.length>0){if(x[e]=t.blocks,S[e]={isInherited:!0,inheritedFromId:t.inheritedFromId,inheritedFromTitle:t.inheritedFromTitle},t.subRegions)for(let[n,r]of Object.entries(t.subRegions))n!==e&&Array.isArray(r)&&r.length>0&&(x[n]=r,S[n]={isInherited:!0,inheritedFromId:t.inheritedFromId,inheritedFromTitle:t.inheritedFromTitle})}else S[e]={isInherited:!1}}else S[e]={isInherited:!1}}let w={};Object.keys(x).forEach(e=>{S[e]?.isInherited?w[e]=[]:w[e]=x[e]});let E={node:d,blocks:w,regionMeta:S},{isNodeDirty:D}=R();if(i.evaluateServerResponse(r.id,E,D.value).action===`update_silently`){e.setViewMode(`node`),e.activeNode.value=d,e.blocks.value=x,e.regionMeta.value=S;let a=f.value;if(!a.some(e=>e.key===`content`)&&e.activeTab.value===`content`&&(e.activeTab.value=a.find(e=>e.key!==`content`&&e.key!==`connections`)?.key||`settings`),d.trees&&d.trees.length>0){let n=String(d.trees[0].treeId);e.selectedTreeId.value!==n&&(e.selectedTreeId.value=n,e.nodeTree.value=t.getNodesForTree(n))}await n(),$(e),i.saveToCache(r.id,{node:d,blocks:x,regionMeta:S})}i.markUnverified(!1)}else i.markUnverified(!0)}catch(e){console.error(`⚠️ Network error fetching node content:`,e),i.markUnverified(!0)}finally{e.isDocumentLoading.value=!1}return!0},ee=async t=>{let n=e=>{for(let r of e){if(String(r.id)===String(t))return r;if(r.children){let e=n(r.children);if(e)return e}}return null},r=n(e.nodeTree.value);r?await D(r):await D({id:String(t),title:`Loading...`,slug:``,nodeType:`node`,channelId:``,language:``})};r([()=>e.activeNode.value?.id,()=>e.activeNode.value?.nodeType,()=>e.activeNode.value?.layoutId,()=>e.activeNode.value?.resolvedLayoutId],([n])=>{if(!e.isDocumentLoading.value&&n&&e.activeNode.value?.nodeType){let r=Z(e.activeNode.value,{nodeSchemas:e.nodeSchemas,nodeLayoutSchemas:e.nodeLayoutSchemas},e,t),i=t.findParentNodeInTree(e.nodeTree.value,e.activeNode.value._draftParentId||e.activeNode.value.parentId||``),a=String(e.selectedChannelId.value||``),o=String(e.activeNode.value?.language||e.activeTreeSettings.value?.defaultLanguage||e.selectedLanguage.value||``),s={...e.regionMeta.value},c=!1;for(let t of Object.keys(r)){let l=r[t].inherit,u=e.activeNode.value.disabledRegions?.[t],d=e.blocks.value[t]&&e.blocks.value[t].length>0,f=!s[t],p=!f&&!s[t].isInherited&&Q(l)&&!u&&!d;(f||p)&&(Q(l)&&i&&!u&&!d?(s[t]={isInherited:!0},c=!0,T(i,t,a,o).then(r=>{e.activeNode.value?.id===n&&(r&&r.blocks&&r.blocks.length>0?(e.blocks.value[t]=r.blocks,e.regionMeta.value[t]={isInherited:!0,inheritedFromId:r.inheritedFromId,inheritedFromTitle:r.inheritedFromTitle}):e.regionMeta.value[t]={isInherited:!1})})):f&&(s[t]={isInherited:!1},c=!0))}c&&(e.regionMeta.value=s)}},{immediate:!0,deep:!1});let O=ae(C,D,p,_,y,f);return{applySchemaDefaults:J,currentNodeSchema:u,currentLayoutRegions:d,availableNodeTabs:f,treeEligibleNodeSchemas:p,treeEligibleNodeTypes:h,vaultEligibleNodeSchemas:_,vaultEligibleNodeTypes:v,isTreeContext:y,isFormValid:x,getFieldsForTab:b,setFormValidator:S,validateActiveNode:C,loadNodeContent:D,navigateToNodeById:ee,resolveInheritedRegion:T,handleAddRootNode:a.handleAddRootNode,handleAddChild:a.handleAddChild,handleAddSibling:a.handleAddSibling,handleAddNewNode:O.handleAddNewNode,createVaultNode:O.createVaultNode,cancelNewNode:O.cancelNewNode,saveNewNode:O.saveNewNode,saveNode:O.saveNode,publishNode:O.publishNode,deleteNode:O.deleteNode,restoreNode:O.restoreNode,purgeNode:O.purgeNode,toggleNodeVisibility:O.toggleNodeVisibility,restoreSnapshot:O.restoreSnapshot,updateNodeSnapshot:c}}export{V as a,ne as c,D as d,y as f,le as i,te as l,X as n,R as o,_ as p,$ as r,I as s,J as t,ee as u};
@@ -0,0 +1 @@
1
+ import{n as e}from"./_plugin-vue_export-helper-CQxWhVtr.js";var t=e(`bell`,[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]]),n=e(`key`,[[`path`,{d:`m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4`,key:`g0fldk`}],[`path`,{d:`m21 2-9.6 9.6`,key:`1j0ho8`}],[`circle`,{cx:`7.5`,cy:`15.5`,r:`5.5`,key:`yqb3hr`}]]),r=e(`log-out`,[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]),i=e(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),a=e(`shield`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}]]),o=e(`user`,[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`,key:`975kel`}],[`circle`,{cx:`12`,cy:`7`,r:`4`,key:`17ys0d`}]]);export{n as a,r as i,a as n,t as o,i as r,o as t};