feat(root): tabs component created, animation improved

This commit is contained in:
Junior Garcia 2023-04-28 00:15:22 -03:00
parent b1bb36f898
commit 07f9e86116
147 changed files with 1710 additions and 185 deletions

View File

@ -1,5 +1,20 @@
# @nextui-org/accordion
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/use-aria-accordion-item@0.0.0-dev-v2-20230428031422
- @nextui-org/framer-transitions@0.0.0-dev-v2-20230428031422
- @nextui-org/shared-icons@0.0.0-dev-v2-20230428031422
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/aria-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/accordion",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Collapse display a list of high-level options that can expand/collapse to reveal more information.",
"keywords": [
"react",

View File

@ -1,5 +1,17 @@
# @nextui-org/avatar
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/use-image@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/avatar",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "The Avatar component is used to represent a user, and displays the profile picture, initials or fallback icon.",
"keywords": [
"avatar"

View File

@ -1,5 +1,16 @@
# @nextui-org/badge
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/badge",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Badges are used as a small numerical value or status descriptor for UI elements.",
"keywords": [
"badge"

View File

@ -1,5 +1,19 @@
# @nextui-org/button
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/use-aria-button@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/spinner@0.0.0-dev-v2-20230428031422
- @nextui-org/drip@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/button",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Buttons allow users to perform actions and choose with a single tap.",
"keywords": [
"button"

View File

@ -1,5 +1,18 @@
# @nextui-org/card
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/use-aria-button@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/drip@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/card",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Card is a container for text, photos, and actions in the context of a single subject.",
"keywords": [
"card"

View File

@ -1,5 +1,16 @@
# @nextui-org/checkbox
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/checkbox",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Checkboxes allow users to select multiple items from a list of individual items, or to mark one individual item as selected.",
"keywords": [
"checkbox"

View File

@ -182,7 +182,7 @@ export const CustomWithClassNames = (props: CustomCheckboxProps) => {
aria-label={userName}
classNames={{
base: clsx(
"inline-flex w-full max-w-md bg-content1 hover:bg-content2 items-center justify-start cursor-pointer rounded-lg gap-2 p-4 border-1.5 border-transparent",
"inline-flex w-full max-w-md bg-content1 hover:bg-content2 items-center justify-start cursor-pointer rounded-lg gap-2 p-4 border-2.5 border-transparent",
{
"border-primary": isChecked,
},

View File

@ -1,5 +1,17 @@
# @nextui-org/chip
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-icons@0.0.0-dev-v2-20230428031422
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/chip",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Chips help people enter information, make selections, filter content, or trigger actions.",
"keywords": [
"chip"

View File

@ -1,5 +1,16 @@
# @nextui-org/code
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/code",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Code is a component used to display inline code.",
"keywords": [
"code"

View File

@ -1,5 +1,16 @@
# @nextui-org/divider
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/divider",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": ". A separator is a visual divider between two groups of content",
"keywords": [
"divider"

View File

@ -1,5 +1,16 @@
# @nextui-org/drip
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/drip",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "A ripple effect for ensuring that the user fells the system is reacting instantaneously",
"keywords": [
"drip"

View File

@ -1,5 +1,19 @@
# @nextui-org/dropdown
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/aria-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/use-is-mobile@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/popover@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/dropdown",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "A dropdown displays a list of actions or options that a user can choose.",
"keywords": [
"dropdown"

View File

@ -1,5 +1,17 @@
# @nextui-org/image
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/use-image@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/image",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "A simple image component",
"keywords": [
"image"

View File

@ -1,5 +1,18 @@
# @nextui-org/input
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-icons@0.0.0-dev-v2-20230428031422
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/use-aria-field@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/input",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "The input component is designed for capturing user input within a text field.",
"keywords": [
"input"

View File

@ -1,5 +1,16 @@
# @nextui-org/kbd
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/kbd",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "The keyboard key components indicates which key or set of keys used to execute a specificv action",
"keywords": [
"kbd"

View File

@ -1,5 +1,16 @@
# @nextui-org/link
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/link",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Links allow users to click their way from page to page. This component is styled to resemble a hyperlink and semantically renders an <a>",
"keywords": [
"link"

View File

@ -1,5 +1,20 @@
# @nextui-org/modal
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/framer-transitions@0.0.0-dev-v2-20230428031422
- @nextui-org/shared-icons@0.0.0-dev-v2-20230428031422
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/use-aria-button@0.0.0-dev-v2-20230428031422
- @nextui-org/use-disclosure@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/modal",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Displays a dialog with a custom content that requires attention or provides additional information.",
"keywords": [
"modal"

View File

@ -1,5 +1,19 @@
# @nextui-org/navbar
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/use-aria-toggle-button@0.0.0-dev-v2-20230428031422
- @nextui-org/framer-transitions@0.0.0-dev-v2-20230428031422
- @nextui-org/use-scroll-position@0.0.0-dev-v2-20230428031422
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/navbar",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "A responsive navigation header positioned on top side of your page that includes support for branding, links, navigation, collapse and more.",
"keywords": [
"navbar"

View File

@ -1,5 +1,18 @@
# @nextui-org/pagination
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-icons@0.0.0-dev-v2-20230428031422
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/use-pagination@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/pagination",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "The Pagination component allows you to display active page and navigate between multiple pages.",
"keywords": [
"pagination"

View File

@ -204,7 +204,7 @@ CustomWithClassNames.args = {
...defaultProps,
showShadow: true,
classNames: {
base: "gap-0 rounded border-1 border-neutral",
base: "gap-0 rounded border-2 border-neutral",
item: "w-8 h-8 text-sm rounded-none bg-transparent",
cursor:
"bg-gradient-to-b shadow-lg shadow-neutral from-neutral-500 to-neutral-800 dark:from-neutral-300 dark:to-neutral-100 text-white font-bold",

View File

@ -1,5 +1,20 @@
# @nextui-org/popover
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/framer-transitions@0.0.0-dev-v2-20230428031422
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/use-aria-button@0.0.0-dev-v2-20230428031422
- @nextui-org/aria-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/button@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/popover",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "A popover is an overlay element positioned relative to a trigger.",
"keywords": [
"popover"

View File

@ -1,5 +1,18 @@
# @nextui-org/progress
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/use-aria-label@0.0.0-dev-v2-20230428031422
- @nextui-org/use-is-mounted@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/progress",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Progress bars show either determinate or indeterminate progress of an operation over time.",
"keywords": [
"progress"

View File

@ -1,5 +1,16 @@
# @nextui-org/radio
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/radio",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Radios allow users to select a single option from a list of mutually exclusive options.",
"keywords": [
"radio"

View File

@ -1,5 +1,18 @@
# @nextui-org/snippet
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/use-clipboard@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/tooltip@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/snippet",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Display a snippet of copyable code for the command line.",
"keywords": [
"snippet"

View File

@ -1,5 +1,16 @@
# @nextui-org/spacer
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/spacer",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "A flexible spacer component designed to create consistent spacing and maintain alignment in your layout.",
"keywords": [
"spacer"

View File

@ -1,5 +1,16 @@
# @nextui-org/spinner
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/spinner",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Loaders express an unspecified wait time or display the length of a process.",
"keywords": [
"loading",

View File

@ -1,5 +1,16 @@
# @nextui-org/switch
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/switch",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "A switch is similar to a checkbox, but represents on/off values as opposed to selection.",
"keywords": [
"switch"

View File

@ -82,7 +82,7 @@ const CustomWithClassNamesTemplate: ComponentStory<typeof Switch> = (args: Switc
<Switch
classNames={{
base: clsx(
"inline-flex flex-row-reverse w-full max-w-md bg-content1 hover:bg-content2 items-center justify-between cursor-pointer rounded-lg gap-2 p-4 border-1.5 border-transparent",
"inline-flex flex-row-reverse w-full max-w-md bg-content1 hover:bg-content2 items-center justify-between cursor-pointer rounded-lg gap-2 p-4 border-2.5 border-transparent",
{
"border-primary": isSelected,
},

View File

@ -1,5 +1,19 @@
# @nextui-org/table
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-icons@0.0.0-dev-v2-20230428031422
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/checkbox@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/spacer@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/table",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Tables are used to display tabular data using rows and columns. ",
"keywords": [
"table"

View File

@ -0,0 +1,14 @@
# @nextui-org/tabs
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/framer-transitions@0.0.0-dev-v2-20230428031422
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/aria-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422

View File

@ -1,11 +1,63 @@
import * as React from "react";
import {render} from "@testing-library/react";
import {act, render} from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import {focus} from "@nextui-org/test-utils";
import {Tabs} from "../src";
import {Tabs, TabItem} from "../src";
type Item = {
id: string;
label: string;
content?: React.ReactNode;
};
let tabs: Item[] = [
{
id: "item1",
label: "Item1 ",
content: "Content 1",
},
{
id: "item2",
label: "Item 2",
content: "Content 2",
},
{
id: "item3",
label: "Item 3",
content: "Content 3",
},
];
describe("Tabs", () => {
it("should render correctly", () => {
const wrapper = render(<Tabs />);
it("should render correctly (static)", () => {
const wrapper = render(
<Tabs aria-label="Tabs static test">
<TabItem key="item1" title="Item 1">
<div>Content 1</div>
</TabItem>
<TabItem key="item2" title="Item 2">
<div>Content 2</div>
</TabItem>
<TabItem key="item3" title="Item 3">
<div>Content 3</div>
</TabItem>
</Tabs>,
);
expect(() => wrapper.unmount()).not.toThrow();
});
it("should render correctly (dynamic)", () => {
const wrapper = render(
<Tabs aria-label="Tabs static test" items={tabs}>
{(item) => (
<TabItem key={item.id} title={item.label}>
<div>{item.content}</div>
</TabItem>
)}
</Tabs>,
);
expect(() => wrapper.unmount()).not.toThrow();
});
@ -13,7 +65,165 @@ describe("Tabs", () => {
it("ref should be forwarded", () => {
const ref = React.createRef<HTMLDivElement>();
render(<Tabs ref={ref} />);
render(
<Tabs ref={ref} aria-label="Tabs static test">
<TabItem key="item1" title="Item 1">
<div>Content 1</div>
</TabItem>
<TabItem key="item2" title="Item 2">
<div>Content 2</div>
</TabItem>
<TabItem key="item3" title="Item 3">
<div>Content 3</div>
</TabItem>
</Tabs>,
);
expect(ref.current).not.toBeNull();
});
test("should select the correct tab with keyboard navigation", async () => {
const wrapper = render(
<Tabs aria-label="Tabs static test">
<TabItem key="item1" data-testid="item1" title="Item 1">
<div>Content 1</div>
</TabItem>
<TabItem key="item2" data-testid="item2" title="Item 2">
<div>Content 2</div>
</TabItem>
<TabItem key="item3" data-testid="item3" title="Item 3">
<div>Content 3</div>
</TabItem>
</Tabs>,
);
const tab1 = wrapper.getByTestId("item1");
const tab2 = wrapper.getByTestId("item2");
const tab3 = wrapper.getByTestId("item3");
expect(tab1).toHaveAttribute("aria-selected", "true");
expect(tab2).toHaveAttribute("aria-selected", "false");
expect(tab3).toHaveAttribute("aria-selected", "false");
act(() => {
focus(tab1);
});
await act(async () => {
await userEvent.keyboard("[ArrowRight]");
});
expect(tab1).toHaveAttribute("aria-selected", "false");
expect(tab2).toHaveAttribute("aria-selected", "true");
expect(tab3).toHaveAttribute("aria-selected", "false");
await act(async () => {
await userEvent.keyboard("[ArrowRight]");
});
expect(tab1).toHaveAttribute("aria-selected", "false");
expect(tab2).toHaveAttribute("aria-selected", "false");
expect(tab3).toHaveAttribute("aria-selected", "true");
await act(async () => {
await userEvent.keyboard("[ArrowRight]");
});
expect(tab1).toHaveAttribute("aria-selected", "true");
expect(tab2).toHaveAttribute("aria-selected", "false");
expect(tab3).toHaveAttribute("aria-selected", "false");
});
test("should focus the correct tab with manual keyboard navigation", async () => {
const wrapper = render(
<Tabs aria-label="Tabs static test" keyboardActivation="manual">
<TabItem key="item1" data-testid="item1" title="Item 1">
<div>Content 1</div>
</TabItem>
<TabItem key="item2" data-testid="item2" title="Item 2">
<div>Content 2</div>
</TabItem>
<TabItem key="item3" data-testid="item3" title="Item 3">
<div>Content 3</div>
</TabItem>
</Tabs>,
);
const tab1 = wrapper.getByTestId("item1");
const tab2 = wrapper.getByTestId("item2");
const tab3 = wrapper.getByTestId("item3");
expect(tab1).toHaveAttribute("aria-selected", "true");
expect(tab2).toHaveAttribute("aria-selected", "false");
expect(tab3).toHaveAttribute("aria-selected", "false");
act(() => {
focus(tab1);
});
await act(async () => {
await userEvent.keyboard("[ArrowRight]");
});
expect(tab2).toHaveFocus();
await act(async () => {
await userEvent.keyboard("[ArrowRight]");
});
expect(tab3).toHaveFocus();
await act(async () => {
await userEvent.keyboard("[ArrowLeft]");
});
expect(tab2).toHaveFocus();
expect(tab1).toHaveAttribute("aria-selected", "true");
expect(tab2).toHaveAttribute("aria-selected", "false");
expect(tab3).toHaveAttribute("aria-selected", "false");
});
it("it should work with defaultSelectedKey", () => {
const wrapper = render(
<Tabs aria-label="Tabs static test" defaultSelectedKey="item2">
<TabItem key="item1" title="Item 1">
<div>Content 1</div>
</TabItem>
<TabItem key="item2" data-testid="item2" title="Item 2">
<div>Content 2</div>
</TabItem>
<TabItem key="item3" title="Item 3">
<div>Content 3</div>
</TabItem>
</Tabs>,
);
const tab2 = wrapper.getByTestId("item2");
expect(tab2).toHaveAttribute("aria-selected", "true");
});
it("should not select a tab when disabled", async () => {
const wrapper = render(
<Tabs aria-label="Tabs static test" disabledKeys={["item2"]}>
<TabItem key="item1" title="Item 1">
<div>Content 1</div>
</TabItem>
<TabItem key="item2" data-testid="item2" title="Item 2">
<div>Content 2</div>
</TabItem>
<TabItem key="item3" title="Item 3">
<div>Content 3</div>
</TabItem>
</Tabs>,
);
const tab2 = wrapper.getByTestId("item2");
await act(async () => {
await userEvent.click(tab2);
});
expect(tab2).toHaveAttribute("aria-selected", "false");
});
});

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/tabs",
"version": "2.0.0-beta.1",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Tabs organize content into multiple sections and allow users to navigate between them.",
"keywords": [
"tabs"
@ -54,6 +54,11 @@
"framer-motion": "^10.11.2",
"@react-types/shared": "^3.18.0",
"react-lorem-component": "0.13.0",
"@nextui-org/card": "workspace:*",
"@nextui-org/input": "workspace:*",
"@nextui-org/test-utils": "workspace:*",
"@nextui-org/button": "workspace:*",
"@nextui-org/shared-icons": "workspace:*",
"@react-types/tabs": "^3.2.1",
"clean-package": "2.2.0",
"react": "^18.0.0"

View File

@ -1,11 +1,15 @@
import {BaseItem, ItemProps} from "@nextui-org/aria-utils";
import {ReactNode} from "react";
interface Props<T extends object = {}> extends Omit<ItemProps<"div", T>, "children"> {
interface Props<T extends object = {}> extends Omit<ItemProps<"div", T>, "children" | "title"> {
/**
* The content of the component.
*/
children?: ReactNode | null;
/**
* The title of the component.
*/
title?: ReactNode | null;
}
export type TabItemProps<T extends object = {}> = Props<T>;

View File

@ -22,38 +22,57 @@ export interface TabItemProps<T = object> extends HTMLNextUIProps<"div"> {
* @internal
*/
const TabItem = forwardRef<TabItemProps, "div">((props, ref) => {
const {as, className, item, style, onClick, ...otherProps} = props;
const {className, as, item, style, onClick, ...otherProps} = props;
const {key} = item;
const Component = as || "div";
const domRef = useDOMRef(ref);
const {slots, state, tabPanelId, classNames} = useTabsContext();
const Component = as || "div";
const {
slots,
state,
tabPanelId,
isDisabled: isDisabledProp,
disableAnimation,
classNames,
} = useTabsContext();
const {tabProps, isSelected, isDisabled: isDisabledItem, isPressed} = useTab(
{key},
state,
domRef,
);
const isDisabled = isDisabledProp || isDisabledItem;
const {tabProps, isSelected, isDisabled, isPressed} = useTab({key}, state, domRef);
const {focusProps, isFocused, isFocusVisible} = useFocusRing();
const {hoverProps, isHovered} = useHover({
isDisabled,
});
const tabStyles = clsx(classNames?.tab, className, item.props?.className);
const tabStyles = clsx(classNames?.tab, className);
return (
<Component
ref={domRef}
data-disabled={dataAttr(isDisabledItem)}
data-focus={dataAttr(isFocused)}
data-focus-visible={dataAttr(isFocusVisible)}
data-hover={dataAttr(isHovered)}
data-hover-unselected={dataAttr(isHovered && !isSelected)}
data-hover-unselected={dataAttr((isHovered || isPressed) && !isSelected)}
data-pressed={dataAttr(isPressed)}
data-selected={dataAttr(isSelected)}
{...mergeProps(
tabProps,
focusProps,
hoverProps,
filterDOMProps(item.props, {labelable: true}),
otherProps,
!isDisabled
? {
...focusProps,
...hoverProps,
}
: {},
filterDOMProps(otherProps, {labelable: true}),
)}
aria-controls={tabPanelId}
className={slots.tab?.({class: tabStyles})}
@ -64,7 +83,7 @@ const TabItem = forwardRef<TabItemProps, "div">((props, ref) => {
}}
onClick={chain(onClick, tabProps.onClick)}
>
{isSelected && (
{isSelected && !disableAnimation ? (
<motion.span
className={slots.cursor({class: classNames?.cursor})}
layoutDependency={false}
@ -74,7 +93,7 @@ const TabItem = forwardRef<TabItemProps, "div">((props, ref) => {
duration: 0.6,
}}
/>
)}
) : null}
<div
className={slots.tabContent({
class: classNames?.tabContent,

View File

@ -3,7 +3,7 @@ import type {AriaTabPanelProps} from "@react-aria/tabs";
import {forwardRef, HTMLNextUIProps} from "@nextui-org/system";
import {useDOMRef} from "@nextui-org/dom-utils";
import {clsx} from "@nextui-org/shared-utils";
import {filterDOMProps, mergeProps} from "@react-aria/utils";
import {mergeProps} from "@react-aria/utils";
import {useTabPanel} from "@react-aria/tabs";
import {useFocusRing} from "@react-aria/focus";
@ -38,12 +38,7 @@ const TabPanel = forwardRef<TabPanelProps, "div">((props, ref) => {
ref={domRef}
data-focus={isFocused}
data-focus-visible={isFocusVisible}
{...mergeProps(
tabPanelProps,
focusProps,
filterDOMProps(selectedItem.props, {labelable: true}),
otherProps,
)}
{...mergeProps(tabPanelProps, focusProps, otherProps)}
aria-labelledby={`${tabPanelId}-${state.selectedItem?.key}`}
className={slots.panel?.({class: tabPanelStyles})}
id={tabPanelId}

View File

@ -1,17 +1,14 @@
import {forwardRef} from "@nextui-org/system";
import {AriaTabProps} from "@react-aria/tabs";
import {forwardRef, ForwardedRef, ReactElement, Ref} from "react";
import {TabsProvider} from "./tabs-context";
import {UseTabsProps, useTabs} from "./use-tabs";
import TabItem from "./tab-item";
import TabPanel from "./tab-panel";
interface Props extends Omit<UseTabsProps, "ref"> {}
interface Props<T> extends Omit<UseTabsProps<T>, "ref"> {}
export type TabsProps = Props & AriaTabProps;
const Tabs = forwardRef<TabsProps, "div">((props, ref) => {
const {Component, state, context, getBaseProps, getTabListProps} = useTabs({ref, ...props});
function Tabs<T extends object>(props: Props<T>, ref: ForwardedRef<HTMLDivElement>) {
const {Component, state, context, getBaseProps, getTabListProps} = useTabs<T>({ref, ...props});
return (
<TabsProvider value={context}>
@ -25,8 +22,11 @@ const Tabs = forwardRef<TabsProps, "div">((props, ref) => {
<TabPanel key={state.selectedItem?.key} />
</TabsProvider>
);
});
}
export type TabsProps<T = object> = Props<T> & {ref?: Ref<HTMLElement>};
// forwardRef doesn't support generic parameters, so cast the result to the correct type
export default forwardRef(Tabs) as <T = object>(props: TabsProps<T>) => ReactElement;
Tabs.displayName = "NextUI.Tabs";
export default Tabs;

View File

@ -4,20 +4,18 @@ import {HTMLNextUIProps, mapPropsVariants, PropGetter} from "@nextui-org/system"
import {tabs} from "@nextui-org/theme";
import {useDOMRef} from "@nextui-org/dom-utils";
import {clsx, ReactRef} from "@nextui-org/shared-utils";
import {useMemo, ReactNode, useId} from "react";
import {useMemo, useId} from "react";
import {TabListState, TabListStateOptions, useTabListState} from "@react-stately/tabs";
import {AriaTabListOptions, useTabList} from "@react-aria/tabs";
import {AriaTabListProps, useTabList} from "@react-aria/tabs";
import {filterDOMProps, mergeProps} from "@react-aria/utils";
import {CollectionProps} from "@nextui-org/aria-utils";
import {CollectionChildren} from "@react-types/shared";
export interface Props extends HTMLNextUIProps<"div"> {
export interface Props extends Omit<HTMLNextUIProps<"div">, "children"> {
/**
* Ref to the DOM node.
*/
ref?: ReactRef<HTMLElement | null>;
/*
* The list of `TabItem` elements.
*/
children?: ReactNode | ReactNode[];
/**
* Classname or List of classes to change the classNames of the element.
* if `className` is passed, it will be added to the base slot.
@ -25,7 +23,8 @@ export interface Props extends HTMLNextUIProps<"div"> {
* @example
* ```ts
* <Tabs classNames={{
* base:"base-classes", // table wrapper
* base:"base-classes", // main wrapper (tabs + panels)
* tabList: "tab-list-classes", // tabs wrapper
* tab: "tab-classes", // tab item
* panel: "panel-classes", // tab panel
* }} />
@ -34,29 +33,35 @@ export interface Props extends HTMLNextUIProps<"div"> {
classNames?: SlotsToClasses<TabsSlots>;
}
export type UseTabsProps<T = object> = Props &
export type UseTabsProps<T> = Props &
TabsVariantProps &
TabListStateOptions<T> &
AriaTabListOptions<T>;
Omit<TabListStateOptions<T>, "children"> &
Omit<AriaTabListProps<T>, "children" | "orientation"> &
CollectionProps<T>;
export type ContextType<T = object> = {
state: TabListState<T>;
slots: TabsReturnType;
tabPanelId: string;
classNames?: SlotsToClasses<TabsSlots>;
disableAnimation?: boolean;
isDisabled?: boolean;
};
export function useTabs<T extends object>(originalProps: UseTabsProps<T>) {
const [props, variantProps] = mapPropsVariants(originalProps, tabs.variantKeys);
const {ref, as, className, classNames, ...otherProps} = props;
const {ref, as, className, children, classNames, ...otherProps} = props;
const Component = as || "div";
const domRef = useDOMRef(ref);
const state = useTabListState(otherProps);
const {tabListProps} = useTabList(otherProps, state, domRef);
const state = useTabListState<T>({
children: children as CollectionChildren<T>,
...otherProps,
});
const {tabListProps} = useTabList<T>(otherProps, state, domRef);
const tabListId = useId();
const tabPanelId = useId();
@ -78,8 +83,17 @@ export function useTabs<T extends object>(originalProps: UseTabsProps<T>) {
slots,
tabPanelId,
classNames,
isDisabled: originalProps?.isDisabled,
disableAnimation: originalProps?.disableAnimation,
}),
[state, slots, tabPanelId, classNames],
[
state,
slots,
tabPanelId,
originalProps?.disableAnimation,
originalProps?.isDisabled,
classNames,
],
);
const getBaseProps: PropGetter = (props) => ({

View File

@ -1,7 +1,18 @@
import React from "react";
import {ComponentStory, ComponentMeta} from "@storybook/react";
import {tabs} from "@nextui-org/theme";
import {button, link, tabs} from "@nextui-org/theme";
import Lorem from "react-lorem-component";
import {Input} from "@nextui-org/input";
import {Button} from "@nextui-org/button";
import {Card, CardBody} from "@nextui-org/card";
import {
AlignVerticallyBoldIcon,
AlignHorizontallyBoldIcon,
AlignBottomBoldIcon,
AlignLeftBoldIcon,
AlignRightBoldIcon,
AlignTopBoldIcon,
} from "@nextui-org/shared-icons";
import {Tabs, TabItem, TabsProps} from "../src";
@ -9,6 +20,12 @@ export default {
title: "Components/Tabs",
component: Tabs,
argTypes: {
variant: {
control: {
type: "select",
options: ["solid", "underlined", "bordered"],
},
},
color: {
control: {
type: "select",
@ -32,6 +49,11 @@ export default {
type: "boolean",
},
},
disableAnimation: {
control: {
type: "boolean",
},
},
},
} as ComponentMeta<typeof Tabs>;
@ -39,7 +61,7 @@ const defaultProps = {
...tabs.defaultVariants,
};
const Template: ComponentStory<typeof Tabs> = (args: TabsProps) => (
const StaticTemplate: ComponentStory<any> = (args: TabsProps) => (
<Tabs aria-label="Tabs example" {...args}>
<TabItem key="world" title="World">
<Lorem count={1} sentenceUpperBound={20} />
@ -59,7 +81,233 @@ const Template: ComponentStory<typeof Tabs> = (args: TabsProps) => (
</Tabs>
);
export const Default = Template.bind({});
Default.args = {
const WithIconsTemplate: ComponentStory<any> = (args: TabsProps) => (
<Tabs
aria-label="Tabs example"
{...args}
classNames={{
tab: "text-lg",
}}
>
<TabItem key="align-left" title={<AlignLeftBoldIcon />} />
<TabItem key="align-vertically" title={<AlignVerticallyBoldIcon />} />
<TabItem key="align-right" title={<AlignRightBoldIcon />} />
<TabItem key="align-top" title={<AlignTopBoldIcon />} />
<TabItem key="align-horizontally" title={<AlignHorizontallyBoldIcon />} />
<TabItem key="align-bottom" title={<AlignBottomBoldIcon />} />
</Tabs>
);
const ControlledTemplate: ComponentStory<any> = (args: TabsProps) => {
const [selected, setSelected] = React.useState<React.Key>("world");
return (
<div className="flex flex-col gap-2">
<Tabs
aria-label="Tabs example"
{...args}
selectedKey={selected}
onSelectionChange={setSelected}
>
<TabItem key="world" title="World">
<Lorem count={1} sentenceUpperBound={20} />
</TabItem>
<TabItem key="ny" title="N.Y">
<Lorem count={1} sentenceUpperBound={30} />
</TabItem>
<TabItem key="business" title="Business">
<Lorem count={1} sentenceUpperBound={10} />
</TabItem>
<TabItem key="arts" title="Arts">
<Lorem count={1} sentenceUpperBound={50} />
</TabItem>
<TabItem key="science" title="Science">
<Lorem count={1} sentenceUpperBound={24} />
</TabItem>
</Tabs>
<p className="text-neutral-500">Selected: {selected}</p>
<div className="flex gap-2 justify-start">
<button
className={button({color: "secondary", variant: "flat"})}
onClick={() => setSelected("arts")}
>
Select &quot;Arts&quot;
</button>
<button
className={button({color: "secondary", variant: "flat"})}
onClick={() => setSelected("science")}
>
Select &quot;Science&quot;
</button>
</div>
</div>
);
};
type Item = {
id: string;
label: string;
content?: React.ReactNode;
};
const DynamicTemplate: ComponentStory<any> = (args: TabsProps<Item>) => {
let tabs: Item[] = [
{
id: "world",
label: "World",
content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
},
{
id: "ny",
label: "N.Y.",
content:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non diam id libero rutrum aliquam. Sed eget nunc vitae nisl aliquam aliquet. Sed vitae nisl eget nunc aliquam aliquet. Sed eget nunc vitae nisl aliquam aliquet. Sed vitae nisl eget nunc aliquam aliquet. Sed eget nunc vitae nisl aliquam aliquet. ",
},
{
id: "business",
label: "Business",
content:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non diam id libero rutrum aliquam. Sed eget nunc vitae nisl aliquam aliquet.",
},
{
id: "arts",
label: "Arts",
content:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non diam id libero rutrum aliquam. Sed eget nunc vitae nisl aliquam aliquet. Sed vitae nisl eget nunc aliquam aliquet. Sed eget nunc vitae nisl aliquam aliquet. Sed vitae nisl eget nunc aliquam aliquet. Sed eget nunc vitae nisl aliquam aliquet. ",
},
{
id: "science",
label: "Science",
content:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non diam id libero rutrum aliquam. Sed eget nunc vitae nisl aliquam aliquet. Sed vitae nisl eget nunc aliquam aliquet. Sed eget nunc vitae nisl aliquam aliquet. Sed vitae nisl eget nunc aliquam aliquet. Sed eget nunc vitae nisl aliquam aliquet. ",
},
];
return (
<Tabs aria-label="Dynamic tabs" {...args} items={tabs}>
{(item) => (
<TabItem key={item.id} title={item.label}>
{item.content}
</TabItem>
)}
</Tabs>
);
};
const WithFormTemplate: ComponentStory<any> = (args: TabsProps) => {
const [selected, setSelected] = React.useState<React.Key>("login");
return (
<div className="flex flex-col justify-center items-center w-full h-screen">
<Card className="w-full w-[340px] h-[400px]">
<CardBody>
<Tabs
aria-label="Tabs form"
{...args}
selectedKey={selected}
onSelectionChange={setSelected}
>
<TabItem key="login" title="Login">
<form className="flex flex-col gap-4">
<Input isRequired label="Email" placeholder="Enter your email" type="email" />
<Input
isRequired
label="Password"
placeholder="Enter your password"
type="password"
/>
<p className="text-center text-sm">
Need to create an account?&nbsp;
<button className={link({size: "sm"})} onClick={() => setSelected("sign-up")}>
Sign up
</button>
</p>
<div className="flex gap-2 justify-end">
<Button fullWidth color="primary">
Login
</Button>
</div>
</form>
</TabItem>
<TabItem key="sign-up" title="Sign up">
<form className="flex flex-col gap-4 h-[300px]">
<Input isRequired label="Name" placeholder="Enter your name" type="password" />
<Input isRequired label="Email" placeholder="Enter your email" type="email" />
<Input
isRequired
label="Password"
placeholder="Enter your password"
type="password"
/>
<p className="text-center text-sm">
Already have an account?&nbsp;
<button className={link({size: "sm"})} onClick={() => setSelected("login")}>
Login
</button>
</p>
<div className="flex gap-2 justify-end">
<Button fullWidth color="primary">
Sign up
</Button>
</div>
</form>
</TabItem>
</Tabs>
</CardBody>
</Card>
</div>
);
};
export const Static = StaticTemplate.bind({});
Static.args = {
...defaultProps,
};
export const Dynamic = DynamicTemplate.bind({});
Dynamic.args = {
...defaultProps,
};
export const Controlled = ControlledTemplate.bind({});
Controlled.args = {
...defaultProps,
};
export const WithIcons = WithIconsTemplate.bind({});
WithIcons.args = {
...defaultProps,
};
export const WithForm = WithFormTemplate.bind({});
WithForm.args = {
...defaultProps,
fullWidth: true,
variant: "underlined",
};
export const ManualKeyboardActivation = StaticTemplate.bind({});
ManualKeyboardActivation.args = {
...defaultProps,
keyboardActivation: "manual",
};
export const DisabledItems = StaticTemplate.bind({});
DisabledItems.args = {
...defaultProps,
disabledKeys: ["ny", "arts"],
};
export const Disabled = StaticTemplate.bind({});
Disabled.args = {
...defaultProps,
isDisabled: true,
};
export const DisableAnimation = StaticTemplate.bind({});
DisableAnimation.args = {
...defaultProps,
disableAnimation: true,
};

View File

@ -1,5 +1,18 @@
# @nextui-org/tooltip
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/framer-transitions@0.0.0-dev-v2-20230428031422
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/aria-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/tooltip",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "A React Component for rendering dynamically positioned Tooltips",
"keywords": [
"tooltip"

View File

@ -1,5 +1,17 @@
# @nextui-org/user
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/shared-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/dom-utils@0.0.0-dev-v2-20230428031422
- @nextui-org/avatar@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/user",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Flexible User Profile Component.",
"keywords": [
"user"

View File

@ -1,5 +1,43 @@
# @nextui-org/react
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/pagination@0.0.0-dev-v2-20230428031422
- @nextui-org/accordion@0.0.0-dev-v2-20230428031422
- @nextui-org/checkbox@0.0.0-dev-v2-20230428031422
- @nextui-org/dropdown@0.0.0-dev-v2-20230428031422
- @nextui-org/progress@0.0.0-dev-v2-20230428031422
- @nextui-org/divider@0.0.0-dev-v2-20230428031422
- @nextui-org/popover@0.0.0-dev-v2-20230428031422
- @nextui-org/snippet@0.0.0-dev-v2-20230428031422
- @nextui-org/spinner@0.0.0-dev-v2-20230428031422
- @nextui-org/tooltip@0.0.0-dev-v2-20230428031422
- @nextui-org/avatar@0.0.0-dev-v2-20230428031422
- @nextui-org/button@0.0.0-dev-v2-20230428031422
- @nextui-org/navbar@0.0.0-dev-v2-20230428031422
- @nextui-org/spacer@0.0.0-dev-v2-20230428031422
- @nextui-org/switch@0.0.0-dev-v2-20230428031422
- @nextui-org/badge@0.0.0-dev-v2-20230428031422
- @nextui-org/image@0.0.0-dev-v2-20230428031422
- @nextui-org/input@0.0.0-dev-v2-20230428031422
- @nextui-org/modal@0.0.0-dev-v2-20230428031422
- @nextui-org/radio@0.0.0-dev-v2-20230428031422
- @nextui-org/table@0.0.0-dev-v2-20230428031422
- @nextui-org/card@0.0.0-dev-v2-20230428031422
- @nextui-org/chip@0.0.0-dev-v2-20230428031422
- @nextui-org/code@0.0.0-dev-v2-20230428031422
- @nextui-org/drip@0.0.0-dev-v2-20230428031422
- @nextui-org/link@0.0.0-dev-v2-20230428031422
- @nextui-org/tabs@0.0.0-dev-v2-20230428031422
- @nextui-org/user@0.0.0-dev-v2-20230428031422
- @nextui-org/kbd@0.0.0-dev-v2-20230428031422
- @nextui-org/system@0.0.0-dev-v2-20230428031422
- @nextui-org/theme@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/react",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "🚀 Beautiful and modern React UI library.",
"author": "Junior Garcia <jrgarciadev@gmail.com>",
"homepage": "https://nextui.org",

View File

@ -1,5 +1,11 @@
# @nextui-org/system
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/system",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "NextUI system primitives",
"keywords": [
"system"

View File

@ -1,5 +1,11 @@
# @nextui-org/theme
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/theme",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "The default theme for NextUI components",
"keywords": [
"theme",

View File

@ -42,7 +42,7 @@ const badge = tv({
solid: {},
flat: {},
faded: {
badge: "border-1.5",
badge: "border-2.5",
},
shadow: {},
},

View File

@ -53,7 +53,7 @@ const button = tv({
bordered: "border-2 !bg-transparent",
light: "!bg-transparent",
flat: "",
faded: "border-1.5",
faded: "border-2.5",
shadow: "",
ghost: "border-2 !bg-transparent",
},

View File

@ -43,18 +43,18 @@ const chip = tv({
variant: {
solid: {},
bordered: {
base: "border-1.5 bg-transparent",
base: "border-2.5 bg-transparent",
},
light: {
base: "bg-transparent",
},
flat: {},
faded: {
base: "border-1.5",
base: "border-2.5",
},
shadow: {},
dot: {
base: "border-1.5 border-neutral text-foreground bg-transparent",
base: "border-2.5 border-neutral text-foreground bg-transparent",
},
},
color: {

View File

@ -43,7 +43,7 @@ const pagination = tv({
variant: {
bordered: {
item: [
"border-1.5",
"border-2.5",
"border-neutral",
"bg-transparent",
"data-[hover=true]:bg-neutral-100",
@ -54,7 +54,7 @@ const pagination = tv({
},
flat: {},
faded: {
item: "border-1.5",
item: "border-2.5",
},
},
color: {

View File

@ -13,9 +13,9 @@ import {colorVariants} from "../utils";
*
* <div className={base())}>
* <div className={tabList())}>
* <div className={tab())}>Tab 1</div>
* <div className={tab())}>Tab 2</div>
* <div className={tab())}>Tab 3</div>
* <div className={tab())} data-selected="boolean">Tab 1</div>
* <div className={tab())} data-selected="boolean" data-disabled="boolean">Tab 2</div>
* <div className={tab())} data-selected="boolean">Tab 3</div>
* </div>
* <div className={panel())}>Selected panel</div>
* </div>
@ -38,8 +38,8 @@ const tabs = tv({
"outline-none",
"cursor-pointer",
"transition-opacity",
"text-neutral-600",
"data-[selected=true]:text-foreground",
"data-[disabled=true]:cursor-not-allowed",
"data-[disabled=true]:opacity-30",
"data-[hover-unselected=true]:opacity-70",
// focus ring
"data-[focus-visible=true]:outline-none",
@ -49,57 +49,64 @@ const tabs = tv({
"data-[focus-visible=true]:ring-offset-background",
"data-[focus-visible=true]:dark:ring-offset-background-dark",
],
tabContent: ["relative", "z-10"],
cursor: ["absolute", "inset-0", "z-0", "bg-white", "shadow-md"],
panel: ["mt-3"],
tabContent: [
"relative",
"z-10",
"text-inherit",
"transition-colors",
"text-neutral-500",
"group-data-[selected=true]:text-foreground",
],
cursor: ["absolute", "z-0", "bg-white", "shadow-md"],
panel: [
"mt-3",
"outline-none",
// focus ring
"data-[focus-visible=true]:outline-none",
"data-[focus-visible=true]:ring-2",
"data-[focus-visible=true]:ring-primary",
"data-[focus-visible=true]:ring-offset-2",
"data-[focus-visible=true]:ring-offset-background",
"data-[focus-visible=true]:dark:ring-offset-background-dark",
],
},
variants: {
variant: {
solid: {
cursor: "inset-0",
},
underlined: {
tabList: "bg-transparent",
cursor: "h-[2px] w-[80%] bottom-0 shadow-[0_1px_0px_0_rgba(0,0,0,0.05)]",
},
bordered: {
tabList: "bg-transparent border-2 border-neutral-200 shadow-sm",
cursor: "inset-0",
},
},
color: {
neutral: {
cursor: ["bg-background", "dark:bg-neutral"],
tabContent: "group-data-[selected=true]:text-neutral-foreground",
},
primary: {
cursor: colorVariants.solid.primary,
tabContent: "group-data-[selected=true]:text-primary-foreground",
},
secondary: {
cursor: colorVariants.solid.secondary,
tabContent: "group-data-[selected=true]:text-secondary-foreground",
},
success: {
cursor: colorVariants.solid.success,
tabContent: "group-data-[selected=true]:text-success-foreground",
},
warning: {
cursor: colorVariants.solid.warning,
tabContent: "group-data-[selected=true]:text-warning-foreground",
},
danger: {
cursor: colorVariants.solid.danger,
tabContent: "group-data-[selected=true]:text-danger-foreground",
},
neutral: {},
primary: {},
secondary: {},
success: {},
warning: {},
danger: {},
},
size: {
xs: {
tabContent: "text-xs",
tab: "h-7",
tab: "h-7 text-xs",
},
sm: {
tabContent: "text-sm",
tab: "h-8",
tab: "h-8 text-sm",
},
md: {
tabContent: "text-sm",
tab: "h-9",
tab: "h-9 text-sm",
},
lg: {
tabContent: "text-base",
tab: "h-10",
tab: "h-10 text-base",
},
xl: {
tabContent: "text-base",
tab: "h-11",
tab: "h-11 text-base",
},
},
radius: {
@ -114,35 +121,25 @@ const tabs = tv({
cursor: "rounded",
},
sm: {
tabList: "rounded-sm",
tabList: "rounded-md",
tab: "rounded-sm",
cursor: "rounded-sm",
},
md: {
tabList: "rounded-md",
tabList: "rounded-lg",
tab: "rounded-md",
cursor: "rounded-md",
},
lg: {
tabList: "rounded-lg",
tabList: "rounded-xl",
tab: "rounded-lg",
cursor: "rounded-lg",
},
xl: {
tabList: "rounded-xl",
tabList: "rounded-2xl",
tab: "rounded-xl",
cursor: "rounded-xl",
},
"2xl": {
tabList: "rounded-2xl",
tab: "rounded-2xl",
cursor: "rounded-2xl",
},
"3xl": {
tabList: "rounded-3xl",
tab: "rounded-3xl",
cursor: "rounded-3xl",
},
full: {
tabList: "rounded-full",
tab: "rounded-full",
@ -160,14 +157,244 @@ const tabs = tv({
tabList: "opacity-50 pointer-events-none",
},
},
disableAnimation: {
true: {
tab: "transition-none",
tabContent: "transition-none",
},
},
},
defaultVariants: {
radius: "lg",
radius: "xl",
color: "neutral",
variant: "solid",
size: "md",
fullWidth: false,
isDisabled: false,
disableAnimation: false,
},
compoundVariants: [
/**
* Variants & Colors
*/
// solid + bordered && color
{
variant: ["solid", "bordered"],
color: "neutral",
class: {
cursor: ["bg-background", "dark:bg-neutral"],
tabContent: "group-data-[selected=true]:text-neutral-foreground",
},
},
{
variant: ["solid", "bordered"],
color: "primary",
class: {
cursor: colorVariants.solid.primary,
tabContent: "group-data-[selected=true]:text-primary-foreground",
},
},
{
variant: ["solid", "bordered"],
color: "secondary",
class: {
cursor: colorVariants.solid.secondary,
tabContent: "group-data-[selected=true]:text-secondary-foreground",
},
},
{
variant: ["solid", "bordered"],
color: "success",
class: {
cursor: colorVariants.solid.success,
tabContent: "group-data-[selected=true]:text-success-foreground",
},
},
{
variant: ["solid", "bordered"],
color: "warning",
class: {
cursor: colorVariants.solid.warning,
tabContent: "group-data-[selected=true]:text-warning-foreground",
},
},
{
variant: ["solid", "bordered"],
color: "danger",
class: {
cursor: colorVariants.solid.danger,
tabContent: "group-data-[selected=true]:text-danger-foreground",
},
},
// underlined && color
{
variant: "underlined",
color: "neutral",
class: {
cursor: "bg-foreground",
tabContent: "group-data-[selected=true]:text-foreground",
},
},
{
variant: "underlined",
color: "primary",
class: {
cursor: "bg-primary",
tabContent: "group-data-[selected=true]:text-primary",
},
},
{
variant: "underlined",
color: "secondary",
class: {
cursor: "bg-secondary",
tabContent: "group-data-[selected=true]:text-secondary",
},
},
{
variant: "underlined",
color: "success",
class: {
cursor: "bg-success",
tabContent: "group-data-[selected=true]:text-success",
},
},
{
variant: "underlined",
color: "warning",
class: {
cursor: "bg-warning",
tabContent: "group-data-[selected=true]:text-warning",
},
},
{
variant: "underlined",
color: "danger",
class: {
cursor: "bg-danger",
tabContent: "group-data-[selected=true]:text-danger",
},
},
/**
* Disable animation & Variants & Colors
*/
// disabledAnimation && underlined
{
disableAnimation: true,
variant: "underlined",
class: {
tab: [
"after:content-['']",
"after:absolute",
"after:bottom-0",
"after:h-[2px]",
"after:w-[80%]",
"after:opacity-0",
"after:shadow-[0_1px_0px_0_rgba(0,0,0,0.05)]",
"data-[selected=true]:after:opacity-100",
],
},
},
// disableAnimation && color && solid/bordered
{
disableAnimation: true,
color: "neutral",
variant: ["solid", "bordered"],
class: {
tab: "data-[selected=true]:bg-neutral data-[selected=true]:text-neutral-foreground",
},
},
{
disableAnimation: true,
color: "primary",
variant: ["solid", "bordered"],
class: {
tab: "data-[selected=true]:bg-primary data-[selected=true]:text-primary-foreground",
},
},
{
disableAnimation: true,
color: "secondary",
variant: ["solid", "bordered"],
class: {
tab: "data-[selected=true]:bg-secondary data-[selected=true]:text-secondary-foreground",
},
},
{
disableAnimation: true,
color: "success",
variant: ["solid", "bordered"],
class: {
tab: "data-[selected=true]:bg-success data-[selected=true]:text-success-foreground",
},
},
{
disableAnimation: true,
color: "warning",
variant: ["solid", "bordered"],
class: {
tab: "data-[selected=true]:bg-warning data-[selected=true]:text-warning-foreground",
},
},
{
disableAnimation: true,
color: "danger",
variant: ["solid", "bordered"],
class: {
tab: "data-[selected=true]:bg-danger data-[selected=true]:text-danger-foreground",
},
},
// disableAnimation && color && underlined
{
disableAnimation: true,
color: "neutral",
variant: "underlined",
class: {
tab: "data-[selected=true]:after:bg-foreground",
},
},
{
disableAnimation: true,
color: "primary",
variant: "underlined",
class: {
tab: "data-[selected=true]:after:bg-primary",
},
},
{
disableAnimation: true,
color: "secondary",
variant: "underlined",
class: {
tab: "data-[selected=true]:after:bg-secondary",
},
},
{
disableAnimation: true,
color: "success",
variant: "underlined",
class: {
tab: "data-[selected=true]:after:bg-success",
},
},
{
disableAnimation: true,
color: "warning",
variant: "underlined",
class: {
tab: "data-[selected=true]:after:bg-warning",
},
},
{
disableAnimation: true,
color: "danger",
variant: "underlined",
class: {
tab: "data-[selected=true]:after:bg-danger",
},
},
],
});
export type TabsVariantProps = VariantProps<typeof tabs>;

View File

@ -1,5 +1,11 @@
# @nextui-org/use-aria-accordion-item
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/use-aria-accordion-item",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Internal impl for react aria accordion item",
"keywords": [
"use-aria-accordion-item"

View File

@ -1,5 +1,11 @@
# @nextui-org/use-aria-button
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/use-aria-button",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Internal hook to handle button a11y and events, this is based on react-aria button hook but without the onClick warning",
"keywords": [
"use-aria-button"

View File

@ -1,5 +1,14 @@
# @nextui-org/use-aria-field
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/use-aria-slot-id@0.0.0-dev-v2-20230428031422
- @nextui-org/use-aria-label@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/use-aria-field",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Based on react-aria useField hook, provides the accessibility implementation for input fields",
"keywords": [
"use-aria-field"

View File

@ -1,5 +1,11 @@
# @nextui-org/use-aria-label
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/use-aria-label",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Based on react-aria label hook, it provides the accessibility implementation for labels and their associated elements. Labels provide context for user inputs.",
"keywords": [
"use-aria-label"

View File

@ -1,5 +1,11 @@
# @nextui-org/use-aria-slot-id
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/use-aria-slot-id",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Based on react-aria useSlotId, used to generate an id, and after render check if that id is rendered",
"keywords": [
"use-aria-slot-id"

View File

@ -1,5 +1,13 @@
# @nextui-org/use-aria-toggle-button
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/use-aria-button@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/use-aria-toggle-button",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Internal hook to handle button a11y and events, this is based on react-aria button hook but without the onClick warning",
"keywords": [
"use-aria-toggle-button"

View File

@ -1,5 +1,13 @@
# @nextui-org/use-callback-ref
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/use-safe-layout-effect@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/use-callback-ref",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "React hook to persist any value between renders, but keeps it up-to-date if it changes.",
"keywords": [
"use-callback-ref"

View File

@ -1,5 +1,11 @@
# @nextui-org/use-clipboard
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/use-clipboard",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "Wrapper around navigator.clipboard with feedback timeout",
"keywords": [
"use-clipboard"

View File

@ -1,5 +1,13 @@
# @nextui-org/use-disclosure
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/use-callback-ref@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/use-disclosure",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "The hook in charge of managing modals",
"keywords": [
"use-disclosure"

View File

@ -1,5 +1,13 @@
# @nextui-org/use-image
## 0.0.0-dev-v2-20230428031422
### Patch Changes
- Tabs component added
- Updated dependencies
- @nextui-org/use-safe-layout-effect@0.0.0-dev-v2-20230428031422
## 0.0.0-dev-v2-20230425031000
### Patch Changes

View File

@ -1,6 +1,6 @@
{
"name": "@nextui-org/use-image",
"version": "0.0.0-dev-v2-20230425031000",
"version": "0.0.0-dev-v2-20230428031422",
"description": "React hook for progressing image loading",
"keywords": [
"use-image"

Some files were not shown because too many files have changed in this diff Show More