@monkeyplus/flow 6.0.48 → 6.0.49

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 (64) hide show
  1. package/cms/dist/assets/AuthForm-Dc9LzSL8.js +1 -0
  2. package/cms/dist/assets/Button-DeE4C5qv.js +3 -0
  3. package/cms/dist/assets/Checkbox-6GWVsal3.js +1 -0
  4. package/cms/dist/assets/Cms-m0iyo84T.js +1 -0
  5. package/cms/dist/assets/Cms-zT5DLnHq.js +1 -0
  6. package/cms/dist/assets/Cms.vue_vue_type_script_setup_true_lang-BPYuKYBe.js +1 -0
  7. package/cms/dist/assets/Collection-BO8LTH-q.js +1 -0
  8. package/cms/dist/assets/Collection-VJAZO0Rz.js +1 -0
  9. package/cms/dist/assets/Collection.vue_vue_type_script_setup_true_lang-CH8PUbU4.js +4 -0
  10. package/cms/dist/assets/DropdownMenu-R4khQe6l.js +1 -0
  11. package/cms/dist/assets/Entry-B0mNJ8em.js +1 -0
  12. package/cms/dist/assets/Entry-BVEcmHD0.js +1 -0
  13. package/cms/dist/assets/Entry-utFCLZ-0.js +1 -0
  14. package/cms/dist/assets/Entry-zdD-YBgr.js +1 -0
  15. package/cms/dist/assets/Entry.vue_vue_type_script_setup_true_lang-DHCJViy-.js +1 -0
  16. package/cms/dist/assets/Entry.vue_vue_type_script_setup_true_lang-iyex1bkH.js +1 -0
  17. package/cms/dist/assets/Fields-B-HNL-y0.js +210 -0
  18. package/cms/dist/assets/FormField-C2PqQKhW.js +1 -0
  19. package/cms/dist/assets/Input-BxnrWZ6G.js +1 -0
  20. package/cms/dist/assets/Main-DZFIaCGo.js +1 -0
  21. package/cms/dist/assets/Media-CbyzN3h1.js +64 -0
  22. package/cms/dist/assets/Modal-BBUZcn1n.js +1 -0
  23. package/cms/dist/assets/Page-DRPSlFKP.js +1 -0
  24. package/cms/dist/assets/PageSideForm-BAxhdPZ-.js +1 -0
  25. package/cms/dist/assets/PageSideForm-DjrBwGyS.js +1 -0
  26. package/cms/dist/assets/Pages-B7gwznnM.js +1 -0
  27. package/cms/dist/assets/Pages-CrzdQcv2.js +1 -0
  28. package/cms/dist/assets/Preview-BKee89iX.js +1 -0
  29. package/cms/dist/assets/RovingFocusGroup-DCgUDa7P.js +1 -0
  30. package/cms/dist/assets/RovingFocusItem-DAszosPo.js +1 -0
  31. package/cms/dist/assets/SelectMenu-CXEWx3Bv.js +1 -0
  32. package/cms/dist/assets/Settings-CfO0WRUz.js +1 -0
  33. package/cms/dist/assets/Sidebar-CgAdYIHE.js +1 -0
  34. package/cms/dist/assets/TooltipProvider-zcbl2F13.js +1 -0
  35. package/cms/dist/assets/app-CjFg7ttC.js +1 -0
  36. package/cms/dist/assets/app-D3yRpajb.js +1 -0
  37. package/cms/dist/assets/app.vue_vue_type_script_setup_true_lang-CtvHTqQW.js +13 -0
  38. package/cms/dist/assets/auth-B_N_3VL1.js +3 -0
  39. package/cms/dist/assets/cms-iTMgUJHR.js +1 -0
  40. package/cms/dist/assets/dist-CRhqvTV6.js +1 -0
  41. package/cms/dist/assets/index.spa-BIyNTWZm.js +18 -0
  42. package/cms/dist/assets/index.vue_vue_type_script_setup_true_lang-BSYIcYZQ.js +1 -0
  43. package/cms/dist/assets/not-found-CrH6SUE3.js +1 -0
  44. package/cms/dist/assets/not-found-DBnVH99v.js +1 -0
  45. package/cms/dist/assets/pages-Cg7Q0Yyn.js +1 -0
  46. package/cms/dist/assets/pages-CpDp_TZq.js +1 -0
  47. package/cms/dist/assets/preview-Cy1wpCyU.js +1 -0
  48. package/cms/dist/assets/useCmsBreadcrumb-DJeAZIVz.js +1 -0
  49. package/cms/dist/assets/useOverlay-DE40aGNR.js +1 -0
  50. package/cms/dist/assets/usePortal-CYr2cwo1.js +1 -0
  51. package/cms/dist/assets/useToast-BKulfPxW.js +1 -0
  52. package/cms/dist/assets/utils-CoRDsqN-.js +1 -0
  53. package/cms/dist/index.spa.html +1 -1
  54. package/modules/cms/module.mjs +6 -0
  55. package/modules/cms/server/api/admin.mjs +1 -1
  56. package/modules/cms/server/api/collections.d.ts +2 -0
  57. package/modules/cms/server/api/collections.mjs +50 -0
  58. package/modules/cms/server/lib/types.d.ts +6 -1
  59. package/modules/cms/server/lib/widgets.d.ts +5 -0
  60. package/modules/cms/server/lib/widgets.mjs +11 -4
  61. package/modules/content/query.mjs +23 -1
  62. package/package.json +1 -1
  63. package/src/public/query-content.d.ts +1 -0
  64. package/src/public/query-content.mjs +8 -1
