@maas/vue-primitive
Version:
Vue component for passing attributes to slot content
2 lines (1 loc) • 1.33 kB
JavaScript
(function(i,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(i=typeof globalThis<"u"?globalThis:i||self,e(i.Vue={},i.Vue))})(this,function(i,e){"use strict";function p(o){return o?o.flatMap(t=>t.type===e.Fragment?p(t.children):[t]):[]}const c=e.defineComponent({name:"PrimitiveSlot",inheritAttrs:!1,setup(o,{attrs:t,slots:f}){return()=>{var m;if(!f.default)return null;const n=p(f.default());if(n.length===0)return null;const r=n.findIndex(l=>l.type!==e.Comment);if(r===-1)return n;const u=n[r],d=u.props?e.mergeProps(t,u.props):t;t.class&&((m=u.props)!=null&&m.class)&&delete u.props.class;const s=e.cloneVNode(u,d);for(const l in d)l.startsWith("on")&&(s.props||(s.props={}),s.props[l]=d[l]);return n.length===1?s:(n[r]=s,n)}}}),a=e.defineComponent({name:"Primitive",inheritAttrs:!1,props:{asChild:{type:Boolean,default:!1},as:{type:[String,Object],default:"div"}},setup(o,{attrs:t,slots:f}){const n=["area","img","input"],r=o.asChild?"template":o.as;return()=>{switch(!0){case(typeof r=="string"&&n.includes(r)):return e.h(r,t);case r!=="template":return e.h(o.as,t,{default:f.default});default:return e.h(c,t,{default:f.default})}}}}),h=a;i.Primitive=a,i.VuePrimitive=h,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})});