@fabio.caffarello/react-design-system 3.8.0 → 3.10.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 +2 -1
- package/dist/granular/index.js +447 -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/FilterChips/FilterChips.js +67 -0
- package/dist/granular/ui/components/FilterChips/FilterChips.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/index.cjs +46 -46
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1172 -1135
- 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 +882 -1179
- package/dist/server/index.js.map +1 -1
- package/dist/ui/components/FilterChips/FilterChips.d.ts +83 -0
- package/dist/ui/components/FilterChips/index.d.ts +2 -0
- package/dist/ui/components/index.d.ts +2 -0
- package/dist/ui/server.d.ts +2 -0
- package/package.json +9 -2
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as p } from "react/jsx-runtime";
|
|
3
|
+
import { useState as w } from "react";
|
|
4
|
+
import v from "./DrawerContent.js";
|
|
5
|
+
import x from "./DrawerHeader.js";
|
|
6
|
+
import F from "./DrawerFooter.js";
|
|
7
|
+
import { DrawerProvider as H } from "./DrawerContext.js";
|
|
8
|
+
function t({
|
|
9
|
+
children: i,
|
|
10
|
+
open: e,
|
|
11
|
+
defaultOpen: a = !1,
|
|
12
|
+
onOpenChange: r,
|
|
13
|
+
position: m = "right",
|
|
14
|
+
size: f = "md",
|
|
15
|
+
closeOnOverlayClick: l = !0,
|
|
16
|
+
closeOnEscape: c = !0
|
|
17
|
+
}) {
|
|
18
|
+
const [u, n] = w(a), o = e !== void 0, D = o ? e : u, d = (s) => {
|
|
19
|
+
o || n(s), r == null || r(s);
|
|
20
|
+
};
|
|
21
|
+
return /* @__PURE__ */ p(
|
|
22
|
+
H,
|
|
23
|
+
{
|
|
24
|
+
value: {
|
|
25
|
+
isOpen: D,
|
|
26
|
+
closeDrawer: () => {
|
|
27
|
+
d(!1);
|
|
28
|
+
},
|
|
29
|
+
position: m,
|
|
30
|
+
size: f,
|
|
31
|
+
closeOnOverlayClick: l,
|
|
32
|
+
closeOnEscape: c
|
|
33
|
+
},
|
|
34
|
+
children: i
|
|
35
|
+
}
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
t.Content = v;
|
|
39
|
+
t.Header = x;
|
|
40
|
+
t.Footer = F;
|
|
41
|
+
export {
|
|
42
|
+
v as DrawerContent,
|
|
43
|
+
F as DrawerFooter,
|
|
44
|
+
x as DrawerHeader,
|
|
45
|
+
t as default
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=Drawer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Drawer.js","sources":["../../../../../src/ui/components/Drawer/Drawer.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, type ReactNode } from \"react\";\nimport DrawerContent from \"./DrawerContent\";\nimport DrawerHeader from \"./DrawerHeader\";\nimport DrawerFooter from \"./DrawerFooter\";\nimport { DrawerProvider } from \"./DrawerContext\";\n\nexport type DrawerPosition = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nexport interface DrawerProps {\n children: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n position?: DrawerPosition;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n closeOnOverlayClick?: boolean;\n closeOnEscape?: boolean;\n}\n\n/**\n * Drawer Component\n *\n * A side drawer component that slides in from different positions.\n * Follows Atomic Design principles as an Atom component.\n * Uses Compound Component pattern.\n *\n * @example\n * ```tsx\n * <Drawer>\n * <DrawerContent>\n * <DrawerHeader>\n * <h2>Title</h2>\n * </DrawerHeader>\n * <p>Content goes here</p>\n * <DrawerFooter>\n * <Button>Close</Button>\n * </DrawerFooter>\n * </DrawerContent>\n * </Drawer>\n * ```\n */\nexport default function Drawer({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n position = \"right\",\n size = \"md\",\n closeOnOverlayClick = true,\n closeOnEscape = true,\n}: DrawerProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const setIsOpen = (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n };\n\n const closeDrawer = () => {\n setIsOpen(false);\n };\n\n return (\n <DrawerProvider\n value={{\n isOpen,\n closeDrawer,\n position,\n size,\n closeOnOverlayClick,\n closeOnEscape,\n }}\n >\n {children}\n </DrawerProvider>\n );\n}\n\n// Export sub-components for compound pattern\nDrawer.Content = DrawerContent;\nDrawer.Header = DrawerHeader;\nDrawer.Footer = DrawerFooter;\n\n// Also export as named exports for easier imports\nexport { DrawerContent, DrawerHeader, DrawerFooter };\n"],"names":["Drawer","children","controlledOpen","defaultOpen","onOpenChange","position","size","closeOnOverlayClick","closeOnEscape","internalOpen","setInternalOpen","useState","isControlled","isOpen","setIsOpen","newOpen","jsx","DrawerProvider","DrawerContent","DrawerHeader","DrawerFooter"],"mappings":";;;;;;;AA2CA,SAAwBA,EAAO;AAAA,EAC7B,UAAAC;AAAA,EACA,MAAMC;AAAA,EACN,aAAAC,IAAc;AAAA,EACd,cAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,MAAAC,IAAO;AAAA,EACP,qBAAAC,IAAsB;AAAA,EACtB,eAAAC,IAAgB;AAClB,GAAgB;AACd,QAAM,CAACC,GAAcC,CAAe,IAAIC,EAASR,CAAW,GAEtDS,IAAeV,MAAmB,QAClCW,IAASD,IAAeV,IAAiBO,GAEzCK,IAAY,CAACC,MAAqB;AACtC,IAAKH,KACHF,EAAgBK,CAAO,GAEzBX,KAAA,QAAAA,EAAeW;AAAA,EACjB;AAMA,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,QAAAJ;AAAA,QACA,aARc,MAAM;AACxB,UAAAC,EAAU,EAAK;AAAA,QACjB;AAAA,QAOM,UAAAT;AAAA,QACA,MAAAC;AAAA,QACA,qBAAAC;AAAA,QACA,eAAAC;AAAA,MAAA;AAAA,MAGD,UAAAP;AAAA,IAAA;AAAA,EAAA;AAGP;AAGAD,EAAO,UAAUkB;AACjBlB,EAAO,SAASmB;AAChBnB,EAAO,SAASoB;"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as m, Fragment as N, jsx as r } from "react/jsx-runtime";
|
|
3
|
+
import { useId as F, useRef as O, useEffect as f } from "react";
|
|
4
|
+
import { createPortal as j } from "react-dom";
|
|
5
|
+
import { getShadowClass as z } from "../../tokens/shadows.js";
|
|
6
|
+
import { getZIndexClass as g } from "../../tokens/z-index.js";
|
|
7
|
+
import { getAnimationClass as b } from "../../tokens/animations.js";
|
|
8
|
+
import { getSpacingClass as d } from "../../tokens/spacing.js";
|
|
9
|
+
import { useDrawerContext as D } from "./DrawerContext.js";
|
|
10
|
+
import { useFocusRestore as I } from "../../hooks/useFocusRestore.js";
|
|
11
|
+
import { useFocusTrap as R } from "../../hooks/useFocusTrap.js";
|
|
12
|
+
import { useAutoFocus as A } from "../../hooks/useAutoFocus.js";
|
|
13
|
+
import { X as S } from "lucide-react";
|
|
14
|
+
import { Button as T } from "../../primitives/Button/Button.js";
|
|
15
|
+
function _({
|
|
16
|
+
children: w,
|
|
17
|
+
className: x = "",
|
|
18
|
+
showCloseButton: c = !1,
|
|
19
|
+
title: o,
|
|
20
|
+
"aria-label": u,
|
|
21
|
+
"aria-labelledby": i
|
|
22
|
+
}) {
|
|
23
|
+
const p = F(), n = i != null ? i : o ? p : void 0, {
|
|
24
|
+
isOpen: t,
|
|
25
|
+
closeDrawer: s,
|
|
26
|
+
position: e,
|
|
27
|
+
size: v,
|
|
28
|
+
closeOnOverlayClick: y,
|
|
29
|
+
closeOnEscape: h
|
|
30
|
+
} = D(), a = O(null);
|
|
31
|
+
if (I(t), R(a, t), A(a, t), f(() => {
|
|
32
|
+
if (t && h) {
|
|
33
|
+
const l = (E) => {
|
|
34
|
+
E.key === "Escape" && s();
|
|
35
|
+
};
|
|
36
|
+
return document.addEventListener("keydown", l), () => document.removeEventListener("keydown", l);
|
|
37
|
+
}
|
|
38
|
+
}, [t, h, s]), f(() => {
|
|
39
|
+
if (t)
|
|
40
|
+
return document.body.style.overflow = "hidden", () => {
|
|
41
|
+
document.body.style.overflow = "";
|
|
42
|
+
};
|
|
43
|
+
}, [t]), f(() => {
|
|
44
|
+
}, [t, o, u, n]), !t) return null;
|
|
45
|
+
const C = {
|
|
46
|
+
sm: e === "left" || e === "right" ? "w-64" : "h-64",
|
|
47
|
+
md: e === "left" || e === "right" ? "w-96" : "h-96",
|
|
48
|
+
lg: e === "left" || e === "right" ? "w-[32rem]" : "h-[32rem]",
|
|
49
|
+
xl: e === "left" || e === "right" ? "w-[42rem]" : "h-[42rem]",
|
|
50
|
+
full: e === "left" || e === "right" ? "w-full" : "h-full"
|
|
51
|
+
}, $ = {
|
|
52
|
+
left: "left-0 top-0 bottom-0",
|
|
53
|
+
right: "right-0 top-0 bottom-0",
|
|
54
|
+
top: "top-0 left-0 right-0",
|
|
55
|
+
bottom: "bottom-0 left-0 right-0"
|
|
56
|
+
}, k = /* @__PURE__ */ m(N, { children: [
|
|
57
|
+
/* @__PURE__ */ r(
|
|
58
|
+
"div",
|
|
59
|
+
{
|
|
60
|
+
className: `
|
|
61
|
+
fixed
|
|
62
|
+
inset-0
|
|
63
|
+
bg-scrim
|
|
64
|
+
${g("modal")}
|
|
65
|
+
${b("base")}
|
|
66
|
+
${t ? "opacity-100" : "opacity-0"}
|
|
67
|
+
`,
|
|
68
|
+
onClick: y ? s : void 0,
|
|
69
|
+
"aria-hidden": "true"
|
|
70
|
+
}
|
|
71
|
+
),
|
|
72
|
+
/* @__PURE__ */ m(
|
|
73
|
+
"div",
|
|
74
|
+
{
|
|
75
|
+
ref: a,
|
|
76
|
+
className: `
|
|
77
|
+
fixed
|
|
78
|
+
${$[e]}
|
|
79
|
+
${C[v]}
|
|
80
|
+
${e === "left" || e === "right" ? "max-w-[90vw]" : "max-h-[90vh]"}
|
|
81
|
+
bg-surface-overlay
|
|
82
|
+
${z("xl")}
|
|
83
|
+
${g("modal")}
|
|
84
|
+
${b("base")}
|
|
85
|
+
flex
|
|
86
|
+
flex-col
|
|
87
|
+
${x}
|
|
88
|
+
`,
|
|
89
|
+
role: "dialog",
|
|
90
|
+
"aria-modal": "true",
|
|
91
|
+
"aria-labelledby": n,
|
|
92
|
+
"aria-label": n ? void 0 : u,
|
|
93
|
+
onClick: (l) => l.stopPropagation(),
|
|
94
|
+
children: [
|
|
95
|
+
(o || c) && /* @__PURE__ */ m(
|
|
96
|
+
"div",
|
|
97
|
+
{
|
|
98
|
+
className: `
|
|
99
|
+
flex
|
|
100
|
+
items-center
|
|
101
|
+
justify-between
|
|
102
|
+
${d("base", "px")}
|
|
103
|
+
${d("md", "py")}
|
|
104
|
+
border-b
|
|
105
|
+
border-line-default
|
|
106
|
+
`,
|
|
107
|
+
children: [
|
|
108
|
+
o ? /* @__PURE__ */ r(
|
|
109
|
+
"h2",
|
|
110
|
+
{
|
|
111
|
+
id: p,
|
|
112
|
+
className: "text-lg font-semibold text-fg-primary",
|
|
113
|
+
children: o
|
|
114
|
+
}
|
|
115
|
+
) : /* @__PURE__ */ r("span", {}),
|
|
116
|
+
c && /* @__PURE__ */ r(
|
|
117
|
+
T,
|
|
118
|
+
{
|
|
119
|
+
variant: "ghost",
|
|
120
|
+
size: "sm",
|
|
121
|
+
onClick: s,
|
|
122
|
+
className: `h-auto ${d("xs", "p")}`,
|
|
123
|
+
"aria-label": "Close drawer",
|
|
124
|
+
children: /* @__PURE__ */ r(S, { className: "h-4 w-4" })
|
|
125
|
+
}
|
|
126
|
+
)
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
),
|
|
130
|
+
w
|
|
131
|
+
]
|
|
132
|
+
}
|
|
133
|
+
)
|
|
134
|
+
] });
|
|
135
|
+
return typeof window != "undefined" ? j(k, document.body) : null;
|
|
136
|
+
}
|
|
137
|
+
export {
|
|
138
|
+
_ as default
|
|
139
|
+
};
|
|
140
|
+
//# sourceMappingURL=DrawerContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DrawerContent.js","sources":["../../../../../src/ui/components/Drawer/DrawerContent.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useId, useRef, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { getShadowClass } from \"../../tokens/shadows\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\nimport { getAnimationClass } from \"../../tokens/animations\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { useDrawerContext } from \"./DrawerContext\";\nimport { useFocusRestore } from \"../../hooks/useFocusRestore\";\nimport { useFocusTrap } from \"../../hooks/useFocusTrap\";\nimport { useAutoFocus } from \"../../hooks/useAutoFocus\";\nimport { X } from \"lucide-react\";\nimport { Button } from \"../../primitives\";\n\nexport interface DrawerContentProps {\n children: ReactNode;\n className?: string;\n showCloseButton?: boolean;\n /**\n * Visible title rendered as a heading at the top of the drawer AND\n * wired as the dialog's accessible name via `aria-labelledby`. Use\n * this for the canonical case (\"the drawer has a title\").\n */\n title?: string;\n /**\n * Invisible accessible name. Use when the drawer has no visible\n * title (e.g. a content-only side panel). One of `title`,\n * `aria-label`, or `aria-labelledby` MUST be present — without any,\n * `role=\"dialog\"` has no accessible name and axe `aria-dialog-name`\n * (serious) flags it. A dev-only warning fires when all three are\n * missing.\n */\n \"aria-label\"?: string;\n /**\n * Override path: point at an id the consumer manages externally\n * (typically a heading inside a `<DrawerHeader>` they laid out\n * themselves). Takes precedence over `title` (which would otherwise\n * generate its own id).\n */\n \"aria-labelledby\"?: string;\n}\n\n/**\n * DrawerContent Component\n *\n * The main content container for the drawer.\n * Renders in a portal with overlay.\n *\n * Accessible name — one of three paths:\n * 1. `title=\"...\"` → auto-renders a heading at the top and wires\n * `aria-labelledby` to it.\n * 2. `aria-label=\"...\"` → invisible name on the dialog.\n * 3. `aria-labelledby=\"external-id\"` → consumer-managed id (typically\n * a heading they place inside `<DrawerHeader>`).\n *\n * If all three are absent, the dialog has no accessible name —\n * a dev-only `console.warn` fires.\n */\nexport default function DrawerContent({\n children,\n className = \"\",\n showCloseButton = false,\n title,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledByProp,\n}: DrawerContentProps) {\n const autoTitleId = useId();\n // Precedence: explicit aria-labelledby > auto-generated from title.\n const resolvedLabelledBy =\n ariaLabelledByProp ?? (title ? autoTitleId : undefined);\n const {\n isOpen,\n closeDrawer,\n position,\n size,\n closeOnOverlayClick,\n closeOnEscape,\n } = useDrawerContext();\n\n // Modal focus contract: trap + auto-focus + restore. The drawer ships\n // role=\"dialog\" aria-modal=\"true\" — WAI-ARIA's modal pattern requires\n // focus to enter on open, cycle within the surface while open, and\n // return to the opening element on close. Prior to Phase 3 PR 2 the\n // drawer declared the role without honouring any of these — a real\n // WCAG 2.4.3 gap. The three hooks compose deliberately:\n // - useFocusRestore snapshots document.activeElement on the rising\n // edge (before useAutoFocus moves focus inside) and restores on\n // the falling edge.\n // - useFocusTrap cycles Tab/Shift+Tab within contentRef and pulls\n // errant focus back inside.\n // - useAutoFocus moves focus to the first focusable child (or the\n // panel itself, with tabindex=-1) on the rising edge, deferred\n // via setTimeout(0) to run after React's commit.\n const contentRef = useRef<HTMLDivElement>(null);\n useFocusRestore(isOpen);\n useFocusTrap(contentRef, isOpen);\n useAutoFocus(contentRef, isOpen);\n\n // Close on escape\n useEffect(() => {\n if (isOpen && closeOnEscape) {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n closeDrawer();\n }\n };\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }\n }, [isOpen, closeOnEscape, closeDrawer]);\n\n // Prevent body scroll when open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = \"\";\n };\n }\n }, [isOpen]);\n\n // Dev-only accessible-name warning: a `role=\"dialog\"` without\n // aria-label/aria-labelledby fails axe `aria-dialog-name`. The fix is\n // structural — supply one of the three paths documented on the props\n // — and the warning fires when none of them are present. Same shape\n // as the Textarea 6c guard; the Drawer is a public dialog surface,\n // a silent nameless `role=\"dialog\"` is the defect we close here.\n useEffect(() => {\n if (!import.meta.env.DEV) return;\n if (!isOpen) return;\n if (title || ariaLabel || resolvedLabelledBy) return;\n console.warn(\n '[DrawerContent] Missing accessible name. Provide `title`, `aria-label`, or `aria-labelledby` — `role=\"dialog\"` without a name fails axe `aria-dialog-name`.',\n );\n }, [isOpen, title, ariaLabel, resolvedLabelledBy]);\n\n if (!isOpen) return null;\n\n const sizeClasses = {\n sm: position === \"left\" || position === \"right\" ? \"w-64\" : \"h-64\",\n md: position === \"left\" || position === \"right\" ? \"w-96\" : \"h-96\",\n lg: position === \"left\" || position === \"right\" ? \"w-[32rem]\" : \"h-[32rem]\",\n xl: position === \"left\" || position === \"right\" ? \"w-[42rem]\" : \"h-[42rem]\",\n full: position === \"left\" || position === \"right\" ? \"w-full\" : \"h-full\",\n };\n\n const positionClasses = {\n left: \"left-0 top-0 bottom-0\",\n right: \"right-0 top-0 bottom-0\",\n top: \"top-0 left-0 right-0\",\n bottom: \"bottom-0 left-0 right-0\",\n };\n\n const drawerContent = (\n <>\n {/* Overlay */}\n <div\n className={`\n fixed\n inset-0\n bg-scrim\n ${getZIndexClass(\"modal\")}\n ${getAnimationClass(\"base\")}\n ${isOpen ? \"opacity-100\" : \"opacity-0\"}\n `}\n onClick={closeOnOverlayClick ? closeDrawer : undefined}\n aria-hidden=\"true\"\n />\n\n {/* Drawer */}\n <div\n ref={contentRef}\n className={`\n fixed\n ${positionClasses[position]}\n ${sizeClasses[size]}\n ${position === \"left\" || position === \"right\" ? \"max-w-[90vw]\" : \"max-h-[90vh]\"}\n bg-surface-overlay\n ${getShadowClass(\"xl\")}\n ${getZIndexClass(\"modal\")}\n ${getAnimationClass(\"base\")}\n flex\n flex-col\n ${className}\n `}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={resolvedLabelledBy}\n aria-label={resolvedLabelledBy ? undefined : ariaLabel}\n onClick={(e) => e.stopPropagation()}\n >\n {(title || showCloseButton) && (\n <div\n className={`\n flex\n items-center\n justify-between\n ${getSpacingClass(\"base\", \"px\")}\n ${getSpacingClass(\"md\", \"py\")}\n border-b\n border-line-default\n `}\n >\n {title ? (\n <h2\n id={autoTitleId}\n className=\"text-lg font-semibold text-fg-primary\"\n >\n {title}\n </h2>\n ) : (\n <span />\n )}\n {showCloseButton && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={closeDrawer}\n className={`h-auto ${getSpacingClass(\"xs\", \"p\")}`}\n aria-label=\"Close drawer\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n )}\n {children}\n </div>\n </>\n );\n\n return typeof window !== \"undefined\"\n ? createPortal(drawerContent, document.body)\n : null;\n}\n"],"names":["DrawerContent","children","className","showCloseButton","title","ariaLabel","ariaLabelledByProp","autoTitleId","useId","resolvedLabelledBy","isOpen","closeDrawer","position","size","closeOnOverlayClick","closeOnEscape","useDrawerContext","contentRef","useRef","useFocusRestore","useFocusTrap","useAutoFocus","useEffect","handleEscape","e","sizeClasses","positionClasses","drawerContent","jsxs","Fragment","jsx","getZIndexClass","getAnimationClass","getShadowClass","getSpacingClass","Button","X","createPortal"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
3
|
+
import { useContext as n, createContext as i } from "react";
|
|
4
|
+
const e = i(void 0);
|
|
5
|
+
function c({
|
|
6
|
+
children: r,
|
|
7
|
+
value: t
|
|
8
|
+
}) {
|
|
9
|
+
return /* @__PURE__ */ o(e.Provider, { value: t, children: r });
|
|
10
|
+
}
|
|
11
|
+
function w() {
|
|
12
|
+
const r = n(e);
|
|
13
|
+
if (!r)
|
|
14
|
+
throw new Error("Drawer components must be used within Drawer");
|
|
15
|
+
return r;
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
c as DrawerProvider,
|
|
19
|
+
w as useDrawerContext
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=DrawerContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DrawerContext.js","sources":["../../../../../src/ui/components/Drawer/DrawerContext.tsx"],"sourcesContent":["\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useContext, type ReactNode } from \"react\";\nimport type { DrawerPosition } from \"./Drawer\";\n\nexport interface DrawerContextValue {\n isOpen: boolean;\n closeDrawer: () => void;\n position: DrawerPosition;\n size: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n closeOnOverlayClick: boolean;\n closeOnEscape: boolean;\n}\n\nconst DrawerContext = createContext<DrawerContextValue | undefined>(undefined);\n\nexport function DrawerProvider({\n children,\n value,\n}: {\n children: ReactNode;\n value: DrawerContextValue;\n}) {\n return (\n <DrawerContext.Provider value={value}>{children}</DrawerContext.Provider>\n );\n}\n\nexport function useDrawerContext() {\n const context = useContext(DrawerContext);\n if (!context) {\n throw new Error(\"Drawer components must be used within Drawer\");\n }\n return context;\n}\n"],"names":["DrawerContext","createContext","DrawerProvider","children","value","jsx","useDrawerContext","context","useContext"],"mappings":";;;AAeA,MAAMA,IAAgBC,EAA8C,MAAS;AAEtE,SAASC,EAAe;AAAA,EAC7B,UAAAC;AAAA,EACA,OAAAC;AACF,GAGG;AACD,SACE,gBAAAC,EAACL,EAAc,UAAd,EAAuB,OAAAI,GAAe,UAAAD,EAAA,CAAS;AAEpD;AAEO,SAASG,IAAmB;AACjC,QAAMC,IAAUC,EAAWR,CAAa;AACxC,MAAI,CAACO;AACH,UAAM,IAAI,MAAM,8CAA8C;AAEhE,SAAOA;AACT;"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var u = Object.defineProperty, c = Object.defineProperties;
|
|
3
|
+
var g = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var a = Object.getOwnPropertySymbols;
|
|
5
|
+
var l = Object.prototype.hasOwnProperty, f = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var i = (e, r, t) => r in e ? u(e, r, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[r] = t, n = (e, r) => {
|
|
7
|
+
for (var t in r || (r = {}))
|
|
8
|
+
l.call(r, t) && i(e, t, r[t]);
|
|
9
|
+
if (a)
|
|
10
|
+
for (var t of a(r))
|
|
11
|
+
f.call(r, t) && i(e, t, r[t]);
|
|
12
|
+
return e;
|
|
13
|
+
}, d = (e, r) => c(e, g(r));
|
|
14
|
+
var m = (e, r) => {
|
|
15
|
+
var t = {};
|
|
16
|
+
for (var o in e)
|
|
17
|
+
l.call(e, o) && r.indexOf(o) < 0 && (t[o] = e[o]);
|
|
18
|
+
if (e != null && a)
|
|
19
|
+
for (var o of a(e))
|
|
20
|
+
r.indexOf(o) < 0 && f.call(e, o) && (t[o] = e[o]);
|
|
21
|
+
return t;
|
|
22
|
+
};
|
|
23
|
+
import { jsx as x } from "react/jsx-runtime";
|
|
24
|
+
import { getSpacingClass as p } from "../../tokens/spacing.js";
|
|
25
|
+
function v(o) {
|
|
26
|
+
var s = o, {
|
|
27
|
+
children: e,
|
|
28
|
+
className: r = ""
|
|
29
|
+
} = s, t = m(s, [
|
|
30
|
+
"children",
|
|
31
|
+
"className"
|
|
32
|
+
]);
|
|
33
|
+
return /* @__PURE__ */ x(
|
|
34
|
+
"div",
|
|
35
|
+
d(n({
|
|
36
|
+
className: `
|
|
37
|
+
${p("lg", "p")}
|
|
38
|
+
border-t
|
|
39
|
+
border-line-default
|
|
40
|
+
flex
|
|
41
|
+
justify-end
|
|
42
|
+
${p("sm", "gap")}
|
|
43
|
+
${r}
|
|
44
|
+
`
|
|
45
|
+
}, t), {
|
|
46
|
+
children: e
|
|
47
|
+
})
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
export {
|
|
51
|
+
v as default
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=DrawerFooter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DrawerFooter.js","sources":["../../../../../src/ui/components/Drawer/DrawerFooter.tsx"],"sourcesContent":["\"use client\";\n\nimport { type ReactNode, type HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface DrawerFooterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\n/**\n * DrawerFooter Component\n *\n * Footer section for drawer content, typically contains action buttons.\n *\n * @example\n * ```tsx\n * <DrawerFooter>\n * <Button>Save</Button>\n * <Button variant=\"outline\">Cancel</Button>\n * </DrawerFooter>\n * ```\n */\nexport default function DrawerFooter({\n children,\n className = \"\",\n ...props\n}: DrawerFooterProps) {\n return (\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n border-t\n border-line-default\n flex\n justify-end\n ${getSpacingClass(\"sm\", \"gap\")}\n ${className}\n `}\n {...props}\n >\n {children}\n </div>\n );\n}\n"],"names":["DrawerFooter","_a","_b","children","className","props","__objRest","jsx","__spreadProps","__spreadValues","getSpacingClass"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAsBA,SAAwBA,EAAaC,GAIf;AAJe,MAAAC,IAAAD,GACnC;AAAA,cAAAE;AAAA,IACA,WAAAC,IAAY;AAAA,MAFuBF,GAGhCG,IAAAC,EAHgCJ,GAGhC;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAK;AAAA,IAAC;AAAA,IAAAC,EAAAC,EAAA;AAAA,MACC,WAAW;AAAA,UACPC,EAAgB,MAAM,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,UAK1BA,EAAgB,MAAM,KAAK,CAAC;AAAA,UAC5BN,CAAS;AAAA;AAAA,OAETC,IAVL;AAAA,MAYE,UAAAF;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var p = Object.defineProperty, u = Object.defineProperties;
|
|
3
|
+
var c = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var o = Object.getOwnPropertySymbols;
|
|
5
|
+
var s = Object.prototype.hasOwnProperty, d = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var l = (e, r, a) => r in e ? p(e, r, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[r] = a, n = (e, r) => {
|
|
7
|
+
for (var a in r || (r = {}))
|
|
8
|
+
s.call(r, a) && l(e, a, r[a]);
|
|
9
|
+
if (o)
|
|
10
|
+
for (var a of o(r))
|
|
11
|
+
d.call(r, a) && l(e, a, r[a]);
|
|
12
|
+
return e;
|
|
13
|
+
}, f = (e, r) => u(e, c(r));
|
|
14
|
+
var m = (e, r) => {
|
|
15
|
+
var a = {};
|
|
16
|
+
for (var t in e)
|
|
17
|
+
s.call(e, t) && r.indexOf(t) < 0 && (a[t] = e[t]);
|
|
18
|
+
if (e != null && o)
|
|
19
|
+
for (var t of o(e))
|
|
20
|
+
r.indexOf(t) < 0 && d.call(e, t) && (a[t] = e[t]);
|
|
21
|
+
return a;
|
|
22
|
+
};
|
|
23
|
+
import { jsx as b } from "react/jsx-runtime";
|
|
24
|
+
import { getSpacingClass as g } from "../../tokens/spacing.js";
|
|
25
|
+
function v(t) {
|
|
26
|
+
var i = t, {
|
|
27
|
+
children: e,
|
|
28
|
+
className: r = ""
|
|
29
|
+
} = i, a = m(i, [
|
|
30
|
+
"children",
|
|
31
|
+
"className"
|
|
32
|
+
]);
|
|
33
|
+
return /* @__PURE__ */ b(
|
|
34
|
+
"div",
|
|
35
|
+
f(n({
|
|
36
|
+
className: `
|
|
37
|
+
${g("lg", "p")}
|
|
38
|
+
border-b
|
|
39
|
+
border-line-default
|
|
40
|
+
${r}
|
|
41
|
+
`
|
|
42
|
+
}, a), {
|
|
43
|
+
children: e
|
|
44
|
+
})
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
export {
|
|
48
|
+
v as default
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=DrawerHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DrawerHeader.js","sources":["../../../../../src/ui/components/Drawer/DrawerHeader.tsx"],"sourcesContent":["\"use client\";\n\nimport { type ReactNode, type HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface DrawerHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\n/**\n * DrawerHeader Component\n *\n * Header section for drawer content.\n *\n * @example\n * ```tsx\n * <DrawerHeader>\n * <h2>Drawer Title</h2>\n * </DrawerHeader>\n * ```\n */\nexport default function DrawerHeader({\n children,\n className = \"\",\n ...props\n}: DrawerHeaderProps) {\n return (\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n border-b\n border-line-default\n ${className}\n `}\n {...props}\n >\n {children}\n </div>\n );\n}\n"],"names":["DrawerHeader","_a","_b","children","className","props","__objRest","jsx","__spreadProps","__spreadValues","getSpacingClass"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAqBA,SAAwBA,EAAaC,GAIf;AAJe,MAAAC,IAAAD,GACnC;AAAA,cAAAE;AAAA,IACA,WAAAC,IAAY;AAAA,MAFuBF,GAGhCG,IAAAC,EAHgCJ,GAGhC;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAK;AAAA,IAAC;AAAA,IAAAC,EAAAC,EAAA;AAAA,MACC,WAAW;AAAA,UACPC,EAAgB,MAAM,GAAG,CAAC;AAAA;AAAA;AAAA,UAG1BN,CAAS;AAAA;AAAA,OAETC,IAPL;AAAA,MASE,UAAAF;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var Q = Object.defineProperty, X = Object.defineProperties;
|
|
3
|
+
var Y = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var x = Object.getOwnPropertySymbols;
|
|
5
|
+
var L = Object.prototype.hasOwnProperty, j = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var z = (n, r, s) => r in n ? Q(n, r, { enumerable: !0, configurable: !0, writable: !0, value: s }) : n[r] = s, H = (n, r) => {
|
|
7
|
+
for (var s in r || (r = {}))
|
|
8
|
+
L.call(r, s) && z(n, s, r[s]);
|
|
9
|
+
if (x)
|
|
10
|
+
for (var s of x(r))
|
|
11
|
+
j.call(r, s) && z(n, s, r[s]);
|
|
12
|
+
return n;
|
|
13
|
+
}, F = (n, r) => X(n, Y(r));
|
|
14
|
+
var P = (n, r) => {
|
|
15
|
+
var s = {};
|
|
16
|
+
for (var l in n)
|
|
17
|
+
L.call(n, l) && r.indexOf(l) < 0 && (s[l] = n[l]);
|
|
18
|
+
if (n != null && x)
|
|
19
|
+
for (var l of x(n))
|
|
20
|
+
r.indexOf(l) < 0 && j.call(n, l) && (s[l] = n[l]);
|
|
21
|
+
return s;
|
|
22
|
+
};
|
|
23
|
+
import { jsx as v, jsxs as U, Fragment as Z } from "react/jsx-runtime";
|
|
24
|
+
import V, { useState as W, useRef as k, useId as ee, useEffect as _ } from "react";
|
|
25
|
+
import { mergeRefs as ne } from "../../utils/mergeRefs.js";
|
|
26
|
+
import { cn as f } from "../../utils/cn.js";
|
|
27
|
+
import { getTypographySize as re } from "../../tokens/typography.js";
|
|
28
|
+
import { getSpacingClass as w } from "../../tokens/spacing.js";
|
|
29
|
+
import { getShadowClass as te } from "../../tokens/shadows.js";
|
|
30
|
+
import { getRadiusClass as ae } from "../../tokens/radius.js";
|
|
31
|
+
function be(oe) {
|
|
32
|
+
var C = oe, {
|
|
33
|
+
trigger: n,
|
|
34
|
+
items: r,
|
|
35
|
+
align: s = "right",
|
|
36
|
+
variant: l = "default",
|
|
37
|
+
className: q = "",
|
|
38
|
+
"aria-label": D
|
|
39
|
+
} = C, B = P(C, [
|
|
40
|
+
"trigger",
|
|
41
|
+
"items",
|
|
42
|
+
"align",
|
|
43
|
+
"variant",
|
|
44
|
+
"className",
|
|
45
|
+
"aria-label"
|
|
46
|
+
]);
|
|
47
|
+
const [c, p] = W(!1), [u, d] = W(-1), y = k(null), g = k(null), E = k(null), m = k([]), R = ee(), b = `dropdown-menu-${R}`, I = `dropdown-trigger-${R}`;
|
|
48
|
+
_(() => {
|
|
49
|
+
const e = (t) => {
|
|
50
|
+
y.current && !y.current.contains(t.target) && (p(!1), d(-1));
|
|
51
|
+
};
|
|
52
|
+
return c && (document.addEventListener("mousedown", e), setTimeout(() => {
|
|
53
|
+
var a;
|
|
54
|
+
const t = r.findIndex((i) => !i.disabled);
|
|
55
|
+
t >= 0 && (d(t), (a = m.current[t]) == null || a.focus());
|
|
56
|
+
}, 0)), () => {
|
|
57
|
+
document.removeEventListener("mousedown", e);
|
|
58
|
+
};
|
|
59
|
+
}, [c, r]), _(() => {
|
|
60
|
+
if (!c) return;
|
|
61
|
+
const e = (a) => {
|
|
62
|
+
var N, O, S, A;
|
|
63
|
+
const i = r.map((o, M) => ({ item: o, index: M })).filter(({ item: o }) => !o.disabled), h = i.findIndex(
|
|
64
|
+
({ index: o }) => o === u
|
|
65
|
+
);
|
|
66
|
+
switch (a.key) {
|
|
67
|
+
case "ArrowDown": {
|
|
68
|
+
a.preventDefault();
|
|
69
|
+
const o = h < i.length - 1 ? i[h + 1].index : i[0].index;
|
|
70
|
+
d(o), (N = m.current[o]) == null || N.focus();
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case "ArrowUp": {
|
|
74
|
+
a.preventDefault();
|
|
75
|
+
const o = h > 0 ? i[h - 1].index : i[i.length - 1].index;
|
|
76
|
+
d(o), (O = m.current[o]) == null || O.focus();
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
case "Home": {
|
|
80
|
+
a.preventDefault();
|
|
81
|
+
const o = i[0].index;
|
|
82
|
+
d(o), (S = m.current[o]) == null || S.focus();
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
case "End": {
|
|
86
|
+
a.preventDefault();
|
|
87
|
+
const o = i[i.length - 1].index;
|
|
88
|
+
d(o), (A = m.current[o]) == null || A.focus();
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
case "Enter":
|
|
92
|
+
case " ":
|
|
93
|
+
a.preventDefault(), u >= 0 && !r[u].disabled && K(r[u]);
|
|
94
|
+
break;
|
|
95
|
+
case "Escape":
|
|
96
|
+
a.preventDefault(), p(!1), d(-1), setTimeout(() => {
|
|
97
|
+
var o;
|
|
98
|
+
(o = g.current) == null || o.focus();
|
|
99
|
+
}, 0);
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
}, t = E.current;
|
|
103
|
+
if (t) {
|
|
104
|
+
const a = e;
|
|
105
|
+
return t.addEventListener("keydown", a), () => {
|
|
106
|
+
t.removeEventListener("keydown", a);
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}, [c, u, r]);
|
|
110
|
+
const K = (e) => {
|
|
111
|
+
e.disabled || (e.onClick(), p(!1), d(-1), setTimeout(() => {
|
|
112
|
+
var t;
|
|
113
|
+
(t = g.current) == null || t.focus();
|
|
114
|
+
}, 0));
|
|
115
|
+
}, T = () => {
|
|
116
|
+
p(!c), d(-1);
|
|
117
|
+
}, $ = (e) => {
|
|
118
|
+
(e.key === "Enter" || e.key === " " || e.key === "ArrowDown") && (e.preventDefault(), p(!0));
|
|
119
|
+
}, G = s === "right" ? "right-0" : "left-0", J = V.isValidElement(n) ? V.cloneElement(n, {
|
|
120
|
+
onClick: (e) => {
|
|
121
|
+
var t, a;
|
|
122
|
+
T(), (a = (t = n.props).onClick) == null || a.call(t, e);
|
|
123
|
+
},
|
|
124
|
+
onKeyDown: (e) => {
|
|
125
|
+
var t, a;
|
|
126
|
+
$(e), (a = (t = n.props).onKeyDown) == null || a.call(t, e);
|
|
127
|
+
},
|
|
128
|
+
"aria-haspopup": "menu",
|
|
129
|
+
"aria-expanded": c,
|
|
130
|
+
"aria-controls": b,
|
|
131
|
+
"aria-label": D || n.props["aria-label"] || "Open menu",
|
|
132
|
+
id: I,
|
|
133
|
+
ref: ne(g, n.props.ref)
|
|
134
|
+
}) : /* @__PURE__ */ v(
|
|
135
|
+
"div",
|
|
136
|
+
{
|
|
137
|
+
ref: (e) => {
|
|
138
|
+
g.current = e;
|
|
139
|
+
},
|
|
140
|
+
onClick: T,
|
|
141
|
+
onKeyDown: $,
|
|
142
|
+
role: "button",
|
|
143
|
+
tabIndex: 0,
|
|
144
|
+
"aria-haspopup": "menu",
|
|
145
|
+
"aria-expanded": c,
|
|
146
|
+
"aria-controls": b,
|
|
147
|
+
"aria-label": D || "Open menu",
|
|
148
|
+
id: I,
|
|
149
|
+
children: n
|
|
150
|
+
}
|
|
151
|
+
);
|
|
152
|
+
return /* @__PURE__ */ U(
|
|
153
|
+
"div",
|
|
154
|
+
F(H({
|
|
155
|
+
className: f("relative", "inline-block", q),
|
|
156
|
+
ref: y
|
|
157
|
+
}, B), {
|
|
158
|
+
children: [
|
|
159
|
+
J,
|
|
160
|
+
c && /* @__PURE__ */ U(Z, { children: [
|
|
161
|
+
/* @__PURE__ */ v(
|
|
162
|
+
"div",
|
|
163
|
+
{
|
|
164
|
+
className: f("fixed", "inset-0", "z-10"),
|
|
165
|
+
onClick: () => {
|
|
166
|
+
p(!1), d(-1);
|
|
167
|
+
},
|
|
168
|
+
"aria-hidden": "true"
|
|
169
|
+
}
|
|
170
|
+
),
|
|
171
|
+
/* @__PURE__ */ v(
|
|
172
|
+
"div",
|
|
173
|
+
{
|
|
174
|
+
ref: E,
|
|
175
|
+
id: b,
|
|
176
|
+
className: f(
|
|
177
|
+
"absolute",
|
|
178
|
+
// micro-z: dropdown content above its own backdrop
|
|
179
|
+
"z-20",
|
|
180
|
+
w("sm", "mt"),
|
|
181
|
+
"w-48",
|
|
182
|
+
// Fixed width for dropdown menu - justified as layout constraint
|
|
183
|
+
ae("md"),
|
|
184
|
+
te("lg"),
|
|
185
|
+
"bg-surface-overlay",
|
|
186
|
+
"ring-1",
|
|
187
|
+
"ring-line-strong",
|
|
188
|
+
"ring-opacity-5",
|
|
189
|
+
G
|
|
190
|
+
),
|
|
191
|
+
role: "menu",
|
|
192
|
+
"aria-orientation": "vertical",
|
|
193
|
+
"aria-labelledby": I,
|
|
194
|
+
"aria-activedescendant": u >= 0 ? `${b}-item-${u}` : void 0,
|
|
195
|
+
children: /* @__PURE__ */ v("div", { className: f(w("xs", "py")), role: "none", children: r.map((e, t) => {
|
|
196
|
+
const a = f(
|
|
197
|
+
"block",
|
|
198
|
+
w("base", "px"),
|
|
199
|
+
w("xs", "py"),
|
|
200
|
+
re("bodySmall"),
|
|
201
|
+
"w-full",
|
|
202
|
+
"text-left",
|
|
203
|
+
"focus:outline-none",
|
|
204
|
+
e.disabled ? f("text-fg-disabled", "cursor-not-allowed", "opacity-50") : e.variant === "danger" ? f(
|
|
205
|
+
"text-error-dark",
|
|
206
|
+
"hover:bg-error-bg-emphasis",
|
|
207
|
+
"focus:bg-error-bg-emphasis"
|
|
208
|
+
) : f(
|
|
209
|
+
"text-fg-primary",
|
|
210
|
+
"hover:bg-surface-hover",
|
|
211
|
+
"focus:bg-surface-hover"
|
|
212
|
+
)
|
|
213
|
+
);
|
|
214
|
+
return /* @__PURE__ */ v(
|
|
215
|
+
"button",
|
|
216
|
+
{
|
|
217
|
+
id: `${b}-item-${t}`,
|
|
218
|
+
ref: (i) => {
|
|
219
|
+
m.current[t] = i;
|
|
220
|
+
},
|
|
221
|
+
type: "button",
|
|
222
|
+
className: a,
|
|
223
|
+
onClick: () => K(e),
|
|
224
|
+
disabled: e.disabled,
|
|
225
|
+
role: "menuitem",
|
|
226
|
+
"aria-disabled": e.disabled,
|
|
227
|
+
tabIndex: e.disabled ? -1 : u === t ? 0 : -1,
|
|
228
|
+
children: e.label
|
|
229
|
+
},
|
|
230
|
+
t
|
|
231
|
+
);
|
|
232
|
+
}) })
|
|
233
|
+
}
|
|
234
|
+
)
|
|
235
|
+
] })
|
|
236
|
+
]
|
|
237
|
+
})
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
export {
|
|
241
|
+
be as default
|
|
242
|
+
};
|
|
243
|
+
//# sourceMappingURL=Dropdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dropdown.js","sources":["../../../../../src/ui/components/Dropdown/Dropdown.tsx"],"sourcesContent":["\"use client\";\n\nimport type { HTMLAttributes, ReactNode, KeyboardEvent } from \"react\";\nimport React, { useState, useRef, useEffect, useId } from \"react\";\nimport { cn, mergeRefs } from \"../../utils\";\nimport {\n getRadiusClass,\n getSpacingClass,\n getTypographySize,\n getShadowClass,\n} from \"../../tokens\";\n\nexport interface DropdownItem {\n label: string;\n onClick: () => void;\n disabled?: boolean;\n variant?: \"default\" | \"danger\";\n}\n\n/**\n * Shape of the props the trigger element accepts when cloned. Limits\n * what cloneElement is allowed to override and what `props.ref` is\n * permitted to be — both essential for React 19's tighter\n * ReactElement<unknown> typing.\n */\ntype TriggerChildProps = {\n onClick?: (e: React.MouseEvent) => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n \"aria-label\"?: string;\n \"aria-haspopup\"?: React.AriaAttributes[\"aria-haspopup\"];\n \"aria-expanded\"?: React.AriaAttributes[\"aria-expanded\"];\n \"aria-controls\"?: React.AriaAttributes[\"aria-controls\"];\n id?: string;\n ref?: React.Ref<HTMLElement>;\n};\n\nexport interface DropdownProps extends HTMLAttributes<HTMLDivElement> {\n trigger: ReactNode;\n items: DropdownItem[];\n align?: \"left\" | \"right\";\n variant?: \"default\" | \"minimal\";\n \"aria-label\"?: string;\n}\n\n/**\n * Dropdown Component\n *\n * A dropdown menu component for displaying actions and options.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <Dropdown\n * trigger={<Button>Actions</Button>}\n * items={[\n * { label: \"Edit\", onClick: () => handleEdit() },\n * { label: \"Delete\", onClick: () => handleDelete(), variant: \"danger\" },\n * ]}\n * />\n * ```\n */\nexport default function Dropdown({\n trigger,\n items,\n align = \"right\",\n variant: _variant = \"default\",\n className = \"\",\n \"aria-label\": ariaLabel,\n ...props\n}: DropdownProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState<number>(-1);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n // Stable per-instance IDs. Math.random() at the call site regenerated\n // both IDs on every render, so aria-controls / aria-labelledby (which\n // pair the trigger with the menu) silently desynced across renders.\n // useId is SSR-safe and stable per component instance.\n const reactId = useId();\n const menuId = `dropdown-menu-${reactId}`;\n const triggerId = `dropdown-trigger-${reactId}`;\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n setActiveIndex(-1);\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n // Focus first item when opening\n setTimeout(() => {\n const firstEnabledIndex = items.findIndex((item) => !item.disabled);\n if (firstEnabledIndex >= 0) {\n setActiveIndex(firstEnabledIndex);\n itemRefs.current[firstEnabledIndex]?.focus();\n }\n }, 0);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpen, items]);\n\n // Keyboard navigation\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n const enabledItems = items\n .map((item, index) => ({ item, index }))\n .filter(({ item }) => !item.disabled);\n const currentEnabledIndex = enabledItems.findIndex(\n ({ index }) => index === activeIndex,\n );\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n const nextIndex =\n currentEnabledIndex < enabledItems.length - 1\n ? enabledItems[currentEnabledIndex + 1].index\n : enabledItems[0].index;\n setActiveIndex(nextIndex);\n itemRefs.current[nextIndex]?.focus();\n break;\n }\n case \"ArrowUp\": {\n e.preventDefault();\n const prevIndex =\n currentEnabledIndex > 0\n ? enabledItems[currentEnabledIndex - 1].index\n : enabledItems[enabledItems.length - 1].index;\n setActiveIndex(prevIndex);\n itemRefs.current[prevIndex]?.focus();\n break;\n }\n case \"Home\": {\n e.preventDefault();\n const firstIndex = enabledItems[0].index;\n setActiveIndex(firstIndex);\n itemRefs.current[firstIndex]?.focus();\n break;\n }\n case \"End\": {\n e.preventDefault();\n const lastIndex = enabledItems[enabledItems.length - 1].index;\n setActiveIndex(lastIndex);\n itemRefs.current[lastIndex]?.focus();\n break;\n }\n case \"Enter\":\n case \" \":\n e.preventDefault();\n if (activeIndex >= 0 && !items[activeIndex].disabled) {\n handleItemClick(items[activeIndex]);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n setIsOpen(false);\n setActiveIndex(-1);\n // Restore focus to trigger after closing\n setTimeout(() => {\n triggerRef.current?.focus();\n }, 0);\n break;\n }\n };\n\n const menuElement = menuRef.current;\n if (menuElement) {\n const typedHandleKeyDown = handleKeyDown as unknown as (e: Event) => void;\n menuElement.addEventListener(\"keydown\", typedHandleKeyDown);\n return () => {\n menuElement.removeEventListener(\"keydown\", typedHandleKeyDown);\n };\n }\n }, [isOpen, activeIndex, items]);\n\n const handleItemClick = (item: DropdownItem) => {\n if (!item.disabled) {\n item.onClick();\n setIsOpen(false);\n setActiveIndex(-1);\n // Restore focus to trigger after item selection\n setTimeout(() => {\n triggerRef.current?.focus();\n }, 0);\n }\n };\n\n const handleTriggerClick = () => {\n setIsOpen(!isOpen);\n setActiveIndex(-1);\n };\n\n const handleTriggerKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \" || e.key === \"ArrowDown\") {\n e.preventDefault();\n setIsOpen(true);\n }\n };\n\n const alignClasses = align === \"right\" ? \"right-0\" : \"left-0\";\n\n // Clone trigger to add accessibility props. Handles both Button and\n // native elements. React 19 surfaces consumer-supplied refs via\n // `child.props.ref` (no longer on the element itself), so mergeRefs\n // composes the parent's internal triggerRef with whatever the\n // consumer attached.\n const triggerWithProps = React.isValidElement<TriggerChildProps>(trigger) ? (\n React.cloneElement(trigger, {\n onClick: (e: React.MouseEvent) => {\n handleTriggerClick();\n trigger.props.onClick?.(e);\n },\n onKeyDown: (e: React.KeyboardEvent) => {\n handleTriggerKeyDown(e);\n trigger.props.onKeyDown?.(e);\n },\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": isOpen,\n \"aria-controls\": menuId,\n \"aria-label\": ariaLabel || trigger.props[\"aria-label\"] || \"Open menu\",\n id: triggerId,\n ref: mergeRefs<HTMLElement>(triggerRef, trigger.props.ref),\n })\n ) : (\n <div\n ref={(node) => {\n // Else-branch: trigger is a plain ReactNode (string/fragment/etc),\n // so we wrap it in a div. Forward the div node into the shared\n // HTMLElement-typed triggerRef via callback (RefObject is invariant\n // — direct assignment of RefObject<HTMLElement> to a HTMLDivElement\n // ref slot does not typecheck).\n triggerRef.current = node;\n }}\n onClick={handleTriggerClick}\n onKeyDown={handleTriggerKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n aria-controls={menuId}\n aria-label={ariaLabel || \"Open menu\"}\n id={triggerId}\n >\n {trigger}\n </div>\n );\n\n return (\n <div\n className={cn(\"relative\", \"inline-block\", className)}\n ref={dropdownRef}\n {...props}\n >\n {triggerWithProps}\n\n {isOpen && (\n <>\n <div\n // micro-z: dropdown click-outside backdrop internal to dropdown scope\n className={cn(\"fixed\", \"inset-0\", \"z-10\")}\n onClick={() => {\n setIsOpen(false);\n setActiveIndex(-1);\n }}\n aria-hidden=\"true\"\n />\n <div\n ref={menuRef}\n id={menuId}\n className={cn(\n \"absolute\",\n // micro-z: dropdown content above its own backdrop\n \"z-20\",\n getSpacingClass(\"sm\", \"mt\"),\n \"w-48\", // Fixed width for dropdown menu - justified as layout constraint\n getRadiusClass(\"md\"),\n getShadowClass(\"lg\"),\n \"bg-surface-overlay\",\n \"ring-1\",\n \"ring-line-strong\",\n \"ring-opacity-5\",\n alignClasses,\n )}\n role=\"menu\"\n aria-orientation=\"vertical\"\n aria-labelledby={triggerId}\n aria-activedescendant={\n activeIndex >= 0 ? `${menuId}-item-${activeIndex}` : undefined\n }\n >\n <div className={cn(getSpacingClass(\"xs\", \"py\"))} role=\"none\">\n {items.map((item, index) => {\n const itemClasses = cn(\n \"block\",\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n \"w-full\",\n \"text-left\",\n \"focus:outline-none\",\n item.disabled\n ? cn(\"text-fg-disabled\", \"cursor-not-allowed\", \"opacity-50\")\n : item.variant === \"danger\"\n ? cn(\n \"text-error-dark\",\n \"hover:bg-error-bg-emphasis\",\n \"focus:bg-error-bg-emphasis\",\n )\n : cn(\n \"text-fg-primary\",\n \"hover:bg-surface-hover\",\n \"focus:bg-surface-hover\",\n ),\n );\n\n return (\n <button\n key={index}\n id={`${menuId}-item-${index}`}\n ref={(el) => {\n itemRefs.current[index] = el;\n }}\n type=\"button\"\n className={itemClasses}\n onClick={() => handleItemClick(item)}\n disabled={item.disabled}\n role=\"menuitem\"\n aria-disabled={item.disabled}\n tabIndex={\n item.disabled ? -1 : activeIndex === index ? 0 : -1\n }\n >\n {item.label}\n </button>\n );\n })}\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n"],"names":["Dropdown","_a","_b","trigger","items","align","_variant","className","ariaLabel","props","__objRest","isOpen","setIsOpen","useState","activeIndex","setActiveIndex","dropdownRef","useRef","triggerRef","menuRef","itemRefs","reactId","useId","menuId","triggerId","useEffect","handleClickOutside","event","firstEnabledIndex","item","handleKeyDown","e","enabledItems","index","currentEnabledIndex","nextIndex","prevIndex","firstIndex","_c","lastIndex","_d","handleItemClick","menuElement","typedHandleKeyDown","handleTriggerClick","handleTriggerKeyDown","alignClasses","triggerWithProps","React","mergeRefs","jsx","node","jsxs","__spreadProps","__spreadValues","cn","Fragment","getSpacingClass","getRadiusClass","getShadowClass","itemClasses","getTypographySize","el"],"mappings":"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"}
|