@@ -0,0 +1 @@
1
+ import{At as e,Fn as t,Gt as n,L as r,Mt as i,Nn as a,Nt as o,Pt as s,Qt as c,Rn as l,cn as u,j as d,mn as f,t as p,tn as m,wn as h}from"./index.spa-BIyNTWZm.js";import{C as g,_,b as v,g as y,v as b,w as x,x as S}from"./Button-DeE4C5qv.js";import{t as C}from"./dist-CRhqvTV6.js";var w={slots:{base:`font-medium inline-flex items-center`,label:`truncate`,leadingIcon:`shrink-0`,leadingAvatar:`shrink-0`,leadingAvatarSize:``,trailingIcon:`shrink-0`},variants:{fieldGroup:{horizontal:`not-only:first:rounded-e-none not-only:last:rounded-s-none not-last:not-first:rounded-none focus-visible:z-[1]`,vertical:`not-only:first:rounded-b-none not-only:last:rounded-t-none not-last:not-first:rounded-none focus-visible:z-[1]`},color:{primary:``,secondary:``,success:``,info:``,warning:``,error:``,neutral:``},variant:{solid:``,outline:``,soft:``,subtle:``},size:{xs:{base:`text-[8px]/3 px-1 py-0.5 gap-1 rounded-sm`,leadingIcon:`size-3`,leadingAvatarSize:`3xs`,trailingIcon:`size-3`},sm:{base:`text-[10px]/3 px-1.5 py-1 gap-1 rounded-sm`,leadingIcon:`size-3`,leadingAvatarSize:`3xs`,trailingIcon:`size-3`},md:{base:`text-xs px-2 py-1 gap-1 rounded-md`,leadingIcon:`size-4`,leadingAvatarSize:`3xs`,trailingIcon:`size-4`},lg:{base:`text-sm px-2 py-1 gap-1.5 rounded-md`,leadingIcon:`size-5`,leadingAvatarSize:`2xs`,trailingIcon:`size-5`},xl:{base:`text-base px-2.5 py-1 gap-1.5 rounded-md`,leadingIcon:`size-6`,leadingAvatarSize:`2xs`,trailingIcon:`size-6`}},square:{true:``}},compoundVariants:[{color:`primary`,variant:`solid`,class:`bg-primary text-inverted`},{color:`secondary`,variant:`solid`,class:`bg-secondary text-inverted`},{color:`success`,variant:`solid`,class:`bg-success text-inverted`},{color:`info`,variant:`solid`,class:`bg-info text-inverted`},{color:`warning`,variant:`solid`,class:`bg-warning text-inverted`},{color:`error`,variant:`solid`,class:`bg-error text-inverted`},{color:`primary`,variant:`outline`,class:`text-primary ring ring-inset ring-primary/50`},{color:`secondary`,variant:`outline`,class:`text-secondary ring ring-inset ring-secondary/50`},{color:`success`,variant:`outline`,class:`text-success ring ring-inset ring-success/50`},{color:`info`,variant:`outline`,class:`text-info ring ring-inset ring-info/50`},{color:`warning`,variant:`outline`,class:`text-warning ring ring-inset ring-warning/50`},{color:`error`,variant:`outline`,class:`text-error ring ring-inset ring-error/50`},{color:`primary`,variant:`soft`,class:`bg-primary/10 text-primary`},{color:`secondary`,variant:`soft`,class:`bg-secondary/10 text-secondary`},{color:`success`,variant:`soft`,class:`bg-success/10 text-success`},{color:`info`,variant:`soft`,class:`bg-info/10 text-info`},{color:`warning`,variant:`soft`,class:`bg-warning/10 text-warning`},{color:`error`,variant:`soft`,class:`bg-error/10 text-error`},{color:`primary`,variant:`subtle`,class:`bg-primary/10 text-primary ring ring-inset ring-primary/25`},{color:`secondary`,variant:`subtle`,class:`bg-secondary/10 text-secondary ring ring-inset ring-secondary/25`},{color:`success`,variant:`subtle`,class:`bg-success/10 text-success ring ring-inset ring-success/25`},{color:`info`,variant:`subtle`,class:`bg-info/10 text-info ring ring-inset ring-info/25`},{color:`warning`,variant:`subtle`,class:`bg-warning/10 text-warning ring ring-inset ring-warning/25`},{color:`error`,variant:`subtle`,class:`bg-error/10 text-error ring ring-inset ring-error/25`},{color:`neutral`,variant:`solid`,class:`text-inverted bg-inverted`},{color:`neutral`,variant:`outline`,class:`ring ring-inset ring-accented text-default bg-default`},{color:`neutral`,variant:`soft`,class:`text-default bg-elevated`},{color:`neutral`,variant:`subtle`,class:`ring ring-inset ring-accented text-default bg-elevated`},{size:`xs`,square:!0,class:`p-0.5`},{size:`sm`,square:!0,class:`p-1`},{size:`md`,square:!0,class:`p-1`},{size:`lg`,square:!0,class:`p-1`},{size:`xl`,square:!0,class:`p-1`}],defaultVariants:{color:`primary`,variant:`solid`,size:`md`}},T={__name:`Badge`,props:{as:{type:null,required:!1,default:`span`},label:{type:[String,Number],required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},size:{type:null,required:!1},square:{type:Boolean,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},leading:{type:Boolean,required:!1},leadingIcon:{type:null,required:!1},trailing:{type:Boolean,required:!1},trailingIcon:{type:null,required:!1}},setup(r){let p=r,h=u(),C=g(`badge`,p),T=d(),{orientation:E,size:D}=y(p),{isLeading:O,isTrailing:k,leadingIconName:A,trailingIconName:j}=_(C),M=e(()=>S({extend:S(w),...T.ui?.badge||{}})({color:C.color,variant:C.variant,size:D.value??C.size,square:C.square||!h.default&&!C.label,fieldGroup:E.value}));return(e,r)=>(c(),i(a(x),{as:a(C).as,"data-slot":`base`,class:t(M.value.base({class:[a(C).ui?.base,a(C).class]}))},{default:f(()=>[m(e.$slots,`leading`,{ui:M.value},()=>[a(O)&&a(A)?(c(),i(v,{key:0,name:a(A),"data-slot":`leadingIcon`,class:t(M.value.leadingIcon({class:a(C).ui?.leadingIcon}))},null,8,[`name`,`class`])):a(C).avatar?(c(),i(b,n({key:1,size:a(C).ui?.leadingAvatarSize||M.value.leadingAvatarSize()},a(C).avatar,{"data-slot":`leadingAvatar`,class:M.value.leadingAvatar({class:a(C).ui?.leadingAvatar})}),null,16,[`size`,`class`])):o(``,!0)]),m(e.$slots,`default`,{ui:M.value},()=>[a(C).label!==void 0&&a(C).label!==null?(c(),s(`span`,{key:0,"data-slot":`label`,class:t(M.value.label({class:a(C).ui?.label}))},l(a(C).label),3)):o(``,!0)]),m(e.$slots,`trailing`,{ui:M.value},()=>[a(k)&&a(j)?(c(),i(v,{key:0,name:a(j),"data-slot":`trailingIcon`,class:t(M.value.trailingIcon({class:a(C).ui?.trailingIcon}))},null,8,[`name`,`class`])):o(``,!0)])]),_:3},8,[`as`,`class`]))}},E=p(`preview`,()=>{let e=h(`desktop`),t=h(``),{executeImmediate:n,state:i}=r(async(e,n)=>C(`/cms-preview/${t.value}`,{method:`POST`,body:{[e]:n}}),``,{});return{html:i,fetchPreview:n,active:e,url:t}});export{T as n,E as t};
@@ -0,0 +1 @@
1
+ import{At as e,Dt as t,Fn as n,Gt as r,It as i,Lt as a,Mt as o,Nn as s,Nt as c,Pt as l,Qt as u,Rn as d,a as f,cn as p,d as m,en as h,j as g,jt as _,l as v,mn as y,o as b,tn as x}from"./index.spa-BIyNTWZm.js";import{C as S,b as C,i as w,n as T,r as E,v as D,w as O,x as k}from"./Button-DeE4C5qv.js";import{t as A}from"./cms-iTMgUJHR.js";var j={slots:{root:`relative min-w-0`,list:`flex items-center gap-1.5`,item:`flex min-w-0`,link:`group relative flex items-center gap-1.5 text-sm min-w-0`,linkLeadingIcon:`shrink-0 size-5`,linkLeadingAvatar:`shrink-0`,linkLeadingAvatarSize:`2xs`,linkLabel:`truncate`,separator:`flex`,separatorIcon:`shrink-0 size-5 text-muted`},variants:{active:{true:{link:`font-semibold`},false:{link:`text-muted font-medium`}},disabled:{true:{link:`cursor-not-allowed opacity-75`}},to:{true:``},color:{primary:{link:`focus-visible:outline-primary`},secondary:{link:`focus-visible:outline-secondary`},success:{link:`focus-visible:outline-success`},info:{link:`focus-visible:outline-info`},warning:{link:`focus-visible:outline-warning`},error:{link:`focus-visible:outline-error`},neutral:{link:`focus-visible:outline-inverted`}}},compoundVariants:[{disabled:!1,active:!1,to:!0,class:{link:[`hover:text-default`,`transition-colors`]}},{color:`primary`,active:!0,class:{link:`text-primary`}},{color:`secondary`,active:!0,class:{link:`text-secondary`}},{color:`success`,active:!0,class:{link:`text-success`}},{color:`info`,active:!0,class:{link:`text-info`}},{color:`warning`,active:!0,class:{link:`text-warning`}},{color:`error`,active:!0,class:{link:`text-error`}},{color:`neutral`,active:!0,class:{link:`text-highlighted`}}],defaultVariants:{color:`primary`}},M={__name:`Breadcrumb`,props:{as:{type:null,required:!1,default:`nav`},items:{type:Array,required:!1},separatorIcon:{type:null,required:!1},color:{type:null,required:!1},labelKey:{type:null,required:!1,default:`label`},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(f){let b=f,A=p(),M=S(`breadcrumb`,b),{dir:N}=v(),P=g(),F=e(()=>M.separatorIcon||(N.value===`rtl`?P.ui.icons.chevronLeft:P.ui.icons.chevronRight)),I=e(()=>k({extend:k(j),...P.ui?.breadcrumb||{}})({color:M.color}));return(e,f)=>(u(),o(s(O),{as:s(M).as,"aria-label":`breadcrumb`,"data-slot":`root`,class:n(I.value.root({class:[s(M).ui?.root,s(M).class]}))},{default:y(()=>[_(`ol`,{"data-slot":`list`,class:n(I.value.list({class:s(M).ui?.list}))},[(u(!0),l(t,null,h(s(M).items,(f,p)=>(u(),l(t,{key:p},[_(`li`,{"data-slot":`item`,class:n(I.value.item({class:[s(M).ui?.item,f.ui?.item]}))},[a(T,r({ref_for:!0},s(w)(f),{custom:``}),{default:y(({active:t,...h})=>[a(E,r({ref_for:!0},h,{as:`span`,"aria-current":(f.active??t)&&p===s(M).items.length-1?`page`:void 0,"data-slot":`link`,class:I.value.link({class:[s(M).ui?.link,f.ui?.link,f.class],active:f.active??p===s(M).items.length-1,disabled:!!f.disabled,to:!!f.to})}),{default:y(()=>[x(e.$slots,f.slot||`item`,{item:f,active:f.active??p===s(M).items.length-1,index:p,ui:I.value},()=>[x(e.$slots,f.slot?`${f.slot}-leading`:`item-leading`,{item:f,active:f.active??p===s(M).items.length-1,index:p,ui:I.value},()=>[f.icon?(u(),o(C,{key:0,name:f.icon,"data-slot":`linkLeadingIcon`,class:n(I.value.linkLeadingIcon({class:[s(M).ui?.linkLeadingIcon,f.ui?.linkLeadingIcon],active:f.active??p===s(M).items.length-1}))},null,8,[`name`,`class`])):f.avatar?(u(),o(D,r({key:1,size:s(M).ui?.linkLeadingAvatarSize||I.value.linkLeadingAvatarSize()},{ref_for:!0},f.avatar,{"data-slot":`linkLeadingAvatar`,class:I.value.linkLeadingAvatar({class:[s(M).ui?.linkLeadingAvatar,f.ui?.linkLeadingAvatar],active:f.active??p===s(M).items.length-1})}),null,16,[`size`,`class`])):c(``,!0)]),s(m)(f,s(M).labelKey)||A[f.slot?`${f.slot}-label`:`item-label`]?(u(),l(`span`,{key:0,"data-slot":`linkLabel`,class:n(I.value.linkLabel({class:[s(M).ui?.linkLabel,f.ui?.linkLabel]}))},[x(e.$slots,f.slot?`${f.slot}-label`:`item-label`,{item:f,active:f.active??p===s(M).items.length-1,index:p},()=>[i(d(s(m)(f,s(M).labelKey)),1)])],2)):c(``,!0),x(e.$slots,f.slot?`${f.slot}-trailing`:`item-trailing`,{item:f,active:f.active??p===s(M).items.length-1,index:p})])]),_:2},1040,[`aria-current`,`class`])]),_:2},1040)],2),p<s(M).items.length-1?(u(),l(`li`,{key:0,role:`presentation`,"aria-hidden":`true`,"data-slot":`separator`,class:n(I.value.separator({class:[s(M).ui?.separator,f.ui?.separator]}))},[x(e.$slots,`separator`,{ui:I.value},()=>[a(C,{name:F.value,"data-slot":`separatorIcon`,class:n(I.value.separatorIcon({class:[s(M).ui?.separatorIcon,f.ui?.separatorIcon]}))},null,8,[`name`,`class`])])],2)):c(``,!0)],64))),128))],2)]),_:3},8,[`as`,`class`]))}};function N(t){let n=f(),r=b(),i=A(),a=e(()=>i.filePage);return e(()=>{let e=[],o=typeof n.params.file==`string`?[n.params.file]:n.params.file||[];if(!o.length)return e;let s,c=``,l=``;if(t===`static`?(s=i.staticPages.find(e=>e.name===n.params.folder),c=`page`,l=`page`):t===`dynamic`?(s=i.dinamycPages.find(e=>e.name===n.params.folder),c=`main-collection`,l=`pages`):t===`posts`&&(s=i.postsPages.find(e=>e.name===n.params.folder),c=`main-collection`,l=`pages`),s){if(t===`static`){e.push({label:s.label||s.name,to:r.resolve({name:c,params:{folder:n.params.folder,file:[]}}).href});let t=s.files?.find(e=>e.name===o[0]);t&&e.push({label:t.label||t.name,to:r.resolve({name:l,params:{folder:n.params.folder,file:[o[0]]}}).href})}else if(e.push({label:s.label||s.name,to:r.resolve({name:c,params:{type:s.group,name:s.name}}).href}),a.value){let t=a.value.content||{};e.push({label:t?.label||t.name||t?.nombre,to:r.resolve({name:l,params:{folder:n.params.folder,file:[a.value.fileName]}}).href})}}if(a.value?.fields&&o.length>1){let t=a.value.fields,i=[o[0]];for(let a=1;a<o.length;a++){let s=o[a];if(i.push(s),!Number.isNaN(Number(s)))e.push({label:`Item ${Number(s)+1}`,to:r.resolve({name:l,params:{folder:n.params.folder,file:[...i]}}).href});else{let a=t?.find(e=>e.name===s);a?(e.push({label:a.label||a.name,to:r.resolve({name:l,params:{folder:n.params.folder,file:[...i]}}).href}),t=a.fields||[]):e.push({label:s,to:r.resolve({name:l,params:{folder:n.params.folder,file:[...i]}}).href})}}}return e})}export{M as n,N as t};
@@ -0,0 +1 @@
1
+ import{Sn as e,Tn as t,at as n,bn as r}from"./index.spa-BIyNTWZm.js";function i(){let n=t([]),i=(t,i)=>{let{props:s,defaultOpen:c,destroyOnClose:u}=i||{},d=e({id:Symbol(import.meta.dev?`useOverlay`:``),isOpen:!!c,component:r(t),isMounted:!!c,destroyOnClose:!!u,originalProps:s||{},props:{...s}});return n.push(d),{...d,open:e=>a(d.id,e),close:e=>o(d.id,e),patch:e=>l(d.id,e)}},a=(e,t)=>{let n=u(e);t?n.props={...n.originalProps,...t}:n.props={...n.originalProps},n.isOpen=!0,n.isMounted=!0;let r=new Promise(e=>n.resolvePromise=e);return Object.assign(r,{id:e,isMounted:n.isMounted,isOpen:n.isOpen,result:r})},o=(e,t)=>{let n=u(e);n.isOpen=!1,n.resolvePromise&&=(n.resolvePromise(t),void 0)},s=()=>{n.forEach(e=>o(e.id))},c=e=>{let t=u(e);if(t.isMounted=!1,t.destroyOnClose){let t=n.findIndex(t=>t.id===e);n.splice(t,1)}},l=(e,t)=>{let n=u(e);n.props={...n.props,...t}},u=e=>{let t=n.find(t=>t.id===e);if(!t)throw Error(`Overlay not found`);return t};return{overlays:n,open:a,close:o,closeAll:s,create:i,patch:l,unmount:c,isOpen:e=>u(e).isOpen}}var a=n(i);export{a as t};
@@ -0,0 +1 @@
1
+ import{At as e,D as t,F as n,H as r,Ht as i,I as a,Kt as o,Ln as s,Mt as c,Nn as l,Nt as u,Ot as d,Qt as f,Rt as p,Sn as m,Xt as h,Y as g,at as _,dn as v,jn as y,mn as b,ot as x,pt as ee,rt as te,st as S,tn as C,un as w,wn as T}from"./index.spa-BIyNTWZm.js";import{M as E,N as D,k as O,w as k}from"./Button-DeE4C5qv.js";function A(e,t,n){let r=n.originalEvent.target,i=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&r.addEventListener(e,t,{once:!0}),r.dispatchEvent(i)}function j(e){return e==null}var ne=_(()=>{let n=T(new Map),i=T(),a=e(()=>{for(let e of n.value.values())if(e)return!0;return!1}),s=E({scrollBody:T(!0)}),c=null,l=()=>{document.body.style.paddingRight=``,document.body.style.marginRight=``,document.body.style.pointerEvents=``,document.documentElement.style.removeProperty(`--scrollbar-width`),document.body.style.overflow=i.value??``,S&&c?.(),i.value=void 0};return w(a,(e,n)=>{if(!x)return;if(!e){n&&l();return}i.value===void 0&&(i.value=document.body.style.overflow);let u=window.innerWidth-document.documentElement.clientWidth,d={padding:u,margin:0},f=s.scrollBody?.value?typeof s.scrollBody.value==`object`?t({padding:s.scrollBody.value.padding===!0?u:s.scrollBody.value.padding,margin:s.scrollBody.value.margin===!0?u:s.scrollBody.value.margin},d):d:{padding:0,margin:0};u>0&&(document.body.style.paddingRight=typeof f.padding==`number`?`${f.padding}px`:String(f.padding),document.body.style.marginRight=typeof f.margin==`number`?`${f.margin}px`:String(f.margin),document.documentElement.style.setProperty(`--scrollbar-width`,`${u}px`),document.body.style.overflow=`hidden`),S&&(c=r(document,`touchmove`,e=>re(e),{passive:!1})),o(()=>{a.value&&(document.body.style.pointerEvents=`none`,document.body.style.overflow=`hidden`)})},{immediate:!0,flush:`sync`}),n});function M(t){let n=Math.random().toString(36).substring(2,7),r=ne();r.value.set(n,t??!1);let i=e({get:()=>r.value.get(n)??!1,set:e=>r.value.set(n,e)});return ee(()=>{r.value.delete(n)}),i}function N(e){let t=window.getComputedStyle(e);if(t.overflowX===`scroll`||t.overflowY===`scroll`||t.overflowX===`auto`&&e.clientWidth<e.scrollWidth||t.overflowY===`auto`&&e.clientHeight<e.scrollHeight)return!0;{let t=e.parentNode;return!(t instanceof Element)||t.tagName===`BODY`?!1:N(t)}}function re(e){let t=e||window.event,n=t.target;return n instanceof Element&&N(n)?!1:t.touches.length>1?!0:(t.preventDefault&&t.cancelable&&t.preventDefault(),!1)}var P=function(e){return typeof document>`u`?null:(Array.isArray(e)?e[0]:e).ownerDocument.body},F=new WeakMap,I=new WeakMap,L={},R=0,z=function(e){return e&&(e.host||z(e.parentNode))},ie=function(e,t){return t.map(function(t){if(e.contains(t))return t;var n=z(t);return n&&e.contains(n)?n:(console.error(`aria-hidden`,t,`in not contained inside`,e,`. Doing nothing`),null)}).filter(function(e){return!!e})},ae=function(e,t,n,r){var i=ie(t,Array.isArray(e)?e:[e]);L[n]||(L[n]=new WeakMap);var a=L[n],o=[],s=new Set,c=new Set(i),l=function(e){!e||s.has(e)||(s.add(e),l(e.parentNode))};i.forEach(l);var u=function(e){!e||c.has(e)||Array.prototype.forEach.call(e.children,function(e){if(s.has(e))u(e);else try{var t=e.getAttribute(r),i=t!==null&&t!==`false`,c=(F.get(e)||0)+1,l=(a.get(e)||0)+1;F.set(e,c),a.set(e,l),o.push(e),c===1&&i&&I.set(e,!0),l===1&&e.setAttribute(n,`true`),i||e.setAttribute(r,`true`)}catch(t){console.error(`aria-hidden: cannot operate on `,e,t)}})};return u(t),s.clear(),R++,function(){o.forEach(function(e){var t=F.get(e)-1,i=a.get(e)-1;F.set(e,t),a.set(e,i),t||(I.has(e)||e.removeAttribute(r),I.delete(e)),i||e.removeAttribute(n)}),R--,R||(F=new WeakMap,F=new WeakMap,I=new WeakMap,L={})}},oe=function(e,t,n){n===void 0&&(n=`data-aria-hidden`);var r=Array.from(Array.isArray(e)?e:[e]),i=t||P(e);return i?(r.push.apply(r,Array.from(i.querySelectorAll(`[aria-live], script`))),ae(r,i,n,`aria-hidden`)):function(){return null}};function se(e){let t;w(()=>a(e),e=>{let n=!1;try{n=!!e?.closest(`[popover]:not(:popover-open)`)}catch{}e&&!n?t=oe(e):t&&t()}),h(()=>{t&&t()})}var ce=`dismissableLayer.pointerDownOutside`,le=`dismissableLayer.focusOutside`;function B(e,t){if(!(t instanceof Element))return!1;let n=t.closest(`[data-dismissable-layer]`),r=e.dataset.dismissableLayer===``?e:e.querySelector(`[data-dismissable-layer]`),i=Array.from(e.ownerDocument.querySelectorAll(`[data-dismissable-layer]`));return!!(n&&(r===n||i.indexOf(r)<i.indexOf(n)))}function V(e,t,n=!0){let r=t?.value?.ownerDocument??globalThis?.document,i=T(!1),a=T(()=>{});return v(o=>{if(!x||!y(n))return;let s=async n=>{let o=n.target;if(!(!t?.value||!o)){if(B(t.value,o)){i.value=!1;return}if(n.target&&!i.value){let t={originalEvent:n};function i(){A(ce,e,t)}n.pointerType===`touch`?(r.removeEventListener(`click`,a.value),a.value=i,r.addEventListener(`click`,a.value,{once:!0})):i()}else r.removeEventListener(`click`,a.value);i.value=!1}},c=window.setTimeout(()=>{r.addEventListener(`pointerdown`,s)},0);o(()=>{window.clearTimeout(c),r.removeEventListener(`pointerdown`,s),r.removeEventListener(`click`,a.value)})}),{onPointerDownCapture:()=>{y(n)&&(i.value=!0)}}}function H(e,t,n=!0){let r=t?.value?.ownerDocument??globalThis?.document,i=T(!1);return v(a=>{if(!x||!y(n))return;let s=async n=>{if(!t?.value)return;await o(),await o();let r=n.target;!t.value||!r||B(t.value,r)||n.target&&!i.value&&A(le,e,{originalEvent:n})};r.addEventListener(`focusin`,s),a(()=>r.removeEventListener(`focusin`,s))}),{onFocusCapture:()=>{y(n)&&(i.value=!0)},onBlurCapture:()=>{y(n)&&(i.value=!1)}}}var U=m({layersRoot:new Set,layersWithOutsidePointerEventsDisabled:new Set,originalBodyPointerEvents:void 0,branches:new Set}),ue=p({__name:`DismissableLayer`,props:{disableOutsidePointerEvents:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`escapeKeyDown`,`pointerDownOutside`,`focusOutside`,`interactOutside`,`dismiss`],setup(t,{emit:r}){let i=t,a=r,{forwardRef:u,currentElement:d}=O(),p=e(()=>d.value?.ownerDocument??globalThis.document),m=e(()=>U.layersRoot),h=e(()=>d.value?Array.from(m.value).indexOf(d.value):-1),g=e(()=>U.layersWithOutsidePointerEventsDisabled.size>0),_=e(()=>{let e=Array.from(m.value),[t]=[...U.layersWithOutsidePointerEventsDisabled].slice(-1),n=e.indexOf(t);return h.value>=n}),y=V(async e=>{let t=[...U.branches].some(t=>t?.contains(e.target));!_.value||t||(a(`pointerDownOutside`,e),a(`interactOutside`,e),await o(),e.defaultPrevented||a(`dismiss`))},d),x=H(e=>{[...U.branches].some(t=>t?.contains(e.target))||(a(`focusOutside`,e),a(`interactOutside`,e),e.defaultPrevented||a(`dismiss`))},d);return n(`Escape`,e=>{h.value===m.value.size-1&&(a(`escapeKeyDown`,e),e.defaultPrevented||a(`dismiss`))}),v(e=>{d.value&&(i.disableOutsidePointerEvents&&(U.layersWithOutsidePointerEventsDisabled.size===0&&(U.originalBodyPointerEvents=p.value.body.style.pointerEvents,p.value.body.style.pointerEvents=`none`),U.layersWithOutsidePointerEventsDisabled.add(d.value)),m.value.add(d.value),e(()=>{i.disableOutsidePointerEvents&&U.layersWithOutsidePointerEventsDisabled.size===1&&!j(U.originalBodyPointerEvents)&&(p.value.body.style.pointerEvents=U.originalBodyPointerEvents)}))}),v(e=>{e(()=>{d.value&&(m.value.delete(d.value),U.layersWithOutsidePointerEventsDisabled.delete(d.value))})}),(e,t)=>(f(),c(l(k),{ref:l(u),"as-child":e.asChild,as:e.as,"data-dismissable-layer":``,style:s({pointerEvents:g.value?_.value?`auto`:`none`:void 0}),onFocusCapture:l(x).onFocusCapture,onBlurCapture:l(x).onBlurCapture,onPointerdownCapture:l(y).onPointerDownCapture},{default:b(()=>[C(e.$slots,`default`)]),_:3},8,[`as-child`,`as`,`style`,`onFocusCapture`,`onBlurCapture`,`onPointerdownCapture`]))}}),de=te(()=>T([]));function fe(){let e=de();return{add(t){let n=e.value[0];t!==n&&n?.pause(),e.value=W(e.value,t),e.value.unshift(t)},remove(t){e.value=W(e.value,t),e.value[0]?.resume()}}}function W(e,t){let n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}var G=`focusScope.autoFocusOnMount`,K=`focusScope.autoFocusOnUnmount`,q={bubbles:!1,cancelable:!0};function J(e,{select:t=!1}={}){let n=D();for(let r of e)if(Q(r,{select:t}),D()!==n)return!0}function Y(e){let t=X(e);return[Z(t,e),Z(t.reverse(),e)]}function X(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>{let t=e.tagName===`INPUT`&&e.type===`hidden`;return e.disabled||e.hidden||t?NodeFilter.FILTER_SKIP:e.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function Z(e,t){for(let n of e)if(!pe(n,{upTo:t}))return n}function pe(e,{upTo:t}){if(getComputedStyle(e).visibility===`hidden`)return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display===`none`)return!0;e=e.parentElement}return!1}function me(e){return e instanceof HTMLInputElement&&`select`in e}function Q(e,{select:t=!1}={}){if(e&&e.focus){let n=D();e.focus({preventScroll:!0}),e!==n&&me(e)&&t&&e.select()}}var he=p({__name:`FocusScope`,props:{loop:{type:Boolean,required:!1,default:!1},trapped:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`mountAutoFocus`,`unmountAutoFocus`],setup(e,{emit:t}){let n=e,r=t,{currentRef:i,currentElement:a}=O(),s=T(null),u=fe(),d=m({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}});v(e=>{if(!x)return;let t=a.value;if(!n.trapped)return;function r(e){if(d.paused||!t)return;let n=e.target;t.contains(n)?s.value=n:Q(s.value,{select:!0})}function i(e){if(d.paused||!t)return;let n=e.relatedTarget;n!==null&&(t.contains(n)||Q(s.value,{select:!0}))}function o(e){let n=s.value;n!==null&&e.some(e=>e.removedNodes.length>0)&&(t.contains(n)||Q(t))}document.addEventListener(`focusin`,r),document.addEventListener(`focusout`,i);let c=new MutationObserver(o);t&&c.observe(t,{childList:!0,subtree:!0}),e(()=>{document.removeEventListener(`focusin`,r),document.removeEventListener(`focusout`,i),c.disconnect()})}),v(async e=>{let t=a.value;if(await o(),!t)return;u.add(d);let n=D();if(!t.contains(n)){let e=new CustomEvent(G,q);t.addEventListener(G,e=>r(`mountAutoFocus`,e)),t.dispatchEvent(e),e.defaultPrevented||(J(X(t),{select:!0}),D()===n&&Q(t))}e(()=>{t.removeEventListener(G,e=>r(`mountAutoFocus`,e));let e=new CustomEvent(K,q),i=e=>{r(`unmountAutoFocus`,e)};t.addEventListener(K,i),t.dispatchEvent(e),t.setAttribute(`data-focus-scope-unmounting`,``),setTimeout(()=>{e.defaultPrevented||Q(n??document.body,{select:!0}),t.removeEventListener(K,i),u.remove(d),t.removeAttribute(`data-focus-scope-unmounting`)},0)})});function p(e){if(!n.loop&&!n.trapped||d.paused)return;let t=e.key===`Tab`&&!e.altKey&&!e.ctrlKey&&!e.metaKey,r=D();if(t&&r){let t=e.currentTarget,[i,a]=Y(t);i&&a?!e.shiftKey&&r===a?(e.preventDefault(),n.loop&&Q(i,{select:!0})):e.shiftKey&&r===i&&(e.preventDefault(),n.loop&&Q(a,{select:!0})):r===t&&e.preventDefault()}}return(e,t)=>(f(),c(l(k),{ref_key:`currentRef`,ref:i,tabindex:`-1`,"as-child":e.asChild,as:e.as,onKeydown:p},{default:b(()=>[C(e.$slots,`default`)]),_:3},8,[`as-child`,`as`]))}}),ge=p({__name:`Teleport`,props:{to:{type:null,required:!1,default:`body`},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){let t=g();return(e,n)=>l(t)||e.forceMount?(f(),c(d,{key:0,to:e.to,disabled:e.disabled,defer:e.defer},[C(e.$slots,`default`)],8,[`to`,`disabled`,`defer`])):u(`v-if`,!0)}}),_e=p({__name:`VisuallyHidden`,props:{feature:{type:String,required:!1,default:`focusable`},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(e){return(e,t)=>(f(),c(l(k),{as:e.as,"as-child":e.asChild,"aria-hidden":e.feature===`focusable`?`true`:void 0,"data-hidden":e.feature===`fully-hidden`?``:void 0,tabindex:e.feature===`fully-hidden`?`-1`:void 0,style:{position:`absolute`,border:0,width:`1px`,height:`1px`,padding:0,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,clipPath:`inset(50%)`,whiteSpace:`nowrap`,wordWrap:`normal`,top:`-1px`,left:`-1px`}},{default:b(()=>[C(e.$slots,`default`)]),_:3},8,[`as`,`as-child`,`aria-hidden`,`data-hidden`,`tabindex`]))}}),$=Symbol(`nuxt-ui.portal-target`);function ve(t){let n=i($,void 0),r=e(()=>t.value===!0?n?.value:t.value),a=e(()=>typeof r.value==`boolean`?!r.value:!1),o=e(()=>typeof r.value==`boolean`?`body`:r.value);return e(()=>({to:o.value,disabled:a.value}))}export{he as a,ue as c,M as d,j as f,ge as i,U as l,ve as n,J as o,A as p,_e as r,X as s,$ as t,se as u};
@@ -0,0 +1 @@
1
+ import{Ht as e,Kt as t,s as n,wn as r}from"./index.spa-BIyNTWZm.js";var i=Symbol(`nuxt-ui.toast-max`);function a(){let a=n(`toasts`,()=>[]),o=e(i,void 0),s=r(!1),c=[],l=()=>`${Date.now()}-${Math.random().toString(36).slice(2,9)}`;async function u(){if(!(s.value||c.length===0)){for(s.value=!0;c.length>0;){let e=c.shift();await t(),a.value=[...a.value,e].slice(-(o?.value??5))}s.value=!1}}function d(e){let t={id:l(),open:!0,...e},n=a.value.findIndex(e=>e.id===t.id);return n===-1?(c.push(t),u(),t):(a.value[n]={...a.value[n],...t,_duplicate:(a.value[n]._duplicate||0)+1},t)}function f(e,n){let r=a.value.findIndex(t=>t.id===e);r!==-1&&(a.value[r]={...a.value[r],...n,duration:n.duration,open:!0,_updated:!0},t(()=>{let t=a.value.findIndex(t=>t.id===e);t!==-1&&a.value[t]._updated&&(a.value[t]={...a.value[t],_updated:void 0})}))}function p(e){let t=a.value.findIndex(t=>t.id===e);t!==-1&&a.value[t]._updated||(t!==-1&&(a.value[t]={...a.value[t],open:!1}),setTimeout(()=>{a.value=a.value.filter(t=>t.id!==e)},200))}function m(){a.value=[]}return{toasts:a,add:d,update:f,remove:p,clear:m}}export{a as n,i as t};
@@ -0,0 +1 @@
1
+ import{N as e}from"./Button-DeE4C5qv.js";var t=`menu.itemSelect`,n=[`Enter`,` `],r=[`ArrowDown`,`PageUp`,`Home`],i=[`ArrowUp`,`PageDown`,`End`],a=[...r,...i],o={ltr:[...n,`ArrowRight`],rtl:[...n,`ArrowLeft`]},s={ltr:[`ArrowLeft`],rtl:[`ArrowRight`]};function c(e){return e?`open`:`closed`}function l(e){return e===`indeterminate`}function u(e){return l(e)?`indeterminate`:e?`checked`:`unchecked`}function d(t){let n=e();for(let r of t)if(r===n||(r.focus(),e()!==n))return}function f(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e].x,s=t[e].y,c=t[a].x,l=t[a].y;s>r!=l>r&&n<(c-o)*(r-s)/(l-s)+o&&(i=!i)}return i}function p(e,t){return t?f({x:e.clientX,y:e.clientY},t):!1}function m(e){return e.pointerType===`mouse`}export{s as a,u as c,m as d,p as f,n as i,c as l,t as n,o,i as r,d as s,a as t,l as u};
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>CMS</title>
7
- <script type="module" crossorigin src="/cms/v3/assets/index.spa-6RkbZIv_.js"></script>
7
+ <script type="module" crossorigin src="/cms/v3/assets/index.spa-BIyNTWZm.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/cms/v3/assets/index-B-MXuuNZ.css">
9
9
  </head>
