fix(theme): applied tw nested group (#3658)

* fix(theme): apply nested group for checkbox

* fix(theme): apply nested group for autocomplete

* fix(theme): apply nested group for select

* fix(theme): apply nested group for toggle

* fix(theme): apply nested group for radio

* fix(theme): apply nested group for input

* fix(theme): apply nested group for datepicker

* fix(theme): apply nested group for dateinput

* chore(changeset): add changeset

* chore(changeset): add issue number

* chore(theme): format code

* feat(table): add TableWithSwitch
This commit is contained in:
աӄա 2024-09-13 14:06:45 +08:00 committed by GitHub
parent b0728e3c38
commit 5b5a9746e3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 216 additions and 141 deletions

View File

@ -0,0 +1,5 @@
---
"@nextui-org/theme": patch
---
applied tw nested group (#3544, #2324, #2959)

View File

@ -22,6 +22,7 @@ import {
TableProps,
getKeyValue,
} from "../src";
import {Switch} from "../../switch/src";
export default {
title: "Components/Table",
@ -151,6 +152,46 @@ const StaticTemplate = (args: TableProps) => (
</Table>
);
const TableWithSwitchTemplate = (args: TableProps) => (
<Table aria-label="Table with Switch" {...args}>
<TableHeader>
<TableColumn>NAME</TableColumn>
<TableColumn>ROLE</TableColumn>
<TableColumn>ACTIVE</TableColumn>
</TableHeader>
<TableBody>
<TableRow key="1">
<TableCell>Tony Reichert</TableCell>
<TableCell>CEO</TableCell>
<TableCell>
<Switch />
</TableCell>
</TableRow>
<TableRow key="2">
<TableCell>Zoey Lang</TableCell>
<TableCell>Technical Lead</TableCell>
<TableCell>
<Switch />
</TableCell>
</TableRow>
<TableRow key="3">
<TableCell>Jane Fisher</TableCell>
<TableCell>Senior Developer</TableCell>
<TableCell>
<Switch />
</TableCell>
</TableRow>
<TableRow key="4">
<TableCell>William Howard</TableCell>
<TableCell>Community Manager</TableCell>
<TableCell>
<Switch />
</TableCell>
</TableRow>
</TableBody>
</Table>
);
const EmptyTemplate = (args: TableProps) => (
<Table aria-label="Example empty table" {...args}>
<TableHeader>
@ -1061,3 +1102,11 @@ export const DisableAnimation = {
disableAnimation: true,
},
};
export const TableWithSwitch = {
render: TableWithSwitchTemplate,
args: {
...defaultProps,
selectionMode: "multiple",
},
};

View File

@ -4,7 +4,7 @@ import {tv} from "../utils/tv";
const autocomplete = tv({
slots: {
base: "group inline-flex flex-column w-full",
base: "group/autocomplete inline-flex flex-column w-full",
listboxWrapper: "scroll-py-6 max-h-64 w-full",
listbox: "",
popoverContent: "w-full p-1 overflow-hidden",
@ -16,14 +16,14 @@ const autocomplete = tv({
"opacity-0",
"pointer-events-none",
"text-default-500",
"group-data-[invalid=true]:text-danger",
"group-data-[invalid=true]/autocomplete:text-danger",
"data-[visible=true]:opacity-100", // on mobile is always visible when there is a value
"data-[visible=true]:pointer-events-auto",
"data-[visible=true]:cursor-pointer",
"sm:data-[visible=true]:opacity-0", // only visible on hover
"sm:data-[visible=true]:pointer-events-none",
"sm:group-data-[hover=true]:data-[visible=true]:opacity-100",
"sm:group-data-[hover=true]:data-[visible=true]:pointer-events-auto",
"sm:group-data-[hover=true]:data-[visible=true]/autocomplete:opacity-100",
"sm:group-data-[hover=true]:data-[visible=true]/autocomplete:pointer-events-auto",
],
selectorButton: "text-medium",
},

View File

@ -21,7 +21,7 @@ import {groupDataFocusVisibleClasses} from "../utils";
*/
const checkbox = tv({
slots: {
base: "group relative max-w-fit inline-flex items-center justify-start cursor-pointer tap-highlight-transparent p-2 -m-2 select-none",
base: "group/checkbox relative max-w-fit inline-flex items-center justify-start cursor-pointer tap-highlight-transparent p-2 -m-2 select-none",
wrapper: [
"relative",
"inline-flex",
@ -44,14 +44,14 @@ const checkbox = tv({
"after:scale-50",
"after:opacity-0",
"after:origin-center",
"group-data-[selected=true]:after:scale-100",
"group-data-[selected=true]:after:opacity-100",
"group-data-[selected=true]/checkbox:after:scale-100",
"group-data-[selected=true]/checkbox:after:opacity-100",
// hover
"group-data-[hover=true]:before:bg-default-100",
"group-data-[hover=true]/checkbox:before:bg-default-100",
// focus ring
...groupDataFocusVisibleClasses,
],
icon: "z-10 w-4 h-3 opacity-0 group-data-[selected=true]:opacity-100",
icon: "z-10 w-4 h-3 opacity-0 group-data-[selected=true]/checkbox:opacity-100",
label: "relative text-foreground select-none",
},
variants: {
@ -147,8 +147,8 @@ const checkbox = tv({
"before:bg-foreground",
"before:w-0",
"before:h-0.5",
"group-data-[selected=true]:opacity-60",
"group-data-[selected=true]:before:w-full",
"group-data-[selected=true]/checkbox:opacity-60",
"group-data-[selected=true]/checkbox:before:w-full",
],
},
},
@ -172,7 +172,7 @@ const checkbox = tv({
false: {
wrapper: [
"before:transition-colors",
"group-data-[pressed=true]:scale-95",
"group-data-[pressed=true]/checkbox:scale-95",
"transition-transform",
"after:transition-transform-opacity",
"after:!ease-linear",

View File

@ -9,13 +9,13 @@ import {tv} from "../utils/tv";
*/
const dateInput = tv({
slots: {
base: "group flex flex-col",
base: "group/dateinput flex flex-col",
label: [
"block subpixel-antialiased text-small text-default-600",
// isRequired=true
"group-data-[required=true]:after:content-['*'] group-data-[required=true]:after:text-danger group-data-[required=true]:after:ml-0.5",
"group-data-[required=true]/dateinput:after:content-['*'] group-data-[required=true]/dateinput:after:text-danger group-data-[required=true]/dateinput:after:ml-0.5",
// isInValid=true
"group-data-[invalid=true]:text-danger",
"group-data-[invalid=true]/dateinput:text-danger",
],
inputWrapper: [
"relative px-3 gap-3 w-full inline-flex flex-row items-center",
@ -25,10 +25,10 @@ const dateInput = tv({
innerWrapper: [
"flex items-center text-default-400 w-full gap-x-2 h-6",
// isInValid=true
"group-data-[invalid=true]:text-danger",
"group-data-[invalid=true]/dateinput:text-danger",
], // this wraps the input and the start/end content
segment: [
"group first:-ml-0.5 [&:not(:first-child)]:-ml-1 px-0.5 my-auto box-content tabular-nums text-start",
"group/dateinput first:-ml-0.5 [&:not(:first-child)]:-ml-1 px-0.5 my-auto box-content tabular-nums text-start",
"inline-block outline-none focus:shadow-sm rounded-md",
"text-foreground-500 data-[editable=true]:text-foreground",
"data-[editable=true]:data-[placeholder=true]:text-foreground-500",
@ -37,7 +37,8 @@ const dateInput = tv({
"data-[invalid=true]:focus:bg-danger-400/50 dark:data-[invalid=true]:focus:bg-danger-400/20",
"data-[invalid=true]:data-[editable=true]:focus:text-danger",
],
helperWrapper: "hidden group-data-[has-helper=true]:flex p-1 relative flex-col gap-1.5",
helperWrapper:
"hidden group-data-[has-helper=true]/dateinput:flex p-1 relative flex-col gap-1.5",
description: "text-tiny text-foreground-400",
errorMessage: "text-tiny text-danger",
},
@ -49,9 +50,9 @@ const dateInput = tv({
"hover:bg-default-200",
"focus-within:hover:bg-default-100",
// isInvalid=true
"group-data-[invalid=true]:bg-danger-50",
"group-data-[invalid=true]:hover:bg-danger-100",
"group-data-[invalid=true]:focus-within:hover:bg-danger-50",
"group-data-[invalid=true]/dateinput:bg-danger-50",
"group-data-[invalid=true]/dateinput:hover:bg-danger-100",
"group-data-[invalid=true]/dateinput:focus-within:hover:bg-danger-50",
],
},
faded: {
@ -61,9 +62,9 @@ const dateInput = tv({
"border-default-200",
"hover:border-default-400",
// isInvalid=true
"group-data-[invalid=true]:bg-danger-50",
"group-data-[invalid=true]:hover:bg-danger-100",
"group-data-[invalid=true]:focus-within:hover:bg-danger-50",
"group-data-[invalid=true]/dateinput:bg-danger-50",
"group-data-[invalid=true]/dateinput:hover:bg-danger-100",
"group-data-[invalid=true]/dateinput:focus-within:hover:bg-danger-50",
],
},
bordered: {
@ -74,9 +75,9 @@ const dateInput = tv({
"focus-within:border-default-foreground",
"focus-within:hover:border-default-foreground",
// isInvalid=true
"group-data-[invalid=true]:border-danger",
"group-data-[invalid=true]:hover:border-danger",
"group-data-[invalid=true]:focus-within:hover:border-danger",
"group-data-[invalid=true]/dateinput:border-danger",
"group-data-[invalid=true]/dateinput:hover:border-danger",
"group-data-[invalid=true]/dateinput:focus-within:hover:border-danger",
],
},
underlined: {
@ -102,7 +103,7 @@ const dateInput = tv({
"after:h-[2px]",
"focus-within:after:w-full",
// isInvalid=true
"group-data-[invalid=true]:after:bg-danger",
"group-data-[invalid=true]/dateinput:after:bg-danger",
],
},
},

View File

@ -9,7 +9,7 @@ import {tv} from "../utils/tv";
*/
const datePicker = tv({
slots: {
base: "group w-full",
base: "group/datepicker w-full",
selectorButton: "-mr-2 text-inherit",
selectorIcon: "text-lg text-inherit pointer-events-none flex-shrink-0",
popoverContent: "p-0 w-full",
@ -23,9 +23,10 @@ const datePicker = tv({
const dateRangePicker = tv({
extend: datePicker,
slots: {
calendar: "group",
calendar: "group/daterangepicker",
bottomContent: "flex flex-col gap-y-2",
timeInputWrapper: "flex flex-col group-data-[has-multiple-months=true]:flex-row",
timeInputWrapper:
"flex flex-col group-data-[has-multiple-months=true]/daterangepicker:flex-row",
separator: "-mx-1 text-inherit",
},
});

View File

@ -23,7 +23,7 @@ import {dataFocusVisibleClasses, groupDataFocusVisibleClasses} from "../utils";
*/
const input = tv({
slots: {
base: "group flex flex-col data-[hidden=true]:hidden",
base: "group/input flex flex-col data-[hidden=true]:hidden",
label: [
"absolute",
"z-10",
@ -65,7 +65,7 @@ const input = tv({
// focus ring
...dataFocusVisibleClasses,
],
helperWrapper: "hidden group-data-[has-helper=true]:flex p-1 relative flex-col gap-1.5",
helperWrapper: "hidden group-data-[has-helper=true]/input:flex p-1 relative flex-col gap-1.5",
description: "text-tiny text-foreground-400",
errorMessage: "text-tiny text-danger",
},
@ -75,7 +75,7 @@ const input = tv({
inputWrapper: [
"bg-default-100",
"data-[hover=true]:bg-default-200",
"group-data-[focus=true]:bg-default-100",
"group-data-[focus=true]/input:bg-default-100",
],
},
faded: {
@ -85,14 +85,14 @@ const input = tv({
"border-default-200",
"data-[hover=true]:border-default-400",
],
value: "group-data-[has-value=true]:text-default-foreground",
value: "group-data-[has-value=true]/input:text-default-foreground",
},
bordered: {
inputWrapper: [
"border-medium",
"border-default-200",
"data-[hover=true]:border-default-400",
"group-data-[focus=true]:border-default-foreground",
"group-data-[focus=true]/input:border-default-foreground",
],
},
underlined: {
@ -116,10 +116,10 @@ const input = tv({
"after:-translate-x-1/2",
"after:-bottom-[2px]",
"after:h-[2px]",
"group-data-[focus=true]:after:w-full",
"group-data-[focus=true]/input:after:w-full",
],
innerWrapper: "pb-1",
label: "group-data-[filled-within=true]:text-foreground",
label: "group-data-[filled-within=true]/input:text-foreground",
},
},
color: {
@ -178,7 +178,7 @@ const input = tv({
inside: {
label: "text-tiny cursor-text",
inputWrapper: "flex-col items-start justify-center gap-0",
innerWrapper: "group-data-[has-label=true]:items-end",
innerWrapper: "group-data-[has-label=true]/input:items-end",
},
},
fullWidth: {
@ -215,7 +215,7 @@ const input = tv({
true: {
label: "relative",
inputWrapper: "!h-auto",
innerWrapper: "items-start group-data-[has-label=true]:items-start",
innerWrapper: "items-start group-data-[has-label=true]/input:items-start",
input: "resize-none data-[hide-scroll=true]:scrollbar-hide",
},
},
@ -253,7 +253,7 @@ const input = tv({
variant: "flat",
color: "default",
class: {
input: "group-data-[has-value=true]:text-default-foreground",
input: "group-data-[has-value=true]/input:text-default-foreground",
},
},
{
@ -264,7 +264,7 @@ const input = tv({
"bg-primary-50",
"data-[hover=true]:bg-primary-100",
"text-primary",
"group-data-[focus=true]:bg-primary-50",
"group-data-[focus=true]/input:bg-primary-50",
"placeholder:text-primary",
],
input: "placeholder:text-primary",
@ -279,7 +279,7 @@ const input = tv({
"bg-secondary-50",
"text-secondary",
"data-[hover=true]:bg-secondary-100",
"group-data-[focus=true]:bg-secondary-50",
"group-data-[focus=true]/input:bg-secondary-50",
"placeholder:text-secondary",
],
input: "placeholder:text-secondary",
@ -297,7 +297,7 @@ const input = tv({
"placeholder:text-success-600",
"dark:placeholder:text-success",
"data-[hover=true]:bg-success-100",
"group-data-[focus=true]:bg-success-50",
"group-data-[focus=true]/input:bg-success-50",
],
input: "placeholder:text-success-600 dark:placeholder:text-success",
label: "text-success-600 dark:text-success",
@ -314,7 +314,7 @@ const input = tv({
"placeholder:text-warning-600",
"dark:placeholder:text-warning",
"data-[hover=true]:bg-warning-100",
"group-data-[focus=true]:bg-warning-50",
"group-data-[focus=true]/input:bg-warning-50",
],
input: "placeholder:text-warning-600 dark:placeholder:text-warning",
label: "text-warning-600 dark:text-warning",
@ -331,7 +331,7 @@ const input = tv({
"placeholder:text-danger",
"dark:placeholder:text-danger-500",
"data-[hover=true]:bg-danger-100",
"group-data-[focus=true]:bg-danger-50",
"group-data-[focus=true]/input:bg-danger-50",
],
input: "placeholder:text-danger dark:placeholder:text-danger-500",
label: "text-danger dark:text-danger-500",
@ -383,7 +383,7 @@ const input = tv({
variant: "underlined",
color: "default",
class: {
input: "group-data-[has-value=true]:text-foreground",
input: "group-data-[has-value=true]/input:text-foreground",
},
},
{
@ -431,7 +431,7 @@ const input = tv({
variant: "bordered",
color: "primary",
class: {
inputWrapper: "group-data-[focus=true]:border-primary",
inputWrapper: "group-data-[focus=true]/input:border-primary",
label: "text-primary",
},
},
@ -439,7 +439,7 @@ const input = tv({
variant: "bordered",
color: "secondary",
class: {
inputWrapper: "group-data-[focus=true]:border-secondary",
inputWrapper: "group-data-[focus=true]/input:border-secondary",
label: "text-secondary",
},
},
@ -447,7 +447,7 @@ const input = tv({
variant: "bordered",
color: "success",
class: {
inputWrapper: "group-data-[focus=true]:border-success",
inputWrapper: "group-data-[focus=true]/input:border-success",
label: "text-success",
},
},
@ -455,7 +455,7 @@ const input = tv({
variant: "bordered",
color: "warning",
class: {
inputWrapper: "group-data-[focus=true]:border-warning",
inputWrapper: "group-data-[focus=true]/input:border-warning",
label: "text-warning",
},
},
@ -463,7 +463,7 @@ const input = tv({
variant: "bordered",
color: "danger",
class: {
inputWrapper: "group-data-[focus=true]:border-danger",
inputWrapper: "group-data-[focus=true]/input:border-danger",
label: "text-danger",
},
},
@ -472,7 +472,7 @@ const input = tv({
labelPlacement: "inside",
color: "default",
class: {
label: "group-data-[filled-within=true]:text-default-600",
label: "group-data-[filled-within=true]/input:text-default-600",
},
},
// labelPlacement=outside & default
@ -480,7 +480,7 @@ const input = tv({
labelPlacement: "outside",
color: "default",
class: {
label: "group-data-[filled-within=true]:text-foreground",
label: "group-data-[filled-within=true]/input:text-foreground",
},
},
// radius-full & size
@ -538,7 +538,7 @@ const input = tv({
inputWrapper: [
"!bg-danger-50",
"data-[hover=true]:!bg-danger-100",
"group-data-[focus=true]:!bg-danger-50",
"group-data-[focus=true]/input:!bg-danger-50",
],
},
},
@ -546,7 +546,7 @@ const input = tv({
isInvalid: true,
variant: "bordered",
class: {
inputWrapper: "!border-danger group-data-[focus=true]:!border-danger",
inputWrapper: "!border-danger group-data-[focus=true]/input:!border-danger",
},
},
{
@ -592,7 +592,7 @@ const input = tv({
{
labelPlacement: ["inside", "outside"],
class: {
label: ["group-data-[filled-within=true]:pointer-events-auto"],
label: ["group-data-[filled-within=true]/input:pointer-events-auto"],
},
},
// labelPlacement=[outside] & isMultiline
@ -600,13 +600,13 @@ const input = tv({
labelPlacement: "outside",
isMultiline: false,
class: {
base: "group relative justify-end",
base: "relative justify-end",
label: [
"pb-0",
"z-20",
"top-1/2",
"-translate-y-1/2",
"group-data-[filled-within=true]:start-0",
"group-data-[filled-within=true]/input:start-0",
],
},
},
@ -614,7 +614,7 @@ const input = tv({
{
labelPlacement: ["inside"],
class: {
label: ["group-data-[filled-within=true]:scale-85"],
label: ["group-data-[filled-within=true]/input:scale-85"],
},
},
// labelPlacement=[inside] & variant=flat
@ -654,7 +654,7 @@ const input = tv({
size: "sm",
class: {
label: [
"group-data-[filled-within=true]:-translate-y-[calc(50%_+_theme(fontSize.tiny)/2_-_8px)]",
"group-data-[filled-within=true]/input:-translate-y-[calc(50%_+_theme(fontSize.tiny)/2_-_8px)]",
],
},
},
@ -664,7 +664,7 @@ const input = tv({
size: "md",
class: {
label: [
"group-data-[filled-within=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_6px)]",
"group-data-[filled-within=true]/input:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_6px)]",
],
},
},
@ -675,7 +675,7 @@ const input = tv({
class: {
label: [
"text-medium",
"group-data-[filled-within=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_8px)]",
"group-data-[filled-within=true]/input:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_8px)]",
],
},
},
@ -687,7 +687,7 @@ const input = tv({
size: "sm",
class: {
label: [
"group-data-[filled-within=true]:-translate-y-[calc(50%_+_theme(fontSize.tiny)/2_-_8px_-_theme(borderWidth.medium))]",
"group-data-[filled-within=true]/input:-translate-y-[calc(50%_+_theme(fontSize.tiny)/2_-_8px_-_theme(borderWidth.medium))]",
],
},
},
@ -698,7 +698,7 @@ const input = tv({
size: "md",
class: {
label: [
"group-data-[filled-within=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_6px_-_theme(borderWidth.medium))]",
"group-data-[filled-within=true]/input:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_6px_-_theme(borderWidth.medium))]",
],
},
},
@ -710,7 +710,7 @@ const input = tv({
class: {
label: [
"text-medium",
"group-data-[filled-within=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_8px_-_theme(borderWidth.medium))]",
"group-data-[filled-within=true]/input:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_8px_-_theme(borderWidth.medium))]",
],
},
},
@ -722,7 +722,7 @@ const input = tv({
size: "sm",
class: {
label: [
"group-data-[filled-within=true]:-translate-y-[calc(50%_+_theme(fontSize.tiny)/2_-_5px)]",
"group-data-[filled-within=true]/input:-translate-y-[calc(50%_+_theme(fontSize.tiny)/2_-_5px)]",
],
},
},
@ -733,7 +733,7 @@ const input = tv({
size: "md",
class: {
label: [
"group-data-[filled-within=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_3.5px)]",
"group-data-[filled-within=true]/input:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_3.5px)]",
],
},
},
@ -745,7 +745,7 @@ const input = tv({
class: {
label: [
"text-medium",
"group-data-[filled-within=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_4px)]",
"group-data-[filled-within=true]/input:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_4px)]",
],
},
},
@ -758,7 +758,7 @@ const input = tv({
label: [
"start-2",
"text-tiny",
"group-data-[filled-within=true]:-translate-y-[calc(100%_+_theme(fontSize.tiny)/2_+_16px)]",
"group-data-[filled-within=true]/input:-translate-y-[calc(100%_+_theme(fontSize.tiny)/2_+_16px)]",
],
base: "data-[has-label=true]:mt-[calc(theme(fontSize.small)_+_8px)]",
},
@ -772,7 +772,7 @@ const input = tv({
"start-3",
"end-auto",
"text-small",
"group-data-[filled-within=true]:-translate-y-[calc(100%_+_theme(fontSize.small)/2_+_20px)]",
"group-data-[filled-within=true]/input:-translate-y-[calc(100%_+_theme(fontSize.small)/2_+_20px)]",
],
base: "data-[has-label=true]:mt-[calc(theme(fontSize.small)_+_10px)]",
},
@ -786,7 +786,7 @@ const input = tv({
"start-3",
"end-auto",
"text-medium",
"group-data-[filled-within=true]:-translate-y-[calc(100%_+_theme(fontSize.small)/2_+_24px)]",
"group-data-[filled-within=true]/input:-translate-y-[calc(100%_+_theme(fontSize.small)/2_+_24px)]",
],
base: "data-[has-label=true]:mt-[calc(theme(fontSize.small)_+_12px)]",
},
@ -796,21 +796,21 @@ const input = tv({
labelPlacement: "outside-left",
size: "sm",
class: {
label: "group-data-[has-helper=true]:pt-2",
label: "group-data-[has-helper=true]/input:pt-2",
},
},
{
labelPlacement: "outside-left",
size: "md",
class: {
label: "group-data-[has-helper=true]:pt-3",
label: "group-data-[has-helper=true]/input:pt-3",
},
},
{
labelPlacement: "outside-left",
size: "lg",
class: {
label: "group-data-[has-helper=true]:pt-4",
label: "group-data-[has-helper=true]/input:pt-4",
},
},
// labelPlacement=[outside, outside-left] & isMultiline

View File

@ -27,7 +27,7 @@ import {groupDataFocusVisibleClasses} from "../utils";
*/
const radio = tv({
slots: {
base: "group relative max-w-fit inline-flex items-center justify-start cursor-pointer tap-highlight-transparent p-2 -m-2 select-none",
base: "group/radio relative max-w-fit inline-flex items-center justify-start cursor-pointer tap-highlight-transparent p-2 -m-2 select-none",
wrapper: [
"relative",
"inline-flex",
@ -40,7 +40,7 @@ const radio = tv({
"box-border",
"border-default",
"rounded-full",
"group-data-[hover-unselected=true]:bg-default-100",
"group-data-[hover-unselected=true]/radio:bg-default-100",
// focus ring
...groupDataFocusVisibleClasses,
],
@ -53,8 +53,8 @@ const radio = tv({
"scale-0",
"origin-center",
"rounded-full",
"group-data-[selected=true]:opacity-100",
"group-data-[selected=true]:scale-100",
"group-data-[selected=true]/radio:opacity-100",
"group-data-[selected=true]/radio:scale-100",
],
label: "relative text-foreground select-none",
description: "relative text-foreground-400",
@ -63,27 +63,27 @@ const radio = tv({
color: {
default: {
control: "bg-default-500 text-default-foreground",
wrapper: "group-data-[selected=true]:border-default-500",
wrapper: "group-data-[selected=true]/radio:border-default-500",
},
primary: {
control: "bg-primary text-primary-foreground",
wrapper: "group-data-[selected=true]:border-primary",
wrapper: "group-data-[selected=true]/radio:border-primary",
},
secondary: {
control: "bg-secondary text-secondary-foreground",
wrapper: "group-data-[selected=true]:border-secondary",
wrapper: "group-data-[selected=true]/radio:border-secondary",
},
success: {
control: "bg-success text-success-foreground",
wrapper: "group-data-[selected=true]:border-success",
wrapper: "group-data-[selected=true]/radio:border-success",
},
warning: {
control: "bg-warning text-warning-foreground",
wrapper: "group-data-[selected=true]:border-warning",
wrapper: "group-data-[selected=true]/radio:border-warning",
},
danger: {
control: "bg-danger text-danger-foreground",
wrapper: "group-data-[selected=true]:border-danger",
wrapper: "group-data-[selected=true]/radio:border-danger",
},
},
size: {
@ -117,7 +117,7 @@ const radio = tv({
isInvalid: {
true: {
control: "bg-danger text-danger-foreground",
wrapper: "border-danger group-data-[selected=true]:border-danger",
wrapper: "border-danger group-data-[selected=true]/radio:border-danger",
label: "text-danger",
description: "text-danger-300",
},
@ -126,7 +126,7 @@ const radio = tv({
true: {},
false: {
wrapper: [
"group-data-[pressed=true]:scale-95",
"group-data-[pressed=true]/radio:scale-95",
"transition-transform-colors",
"motion-reduce:transition-none",
],

View File

@ -5,7 +5,7 @@ import {tv} from "../utils/tv";
const select = tv({
slots: {
base: ["group inline-flex flex-col relative w-full"],
base: ["group/select inline-flex flex-col relative w-full"],
label: [
"block",
"absolute",
@ -38,7 +38,7 @@ const select = tv({
trigger: [
"bg-default-100",
"data-[hover=true]:bg-default-200",
"group-data-[focus=true]:bg-default-100",
"group-data-[focus=true]/select:bg-default-100",
],
},
faded: {
@ -49,7 +49,7 @@ const select = tv({
"border-default-200",
"data-[hover=true]:border-default-400",
],
value: "group-data-[has-value=true]:text-default-foreground",
value: "group-data-[has-value=true]/select:text-default-foreground",
},
bordered: {
trigger: [
@ -86,7 +86,7 @@ const select = tv({
"data-[open=true]:after:w-full",
"data-[focus=true]:after:w-full",
],
value: "group-data-[has-value=true]:text-default-foreground",
value: "group-data-[has-value=true]/select:text-default-foreground",
},
},
color: {
@ -218,7 +218,7 @@ const select = tv({
variant: "flat",
color: "default",
class: {
value: "group-data-[has-value=true]:text-default-foreground",
value: "group-data-[has-value=true]/select:text-default-foreground",
trigger: ["bg-default-100", "data-[hover=true]:bg-default-50"],
},
},
@ -230,7 +230,7 @@ const select = tv({
"bg-primary-100",
"text-primary",
"data-[hover=true]:bg-primary-50",
"group-data-[focus=true]:bg-primary-50",
"group-data-[focus=true]/select:bg-primary-50",
],
value: "text-primary",
label: "text-primary",
@ -244,7 +244,7 @@ const select = tv({
"bg-secondary-100",
"text-secondary",
"data-[hover=true]:bg-secondary-50",
"group-data-[focus=true]:bg-secondary-50",
"group-data-[focus=true]/select:bg-secondary-50",
],
value: "text-secondary",
label: "text-secondary",
@ -259,7 +259,7 @@ const select = tv({
"text-success-600",
"dark:text-success",
"data-[hover=true]:bg-success-50",
"group-data-[focus=true]:bg-success-50",
"group-data-[focus=true]/select:bg-success-50",
],
value: "text-success-600 dark:text-success",
label: "text-success-600 dark:text-success",
@ -274,7 +274,7 @@ const select = tv({
"text-warning-600",
"dark:text-warning",
"data-[hover=true]:bg-warning-50",
"group-data-[focus=true]:bg-warning-50",
"group-data-[focus=true]/select:bg-warning-50",
],
value: "text-warning-600 dark:text-warning",
label: "text-warning-600 dark:text-warning",
@ -289,7 +289,7 @@ const select = tv({
"text-danger",
"dark:text-danger-500",
"data-[hover=true]:bg-danger-50",
"group-data-[focus=true]:bg-danger-50",
"group-data-[focus=true]/select:bg-danger-50",
],
value: "text-danger dark:text-danger-500",
label: "text-danger dark:text-danger-500",
@ -342,7 +342,7 @@ const select = tv({
variant: "underlined",
color: "default",
class: {
value: "group-data-[has-value=true]:text-foreground",
value: "group-data-[has-value=true]/select:text-foreground",
},
},
{
@ -431,7 +431,7 @@ const select = tv({
labelPlacement: "inside",
color: "default",
class: {
label: "group-data-[filled=true]:text-default-600",
label: "group-data-[filled=true]/select:text-default-600",
},
},
// labelPlacement=outside & default
@ -439,7 +439,7 @@ const select = tv({
labelPlacement: "outside",
color: "default",
class: {
label: "group-data-[filled=true]:text-foreground",
label: "group-data-[filled=true]/select:text-foreground",
},
},
// radius-full & size
@ -497,7 +497,7 @@ const select = tv({
trigger: [
"bg-danger-50",
"data-[hover=true]:bg-danger-100",
"group-data-[focus=true]:bg-danger-50",
"group-data-[focus=true]/select:bg-danger-50",
],
},
},
@ -505,7 +505,7 @@ const select = tv({
isInvalid: true,
variant: "bordered",
class: {
trigger: "!border-danger group-data-[focus=true]:border-danger",
trigger: "!border-danger group-data-[focus=true]/select:border-danger",
},
},
{
@ -543,14 +543,20 @@ const select = tv({
isMultiline: false,
class: {
base: "group relative justify-end",
label: ["pb-0", "z-20", "top-1/2", "-translate-y-1/2", "group-data-[filled=true]:start-0"],
label: [
"pb-0",
"z-20",
"top-1/2",
"-translate-y-1/2",
"group-data-[filled=true]/select:start-0",
],
},
},
// labelPlacement=[inside]
{
labelPlacement: ["inside"],
class: {
label: "group-data-[filled=true]:scale-85",
label: "group-data-[filled=true]/select:scale-85",
},
},
// inside & size
@ -566,8 +572,10 @@ const select = tv({
isMultiline: false,
size: "sm",
class: {
label: ["group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.tiny)/2_-_8px)]"],
innerWrapper: "group-data-[has-label=true]:pt-4",
label: [
"group-data-[filled=true]/select:-translate-y-[calc(50%_+_theme(fontSize.tiny)/2_-_8px)]",
],
innerWrapper: "group-data-[has-label=true]/select:pt-4",
},
},
{
@ -576,9 +584,9 @@ const select = tv({
size: "md",
class: {
label: [
"group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_6px)]",
"group-data-[filled=true]/select:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_6px)]",
],
innerWrapper: "group-data-[has-label=true]:pt-4",
innerWrapper: "group-data-[has-label=true]/select:pt-4",
},
},
{
@ -588,9 +596,9 @@ const select = tv({
class: {
label: [
"text-medium",
"group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_8px)]",
"group-data-[filled=true]/select:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_8px)]",
],
innerWrapper: "group-data-[has-label=true]:pt-5",
innerWrapper: "group-data-[has-label=true]/select:pt-5",
},
},
// inside & size & [faded, bordered]
@ -601,7 +609,7 @@ const select = tv({
size: "sm",
class: {
label: [
"group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.tiny)/2_-_8px_-_theme(borderWidth.medium))]",
"group-data-[filled=true]/select:-translate-y-[calc(50%_+_theme(fontSize.tiny)/2_-_8px_-_theme(borderWidth.medium))]",
],
},
},
@ -612,7 +620,7 @@ const select = tv({
size: "md",
class: {
label: [
"group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_6px_-_theme(borderWidth.medium))]",
"group-data-[filled=true]/select:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_6px_-_theme(borderWidth.medium))]",
],
},
},
@ -624,7 +632,7 @@ const select = tv({
class: {
label: [
"text-medium",
"group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_8px_-_theme(borderWidth.medium))]",
"group-data-[filled=true]/select:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_8px_-_theme(borderWidth.medium))]",
],
},
},
@ -635,7 +643,9 @@ const select = tv({
isMultiline: false,
size: "sm",
class: {
label: ["group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.tiny)/2_-_5px)]"],
label: [
"group-data-[filled=true]/select:-translate-y-[calc(50%_+_theme(fontSize.tiny)/2_-_5px)]",
],
},
},
{
@ -645,7 +655,7 @@ const select = tv({
size: "md",
class: {
label: [
"group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_3.5px)]",
"group-data-[filled=true]/select:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_3.5px)]",
],
},
},
@ -657,7 +667,7 @@ const select = tv({
class: {
label: [
"text-medium",
"group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_4px)]",
"group-data-[filled=true]/select:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_4px)]",
],
},
},
@ -670,7 +680,7 @@ const select = tv({
label: [
"start-2",
"text-tiny",
"group-data-[filled=true]:-translate-y-[calc(100%_+_theme(fontSize.tiny)/2_+_16px)]",
"group-data-[filled=true]/select:-translate-y-[calc(100%_+_theme(fontSize.tiny)/2_+_16px)]",
],
base: "data-[has-label=true]:mt-[calc(theme(fontSize.small)_+_8px)]",
},
@ -683,7 +693,7 @@ const select = tv({
label: [
"start-3",
"text-small",
"group-data-[filled=true]:-translate-y-[calc(100%_+_theme(fontSize.small)/2_+_20px)]",
"group-data-[filled=true]/select:-translate-y-[calc(100%_+_theme(fontSize.small)/2_+_20px)]",
],
base: "data-[has-label=true]:mt-[calc(theme(fontSize.small)_+_10px)]",
},
@ -696,7 +706,7 @@ const select = tv({
label: [
"start-3",
"text-medium",
"group-data-[filled=true]:-translate-y-[calc(100%_+_theme(fontSize.small)/2_+_24px)]",
"group-data-[filled=true]/select:-translate-y-[calc(100%_+_theme(fontSize.small)/2_+_24px)]",
],
base: "data-[has-label=true]:mt-[calc(theme(fontSize.small)_+_12px)]",
},

View File

@ -30,7 +30,7 @@ import {groupDataFocusVisibleClasses} from "../utils";
*/
const toggle = tv({
slots: {
base: "group relative max-w-fit inline-flex items-center justify-start cursor-pointer touch-none tap-highlight-transparent select-none",
base: "group/toggle relative max-w-fit inline-flex items-center justify-start cursor-pointer touch-none tap-highlight-transparent select-none",
wrapper: [
"px-1",
"relative",
@ -63,37 +63,37 @@ const toggle = tv({
color: {
default: {
wrapper: [
"group-data-[selected=true]:bg-default-400",
"group-data-[selected=true]:text-default-foreground",
"group-data-[selected=true]/toggle:bg-default-400",
"group-data-[selected=true]/toggle:text-default-foreground",
],
},
primary: {
wrapper: [
"group-data-[selected=true]:bg-primary",
"group-data-[selected=true]:text-primary-foreground",
"group-data-[selected=true]/toggle:bg-primary",
"group-data-[selected=true]/toggle:text-primary-foreground",
],
},
secondary: {
wrapper: [
"group-data-[selected=true]:bg-secondary",
"group-data-[selected=true]:text-secondary-foreground",
"group-data-[selected=true]/toggle:bg-secondary",
"group-data-[selected=true]/toggle:text-secondary-foreground",
],
},
success: {
wrapper: [
"group-data-[selected=true]:bg-success",
"group-data-[selected=true]:text-success-foreground",
"group-data-[selected=true]/toggle:bg-success",
"group-data-[selected=true]/toggle:text-success-foreground",
],
},
warning: {
wrapper: [
"group-data-[selected=true]:bg-warning",
"group-data-[selected=true]:text-warning-foreground",
"group-data-[selected=true]/toggle:bg-warning",
"group-data-[selected=true]/toggle:text-warning-foreground",
],
},
danger: {
wrapper: [
"group-data-[selected=true]:bg-danger",
"group-data-[selected=true]/toggle:bg-danger",
"data-[selected=true]:text-danger-foreground",
],
},
@ -104,7 +104,7 @@ const toggle = tv({
thumb: [
"w-4 h-4 text-tiny",
//selected
"group-data-[selected=true]:ml-4 rtl:group-data-[selected=true]:ml-0 rtl:group-data-[selected=true]:mr-4",
"group-data-[selected=true]/toggle:ml-4 rtl:group-data-[selected=true]/toggle:ml-0 rtl:group-data-[selected=true]/toggle:mr-4",
],
endContent: "text-tiny",
startContent: "text-tiny",
@ -115,7 +115,7 @@ const toggle = tv({
thumb: [
"w-5 h-5 text-small",
//selected
"group-data-[selected=true]:ml-5 rtl:group-data-[selected=true]:ml-0 rtl:group-data-[selected=true]:mr-5",
"group-data-[selected=true]/toggle:ml-5 rtl:group-data-[selected=true]/toggle:ml-0 rtl:group-data-[selected=true]/toggle:mr-5",
],
endContent: "text-small",
startContent: "text-small",
@ -126,7 +126,7 @@ const toggle = tv({
thumb: [
"w-6 h-6 text-medium",
//selected
"group-data-[selected=true]:ml-6 rtl:group-data-[selected=true]:ml-0 rtl:group-data-[selected=true]:mr-6",
"group-data-[selected=true]/toggle:ml-6 rtl:group-data-[selected=true]/toggle:ml-0 rtl:group-data-[selected=true]/toggle:mr-6",
],
endContent: "text-medium",
startContent: "text-medium",
@ -150,14 +150,14 @@ const toggle = tv({
"opacity-0",
"scale-50",
"transition-transform-opacity",
"group-data-[selected=true]:scale-100",
"group-data-[selected=true]:opacity-100",
"group-data-[selected=true]/toggle:scale-100",
"group-data-[selected=true]/toggle:opacity-100",
],
endContent: [
"opacity-100",
"transition-transform-opacity",
"group-data-[selected=true]:translate-x-3",
"group-data-[selected=true]:opacity-0",
"group-data-[selected=true]/toggle:translate-x-3",
"group-data-[selected=true]/toggle:opacity-0",
],
},
},
@ -172,21 +172,30 @@ const toggle = tv({
disableAnimation: false,
size: "sm",
class: {
thumb: ["group-data-[pressed=true]:w-5", "group-data-[selected]:group-data-[pressed]:ml-3"],
thumb: [
"group-data-[pressed=true]/toggle:w-5",
"group-data-[selected]/toggle:group-data-[pressed]/toggle:ml-3",
],
},
},
{
disableAnimation: false,
size: "md",
class: {
thumb: ["group-data-[pressed=true]:w-6", "group-data-[selected]:group-data-[pressed]:ml-4"],
thumb: [
"group-data-[pressed=true]/toggle:w-6",
"group-data-[selected]/toggle:group-data-[pressed]/toggle:ml-4",
],
},
},
{
disableAnimation: false,
size: "lg",
class: {
thumb: ["group-data-[pressed=true]:w-7", "group-data-[selected]:group-data-[pressed]:ml-5"],
thumb: [
"group-data-[pressed=true]/toggle:w-7",
"group-data-[selected]/toggle:group-data-[pressed]/toggle:ml-5",
],
},
},
],