contentrain 0.1.3 → 0.1.4

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 (54) hide show
  1. package/dist/index.mjs +1 -1
  2. package/dist/serve-ui/assets/{AgentPromptGroup.vue_vue_type_script_setup_true_lang-BMp7LstJ.js → AgentPromptGroup.vue_vue_type_script_setup_true_lang-Ulb-9Tr3.js} +1 -1
  3. package/dist/serve-ui/assets/AppLayout-C91DN08z.js +21 -0
  4. package/dist/serve-ui/assets/{BranchDetailPage-0mjYT8hQ.js → BranchDetailPage-BokOnhE7.js} +1 -1
  5. package/dist/serve-ui/assets/{BranchesPage-CD87MWWL.js → BranchesPage-CSwikNkd.js} +1 -1
  6. package/dist/serve-ui/assets/{CollapsibleTrigger.vue_vue_type_script_setup_true_lang-J5CJUyNC.js → CollapsibleTrigger.vue_vue_type_script_setup_true_lang-BRzXVXDG.js} +1 -1
  7. package/dist/serve-ui/assets/{Collection-Ba6qM261.js → Collection-DTB4xCCE.js} +1 -1
  8. package/dist/serve-ui/assets/ConfigProvider-Dvd7YoEV.js +1 -0
  9. package/dist/serve-ui/assets/{ContentListPage-BOo6tllk.js → ContentListPage-DF-LjAaS.js} +1 -1
  10. package/dist/serve-ui/assets/{ContentPage-s5AH95JG.js → ContentPage-BABg8pgn.js} +1 -1
  11. package/dist/serve-ui/assets/{DashboardPage-RZb06SoC.js → DashboardPage-BFLFEJNZ.js} +1 -1
  12. package/dist/serve-ui/assets/{DialogTitle.vue_vue_type_script_setup_true_lang-CmziXzbX.js → DialogTitle.vue_vue_type_script_setup_true_lang-2sQAJn_Y.js} +1 -1
  13. package/dist/serve-ui/assets/{Input.vue_vue_type_script_setup_true_lang-BM6hi7u6.js → Input.vue_vue_type_script_setup_true_lang-BveqfZsR.js} +1 -1
  14. package/dist/serve-ui/assets/{ModelDetailPage-BKq0bvlh.js → ModelDetailPage-_TIV9itx.js} +1 -1
  15. package/dist/serve-ui/assets/{ModelsPage-B6o55zfN.js → ModelsPage-DrQemHQ-.js} +1 -1
  16. package/dist/serve-ui/assets/{NormalizePage-BNbCNf4k.js → NormalizePage-Cde8vdk2.js} +1 -1
  17. package/dist/serve-ui/assets/{PageHeader.vue_vue_type_script_setup_true_lang-C8ntGi1-.js → PageHeader.vue_vue_type_script_setup_true_lang-CEnjONvd.js} +1 -1
  18. package/dist/serve-ui/assets/{Presence-DnRF6qHR.js → Presence-BXKCIfUk.js} +1 -1
  19. package/dist/serve-ui/assets/{Separator.vue_vue_type_script_setup_true_lang-KWrsPkDE.js → Separator.vue_vue_type_script_setup_true_lang-1pFZ2PR2.js} +1 -1
  20. package/dist/serve-ui/assets/{StudioHint.vue_vue_type_script_setup_true_lang-C0ksRF07.js → StudioHint.vue_vue_type_script_setup_true_lang-C6JN5tPq.js} +1 -1
  21. package/dist/serve-ui/assets/{TrustBadge.vue_vue_type_script_setup_true_lang-CPVK2uFu.js → TrustBadge.vue_vue_type_script_setup_true_lang-KRiTnLVk.js} +1 -1
  22. package/dist/serve-ui/assets/{ValidatePage-Dk5IdJ1E.js → ValidatePage-DRFAySNR.js} +1 -1
  23. package/dist/serve-ui/assets/{arrow-down-Cil3QmGC.js → arrow-down-BAJwpryD.js} +1 -1
  24. package/dist/serve-ui/assets/{arrow-left-BgRAFAbm.js → arrow-left-DANf_wrK.js} +1 -1
  25. package/dist/serve-ui/assets/{book-marked-D_7zWMoS.js → book-marked-DS8FXgjz.js} +1 -1
  26. package/dist/serve-ui/assets/{book-open-BMIAduGI.js → book-open-DnH5T78M.js} +1 -1
  27. package/dist/serve-ui/assets/{box-DTosQIFW.js → box-UJk5SvJJ.js} +1 -1
  28. package/dist/serve-ui/assets/{chevron-down-BU7Oh9xS.js → chevron-down-C1nYx5Eu.js} +1 -1
  29. package/dist/serve-ui/assets/{chevron-right-BrS8cLgS.js → chevron-right-XnJVrezx.js} +1 -1
  30. package/dist/serve-ui/assets/{content-9wt2LBkC.js → content-Ctqretwl.js} +1 -1
  31. package/dist/serve-ui/assets/{database-wAPnOXAq.js → database-Wd_i2bM1.js} +1 -1
  32. package/dist/serve-ui/assets/{file-code-DbO-oPNK.js → file-code-ScWZN40B.js} +1 -1
  33. package/dist/serve-ui/assets/{file-text-B83xaNeI.js → file-text-J3Wzwieh.js} +1 -1
  34. package/dist/serve-ui/assets/{git-branch-D_wEQy04.js → git-branch-DqEFTZDt.js} +1 -1
  35. package/dist/serve-ui/assets/{git-merge-CK4R9if8.js → git-merge-Bmz-MVBm.js} +1 -1
  36. package/dist/serve-ui/assets/{hash-DOFJZrkk.js → hash-pCwLSzjB.js} +1 -1
  37. package/dist/serve-ui/assets/{index-cUml-HE9.js → index-De_z0714.js} +1 -1
  38. package/dist/serve-ui/assets/{index-BL1I-H3q.js → index-RDdffBTh.js} +2 -2
  39. package/dist/serve-ui/assets/{languages-CXKcy1-I.js → languages-CQqNMim-.js} +1 -1
  40. package/dist/serve-ui/assets/{plus-yXR6ZCCF.js → plus-Cw1OnTR2.js} +1 -1
  41. package/dist/serve-ui/assets/{project-Cr3_1TVE.js → project-BlZcHJw6.js} +1 -1
  42. package/dist/serve-ui/assets/{scan-search-DHnQpSxc.js → scan-search-UJ-_oiOR.js} +1 -1
  43. package/dist/serve-ui/assets/{settings-DQbK7D0N.js → settings-Dnm4yTIj.js} +1 -1
  44. package/dist/serve-ui/assets/{shield-check-WNk6I8NY.js → shield-check-B67ELGUT.js} +1 -1
  45. package/dist/serve-ui/assets/{trash-2-B7ngAUqJ.js → trash-2-B1QgZW1G.js} +1 -1
  46. package/dist/serve-ui/assets/useDirection-B4S5kPsI.js +1 -0
  47. package/dist/serve-ui/assets/{useId-Bc2_q_4f.js → useId-CPFWZ4Bo.js} +1 -1
  48. package/dist/serve-ui/assets/{useNonce-BJjEh3mR.js → useNonce-BffIzuhE.js} +1 -1
  49. package/dist/serve-ui/assets/{useWatch-CEXwnJFx.js → useWatch-B2FLRWr8.js} +1 -1
  50. package/dist/serve-ui/index.html +1 -1
  51. package/package.json +2 -2
  52. package/dist/serve-ui/assets/AppLayout-DVU3pVVx.js +0 -16
  53. package/dist/serve-ui/assets/ConfigProvider-RwBwhpvF.js +0 -1
  54. package/dist/serve-ui/assets/useDirection-JtiaofuP.js +0 -1