10
10
  <body>
@@ -41,6 +41,7 @@ export default defineFlowModule({
41
41
  //
42
42
  config: resolvePath(context.projectRoot, `modules/cms/server/api/config`),
43
43
  meta: resolvePath(context.projectRoot, `modules/cms/server/api/meta`),
44
+ collections: resolvePath(context.projectRoot, `modules/cms/server/api/collections`),
44
45
  localFs: resolvePath(context.projectRoot, `modules/cms/server/api/localFs`)
45
46
  };
46
47
  const locales = context.flowConfig.locale?.locales || ["es"];
@@ -91,7 +92,12 @@ export default defineFlowModule({
91
92
  route: "/cms/_/meta.json",
92
93
  handler: paths.meta
93
94
  });
95
+ context.nitro.handlers.push({
96
+ route: "/cms/_/collections.json",
97
+ handler: paths.collections
98
+ });
94
99
  context.prerenderRoutes?.add("/cms/_/meta.json");
100
+ context.prerenderRoutes?.add("/cms/_/collections.json");
95
101
  if (options.isLocal) {
96
102
  context.nitro.handlers.push({
97
103
  route: "/api/auth/**",
@@ -5,7 +5,7 @@ const adminHtml = `<!DOCTYPE html>
5
5
  <meta charset="UTF-8" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>CMS</title>
8
- <script type="module" crossorigin src="/cms/v3/assets/index.spa-6RkbZIv_.js"><\/script>
8
+ <script type="module" crossorigin src="/cms/v3/assets/index.spa-BIyNTWZm.js"><\/script>
9
9
  <link rel="stylesheet" crossorigin href="/cms/v3/assets/index-B-MXuuNZ.css">
10
10
  </head>
11
11
  <body>
@@ -0,0 +1,2 @@
1
+ declare const _default: any;
2
+ export default _default;
@@ -0,0 +1,50 @@
1
+ import { defineEventHandler } from "nitro/h3";
2
+ import { readContentEntries } from "../../../content/query.mjs";
3
+ import { getUrls } from "../../../../server/lib/pages.mjs";
4
+ export default defineEventHandler(async (event) => {
5
+ const [entries, pageUrls] = await Promise.all([
6
+ readContentEntries(event),
7
+ getUrls(true, true)
8
+ ]);
9
+ const collections = {};
10
+ for (const page of pageUrls) {
11
+ if (!collections[page.locale]) {
12
+ collections[page.locale] = {
13
+ sitemap: []
14
+ };
15
+ }
16
+ collections[page.locale].sitemap.push({
17
+ label: page.name,
18
+ value: page.name,
19
+ // To be used by mk-link
20
+ url: page.url,
21
+ name: page.name
22
+ });
23
+ }
24
+ for (const entry of entries) {
25
+ const segments = entry.path.split("/");
26
+ if (segments.length >= 4) {
27
+ const locale = segments[1];
28
+ const group = segments[2];
29
+ const dir = segments[3];
30
+ if (!collections[locale]) {
31
+ collections[locale] = {
32
+ sitemap: []
33
+ };
34
+ }
35
+ if (!collections[locale][group]) {
36
+ collections[locale][group] = {};
37
+ }
38
+ if (!collections[locale][group][dir]) {
39
+ collections[locale][group][dir] = [];
40
+ }
41
+ const item = {
42
+ label: entry.title || entry.name || entry.path,
43
+ value: entry.path,
44
+ name: entry.name
45
+ };
46
+ collections[locale][group][dir].push(item);
47
+ }
48
+ }
49
+ return collections;
50
+ });
@@ -57,11 +57,16 @@ export type WidgetDate = WidgetBase & {
57
57
  export type WidgetNumber = WidgetBase & {
58
58
  widget: 'number';
59
59
  };
60
+ export type WidgetRelation = WidgetBase & {
61
+ widget: 'relation';
62
+ collection: string;
63
+ multiple?: boolean;
64
+ };
60
65
  /**
61
66
  * CMS
62
67
  */
63
68
  type CmsConfig = any;
64
- export type CmsFields = WidgetString | WidgetSelect | WidgetText | WidgetBoolean | WidgetList | WidgetObject | WidgetColor | WidgetImage | WidgetDate | WidgetNumber | WidgetEditor | WidgetFile;
69
+ export type CmsFields = WidgetString | WidgetSelect | WidgetText | WidgetBoolean | WidgetList | WidgetObject | WidgetColor | WidgetImage | WidgetDate | WidgetNumber | WidgetEditor | WidgetFile | WidgetRelation;
65
70
  /**
66
71
  * COLLECTION
67
72
  *
@@ -60,6 +60,10 @@ export declare function imageObject(options?: WidgetInput<WidgetImage>): BuildWi
60
60
  * LinkOrButton
61
61
  */
62
62
  export declare function link(options?: WidgetInput<Partial<WidgetObject>>): BuildWidget<WidgetObject>;
63
+ /**
64
+ * Relation
65
+ */
66
+ export declare function relation(options: Omit<import('./types').WidgetRelation, 'widget' | 'name'>): BuildWidget<import("./types").WidgetRelation>;
63
67
  /**
64
68
  *****************************************
65
69
  */
@@ -78,5 +82,6 @@ export declare const widgets: {
78
82
  select: typeof select;
79
83
  imageObject: typeof imageObject;
80
84
  link: typeof link;
85
+ relation: typeof relation;
81
86
  };
82
87
  export type AllWidgets = typeof widgets;
@@ -142,7 +142,7 @@ export function link(options) {
142
142
  { widget: "select" },
143
143
  {
144
144
  required: false,
145
- items: ["Interna", "Externa"]
145
+ items: [{ label: "Interna", value: "internal" }, { label: "Externa", value: "external" }]
146
146
  }
147
147
  )("type", {
148
148
  ...ctx
@@ -155,7 +155,7 @@ export function link(options) {
155
155
  label: "Link",
156
156
  options: {
157
157
  show: {
158
- type: "Externa"
158
+ type: "external"
159
159
  }
160
160
  }
161
161
  }
@@ -173,7 +173,7 @@ export function link(options) {
173
173
  alias: "link",
174
174
  list: "pages",
175
175
  show: {
176
- type: "Interna"
176
+ type: "internal"
177
177
  }
178
178
  }
179
179
  }
@@ -182,6 +182,12 @@ export function link(options) {
182
182
  };
183
183
  };
184
184
  }
185
+ export function relation(options) {
186
+ return returnWidget(
187
+ { widget: "relation" },
188
+ options
189
+ );
190
+ }
185
191
  export const widgets = {
186
192
  string,
187
193
  color,
@@ -196,5 +202,6 @@ export const widgets = {
196
202
  text,
197
203
  select,
198
204
  imageObject,
199
- link
205
+ link,
206
+ relation
200
207
  };
@@ -258,7 +258,8 @@ export default defineEventHandler(async (event) => {
258
258
  const query = getQuery(event);
259
259
  const requestUrl = getRequestURL(event);
260
260
  const isTreeRequest = requestUrl.pathname.endsWith("/tree") || query.tree === true || query.tree === "true" || query.tree === "1";
261
- let entries = await readContentEntries();
261
+ const allEntries = await readContentEntries();
262
+ let entries = [...allEntries];
262
263
  if (isTreeRequest) {
263
264
  const tree = buildContentTree(entries);
264
265
  return findContentTree(tree, query.path);
@@ -319,6 +320,27 @@ export default defineEventHandler(async (event) => {
319
320
  if (skip > 0 || limit > 0) {
320
321
  entries = entries.slice(skip, limit > 0 ? skip + limit : void 0);
321
322
  }
323
+ if (query.with) {
324
+ try {
325
+ const withRelations = JSON.parse(query.with);
326
+ entries = entries.map((entry) => {
327
+ const hydratedEntry = { ...entry, data: { ...entry.data } };
328
+ for (const [field, shouldHydrate] of Object.entries(withRelations)) {
329
+ if (!shouldHydrate) continue;
330
+ const rawValue = getField(hydratedEntry, field);
331
+ if (Array.isArray(rawValue)) {
332
+ const resolved = rawValue.map((val) => allEntries.find((e) => e.path === val) || val);
333
+ setField(hydratedEntry, field, resolved);
334
+ } else if (typeof rawValue === "string") {
335
+ const resolved = allEntries.find((e) => e.path === rawValue) || rawValue;
336
+ setField(hydratedEntry, field, resolved);
337
+ }
338
+ }
339
+ return hydratedEntry;
340
+ });
341
+ } catch {
342
+ }
343
+ }
322
344
  if (query.select) {
323
345
  const fields = query.select.split(",");
324
346
  entries = entries.map((entry) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@monkeyplus/flow",
3
- "version": "6.0.48",
3
+ "version": "6.0.49",
4
4
  "description": "@monkeyplus/flow package-first runtime with Vite, Nitro, Vue and a workspace playground.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -5,6 +5,7 @@ export interface QueryContentBuilder {
5
5
  skip: (amount: number) => QueryContentBuilder;
6
6
  limit: (amount: number) => QueryContentBuilder;
7
7
  select: (...fields: string[]) => QueryContentBuilder;
8
+ with: (relations: Record<string, boolean>) => QueryContentBuilder;
8
9
  find: () => Promise<ContentEntry[]>;
9
10
  findOne: () => Promise<ContentEntry | null>;
10
11
  findEntries: () => Promise<Record<string, unknown>>;
@@ -131,7 +131,8 @@ export function queryContent(path = "") {
131
131
  order: [],
132
132
  skip: 0,
133
133
  limit: 0,
134
- select: []
134
+ select: [],
135
+ withRelations: {}
135
136
  };
136
137
  const builder = {
137
138
  where(field, operator, value) {
@@ -158,6 +159,10 @@ export function queryContent(path = "") {
158
159
  queryObj.select.push(...fields);
159
160
  return this;
160
161
  },
162
+ with(relations) {
163
+ Object.assign(queryObj.withRelations, relations);
164
+ return this;
165
+ },
161
166
  async find() {
162
167
  const q = { path: queryObj.path };
163
168
  if (queryObj.where.length)
@@ -170,6 +175,8 @@ export function queryContent(path = "") {
170
175
  q.limit = String(queryObj.limit);
171
176
  if (queryObj.select.length)
172
177
  q.select = queryObj.select.join(",");
178
+ if (Object.keys(queryObj.withRelations).length > 0)
179
+ q.with = JSON.stringify(queryObj.withRelations);
173
180
  return await fetchContent("query", q);
174
181
  },
175
182
  async findOne() {