@fabio.caffarello/react-design-system 3.8.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 +2 -1
- 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/index.cjs +37 -37
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1052 -1053
- package/dist/index.js.map +1 -1
- package/dist/server/index.cjs +23 -23
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.js +858 -1193
- package/dist/server/index.js.map +1 -1
- package/package.json +9 -2
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
3
|
+
import { getSpacingClass as n } from "../../../tokens/spacing.js";
|
|
4
|
+
import { cn as t } from "../../../utils/cn.js";
|
|
5
|
+
function s({
|
|
6
|
+
children: e,
|
|
7
|
+
className: a
|
|
8
|
+
}) {
|
|
9
|
+
return /* @__PURE__ */ i(
|
|
10
|
+
"nav",
|
|
11
|
+
{
|
|
12
|
+
className: t(
|
|
13
|
+
"flex-1 flex items-center justify-center",
|
|
14
|
+
n("base", "gap"),
|
|
15
|
+
"hidden md:flex",
|
|
16
|
+
// Hidden on mobile, visible on desktop
|
|
17
|
+
a
|
|
18
|
+
),
|
|
19
|
+
"aria-label": "Main navigation",
|
|
20
|
+
children: e
|
|
21
|
+
}
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
s as HeaderNavigation
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=HeaderNavigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeaderNavigation.js","sources":["../../../../../../src/ui/components/Header/components/HeaderNavigation.tsx"],"sourcesContent":["/**\n * HeaderNavigation Component\n *\n * Navigation slot component for Header.\n *\n * @see EPIC-002: Header Component (Molecule)\n * @see RFC-003: Header Composition Pattern (APPROVED)\n */\n\n\"use client\";\n\nimport { type ReactNode } from \"react\";\nimport { cn } from \"../../../utils\";\nimport { getSpacingClass } from \"../../../tokens/spacing\";\n\nexport interface HeaderNavigationProps {\n /**\n * Navigation content (typically NavLink components)\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * HeaderNavigation Component\n *\n * Navigation slot for Header. Typically contains NavLink components.\n *\n * @example\n * ```tsx\n * <Header.Navigation>\n * <NavLink href=\"/home\">Home</NavLink>\n * <NavLink href=\"/about\">About</NavLink>\n * </Header.Navigation>\n * ```\n */\nexport function HeaderNavigation({\n children,\n className,\n}: HeaderNavigationProps) {\n return (\n <nav\n className={cn(\n \"flex-1 flex items-center justify-center\",\n getSpacingClass(\"base\", \"gap\"),\n \"hidden md:flex\", // Hidden on mobile, visible on desktop\n className,\n )}\n aria-label=\"Main navigation\"\n >\n {children}\n </nav>\n );\n}\n"],"names":["HeaderNavigation","children","className","jsx","cn","getSpacingClass"],"mappings":";;;;AAwCO,SAASA,EAAiB;AAAA,EAC/B,UAAAC;AAAA,EACA,WAAAC;AACF,GAA0B;AACxB,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAC,EAAgB,QAAQ,KAAK;AAAA,QAC7B;AAAA;AAAA,QACAH;AAAA,MAAA;AAAA,MAEF,cAAW;AAAA,MAEV,UAAAD;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as m } from "react/jsx-runtime";
|
|
3
|
+
import { useState as v, useCallback as r, useContext as H, createContext as b } from "react";
|
|
4
|
+
const c = b(void 0);
|
|
5
|
+
function M({
|
|
6
|
+
children: t,
|
|
7
|
+
mobileMenuOpen: i,
|
|
8
|
+
onMobileMenuChange: o,
|
|
9
|
+
defaultMobileMenuOpen: l = !1
|
|
10
|
+
}) {
|
|
11
|
+
const [d, a] = v(
|
|
12
|
+
l
|
|
13
|
+
), s = i !== void 0, n = s ? i : d, e = r(
|
|
14
|
+
(u) => {
|
|
15
|
+
s || a(u), o == null || o(u);
|
|
16
|
+
},
|
|
17
|
+
[s, o]
|
|
18
|
+
), f = r(() => {
|
|
19
|
+
e(!n);
|
|
20
|
+
}, [n, e]), x = r(() => {
|
|
21
|
+
e(!0);
|
|
22
|
+
}, [e]), p = r(() => {
|
|
23
|
+
e(!1);
|
|
24
|
+
}, [e]);
|
|
25
|
+
return /* @__PURE__ */ m(
|
|
26
|
+
c.Provider,
|
|
27
|
+
{
|
|
28
|
+
value: {
|
|
29
|
+
isMobileMenuOpen: n,
|
|
30
|
+
toggleMobileMenu: f,
|
|
31
|
+
setMobileMenuOpen: e,
|
|
32
|
+
openMobileMenu: x,
|
|
33
|
+
closeMobileMenu: p
|
|
34
|
+
},
|
|
35
|
+
children: t
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
function P() {
|
|
40
|
+
const t = H(c);
|
|
41
|
+
if (!t)
|
|
42
|
+
throw new Error("useHeaderContext must be used within HeaderProvider");
|
|
43
|
+
return t;
|
|
44
|
+
}
|
|
45
|
+
export {
|
|
46
|
+
M as HeaderProvider,
|
|
47
|
+
P as useHeaderContext
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=HeaderContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeaderContext.js","sources":["../../../../../../src/ui/components/Header/contexts/HeaderContext.tsx"],"sourcesContent":["/**\n * Header Context\n *\n * Context for managing Header component state, particularly mobile menu state.\n *\n * @see ADR-002: Header + SideNavbar Compatibility (ACCEPTED)\n * @see EPIC-002: Header Component (Molecule)\n * @see TASK-014: Implementar HeaderContext Completo\n */\n\n\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n type ReactNode,\n} from \"react\";\n\n/**\n * Header Context Value\n */\nexport interface HeaderContextValue {\n /**\n * Whether the mobile menu is open\n */\n isMobileMenuOpen: boolean;\n\n /**\n * Toggle mobile menu state\n */\n toggleMobileMenu: () => void;\n\n /**\n * Set mobile menu state explicitly\n */\n setMobileMenuOpen: (open: boolean) => void;\n\n /**\n * Open mobile menu\n */\n openMobileMenu: () => void;\n\n /**\n * Close mobile menu\n */\n closeMobileMenu: () => void;\n}\n\n/**\n * Header Context\n *\n * Independent context for Header component state.\n * Does not interfere with SideNavbar contexts (ADR-002).\n */\nconst HeaderContext = createContext<HeaderContextValue | undefined>(undefined);\n\n/**\n * Header Provider Props\n */\nexport interface HeaderProviderProps {\n /**\n * Children components\n */\n children: ReactNode;\n\n /**\n * Controlled mode: mobile menu open state\n */\n mobileMenuOpen?: boolean;\n\n /**\n * Callback when mobile menu state changes\n */\n onMobileMenuChange?: (open: boolean) => void;\n\n /**\n * Default mobile menu open state (uncontrolled mode)\n * @default false\n */\n defaultMobileMenuOpen?: boolean;\n}\n\n/**\n * HeaderProvider\n *\n * Provides Header context for mobile menu state management.\n * Independent from SideNavbarContexts (ADR-002).\n *\n * Supports both controlled and uncontrolled modes.\n *\n * @example\n * ```tsx\n * // Uncontrolled mode\n * <HeaderProvider>\n * <Header>...</Header>\n * </HeaderProvider>\n *\n * // Controlled mode\n * <HeaderProvider\n * mobileMenuOpen={isOpen}\n * onMobileMenuChange={setIsOpen}\n * >\n * <Header>...</Header>\n * </HeaderProvider>\n * ```\n */\nexport function HeaderProvider({\n children,\n mobileMenuOpen: controlledMobileMenuOpen,\n onMobileMenuChange,\n defaultMobileMenuOpen = false,\n}: HeaderProviderProps) {\n const [internalMobileMenuOpen, setInternalMobileMenuOpen] = useState(\n defaultMobileMenuOpen,\n );\n\n const isControlled = controlledMobileMenuOpen !== undefined;\n const isMobileMenuOpen = isControlled\n ? controlledMobileMenuOpen\n : internalMobileMenuOpen;\n\n const setMobileMenuOpen = useCallback(\n (open: boolean) => {\n if (!isControlled) {\n setInternalMobileMenuOpen(open);\n }\n onMobileMenuChange?.(open);\n },\n [isControlled, onMobileMenuChange],\n );\n\n const toggleMobileMenu = useCallback(() => {\n setMobileMenuOpen(!isMobileMenuOpen);\n }, [isMobileMenuOpen, setMobileMenuOpen]);\n\n const openMobileMenu = useCallback(() => {\n setMobileMenuOpen(true);\n }, [setMobileMenuOpen]);\n\n const closeMobileMenu = useCallback(() => {\n setMobileMenuOpen(false);\n }, [setMobileMenuOpen]);\n\n return (\n <HeaderContext.Provider\n value={{\n isMobileMenuOpen,\n toggleMobileMenu,\n setMobileMenuOpen,\n openMobileMenu,\n closeMobileMenu,\n }}\n >\n {children}\n </HeaderContext.Provider>\n );\n}\n\n/**\n * useHeaderContext Hook\n *\n * Hook to access Header context.\n * Must be used within HeaderProvider.\n *\n * @throws Error if used outside HeaderProvider\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { isMobileMenuOpen, toggleMobileMenu } = useHeaderContext();\n * return <button onClick={toggleMobileMenu}>Toggle</button>;\n * }\n * ```\n */\nexport function useHeaderContext(): HeaderContextValue {\n const context = useContext(HeaderContext);\n if (!context) {\n throw new Error(\"useHeaderContext must be used within HeaderProvider\");\n }\n return context;\n}\n"],"names":["HeaderContext","createContext","HeaderProvider","children","controlledMobileMenuOpen","onMobileMenuChange","defaultMobileMenuOpen","internalMobileMenuOpen","setInternalMobileMenuOpen","useState","isControlled","isMobileMenuOpen","setMobileMenuOpen","useCallback","open","toggleMobileMenu","openMobileMenu","closeMobileMenu","jsx","useHeaderContext","context","useContext"],"mappings":";;;AAyDA,MAAMA,IAAgBC,EAA8C,MAAS;AAoDtE,SAASC,EAAe;AAAA,EAC7B,UAAAC;AAAA,EACA,gBAAgBC;AAAA,EAChB,oBAAAC;AAAA,EACA,uBAAAC,IAAwB;AAC1B,GAAwB;AACtB,QAAM,CAACC,GAAwBC,CAAyB,IAAIC;AAAA,IAC1DH;AAAA,EAAA,GAGII,IAAeN,MAA6B,QAC5CO,IAAmBD,IACrBN,IACAG,GAEEK,IAAoBC;AAAA,IACxB,CAACC,MAAkB;AACjB,MAAKJ,KACHF,EAA0BM,CAAI,GAEhCT,KAAA,QAAAA,EAAqBS;AAAA,IACvB;AAAA,IACA,CAACJ,GAAcL,CAAkB;AAAA,EAAA,GAG7BU,IAAmBF,EAAY,MAAM;AACzC,IAAAD,EAAkB,CAACD,CAAgB;AAAA,EACrC,GAAG,CAACA,GAAkBC,CAAiB,CAAC,GAElCI,IAAiBH,EAAY,MAAM;AACvC,IAAAD,EAAkB,EAAI;AAAA,EACxB,GAAG,CAACA,CAAiB,CAAC,GAEhBK,IAAkBJ,EAAY,MAAM;AACxC,IAAAD,EAAkB,EAAK;AAAA,EACzB,GAAG,CAACA,CAAiB,CAAC;AAEtB,SACE,gBAAAM;AAAA,IAAClB,EAAc;AAAA,IAAd;AAAA,MACC,OAAO;AAAA,QACL,kBAAAW;AAAA,QACA,kBAAAI;AAAA,QACA,mBAAAH;AAAA,QACA,gBAAAI;AAAA,QACA,iBAAAC;AAAA,MAAA;AAAA,MAGD,UAAAd;AAAA,IAAA;AAAA,EAAA;AAGP;AAkBO,SAASgB,IAAuC;AACrD,QAAMC,IAAUC,EAAWrB,CAAa;AACxC,MAAI,CAACoB;AACH,UAAM,IAAI,MAAM,qDAAqD;AAEvE,SAAOA;AACT;"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var v = Object.defineProperty, w = Object.defineProperties;
|
|
3
|
+
var x = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var m = Object.getOwnPropertySymbols;
|
|
5
|
+
var c = Object.prototype.hasOwnProperty, p = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var d = (e, r, i) => r in e ? v(e, r, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[r] = i, u = (e, r) => {
|
|
7
|
+
for (var i in r || (r = {}))
|
|
8
|
+
c.call(r, i) && d(e, i, r[i]);
|
|
9
|
+
if (m)
|
|
10
|
+
for (var i of m(r))
|
|
11
|
+
p.call(r, i) && d(e, i, r[i]);
|
|
12
|
+
return e;
|
|
13
|
+
}, f = (e, r) => w(e, x(r));
|
|
14
|
+
var h = (e, r) => {
|
|
15
|
+
var i = {};
|
|
16
|
+
for (var a in e)
|
|
17
|
+
c.call(e, a) && r.indexOf(a) < 0 && (i[a] = e[a]);
|
|
18
|
+
if (e != null && m)
|
|
19
|
+
for (var a of m(e))
|
|
20
|
+
r.indexOf(a) < 0 && p.call(e, a) && (i[a] = e[a]);
|
|
21
|
+
return i;
|
|
22
|
+
};
|
|
23
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
24
|
+
import { getSpacingClass as t } from "../../tokens/spacing.js";
|
|
25
|
+
import { getRadiusClass as N } from "../../tokens/radius.js";
|
|
26
|
+
import g from "../../primitives/Label/Label.js";
|
|
27
|
+
import y from "../../primitives/Input/Input.js";
|
|
28
|
+
import { Button as b } from "../../primitives/Button/Button.js";
|
|
29
|
+
import { cn as S } from "../../utils/cn.js";
|
|
30
|
+
function D(a) {
|
|
31
|
+
var l = a, {
|
|
32
|
+
onForgotPasswordClick: e,
|
|
33
|
+
className: r
|
|
34
|
+
} = l, i = h(l, [
|
|
35
|
+
"onForgotPasswordClick",
|
|
36
|
+
"className"
|
|
37
|
+
]);
|
|
38
|
+
return /* @__PURE__ */ o(
|
|
39
|
+
"div",
|
|
40
|
+
{
|
|
41
|
+
className: S(
|
|
42
|
+
t("base", "p"),
|
|
43
|
+
"bg-surface-muted",
|
|
44
|
+
N("md"),
|
|
45
|
+
r
|
|
46
|
+
),
|
|
47
|
+
children: /* @__PURE__ */ s(
|
|
48
|
+
"form",
|
|
49
|
+
f(u({}, i), {
|
|
50
|
+
onSubmit: (n) => {
|
|
51
|
+
n.preventDefault(), i.onSubmit && i.onSubmit(n);
|
|
52
|
+
},
|
|
53
|
+
className: t("base", "space-y"),
|
|
54
|
+
children: [
|
|
55
|
+
/* @__PURE__ */ s("div", { className: t("sm", "space-y"), children: [
|
|
56
|
+
/* @__PURE__ */ o(g, { htmlFor: "login-email", variant: "required", children: "Your email" }),
|
|
57
|
+
/* @__PURE__ */ o(y, { id: "login-email", placeholder: "myname@email.com", type: "email" })
|
|
58
|
+
] }),
|
|
59
|
+
/* @__PURE__ */ s("div", { className: t("sm", "space-y"), children: [
|
|
60
|
+
/* @__PURE__ */ o(g, { htmlFor: "login-password", variant: "required", children: "Your password" }),
|
|
61
|
+
/* @__PURE__ */ o(y, { id: "login-password", placeholder: "••••••••", type: "password" })
|
|
62
|
+
] }),
|
|
63
|
+
/* @__PURE__ */ s("div", { className: "flex justify-between", children: [
|
|
64
|
+
/* @__PURE__ */ o(
|
|
65
|
+
b,
|
|
66
|
+
{
|
|
67
|
+
variant: "secondary",
|
|
68
|
+
type: "button",
|
|
69
|
+
onClick: e,
|
|
70
|
+
children: "Forgot password?"
|
|
71
|
+
}
|
|
72
|
+
),
|
|
73
|
+
/* @__PURE__ */ o(b, { variant: "primary", type: "submit", children: "Sign in" })
|
|
74
|
+
] })
|
|
75
|
+
]
|
|
76
|
+
})
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
D as default
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=LoginBox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoginBox.js","sources":["../../../../../src/ui/components/LoginBox/LoginBox.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport { Button, Input, Label } from \"../../primitives\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getRadiusClass } from \"../../tokens/radius\";\n\ninterface Props extends HTMLAttributes<HTMLFormElement> {\n onForgotPasswordClick: () => void;\n}\n\nexport default function LoginBox({\n onForgotPasswordClick,\n className,\n ...props\n}: Props) {\n return (\n <div\n className={cn(\n getSpacingClass(\"base\", \"p\"),\n \"bg-surface-muted\",\n getRadiusClass(\"md\"),\n className,\n )}\n >\n <form\n {...props}\n onSubmit={(e) => {\n e.preventDefault();\n if (props.onSubmit) props.onSubmit(e);\n }}\n className={getSpacingClass(\"base\", \"space-y\")}\n >\n <div className={getSpacingClass(\"sm\", \"space-y\")}>\n <Label htmlFor=\"login-email\" variant=\"required\">\n Your email\n </Label>\n <Input id=\"login-email\" placeholder=\"myname@email.com\" type=\"email\" />\n </div>\n <div className={getSpacingClass(\"sm\", \"space-y\")}>\n <Label htmlFor=\"login-password\" variant=\"required\">\n Your password\n </Label>\n <Input id=\"login-password\" placeholder=\"••••••••\" type=\"password\" />\n </div>\n <div className=\"flex justify-between\">\n <Button\n variant=\"secondary\"\n type=\"button\"\n onClick={onForgotPasswordClick}\n >\n Forgot password?\n </Button>\n <Button variant=\"primary\" type=\"submit\">\n Sign in\n </Button>\n </div>\n </form>\n </div>\n );\n}\n"],"names":["LoginBox","_a","_b","onForgotPasswordClick","className","props","__objRest","jsx","cn","getSpacingClass","getRadiusClass","jsxs","__spreadProps","__spreadValues","e","Label","Input","Button"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,SAAwBA,EAASC,GAIvB;AAJuB,MAAAC,IAAAD,GAC/B;AAAA,2BAAAE;AAAA,IACA,WAAAC;AAAA,MAF+BF,GAG5BG,IAAAC,EAH4BJ,GAG5B;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACTC,EAAgB,QAAQ,GAAG;AAAA,QAC3B;AAAA,QACAC,EAAe,IAAI;AAAA,QACnBN;AAAA,MAAA;AAAA,MAGF,UAAA,gBAAAO;AAAA,QAAC;AAAA,QAAAC,EAAAC,EAAA,IACKR,IADL;AAAA,UAEC,UAAU,CAACS,MAAM;AACf,YAAAA,EAAE,eAAA,GACET,EAAM,YAAUA,EAAM,SAASS,CAAC;AAAA,UACtC;AAAA,UACA,WAAWL,EAAgB,QAAQ,SAAS;AAAA,UAE5C,UAAA;AAAA,YAAA,gBAAAE,EAAC,OAAA,EAAI,WAAWF,EAAgB,MAAM,SAAS,GAC7C,UAAA;AAAA,cAAA,gBAAAF,EAACQ,GAAA,EAAM,SAAQ,eAAc,SAAQ,YAAW,UAAA,cAEhD;AAAA,gCACCC,GAAA,EAAM,IAAG,eAAc,aAAY,oBAAmB,MAAK,QAAA,CAAQ;AAAA,YAAA,GACtE;AAAA,8BACC,OAAA,EAAI,WAAWP,EAAgB,MAAM,SAAS,GAC7C,UAAA;AAAA,cAAA,gBAAAF,EAACQ,GAAA,EAAM,SAAQ,kBAAiB,SAAQ,YAAW,UAAA,iBAEnD;AAAA,gCACCC,GAAA,EAAM,IAAG,kBAAiB,aAAY,YAAW,MAAK,WAAA,CAAW;AAAA,YAAA,GACpE;AAAA,YACA,gBAAAL,EAAC,OAAA,EAAI,WAAU,wBACb,UAAA;AAAA,cAAA,gBAAAJ;AAAA,gBAACU;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,SAASd;AAAA,kBACV,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,gCAGAc,GAAA,EAAO,SAAQ,WAAU,MAAK,UAAS,UAAA,UAAA,CAExC;AAAA,YAAA,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as a } from "react/jsx-runtime";
|
|
3
|
+
import { useState as c } from "react";
|
|
4
|
+
import { MenuProvider as M } from "./MenuContext.js";
|
|
5
|
+
import I from "./MenuTrigger.js";
|
|
6
|
+
import d from "./MenuContent.js";
|
|
7
|
+
import v from "./MenuItem.js";
|
|
8
|
+
import S from "./MenuSeparator.js";
|
|
9
|
+
function t({
|
|
10
|
+
children: m,
|
|
11
|
+
open: o,
|
|
12
|
+
defaultOpen: n = !1,
|
|
13
|
+
onOpenChange: r,
|
|
14
|
+
placement: u = "bottom"
|
|
15
|
+
}) {
|
|
16
|
+
const [f, l] = c(n), e = o !== void 0, p = e ? o : f, s = (i) => {
|
|
17
|
+
e || l(i), r == null || r(i);
|
|
18
|
+
};
|
|
19
|
+
return /* @__PURE__ */ a(
|
|
20
|
+
M,
|
|
21
|
+
{
|
|
22
|
+
value: {
|
|
23
|
+
isOpen: p,
|
|
24
|
+
setIsOpen: s,
|
|
25
|
+
closeMenu: () => {
|
|
26
|
+
s(!1);
|
|
27
|
+
},
|
|
28
|
+
placement: u
|
|
29
|
+
},
|
|
30
|
+
children: m
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
t.Trigger = I;
|
|
35
|
+
t.Content = d;
|
|
36
|
+
t.Item = v;
|
|
37
|
+
t.Separator = S;
|
|
38
|
+
export {
|
|
39
|
+
d as MenuContent,
|
|
40
|
+
v as MenuItem,
|
|
41
|
+
S as MenuSeparator,
|
|
42
|
+
I as MenuTrigger,
|
|
43
|
+
t as default
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=Menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.js","sources":["../../../../../src/ui/components/Menu/Menu.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, type ReactNode } from \"react\";\nimport { MenuProvider } from \"./MenuContext\";\nimport MenuTrigger from \"./MenuTrigger\";\nimport MenuContent from \"./MenuContent\";\nimport MenuItem from \"./MenuItem\";\nimport MenuSeparator from \"./MenuSeparator\";\n\nexport type MenuPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface MenuProps {\n children: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n placement?: MenuPlacement;\n}\n\n/**\n * Menu Component\n *\n * A dropdown menu component with keyboard navigation and portal rendering.\n * Follows Atomic Design principles as an Atom component.\n * Uses Compound Component pattern.\n *\n * @example\n * ```tsx\n * <Menu>\n * <MenuTrigger>\n * <Button>Open Menu</Button>\n * </MenuTrigger>\n * <MenuContent>\n * <MenuItem onClick={handleClick}>Item 1</MenuItem>\n * <MenuItem onClick={handleClick}>Item 2</MenuItem>\n * <MenuSeparator />\n * <MenuItem onClick={handleClick}>Item 3</MenuItem>\n * </MenuContent>\n * </Menu>\n * ```\n */\nexport default function Menu({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n placement = \"bottom\",\n}: MenuProps) {\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 closeMenu = () => {\n setIsOpen(false);\n };\n\n return (\n <MenuProvider\n value={{\n isOpen,\n setIsOpen,\n closeMenu,\n placement,\n }}\n >\n {children}\n </MenuProvider>\n );\n}\n\n// Export sub-components for compound pattern\nMenu.Trigger = MenuTrigger;\nMenu.Content = MenuContent;\nMenu.Item = MenuItem;\nMenu.Separator = MenuSeparator;\n\n// Also export as named exports for easier imports\nexport { MenuTrigger, MenuContent, MenuItem, MenuSeparator };\n"],"names":["Menu","children","controlledOpen","defaultOpen","onOpenChange","placement","internalOpen","setInternalOpen","useState","isControlled","isOpen","setIsOpen","newOpen","jsx","MenuProvider","MenuTrigger","MenuContent","MenuItem","MenuSeparator"],"mappings":";;;;;;;;AAyCA,SAAwBA,EAAK;AAAA,EAC3B,UAAAC;AAAA,EACA,MAAMC;AAAA,EACN,aAAAC,IAAc;AAAA,EACd,cAAAC;AAAA,EACA,WAAAC,IAAY;AACd,GAAc;AACZ,QAAM,CAACC,GAAcC,CAAe,IAAIC,EAASL,CAAW,GAEtDM,IAAeP,MAAmB,QAClCQ,IAASD,IAAeP,IAAiBI,GAEzCK,IAAY,CAACC,MAAqB;AACtC,IAAKH,KACHF,EAAgBK,CAAO,GAEzBR,KAAA,QAAAA,EAAeQ;AAAA,EACjB;AAMA,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,QAAAJ;AAAA,QACA,WAAAC;AAAA,QACA,WATY,MAAM;AACtB,UAAAA,EAAU,EAAK;AAAA,QACjB;AAAA,QAQM,WAAAN;AAAA,MAAA;AAAA,MAGD,UAAAJ;AAAA,IAAA;AAAA,EAAA;AAGP;AAGAD,EAAK,UAAUe;AACff,EAAK,UAAUgB;AACfhB,EAAK,OAAOiB;AACZjB,EAAK,YAAYkB;"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as y } from "react/jsx-runtime";
|
|
3
|
+
import { useRef as v, useState as R, useEffect as p } from "react";
|
|
4
|
+
import { createPortal as L } from "react-dom";
|
|
5
|
+
import { getRadiusClass as M } from "../../tokens/radius.js";
|
|
6
|
+
import { getShadowClass as $ } from "../../tokens/shadows.js";
|
|
7
|
+
import { getZIndexClass as S } from "../../tokens/z-index.js";
|
|
8
|
+
import { getSpacingClass as k } from "../../tokens/spacing.js";
|
|
9
|
+
import { useMenuContext as z } from "./MenuContext.js";
|
|
10
|
+
function I({
|
|
11
|
+
children: E,
|
|
12
|
+
className: C = "",
|
|
13
|
+
align: i = "start"
|
|
14
|
+
}) {
|
|
15
|
+
const { isOpen: s, closeMenu: a, placement: u } = z(), f = v(null), m = v(null), [w, b] = R({ top: 0, left: 0 });
|
|
16
|
+
if (p(() => {
|
|
17
|
+
if (s) {
|
|
18
|
+
const n = document.querySelector(
|
|
19
|
+
'[aria-haspopup="menu"]'
|
|
20
|
+
);
|
|
21
|
+
m.current = n;
|
|
22
|
+
}
|
|
23
|
+
}, [s]), p(() => {
|
|
24
|
+
if (s && f.current && m.current) {
|
|
25
|
+
const n = () => {
|
|
26
|
+
const e = m.current.getBoundingClientRect(), t = f.current.getBoundingClientRect(), d = window.scrollY, l = window.scrollX;
|
|
27
|
+
let o = 0, r = 0;
|
|
28
|
+
u === "bottom" ? (o = e.bottom + d + 4, i === "start" ? r = e.left + l : i === "end" ? r = e.right + l - t.width : r = e.left + l + (e.width - t.width) / 2) : u === "top" ? (o = e.top + d - t.height - 4, i === "start" ? r = e.left + l : i === "end" ? r = e.right + l - t.width : r = e.left + l + (e.width - t.width) / 2) : u === "right" ? (r = e.right + l + 4, i === "start" ? o = e.top + d : i === "end" ? o = e.bottom + d - t.height : o = e.top + d + (e.height - t.height) / 2) : u === "left" && (r = e.left + l - t.width - 4, i === "start" ? o = e.top + d : i === "end" ? o = e.bottom + d - t.height : o = e.top + d + (e.height - t.height) / 2);
|
|
29
|
+
const h = 8;
|
|
30
|
+
o = Math.max(
|
|
31
|
+
h,
|
|
32
|
+
Math.min(
|
|
33
|
+
o,
|
|
34
|
+
window.innerHeight + d - t.height - h
|
|
35
|
+
)
|
|
36
|
+
), r = Math.max(
|
|
37
|
+
h,
|
|
38
|
+
Math.min(
|
|
39
|
+
r,
|
|
40
|
+
window.innerWidth + l - t.width - h
|
|
41
|
+
)
|
|
42
|
+
), b({ top: o, left: r });
|
|
43
|
+
};
|
|
44
|
+
n();
|
|
45
|
+
const c = () => n(), g = () => n();
|
|
46
|
+
return window.addEventListener("resize", c), window.addEventListener("scroll", g, !0), () => {
|
|
47
|
+
window.removeEventListener("resize", c), window.removeEventListener("scroll", g, !0);
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}, [s, u, i]), p(() => {
|
|
51
|
+
if (s) {
|
|
52
|
+
const n = (c) => {
|
|
53
|
+
c.key === "Escape" && a();
|
|
54
|
+
};
|
|
55
|
+
return document.addEventListener("keydown", n), () => document.removeEventListener("keydown", n);
|
|
56
|
+
}
|
|
57
|
+
}, [s, a]), p(() => {
|
|
58
|
+
if (s) {
|
|
59
|
+
const n = (c) => {
|
|
60
|
+
f.current && m.current && !f.current.contains(c.target) && !m.current.contains(c.target) && a();
|
|
61
|
+
};
|
|
62
|
+
return document.addEventListener("mousedown", n), () => document.removeEventListener("mousedown", n);
|
|
63
|
+
}
|
|
64
|
+
}, [s, a]), !s) return null;
|
|
65
|
+
const x = /* @__PURE__ */ y(
|
|
66
|
+
"div",
|
|
67
|
+
{
|
|
68
|
+
ref: f,
|
|
69
|
+
role: "menu",
|
|
70
|
+
className: `
|
|
71
|
+
absolute
|
|
72
|
+
${S("popover")}
|
|
73
|
+
bg-surface-overlay
|
|
74
|
+
${M("md")}
|
|
75
|
+
${$("lg")}
|
|
76
|
+
border
|
|
77
|
+
border-line-default
|
|
78
|
+
min-w-40
|
|
79
|
+
${k("xs", "py")}
|
|
80
|
+
${C}
|
|
81
|
+
`,
|
|
82
|
+
style: {
|
|
83
|
+
top: `${w.top}px`,
|
|
84
|
+
left: `${w.left}px`
|
|
85
|
+
},
|
|
86
|
+
children: E
|
|
87
|
+
}
|
|
88
|
+
);
|
|
89
|
+
return typeof window != "undefined" ? L(x, document.body) : null;
|
|
90
|
+
}
|
|
91
|
+
export {
|
|
92
|
+
I as default
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=MenuContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuContent.js","sources":["../../../../../src/ui/components/Menu/MenuContent.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useEffect, useRef, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getShadowClass } from \"../../tokens/shadows\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface MenuContentProps {\n children: ReactNode;\n className?: string;\n align?: \"start\" | \"end\" | \"center\";\n}\n\n/**\n * MenuContent Component\n *\n * The content container for menu items.\n * Renders in a portal and positions itself relative to the trigger.\n */\nexport default function MenuContent({\n children,\n className = \"\",\n align = \"start\",\n}: MenuContentProps) {\n const { isOpen, closeMenu, placement } = useMenuContext();\n const contentRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n\n // Find trigger element\n useEffect(() => {\n if (isOpen) {\n // Find the trigger by looking for element with aria-haspopup=\"menu\"\n const trigger = document.querySelector(\n '[aria-haspopup=\"menu\"]',\n ) as HTMLElement;\n triggerRef.current = trigger;\n }\n }, [isOpen]);\n\n // Calculate position\n useEffect(() => {\n if (isOpen && contentRef.current && triggerRef.current) {\n const updatePosition = () => {\n const triggerRect = triggerRef.current!.getBoundingClientRect();\n const contentRect = contentRef.current!.getBoundingClientRect();\n const scrollY = window.scrollY;\n const scrollX = window.scrollX;\n\n let top = 0;\n let left = 0;\n\n if (placement === \"bottom\") {\n top = triggerRect.bottom + scrollY + 4;\n if (align === \"start\") left = triggerRect.left + scrollX;\n else if (align === \"end\")\n left = triggerRect.right + scrollX - contentRect.width;\n else\n left =\n triggerRect.left +\n scrollX +\n (triggerRect.width - contentRect.width) / 2;\n } else if (placement === \"top\") {\n top = triggerRect.top + scrollY - contentRect.height - 4;\n if (align === \"start\") left = triggerRect.left + scrollX;\n else if (align === \"end\")\n left = triggerRect.right + scrollX - contentRect.width;\n else\n left =\n triggerRect.left +\n scrollX +\n (triggerRect.width - contentRect.width) / 2;\n } else if (placement === \"right\") {\n left = triggerRect.right + scrollX + 4;\n if (align === \"start\") top = triggerRect.top + scrollY;\n else if (align === \"end\")\n top = triggerRect.bottom + scrollY - contentRect.height;\n else\n top =\n triggerRect.top +\n scrollY +\n (triggerRect.height - contentRect.height) / 2;\n } else if (placement === \"left\") {\n left = triggerRect.left + scrollX - contentRect.width - 4;\n if (align === \"start\") top = triggerRect.top + scrollY;\n else if (align === \"end\")\n top = triggerRect.bottom + scrollY - contentRect.height;\n else\n top =\n triggerRect.top +\n scrollY +\n (triggerRect.height - contentRect.height) / 2;\n }\n\n // Keep within viewport\n const padding = 8;\n top = Math.max(\n padding,\n Math.min(\n top,\n window.innerHeight + scrollY - contentRect.height - padding,\n ),\n );\n left = Math.max(\n padding,\n Math.min(\n left,\n window.innerWidth + scrollX - contentRect.width - padding,\n ),\n );\n\n setPosition({ top, left });\n };\n\n updatePosition();\n const handleResize = () => updatePosition();\n const handleScroll = () => updatePosition();\n window.addEventListener(\"resize\", handleResize);\n window.addEventListener(\"scroll\", handleScroll, true);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n window.removeEventListener(\"scroll\", handleScroll, true);\n };\n }\n }, [isOpen, placement, align]);\n\n // Close on escape\n useEffect(() => {\n if (isOpen) {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n closeMenu();\n }\n };\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }\n }, [isOpen, closeMenu]);\n\n // Close on click outside\n useEffect(() => {\n if (isOpen) {\n const handleClickOutside = (e: MouseEvent) => {\n if (\n contentRef.current &&\n triggerRef.current &&\n !contentRef.current.contains(e.target as Node) &&\n !triggerRef.current.contains(e.target as Node)\n ) {\n closeMenu();\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () =>\n document.removeEventListener(\"mousedown\", handleClickOutside);\n }\n }, [isOpen, closeMenu]);\n\n if (!isOpen) return null;\n\n const menuContent = (\n <div\n ref={contentRef}\n role=\"menu\"\n className={`\n absolute\n ${getZIndexClass(\"popover\")}\n bg-surface-overlay\n ${getRadiusClass(\"md\")}\n ${getShadowClass(\"lg\")}\n border\n border-line-default\n min-w-40\n ${getSpacingClass(\"xs\", \"py\")}\n ${className}\n `}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n }}\n >\n {children}\n </div>\n );\n\n return typeof window !== \"undefined\"\n ? createPortal(menuContent, document.body)\n : null;\n}\n"],"names":["MenuContent","children","className","align","isOpen","closeMenu","placement","useMenuContext","contentRef","useRef","triggerRef","position","setPosition","useState","useEffect","trigger","updatePosition","triggerRect","contentRect","scrollY","scrollX","top","left","padding","handleResize","handleScroll","handleEscape","e","handleClickOutside","menuContent","jsx","getZIndexClass","getRadiusClass","getShadowClass","getSpacingClass","createPortal"],"mappings":";;;;;;;;;AAsBA,SAAwBA,EAAY;AAAA,EAClC,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,OAAAC,IAAQ;AACV,GAAqB;AACnB,QAAM,EAAE,QAAAC,GAAQ,WAAAC,GAAW,WAAAC,EAAA,IAAcC,EAAA,GACnCC,IAAaC,EAAuB,IAAI,GACxCC,IAAaD,EAA2B,IAAI,GAC5C,CAACE,GAAUC,CAAW,IAAIC,EAAS,EAAE,KAAK,GAAG,MAAM,GAAG;AAoI5D,MAjIAC,EAAU,MAAM;AACd,QAAIV,GAAQ;AAEV,YAAMW,IAAU,SAAS;AAAA,QACvB;AAAA,MAAA;AAEF,MAAAL,EAAW,UAAUK;AAAA,IACvB;AAAA,EACF,GAAG,CAACX,CAAM,CAAC,GAGXU,EAAU,MAAM;AACd,QAAIV,KAAUI,EAAW,WAAWE,EAAW,SAAS;AACtD,YAAMM,IAAiB,MAAM;AAC3B,cAAMC,IAAcP,EAAW,QAAS,sBAAA,GAClCQ,IAAcV,EAAW,QAAS,sBAAA,GAClCW,IAAU,OAAO,SACjBC,IAAU,OAAO;AAEvB,YAAIC,IAAM,GACNC,IAAO;AAEX,QAAIhB,MAAc,YAChBe,IAAMJ,EAAY,SAASE,IAAU,GACjChB,MAAU,UAASmB,IAAOL,EAAY,OAAOG,IACxCjB,MAAU,QACjBmB,IAAOL,EAAY,QAAQG,IAAUF,EAAY,QAEjDI,IACEL,EAAY,OACZG,KACCH,EAAY,QAAQC,EAAY,SAAS,KACrCZ,MAAc,SACvBe,IAAMJ,EAAY,MAAME,IAAUD,EAAY,SAAS,GACnDf,MAAU,UAASmB,IAAOL,EAAY,OAAOG,IACxCjB,MAAU,QACjBmB,IAAOL,EAAY,QAAQG,IAAUF,EAAY,QAEjDI,IACEL,EAAY,OACZG,KACCH,EAAY,QAAQC,EAAY,SAAS,KACrCZ,MAAc,WACvBgB,IAAOL,EAAY,QAAQG,IAAU,GACjCjB,MAAU,UAASkB,IAAMJ,EAAY,MAAME,IACtChB,MAAU,QACjBkB,IAAMJ,EAAY,SAASE,IAAUD,EAAY,SAEjDG,IACEJ,EAAY,MACZE,KACCF,EAAY,SAASC,EAAY,UAAU,KACvCZ,MAAc,WACvBgB,IAAOL,EAAY,OAAOG,IAAUF,EAAY,QAAQ,GACpDf,MAAU,UAASkB,IAAMJ,EAAY,MAAME,IACtChB,MAAU,QACjBkB,IAAMJ,EAAY,SAASE,IAAUD,EAAY,SAEjDG,IACEJ,EAAY,MACZE,KACCF,EAAY,SAASC,EAAY,UAAU;AAIlD,cAAMK,IAAU;AAChB,QAAAF,IAAM,KAAK;AAAA,UACTE;AAAA,UACA,KAAK;AAAA,YACHF;AAAA,YACA,OAAO,cAAcF,IAAUD,EAAY,SAASK;AAAA,UAAA;AAAA,QACtD,GAEFD,IAAO,KAAK;AAAA,UACVC;AAAA,UACA,KAAK;AAAA,YACHD;AAAA,YACA,OAAO,aAAaF,IAAUF,EAAY,QAAQK;AAAA,UAAA;AAAA,QACpD,GAGFX,EAAY,EAAE,KAAAS,GAAK,MAAAC,GAAM;AAAA,MAC3B;AAEA,MAAAN,EAAA;AACA,YAAMQ,IAAe,MAAMR,EAAA,GACrBS,IAAe,MAAMT,EAAA;AAC3B,oBAAO,iBAAiB,UAAUQ,CAAY,GAC9C,OAAO,iBAAiB,UAAUC,GAAc,EAAI,GAE7C,MAAM;AACX,eAAO,oBAAoB,UAAUD,CAAY,GACjD,OAAO,oBAAoB,UAAUC,GAAc,EAAI;AAAA,MACzD;AAAA,IACF;AAAA,EACF,GAAG,CAACrB,GAAQE,GAAWH,CAAK,CAAC,GAG7BW,EAAU,MAAM;AACd,QAAIV,GAAQ;AACV,YAAMsB,IAAe,CAACC,MAAqB;AACzC,QAAIA,EAAE,QAAQ,YACZtB,EAAA;AAAA,MAEJ;AACA,sBAAS,iBAAiB,WAAWqB,CAAY,GAC1C,MAAM,SAAS,oBAAoB,WAAWA,CAAY;AAAA,IACnE;AAAA,EACF,GAAG,CAACtB,GAAQC,CAAS,CAAC,GAGtBS,EAAU,MAAM;AACd,QAAIV,GAAQ;AACV,YAAMwB,IAAqB,CAACD,MAAkB;AAC5C,QACEnB,EAAW,WACXE,EAAW,WACX,CAACF,EAAW,QAAQ,SAASmB,EAAE,MAAc,KAC7C,CAACjB,EAAW,QAAQ,SAASiB,EAAE,MAAc,KAE7CtB,EAAA;AAAA,MAEJ;AACA,sBAAS,iBAAiB,aAAauB,CAAkB,GAClD,MACL,SAAS,oBAAoB,aAAaA,CAAkB;AAAA,IAChE;AAAA,EACF,GAAG,CAACxB,GAAQC,CAAS,CAAC,GAElB,CAACD,EAAQ,QAAO;AAEpB,QAAMyB,IACJ,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKtB;AAAA,MACL,MAAK;AAAA,MACL,WAAW;AAAA;AAAA,UAEPuB,EAAe,SAAS,CAAC;AAAA;AAAA,UAEzBC,EAAe,IAAI,CAAC;AAAA,UACpBC,EAAe,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,UAIpBC,EAAgB,MAAM,IAAI,CAAC;AAAA,UAC3BhC,CAAS;AAAA;AAAA,MAEb,OAAO;AAAA,QACL,KAAK,GAAGS,EAAS,GAAG;AAAA,QACpB,MAAM,GAAGA,EAAS,IAAI;AAAA,MAAA;AAAA,MAGvB,UAAAV;AAAA,IAAA;AAAA,EAAA;AAIL,SAAO,OAAO,UAAW,cACrBkC,EAAaN,GAAa,SAAS,IAAI,IACvC;AACN;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
3
|
+
import { useContext as r, createContext as u } from "react";
|
|
4
|
+
const t = u(void 0);
|
|
5
|
+
function c({
|
|
6
|
+
children: e,
|
|
7
|
+
value: n
|
|
8
|
+
}) {
|
|
9
|
+
return /* @__PURE__ */ o(t.Provider, { value: n, children: e });
|
|
10
|
+
}
|
|
11
|
+
function x() {
|
|
12
|
+
const e = r(t);
|
|
13
|
+
if (!e)
|
|
14
|
+
throw new Error("Menu components must be used within Menu");
|
|
15
|
+
return e;
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
c as MenuProvider,
|
|
19
|
+
x as useMenuContext
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=MenuContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuContext.js","sources":["../../../../../src/ui/components/Menu/MenuContext.tsx"],"sourcesContent":["\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useContext, type ReactNode } from \"react\";\n\ninterface MenuContextValue {\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n closeMenu: () => void;\n placement: \"top\" | \"bottom\" | \"left\" | \"right\";\n}\n\nconst MenuContext = createContext<MenuContextValue | undefined>(undefined);\n\nexport function MenuProvider({\n children,\n value,\n}: {\n children: ReactNode;\n value: MenuContextValue;\n}) {\n return <MenuContext.Provider value={value}>{children}</MenuContext.Provider>;\n}\n\nexport function useMenuContext() {\n const context = useContext(MenuContext);\n if (!context) {\n throw new Error(\"Menu components must be used within Menu\");\n }\n return context;\n}\n"],"names":["MenuContext","createContext","MenuProvider","children","value","jsx","useMenuContext","context","useContext"],"mappings":";;;AAYA,MAAMA,IAAcC,EAA4C,MAAS;AAElE,SAASC,EAAa;AAAA,EAC3B,UAAAC;AAAA,EACA,OAAAC;AACF,GAGG;AACD,SAAO,gBAAAC,EAACL,EAAY,UAAZ,EAAqB,OAAAI,GAAe,UAAAD,EAAA,CAAS;AACvD;AAEO,SAASG,IAAiB;AAC/B,QAAMC,IAAUC,EAAWR,CAAW;AACtC,MAAI,CAACO;AACH,UAAM,IAAI,MAAM,0CAA0C;AAE5D,SAAOA;AACT;"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var D = Object.defineProperty, k = Object.defineProperties;
|
|
3
|
+
var I = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var a = Object.getOwnPropertySymbols;
|
|
5
|
+
var y = Object.prototype.hasOwnProperty, d = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var h = (e, r, s) => r in e ? D(e, r, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[r] = s, x = (e, r) => {
|
|
7
|
+
for (var s in r || (r = {}))
|
|
8
|
+
y.call(r, s) && h(e, s, r[s]);
|
|
9
|
+
if (a)
|
|
10
|
+
for (var s of a(r))
|
|
11
|
+
d.call(r, s) && h(e, s, r[s]);
|
|
12
|
+
return e;
|
|
13
|
+
}, g = (e, r) => k(e, I(r));
|
|
14
|
+
var v = (e, r) => {
|
|
15
|
+
var s = {};
|
|
16
|
+
for (var t in e)
|
|
17
|
+
y.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 && d.call(e, t) && (s[t] = e[t]);
|
|
21
|
+
return s;
|
|
22
|
+
};
|
|
23
|
+
import { jsxs as K, jsx as m } from "react/jsx-runtime";
|
|
24
|
+
import { forwardRef as j } from "react";
|
|
25
|
+
import { ChevronRight as R } from "lucide-react";
|
|
26
|
+
import { getSpacingClass as l } from "../../tokens/spacing.js";
|
|
27
|
+
import { getTypographySize as z } from "../../tokens/typography.js";
|
|
28
|
+
import { useMenuContext as C } from "./MenuContext.js";
|
|
29
|
+
const E = j(function(P, $) {
|
|
30
|
+
var c = P, {
|
|
31
|
+
children: r,
|
|
32
|
+
icon: s,
|
|
33
|
+
rightIcon: t,
|
|
34
|
+
disabled: o = !1,
|
|
35
|
+
onClick: f,
|
|
36
|
+
onSelect: i,
|
|
37
|
+
hasSubmenu: p = !1,
|
|
38
|
+
className: w = ""
|
|
39
|
+
} = c, N = v(c, [
|
|
40
|
+
"children",
|
|
41
|
+
"icon",
|
|
42
|
+
"rightIcon",
|
|
43
|
+
"disabled",
|
|
44
|
+
"onClick",
|
|
45
|
+
"onSelect",
|
|
46
|
+
"hasSubmenu",
|
|
47
|
+
"className"
|
|
48
|
+
]);
|
|
49
|
+
const { closeMenu: M } = C(), u = (n) => {
|
|
50
|
+
o || (f == null || f(n), i == null || i(n), !p && !n.defaultPrevented && M());
|
|
51
|
+
};
|
|
52
|
+
return /* @__PURE__ */ K(
|
|
53
|
+
"div",
|
|
54
|
+
g(x({
|
|
55
|
+
ref: $,
|
|
56
|
+
role: "menuitem",
|
|
57
|
+
tabIndex: o ? -1 : 0,
|
|
58
|
+
"aria-disabled": o,
|
|
59
|
+
onClick: u,
|
|
60
|
+
onKeyDown: (n) => {
|
|
61
|
+
o || (n.key === "Enter" || n.key === " ") && (n.preventDefault(), u(n));
|
|
62
|
+
},
|
|
63
|
+
className: `
|
|
64
|
+
flex
|
|
65
|
+
items-center
|
|
66
|
+
${l("sm", "gap")}
|
|
67
|
+
${l("sm", "px")}
|
|
68
|
+
${l("sm", "py")}
|
|
69
|
+
${z("bodySmall")}
|
|
70
|
+
text-fg-primary
|
|
71
|
+
cursor-pointer
|
|
72
|
+
transition-colors
|
|
73
|
+
hover:bg-surface-hover
|
|
74
|
+
focus:bg-surface-hover
|
|
75
|
+
focus:outline-none
|
|
76
|
+
${o ? "opacity-50 cursor-not-allowed" : ""}
|
|
77
|
+
${w}
|
|
78
|
+
`
|
|
79
|
+
}, N), {
|
|
80
|
+
children: [
|
|
81
|
+
s && /* @__PURE__ */ m("span", { className: "shrink-0", children: s }),
|
|
82
|
+
/* @__PURE__ */ m("span", { className: "flex-1", children: r }),
|
|
83
|
+
p && /* @__PURE__ */ m(R, { className: "h-4 w-4 text-fg-secondary shrink-0" }),
|
|
84
|
+
t && !p && /* @__PURE__ */ m("span", { className: "shrink-0", children: t })
|
|
85
|
+
]
|
|
86
|
+
})
|
|
87
|
+
);
|
|
88
|
+
});
|
|
89
|
+
E.displayName = "MenuItem";
|
|
90
|
+
export {
|
|
91
|
+
E as default
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=MenuItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuItem.js","sources":["../../../../../src/ui/components/Menu/MenuItem.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, type ReactNode, type HTMLAttributes } from \"react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface MenuItemProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"onClick\"\n> {\n children: ReactNode;\n icon?: ReactNode;\n rightIcon?: ReactNode;\n disabled?: boolean;\n onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;\n onSelect?: (e: React.MouseEvent<HTMLDivElement>) => void;\n hasSubmenu?: boolean;\n}\n\n/**\n * MenuItem Component\n *\n * A single menu item. Supports icons, disabled state, and submenu indicator.\n *\n * @example\n * ```tsx\n * <MenuItem onClick={handleClick} icon={<Icon />}>\n * Menu Item\n * </MenuItem>\n * ```\n */\nconst MenuItem = forwardRef<HTMLDivElement, MenuItemProps>(function MenuItem(\n {\n children,\n icon,\n rightIcon,\n disabled = false,\n onClick,\n onSelect,\n hasSubmenu = false,\n className = \"\",\n ...props\n },\n ref,\n) {\n const { closeMenu } = useMenuContext();\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n onClick?.(e);\n onSelect?.(e);\n\n // Close menu unless it has a submenu\n if (!hasSubmenu && !e.defaultPrevented) {\n closeMenu();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick(e as unknown as React.MouseEvent<HTMLDivElement>);\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"menuitem\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={`\n flex\n items-center\n ${getSpacingClass(\"sm\", \"gap\")}\n ${getSpacingClass(\"sm\", \"px\")}\n ${getSpacingClass(\"sm\", \"py\")}\n ${getTypographySize(\"bodySmall\")}\n text-fg-primary\n cursor-pointer\n transition-colors\n hover:bg-surface-hover\n focus:bg-surface-hover\n focus:outline-none\n ${disabled ? \"opacity-50 cursor-not-allowed\" : \"\"}\n ${className}\n `}\n {...props}\n >\n {icon && <span className=\"shrink-0\">{icon}</span>}\n <span className=\"flex-1\">{children}</span>\n {hasSubmenu && (\n <ChevronRight className=\"h-4 w-4 text-fg-secondary shrink-0\" />\n )}\n {rightIcon && !hasSubmenu && (\n <span className=\"shrink-0\">{rightIcon}</span>\n )}\n </div>\n );\n});\n\nMenuItem.displayName = \"MenuItem\";\n\nexport default MenuItem;\n"],"names":["MenuItem","forwardRef","_a","ref","_b","children","icon","rightIcon","disabled","onClick","onSelect","hasSubmenu","className","props","__objRest","closeMenu","useMenuContext","handleClick","e","jsxs","__spreadProps","__spreadValues","getSpacingClass","getTypographySize","jsx","ChevronRight"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,MAAMA,IAAWC,EAA0C,SACzDC,GAWAC,GACA;AAZA,MAAAC,IAAAF,GACE;AAAA,cAAAG;AAAA,IACA,MAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,SAAAC;AAAA,IACA,UAAAC;AAAA,IACA,YAAAC,IAAa;AAAA,IACb,WAAAC,IAAY;AAAA,MARdR,GASKS,IAAAC,EATLV,GASK;AAAA,IARH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAKF,QAAM,EAAE,WAAAW,EAAA,IAAcC,EAAA,GAEhBC,IAAc,CAACC,MAAwC;AAC3D,IAAIV,MAEJC,KAAA,QAAAA,EAAUS,IACVR,KAAA,QAAAA,EAAWQ,IAGP,CAACP,KAAc,CAACO,EAAE,oBACpBH,EAAA;AAAA,EAEJ;AAWA,SACE,gBAAAI;AAAA,IAAC;AAAA,IAAAC,EAAAC,EAAA;AAAA,MACC,KAAAlB;AAAA,MACA,MAAK;AAAA,MACL,UAAUK,IAAW,KAAK;AAAA,MAC1B,iBAAeA;AAAA,MACf,SAASS;AAAA,MACT,WAhBkB,CAACC,MAA2C;AAChE,QAAIV,MAEAU,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SACjCA,EAAE,eAAA,GACFD,EAAYC,CAAgD;AAAA,MAEhE;AAAA,MAUI,WAAW;AAAA;AAAA;AAAA,YAGLI,EAAgB,MAAM,KAAK,CAAC;AAAA,YAC5BA,EAAgB,MAAM,IAAI,CAAC;AAAA,YAC3BA,EAAgB,MAAM,IAAI,CAAC;AAAA,YAC3BC,EAAkB,WAAW,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAO9Bf,IAAW,kCAAkC,EAAE;AAAA,YAC/CI,CAAS;AAAA;AAAA,OAEXC,IAvBL;AAAA,MAyBE,UAAA;AAAA,QAAAP,KAAQ,gBAAAkB,EAAC,QAAA,EAAK,WAAU,YAAY,UAAAlB,GAAK;AAAA,QAC1C,gBAAAkB,EAAC,QAAA,EAAK,WAAU,UAAU,UAAAnB,EAAA,CAAS;AAAA,QAClCM,KACC,gBAAAa,EAACC,GAAA,EAAa,WAAU,qCAAA,CAAqC;AAAA,QAE9DlB,KAAa,CAACI,uBACZ,QAAA,EAAK,WAAU,YAAY,UAAAJ,EAAA,CAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAI9C,CAAC;AAEDP,EAAS,cAAc;"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var p = Object.defineProperty;
|
|
3
|
+
var o = Object.getOwnPropertySymbols;
|
|
4
|
+
var i = Object.prototype.hasOwnProperty, l = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var s = (e, r, a) => r in e ? p(e, r, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[r] = a, m = (e, r) => {
|
|
6
|
+
for (var a in r || (r = {}))
|
|
7
|
+
i.call(r, a) && s(e, a, r[a]);
|
|
8
|
+
if (o)
|
|
9
|
+
for (var a of o(r))
|
|
10
|
+
l.call(r, a) && s(e, a, r[a]);
|
|
11
|
+
return e;
|
|
12
|
+
};
|
|
13
|
+
var n = (e, r) => {
|
|
14
|
+
var a = {};
|
|
15
|
+
for (var t in e)
|
|
16
|
+
i.call(e, t) && r.indexOf(t) < 0 && (a[t] = e[t]);
|
|
17
|
+
if (e != null && o)
|
|
18
|
+
for (var t of o(e))
|
|
19
|
+
r.indexOf(t) < 0 && l.call(e, t) && (a[t] = e[t]);
|
|
20
|
+
return a;
|
|
21
|
+
};
|
|
22
|
+
import { jsx as u } from "react/jsx-runtime";
|
|
23
|
+
import { getSpacingClass as f } from "../../tokens/spacing.js";
|
|
24
|
+
function x(a) {
|
|
25
|
+
var t = a, {
|
|
26
|
+
className: e = ""
|
|
27
|
+
} = t, r = n(t, [
|
|
28
|
+
"className"
|
|
29
|
+
]);
|
|
30
|
+
return /* @__PURE__ */ u(
|
|
31
|
+
"div",
|
|
32
|
+
m({
|
|
33
|
+
role: "separator",
|
|
34
|
+
className: `
|
|
35
|
+
h-px
|
|
36
|
+
bg-line-default
|
|
37
|
+
${f("sm", "my")}
|
|
38
|
+
${e}
|
|
39
|
+
`
|
|
40
|
+
}, r)
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
export {
|
|
44
|
+
x as default
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=MenuSeparator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuSeparator.js","sources":["../../../../../src/ui/components/Menu/MenuSeparator.tsx"],"sourcesContent":["\"use client\";\n\nimport { type HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport type MenuSeparatorProps = HTMLAttributes<HTMLDivElement>;\n\n/**\n * MenuSeparator Component\n *\n * A visual separator for menu items.\n *\n * @example\n * ```tsx\n * <MenuSeparator />\n * ```\n */\nexport default function MenuSeparator({\n className = \"\",\n ...props\n}: MenuSeparatorProps) {\n return (\n <div\n role=\"separator\"\n className={`\n h-px\n bg-line-default\n ${getSpacingClass(\"sm\", \"my\")}\n ${className}\n `}\n {...props}\n />\n );\n}\n"],"names":["MenuSeparator","_a","_b","className","props","__objRest","jsx","__spreadValues","getSpacingClass"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAiBA,SAAwBA,EAAcC,GAGf;AAHe,MAAAC,IAAAD,GACpC;AAAA,eAAAE,IAAY;AAAA,MADwBD,GAEjCE,IAAAC,EAFiCH,GAEjC;AAAA,IADH;AAAA;AAGA,SACE,gBAAAI;AAAA,IAAC;AAAA,IAAAC,EAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAW;AAAA;AAAA;AAAA,UAGPC,EAAgB,MAAM,IAAI,CAAC;AAAA,UAC3BL,CAAS;AAAA;AAAA,OAETC;AAAA,EAAA;AAGV;"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var E = Object.defineProperty, R = Object.defineProperties;
|
|
3
|
+
var j = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var s = Object.getOwnPropertySymbols;
|
|
5
|
+
var I = Object.prototype.hasOwnProperty, M = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var b = (o, e, n) => e in o ? E(o, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : o[e] = n, a = (o, e) => {
|
|
7
|
+
for (var n in e || (e = {}))
|
|
8
|
+
I.call(e, n) && b(o, n, e[n]);
|
|
9
|
+
if (s)
|
|
10
|
+
for (var n of s(e))
|
|
11
|
+
M.call(e, n) && b(o, n, e[n]);
|
|
12
|
+
return o;
|
|
13
|
+
}, f = (o, e) => R(o, j(e));
|
|
14
|
+
var v = (o, e) => {
|
|
15
|
+
var n = {};
|
|
16
|
+
for (var t in o)
|
|
17
|
+
I.call(o, t) && e.indexOf(t) < 0 && (n[t] = o[t]);
|
|
18
|
+
if (o != null && s)
|
|
19
|
+
for (var t of s(o))
|
|
20
|
+
e.indexOf(t) < 0 && M.call(o, t) && (n[t] = o[t]);
|
|
21
|
+
return n;
|
|
22
|
+
};
|
|
23
|
+
import { jsx as w } from "react/jsx-runtime";
|
|
24
|
+
import { forwardRef as N, Children as y, isValidElement as O, cloneElement as P } from "react";
|
|
25
|
+
import { useMenuContext as V } from "./MenuContext.js";
|
|
26
|
+
function k(...o) {
|
|
27
|
+
return (e) => {
|
|
28
|
+
for (const n of o)
|
|
29
|
+
n && (typeof n == "function" ? n(e) : n.current = e);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const q = N(
|
|
33
|
+
function(z, c) {
|
|
34
|
+
var d = z, { children: e, asChild: n, onClick: t } = d, l = v(d, ["children", "asChild", "onClick"]);
|
|
35
|
+
var g, x;
|
|
36
|
+
const { isOpen: u, setIsOpen: C } = V(), m = (r) => {
|
|
37
|
+
t == null || t(r), C(!u);
|
|
38
|
+
}, T = y.count(e) === 1 && O(e);
|
|
39
|
+
if (n === !0 || n === void 0 && T) {
|
|
40
|
+
const r = y.only(e), i = r.props.onClick, h = (p) => {
|
|
41
|
+
i == null || i(p), p.defaultPrevented || m(p);
|
|
42
|
+
};
|
|
43
|
+
return P(r, f(a({}, l), {
|
|
44
|
+
role: (g = r.props.role) != null ? g : "button",
|
|
45
|
+
tabIndex: (x = r.props.tabIndex) != null ? x : 0,
|
|
46
|
+
"aria-haspopup": "menu",
|
|
47
|
+
"aria-expanded": u,
|
|
48
|
+
onClick: h,
|
|
49
|
+
ref: k(c, r.props.ref)
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
return /* @__PURE__ */ w(
|
|
53
|
+
"div",
|
|
54
|
+
f(a({
|
|
55
|
+
ref: c,
|
|
56
|
+
onClick: m,
|
|
57
|
+
role: "button",
|
|
58
|
+
tabIndex: 0,
|
|
59
|
+
"aria-haspopup": "menu",
|
|
60
|
+
"aria-expanded": u
|
|
61
|
+
}, l), {
|
|
62
|
+
children: e
|
|
63
|
+
})
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
q.displayName = "MenuTrigger";
|
|
68
|
+
export {
|
|
69
|
+
q as default
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=MenuTrigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuTrigger.js","sources":["../../../../../src/ui/components/Menu/MenuTrigger.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n type ReactNode,\n type ReactElement,\n type HTMLAttributes,\n type MouseEvent,\n type Ref,\n} from \"react\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface MenuTriggerProps extends HTMLAttributes<HTMLElement> {\n children: ReactNode;\n /**\n * Controls whether MenuTrigger merges its trigger semantics (`role`,\n * `aria-haspopup`, `aria-expanded`, `tabIndex`, `onClick`, `ref`) onto\n * its single child, or wraps the child in a `<div role=\"button\">`.\n *\n * - `true` — always clone the (single, valid) child. Throws via\n * `React.Children.only` if children aren't a single element.\n * - `false` — always wrap in a `<div role=\"button\">` (legacy behavior).\n * - `undefined` (default) — infer: clone when there is exactly one\n * valid React element child; otherwise wrap. This default avoids\n * nested-interactive when the canonical\n * `<MenuTrigger><Button/></MenuTrigger>` pattern is used.\n *\n * Note on history: prior versions accepted this prop but never altered\n * the rendered DOM (the wrapper rendered unconditionally) AND a stale\n * `if (!asChild) setIsOpen(...)` gate suppressed the toggle when\n * `asChild={true}` was set. Both were broken contracts — this version\n * implements `asChild` structurally and removes the gate.\n */\n asChild?: boolean;\n}\n\nfunction mergeRefs<T>(...refs: Array<Ref<T> | undefined>): Ref<T> {\n return (node: T | null) => {\n for (const ref of refs) {\n if (!ref) continue;\n if (typeof ref === \"function\") ref(node);\n else (ref as { current: T | null }).current = node;\n }\n };\n}\n\n/**\n * MenuTrigger Component\n *\n * The trigger element that opens/closes the menu. Must be used within a\n * `<Menu>`. By default, when given a single valid React element child,\n * merges trigger semantics onto that child (no wrapper) — so the typical\n * `<MenuTrigger><Button>Open</Button></MenuTrigger>` renders a single\n * `<button>` instead of a `<div role=\"button\">` wrapping a `<button>`.\n */\nconst MenuTrigger = forwardRef<HTMLElement, MenuTriggerProps>(\n function MenuTrigger({ children, asChild, onClick, ...props }, ref) {\n const { isOpen, setIsOpen } = useMenuContext();\n\n const handleClick = (e: MouseEvent<HTMLElement>) => {\n onClick?.(e);\n setIsOpen(!isOpen);\n };\n\n const single = Children.count(children) === 1 && isValidElement(children);\n const shouldClone = asChild === true || (asChild === undefined && single);\n\n if (shouldClone) {\n const child = Children.only(children) as ReactElement<\n HTMLAttributes<HTMLElement> & { ref?: Ref<HTMLElement> }\n >;\n const childOnClick = child.props.onClick;\n const composedClick = (e: MouseEvent<HTMLElement>) => {\n childOnClick?.(e);\n if (!e.defaultPrevented) handleClick(e);\n };\n return cloneElement(child, {\n ...props,\n role: child.props.role ?? \"button\",\n tabIndex: child.props.tabIndex ?? 0,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": isOpen,\n onClick: composedClick,\n ref: mergeRefs(ref, child.props.ref),\n });\n }\n\n return (\n <div\n ref={ref as Ref<HTMLDivElement>}\n onClick={handleClick}\n role=\"button\"\n tabIndex={0}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nMenuTrigger.displayName = \"MenuTrigger\";\n\nexport default MenuTrigger;\n"],"names":["mergeRefs","refs","node","ref","MenuTrigger","forwardRef","_a","_b","children","asChild","onClick","props","__objRest","isOpen","setIsOpen","useMenuContext","handleClick","e","single","Children","isValidElement","child","childOnClick","composedClick","cloneElement","__spreadProps","__spreadValues","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,SAASA,KAAgBC,GAAyC;AAChE,SAAO,CAACC,MAAmB;AACzB,eAAWC,KAAOF;AAChB,MAAKE,MACD,OAAOA,KAAQ,aAAYA,EAAID,CAAI,IACjCC,EAA8B,UAAUD;AAAA,EAElD;AACF;AAWA,MAAME,IAAcC;AAAA,EAClB,SAAqBC,GAA0CH,GAAK;AAA/C,QAAAI,IAAAD,GAAE,YAAAE,GAAU,SAAAC,GAAS,SAAAC,MAArBH,GAAiCI,IAAAC,EAAjCL,GAAiC,CAA/B,YAAU,WAAS;;AACxC,UAAM,EAAE,QAAAM,GAAQ,WAAAC,EAAA,IAAcC,EAAA,GAExBC,IAAc,CAACC,MAA+B;AAClD,MAAAP,KAAA,QAAAA,EAAUO,IACVH,EAAU,CAACD,CAAM;AAAA,IACnB,GAEMK,IAASC,EAAS,MAAMX,CAAQ,MAAM,KAAKY,EAAeZ,CAAQ;AAGxE,QAFoBC,MAAY,MAASA,MAAY,UAAaS,GAEjD;AACf,YAAMG,IAAQF,EAAS,KAAKX,CAAQ,GAG9Bc,IAAeD,EAAM,MAAM,SAC3BE,IAAgB,CAACN,MAA+B;AACpD,QAAAK,KAAA,QAAAA,EAAeL,IACVA,EAAE,oBAAkBD,EAAYC,CAAC;AAAA,MACxC;AACA,aAAOO,EAAaH,GAAOI,EAAAC,EAAA,IACtBf,IADsB;AAAA,QAEzB,OAAML,IAAAe,EAAM,MAAM,SAAZ,OAAAf,IAAoB;AAAA,QAC1B,WAAUC,IAAAc,EAAM,MAAM,aAAZ,OAAAd,IAAwB;AAAA,QAClC,iBAAiB;AAAA,QACjB,iBAAiBM;AAAA,QACjB,SAASU;AAAA,QACT,KAAKvB,EAAUG,GAAKkB,EAAM,MAAM,GAAG;AAAA,MAAA,EACpC;AAAA,IACH;AAEA,WACE,gBAAAM;AAAA,MAAC;AAAA,MAAAF,EAAAC,EAAA;AAAA,QACC,KAAAvB;AAAA,QACA,SAASa;AAAA,QACT,MAAK;AAAA,QACL,UAAU;AAAA,QACV,iBAAc;AAAA,QACd,iBAAeH;AAAA,SACXF,IAPL;AAAA,QASE,UAAAH;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEAJ,EAAY,cAAc;"}
|