\n \u003Cp class=\"text-sm font-medium\">\n {{ namesData.length === 0 ? 'No names loaded' : 'No names found' }}\n \u003C/p>\n \u003Cp class=\"text-xs text-neutral-500 mt-1\">\n {{ namesData.length === 0 ? 'Click \"Load Names\" to fetch data' : 'Try adjusting your search query' }}\n \u003C/p>\n \u003C/div>\n \u003C/template>\n \u003C/UTable>\n```\n\u003C/details>\n\nThe problem:\nHeight of row get bigger when more items added and get smaller while scrolling down, here is the example with 100 Row:\n\nFirst item height:\n\u003Cimg width=\"1217\" height=\"386\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/d74589f7-a6b3-45ea-afe9-6f7f9ef7ba2d\" />\n\nat middle:\n\u003Cimg width=\"1219\" height=\"386\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/653a9f5d-1702-401f-a437-4f61c6c4776e\" />\n\nat end:\n\u003Cimg width=\"1214\" height=\"386\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/b081a95c-5ffe-4d8e-ab57-64f978cebeea\" />\n\ni tired to play with `UTable.ui` object but that break the style no mater what i do, sometime head col not align with row cells",[3035,3036],{"name":3019,"color":3020},{"name":3022,"color":3023},4563,"`useVirtualList` example for `UTable`","2025-07-21T11:23:04Z","https://github.com/nuxt/ui/issues/4563",0.7752702,{"description":3043,"labels":3044,"number":3049,"owner":3025,"repository":3026,"state":3050,"title":3051,"updated_at":3052,"url":3053,"score":3054},"### Description\n\nHi, first of all thanks for Nuxt UI, it's a great library that makes building interfaces in Nuxt fast and enjoyable. Really appreciate the work you're putting into it.\n\n## Context\n\nThe `\u003CUTable>` component currently supports conditional class names via `meta.class.tr` (from `TableMeta`) and `meta.class.th` / `meta.class.td` (from `ColumnMeta`). This works well in most cases with Tailwind.\n\nHowever, it’s not possible today to apply inline styles dynamically — for example, to set background colors or custom widths based on data. This creates limitations in use cases where:\n\n- Tailwind classes are too generic or not granular enough \n- Style values are truly dynamic (e.g. coming from user data or configs) \n\n## Proposal\n\nAdd support for `meta.style`, mirroring the structure of `meta.class`, with the following API shape:\n\n```ts\nmeta {\n style?: {\n tr?: string | ((row: Row\u003CTData>) => string);\n };\n}\n\n\nmeta: {\n style?: {\n th?: string | ((cell: Header\u003CTData, TValue>) => string);\n td?: string | ((cell: Cell\u003CTData, TValue>) => string);\n }\n}\n```\n\n## Example usage\n\n```vue\n\u003CUTable\n :data=\"data\"\n :columns=\"columns\"\n :meta=\"{\n style: {\n tr: row => row.age \u003C 18 ? { backgroundColor: '#fff0f0' } : {},\n }\n }\"\n/>\n```\n\n## Why this matters\n\n- It improves flexibility for styling without requiring full slot overrides \n- It handles dynamic styles that can’t be expressed with Tailwind classes \n- It aligns with the existing `meta.class` design in both `TableMeta` and `ColumnMeta`, keeping things consistent and declarative\n\n### Additional context\n\n_No response_",[3045,3048],{"name":3046,"color":3047},"enhancement","a2eeef",{"name":3022,"color":3023},4475,"closed","Support inline `style` in `\u003CUTable>` via `meta.style`","2025-07-14T08:56:29Z","https://github.com/nuxt/ui/issues/4475",0.6986847,{"description":3056,"labels":3057,"number":3065,"owner":3025,"repository":3026,"state":3050,"title":3066,"updated_at":3067,"url":3068,"score":3069},"### Description\n\n``` vue.js\n\n\u003Ctemplate>\n \u003Cdiv class=\"mt-4 w-full\">\n \u003CUTable :data=\"combinationRows\" :columns=\"columns\" ref=\"table\">\n \u003Ctemplate #price-cell=\"{ row }\">\n \u003Cp>{{ row.original.price }}\u003C/p>\n \u003CUInput v-model=\"row.original.price\" type=\"number\" />\n \u003C/template>\n \u003Ctemplate #promotional-price-cell=\"{ row }\">\n \u003CUInput v-model=\"row.original.promotionalPrice\" type=\"number\" />\n \u003C/template>\n \u003Ctemplate #inventory-cell=\"{ row }\">\n \u003CUInput v-model=\"row.original.inventory\" type=\"number\" />\n \u003C/template>\n \u003Ctemplate #warning-inventory-cell=\"{ row }\">\n \u003CUInput v-model=\"row.original.warningInventory\" type=\"number\" />\n \u003C/template>\n \u003Ctemplate #sku-cell=\"{ row }\">\n \u003CUInput v-model=\"row.original.sku\" />\n \u003C/template>\n \u003C/UTable>\n \u003C/div>\n\n \u003Cp>{{ combinationRows }}\u003C/p>\n\u003C/template>\n\n\n\u003Cscript lang=ts setup>\n\nconst columns: TableColumn\u003CCombinationRow>[] = [\n {\n accessorKey: 'color',\n header: 'color'\n },\n {\n accessorKey: 'size',\n header: 'size'\n },\n {\n id: 'price',\n header: () => h('div', { class: 'flex items-center gap-1' }, [\n h('span', 'Price'), // Header Text\n h(UButton, {\n size: 'xs', \n color: 'neutral',\n variant: 'ghost', \n icon: 'i-hugeicons:copy-01', \n 'aria-label': 'Price information', \n class: 'cursor-pointer', \n \n onclick: () => {\n console.log('Price button clicked');\n\n if (combinationRows.value.length > 0) {\n const firstRowPrice = combinationRows?.value?.[0]?.price ?? '0';\n combinationRows.value.forEach(row => {\n row.price = firstRowPrice;\n });\n triggerRef(combinationRows); // Force table update - important for reactivity\n \n } else {\n console.warn('No rows available to copy price from.');\n }\n }\n },\n )\n ])\n },\n {\n id: 'promotional-price',\n header: () => h('div', { class: 'flex items-center gap-1' }, [\n h('span', 'promotional price'), // Header Text\n h(UButton, {\n size: 'xs', // Adjust button size as needed\n color: 'neutral', // Style the button to be less prominent\n variant: 'ghost', // Make it a ghost button style\n icon: 'i-hugeicons:copy-01', // Icon from your icon set\n 'aria-label': 'Price information', // Accessibility label\n class: 'cursor-pointer', // Override default button padding and margin\n // Set to false if you only want to show the icon and no text on the button itself. If you want text *on* the button, remove this and adjust the children of h(UButton)\n onclick: () => {\n console.log('Price button clicked');\n }\n },\n /* if you want text *on* the button instead of tooltip, you could add slot content here, e.g., () => 'Info' */\n )\n ])\n },\n {\n id: 'inventory',\n header: () => h('div', { class: 'flex items-center gap-1' }, [\n h('span', 'Inventory'), // Header Text\n h(UButton, {\n size: 'xs', // Adjust button size as needed\n color: 'neutral', // Style the button to be less prominent\n variant: 'ghost', // Make it a ghost button style\n icon: 'i-hugeicons:copy-01', // Icon from your icon set\n 'aria-label': 'Price information', // Accessibility label\n class: 'cursor-pointer', // Override default button padding and margin\n // Set to false if you only want to show the icon and no text on the button itself. If you want text *on* the button, remove this and adjust the children of h(UButton)\n onclick: () => {\n console.log('Price button clicked');\n }\n },\n /* if you want text *on* the button instead of tooltip, you could add slot content here, e.g., () => 'Info' */\n )\n ])\n },\n {\n id: 'warning-inventory',\n header: () => h('div', { class: 'flex items-center gap-1' }, [\n h('span', 'Warning Inventory value'), // Header Text\n h(UButton, {\n size: 'xs', // Adjust button size as needed\n color: 'neutral', // Style the button to be less prominent\n variant: 'ghost', // Make it a ghost button style\n icon: 'i-hugeicons:copy-01', // Icon from your icon set\n 'aria-label': 'Price information', // Accessibility label\n class: 'cursor-pointer', // Override default button padding and margin\n // Set to false if you only want to show the icon and no text on the button itself. If you want text *on* the button, remove this and adjust the children of h(UButton)\n onclick: () => {\n console.log('Price button clicked');\n }\n },\n /* if you want text *on* the button instead of tooltip, you could add slot content here, e.g., () => 'Info' */\n )\n ])\n },\n {\n id: 'sku',\n header: 'SKU number'\n }\n];\n\n\u003C/script>\n```\n\nwhen updating price to all rows in onClick (see onClick for price above) it does not update UInput in all rows\nalthough i can see \u003Cp>{{ combinationRows }}\u003C/p> getting updated. The question is how can i update price to all rows. using v3.0.0-alpha.13",[3058,3059,3060,3063],{"name":3019,"color":3020},{"name":3022,"color":3023},{"name":3061,"color":3062},"closed-by-bot","ededed",{"name":3064,"color":3062},"stale",3381,"Uinput not updating inside UTable rows","2025-06-18T09:01:59Z","https://github.com/nuxt/ui/issues/3381",0.71952444,{"description":3071,"labels":3072,"number":3074,"owner":3025,"repository":3026,"state":3050,"title":3075,"updated_at":3076,"url":3077,"score":3078},"### For what version of Nuxt UI are you asking this question?\n\nv2.x\n\n### Description\n\ni add the default table but have another styling.\nhow can i fix this? \n\n` \u003CUTable\n v-model:expand=\"expand\"\n class=\"w-full\"\n :loading-state=\"{ icon: 'i-heroicons-arrow-path-20-solid', label: 'Loading...' }\"\n :progress=\"{ color: 'primary', animation: 'carousel' }\"\n :rows=\"people\"\n :columns=\"columns\"\n >`\n\n",[3073],{"name":3019,"color":3020},2667,"I have no styling at the default UTable","2024-11-17T11:13:44Z","https://github.com/nuxt/ui/issues/2667",0.72986126,{"description":3080,"labels":3081,"number":3083,"owner":3025,"repository":3026,"state":3050,"title":3084,"updated_at":3085,"url":3086,"score":3087},"### For what version of Nuxt UI are you suggesting this?\n\nv2\n\n### Description\n\nPlease export `UTable` types in '#ui/types' too (Rows/Columns types).\nThanks\n\n### Additional context\n\n_No response_",[3082],{"name":3046,"color":3047},2373,"UTable types","2024-10-15T09:05:21Z","https://github.com/nuxt/ui/issues/2373",0.73293155,{"description":3089,"labels":3090,"number":3096,"owner":3025,"repository":3026,"state":3050,"title":3097,"updated_at":3098,"url":3099,"score":3100},"### Description\n\nHi is it possible to add context menu in utable upon selecting a row ? or any alternative ways how to do it thru context menu and utable ?\n\nThankss.\n\n### Additional context\n\n_No response_",[3091,3092,3093],{"name":3046,"color":3047},{"name":3022,"color":3023},{"name":3094,"color":3095},"triage","ffffff",4381,"[UTable] -> Context Menu upon selecting row","2025-06-24T12:32:01Z","https://github.com/nuxt/ui/issues/4381",0.73903024,{"description":3102,"labels":3103,"number":3107,"owner":3025,"repository":3026,"state":3050,"title":3108,"updated_at":3109,"url":3110,"score":3111},"### Description\r\n\r\nThe code for specifying column width when there is no data is as follows and it is expected\r\n\r\n```vue\r\n\u003Ctemplate>\r\n \u003Cdiv>\r\n \u003CUTable :empty-state=\"{ icon: 'i-heroicons-circle-stack-20-solid', label: 'No items.' }\" :rows=\"people\"\r\n :columns=\"columns\">\r\n \u003Ctemplate #from-data=\"{ row }\">\r\n {{ row.from.value }}\r\n \u003C/template>\r\n \u003C/UTable>\r\n \u003CUNotifications>\r\n \u003Ctemplate #title=\"{ title }\">\r\n \u003Cspan v-html=\"title\" />\r\n \u003C/template>\r\n\r\n \u003Ctemplate #description=\"{ description }\">\r\n \u003Cspan v-html=\"description\" />\r\n \u003C/template>\r\n \u003C/UNotifications>\r\n \u003C/div>\r\n\u003C/template>\r\n\r\n\u003Cscript setup lang=\"ts\">\r\nconst toast = useToast()\r\nconst app = useNuxtApp()\r\n\r\nconst columns = [{\r\n key: \"id\",\r\n label: \"编号\",\r\n class: 'w-16'\r\n}, {\r\n key: \"from\",\r\n label: \"发方\",\r\n class: 'w-[180px]'\r\n}, {\r\n key: \"to\",\r\n label: \"接方\",\r\n class: 'w-[180px]'\r\n\r\n}, {\r\n key: \"type\",\r\n label: \"类型\",\r\n class: 'w-[120px]'\r\n\r\n}, {\r\n key: \"value\",\r\n label: \"金额\",\r\n class: 'w-[120px]'\r\n\r\n}, {\r\n key: \"hash\",\r\n label: \"哈希\",\r\n}\r\n]\r\n\r\nconst people = ref([\r\n /*{\r\n \"id\": 1,\r\n \"from\": { value: '0x11111111fce9647bdf1e7877bf73ce8b0bad1111', class: 'w-[80px]' },\r\n \"to\": '0x22222222fce9647bdf1e7877bf73ce8b0bad2222',\r\n \"type\": 'ETH',\r\n \"value\": '123',\r\n \"hash\": '0x88baba17ca0060d644a72a9460260104eea81e7959445d3500d015ed71875d38',\r\n }*/\r\n])\r\n\r\n\r\n\u003C/script>\r\n\r\n\r\n\u003Cstyle>\r\na {\r\n color: #65a30d;\r\n font-weight: 700;\r\n font-size: 20px;\r\n}\r\n\r\n\r\n\u003C/style>\r\n```\r\n\r\n\r\n\r\nHowever, once there is data, it will be stretched open. How can I fix the header so that the content is partially hidden and drag the header to decide whether to hide or display it? This is too common in daily development and provides a good user experience\r\n\r\n\r\n```vue\r\nconst people = ref([\r\n {\r\n \"id\": 1,\r\n \"from\": { value: '0x11111111fce9647bdf1e7877bf73ce8b0bad1111', class: 'w-[80px]' },\r\n \"to\": '0x22222222fce9647bdf1e7877bf73ce8b0bad2222',\r\n \"type\": 'ETH',\r\n \"value\": '123',\r\n \"hash\": '0x88baba17ca0060d644a72a9460260104eea81e7959445d3500d015ed71875d38',\r\n }\r\n])\r\n```\r\n\r\n",[3104,3105,3106],{"name":3019,"color":3020},{"name":3061,"color":3062},{"name":3064,"color":3062},2092,"UTable column width","2025-06-18T09:06:18Z","https://github.com/nuxt/ui/issues/2092",0.75029755,{"description":3113,"labels":3114,"number":3116,"owner":3025,"repository":3026,"state":3050,"title":3117,"updated_at":3118,"url":3119,"score":3120},"### For what version of Nuxt UI are you suggesting this?\n\nv2.x\n\n### Description\n\nHow can add a class to the \"selectable\" column? Other columns I can use the `class` attribute (https://ui.nuxt.com/components/table#columns) for the column, but for the automatically showing \"selectable\" column, there's no such way to customize it\n\n### Additional context\n\n_No response_",[3115],{"name":3046,"color":3047},2377,"Ability to add custom column data (specifically class) to automatically showing selectable column","2024-11-12T17:12:38Z","https://github.com/nuxt/ui/issues/2377",0.75683683,{"description":3122,"labels":3123,"number":3128,"owner":3025,"repository":3026,"state":3050,"title":3129,"updated_at":3130,"url":3131,"score":3132},"### For what version of Nuxt UI are you suggesting this?\n\nv2.x\n\n### Description\n\nTo control the rows of the table, I need a slot for them. For instance, if I want to implement a reorder feature using drag and drop, I require a \u003Ctr> element to loop through.\n\n### Additional context\n\n_No response_",[3124,3125,3126,3127],{"name":3046,"color":3047},{"name":3094,"color":3095},{"name":3061,"color":3062},{"name":3064,"color":3062},2685,"[UTable] Add the functionality to include a slot for all \u003Ctr> elements, as well as a 'default' slot.","2025-06-18T09:05:45Z","https://github.com/nuxt/ui/issues/2685",0.75788677,["Reactive",3134],{},["Set"],["ShallowReactive",3137],{"$fTRc1wZytZ_XrK4EfJfei_Sz-An4H4Yy6syhVxH_PVJc":-1,"$f3hMjrYr7sjPOmw9i1CJHXfYxiLnazo8c1PpVq-SowAk":-1},"/nuxt/ui/4089"]