velloo 0.4.0 → 0.5.0

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 (105) hide show
  1. package/README.md +29 -7
  2. package/canvas/assets/index-BDBBHdHH.css +2 -0
  3. package/canvas/assets/index-QdsLJNY9.js +29 -0
  4. package/canvas/assets/lucide-all-R8DUyY-B.js +1 -0
  5. package/canvas/index.html +2 -2
  6. package/chunk-0rdf6trc.js +2 -0
  7. package/{chunk-tkvb3wb8.js → chunk-0wafc9aw.js} +1 -1
  8. package/chunk-0wqxb8r9.js +3 -0
  9. package/{chunk-hzjzmkp6.js → chunk-10hap8kc.js} +1 -1
  10. package/chunk-18eqh3s1.js +2 -0
  11. package/chunk-19xyzep8.js +2 -0
  12. package/{chunk-sn9vg42q.js → chunk-1h3gqy7w.js} +1 -1
  13. package/{chunk-3kqtny5t.js → chunk-33t0csxs.js} +2 -2
  14. package/{chunk-0r80246c.js → chunk-3ffs39e8.js} +1 -1
  15. package/chunk-42bj6r30.js +3 -0
  16. package/chunk-49w26e94.js +5 -0
  17. package/{chunk-nte0t7v3.js → chunk-4pkw6d9n.js} +2 -2
  18. package/{chunk-vh4144az.js → chunk-4sjvdakg.js} +1 -1
  19. package/chunk-5f0xv80x.js +5 -0
  20. package/{chunk-2fgfex9b.js → chunk-5ma8zbty.js} +1 -1
  21. package/{chunk-8yz604tw.js → chunk-5y9hem1j.js} +1 -1
  22. package/chunk-66qgm91k.js +708 -0
  23. package/{chunk-46xykc71.js → chunk-675tr675.js} +1 -1
  24. package/{chunk-7cktk5qr.js → chunk-6cgvzwec.js} +1 -1
  25. package/chunk-6k05kqnc.js +3 -0
  26. package/{chunk-09385g5r.js → chunk-6ytv1v2r.js} +1 -1
  27. package/{chunk-33r6266k.js → chunk-75sc3adm.js} +1 -1
  28. package/chunk-7cexzg71.js +2 -0
  29. package/chunk-98rann8t.js +2 -0
  30. package/{chunk-e56eb38j.js → chunk-a16mz9zf.js} +1 -1
  31. package/chunk-afe25dpr.js +2 -0
  32. package/{chunk-zkn1m8tw.js → chunk-ahm4zd56.js} +1 -1
  33. package/chunk-asvdqkdp.js +6 -0
  34. package/{chunk-8sfx5x8k.js → chunk-b3x80jc1.js} +1 -1
  35. package/{chunk-4rvmpsda.js → chunk-cdqah1hy.js} +1 -1
  36. package/{chunk-z1r0sc3k.js → chunk-cqt1dpxd.js} +1 -1
  37. package/{chunk-k10n8na7.js → chunk-d4r0myxr.js} +1 -1
  38. package/{chunk-cdxy4xzs.js → chunk-d9kx7v12.js} +1 -1
  39. package/{chunk-t4zss1tk.js → chunk-df557bn4.js} +1 -1
  40. package/{chunk-25j8vgpa.js → chunk-edgwx026.js} +1 -1
  41. package/chunk-emv1j50t.js +2 -0
  42. package/{chunk-3gbmq4jz.js → chunk-ewgdcgrk.js} +1 -1
  43. package/chunk-f45p6kcb.js +2 -0
  44. package/{chunk-8krqgzny.js → chunk-gn9wcc1b.js} +1 -1
  45. package/{chunk-vbe2r4kv.js → chunk-hr3gbak5.js} +2 -2
  46. package/{chunk-y0rwf1ze.js → chunk-j7tzbt3d.js} +1 -1
  47. package/chunk-mm8wv3bg.js +3 -0
  48. package/chunk-nbbnb5e9.js +3 -0
  49. package/{chunk-c4fym47a.js → chunk-ngbqd7kb.js} +32 -12
  50. package/chunk-nkqtnwzz.js +2 -0
  51. package/{chunk-jtsn41cs.js → chunk-q3kf8243.js} +1 -1
  52. package/{chunk-c6hywdvq.js → chunk-qpv28z8d.js} +1 -1
  53. package/{chunk-n5acf0s3.js → chunk-rd65xm6r.js} +1 -1
  54. package/{chunk-ys3s5gaa.js → chunk-ryga3ny1.js} +1 -1
  55. package/{chunk-cvn689d5.js → chunk-sb5h27w9.js} +2 -2
  56. package/chunk-tw4kw4ps.js +22 -0
  57. package/chunk-v6c3h9ft.js +3 -0
  58. package/chunk-vgx47anc.js +3 -0
  59. package/chunk-vrvkvb0v.js +244 -0
  60. package/{chunk-v0syg2hx.js → chunk-vryadew3.js} +9 -7
  61. package/chunk-w6f40y2x.js +11 -0
  62. package/{chunk-c5zjen06.js → chunk-we8hvy6e.js} +1 -1
  63. package/chunk-wkqrb2tz.js +4 -0
  64. package/{chunk-js6mz7h1.js → chunk-xzkczmgg.js} +1 -1
  65. package/{chunk-8yadb6xz.js → chunk-ycrddh47.js} +1 -1
  66. package/{chunk-bhx8k09w.js → chunk-z78c1kf8.js} +1 -1
  67. package/cli.js +1 -1
  68. package/package.json +3 -1
  69. package/pkgs/provider-html/src/index.ts +68 -0
  70. package/pkgs/provider-html/src/registry.ts +121 -0
  71. package/pkgs/provider-html/src/version.ts +1 -0
  72. package/pkgs/provider-none/src/components-inline.tsx +12 -3
  73. package/pkgs/provider-none/src/components.tsx +11 -3
  74. package/pkgs/provider-none/src/manifest.ts +1 -0
  75. package/pkgs/schema/src/comment.ts +12 -0
  76. package/pkgs/schema/src/config.ts +33 -1
  77. package/pkgs/schema/src/css-declarations.ts +41 -0
  78. package/pkgs/schema/src/index.ts +4 -0
  79. package/pkgs/schema/src/theme.ts +40 -0
  80. package/plugins/claude/velloo/agents/velloo-design-reviewer.md +56 -13
  81. package/plugins/claude/velloo/agents/velloo-designer.md +4 -1
  82. package/skills/velloo-setup/SKILL.md +19 -55
  83. package/canvas/assets/index-CSSyvzzo.css +0 -2
  84. package/canvas/assets/index-MXiDRs_Q.js +0 -29
  85. package/canvas/assets/lucide-all-BSrW0hTo.js +0 -1
  86. package/chunk-0zen7bzb.js +0 -3
  87. package/chunk-1tdh4h14.js +0 -6
  88. package/chunk-38ev3cp3.js +0 -3
  89. package/chunk-5qd2ykvw.js +0 -26
  90. package/chunk-6qfyem23.js +0 -2
  91. package/chunk-6z0kpe65.js +0 -2
  92. package/chunk-8g5ghy46.js +0 -5
  93. package/chunk-cgzhcvsj.js +0 -2
  94. package/chunk-egccxmed.js +0 -688
  95. package/chunk-fjbzk4sw.js +0 -3
  96. package/chunk-gsne0ap4.js +0 -2
  97. package/chunk-nc5k1ez4.js +0 -2
  98. package/chunk-njhdn9j0.js +0 -4
  99. package/chunk-q4d60wr3.js +0 -3
  100. package/chunk-rsy246re.js +0 -2
  101. package/chunk-syg6k8m0.js +0 -10
  102. package/chunk-t8xk4thc.js +0 -244
  103. package/chunk-tqwe5tc3.js +0 -2
  104. package/chunk-va9v9y5m.js +0 -2
  105. package/chunk-yjmawrv5.js +0 -5
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{isCancel,select}from"./chunk-80fjfyha.js";import{preflightScreens}from"./chunk-egccxmed.js";import{fail}from"./chunk-s23gtejf.js";import{copyToClipboard}from"./chunk-vbk1qhdz.js";import{require_picocolors}from"./chunk-jrsknzjt.js";import{__toESM}from"./chunk-2smsg2ct.js";import{stripVTControlCharacters}from"util";var import_picocolors=__toESM(require_picocolors(),1);function plural(count,noun){return`${count} ${noun}${count===1?"":"s"}`}function formatFailures(command,failures){let byScreen=new Map;for(let failure of failures)byScreen.set(failure.screenId,[...byScreen.get(failure.screenId)??[],failure]);let notDrawn=[...byScreen.values()].filter((group)=>group.some((failure)=>failure.componentId===null)),placeholders=[...byScreen.values()].filter((group)=>!notDrawn.includes(group)).reduce((sum,group)=>sum+group.length,0),consequences=[placeholders>0&&`${plural(placeholders,"component")} will appear as placeholders`,notDrawn.length>0&&`${plural(notDrawn.length,"screen")} will not render at all`].filter(Boolean),lines=[`${import_picocolors.default.yellow(`velloo ${command}:`)} render failures on ${plural(byScreen.size,"screen")} \u2014 ${consequences.join(", and ")}:`];for(let group of byScreen.values()){let[first]=group;if(!first)continue;let boards=first.boards.length>0?first.boards.map((board)=>board.name).join(", "):"no board";lines.push("",` ${import_picocolors.default.dim(`${boards} \u203A`)} ${import_picocolors.default.bold(first.screenName)} ${import_picocolors.default.dim(`(${first.screenId})`)}`);let pinned=group.some((failure)=>failure.componentId!==null);for(let failure of group)if(failure.componentId!==null)lines.push(` ${import_picocolors.default.cyan(failure.componentId)}: ${failure.reason}`);else{let label=pinned?"screen not drawn":"screen not drawn \u2014 the error could not be pinned on one component";lines.push(` ${import_picocolors.default.red(label)}: ${failure.reason}`)}}return lines}async function confirmRenderFailures(command,source,screens,yes){let failures=preflightScreens(source,screens);if(failures.length===0)return;let report=formatFailures(command,failures);for(let line of report)console.error(line);if(console.error(""),yes)return;if(!process.stdin.isTTY)fail(command,"refusing to continue \u2014 re-run with --yes to accept the placeholders.");for(;;){let choice=await select({message:"Continue anyway?",options:[{value:"cancel",label:"No, cancel"},{value:"continue",label:"Yes, continue with the failures"},{value:"copy",label:"Copy errors to clipboard"}],initialValue:"cancel"});if(isCancel(choice)||choice==="cancel")fail(command,"cancelled.");if(choice==="continue")return;let copied=await copyToClipboard(stripVTControlCharacters(report.join(`
2
+ import{isCancel,select}from"./chunk-80fjfyha.js";import{preflightScreens}from"./chunk-66qgm91k.js";import{fail}from"./chunk-s23gtejf.js";import{copyToClipboard}from"./chunk-vbk1qhdz.js";import{require_picocolors}from"./chunk-jrsknzjt.js";import{__toESM}from"./chunk-2smsg2ct.js";import{stripVTControlCharacters}from"util";var import_picocolors=__toESM(require_picocolors(),1);function plural(count,noun){return`${count} ${noun}${count===1?"":"s"}`}function formatFailures(command,failures){let byScreen=new Map;for(let failure of failures)byScreen.set(failure.screenId,[...byScreen.get(failure.screenId)??[],failure]);let notDrawn=[...byScreen.values()].filter((group)=>group.some((failure)=>failure.componentId===null)),placeholders=[...byScreen.values()].filter((group)=>!notDrawn.includes(group)).reduce((sum,group)=>sum+group.length,0),consequences=[placeholders>0&&`${plural(placeholders,"component")} will appear as placeholders`,notDrawn.length>0&&`${plural(notDrawn.length,"screen")} will not render at all`].filter(Boolean),lines=[`${import_picocolors.default.yellow(`velloo ${command}:`)} render failures on ${plural(byScreen.size,"screen")} \u2014 ${consequences.join(", and ")}:`];for(let group of byScreen.values()){let[first]=group;if(!first)continue;let boards=first.boards.length>0?first.boards.map((board)=>board.name).join(", "):"no board";lines.push("",` ${import_picocolors.default.dim(`${boards} \u203A`)} ${import_picocolors.default.bold(first.screenName)} ${import_picocolors.default.dim(`(${first.screenId})`)}`);let pinned=group.some((failure)=>failure.componentId!==null);for(let failure of group)if(failure.componentId!==null)lines.push(` ${import_picocolors.default.cyan(failure.componentId)}: ${failure.reason}`);else{let label=pinned?"screen not drawn":"screen not drawn \u2014 the error could not be pinned on one component";lines.push(` ${import_picocolors.default.red(label)}: ${failure.reason}`)}}return lines}async function confirmRenderFailures(command,source,screens,yes){let failures=preflightScreens(source,screens);if(failures.length===0)return;let report=formatFailures(command,failures);for(let line of report)console.error(line);if(console.error(""),yes)return;if(!process.stdin.isTTY)fail(command,"refusing to continue \u2014 re-run with --yes to accept the placeholders.");for(;;){let choice=await select({message:"Continue anyway?",options:[{value:"cancel",label:"No, cancel"},{value:"continue",label:"Yes, continue with the failures"},{value:"copy",label:"Copy errors to clipboard"}],initialValue:"cancel"});if(isCancel(choice)||choice==="cancel")fail(command,"cancelled.");if(choice==="continue")return;let copied=await copyToClipboard(stripVTControlCharacters(report.join(`
3
3
  `)));console.error(copied?` ${import_picocolors.default.green("\u2713")} Errors copied to the clipboard.`:import_picocolors.default.dim(" Couldn't reach a clipboard tool \u2014 copy the errors printed above."))}}
4
4
  export{confirmRenderFailures};
@@ -0,0 +1,3 @@
1
+ // @bun
2
+ import{helperDescriptors,require_react_jsx_dev_runtime_development,helpersRegistry,TAILWIND_CLASSNAME,helperSourcePath}from"./chunk-66qgm91k.js";import{headingInlineStyle,textInlineStyle}from"./chunk-4pkw6d9n.js";import{require_react_development}from"./chunk-ngbqd7kb.js";import{__toESM}from"./chunk-2smsg2ct.js";import{noLibVersion}from"./chunk-cxe6jjwj.js";import{resolveProviderSrcDir}from"./chunk-v6c3h9ft.js";import{dirname,join}from"path";import{fileURLToPath}from"url";var NONE_INTRO=["**This folder has no component library** \u2014 only bare primitives wrapping plain HTML: `Box`/`Stack`/`Container` for layout, `Card`, `Button`, `Input`, plus the velloo helpers (`Heading`/`Text`, `Image`, `Gradient`, `Layer`, `SVG`, `Divider`, `Placeholder`, `Icon`). The primitives stop there: for a `Badge`/`Tabs`/`Dialog`, use the app's own component when `list_components` shows one on a Repo shelf, else build it from primitives or a snippet. Call `list_components` for the exact set. Styling is **Tailwind classes**.",""],NONE_INLINE_INTRO=["**This folder has no component library and no CSS framework** \u2014 bare primitives wrapping plain HTML (`Box`/`Stack`/`Container`, `Card`, `Button`, `Input`) plus the velloo helpers (`Heading`/`Text`, `Image`, `Icon`, `SVG`, `Divider`, `Gradient`, `Layer`, `Placeholder`). The primitives stop there: for a `Badge`/`Tabs`/`Dialog`, use the app's own component when `list_components` shows one on a Repo shelf, else build it from primitives or a snippet. Call `list_components` for the exact set.","",'**Style through inline `style` objects.** `update_props { style: { display: "flex", gap: "16px", padding: "24px", borderRadius: "8px", color: "var(--color-foreground)" } }` \u2014 a plain React style object (merges shallowly; an inner `null` drops a key, `style: null` clears). Reference theme tokens as CSS variables (`var(--color-primary)`, `var(--radius)`) from `get_theme` so the design stays themable. `emit_code` emits `style={{\u2026}}` on plain elements \u2014 no imports, no Tailwind. Tailwind utility diagnostics do not apply.',""];var React=__toESM(require_react_development(),1),jsx_dev_runtime=__toESM(require_react_jsx_dev_runtime_development(),1);import{clsx}from"clsx";var BOX_TAG=/^[a-z][a-z0-9]*$/,Box=React.forwardRef(({as,className,...rest},ref)=>React.createElement(typeof as==="string"&&BOX_TAG.test(as)?as:"div",{ref,className:clsx(className),...rest}));Box.displayName="Box";var alignClass={start:"items-start",center:"items-center",end:"items-end",stretch:"items-stretch"},justifyClass={start:"justify-start",center:"justify-center",end:"justify-end",between:"justify-between",around:"justify-around"},Stack=React.forwardRef(({direction="col",gap=4,align,justify,className,...rest},ref)=>jsx_dev_runtime.jsxDEV("div",{ref,className:clsx("flex",direction==="row"?"flex-row":"flex-col",`gap-${gap}`,align?alignClass[align]:void 0,justify?justifyClass[justify]:void 0,className),...rest},void 0,!1,void 0,this));Stack.displayName="Stack";var containerWidth={sm:"max-w-screen-sm",md:"max-w-screen-md",lg:"max-w-screen-lg",xl:"max-w-screen-xl",full:"max-w-full"},Container=React.forwardRef(({size="md",className,...rest},ref)=>jsx_dev_runtime.jsxDEV("div",{ref,className:clsx("mx-auto w-full px-4",containerWidth[size],className),...rest},void 0,!1,void 0,this));Container.displayName="Container";var buttonVariant={default:"bg-foreground text-background hover:bg-foreground/90",ghost:"bg-transparent text-foreground hover:bg-muted",outline:"bg-transparent text-foreground border border-border hover:bg-muted"},Button=React.forwardRef(({variant="default",className,type,...rest},ref)=>jsx_dev_runtime.jsxDEV("button",{ref,type:type??"button",className:clsx("inline-flex items-center justify-center gap-2 rounded-md px-4 py-2 text-sm font-medium","focus-visible:outline-2 focus-visible:outline-offset-2",buttonVariant[variant],className),...rest},void 0,!1,void 0,this));Button.displayName="Button";var Input=React.forwardRef(({className,type="text",value,onChange,...rest},ref)=>jsx_dev_runtime.jsxDEV("input",{ref,type,value,onChange,readOnly:value!==void 0&&onChange===void 0||rest.readOnly,className:clsx("block w-full rounded-md border border-input bg-background px-3 py-2 text-sm","placeholder:text-muted-foreground focus-visible:outline-2 focus-visible:outline-offset-2",className),...rest},void 0,!1,void 0,this));Input.displayName="Input";var Card=React.forwardRef(({className,...rest},ref)=>jsx_dev_runtime.jsxDEV("div",{ref,className:clsx("rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm",className),...rest},void 0,!1,void 0,this));Card.displayName="Card";var REUSED_HELPER_IDS=["Heading","Text","Prose","Icon","SVG","Image","Layer","Divider","Gradient","Placeholder"],registry={Box,Stack,Container,Card,Button,Input,...helpersRegistry(REUSED_HELPER_IDS)};var PRIMITIVE_DESCRIPTORS=[{id:"Box",category:"ui",source:"velloo",props:[{name:"as",type:"string",optional:!0,control:"string"},{name:"className",type:"string | undefined",optional:!0,control:"string"}]},{id:"Stack",category:"ui",source:"velloo",props:[{name:"direction",type:'"row" | "col" | undefined',optional:!0,control:"enum",enumValues:["row","col"],defaultValue:"col"},{name:"gap",type:"number | undefined",optional:!0,control:"number",defaultValue:"4"},{name:"align",type:'"start" | "center" | "end" | "stretch" | undefined',optional:!0,control:"enum",enumValues:["start","center","end","stretch"]},{name:"justify",type:'"start" | "center" | "end" | "between" | "around" | undefined',optional:!0,control:"enum",enumValues:["start","center","end","between","around"]},{name:"className",type:"string | undefined",optional:!0,control:"string"}]},{id:"Container",category:"ui",source:"velloo",props:[{name:"size",type:'"sm" | "md" | "lg" | "xl" | "full" | undefined',optional:!0,control:"enum",enumValues:["sm","md","lg","xl","full"],defaultValue:"md"},{name:"className",type:"string | undefined",optional:!0,control:"string"}]},{id:"Card",category:"ui",source:"velloo",props:[{name:"className",type:"string | undefined",optional:!0,control:"string"}]},{id:"Button",category:"ui",source:"velloo",props:[{name:"variant",type:'"default" | "ghost" | "outline" | undefined',optional:!0,control:"enum",enumValues:["default","ghost","outline"],defaultValue:"default"},{name:"className",type:"string | undefined",optional:!0,control:"string"}]},{id:"Input",category:"ui",source:"velloo",props:[{name:"placeholder",type:"string | undefined",optional:!0,control:"string"},{name:"value",type:"string | undefined",optional:!0,control:"string"},{name:"type",type:"string | undefined",optional:!0,control:"string",defaultValue:"text"},{name:"className",type:"string | undefined",optional:!0,control:"string"}]}],NONE_MANIFEST2=[...PRIMITIVE_DESCRIPTORS,...helperDescriptors(REUSED_HELPER_IDS)];var React2=__toESM(require_react_development(),1);var jsx_dev_runtime2=__toESM(require_react_jsx_dev_runtime_development(),1);function merge(defaults,authored){return authored?{...defaults,...authored}:defaults}var space=(n)=>`${n*0.25}rem`,Box2=React2.forwardRef(({as,...rest},ref)=>React2.createElement(typeof as==="string"&&BOX_TAG.test(as)?as:"div",{ref,...rest}));Box2.displayName="Box";var alignStyle={start:"flex-start",center:"center",end:"flex-end",stretch:"stretch"},justifyStyle={start:"flex-start",center:"center",end:"flex-end",between:"space-between",around:"space-around"},Stack2=React2.forwardRef(({direction="col",gap=4,align,justify,style,...rest},ref)=>jsx_dev_runtime2.jsxDEV("div",{ref,style:merge({display:"flex",flexDirection:direction==="row"?"row":"column",gap:space(gap),...align?{alignItems:alignStyle[align]}:{},...justify?{justifyContent:justifyStyle[justify]}:{}},style),...rest},void 0,!1,void 0,this));Stack2.displayName="Stack";var containerMaxWidth={sm:"640px",md:"768px",lg:"1024px",xl:"1280px",full:"100%"},Container2=React2.forwardRef(({size="md",style,...rest},ref)=>jsx_dev_runtime2.jsxDEV("div",{ref,style:merge({marginInline:"auto",width:"100%",paddingInline:"1rem",maxWidth:containerMaxWidth[size]},style),...rest},void 0,!1,void 0,this));Container2.displayName="Container";var buttonVariantStyle={default:{background:"var(--color-foreground)",color:"var(--color-background)"},ghost:{background:"transparent",color:"var(--color-foreground)"},outline:{background:"transparent",color:"var(--color-foreground)",border:"1px solid var(--color-border)"}},Button2=React2.forwardRef(({variant="default",type,style,...rest},ref)=>jsx_dev_runtime2.jsxDEV("button",{ref,type:type??"button",style:merge({display:"inline-flex",alignItems:"center",justifyContent:"center",gap:"0.5rem",borderRadius:"var(--radius)",padding:"0.5rem 1rem",fontSize:"0.875rem",fontWeight:500,cursor:"pointer",...buttonVariantStyle[variant]},style),...rest},void 0,!1,void 0,this));Button2.displayName="Button";var Input2=React2.forwardRef(({type="text",value,onChange,style,...rest},ref)=>jsx_dev_runtime2.jsxDEV("input",{ref,type,value,onChange,readOnly:value!==void 0&&onChange===void 0||rest.readOnly,style:merge({display:"block",width:"100%",borderRadius:"var(--radius)",border:"1px solid var(--color-input)",background:"var(--color-background)",padding:"0.5rem 0.75rem",fontSize:"0.875rem"},style),...rest},void 0,!1,void 0,this));Input2.displayName="Input";var Card2=React2.forwardRef(({style,...rest},ref)=>jsx_dev_runtime2.jsxDEV("div",{ref,style:merge({borderRadius:"var(--radius)",border:"1px solid var(--color-border)",background:"var(--color-card)",color:"var(--color-card-foreground)",padding:"1.5rem",boxShadow:"0 1px 2px 0 rgb(0 0 0 / 0.05)"},style),...rest},void 0,!1,void 0,this));Card2.displayName="Card";var Heading=React2.forwardRef(({level=1,style,...rest},ref)=>{let Tag=`h${level}`;return jsx_dev_runtime2.jsxDEV(Tag,{ref,style:merge(headingInlineStyle(level),style),...rest},void 0,!1,void 0,this)});Heading.displayName="Heading";var Text=React2.forwardRef(({variant="default",style,...rest},ref)=>jsx_dev_runtime2.jsxDEV("p",{ref,style:merge(textInlineStyle(variant),style),...rest},void 0,!1,void 0,this));Text.displayName="Text";var REUSED_HELPER_IDS2=["Prose","Icon","SVG","Image","Layer","Divider","Gradient","Placeholder"],inlineRegistry={Box:Box2,Stack:Stack2,Container:Container2,Card:Card2,Button:Button2,Input:Input2,Heading,Text,...helpersRegistry(REUSED_HELPER_IDS2)};var PRIMITIVES=new Set(["Box","Stack","Container","Card","Button","Input"]),INLINE_TYPOGRAPHY=new Set(["Heading","Text"]),here=dirname(fileURLToPath(import.meta.url)),srcDir=resolveProviderSrcDir(here,"provider-none",process.env.VELLOO_NOLIB_SRC),entryCssPath2=join(srcDir,"tailwind-entry.css"),componentsDir2=srcDir;async function loadManifest(){return NONE_MANIFEST2}function createProvider2(){return{id:"none",version:noLibVersion,componentsDir:componentsDir2,styleEntryPath:entryCssPath2,registry,loadManifest,label:`none ${noLibVersion}`,styleChannel:TAILWIND_CLASSNAME,styleChannels:["tailwind-classname","style"],mcpIntro:(channel)=>[...channel==="style"?NONE_INLINE_INTRO:NONE_INTRO],registryForChannel:(kind)=>kind==="style"?inlineRegistry:registry,canvasBundleSpec:{styleRuntime:{kind:"none"},onlyWithRepository:!0,components:(ids,context)=>{let inline=context?.channel==="style";return ids.flatMap((id)=>{let own=PRIMITIVES.has(id)||inline&&INLINE_TYPOGRAPHY.has(id)?join(srcDir,inline?"components-inline.tsx":"components.tsx"):helperSourcePath(id);return own?[{id,sources:[{importPath:own,exportName:id,fidelity:"exact",note:"Velloo primitive, mounted beside the app's components."}]}]:[]})}}}}
3
+ export{NONE_MANIFEST2,inlineRegistry,entryCssPath2,componentsDir2,createProvider2};
@@ -0,0 +1,3 @@
1
+ // @bun
2
+ import{existsSync,readdirSync,readFileSync,statSync}from"fs";import{extname,join}from"path";var SERVER_ENTRIES=["manage.py","app.py","main.py","app/main.py","config/routes.rb","artisan","go.mod"],TEMPLATE_DIRS=["templates","app/templates","resources/views","app/views","views"],TEMPLATE_EXTENSIONS=new Set([".html",".htm",".jinja",".jinja2",".j2",".erb",".php",".tmpl",".gohtml",".hbs"]),GO_SOURCE_EXTENSIONS=new Set([".go",".templ"]),GO_HTML_MODULE=/^\s*(?:require\s+)?\S*(?:htmx|a-h\/templ|gomponents)\S*\s+v/im,SKIP_DIRS=new Set(["node_modules","venv",".venv","env","__pycache__","vendor","testdata"]),MAX_TEMPLATE_FILES=200,MAX_DEPTH=4,HTMX_MARKUP=/\bhx-(?:get|post|put|patch|delete|boost|target|swap|trigger)\b|htmx(?:\.org)?(?:@[\d.]+)?(?:\/dist)?\/?(?:htmx)?(?:\.min)?\.js/i;function isDir(path){try{return statSync(path).isDirectory()}catch{return!1}}function serverTemplateDirs(appRoot){let dirs=TEMPLATE_DIRS.map((rel)=>join(appRoot,rel)).filter(isDir),entries=[];try{entries=readdirSync(appRoot)}catch{return dirs}for(let name of entries){if(name.startsWith(".")||SKIP_DIRS.has(name))continue;let nested=join(appRoot,name,"templates");if(!dirs.includes(nested)&&isDir(nested))dirs.push(nested)}return dirs}function isServerRenderedApp(appRoot){return SERVER_ENTRIES.some((rel)=>existsSync(join(appRoot,rel)))&&serverTemplateDirs(appRoot).length>0}function hasHtmxMarkup(appRoot){let budget=MAX_TEMPLATE_FILES,matches=(file)=>{budget--;try{return HTMX_MARKUP.test(readFileSync(file,"utf8"))}catch{return!1}},walk=(dir,depth,extensions=TEMPLATE_EXTENSIONS)=>{let entries;try{entries=readdirSync(dir,{withFileTypes:!0})}catch{return!1}for(let entry of entries){if(budget<=0)return!1;if(entry.name.startsWith("."))continue;let path=join(dir,entry.name);if(entry.isDirectory()){if(!SKIP_DIRS.has(entry.name)&&depth<MAX_DEPTH&&walk(path,depth+1,extensions))return!0}else if(extensions.has(extname(entry.name))&&!entry.name.endsWith("_test.go")&&matches(path))return!0}return!1};try{for(let name of readdirSync(appRoot))if(extname(name)===".html"&&matches(join(appRoot,name)))return!0}catch{return!1}if(serverTemplateDirs(appRoot).some((dir)=>walk(dir,0)))return!0;let goMod=join(appRoot,"go.mod");if(!existsSync(goMod))return!1;try{if(GO_HTML_MODULE.test(readFileSync(goMod,"utf8")))return!0}catch{return!1}return budget=MAX_TEMPLATE_FILES*3,walk(appRoot,0,GO_SOURCE_EXTENSIONS)}
3
+ export{isServerRenderedApp,hasHtmxMarkup};