headroom-cms 0.1.10 → 0.1.11

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 (104) hide show
  1. package/README.md +11 -6
  2. package/admin/assets/{AdminsPage-BIWASote.js → AdminsPage-BnzH9TL3.js} +1 -1
  3. package/admin/assets/{AllContentPage-1gXe2OC7.js → AllContentPage-BtObN6oy.js} +1 -1
  4. package/admin/assets/{ApiKeysPage-BBW4ATBx.js → ApiKeysPage-DEAa8eyC.js} +1 -1
  5. package/admin/assets/{AuditPage-B5GGFWGG.js → AuditPage-BN9yNsxh.js} +1 -1
  6. package/admin/assets/{BlockEditor-ClskiZoX.js → BlockEditor-3wnisTOZ.js} +3 -3
  7. package/admin/assets/{BlockTypeEditPage-CY0gCPei.js → BlockTypeEditPage-C2evAESK.js} +1 -1
  8. package/admin/assets/{BlockTypesPage-D8Me6OeX.js → BlockTypesPage-Dhkho6T_.js} +1 -1
  9. package/admin/assets/{BulkActionBar--35xjnOP.js → BulkActionBar-BxdfUSrN.js} +1 -1
  10. package/admin/assets/CollectionEditPage-lOb4hEZy.js +1 -0
  11. package/admin/assets/{CollectionsPage-BQmGXpvW.js → CollectionsPage-CgtOloa1.js} +1 -1
  12. package/admin/assets/{ContentCreatePage-DlgxamOe.js → ContentCreatePage-LeQjahp_.js} +1 -1
  13. package/admin/assets/ContentEditPage-xczr4d_h.js +1 -0
  14. package/admin/assets/{ContentField-D04Uo1Ov.js → ContentField-pilCbdnA.js} +1 -1
  15. package/admin/assets/{ContentListPage-BDMx7pWb.js → ContentListPage-BAKDn1Xy.js} +1 -1
  16. package/admin/assets/{CustomBlockPreview-Cs9bFDh4.js → CustomBlockPreview-DNnTFM0z.js} +1 -1
  17. package/admin/assets/FieldRenderer-DiOKvkWV.js +2 -0
  18. package/admin/assets/{FilterBar-kFcOLffg.js → FilterBar-BZoa63zh.js} +1 -1
  19. package/admin/assets/{FloatingComposerController-D4uLQfUX-C0Lhbmda.js → FloatingComposerController-D4uLQfUX-BMIvFCoE.js} +1 -1
  20. package/admin/assets/{IconPicker-BrgSAsa_.js → IconPicker-CpIgiQTC.js} +2 -2
  21. package/admin/assets/{LoginPage-Bi7TBzK4.js → LoginPage-D9ZsGLIi.js} +1 -1
  22. package/admin/assets/{MediaField-B-Cz8TlK.js → MediaField-CxccCFGQ.js} +1 -1
  23. package/admin/assets/{MediaPage-C84p9d1U.js → MediaPage-QvMaH2YJ.js} +1 -1
  24. package/admin/assets/{Pagination-CuHwUPHi.js → Pagination-Df9nQ7Z0.js} +1 -1
  25. package/admin/assets/{RelationshipPicker-Dv7GaLcU.js → RelationshipPicker-B3Ftmqxp.js} +1 -1
  26. package/admin/assets/{SiteSettingsPage-nBT7NzkA.js → SiteSettingsPage-6NvH7CiQ.js} +1 -1
  27. package/admin/assets/{SiteUserEditPage-DroUTii9.js → SiteUserEditPage-D5VaQ1Xq.js} +1 -1
  28. package/admin/assets/{SiteUsersPage-iVXPCBPe.js → SiteUsersPage-BYVduiqs.js} +1 -1
  29. package/admin/assets/{SitesPage-BefZeWuJ.js → SitesPage-rfWWE0yK.js} +1 -1
  30. package/admin/assets/{SubmissionDetailPage-ktmzzOE1.js → SubmissionDetailPage-BSUR685F.js} +1 -1
  31. package/admin/assets/{SubmissionEditPage-C-ykTI2t.js → SubmissionEditPage-DjLXHjWU.js} +1 -1
  32. package/admin/assets/{SubmissionListPage-DA-8deUy.js → SubmissionListPage-DBxNEvde.js} +1 -1
  33. package/admin/assets/{TagInput-d-Hw1fkL.js → TagInput-57c4DG1w.js} +1 -1
  34. package/admin/assets/{TagsPage-BZzDvcKa.js → TagsPage-BEO5AwCv.js} +1 -1
  35. package/admin/assets/{UsersPage-CnQAOOGF.js → UsersPage-BpIRorJ1.js} +1 -1
  36. package/admin/assets/{WebhookEditPage-KeS8hmdW.js → WebhookEditPage-D5xgi56h.js} +1 -1
  37. package/admin/assets/{WebhooksPage-CASjmlPN.js → WebhooksPage-BY7AaiGr.js} +1 -1
  38. package/admin/assets/{card-CZTHR2Qa.js → card-C9hfyHXf.js} +1 -1
  39. package/admin/assets/{checkbox-DEgzM8H9.js → checkbox-DVJcwUt1.js} +1 -1
  40. package/admin/assets/{command-CdzYw11U.js → command-Bfmj0MEL.js} +1 -1
  41. package/admin/assets/index-BB9Syqw2.css +1 -0
  42. package/admin/assets/{index-BA3y7HJs.js → index-Ce5pmRMj.js} +2 -2
  43. package/admin/assets/media-url-DdCoIedP.js +1 -0
  44. package/admin/assets/{popover-BFw_h3j6.js → popover-CzaQYEEP.js} +1 -1
  45. package/admin/assets/{select-dX9e6VDt.js → select-CrRhFGIi.js} +1 -1
  46. package/admin/assets/serializeToText-2VrsuRUh.js +2 -0
  47. package/admin/assets/{table-Dk7eeOt2.js → table-_3bMY0_z.js} +1 -1
  48. package/admin/assets/{textarea-CpDSUg2s.js → textarea-6fq0R6VV.js} +1 -1
  49. package/admin/assets/{useAdminResolver-Bljb4XGQ.js → useAdminResolver-BJNPz3OG.js} +1 -1
  50. package/admin/assets/{useContent-CW0tm0FY.js → useContent-Bs7nel7C.js} +1 -1
  51. package/admin/assets/{useContentSearch-_bwacEth.js → useContentSearch-B3aTjuCu.js} +1 -1
  52. package/admin/assets/{useMedia-Cu5N4rY8.js → useMedia-ae3s_ajC.js} +1 -1
  53. package/admin/assets/{usePageTitle-DYvuJQp6.js → usePageTitle-C1r1-C00.js} +1 -1
  54. package/admin/assets/{useSiteUsers-CKtC_8Jc.js → useSiteUsers-DIaqgNSp.js} +1 -1
  55. package/admin/assets/{useTags-ybsMbCst.js → useTags-B-HgMVwo.js} +1 -1
  56. package/admin/assets/{useWebhooks-BAB-3sLa.js → useWebhooks-BvZjUJkJ.js} +1 -1
  57. package/admin/favicon-16x16.png +0 -0
  58. package/admin/favicon-32x32.png +0 -0
  59. package/admin/icons/icon-180x180.png +0 -0
  60. package/admin/icons/icon-192x192.png +0 -0
  61. package/admin/icons/icon-512x512.png +0 -0
  62. package/admin/icons/maskable-icon-512x512.png +0 -0
  63. package/admin/index.html +2 -2
  64. package/admin/sw.js +1 -1
  65. package/dist/admin-site.d.ts +4 -2
  66. package/dist/admin-site.d.ts.map +1 -1
  67. package/dist/admin-site.js +3 -3
  68. package/dist/admin-site.js.map +1 -1
  69. package/dist/cdn-api.d.ts +25 -0
  70. package/dist/cdn-api.d.ts.map +1 -0
  71. package/dist/{cdn.js → cdn-api.js} +7 -139
  72. package/dist/cdn-api.js.map +1 -0
  73. package/dist/cdn-media.d.ts +26 -0
  74. package/dist/cdn-media.d.ts.map +1 -0
  75. package/dist/cdn-media.js +202 -0
  76. package/dist/cdn-media.js.map +1 -0
  77. package/dist/index.d.ts +15 -3
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +19 -9
  80. package/dist/index.js.map +1 -1
  81. package/lambda/api/bootstrap +0 -0
  82. package/lambda/image-lambda/node_modules/.package-lock.json +3 -3
  83. package/lambda/image-lambda/node_modules/semver/README.md +19 -4
  84. package/lambda/image-lambda/node_modules/semver/bin/semver.js +14 -10
  85. package/lambda/image-lambda/node_modules/semver/functions/truncate.js +48 -0
  86. package/lambda/image-lambda/node_modules/semver/index.js +2 -0
  87. package/lambda/image-lambda/node_modules/semver/internal/re.js +1 -1
  88. package/lambda/image-lambda/node_modules/semver/package.json +3 -3
  89. package/lambda/image-lambda/node_modules/semver/range.bnf +5 -4
  90. package/lambda/webhook-worker/bootstrap +0 -0
  91. package/package.json +1 -1
  92. package/src/admin-site.ts +7 -5
  93. package/src/{cdn.ts → cdn-api.ts} +8 -161
  94. package/src/cdn-media.ts +250 -0
  95. package/src/index.ts +34 -11
  96. package/admin/assets/CollectionEditPage-y8t0ZO89.js +0 -1
  97. package/admin/assets/ContentEditPage-WkSbCnnG.js +0 -1
  98. package/admin/assets/FieldRenderer-wE-mtqZB.js +0 -2
  99. package/admin/assets/index-c7UygSvP.css +0 -1
  100. package/admin/assets/media-url-DIg_vSyf.js +0 -1
  101. package/admin/assets/serializeToText-Zin3gYPm.js +0 -2
  102. package/dist/cdn.d.ts +0 -27
  103. package/dist/cdn.d.ts.map +0 -1
  104. package/dist/cdn.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ import{j as c}from"./tanstack-Bs3zYPPV.js";import{r as k}from"./react-vendor-C2CvUxFh.js";import{y as P}from"./index-Ce5pmRMj.js";class J{diff(e,t,r={}){let n;typeof r=="function"?(n=r,r={}):"callback"in r&&(n=r.callback);const i=this.castInput(e,r),o=this.castInput(t,r),l=this.removeEmpty(this.tokenize(i,r)),u=this.removeEmpty(this.tokenize(o,r));return this.diffWithOptionsObj(l,u,r,n)}diffWithOptionsObj(e,t,r,n){var i;const o=d=>{if(d=this.postProcess(d,r),n){setTimeout(function(){n(d)},0);return}else return d},l=t.length,u=e.length;let f=1,a=l+u;r.maxEditLength!=null&&(a=Math.min(a,r.maxEditLength));const p=(i=r.timeout)!==null&&i!==void 0?i:1/0,v=Date.now()+p,h=[{oldPos:-1,lastComponent:void 0}];let g=this.extractCommon(h[0],t,e,0,r);if(h[0].oldPos+1>=u&&g+1>=l)return o(this.buildValues(h[0].lastComponent,t,e));let N=-1/0,A=1/0;const I=()=>{for(let d=Math.max(N,-f);d<=Math.min(A,f);d+=2){let x;const b=h[d-1],j=h[d+1];b&&(h[d-1]=void 0);let $=!1;if(j){const T=j.oldPos-d;$=j&&0<=T&&T<l}const L=b&&b.oldPos+1<u;if(!$&&!L){h[d]=void 0;continue}if(!L||$&&b.oldPos<j.oldPos?x=this.addToPath(j,!0,!1,0,r):x=this.addToPath(b,!1,!0,1,r),g=this.extractCommon(x,t,e,d,r),x.oldPos+1>=u&&g+1>=l)return o(this.buildValues(x.lastComponent,t,e))||!0;h[d]=x,x.oldPos+1>=u&&(A=Math.min(A,d-1)),g+1>=l&&(N=Math.max(N,d+1))}f++};if(n)(function d(){setTimeout(function(){if(f>a||Date.now()>v)return n(void 0);I()||d()},0)})();else for(;f<=a&&Date.now()<=v;){const d=I();if(d)return d}}addToPath(e,t,r,n,i){const o=e.lastComponent;return o&&!i.oneChangePerToken&&o.added===t&&o.removed===r?{oldPos:e.oldPos+n,lastComponent:{count:o.count+1,added:t,removed:r,previousComponent:o.previousComponent}}:{oldPos:e.oldPos+n,lastComponent:{count:1,added:t,removed:r,previousComponent:o}}}extractCommon(e,t,r,n,i){const o=t.length,l=r.length;let u=e.oldPos,f=u-n,a=0;for(;f+1<o&&u+1<l&&this.equals(r[u+1],t[f+1],i);)f++,u++,a++,i.oneChangePerToken&&(e.lastComponent={count:1,previousComponent:e.lastComponent,added:!1,removed:!1});return a&&!i.oneChangePerToken&&(e.lastComponent={count:a,previousComponent:e.lastComponent,added:!1,removed:!1}),e.oldPos=u,f}equals(e,t,r){return r.comparator?r.comparator(e,t):e===t||!!r.ignoreCase&&e.toLowerCase()===t.toLowerCase()}removeEmpty(e){const t=[];for(let r=0;r<e.length;r++)e[r]&&t.push(e[r]);return t}castInput(e,t){return e}tokenize(e,t){return Array.from(e)}join(e){return e.join("")}postProcess(e,t){return e}get useLongestToken(){return!1}buildValues(e,t,r){const n=[];let i;for(;e;)n.push(e),i=e.previousComponent,delete e.previousComponent,e=i;n.reverse();const o=n.length;let l=0,u=0,f=0;for(;l<o;l++){const a=n[l];if(a.removed)a.value=this.join(r.slice(f,f+a.count)),f+=a.count;else{if(!a.added&&this.useLongestToken){let p=t.slice(u,u+a.count);p=p.map(function(v,h){const g=r[f+h];return g.length>v.length?g:v}),a.value=this.join(p)}else a.value=this.join(t.slice(u,u+a.count));u+=a.count,a.added||(f+=a.count)}}return n}}function M(s,e){let t;for(t=0;t<s.length&&t<e.length;t++)if(s[t]!=e[t])return s.slice(0,t);return s.slice(0,t)}function O(s,e){let t;if(!s||!e||s[s.length-1]!=e[e.length-1])return"";for(t=0;t<s.length&&t<e.length;t++)if(s[s.length-(t+1)]!=e[e.length-(t+1)])return s.slice(-t);return s.slice(-t)}function E(s,e,t){if(s.slice(0,e.length)!=e)throw Error(`string ${JSON.stringify(s)} doesn't start with prefix ${JSON.stringify(e)}; this is a bug`);return t+s.slice(e.length)}function W(s,e,t){if(!e)return s+t;if(s.slice(-e.length)!=e)throw Error(`string ${JSON.stringify(s)} doesn't end with suffix ${JSON.stringify(e)}; this is a bug`);return s.slice(0,-e.length)+t}function C(s,e){return E(s,e,"")}function S(s,e){return W(s,e,"")}function F(s,e){return e.slice(0,B(s,e))}function B(s,e){let t=0;s.length>e.length&&(t=s.length-e.length);let r=e.length;s.length<e.length&&(r=s.length);const n=Array(r);let i=0;n[0]=0;for(let o=1;o<r;o++){for(e[o]==e[i]?n[o]=n[i]:n[o]=i;i>0&&e[o]!=e[i];)i=n[i];e[o]==e[i]&&i++}i=0;for(let o=t;o<s.length;o++){for(;i>0&&s[o]!=e[i];)i=n[i];s[o]==e[i]&&i++}return i}function w(s){let e;for(e=s.length-1;e>=0&&s[e].match(/\s/);e--);return s.substring(e+1)}function m(s){const e=s.match(/^\s*/);return e?e[0]:""}const z="a-zA-Z0-9_\\u{AD}\\u{C0}-\\u{D6}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}",H=new RegExp(`[${z}]+|\\s+|[^${z}]`,"ug");class U extends J{equals(e,t,r){return r.ignoreCase&&(e=e.toLowerCase(),t=t.toLowerCase()),e.trim()===t.trim()}tokenize(e,t={}){let r;if(t.intlSegmenter){const o=t.intlSegmenter;if(o.resolvedOptions().granularity!="word")throw new Error('The segmenter passed must have a granularity of "word"');r=[];for(const l of Array.from(o.segment(e))){const u=l.segment;r.length&&/\s/.test(r[r.length-1])&&/\s/.test(u)?r[r.length-1]+=u:r.push(u)}}else r=e.match(H)||[];const n=[];let i=null;return r.forEach(o=>{/\s/.test(o)?i==null?n.push(o):n.push(n.pop()+o):i!=null&&/\s/.test(i)?n[n.length-1]==i?n.push(n.pop()+o):n.push(i+o):n.push(o),i=o}),n}join(e){return e.map((t,r)=>r==0?t:t.replace(/^\s+/,"")).join("")}postProcess(e,t){if(!e||t.oneChangePerToken)return e;let r=null,n=null,i=null;return e.forEach(o=>{o.added?n=o:o.removed?i=o:((n||i)&&R(r,i,n,o),r=o,n=null,i=null)}),(n||i)&&R(r,i,n,null),e}}const Y=new U;function Z(s,e,t){return Y.diff(s,e,t)}function R(s,e,t,r){if(e&&t){const n=m(e.value),i=w(e.value),o=m(t.value),l=w(t.value);if(s){const u=M(n,o);s.value=W(s.value,o,u),e.value=C(e.value,u),t.value=C(t.value,u)}if(r){const u=O(i,l);r.value=E(r.value,l,u),e.value=S(e.value,u),t.value=S(t.value,u)}}else if(t){if(s){const n=m(t.value);t.value=t.value.substring(n.length)}if(r){const n=m(r.value);r.value=r.value.substring(n.length)}}else if(s&&r){const n=m(r.value),i=m(e.value),o=w(e.value),l=M(n,i);e.value=C(e.value,l);const u=O(C(n,l),o);e.value=S(e.value,u),r.value=E(r.value,n,u),s.value=W(s.value,n,n.slice(0,n.length-u.length))}else if(r){const n=m(r.value),i=w(e.value),o=F(i,n);e.value=S(e.value,o)}else if(s){const n=w(s.value),i=m(e.value),o=F(n,i);e.value=C(e.value,o)}}class G extends J{tokenize(e){return e.slice()}join(e){return e}removeEmpty(e){return e}}const Q=new G;function X(s,e,t){return Q.diff(s,e,t)}const K=5;function pe({left:s,right:e,leftLabel:t="Before",rightLabel:r="After"}){const n=k.useMemo(()=>se(s,e),[s,e]),i=k.useMemo(()=>re(n),[n]);return n.every(o=>o.type==="unchanged")?c.jsxs("p",{className:"text-sm text-muted-foreground italic py-4",children:["No changes between ",t," and ",r," versions."]}):c.jsxs("div",{className:"font-mono text-xs leading-relaxed border rounded-md overflow-hidden",children:[c.jsxs("div",{className:"grid grid-cols-2 border-b bg-muted/50 text-muted-foreground text-[10px] font-semibold",children:[c.jsx("div",{className:"px-3 py-1.5",children:t}),c.jsx("div",{className:"px-3 py-1.5 border-l",children:r})]}),c.jsx("div",{children:i.map((o,l)=>c.jsx(ee,{segment:o},l))})]})}function ee({segment:s}){const[e,t]=k.useState(!1);return s.type==="collapsed"&&!e?c.jsxs("button",{onClick:()=>t(!0),className:"w-full grid grid-cols-2 text-[10px] text-muted-foreground bg-muted/30 hover:bg-muted/50 transition-colors cursor-pointer",children:[c.jsxs("div",{className:"px-3 py-1 text-center border-b",children:["... ",s.count," unchanged lines ..."]}),c.jsxs("div",{className:"px-3 py-1 text-center border-l border-b",children:["... ",s.count," unchanged lines ..."]})]}):s.type==="collapsed"?null:c.jsx(c.Fragment,{children:s.rows.map((r,n)=>c.jsx(te,{row:r},n))})}function _({oldText:s,newText:e,side:t}){const r=Z(s,e);return c.jsx(c.Fragment,{children:r.map((n,i)=>n.added?t==="right"?c.jsx("span",{className:"font-bold bg-green-200 dark:bg-green-800/50",children:n.value},i):null:n.removed?t==="left"?c.jsx("span",{className:"line-through bg-red-200 dark:bg-red-800/50",children:n.value},i):null:c.jsx("span",{children:n.value},i))})}function te({row:s}){const e=s.type==="modified";return c.jsxs("div",{className:"grid grid-cols-2 border-b last:border-b-0",children:[c.jsx("div",{className:P("px-3 py-0.5 min-h-[1.5em] min-w-0 break-all",(s.type==="removed"||e)&&"bg-red-50 dark:bg-red-950/30"),style:s.left?{paddingLeft:`calc(0.75rem + ${s.left.indent*1}rem)`}:void 0,children:c.jsx("span",{className:P(s.left?.type==="label"&&"text-muted-foreground font-semibold",s.left?.type==="heading"&&"font-bold"),children:e&&s.left&&s.right?c.jsx(_,{oldText:s.left.text,newText:s.right.text,side:"left"}):s.left?.text??""})}),c.jsx("div",{className:P("px-3 py-0.5 min-h-[1.5em] min-w-0 break-all border-l",(s.type==="added"||e)&&"bg-green-50 dark:bg-green-950/30"),style:s.right?{paddingLeft:`calc(0.75rem + ${s.right.indent*1}rem)`}:void 0,children:c.jsx("span",{className:P(s.right?.type==="label"&&"text-muted-foreground font-semibold",s.right?.type==="heading"&&"font-bold"),children:e&&s.left&&s.right?c.jsx(_,{oldText:s.left.text,newText:s.right.text,side:"right"}):s.right?.text??""})})]})}function ne(s,e){const t=[],r=new Set;for(const n of s){if(!n.text){t.push({type:"removed",left:n});continue}let i=-1,o=-1;for(let l=0;l<e.length;l++){if(r.has(l)||!e[l].text)continue;let u=1;e[l].indent===n.indent&&u++,e[l].type===n.type&&u++,u>o&&(o=u,i=l)}i>=0?(r.add(i),t.push({type:"modified",left:n,right:e[i]})):t.push({type:"removed",left:n})}for(let n=0;n<e.length;n++)r.has(n)||t.push({type:"added",right:e[n]});return t}function se(s,e){const t=X(s,e,{comparator:(n,i)=>n.text===i.text&&n.indent===i.indent&&n.type===i.type}),r=[];for(let n=0;n<t.length;n++){const i=t[n],o=t[n+1];if(i.removed&&o?.added){const l=i.value,u=o.value,f=ne(l,u);r.push(...f),n++}else if(i.added)for(const l of i.value)r.push({type:"added",right:l});else if(i.removed)for(const l of i.value)r.push({type:"removed",left:l});else for(const l of i.value)r.push({type:"unchanged",left:l,right:l})}return r}function re(s){const e=[];let t=[];function r(){if(t.length!==0){if(t.length>K){const o=t.slice(0,2),l=t.slice(-2),u=t.length-4;e.push({type:"rows",rows:o}),u>0&&e.push({type:"collapsed",count:u}),e.push({type:"rows",rows:l})}else e.push({type:"rows",rows:t});t=[]}}let n=[];function i(){n.length!==0&&(e.push({type:"rows",rows:n}),n=[])}for(const o of s)o.type==="unchanged"?(i(),t.push(o)):(r(),n.push(o));return i(),r(),e}function q(s,e){if(e==null||e==="")return[{text:"(empty)",indent:0,type:"value"}];switch(s.type){case"text":case"url":case"email":case"number":case"select":return[{text:String(e),indent:0,type:"value"}];case"date":case"datetime":return[{text:ie(e,s.type),indent:0,type:"value"}];case"textarea":return String(e).split(`
2
+ `).map(t=>({text:t,indent:0,type:"value"}));case"boolean":return[{text:e?"Yes":"No",indent:0,type:"value"}];case"media":return oe(e);case"blocks":return D(e);case"array":return ae(s,e);default:return[{text:String(e),indent:0,type:"value"}]}}function ie(s,e){let t=null;if(typeof s=="number")t=s;else if(typeof s=="string"){const n=/^-?\d+$/.test(s)?Number(s):Date.parse(s);Number.isNaN(n)||(t=n)}if(t===null)return String(s);const r=new Date(t);return Number.isNaN(r.getTime())?String(s):e==="datetime"?r.toISOString():r.toISOString().slice(0,10)}function oe(s){return Array.isArray(s)?s.length===0?[{text:"(empty)",indent:0,type:"value"}]:s.flatMap(e=>V(e).map(t=>({...t,indent:t.indent,type:"list-item"}))):V(s)}function V(s){if(s==null||s==="")return[{text:"(empty)",indent:0,type:"value"}];if(typeof s=="string")return[{text:`[Media: ${s}]`,indent:0,type:"value"}];if(typeof s!="object")return[{text:`[Media: ${String(s)}]`,indent:0,type:"value"}];const e=s,t=(typeof e.id=="string"?e.id:void 0)??(typeof e.mediaId=="string"?e.mediaId:void 0)??"",r=typeof e.filename=="string"?e.filename:"",n=typeof e.alt=="string"?e.alt:"",i=typeof e.caption=="string"?e.caption:"",o=r||t||"(unknown)",l=[];return n&&l.push(`alt: "${n}"`),i&&l.push(`caption: "${i}"`),[{text:l.length>0?`[Media: ${o} — ${l.join(", ")}]`:`[Media: ${o}]`,indent:0,type:"value"}]}function he(s,e,t,r){const n=[];t&&(t.title!==void 0&&(n.push({text:"Title",indent:0,type:"label"}),n.push({text:t.title||"(empty)",indent:0,type:"value"}),n.push({text:"",indent:0,type:"empty"})),t.slug!==void 0&&(n.push({text:"Slug",indent:0,type:"label"}),n.push({text:t.slug||"(empty)",indent:0,type:"value"}),n.push({text:"",indent:0,type:"empty"})),t.snippet!==void 0&&(n.push({text:"Snippet",indent:0,type:"label"}),n.push({text:t.snippet||"(empty)",indent:0,type:"value"}),n.push({text:"",indent:0,type:"empty"})),t.tags!==void 0&&(n.push({text:"Tags",indent:0,type:"label"}),n.push({text:t.tags.length>0?t.tags.join(", "):"(empty)",indent:0,type:"value"}),n.push({text:"",indent:0,type:"empty"})));for(const i of s){n.push({text:i.label,indent:0,type:"label"});const o=q(i,e[i.name]);n.push(...o),n.push({text:"",indent:0,type:"empty"})}if(r&&r.defs.length>0)for(const i of r.defs){n.push({text:i.label,indent:0,type:"label"});const o=r.values[i.name]??[];o.length===0?n.push({text:"(empty)",indent:0,type:"value"}):n.push({text:o.map(l=>l.title).join(", "),indent:0,type:"value"}),n.push({text:"",indent:0,type:"empty"})}return n.length>0&&n[n.length-1].type==="empty"&&n.pop(),n}const le=[["bold","**","**"],["italic","_","_"],["underline","__","__"],["strike","~~","~~"],["code","`","`"]];function ue(s,e){if(!e||!s)return s;let t=s;for(const[r,n,i]of le)e[r]===!0&&(t=n+t+i);return t}function y(s){return Array.isArray(s)?s.map(e=>typeof e.text=="string"?ue(e.text,e.styles):e.type==="link"&&Array.isArray(e.content)?`[${y(e.content)}](${e.href??""})`:"").join(""):""}function D(s,e=0){if(!Array.isArray(s))return[{text:"(empty)",indent:0,type:"value"}];if(s.length===0)return[{text:"(empty)",indent:0,type:"value"}];const t=[];let r=0;for(const n of s){if(typeof n!="object"||n===null)continue;const i=n,o=i.type??"";switch(o!=="numberedListItem"&&(r=0),o){case"paragraph":{const l=y(i.content);t.push({text:l||"",indent:e,type:"value"});break}case"heading":{const l=i.props?.level??1,u="#".repeat(Math.min(l,6))+" ",f=y(i.content);t.push({text:u+f,indent:e,type:"heading"});break}case"bulletListItem":{const l=y(i.content);t.push({text:`- ${l}`,indent:e,type:"list-item"});break}case"numberedListItem":{r++;const l=y(i.content);t.push({text:`${r}. ${l}`,indent:e,type:"list-item"});break}case"image":case"HeadroomImage":{const l=i.props?.alt,u=i.props?.mediaId,f=l||u||"image";t.push({text:`[Image: ${f}]`,indent:e,type:"value"});break}case"quote":{const l=y(i.content);t.push({text:`> ${l}`,indent:e,type:"value"});break}default:{const l=y(i.content),u=i.props&&typeof i.props=="object"?i.props:{},f=Object.entries(u).filter(([a,p])=>!(a==="textAlignment"||a==="level"||(a==="backgroundColor"||a==="textColor")&&p==="default"||p==null||p===""));if(f.length>0){t.push({text:`[${o}]`,indent:e,type:"label"}),l&&t.push({text:l,indent:e+1,type:"value"});for(const[a,p]of f)Array.isArray(p)?(t.push({text:`${a}:`,indent:e+1,type:"label"}),t.push(...D(p,e+2))):t.push({text:`${a}: ${String(p)}`,indent:e+1,type:"value"})}else l?t.push({text:l,indent:e,type:"value"}):t.push({text:`[${o}]`,indent:e,type:"value"});break}}Array.isArray(i.children)&&i.children.length>0&&t.push(...D(i.children,e+1))}return t}function ae(s,e){if(!Array.isArray(e)||e.length===0)return[{text:"(empty)",indent:0,type:"value"}];const r=s.options?.itemFields??[],n=[];for(let i=0;i<e.length;i++){n.push({text:`${i+1}.`,indent:0,type:"list-item"});const o=e[i];if(r.length>0)for(const l of r){n.push({text:l.label+":",indent:1,type:"label"});const u=q(l,o[l.name]);n.push(...u.map(f=>({...f,indent:f.indent+1})))}else n.push({text:JSON.stringify(o,null,2),indent:1,type:"value"})}return n}export{pe as T,X as d,he as s};
@@ -1 +1 @@
1
- import{j as t}from"./tanstack-Bs3zYPPV.js";import"./react-vendor-C2CvUxFh.js";import{y as l}from"./index-BA3y7HJs.js";function n({className:a,...e}){return t.jsx("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:t.jsx("table",{"data-slot":"table",className:l("w-full caption-bottom text-sm",a),...e})})}function d({className:a,...e}){return t.jsx("thead",{"data-slot":"table-header",className:l("[&_tr]:border-b",a),...e})}function c({className:a,...e}){return t.jsx("tbody",{"data-slot":"table-body",className:l("[&_tr:last-child]:border-0",a),...e})}function b({className:a,...e}){return t.jsx("tr",{"data-slot":"table-row",className:l("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",a),...e})}function i({className:a,...e}){return t.jsx("th",{"data-slot":"table-head",className:l("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",a),...e})}function m({className:a,...e}){return t.jsx("td",{"data-slot":"table-cell",className:l("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",a),...e})}export{n as T,d as a,b,i as c,c as d,m as e};
1
+ import{j as t}from"./tanstack-Bs3zYPPV.js";import"./react-vendor-C2CvUxFh.js";import{y as l}from"./index-Ce5pmRMj.js";function n({className:a,...e}){return t.jsx("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:t.jsx("table",{"data-slot":"table",className:l("w-full caption-bottom text-sm",a),...e})})}function d({className:a,...e}){return t.jsx("thead",{"data-slot":"table-header",className:l("[&_tr]:border-b",a),...e})}function c({className:a,...e}){return t.jsx("tbody",{"data-slot":"table-body",className:l("[&_tr:last-child]:border-0",a),...e})}function b({className:a,...e}){return t.jsx("tr",{"data-slot":"table-row",className:l("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",a),...e})}function i({className:a,...e}){return t.jsx("th",{"data-slot":"table-head",className:l("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",a),...e})}function m({className:a,...e}){return t.jsx("td",{"data-slot":"table-cell",className:l("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",a),...e})}export{n as T,d as a,b,i as c,c as d,m as e};
@@ -1 +1 @@
1
- import{j as i}from"./tanstack-Bs3zYPPV.js";import"./react-vendor-C2CvUxFh.js";import{y as t}from"./index-BA3y7HJs.js";function s({className:r,...e}){return i.jsx("textarea",{"data-slot":"textarea",className:t("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",r),...e})}export{s as T};
1
+ import{j as i}from"./tanstack-Bs3zYPPV.js";import"./react-vendor-C2CvUxFh.js";import{y as t}from"./index-Ce5pmRMj.js";function s({className:r,...e}){return i.jsx("textarea",{"data-slot":"textarea",className:t("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",r),...e})}export{s as T};
@@ -1 +1 @@
1
- import{r as t}from"./react-vendor-C2CvUxFh.js";import{b6 as n}from"./index-BA3y7HJs.js";function c(o){const r=[...new Set(o)],{data:e}=n(r);return{resolve:t.useCallback(s=>e?.users[s]?.email??s,[e]),isLoaded:!!e}}export{c as u};
1
+ import{r as t}from"./react-vendor-C2CvUxFh.js";import{b6 as n}from"./index-Ce5pmRMj.js";function c(o){const r=[...new Set(o)],{data:e}=n(r);return{resolve:t.useCallback(s=>e?.users[s]?.email??s,[e]),isLoaded:!!e}}export{c as u};
@@ -1 +1 @@
1
- import{u as r,a,b as c}from"./tanstack-Bs3zYPPV.js";import{e as u}from"./index-BA3y7HJs.js";function y(e,t,i,n){const s=u(),o=new URLSearchParams({collection:t});return n&&o.set("afterId",n),i?.q&&o.set("q",i.q),i?.search&&o.set("search",i.search),i?.tag&&o.set("tag",i.tag),i?.status&&o.set("status",i.status),i?.sort&&o.set("sort",i.sort),i?.relatedTo&&o.set("relatedTo",i.relatedTo),i?.relField&&o.set("relField",i.relField),i?.limit&&o.set("limit",String(i.limit)),r({queryKey:["sites",e,"content",t,i??{},n??""],queryFn:()=>s.apiFetch(`/v1/admin/sites/${e}/content?${o.toString()}`),enabled:!!e&&!!t})}function v(e,t,i){const n=u(),s=new URLSearchParams;t&&s.set("afterId",t),s.set("limit",String(i));const o=s.toString();return r({queryKey:["sites",e,"content","__all__",t??"",i??""],queryFn:()=>n.apiFetch(`/v1/admin/sites/${e}/content${o?`?${o}`:""}`),enabled:!!e})}function m(e,t){const i=u();return r({queryKey:["sites",e,"content-detail",t],queryFn:()=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}`),enabled:!!e&&!!t})}function q(e){const t=u(),i=a();return c({mutationFn:n=>t.apiFetch(`/v1/admin/sites/${e}/content`,{method:"POST",body:JSON.stringify({collection:n.collection,params:{title:n.title,slug:n.slug,body:{}}})}),onSuccess:()=>i.invalidateQueries({queryKey:["sites",e,"content"]})})}function p(e,t){const i=u(),n=a();return c({mutationFn:s=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}/draft`,{method:"PUT",body:JSON.stringify(s)}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"content-detail",t]})}})}function F(e,t,i){const n=u();return r({queryKey:["sites",e,"content-published",t],queryFn:()=>n.apiFetch(`/v1/admin/sites/${e}/content/${t}/published`),enabled:!!e&&!!t&&i})}function S(e,t){const i=u(),n=a();return c({mutationFn:s=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}/publish`,{method:"POST",...s!=null?{body:JSON.stringify({publishDate:s})}:{}}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"content-detail",t]}),n.invalidateQueries({queryKey:["sites",e,"content-published",t]}),n.invalidateQueries({queryKey:["sites",e,"tags"]})}})}function $(e,t){const i=u(),n=a();return c({mutationFn:()=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}/unpublish`,{method:"POST"}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"content-detail",t]}),n.removeQueries({queryKey:["sites",e,"content-published",t]}),n.invalidateQueries({queryKey:["sites",e,"tags"]})}})}function K(e,t){const i=u(),n=a();return c({mutationFn:()=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}`,{method:"DELETE"}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"tags"]})}})}function b(e,t){const i=u(),n=a();return c({mutationFn:s=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}/publish-date`,{method:"PATCH",body:JSON.stringify({publishDate:s})}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"content-detail",t]})}})}function f(e,t){const i=u(),n=a();return c({mutationFn:s=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}/schedule`,{method:"POST",body:JSON.stringify({scheduleAt:s})}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"content-detail",t]})}})}function Q(e,t){const i=u(),n=a();return c({mutationFn:()=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}/unschedule`,{method:"POST"}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"content-detail",t]})}})}function g(e){const t=u(),i=a();return c({mutationFn:n=>Promise.allSettled(n.map(s=>t.apiFetch(`/v1/admin/sites/${e}/content/${s}/publish`,{method:"POST"}))),onSettled:()=>{i.invalidateQueries({queryKey:["sites",e,"content"]}),i.invalidateQueries({queryKey:["sites",e,"tags"]})}})}function h(e){const t=u(),i=a();return c({mutationFn:n=>Promise.allSettled(n.map(s=>t.apiFetch(`/v1/admin/sites/${e}/content/${s}/unpublish`,{method:"POST"}))),onSettled:()=>{i.invalidateQueries({queryKey:["sites",e,"content"]}),i.invalidateQueries({queryKey:["sites",e,"tags"]})}})}function P(e){const t=u(),i=a();return c({mutationFn:n=>Promise.allSettled(n.map(s=>t.apiFetch(`/v1/admin/sites/${e}/content/${s}`,{method:"DELETE"}))),onSettled:()=>{i.invalidateQueries({queryKey:["sites",e,"content"]}),i.invalidateQueries({queryKey:["sites",e,"tags"]})}})}function O(e,t){const i=u(),n=a();return c({mutationFn:()=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}/discard`,{method:"POST"}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"content-detail",t]})}})}function C(e,t,i){const n=u();return r({queryKey:["sites",e,"content-detail",t,"versions",i],queryFn:()=>n.apiFetch(`/v1/admin/sites/${e}/content/${t}/versions/${i}`),enabled:!!e&&!!t&&!!i})}function T(e,t){const i=u();return r({queryKey:["sites",e,"content-detail",t,"versions"],queryFn:async()=>({items:(await i.apiFetch(`/v1/admin/sites/${e}/content/${t}/versions`)).versions??[]}),enabled:!!e&&!!t})}function U(e){const t=u(),i=a();return c({mutationFn:n=>t.apiFetch(`/v1/admin/sites/${e}/submissions/${n.collection}`,{method:"POST",body:JSON.stringify({fields:n.fields,...n.relationships&&Object.keys(n.relationships).length>0?{relationships:n.relationships}:{}})}),onSuccess:()=>i.invalidateQueries({queryKey:["sites",e,"content"]})})}function D(e,t){const i=u(),n=a();return c({mutationFn:s=>i.apiFetch(`/v1/admin/sites/${e}/submissions/${t}`,{method:"PUT",body:JSON.stringify({fields:s.fields,...s.relationships&&Object.keys(s.relationships).length>0?{relationships:s.relationships}:{}})}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"content-detail",t]})}})}function J(e,t,i){const n=u();return r({queryKey:["sites",e,"content-references",t],queryFn:()=>n.apiFetch(`/v1/admin/sites/${e}/content/${t}/references`),enabled:!!e&&!!t&&i})}export{g as a,h as b,P as c,y as d,q as e,p as f,F as g,C as h,T as i,m as j,S as k,$ as l,K as m,b as n,f as o,Q as p,O as q,J as r,U as s,D as t,v as u};
1
+ import{u as r,a,b as c}from"./tanstack-Bs3zYPPV.js";import{e as u}from"./index-Ce5pmRMj.js";function y(e,t,i,n){const s=u(),o=new URLSearchParams({collection:t});return n&&o.set("afterId",n),i?.q&&o.set("q",i.q),i?.search&&o.set("search",i.search),i?.tag&&o.set("tag",i.tag),i?.status&&o.set("status",i.status),i?.sort&&o.set("sort",i.sort),i?.relatedTo&&o.set("relatedTo",i.relatedTo),i?.relField&&o.set("relField",i.relField),i?.limit&&o.set("limit",String(i.limit)),r({queryKey:["sites",e,"content",t,i??{},n??""],queryFn:()=>s.apiFetch(`/v1/admin/sites/${e}/content?${o.toString()}`),enabled:!!e&&!!t})}function v(e,t,i){const n=u(),s=new URLSearchParams;t&&s.set("afterId",t),s.set("limit",String(i));const o=s.toString();return r({queryKey:["sites",e,"content","__all__",t??"",i??""],queryFn:()=>n.apiFetch(`/v1/admin/sites/${e}/content${o?`?${o}`:""}`),enabled:!!e})}function m(e,t){const i=u();return r({queryKey:["sites",e,"content-detail",t],queryFn:()=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}`),enabled:!!e&&!!t})}function q(e){const t=u(),i=a();return c({mutationFn:n=>t.apiFetch(`/v1/admin/sites/${e}/content`,{method:"POST",body:JSON.stringify({collection:n.collection,params:{title:n.title,slug:n.slug,body:{}}})}),onSuccess:()=>i.invalidateQueries({queryKey:["sites",e,"content"]})})}function p(e,t){const i=u(),n=a();return c({mutationFn:s=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}/draft`,{method:"PUT",body:JSON.stringify(s)}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"content-detail",t]})}})}function F(e,t,i){const n=u();return r({queryKey:["sites",e,"content-published",t],queryFn:()=>n.apiFetch(`/v1/admin/sites/${e}/content/${t}/published`),enabled:!!e&&!!t&&i})}function S(e,t){const i=u(),n=a();return c({mutationFn:s=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}/publish`,{method:"POST",...s!=null?{body:JSON.stringify({publishDate:s})}:{}}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"content-detail",t]}),n.invalidateQueries({queryKey:["sites",e,"content-published",t]}),n.invalidateQueries({queryKey:["sites",e,"tags"]})}})}function $(e,t){const i=u(),n=a();return c({mutationFn:()=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}/unpublish`,{method:"POST"}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"content-detail",t]}),n.removeQueries({queryKey:["sites",e,"content-published",t]}),n.invalidateQueries({queryKey:["sites",e,"tags"]})}})}function K(e,t){const i=u(),n=a();return c({mutationFn:()=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}`,{method:"DELETE"}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"tags"]})}})}function b(e,t){const i=u(),n=a();return c({mutationFn:s=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}/publish-date`,{method:"PATCH",body:JSON.stringify({publishDate:s})}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"content-detail",t]})}})}function f(e,t){const i=u(),n=a();return c({mutationFn:s=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}/schedule`,{method:"POST",body:JSON.stringify({scheduleAt:s})}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"content-detail",t]})}})}function Q(e,t){const i=u(),n=a();return c({mutationFn:()=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}/unschedule`,{method:"POST"}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"content-detail",t]})}})}function g(e){const t=u(),i=a();return c({mutationFn:n=>Promise.allSettled(n.map(s=>t.apiFetch(`/v1/admin/sites/${e}/content/${s}/publish`,{method:"POST"}))),onSettled:()=>{i.invalidateQueries({queryKey:["sites",e,"content"]}),i.invalidateQueries({queryKey:["sites",e,"tags"]})}})}function h(e){const t=u(),i=a();return c({mutationFn:n=>Promise.allSettled(n.map(s=>t.apiFetch(`/v1/admin/sites/${e}/content/${s}/unpublish`,{method:"POST"}))),onSettled:()=>{i.invalidateQueries({queryKey:["sites",e,"content"]}),i.invalidateQueries({queryKey:["sites",e,"tags"]})}})}function P(e){const t=u(),i=a();return c({mutationFn:n=>Promise.allSettled(n.map(s=>t.apiFetch(`/v1/admin/sites/${e}/content/${s}`,{method:"DELETE"}))),onSettled:()=>{i.invalidateQueries({queryKey:["sites",e,"content"]}),i.invalidateQueries({queryKey:["sites",e,"tags"]})}})}function O(e,t){const i=u(),n=a();return c({mutationFn:()=>i.apiFetch(`/v1/admin/sites/${e}/content/${t}/discard`,{method:"POST"}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"content-detail",t]})}})}function C(e,t,i){const n=u();return r({queryKey:["sites",e,"content-detail",t,"versions",i],queryFn:()=>n.apiFetch(`/v1/admin/sites/${e}/content/${t}/versions/${i}`),enabled:!!e&&!!t&&!!i})}function T(e,t){const i=u();return r({queryKey:["sites",e,"content-detail",t,"versions"],queryFn:async()=>({items:(await i.apiFetch(`/v1/admin/sites/${e}/content/${t}/versions`)).versions??[]}),enabled:!!e&&!!t})}function U(e){const t=u(),i=a();return c({mutationFn:n=>t.apiFetch(`/v1/admin/sites/${e}/submissions/${n.collection}`,{method:"POST",body:JSON.stringify({fields:n.fields,...n.relationships&&Object.keys(n.relationships).length>0?{relationships:n.relationships}:{}})}),onSuccess:()=>i.invalidateQueries({queryKey:["sites",e,"content"]})})}function D(e,t){const i=u(),n=a();return c({mutationFn:s=>i.apiFetch(`/v1/admin/sites/${e}/submissions/${t}`,{method:"PUT",body:JSON.stringify({fields:s.fields,...s.relationships&&Object.keys(s.relationships).length>0?{relationships:s.relationships}:{}})}),onSuccess:()=>{n.invalidateQueries({queryKey:["sites",e,"content"]}),n.invalidateQueries({queryKey:["sites",e,"content-detail",t]})}})}function J(e,t,i){const n=u();return r({queryKey:["sites",e,"content-references",t],queryFn:()=>n.apiFetch(`/v1/admin/sites/${e}/content/${t}/references`),enabled:!!e&&!!t&&i})}export{g as a,h as b,P as c,y as d,q as e,p as f,F as g,C as h,T as i,m as j,S as k,$ as l,K as m,b as n,f as o,Q as p,O as q,J as r,U as s,D as t,v as u};
@@ -1 +1 @@
1
- import{r as o}from"./react-vendor-C2CvUxFh.js";import{u as m}from"./tanstack-Bs3zYPPV.js";import{e as f}from"./index-BA3y7HJs.js";function h(t,n){const[e,s]=o.useState(t);return o.useEffect(()=>{const i=setTimeout(()=>s(t),n);return()=>clearTimeout(i)},[t,n]),e}function b(t,n,e,s){const i=f(),u=e?.length===1?e[0]:void 0,r=new URLSearchParams;return n?(r.set("q",n),r.set("search","full")):r.set("limit","5"),u&&r.set("collection",u),s&&r.set("status",s),m({queryKey:["sites",t,"content-search",n,e??[],s??""],queryFn:async()=>{const a=await i.apiFetch(`/v1/admin/sites/${t}/content?${r.toString()}`);return e&&e.length>1?{...a,items:a.items.filter(c=>e.includes(c.collection))}:a},enabled:!!t,staleTime:3e4})}export{b as a,h as u};
1
+ import{r as o}from"./react-vendor-C2CvUxFh.js";import{u as m}from"./tanstack-Bs3zYPPV.js";import{e as f}from"./index-Ce5pmRMj.js";function h(t,n){const[e,s]=o.useState(t);return o.useEffect(()=>{const i=setTimeout(()=>s(t),n);return()=>clearTimeout(i)},[t,n]),e}function b(t,n,e,s){const i=f(),u=e?.length===1?e[0]:void 0,r=new URLSearchParams;return n?(r.set("q",n),r.set("search","full")):r.set("limit","5"),u&&r.set("collection",u),s&&r.set("status",s),m({queryKey:["sites",t,"content-search",n,e??[],s??""],queryFn:async()=>{const a=await i.apiFetch(`/v1/admin/sites/${t}/content?${r.toString()}`);return e&&e.length>1?{...a,items:a.items.filter(c=>e.includes(c.collection))}:a},enabled:!!t,staleTime:3e4})}export{b as a,h as u};
@@ -1 +1 @@
1
- import{a as o,b as d,u,d as c}from"./tanstack-Bs3zYPPV.js";import{e as a}from"./index-BA3y7HJs.js";function m(i,e){const n=a();return u({queryKey:["sites",i,"media","item",e],queryFn:()=>n.apiFetch(`/v1/admin/sites/${i}/media/${e}`),enabled:!!i&&!!e})}function f(i,e){const n=a(),t=new URLSearchParams;e?.tag&&t.set("tag",e.tag),e?.folderId!==void 0&&t.set("folderId",e.folderId),e?.q&&t.set("q",e.q),e?.sort&&t.set("sort",e.sort),e?.limit&&t.set("limit",String(e.limit));const s=t.toString();return u({queryKey:["sites",i,"media",e],queryFn:()=>n.apiFetch(`/v1/admin/sites/${i}/media${s?`?${s}`:""}`),enabled:!!i})}function y(i,e){const n=a();return c({queryKey:["sites",i,"media","infinite",e],queryFn:({pageParam:t})=>{const s=new URLSearchParams;return t&&s.set("cursor",t),e?.tag&&s.set("tag",e.tag),e?.folderId!==void 0&&s.set("folderId",e.folderId),e?.q&&s.set("q",e.q),e?.sort&&s.set("sort",e.sort),e?.limit&&s.set("limit",String(e.limit)),n.apiFetch(`/v1/admin/sites/${i}/media?${s.toString()}`)},initialPageParam:void 0,getNextPageParam:t=>t.hasMore?t.cursor??void 0:void 0,enabled:!!i})}function q(i){const e=a();return d({mutationFn:n=>e.apiFetch(`/v1/admin/sites/${i}/media/upload-url`,{method:"POST",body:JSON.stringify(n)})})}function F(i){const e=a(),n=o();return d({mutationFn:t=>e.apiFetch(`/v1/admin/sites/${i}/media/${t.mediaId}/complete`,{method:"POST",body:JSON.stringify({filename:t.filename,alt:t.alt,caption:t.caption,folderId:t.folderId})}),onSuccess:()=>n.invalidateQueries({queryKey:["sites",i,"media"]})})}function v(i,e){const n=a(),t=o();return d({mutationFn:s=>n.apiFetch(`/v1/admin/sites/${i}/media/${e}`,{method:"PUT",body:JSON.stringify(s)}),onSuccess:()=>t.invalidateQueries({queryKey:["sites",i,"media"]})})}function $(i,e){const n=a(),t=o();return d({mutationFn:()=>n.apiFetch(`/v1/admin/sites/${i}/media/${e}`,{method:"DELETE"}),onSuccess:()=>t.invalidateQueries({queryKey:["sites",i,"media"]})})}function S(i){const e=a();return u({queryKey:["sites",i,"media","folders"],queryFn:()=>e.apiFetch(`/v1/admin/sites/${i}/media/folders`),enabled:!!i})}function g(i){const e=a(),n=o();return d({mutationFn:t=>e.apiFetch(`/v1/admin/sites/${i}/media/folders`,{method:"POST",body:JSON.stringify({name:t})}),onSuccess:()=>n.invalidateQueries({queryKey:["sites",i,"media","folders"]})})}function b(i){const e=a(),n=o();return d({mutationFn:({folderId:t,name:s})=>e.apiFetch(`/v1/admin/sites/${i}/media/folders/${t}`,{method:"PUT",body:JSON.stringify({name:s})}),onSuccess:()=>n.invalidateQueries({queryKey:["sites",i,"media","folders"]})})}function h(i){const e=a(),n=o();return d({mutationFn:t=>e.apiFetch(`/v1/admin/sites/${i}/media/folders/${t}`,{method:"DELETE"}),onSuccess:()=>n.invalidateQueries({queryKey:["sites",i,"media","folders"]})})}function K(i){const e=a(),n=o();return d({mutationFn:t=>e.apiFetch(`/v1/admin/sites/${i}/media/bulk`,{method:"POST",body:JSON.stringify(t)}),onSuccess:()=>n.invalidateQueries({queryKey:["sites",i,"media"]})})}function M(i){const e=a();return d({mutationFn:({filename:n,size:t})=>e.apiFetch(`/v1/admin/sites/${i}/media/check-duplicate?filename=${encodeURIComponent(n)}&size=${t}`)})}function O(i,e){const n=a(),t=o();return d({mutationFn:s=>n.apiFetch(`/v1/admin/sites/${i}/media/${e}/save-transform`,{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>t.invalidateQueries({queryKey:["sites",i,"media"]})})}function P(i,e){const n=a();return u({queryKey:["sites",i,"media","usage",e],queryFn:()=>n.apiFetch(`/v1/admin/sites/${i}/media/${e}/usage`),enabled:!!i&&!!e})}export{v as a,$ as b,P as c,S as d,g as e,b as f,h as g,q as h,F as i,K as j,M as k,f as l,y as m,m as n,O as u};
1
+ import{a as o,b as d,u,d as c}from"./tanstack-Bs3zYPPV.js";import{e as a}from"./index-Ce5pmRMj.js";function m(i,e){const n=a();return u({queryKey:["sites",i,"media","item",e],queryFn:()=>n.apiFetch(`/v1/admin/sites/${i}/media/${e}`),enabled:!!i&&!!e})}function f(i,e){const n=a(),t=new URLSearchParams;e?.tag&&t.set("tag",e.tag),e?.folderId!==void 0&&t.set("folderId",e.folderId),e?.q&&t.set("q",e.q),e?.sort&&t.set("sort",e.sort),e?.limit&&t.set("limit",String(e.limit));const s=t.toString();return u({queryKey:["sites",i,"media",e],queryFn:()=>n.apiFetch(`/v1/admin/sites/${i}/media${s?`?${s}`:""}`),enabled:!!i})}function y(i,e){const n=a();return c({queryKey:["sites",i,"media","infinite",e],queryFn:({pageParam:t})=>{const s=new URLSearchParams;return t&&s.set("cursor",t),e?.tag&&s.set("tag",e.tag),e?.folderId!==void 0&&s.set("folderId",e.folderId),e?.q&&s.set("q",e.q),e?.sort&&s.set("sort",e.sort),e?.limit&&s.set("limit",String(e.limit)),n.apiFetch(`/v1/admin/sites/${i}/media?${s.toString()}`)},initialPageParam:void 0,getNextPageParam:t=>t.hasMore?t.cursor??void 0:void 0,enabled:!!i})}function q(i){const e=a();return d({mutationFn:n=>e.apiFetch(`/v1/admin/sites/${i}/media/upload-url`,{method:"POST",body:JSON.stringify(n)})})}function F(i){const e=a(),n=o();return d({mutationFn:t=>e.apiFetch(`/v1/admin/sites/${i}/media/${t.mediaId}/complete`,{method:"POST",body:JSON.stringify({filename:t.filename,alt:t.alt,caption:t.caption,folderId:t.folderId})}),onSuccess:()=>n.invalidateQueries({queryKey:["sites",i,"media"]})})}function v(i,e){const n=a(),t=o();return d({mutationFn:s=>n.apiFetch(`/v1/admin/sites/${i}/media/${e}`,{method:"PUT",body:JSON.stringify(s)}),onSuccess:()=>t.invalidateQueries({queryKey:["sites",i,"media"]})})}function $(i,e){const n=a(),t=o();return d({mutationFn:()=>n.apiFetch(`/v1/admin/sites/${i}/media/${e}`,{method:"DELETE"}),onSuccess:()=>t.invalidateQueries({queryKey:["sites",i,"media"]})})}function S(i){const e=a();return u({queryKey:["sites",i,"media","folders"],queryFn:()=>e.apiFetch(`/v1/admin/sites/${i}/media/folders`),enabled:!!i})}function g(i){const e=a(),n=o();return d({mutationFn:t=>e.apiFetch(`/v1/admin/sites/${i}/media/folders`,{method:"POST",body:JSON.stringify({name:t})}),onSuccess:()=>n.invalidateQueries({queryKey:["sites",i,"media","folders"]})})}function b(i){const e=a(),n=o();return d({mutationFn:({folderId:t,name:s})=>e.apiFetch(`/v1/admin/sites/${i}/media/folders/${t}`,{method:"PUT",body:JSON.stringify({name:s})}),onSuccess:()=>n.invalidateQueries({queryKey:["sites",i,"media","folders"]})})}function h(i){const e=a(),n=o();return d({mutationFn:t=>e.apiFetch(`/v1/admin/sites/${i}/media/folders/${t}`,{method:"DELETE"}),onSuccess:()=>n.invalidateQueries({queryKey:["sites",i,"media","folders"]})})}function K(i){const e=a(),n=o();return d({mutationFn:t=>e.apiFetch(`/v1/admin/sites/${i}/media/bulk`,{method:"POST",body:JSON.stringify(t)}),onSuccess:()=>n.invalidateQueries({queryKey:["sites",i,"media"]})})}function M(i){const e=a();return d({mutationFn:({filename:n,size:t})=>e.apiFetch(`/v1/admin/sites/${i}/media/check-duplicate?filename=${encodeURIComponent(n)}&size=${t}`)})}function O(i,e){const n=a(),t=o();return d({mutationFn:s=>n.apiFetch(`/v1/admin/sites/${i}/media/${e}/save-transform`,{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>t.invalidateQueries({queryKey:["sites",i,"media"]})})}function P(i,e){const n=a();return u({queryKey:["sites",i,"media","usage",e],queryFn:()=>n.apiFetch(`/v1/admin/sites/${i}/media/${e}/usage`),enabled:!!i&&!!e})}export{v as a,$ as b,P as c,S as d,g as e,b as f,h as g,q as h,F as i,K as j,M as k,f as l,y as m,m as n,O as u};
@@ -1 +1 @@
1
- import{r as o}from"./react-vendor-C2CvUxFh.js";import{bd as s,aJ as c}from"./index-BA3y7HJs.js";function f(e){const r=s(),i=c(),n=o.useRef("");o.useEffect(()=>{if(!r)return;const t=`${e.title}|${e.showBack??""}|${e.backTo??""}|${e.badge?.label??""}|${e.badge?.variant??""}|${e.subtitle??""}`;t!==n.current&&(n.current=t,r.setTitleBar(e))}),o.useEffect(()=>{if(e.title){const t=i?.site?.name||i?.site?.host;document.title=t?`${e.title} | ${t}`:e.title}return()=>{document.title="Headroom"}},[e.title,i?.site?.name,i?.site?.host])}export{f as u};
1
+ import{r as o}from"./react-vendor-C2CvUxFh.js";import{bd as s,aJ as c}from"./index-Ce5pmRMj.js";function f(e){const r=s(),i=c(),n=o.useRef("");o.useEffect(()=>{if(!r)return;const t=`${e.title}|${e.showBack??""}|${e.backTo??""}|${e.badge?.label??""}|${e.badge?.variant??""}|${e.subtitle??""}`;t!==n.current&&(n.current=t,r.setTitleBar(e))}),o.useEffect(()=>{if(e.title){const t=i?.site?.name||i?.site?.host;document.title=t?`${e.title} | ${t}`:e.title}return()=>{document.title="Headroom"}},[e.title,i?.site?.name,i?.site?.host])}export{f as u};
@@ -1 +1 @@
1
- import{u as c,a as r,b as a}from"./tanstack-Bs3zYPPV.js";import{e as n}from"./index-BA3y7HJs.js";function d(e,t){const s=n(),i=new URLSearchParams;t?.cursor&&i.set("cursor",t.cursor),t?.tag&&i.set("tag",t.tag),i.set("limit",String(t.limit));const u=i.toString();return c({queryKey:["sites",e,"site-users",u],queryFn:()=>s.apiFetch(`/v1/admin/sites/${e}/site-users${u?`?${u}`:""}`),enabled:!!e})}function y(e,t){const s=n();return c({queryKey:["sites",e,"site-users",t],queryFn:()=>s.apiFetch(`/v1/admin/sites/${e}/site-users/${t}`),enabled:!!e&&!!t})}function l(e){const t=n(),s=r();return a({mutationFn:i=>t.apiFetch(`/v1/admin/sites/${e}/site-users`,{method:"POST",body:JSON.stringify(i)}),onSuccess:()=>s.invalidateQueries({queryKey:["sites",e,"site-users"]})})}function S(e){const t=n(),s=r();return a({mutationFn:({userId:i,...u})=>t.apiFetch(`/v1/admin/sites/${e}/site-users/${i}`,{method:"PUT",body:JSON.stringify(u)}),onSuccess:()=>s.invalidateQueries({queryKey:["sites",e,"site-users"]})})}function f(e){const t=n(),s=r();return a({mutationFn:({userId:i,email:u})=>t.apiFetch(`/v1/admin/sites/${e}/site-users/${i}/email`,{method:"PUT",body:JSON.stringify({email:u})}),onSuccess:()=>s.invalidateQueries({queryKey:["sites",e,"site-users"]})})}function F(e){const t=n(),s=r();return a({mutationFn:i=>t.apiFetch(`/v1/admin/sites/${e}/site-users/${i}`,{method:"DELETE"}),onSuccess:()=>s.invalidateQueries({queryKey:["sites",e,"site-users"]})})}function q(e){const t=n();return c({queryKey:["sites",e,"auth"],queryFn:()=>t.apiFetch(`/v1/admin/sites/${e}/auth`),enabled:!!e})}function v(e){const t=n(),s=r();return a({mutationFn:i=>t.apiFetch(`/v1/admin/sites/${e}/auth`,{method:"PUT",body:JSON.stringify(i)}),onSuccess:()=>{s.invalidateQueries({queryKey:["sites",e,"auth"]}),s.invalidateQueries({queryKey:["sites",e]})}})}function h(e){const t=n();return a({mutationFn:s=>t.apiFetch(`/v1/admin/sites/${e}/auth/test-email`,{method:"POST",body:JSON.stringify({email:s})})})}function $(e){const t=n();return a({mutationFn:s=>t.apiFetch(`/v1/admin/sites/${e}/auth/latest-otp?email=${encodeURIComponent(s)}`)})}export{v as a,h as b,$ as c,d,l as e,F as f,y as g,S as h,f as i,q as u};
1
+ import{u as c,a as r,b as a}from"./tanstack-Bs3zYPPV.js";import{e as n}from"./index-Ce5pmRMj.js";function d(e,t){const s=n(),i=new URLSearchParams;t?.cursor&&i.set("cursor",t.cursor),t?.tag&&i.set("tag",t.tag),i.set("limit",String(t.limit));const u=i.toString();return c({queryKey:["sites",e,"site-users",u],queryFn:()=>s.apiFetch(`/v1/admin/sites/${e}/site-users${u?`?${u}`:""}`),enabled:!!e})}function y(e,t){const s=n();return c({queryKey:["sites",e,"site-users",t],queryFn:()=>s.apiFetch(`/v1/admin/sites/${e}/site-users/${t}`),enabled:!!e&&!!t})}function l(e){const t=n(),s=r();return a({mutationFn:i=>t.apiFetch(`/v1/admin/sites/${e}/site-users`,{method:"POST",body:JSON.stringify(i)}),onSuccess:()=>s.invalidateQueries({queryKey:["sites",e,"site-users"]})})}function S(e){const t=n(),s=r();return a({mutationFn:({userId:i,...u})=>t.apiFetch(`/v1/admin/sites/${e}/site-users/${i}`,{method:"PUT",body:JSON.stringify(u)}),onSuccess:()=>s.invalidateQueries({queryKey:["sites",e,"site-users"]})})}function f(e){const t=n(),s=r();return a({mutationFn:({userId:i,email:u})=>t.apiFetch(`/v1/admin/sites/${e}/site-users/${i}/email`,{method:"PUT",body:JSON.stringify({email:u})}),onSuccess:()=>s.invalidateQueries({queryKey:["sites",e,"site-users"]})})}function F(e){const t=n(),s=r();return a({mutationFn:i=>t.apiFetch(`/v1/admin/sites/${e}/site-users/${i}`,{method:"DELETE"}),onSuccess:()=>s.invalidateQueries({queryKey:["sites",e,"site-users"]})})}function q(e){const t=n();return c({queryKey:["sites",e,"auth"],queryFn:()=>t.apiFetch(`/v1/admin/sites/${e}/auth`),enabled:!!e})}function v(e){const t=n(),s=r();return a({mutationFn:i=>t.apiFetch(`/v1/admin/sites/${e}/auth`,{method:"PUT",body:JSON.stringify(i)}),onSuccess:()=>{s.invalidateQueries({queryKey:["sites",e,"auth"]}),s.invalidateQueries({queryKey:["sites",e]})}})}function h(e){const t=n();return a({mutationFn:s=>t.apiFetch(`/v1/admin/sites/${e}/auth/test-email`,{method:"POST",body:JSON.stringify({email:s})})})}function $(e){const t=n();return a({mutationFn:s=>t.apiFetch(`/v1/admin/sites/${e}/auth/latest-otp?email=${encodeURIComponent(s)}`)})}export{v as a,h as b,$ as c,d,l as e,F as f,y as g,S as h,f as i,q as u};
@@ -1 +1 @@
1
- import{u as r,a as i,b as u}from"./tanstack-Bs3zYPPV.js";import{e as a}from"./index-BA3y7HJs.js";function m(e){const t=a();return r({queryKey:["sites",e,"tags"],queryFn:async()=>(await t.apiFetch(`/v1/admin/sites/${e}/tags`)).tags,enabled:!!e})}function y(e){const t=a(),s=i();return u({mutationFn:n=>t.apiFetch(`/v1/admin/sites/${e}/tags`,{method:"POST",body:JSON.stringify({tag:n})}),onSuccess:()=>s.invalidateQueries({queryKey:["sites",e,"tags"]})})}function d(e){const t=a(),s=i();return u({mutationFn:n=>t.apiFetch(`/v1/admin/sites/${e}/tags/${encodeURIComponent(n)}`,{method:"DELETE"}),onSuccess:()=>s.invalidateQueries({queryKey:["sites",e,"tags"]})})}export{y as a,d as b,m as u};
1
+ import{u as r,a as i,b as u}from"./tanstack-Bs3zYPPV.js";import{e as a}from"./index-Ce5pmRMj.js";function m(e){const t=a();return r({queryKey:["sites",e,"tags"],queryFn:async()=>(await t.apiFetch(`/v1/admin/sites/${e}/tags`)).tags,enabled:!!e})}function y(e){const t=a(),s=i();return u({mutationFn:n=>t.apiFetch(`/v1/admin/sites/${e}/tags`,{method:"POST",body:JSON.stringify({tag:n})}),onSuccess:()=>s.invalidateQueries({queryKey:["sites",e,"tags"]})})}function d(e){const t=a(),s=i();return u({mutationFn:n=>t.apiFetch(`/v1/admin/sites/${e}/tags/${encodeURIComponent(n)}`,{method:"DELETE"}),onSuccess:()=>s.invalidateQueries({queryKey:["sites",e,"tags"]})})}export{y as a,d as b,m as u};
@@ -1 +1 @@
1
- import{u,a,b as o}from"./tanstack-Bs3zYPPV.js";import{e as n}from"./index-BA3y7HJs.js";function y(e){const s=n();return u({queryKey:["sites",e,"webhooks"],queryFn:async()=>({items:(await s.apiFetch(`/v1/admin/sites/${e}/webhooks`)).webhooks}),enabled:!!e})}function d(e,s){const t=n();return u({queryKey:["sites",e,"webhooks",s],queryFn:()=>t.apiFetch(`/v1/admin/sites/${e}/webhooks/${s}`),enabled:!!e&&!!s})}function m(e){const s=n(),t=a();return o({mutationFn:i=>s.apiFetch(`/v1/admin/sites/${e}/webhooks`,{method:"POST",body:JSON.stringify(i)}),onSuccess:()=>t.invalidateQueries({queryKey:["sites",e,"webhooks"]})})}function h(e,s){const t=n(),i=a();return o({mutationFn:c=>t.apiFetch(`/v1/admin/sites/${e}/webhooks/${s}`,{method:"PUT",body:JSON.stringify(c)}),onSuccess:()=>{i.invalidateQueries({queryKey:["sites",e,"webhooks"]})}})}function l(e,s){const t=n(),i=a();return o({mutationFn:()=>t.apiFetch(`/v1/admin/sites/${e}/webhooks/${s}`,{method:"DELETE"}),onSuccess:()=>i.invalidateQueries({queryKey:["sites",e,"webhooks"]})})}function k(e,s){const t=n();return o({mutationFn:()=>t.apiFetch(`/v1/admin/sites/${e}/webhooks/${s}/test`,{method:"POST"})})}function v(e,s){const t=n();return u({queryKey:["sites",e,"webhooks",s,"deliveries"],queryFn:()=>t.apiFetch(`/v1/admin/sites/${e}/webhooks/${s}/deliveries`),enabled:!!e&&!!s})}export{d as a,m as b,h as c,l as d,k as e,v as f,y as u};
1
+ import{u,a,b as o}from"./tanstack-Bs3zYPPV.js";import{e as n}from"./index-Ce5pmRMj.js";function y(e){const s=n();return u({queryKey:["sites",e,"webhooks"],queryFn:async()=>({items:(await s.apiFetch(`/v1/admin/sites/${e}/webhooks`)).webhooks}),enabled:!!e})}function d(e,s){const t=n();return u({queryKey:["sites",e,"webhooks",s],queryFn:()=>t.apiFetch(`/v1/admin/sites/${e}/webhooks/${s}`),enabled:!!e&&!!s})}function m(e){const s=n(),t=a();return o({mutationFn:i=>s.apiFetch(`/v1/admin/sites/${e}/webhooks`,{method:"POST",body:JSON.stringify(i)}),onSuccess:()=>t.invalidateQueries({queryKey:["sites",e,"webhooks"]})})}function h(e,s){const t=n(),i=a();return o({mutationFn:c=>t.apiFetch(`/v1/admin/sites/${e}/webhooks/${s}`,{method:"PUT",body:JSON.stringify(c)}),onSuccess:()=>{i.invalidateQueries({queryKey:["sites",e,"webhooks"]})}})}function l(e,s){const t=n(),i=a();return o({mutationFn:()=>t.apiFetch(`/v1/admin/sites/${e}/webhooks/${s}`,{method:"DELETE"}),onSuccess:()=>i.invalidateQueries({queryKey:["sites",e,"webhooks"]})})}function k(e,s){const t=n();return o({mutationFn:()=>t.apiFetch(`/v1/admin/sites/${e}/webhooks/${s}/test`,{method:"POST"})})}function v(e,s){const t=n();return u({queryKey:["sites",e,"webhooks",s,"deliveries"],queryFn:()=>t.apiFetch(`/v1/admin/sites/${e}/webhooks/${s}/deliveries`),enabled:!!e&&!!s})}export{d as a,m as b,h as c,l as d,k as e,v as f,y as u};
Binary file
Binary file
Binary file
Binary file
Binary file
package/admin/index.html CHANGED
@@ -11,11 +11,11 @@
11
11
  <meta name="apple-mobile-web-app-title" content="Headroom" />
12
12
  <link rel="apple-touch-icon" href="/icons/icon-180x180.png" />
13
13
  <title>Headroom</title>
14
- <script type="module" crossorigin src="/assets/index-BA3y7HJs.js"></script>
14
+ <script type="module" crossorigin src="/assets/index-Ce5pmRMj.js"></script>
15
15
  <link rel="modulepreload" crossorigin href="/assets/react-vendor-C2CvUxFh.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/tanstack-Bs3zYPPV.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/radix-C5ZmWuuL.js">
18
- <link rel="stylesheet" crossorigin href="/assets/index-c7UygSvP.css">
18
+ <link rel="stylesheet" crossorigin href="/assets/index-BB9Syqw2.css">
19
19
  <link rel="manifest" href="/manifest.webmanifest"></head>
20
20
  <body>
21
21
  <script>
package/admin/sw.js CHANGED
@@ -1 +1 @@
1
- if(!self.define){let s,e={};const i=(i,l)=>(i=new URL(i+".js",l).href,e[i]||new Promise(e=>{if("document"in self){const s=document.createElement("script");s.src=i,s.onload=e,document.head.appendChild(s)}else s=i,importScripts(i),e()}).then(()=>{let s=e[i];if(!s)throw new Error(`Module ${i} didn’t register its module`);return s}));self.define=(l,n)=>{const r=s||("document"in self?document.currentScript.src:"")||location.href;if(e[r])return;let u={};const a=s=>i(s,r),o={module:{uri:r},exports:u,require:a};e[r]=Promise.all(l.map(s=>o[s]||a(s))).then(s=>(n(...s),u))}}define(["./workbox-7d58179f"],function(s){"use strict";self.skipWaiting(),s.clientsClaim(),s.precacheAndRoute([{url:"index.html",revision:"60e0442638db6d5d7887d84abf92ebf5"},{url:"favicon-32x32.png",revision:"b3444a97a94af8708e3af842395316b9"},{url:"favicon-16x16.png",revision:"6ac0bbd011d9edf37858e0459d580887"},{url:"icons/maskable-icon-512x512.png",revision:"d6913dcae3805185fad0790a20eae097"},{url:"icons/icon-512x512.png",revision:"ed25f5ccf87506782ee42be66318531b"},{url:"icons/icon-192x192.png",revision:"578d0c18e97882eaae9436f3bdd3c446"},{url:"icons/icon-180x180.png",revision:"8a45d7715a9f2f3a8b929a791b4a67e1"},{url:"assets/yjs-tXBm_srz.js",revision:null},{url:"assets/workbox-window.prod.es5-BIl4cyR9.js",revision:null},{url:"assets/useWebhooks-BAB-3sLa.js",revision:null},{url:"assets/useTags-ybsMbCst.js",revision:null},{url:"assets/useSiteUsers-CKtC_8Jc.js",revision:null},{url:"assets/usePageTitle-DYvuJQp6.js",revision:null},{url:"assets/useMedia-Cu5N4rY8.js",revision:null},{url:"assets/useFilterParams-DYdEuWPE.js",revision:null},{url:"assets/useContentSearch-_bwacEth.js",revision:null},{url:"assets/useContent-CW0tm0FY.js",revision:null},{url:"assets/useAdminResolver-Bljb4XGQ.js",revision:null},{url:"assets/textarea-CpDSUg2s.js",revision:null},{url:"assets/tanstack-Bs3zYPPV.js",revision:null},{url:"assets/table-Dk7eeOt2.js",revision:null},{url:"assets/sortable.esm-qVEMoaTg.js",revision:null},{url:"assets/serializeToText-Zin3gYPm.js",revision:null},{url:"assets/select-dX9e6VDt.js",revision:null},{url:"assets/react-vendor-C2CvUxFh.js",revision:null},{url:"assets/radix-C5ZmWuuL.js",revision:null},{url:"assets/popover-BFw_h3j6.js",revision:null},{url:"assets/native-48B9X9Wg.js",revision:null},{url:"assets/module-RjUF93sV.js",revision:null},{url:"assets/media-url-DIg_vSyf.js",revision:null},{url:"assets/lib-BrI1UB_t.js",revision:null},{url:"assets/index-c7UygSvP.css",revision:null},{url:"assets/index-BA3y7HJs.js",revision:null},{url:"assets/format-C88SDH8g.js",revision:null},{url:"assets/core.esm-DdQHdRkd.js",revision:null},{url:"assets/contentStatus-CkPi9Dh6.js",revision:null},{url:"assets/command-CdzYw11U.js",revision:null},{url:"assets/collapsible-D3d29uJp.js",revision:null},{url:"assets/checkbox-DEgzM8H9.js",revision:null},{url:"assets/card-CZTHR2Qa.js",revision:null},{url:"assets/WebhooksPage-CASjmlPN.js",revision:null},{url:"assets/WebhookEditPage-KeS8hmdW.js",revision:null},{url:"assets/UsersPage-CnQAOOGF.js",revision:null},{url:"assets/TagsPage-BZzDvcKa.js",revision:null},{url:"assets/TagInput-d-Hw1fkL.js",revision:null},{url:"assets/SubmissionListPage-DA-8deUy.js",revision:null},{url:"assets/SubmissionEditPage-C-ykTI2t.js",revision:null},{url:"assets/SubmissionDetailPage-ktmzzOE1.js",revision:null},{url:"assets/SitesPage-BefZeWuJ.js",revision:null},{url:"assets/SiteUsersPage-iVXPCBPe.js",revision:null},{url:"assets/SiteUserEditPage-DroUTii9.js",revision:null},{url:"assets/SiteSettingsPage-nBT7NzkA.js",revision:null},{url:"assets/RelationshipPicker-Dv7GaLcU.js",revision:null},{url:"assets/Pagination-CuHwUPHi.js",revision:null},{url:"assets/MediaPage-DfPQBmNf.css",revision:null},{url:"assets/MediaPage-C84p9d1U.js",revision:null},{url:"assets/MediaField-B-Cz8TlK.js",revision:null},{url:"assets/LoginPage-Bi7TBzK4.js",revision:null},{url:"assets/IconPicker-BrgSAsa_.js",revision:null},{url:"assets/FloatingComposerController-D4uLQfUX-C0Lhbmda.js",revision:null},{url:"assets/FilterBar-kFcOLffg.js",revision:null},{url:"assets/FieldRenderer-wE-mtqZB.js",revision:null},{url:"assets/CustomBlockPreview-Cs9bFDh4.js",revision:null},{url:"assets/ContentListPage-BDMx7pWb.js",revision:null},{url:"assets/ContentField-D04Uo1Ov.js",revision:null},{url:"assets/ContentEditPage-WkSbCnnG.js",revision:null},{url:"assets/ContentCreatePage-DlgxamOe.js",revision:null},{url:"assets/CollectionsPage-BQmGXpvW.js",revision:null},{url:"assets/CollectionEditPage-y8t0ZO89.js",revision:null},{url:"assets/BulkActionBar--35xjnOP.js",revision:null},{url:"assets/BlockTypesPage-D8Me6OeX.js",revision:null},{url:"assets/BlockTypeEditPage-CY0gCPei.js",revision:null},{url:"assets/BlockEditor-ClskiZoX.js",revision:null},{url:"assets/BlockEditor-CQpF8tYb.css",revision:null},{url:"assets/AuditPage-B5GGFWGG.js",revision:null},{url:"assets/ApiKeysPage-BBW4ATBx.js",revision:null},{url:"assets/AllContentPage-1gXe2OC7.js",revision:null},{url:"assets/AdminsPage-BIWASote.js",revision:null},{url:"icons/icon-180x180.png",revision:"8a45d7715a9f2f3a8b929a791b4a67e1"},{url:"icons/icon-192x192.png",revision:"578d0c18e97882eaae9436f3bdd3c446"},{url:"icons/icon-512x512.png",revision:"ed25f5ccf87506782ee42be66318531b"},{url:"icons/maskable-icon-512x512.png",revision:"d6913dcae3805185fad0790a20eae097"},{url:"manifest.webmanifest",revision:"be12a951409033222ff660a548620488"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("index.html"),{denylist:[/^\/v1\//]})),s.registerRoute(({url:s})=>s.pathname.startsWith("/v1/admin/"),new s.NetworkFirst({cacheName:"api-cache",networkTimeoutSeconds:10,plugins:[new s.ExpirationPlugin({maxEntries:200,maxAgeSeconds:3600}),new s.CacheableResponsePlugin({statuses:[200]})]}),"GET"),s.registerRoute(({request:s})=>"image"===s.destination,new s.CacheFirst({cacheName:"media-cache",plugins:[new s.ExpirationPlugin({maxEntries:500,maxAgeSeconds:604800}),new s.CacheableResponsePlugin({statuses:[200]})]}),"GET")});
1
+ if(!self.define){let s,e={};const i=(i,l)=>(i=new URL(i+".js",l).href,e[i]||new Promise(e=>{if("document"in self){const s=document.createElement("script");s.src=i,s.onload=e,document.head.appendChild(s)}else s=i,importScripts(i),e()}).then(()=>{let s=e[i];if(!s)throw new Error(`Module ${i} didn’t register its module`);return s}));self.define=(l,n)=>{const r=s||("document"in self?document.currentScript.src:"")||location.href;if(e[r])return;let u={};const a=s=>i(s,r),o={module:{uri:r},exports:u,require:a};e[r]=Promise.all(l.map(s=>o[s]||a(s))).then(s=>(n(...s),u))}}define(["./workbox-7d58179f"],function(s){"use strict";self.skipWaiting(),s.clientsClaim(),s.precacheAndRoute([{url:"index.html",revision:"4fb746b15f632e163e4d5835bf72d37d"},{url:"favicon-32x32.png",revision:"66799e8a4d619473d6d5b9e3f99f1eb4"},{url:"favicon-16x16.png",revision:"2e31d947bf6f9868849eec8c65be4eac"},{url:"icons/maskable-icon-512x512.png",revision:"6d3b72c5991408caac100229c0c1b054"},{url:"icons/icon-512x512.png",revision:"7a67637e8a879e7cfa4f2f3e1737782a"},{url:"icons/icon-192x192.png",revision:"375b88bd595ea9a954684dd32e571606"},{url:"icons/icon-180x180.png",revision:"66fb27eca516778823daa4a4acfc4096"},{url:"assets/yjs-tXBm_srz.js",revision:null},{url:"assets/workbox-window.prod.es5-BIl4cyR9.js",revision:null},{url:"assets/useWebhooks-BvZjUJkJ.js",revision:null},{url:"assets/useTags-B-HgMVwo.js",revision:null},{url:"assets/useSiteUsers-DIaqgNSp.js",revision:null},{url:"assets/usePageTitle-C1r1-C00.js",revision:null},{url:"assets/useMedia-ae3s_ajC.js",revision:null},{url:"assets/useFilterParams-DYdEuWPE.js",revision:null},{url:"assets/useContentSearch-B3aTjuCu.js",revision:null},{url:"assets/useContent-Bs7nel7C.js",revision:null},{url:"assets/useAdminResolver-BJNPz3OG.js",revision:null},{url:"assets/textarea-6fq0R6VV.js",revision:null},{url:"assets/tanstack-Bs3zYPPV.js",revision:null},{url:"assets/table-_3bMY0_z.js",revision:null},{url:"assets/sortable.esm-qVEMoaTg.js",revision:null},{url:"assets/serializeToText-2VrsuRUh.js",revision:null},{url:"assets/select-CrRhFGIi.js",revision:null},{url:"assets/react-vendor-C2CvUxFh.js",revision:null},{url:"assets/radix-C5ZmWuuL.js",revision:null},{url:"assets/popover-CzaQYEEP.js",revision:null},{url:"assets/native-48B9X9Wg.js",revision:null},{url:"assets/module-RjUF93sV.js",revision:null},{url:"assets/media-url-DdCoIedP.js",revision:null},{url:"assets/lib-BrI1UB_t.js",revision:null},{url:"assets/index-Ce5pmRMj.js",revision:null},{url:"assets/index-BB9Syqw2.css",revision:null},{url:"assets/format-C88SDH8g.js",revision:null},{url:"assets/core.esm-DdQHdRkd.js",revision:null},{url:"assets/contentStatus-CkPi9Dh6.js",revision:null},{url:"assets/command-Bfmj0MEL.js",revision:null},{url:"assets/collapsible-D3d29uJp.js",revision:null},{url:"assets/checkbox-DVJcwUt1.js",revision:null},{url:"assets/card-C9hfyHXf.js",revision:null},{url:"assets/WebhooksPage-BY7AaiGr.js",revision:null},{url:"assets/WebhookEditPage-D5xgi56h.js",revision:null},{url:"assets/UsersPage-BpIRorJ1.js",revision:null},{url:"assets/TagsPage-BEO5AwCv.js",revision:null},{url:"assets/TagInput-57c4DG1w.js",revision:null},{url:"assets/SubmissionListPage-DBxNEvde.js",revision:null},{url:"assets/SubmissionEditPage-DjLXHjWU.js",revision:null},{url:"assets/SubmissionDetailPage-BSUR685F.js",revision:null},{url:"assets/SitesPage-rfWWE0yK.js",revision:null},{url:"assets/SiteUsersPage-BYVduiqs.js",revision:null},{url:"assets/SiteUserEditPage-D5VaQ1Xq.js",revision:null},{url:"assets/SiteSettingsPage-6NvH7CiQ.js",revision:null},{url:"assets/RelationshipPicker-B3Ftmqxp.js",revision:null},{url:"assets/Pagination-Df9nQ7Z0.js",revision:null},{url:"assets/MediaPage-QvMaH2YJ.js",revision:null},{url:"assets/MediaPage-DfPQBmNf.css",revision:null},{url:"assets/MediaField-CxccCFGQ.js",revision:null},{url:"assets/LoginPage-D9ZsGLIi.js",revision:null},{url:"assets/IconPicker-CpIgiQTC.js",revision:null},{url:"assets/FloatingComposerController-D4uLQfUX-BMIvFCoE.js",revision:null},{url:"assets/FilterBar-BZoa63zh.js",revision:null},{url:"assets/FieldRenderer-DiOKvkWV.js",revision:null},{url:"assets/CustomBlockPreview-DNnTFM0z.js",revision:null},{url:"assets/ContentListPage-BAKDn1Xy.js",revision:null},{url:"assets/ContentField-pilCbdnA.js",revision:null},{url:"assets/ContentEditPage-xczr4d_h.js",revision:null},{url:"assets/ContentCreatePage-LeQjahp_.js",revision:null},{url:"assets/CollectionsPage-CgtOloa1.js",revision:null},{url:"assets/CollectionEditPage-lOb4hEZy.js",revision:null},{url:"assets/BulkActionBar-BxdfUSrN.js",revision:null},{url:"assets/BlockTypesPage-Dhkho6T_.js",revision:null},{url:"assets/BlockTypeEditPage-C2evAESK.js",revision:null},{url:"assets/BlockEditor-CQpF8tYb.css",revision:null},{url:"assets/BlockEditor-3wnisTOZ.js",revision:null},{url:"assets/AuditPage-BN9yNsxh.js",revision:null},{url:"assets/ApiKeysPage-DEAa8eyC.js",revision:null},{url:"assets/AllContentPage-BtObN6oy.js",revision:null},{url:"assets/AdminsPage-BnzH9TL3.js",revision:null},{url:"icons/icon-180x180.png",revision:"66fb27eca516778823daa4a4acfc4096"},{url:"icons/icon-192x192.png",revision:"375b88bd595ea9a954684dd32e571606"},{url:"icons/icon-512x512.png",revision:"7a67637e8a879e7cfa4f2f3e1737782a"},{url:"icons/maskable-icon-512x512.png",revision:"6d3b72c5991408caac100229c0c1b054"},{url:"manifest.webmanifest",revision:"be12a951409033222ff660a548620488"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("index.html"),{denylist:[/^\/v1\//]})),s.registerRoute(({url:s})=>s.pathname.startsWith("/v1/admin/"),new s.NetworkFirst({cacheName:"api-cache",networkTimeoutSeconds:10,plugins:[new s.ExpirationPlugin({maxEntries:200,maxAgeSeconds:3600}),new s.CacheableResponsePlugin({statuses:[200]})]}),"GET"),s.registerRoute(({request:s})=>"image"===s.destination,new s.CacheFirst({cacheName:"media-cache",plugins:[new s.ExpirationPlugin({maxEntries:500,maxAgeSeconds:604800}),new s.CacheableResponsePlugin({statuses:[200]})]}),"GET")});
@@ -6,12 +6,14 @@
6
6
  * Package mode: pre-built files with placeholder substitution.
7
7
  */
8
8
  import type { ApiResources } from "./api.js";
9
- import type { CdnResources } from "./cdn.js";
9
+ import type { ApiCdnResources } from "./cdn-api.js";
10
+ import type { MediaCdnResources } from "./cdn-media.js";
10
11
  import type { AuthResources } from "./auth.js";
11
12
  import type { CollaborationResources } from "./collaboration.js";
12
13
  export interface AdminSiteArgs {
13
14
  api: ApiResources;
14
- cdn: CdnResources;
15
+ apiCdn: ApiCdnResources;
16
+ mediaCdn: MediaCdnResources;
15
17
  auth: AuthResources;
16
18
  collab: CollaborationResources;
17
19
  pkgRoot: string;
@@ -1 +1 @@
1
- {"version":3,"file":"admin-site.d.ts","sourceRoot":"","sources":["../src/admin-site.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,YAAY,CAAC;IAClB,GAAG,EAAE,YAAY,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE;QACJ,qDAAqD;QACrD,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa;;;EAsFhE;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"admin-site.d.ts","sourceRoot":"","sources":["../src/admin-site.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,YAAY,CAAC;IAClB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE;QACJ,qDAAqD;QACrD,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa;;;EAsFhE;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -8,7 +8,7 @@
8
8
  import fs from "fs";
9
9
  import path from "path";
10
10
  export function createAdminSite(name, args) {
11
- const { api, cdn, auth, collab } = args;
11
+ const { api, mediaCdn, auth, collab } = args;
12
12
  // Default ON for backward compat — only emit "false" when explicitly
13
13
  // disabled so existing stages without the flag set don't change behaviour.
14
14
  const collabEnabledStr = args.collabEnabled === false ? "false" : "true";
@@ -31,7 +31,7 @@ export function createAdminSite(name, args) {
31
31
  },
32
32
  environment: {
33
33
  VITE_API_URL: api.api.url,
34
- VITE_CDN_URL: cdn.url,
34
+ VITE_MEDIA_URL: mediaCdn.url,
35
35
  VITE_USER_POOL_ID: auth.userPool.id,
36
36
  VITE_USER_POOL_CLIENT_ID: auth.userPoolClient.id,
37
37
  VITE_AWS_REGION: aws.getRegionOutput().name,
@@ -59,7 +59,7 @@ export function createAdminSite(name, args) {
59
59
  const path = require('path');
60
60
  const replacements = {
61
61
  '__HEADROOM_API_URL__': '${api.api.url}',
62
- '__HEADROOM_CDN_URL__': '${cdn.url}',
62
+ '__HEADROOM_MEDIA_URL__': '${mediaCdn.url}',
63
63
  '__HEADROOM_USER_POOL_ID__': '${auth.userPool.id}',
64
64
  '__HEADROOM_USER_POOL_CLIENT_ID__': '${auth.userPoolClient.id}',
65
65
  '__HEADROOM_AWS_REGION__': '${aws.getRegionOutput().name}',
@@ -1 +1 @@
1
- {"version":3,"file":"admin-site.js","sourceRoot":"","sources":["../src/admin-site.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAgCxB,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,IAAmB;IAC/D,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxC,qEAAqE;IACrE,2EAA2E;IAC3E,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAEzE,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM;QAC9B,CAAC,CAAC;YACE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;SACjC;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,gDAAgD;QAChD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,OAAO,EAAE;YAClD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS;YACxB,GAAG,EAAE;gBACH,OAAO,EAAE,gBAAgB;aAC1B;YACD,KAAK,EAAE;gBACL,OAAO,EAAE,YAAY;gBACrB,MAAM,EAAE,MAAM;aACf;YACD,WAAW,EAAE;gBACX,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG;gBACzB,YAAY,EAAE,GAAG,CAAC,GAAG;gBACrB,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACnC,wBAAwB,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE;gBAChD,eAAe,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC,IAAI;gBAC3C,kBAAkB,EAAE,MAAM,CAAC,KAAK;gBAChC,mBAAmB,EAAE,gBAAgB;aACtC;YACD,MAAM,EAAE,YAAY;SACrB,CAAC,CAAC;QAEH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,CAAC;IAED,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,+DAA+D;IAC/D,MAAM,OAAO,GAAG,iBAAiB,CAAC;IAElC,oDAAoD;IACpD,0CAA0C;IAC1C,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,OAAO,EAAE;QAClD,IAAI,EAAE,OAAO;QACb,KAAK,EAAE;YACL,8DAA8D;YAC9D,OAAO,EAAE,YAAY,CAAA;;;;qCAIU,GAAG,CAAC,GAAG,CAAC,GAAG;qCACX,GAAG,CAAC,GAAG;0CACF,IAAI,CAAC,QAAQ,CAAC,EAAE;iDACT,IAAI,CAAC,cAAc,CAAC,EAAE;wCAC/B,GAAG,CAAC,eAAe,EAAE,CAAC,IAAI;2CACvB,MAAM,CAAC,KAAK;4CACX,gBAAgB;;;;;;;;;;;;;;;;QAgBpD;YACF,MAAM,EAAE,GAAG;SACZ;QACD,MAAM,EAAE,YAAY;KACrB,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"admin-site.js","sourceRoot":"","sources":["../src/admin-site.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAkCxB,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,IAAmB;IAC/D,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7C,qEAAqE;IACrE,2EAA2E;IAC3E,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAEzE,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM;QAC9B,CAAC,CAAC;YACE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;SACjC;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,gDAAgD;QAChD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,OAAO,EAAE;YAClD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS;YACxB,GAAG,EAAE;gBACH,OAAO,EAAE,gBAAgB;aAC1B;YACD,KAAK,EAAE;gBACL,OAAO,EAAE,YAAY;gBACrB,MAAM,EAAE,MAAM;aACf;YACD,WAAW,EAAE;gBACX,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG;gBACzB,cAAc,EAAE,QAAQ,CAAC,GAAG;gBAC5B,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACnC,wBAAwB,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE;gBAChD,eAAe,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC,IAAI;gBAC3C,kBAAkB,EAAE,MAAM,CAAC,KAAK;gBAChC,mBAAmB,EAAE,gBAAgB;aACtC;YACD,MAAM,EAAE,YAAY;SACrB,CAAC,CAAC;QAEH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,CAAC;IAED,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,+DAA+D;IAC/D,MAAM,OAAO,GAAG,iBAAiB,CAAC;IAElC,oDAAoD;IACpD,0CAA0C;IAC1C,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,OAAO,EAAE;QAClD,IAAI,EAAE,OAAO;QACb,KAAK,EAAE;YACL,8DAA8D;YAC9D,OAAO,EAAE,YAAY,CAAA;;;;qCAIU,GAAG,CAAC,GAAG,CAAC,GAAG;uCACT,QAAQ,CAAC,GAAG;0CACT,IAAI,CAAC,QAAQ,CAAC,EAAE;iDACT,IAAI,CAAC,cAAc,CAAC,EAAE;wCAC/B,GAAG,CAAC,eAAe,EAAE,CAAC,IAAI;2CACvB,MAAM,CAAC,KAAK;4CACX,gBAAgB;;;;;;;;;;;;;;;;QAgBpD;YACF,MAAM,EAAE,GAAG;SACZ;QACD,MAAM,EAAE,YAAY;KACrB,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACjC,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * API CDN Infrastructure
3
+ *
4
+ * CloudFront distribution for the Headroom API only — `/v1/*` and `/health`.
5
+ * Edge-auth function + KVS association live here. No `/media/*` or `/img/*`
6
+ * behaviors; those are served by the separate media CDN (see cdn-media.ts).
7
+ */
8
+ import type { StorageResources } from "./storage.js";
9
+ import type { ApiResources } from "./api.js";
10
+ export interface ApiCdnArgs {
11
+ api: ApiResources;
12
+ kvs: StorageResources["kvs"];
13
+ priceClass?: "PriceClass_100" | "PriceClass_200" | "PriceClass_All";
14
+ apiCacheTtl?: number;
15
+ domain?: {
16
+ name: string;
17
+ certificateArn: string;
18
+ };
19
+ }
20
+ export declare function createApiCdn(name: string, args: ApiCdnArgs): {
21
+ distribution: aws.cloudfront.Distribution;
22
+ url: PulumiOutput<string>;
23
+ };
24
+ export type ApiCdnResources = ReturnType<typeof createApiCdn>;
25
+ //# sourceMappingURL=cdn-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdn-api.d.ts","sourceRoot":"","sources":["../src/cdn-api.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,YAAY,CAAC;IAClB,GAAG,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC7B,UAAU,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;;;EAob1D;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC"}
@@ -1,11 +1,12 @@
1
1
  /**
2
- * CDN Infrastructure
2
+ * API CDN Infrastructure
3
3
  *
4
- * CloudFront distribution with edge authentication, version-based caching,
5
- * direct S3 media serving, and Sharp Lambda image transforms.
4
+ * CloudFront distribution for the Headroom API only — `/v1/*` and `/health`.
5
+ * Edge-auth function + KVS association live here. No `/media/*` or `/img/*`
6
+ * behaviors; those are served by the separate media CDN (see cdn-media.ts).
6
7
  */
7
- export function createCdn(name, args) {
8
- const { api, image, contentBucket, kvs } = args;
8
+ export function createApiCdn(name, args) {
9
+ const { api, kvs } = args;
9
10
  const apiCacheTtl = args.apiCacheTtl ?? 3600;
10
11
  // Extract KVS UUID from ARN (cf.kvs() needs the UUID, not the name)
11
12
  const kvsUuid = kvs.arn.apply((arn) => arn.split("/").pop());
@@ -87,32 +88,6 @@ export function createCdn(name, args) {
87
88
  return request;
88
89
  }
89
90
  `,
90
- });
91
- // =========================================================================
92
- // CloudFront Function: Media Rewrite
93
- // =========================================================================
94
- const mediaRewriteFunction = new aws.cloudfront.Function(`${name}MediaRewrite`, {
95
- name: $interpolate `${$app.name}-${$app.stage}-media-rewrite`,
96
- runtime: "cloudfront-js-2.0",
97
- publish: true,
98
- code: `
99
- function handler(event) {
100
- var request = event.request;
101
- var uri = request.uri;
102
-
103
- // Rewrite /media/{site}/{mediaId}/{file} → /sites/{site}/media/{mediaId}/{file}
104
- var parts = uri.split('/');
105
- // parts: ['', 'media', '{site}', '{mediaId}', '{file}']
106
- if (parts.length >= 5 && parts[1] === 'media') {
107
- var site = parts[2];
108
- var mediaId = parts[3];
109
- var rest = parts.slice(4).join('/');
110
- request.uri = '/sites/' + site + '/media/' + mediaId + '/' + rest;
111
- }
112
-
113
- return request;
114
- }
115
- `,
116
91
  });
117
92
  // =========================================================================
118
93
  // Cache Policies
@@ -144,39 +119,6 @@ export function createCdn(name, args) {
144
119
  enableAcceptEncodingGzip: true,
145
120
  },
146
121
  });
147
- const imageCachePolicy = new aws.cloudfront.CachePolicy(`${name}ImageCachePolicy`, {
148
- name: $interpolate `${$app.name}-${$app.stage}-image-cache`,
149
- comment: "Cache policy for transformed images (immutable)",
150
- defaultTtl: 31536000,
151
- maxTtl: 31536000,
152
- minTtl: 31536000,
153
- parametersInCacheKeyAndForwardedToOrigin: {
154
- cookiesConfig: { cookieBehavior: "none" },
155
- headersConfig: { headerBehavior: "none" },
156
- queryStringsConfig: {
157
- queryStringBehavior: "whitelist",
158
- queryStrings: {
159
- items: ["w", "h", "fit", "format", "q", "sig"],
160
- },
161
- },
162
- enableAcceptEncodingBrotli: true,
163
- enableAcceptEncodingGzip: true,
164
- },
165
- });
166
- const mediaCachePolicy = new aws.cloudfront.CachePolicy(`${name}MediaCachePolicy`, {
167
- name: $interpolate `${$app.name}-${$app.stage}-media-cache`,
168
- comment: "Cache policy for original media files (immutable)",
169
- defaultTtl: 31536000,
170
- maxTtl: 31536000,
171
- minTtl: 31536000,
172
- parametersInCacheKeyAndForwardedToOrigin: {
173
- cookiesConfig: { cookieBehavior: "none" },
174
- headersConfig: { headerBehavior: "none" },
175
- queryStringsConfig: { queryStringBehavior: "none" },
176
- enableAcceptEncodingBrotli: true,
177
- enableAcceptEncodingGzip: true,
178
- },
179
- });
180
122
  const versionCachePolicy = new aws.cloudfront.CachePolicy(`${name}VersionCachePolicy`, {
181
123
  name: $interpolate `${$app.name}-${$app.stage}-version-cache`,
182
124
  comment: "Short-TTL cache for /version to absorb client polling",
@@ -225,34 +167,12 @@ export function createCdn(name, args) {
225
167
  // authenticated behaviors below.
226
168
  const cachingDisabledPolicyId = "4135ea2d-6df8-44a3-9df3-4b5a84be39ad";
227
169
  // =========================================================================
228
- // Origin Access Controls (OAC)
229
- // =========================================================================
230
- const mediaOAC = new aws.cloudfront.OriginAccessControl(`${name}MediaOAC`, {
231
- name: $interpolate `${$app.name}-${$app.stage}-media-oac`,
232
- description: "OAC for S3 media origin",
233
- originAccessControlOriginType: "s3",
234
- signingBehavior: "always",
235
- signingProtocol: "sigv4",
236
- });
237
- const imageOAC = new aws.cloudfront.OriginAccessControl(`${name}ImageOAC`, {
238
- name: $interpolate `${$app.name}-${$app.stage}-image-oac`,
239
- description: "OAC for image transform Lambda origin",
240
- originAccessControlOriginType: "lambda",
241
- signingBehavior: "always",
242
- signingProtocol: "sigv4",
243
- });
244
- // =========================================================================
245
170
  // CloudFront Distribution
246
171
  // =========================================================================
247
172
  const originDomain = api.api.url.apply((url) => {
248
173
  const parsed = new URL(url);
249
174
  return parsed.hostname;
250
175
  });
251
- const imageLambdaDomain = image.imageLambda.url.apply((url) => {
252
- const parsed = new URL(url);
253
- return parsed.hostname;
254
- });
255
- const s3RegionalDomain = $interpolate `${contentBucket.name}.s3.${aws.getRegionOutput().name}.amazonaws.com`;
256
176
  const priceClass = args.priceClass ?? "PriceClass_100";
257
177
  // Build aliases and certificate config for custom domain
258
178
  const aliases = args.domain ? [args.domain.name] : undefined;
@@ -282,25 +202,6 @@ export function createCdn(name, args) {
282
202
  originSslProtocols: ["TLSv1.2"],
283
203
  },
284
204
  },
285
- {
286
- originId: "media-s3",
287
- domainName: s3RegionalDomain,
288
- originAccessControlId: mediaOAC.id,
289
- s3OriginConfig: {
290
- originAccessIdentity: "",
291
- },
292
- },
293
- {
294
- originId: "image-lambda",
295
- domainName: imageLambdaDomain,
296
- originAccessControlId: imageOAC.id,
297
- customOriginConfig: {
298
- httpPort: 80,
299
- httpsPort: 443,
300
- originProtocolPolicy: "https-only",
301
- originSslProtocols: ["TLSv1.2"],
302
- },
303
- },
304
205
  ],
305
206
  defaultCacheBehavior: {
306
207
  targetOriginId: "api",
@@ -484,32 +385,6 @@ export function createCdn(name, args) {
484
385
  },
485
386
  ],
486
387
  },
487
- // Media originals: served directly from S3 via OAC
488
- {
489
- pathPattern: "/media/*",
490
- targetOriginId: "media-s3",
491
- viewerProtocolPolicy: "redirect-to-https",
492
- allowedMethods: ["GET", "HEAD", "OPTIONS"],
493
- cachedMethods: ["GET", "HEAD", "OPTIONS"],
494
- compress: true,
495
- cachePolicyId: mediaCachePolicy.id,
496
- functionAssociations: [
497
- {
498
- eventType: "viewer-request",
499
- functionArn: mediaRewriteFunction.arn,
500
- },
501
- ],
502
- },
503
- // Image transforms: served via Sharp Lambda
504
- {
505
- pathPattern: "/img/*",
506
- targetOriginId: "image-lambda",
507
- viewerProtocolPolicy: "redirect-to-https",
508
- allowedMethods: ["GET", "HEAD", "OPTIONS"],
509
- cachedMethods: ["GET", "HEAD", "OPTIONS"],
510
- compress: true,
511
- cachePolicyId: imageCachePolicy.id,
512
- },
513
388
  // Health endpoint: no caching, no auth
514
389
  {
515
390
  pathPattern: "/health",
@@ -527,16 +402,9 @@ export function createCdn(name, args) {
527
402
  },
528
403
  viewerCertificate,
529
404
  });
530
- // Allow CloudFront to invoke the image Lambda via OAC
531
- new aws.lambda.Permission(`${name}ImageLambdaCFPermission`, {
532
- action: "lambda:InvokeFunctionUrl",
533
- function: image.imageLambda.name,
534
- principal: "cloudfront.amazonaws.com",
535
- sourceArn: distribution.arn,
536
- });
537
405
  const url = args.domain
538
406
  ? $interpolate `https://${args.domain.name}`
539
407
  : $interpolate `https://${distribution.domainName}`;
540
408
  return { distribution, url };
541
409
  }
542
- //# sourceMappingURL=cdn.js.map
410
+ //# sourceMappingURL=cdn-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdn-api.js","sourceRoot":"","sources":["../src/cdn-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Media CDN Infrastructure
3
+ *
4
+ * CloudFront distribution for the public media surface — `/media/*` and
5
+ * `/img/*` only. No edge auth (`/media/*` is OAC-public, `/img/*` is HMAC
6
+ * signed at the Sharp Lambda). The default behavior targets the S3 origin
7
+ * with no rewrite, so unmatched paths return AccessDenied from S3 — defense
8
+ * in depth.
9
+ */
10
+ import type { StorageResources } from "./storage.js";
11
+ import type { ImageResources } from "./image.js";
12
+ export interface MediaCdnArgs {
13
+ image: ImageResources;
14
+ contentBucket: StorageResources["contentBucket"];
15
+ priceClass?: "PriceClass_100" | "PriceClass_200" | "PriceClass_All";
16
+ domain?: {
17
+ name: string;
18
+ certificateArn: string;
19
+ };
20
+ }
21
+ export declare function createMediaCdn(name: string, args: MediaCdnArgs): {
22
+ distribution: aws.cloudfront.Distribution;
23
+ url: PulumiOutput<string>;
24
+ };
25
+ export type MediaCdnResources = ReturnType<typeof createMediaCdn>;
26
+ //# sourceMappingURL=cdn-media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdn-media.d.ts","sourceRoot":"","sources":["../src/cdn-media.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,cAAc,CAAC;IACtB,aAAa,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;IACpE,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY;;;EAgO9D;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC"}