@fabio.caffarello/react-design-system 3.7.0 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/dist/granular/index.js +445 -0
- package/dist/granular/index.js.map +1 -0
- package/dist/granular/ui/components/Accordion/Accordion.js +105 -0
- package/dist/granular/ui/components/Accordion/Accordion.js.map +1 -0
- package/dist/granular/ui/components/Autocomplete/Autocomplete.js +133 -0
- package/dist/granular/ui/components/Autocomplete/Autocomplete.js.map +1 -0
- package/dist/granular/ui/components/Autocomplete/AutocompleteList.js +119 -0
- package/dist/granular/ui/components/Autocomplete/AutocompleteList.js.map +1 -0
- package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js +42 -0
- package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js.map +1 -0
- package/dist/granular/ui/components/Breadcrumb/Breadcrumb.js +100 -0
- package/dist/granular/ui/components/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/granular/ui/components/Card/Card.js +113 -0
- package/dist/granular/ui/components/Card/Card.js.map +1 -0
- package/dist/granular/ui/components/Card/CardActions.js +51 -0
- package/dist/granular/ui/components/Card/CardActions.js.map +1 -0
- package/dist/granular/ui/components/Card/CardBody.js +32 -0
- package/dist/granular/ui/components/Card/CardBody.js.map +1 -0
- package/dist/granular/ui/components/Card/CardHeader.js +47 -0
- package/dist/granular/ui/components/Card/CardHeader.js.map +1 -0
- package/dist/granular/ui/components/Card/CardSubtitle.js +38 -0
- package/dist/granular/ui/components/Card/CardSubtitle.js.map +1 -0
- package/dist/granular/ui/components/Card/CardTitle.js +61 -0
- package/dist/granular/ui/components/Card/CardTitle.js.map +1 -0
- package/dist/granular/ui/components/ColorPicker/ColorPicker.js +250 -0
- package/dist/granular/ui/components/ColorPicker/ColorPicker.js.map +1 -0
- package/dist/granular/ui/components/CommandPalette/CommandPalette.js +274 -0
- package/dist/granular/ui/components/CommandPalette/CommandPalette.js.map +1 -0
- package/dist/granular/ui/components/DashboardLayout/DashboardLayout.js +37 -0
- package/dist/granular/ui/components/DashboardLayout/DashboardLayout.js.map +1 -0
- package/dist/granular/ui/components/DataGrid/DataGrid.js +155 -0
- package/dist/granular/ui/components/DataGrid/DataGrid.js.map +1 -0
- package/dist/granular/ui/components/DataTablePattern/DataTablePattern.js +113 -0
- package/dist/granular/ui/components/DataTablePattern/DataTablePattern.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePicker.js +126 -0
- package/dist/granular/ui/components/DatePicker/DatePicker.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js +294 -0
- package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePickerContext.js +16 -0
- package/dist/granular/ui/components/DatePicker/DatePickerContext.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePickerInput.js +119 -0
- package/dist/granular/ui/components/DatePicker/DatePickerInput.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePickerProvider.js +47 -0
- package/dist/granular/ui/components/DatePicker/DatePickerProvider.js.map +1 -0
- package/dist/granular/ui/components/Dialog/AlertDialog.js +48 -0
- package/dist/granular/ui/components/Dialog/AlertDialog.js.map +1 -0
- package/dist/granular/ui/components/Dialog/Dialog.js +36 -0
- package/dist/granular/ui/components/Dialog/Dialog.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogClose.js +34 -0
- package/dist/granular/ui/components/Dialog/DialogClose.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogContent.js +114 -0
- package/dist/granular/ui/components/Dialog/DialogContent.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogDescription.js +51 -0
- package/dist/granular/ui/components/Dialog/DialogDescription.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogFooter.js +45 -0
- package/dist/granular/ui/components/Dialog/DialogFooter.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogHeader.js +45 -0
- package/dist/granular/ui/components/Dialog/DialogHeader.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogTitle.js +53 -0
- package/dist/granular/ui/components/Dialog/DialogTitle.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogTrigger.js +28 -0
- package/dist/granular/ui/components/Dialog/DialogTrigger.js.map +1 -0
- package/dist/granular/ui/components/Drawer/Drawer.js +47 -0
- package/dist/granular/ui/components/Drawer/Drawer.js.map +1 -0
- package/dist/granular/ui/components/Drawer/DrawerContent.js +140 -0
- package/dist/granular/ui/components/Drawer/DrawerContent.js.map +1 -0
- package/dist/granular/ui/components/Drawer/DrawerContext.js +21 -0
- package/dist/granular/ui/components/Drawer/DrawerContext.js.map +1 -0
- package/dist/granular/ui/components/Drawer/DrawerFooter.js +53 -0
- package/dist/granular/ui/components/Drawer/DrawerFooter.js.map +1 -0
- package/dist/granular/ui/components/Drawer/DrawerHeader.js +50 -0
- package/dist/granular/ui/components/Drawer/DrawerHeader.js.map +1 -0
- package/dist/granular/ui/components/Dropdown/Dropdown.js +243 -0
- package/dist/granular/ui/components/Dropdown/Dropdown.js.map +1 -0
- package/dist/granular/ui/components/EmptyState/EmptyState.js +102 -0
- package/dist/granular/ui/components/EmptyState/EmptyState.js.map +1 -0
- package/dist/granular/ui/components/FileUpload/FileUpload.js +342 -0
- package/dist/granular/ui/components/FileUpload/FileUpload.js.map +1 -0
- package/dist/granular/ui/components/Form/Form.js +184 -0
- package/dist/granular/ui/components/Form/Form.js.map +1 -0
- package/dist/granular/ui/components/Form/FormContext.js +19 -0
- package/dist/granular/ui/components/Form/FormContext.js.map +1 -0
- package/dist/granular/ui/components/Form/FormField.js +66 -0
- package/dist/granular/ui/components/Form/FormField.js.map +1 -0
- package/dist/granular/ui/components/Form/FormProvider.js +17 -0
- package/dist/granular/ui/components/Form/FormProvider.js.map +1 -0
- package/dist/granular/ui/components/Form/useFormFieldArray.js +29 -0
- package/dist/granular/ui/components/Form/useFormFieldArray.js.map +1 -0
- package/dist/granular/ui/components/FormWizardPattern/FormWizardPattern.js +121 -0
- package/dist/granular/ui/components/FormWizardPattern/FormWizardPattern.js.map +1 -0
- package/dist/granular/ui/components/Header/Header.js +98 -0
- package/dist/granular/ui/components/Header/Header.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderActions.js +21 -0
- package/dist/granular/ui/components/Header/components/HeaderActions.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderHamburger.js +31 -0
- package/dist/granular/ui/components/Header/components/HeaderHamburger.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderLogo.js +50 -0
- package/dist/granular/ui/components/Header/components/HeaderLogo.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js +38 -0
- package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderNavigation.js +27 -0
- package/dist/granular/ui/components/Header/components/HeaderNavigation.js.map +1 -0
- package/dist/granular/ui/components/Header/contexts/HeaderContext.js +49 -0
- package/dist/granular/ui/components/Header/contexts/HeaderContext.js.map +1 -0
- package/dist/granular/ui/components/LoginBox/LoginBox.js +84 -0
- package/dist/granular/ui/components/LoginBox/LoginBox.js.map +1 -0
- package/dist/granular/ui/components/Menu/Menu.js +45 -0
- package/dist/granular/ui/components/Menu/Menu.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuContent.js +94 -0
- package/dist/granular/ui/components/Menu/MenuContent.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuContext.js +21 -0
- package/dist/granular/ui/components/Menu/MenuContext.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuItem.js +93 -0
- package/dist/granular/ui/components/Menu/MenuItem.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuSeparator.js +46 -0
- package/dist/granular/ui/components/Menu/MenuSeparator.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuTrigger.js +71 -0
- package/dist/granular/ui/components/Menu/MenuTrigger.js.map +1 -0
- package/dist/granular/ui/components/Modal/Modal.js +171 -0
- package/dist/granular/ui/components/Modal/Modal.js.map +1 -0
- package/dist/granular/ui/components/MultiSelect/MultiSelect.js +193 -0
- package/dist/granular/ui/components/MultiSelect/MultiSelect.js.map +1 -0
- package/dist/granular/ui/components/Navigation/Navigation.js +141 -0
- package/dist/granular/ui/components/Navigation/Navigation.js.map +1 -0
- package/dist/granular/ui/components/PageHeader/PageHeader.js +95 -0
- package/dist/granular/ui/components/PageHeader/PageHeader.js.map +1 -0
- package/dist/granular/ui/components/Pagination/Pagination.js +156 -0
- package/dist/granular/ui/components/Pagination/Pagination.js.map +1 -0
- package/dist/granular/ui/components/Popover/Popover.js +171 -0
- package/dist/granular/ui/components/Popover/Popover.js.map +1 -0
- package/dist/granular/ui/components/Rating/Rating.js +110 -0
- package/dist/granular/ui/components/Rating/Rating.js.map +1 -0
- package/dist/granular/ui/components/SearchAndFilterPattern/SearchAndFilterPattern.js +120 -0
- package/dist/granular/ui/components/SearchAndFilterPattern/SearchAndFilterPattern.js.map +1 -0
- package/dist/granular/ui/components/SearchInput/SearchInput.js +103 -0
- package/dist/granular/ui/components/SearchInput/SearchInput.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/SideNavbar.js +143 -0
- package/dist/granular/ui/components/SideNavbar/SideNavbar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/Navbar.js +173 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/Navbar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js +87 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js +242 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarSeparator.js +66 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarSeparator.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarToggle.js +108 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarToggle.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarBackdrop.js +63 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarBackdrop.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js +113 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarRoot.js +150 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarRoot.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarToggle.js +197 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarToggle.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/Sidebar.js +108 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/Sidebar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarContent.js +71 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarContent.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarFooter.js +64 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarFooter.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarGroup.js +141 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarGroup.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarHeader.js +90 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarHeader.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlot.js +12 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlot.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlotContent.js +13 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlotContent.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/NavbarContext.js +20 -0
- package/dist/granular/ui/components/SideNavbar/contexts/NavbarContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarConfigContext.js +37 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarConfigContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarStateContext.js +20 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarStateContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarThemeContext.js +28 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarThemeContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarToggleContext.js +19 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarToggleContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SidebarContext.js +20 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SidebarContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SidebarSlotContext.js +22 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SidebarSlotContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useFocusManagement.js +43 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useFocusManagement.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useGroupState.js +59 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useGroupState.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useKeyboardShortcut.js +34 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useKeyboardShortcut.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useResize.js +58 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useResize.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useResponsiveSidebar.js +35 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useResponsiveSidebar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbar.js +21 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarContent.js +19 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarContent.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarNavigation.js +21 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarNavigation.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarConfigProvider.js +61 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarConfigProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarProvider.js +82 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js +165 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarThemeProvider.js +34 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarThemeProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SidebarSlotProvider.js +28 -0
- package/dist/granular/ui/components/SideNavbar/providers/SidebarSlotProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/utils/parseKeyboardShortcut.js +60 -0
- package/dist/granular/ui/components/SideNavbar/utils/parseKeyboardShortcut.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/utils/parseWidth.js +19 -0
- package/dist/granular/ui/components/SideNavbar/utils/parseWidth.js.map +1 -0
- package/dist/granular/ui/components/Stat/Stat.js +84 -0
- package/dist/granular/ui/components/Stat/Stat.js.map +1 -0
- package/dist/granular/ui/components/Stat/StatGroup.js +61 -0
- package/dist/granular/ui/components/Stat/StatGroup.js.map +1 -0
- package/dist/granular/ui/components/Stepper/Stepper.js +248 -0
- package/dist/granular/ui/components/Stepper/Stepper.js.map +1 -0
- package/dist/granular/ui/components/Table/Table.js +162 -0
- package/dist/granular/ui/components/Table/Table.js.map +1 -0
- package/dist/granular/ui/components/Table/TableActions/TableActions.js +67 -0
- package/dist/granular/ui/components/Table/TableActions/TableActions.js.map +1 -0
- package/dist/granular/ui/components/Table/TableActions.js +44 -0
- package/dist/granular/ui/components/Table/TableActions.js.map +1 -0
- package/dist/granular/ui/components/Table/TableBody.js +134 -0
- package/dist/granular/ui/components/Table/TableBody.js.map +1 -0
- package/dist/granular/ui/components/Table/TableCell.js +40 -0
- package/dist/granular/ui/components/Table/TableCell.js.map +1 -0
- package/dist/granular/ui/components/Table/TableContext.js +19 -0
- package/dist/granular/ui/components/Table/TableContext.js.map +1 -0
- package/dist/granular/ui/components/Table/TableEmptyState.js +62 -0
- package/dist/granular/ui/components/Table/TableEmptyState.js.map +1 -0
- package/dist/granular/ui/components/Table/TableFilters/TableFilters.js +189 -0
- package/dist/granular/ui/components/Table/TableFilters/TableFilters.js.map +1 -0
- package/dist/granular/ui/components/Table/TableFilters.js +48 -0
- package/dist/granular/ui/components/Table/TableFilters.js.map +1 -0
- package/dist/granular/ui/components/Table/TableHeader.js +45 -0
- package/dist/granular/ui/components/Table/TableHeader.js.map +1 -0
- package/dist/granular/ui/components/Table/TableHeaderCell.js +117 -0
- package/dist/granular/ui/components/Table/TableHeaderCell.js.map +1 -0
- package/dist/granular/ui/components/Table/TableHeaderRow.js +89 -0
- package/dist/granular/ui/components/Table/TableHeaderRow.js.map +1 -0
- package/dist/granular/ui/components/Table/TablePagination/TablePagination.js +216 -0
- package/dist/granular/ui/components/Table/TablePagination/TablePagination.js.map +1 -0
- package/dist/granular/ui/components/Table/TablePagination.js +56 -0
- package/dist/granular/ui/components/Table/TablePagination.js.map +1 -0
- package/dist/granular/ui/components/Table/TableProvider.js +244 -0
- package/dist/granular/ui/components/Table/TableProvider.js.map +1 -0
- package/dist/granular/ui/components/Table/TableRow.js +95 -0
- package/dist/granular/ui/components/Table/TableRow.js.map +1 -0
- package/dist/granular/ui/components/Table/useColumnResizing.js +71 -0
- package/dist/granular/ui/components/Table/useColumnResizing.js.map +1 -0
- package/dist/granular/ui/components/Table/useVirtualScrolling.js +50 -0
- package/dist/granular/ui/components/Table/useVirtualScrolling.js.map +1 -0
- package/dist/granular/ui/components/Tabs/Tabs.js +39 -0
- package/dist/granular/ui/components/Tabs/Tabs.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsContent.js +59 -0
- package/dist/granular/ui/components/Tabs/TabsContent.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsContext.js +18 -0
- package/dist/granular/ui/components/Tabs/TabsContext.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsList.js +84 -0
- package/dist/granular/ui/components/Tabs/TabsList.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsProvider.js +31 -0
- package/dist/granular/ui/components/Tabs/TabsProvider.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsTrigger.js +103 -0
- package/dist/granular/ui/components/Tabs/TabsTrigger.js.map +1 -0
- package/dist/granular/ui/components/TimePicker/TimePicker.js +216 -0
- package/dist/granular/ui/components/TimePicker/TimePicker.js.map +1 -0
- package/dist/granular/ui/components/Timeline/Timeline.js +152 -0
- package/dist/granular/ui/components/Timeline/Timeline.js.map +1 -0
- package/dist/granular/ui/components/Toast/Toast.js +159 -0
- package/dist/granular/ui/components/Toast/Toast.js.map +1 -0
- package/dist/granular/ui/components/Toast/ToastContainer.js +41 -0
- package/dist/granular/ui/components/Toast/ToastContainer.js.map +1 -0
- package/dist/granular/ui/components/Toast/useToast.js +64 -0
- package/dist/granular/ui/components/Toast/useToast.js.map +1 -0
- package/dist/granular/ui/hooks/createGenericContext.js +27 -0
- package/dist/granular/ui/hooks/createGenericContext.js.map +1 -0
- package/dist/granular/ui/hooks/focusable.js +14 -0
- package/dist/granular/ui/hooks/focusable.js.map +1 -0
- package/dist/granular/ui/hooks/useAutoFocus.js +23 -0
- package/dist/granular/ui/hooks/useAutoFocus.js.map +1 -0
- package/dist/granular/ui/hooks/useCollapsible.js +37 -0
- package/dist/granular/ui/hooks/useCollapsible.js.map +1 -0
- package/dist/granular/ui/hooks/useFocusRestore.js +20 -0
- package/dist/granular/ui/hooks/useFocusRestore.js.map +1 -0
- package/dist/granular/ui/hooks/useFocusTrap.js +31 -0
- package/dist/granular/ui/hooks/useFocusTrap.js.map +1 -0
- package/dist/granular/ui/hooks/useScrollSpy.js +23 -0
- package/dist/granular/ui/hooks/useScrollSpy.js.map +1 -0
- package/dist/granular/ui/layouts/Container/Container.js +73 -0
- package/dist/granular/ui/layouts/Container/Container.js.map +1 -0
- package/dist/granular/ui/layouts/Stack/Stack.js +79 -0
- package/dist/granular/ui/layouts/Stack/Stack.js.map +1 -0
- package/dist/granular/ui/primitives/Avatar/Avatar.js +122 -0
- package/dist/granular/ui/primitives/Avatar/Avatar.js.map +1 -0
- package/dist/granular/ui/primitives/Avatar/AvatarGroup.js +97 -0
- package/dist/granular/ui/primitives/Avatar/AvatarGroup.js.map +1 -0
- package/dist/granular/ui/primitives/Badge/Badge.js +212 -0
- package/dist/granular/ui/primitives/Badge/Badge.js.map +1 -0
- package/dist/granular/ui/primitives/Button/Button.js +288 -0
- package/dist/granular/ui/primitives/Button/Button.js.map +1 -0
- package/dist/granular/ui/primitives/Checkbox/Checkbox.js +129 -0
- package/dist/granular/ui/primitives/Checkbox/Checkbox.js.map +1 -0
- package/dist/granular/ui/primitives/Chip/Chip.js +206 -0
- package/dist/granular/ui/primitives/Chip/Chip.js.map +1 -0
- package/dist/granular/ui/primitives/Collapsible/Collapsible.js +115 -0
- package/dist/granular/ui/primitives/Collapsible/Collapsible.js.map +1 -0
- package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js +54 -0
- package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js.map +1 -0
- package/dist/granular/ui/primitives/Info/Info.js +57 -0
- package/dist/granular/ui/primitives/Info/Info.js.map +1 -0
- package/dist/granular/ui/primitives/Input/Input.js +351 -0
- package/dist/granular/ui/primitives/Input/Input.js.map +1 -0
- package/dist/granular/ui/primitives/Label/Label.js +61 -0
- package/dist/granular/ui/primitives/Label/Label.js.map +1 -0
- package/dist/granular/ui/primitives/NavLink/NavLink.js +229 -0
- package/dist/granular/ui/primitives/NavLink/NavLink.js.map +1 -0
- package/dist/granular/ui/primitives/NavLink/hooks/useNavLink.js +15 -0
- package/dist/granular/ui/primitives/NavLink/hooks/useNavLink.js.map +1 -0
- package/dist/granular/ui/primitives/Progress/Progress.js +182 -0
- package/dist/granular/ui/primitives/Progress/Progress.js.map +1 -0
- package/dist/granular/ui/primitives/Radio/Radio.js +118 -0
- package/dist/granular/ui/primitives/Radio/Radio.js.map +1 -0
- package/dist/granular/ui/primitives/Select/Select.js +210 -0
- package/dist/granular/ui/primitives/Select/Select.js.map +1 -0
- package/dist/granular/ui/primitives/Separator/Separator.js +69 -0
- package/dist/granular/ui/primitives/Separator/Separator.js.map +1 -0
- package/dist/granular/ui/primitives/Skeleton/Skeleton.js +87 -0
- package/dist/granular/ui/primitives/Skeleton/Skeleton.js.map +1 -0
- package/dist/granular/ui/primitives/Slider/Slider.js +291 -0
- package/dist/granular/ui/primitives/Slider/Slider.js.map +1 -0
- package/dist/granular/ui/primitives/Spinner/Spinner.js +95 -0
- package/dist/granular/ui/primitives/Spinner/Spinner.js.map +1 -0
- package/dist/granular/ui/primitives/Switch/Switch.js +212 -0
- package/dist/granular/ui/primitives/Switch/Switch.js.map +1 -0
- package/dist/granular/ui/primitives/Text/Text.js +118 -0
- package/dist/granular/ui/primitives/Text/Text.js.map +1 -0
- package/dist/granular/ui/primitives/Textarea/Textarea.js +129 -0
- package/dist/granular/ui/primitives/Textarea/Textarea.js.map +1 -0
- package/dist/granular/ui/primitives/Tooltip/Tooltip.js +227 -0
- package/dist/granular/ui/primitives/Tooltip/Tooltip.js.map +1 -0
- package/dist/granular/ui/providers/AppProvider.js +50 -0
- package/dist/granular/ui/providers/AppProvider.js.map +1 -0
- package/dist/granular/ui/providers/ConfigProvider.js +95 -0
- package/dist/granular/ui/providers/ConfigProvider.js.map +1 -0
- package/dist/granular/ui/providers/DialogContext.js +20 -0
- package/dist/granular/ui/providers/DialogContext.js.map +1 -0
- package/dist/granular/ui/providers/DialogProvider.js +32 -0
- package/dist/granular/ui/providers/DialogProvider.js.map +1 -0
- package/dist/granular/ui/providers/ThemeProvider.js +56 -0
- package/dist/granular/ui/providers/ThemeProvider.js.map +1 -0
- package/dist/granular/ui/providers/ToastContext.js +20 -0
- package/dist/granular/ui/providers/ToastContext.js.map +1 -0
- package/dist/granular/ui/providers/ToastProvider.js +47 -0
- package/dist/granular/ui/providers/ToastProvider.js.map +1 -0
- package/dist/granular/ui/providers/providers-bundle.js +23 -0
- package/dist/granular/ui/providers/providers-bundle.js.map +1 -0
- package/dist/granular/ui/tokens/animations.js +106 -0
- package/dist/granular/ui/tokens/animations.js.map +1 -0
- package/dist/granular/ui/tokens/borders.js +54 -0
- package/dist/granular/ui/tokens/borders.js.map +1 -0
- package/dist/granular/ui/tokens/breakpoints.js +43 -0
- package/dist/granular/ui/tokens/breakpoints.js.map +1 -0
- package/dist/granular/ui/tokens/colors/brand.js +67 -0
- package/dist/granular/ui/tokens/colors/brand.js.map +1 -0
- package/dist/granular/ui/tokens/colors/index.js +25 -0
- package/dist/granular/ui/tokens/colors/index.js.map +1 -0
- package/dist/granular/ui/tokens/colors/primitives.js +320 -0
- package/dist/granular/ui/tokens/colors/primitives.js.map +1 -0
- package/dist/granular/ui/tokens/colors/semantic.js +212 -0
- package/dist/granular/ui/tokens/colors/semantic.js.map +1 -0
- package/dist/granular/ui/tokens/colors/types.js +18 -0
- package/dist/granular/ui/tokens/colors/types.js.map +1 -0
- package/dist/granular/ui/tokens/colors/utils.js +131 -0
- package/dist/granular/ui/tokens/colors/utils.js.map +1 -0
- package/dist/granular/ui/tokens/opacity.js +59 -0
- package/dist/granular/ui/tokens/opacity.js.map +1 -0
- package/dist/granular/ui/tokens/radius.js +76 -0
- package/dist/granular/ui/tokens/radius.js.map +1 -0
- package/dist/granular/ui/tokens/shadows.js +63 -0
- package/dist/granular/ui/tokens/shadows.js.map +1 -0
- package/dist/granular/ui/tokens/sidebar.js +92 -0
- package/dist/granular/ui/tokens/sidebar.js.map +1 -0
- package/dist/granular/ui/tokens/spacing.js +143 -0
- package/dist/granular/ui/tokens/spacing.js.map +1 -0
- package/dist/granular/ui/tokens/switch.js +51 -0
- package/dist/granular/ui/tokens/switch.js.map +1 -0
- package/dist/granular/ui/tokens/typography.js +146 -0
- package/dist/granular/ui/tokens/typography.js.map +1 -0
- package/dist/granular/ui/tokens/z-index.js +79 -0
- package/dist/granular/ui/tokens/z-index.js.map +1 -0
- package/dist/granular/ui/utils/cn.js +10 -0
- package/dist/granular/ui/utils/cn.js.map +1 -0
- package/dist/granular/ui/utils/cva.js +14 -0
- package/dist/granular/ui/utils/cva.js.map +1 -0
- package/dist/granular/ui/utils/mergeRefs.js +11 -0
- package/dist/granular/ui/utils/mergeRefs.js.map +1 -0
- package/dist/granular/vite.svg +1 -0
- package/dist/hooks/index.cjs +2 -0
- package/dist/hooks/index.cjs.map +1 -0
- package/dist/hooks/index.js +23 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.cjs +44 -70
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1900 -1885
- package/dist/index.js.map +1 -1
- package/dist/react-design-system.css +1 -1
- package/dist/server/index.cjs +23 -23
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.js +863 -1180
- package/dist/server/index.js.map +1 -1
- package/dist/ui/components/Accordion/Accordion.d.ts +9 -1
- package/dist/ui/hooks-entry.d.ts +2 -0
- package/dist/ui/utils/tailwind-safelist.d.ts +3 -1
- package/package.json +24 -13
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var B = Object.defineProperty;
|
|
3
|
+
var d = Object.getOwnPropertySymbols;
|
|
4
|
+
var N = Object.prototype.hasOwnProperty, w = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var I = (c, e, s) => e in c ? B(c, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : c[e] = s, F = (c, e) => {
|
|
6
|
+
for (var s in e || (e = {}))
|
|
7
|
+
N.call(e, s) && I(c, s, e[s]);
|
|
8
|
+
if (d)
|
|
9
|
+
for (var s of d(e))
|
|
10
|
+
w.call(e, s) && I(c, s, e[s]);
|
|
11
|
+
return c;
|
|
12
|
+
};
|
|
13
|
+
var $ = (c, e) => {
|
|
14
|
+
var s = {};
|
|
15
|
+
for (var o in c)
|
|
16
|
+
N.call(c, o) && e.indexOf(o) < 0 && (s[o] = c[o]);
|
|
17
|
+
if (c != null && d)
|
|
18
|
+
for (var o of d(c))
|
|
19
|
+
e.indexOf(o) < 0 && w.call(c, o) && (s[o] = c[o]);
|
|
20
|
+
return s;
|
|
21
|
+
};
|
|
22
|
+
import { jsxs as j, jsx as p } from "react/jsx-runtime";
|
|
23
|
+
import { memo as D, forwardRef as G, useId as H, useMemo as r, useRef as J, useCallback as K, useEffect as L } from "react";
|
|
24
|
+
import { getTypographyClasses as E } from "../../tokens/typography.js";
|
|
25
|
+
import { getRadiusClass as O } from "../../tokens/radius.js";
|
|
26
|
+
import { getSpacingClass as g } from "../../tokens/spacing.js";
|
|
27
|
+
import { cn as u } from "../../utils/cn.js";
|
|
28
|
+
const P = D(
|
|
29
|
+
G(function(Q, n) {
|
|
30
|
+
var x = Q, {
|
|
31
|
+
id: e,
|
|
32
|
+
label: s,
|
|
33
|
+
error: o = !1,
|
|
34
|
+
success: a = !1,
|
|
35
|
+
helperText: t,
|
|
36
|
+
className: h = "",
|
|
37
|
+
disabled: m = !1,
|
|
38
|
+
indeterminate: f = !1
|
|
39
|
+
} = x, M = $(x, [
|
|
40
|
+
"id",
|
|
41
|
+
"label",
|
|
42
|
+
"error",
|
|
43
|
+
"success",
|
|
44
|
+
"helperText",
|
|
45
|
+
"className",
|
|
46
|
+
"disabled",
|
|
47
|
+
"indeterminate"
|
|
48
|
+
]);
|
|
49
|
+
const S = H(), i = e || `checkbox-${S}`, y = r(
|
|
50
|
+
() => o ? `${i}-error` : void 0,
|
|
51
|
+
[o, i]
|
|
52
|
+
), C = r(
|
|
53
|
+
() => t ? `${i}-helper` : void 0,
|
|
54
|
+
[t, i]
|
|
55
|
+
), k = r(() => "focus:border-line-focus", []), v = r(() => "focus:border-error", []), R = r(
|
|
56
|
+
() => o ? v.replace("focus:border-", "focus:ring-") : k.replace("focus:border-", "focus:ring-"),
|
|
57
|
+
[o, v, k]
|
|
58
|
+
), q = r(
|
|
59
|
+
() => u(
|
|
60
|
+
"h-4",
|
|
61
|
+
"w-4",
|
|
62
|
+
O("sm"),
|
|
63
|
+
"border",
|
|
64
|
+
"border-line-default",
|
|
65
|
+
"text-fg-brand",
|
|
66
|
+
"focus:ring-2",
|
|
67
|
+
R,
|
|
68
|
+
"focus:ring-offset-2",
|
|
69
|
+
"disabled:opacity-50",
|
|
70
|
+
"disabled:cursor-not-allowed",
|
|
71
|
+
"cursor-pointer",
|
|
72
|
+
o && "border-error",
|
|
73
|
+
!o && a && "border-success",
|
|
74
|
+
h
|
|
75
|
+
),
|
|
76
|
+
[R, o, a, h]
|
|
77
|
+
), z = r(
|
|
78
|
+
() => u(
|
|
79
|
+
E("label"),
|
|
80
|
+
g("sm", "ml"),
|
|
81
|
+
m ? "opacity-50 cursor-not-allowed" : "cursor-pointer"
|
|
82
|
+
),
|
|
83
|
+
[m]
|
|
84
|
+
), b = J(null), A = K(
|
|
85
|
+
(l) => {
|
|
86
|
+
b.current = l, typeof n == "function" ? n(l) : n && (n.current = l), l && (l.indeterminate = f);
|
|
87
|
+
},
|
|
88
|
+
[n, f]
|
|
89
|
+
);
|
|
90
|
+
return L(() => {
|
|
91
|
+
b.current && (b.current.indeterminate = f);
|
|
92
|
+
}, [f]), /* @__PURE__ */ j("div", { className: u("flex", "flex-col", g("sm", "my")), children: [
|
|
93
|
+
/* @__PURE__ */ j("div", { className: "flex items-center", children: [
|
|
94
|
+
/* @__PURE__ */ p(
|
|
95
|
+
"input",
|
|
96
|
+
F({
|
|
97
|
+
type: "checkbox",
|
|
98
|
+
id: i,
|
|
99
|
+
ref: A,
|
|
100
|
+
className: q,
|
|
101
|
+
disabled: m,
|
|
102
|
+
"aria-invalid": o,
|
|
103
|
+
"aria-describedby": y || C || void 0,
|
|
104
|
+
"aria-label": s ? void 0 : "Checkbox"
|
|
105
|
+
}, M)
|
|
106
|
+
),
|
|
107
|
+
s && /* @__PURE__ */ p("label", { htmlFor: i, className: z, children: s })
|
|
108
|
+
] }),
|
|
109
|
+
(o || a || t) && /* @__PURE__ */ p(
|
|
110
|
+
"div",
|
|
111
|
+
{
|
|
112
|
+
id: y || C,
|
|
113
|
+
className: u(
|
|
114
|
+
g("xs", "mt"),
|
|
115
|
+
E("caption"),
|
|
116
|
+
o ? "text-fg-error" : a ? "text-fg-success" : "text-fg-secondary"
|
|
117
|
+
),
|
|
118
|
+
role: o || a ? "alert" : void 0,
|
|
119
|
+
children: o ? t || "This field has an error" : t
|
|
120
|
+
}
|
|
121
|
+
)
|
|
122
|
+
] });
|
|
123
|
+
})
|
|
124
|
+
);
|
|
125
|
+
P.displayName = "Checkbox";
|
|
126
|
+
export {
|
|
127
|
+
P as default
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=Checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checkbox.js","sources":["../../../../../src/ui/primitives/Checkbox/Checkbox.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useRef,\n useEffect,\n forwardRef,\n memo,\n useId,\n useMemo,\n useCallback,\n} from \"react\";\nimport type { InputHTMLAttributes, ReactNode } from \"react\";\nimport { getTypographyClasses } from \"../../tokens/typography\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface CheckboxProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\"\n> {\n label?: ReactNode;\n error?: boolean;\n /**\n * Validation success state — paints the border and (when\n * `helperText` is also set) the helper-text color green. Matches\n * the Input + Select + Radio + Switch + Textarea convention; the\n * three feedback flags (`error`, `success`, `helperText`) cover\n * every form primitive in the DS. Error takes precedence when\n * both `error` and `success` are set.\n */\n success?: boolean;\n helperText?: string;\n indeterminate?: boolean;\n}\n\n/**\n * Checkbox Component\n *\n * A styled checkbox input component.\n * Follows Atomic Design principles as an Atom component.\n * Uses Composite Pattern when combined with Label and ErrorMessage.\n *\n * @example\n * ```tsx\n * <Checkbox\n * id=\"terms\"\n * label=\"I agree to the terms\"\n * checked={checked}\n * onChange={handleChange}\n * />\n * ```\n */\nconst Checkbox = memo(\n forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n {\n id,\n label,\n error = false,\n success = false,\n helperText,\n className = \"\",\n disabled = false,\n indeterminate = false,\n ...props\n },\n ref,\n ) {\n // Stable fallback id when the consumer doesn't provide one. useId\n // is SSR-safe and stable across renders, replacing the deprecated\n // Math.random().substr() pattern.\n const reactId = useId();\n const checkboxId = id || `checkbox-${reactId}`;\n\n const errorId = useMemo(\n () => (error ? `${checkboxId}-error` : undefined),\n [error, checkboxId],\n );\n\n const helperId = useMemo(\n () => (helperText ? `${checkboxId}-helper` : undefined),\n [helperText, checkboxId],\n );\n\n // Memoize focus ring colors\n const primaryFocusRing = useMemo(() => \"focus:border-line-focus\", []);\n\n const errorFocusRing = useMemo(() => \"focus:border-error\", []);\n\n const focusRingColor = useMemo(\n () =>\n error\n ? errorFocusRing.replace(\"focus:border-\", \"focus:ring-\")\n : primaryFocusRing.replace(\"focus:border-\", \"focus:ring-\"),\n [error, errorFocusRing, primaryFocusRing],\n );\n\n // Memoize classes — error wins over success when both flags are\n // set (a field cannot be valid AND invalid; treat it as invalid).\n const checkboxClasses = useMemo(\n () =>\n cn(\n \"h-4\",\n \"w-4\",\n getRadiusClass(\"sm\"),\n \"border\",\n \"border-line-default\",\n \"text-fg-brand\",\n \"focus:ring-2\",\n focusRingColor,\n \"focus:ring-offset-2\",\n \"disabled:opacity-50\",\n \"disabled:cursor-not-allowed\",\n \"cursor-pointer\",\n error && \"border-error\",\n !error && success && \"border-success\",\n className,\n ),\n [focusRingColor, error, success, className],\n );\n\n const labelClasses = useMemo(\n () =>\n cn(\n getTypographyClasses(\"label\"),\n getSpacingClass(\"sm\", \"ml\"),\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n ),\n [disabled],\n );\n\n // Set indeterminate state via ref\n const internalRef = useRef<HTMLInputElement>(null);\n\n // Memoize callback ref\n const setRef = useCallback(\n (element: HTMLInputElement | null) => {\n internalRef.current = element;\n\n // Handle forwarded ref (can be function or object)\n if (typeof ref === \"function\") {\n ref(element);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current =\n element;\n }\n\n // Set indeterminate state\n if (element) {\n element.indeterminate = indeterminate;\n }\n },\n [ref, indeterminate],\n );\n\n useEffect(() => {\n if (internalRef.current) {\n internalRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n return (\n <div className={cn(\"flex\", \"flex-col\", getSpacingClass(\"sm\", \"my\"))}>\n <div className=\"flex items-center\">\n <input\n type=\"checkbox\"\n id={checkboxId}\n ref={setRef}\n className={checkboxClasses}\n disabled={disabled}\n aria-invalid={error}\n aria-describedby={errorId || helperId || undefined}\n aria-label={!label ? \"Checkbox\" : undefined}\n {...props}\n />\n {label && (\n <label htmlFor={checkboxId} className={labelClasses}>\n {label}\n </label>\n )}\n </div>\n {(error || success || helperText) && (\n <div\n id={errorId || helperId}\n className={cn(\n getSpacingClass(\"xs\", \"mt\"),\n getTypographyClasses(\"caption\"),\n error\n ? \"text-fg-error\"\n : success\n ? \"text-fg-success\"\n : \"text-fg-secondary\",\n )}\n role={error || success ? \"alert\" : undefined}\n >\n {error ? helperText || \"This field has an error\" : helperText}\n </div>\n )}\n </div>\n );\n }),\n);\n\nCheckbox.displayName = \"Checkbox\";\n\nexport default Checkbox;\n"],"names":["Checkbox","memo","forwardRef","_a","ref","_b","id","label","error","success","helperText","className","disabled","indeterminate","props","__objRest","reactId","useId","checkboxId","errorId","useMemo","helperId","primaryFocusRing","errorFocusRing","focusRingColor","checkboxClasses","cn","getRadiusClass","labelClasses","getTypographyClasses","getSpacingClass","internalRef","useRef","setRef","useCallback","element","useEffect","jsxs","jsx","__spreadValues"],"mappings":"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"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as n, jsxs as L } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef as z } from "react";
|
|
4
|
+
import { X as R } from "lucide-react";
|
|
5
|
+
import { Slot as S } from "@radix-ui/react-slot";
|
|
6
|
+
import { getRadiusClass as u } from "../../tokens/radius.js";
|
|
7
|
+
import { getSpacingClass as r } from "../../tokens/spacing.js";
|
|
8
|
+
import { getTypographySize as c } from "../../tokens/typography.js";
|
|
9
|
+
import { cn as e } from "../../utils/cn.js";
|
|
10
|
+
import { cva as j } from "../../utils/cva.js";
|
|
11
|
+
const h = j(
|
|
12
|
+
// Base classes
|
|
13
|
+
e(
|
|
14
|
+
"inline-flex",
|
|
15
|
+
"items-center",
|
|
16
|
+
"font-medium",
|
|
17
|
+
u("full"),
|
|
18
|
+
r("xs", "gap")
|
|
19
|
+
),
|
|
20
|
+
{
|
|
21
|
+
variants: {
|
|
22
|
+
variant: {
|
|
23
|
+
default: e(
|
|
24
|
+
"bg-surface-muted",
|
|
25
|
+
"text-fg-primary",
|
|
26
|
+
"border",
|
|
27
|
+
"border-line-default"
|
|
28
|
+
),
|
|
29
|
+
outlined: e(
|
|
30
|
+
"bg-transparent",
|
|
31
|
+
"text-fg-primary",
|
|
32
|
+
"border",
|
|
33
|
+
"border-line-default"
|
|
34
|
+
),
|
|
35
|
+
filled: e(
|
|
36
|
+
"bg-surface-brand-strong",
|
|
37
|
+
"text-fg-inverse",
|
|
38
|
+
"border",
|
|
39
|
+
"border-transparent"
|
|
40
|
+
)
|
|
41
|
+
},
|
|
42
|
+
size: {
|
|
43
|
+
sm: e(
|
|
44
|
+
r("xs", "px"),
|
|
45
|
+
r("xs", "py"),
|
|
46
|
+
c("caption")
|
|
47
|
+
),
|
|
48
|
+
md: e(
|
|
49
|
+
r("sm", "px"),
|
|
50
|
+
r("xs", "py"),
|
|
51
|
+
c("bodySmall")
|
|
52
|
+
),
|
|
53
|
+
lg: e(
|
|
54
|
+
r("md", "px"),
|
|
55
|
+
r("sm", "py"),
|
|
56
|
+
c("body")
|
|
57
|
+
)
|
|
58
|
+
},
|
|
59
|
+
selected: {
|
|
60
|
+
true: e(
|
|
61
|
+
"bg-surface-brand-strong",
|
|
62
|
+
"text-fg-inverse",
|
|
63
|
+
"border",
|
|
64
|
+
"border-line-brand"
|
|
65
|
+
),
|
|
66
|
+
false: ""
|
|
67
|
+
},
|
|
68
|
+
disabled: {
|
|
69
|
+
true: "opacity-50 cursor-not-allowed",
|
|
70
|
+
false: ""
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
compoundVariants: [
|
|
74
|
+
{
|
|
75
|
+
selected: !0,
|
|
76
|
+
variant: "default",
|
|
77
|
+
class: ""
|
|
78
|
+
// Override variant when selected
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
selected: !0,
|
|
82
|
+
variant: "outlined",
|
|
83
|
+
class: ""
|
|
84
|
+
// Override variant when selected
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
selected: !0,
|
|
88
|
+
variant: "filled",
|
|
89
|
+
class: ""
|
|
90
|
+
// Override variant when selected
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
defaultVariants: {
|
|
94
|
+
variant: "default",
|
|
95
|
+
size: "md",
|
|
96
|
+
selected: !1,
|
|
97
|
+
disabled: !1
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
), k = z(function(p, b) {
|
|
101
|
+
const {
|
|
102
|
+
children: a,
|
|
103
|
+
variant: m = "default",
|
|
104
|
+
size: g = "md",
|
|
105
|
+
selected: l = !1,
|
|
106
|
+
disabled: s = !1,
|
|
107
|
+
className: v = "",
|
|
108
|
+
"aria-label": o,
|
|
109
|
+
tabIndex: d,
|
|
110
|
+
asChild: C = !1
|
|
111
|
+
} = p, x = (() => {
|
|
112
|
+
if (o) return o;
|
|
113
|
+
if (typeof a == "string") return a;
|
|
114
|
+
if (typeof a == "object" && a !== null && "props" in a) {
|
|
115
|
+
const t = a.props;
|
|
116
|
+
if (t != null && t.children && typeof t.children == "string")
|
|
117
|
+
return t.children;
|
|
118
|
+
}
|
|
119
|
+
})();
|
|
120
|
+
if (C)
|
|
121
|
+
return /* @__PURE__ */ n(
|
|
122
|
+
S,
|
|
123
|
+
{
|
|
124
|
+
ref: b,
|
|
125
|
+
className: e(
|
|
126
|
+
h({ variant: m, size: g, selected: l, disabled: s }),
|
|
127
|
+
v
|
|
128
|
+
),
|
|
129
|
+
"aria-label": o,
|
|
130
|
+
"aria-disabled": s || void 0,
|
|
131
|
+
tabIndex: d,
|
|
132
|
+
children: a
|
|
133
|
+
}
|
|
134
|
+
);
|
|
135
|
+
const { onRemove: f, onClick: i } = p, y = i !== void 0, N = y && !s, w = (t) => {
|
|
136
|
+
s || (t.key === "Enter" || t.key === " ") && (t.preventDefault(), i == null || i());
|
|
137
|
+
};
|
|
138
|
+
return /* @__PURE__ */ L(
|
|
139
|
+
"div",
|
|
140
|
+
{
|
|
141
|
+
ref: b,
|
|
142
|
+
className: e(
|
|
143
|
+
h({ variant: m, size: g, selected: l, disabled: s }),
|
|
144
|
+
f && r("xs", "pr"),
|
|
145
|
+
v
|
|
146
|
+
),
|
|
147
|
+
"aria-disabled": s,
|
|
148
|
+
children: [
|
|
149
|
+
y ? /* @__PURE__ */ n(
|
|
150
|
+
"button",
|
|
151
|
+
{
|
|
152
|
+
type: "button",
|
|
153
|
+
onClick: s ? void 0 : i,
|
|
154
|
+
onKeyDown: w,
|
|
155
|
+
disabled: s,
|
|
156
|
+
"aria-pressed": l ? !0 : void 0,
|
|
157
|
+
"aria-label": o || x,
|
|
158
|
+
tabIndex: d !== void 0 ? d : N ? 0 : void 0,
|
|
159
|
+
className: e(
|
|
160
|
+
"flex-1",
|
|
161
|
+
"bg-transparent",
|
|
162
|
+
"border-0",
|
|
163
|
+
r("none", "p"),
|
|
164
|
+
"text-inherit",
|
|
165
|
+
"text-left",
|
|
166
|
+
"cursor-pointer",
|
|
167
|
+
"focus:outline-none",
|
|
168
|
+
"focus:ring-2",
|
|
169
|
+
"focus:ring-line-focus",
|
|
170
|
+
"focus:ring-offset-2",
|
|
171
|
+
u("full")
|
|
172
|
+
),
|
|
173
|
+
children: a
|
|
174
|
+
}
|
|
175
|
+
) : /* @__PURE__ */ n("span", { children: a }),
|
|
176
|
+
f && !s && /* @__PURE__ */ n(
|
|
177
|
+
"button",
|
|
178
|
+
{
|
|
179
|
+
type: "button",
|
|
180
|
+
onClick: (t) => {
|
|
181
|
+
t.stopPropagation(), f();
|
|
182
|
+
},
|
|
183
|
+
className: e(
|
|
184
|
+
r("xs", "ml"),
|
|
185
|
+
"hover:bg-tint-hover",
|
|
186
|
+
u("full"),
|
|
187
|
+
r("xs", "p"),
|
|
188
|
+
"transition-colors",
|
|
189
|
+
"focus:outline-none",
|
|
190
|
+
"focus:ring-2",
|
|
191
|
+
"focus:ring-line-focus",
|
|
192
|
+
"focus:ring-offset-1"
|
|
193
|
+
),
|
|
194
|
+
"aria-label": `Remove ${x || "chip"}`,
|
|
195
|
+
children: /* @__PURE__ */ n(R, { className: "h-3 w-3", "aria-hidden": "true" })
|
|
196
|
+
}
|
|
197
|
+
)
|
|
198
|
+
]
|
|
199
|
+
}
|
|
200
|
+
);
|
|
201
|
+
});
|
|
202
|
+
k.displayName = "Chip";
|
|
203
|
+
export {
|
|
204
|
+
k as default
|
|
205
|
+
};
|
|
206
|
+
//# sourceMappingURL=Chip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Chip.js","sources":["../../../../../src/ui/primitives/Chip/Chip.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, type ReactNode } from \"react\";\nimport { X } from \"lucide-react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type ChipVariant = \"default\" | \"outlined\" | \"filled\";\nexport type ChipSize = \"sm\" | \"md\" | \"lg\";\n\ninterface ChipBaseProps {\n children: ReactNode;\n variant?: ChipVariant;\n size?: ChipSize;\n selected?: boolean;\n disabled?: boolean;\n className?: string;\n \"aria-label\"?: string;\n tabIndex?: number;\n}\n\ninterface ChipStandardProps extends ChipBaseProps {\n asChild?: false;\n onRemove?: () => void;\n onClick?: () => void;\n}\n\n/**\n * `asChild` collapses the chip into a single node provided by the\n * consumer (typically `<Link>`). The non-interactive frame + inner\n * label-button + X structure is intentionally NOT rendered — the child\n * IS the chip. As a consequence:\n *\n * - `onClick` and `onRemove` are forbidden at the type level. The\n * child's own click handler (and `href`) is what fires; consumers\n * who need a removable selected filter use the standard\n * (non-asChild) form.\n * - `selected` still applies the visual classes via `chipVariants`,\n * but NO `aria-pressed` is emitted. Toggle-button semantics on\n * `<a>` would lie — a link isn't a two-state control. Consumers\n * that need the selected route surfaced to AT users should pass\n * `aria-current=\"page\"` (or similar) directly on the child Link.\n *\n * @see `.claude/rules/components.md` and the inline a11y notes below.\n */\ninterface ChipAsChildProps extends ChipBaseProps {\n asChild: true;\n /**\n * `onClick` is forbidden when `asChild` is true — the child element\n * owns interaction. Pass the handler (or `href`) on the child.\n */\n onClick?: never;\n /**\n * `onRemove` is forbidden when `asChild` is true — the collapsed\n * node has no slot for an X button. Use the standard (non-asChild)\n * form when removal is required.\n */\n onRemove?: never;\n}\n\nexport type ChipProps = ChipStandardProps | ChipAsChildProps;\n\n/**\n * Chip Component\n *\n * A chip/tag for labels, filters, or selected items.\n *\n * Standard form: an outer `<div>` frame (never interactive) with an\n * inner `<button>` label (when `onClick`) and a sibling X `<button>`\n * (when `onRemove`). This shape closes two axe violations the older\n * implementation hit — `aria-required-parent` (role=option without a\n * listbox) and `nested-interactive` (clickable outer + clickable X).\n *\n * `asChild` form: a single node provided by the consumer (e.g.\n * `<Link>`), with the chip's classes projected via Radix `Slot`. See\n * the `ChipAsChildProps` JSDoc for the a11y responsibility transfer\n * — the consumer's child carries `href`, focus behavior, and any\n * route-state ARIA (`aria-current`). Forbidden in this form:\n * `onClick`, `onRemove` (TS-level).\n *\n * @example\n * ```tsx\n * <Chip>Tag</Chip>\n * <Chip onRemove={() => console.log('removed')}>Removable</Chip>\n *\n * // Navigation chip — server-rendered, zero-JS-friendly.\n * <Chip asChild variant=\"filled\">\n * <Link href=\"/filtros/ativo\" prefetch aria-current=\"page\">Active</Link>\n * </Chip>\n * ```\n */\n// Chip variants using CVA\nconst chipVariants = cva(\n // Base classes\n cn(\n \"inline-flex\",\n \"items-center\",\n \"font-medium\",\n getRadiusClass(\"full\"),\n getSpacingClass(\"xs\", \"gap\"),\n ),\n {\n variants: {\n variant: {\n default: cn(\n \"bg-surface-muted\",\n \"text-fg-primary\",\n \"border\",\n \"border-line-default\",\n ),\n outlined: cn(\n \"bg-transparent\",\n \"text-fg-primary\",\n \"border\",\n \"border-line-default\",\n ),\n filled: cn(\n \"bg-surface-brand-strong\",\n \"text-fg-inverse\",\n \"border\",\n \"border-transparent\",\n ),\n },\n size: {\n sm: cn(\n getSpacingClass(\"xs\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"caption\"),\n ),\n md: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n ),\n lg: cn(\n getSpacingClass(\"md\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getTypographySize(\"body\"),\n ),\n },\n selected: {\n true: cn(\n \"bg-surface-brand-strong\",\n \"text-fg-inverse\",\n \"border\",\n \"border-line-brand\",\n ),\n false: \"\",\n },\n disabled: {\n true: \"opacity-50 cursor-not-allowed\",\n false: \"\",\n },\n },\n compoundVariants: [\n {\n selected: true,\n variant: \"default\",\n class: \"\", // Override variant when selected\n },\n {\n selected: true,\n variant: \"outlined\",\n class: \"\", // Override variant when selected\n },\n {\n selected: true,\n variant: \"filled\",\n class: \"\", // Override variant when selected\n },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n selected: false,\n disabled: false,\n },\n },\n);\n\nconst Chip = forwardRef<HTMLDivElement, ChipProps>(function Chip(props, ref) {\n const {\n children,\n variant = \"default\",\n size = \"md\",\n selected = false,\n disabled = false,\n className = \"\",\n \"aria-label\": ariaLabel,\n tabIndex,\n asChild = false,\n } = props;\n\n // Generate accessible label\n const getAccessibleLabel = (): string | undefined => {\n if (ariaLabel) return ariaLabel;\n if (typeof children === \"string\") return children;\n // For non-string children, try to extract text content\n if (\n typeof children === \"object\" &&\n children !== null &&\n \"props\" in children\n ) {\n const childProps = (children as { props?: { children?: unknown } }).props;\n if (childProps?.children && typeof childProps.children === \"string\") {\n return childProps.children;\n }\n }\n return undefined;\n };\n\n const accessibleLabel = getAccessibleLabel();\n\n // asChild path: collapse the entire chip structure (frame + label\n // button + X) into the single consumer-provided node. The frame's\n // visual classes are projected onto the child via Slot.\n //\n // A11Y RESPONSIBILITY TRANSFER. The child element owns:\n // - focus (its native focus ring, or its own focus utilities)\n // - activation (its own click handler / href for navigation)\n // - route-state semantics: `aria-current=\"page\"` on a selected\n // Link is the right tool. `aria-pressed` is intentionally NOT\n // emitted here — a link is not a toggle button.\n // - disabled semantics: `aria-disabled` is set when `disabled` is\n // true, but it does NOT block navigation. Consumers that must\n // truly disable navigation should also gate `href` upstream.\n //\n // TS forbids `onClick` / `onRemove` in this form (see ChipAsChildProps).\n if (asChild) {\n return (\n <Slot\n ref={ref}\n className={cn(\n chipVariants({ variant, size, selected, disabled }),\n className,\n )}\n aria-label={ariaLabel}\n aria-disabled={disabled || undefined}\n tabIndex={tabIndex}\n >\n {children}\n </Slot>\n );\n }\n\n // Standard form below. Narrow `props` so the union picks up\n // onClick/onRemove handlers (forbidden when asChild=true at TS level).\n const { onRemove, onClick } = props as ChipStandardProps;\n\n // Architecture:\n // The label is a real `<button>` whenever the chip is meant to be\n // activated (`onClick` provided). The X is a sibling `<button>` when\n // `onRemove` is provided. The outer `<div>` is NEVER interactive —\n // no `role`, no `tabIndex`, no event handlers. This unifies what\n // used to be three structural variants:\n // - `onClick` only → outer `role=\"button\"` [old]\n // - `onClick` + `onRemove` (no selected) → label-button [PR68]\n // - `selected` → outer `role=\"option\"` [old, axe-flagged]\n // into one consistent shape: label is the actor, outer is the chip\n // chrome (visual frame).\n //\n // Why this matters for a11y:\n // - `role=\"option\"` outside `role=\"listbox\"` violates `aria-required-\n // parent`. The old `selected` path failed axe in every standalone\n // chip. Moving the action to a native `<button>` with\n // `aria-pressed={selected}` (toggle button pattern) communicates\n // state correctly without requiring a listbox parent.\n // - The interactive outer + inner X button produced nested-interactive\n // whenever the consumer combined `selected` (or `onClick`) with\n // `onRemove`. Outer non-interactive + sibling buttons fixes both\n // cases at once.\n //\n // `selected` with no `onClick` is decorative only — the chip CANNOT\n // toggle, so it gets no `aria-pressed` (which would lie) and no role.\n // The visual `selected` styling (chipVariants.selected) applies, but\n // AT users read it as static text. Consumers who want the state\n // communicated must also pass `onClick` to make it a real toggle.\n const useLabelButton = onClick !== undefined;\n const interactive = useLabelButton && !disabled;\n\n // Keyboard handler for the label-button. Native `<button>` activates on\n // Enter/Space in real browsers, but JSDOM does NOT simulate Enter → click,\n // so this preserves the previous test-friendly behavior AND adds explicit\n // `preventDefault` (the original outer-as-button needed it; on a native\n // button this is mostly belt-and-suspenders but harmless).\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.();\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n chipVariants({ variant, size, selected, disabled }),\n onRemove && getSpacingClass(\"xs\", \"pr\"),\n className,\n )}\n aria-disabled={disabled}\n >\n {useLabelButton ? (\n <button\n type=\"button\"\n onClick={disabled ? undefined : onClick}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n aria-pressed={selected ? true : undefined}\n aria-label={ariaLabel || accessibleLabel}\n tabIndex={\n tabIndex !== undefined ? tabIndex : interactive ? 0 : undefined\n }\n className={cn(\n \"flex-1\",\n \"bg-transparent\",\n \"border-0\",\n getSpacingClass(\"none\", \"p\"),\n \"text-inherit\",\n \"text-left\",\n \"cursor-pointer\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-line-focus\",\n \"focus:ring-offset-2\",\n getRadiusClass(\"full\"),\n )}\n >\n {children}\n </button>\n ) : (\n <span>{children}</span>\n )}\n {onRemove && !disabled && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n className={cn(\n getSpacingClass(\"xs\", \"ml\"),\n \"hover:bg-tint-hover\",\n getRadiusClass(\"full\"),\n getSpacingClass(\"xs\", \"p\"),\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-line-focus\",\n \"focus:ring-offset-1\",\n )}\n aria-label={`Remove ${accessibleLabel || \"chip\"}`}\n >\n <X className=\"h-3 w-3\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n );\n});\n\nChip.displayName = \"Chip\";\n\nexport default Chip;\n"],"names":["chipVariants","cva","cn","getRadiusClass","getSpacingClass","getTypographySize","Chip","forwardRef","props","ref","children","variant","size","selected","disabled","className","ariaLabel","tabIndex","asChild","accessibleLabel","childProps","jsx","Slot","onRemove","onClick","useLabelButton","interactive","handleKeyDown","e","jsxs","X"],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var z = Object.defineProperty, D = Object.defineProperties;
|
|
3
|
+
var E = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var l = Object.getOwnPropertySymbols;
|
|
5
|
+
var b = Object.prototype.hasOwnProperty, g = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var h = (e, t, r) => t in e ? z(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r, v = (e, t) => {
|
|
7
|
+
for (var r in t || (t = {}))
|
|
8
|
+
b.call(t, r) && h(e, r, t[r]);
|
|
9
|
+
if (l)
|
|
10
|
+
for (var r of l(t))
|
|
11
|
+
g.call(t, r) && h(e, r, t[r]);
|
|
12
|
+
return e;
|
|
13
|
+
}, y = (e, t) => D(e, E(t));
|
|
14
|
+
var x = (e, t) => {
|
|
15
|
+
var r = {};
|
|
16
|
+
for (var n in e)
|
|
17
|
+
b.call(e, n) && t.indexOf(n) < 0 && (r[n] = e[n]);
|
|
18
|
+
if (e != null && l)
|
|
19
|
+
for (var n of l(e))
|
|
20
|
+
t.indexOf(n) < 0 && g.call(e, n) && (r[n] = e[n]);
|
|
21
|
+
return r;
|
|
22
|
+
};
|
|
23
|
+
import { jsxs as I, jsx as a } from "react/jsx-runtime";
|
|
24
|
+
import { forwardRef as N, useRef as K, useState as S, useEffect as C, useId as q } from "react";
|
|
25
|
+
import { useCollapsible as A } from "../../hooks/useCollapsible.js";
|
|
26
|
+
import { getRadiusClass as B } from "../../tokens/radius.js";
|
|
27
|
+
import { cn as F } from "../../utils/cn.js";
|
|
28
|
+
const G = N(
|
|
29
|
+
function(J, j) {
|
|
30
|
+
var d = J, {
|
|
31
|
+
children: t,
|
|
32
|
+
trigger: r,
|
|
33
|
+
defaultOpen: n = !0,
|
|
34
|
+
open: w,
|
|
35
|
+
onOpenChange: R,
|
|
36
|
+
disabled: c = !1,
|
|
37
|
+
duration: k = 200,
|
|
38
|
+
storageKey: H,
|
|
39
|
+
className: O = ""
|
|
40
|
+
} = d, $ = x(d, [
|
|
41
|
+
"children",
|
|
42
|
+
"trigger",
|
|
43
|
+
"defaultOpen",
|
|
44
|
+
"open",
|
|
45
|
+
"onOpenChange",
|
|
46
|
+
"disabled",
|
|
47
|
+
"duration",
|
|
48
|
+
"storageKey",
|
|
49
|
+
"className"
|
|
50
|
+
]);
|
|
51
|
+
const { isOpen: o, toggle: p } = A({
|
|
52
|
+
defaultOpen: n,
|
|
53
|
+
open: w,
|
|
54
|
+
onOpenChange: R,
|
|
55
|
+
storageKey: H
|
|
56
|
+
}), i = K(null), [u, f] = S(o ? "auto" : 0);
|
|
57
|
+
C(() => {
|
|
58
|
+
i.current && f(o ? i.current.scrollHeight : 0);
|
|
59
|
+
}, [o, t]), C(() => {
|
|
60
|
+
if (!o || !i.current) return;
|
|
61
|
+
const s = new ResizeObserver(() => {
|
|
62
|
+
i.current && o && f(i.current.scrollHeight);
|
|
63
|
+
});
|
|
64
|
+
return s.observe(i.current), () => {
|
|
65
|
+
s.disconnect();
|
|
66
|
+
};
|
|
67
|
+
}, [o]);
|
|
68
|
+
const m = `collapsible-content-${q()}`;
|
|
69
|
+
return /* @__PURE__ */ I("div", y(v({ ref: j, className: O }, $), { children: [
|
|
70
|
+
r !== void 0 && /* @__PURE__ */ a(
|
|
71
|
+
"button",
|
|
72
|
+
{
|
|
73
|
+
type: "button",
|
|
74
|
+
onClick: p,
|
|
75
|
+
onKeyDown: (s) => {
|
|
76
|
+
(s.key === "Enter" || s.key === " ") && (s.preventDefault(), c || p());
|
|
77
|
+
},
|
|
78
|
+
disabled: c,
|
|
79
|
+
"aria-expanded": o,
|
|
80
|
+
"aria-controls": m,
|
|
81
|
+
"aria-disabled": c,
|
|
82
|
+
className: F(
|
|
83
|
+
"w-full",
|
|
84
|
+
"text-left",
|
|
85
|
+
"focus:outline-none",
|
|
86
|
+
"focus:ring-2",
|
|
87
|
+
"focus:ring-line-brand",
|
|
88
|
+
"focus:ring-offset-2",
|
|
89
|
+
B("md")
|
|
90
|
+
),
|
|
91
|
+
children: r
|
|
92
|
+
}
|
|
93
|
+
),
|
|
94
|
+
/* @__PURE__ */ a(
|
|
95
|
+
"div",
|
|
96
|
+
{
|
|
97
|
+
id: m,
|
|
98
|
+
ref: i,
|
|
99
|
+
style: {
|
|
100
|
+
height: typeof u == "number" ? `${u}px` : u,
|
|
101
|
+
overflow: "hidden",
|
|
102
|
+
transition: `height ${k}ms ease-in-out`
|
|
103
|
+
},
|
|
104
|
+
"aria-hidden": !o,
|
|
105
|
+
children: /* @__PURE__ */ a("div", { children: t })
|
|
106
|
+
}
|
|
107
|
+
)
|
|
108
|
+
] }));
|
|
109
|
+
}
|
|
110
|
+
);
|
|
111
|
+
G.displayName = "Collapsible";
|
|
112
|
+
export {
|
|
113
|
+
G as default
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=Collapsible.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Collapsible.js","sources":["../../../../../src/ui/primitives/Collapsible/Collapsible.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n forwardRef,\n useEffect,\n useId,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n type KeyboardEvent,\n} from \"react\";\nimport {\n useCollapsible,\n type UseCollapsibleOptions,\n} from \"../../hooks/useCollapsible\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { cn } from \"../../utils\";\n\nexport interface CollapsibleProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"onChange\"\n> {\n children: ReactNode;\n /**\n * Content for the toggle button. When omitted, Collapsible renders only\n * the animated content panel — the caller is responsible for its own\n * trigger and `open`-state wiring (SidebarGroup/SideNavbarGroup pattern).\n */\n trigger?: ReactNode;\n defaultOpen?: boolean;\n open?: boolean; // Controlled mode\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n duration?: number; // Animation duration in ms\n storageKey?: string; // For localStorage persistence\n}\n\n/**\n * Collapsible Component\n *\n * A generic, reusable collapsible component for any content.\n * Supports both controlled and uncontrolled modes.\n * Includes smooth animations and full ARIA support.\n *\n * @example\n * ```tsx\n * <Collapsible\n * trigger={<button>Toggle</button>}\n * defaultOpen={true}\n * >\n * <div>Collapsible content</div>\n * </Collapsible>\n * ```\n */\nconst Collapsible = forwardRef<HTMLDivElement, CollapsibleProps>(\n function Collapsible(\n {\n children,\n trigger,\n defaultOpen = true,\n open,\n onOpenChange,\n disabled = false,\n duration = 200,\n storageKey,\n className = \"\",\n ...props\n },\n ref,\n ) {\n const { isOpen, toggle } = useCollapsible({\n defaultOpen,\n open,\n onOpenChange,\n storageKey,\n } as UseCollapsibleOptions);\n\n const contentRef = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState<number | \"auto\">(isOpen ? \"auto\" : 0);\n\n // Update height when content changes or isOpen changes\n useEffect(() => {\n if (!contentRef.current) return;\n\n if (isOpen) {\n // Set to actual height for animation\n setHeight(contentRef.current.scrollHeight);\n } else {\n // Set to 0 for collapse animation\n setHeight(0);\n }\n }, [isOpen, children]);\n\n // Handle resize to recalculate height\n useEffect(() => {\n if (!isOpen || !contentRef.current) return;\n\n const resizeObserver = new ResizeObserver(() => {\n if (contentRef.current && isOpen) {\n setHeight(contentRef.current.scrollHeight);\n }\n });\n\n resizeObserver.observe(contentRef.current);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [isOpen]);\n\n // Stable per-instance ID for the collapsible content panel —\n // referenced by aria-controls on the toggle button. The previous\n // Math.random() approach regenerated the ID on every render, so\n // toggle/content pairing was technically inconsistent across\n // re-renders. useId is SSR-safe and stable.\n const contentId = `collapsible-content-${useId()}`;\n\n return (\n <div ref={ref} className={className} {...props}>\n {trigger !== undefined && (\n <button\n type=\"button\"\n onClick={toggle}\n onKeyDown={(e: KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (!disabled) {\n toggle();\n }\n }\n }}\n disabled={disabled}\n aria-expanded={isOpen}\n aria-controls={contentId}\n aria-disabled={disabled}\n className={cn(\n \"w-full\",\n \"text-left\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-line-brand\",\n \"focus:ring-offset-2\",\n getRadiusClass(\"md\"),\n )}\n >\n {trigger}\n </button>\n )}\n <div\n id={contentId}\n ref={contentRef}\n style={{\n height: typeof height === \"number\" ? `${height}px` : height,\n overflow: \"hidden\",\n transition: `height ${duration}ms ease-in-out`,\n }}\n aria-hidden={!isOpen}\n >\n <div>{children}</div>\n </div>\n </div>\n );\n },\n);\n\nCollapsible.displayName = \"Collapsible\";\n\nexport default Collapsible;\n"],"names":["Collapsible","forwardRef","_a","ref","_b","children","trigger","defaultOpen","open","onOpenChange","disabled","duration","storageKey","className","props","__objRest","isOpen","toggle","useCollapsible","contentRef","useRef","height","setHeight","useState","useEffect","resizeObserver","contentId","useId","jsxs","__spreadProps","__spreadValues","jsx","e","cn","getRadiusClass"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDA,MAAMA,IAAcC;AAAA,EAClB,SACEC,GAYAC,GACA;AAbA,QAAAC,IAAAF,GACE;AAAA,gBAAAG;AAAA,MACA,SAAAC;AAAA,MACA,aAAAC,IAAc;AAAA,MACd,MAAAC;AAAA,MACA,cAAAC;AAAA,MACA,UAAAC,IAAW;AAAA,MACX,UAAAC,IAAW;AAAA,MACX,YAAAC;AAAA,MACA,WAAAC,IAAY;AAAA,QATdT,GAUKU,IAAAC,EAVLX,GAUK;AAAA,MATH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAKF,UAAM,EAAE,QAAAY,GAAQ,QAAAC,EAAA,IAAWC,EAAe;AAAA,MACxC,aAAAX;AAAA,MACA,MAAAC;AAAA,MACA,cAAAC;AAAA,MACA,YAAAG;AAAA,IAAA,CACwB,GAEpBO,IAAaC,EAAuB,IAAI,GACxC,CAACC,GAAQC,CAAS,IAAIC,EAA0BP,IAAS,SAAS,CAAC;AAGzE,IAAAQ,EAAU,MAAM;AACd,MAAKL,EAAW,WAIdG,EAFEN,IAEQG,EAAW,QAAQ,eAGnB,CAH+B;AAAA,IAK7C,GAAG,CAACH,GAAQX,CAAQ,CAAC,GAGrBmB,EAAU,MAAM;AACd,UAAI,CAACR,KAAU,CAACG,EAAW,QAAS;AAEpC,YAAMM,IAAiB,IAAI,eAAe,MAAM;AAC9C,QAAIN,EAAW,WAAWH,KACxBM,EAAUH,EAAW,QAAQ,YAAY;AAAA,MAE7C,CAAC;AAED,aAAAM,EAAe,QAAQN,EAAW,OAAO,GAElC,MAAM;AACX,QAAAM,EAAe,WAAA;AAAA,MACjB;AAAA,IACF,GAAG,CAACT,CAAM,CAAC;AAOX,UAAMU,IAAY,uBAAuBC,EAAA,CAAO;AAEhD,WACE,gBAAAC,EAAC,OAAAC,EAAAC,EAAA,EAAI,KAAA3B,GAAU,WAAAU,KAA0BC,IAAxC,EACE,UAAA;AAAA,MAAAR,MAAY,UACX,gBAAAyB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAASd;AAAA,UACT,WAAW,CAACe,MAAwC;AAClD,aAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SACjCA,EAAE,eAAA,GACGtB,KACHO,EAAA;AAAA,UAGN;AAAA,UACA,UAAAP;AAAA,UACA,iBAAeM;AAAA,UACf,iBAAeU;AAAA,UACf,iBAAehB;AAAA,UACf,WAAWuB;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACAC,EAAe,IAAI;AAAA,UAAA;AAAA,UAGpB,UAAA5B;AAAA,QAAA;AAAA,MAAA;AAAA,MAGL,gBAAAyB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAIL;AAAA,UACJ,KAAKP;AAAA,UACL,OAAO;AAAA,YACL,QAAQ,OAAOE,KAAW,WAAW,GAAGA,CAAM,OAAOA;AAAA,YACrD,UAAU;AAAA,YACV,YAAY,UAAUV,CAAQ;AAAA,UAAA;AAAA,UAEhC,eAAa,CAACK;AAAA,UAEd,UAAA,gBAAAe,EAAC,SAAK,UAAA1B,EAAA,CAAS;AAAA,QAAA;AAAA,MAAA;AAAA,IACjB,IACF;AAAA,EAEJ;AACF;AAEAL,EAAY,cAAc;"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var h = Object.defineProperty, u = Object.defineProperties;
|
|
3
|
+
var y = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var a = Object.getOwnPropertySymbols;
|
|
5
|
+
var l = Object.prototype.hasOwnProperty, m = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var o = (e, r, s) => r in e ? h(e, r, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[r] = s, n = (e, r) => {
|
|
7
|
+
for (var s in r || (r = {}))
|
|
8
|
+
l.call(r, s) && o(e, s, r[s]);
|
|
9
|
+
if (a)
|
|
10
|
+
for (var s of a(r))
|
|
11
|
+
m.call(r, s) && o(e, s, r[s]);
|
|
12
|
+
return e;
|
|
13
|
+
}, c = (e, r) => u(e, y(r));
|
|
14
|
+
var p = (e, r) => {
|
|
15
|
+
var s = {};
|
|
16
|
+
for (var t in e)
|
|
17
|
+
l.call(e, t) && r.indexOf(t) < 0 && (s[t] = e[t]);
|
|
18
|
+
if (e != null && a)
|
|
19
|
+
for (var t of a(e))
|
|
20
|
+
r.indexOf(t) < 0 && m.call(e, t) && (s[t] = e[t]);
|
|
21
|
+
return s;
|
|
22
|
+
};
|
|
23
|
+
import { jsxs as C, jsx as f } from "react/jsx-runtime";
|
|
24
|
+
import { AlertCircle as S } from "lucide-react";
|
|
25
|
+
import { getTypographySize as b } from "../../tokens/typography.js";
|
|
26
|
+
import { getSpacingClass as d } from "../../tokens/spacing.js";
|
|
27
|
+
import { cn as j } from "../../utils/cn.js";
|
|
28
|
+
function M(v) {
|
|
29
|
+
var i = v, {
|
|
30
|
+
message: e,
|
|
31
|
+
id: r,
|
|
32
|
+
className: s = ""
|
|
33
|
+
} = i, t = p(i, [
|
|
34
|
+
"message",
|
|
35
|
+
"id",
|
|
36
|
+
"className"
|
|
37
|
+
]);
|
|
38
|
+
const g = [
|
|
39
|
+
d("xs", "mt"),
|
|
40
|
+
b("bodySmall"),
|
|
41
|
+
"text-fg-error",
|
|
42
|
+
"flex",
|
|
43
|
+
"items-center",
|
|
44
|
+
d("xs", "gap")
|
|
45
|
+
], x = j(...g, s);
|
|
46
|
+
return /* @__PURE__ */ C("div", c(n({ role: "alert", id: r, className: x, "aria-live": "polite" }, t), { children: [
|
|
47
|
+
/* @__PURE__ */ f(S, { className: "h-4 w-4 shrink-0", "aria-hidden": "true" }),
|
|
48
|
+
/* @__PURE__ */ f("span", { children: e })
|
|
49
|
+
] }));
|
|
50
|
+
}
|
|
51
|
+
export {
|
|
52
|
+
M as default
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=ErrorMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorMessage.js","sources":["../../../../../src/ui/primitives/ErrorMessage/ErrorMessage.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport { AlertCircle } from \"lucide-react\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface ErrorMessageProps extends HTMLAttributes<HTMLDivElement> {\n message: string;\n id?: string;\n}\n\n/**\n * ErrorMessage Component\n *\n * A component for displaying validation error messages.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <ErrorMessage message=\"This field is required\" id=\"email-error\" />\n * ```\n */\nexport default function ErrorMessage({\n message,\n id,\n className = \"\",\n ...props\n}: ErrorMessageProps) {\n const baseClasses = [\n getSpacingClass(\"xs\", \"mt\"),\n getTypographySize(\"bodySmall\"),\n \"text-fg-error\",\n \"flex\",\n \"items-center\",\n getSpacingClass(\"xs\", \"gap\"),\n ];\n\n const classes = cn(...baseClasses, className);\n\n return (\n <div role=\"alert\" id={id} className={classes} aria-live=\"polite\" {...props}>\n <AlertCircle className=\"h-4 w-4 shrink-0\" aria-hidden=\"true\" />\n <span>{message}</span>\n </div>\n );\n}\n"],"names":["ErrorMessage","_a","_b","message","id","className","props","__objRest","baseClasses","getSpacingClass","getTypographySize","classes","cn","jsxs","__spreadProps","__spreadValues","jsx","AlertCircle"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,SAAwBA,EAAaC,GAKf;AALe,MAAAC,IAAAD,GACnC;AAAA,aAAAE;AAAA,IACA,IAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,MAHuBH,GAIhCI,IAAAC,EAJgCL,GAIhC;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAMM,IAAc;AAAA,IAClBC,EAAgB,MAAM,IAAI;AAAA,IAC1BC,EAAkB,WAAW;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACAD,EAAgB,MAAM,KAAK;AAAA,EAAA,GAGvBE,IAAUC,EAAG,GAAGJ,GAAaH,CAAS;AAE5C,SACE,gBAAAQ,EAAC,OAAAC,EAAAC,EAAA,EAAI,MAAK,SAAQ,IAAAX,GAAQ,WAAWO,GAAS,aAAU,YAAaL,IAApE,EACC,UAAA;AAAA,IAAA,gBAAAU,EAACC,GAAA,EAAY,WAAU,oBAAmB,eAAY,QAAO;AAAA,IAC7D,gBAAAD,EAAC,UAAM,UAAAb,EAAA,CAAQ;AAAA,EAAA,IACjB;AAEJ;"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var p = Object.defineProperty;
|
|
3
|
+
var a = Object.getOwnPropertySymbols;
|
|
4
|
+
var g = Object.prototype.hasOwnProperty, f = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var s = (r, e, o) => e in r ? p(r, e, { enumerable: !0, configurable: !0, writable: !0, value: o }) : r[e] = o, b = (r, e) => {
|
|
6
|
+
for (var o in e || (e = {}))
|
|
7
|
+
g.call(e, o) && s(r, o, e[o]);
|
|
8
|
+
if (a)
|
|
9
|
+
for (var o of a(e))
|
|
10
|
+
f.call(e, o) && s(r, o, e[o]);
|
|
11
|
+
return r;
|
|
12
|
+
};
|
|
13
|
+
var d = (r, e) => {
|
|
14
|
+
var o = {};
|
|
15
|
+
for (var n in r)
|
|
16
|
+
g.call(r, n) && e.indexOf(n) < 0 && (o[n] = r[n]);
|
|
17
|
+
if (r != null && a)
|
|
18
|
+
for (var n of a(r))
|
|
19
|
+
e.indexOf(n) < 0 && f.call(r, n) && (o[n] = r[n]);
|
|
20
|
+
return o;
|
|
21
|
+
};
|
|
22
|
+
import { jsx as c } from "react/jsx-runtime";
|
|
23
|
+
import { getRadiusClass as x } from "../../tokens/radius.js";
|
|
24
|
+
import { getSpacingClass as m } from "../../tokens/spacing.js";
|
|
25
|
+
import { cn as t } from "../../utils/cn.js";
|
|
26
|
+
function j(n) {
|
|
27
|
+
var i = n, {
|
|
28
|
+
variant: r = "info",
|
|
29
|
+
className: e
|
|
30
|
+
} = i, o = d(i, [
|
|
31
|
+
"variant",
|
|
32
|
+
"className"
|
|
33
|
+
]);
|
|
34
|
+
const l = {
|
|
35
|
+
warning: t("bg-warning-bg", "text-warning-dark", "border-warning"),
|
|
36
|
+
error: t("bg-error-bg", "text-error-dark", "border-error"),
|
|
37
|
+
info: t("bg-info-bg", "text-info-dark", "border-info")
|
|
38
|
+
};
|
|
39
|
+
return /* @__PURE__ */ c(
|
|
40
|
+
"div",
|
|
41
|
+
b({
|
|
42
|
+
role: "alert",
|
|
43
|
+
className: t(
|
|
44
|
+
"border",
|
|
45
|
+
m("base", "px"),
|
|
46
|
+
m("sm", "py"),
|
|
47
|
+
x("lg"),
|
|
48
|
+
l[r],
|
|
49
|
+
e
|
|
50
|
+
)
|
|
51
|
+
}, o)
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
export {
|
|
55
|
+
j as default
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=Info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Info.js","sources":["../../../../../src/ui/primitives/Info/Info.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface InfoProps extends HTMLAttributes<HTMLDivElement> {\n variant?: \"info\" | \"warning\" | \"error\";\n}\n\nexport default function Info({\n variant = \"info\",\n className,\n ...props\n}: InfoProps) {\n const variantClasses = {\n warning: cn(\"bg-warning-bg\", \"text-warning-dark\", \"border-warning\"),\n error: cn(\"bg-error-bg\", \"text-error-dark\", \"border-error\"),\n info: cn(\"bg-info-bg\", \"text-info-dark\", \"border-info\"),\n };\n\n return (\n <div\n role=\"alert\"\n className={cn(\n \"border\",\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getRadiusClass(\"lg\"),\n variantClasses[variant],\n className,\n )}\n {...props}\n />\n );\n}\n"],"names":["Info","_a","_b","variant","className","props","__objRest","variantClasses","cn","jsx","__spreadValues","getSpacingClass","getRadiusClass"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AASA,SAAwBA,EAAKC,GAIf;AAJe,MAAAC,IAAAD,GAC3B;AAAA,aAAAE,IAAU;AAAA,IACV,WAAAC;AAAA,MAF2BF,GAGxBG,IAAAC,EAHwBJ,GAGxB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,QAAMK,IAAiB;AAAA,IACrB,SAASC,EAAG,iBAAiB,qBAAqB,gBAAgB;AAAA,IAClE,OAAOA,EAAG,eAAe,mBAAmB,cAAc;AAAA,IAC1D,MAAMA,EAAG,cAAc,kBAAkB,aAAa;AAAA,EAAA;AAGxD,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAAC,EAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAWF;AAAA,QACT;AAAA,QACAG,EAAgB,QAAQ,IAAI;AAAA,QAC5BA,EAAgB,MAAM,IAAI;AAAA,QAC1BC,EAAe,IAAI;AAAA,QACnBL,EAAeJ,CAAO;AAAA,QACtBC;AAAA,MAAA;AAAA,OAEEC;AAAA,EAAA;AAGV;"}
|