is used but it is missing a parent \u003CTransitionRoot />.\");return e}function ge(){let e=(0,__vite_ssr_import_0__.inject)(N,null);if(e===null)throw new Error(\"A \u003CTransitionChild /> is used but it is missing a parent \u003CTransitionRoot />.\");return e}let N=Symbol(\"NestingContext\");function L(e){return\"children\"in e?L(e.children):e.value.filter(({state:t})=>t===\"visible\").length>0}function Q(e){let t=(0,__vite_ssr_import_0__.ref)([]),a=(0,__vite_ssr_import_0__.ref)(!1);(0,__vite_ssr_import_0__.onMounted)(()=>a.value=!0),(0,__vite_ssr_import_0__.onUnmounted)(()=>a.value=!1);function s(n,r=__vite_ssr_import_6__.RenderStrategy.Hidden){let l=t.value.findIndex(({id:f})=>f===n);l!==-1&&((0,__vite_ssr_import_5__.match)(r,{[__vite_ssr_import_6__.RenderStrategy.Unmount](){t.value.splice(l,1)},[__vite_ssr_import_6__.RenderStrategy.Hidden](){t.value[l].state=\"hidden\"}}),!L(t)&&a.value&&(e==null||e()))}function h(n){let r=t.value.find(({id:l})=>l===n);return r?r.state!==\"visible\"&&(r.state=\"visible\"):t.value.push({id:n,state:\"visible\"}),()=>s(n,__vite_ssr_import_6__.RenderStrategy.Unmount)}return{children:t,register:h,unregister:s}}let W=__vite_ssr_import_6__.Features.RenderStrategy,he=(0,__vite_ssr_import_0__.defineComponent)({props:{as:{type:[Object,String],default:\"div\"},show:{type:[Boolean],default:null},unmount:{type:[Boolean],default:!0},appear:{type:[Boolean],default:!1},enter:{type:[String],default:\"\"},enterFrom:{type:[String],default:\"\"},enterTo:{type:[String],default:\"\"},entered:{type:[String],default:\"\"},leave:{type:[String],default:\"\"},leaveFrom:{type:[String],default:\"\"},leaveTo:{type:[String],default:\"\"}},emits:{beforeEnter:()=>!0,afterEnter:()=>!0,beforeLeave:()=>!0,afterLeave:()=>!0},setup(e,{emit:t,attrs:a,slots:s,expose:h}){let n=(0,__vite_ssr_import_0__.ref)(0);function r(){n.value|=__vite_ssr_import_2__.State.Opening,t(\"beforeEnter\")}function l(){n.value&=~__vite_ssr_import_2__.State.Opening,t(\"afterEnter\")}function f(){n.value|=__vite_ssr_import_2__.State.Closing,t(\"beforeLeave\")}function S(){n.value&=~__vite_ssr_import_2__.State.Closing,t(\"afterLeave\")}if(!me()&&(0,__vite_ssr_import_2__.hasOpenClosed)())return()=>(0,__vite_ssr_import_0__.h)(Se,{...e,onBeforeEnter:r,onAfterEnter:l,onBeforeLeave:f,onAfterLeave:S},s);let d=(0,__vite_ssr_import_0__.ref)(null),y=(0,__vite_ssr_import_0__.computed)(()=>e.unmount?__vite_ssr_import_6__.RenderStrategy.Unmount:__vite_ssr_import_6__.RenderStrategy.Hidden);h({el:d,$el:d});let{show:v,appear:A}=Te(),{register:D,unregister:H}=ge(),i=(0,__vite_ssr_import_0__.ref)(v.value?\"visible\":\"hidden\"),I={value:!0},c=(0,__vite_ssr_import_1__.useId)(),b={value:!1},P=Q(()=>{!b.value&&i.value!==\"hidden\"&&(i.value=\"hidden\",H(c),S())});(0,__vite_ssr_import_0__.onMounted)(()=>{let o=D(c);(0,__vite_ssr_import_0__.onUnmounted)(o)}),(0,__vite_ssr_import_0__.watchEffect)(()=>{if(y.value===__vite_ssr_import_6__.RenderStrategy.Hidden&&c){if(v.value&&i.value!==\"visible\"){i.value=\"visible\";return}(0,;__vite_ssr_import_5__.match)(i.value,{[\"hidden\"]:()=>H(c),[\"visible\"]:()=>D(c)})}});let j=g(e.enter),M=g(e.enterFrom),X=g(e.enterTo),_=g(e.entered),Y=g(e.leave),Z=g(e.leaveFrom),ee=g(e.leaveTo);(0,__vite_ssr_import_0__.onMounted)(()=>{(0,__vite_ssr_import_0__.watchEffect)(()=>{if(i.value===\"visible\"){let o=(0,__vite_ssr_import_3__.dom)(d);if(o instanceof Comment&&o.data===\"\")throw new Error(\"Did you forget to passthrough the ref to the actual DOM node?\")}})});function te(o){let E=I.value&&!A.value,p=(0,__vite_ssr_import_3__.dom)(d);!p||!(p instanceof HTMLElement)||E||(b.value=!0,v.value&&r(),v.value||f(),o(v.value?(0,__vite_ssr_import_7__.transition)(p,j,M,X,_,V=>{b.value=!1,V===__vite_ssr_import_7__.Reason.Finished&&l()}):(0,__vite_ssr_import_7__.transition)(p,Y,Z,ee,_,V=>{b.value=!1,V===__vite_ssr_import_7__.Reason.Finished&&(L(P)||(i.value=\"hidden\",H(c),S()))})))}return (0,__vite_ssr_import_0__.onMounted)(()=>{(0,__vite_ssr_import_0__.watch)([v],(o,E,p)=>{te(p),I.value=!1},{immediate:!0})}),(0,__vite_ssr_import_0__.provide)(N,P),(0,__vite_ssr_import_2__.useOpenClosedProvider)((0,__vite_ssr_import_0__.computed)(()=>(0,__vite_ssr_import_5__.match)(i.value,{[\"visible\"]:__vite_ssr_import_2__.State.Open,[\"hidden\"]:__vite_ssr_import_2__.State.Closed})|n.value)),()=>{let{appear:o,show:E,enter:p,enterFrom:V,enterTo:Ce,entered:ye,leave:be,leaveFrom:Ee,leaveTo:Ve,...U}=e,ne={ref:d},re={...U,...A.value&&v.value&&__vite_ssr_import_4__.env.isServer?{class:(0,__vite_ssr_import_0__.normalizeClass)([a.class,U.class,...j,...M])}:{}};return (0,__vite_ssr_import_6__.render)({theirProps:re,ourProps:ne,slot:{},slots:s,attrs:a,features:W,visible:i.value===\"visible\",name:\"TransitionChild\"})}}}),ce=he,Se=(0,__vite_ssr_import_0__.defineComponent)({inheritAttrs:!1,props:{as:{type:[Object,String],default:\"div\"},show:{type:[Boolean],default:null},unmount:{type:[Boolean],default:!0},appear:{type:[Boolean],default:!1},enter:{type:[String],default:\"\"},enterFrom:{type:[String],default:\"\"},enterTo:{type:[String],default:\"\"},entered:{type:[String],default:\"\"},leave:{type:[String],default:\"\"},leaveFrom:{type:[String],default:\"\"},leaveTo:{type:[String],default:\"\"}},emits:{beforeEnter:()=>!0,afterEnter:()=>!0,beforeLeave:()=>!0,afterLeave:()=>!0},setup(e,{emit:t,attrs:a,slots:s}){let h=(0,__vite_ssr_import_2__.useOpenClosed)(),n=(0,__vite_ssr_import_0__.computed)(()=>e.show===null&&h!==null?(h.value&__vite_ssr_import_2__.State.Open)===__vite_ssr_import_2__.State.Open:e.show);(0,__vite_ssr_import_0__.watchEffect)(()=>{if(![!0,!1].includes(n.value))throw new Error('A \u003CTransition /> is used but it is missing a :show=\"true | false\" prop.')});let r=(0,__vite_ssr_import_0__.ref)(n.value?\"visible\":\"hidden\"),l=Q(()=>{r.value=\"hidden\"}),f=(0,__vite_ssr_import_0__.ref)(!0),S={show:n,appear:(0,__vite_ssr_import_0__.computed)(()=>e.appear||!f.value)};return (0,__vite_ssr_import_0__.onMounted)(()=>{(0,__vite_ssr_import_0__.watchEffect)(()=>{f.value=!1,n.value?r.value=\"visible\":L(l)||(r.value=\"hidden\")})}),(0,__vite_ssr_import_0__.provide)(N,l),(0,__vite_ssr_import_0__.provide)(R,S),()=>{let d=(0,__vite_ssr_import_6__.omit)(e,[\"show\",\"appear\",\"unmount\",\"onBeforeEnter\",\"onBeforeLeave\",\"onAfterEnter\",\"onAfterLeave\"]),y={unmount:e.unmount};return (0,__vite_ssr_import_6__.render)({ourProps:{...y,as:\"template\"},theirProps:{},slot:{},slots:{...s,default:()=>[(0,__vite_ssr_import_0__.h)(ce,{onBeforeEnter:()=>t(\"beforeEnter\"),onAfterEnter:()=>t(\"afterEnter\"),onBeforeLeave:()=>t(\"beforeLeave\"),onAfterLeave:()=>t(\"afterLeave\"),...a,...y,...d},s.default)]},attrs:{},features:W,visible:r.value===\"visible\",name:\"Transition\"})}}});\n\n\n SyntaxError: Unexpected token ';'\n at new Script (node:vm:116:7)\n at createScript (node:vm:268:10)\n at Object.runInThisContext (node:vm:316:10)\n at ViteNodeRunner.runModule (/D:/Dev/maideo/maideo-maid/node_modules/vite-node/dist/client.mjs:398:19)\n at ViteNodeRunner.directRequest (/D:/Dev/maideo/maideo-maid/node_modules/vite-node/dist/client.mjs:381:16) \n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n at async ViteNodeRunner.cachedRequest (/D:/Dev/maideo/maideo-maid/node_modules/vite-node/dist/client.mjs:206:14) \n at async ViteNodeRunner.dependencyRequest (/D:/Dev/maideo/maideo-maid/node_modules/vite-node/dist/client.mjs:259:12)\n at async node_modules\\@headlessui\\vue\\dist\\headlessui.esm.js:23:32\n at async ViteNodeRunner.runModule (/D:/Dev/maideo/maideo-maid/node_modules/vite-node/dist/client.mjs:399:5) \n\n### Logs\n\n```shell-script\n\n```",[2016,2017],{"name":1985,"color":1986},{"name":2018,"color":2019},"duplicate","cfd3d7",2972,"closed","Syntax error in the Headless UI Vue component code","2024-12-25T10:39:30Z","https://github.com/nuxt/ui/issues/2972",0.65376025,{"description":2027,"labels":2028,"number":2030,"owner":1991,"repository":1992,"state":2021,"title":2031,"updated_at":2032,"url":2033,"score":2034},"### Environment\n\n- Operating System: Linux\r\n- Node Version: v20.12.0\r\n- Nuxt Version: 3.10.0\r\n- CLI Version: 3.10.0\r\n- Nitro Version: 2.8.1\r\n- Package Manager: npm@10.5.0\r\n- Builder: -\r\n- User Config: devtools, modules\r\n- Runtime Modules: @nuxt/ui@2.18.6\r\n- Build Modules: -\n\n### Version\n\n2.18.6\n\n### Reproduction\n\nhttps://codesandbox.io/p/devbox/k6rsz6?file=%2Fapp.vue%3A1%2C1\n\n### Description\n\nI'm trying to add types for a `ref` to a `UForm` component, but when I tried to use the `setErrors` method there was the following typescript error:\r\n\r\n```\r\nProperty 'setErrors' does not exist on type\r\n'CreateComponentPublicInstanceWithMixins\u003CReadonly\u003CExtractPropTypes\u003C{ schema: { type: PropType\u003CZodSchema> | PropType\u003CYupObjectSchema\u003Cany>> | PropType\u003CJoiSchema> | PropType\u003Cany>; default: any; }; state: { type: ObjectConstructor; required: true; }; validate: { ...; }; validateOn: { ...; }; }>> & Readonly\u003C...>, ... 24 m...'.\r\nDid you mean 'errors'?\r\n```\n\n### Additional context\n\n_No response_\n\n### Logs\n\n_No response_",[2029],{"name":1985,"color":1986},2292,"Property 'setErrors' does not exist on type","2024-10-06T17:50:16Z","https://github.com/nuxt/ui/issues/2292",0.6581395,{"description":2036,"labels":2037,"number":2040,"owner":1991,"repository":1992,"state":2021,"title":2041,"updated_at":2042,"url":2043,"score":2044},"### Environment\n\n- Operating System: Windows_NT\n- Node Version: v18.20.4\n- Nuxt Version: 3.13.2\n- CLI Version: 3.15.0\n- Nitro Version: 2.9.7\n- Package Manager: npm@10.7.0\n- Builder: -\n- User Config: default\n- Runtime Modules: @nuxt/ui@2.18.7\n- Build Modules: -\n\n### Version\n\nv3\n\n### Reproduction\n\nCreat new project with nuxi\n\nInstall nuxt/ui\n\n### Description\n\nCannot destructure property 'nuxt' of 'this' as it is undefined.\n\nNot working on fresh project\n\n### Additional context\n\n_No response_\n\n### Logs\n\n_No response_",[2038,2039],{"name":1985,"color":1986},{"name":2005,"color":2006},2442,"Cannot destructure property 'nuxt' of 'this' as it is undefined.","2024-10-23T20:22:23Z","https://github.com/nuxt/ui/issues/2442",0.65980136,{"description":2046,"labels":2047,"number":2050,"owner":1991,"repository":1992,"state":2021,"title":2051,"updated_at":2052,"url":2053,"score":2054},"### Environment\n\n------------------------------\n- Operating System: Darwin\n- Node Version: v22.9.0\n- Nuxt Version: 3.14.1592\n- CLI Version: 3.16.0\n- Nitro Version: 2.10.4\n- Package Manager: npm@10.8.3\n- Builder: -\n- User Config: default\n- Runtime Modules: @nuxt/ui@3.0.0-alpha.9\n- Build Modules: -\n------------------------------\n\n### Is this bug related to Nuxt or Vue?\n\nNuxt\n\n### Version\n\nv3.0.0-alpha.9\n\n### Reproduction\n\nCreate a brand new Nuxt project with NuxtUI 3\n\nconfig:\n```js\n// https://nuxt.com/docs/api/configuration/nuxt-config\nexport default defineNuxtConfig({\n\tcompatibilityDate: \"2024-11-01\",\n\tdevtools: { enabled: true },\n\tfuture: { compatibilityVersion: 4 },\n\tmodules: [\"@nuxt/ui\"],\n\tcss: [\"~/assets/css/main.css\"],\n\n});\n```\napp.vue:\n```vue\n\u003Ctemplate>\n\t\u003CUApp>\n\t\t\u003CNuxtPage />\n\t\u003C/UApp>\n\u003C/template>\n```\n\n\nRemoving the `UApp` for a `div` or `NuxtLayout` works\n\n### Description\n\nCrashes the app. The error seems to be related to the Button component, but even on a brand-new Nuxt project with no content (without even a page) it show the error below:\n\nWhen I use NuxtLayout (or other) instead of `UApp` and use the `UButton` component anywhere, it also cause the same issue\n\n### Logs\n\n```shell-script\n500\n[vite-node] [plugin:vite:vue] [VITE_ERROR] /@fs/Users/jeannen/Dev/apps/node_modules/@nuxt/ui/dist/runtime/components/Button.vue\n\n\u003Cscript lang=\"ts\">\nimport { tv, type VariantProps } from 'tailwind-variants'\nimport type { AppConfig } from '@nuxt/schema'\nimport _appConfig from '#build/app.config'\nimport theme from '#build/ui/button'\nimport type { LinkProps } from './Link.vue'\nimport type { UseComponentIconsProps } from '../composables/useComponentIcons'\nimport { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'\nimport type { AvatarProps } from '../types'\nimport type { PartialString } from '../types/utils'\n\nconst appConfig = _appConfig as AppConfig & { ui: { button: Partial\u003Ctypeof theme> } }\n\nconst button = tv({ extend: tv(theme), ...(appConfig.ui?.button || {}) })\n\ntype ButtonVariants = VariantProps\u003Ctypeof button>\n\nexport interface ButtonProps extends UseComponentIconsProps, Omit\u003CLinkProps, 'raw' | 'custom'> {\n label?: string\n color?: ButtonVariants['color']\n variant?: ButtonVariants['variant']\n size?: ButtonVariants['size']\n /** Render the button with equal padding on all sides. */\n square?: boolean\n /** Render the button full width. */\n block?: boolean\n /** Set loading state automatically based on the `@click` promise state */\n loadingAuto?: boolean\n onClick?: ((event: MouseEvent) => void | Promise\u003Cvoid>) | Array\u003C((event: MouseEvent) => void | Promise\u003Cvoid>)>\n class?: any\n ui?: PartialString\u003Ctypeof button.slots>\n}\n\n// Injects props to use as default in the devtools playground.\nextendDevtoolsMeta\u003CButtonProps>({ defaultProps: { label: 'Click me!' } })\n\nexport interface ButtonSlots {\n leading(props?: {}): any\n default(props?: {}): any\n trailing(props?: {}): any\n}\n\u003C/script>\n\n\u003Cscript setup lang=\"ts\">\nimport { type Ref, computed, ref, inject } from 'vue'\nimport { useForwardProps } from 'radix-vue'\nimport { useComponentIcons } from '../composables/useComponentIcons'\nimport { useButtonGroup } from '../composables/useButtonGroup'\nimport { formLoadingInjectionKey } from '../composables/useFormField'\nimport { omit } from '../utils'\nimport { pickLinkProps } from '../utils/link'\nimport UIcon from './Icon.vue'\nimport UAvatar from './Avatar.vue'\nimport ULink from './Link.vue'\n\nconst props = defineProps\u003CButtonProps>()\nconst slots = defineSlots\u003CButtonSlots>()\n\nconst linkProps = useForwardProps(pickLinkProps(props))\n\nconst { orientation, size: buttonSize } = useButtonGroup\u003CButtonProps>(props)\n\nconst loadingAutoState = ref(false)\nconst formLoading = inject\u003CRef\u003Cboolean> | undefined>(formLoadingInjectionKey, undefined)\n\nasync function onClickWrapper(event: MouseEvent) {\n loadingAutoState.value = true\n const callbacks = Array.isArray(props.onClick) ? props.onClick : [props.onClick]\n try {\n await Promise.all(callbacks.map(fn => fn?.(event)))\n } finally {\n loadingAutoState.value = false\n }\n}\n\nconst isLoading = computed(() => {\n return props.loading || (props.loadingAuto && (loadingAutoState.value || (formLoading?.value && props.type === 'submit')))\n})\n\nconst { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(\n computed(() => ({ ...props, loading: isLoading.value }))\n)\n\nconst ui = computed(() => button({\n color: props.color,\n variant: props.variant,\n size: buttonSize.value,\n loading: isLoading.value,\n block: props.block,\n square: props.square || (!slots.default && !props.label),\n leading: isLeading.value,\n trailing: isTrailing.value,\n buttonGroup: orientation.value\n}))\n\u003C/script>\n\n\u003Ctemplate>\n \u003CULink\n :type=\"type\"\n :disabled=\"disabled || isLoading\"\n :class=\"ui.base({ class: [props.class, props.ui?.base] })\"\n v-bind=\"omit(linkProps, ['type', 'disabled'])\"\n raw\n @click=\"onClickWrapper\"\n >\n \u003Cslot name=\"leading\">\n \u003CUIcon v-if=\"isLeading && leadingIconName\" :name=\"leadingIconName\" :class=\"ui.leadingIcon({ class: props.ui?.leadingIcon })\" />\n \u003CUAvatar v-else-if=\"!!avatar\" :size=\"((props.ui?.leadingAvatarSize || ui.leadingAvatarSize()) as AvatarProps['size'])\" v-bind=\"avatar\" :class=\"ui.leadingAvatar({ class: props.ui?.leadingAvatar })\" />\n \u003C/slot>\n\n \u003Cslot>\n \u003Cspan v-if=\"label\" :class=\"ui.label({ class: props.ui?.label })\" data-v-inspector=\"../../../node_modules/@nuxt/ui/dist/runtime/components/Button.vue:112:7\">\n {{ label }}\n \u003C/span>\n \u003C/slot>\n\n \u003Cslot name=\"trailing\">\n \u003CUIcon v-if=\"isTrailing && trailingIconName\" :name=\"trailingIconName\" :class=\"ui.trailingIcon({ class: props.ui?.trailingIcon })\" />\n \u003C/slot>\n \u003C/ULink>\n\u003C/template>\n\nat /@fs/Users/jeannen/Dev/apps/node_modules/@nuxt/ui/dist/runtime/components/Button.vue\n```\n\n### Additional context\n\n_No response_\n```",[2048,2049],{"name":1985,"color":1986},{"name":2005,"color":2006},2824,"`UApp` / `UButton` crashes the whole app","2024-12-05T13:49:01Z","https://github.com/nuxt/ui/issues/2824",0.67280734,{"description":2056,"labels":2057,"number":2061,"owner":1991,"repository":1992,"state":2021,"title":2062,"updated_at":2063,"url":2064,"score":2065},"### For what version of Nuxt UI are you asking this question?\n\nv2.x\n\n### Description\n\nHello,\n\nI've been trying to make PurgeCSS work properly with Nuxt UI and the deeper I get the more cumbersome of a process it becomes.\n\nIt seems that even though I provided the paths towards the NuxtUI components to PurgeCSS, it still removes CSS that should be used by the specified components, as well as colors which should be available out of the box (i.e yellow). I've even tried to safelist different classes, but again, the more I dig through it the more classes I eventually have to add - so I will be ending up with a never ending list of classes.\n\nAre there any official guidelines on how PurgeCSS should be configured so that it works correctly for the NuxtUI components/colors?\n\nCurrent config:\n\n```javascript\ndefineNuxtConfig({\n...\n purgecss: {\n safelist: [... big list ...],\n paths: [\n './components/**/*.vue',\n './layouts/**/*.vue',\n './pages/**/*.vue',\n './plugins/**/*.js',\n './nuxt.config.ts',\n './app.config.ts',\n './node_modules/@nuxt/ui/dist/runtime/components/**/*.vue',\n './node_modules/@nuxt/ui/dist/runtime/ui.config/**/*.js',\n './node_modules/@nuxt/ui/dist/runtime/utils/*.js',\n ],\n content: [\n './components/**/*.vue',\n './layouts/**/*.vue',\n './pages/**/*.vue',\n './plugins/**/*.js',\n './nuxt.config.ts',\n './app.config.ts',\n './node_modules/@nuxt/ui/dist/runtime/components/**/*.vue',\n './node_modules/@nuxt/ui/dist/runtime/ui.config/**/*.js',\n './node_modules/@nuxt/ui/dist/runtime/utils/*.js',\n ],\n}\n});\n```\n\nThanks in advance :-)",[2058],{"name":2059,"color":2060},"question","d876e3",2850,"Nuxt UI & PurgeCSS","2025-03-28T17:38:11Z","https://github.com/nuxt/ui/issues/2850",0.6767429,{"description":2067,"labels":2068,"number":2081,"owner":1991,"repository":1991,"state":2021,"title":2082,"updated_at":2083,"url":2084,"score":2085},"### Environment\r\n\r\nNuxt project info: \r\n\r\n------------------------------\r\n- Operating System: Linux\r\n- Node Version: v20.11.1\r\n- Nuxt Version: 3.10.3\r\n- CLI Version: 3.10.1\r\n- Nitro Version: 2.9.3\r\n- Package Manager: pnpm@8.15.4\r\n- Builder: -\r\n- User Config: runtimeConfig, modules, $test, devtools, experimental, vue, tailwindcss, app, nitro, typescript, pinia\r\n- Runtime Modules: @nuxtjs/tailwindcss@6.11.5-1709108338.2ae28e5, @vueuse/nuxt@10.9.0, nuxt-headlessui@1.1.5, @pinia/nuxt@0.5.1, @nuxtjs/fontaine@0.4.1, @formkit/auto-animate/nuxt@0.8.1\r\n- Build Modules: -\r\n------------------------------\r\n\r\n👉 Report an issue: https://github.com/nuxt/nuxt/issues/new\r\n\r\n👉 Suggest an improvement: https://github.com/nuxt/nuxt/discussions/new\r\n\r\n👉 Read documentation: https://nuxt.com\r\n\r\n\r\n\r\n### Reproduction\r\n\r\nOn a project using NuxtIslands (via server components), and storybook, running the `build-storybook` command fails with the following error:\r\n\r\n```\r\n=> Failed to build the preview 10:43:12 AM\r\nTypeError: Cannot create property 'ActionMessage' on string './node_modules/.pnpm/@storybook+builder-vite@7.6.17_typescript@5.4.2_vite@5.1.6/node_modules/@storybook/builder-vite/input/iframe.html' 10:43:12 AM\r\n at config (file://./node_modules/.pnpm/nuxt@3.10.3_@types+node@18.19.23_eslint@8.57.0_typescript@5.4.2_vite@5.1.6_vue-tsc@1.8.27/node_modules/nuxt/dist/index.mjs:1866:62)\r\n```\r\n\r\n### Describe the bug\r\n\r\nIn `packages/nuxt/src/components/islandsTransform.ts`, the `componentsChunkPlugin` function makes the following type assertion ` (config.build.rollupOptions.input as Record\u003Cstring, string>)`.\r\n\r\n\r\n```typescript\r\nexport const componentsChunkPlugin = createUnplugin((options: ComponentChunkOptions) => {\r\n const { buildDir } = options\r\n return {\r\n name: 'componentsChunkPlugin',\r\n vite: {\r\n async config (config) {\r\n const components = options.getComponents()\r\n config.build = config.build || {}\r\n config.build.rollupOptions = config.build.rollupOptions || {}\r\n config.build.rollupOptions.output = config.build.rollupOptions.output || {}\r\n config.build.rollupOptions.input = config.build.rollupOptions.input || {}\r\n // don't use 'strict', this would create another \"facade\" chunk for the entry file, causing the ssr styles to not detect everything\r\n config.build.rollupOptions.preserveEntrySignatures = 'allow-extension'\r\n for (const component of components) {\r\n if (component.mode === 'client' || component.mode === 'all') {\r\n (config.build.rollupOptions.input as Record\u003Cstring, string>)[component.pascalName] = await resolvePath(component.filePath)\r\n }\r\n }\r\n },\r\n```\r\n\r\n`config.build.rollupOptions.input` is declared as `type InputOption = string | string[] | { [entryAlias: string]: string }`. When using storybook and `@storybook/builder-vite`, `config.build.rollupOptions.input` is a `string`, with a value similar to `/node_modules/.../@storybook/builder-vite/input/iframe.html`.\r\n\r\nWould a PR that checks first for the type of `config.build.rollupOptions.input` make sense? Something along the lines of:\r\n\r\n```typescript\r\n if (component.mode === 'client' || component.mode === 'all') {\r\n if ('object' === typeof config.build.rollupOptions.input && !Array.isArray(config.build.rollupOptions.input)) \r\n (config.build.rollupOptions.input as Record\u003Cstring, string>)[component.pascalName] = await resolvePath(component.filePath)\r\n```\r\n\r\n### Additional context\r\n\r\nDisabling server components is a workaround that fixes the issue when running or building storybook. I have them enabled when building the app, but disabled when building statically with storybook.\r\n\r\n### Logs\r\n\r\n_No response_",[2069,2072,2075,2078],{"name":2070,"color":2071},"good first issue","fbca04",{"name":2073,"color":2074},"3.x","29bc7f",{"name":2076,"color":2077},"🔨 p3-minor","FBCA04",{"name":2079,"color":2080},"server components","839413",26220,"TypeError in `islandsTransform.ts` affecting storybook","2024-04-03T10:36:16Z","https://github.com/nuxt/nuxt/issues/26220",0.68321544,{"description":2087,"labels":2088,"number":2091,"owner":1991,"repository":1992,"state":2021,"title":2092,"updated_at":2093,"url":2094,"score":2095},"### Description\n\nIn v3, we seem to have lost any focus indication on Buttons. This looks intentional as I see `focus:outline-hidden` on the base. For a11y and good keyboard navigation, it's best practice to have a visual indication of focus: https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#discernibleandpredictablekeyboardfocus\n\nIt seems we've taken a step backward from v2 in this regard. Was this intentional? Is the intent for users to add their own `focus-visible:*` classes via app config?",[2089,2090],{"name":2059,"color":2060},{"name":2005,"color":2006},3658,"Button Focus Indication","2025-03-24T09:50:12Z","https://github.com/nuxt/ui/issues/3658",0.6838971,{"description":2097,"labels":2098,"number":2101,"owner":1991,"repository":1992,"state":2021,"title":2102,"updated_at":2103,"url":2104,"score":2105},"### Environment\n\n- Operating System: `Windows_NT`\n- Node Version: `v22.12.0`\n- Nuxt Version: `3.16.0`\n- CLI Version: `3.23.0`\n- Nitro Version: `2.11.6`\n- Package Manager: `pnpm@9.9.0`\n- Builder: `-`\n- User Config: `devtools`, `modules`, `css`, `future`, `compatibilityDate`\n- Runtime Modules: `@nuxt/ui@3.0.0`, `@nuxt/eslint@1.2.0`\n- Build Modules: `-`\n\n### Version\n\nv3.0.0\n\n### Reproduction\n\nhttps://codesandbox.io/p/devbox/lingering-night-wl8j66\n\n### Description\n\nWhen items have value `null` or `undefined` and click the select menu, app will throw an error. \n\n### Additional context\n\n_No response_\n\n### Logs\n\n```shell-script\nUncaught (in promise) TypeError: Cannot read properties of undefined (reading 'disabled') SelectMenu.vue:379\n at SelectMenu.vue:379:35\n at renderList (runtime-core.esm-bundler.js:2904:16)\n at SelectMenu.vue:1:1\n at renderFnWithContext (runtime-core.esm-bundler.js:692:13)\n at renderSlot (runtime-core.esm-bundler.js:2981:53)\n at ComboboxGroup.vue:38:2\n at renderFnWithContext (runtime-core.esm-bundler.js:692:13)\n at renderSlot (runtime-core.esm-bundler.js:2981:53)\n at ListboxGroup.vue:21:34\n at renderFnWithContext (runtime-core.esm-bundler.js:692:13)\n```",[2099,2100],{"name":1985,"color":1986},{"name":1988,"color":1989},3316,"`USelectMenu`: can not open drop select when options have value `null`","2025-03-15T11:31:45Z","https://github.com/nuxt/ui/issues/3316",0.68504786,["Reactive",2107],{},["Set"],["ShallowReactive",2110],{"TRc1wZytZ_XrK4EfJfei_Sz-An4H4Yy6syhVxH_PVJc":-1,"va-ScEUQ84aSBwa_iSzI7Cvo4gH4YMUY_sMu3qipob4":-1},"/nuxt/ui/3139"]