@@ -1 +1 @@
1
- import{W as f,a1 as S,u as q,h as $,ab as L,ae as I,ad as B,r as C,i as P,K as W,w as E,S as O,V as G,Z as U,a3 as K,a4 as J,t as A,G as Y,ai as H,F as Q,a as M,aj as Z,m as X,ak as ee,_ as b,l as te}from"./index-BL1I-H3q.js";function we(e){return K()?(J(e),!0):!1}const v=new WeakMap,xe=(...e)=>{var a;const t=e[0],n=(a=O())==null?void 0:a.proxy;if(n==null&&!G())throw new Error("injectLocal must be called in setup");return n&&v.has(n)&&t in v.get(n)?v.get(n)[t]:U(...e)};function ae(e){if(!f(e))return S(e);const a=new Proxy({},{get(t,n,r){return q(Reflect.get(e.value,n,r))},set(t,n,r){return f(e.value[n])&&!f(r)?e.value[n].value=r:e.value[n]=r,!0},deleteProperty(t,n){return Reflect.deleteProperty(e.value,n)},has(t,n){return Reflect.has(e.value,n)},ownKeys(){return Object.keys(e.value)},getOwnPropertyDescriptor(){return{enumerable:!0,configurable:!0}}});return S(a)}function ne(e){return ae($(e))}function ze(e,...a){const t=a.flat(),n=t[0];return ne(()=>Object.fromEntries(typeof n=="function"?Object.entries(A(e)).filter(([r,o])=>!n(Y(o),r)):Object.entries(A(e)).filter(r=>!t.includes(r[0]))))}const Ce=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const ke=e=>typeof e<"u",re=Object.prototype.toString,Se=e=>re.call(e)==="[object Object]",oe=()=>{};function ie(e,a){function t(...n){return new Promise((r,o)=>{Promise.resolve(e(()=>a.apply(this,n),{fn:a,thisArg:this,args:n})).then(r).catch(o)})}return t}const T=e=>e();function se(e=T,a={}){const{initialState:t="active"}=a,n=le(t==="active");function r(){n.value=!1}function o(){n.value=!0}const l=(...d)=>{n.value&&e(...d)};return{isActive:I(n),pause:r,resume:o,eventFilter:l}}function Ae(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function de(e){return O()}function Ne(e){return Array.isArray(e)?e:[e]}function le(...e){if(e.length!==1)return L(...e);const a=e[0];return typeof a=="function"?I(B(()=>({get:a,set:oe}))):C(a)}function ce(e,a,t={}){const{eventFilter:n=T,...r}=t;return E(e,ie(n,a),r)}function je(e,a,t={}){const{eventFilter:n,initialState:r="active",...o}=t,{eventFilter:l,pause:d,resume:u,isActive:i}=se(n,{initialState:r});return{stop:ce(e,a,{...o,eventFilter:l}),pause:d,resume:u,isActive:i}}function Ie(e,a=!0,t){de()?P(e,t):a?e():W(e)}function Pe(e,a,t){return E(e,a,{...t,immediate:!0})}const ue="/api";async function y(e,a){const t=await fetch(`${ue}${e}`,{headers:{"Content-Type":"application/json"},...a});if(!t.ok){const n=await t.text();let r=`API ${t.status}`;try{const o=JSON.parse(n);o!=null&&o.error&&(r=o.error)}catch{n&&(r=n)}throw new Error(r)}return t.json()}function Ee(){return{get:e=>y(e),post:(e,a)=>y(e,{method:"POST",body:a?JSON.stringify(a):void 0}),del:e=>y(e,{method:"DELETE"})}}const N=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,j=H,Oe=(e,a)=>t=>{var n;if((a==null?void 0:a.variants)==null)return j(e,t==null?void 0:t.class,t==null?void 0:t.className);const{variants:r,defaultVariants:o}=a,l=Object.keys(r).map(i=>{const c=t==null?void 0:t[i],h=o==null?void 0:o[i];if(c===null)return null;const m=N(c)||N(h);return r[i][m]}),d=t&&Object.entries(t).reduce((i,c)=>{let[h,m]=c;return m===void 0||(i[h]=m),i},{}),u=a==null||(n=a.compoundVariants)===null||n===void 0?void 0:n.reduce((i,c)=>{let{class:h,className:m,...V}=c;return Object.entries(V).every(R=>{let[k,g]=R;return Array.isArray(g)?g.includes({...o,...d}[k]):{...o,...d}[k]===g})?[...i,h,m]:i},[]);return j(e,l,u,t==null?void 0:t.class,t==null?void 0:t.className)};function _(e){return e?e.flatMap(a=>a.type===Q?_(a.children):[a]):[]}const me=M({name:"PrimitiveSlot",inheritAttrs:!1,setup(e,{attrs:a,slots:t}){return()=>{var u;if(!t.default)return null;const n=_(t.default()),r=n.findIndex(i=>i.type!==Z);if(r===-1)return n;const o=n[r];(u=o.props)==null||delete u.ref;const l=o.props?X(a,o.props):a,d=ee({...o,props:{}},l);return n.length===1?d:(n[r]=d,n)}}}),he=["area","img","input"],Me=M({name:"Primitive",inheritAttrs:!1,props:{asChild:{type:Boolean,default:!1},as:{type:[String,Object],default:"div"}},setup(e,{attrs:a,slots:t}){const n=e.asChild?"template":e.as;return typeof n=="string"&&he.includes(n)?()=>b(n,a):n!=="template"?()=>b(e.as,a,{default:t.default}):()=>b(me,a,{default:t.default})}}),pe={"branch-detail.and-delete-the-source":"and delete the source branch.","branch-detail.approve-merge":"Approve & Merge","branch-detail.ask-your-agent":"Ask your agent","branch-detail.back":"Back","branch-detail.branch-merged-successfully":"Branch merged successfully.","branch-detail.branch-rejected-and-deleted":"Branch rejected and deleted.","branch-detail.branch-review-and-diff":"Branch review and diff","branch-detail.cancel":"Cancel","branch-detail.check-the-content-quality":"Check the content quality of the pending changes","branch-detail.confirm-merge":"Confirm merge","branch-detail.confirm-rejection":"Confirm rejection","branch-detail.continue-with-phase-2":"Continue with Phase 2 — patch source files with content references","branch-detail.delete-branch":"Delete Branch","branch-detail.failed-to-delete-branch":"Failed to delete branch. Please try again.","branch-detail.failed-to-merge-branch":"Failed to merge branch. Please try again.","branch-detail.file":"file","branch-detail.into":"into","branch-detail.merge":"Merge","branch-detail.no-diff-available-for":"No diff available for this branch.","branch-detail.reject":"Reject","branch-detail.review-the-changes-on":"Review the changes on this branch and recommend approval or rejection","branch-detail.this-will-merge":"This will merge","branch-detail.this-will-permanently-delete":"This will permanently delete the branch","branches.add-sample-content-to":"Add sample content to my models","branches.aigenerated-changes-from-your":"AI-generated changes from your IDE will appear here for review.","branches.branch":"Branch","branches.branches-history":"Branches & History","branches.content":"Content","branches.content-saved":"Content Saved","branches.contentrain-operations-will-appear":"Contentrain operations will appear here as a timeline.","branches.create-a-new-content":"Create a new content model for my project","branches.deleted":"Deleted","branches.get-started":"Get started","branches.initialize-my-contentrain-project":"Initialize my contentrain project","branches.merged":"Merged","branches.model":"Model","branches.model-created":"Model Created","branches.model-updated":"Model Updated","branches.no-history-yet":"No history yet","branches.no-pending-branches":"No pending branches","branches.normalize":"Normalize","branches.normalize-my-project-extract":"Normalize my project — extract hardcoded strings","branches.operation":"Operation","branches.refresh":"Refresh","branches.review-pending-changes-and":"Review pending changes and track operations","branches.share-branch-reviews-with":"Share branch reviews with your team in Contentrain Studio.","branches.try-asking-your-ai":"Try asking your AI agent","branches.validate":"Validate","breadcrumb-ellipsis.more":"More","button.button":"button","content-list.add-a-new-entry":"Add a new entry to ${modelId}","content-list.all-locales":"All locales","content-list.ask-your-agent":"Ask your agent","content-list.columns":"Columns","content-list.content-mutations-are-agent":"Content mutations are agent actions — copy a prompt above and paste it in your AI agent.","content-list.create-content-using-ai":"Create content using AI in your IDE.","content-list.create-sample-content-for":"Create sample content for ${modelId}","content-list.delete-draft-entries-from":"Delete draft entries from ${modelId}","content-list.generate-5-entries-for":"Generate 5 entries for ${modelId}","content-list.missing":"missing","content-list.no-entries-matching":'No entries matching "',"content-list.no-entries-yet":"No entries yet","content-list.page":"Page","content-list.refresh":"Refresh","content-list.required":"required","content-list.reset":"Reset","content-list.search-entries":"Search entries...","content-list.show":"Show","content-list.show-all":"Show all","content-list.toggle-columns":"Toggle columns","content-list.translate-modelid-content-to":"Translate ${modelId} content to Turkish","content-list.update-the-content-of":"Update the content of ${modelId}","content.browse-and-inspect-content":"Browse and inspect content by collection","content.collection":"Collection","content.content":"Content","content.create-models-using-your":"Create models using your IDE with AI assistance. Once models are defined, their content will appear here.","content.dictionary":"Dictionary","content.document":"Document","content.fields":"fields","content.filter-models":"Filter models...","content.i18n":"i18n","content.no-models-matching":'No models matching "',"content.no-models-yet":"No models yet","content.singleton":"Singleton","dashboard.branches":"Branches","dashboard.content-models":"Content Models","dashboard.content-saved":"Content Saved","dashboard.contentrain-init":"contentrain init","dashboard.context-updated":"Context Updated","dashboard.create-a-blog-model":"Create a blog model with title, content, and author fields","dashboard.create-models-using-ai":"Create models using AI in your IDE to get started.","dashboard.dashboard":"Dashboard","dashboard.deleted":"Deleted","dashboard.entries":"Entries","dashboard.fields":"fields","dashboard.fix-issues":"Fix issues","dashboard.fix-validation-errors-in":"Fix validation errors in my content","dashboard.full-report":"Full report","dashboard.generate-sample-content-for":"Generate sample content for my models","dashboard.get-started":"Get started","dashboard.i18n":"i18n","dashboard.issues":"Issues","dashboard.locales":"Locales","dashboard.manage-content-with-ai":"Manage content with AI chat and team review in Contentrain Studio.","dashboard.merged":"Merged","dashboard.model-created":"Model Created","dashboard.model-updated":"Model Updated","dashboard.models":"Models","dashboard.no-content-models-yet":"No content models yet","dashboard.no-operations-yet-start":"No operations yet. Start by creating models or content.","dashboard.normalize-my-project-extract":"Normalize my project — extract hardcoded strings","dashboard.not-a-contentrain-project":"Not a Contentrain project","dashboard.operation":"Operation","dashboard.populate":"Populate","dashboard.recent-operations":"Recent Operations","dashboard.review-pending-content-changes":"Review pending content changes","dashboard.run":"Run","dashboard.terms":"terms","dashboard.to-initialize":"to initialize.","dashboard.total":"total","dashboard.try-with-your-ai":"Try with your AI agent","dashboard.validation-summary":"Validation Summary","dashboard.view-all":"View all","dashboard.your-project-at-a":"Your project at a glance","dialog-content.close":"Close","dialog-footer.close":"Close","dialog-scroll-content.close":"Close","extraction-review-panel.strings":"strings","header.open-in-studio":"Open in Studio","index.ts.bgdestructive-textwhite-hoverbgdestructive90-focusvisibleringdestructive20":"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60","index.ts.border-bgbackground-shadowxs-hoverbgaccent":"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50","index.ts.bordertransparent-bgdestructive-textwhite-ahoverbgdestructive90":"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60","index.ts.bordertransparent-bgprimary-textprimaryforeground-ahoverbgprimary90":"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90","index.ts.bordertransparent-bgsecondary-textsecondaryforeground-ahoverbgsecondary90":"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90","index.ts.h10-roundedmd-px6-hassvgpx4":"h-10 rounded-md px-6 has-[>svg]:px-4","index.ts.h8-roundedmd-gap15-px3":"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5","index.ts.h9-px4-py2-hassvgpx3":"h-9 px-4 py-2 has-[>svg]:px-3","index.ts.icon":"icon","index.ts.textdestructive-bgcard-svgtextcurrent-dataslotalertdescriptiontextdestructive90":"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90","index.ts.textforeground-ahoverbgaccent-ahovertextaccentforeground":"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground","index.ts.textprimary-underlineoffset4-hoverunderline":"text-primary underline-offset-4 hover:underline","mobile-nav.branch":"Branch","mobile-nav.content":"Content","mobile-nav.dash":"Dash","mobile-nav.models":"Models","mobile-nav.valid":"Valid.","model-detail.add-a-category-field":"Add a 'category' field to ${modelId}","model-detail.ask-your-agent":"Ask your agent","model-detail.delete-the-modelid-model":"Delete the ${modelId} model","model-detail.fields":"Fields","model-detail.generate-5-sample-entries":"Generate 5 sample entries for ${modelId}","model-detail.i18n":"i18n","model-detail.import-snippet":"Import Snippet","model-detail.models":"Models","model-detail.req":"req","model-detail.sample-data":"Sample Data","model-detail.system-fields":"System Fields","model-detail.update-modelid-to-support":"Update ${modelId} to support i18n","model-detail.view-content":"View Content","models.add-a-testimonials-collection":"Add a testimonials collection model","models.ask-your-agent":"Ask your agent","models.clear-search":"Clear search","models.close":"Close","models.content-model-definitions":"Content model definitions","models.create-a-blog-model":"Create a blog model with title, content, slug, and author fields","models.create-a-faq-model":"Create a FAQ model with question and answer fields","models.create-a-new-content":"Create a new content model","models.create-and-manage-models":"Create and manage models with AI chat in Contentrain Studio.","models.create-content-models-using":"Create content models using AI in your IDE, then come back to inspect them here.","models.fields":"fields","models.filtered-from":"filtered from","models.i18n":"i18n","models.model":"model","models.models":"Models","models.no-models-found":"No models found","models.no-models-match":'No models match "',"models.no-models-yet":"No models yet","models.scaffold-my-project-with":"Scaffold my project with a landing page template","models.search":"Search","models.search-models-by-name":"Search models by name, domain, or kind...","models.total":"total","models.try-a-different-search":'". Try a different search term.',"normalize.adjust-the-normalize-plan":"Adjust the normalize plan — also include strings from the footer component","normalize.approve-or-request-changes":"Approve or request changes","normalize.approve-to-write-extractions":"Approve to write extractions to content models on a review branch. Reject to discard, or ask the agent to adjust the plan.","normalize.ask-your-ai-agent":"Ask your AI agent to get started","normalize.candidates":"candidates","normalize.click-an-extraction-to":"Click an extraction to see its source trace","normalize.content-extraction-and-i18n":"Content extraction and i18n readiness","normalize.continue-to-phase-2":"Continue to Phase 2 — patch source files with content references","normalize.copy-a-prompt-above":"Copy a prompt above or describe what you want extracted. The agent scans your source files, classifies strings, and builds an extraction plan.","normalize.delete":"Delete","normalize.extract-hardcoded-strings":"Extract hardcoded strings","normalize.extract-hero-section-text":"Extract hero section text into a content model","normalize.extracted":"extracted","normalize.extractions":"Extractions","normalize.extractions-across":"extractions across","normalize.files-scanned":"files scanned","normalize.how-it-works":"How it works","normalize.make-my-landing-page":"Make my landing page i18n-ready","normalize.merge":"Merge","normalize.merge-and-continue":"Merge and continue","normalize.merge-review-branches-into":"Merge review branches into main, then ask the agent to start Phase 2 — patching source files with content references.","normalize.models":"models","normalize.normalize":"Normalize","normalize.normalize-my-vue-project":"Normalize my Vue project — extract hardcoded strings","normalize.normalize-plan":"Normalize Plan","normalize.normalize-scans-your-source":"Normalize scans your source files for hardcoded strings and extracts them into content models, making your project i18n-ready.","normalize.patches":"patches","normalize.pending-normalize-branches":"Pending normalize branches","normalize.prompt-your-ai-agent":"Prompt your AI agent","normalize.remove-navigation-labels-from":"Remove navigation labels from the extraction plan","normalize.request-changes-from-your":"Request changes from your agent","normalize.review-and-merge-normalize":"Review and merge normalize branches into your main branch.","normalize.review-the-plan-here":"Review the plan here","normalize.scan-srcpages-for-content":"Scan src/pages for content strings and create extraction plan","normalize.skipped":"skipped","normalize.source-patches":"Source Patches","normalize.source-trace":"Source Trace","normalize.start-reuse-for-the":"Start reuse for the extracted content models","normalize.strings-found":"strings found","normalize.the-agent-sends-the":"The agent sends the plan to this dashboard. You review every extraction, source trace, and patch before anything is applied.","normalize.track-normalize-history-and":"Track normalize history and manage extractions in Contentrain Studio.","normalize.whats-next-ask-your":"What's next — ask your agent","primary-sidebar.branches":"Branches","primary-sidebar.content":"Content","primary-sidebar.contentrain":"Contentrain","primary-sidebar.dashboard":"Dashboard","primary-sidebar.models":"Models","primary-sidebar.normalize":"Normalize","primary-sidebar.validate":"Validate","router.ts.branches":"branches","router.ts.content":"content","router.ts.dashboard":"dashboard","router.ts.models":"models","router.ts.normalize":"normalize","router.ts.validate":"validate","scroll-bar.vertical":"vertical","select-content.popper":"popper","separator.horizontal":"horizontal","source-trace-panel.content-entry":"Content Entry","source-trace-panel.reuse-patch":"Reuse Patch","source-trace-panel.source-file":"Source File","source-trace-panel.source-trace":"Source Trace","status-bar.locales":"locales","status-bar.models":"models","studio-hint.open-studio":"Open Studio","sub-sidebar-layout.no-models-found":"No models found","sub-sidebar-layout.search":"Search...","tree-select.no-scannable-files-found":"No scannable files found","trust-badge.blocked":"Blocked","trust-badge.partial":"Partial","trust-badge.pending-review":"Pending review","trust-badge.validated":"Validated","trust-badge.warnings":"warnings","use-api.ts.contenttype":"Content-Type","use-api.ts.delete":"DELETE","use-api.ts.post":"POST","use-formatters.ts.2digit":"2-digit","use-formatters.ts.short":"short","validate.all-checks-passed":"All checks passed","validate.all-issue-types-are":"All issue types are hidden. Adjust filters above to see issues.","validate.ask-your-agent":"Ask your agent","validate.by-model":"By Model","validate.by-severity":"By Severity","validate.check-content-quality-and":"Check content quality and i18n completeness","validate.content-quality-report":"Content quality report","validate.entries":"Entries","validate.errors":"Errors","validate.errors-2":"Errors (","validate.fix-all-validation-errors":"Fix all validation errors in my content","validate.fix-warnings":"fix warnings","validate.models":"Models","validate.notice":"notice","validate.notices":"Notices","validate.notices-2":"Notices (","validate.quality-check":"quality check","validate.refreshing-validation":"Refreshing validation...","validate.review-and-fix-validation":"Review and fix validation warnings","validate.updated":"Updated","validate.validate-my-content-models":"Validate my content models","validate.validation":"Validation","validate.validation-results-update-automatically":"Validation results update automatically when your agent runs validation tools.","validate.warnings":"Warnings","validate.warnings-2":"Warnings (","validate.your-content-and-models":"Your content and models are in great shape. No errors, warnings, or notices found."},ge="en";class fe{constructor(a,t){this._data=a,this._locale=null,this._defaultLocale=t||null}locale(a){return this._locale=a,this}get(a){let t;if(this._locale)t=this._data.get(this._locale)??{};else if(this._defaultLocale&&this._data.has(this._defaultLocale))t=this._data.get(this._defaultLocale);else{const n=this._data.keys().next().value;t=this._data.get(n)??{}}return a!==void 0?t[a]:t}}const be={"serve-ui-texts":new Map([["en",pe]])};function Te(e){const a=be[e];if(!a)throw new Error(`Unknown dictionary model: "${e}"`);return new fe(a,ge)}const x=C(!1),D=C(null),z=new Set;let s=null,w=null,p=1e3;function F(){if(s&&(s.readyState===WebSocket.OPEN||s.readyState===WebSocket.CONNECTING))return;const e=window.location.protocol==="https:"?"wss:":"ws:";s=new WebSocket(`${e}//${window.location.host}/ws`),s.addEventListener("open",()=>{x.value=!0,p=1e3}),s.addEventListener("message",a=>{try{const t=JSON.parse(a.data);D.value=new Date;for(const n of z)n(t)}catch{}}),s.addEventListener("close",()=>{x.value=!1,ve()}),s.addEventListener("error",()=>{s==null||s.close()})}function ve(){w||(w=setTimeout(()=>{w=null,p=Math.min(p*2,3e4),F()},p))}function _e(e){return P(()=>{e&&z.add(e),F()}),te(()=>{e&&z.delete(e)}),{connected:x,lastUpdate:D}}export{Me as P,me as S,Ie as a,Ce as b,xe as c,Te as d,Pe as e,we as f,Se as g,Ne as h,ke as i,Ee as j,Oe as k,_ as l,Ae as p,ze as r,le as t,_e as u,je as w};
1
+ import{W as f,a1 as S,u as q,h as $,ab as L,ae as I,ad as B,r as C,i as P,K as W,w as E,S as O,V as G,Z as U,a3 as K,a4 as J,t as A,G as Y,ai as H,F as Q,a as M,aj as Z,m as X,ak as ee,_ as b,l as te}from"./index-RDdffBTh.js";function we(e){return K()?(J(e),!0):!1}const v=new WeakMap,xe=(...e)=>{var a;const t=e[0],n=(a=O())==null?void 0:a.proxy;if(n==null&&!G())throw new Error("injectLocal must be called in setup");return n&&v.has(n)&&t in v.get(n)?v.get(n)[t]:U(...e)};function ae(e){if(!f(e))return S(e);const a=new Proxy({},{get(t,n,r){return q(Reflect.get(e.value,n,r))},set(t,n,r){return f(e.value[n])&&!f(r)?e.value[n].value=r:e.value[n]=r,!0},deleteProperty(t,n){return Reflect.deleteProperty(e.value,n)},has(t,n){return Reflect.has(e.value,n)},ownKeys(){return Object.keys(e.value)},getOwnPropertyDescriptor(){return{enumerable:!0,configurable:!0}}});return S(a)}function ne(e){return ae($(e))}function ze(e,...a){const t=a.flat(),n=t[0];return ne(()=>Object.fromEntries(typeof n=="function"?Object.entries(A(e)).filter(([r,o])=>!n(Y(o),r)):Object.entries(A(e)).filter(r=>!t.includes(r[0]))))}const Ce=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const ke=e=>typeof e<"u",re=Object.prototype.toString,Se=e=>re.call(e)==="[object Object]",oe=()=>{};function ie(e,a){function t(...n){return new Promise((r,o)=>{Promise.resolve(e(()=>a.apply(this,n),{fn:a,thisArg:this,args:n})).then(r).catch(o)})}return t}const T=e=>e();function se(e=T,a={}){const{initialState:t="active"}=a,n=le(t==="active");function r(){n.value=!1}function o(){n.value=!0}const l=(...d)=>{n.value&&e(...d)};return{isActive:I(n),pause:r,resume:o,eventFilter:l}}function Ae(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function de(e){return O()}function Ne(e){return Array.isArray(e)?e:[e]}function le(...e){if(e.length!==1)return L(...e);const a=e[0];return typeof a=="function"?I(B(()=>({get:a,set:oe}))):C(a)}function ce(e,a,t={}){const{eventFilter:n=T,...r}=t;return E(e,ie(n,a),r)}function je(e,a,t={}){const{eventFilter:n,initialState:r="active",...o}=t,{eventFilter:l,pause:d,resume:u,isActive:i}=se(n,{initialState:r});return{stop:ce(e,a,{...o,eventFilter:l}),pause:d,resume:u,isActive:i}}function Ie(e,a=!0,t){de()?P(e,t):a?e():W(e)}function Pe(e,a,t){return E(e,a,{...t,immediate:!0})}const ue="/api";async function y(e,a){const t=await fetch(`${ue}${e}`,{headers:{"Content-Type":"application/json"},...a});if(!t.ok){const n=await t.text();let r=`API ${t.status}`;try{const o=JSON.parse(n);o!=null&&o.error&&(r=o.error)}catch{n&&(r=n)}throw new Error(r)}return t.json()}function Ee(){return{get:e=>y(e),post:(e,a)=>y(e,{method:"POST",body:a?JSON.stringify(a):void 0}),del:e=>y(e,{method:"DELETE"})}}const N=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,j=H,Oe=(e,a)=>t=>{var n;if((a==null?void 0:a.variants)==null)return j(e,t==null?void 0:t.class,t==null?void 0:t.className);const{variants:r,defaultVariants:o}=a,l=Object.keys(r).map(i=>{const c=t==null?void 0:t[i],h=o==null?void 0:o[i];if(c===null)return null;const m=N(c)||N(h);return r[i][m]}),d=t&&Object.entries(t).reduce((i,c)=>{let[h,m]=c;return m===void 0||(i[h]=m),i},{}),u=a==null||(n=a.compoundVariants)===null||n===void 0?void 0:n.reduce((i,c)=>{let{class:h,className:m,...V}=c;return Object.entries(V).every(R=>{let[k,g]=R;return Array.isArray(g)?g.includes({...o,...d}[k]):{...o,...d}[k]===g})?[...i,h,m]:i},[]);return j(e,l,u,t==null?void 0:t.class,t==null?void 0:t.className)};function _(e){return e?e.flatMap(a=>a.type===Q?_(a.children):[a]):[]}const me=M({name:"PrimitiveSlot",inheritAttrs:!1,setup(e,{attrs:a,slots:t}){return()=>{var u;if(!t.default)return null;const n=_(t.default()),r=n.findIndex(i=>i.type!==Z);if(r===-1)return n;const o=n[r];(u=o.props)==null||delete u.ref;const l=o.props?X(a,o.props):a,d=ee({...o,props:{}},l);return n.length===1?d:(n[r]=d,n)}}}),he=["area","img","input"],Me=M({name:"Primitive",inheritAttrs:!1,props:{asChild:{type:Boolean,default:!1},as:{type:[String,Object],default:"div"}},setup(e,{attrs:a,slots:t}){const n=e.asChild?"template":e.as;return typeof n=="string"&&he.includes(n)?()=>b(n,a):n!=="template"?()=>b(e.as,a,{default:t.default}):()=>b(me,a,{default:t.default})}}),pe={"branch-detail.and-delete-the-source":"and delete the source branch.","branch-detail.approve-merge":"Approve & Merge","branch-detail.ask-your-agent":"Ask your agent","branch-detail.back":"Back","branch-detail.branch-merged-successfully":"Branch merged successfully.","branch-detail.branch-rejected-and-deleted":"Branch rejected and deleted.","branch-detail.branch-review-and-diff":"Branch review and diff","branch-detail.cancel":"Cancel","branch-detail.check-the-content-quality":"Check the content quality of the pending changes","branch-detail.confirm-merge":"Confirm merge","branch-detail.confirm-rejection":"Confirm rejection","branch-detail.continue-with-phase-2":"Continue with Phase 2 — patch source files with content references","branch-detail.delete-branch":"Delete Branch","branch-detail.failed-to-delete-branch":"Failed to delete branch. Please try again.","branch-detail.failed-to-merge-branch":"Failed to merge branch. Please try again.","branch-detail.file":"file","branch-detail.into":"into","branch-detail.merge":"Merge","branch-detail.no-diff-available-for":"No diff available for this branch.","branch-detail.reject":"Reject","branch-detail.review-the-changes-on":"Review the changes on this branch and recommend approval or rejection","branch-detail.this-will-merge":"This will merge","branch-detail.this-will-permanently-delete":"This will permanently delete the branch","branches.add-sample-content-to":"Add sample content to my models","branches.aigenerated-changes-from-your":"AI-generated changes from your IDE will appear here for review.","branches.branch":"Branch","branches.branches-history":"Branches & History","branches.content":"Content","branches.content-saved":"Content Saved","branches.contentrain-operations-will-appear":"Contentrain operations will appear here as a timeline.","branches.create-a-new-content":"Create a new content model for my project","branches.deleted":"Deleted","branches.get-started":"Get started","branches.initialize-my-contentrain-project":"Initialize my contentrain project","branches.merged":"Merged","branches.model":"Model","branches.model-created":"Model Created","branches.model-updated":"Model Updated","branches.no-history-yet":"No history yet","branches.no-pending-branches":"No pending branches","branches.normalize":"Normalize","branches.normalize-my-project-extract":"Normalize my project — extract hardcoded strings","branches.operation":"Operation","branches.refresh":"Refresh","branches.review-pending-changes-and":"Review pending changes and track operations","branches.share-branch-reviews-with":"Share branch reviews with your team in Contentrain Studio.","branches.try-asking-your-ai":"Try asking your AI agent","branches.validate":"Validate","breadcrumb-ellipsis.more":"More","button.button":"button","content-list.add-a-new-entry":"Add a new entry to ${modelId}","content-list.all-locales":"All locales","content-list.ask-your-agent":"Ask your agent","content-list.columns":"Columns","content-list.content-mutations-are-agent":"Content mutations are agent actions — copy a prompt above and paste it in your AI agent.","content-list.create-content-using-ai":"Create content using AI in your IDE.","content-list.create-sample-content-for":"Create sample content for ${modelId}","content-list.delete-draft-entries-from":"Delete draft entries from ${modelId}","content-list.generate-5-entries-for":"Generate 5 entries for ${modelId}","content-list.missing":"missing","content-list.no-entries-matching":'No entries matching "',"content-list.no-entries-yet":"No entries yet","content-list.page":"Page","content-list.refresh":"Refresh","content-list.required":"required","content-list.reset":"Reset","content-list.search-entries":"Search entries...","content-list.show":"Show","content-list.show-all":"Show all","content-list.toggle-columns":"Toggle columns","content-list.translate-modelid-content-to":"Translate ${modelId} content to Turkish","content-list.update-the-content-of":"Update the content of ${modelId}","content.browse-and-inspect-content":"Browse and inspect content by collection","content.collection":"Collection","content.content":"Content","content.create-models-using-your":"Create models using your IDE with AI assistance. Once models are defined, their content will appear here.","content.dictionary":"Dictionary","content.document":"Document","content.fields":"fields","content.filter-models":"Filter models...","content.i18n":"i18n","content.no-models-matching":'No models matching "',"content.no-models-yet":"No models yet","content.singleton":"Singleton","dashboard.branches":"Branches","dashboard.content-models":"Content Models","dashboard.content-saved":"Content Saved","dashboard.contentrain-init":"contentrain init","dashboard.context-updated":"Context Updated","dashboard.create-a-blog-model":"Create a blog model with title, content, and author fields","dashboard.create-models-using-ai":"Create models using AI in your IDE to get started.","dashboard.dashboard":"Dashboard","dashboard.deleted":"Deleted","dashboard.entries":"Entries","dashboard.fields":"fields","dashboard.fix-issues":"Fix issues","dashboard.fix-validation-errors-in":"Fix validation errors in my content","dashboard.full-report":"Full report","dashboard.generate-sample-content-for":"Generate sample content for my models","dashboard.get-started":"Get started","dashboard.i18n":"i18n","dashboard.issues":"Issues","dashboard.locales":"Locales","dashboard.manage-content-with-ai":"Manage content with AI chat and team review in Contentrain Studio.","dashboard.merged":"Merged","dashboard.model-created":"Model Created","dashboard.model-updated":"Model Updated","dashboard.models":"Models","dashboard.no-content-models-yet":"No content models yet","dashboard.no-operations-yet-start":"No operations yet. Start by creating models or content.","dashboard.normalize-my-project-extract":"Normalize my project — extract hardcoded strings","dashboard.not-a-contentrain-project":"Not a Contentrain project","dashboard.operation":"Operation","dashboard.populate":"Populate","dashboard.recent-operations":"Recent Operations","dashboard.review-pending-content-changes":"Review pending content changes","dashboard.run":"Run","dashboard.terms":"terms","dashboard.to-initialize":"to initialize.","dashboard.total":"total","dashboard.try-with-your-ai":"Try with your AI agent","dashboard.validation-summary":"Validation Summary","dashboard.view-all":"View all","dashboard.your-project-at-a":"Your project at a glance","dialog-content.close":"Close","dialog-footer.close":"Close","dialog-scroll-content.close":"Close","extraction-review-panel.strings":"strings","header.open-in-studio":"Open in Studio","index.ts.bgdestructive-textwhite-hoverbgdestructive90-focusvisibleringdestructive20":"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60","index.ts.border-bgbackground-shadowxs-hoverbgaccent":"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50","index.ts.bordertransparent-bgdestructive-textwhite-ahoverbgdestructive90":"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60","index.ts.bordertransparent-bgprimary-textprimaryforeground-ahoverbgprimary90":"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90","index.ts.bordertransparent-bgsecondary-textsecondaryforeground-ahoverbgsecondary90":"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90","index.ts.h10-roundedmd-px6-hassvgpx4":"h-10 rounded-md px-6 has-[>svg]:px-4","index.ts.h8-roundedmd-gap15-px3":"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5","index.ts.h9-px4-py2-hassvgpx3":"h-9 px-4 py-2 has-[>svg]:px-3","index.ts.icon":"icon","index.ts.textdestructive-bgcard-svgtextcurrent-dataslotalertdescriptiontextdestructive90":"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90","index.ts.textforeground-ahoverbgaccent-ahovertextaccentforeground":"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground","index.ts.textprimary-underlineoffset4-hoverunderline":"text-primary underline-offset-4 hover:underline","mobile-nav.branch":"Branch","mobile-nav.content":"Content","mobile-nav.dash":"Dash","mobile-nav.models":"Models","mobile-nav.valid":"Valid.","model-detail.add-a-category-field":"Add a 'category' field to ${modelId}","model-detail.ask-your-agent":"Ask your agent","model-detail.delete-the-modelid-model":"Delete the ${modelId} model","model-detail.fields":"Fields","model-detail.generate-5-sample-entries":"Generate 5 sample entries for ${modelId}","model-detail.i18n":"i18n","model-detail.import-snippet":"Import Snippet","model-detail.models":"Models","model-detail.req":"req","model-detail.sample-data":"Sample Data","model-detail.system-fields":"System Fields","model-detail.update-modelid-to-support":"Update ${modelId} to support i18n","model-detail.view-content":"View Content","models.add-a-testimonials-collection":"Add a testimonials collection model","models.ask-your-agent":"Ask your agent","models.clear-search":"Clear search","models.close":"Close","models.content-model-definitions":"Content model definitions","models.create-a-blog-model":"Create a blog model with title, content, slug, and author fields","models.create-a-faq-model":"Create a FAQ model with question and answer fields","models.create-a-new-content":"Create a new content model","models.create-and-manage-models":"Create and manage models with AI chat in Contentrain Studio.","models.create-content-models-using":"Create content models using AI in your IDE, then come back to inspect them here.","models.fields":"fields","models.filtered-from":"filtered from","models.i18n":"i18n","models.model":"model","models.models":"Models","models.no-models-found":"No models found","models.no-models-match":'No models match "',"models.no-models-yet":"No models yet","models.scaffold-my-project-with":"Scaffold my project with a landing page template","models.search":"Search","models.search-models-by-name":"Search models by name, domain, or kind...","models.total":"total","models.try-a-different-search":'". Try a different search term.',"normalize.adjust-the-normalize-plan":"Adjust the normalize plan — also include strings from the footer component","normalize.approve-or-request-changes":"Approve or request changes","normalize.approve-to-write-extractions":"Approve to write extractions to content models on a review branch. Reject to discard, or ask the agent to adjust the plan.","normalize.ask-your-ai-agent":"Ask your AI agent to get started","normalize.candidates":"candidates","normalize.click-an-extraction-to":"Click an extraction to see its source trace","normalize.content-extraction-and-i18n":"Content extraction and i18n readiness","normalize.continue-to-phase-2":"Continue to Phase 2 — patch source files with content references","normalize.copy-a-prompt-above":"Copy a prompt above or describe what you want extracted. The agent scans your source files, classifies strings, and builds an extraction plan.","normalize.delete":"Delete","normalize.extract-hardcoded-strings":"Extract hardcoded strings","normalize.extract-hero-section-text":"Extract hero section text into a content model","normalize.extracted":"extracted","normalize.extractions":"Extractions","normalize.extractions-across":"extractions across","normalize.files-scanned":"files scanned","normalize.how-it-works":"How it works","normalize.make-my-landing-page":"Make my landing page i18n-ready","normalize.merge":"Merge","normalize.merge-and-continue":"Merge and continue","normalize.merge-review-branches-into":"Merge review branches into main, then ask the agent to start Phase 2 — patching source files with content references.","normalize.models":"models","normalize.normalize":"Normalize","normalize.normalize-my-vue-project":"Normalize my Vue project — extract hardcoded strings","normalize.normalize-plan":"Normalize Plan","normalize.normalize-scans-your-source":"Normalize scans your source files for hardcoded strings and extracts them into content models, making your project i18n-ready.","normalize.patches":"patches","normalize.pending-normalize-branches":"Pending normalize branches","normalize.prompt-your-ai-agent":"Prompt your AI agent","normalize.remove-navigation-labels-from":"Remove navigation labels from the extraction plan","normalize.request-changes-from-your":"Request changes from your agent","normalize.review-and-merge-normalize":"Review and merge normalize branches into your main branch.","normalize.review-the-plan-here":"Review the plan here","normalize.scan-srcpages-for-content":"Scan src/pages for content strings and create extraction plan","normalize.skipped":"skipped","normalize.source-patches":"Source Patches","normalize.source-trace":"Source Trace","normalize.start-reuse-for-the":"Start reuse for the extracted content models","normalize.strings-found":"strings found","normalize.the-agent-sends-the":"The agent sends the plan to this dashboard. You review every extraction, source trace, and patch before anything is applied.","normalize.track-normalize-history-and":"Track normalize history and manage extractions in Contentrain Studio.","normalize.whats-next-ask-your":"What's next — ask your agent","primary-sidebar.branches":"Branches","primary-sidebar.content":"Content","primary-sidebar.contentrain":"Contentrain","primary-sidebar.dashboard":"Dashboard","primary-sidebar.models":"Models","primary-sidebar.normalize":"Normalize","primary-sidebar.validate":"Validate","router.ts.branches":"branches","router.ts.content":"content","router.ts.dashboard":"dashboard","router.ts.models":"models","router.ts.normalize":"normalize","router.ts.validate":"validate","scroll-bar.vertical":"vertical","select-content.popper":"popper","separator.horizontal":"horizontal","source-trace-panel.content-entry":"Content Entry","source-trace-panel.reuse-patch":"Reuse Patch","source-trace-panel.source-file":"Source File","source-trace-panel.source-trace":"Source Trace","status-bar.locales":"locales","status-bar.models":"models","studio-hint.open-studio":"Open Studio","sub-sidebar-layout.no-models-found":"No models found","sub-sidebar-layout.search":"Search...","tree-select.no-scannable-files-found":"No scannable files found","trust-badge.blocked":"Blocked","trust-badge.partial":"Partial","trust-badge.pending-review":"Pending review","trust-badge.validated":"Validated","trust-badge.warnings":"warnings","use-api.ts.contenttype":"Content-Type","use-api.ts.delete":"DELETE","use-api.ts.post":"POST","use-formatters.ts.2digit":"2-digit","use-formatters.ts.short":"short","validate.all-checks-passed":"All checks passed","validate.all-issue-types-are":"All issue types are hidden. Adjust filters above to see issues.","validate.ask-your-agent":"Ask your agent","validate.by-model":"By Model","validate.by-severity":"By Severity","validate.check-content-quality-and":"Check content quality and i18n completeness","validate.content-quality-report":"Content quality report","validate.entries":"Entries","validate.errors":"Errors","validate.errors-2":"Errors (","validate.fix-all-validation-errors":"Fix all validation errors in my content","validate.fix-warnings":"fix warnings","validate.models":"Models","validate.notice":"notice","validate.notices":"Notices","validate.notices-2":"Notices (","validate.quality-check":"quality check","validate.refreshing-validation":"Refreshing validation...","validate.review-and-fix-validation":"Review and fix validation warnings","validate.updated":"Updated","validate.validate-my-content-models":"Validate my content models","validate.validation":"Validation","validate.validation-results-update-automatically":"Validation results update automatically when your agent runs validation tools.","validate.warnings":"Warnings","validate.warnings-2":"Warnings (","validate.your-content-and-models":"Your content and models are in great shape. No errors, warnings, or notices found."},ge="en";class fe{constructor(a,t){this._data=a,this._locale=null,this._defaultLocale=t||null}locale(a){return this._locale=a,this}get(a){let t;if(this._locale)t=this._data.get(this._locale)??{};else if(this._defaultLocale&&this._data.has(this._defaultLocale))t=this._data.get(this._defaultLocale);else{const n=this._data.keys().next().value;t=this._data.get(n)??{}}return a!==void 0?t[a]:t}}const be={"serve-ui-texts":new Map([["en",pe]])};function Te(e){const a=be[e];if(!a)throw new Error(`Unknown dictionary model: "${e}"`);return new fe(a,ge)}const x=C(!1),D=C(null),z=new Set;let s=null,w=null,p=1e3;function F(){if(s&&(s.readyState===WebSocket.OPEN||s.readyState===WebSocket.CONNECTING))return;const e=window.location.protocol==="https:"?"wss:":"ws:";s=new WebSocket(`${e}//${window.location.host}/ws`),s.addEventListener("open",()=>{x.value=!0,p=1e3}),s.addEventListener("message",a=>{try{const t=JSON.parse(a.data);D.value=new Date;for(const n of z)n(t)}catch{}}),s.addEventListener("close",()=>{x.value=!1,ve()}),s.addEventListener("error",()=>{s==null||s.close()})}function ve(){w||(w=setTimeout(()=>{w=null,p=Math.min(p*2,3e4),F()},p))}function _e(e){return P(()=>{e&&z.add(e),F()}),te(()=>{e&&z.delete(e)}),{connected:x,lastUpdate:D}}export{Me as P,me as S,Ie as a,Ce as b,xe as c,Te as d,Pe as e,we as f,Se as g,Ne as h,ke as i,Ee as j,Oe as k,_ as l,Ae as p,ze as r,le as t,_e as u,je as w};
@@ -8,7 +8,7 @@
8
8
  <link rel="preconnect" href="https://fonts.googleapis.com" />
9
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
10
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
11
- <script type="module" crossorigin src="/assets/index-BL1I-H3q.js"></script>
11
+ <script type="module" crossorigin src="/assets/index-RDdffBTh.js"></script>
12
12
  <link rel="stylesheet" crossorigin href="/assets/index-CG5NtNtt.css">
13
13
  </head>
14
14
  <body class="min-h-screen bg-background font-sans text-foreground antialiased">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "contentrain",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "license": "MIT",
5
5
  "description": "CLI for Contentrain — AI content governance infrastructure",
6
6
  "type": "module",
@@ -47,8 +47,8 @@
47
47
  "simple-git": "^3.27.0",
48
48
  "ws": "^8.18.0",
49
49
  "@contentrain/rules": "0.1.0",
50
- "@contentrain/query": "5.0.0",
51
50
  "@contentrain/mcp": "1.0.3",
51
+ "@contentrain/query": "5.0.0",
52
52
  "@contentrain/types": "0.1.0"
53
53
  },
54
54
  "devDependencies": {
@@ -1,16 +0,0 @@
1
- import{c as re,d as Ae,r as w,w as F,a as E,t as le,o as v,b as g,e as b,f as C,n as G,u as t,m as A,g as N,h as x,i as z,j as k,k as X,l as Y,p as $,q as S,s as M,F as K,v as J,x as ae,R as ve,y as V,z as B,A as he,B as P,C as Le,D as de}from"./index-BL1I-H3q.js";import{u as Pe,S as $e,_ as Re}from"./Input.vue_vue_type_script_setup_true_lang-BM6hi7u6.js";import{u as Z}from"./project-Cr3_1TVE.js";import{_ as oe}from"./index-cUml-HE9.js";import{B as be}from"./box-DTosQIFW.js";import{F as me}from"./file-text-B83xaNeI.js";import{S as _e}from"./shield-check-WNk6I8NY.js";import{G as ge}from"./git-branch-D_wEQy04.js";import{S as Te}from"./scan-search-DHnQpSxc.js";import{u as R,c as ne,a as q,P as Q,b as se,d as Se,w as De}from"./Presence-DnRF6qHR.js";import{u as Ie}from"./useDirection-JtiaofuP.js";import{P as W,r as ye,d as ie,u as we}from"./useWatch-CEXwnJFx.js";import{c as ze,u as He}from"./useNonce-BJjEh3mR.js";import"./ConfigProvider-RwBwhpvF.js";/**
2
- * @license lucide-vue-next v0.474.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const xe=re("LayoutDashboardIcon",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]);/**
7
- * @license lucide-vue-next v0.474.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const Oe=re("MoonIcon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/**
12
- * @license lucide-vue-next v0.474.0 - ISC
13
- *
14
- * This source code is licensed under the ISC license.
15
- * See the LICENSE file in the root directory of this source tree.
16
- */const Ne=re("SunIcon",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]),Be="/icon-color.svg",Me="/logo/color-icon-black-text.svg",Ve="/logo/color-icon-white-text.svg",qe=Ae("ui",()=>{const u=Pe({attribute:"class"}),e=w(!1),o=w(JSON.parse(localStorage.getItem("cr-dismissed-hints")??"{}"));function a(){u.value=u.value==="dark"?"light":"dark"}function n(l){o.value[l]=Date.now(),localStorage.setItem("cr-dismissed-hints",JSON.stringify(o.value))}function s(l){const r=o.value[l];if(!r)return!1;const c=10080*60*1e3;return Date.now()-r<c}return F(e,l=>{localStorage.setItem("cr-sidebar-collapsed",String(l))}),localStorage.getItem("cr-sidebar-collapsed")==="true"&&(e.value=!0),{colorMode:u,sidebarCollapsed:e,toggleTheme:a,dismissHint:n,isHintDismissed:s}}),[T,We]=ne("ScrollAreaRoot");var Xe=E({__name:"ScrollAreaRoot",props:{type:{type:String,required:!1,default:"hover"},dir:{type:String,required:!1},scrollHideDelay:{type:Number,required:!1,default:600},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(u,{expose:e}){const o=u,a=w(0),n=w(0),s=w(),i=w(),l=w(),r=w(),c=w(!1),d=w(!1),{type:m,dir:f,scrollHideDelay:y}=le(o),L=Ie(f);function D(){var h;(h=s.value)==null||h.scrollTo({top:0})}function I(){var h;(h=s.value)==null||h.scrollTo({top:0,left:0})}e({viewport:s,scrollTop:D,scrollTopLeft:I});const{forwardRef:p,currentElement:_}=R();return We({type:m,dir:L,scrollHideDelay:y,scrollArea:_,viewport:s,onViewportChange:h=>{s.value=h||void 0},content:i,onContentChange:h=>{i.value=h},scrollbarX:l,scrollbarXEnabled:c,scrollbarY:r,scrollbarYEnabled:d,onScrollbarXChange:h=>{l.value=h||void 0},onScrollbarYChange:h=>{r.value=h||void 0},onScrollbarXEnabledChange:h=>{c.value=h},onScrollbarYEnabledChange:h=>{d.value=h},onCornerWidthChange:h=>{a.value=h},onCornerHeightChange:h=>{n.value=h}}),(h,H)=>(v(),g(t(W),{ref:t(p),"as-child":o.asChild,as:h.as,dir:t(L),style:G({position:"relative","--reka-scroll-area-corner-width":`${a.value}px`,"--reka-scroll-area-corner-height":`${n.value}px`})},{default:b(()=>[C(h.$slots,"default")]),_:3},8,["as-child","as","dir","style"]))}}),Ye=Xe,je=E({__name:"ScrollAreaCornerImpl",setup(u){const e=T(),o=w(0),a=w(0),n=x(()=>!!o.value&&!!a.value);function s(){var r;const l=((r=e.scrollbarX.value)==null?void 0:r.offsetHeight)||0;e.onCornerHeightChange(l),a.value=l}function i(){var r;const l=((r=e.scrollbarY.value)==null?void 0:r.offsetWidth)||0;e.onCornerWidthChange(l),o.value=l}return q(e.scrollbarX.value,s),q(e.scrollbarY.value,i),F(()=>e.scrollbarX.value,s),F(()=>e.scrollbarY.value,i),(l,r)=>{var c;return n.value?(v(),g(t(W),A({key:0,style:{width:`${o.value}px`,height:`${a.value}px`,position:"absolute",right:t(e).dir.value==="ltr"?0:void 0,left:t(e).dir.value==="rtl"?0:void 0,bottom:0}},(c=l.$parent)==null?void 0:c.$props),{default:b(()=>[C(l.$slots,"default")]),_:3},16,["style"])):N("v-if",!0)}}}),Ue=je,Fe=E({__name:"ScrollAreaCorner",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(u){const e=u,{forwardRef:o}=R(),a=T(),n=x(()=>!!a.scrollbarX.value&&!!a.scrollbarY.value),s=x(()=>a.type.value!=="scroll"&&n.value);return(i,l)=>s.value?(v(),g(Ue,A({key:0},e,{ref:t(o)}),{default:b(()=>[C(i.$slots,"default")]),_:3},16)):N("v-if",!0)}}),Ge=Fe;function Ce(u,e){return o=>{if(u[0]===u[1]||e[0]===e[1])return e[0];const a=(e[1]-e[0])/(u[1]-u[0]);return e[0]+a*(o-u[0])}}function ee(u){const e=ke(u.viewport,u.content),o=u.scrollbar.paddingStart+u.scrollbar.paddingEnd,a=(u.scrollbar.size-o)*e;return Math.max(a,18)}function ke(u,e){const o=u/e;return Number.isNaN(o)?0:o}function Ke(u,e=()=>{}){let o={left:u.scrollLeft,top:u.scrollTop},a=0;return(function n(){const s={left:u.scrollLeft,top:u.scrollTop},i=o.left!==s.left,l=o.top!==s.top;(i||l)&&e(),o=s,a=window.requestAnimationFrame(n)})(),()=>window.cancelAnimationFrame(a)}function pe(u,e,o="ltr"){const a=ee(e),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,s=e.scrollbar.size-n,i=e.content-e.viewport,l=s-a,r=o==="ltr"?[0,i]:[i*-1,0],c=ze(u,r[0],r[1]);return Ce([0,i],[0,l])(c)}function U(u){return u?Number.parseInt(u,10):0}function Je(u,e,o,a="ltr"){const n=ee(o),s=n/2,i=e||s,l=n-i,r=o.scrollbar.paddingStart+i,c=o.scrollbar.size-o.scrollbar.paddingEnd-l,d=o.content-o.viewport,m=a==="ltr"?[0,d]:[d*-1,0];return Ce([r,c],m)(u)}function fe(u,e){return u>0&&u<e}var Ze=E({__name:"ScrollAreaScrollbarX",setup(u){const e=T(),o=te(),{forwardRef:a,currentElement:n}=R();z(()=>{n.value&&e.onScrollbarXChange(n.value)});const s=x(()=>o.sizes.value);return(i,l)=>(v(),g(Ee,{ref:t(a),"is-horizontal":!0,"data-orientation":"horizontal",style:G({bottom:0,left:t(e).dir.value==="rtl"?"var(--reka-scroll-area-corner-width)":0,right:t(e).dir.value==="ltr"?"var(--reka-scroll-area-corner-width)":0,"--reka-scroll-area-thumb-width":s.value?`${t(ee)(s.value)}px`:void 0}),onOnDragScroll:l[0]||(l[0]=r=>t(o).onDragScroll(r.x))},{default:b(()=>[C(i.$slots,"default")]),_:3},8,["style"]))}}),Qe=Ze,et=E({__name:"ScrollAreaScrollbarY",setup(u){const e=T(),o=te(),{forwardRef:a,currentElement:n}=R();z(()=>{n.value&&e.onScrollbarYChange(n.value)});const s=x(()=>o.sizes.value);return(i,l)=>(v(),g(Ee,{ref:t(a),"is-horizontal":!1,"data-orientation":"vertical",style:G({top:0,right:t(e).dir.value==="ltr"?0:void 0,left:t(e).dir.value==="rtl"?0:void 0,bottom:"var(--reka-scroll-area-corner-height)","--reka-scroll-area-thumb-height":s.value?`${t(ee)(s.value)}px`:void 0}),onOnDragScroll:l[0]||(l[0]=r=>t(o).onDragScroll(r.y))},{default:b(()=>[C(i.$slots,"default")]),_:3},8,["style"]))}}),tt=et,ot=E({__name:"ScrollAreaScrollbarAuto",props:{forceMount:{type:Boolean,required:!1}},setup(u){const e=T(),o=j(),{forwardRef:a}=R(),n=w(!1),s=se(()=>{if(e.viewport.value){const i=e.viewport.value.offsetWidth<e.viewport.value.scrollWidth,l=e.viewport.value.offsetHeight<e.viewport.value.scrollHeight;n.value=o.isHorizontal.value?i:l}},10);return z(()=>s()),q(e.viewport,s),q(e.content,s),(i,l)=>(v(),g(t(Q),{present:i.forceMount||n.value},{default:b(()=>[k(ue,A(i.$attrs,{ref:t(a),"data-state":n.value?"visible":"hidden"}),{default:b(()=>[C(i.$slots,"default")]),_:3},16,["data-state"])]),_:3},8,["present"]))}}),ce=ot,rt=E({inheritAttrs:!1,__name:"ScrollAreaScrollbarGlimpse",props:{forceMount:{type:Boolean,required:!1}},setup(u){const e=T(),o=j(),{forwardRef:a}=R(),{state:n,dispatch:s}=Se("hidden",{hidden:{POINTER_ENTER:"glimpse",SCROLL:"scrolling"},glimpse:{HIDE:"hidden",POINTER_LEAVE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"glimpse"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}}),i=x(()=>n.value!=="hidden");function l(){s("POINTER_ENTER")}function r(){s("POINTER_LEAVE")}const c=se(()=>s("SCROLL_END"),100);return X(d=>{if(n.value==="glimpse"){const m=window.setTimeout(()=>s("HIDE"),e.scrollHideDelay.value);d(()=>{window.clearTimeout(m)})}}),X(d=>{if(n.value==="idle"){const m=window.setTimeout(()=>s("HIDE"),e.scrollHideDelay.value);d(()=>{window.clearTimeout(m)})}}),X(d=>{const m=e.viewport.value,f=o.isHorizontal.value?"scrollLeft":"scrollTop";if(m){let y=m[f];const L=()=>{const D=m[f];y!==D&&(s("SCROLL"),c()),y=D};m.addEventListener("scroll",L),d(()=>{m.removeEventListener("scroll",L)})}}),z(()=>{const d=e.scrollArea.value;d&&(d.addEventListener("pointerenter",l),d.addEventListener("pointerleave",r))}),Y(()=>{const d=e.scrollArea.value;d&&(d.removeEventListener("pointerenter",l),d.removeEventListener("pointerleave",r))}),(d,m)=>(v(),g(t(Q),{present:d.forceMount||i.value},{default:b(()=>[k(ce,A(d.$attrs,{ref:t(a),"data-state":i.value?"visible":"hidden"}),{default:b(()=>[C(d.$slots,"default")]),_:3},16,["data-state"])]),_:3},8,["present"]))}}),lt=rt,at=E({inheritAttrs:!1,__name:"ScrollAreaScrollbarHover",props:{forceMount:{type:Boolean,required:!1}},setup(u){const e=T(),{forwardRef:o}=R();let a;const n=w(!1);function s(){window.clearTimeout(a),n.value=!0}function i(){a=window.setTimeout(()=>{n.value=!1},e.scrollHideDelay.value)}return z(()=>{const l=e.scrollArea.value;l&&(l.addEventListener("pointerenter",s),l.addEventListener("pointerleave",i))}),Y(()=>{const l=e.scrollArea.value;l&&(window.clearTimeout(a),l.removeEventListener("pointerenter",s),l.removeEventListener("pointerleave",i))}),(l,r)=>(v(),g(t(Q),{present:l.forceMount||n.value},{default:b(()=>[k(ce,A(l.$attrs,{ref:t(o),"data-state":n.value?"visible":"hidden"}),{default:b(()=>[C(l.$slots,"default")]),_:3},16,["data-state"])]),_:3},8,["present"]))}}),nt=at,st=E({__name:"ScrollAreaScrollbarScroll",props:{forceMount:{type:Boolean,required:!1}},setup(u){const e=T(),o=j(),{forwardRef:a}=R(),{state:n,dispatch:s}=Se("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}}),i=x(()=>n.value!=="hidden");X(r=>{if(n.value==="idle"){const c=window.setTimeout(()=>s("HIDE"),e.scrollHideDelay.value);r(()=>{window.clearTimeout(c)})}});const l=se(()=>s("SCROLL_END"),100);return X(r=>{const c=e.viewport.value,d=o.isHorizontal.value?"scrollLeft":"scrollTop";if(c){let m=c[d];const f=()=>{const y=c[d];m!==y&&(s("SCROLL"),l()),m=y};c.addEventListener("scroll",f),r(()=>{c.removeEventListener("scroll",f)})}}),(r,c)=>(v(),g(t(Q),{present:r.forceMount||i.value},{default:b(()=>[k(ue,A(r.$attrs,{ref:t(a),"data-state":i.value?"visible":"hidden"}),{default:b(()=>[C(r.$slots,"default")]),_:3},16,["data-state"])]),_:3},8,["present"]))}}),it=st;const[j,ct]=ne("ScrollAreaScrollbar");var ut=E({inheritAttrs:!1,__name:"ScrollAreaScrollbar",props:{orientation:{type:String,required:!1,default:"vertical"},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"div"}},setup(u){const e=u,{forwardRef:o}=R(),a=T(),n=x(()=>e.orientation==="horizontal");F(n,()=>{n.value?a.onScrollbarXEnabledChange(!0):a.onScrollbarYEnabledChange(!0)},{immediate:!0}),Y(()=>{a.onScrollbarXEnabledChange(!1),a.onScrollbarYEnabledChange(!1)});const{orientation:s,forceMount:i,asChild:l,as:r}=le(e);return ct({orientation:s,forceMount:i,isHorizontal:n,as:r,asChild:l}),(c,d)=>t(a).type.value==="hover"?(v(),g(nt,A({key:0},c.$attrs,{ref:t(o),"force-mount":t(i)}),{default:b(()=>[C(c.$slots,"default")]),_:3},16,["force-mount"])):t(a).type.value==="scroll"?(v(),g(it,A({key:1},c.$attrs,{ref:t(o),"force-mount":t(i)}),{default:b(()=>[C(c.$slots,"default")]),_:3},16,["force-mount"])):t(a).type.value==="glimpse"?(v(),g(lt,A({key:2},c.$attrs,{ref:t(o),"force-mount":t(i)}),{default:b(()=>[C(c.$slots,"default")]),_:3},16,["force-mount"])):t(a).type.value==="auto"?(v(),g(ce,A({key:3},c.$attrs,{ref:t(o),"force-mount":t(i)}),{default:b(()=>[C(c.$slots,"default")]),_:3},16,["force-mount"])):t(a).type.value==="always"?(v(),g(ue,A({key:4},c.$attrs,{ref:t(o),"data-state":"visible"}),{default:b(()=>[C(c.$slots,"default")]),_:3},16)):N("v-if",!0)}}),dt=ut;const[te,pt]=ne("ScrollAreaScrollbarVisible");var ft=E({__name:"ScrollAreaScrollbarVisible",setup(u){const e=T(),o=j(),{forwardRef:a}=R(),n=w({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),s=x(()=>{const p=ke(n.value.viewport,n.value.content);return p>0&&p<1}),i=w(),l=w(0);function r(p,_){if(y.value){const h=e.viewport.value.scrollLeft+p.deltaY;e.viewport.value.scrollLeft=h,fe(h,_)&&p.preventDefault()}else{const h=e.viewport.value.scrollTop+p.deltaY;e.viewport.value.scrollTop=h,fe(h,_)&&p.preventDefault()}}function c(p,_){y.value?l.value=_.x:l.value=_.y}function d(p){l.value=0}function m(p){n.value=p}function f(p,_){return Je(p,l.value,n.value,_)}const y=x(()=>o.isHorizontal.value);function L(p){y.value?e.viewport.value.scrollLeft=f(p,e.dir.value):e.viewport.value.scrollTop=f(p)}function D(){if(y.value){if(e.viewport.value&&i.value){const p=e.viewport.value.scrollLeft,_=pe(p,n.value,e.dir.value);i.value.style.transform=`translate3d(${_}px, 0, 0)`}}else if(e.viewport.value&&i.value){const p=e.viewport.value.scrollTop,_=pe(p,n.value);i.value.style.transform=`translate3d(0, ${_}px, 0)`}}function I(p){i.value=p}return pt({sizes:n,hasThumb:s,handleWheelScroll:r,handleThumbDown:c,handleThumbUp:d,handleSizeChange:m,onThumbPositionChange:D,onThumbChange:I,onDragScroll:L}),(p,_)=>y.value?(v(),g(Qe,A({key:0},p.$attrs,{ref:t(a)}),{default:b(()=>[C(p.$slots,"default")]),_:3},16)):(v(),g(tt,A({key:1},p.$attrs,{ref:t(a)}),{default:b(()=>[C(p.$slots,"default")]),_:3},16))}}),ue=ft,vt=E({__name:"ScrollAreaScrollbarImpl",props:{isHorizontal:{type:Boolean,required:!0}},emits:["onDragScroll","onWheelScroll","onThumbPointerDown"],setup(u,{emit:e}){const o=u,a=e,n=T(),s=te(),i=j(),{forwardRef:l,currentElement:r}=R(),c=w(""),d=w();function m(p){var _,h;if(d.value){const H=p.clientX-((_=d.value)==null?void 0:_.left),O=p.clientY-((h=d.value)==null?void 0:h.top);a("onDragScroll",{x:H,y:O})}}function f(p){p.button===0&&(p.target.setPointerCapture(p.pointerId),d.value=r.value.getBoundingClientRect(),c.value=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",n.viewport&&(n.viewport.value.style.scrollBehavior="auto"),m(p))}function y(p){m(p)}function L(p){const _=p.target;_.hasPointerCapture(p.pointerId)&&_.releasePointerCapture(p.pointerId),document.body.style.webkitUserSelect=c.value,n.viewport&&(n.viewport.value.style.scrollBehavior=""),d.value=void 0}function D(p){var O;const _=p.target,h=(O=r.value)==null?void 0:O.contains(_),H=s.sizes.value.content-s.sizes.value.viewport;h&&s.handleWheelScroll(p,H)}z(()=>{document.addEventListener("wheel",D,{passive:!1})}),Y(()=>{document.removeEventListener("wheel",D)});function I(){var p,_,h,H,O;r.value&&(o.isHorizontal?s.handleSizeChange({content:((p=n.viewport.value)==null?void 0:p.scrollWidth)??0,viewport:((_=n.viewport.value)==null?void 0:_.offsetWidth)??0,scrollbar:{size:r.value.clientWidth??0,paddingStart:U(getComputedStyle(r.value).paddingLeft),paddingEnd:U(getComputedStyle(r.value).paddingRight)}}):s.handleSizeChange({content:((h=n.viewport.value)==null?void 0:h.scrollHeight)??0,viewport:((H=n.viewport.value)==null?void 0:H.offsetHeight)??0,scrollbar:{size:((O=r.value)==null?void 0:O.clientHeight)??0,paddingStart:U(getComputedStyle(r.value).paddingTop),paddingEnd:U(getComputedStyle(r.value).paddingBottom)}}),s.onThumbPositionChange())}return q(r,I),q(n.content,I),(p,_)=>(v(),g(t(W),{ref:t(l),style:{position:"absolute"},"data-scrollbarimpl":"",as:t(i).as.value,"as-child":t(i).asChild.value,onPointerdown:f,onPointermove:y,onPointerup:L},{default:b(()=>[C(p.$slots,"default")]),_:3},8,["as","as-child"]))}}),Ee=vt,ht=E({__name:"ScrollAreaThumb",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(u){const e=u,o=T(),a=te();function n(f){const L=f.target.getBoundingClientRect(),D=f.clientX-L.left,I=f.clientY-L.top;a.handleThumbDown(f,{x:D,y:I})}function s(f){a.handleThumbUp(f)}const{forwardRef:i,currentElement:l}=R(),r=w(),c=x(()=>o.viewport.value);function d(){if(!r.value){const f=Ke(c.value,a.onThumbPositionChange);r.value=f,a.onThumbPositionChange()}}const m=x(()=>a.sizes.value);return De(m,()=>{a.onThumbChange(l.value),c.value&&(a.onThumbPositionChange(),c.value.addEventListener("scroll",d))}),Y(()=>{var f;c.value.removeEventListener("scroll",d),(f=o.viewport.value)==null||f.removeEventListener("scroll",d)}),(f,y)=>(v(),g(t(W),{ref:t(i),"data-state":t(a).hasThumb?"visible":"hidden",style:{width:"var(--reka-scroll-area-thumb-width)",height:"var(--reka-scroll-area-thumb-height)"},"as-child":e.asChild,as:f.as,onPointerdown:n,onPointerup:s},{default:b(()=>[C(f.$slots,"default")]),_:3},8,["data-state","as-child","as"]))}}),bt=ht,mt=E({inheritAttrs:!1,__name:"ScrollAreaViewport",props:{nonce:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(u,{expose:e}){const o=u,{nonce:a}=le(o),n=He(a),s=T(),i=w();z(()=>{s.onViewportChange(i.value),s.onContentChange(r.value)}),e({viewportElement:i});const{forwardRef:l,currentElement:r}=R();return(c,d)=>(v(),$(K,null,[S("div",A({ref_key:"viewportElement",ref:i,"data-reka-scroll-area-viewport":"",style:{overflowX:t(s).scrollbarXEnabled.value?"scroll":"hidden",overflowY:t(s).scrollbarYEnabled.value?"scroll":"hidden"}},c.$attrs,{tabindex:0}),[k(t(W),{ref:t(l),style:G({minWidth:t(s).scrollbarXEnabled.value?"fit-content":void 0}),"as-child":o.asChild,as:c.as},{default:b(()=>[C(c.$slots,"default")]),_:3},8,["style","as-child","as"])],16),k(t(W),{as:"style",nonce:t(n)},{default:b(()=>d[0]||(d[0]=[M(" /* Hide scrollbars cross-browser and enable momentum scroll for touch devices */ [data-reka-scroll-area-viewport] { scrollbar-width:none; -ms-overflow-style:none; -webkit-overflow-scrolling:touch; } [data-reka-scroll-area-viewport]::-webkit-scrollbar { display:none; } ")])),_:1,__:[0]},8,["nonce"])],64))}}),_t=mt;const gt={class:"group flex h-screen w-18 min-w-18 flex-col overflow-hidden border-r border-border bg-card transition-all duration-200 ease-in-out hover:w-55 hover:min-w-55 xl:w-55 xl:min-w-55"},St={class:"flex flex-1 flex-col gap-1 px-3 pt-4"},yt={class:"truncate opacity-0 transition-opacity duration-200 group-hover:opacity-100 xl:opacity-100"},wt={class:"flex items-center gap-3 px-3 pb-4 mt-auto"},xt={class:"truncate opacity-0 transition-opacity duration-200 group-hover:opacity-100 xl:opacity-100"},Ct=E({__name:"PrimarySidebar",setup(u){const e=J(),o=qe(),a=Z(),n=[{icon:xe,label:"Dashboard",to:"/",exact:!0},{icon:be,label:"Models",to:"/models"},{icon:me,label:"Content",to:"/content"},{icon:_e,label:"Validate",to:"/validate"},{icon:ge,label:"Branches",to:"/branches"},{icon:Te,label:"Normalize",to:"/normalize"}];function s(r){return r.exact?e.path===r.to:e.path.startsWith(r.to)}const i=x(()=>{var r,c;return((c=(r=a.status)==null?void 0:r.branches)==null?void 0:c.unmerged)??0}),l=x(()=>{var c;const r=(c=a.status)==null?void 0:c.validation;return r?r.errors+r.warnings:0});return(r,c)=>(v(),$("aside",gt,[c[1]||(c[1]=S("div",{class:"flex h-14 items-center px-4 shrink-0"},[S("img",{src:Be,alt:"Contentrain",class:"size-8 shrink-0 block group-hover:hidden xl:hidden"}),S("img",{src:Me,alt:"Contentrain",class:"h-7 shrink-0 hidden group-hover:block xl:block dark:hidden"}),S("img",{src:Ve,alt:"Contentrain",class:"h-7 shrink-0 hidden dark:group-hover:block dark:xl:block"})],-1)),S("nav",St,[(v(),$(K,null,ae(n,d=>k(t(ve),{key:d.to,to:d.to,class:V(t(B)("flex items-center gap-3 rounded-lg px-3 py-2.5 text-sm transition-all duration-150",s(d)?"bg-background text-primary font-medium shadow-sm border border-border":"text-muted-foreground hover:bg-background/60 hover:text-foreground"))},{default:b(()=>[(v(),g(he(d.icon),{class:"size-5 shrink-0"})),S("span",yt,P(d.label),1),d.to==="/branches"&&i.value>0?(v(),g(t(oe),{key:0,variant:"secondary",class:"ml-auto text-[10px] h-5 px-1.5 opacity-0 group-hover:opacity-100 xl:opacity-100 transition-opacity"},{default:b(()=>[M(P(i.value),1)]),_:1})):N("",!0),d.to==="/validate"&&l.value>0?(v(),g(t(oe),{key:1,class:"ml-auto text-[10px] h-5 px-1.5 bg-status-error/10 text-status-error border-0 opacity-0 group-hover:opacity-100 xl:opacity-100 transition-opacity"},{default:b(()=>[M(P(l.value),1)]),_:1})):N("",!0)]),_:2},1032,["to","class"])),64))]),S("div",wt,[S("button",{class:V(t(B)("flex items-center gap-3 rounded-lg px-3 py-2.5 text-sm w-full transition-all duration-150","text-muted-foreground hover:bg-background/60 hover:text-foreground")),onClick:c[0]||(c[0]=d=>t(o).toggleTheme())},[t(o).colorMode==="dark"?(v(),g(t(Ne),{key:0,class:"size-5 shrink-0"})):(v(),g(t(Oe),{key:1,class:"size-5 shrink-0"})),S("span",xt,P(t(o).colorMode==="dark"?"Light mode":"Dark mode"),1)],2)])]))}}),kt=E({__name:"ScrollBar",props:{orientation:{default:"vertical"},forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(u){const e=u,o=ye(e,"class");return(a,n)=>(v(),g(t(dt),A({"data-slot":"scroll-area-scrollbar"},t(o),{class:t(B)("flex touch-none p-px transition-colors select-none",u.orientation==="vertical"&&"h-full w-2.5 border-l border-l-transparent",u.orientation==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",e.class)}),{default:b(()=>[k(t(bt),{"data-slot":"scroll-area-thumb",class:"bg-border relative flex-1 rounded-full"})]),_:1},16,["class"]))}}),Et=E({__name:"ScrollArea",props:{type:{},dir:{},scrollHideDelay:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(u){const e=u,o=ye(e,"class");return(a,n)=>(v(),g(t(Ye),A({"data-slot":"scroll-area"},t(o),{class:t(B)("relative",e.class)}),{default:b(()=>[k(t(_t),{"data-slot":"scroll-area-viewport",class:"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1"},{default:b(()=>[C(a.$slots,"default")]),_:3}),k(kt),k(t(Ge))]),_:3},16,["class"]))}}),At={class:"flex h-full"},Lt={class:"hidden w-55 shrink-0 flex-col border-r border-border sidebar-gradient lg:flex"},Pt={class:"p-3"},$t={class:"relative"},Rt=["onClick"],Tt={class:"truncate flex-1"},Dt={key:0,class:"px-3 py-6 text-center text-xs text-muted-foreground"},It={class:"flex-1 min-w-0 overflow-y-auto custom-scrollbar"},zt=E({__name:"SubSidebarLayout",props:{basePath:{},paramKey:{}},setup(u){const e=ie("serve-ui-texts").locale("en").get(),o=u,a=J(),n=Le(),s=Z(),i=w(""),l=x(()=>{var f;const d=((f=s.status)==null?void 0:f.models)??[];if(!i.value)return d;const m=i.value.toLowerCase();return d.filter(y=>y.id.toLowerCase().includes(m)||y.domain.toLowerCase().includes(m))}),r=x(()=>a.params[o.paramKey]),c={collection:"bg-primary/10 text-primary",singleton:"bg-status-info/10 text-status-info",document:"bg-status-success/10 text-status-success",dictionary:"bg-status-warning/10 text-status-warning"};return(d,m)=>(v(),$("div",At,[S("aside",Lt,[S("div",Pt,[S("div",$t,[k(t($e),{class:"absolute left-2.5 top-2.5 size-3.5 text-muted-foreground"}),k(t(Re),{modelValue:i.value,"onUpdate:modelValue":m[0]||(m[0]=f=>i.value=f),placeholder:t(e)["sub-sidebar-layout.search"],class:"h-8 bg-background pl-8 text-xs"},null,8,["modelValue","placeholder"])])]),k(t(Et),{class:"flex-1 px-1.5"},{default:b(()=>[(v(!0),$(K,null,ae(l.value,f=>{var y;return v(),$("button",{key:f.id,class:V(t(B)("flex w-full items-center gap-2 rounded-md px-3 py-2 text-left text-sm transition-colors",r.value===f.id?"bg-background font-medium text-primary shadow-sm border border-border":"text-muted-foreground hover:bg-background/60 hover:text-foreground")),onClick:L=>t(n).push(`${u.basePath}/${f.id}`)},[S("span",{class:V(t(B)("size-1.5 rounded-full shrink-0",((y=c[f.kind])==null?void 0:y.split(" ")[0])??"bg-muted"))},null,2),S("span",Tt,P(f.id),1),k(t(oe),{variant:"secondary",class:"text-[10px] shrink-0 h-4 px-1"},{default:b(()=>[M(P(f.kind==="singleton"?"1":f.fields),1)]),_:2},1024)],10,Rt)}),128)),l.value.length===0?(v(),$("div",Dt,P(t(e)["sub-sidebar-layout.no-models-found"]),1)):N("",!0)]),_:1})]),S("div",It,[C(d.$slots,"default")])]))}}),Ht={class:"flex items-center gap-4 border-t border-border bg-background px-6 py-1.5 text-xs text-muted-foreground"},Ot={class:"flex items-center gap-1.5"},Nt={key:0,class:"ml-auto"},Bt=E({__name:"StatusBar",setup(u){const e=ie("serve-ui-texts").locale("en").get(),o=Z(),{connected:a,lastUpdate:n}=we(),s=x(()=>{var r;return((r=o.status)==null?void 0:r.models.length)??0}),i=x(()=>{var r,c;return((c=(r=o.status)==null?void 0:r.config)==null?void 0:c.locales.supported.length)??0}),l=x(()=>{if(!n.value)return"";const r=Date.now()-n.value.getTime();return r<5e3?"just now":r<6e4?`${Math.floor(r/1e3)}s ago`:r<36e5?`${Math.floor(r/6e4)}m ago`:n.value.toLocaleTimeString()});return(r,c)=>(v(),$("footer",Ht,[S("span",Ot,[S("span",{class:V(["size-1.5 rounded-full",t(a)?"bg-status-success":"bg-status-error"])},null,2),M(" "+P(t(a)?"watching":"disconnected"),1)]),c[0]||(c[0]=S("span",{class:"h-3 w-px bg-border"},null,-1)),S("span",null,P(s.value)+" "+P(t(e)["status-bar.models"]),1),c[1]||(c[1]=S("span",{class:"h-3 w-px bg-border"},null,-1)),S("span",null,P(i.value)+" "+P(t(e)["status-bar.locales"]),1),l.value?(v(),$("span",Nt,P(l.value),1)):N("",!0)]))}}),Mt={class:"fixed bottom-0 left-0 right-0 z-50 border-t border-border bg-background"},Vt={class:"flex items-center justify-around py-2"},qt=E({__name:"MobileNav",setup(u){const e=ie("serve-ui-texts").locale("en").get(),o=J(),a=[{icon:xe,label:e["mobile-nav.dash"],to:"/",exact:!0},{icon:be,label:e["mobile-nav.models"],to:"/models"},{icon:me,label:e["mobile-nav.content"],to:"/content"},{icon:_e,label:e["mobile-nav.valid"],to:"/validate"},{icon:ge,label:e["mobile-nav.branch"],to:"/branches"}];function n(s){return s.exact?o.path===s.to:o.path.startsWith(s.to)}return(s,i)=>(v(),$("nav",Mt,[S("div",Vt,[(v(),$(K,null,ae(a,l=>k(t(ve),{key:l.to,to:l.to,class:V(t(B)("flex flex-col items-center gap-0.5 px-3 py-1 text-[10px]",n(l)?"text-primary":"text-muted-foreground"))},{default:b(()=>[(v(),g(he(l.icon),{class:"size-5"})),M(" "+P(l.label),1)]),_:2},1032,["to","class"])),64))])]))}}),Wt={class:"flex h-screen max-h-screen w-full max-w-480 mx-auto"},Xt={class:"flex flex-1 flex-col min-w-0"},Yt={class:"flex-1 overflow-hidden pb-16 md:pb-0"},jt={key:1,class:"h-full overflow-y-auto custom-scrollbar"},so=E({__name:"AppLayout",setup(u){const e=J(),o=Z(),a=x(()=>e.meta.subSidebar===!0),n=x(()=>e.meta.basePath??""),s=x(()=>e.meta.paramKey??"");return we(i=>{(i.type==="config:changed"||i.type==="model:changed"||i.type==="context:changed")&&o.fetchStatus()}),z(()=>{o.fetchStatus()}),(i,l)=>(v(),$("div",Wt,[k(Ct,{class:"hidden md:flex"}),S("div",Xt,[S("main",Yt,[a.value?(v(),g(zt,{key:0,"base-path":n.value,"param-key":s.value},{default:b(()=>[k(t(de))]),_:1},8,["base-path","param-key"])):(v(),$("div",jt,[k(t(de))]))]),k(Bt,{class:"hidden md:flex"})]),k(qt,{class:"md:hidden"})]))}});export{so as default};
@@ -1 +0,0 @@
1
- import{c as o}from"./Presence-DnRF6qHR.js";const[e]=o("ConfigProvider");export{e as i};
@@ -1 +0,0 @@
1
- import{i as r}from"./ConfigProvider-RwBwhpvF.js";import{r as n,h as i}from"./index-BL1I-H3q.js";function c(t){const e=r({dir:n("ltr")});return i(()=>{var o;return(t==null?void 0:t.value)||((o=e.dir)==null?void 0:o.value)||"ltr"})}export{c as u};