@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 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarGroup.js","sources":["../../../../../../../src/ui/components/SideNavbar/components/Sidebar/SidebarGroup.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef } from \"react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { useSidebarRequired } from \"../../contexts/SidebarContext\";\nimport { useSideNavbarStateRequired } from \"../../contexts/SideNavbarStateContext\";\nimport { useSideNavbarThemeRequired } from \"../../contexts/SideNavbarThemeContext\";\nimport Collapsible from \"../../../../primitives/Collapsible/Collapsible\";\nimport { getSpacingClass } from \"../../../../tokens/spacing\";\nimport type { SidebarGroupProps } from \"../../types\";\n\n/**\n * Group component for the Sidebar subcomponent\n *\n * Creates a collapsible section within the sidebar content.\n * State is managed by the root SideNavbar context.\n *\n * @example\n * ```tsx\n * <SideNavbar.Sidebar.Group\n * id=\"filters\"\n * title=\"Filters\"\n * icon={<Filter />}\n * collapsible\n * >\n * <FilterList />\n * </SideNavbar.Sidebar.Group>\n * ```\n */\nexport default function SidebarGroup({\n id,\n title,\n icon,\n actions,\n collapsible = true,\n defaultCollapsed = false,\n children,\n className = \"\",\n ...props\n}: SidebarGroupProps) {\n const {\n collapsed: sidebarCollapsed,\n activeGroup,\n setActiveGroup,\n } = useSidebarRequired();\n const { groupStates, toggleGroup, setGroupCollapsed } =\n useSideNavbarStateRequired();\n const { animationDuration } = useSideNavbarThemeRequired();\n const hasInitialized = useRef(false);\n\n // Initialize group state on mount (only once)\n useEffect(() => {\n if (!hasInitialized.current && groupStates[id] === undefined) {\n hasInitialized.current = true;\n setGroupCollapsed(id, defaultCollapsed);\n }\n }, [id, defaultCollapsed, groupStates, setGroupCollapsed]);\n\n // Don't render if sidebar is collapsed\n if (sidebarCollapsed) {\n return null;\n }\n\n const isCollapsed = groupStates[id] ?? defaultCollapsed;\n const isActive = activeGroup === id;\n\n const handleHeaderClick = () => {\n setActiveGroup(id);\n if (collapsible) {\n toggleGroup(id);\n }\n };\n\n return (\n <div\n className={`\n border-b\n border-line-default\n last:border-b-0\n ${className}\n `}\n {...props}\n >\n {title && (\n <button\n type=\"button\"\n onClick={handleHeaderClick}\n className={`\n flex\n items-center\n justify-between\n w-full\n ${getSpacingClass(\"md\", \"px\")}\n ${getSpacingClass(\"2.5\", \"py\")}\n text-left\n transition-colors\n duration-150\n ${isActive ? \"bg-surface-active\" : \"hover:bg-surface-active\"}\n ${!collapsible ? \"cursor-default\" : \"cursor-pointer\"}\n `}\n aria-expanded={collapsible ? !isCollapsed : undefined}\n aria-controls={collapsible ? `sidebar-group-${id}` : undefined}\n >\n <div className={`flex items-center ${getSpacingClass(\"sm\", \"gap\")}`}>\n {icon && <span className=\"w-4 h-4 text-fg-tertiary\">{icon}</span>}\n <span className=\"text-sm font-medium text-fg-secondary\">\n {title}\n </span>\n </div>\n <div className={`flex items-center ${getSpacingClass(\"sm\", \"gap\")}`}>\n {actions}\n {collapsible && (\n <ChevronDown\n className={`\n w-4\n h-4\n text-fg-tertiary\n transition-transform\n ${isCollapsed ? \"-rotate-90\" : \"rotate-0\"}\n `}\n style={{ transitionDuration: `${animationDuration}ms` }}\n aria-hidden=\"true\"\n />\n )}\n </div>\n </button>\n )}\n\n {collapsible ? (\n <Collapsible open={!isCollapsed} duration={animationDuration}>\n <div\n id={`sidebar-group-${id}`}\n className={`${getSpacingClass(\"md\", \"px\")} ${getSpacingClass(\"sm\", \"py\")}`}\n >\n {children}\n </div>\n </Collapsible>\n ) : (\n <div\n className={`${getSpacingClass(\"md\", \"px\")} ${getSpacingClass(\"sm\", \"py\")}`}\n >\n {children}\n </div>\n )}\n </div>\n );\n}\n"],"names":["SidebarGroup","_a","_b","id","title","icon","actions","collapsible","defaultCollapsed","children","className","props","__objRest","sidebarCollapsed","activeGroup","setActiveGroup","useSidebarRequired","groupStates","toggleGroup","setGroupCollapsed","useSideNavbarStateRequired","animationDuration","useSideNavbarThemeRequired","hasInitialized","useRef","useEffect","isCollapsed","isActive","handleHeaderClick","jsxs","__spreadProps","__spreadValues","getSpacingClass","jsx","ChevronDown","Collapsible"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAwBA,EAAaC,GAUf;AAVe,MAAAC,IAAAD,GACnC;AAAA,QAAAE;AAAA,IACA,OAAAC;AAAA,IACA,MAAAC;AAAA,IACA,SAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,kBAAAC,IAAmB;AAAA,IACnB,UAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,MARuBR,GAShCS,IAAAC,EATgCV,GAShC;AAAA,IARH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;;AAGA,QAAM;AAAA,IACJ,WAAWW;AAAA,IACX,aAAAC;AAAA,IACA,gBAAAC;AAAA,EAAA,IACEC,EAAA,GACE,EAAE,aAAAC,GAAa,aAAAC,GAAa,mBAAAC,EAAA,IAChCC,EAAA,GACI,EAAE,mBAAAC,EAAA,IAAsBC,EAAA,GACxBC,IAAiBC,EAAO,EAAK;AAWnC,MARAC,EAAU,MAAM;AACd,IAAI,CAACF,EAAe,WAAWN,EAAYd,CAAE,MAAM,WACjDoB,EAAe,UAAU,IACzBJ,EAAkBhB,GAAIK,CAAgB;AAAA,EAE1C,GAAG,CAACL,GAAIK,GAAkBS,GAAaE,CAAiB,CAAC,GAGrDN;AACF,WAAO;AAGT,QAAMa,KAAczB,IAAAgB,EAAYd,CAAE,MAAd,OAAAF,IAAmBO,GACjCmB,IAAWb,MAAgBX,GAE3ByB,IAAoB,MAAM;AAC9B,IAAAb,EAAeZ,CAAE,GACbI,KACFW,EAAYf,CAAE;AAAA,EAElB;AAEA,SACE,gBAAA0B;AAAA,IAAC;AAAA,IAAAC,EAAAC,EAAA;AAAA,MACC,WAAW;AAAA;AAAA;AAAA;AAAA,UAIPrB,CAAS;AAAA;AAAA,OAETC,IAPL;AAAA,MASE,UAAA;AAAA,QAAAP,KACC,gBAAAyB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAASD;AAAA,YACT,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,cAKPI,EAAgB,MAAM,IAAI,CAAC;AAAA,cAC3BA,EAAgB,OAAO,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,cAI5BL,IAAW,sBAAsB,yBAAyB;AAAA,cACzDpB,IAAiC,mBAAnB,gBAAmC;AAAA;AAAA,YAEtD,iBAAeA,IAAc,CAACmB,IAAc;AAAA,YAC5C,iBAAenB,IAAc,iBAAiBJ,CAAE,KAAK;AAAA,YAErD,UAAA;AAAA,cAAA,gBAAA0B,EAAC,SAAI,WAAW,qBAAqBG,EAAgB,MAAM,KAAK,CAAC,IAC9D,UAAA;AAAA,gBAAA3B,KAAQ,gBAAA4B,EAAC,QAAA,EAAK,WAAU,4BAA4B,UAAA5B,GAAK;AAAA,gBAC1D,gBAAA4B,EAAC,QAAA,EAAK,WAAU,yCACb,UAAA7B,EAAA,CACH;AAAA,cAAA,GACF;AAAA,cACA,gBAAAyB,EAAC,SAAI,WAAW,qBAAqBG,EAAgB,MAAM,KAAK,CAAC,IAC9D,UAAA;AAAA,gBAAA1B;AAAA,gBACAC,KACC,gBAAA0B;AAAA,kBAACC;AAAA,kBAAA;AAAA,oBACC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKPR,IAAc,eAAe,UAAU;AAAA;AAAA,oBAE3C,OAAO,EAAE,oBAAoB,GAAGL,CAAiB,KAAA;AAAA,oBACjD,eAAY;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACd,EAAA,CAEJ;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAIHd,IACC,gBAAA0B,EAACE,GAAA,EAAY,MAAM,CAACT,GAAa,UAAUL,GACzC,UAAA,gBAAAY;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAI,iBAAiB9B,CAAE;AAAA,YACvB,WAAW,GAAG6B,EAAgB,MAAM,IAAI,CAAC,IAAIA,EAAgB,MAAM,IAAI,CAAC;AAAA,YAEvE,UAAAvB;AAAA,UAAA;AAAA,QAAA,GAEL,IAEA,gBAAAwB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,GAAGD,EAAgB,MAAM,IAAI,CAAC,IAAIA,EAAgB,MAAM,IAAI,CAAC;AAAA,YAEvE,UAAAvB;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAIR;"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var S = Object.defineProperty, H = Object.defineProperties;
|
|
3
|
+
var N = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var n = Object.getOwnPropertySymbols;
|
|
5
|
+
var f = Object.prototype.hasOwnProperty, c = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var l = (e, r, s) => r in e ? S(e, r, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[r] = s, p = (e, r) => {
|
|
7
|
+
for (var s in r || (r = {}))
|
|
8
|
+
f.call(r, s) && l(e, s, r[s]);
|
|
9
|
+
if (n)
|
|
10
|
+
for (var s of n(r))
|
|
11
|
+
c.call(r, s) && l(e, s, r[s]);
|
|
12
|
+
return e;
|
|
13
|
+
}, u = (e, r) => H(e, N(r));
|
|
14
|
+
var g = (e, r) => {
|
|
15
|
+
var s = {};
|
|
16
|
+
for (var a in e)
|
|
17
|
+
f.call(e, a) && r.indexOf(a) < 0 && (s[a] = e[a]);
|
|
18
|
+
if (e != null && n)
|
|
19
|
+
for (var a of n(e))
|
|
20
|
+
r.indexOf(a) < 0 && c.call(e, a) && (s[a] = e[a]);
|
|
21
|
+
return s;
|
|
22
|
+
};
|
|
23
|
+
import { jsx as o, jsxs as j, Fragment as C } from "react/jsx-runtime";
|
|
24
|
+
import { useEffect as k } from "react";
|
|
25
|
+
import { useSidebarRequired as q } from "../../contexts/SidebarContext.js";
|
|
26
|
+
import { getTypographyClasses as $ } from "../../../../tokens/typography.js";
|
|
27
|
+
import { getSpacingClass as t } from "../../../../tokens/spacing.js";
|
|
28
|
+
function A(v) {
|
|
29
|
+
var m = v, {
|
|
30
|
+
title: e,
|
|
31
|
+
subtitle: r,
|
|
32
|
+
showBorder: s = !0,
|
|
33
|
+
children: a,
|
|
34
|
+
className: b = "",
|
|
35
|
+
style: h
|
|
36
|
+
} = m, x = g(m, [
|
|
37
|
+
"title",
|
|
38
|
+
"subtitle",
|
|
39
|
+
"showBorder",
|
|
40
|
+
"children",
|
|
41
|
+
"className",
|
|
42
|
+
"style"
|
|
43
|
+
]);
|
|
44
|
+
const { collapsed: y, registerHeader: i, unregisterHeader: d } = q();
|
|
45
|
+
return k(() => (i(), () => d()), [i, d]), y ? null : /* @__PURE__ */ o(
|
|
46
|
+
"div",
|
|
47
|
+
u(p({
|
|
48
|
+
className: `
|
|
49
|
+
flex-shrink-0
|
|
50
|
+
${t("md", "px")}
|
|
51
|
+
${t("sm", "py")}
|
|
52
|
+
${s ? "border-b border-line-default" : ""}
|
|
53
|
+
bg-surface-subtle
|
|
54
|
+
${b}
|
|
55
|
+
`,
|
|
56
|
+
style: h
|
|
57
|
+
}, x), {
|
|
58
|
+
children: a || /* @__PURE__ */ j(C, { children: [
|
|
59
|
+
e && /* @__PURE__ */ o(
|
|
60
|
+
"h2",
|
|
61
|
+
{
|
|
62
|
+
className: `
|
|
63
|
+
${$("h4")}
|
|
64
|
+
text-fg-primary
|
|
65
|
+
${t("none", "m")}
|
|
66
|
+
font-semibold
|
|
67
|
+
`,
|
|
68
|
+
children: e
|
|
69
|
+
}
|
|
70
|
+
),
|
|
71
|
+
r && /* @__PURE__ */ o(
|
|
72
|
+
"p",
|
|
73
|
+
{
|
|
74
|
+
className: `
|
|
75
|
+
${$("bodySmall")}
|
|
76
|
+
text-fg-secondary
|
|
77
|
+
${t("none", "m")}
|
|
78
|
+
${t("xs", "mt")}
|
|
79
|
+
`,
|
|
80
|
+
children: r
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
] })
|
|
84
|
+
})
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
export {
|
|
88
|
+
A as default
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=SidebarHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarHeader.js","sources":["../../../../../../../src/ui/components/SideNavbar/components/Sidebar/SidebarHeader.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useSidebarRequired } from \"../../contexts/SidebarContext\";\nimport { getSpacingClass, getTypographyClasses } from \"../../../../tokens\";\nimport type { SidebarHeaderProps } from \"../../types\";\n\n/**\n * Header component for the Sidebar subcomponent\n *\n * Displays a title and optional subtitle at the top of the sidebar content.\n * Automatically registers its presence with the Sidebar context.\n *\n * @example\n * ```tsx\n * <SideNavbar.Sidebar.Header title=\"Dashboard\" subtitle=\"Overview\" />\n * ```\n */\nexport default function SidebarHeader({\n title,\n subtitle,\n showBorder = true,\n children,\n className = \"\",\n style,\n ...props\n}: SidebarHeaderProps) {\n const { collapsed, registerHeader, unregisterHeader } = useSidebarRequired();\n\n // Register header presence with Sidebar context\n useEffect(() => {\n registerHeader();\n return () => unregisterHeader();\n }, [registerHeader, unregisterHeader]);\n\n if (collapsed) {\n return null;\n }\n\n return (\n <div\n className={`\n flex-shrink-0\n ${getSpacingClass(\"md\", \"px\")}\n ${getSpacingClass(\"sm\", \"py\")}\n ${showBorder ? \"border-b border-line-default\" : \"\"}\n bg-surface-subtle\n ${className}\n `}\n style={style}\n {...props}\n >\n {children || (\n <>\n {title && (\n <h2\n className={`\n ${getTypographyClasses(\"h4\")}\n text-fg-primary\n ${getSpacingClass(\"none\", \"m\")}\n font-semibold\n `}\n >\n {title}\n </h2>\n )}\n {subtitle && (\n <p\n className={`\n ${getTypographyClasses(\"bodySmall\")}\n text-fg-secondary\n ${getSpacingClass(\"none\", \"m\")}\n ${getSpacingClass(\"xs\", \"mt\")}\n `}\n >\n {subtitle}\n </p>\n )}\n </>\n )}\n </div>\n );\n}\n"],"names":["SidebarHeader","_a","_b","title","subtitle","showBorder","children","className","style","props","__objRest","collapsed","registerHeader","unregisterHeader","useSidebarRequired","useEffect","jsx","__spreadProps","__spreadValues","getSpacingClass","jsxs","Fragment","getTypographyClasses"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,SAAwBA,EAAcC,GAQf;AARe,MAAAC,IAAAD,GACpC;AAAA,WAAAE;AAAA,IACA,UAAAC;AAAA,IACA,YAAAC,IAAa;AAAA,IACb,UAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,OAAAC;AAAA,MANoCN,GAOjCO,IAAAC,EAPiCR,GAOjC;AAAA,IANH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,EAAE,WAAAS,GAAW,gBAAAC,GAAgB,kBAAAC,EAAA,IAAqBC,EAAA;AAQxD,SALAC,EAAU,OACRH,EAAA,GACO,MAAMC,EAAA,IACZ,CAACD,GAAgBC,CAAgB,CAAC,GAEjCF,IACK,OAIP,gBAAAK;AAAA,IAAC;AAAA,IAAAC,EAAAC,EAAA;AAAA,MACC,WAAW;AAAA;AAAA,UAEPC,EAAgB,MAAM,IAAI,CAAC;AAAA,UAC3BA,EAAgB,MAAM,IAAI,CAAC;AAAA,UAC3Bd,IAAa,iCAAiC,EAAE;AAAA;AAAA,UAEhDE,CAAS;AAAA;AAAA,MAEb,OAAAC;AAAA,OACIC,IAVL;AAAA,MAYE,eACC,gBAAAW,EAAAC,GAAA,EACG,UAAA;AAAA,QAAAlB,KACC,gBAAAa;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW;AAAA,kBACPM,EAAqB,IAAI,CAAC;AAAA;AAAA,kBAE1BH,EAAgB,QAAQ,GAAG,CAAC;AAAA;AAAA;AAAA,YAI/B,UAAAhB;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJC,KACC,gBAAAY;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW;AAAA,kBACPM,EAAqB,WAAW,CAAC;AAAA;AAAA,kBAEjCH,EAAgB,QAAQ,GAAG,CAAC;AAAA,kBAC5BA,EAAgB,MAAM,IAAI,CAAC;AAAA;AAAA,YAG9B,UAAAf;AAAA,UAAA;AAAA,QAAA;AAAA,MACH,EAAA,CAEJ;AAAA,IAAA;AAAA,EAAA;AAIR;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as n, Fragment as f } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect as i } from "react";
|
|
4
|
+
import { useSidebarSlotRequired as m } from "../../contexts/SidebarSlotContext.js";
|
|
5
|
+
function a({ id: t, children: r }) {
|
|
6
|
+
const { activeSlot: u, registerSlot: e, unregisterSlot: o } = m();
|
|
7
|
+
return i(() => (e(t, r), () => o(t)), [t, r, e, o]), u !== t ? null : /* @__PURE__ */ n(f, { children: r });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
a as SidebarSlot
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=SidebarSlot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarSlot.js","sources":["../../../../../../../src/ui/components/SideNavbar/components/Sidebar/SidebarSlot.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, type ReactNode } from \"react\";\nimport { useSidebarSlotRequired } from \"../../contexts/SidebarSlotContext\";\n\nexport interface SidebarSlotProps {\n /** Unique slot identifier */\n id: string;\n /** Slot content */\n children: ReactNode;\n}\n\n/**\n * SidebarSlot Component\n *\n * **Note: Slots are exclusive to the Sidebar component, not the Navbar.**\n *\n * Registers a content slot that can be displayed dynamically within the Sidebar.\n * The slot content is only rendered when it's the active slot.\n * Use this to switch between different content views in the Sidebar based on navigation.\n *\n * @example\n * ```tsx\n * <SideNavbar>\n * <SideNavbar.Navbar>\n * <SideNavbar.Navbar.Item icon={<Home />} label=\"Home\" />\n * </SideNavbar.Navbar>\n *\n * <SidebarSlotProvider defaultSlot=\"dashboard\">\n * <SideNavbar.Sidebar>\n * <SideNavbar.Sidebar.Content>\n * <SidebarSlot id=\"dashboard\">\n * <DashboardContent />\n * </SidebarSlot>\n * <SidebarSlot id=\"settings\">\n * <SettingsContent />\n * </SidebarSlot>\n * <SidebarSlotContent />\n * </SideNavbar.Sidebar.Content>\n * </SideNavbar.Sidebar>\n * </SidebarSlotProvider>\n * </SideNavbar>\n * ```\n */\nexport function SidebarSlot({ id, children }: SidebarSlotProps) {\n const { activeSlot, registerSlot, unregisterSlot } = useSidebarSlotRequired();\n\n useEffect(() => {\n registerSlot(id, children);\n return () => unregisterSlot(id);\n }, [id, children, registerSlot, unregisterSlot]);\n\n // Only render if this is the active slot\n if (activeSlot !== id) {\n return null;\n }\n\n return <>{children}</>;\n}\n"],"names":["SidebarSlot","id","children","activeSlot","registerSlot","unregisterSlot","useSidebarSlotRequired","useEffect"],"mappings":";;;;AA4CO,SAASA,EAAY,EAAE,IAAAC,GAAI,UAAAC,KAA8B;AAC9D,QAAM,EAAE,YAAAC,GAAY,cAAAC,GAAc,gBAAAC,EAAA,IAAmBC,EAAA;AAQrD,SANAC,EAAU,OACRH,EAAaH,GAAIC,CAAQ,GAClB,MAAMG,EAAeJ,CAAE,IAC7B,CAACA,GAAIC,GAAUE,GAAcC,CAAc,CAAC,GAG3CF,MAAeF,IACV,8BAGC,UAAAC,GAAS;AACrB;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as r, Fragment as n } from "react/jsx-runtime";
|
|
3
|
+
import { useSidebarSlotRequired as i } from "../../contexts/SidebarSlotContext.js";
|
|
4
|
+
function u({
|
|
5
|
+
fallback: o = null
|
|
6
|
+
}) {
|
|
7
|
+
const { activeSlot: t, slots: e } = i();
|
|
8
|
+
return !t || !e.has(t) ? /* @__PURE__ */ r(n, { children: o }) : /* @__PURE__ */ r(n, { children: e.get(t) });
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
u as SidebarSlotContent
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=SidebarSlotContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarSlotContent.js","sources":["../../../../../../../src/ui/components/SideNavbar/components/Sidebar/SidebarSlotContent.tsx"],"sourcesContent":["\"use client\";\n\nimport { type ReactNode } from \"react\";\nimport { useSidebarSlotRequired } from \"../../contexts/SidebarSlotContext\";\n\nexport interface SidebarSlotContentProps {\n /** Fallback content when no slot is active */\n fallback?: ReactNode;\n}\n\n/**\n * SidebarSlotContent Component\n *\n * **Note: This component is exclusive to the Sidebar, not the Navbar.**\n *\n * Container that renders the currently active slot content within the Sidebar.\n * Displays fallback content if no slot is active.\n * Must be used inside a SidebarSlotProvider and within the Sidebar component.\n *\n * @example\n * ```tsx\n * <SideNavbar.Sidebar>\n * <SideNavbar.Sidebar.Content>\n * <SidebarSlotProvider defaultSlot=\"dashboard\">\n * <SidebarSlot id=\"dashboard\">\n * <DashboardContent />\n * </SidebarSlot>\n * <SidebarSlotContent fallback={<EmptyState />} />\n * </SidebarSlotProvider>\n * </SideNavbar.Sidebar.Content>\n * </SideNavbar.Sidebar>\n * ```\n */\nexport function SidebarSlotContent({\n fallback = null,\n}: SidebarSlotContentProps) {\n const { activeSlot, slots } = useSidebarSlotRequired();\n\n if (!activeSlot || !slots.has(activeSlot)) {\n return <>{fallback}</>;\n }\n\n return <>{slots.get(activeSlot)}</>;\n}\n"],"names":["SidebarSlotContent","fallback","activeSlot","slots","useSidebarSlotRequired","jsx","Fragment"],"mappings":";;;AAiCO,SAASA,EAAmB;AAAA,EACjC,UAAAC,IAAW;AACb,GAA4B;AAC1B,QAAM,EAAE,YAAAC,GAAY,OAAAC,EAAA,IAAUC,EAAA;AAE9B,SAAI,CAACF,KAAc,CAACC,EAAM,IAAID,CAAU,2BAC5B,UAAAD,EAAA,CAAS,IAGd,gBAAAI,EAAAC,GAAA,EAAG,UAAAH,EAAM,IAAID,CAAU,GAAE;AAClC;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { createContext as n, useContext as t } from "react";
|
|
3
|
+
const r = n(null);
|
|
4
|
+
function a() {
|
|
5
|
+
return t(r);
|
|
6
|
+
}
|
|
7
|
+
function u() {
|
|
8
|
+
const e = t(r);
|
|
9
|
+
if (!e)
|
|
10
|
+
throw new Error(
|
|
11
|
+
"useNavbarRequired must be used within a SideNavbar.Navbar component"
|
|
12
|
+
);
|
|
13
|
+
return e;
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
r as NavbarContext,
|
|
17
|
+
a as useNavbar,
|
|
18
|
+
u as useNavbarRequired
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=NavbarContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NavbarContext.js","sources":["../../../../../../src/ui/components/SideNavbar/contexts/NavbarContext.tsx"],"sourcesContent":["\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useContext } from \"react\";\nimport type { NavbarContextValue } from \"../types\";\n\n/**\n * Context for the Navbar subcomponent\n *\n * Provides navbar-specific state that inherits from the root SideNavbar context.\n * Must be used within a Navbar component.\n */\nexport const NavbarContext = createContext<NavbarContextValue | null>(null);\n\n/**\n * Hook to access Navbar context (returns null if outside Navbar)\n */\nexport function useNavbar(): NavbarContextValue | null {\n return useContext(NavbarContext);\n}\n\n/**\n * Hook to access Navbar context (throws if outside Navbar)\n * @throws Error if used outside of Navbar component\n */\nexport function useNavbarRequired(): NavbarContextValue {\n const context = useContext(NavbarContext);\n if (!context) {\n throw new Error(\n \"useNavbarRequired must be used within a SideNavbar.Navbar component\",\n );\n }\n return context;\n}\n\nexport default NavbarContext;\n"],"names":["NavbarContext","createContext","useNavbar","useContext","useNavbarRequired","context"],"mappings":";;AAYO,MAAMA,IAAgBC,EAAyC,IAAI;AAKnE,SAASC,IAAuC;AACrD,SAAOC,EAAWH,CAAa;AACjC;AAMO,SAASI,IAAwC;AACtD,QAAMC,IAAUF,EAAWH,CAAa;AACxC,MAAI,CAACK;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,SAAOA;AACT;"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useContext as t, createContext as i } from "react";
|
|
3
|
+
const o = i(null);
|
|
4
|
+
function a() {
|
|
5
|
+
return t(o);
|
|
6
|
+
}
|
|
7
|
+
function n() {
|
|
8
|
+
const e = t(o);
|
|
9
|
+
if (!e)
|
|
10
|
+
throw new Error(
|
|
11
|
+
"useSideNavbarConfigRequired must be used within SideNavbarConfigProvider"
|
|
12
|
+
);
|
|
13
|
+
return e;
|
|
14
|
+
}
|
|
15
|
+
const s = {
|
|
16
|
+
mode: "full",
|
|
17
|
+
resizable: !1,
|
|
18
|
+
minWidth: void 0,
|
|
19
|
+
maxWidth: void 0,
|
|
20
|
+
snapPoints: void 0,
|
|
21
|
+
responsive: !1,
|
|
22
|
+
mobileBreakpoint: 768,
|
|
23
|
+
mobileVariant: "collapse",
|
|
24
|
+
overlayBackdrop: !0,
|
|
25
|
+
persistState: !0,
|
|
26
|
+
persistWidth: !1,
|
|
27
|
+
storageKey: void 0,
|
|
28
|
+
keyboardShortcut: "Ctrl+B",
|
|
29
|
+
enableKeyboardShortcut: !0
|
|
30
|
+
};
|
|
31
|
+
export {
|
|
32
|
+
o as SideNavbarConfigContext,
|
|
33
|
+
s as defaultConfigValues,
|
|
34
|
+
a as useSideNavbarConfig,
|
|
35
|
+
n as useSideNavbarConfigRequired
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=SideNavbarConfigContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SideNavbarConfigContext.js","sources":["../../../../../../src/ui/components/SideNavbar/contexts/SideNavbarConfigContext.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { SideNavbarConfigContextValue } from \"../types\";\n\n/**\n * Config context for SideNavbar behavior configuration.\n * Contains behavioral settings that typically don't change during runtime.\n */\nexport const SideNavbarConfigContext =\n createContext<SideNavbarConfigContextValue | null>(null);\n\n/**\n * Hook to access SideNavbar config context.\n * Returns null if used outside of provider.\n */\nexport function useSideNavbarConfig(): SideNavbarConfigContextValue | null {\n return useContext(SideNavbarConfigContext);\n}\n\n/**\n * Hook to access SideNavbar config context with required check.\n * Throws error if used outside of provider.\n */\nexport function useSideNavbarConfigRequired(): SideNavbarConfigContextValue {\n const context = useContext(SideNavbarConfigContext);\n if (!context) {\n throw new Error(\n \"useSideNavbarConfigRequired must be used within SideNavbarConfigProvider\",\n );\n }\n return context;\n}\n\n// Default values\nexport const defaultConfigValues: SideNavbarConfigContextValue = {\n mode: \"full\",\n resizable: false,\n minWidth: undefined,\n maxWidth: undefined,\n snapPoints: undefined,\n responsive: false,\n mobileBreakpoint: 768,\n mobileVariant: \"collapse\",\n overlayBackdrop: true,\n persistState: true,\n persistWidth: false,\n storageKey: undefined,\n keyboardShortcut: \"Ctrl+B\",\n enableKeyboardShortcut: true,\n};\n"],"names":["SideNavbarConfigContext","createContext","useSideNavbarConfig","useContext","useSideNavbarConfigRequired","context","defaultConfigValues"],"mappings":";;AASO,MAAMA,IACXC,EAAmD,IAAI;AAMlD,SAASC,IAA2D;AACzE,SAAOC,EAAWH,CAAuB;AAC3C;AAMO,SAASI,IAA4D;AAC1E,QAAMC,IAAUF,EAAWH,CAAuB;AAClD,MAAI,CAACK;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,SAAOA;AACT;AAGO,MAAMC,IAAoD;AAAA,EAC/D,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AAAA,EACV,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,wBAAwB;AAC1B;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useContext as t, createContext as a } from "react";
|
|
3
|
+
const r = a(null);
|
|
4
|
+
function i() {
|
|
5
|
+
return t(r);
|
|
6
|
+
}
|
|
7
|
+
function o() {
|
|
8
|
+
const e = t(r);
|
|
9
|
+
if (!e)
|
|
10
|
+
throw new Error(
|
|
11
|
+
"useSideNavbarStateRequired must be used within SideNavbarStateProvider"
|
|
12
|
+
);
|
|
13
|
+
return e;
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
r as SideNavbarStateContext,
|
|
17
|
+
i as useSideNavbarState,
|
|
18
|
+
o as useSideNavbarStateRequired
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=SideNavbarStateContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SideNavbarStateContext.js","sources":["../../../../../../src/ui/components/SideNavbar/contexts/SideNavbarStateContext.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { SideNavbarStateContextValue } from \"../types\";\n\n/**\n * State context for SideNavbar runtime state.\n * Contains mutable state that changes during component lifecycle.\n */\nexport const SideNavbarStateContext =\n createContext<SideNavbarStateContextValue | null>(null);\n\n/**\n * Hook to access SideNavbar state context.\n * Returns null if used outside of provider.\n */\nexport function useSideNavbarState(): SideNavbarStateContextValue | null {\n return useContext(SideNavbarStateContext);\n}\n\n/**\n * Hook to access SideNavbar state context with required check.\n * Throws error if used outside of provider.\n */\nexport function useSideNavbarStateRequired(): SideNavbarStateContextValue {\n const context = useContext(SideNavbarStateContext);\n if (!context) {\n throw new Error(\n \"useSideNavbarStateRequired must be used within SideNavbarStateProvider\",\n );\n }\n return context;\n}\n\n// Default values factory (needs ref)\nexport function createDefaultStateValues(): SideNavbarStateContextValue {\n return {\n collapsed: false,\n toggle: () => {},\n setCollapsed: () => {},\n currentWidth: 320,\n setWidth: () => {},\n isMobile: false,\n isResizing: false,\n startResize: () => {},\n groupStates: {},\n toggleGroup: () => {},\n setGroupCollapsed: () => {},\n sidebarRef: { current: null },\n };\n}\n"],"names":["SideNavbarStateContext","createContext","useSideNavbarState","useContext","useSideNavbarStateRequired","context"],"mappings":";;AASO,MAAMA,IACXC,EAAkD,IAAI;AAMjD,SAASC,IAAyD;AACvE,SAAOC,EAAWH,CAAsB;AAC1C;AAMO,SAASI,IAA0D;AACxE,QAAMC,IAAUF,EAAWH,CAAsB;AACjD,MAAI,CAACK;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,SAAOA;AACT;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useContext as t, createContext as i } from "react";
|
|
3
|
+
const n = i(null);
|
|
4
|
+
function r() {
|
|
5
|
+
return t(n);
|
|
6
|
+
}
|
|
7
|
+
function o() {
|
|
8
|
+
const e = t(n);
|
|
9
|
+
if (!e)
|
|
10
|
+
throw new Error(
|
|
11
|
+
"useSideNavbarThemeRequired must be used within SideNavbarThemeProvider"
|
|
12
|
+
);
|
|
13
|
+
return e;
|
|
14
|
+
}
|
|
15
|
+
const u = {
|
|
16
|
+
variant: "default",
|
|
17
|
+
navigationWidth: "56px",
|
|
18
|
+
contentWidth: "320px",
|
|
19
|
+
animationDuration: 300,
|
|
20
|
+
animationEasing: "ease-in-out"
|
|
21
|
+
};
|
|
22
|
+
export {
|
|
23
|
+
n as SideNavbarThemeContext,
|
|
24
|
+
u as defaultThemeValues,
|
|
25
|
+
r as useSideNavbarTheme,
|
|
26
|
+
o as useSideNavbarThemeRequired
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=SideNavbarThemeContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SideNavbarThemeContext.js","sources":["../../../../../../src/ui/components/SideNavbar/contexts/SideNavbarThemeContext.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { SideNavbarThemeContextValue } from \"../types\";\n\n/**\n * Theme context for SideNavbar styling configuration.\n * Contains visual customization options that typically don't change during runtime.\n */\nexport const SideNavbarThemeContext =\n createContext<SideNavbarThemeContextValue | null>(null);\n\n/**\n * Hook to access SideNavbar theme context.\n * Returns null if used outside of provider.\n */\nexport function useSideNavbarTheme(): SideNavbarThemeContextValue | null {\n return useContext(SideNavbarThemeContext);\n}\n\n/**\n * Hook to access SideNavbar theme context with required check.\n * Throws error if used outside of provider.\n */\nexport function useSideNavbarThemeRequired(): SideNavbarThemeContextValue {\n const context = useContext(SideNavbarThemeContext);\n if (!context) {\n throw new Error(\n \"useSideNavbarThemeRequired must be used within SideNavbarThemeProvider\",\n );\n }\n return context;\n}\n\n// Default values\nexport const defaultThemeValues: SideNavbarThemeContextValue = {\n variant: \"default\",\n navigationWidth: \"56px\",\n contentWidth: \"320px\",\n animationDuration: 300,\n animationEasing: \"ease-in-out\",\n};\n"],"names":["SideNavbarThemeContext","createContext","useSideNavbarTheme","useContext","useSideNavbarThemeRequired","context","defaultThemeValues"],"mappings":";;AASO,MAAMA,IACXC,EAAkD,IAAI;AAMjD,SAASC,IAAyD;AACvE,SAAOC,EAAWH,CAAsB;AAC1C;AAMO,SAASI,IAA0D;AACxE,QAAMC,IAAUF,EAAWH,CAAsB;AACjD,MAAI,CAACK;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,SAAOA;AACT;AAGO,MAAMC,IAAkD;AAAA,EAC7D,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,iBAAiB;AACnB;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useContext as t, createContext as n } from "react";
|
|
3
|
+
const o = n(null);
|
|
4
|
+
function i() {
|
|
5
|
+
return t(o);
|
|
6
|
+
}
|
|
7
|
+
function u() {
|
|
8
|
+
const e = t(o);
|
|
9
|
+
return e || {
|
|
10
|
+
showMainToggle: !0,
|
|
11
|
+
mainTogglePosition: "floating"
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
o as SideNavbarToggleContext,
|
|
16
|
+
i as useSideNavbarToggleContext,
|
|
17
|
+
u as useSideNavbarToggleContextRequired
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=SideNavbarToggleContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SideNavbarToggleContext.js","sources":["../../../../../../src/ui/components/SideNavbar/contexts/SideNavbarToggleContext.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { SideNavbarTogglePosition } from \"../types\";\n\nexport interface SideNavbarToggleContextValue {\n showMainToggle: boolean;\n mainTogglePosition: SideNavbarTogglePosition;\n}\n\nexport const SideNavbarToggleContext =\n createContext<SideNavbarToggleContextValue | null>(null);\n\nexport function useSideNavbarToggleContext(): SideNavbarToggleContextValue | null {\n return useContext(SideNavbarToggleContext);\n}\n\nexport function useSideNavbarToggleContextRequired(): SideNavbarToggleContextValue {\n const context = useContext(SideNavbarToggleContext);\n if (!context) {\n // Return defaults if context is not available (for backward compatibility)\n return {\n showMainToggle: true,\n mainTogglePosition: \"floating\",\n };\n }\n return context;\n}\n"],"names":["SideNavbarToggleContext","createContext","useSideNavbarToggleContext","useContext","useSideNavbarToggleContextRequired","context"],"mappings":";;AAUO,MAAMA,IACXC,EAAmD,IAAI;AAElD,SAASC,IAAkE;AAChF,SAAOC,EAAWH,CAAuB;AAC3C;AAEO,SAASI,IAAmE;AACjF,QAAMC,IAAUF,EAAWH,CAAuB;AAClD,SAAKK,KAEI;AAAA,IACL,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,EAAA;AAI1B;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useContext as t, createContext as n } from "react";
|
|
3
|
+
const r = n(null);
|
|
4
|
+
function o() {
|
|
5
|
+
return t(r);
|
|
6
|
+
}
|
|
7
|
+
function u() {
|
|
8
|
+
const e = t(r);
|
|
9
|
+
if (!e)
|
|
10
|
+
throw new Error(
|
|
11
|
+
"useSidebarRequired must be used within a SideNavbar.Sidebar component"
|
|
12
|
+
);
|
|
13
|
+
return e;
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
r as SidebarContext,
|
|
17
|
+
o as useSidebar,
|
|
18
|
+
u as useSidebarRequired
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=SidebarContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarContext.js","sources":["../../../../../../src/ui/components/SideNavbar/contexts/SidebarContext.tsx"],"sourcesContent":["\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useContext } from \"react\";\nimport type { SidebarContextValue } from \"../types\";\n\n/**\n * Context for the Sidebar subcomponent\n *\n * Provides sidebar-specific state that inherits from the root SideNavbar context.\n * Must be used within a Sidebar component.\n */\nexport const SidebarContext = createContext<SidebarContextValue | null>(null);\n\n/**\n * Hook to access Sidebar context (returns null if outside Sidebar)\n */\nexport function useSidebar(): SidebarContextValue | null {\n return useContext(SidebarContext);\n}\n\n/**\n * Hook to access Sidebar context (throws if outside Sidebar)\n * @throws Error if used outside of Sidebar component\n */\nexport function useSidebarRequired(): SidebarContextValue {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error(\n \"useSidebarRequired must be used within a SideNavbar.Sidebar component\",\n );\n }\n return context;\n}\n\nexport default SidebarContext;\n"],"names":["SidebarContext","createContext","useSidebar","useContext","useSidebarRequired","context"],"mappings":";;AAYO,MAAMA,IAAiBC,EAA0C,IAAI;AAKrE,SAASC,IAAyC;AACvD,SAAOC,EAAWH,CAAc;AAClC;AAMO,SAASI,IAA0C;AACxD,QAAMC,IAAUF,EAAWH,CAAc;AACzC,MAAI,CAACK;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,SAAOA;AACT;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { createContext as o, useContext as t } from "react";
|
|
3
|
+
const r = o(
|
|
4
|
+
null
|
|
5
|
+
);
|
|
6
|
+
function i() {
|
|
7
|
+
return t(r);
|
|
8
|
+
}
|
|
9
|
+
function u() {
|
|
10
|
+
const e = t(r);
|
|
11
|
+
if (!e)
|
|
12
|
+
throw new Error(
|
|
13
|
+
"useSidebarSlotRequired must be used within SidebarSlotProvider"
|
|
14
|
+
);
|
|
15
|
+
return e;
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
r as SidebarSlotContext,
|
|
19
|
+
i as useSidebarSlot,
|
|
20
|
+
u as useSidebarSlotRequired
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=SidebarSlotContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarSlotContext.js","sources":["../../../../../../src/ui/components/SideNavbar/contexts/SidebarSlotContext.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { SidebarSlotContextValue } from \"../types\";\n\n/**\n * Sidebar Slot Context\n *\n * Provides slot management for dynamic sidebar content.\n * Allows registering and switching between different content slots.\n */\nexport const SidebarSlotContext = createContext<SidebarSlotContextValue | null>(\n null,\n);\n\n/**\n * Hook to access sidebar slot context\n * Returns null if used outside provider\n */\nexport function useSidebarSlot(): SidebarSlotContextValue | null {\n return useContext(SidebarSlotContext);\n}\n\n/**\n * Hook to access sidebar slot context (required)\n * Throws error if used outside provider\n */\nexport function useSidebarSlotRequired(): SidebarSlotContextValue {\n const context = useContext(SidebarSlotContext);\n if (!context) {\n throw new Error(\n \"useSidebarSlotRequired must be used within SidebarSlotProvider\",\n );\n }\n return context;\n}\n"],"names":["SidebarSlotContext","createContext","useSidebarSlot","useContext","useSidebarSlotRequired","context"],"mappings":";;AAWO,MAAMA,IAAqBC;AAAA,EAChC;AACF;AAMO,SAASC,IAAiD;AAC/D,SAAOC,EAAWH,CAAkB;AACtC;AAMO,SAASI,IAAkD;AAChE,QAAMC,IAAUF,EAAWH,CAAkB;AAC7C,MAAI,CAACK;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,SAAOA;AACT;"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useRef as s, useEffect as m, useCallback as E } from "react";
|
|
3
|
+
function x({
|
|
4
|
+
isActive: t,
|
|
5
|
+
containerRef: n,
|
|
6
|
+
restoreFocus: f = !0,
|
|
7
|
+
initialFocusRef: r
|
|
8
|
+
}) {
|
|
9
|
+
const u = s(null);
|
|
10
|
+
m(() => {
|
|
11
|
+
if (t) {
|
|
12
|
+
if (u.current = document.activeElement, r != null && r.current)
|
|
13
|
+
r.current.focus();
|
|
14
|
+
else if (n.current) {
|
|
15
|
+
const e = n.current.querySelector(
|
|
16
|
+
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
|
|
17
|
+
);
|
|
18
|
+
e == null || e.focus();
|
|
19
|
+
}
|
|
20
|
+
} else f && u.current && (u.current.focus(), u.current = null);
|
|
21
|
+
}, [t, n, r, f]);
|
|
22
|
+
const l = E(
|
|
23
|
+
(e) => {
|
|
24
|
+
if (!(!t || !n.current) && e.key === "Tab") {
|
|
25
|
+
const d = n.current.querySelectorAll(
|
|
26
|
+
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
|
|
27
|
+
), c = d[0], o = d[d.length - 1];
|
|
28
|
+
e.shiftKey ? document.activeElement === c && (e.preventDefault(), o == null || o.focus()) : document.activeElement === o && (e.preventDefault(), c == null || c.focus());
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
[t, n]
|
|
32
|
+
);
|
|
33
|
+
m(() => {
|
|
34
|
+
if (t)
|
|
35
|
+
return document.addEventListener("keydown", l), () => {
|
|
36
|
+
document.removeEventListener("keydown", l);
|
|
37
|
+
};
|
|
38
|
+
}, [t, l]);
|
|
39
|
+
}
|
|
40
|
+
export {
|
|
41
|
+
x as useFocusManagement
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=useFocusManagement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFocusManagement.js","sources":["../../../../../../src/ui/components/SideNavbar/hooks/useFocusManagement.ts"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useCallback } from \"react\";\n\nexport interface UseFocusManagementOptions {\n /**\n * Whether focus trap is active\n */\n isActive: boolean;\n\n /**\n * Container element to trap focus within\n */\n containerRef: React.RefObject<HTMLElement | null>;\n\n /**\n * Whether to restore focus to previous element when deactivated\n * @default true\n */\n restoreFocus?: boolean;\n\n /**\n * Initial element to focus when activated\n */\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n}\n\n/**\n * Hook for managing focus within a container (focus trap)\n *\n * Traps focus within a container element, useful for modals and overlays.\n * Supports restoring focus when deactivated.\n *\n * @example\n * ```tsx\n * const containerRef = useRef<HTMLDivElement>(null);\n * useFocusManagement({\n * isActive: isOpen,\n * containerRef,\n * restoreFocus: true\n * });\n * ```\n */\nexport function useFocusManagement({\n isActive,\n containerRef,\n restoreFocus = true,\n initialFocusRef,\n}: UseFocusManagementOptions) {\n const previousActiveElementRef = useRef<HTMLElement | null>(null);\n\n // Save previous focus when activating\n useEffect(() => {\n if (isActive) {\n previousActiveElementRef.current = document.activeElement as HTMLElement;\n\n // Focus initial element if provided\n if (initialFocusRef?.current) {\n initialFocusRef.current.focus();\n } else if (containerRef.current) {\n // Otherwise focus first focusable element in container\n const firstFocusable = containerRef.current.querySelector(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ) as HTMLElement;\n firstFocusable?.focus();\n }\n } else if (restoreFocus && previousActiveElementRef.current) {\n // Restore focus when deactivating\n previousActiveElementRef.current.focus();\n previousActiveElementRef.current = null;\n }\n }, [isActive, containerRef, initialFocusRef, restoreFocus]);\n\n // Trap focus within container\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!isActive || !containerRef.current) return;\n\n // Handle Tab key\n if (event.key === \"Tab\") {\n const focusableElements = containerRef.current.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n\n const firstFocusable = focusableElements[0] as HTMLElement;\n const lastFocusable = focusableElements[\n focusableElements.length - 1\n ] as HTMLElement;\n\n if (event.shiftKey) {\n // Shift + Tab\n if (document.activeElement === firstFocusable) {\n event.preventDefault();\n lastFocusable?.focus();\n }\n } else {\n // Tab\n if (document.activeElement === lastFocusable) {\n event.preventDefault();\n firstFocusable?.focus();\n }\n }\n }\n },\n [isActive, containerRef],\n );\n\n useEffect(() => {\n if (!isActive) return;\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [isActive, handleKeyDown]);\n}\n"],"names":["useFocusManagement","isActive","containerRef","restoreFocus","initialFocusRef","previousActiveElementRef","useRef","useEffect","firstFocusable","handleKeyDown","useCallback","event","focusableElements","lastFocusable"],"mappings":";;AA2CO,SAASA,EAAmB;AAAA,EACjC,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,iBAAAC;AACF,GAA8B;AAC5B,QAAMC,IAA2BC,EAA2B,IAAI;AAGhE,EAAAC,EAAU,MAAM;AACd,QAAIN;AAIF,UAHAI,EAAyB,UAAU,SAAS,eAGxCD,KAAA,QAAAA,EAAiB;AACnB,QAAAA,EAAgB,QAAQ,MAAA;AAAA,eACfF,EAAa,SAAS;AAE/B,cAAMM,IAAiBN,EAAa,QAAQ;AAAA,UAC1C;AAAA,QAAA;AAEF,QAAAM,KAAA,QAAAA,EAAgB;AAAA,MAClB;AAAA,UACF,CAAWL,KAAgBE,EAAyB,YAElDA,EAAyB,QAAQ,MAAA,GACjCA,EAAyB,UAAU;AAAA,EAEvC,GAAG,CAACJ,GAAUC,GAAcE,GAAiBD,CAAY,CAAC;AAG1D,QAAMM,IAAgBC;AAAA,IACpB,CAACC,MAAyB;AACxB,UAAI,GAACV,KAAY,CAACC,EAAa,YAG3BS,EAAM,QAAQ,OAAO;AACvB,cAAMC,IAAoBV,EAAa,QAAQ;AAAA,UAC7C;AAAA,QAAA,GAGIM,IAAiBI,EAAkB,CAAC,GACpCC,IAAgBD,EACpBA,EAAkB,SAAS,CAC7B;AAEA,QAAID,EAAM,WAEJ,SAAS,kBAAkBH,MAC7BG,EAAM,eAAA,GACNE,KAAA,QAAAA,EAAe,WAIb,SAAS,kBAAkBA,MAC7BF,EAAM,eAAA,GACNH,KAAA,QAAAA,EAAgB;AAAA,MAGtB;AAAA,IACF;AAAA,IACA,CAACP,GAAUC,CAAY;AAAA,EAAA;AAGzB,EAAAK,EAAU,MAAM;AACd,QAAKN;AAEL,sBAAS,iBAAiB,WAAWQ,CAAa,GAC3C,MAAM;AACX,iBAAS,oBAAoB,WAAWA,CAAa;AAAA,MACvD;AAAA,EACF,GAAG,CAACR,GAAUQ,CAAa,CAAC;AAC9B;"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var m = Object.defineProperty, w = Object.defineProperties;
|
|
3
|
+
var C = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var f = Object.getOwnPropertySymbols;
|
|
5
|
+
var I = Object.prototype.hasOwnProperty, J = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var l = (e, t, o) => t in e ? m(e, t, { enumerable: !0, configurable: !0, writable: !0, value: o }) : e[t] = o, s = (e, t) => {
|
|
7
|
+
for (var o in t || (t = {}))
|
|
8
|
+
I.call(t, o) && l(e, o, t[o]);
|
|
9
|
+
if (f)
|
|
10
|
+
for (var o of f(t))
|
|
11
|
+
J.call(t, o) && l(e, o, t[o]);
|
|
12
|
+
return e;
|
|
13
|
+
}, i = (e, t) => w(e, C(t));
|
|
14
|
+
import { useState as N, useEffect as O, useCallback as p } from "react";
|
|
15
|
+
function h({
|
|
16
|
+
defaultStates: e = {},
|
|
17
|
+
persist: t = !1,
|
|
18
|
+
storageKey: o
|
|
19
|
+
} = {}) {
|
|
20
|
+
const a = () => {
|
|
21
|
+
if (t && o && typeof window != "undefined") {
|
|
22
|
+
const n = localStorage.getItem(`${o}-groups`);
|
|
23
|
+
if (n)
|
|
24
|
+
try {
|
|
25
|
+
const r = JSON.parse(n);
|
|
26
|
+
return s(s({}, e), r);
|
|
27
|
+
} catch (r) {
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return e;
|
|
31
|
+
}, [c, u] = N(a);
|
|
32
|
+
O(() => {
|
|
33
|
+
t && o && typeof window != "undefined" && localStorage.setItem(`${o}-groups`, JSON.stringify(c));
|
|
34
|
+
}, [t, o, c]);
|
|
35
|
+
const S = p((n) => {
|
|
36
|
+
u((r) => i(s({}, r), {
|
|
37
|
+
[n]: !r[n]
|
|
38
|
+
}));
|
|
39
|
+
}, []), d = p(
|
|
40
|
+
(n, r) => {
|
|
41
|
+
u((G) => i(s({}, G), {
|
|
42
|
+
[n]: r
|
|
43
|
+
}));
|
|
44
|
+
},
|
|
45
|
+
[]
|
|
46
|
+
), g = p(() => {
|
|
47
|
+
u(e);
|
|
48
|
+
}, [e]);
|
|
49
|
+
return {
|
|
50
|
+
groupStates: c,
|
|
51
|
+
toggleGroup: S,
|
|
52
|
+
setGroupCollapsed: d,
|
|
53
|
+
resetGroups: g
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export {
|
|
57
|
+
h as useGroupState
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=useGroupState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGroupState.js","sources":["../../../../../../src/ui/components/SideNavbar/hooks/useGroupState.ts"],"sourcesContent":["\"use client\";\n\nimport { useState, useCallback, useEffect } from \"react\";\nimport type { UseGroupStateOptions, UseGroupStateReturn } from \"../types\";\n\n/**\n * Hook for managing collapsible group states\n *\n * Manages collapsed/expanded state for multiple groups with optional persistence.\n * Used internally by SideNavbarStateProvider, but can be used standalone.\n *\n * @example\n * ```tsx\n * const { groupStates, toggleGroup, setGroupCollapsed } = useGroupState({\n * defaultStates: { filters: false, settings: true },\n * persist: true,\n * storageKey: 'my-sidebar-groups',\n * });\n *\n * // Check if group is collapsed\n * const isFiltersCollapsed = groupStates['filters'] ?? false;\n *\n * // Toggle a group\n * toggleGroup('filters');\n *\n * // Set specific state\n * setGroupCollapsed('settings', false);\n * ```\n */\nexport function useGroupState({\n defaultStates = {},\n persist = false,\n storageKey,\n}: UseGroupStateOptions = {}): UseGroupStateReturn {\n // Initialize state from storage or defaults\n const getInitialStates = (): Record<string, boolean> => {\n if (persist && storageKey && typeof window !== \"undefined\") {\n const stored = localStorage.getItem(`${storageKey}-groups`);\n if (stored) {\n try {\n const parsed = JSON.parse(stored);\n return { ...defaultStates, ...parsed };\n } catch {\n // Invalid JSON, use defaults\n }\n }\n }\n return defaultStates;\n };\n\n const [groupStates, setGroupStates] =\n useState<Record<string, boolean>>(getInitialStates);\n\n // Persist state changes\n useEffect(() => {\n if (persist && storageKey && typeof window !== \"undefined\") {\n localStorage.setItem(`${storageKey}-groups`, JSON.stringify(groupStates));\n }\n }, [persist, storageKey, groupStates]);\n\n const toggleGroup = useCallback((groupId: string) => {\n setGroupStates((prev) => ({\n ...prev,\n [groupId]: !prev[groupId],\n }));\n }, []);\n\n const setGroupCollapsed = useCallback(\n (groupId: string, collapsed: boolean) => {\n setGroupStates((prev) => ({\n ...prev,\n [groupId]: collapsed,\n }));\n },\n [],\n );\n\n const resetGroups = useCallback(() => {\n setGroupStates(defaultStates);\n }, [defaultStates]);\n\n return {\n groupStates,\n toggleGroup,\n setGroupCollapsed,\n resetGroups,\n };\n}\n\nexport default useGroupState;\n"],"names":["useGroupState","defaultStates","persist","storageKey","getInitialStates","stored","parsed","__spreadValues","e","groupStates","setGroupStates","useState","useEffect","toggleGroup","useCallback","groupId","prev","__spreadProps","setGroupCollapsed","collapsed","resetGroups"],"mappings":";;;;;;;;;;;;;;AA6BO,SAASA,EAAc;AAAA,EAC5B,eAAAC,IAAgB,CAAA;AAAA,EAChB,SAAAC,IAAU;AAAA,EACV,YAAAC;AACF,IAA0B,IAAyB;AAEjD,QAAMC,IAAmB,MAA+B;AACtD,QAAIF,KAAWC,KAAc,OAAO,UAAW,aAAa;AAC1D,YAAME,IAAS,aAAa,QAAQ,GAAGF,CAAU,SAAS;AAC1D,UAAIE;AACF,YAAI;AACF,gBAAMC,IAAS,KAAK,MAAMD,CAAM;AAChC,iBAAOE,IAAA,IAAKN,IAAkBK;AAAA,QAChC,SAAQE,GAAA;AAAA,QAER;AAAA,IAEJ;AACA,WAAOP;AAAA,EACT,GAEM,CAACQ,GAAaC,CAAc,IAChCC,EAAkCP,CAAgB;AAGpD,EAAAQ,EAAU,MAAM;AACd,IAAIV,KAAWC,KAAc,OAAO,UAAW,eAC7C,aAAa,QAAQ,GAAGA,CAAU,WAAW,KAAK,UAAUM,CAAW,CAAC;AAAA,EAE5E,GAAG,CAACP,GAASC,GAAYM,CAAW,CAAC;AAErC,QAAMI,IAAcC,EAAY,CAACC,MAAoB;AACnD,IAAAL,EAAe,CAACM,MAAUC,EAAAV,EAAA,IACrBS,IADqB;AAAA,MAExB,CAACD,CAAO,GAAG,CAACC,EAAKD,CAAO;AAAA,IAAA,EACxB;AAAA,EACJ,GAAG,CAAA,CAAE,GAECG,IAAoBJ;AAAA,IACxB,CAACC,GAAiBI,MAAuB;AACvC,MAAAT,EAAe,CAACM,MAAUC,EAAAV,EAAA,IACrBS,IADqB;AAAA,QAExB,CAACD,CAAO,GAAGI;AAAA,MAAA,EACX;AAAA,IACJ;AAAA,IACA,CAAA;AAAA,EAAC,GAGGC,IAAcN,EAAY,MAAM;AACpC,IAAAJ,EAAeT,CAAa;AAAA,EAC9B,GAAG,CAACA,CAAa,CAAC;AAElB,SAAO;AAAA,IACL,aAAAQ;AAAA,IACA,aAAAI;AAAA,IACA,mBAAAK;AAAA,IACA,aAAAE;AAAA,EAAA;AAEJ;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback as w, useEffect as k } from "react";
|
|
3
|
+
function M({
|
|
4
|
+
key: o,
|
|
5
|
+
ctrl: s = !1,
|
|
6
|
+
shift: e = !1,
|
|
7
|
+
alt: y = !1,
|
|
8
|
+
meta: a = !1,
|
|
9
|
+
onTrigger: f,
|
|
10
|
+
enabled: i = !0,
|
|
11
|
+
preventDefault: u = !0
|
|
12
|
+
}) {
|
|
13
|
+
const c = w(
|
|
14
|
+
(t) => {
|
|
15
|
+
if (!i) return;
|
|
16
|
+
const r = t.target;
|
|
17
|
+
if ((r.tagName === "INPUT" || r.tagName === "TEXTAREA" || r.isContentEditable) && !s && !a)
|
|
18
|
+
return;
|
|
19
|
+
const l = o.length === 1 ? t.key.toLowerCase() === o.toLowerCase() : t.key === o, n = s ? t.ctrlKey || t.metaKey : !t.ctrlKey && !t.metaKey, h = e ? t.shiftKey : !t.shiftKey, K = y ? t.altKey : !t.altKey, d = a ? t.metaKey : !t.metaKey, m = s ? (t.ctrlKey || t.metaKey) && !a : n && d;
|
|
20
|
+
l && m && h && K && (u && (t.preventDefault(), t.stopPropagation()), f());
|
|
21
|
+
},
|
|
22
|
+
[i, o, s, e, y, a, f, u]
|
|
23
|
+
);
|
|
24
|
+
k(() => {
|
|
25
|
+
if (i)
|
|
26
|
+
return window.addEventListener("keydown", c), () => {
|
|
27
|
+
window.removeEventListener("keydown", c);
|
|
28
|
+
};
|
|
29
|
+
}, [i, c]);
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
M as useKeyboardShortcut
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=useKeyboardShortcut.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKeyboardShortcut.js","sources":["../../../../../../src/ui/components/SideNavbar/hooks/useKeyboardShortcut.ts"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useCallback } from \"react\";\n\nexport interface UseKeyboardShortcutOptions {\n /**\n * Key to listen for (e.g., 'b', 'Escape', 'Enter')\n */\n key: string;\n\n /**\n * Whether Ctrl/Cmd key should be pressed\n * @default false\n */\n ctrl?: boolean;\n\n /**\n * Whether Shift key should be pressed\n * @default false\n */\n shift?: boolean;\n\n /**\n * Whether Alt key should be pressed\n * @default false\n */\n alt?: boolean;\n\n /**\n * Whether Meta key should be pressed (Cmd on Mac)\n * @default false\n */\n meta?: boolean;\n\n /**\n * Callback when shortcut is triggered\n */\n onTrigger: () => void;\n\n /**\n * Whether the shortcut is enabled\n * @default true\n */\n enabled?: boolean;\n\n /**\n * Whether to prevent default behavior\n * @default true\n */\n preventDefault?: boolean;\n}\n\n/**\n * Hook for keyboard shortcuts\n *\n * Listens for keyboard combinations and triggers callbacks.\n * Automatically ignores input fields unless explicitly allowed.\n *\n * @example\n * ```tsx\n * useKeyboardShortcut({\n * key: 'b',\n * ctrl: true,\n * onTrigger: () => toggleSidebar(),\n * });\n * ```\n */\nexport function useKeyboardShortcut({\n key: targetKey,\n ctrl = false,\n shift = false,\n alt = false,\n meta = false,\n onTrigger,\n enabled = true,\n preventDefault = true,\n}: UseKeyboardShortcutOptions) {\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!enabled) return;\n\n // Don't trigger in input fields (unless it's a system shortcut)\n const target = event.target as HTMLElement;\n const isInputField =\n target.tagName === \"INPUT\" ||\n target.tagName === \"TEXTAREA\" ||\n target.isContentEditable;\n\n // Allow Ctrl/Cmd shortcuts in inputs (like Ctrl+B)\n if (isInputField && !ctrl && !meta) {\n return;\n }\n\n // Check key match (case-insensitive for letter keys)\n const keyMatch =\n targetKey.length === 1\n ? event.key.toLowerCase() === targetKey.toLowerCase()\n : event.key === targetKey;\n\n // Check modifier keys\n const ctrlMatch = ctrl\n ? event.ctrlKey || event.metaKey\n : !event.ctrlKey && !event.metaKey;\n const shiftMatch = shift ? event.shiftKey : !event.shiftKey;\n const altMatch = alt ? event.altKey : !event.altKey;\n const metaMatch = meta ? event.metaKey : !event.metaKey;\n\n // If ctrl is true, allow either Ctrl or Meta (Cmd on Mac)\n const modifierMatch = ctrl\n ? (event.ctrlKey || event.metaKey) && !meta\n : ctrlMatch && metaMatch;\n\n if (keyMatch && modifierMatch && shiftMatch && altMatch) {\n if (preventDefault) {\n event.preventDefault();\n event.stopPropagation();\n }\n onTrigger();\n }\n },\n [enabled, targetKey, ctrl, shift, alt, meta, onTrigger, preventDefault],\n );\n\n useEffect(() => {\n if (!enabled) return;\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [enabled, handleKeyDown]);\n}\n"],"names":["useKeyboardShortcut","targetKey","ctrl","shift","alt","meta","onTrigger","enabled","preventDefault","handleKeyDown","useCallback","event","target","keyMatch","ctrlMatch","shiftMatch","altMatch","metaMatch","modifierMatch","useEffect"],"mappings":";;AAmEO,SAASA,EAAoB;AAAA,EAClC,KAAKC;AAAA,EACL,MAAAC,IAAO;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,KAAAC,IAAM;AAAA,EACN,MAAAC,IAAO;AAAA,EACP,WAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,gBAAAC,IAAiB;AACnB,GAA+B;AAC7B,QAAMC,IAAgBC;AAAA,IACpB,CAACC,MAAyB;AACxB,UAAI,CAACJ,EAAS;AAGd,YAAMK,IAASD,EAAM;AAOrB,WALEC,EAAO,YAAY,WACnBA,EAAO,YAAY,cACnBA,EAAO,sBAGW,CAACV,KAAQ,CAACG;AAC5B;AAIF,YAAMQ,IACJZ,EAAU,WAAW,IACjBU,EAAM,IAAI,YAAA,MAAkBV,EAAU,YAAA,IACtCU,EAAM,QAAQV,GAGda,IAAYZ,IACdS,EAAM,WAAWA,EAAM,UACvB,CAACA,EAAM,WAAW,CAACA,EAAM,SACvBI,IAAaZ,IAAQQ,EAAM,WAAW,CAACA,EAAM,UAC7CK,IAAWZ,IAAMO,EAAM,SAAS,CAACA,EAAM,QACvCM,IAAYZ,IAAOM,EAAM,UAAU,CAACA,EAAM,SAG1CO,IAAgBhB,KACjBS,EAAM,WAAWA,EAAM,YAAY,CAACN,IACrCS,KAAaG;AAEjB,MAAIJ,KAAYK,KAAiBH,KAAcC,MACzCR,MACFG,EAAM,eAAA,GACNA,EAAM,gBAAA,IAERL,EAAA;AAAA,IAEJ;AAAA,IACA,CAACC,GAASN,GAAWC,GAAMC,GAAOC,GAAKC,GAAMC,GAAWE,CAAc;AAAA,EAAA;AAGxE,EAAAW,EAAU,MAAM;AACd,QAAKZ;AAEL,oBAAO,iBAAiB,WAAWE,CAAa,GACzC,MAAM;AACX,eAAO,oBAAoB,WAAWA,CAAa;AAAA,MACrD;AAAA,EACF,GAAG,CAACF,GAASE,CAAa,CAAC;AAC7B;"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useState as b, useRef as w, useCallback as m, useEffect as I } from "react";
|
|
3
|
+
import { clampWidth as R } from "../utils/parseWidth.js";
|
|
4
|
+
function q({
|
|
5
|
+
initialWidth: d,
|
|
6
|
+
minWidth: c,
|
|
7
|
+
maxWidth: o,
|
|
8
|
+
snapPoints: u,
|
|
9
|
+
snapThreshold: M = 20,
|
|
10
|
+
onWidthChange: f,
|
|
11
|
+
enabled: s = !0
|
|
12
|
+
}) {
|
|
13
|
+
const S = R(d, c, o), [n, z] = b(S), [t, E] = b(!1), i = w(0), a = w(S), v = m(
|
|
14
|
+
(r) => {
|
|
15
|
+
let e = R(r, c, o);
|
|
16
|
+
if (u && u.length > 0) {
|
|
17
|
+
const l = u.reduce((L, X) => {
|
|
18
|
+
const D = Math.abs(e - X), T = Math.abs(e - L);
|
|
19
|
+
return D < T ? X : L;
|
|
20
|
+
}, u[0]);
|
|
21
|
+
Math.abs(e - l) <= M && (e = l);
|
|
22
|
+
}
|
|
23
|
+
z(e), f == null || f(e);
|
|
24
|
+
},
|
|
25
|
+
[c, o, u, M, f]
|
|
26
|
+
), y = m(
|
|
27
|
+
(r) => {
|
|
28
|
+
if (!s || !t) return;
|
|
29
|
+
const e = r.clientX - i.current, l = a.current + e;
|
|
30
|
+
v(l);
|
|
31
|
+
},
|
|
32
|
+
[s, t, v]
|
|
33
|
+
), p = m(() => {
|
|
34
|
+
s && (E(!1), i.current = 0, a.current = n);
|
|
35
|
+
}, [s, n]), k = m(
|
|
36
|
+
(r) => {
|
|
37
|
+
s && (r.preventDefault(), r.stopPropagation(), E(!0), i.current = r.clientX, a.current = n);
|
|
38
|
+
},
|
|
39
|
+
[s, n]
|
|
40
|
+
);
|
|
41
|
+
return I(() => {
|
|
42
|
+
if (t)
|
|
43
|
+
return document.addEventListener("mousemove", y), document.addEventListener("mouseup", p), document.body.style.userSelect = "none", document.body.style.cursor = "col-resize", () => {
|
|
44
|
+
document.removeEventListener("mousemove", y), document.removeEventListener("mouseup", p), document.body.style.userSelect = "", document.body.style.cursor = "";
|
|
45
|
+
};
|
|
46
|
+
}, [t, y, p]), I(() => {
|
|
47
|
+
t || z(R(d, c, o));
|
|
48
|
+
}, [d, c, o, t]), {
|
|
49
|
+
width: n,
|
|
50
|
+
isResizing: t,
|
|
51
|
+
startResize: k,
|
|
52
|
+
setWidth: v
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
q as useResize
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=useResize.js.map
|