@fabio.caffarello/react-design-system 3.7.0 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/dist/granular/index.js +445 -0
- package/dist/granular/index.js.map +1 -0
- package/dist/granular/ui/components/Accordion/Accordion.js +105 -0
- package/dist/granular/ui/components/Accordion/Accordion.js.map +1 -0
- package/dist/granular/ui/components/Autocomplete/Autocomplete.js +133 -0
- package/dist/granular/ui/components/Autocomplete/Autocomplete.js.map +1 -0
- package/dist/granular/ui/components/Autocomplete/AutocompleteList.js +119 -0
- package/dist/granular/ui/components/Autocomplete/AutocompleteList.js.map +1 -0
- package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js +42 -0
- package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js.map +1 -0
- package/dist/granular/ui/components/Breadcrumb/Breadcrumb.js +100 -0
- package/dist/granular/ui/components/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/granular/ui/components/Card/Card.js +113 -0
- package/dist/granular/ui/components/Card/Card.js.map +1 -0
- package/dist/granular/ui/components/Card/CardActions.js +51 -0
- package/dist/granular/ui/components/Card/CardActions.js.map +1 -0
- package/dist/granular/ui/components/Card/CardBody.js +32 -0
- package/dist/granular/ui/components/Card/CardBody.js.map +1 -0
- package/dist/granular/ui/components/Card/CardHeader.js +47 -0
- package/dist/granular/ui/components/Card/CardHeader.js.map +1 -0
- package/dist/granular/ui/components/Card/CardSubtitle.js +38 -0
- package/dist/granular/ui/components/Card/CardSubtitle.js.map +1 -0
- package/dist/granular/ui/components/Card/CardTitle.js +61 -0
- package/dist/granular/ui/components/Card/CardTitle.js.map +1 -0
- package/dist/granular/ui/components/ColorPicker/ColorPicker.js +250 -0
- package/dist/granular/ui/components/ColorPicker/ColorPicker.js.map +1 -0
- package/dist/granular/ui/components/CommandPalette/CommandPalette.js +274 -0
- package/dist/granular/ui/components/CommandPalette/CommandPalette.js.map +1 -0
- package/dist/granular/ui/components/DashboardLayout/DashboardLayout.js +37 -0
- package/dist/granular/ui/components/DashboardLayout/DashboardLayout.js.map +1 -0
- package/dist/granular/ui/components/DataGrid/DataGrid.js +155 -0
- package/dist/granular/ui/components/DataGrid/DataGrid.js.map +1 -0
- package/dist/granular/ui/components/DataTablePattern/DataTablePattern.js +113 -0
- package/dist/granular/ui/components/DataTablePattern/DataTablePattern.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePicker.js +126 -0
- package/dist/granular/ui/components/DatePicker/DatePicker.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js +294 -0
- package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePickerContext.js +16 -0
- package/dist/granular/ui/components/DatePicker/DatePickerContext.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePickerInput.js +119 -0
- package/dist/granular/ui/components/DatePicker/DatePickerInput.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePickerProvider.js +47 -0
- package/dist/granular/ui/components/DatePicker/DatePickerProvider.js.map +1 -0
- package/dist/granular/ui/components/Dialog/AlertDialog.js +48 -0
- package/dist/granular/ui/components/Dialog/AlertDialog.js.map +1 -0
- package/dist/granular/ui/components/Dialog/Dialog.js +36 -0
- package/dist/granular/ui/components/Dialog/Dialog.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogClose.js +34 -0
- package/dist/granular/ui/components/Dialog/DialogClose.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogContent.js +114 -0
- package/dist/granular/ui/components/Dialog/DialogContent.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogDescription.js +51 -0
- package/dist/granular/ui/components/Dialog/DialogDescription.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogFooter.js +45 -0
- package/dist/granular/ui/components/Dialog/DialogFooter.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogHeader.js +45 -0
- package/dist/granular/ui/components/Dialog/DialogHeader.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogTitle.js +53 -0
- package/dist/granular/ui/components/Dialog/DialogTitle.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogTrigger.js +28 -0
- package/dist/granular/ui/components/Dialog/DialogTrigger.js.map +1 -0
- package/dist/granular/ui/components/Drawer/Drawer.js +47 -0
- package/dist/granular/ui/components/Drawer/Drawer.js.map +1 -0
- package/dist/granular/ui/components/Drawer/DrawerContent.js +140 -0
- package/dist/granular/ui/components/Drawer/DrawerContent.js.map +1 -0
- package/dist/granular/ui/components/Drawer/DrawerContext.js +21 -0
- package/dist/granular/ui/components/Drawer/DrawerContext.js.map +1 -0
- package/dist/granular/ui/components/Drawer/DrawerFooter.js +53 -0
- package/dist/granular/ui/components/Drawer/DrawerFooter.js.map +1 -0
- package/dist/granular/ui/components/Drawer/DrawerHeader.js +50 -0
- package/dist/granular/ui/components/Drawer/DrawerHeader.js.map +1 -0
- package/dist/granular/ui/components/Dropdown/Dropdown.js +243 -0
- package/dist/granular/ui/components/Dropdown/Dropdown.js.map +1 -0
- package/dist/granular/ui/components/EmptyState/EmptyState.js +102 -0
- package/dist/granular/ui/components/EmptyState/EmptyState.js.map +1 -0
- package/dist/granular/ui/components/FileUpload/FileUpload.js +342 -0
- package/dist/granular/ui/components/FileUpload/FileUpload.js.map +1 -0
- package/dist/granular/ui/components/Form/Form.js +184 -0
- package/dist/granular/ui/components/Form/Form.js.map +1 -0
- package/dist/granular/ui/components/Form/FormContext.js +19 -0
- package/dist/granular/ui/components/Form/FormContext.js.map +1 -0
- package/dist/granular/ui/components/Form/FormField.js +66 -0
- package/dist/granular/ui/components/Form/FormField.js.map +1 -0
- package/dist/granular/ui/components/Form/FormProvider.js +17 -0
- package/dist/granular/ui/components/Form/FormProvider.js.map +1 -0
- package/dist/granular/ui/components/Form/useFormFieldArray.js +29 -0
- package/dist/granular/ui/components/Form/useFormFieldArray.js.map +1 -0
- package/dist/granular/ui/components/FormWizardPattern/FormWizardPattern.js +121 -0
- package/dist/granular/ui/components/FormWizardPattern/FormWizardPattern.js.map +1 -0
- package/dist/granular/ui/components/Header/Header.js +98 -0
- package/dist/granular/ui/components/Header/Header.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderActions.js +21 -0
- package/dist/granular/ui/components/Header/components/HeaderActions.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderHamburger.js +31 -0
- package/dist/granular/ui/components/Header/components/HeaderHamburger.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderLogo.js +50 -0
- package/dist/granular/ui/components/Header/components/HeaderLogo.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js +38 -0
- package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderNavigation.js +27 -0
- package/dist/granular/ui/components/Header/components/HeaderNavigation.js.map +1 -0
- package/dist/granular/ui/components/Header/contexts/HeaderContext.js +49 -0
- package/dist/granular/ui/components/Header/contexts/HeaderContext.js.map +1 -0
- package/dist/granular/ui/components/LoginBox/LoginBox.js +84 -0
- package/dist/granular/ui/components/LoginBox/LoginBox.js.map +1 -0
- package/dist/granular/ui/components/Menu/Menu.js +45 -0
- package/dist/granular/ui/components/Menu/Menu.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuContent.js +94 -0
- package/dist/granular/ui/components/Menu/MenuContent.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuContext.js +21 -0
- package/dist/granular/ui/components/Menu/MenuContext.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuItem.js +93 -0
- package/dist/granular/ui/components/Menu/MenuItem.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuSeparator.js +46 -0
- package/dist/granular/ui/components/Menu/MenuSeparator.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuTrigger.js +71 -0
- package/dist/granular/ui/components/Menu/MenuTrigger.js.map +1 -0
- package/dist/granular/ui/components/Modal/Modal.js +171 -0
- package/dist/granular/ui/components/Modal/Modal.js.map +1 -0
- package/dist/granular/ui/components/MultiSelect/MultiSelect.js +193 -0
- package/dist/granular/ui/components/MultiSelect/MultiSelect.js.map +1 -0
- package/dist/granular/ui/components/Navigation/Navigation.js +141 -0
- package/dist/granular/ui/components/Navigation/Navigation.js.map +1 -0
- package/dist/granular/ui/components/PageHeader/PageHeader.js +95 -0
- package/dist/granular/ui/components/PageHeader/PageHeader.js.map +1 -0
- package/dist/granular/ui/components/Pagination/Pagination.js +156 -0
- package/dist/granular/ui/components/Pagination/Pagination.js.map +1 -0
- package/dist/granular/ui/components/Popover/Popover.js +171 -0
- package/dist/granular/ui/components/Popover/Popover.js.map +1 -0
- package/dist/granular/ui/components/Rating/Rating.js +110 -0
- package/dist/granular/ui/components/Rating/Rating.js.map +1 -0
- package/dist/granular/ui/components/SearchAndFilterPattern/SearchAndFilterPattern.js +120 -0
- package/dist/granular/ui/components/SearchAndFilterPattern/SearchAndFilterPattern.js.map +1 -0
- package/dist/granular/ui/components/SearchInput/SearchInput.js +103 -0
- package/dist/granular/ui/components/SearchInput/SearchInput.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/SideNavbar.js +143 -0
- package/dist/granular/ui/components/SideNavbar/SideNavbar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/Navbar.js +173 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/Navbar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js +87 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js +242 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarSeparator.js +66 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarSeparator.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarToggle.js +108 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarToggle.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarBackdrop.js +63 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarBackdrop.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js +113 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarRoot.js +150 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarRoot.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarToggle.js +197 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarToggle.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/Sidebar.js +108 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/Sidebar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarContent.js +71 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarContent.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarFooter.js +64 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarFooter.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarGroup.js +141 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarGroup.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarHeader.js +90 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarHeader.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlot.js +12 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlot.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlotContent.js +13 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlotContent.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/NavbarContext.js +20 -0
- package/dist/granular/ui/components/SideNavbar/contexts/NavbarContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarConfigContext.js +37 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarConfigContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarStateContext.js +20 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarStateContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarThemeContext.js +28 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarThemeContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarToggleContext.js +19 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarToggleContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SidebarContext.js +20 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SidebarContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SidebarSlotContext.js +22 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SidebarSlotContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useFocusManagement.js +43 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useFocusManagement.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useGroupState.js +59 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useGroupState.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useKeyboardShortcut.js +34 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useKeyboardShortcut.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useResize.js +58 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useResize.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useResponsiveSidebar.js +35 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useResponsiveSidebar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbar.js +21 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarContent.js +19 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarContent.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarNavigation.js +21 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarNavigation.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarConfigProvider.js +61 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarConfigProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarProvider.js +82 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js +165 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarThemeProvider.js +34 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarThemeProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SidebarSlotProvider.js +28 -0
- package/dist/granular/ui/components/SideNavbar/providers/SidebarSlotProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/utils/parseKeyboardShortcut.js +60 -0
- package/dist/granular/ui/components/SideNavbar/utils/parseKeyboardShortcut.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/utils/parseWidth.js +19 -0
- package/dist/granular/ui/components/SideNavbar/utils/parseWidth.js.map +1 -0
- package/dist/granular/ui/components/Stat/Stat.js +84 -0
- package/dist/granular/ui/components/Stat/Stat.js.map +1 -0
- package/dist/granular/ui/components/Stat/StatGroup.js +61 -0
- package/dist/granular/ui/components/Stat/StatGroup.js.map +1 -0
- package/dist/granular/ui/components/Stepper/Stepper.js +248 -0
- package/dist/granular/ui/components/Stepper/Stepper.js.map +1 -0
- package/dist/granular/ui/components/Table/Table.js +162 -0
- package/dist/granular/ui/components/Table/Table.js.map +1 -0
- package/dist/granular/ui/components/Table/TableActions/TableActions.js +67 -0
- package/dist/granular/ui/components/Table/TableActions/TableActions.js.map +1 -0
- package/dist/granular/ui/components/Table/TableActions.js +44 -0
- package/dist/granular/ui/components/Table/TableActions.js.map +1 -0
- package/dist/granular/ui/components/Table/TableBody.js +134 -0
- package/dist/granular/ui/components/Table/TableBody.js.map +1 -0
- package/dist/granular/ui/components/Table/TableCell.js +40 -0
- package/dist/granular/ui/components/Table/TableCell.js.map +1 -0
- package/dist/granular/ui/components/Table/TableContext.js +19 -0
- package/dist/granular/ui/components/Table/TableContext.js.map +1 -0
- package/dist/granular/ui/components/Table/TableEmptyState.js +62 -0
- package/dist/granular/ui/components/Table/TableEmptyState.js.map +1 -0
- package/dist/granular/ui/components/Table/TableFilters/TableFilters.js +189 -0
- package/dist/granular/ui/components/Table/TableFilters/TableFilters.js.map +1 -0
- package/dist/granular/ui/components/Table/TableFilters.js +48 -0
- package/dist/granular/ui/components/Table/TableFilters.js.map +1 -0
- package/dist/granular/ui/components/Table/TableHeader.js +45 -0
- package/dist/granular/ui/components/Table/TableHeader.js.map +1 -0
- package/dist/granular/ui/components/Table/TableHeaderCell.js +117 -0
- package/dist/granular/ui/components/Table/TableHeaderCell.js.map +1 -0
- package/dist/granular/ui/components/Table/TableHeaderRow.js +89 -0
- package/dist/granular/ui/components/Table/TableHeaderRow.js.map +1 -0
- package/dist/granular/ui/components/Table/TablePagination/TablePagination.js +216 -0
- package/dist/granular/ui/components/Table/TablePagination/TablePagination.js.map +1 -0
- package/dist/granular/ui/components/Table/TablePagination.js +56 -0
- package/dist/granular/ui/components/Table/TablePagination.js.map +1 -0
- package/dist/granular/ui/components/Table/TableProvider.js +244 -0
- package/dist/granular/ui/components/Table/TableProvider.js.map +1 -0
- package/dist/granular/ui/components/Table/TableRow.js +95 -0
- package/dist/granular/ui/components/Table/TableRow.js.map +1 -0
- package/dist/granular/ui/components/Table/useColumnResizing.js +71 -0
- package/dist/granular/ui/components/Table/useColumnResizing.js.map +1 -0
- package/dist/granular/ui/components/Table/useVirtualScrolling.js +50 -0
- package/dist/granular/ui/components/Table/useVirtualScrolling.js.map +1 -0
- package/dist/granular/ui/components/Tabs/Tabs.js +39 -0
- package/dist/granular/ui/components/Tabs/Tabs.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsContent.js +59 -0
- package/dist/granular/ui/components/Tabs/TabsContent.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsContext.js +18 -0
- package/dist/granular/ui/components/Tabs/TabsContext.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsList.js +84 -0
- package/dist/granular/ui/components/Tabs/TabsList.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsProvider.js +31 -0
- package/dist/granular/ui/components/Tabs/TabsProvider.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsTrigger.js +103 -0
- package/dist/granular/ui/components/Tabs/TabsTrigger.js.map +1 -0
- package/dist/granular/ui/components/TimePicker/TimePicker.js +216 -0
- package/dist/granular/ui/components/TimePicker/TimePicker.js.map +1 -0
- package/dist/granular/ui/components/Timeline/Timeline.js +152 -0
- package/dist/granular/ui/components/Timeline/Timeline.js.map +1 -0
- package/dist/granular/ui/components/Toast/Toast.js +159 -0
- package/dist/granular/ui/components/Toast/Toast.js.map +1 -0
- package/dist/granular/ui/components/Toast/ToastContainer.js +41 -0
- package/dist/granular/ui/components/Toast/ToastContainer.js.map +1 -0
- package/dist/granular/ui/components/Toast/useToast.js +64 -0
- package/dist/granular/ui/components/Toast/useToast.js.map +1 -0
- package/dist/granular/ui/hooks/createGenericContext.js +27 -0
- package/dist/granular/ui/hooks/createGenericContext.js.map +1 -0
- package/dist/granular/ui/hooks/focusable.js +14 -0
- package/dist/granular/ui/hooks/focusable.js.map +1 -0
- package/dist/granular/ui/hooks/useAutoFocus.js +23 -0
- package/dist/granular/ui/hooks/useAutoFocus.js.map +1 -0
- package/dist/granular/ui/hooks/useCollapsible.js +37 -0
- package/dist/granular/ui/hooks/useCollapsible.js.map +1 -0
- package/dist/granular/ui/hooks/useFocusRestore.js +20 -0
- package/dist/granular/ui/hooks/useFocusRestore.js.map +1 -0
- package/dist/granular/ui/hooks/useFocusTrap.js +31 -0
- package/dist/granular/ui/hooks/useFocusTrap.js.map +1 -0
- package/dist/granular/ui/hooks/useScrollSpy.js +23 -0
- package/dist/granular/ui/hooks/useScrollSpy.js.map +1 -0
- package/dist/granular/ui/layouts/Container/Container.js +73 -0
- package/dist/granular/ui/layouts/Container/Container.js.map +1 -0
- package/dist/granular/ui/layouts/Stack/Stack.js +79 -0
- package/dist/granular/ui/layouts/Stack/Stack.js.map +1 -0
- package/dist/granular/ui/primitives/Avatar/Avatar.js +122 -0
- package/dist/granular/ui/primitives/Avatar/Avatar.js.map +1 -0
- package/dist/granular/ui/primitives/Avatar/AvatarGroup.js +97 -0
- package/dist/granular/ui/primitives/Avatar/AvatarGroup.js.map +1 -0
- package/dist/granular/ui/primitives/Badge/Badge.js +212 -0
- package/dist/granular/ui/primitives/Badge/Badge.js.map +1 -0
- package/dist/granular/ui/primitives/Button/Button.js +288 -0
- package/dist/granular/ui/primitives/Button/Button.js.map +1 -0
- package/dist/granular/ui/primitives/Checkbox/Checkbox.js +129 -0
- package/dist/granular/ui/primitives/Checkbox/Checkbox.js.map +1 -0
- package/dist/granular/ui/primitives/Chip/Chip.js +206 -0
- package/dist/granular/ui/primitives/Chip/Chip.js.map +1 -0
- package/dist/granular/ui/primitives/Collapsible/Collapsible.js +115 -0
- package/dist/granular/ui/primitives/Collapsible/Collapsible.js.map +1 -0
- package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js +54 -0
- package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js.map +1 -0
- package/dist/granular/ui/primitives/Info/Info.js +57 -0
- package/dist/granular/ui/primitives/Info/Info.js.map +1 -0
- package/dist/granular/ui/primitives/Input/Input.js +351 -0
- package/dist/granular/ui/primitives/Input/Input.js.map +1 -0
- package/dist/granular/ui/primitives/Label/Label.js +61 -0
- package/dist/granular/ui/primitives/Label/Label.js.map +1 -0
- package/dist/granular/ui/primitives/NavLink/NavLink.js +229 -0
- package/dist/granular/ui/primitives/NavLink/NavLink.js.map +1 -0
- package/dist/granular/ui/primitives/NavLink/hooks/useNavLink.js +15 -0
- package/dist/granular/ui/primitives/NavLink/hooks/useNavLink.js.map +1 -0
- package/dist/granular/ui/primitives/Progress/Progress.js +182 -0
- package/dist/granular/ui/primitives/Progress/Progress.js.map +1 -0
- package/dist/granular/ui/primitives/Radio/Radio.js +118 -0
- package/dist/granular/ui/primitives/Radio/Radio.js.map +1 -0
- package/dist/granular/ui/primitives/Select/Select.js +210 -0
- package/dist/granular/ui/primitives/Select/Select.js.map +1 -0
- package/dist/granular/ui/primitives/Separator/Separator.js +69 -0
- package/dist/granular/ui/primitives/Separator/Separator.js.map +1 -0
- package/dist/granular/ui/primitives/Skeleton/Skeleton.js +87 -0
- package/dist/granular/ui/primitives/Skeleton/Skeleton.js.map +1 -0
- package/dist/granular/ui/primitives/Slider/Slider.js +291 -0
- package/dist/granular/ui/primitives/Slider/Slider.js.map +1 -0
- package/dist/granular/ui/primitives/Spinner/Spinner.js +95 -0
- package/dist/granular/ui/primitives/Spinner/Spinner.js.map +1 -0
- package/dist/granular/ui/primitives/Switch/Switch.js +212 -0
- package/dist/granular/ui/primitives/Switch/Switch.js.map +1 -0
- package/dist/granular/ui/primitives/Text/Text.js +118 -0
- package/dist/granular/ui/primitives/Text/Text.js.map +1 -0
- package/dist/granular/ui/primitives/Textarea/Textarea.js +129 -0
- package/dist/granular/ui/primitives/Textarea/Textarea.js.map +1 -0
- package/dist/granular/ui/primitives/Tooltip/Tooltip.js +227 -0
- package/dist/granular/ui/primitives/Tooltip/Tooltip.js.map +1 -0
- package/dist/granular/ui/providers/AppProvider.js +50 -0
- package/dist/granular/ui/providers/AppProvider.js.map +1 -0
- package/dist/granular/ui/providers/ConfigProvider.js +95 -0
- package/dist/granular/ui/providers/ConfigProvider.js.map +1 -0
- package/dist/granular/ui/providers/DialogContext.js +20 -0
- package/dist/granular/ui/providers/DialogContext.js.map +1 -0
- package/dist/granular/ui/providers/DialogProvider.js +32 -0
- package/dist/granular/ui/providers/DialogProvider.js.map +1 -0
- package/dist/granular/ui/providers/ThemeProvider.js +56 -0
- package/dist/granular/ui/providers/ThemeProvider.js.map +1 -0
- package/dist/granular/ui/providers/ToastContext.js +20 -0
- package/dist/granular/ui/providers/ToastContext.js.map +1 -0
- package/dist/granular/ui/providers/ToastProvider.js +47 -0
- package/dist/granular/ui/providers/ToastProvider.js.map +1 -0
- package/dist/granular/ui/providers/providers-bundle.js +23 -0
- package/dist/granular/ui/providers/providers-bundle.js.map +1 -0
- package/dist/granular/ui/tokens/animations.js +106 -0
- package/dist/granular/ui/tokens/animations.js.map +1 -0
- package/dist/granular/ui/tokens/borders.js +54 -0
- package/dist/granular/ui/tokens/borders.js.map +1 -0
- package/dist/granular/ui/tokens/breakpoints.js +43 -0
- package/dist/granular/ui/tokens/breakpoints.js.map +1 -0
- package/dist/granular/ui/tokens/colors/brand.js +67 -0
- package/dist/granular/ui/tokens/colors/brand.js.map +1 -0
- package/dist/granular/ui/tokens/colors/index.js +25 -0
- package/dist/granular/ui/tokens/colors/index.js.map +1 -0
- package/dist/granular/ui/tokens/colors/primitives.js +320 -0
- package/dist/granular/ui/tokens/colors/primitives.js.map +1 -0
- package/dist/granular/ui/tokens/colors/semantic.js +212 -0
- package/dist/granular/ui/tokens/colors/semantic.js.map +1 -0
- package/dist/granular/ui/tokens/colors/types.js +18 -0
- package/dist/granular/ui/tokens/colors/types.js.map +1 -0
- package/dist/granular/ui/tokens/colors/utils.js +131 -0
- package/dist/granular/ui/tokens/colors/utils.js.map +1 -0
- package/dist/granular/ui/tokens/opacity.js +59 -0
- package/dist/granular/ui/tokens/opacity.js.map +1 -0
- package/dist/granular/ui/tokens/radius.js +76 -0
- package/dist/granular/ui/tokens/radius.js.map +1 -0
- package/dist/granular/ui/tokens/shadows.js +63 -0
- package/dist/granular/ui/tokens/shadows.js.map +1 -0
- package/dist/granular/ui/tokens/sidebar.js +92 -0
- package/dist/granular/ui/tokens/sidebar.js.map +1 -0
- package/dist/granular/ui/tokens/spacing.js +143 -0
- package/dist/granular/ui/tokens/spacing.js.map +1 -0
- package/dist/granular/ui/tokens/switch.js +51 -0
- package/dist/granular/ui/tokens/switch.js.map +1 -0
- package/dist/granular/ui/tokens/typography.js +146 -0
- package/dist/granular/ui/tokens/typography.js.map +1 -0
- package/dist/granular/ui/tokens/z-index.js +79 -0
- package/dist/granular/ui/tokens/z-index.js.map +1 -0
- package/dist/granular/ui/utils/cn.js +10 -0
- package/dist/granular/ui/utils/cn.js.map +1 -0
- package/dist/granular/ui/utils/cva.js +14 -0
- package/dist/granular/ui/utils/cva.js.map +1 -0
- package/dist/granular/ui/utils/mergeRefs.js +11 -0
- package/dist/granular/ui/utils/mergeRefs.js.map +1 -0
- package/dist/granular/vite.svg +1 -0
- package/dist/hooks/index.cjs +2 -0
- package/dist/hooks/index.cjs.map +1 -0
- package/dist/hooks/index.js +23 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.cjs +44 -70
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1900 -1885
- package/dist/index.js.map +1 -1
- package/dist/react-design-system.css +1 -1
- package/dist/server/index.cjs +23 -23
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.js +863 -1180
- package/dist/server/index.js.map +1 -1
- package/dist/ui/components/Accordion/Accordion.d.ts +9 -1
- package/dist/ui/hooks-entry.d.ts +2 -0
- package/dist/ui/utils/tailwind-safelist.d.ts +3 -1
- package/package.json +24 -13
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as n, jsxs as o, Fragment as V } from "react/jsx-runtime";
|
|
3
|
+
import { useState as y, useRef as S, useCallback as O, useEffect as b } from "react";
|
|
4
|
+
import { createPortal as U } from "react-dom";
|
|
5
|
+
import { Search as Z, Command as _ } from "lucide-react";
|
|
6
|
+
import { getSpacingClass as r } from "../../tokens/spacing.js";
|
|
7
|
+
import { getRadiusClass as K } from "../../tokens/radius.js";
|
|
8
|
+
import { getShadowClass as z } from "../../tokens/shadows.js";
|
|
9
|
+
import { getZIndexClass as L } from "../../tokens/z-index.js";
|
|
10
|
+
import { getAnimationClass as g } from "../../tokens/animations.js";
|
|
11
|
+
import B from "../../primitives/Input/Input.js";
|
|
12
|
+
function ne({
|
|
13
|
+
items: E,
|
|
14
|
+
open: v,
|
|
15
|
+
defaultOpen: j = !1,
|
|
16
|
+
onOpenChange: d,
|
|
17
|
+
trigger: $,
|
|
18
|
+
placeholder: P = "Type a command or search...",
|
|
19
|
+
emptyMessage: R = "No commands found",
|
|
20
|
+
className: A = ""
|
|
21
|
+
}) {
|
|
22
|
+
const [q, F] = y(j), [m, w] = y(""), [l, f] = y(0), k = S(null), p = S(null), x = v !== void 0, h = x ? v : q, i = E.filter((e) => {
|
|
23
|
+
var a, D;
|
|
24
|
+
if (!m) return !0;
|
|
25
|
+
const t = m.toLowerCase(), s = e.label.toLowerCase().includes(t), I = (a = e.description) == null ? void 0 : a.toLowerCase().includes(t), u = (D = e.keywords) == null ? void 0 : D.some(
|
|
26
|
+
(T) => T.toLowerCase().includes(t)
|
|
27
|
+
);
|
|
28
|
+
return s || I || u;
|
|
29
|
+
}), N = i.reduce(
|
|
30
|
+
(e, t) => {
|
|
31
|
+
const s = t.group || "Other";
|
|
32
|
+
return e[s] || (e[s] = []), e[s].push(t), e;
|
|
33
|
+
},
|
|
34
|
+
{}
|
|
35
|
+
), c = O(
|
|
36
|
+
(e) => {
|
|
37
|
+
x || F(e), d == null || d(e), e && (w(""), f(0), setTimeout(() => {
|
|
38
|
+
var t;
|
|
39
|
+
return (t = k.current) == null ? void 0 : t.focus();
|
|
40
|
+
}, 0));
|
|
41
|
+
},
|
|
42
|
+
[x, d]
|
|
43
|
+
), C = (e) => {
|
|
44
|
+
e.action(), c(!1);
|
|
45
|
+
}, M = (e) => {
|
|
46
|
+
if (e.key === "Escape") {
|
|
47
|
+
c(!1);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (e.key === "ArrowDown") {
|
|
51
|
+
e.preventDefault(), f((t) => Math.min(t + 1, i.length - 1));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (e.key === "ArrowUp") {
|
|
55
|
+
e.preventDefault(), f((t) => Math.max(t - 1, 0));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (e.key === "Enter") {
|
|
59
|
+
e.preventDefault(), i[l] && C(i[l]);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
b(() => {
|
|
64
|
+
if (p.current && l >= 0) {
|
|
65
|
+
const e = p.current.querySelector(
|
|
66
|
+
`[data-index="${l}"]`
|
|
67
|
+
);
|
|
68
|
+
e && typeof e.scrollIntoView == "function" && e.scrollIntoView({
|
|
69
|
+
block: "nearest",
|
|
70
|
+
behavior: "smooth"
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}, [l]), b(() => {
|
|
74
|
+
f(0);
|
|
75
|
+
}, [m]), b(() => {
|
|
76
|
+
const e = (t) => {
|
|
77
|
+
(t.metaKey || t.ctrlKey) && t.key === "k" && (t.preventDefault(), c(!h));
|
|
78
|
+
};
|
|
79
|
+
return document.addEventListener(
|
|
80
|
+
"keydown",
|
|
81
|
+
e
|
|
82
|
+
), () => document.removeEventListener(
|
|
83
|
+
"keydown",
|
|
84
|
+
e
|
|
85
|
+
);
|
|
86
|
+
}, [h, c]);
|
|
87
|
+
const Q = h ? /* @__PURE__ */ n(
|
|
88
|
+
"div",
|
|
89
|
+
{
|
|
90
|
+
className: `
|
|
91
|
+
fixed
|
|
92
|
+
inset-0
|
|
93
|
+
${L("modal-backdrop")}
|
|
94
|
+
bg-scrim
|
|
95
|
+
flex
|
|
96
|
+
items-start
|
|
97
|
+
justify-center
|
|
98
|
+
pt-[20vh]
|
|
99
|
+
${g("base")}
|
|
100
|
+
`,
|
|
101
|
+
onClick: () => c(!1),
|
|
102
|
+
children: /* @__PURE__ */ o(
|
|
103
|
+
"div",
|
|
104
|
+
{
|
|
105
|
+
className: `
|
|
106
|
+
w-full
|
|
107
|
+
max-w-2xl
|
|
108
|
+
${r("base", "mx")}
|
|
109
|
+
bg-surface-overlay
|
|
110
|
+
${K("lg")}
|
|
111
|
+
${z("xl")}
|
|
112
|
+
${L("modal")}
|
|
113
|
+
${g("base")}
|
|
114
|
+
${A}
|
|
115
|
+
`,
|
|
116
|
+
onClick: (e) => e.stopPropagation(),
|
|
117
|
+
children: [
|
|
118
|
+
/* @__PURE__ */ o(
|
|
119
|
+
"div",
|
|
120
|
+
{
|
|
121
|
+
className: `
|
|
122
|
+
flex
|
|
123
|
+
items-center
|
|
124
|
+
${r("md", "gap")}
|
|
125
|
+
${r("base", "p")}
|
|
126
|
+
border-b
|
|
127
|
+
border-line-default
|
|
128
|
+
`,
|
|
129
|
+
children: [
|
|
130
|
+
/* @__PURE__ */ n(Z, { className: "h-5 w-5 text-fg-secondary" }),
|
|
131
|
+
/* @__PURE__ */ n(
|
|
132
|
+
B,
|
|
133
|
+
{
|
|
134
|
+
ref: k,
|
|
135
|
+
value: m,
|
|
136
|
+
onChange: (e) => w(e.target.value),
|
|
137
|
+
onKeyDown: M,
|
|
138
|
+
placeholder: P,
|
|
139
|
+
className: "flex-1 border-0 focus:ring-0",
|
|
140
|
+
autoFocus: !0
|
|
141
|
+
}
|
|
142
|
+
),
|
|
143
|
+
/* @__PURE__ */ o(
|
|
144
|
+
"div",
|
|
145
|
+
{
|
|
146
|
+
className: `
|
|
147
|
+
flex
|
|
148
|
+
items-center
|
|
149
|
+
${r("xs", "gap")}
|
|
150
|
+
${r("sm", "px")}
|
|
151
|
+
${r("xs", "py")}
|
|
152
|
+
${K("sm")}
|
|
153
|
+
bg-surface-muted
|
|
154
|
+
text-xs
|
|
155
|
+
text-fg-tertiary
|
|
156
|
+
`,
|
|
157
|
+
children: [
|
|
158
|
+
/* @__PURE__ */ n(_, { className: "h-3 w-3" }),
|
|
159
|
+
/* @__PURE__ */ n("span", { children: "K" })
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
)
|
|
163
|
+
]
|
|
164
|
+
}
|
|
165
|
+
),
|
|
166
|
+
/* @__PURE__ */ n(
|
|
167
|
+
"div",
|
|
168
|
+
{
|
|
169
|
+
ref: p,
|
|
170
|
+
className: `
|
|
171
|
+
max-h-96
|
|
172
|
+
overflow-y-auto
|
|
173
|
+
${r("sm", "py")}
|
|
174
|
+
`,
|
|
175
|
+
children: Object.keys(N).length === 0 ? /* @__PURE__ */ n(
|
|
176
|
+
"div",
|
|
177
|
+
{
|
|
178
|
+
className: `
|
|
179
|
+
${r("lg", "p")}
|
|
180
|
+
text-center
|
|
181
|
+
text-sm
|
|
182
|
+
text-fg-secondary
|
|
183
|
+
`,
|
|
184
|
+
children: R
|
|
185
|
+
}
|
|
186
|
+
) : Object.entries(N).map(([e, t]) => /* @__PURE__ */ o("div", { children: [
|
|
187
|
+
e !== "Other" && /* @__PURE__ */ n(
|
|
188
|
+
"div",
|
|
189
|
+
{
|
|
190
|
+
className: `
|
|
191
|
+
${r("sm", "px")}
|
|
192
|
+
${r("xs", "py")}
|
|
193
|
+
text-xs
|
|
194
|
+
font-semibold
|
|
195
|
+
text-fg-tertiary
|
|
196
|
+
uppercase
|
|
197
|
+
tracking-wider
|
|
198
|
+
`,
|
|
199
|
+
children: e
|
|
200
|
+
}
|
|
201
|
+
),
|
|
202
|
+
t.map((s, I) => {
|
|
203
|
+
const u = i.indexOf(s), a = u === l;
|
|
204
|
+
return /* @__PURE__ */ o(
|
|
205
|
+
"button",
|
|
206
|
+
{
|
|
207
|
+
type: "button",
|
|
208
|
+
"data-index": u,
|
|
209
|
+
onClick: () => C(s),
|
|
210
|
+
className: `
|
|
211
|
+
w-full
|
|
212
|
+
flex
|
|
213
|
+
items-center
|
|
214
|
+
${r("md", "gap")}
|
|
215
|
+
${r("base", "px")}
|
|
216
|
+
${r("md", "py")}
|
|
217
|
+
text-left
|
|
218
|
+
${g("base")}
|
|
219
|
+
${a ? "bg-surface-brand-muted" : "hover:bg-surface-hover"}
|
|
220
|
+
`,
|
|
221
|
+
children: [
|
|
222
|
+
s.icon && /* @__PURE__ */ n(
|
|
223
|
+
"div",
|
|
224
|
+
{
|
|
225
|
+
className: `
|
|
226
|
+
${a ? "text-fg-brand-emphasis" : "text-fg-secondary"}
|
|
227
|
+
`,
|
|
228
|
+
children: s.icon
|
|
229
|
+
}
|
|
230
|
+
),
|
|
231
|
+
/* @__PURE__ */ o("div", { className: "flex-1 min-w-0", children: [
|
|
232
|
+
/* @__PURE__ */ n(
|
|
233
|
+
"div",
|
|
234
|
+
{
|
|
235
|
+
className: `
|
|
236
|
+
text-sm
|
|
237
|
+
font-medium
|
|
238
|
+
${a ? "text-fg-brand-emphasis" : "text-fg-primary"}
|
|
239
|
+
`,
|
|
240
|
+
children: s.label
|
|
241
|
+
}
|
|
242
|
+
),
|
|
243
|
+
s.description && // fg-secondary on selected: brand-muted bg drops fg-tertiary below AA;
|
|
244
|
+
// caption role preserved, intensity raised for contrast.
|
|
245
|
+
/* @__PURE__ */ n(
|
|
246
|
+
"div",
|
|
247
|
+
{
|
|
248
|
+
className: `text-xs ${a ? "text-fg-secondary" : "text-fg-tertiary"} ${r("0.5", "mt")}`,
|
|
249
|
+
children: s.description
|
|
250
|
+
}
|
|
251
|
+
)
|
|
252
|
+
] })
|
|
253
|
+
]
|
|
254
|
+
},
|
|
255
|
+
s.id
|
|
256
|
+
);
|
|
257
|
+
})
|
|
258
|
+
] }, e))
|
|
259
|
+
}
|
|
260
|
+
)
|
|
261
|
+
]
|
|
262
|
+
}
|
|
263
|
+
)
|
|
264
|
+
}
|
|
265
|
+
) : null;
|
|
266
|
+
return /* @__PURE__ */ o(V, { children: [
|
|
267
|
+
$ ? /* @__PURE__ */ n("div", { onClick: () => c(!0), children: $ }) : null,
|
|
268
|
+
typeof window != "undefined" && U(Q, document.body)
|
|
269
|
+
] });
|
|
270
|
+
}
|
|
271
|
+
export {
|
|
272
|
+
ne as default
|
|
273
|
+
};
|
|
274
|
+
//# sourceMappingURL=CommandPalette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandPalette.js","sources":["../../../../../src/ui/components/CommandPalette/CommandPalette.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useState,\n useEffect,\n useRef,\n useCallback,\n type KeyboardEvent,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Search, Command } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getShadowClass } from \"../../tokens/shadows\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\nimport { getAnimationClass } from \"../../tokens/animations\";\nimport Input from \"../../primitives/Input/Input\";\n\nexport interface CommandItem {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n keywords?: string[];\n group?: string;\n action: () => void;\n}\n\nexport interface CommandPaletteProps {\n items: CommandItem[];\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: React.ReactNode;\n placeholder?: string;\n emptyMessage?: string;\n className?: string;\n}\n\n/**\n * CommandPalette Component\n *\n * A command palette component for quick command search and execution.\n * Supports keyboard navigation, grouping, and filtering.\n * Follows Atomic Design principles as an Organism component.\n *\n * @example\n * ```tsx\n * <CommandPalette\n * items={[\n * { id: '1', label: 'New File', action: () => console.log('New File') },\n * { id: '2', label: 'Save', action: () => console.log('Save') },\n * ]}\n * />\n * ```\n */\nexport default function CommandPalette({\n items,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n trigger,\n placeholder = \"Type a command or search...\",\n emptyMessage = \"No commands found\",\n className = \"\",\n}: CommandPaletteProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [selectedIndex, setSelectedIndex] = useState(0);\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n // Filter items based on search query\n const filteredItems = items.filter((item) => {\n if (!searchQuery) return true;\n const query = searchQuery.toLowerCase();\n const matchesLabel = item.label.toLowerCase().includes(query);\n const matchesDescription = item.description?.toLowerCase().includes(query);\n const matchesKeywords = item.keywords?.some((keyword) =>\n keyword.toLowerCase().includes(query),\n );\n return matchesLabel || matchesDescription || matchesKeywords;\n });\n\n // Group items\n const groupedItems = filteredItems.reduce(\n (acc, item) => {\n const group = item.group || \"Other\";\n if (!acc[group]) {\n acc[group] = [];\n }\n acc[group].push(item);\n return acc;\n },\n {} as Record<string, CommandItem[]>,\n );\n\n const handleOpenChange = useCallback(\n (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n if (newOpen) {\n setSearchQuery(\"\");\n setSelectedIndex(0);\n setTimeout(() => inputRef.current?.focus(), 0);\n }\n },\n [isControlled, onOpenChange],\n );\n\n const handleSelect = (item: CommandItem) => {\n item.action();\n handleOpenChange(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\") {\n handleOpenChange(false);\n return;\n }\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setSelectedIndex((prev) => Math.min(prev + 1, filteredItems.length - 1));\n return;\n }\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setSelectedIndex((prev) => Math.max(prev - 1, 0));\n return;\n }\n\n if (e.key === \"Enter\") {\n e.preventDefault();\n if (filteredItems[selectedIndex]) {\n handleSelect(filteredItems[selectedIndex]);\n }\n return;\n }\n };\n\n // Scroll selected item into view\n useEffect(() => {\n if (listRef.current && selectedIndex >= 0) {\n const selectedElement = listRef.current.querySelector(\n `[data-index=\"${selectedIndex}\"]`,\n );\n if (\n selectedElement &&\n typeof selectedElement.scrollIntoView === \"function\"\n ) {\n selectedElement.scrollIntoView({\n block: \"nearest\",\n behavior: \"smooth\",\n });\n }\n }\n }, [selectedIndex]);\n\n // Reset selected index when search changes\n useEffect(() => {\n setSelectedIndex(0);\n }, [searchQuery]);\n\n // Keyboard shortcut (Cmd/Ctrl + K)\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === \"k\") {\n e.preventDefault();\n handleOpenChange(!isOpen);\n }\n };\n\n document.addEventListener(\n \"keydown\",\n handleKeyDown as unknown as EventListener,\n );\n return () =>\n document.removeEventListener(\n \"keydown\",\n handleKeyDown as unknown as EventListener,\n );\n }, [isOpen, handleOpenChange]);\n\n const commandPaletteContent = isOpen ? (\n <div\n className={`\n fixed\n inset-0\n ${getZIndexClass(\"modal-backdrop\")}\n bg-scrim\n flex\n items-start\n justify-center\n pt-[20vh]\n ${getAnimationClass(\"base\")}\n `}\n onClick={() => handleOpenChange(false)}\n >\n <div\n className={`\n w-full\n max-w-2xl\n ${getSpacingClass(\"base\", \"mx\")}\n bg-surface-overlay\n ${getRadiusClass(\"lg\")}\n ${getShadowClass(\"xl\")}\n ${getZIndexClass(\"modal\")}\n ${getAnimationClass(\"base\")}\n ${className}\n `}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Search Input */}\n <div\n className={`\n flex\n items-center\n ${getSpacingClass(\"md\", \"gap\")}\n ${getSpacingClass(\"base\", \"p\")}\n border-b\n border-line-default\n `}\n >\n <Search className=\"h-5 w-5 text-fg-secondary\" />\n <Input\n ref={inputRef}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className=\"flex-1 border-0 focus:ring-0\"\n autoFocus\n />\n <div\n className={`\n flex\n items-center\n ${getSpacingClass(\"xs\", \"gap\")}\n ${getSpacingClass(\"sm\", \"px\")}\n ${getSpacingClass(\"xs\", \"py\")}\n ${getRadiusClass(\"sm\")}\n bg-surface-muted\n text-xs\n text-fg-tertiary\n `}\n >\n <Command className=\"h-3 w-3\" />\n <span>K</span>\n </div>\n </div>\n\n {/* Results */}\n <div\n ref={listRef}\n className={`\n max-h-96\n overflow-y-auto\n ${getSpacingClass(\"sm\", \"py\")}\n `}\n >\n {Object.keys(groupedItems).length === 0 ? (\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n text-center\n text-sm\n text-fg-secondary\n `}\n >\n {emptyMessage}\n </div>\n ) : (\n Object.entries(groupedItems).map(([group, groupItems]) => (\n <div key={group}>\n {group !== \"Other\" && (\n <div\n className={`\n ${getSpacingClass(\"sm\", \"px\")}\n ${getSpacingClass(\"xs\", \"py\")}\n text-xs\n font-semibold\n text-fg-tertiary\n uppercase\n tracking-wider\n `}\n >\n {group}\n </div>\n )}\n {groupItems.map((item, _index) => {\n const globalIndex = filteredItems.indexOf(item);\n const isSelected = globalIndex === selectedIndex;\n\n return (\n <button\n key={item.id}\n type=\"button\"\n data-index={globalIndex}\n onClick={() => handleSelect(item)}\n className={`\n w-full\n flex\n items-center\n ${getSpacingClass(\"md\", \"gap\")}\n ${getSpacingClass(\"base\", \"px\")}\n ${getSpacingClass(\"md\", \"py\")}\n text-left\n ${getAnimationClass(\"base\")}\n ${isSelected ? \"bg-surface-brand-muted\" : \"hover:bg-surface-hover\"}\n `}\n >\n {item.icon && (\n <div\n className={`\n ${\n isSelected\n ? \"text-fg-brand-emphasis\"\n : \"text-fg-secondary\"\n }\n `}\n >\n {item.icon}\n </div>\n )}\n <div className=\"flex-1 min-w-0\">\n <div\n className={`\n text-sm\n font-medium\n ${isSelected ? \"text-fg-brand-emphasis\" : \"text-fg-primary\"}\n `}\n >\n {item.label}\n </div>\n {item.description && (\n // fg-secondary on selected: brand-muted bg drops fg-tertiary below AA;\n // caption role preserved, intensity raised for contrast.\n <div\n className={`text-xs ${isSelected ? \"text-fg-secondary\" : \"text-fg-tertiary\"} ${getSpacingClass(\"0.5\", \"mt\")}`}\n >\n {item.description}\n </div>\n )}\n </div>\n </button>\n );\n })}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n ) : null;\n\n return (\n <>\n {trigger ? (\n <div onClick={() => handleOpenChange(true)}>{trigger}</div>\n ) : null}\n {typeof window !== \"undefined\" &&\n createPortal(commandPaletteContent, document.body)}\n </>\n );\n}\n"],"names":["CommandPalette","items","controlledOpen","defaultOpen","onOpenChange","trigger","placeholder","emptyMessage","className","internalOpen","setInternalOpen","useState","searchQuery","setSearchQuery","selectedIndex","setSelectedIndex","inputRef","useRef","listRef","isControlled","isOpen","filteredItems","item","query","matchesLabel","matchesDescription","_a","matchesKeywords","_b","keyword","groupedItems","acc","group","handleOpenChange","useCallback","newOpen","handleSelect","handleKeyDown","prev","useEffect","selectedElement","e","commandPaletteContent","jsx","getZIndexClass","getAnimationClass","jsxs","getSpacingClass","getRadiusClass","getShadowClass","Search","Input","Command","groupItems","_index","globalIndex","isSelected","Fragment","createPortal"],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var t = Object.defineProperty, b = Object.defineProperties;
|
|
3
|
+
var x = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var s = Object.getOwnPropertySymbols;
|
|
5
|
+
var p = Object.prototype.hasOwnProperty, u = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var n = (d, e, a) => e in d ? t(d, e, { enumerable: !0, configurable: !0, writable: !0, value: a }) : d[e] = a, o = (d, e) => {
|
|
7
|
+
for (var a in e || (e = {}))
|
|
8
|
+
p.call(e, a) && n(d, a, e[a]);
|
|
9
|
+
if (s)
|
|
10
|
+
for (var a of s(e))
|
|
11
|
+
u.call(e, a) && n(d, a, e[a]);
|
|
12
|
+
return d;
|
|
13
|
+
}, c = (d, e) => b(d, x(e));
|
|
14
|
+
import { jsxs as f, jsx as l } from "react/jsx-runtime";
|
|
15
|
+
import { Container as r } from "../../layouts/Container/Container.js";
|
|
16
|
+
import g from "../SideNavbar/SideNavbar.js";
|
|
17
|
+
function X({
|
|
18
|
+
sidebar: d,
|
|
19
|
+
children: e,
|
|
20
|
+
header: a,
|
|
21
|
+
footer: i,
|
|
22
|
+
defaultCollapsed: m = !1,
|
|
23
|
+
sidebarProps: h
|
|
24
|
+
}) {
|
|
25
|
+
return /* @__PURE__ */ f("div", { className: "flex h-screen overflow-hidden", children: [
|
|
26
|
+
d && /* @__PURE__ */ l(g, c(o({ defaultCollapsed: m }, h), { children: d })),
|
|
27
|
+
/* @__PURE__ */ f("div", { className: "flex-1 flex flex-col overflow-hidden", children: [
|
|
28
|
+
a && /* @__PURE__ */ l("header", { className: "border-b bg-surface-base", children: /* @__PURE__ */ l(r, { maxWidth: "full", paddingX: "base", paddingY: "sm", children: a }) }),
|
|
29
|
+
/* @__PURE__ */ l("main", { className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ l(r, { maxWidth: "xl", paddingX: "base", paddingY: "base", children: e }) }),
|
|
30
|
+
i && /* @__PURE__ */ l("footer", { className: "border-t bg-surface-base", children: /* @__PURE__ */ l(r, { maxWidth: "full", paddingX: "base", paddingY: "sm", children: i }) })
|
|
31
|
+
] })
|
|
32
|
+
] });
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
X as DashboardLayout
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=DashboardLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardLayout.js","sources":["../../../../../src/ui/components/DashboardLayout/DashboardLayout.tsx"],"sourcesContent":["import React from \"react\";\nimport { SideNavbar } from \"../../components\";\nimport { Container } from \"../../layouts/Container/Container\";\n\nexport interface DashboardLayoutProps {\n /**\n * Sidebar content - use SideNavbar.Navbar and SideNavbar.Sidebar subcomponents\n */\n sidebar?: React.ReactNode;\n /**\n * Main content area\n */\n children: React.ReactNode;\n /**\n * Header content\n */\n header?: React.ReactNode;\n /**\n * Footer content\n */\n footer?: React.ReactNode;\n /**\n * Sidebar collapsed by default\n * @default false\n */\n defaultCollapsed?: boolean;\n /**\n * SideNavbar props\n */\n sidebarProps?: Omit<React.ComponentProps<typeof SideNavbar>, \"children\">;\n}\n\n/**\n * DashboardLayout - A complete dashboard page layout\n *\n * Combines SideNavbar, Container, and Stack to create a full dashboard structure.\n * This template provides a complete page layout with sensible defaults.\n *\n * @example\n * ```tsx\n * <DashboardLayout\n * sidebar={\n * <>\n * <SideNavbar.Navbar>\n * <SideNavbar.Navbar.Item icon={<Home />} label=\"Home\" />\n * </SideNavbar.Navbar>\n * <SideNavbar.Sidebar>\n * <SideNavbar.Sidebar.Content>Content</SideNavbar.Sidebar.Content>\n * </SideNavbar.Sidebar>\n * </>\n * }\n * header={<Header />}\n * >\n * <MainContent />\n * </DashboardLayout>\n * ```\n */\nexport function DashboardLayout({\n sidebar,\n children,\n header,\n footer,\n defaultCollapsed = false,\n sidebarProps,\n}: DashboardLayoutProps) {\n return (\n <div className=\"flex h-screen overflow-hidden\">\n {/* Sidebar */}\n {sidebar && (\n <SideNavbar defaultCollapsed={defaultCollapsed} {...sidebarProps}>\n {sidebar}\n </SideNavbar>\n )}\n\n {/* Main Content Area */}\n <div className=\"flex-1 flex flex-col overflow-hidden\">\n {/* Header */}\n {header && (\n <header className=\"border-b bg-surface-base\">\n <Container maxWidth=\"full\" paddingX=\"base\" paddingY=\"sm\">\n {header}\n </Container>\n </header>\n )}\n\n {/* Main Content */}\n <main className=\"flex-1 overflow-y-auto\">\n <Container maxWidth=\"xl\" paddingX=\"base\" paddingY=\"base\">\n {children}\n </Container>\n </main>\n\n {/* Footer */}\n {footer && (\n <footer className=\"border-t bg-surface-base\">\n <Container maxWidth=\"full\" paddingX=\"base\" paddingY=\"sm\">\n {footer}\n </Container>\n </footer>\n )}\n </div>\n </div>\n );\n}\n"],"names":["DashboardLayout","sidebar","children","header","footer","defaultCollapsed","sidebarProps","jsxs","jsx","SideNavbar","__spreadProps","__spreadValues","Container"],"mappings":";;;;;;;;;;;;;;;;AAyDO,SAASA,EAAgB;AAAA,EAC9B,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,kBAAAC,IAAmB;AAAA,EACnB,cAAAC;AACF,GAAyB;AACvB,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAU,iCAEZ,UAAA;AAAA,IAAAN,KACC,gBAAAO,EAACC,GAAAC,EAAAC,EAAA,EAAW,kBAAAN,KAAwCC,IAAnD,EACE,UAAAL,IACH;AAAA,IAIF,gBAAAM,EAAC,OAAA,EAAI,WAAU,wCAEZ,UAAA;AAAA,MAAAJ,KACC,gBAAAK,EAAC,UAAA,EAAO,WAAU,4BAChB,UAAA,gBAAAA,EAACI,GAAA,EAAU,UAAS,QAAO,UAAS,QAAO,UAAS,MACjD,aACH,GACF;AAAA,MAIF,gBAAAJ,EAAC,QAAA,EAAK,WAAU,0BACd,UAAA,gBAAAA,EAACI,GAAA,EAAU,UAAS,MAAK,UAAS,QAAO,UAAS,QAC/C,UAAAV,GACH,GACF;AAAA,MAGCE,KACC,gBAAAI,EAAC,UAAA,EAAO,WAAU,4BAChB,UAAA,gBAAAA,EAACI,GAAA,EAAU,UAAS,QAAO,UAAS,QAAO,UAAS,MACjD,aACH,EAAA,CACF;AAAA,IAAA,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var A = Object.defineProperty, z = Object.defineProperties;
|
|
3
|
+
var ee = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var $ = Object.getOwnPropertySymbols;
|
|
5
|
+
var te = Object.prototype.hasOwnProperty, se = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var U = (s, t, o) => t in s ? A(s, t, { enumerable: !0, configurable: !0, writable: !0, value: o }) : s[t] = o, g = (s, t) => {
|
|
7
|
+
for (var o in t || (t = {}))
|
|
8
|
+
te.call(t, o) && U(s, o, t[o]);
|
|
9
|
+
if ($)
|
|
10
|
+
for (var o of $(t))
|
|
11
|
+
se.call(t, o) && U(s, o, t[o]);
|
|
12
|
+
return s;
|
|
13
|
+
}, h = (s, t) => z(s, ee(t));
|
|
14
|
+
import { jsxs as x, jsx as c } from "react/jsx-runtime";
|
|
15
|
+
import { useState as oe, useMemo as re } from "react";
|
|
16
|
+
import { Download as ne } from "lucide-react";
|
|
17
|
+
import ae from "../Table/Table.js";
|
|
18
|
+
import { Button as le } from "../../primitives/Button/Button.js";
|
|
19
|
+
import { getSpacingClass as i } from "../../tokens/spacing.js";
|
|
20
|
+
import { getRadiusClass as ce } from "../../tokens/radius.js";
|
|
21
|
+
function $e({
|
|
22
|
+
columns: s,
|
|
23
|
+
data: t,
|
|
24
|
+
loading: o = !1,
|
|
25
|
+
onSort: y,
|
|
26
|
+
sortColumn: L,
|
|
27
|
+
sortDirection: N,
|
|
28
|
+
multiSort: ie = !1,
|
|
29
|
+
// Grouping props are @experimental — see DataGridGroup JSDoc. Accepted
|
|
30
|
+
// for forward-compatibility but not yet wired to rendering.
|
|
31
|
+
groups: me,
|
|
32
|
+
onGroupChange: pe,
|
|
33
|
+
groupable: de = !1,
|
|
34
|
+
resizable: R = !0,
|
|
35
|
+
reorderable: ue = !1,
|
|
36
|
+
onColumnReorder: fe,
|
|
37
|
+
columnWidths: k,
|
|
38
|
+
onColumnResize: d,
|
|
39
|
+
selectable: S = !1,
|
|
40
|
+
selectedRows: O,
|
|
41
|
+
onSelectionChange: _,
|
|
42
|
+
rowId: D,
|
|
43
|
+
exportable: j = !1,
|
|
44
|
+
onExport: v,
|
|
45
|
+
exportFormats: W = ["csv", "xlsx", "json"],
|
|
46
|
+
pagination: B,
|
|
47
|
+
filters: G,
|
|
48
|
+
actions: T,
|
|
49
|
+
toolbarActions: w,
|
|
50
|
+
virtualScrolling: E = !1,
|
|
51
|
+
virtualScrollingOptions: I,
|
|
52
|
+
emptyMessage: J,
|
|
53
|
+
emptyStateTitle: M,
|
|
54
|
+
emptyStateMessage: V,
|
|
55
|
+
emptyStateIllustration: q,
|
|
56
|
+
emptyStateAction: F,
|
|
57
|
+
className: H = ""
|
|
58
|
+
}) {
|
|
59
|
+
const [u, K] = oe(k || {}), P = re(() => s.map((e) => h(g({}, e), {
|
|
60
|
+
width: u[e.key] || e.defaultWidth
|
|
61
|
+
})), [s, u]), Q = (e) => {
|
|
62
|
+
v ? v(e) : e === "csv" ? X(t, s) : e === "json" && Y(t);
|
|
63
|
+
}, X = (e, n) => {
|
|
64
|
+
const a = n.filter((r) => r.exportable !== !1).map((r) => r.label || r.key), m = e.map(
|
|
65
|
+
(r) => n.filter((b) => b.exportable !== !1).map((b) => {
|
|
66
|
+
const p = r[b.key];
|
|
67
|
+
return typeof p == "string" && p.includes(",") ? `"${p}"` : p;
|
|
68
|
+
})
|
|
69
|
+
), l = [a.join(","), ...m.map((r) => r.join(","))].join(`
|
|
70
|
+
`), Z = new Blob([l], { type: "text/csv" }), C = URL.createObjectURL(Z), f = document.createElement("a");
|
|
71
|
+
f.href = C, f.download = `export-${Date.now()}.csv`, f.click(), URL.revokeObjectURL(C);
|
|
72
|
+
}, Y = (e) => {
|
|
73
|
+
const n = JSON.stringify(e, null, 2), a = new Blob([n], { type: "application/json" }), m = URL.createObjectURL(a), l = document.createElement("a");
|
|
74
|
+
l.href = m, l.download = `export-${Date.now()}.json`, l.click(), URL.revokeObjectURL(m);
|
|
75
|
+
};
|
|
76
|
+
return /* @__PURE__ */ x("div", { className: `${i("base", "space-y")} ${H}`, children: [
|
|
77
|
+
(j || w) && /* @__PURE__ */ x(
|
|
78
|
+
"div",
|
|
79
|
+
{
|
|
80
|
+
className: `
|
|
81
|
+
flex
|
|
82
|
+
items-center
|
|
83
|
+
justify-between
|
|
84
|
+
${i("base", "p")}
|
|
85
|
+
bg-surface-base
|
|
86
|
+
border
|
|
87
|
+
border-line-default
|
|
88
|
+
${ce("lg")}
|
|
89
|
+
`,
|
|
90
|
+
children: [
|
|
91
|
+
/* @__PURE__ */ c(
|
|
92
|
+
"div",
|
|
93
|
+
{
|
|
94
|
+
className: `flex items-center ${i("sm", "gap")}`
|
|
95
|
+
}
|
|
96
|
+
),
|
|
97
|
+
/* @__PURE__ */ x("div", { className: `flex items-center ${i("sm", "gap")}`, children: [
|
|
98
|
+
w,
|
|
99
|
+
j && /* @__PURE__ */ c(
|
|
100
|
+
"div",
|
|
101
|
+
{
|
|
102
|
+
className: `flex items-center ${i("xs", "gap")}`,
|
|
103
|
+
children: W.map((e) => /* @__PURE__ */ c(
|
|
104
|
+
le,
|
|
105
|
+
{
|
|
106
|
+
variant: "outline",
|
|
107
|
+
size: "sm",
|
|
108
|
+
leftIcon: /* @__PURE__ */ c(ne, { className: "h-4 w-4" }),
|
|
109
|
+
onClick: () => Q(e),
|
|
110
|
+
children: e.toUpperCase()
|
|
111
|
+
},
|
|
112
|
+
e
|
|
113
|
+
))
|
|
114
|
+
}
|
|
115
|
+
)
|
|
116
|
+
] })
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
),
|
|
120
|
+
/* @__PURE__ */ c(
|
|
121
|
+
ae,
|
|
122
|
+
{
|
|
123
|
+
columns: P,
|
|
124
|
+
data: t,
|
|
125
|
+
loading: o,
|
|
126
|
+
onSort: y,
|
|
127
|
+
sortColumn: L,
|
|
128
|
+
sortDirection: N,
|
|
129
|
+
pagination: B,
|
|
130
|
+
filters: G,
|
|
131
|
+
selectable: S,
|
|
132
|
+
selectedRows: O,
|
|
133
|
+
onSelectionChange: _,
|
|
134
|
+
rowId: D,
|
|
135
|
+
actions: T,
|
|
136
|
+
resizable: R,
|
|
137
|
+
columnWidths: u,
|
|
138
|
+
onColumnResize: (e, n) => {
|
|
139
|
+
K((a) => h(g({}, a), { [e]: n })), d == null || d(e, n);
|
|
140
|
+
},
|
|
141
|
+
virtualScrolling: E,
|
|
142
|
+
virtualScrollingOptions: I,
|
|
143
|
+
emptyMessage: J,
|
|
144
|
+
emptyStateTitle: M,
|
|
145
|
+
emptyStateMessage: V,
|
|
146
|
+
emptyStateIllustration: q,
|
|
147
|
+
emptyStateAction: F
|
|
148
|
+
}
|
|
149
|
+
)
|
|
150
|
+
] });
|
|
151
|
+
}
|
|
152
|
+
export {
|
|
153
|
+
$e as default
|
|
154
|
+
};
|
|
155
|
+
//# sourceMappingURL=DataGrid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataGrid.js","sources":["../../../../../src/ui/components/DataGrid/DataGrid.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useMemo, type ReactNode } from \"react\";\nimport { Download } from \"lucide-react\";\nimport Table, { type TableColumn } from \"../Table/Table\";\nimport Button from \"../../primitives/Button/Button\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport type { TableAction } from \"../Table/TableActions/TableActions\";\nimport type {\n FilterConfig,\n FilterValue,\n} from \"../Table/TableFilters/TableFilters\";\n\nexport type DataGridColumn<T = unknown> = TableColumn<T> & {\n groupable?: boolean;\n exportable?: boolean;\n defaultWidth?: number;\n minWidth?: number;\n maxWidth?: number;\n};\n\n/**\n * @experimental Reserved for upcoming row-grouping support; not yet wired\n * to rendering. The shape is fixed for forward-compatibility, but passing\n * a `groups` array to `<DataGrid>` has no visual effect today. Tracked in\n * BACKLOG.md under \"DataGrid row grouping — props/types reserved\".\n */\nexport interface DataGridGroup {\n column: string;\n expanded?: boolean;\n}\n\nexport interface DataGridProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n columns: DataGridColumn<T>[];\n data: T[];\n loading?: boolean;\n\n // Sorting\n onSort?: (columnKey: string, direction: \"asc\" | \"desc\") => void;\n sortColumn?: string;\n sortDirection?: \"asc\" | \"desc\";\n multiSort?: boolean;\n\n // Grouping\n /**\n * @experimental Reserved for upcoming row-grouping support; not yet wired\n * to rendering. Passing this has no visual effect today — the grid renders\n * a flat table regardless. Tracked in BACKLOG.md under \"DataGrid row\n * grouping — props/types reserved\".\n */\n groups?: DataGridGroup[];\n /**\n * @experimental Reserved for upcoming row-grouping support; not yet wired.\n * The callback is never invoked today. Tracked in BACKLOG.md.\n */\n onGroupChange?: (groups: DataGridGroup[]) => void;\n /**\n * @experimental Reserved for upcoming row-grouping support; not yet wired.\n * Passing `true` has no visual effect today — the grouping toolbar button\n * was removed because it rendered but had no behaviour. Tracked in\n * BACKLOG.md.\n */\n groupable?: boolean;\n\n // Column Management\n resizable?: boolean;\n reorderable?: boolean;\n onColumnReorder?: (columns: DataGridColumn<T>[]) => void;\n columnWidths?: Record<string, number>;\n onColumnResize?: (columnKey: string, width: number) => void;\n\n // Selection\n selectable?: boolean;\n selectedRows?: string[];\n onSelectionChange?: (selected: string[]) => void;\n rowId?: (row: T) => string;\n\n // Export\n exportable?: boolean;\n onExport?: (format: \"csv\" | \"xlsx\" | \"json\") => void;\n exportFormats?: (\"csv\" | \"xlsx\" | \"json\")[];\n\n // Pagination\n pagination?: {\n page: number;\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n onPageSizeChange: (size: number) => void;\n pageSizeOptions?: number[];\n };\n\n // Filters\n filters?: {\n config: FilterConfig[];\n onFilter: (filters: Record<string, FilterValue>) => void;\n initialValues?: Record<string, FilterValue>;\n };\n\n // Actions\n actions?: (row: T) => TableAction<T>[];\n toolbarActions?: ReactNode;\n\n // Virtual Scrolling\n virtualScrolling?: boolean;\n virtualScrollingOptions?: {\n itemHeight?: number;\n containerHeight?: number;\n overscan?: number;\n };\n\n // Empty State\n emptyMessage?: string;\n emptyStateTitle?: string;\n emptyStateMessage?: string;\n emptyStateIllustration?: ReactNode;\n emptyStateAction?: ReactNode;\n\n className?: string;\n}\n\n/**\n * DataGrid Component\n *\n * An advanced data grid component with sorting, filtering, grouping, column management, and export.\n * Extends the Table component with additional enterprise features.\n * Follows Atomic Design principles as an Organism component.\n *\n * @example\n * ```tsx\n * <DataGrid\n * columns={columns}\n * data={data}\n * groupable\n * exportable\n * onExport={(format) => console.log('Export as', format)}\n * />\n * ```\n */\nexport default function DataGrid<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({\n columns,\n data,\n loading = false,\n onSort,\n sortColumn,\n sortDirection,\n multiSort: _multiSort = false,\n // Grouping props are @experimental — see DataGridGroup JSDoc. Accepted\n // for forward-compatibility but not yet wired to rendering.\n groups: _groups,\n onGroupChange: _onGroupChange,\n groupable: _groupable = false,\n resizable = true,\n reorderable: _reorderable = false,\n onColumnReorder: _onColumnReorder,\n columnWidths,\n onColumnResize,\n selectable = false,\n selectedRows,\n onSelectionChange,\n rowId,\n exportable = false,\n onExport,\n exportFormats = [\"csv\", \"xlsx\", \"json\"],\n pagination,\n filters,\n actions,\n toolbarActions,\n virtualScrolling = false,\n virtualScrollingOptions,\n emptyMessage,\n emptyStateTitle,\n emptyStateMessage,\n emptyStateIllustration,\n emptyStateAction,\n className = \"\",\n}: DataGridProps<T>) {\n const [internalColumnWidths, setInternalColumnWidths] = useState<\n Record<string, number>\n >(columnWidths || {});\n\n // Convert DataGrid columns to Table columns\n const tableColumns: TableColumn<T>[] = useMemo(() => {\n return columns.map((col) => ({\n ...col,\n width: internalColumnWidths[col.key as string] || col.defaultWidth,\n }));\n }, [columns, internalColumnWidths]);\n\n const handleExport = (format: \"csv\" | \"xlsx\" | \"json\") => {\n if (onExport) {\n onExport(format);\n } else {\n // Default export implementation\n if (format === \"csv\") {\n exportToCSV(data, columns);\n } else if (format === \"json\") {\n exportToJSON(data);\n }\n }\n };\n\n const exportToCSV = (data: T[], cols: DataGridColumn<T>[]) => {\n const headers = cols\n .filter((c) => c.exportable !== false)\n .map((c) => c.label || c.key);\n const rows = data.map((row) =>\n cols\n .filter((c) => c.exportable !== false)\n .map((c) => {\n const value = row[c.key];\n return typeof value === \"string\" && value.includes(\",\")\n ? `\"${value}\"`\n : value;\n }),\n );\n\n const csv = [headers.join(\",\"), ...rows.map((r) => r.join(\",\"))].join(\"\\n\");\n const blob = new Blob([csv], { type: \"text/csv\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `export-${Date.now()}.csv`;\n a.click();\n URL.revokeObjectURL(url);\n };\n\n const exportToJSON = (data: T[]) => {\n const json = JSON.stringify(data, null, 2);\n const blob = new Blob([json], { type: \"application/json\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `export-${Date.now()}.json`;\n a.click();\n URL.revokeObjectURL(url);\n };\n\n return (\n <div className={`${getSpacingClass(\"base\", \"space-y\")} ${className}`}>\n {/* Toolbar */}\n {(exportable || toolbarActions) && (\n <div\n className={`\n flex\n items-center\n justify-between\n ${getSpacingClass(\"base\", \"p\")}\n bg-surface-base\n border\n border-line-default\n ${getRadiusClass(\"lg\")}\n `}\n >\n {/* Left slot reserved for the grouping toolbar (currently\n @experimental — see DataGridGroup JSDoc). The empty div\n preserves the justify-between layout so toolbarActions and\n the export controls stay anchored to the right. */}\n <div\n className={`flex items-center ${getSpacingClass(\"sm\", \"gap\")}`}\n />\n\n <div className={`flex items-center ${getSpacingClass(\"sm\", \"gap\")}`}>\n {toolbarActions}\n {exportable && (\n <div\n className={`flex items-center ${getSpacingClass(\"xs\", \"gap\")}`}\n >\n {exportFormats.map((format) => (\n <Button\n key={format}\n variant=\"outline\"\n size=\"sm\"\n leftIcon={<Download className=\"h-4 w-4\" />}\n onClick={() => handleExport(format)}\n >\n {format.toUpperCase()}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Table */}\n <Table\n columns={tableColumns}\n data={data}\n loading={loading}\n onSort={onSort}\n sortColumn={sortColumn}\n sortDirection={sortDirection}\n pagination={pagination}\n filters={filters}\n selectable={selectable}\n selectedRows={selectedRows}\n onSelectionChange={onSelectionChange}\n rowId={rowId}\n actions={actions}\n resizable={resizable}\n columnWidths={internalColumnWidths}\n onColumnResize={(key, width) => {\n setInternalColumnWidths((prev) => ({ ...prev, [key]: width }));\n onColumnResize?.(key, width);\n }}\n virtualScrolling={virtualScrolling}\n virtualScrollingOptions={virtualScrollingOptions}\n emptyMessage={emptyMessage}\n emptyStateTitle={emptyStateTitle}\n emptyStateMessage={emptyStateMessage}\n emptyStateIllustration={emptyStateIllustration}\n emptyStateAction={emptyStateAction}\n />\n </div>\n );\n}\n"],"names":["DataGrid","columns","data","loading","onSort","sortColumn","sortDirection","_multiSort","_groups","_onGroupChange","_groupable","resizable","_reorderable","_onColumnReorder","columnWidths","onColumnResize","selectable","selectedRows","onSelectionChange","rowId","exportable","onExport","exportFormats","pagination","filters","actions","toolbarActions","virtualScrolling","virtualScrollingOptions","emptyMessage","emptyStateTitle","emptyStateMessage","emptyStateIllustration","emptyStateAction","className","internalColumnWidths","setInternalColumnWidths","useState","tableColumns","useMemo","col","__spreadProps","__spreadValues","handleExport","format","exportToCSV","exportToJSON","cols","headers","c","rows","row","value","csv","blob","url","a","json","jsxs","getSpacingClass","getRadiusClass","jsx","Button","Download","Table","key","width","prev"],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var $ = Object.defineProperty, q = Object.defineProperties;
|
|
3
|
+
var W = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var v = Object.getOwnPropertySymbols;
|
|
5
|
+
var X = Object.prototype.hasOwnProperty, Y = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var b = (r, t, a) => t in r ? $(r, t, { enumerable: !0, configurable: !0, writable: !0, value: a }) : r[t] = a, I = (r, t) => {
|
|
7
|
+
for (var a in t || (t = {}))
|
|
8
|
+
X.call(t, a) && b(r, a, t[a]);
|
|
9
|
+
if (v)
|
|
10
|
+
for (var a of v(t))
|
|
11
|
+
Y.call(t, a) && b(r, a, t[a]);
|
|
12
|
+
return r;
|
|
13
|
+
}, N = (r, t) => q(r, W(t));
|
|
14
|
+
import { jsx as c, jsxs as g } from "react/jsx-runtime";
|
|
15
|
+
import { useState as j, useMemo as p } from "react";
|
|
16
|
+
import { Container as z } from "../../layouts/Container/Container.js";
|
|
17
|
+
import { Stack as A } from "../../layouts/Stack/Stack.js";
|
|
18
|
+
import { getSpacingClass as k } from "../../tokens/spacing.js";
|
|
19
|
+
import B from "../SearchInput/SearchInput.js";
|
|
20
|
+
import E from "../Table/Table.js";
|
|
21
|
+
import F from "../Pagination/Pagination.js";
|
|
22
|
+
function _({
|
|
23
|
+
columns: r,
|
|
24
|
+
data: t,
|
|
25
|
+
searchPlaceholder: a = "Search...",
|
|
26
|
+
enableSearch: u = !0,
|
|
27
|
+
itemsPerPage: i = 10,
|
|
28
|
+
enablePagination: d = !0,
|
|
29
|
+
actions: x,
|
|
30
|
+
onRowClick: S,
|
|
31
|
+
loading: w = !1,
|
|
32
|
+
emptyMessage: D = "No data available"
|
|
33
|
+
}) {
|
|
34
|
+
const [l, L] = j(""), [f, y] = j(1), h = p(() => r.map((e) => {
|
|
35
|
+
if (e.accessor || e.header) {
|
|
36
|
+
const s = e.key || (typeof e.accessor == "string" ? e.accessor : String(e.accessor)), n = e.label || e.header || "";
|
|
37
|
+
return N(I({}, e), {
|
|
38
|
+
key: s,
|
|
39
|
+
label: n
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return e;
|
|
43
|
+
}), [r]), o = p(() => {
|
|
44
|
+
if (!l.trim()) return t;
|
|
45
|
+
const e = l.toLowerCase();
|
|
46
|
+
return t.filter((s) => h.some((n) => {
|
|
47
|
+
const T = s[String(n.key)];
|
|
48
|
+
return String(T).toLowerCase().includes(e);
|
|
49
|
+
}));
|
|
50
|
+
}, [t, l, h]), m = p(() => {
|
|
51
|
+
if (!d) return o;
|
|
52
|
+
const e = (f - 1) * i, s = e + i;
|
|
53
|
+
return o.slice(e, s);
|
|
54
|
+
}, [o, f, i, d]), C = d ? Math.ceil(o.length / i) : 1, M = (e) => {
|
|
55
|
+
y(e);
|
|
56
|
+
}, Q = (e) => {
|
|
57
|
+
L(e), y(1);
|
|
58
|
+
};
|
|
59
|
+
return /* @__PURE__ */ c(z, { maxWidth: "full", paddingX: "base", paddingY: "base", children: /* @__PURE__ */ g(A, { spacing: "md", children: [
|
|
60
|
+
/* @__PURE__ */ g(
|
|
61
|
+
"div",
|
|
62
|
+
{
|
|
63
|
+
className: `flex items-center justify-between ${k("base", "gap")}`,
|
|
64
|
+
children: [
|
|
65
|
+
u && /* @__PURE__ */ c("div", { className: "flex-1 max-w-md", children: /* @__PURE__ */ c(
|
|
66
|
+
B,
|
|
67
|
+
{
|
|
68
|
+
placeholder: a,
|
|
69
|
+
value: l,
|
|
70
|
+
onSearch: Q
|
|
71
|
+
}
|
|
72
|
+
) }),
|
|
73
|
+
x && /* @__PURE__ */ c("div", { className: `flex ${k("sm", "gap")}`, children: x })
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
),
|
|
77
|
+
/* @__PURE__ */ c(
|
|
78
|
+
E,
|
|
79
|
+
{
|
|
80
|
+
columns: h,
|
|
81
|
+
data: m,
|
|
82
|
+
loading: w,
|
|
83
|
+
emptyMessage: D,
|
|
84
|
+
onRowClick: S ? (e) => {
|
|
85
|
+
const s = o.findIndex((n) => n === e);
|
|
86
|
+
S(
|
|
87
|
+
e,
|
|
88
|
+
s >= 0 ? s : m.findIndex((n) => n === e)
|
|
89
|
+
);
|
|
90
|
+
} : void 0
|
|
91
|
+
}
|
|
92
|
+
),
|
|
93
|
+
d && C > 1 && /* @__PURE__ */ c("div", { className: "flex justify-center", children: /* @__PURE__ */ c(
|
|
94
|
+
F,
|
|
95
|
+
{
|
|
96
|
+
currentPage: f,
|
|
97
|
+
totalPages: C,
|
|
98
|
+
onPageChange: M
|
|
99
|
+
}
|
|
100
|
+
) }),
|
|
101
|
+
u && /* @__PURE__ */ g("div", { className: "text-sm text-fg-secondary text-center", children: [
|
|
102
|
+
"Showing ",
|
|
103
|
+
m.length,
|
|
104
|
+
" of ",
|
|
105
|
+
o.length,
|
|
106
|
+
" results"
|
|
107
|
+
] })
|
|
108
|
+
] }) });
|
|
109
|
+
}
|
|
110
|
+
export {
|
|
111
|
+
_ as DataTablePattern
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=DataTablePattern.js.map
|