@fabio.caffarello/react-design-system 3.8.0 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/granular/index.js +445 -0
- package/dist/granular/index.js.map +1 -0
- package/dist/granular/ui/components/Accordion/Accordion.js +105 -0
- package/dist/granular/ui/components/Accordion/Accordion.js.map +1 -0
- package/dist/granular/ui/components/Autocomplete/Autocomplete.js +133 -0
- package/dist/granular/ui/components/Autocomplete/Autocomplete.js.map +1 -0
- package/dist/granular/ui/components/Autocomplete/AutocompleteList.js +119 -0
- package/dist/granular/ui/components/Autocomplete/AutocompleteList.js.map +1 -0
- package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js +42 -0
- package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js.map +1 -0
- package/dist/granular/ui/components/Breadcrumb/Breadcrumb.js +100 -0
- package/dist/granular/ui/components/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/granular/ui/components/Card/Card.js +113 -0
- package/dist/granular/ui/components/Card/Card.js.map +1 -0
- package/dist/granular/ui/components/Card/CardActions.js +51 -0
- package/dist/granular/ui/components/Card/CardActions.js.map +1 -0
- package/dist/granular/ui/components/Card/CardBody.js +32 -0
- package/dist/granular/ui/components/Card/CardBody.js.map +1 -0
- package/dist/granular/ui/components/Card/CardHeader.js +47 -0
- package/dist/granular/ui/components/Card/CardHeader.js.map +1 -0
- package/dist/granular/ui/components/Card/CardSubtitle.js +38 -0
- package/dist/granular/ui/components/Card/CardSubtitle.js.map +1 -0
- package/dist/granular/ui/components/Card/CardTitle.js +61 -0
- package/dist/granular/ui/components/Card/CardTitle.js.map +1 -0
- package/dist/granular/ui/components/ColorPicker/ColorPicker.js +250 -0
- package/dist/granular/ui/components/ColorPicker/ColorPicker.js.map +1 -0
- package/dist/granular/ui/components/CommandPalette/CommandPalette.js +274 -0
- package/dist/granular/ui/components/CommandPalette/CommandPalette.js.map +1 -0
- package/dist/granular/ui/components/DashboardLayout/DashboardLayout.js +37 -0
- package/dist/granular/ui/components/DashboardLayout/DashboardLayout.js.map +1 -0
- package/dist/granular/ui/components/DataGrid/DataGrid.js +155 -0
- package/dist/granular/ui/components/DataGrid/DataGrid.js.map +1 -0
- package/dist/granular/ui/components/DataTablePattern/DataTablePattern.js +113 -0
- package/dist/granular/ui/components/DataTablePattern/DataTablePattern.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePicker.js +126 -0
- package/dist/granular/ui/components/DatePicker/DatePicker.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js +294 -0
- package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePickerContext.js +16 -0
- package/dist/granular/ui/components/DatePicker/DatePickerContext.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePickerInput.js +119 -0
- package/dist/granular/ui/components/DatePicker/DatePickerInput.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePickerProvider.js +47 -0
- package/dist/granular/ui/components/DatePicker/DatePickerProvider.js.map +1 -0
- package/dist/granular/ui/components/Dialog/AlertDialog.js +48 -0
- package/dist/granular/ui/components/Dialog/AlertDialog.js.map +1 -0
- package/dist/granular/ui/components/Dialog/Dialog.js +36 -0
- package/dist/granular/ui/components/Dialog/Dialog.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogClose.js +34 -0
- package/dist/granular/ui/components/Dialog/DialogClose.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogContent.js +114 -0
- package/dist/granular/ui/components/Dialog/DialogContent.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogDescription.js +51 -0
- package/dist/granular/ui/components/Dialog/DialogDescription.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogFooter.js +45 -0
- package/dist/granular/ui/components/Dialog/DialogFooter.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogHeader.js +45 -0
- package/dist/granular/ui/components/Dialog/DialogHeader.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogTitle.js +53 -0
- package/dist/granular/ui/components/Dialog/DialogTitle.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogTrigger.js +28 -0
- package/dist/granular/ui/components/Dialog/DialogTrigger.js.map +1 -0
- package/dist/granular/ui/components/Drawer/Drawer.js +47 -0
- package/dist/granular/ui/components/Drawer/Drawer.js.map +1 -0
- package/dist/granular/ui/components/Drawer/DrawerContent.js +140 -0
- package/dist/granular/ui/components/Drawer/DrawerContent.js.map +1 -0
- package/dist/granular/ui/components/Drawer/DrawerContext.js +21 -0
- package/dist/granular/ui/components/Drawer/DrawerContext.js.map +1 -0
- package/dist/granular/ui/components/Drawer/DrawerFooter.js +53 -0
- package/dist/granular/ui/components/Drawer/DrawerFooter.js.map +1 -0
- package/dist/granular/ui/components/Drawer/DrawerHeader.js +50 -0
- package/dist/granular/ui/components/Drawer/DrawerHeader.js.map +1 -0
- package/dist/granular/ui/components/Dropdown/Dropdown.js +243 -0
- package/dist/granular/ui/components/Dropdown/Dropdown.js.map +1 -0
- package/dist/granular/ui/components/EmptyState/EmptyState.js +102 -0
- package/dist/granular/ui/components/EmptyState/EmptyState.js.map +1 -0
- package/dist/granular/ui/components/FileUpload/FileUpload.js +342 -0
- package/dist/granular/ui/components/FileUpload/FileUpload.js.map +1 -0
- package/dist/granular/ui/components/Form/Form.js +184 -0
- package/dist/granular/ui/components/Form/Form.js.map +1 -0
- package/dist/granular/ui/components/Form/FormContext.js +19 -0
- package/dist/granular/ui/components/Form/FormContext.js.map +1 -0
- package/dist/granular/ui/components/Form/FormField.js +66 -0
- package/dist/granular/ui/components/Form/FormField.js.map +1 -0
- package/dist/granular/ui/components/Form/FormProvider.js +17 -0
- package/dist/granular/ui/components/Form/FormProvider.js.map +1 -0
- package/dist/granular/ui/components/Form/useFormFieldArray.js +29 -0
- package/dist/granular/ui/components/Form/useFormFieldArray.js.map +1 -0
- package/dist/granular/ui/components/FormWizardPattern/FormWizardPattern.js +121 -0
- package/dist/granular/ui/components/FormWizardPattern/FormWizardPattern.js.map +1 -0
- package/dist/granular/ui/components/Header/Header.js +98 -0
- package/dist/granular/ui/components/Header/Header.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderActions.js +21 -0
- package/dist/granular/ui/components/Header/components/HeaderActions.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderHamburger.js +31 -0
- package/dist/granular/ui/components/Header/components/HeaderHamburger.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderLogo.js +50 -0
- package/dist/granular/ui/components/Header/components/HeaderLogo.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js +38 -0
- package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderNavigation.js +27 -0
- package/dist/granular/ui/components/Header/components/HeaderNavigation.js.map +1 -0
- package/dist/granular/ui/components/Header/contexts/HeaderContext.js +49 -0
- package/dist/granular/ui/components/Header/contexts/HeaderContext.js.map +1 -0
- package/dist/granular/ui/components/LoginBox/LoginBox.js +84 -0
- package/dist/granular/ui/components/LoginBox/LoginBox.js.map +1 -0
- package/dist/granular/ui/components/Menu/Menu.js +45 -0
- package/dist/granular/ui/components/Menu/Menu.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuContent.js +94 -0
- package/dist/granular/ui/components/Menu/MenuContent.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuContext.js +21 -0
- package/dist/granular/ui/components/Menu/MenuContext.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuItem.js +93 -0
- package/dist/granular/ui/components/Menu/MenuItem.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuSeparator.js +46 -0
- package/dist/granular/ui/components/Menu/MenuSeparator.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuTrigger.js +71 -0
- package/dist/granular/ui/components/Menu/MenuTrigger.js.map +1 -0
- package/dist/granular/ui/components/Modal/Modal.js +171 -0
- package/dist/granular/ui/components/Modal/Modal.js.map +1 -0
- package/dist/granular/ui/components/MultiSelect/MultiSelect.js +193 -0
- package/dist/granular/ui/components/MultiSelect/MultiSelect.js.map +1 -0
- package/dist/granular/ui/components/Navigation/Navigation.js +141 -0
- package/dist/granular/ui/components/Navigation/Navigation.js.map +1 -0
- package/dist/granular/ui/components/PageHeader/PageHeader.js +95 -0
- package/dist/granular/ui/components/PageHeader/PageHeader.js.map +1 -0
- package/dist/granular/ui/components/Pagination/Pagination.js +156 -0
- package/dist/granular/ui/components/Pagination/Pagination.js.map +1 -0
- package/dist/granular/ui/components/Popover/Popover.js +171 -0
- package/dist/granular/ui/components/Popover/Popover.js.map +1 -0
- package/dist/granular/ui/components/Rating/Rating.js +110 -0
- package/dist/granular/ui/components/Rating/Rating.js.map +1 -0
- package/dist/granular/ui/components/SearchAndFilterPattern/SearchAndFilterPattern.js +120 -0
- package/dist/granular/ui/components/SearchAndFilterPattern/SearchAndFilterPattern.js.map +1 -0
- package/dist/granular/ui/components/SearchInput/SearchInput.js +103 -0
- package/dist/granular/ui/components/SearchInput/SearchInput.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/SideNavbar.js +143 -0
- package/dist/granular/ui/components/SideNavbar/SideNavbar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/Navbar.js +173 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/Navbar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js +87 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js +242 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarSeparator.js +66 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarSeparator.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarToggle.js +108 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarToggle.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarBackdrop.js +63 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarBackdrop.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js +113 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarRoot.js +150 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarRoot.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarToggle.js +197 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarToggle.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/Sidebar.js +108 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/Sidebar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarContent.js +71 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarContent.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarFooter.js +64 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarFooter.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarGroup.js +141 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarGroup.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarHeader.js +90 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarHeader.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlot.js +12 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlot.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlotContent.js +13 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlotContent.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/NavbarContext.js +20 -0
- package/dist/granular/ui/components/SideNavbar/contexts/NavbarContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarConfigContext.js +37 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarConfigContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarStateContext.js +20 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarStateContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarThemeContext.js +28 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarThemeContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarToggleContext.js +19 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarToggleContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SidebarContext.js +20 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SidebarContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SidebarSlotContext.js +22 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SidebarSlotContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useFocusManagement.js +43 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useFocusManagement.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useGroupState.js +59 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useGroupState.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useKeyboardShortcut.js +34 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useKeyboardShortcut.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useResize.js +58 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useResize.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useResponsiveSidebar.js +35 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useResponsiveSidebar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbar.js +21 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarContent.js +19 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarContent.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarNavigation.js +21 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarNavigation.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarConfigProvider.js +61 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarConfigProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarProvider.js +82 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js +165 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarThemeProvider.js +34 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarThemeProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SidebarSlotProvider.js +28 -0
- package/dist/granular/ui/components/SideNavbar/providers/SidebarSlotProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/utils/parseKeyboardShortcut.js +60 -0
- package/dist/granular/ui/components/SideNavbar/utils/parseKeyboardShortcut.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/utils/parseWidth.js +19 -0
- package/dist/granular/ui/components/SideNavbar/utils/parseWidth.js.map +1 -0
- package/dist/granular/ui/components/Stat/Stat.js +84 -0
- package/dist/granular/ui/components/Stat/Stat.js.map +1 -0
- package/dist/granular/ui/components/Stat/StatGroup.js +61 -0
- package/dist/granular/ui/components/Stat/StatGroup.js.map +1 -0
- package/dist/granular/ui/components/Stepper/Stepper.js +248 -0
- package/dist/granular/ui/components/Stepper/Stepper.js.map +1 -0
- package/dist/granular/ui/components/Table/Table.js +162 -0
- package/dist/granular/ui/components/Table/Table.js.map +1 -0
- package/dist/granular/ui/components/Table/TableActions/TableActions.js +67 -0
- package/dist/granular/ui/components/Table/TableActions/TableActions.js.map +1 -0
- package/dist/granular/ui/components/Table/TableActions.js +44 -0
- package/dist/granular/ui/components/Table/TableActions.js.map +1 -0
- package/dist/granular/ui/components/Table/TableBody.js +134 -0
- package/dist/granular/ui/components/Table/TableBody.js.map +1 -0
- package/dist/granular/ui/components/Table/TableCell.js +40 -0
- package/dist/granular/ui/components/Table/TableCell.js.map +1 -0
- package/dist/granular/ui/components/Table/TableContext.js +19 -0
- package/dist/granular/ui/components/Table/TableContext.js.map +1 -0
- package/dist/granular/ui/components/Table/TableEmptyState.js +62 -0
- package/dist/granular/ui/components/Table/TableEmptyState.js.map +1 -0
- package/dist/granular/ui/components/Table/TableFilters/TableFilters.js +189 -0
- package/dist/granular/ui/components/Table/TableFilters/TableFilters.js.map +1 -0
- package/dist/granular/ui/components/Table/TableFilters.js +48 -0
- package/dist/granular/ui/components/Table/TableFilters.js.map +1 -0
- package/dist/granular/ui/components/Table/TableHeader.js +45 -0
- package/dist/granular/ui/components/Table/TableHeader.js.map +1 -0
- package/dist/granular/ui/components/Table/TableHeaderCell.js +117 -0
- package/dist/granular/ui/components/Table/TableHeaderCell.js.map +1 -0
- package/dist/granular/ui/components/Table/TableHeaderRow.js +89 -0
- package/dist/granular/ui/components/Table/TableHeaderRow.js.map +1 -0
- package/dist/granular/ui/components/Table/TablePagination/TablePagination.js +216 -0
- package/dist/granular/ui/components/Table/TablePagination/TablePagination.js.map +1 -0
- package/dist/granular/ui/components/Table/TablePagination.js +56 -0
- package/dist/granular/ui/components/Table/TablePagination.js.map +1 -0
- package/dist/granular/ui/components/Table/TableProvider.js +244 -0
- package/dist/granular/ui/components/Table/TableProvider.js.map +1 -0
- package/dist/granular/ui/components/Table/TableRow.js +95 -0
- package/dist/granular/ui/components/Table/TableRow.js.map +1 -0
- package/dist/granular/ui/components/Table/useColumnResizing.js +71 -0
- package/dist/granular/ui/components/Table/useColumnResizing.js.map +1 -0
- package/dist/granular/ui/components/Table/useVirtualScrolling.js +50 -0
- package/dist/granular/ui/components/Table/useVirtualScrolling.js.map +1 -0
- package/dist/granular/ui/components/Tabs/Tabs.js +39 -0
- package/dist/granular/ui/components/Tabs/Tabs.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsContent.js +59 -0
- package/dist/granular/ui/components/Tabs/TabsContent.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsContext.js +18 -0
- package/dist/granular/ui/components/Tabs/TabsContext.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsList.js +84 -0
- package/dist/granular/ui/components/Tabs/TabsList.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsProvider.js +31 -0
- package/dist/granular/ui/components/Tabs/TabsProvider.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsTrigger.js +103 -0
- package/dist/granular/ui/components/Tabs/TabsTrigger.js.map +1 -0
- package/dist/granular/ui/components/TimePicker/TimePicker.js +216 -0
- package/dist/granular/ui/components/TimePicker/TimePicker.js.map +1 -0
- package/dist/granular/ui/components/Timeline/Timeline.js +152 -0
- package/dist/granular/ui/components/Timeline/Timeline.js.map +1 -0
- package/dist/granular/ui/components/Toast/Toast.js +159 -0
- package/dist/granular/ui/components/Toast/Toast.js.map +1 -0
- package/dist/granular/ui/components/Toast/ToastContainer.js +41 -0
- package/dist/granular/ui/components/Toast/ToastContainer.js.map +1 -0
- package/dist/granular/ui/components/Toast/useToast.js +64 -0
- package/dist/granular/ui/components/Toast/useToast.js.map +1 -0
- package/dist/granular/ui/hooks/createGenericContext.js +27 -0
- package/dist/granular/ui/hooks/createGenericContext.js.map +1 -0
- package/dist/granular/ui/hooks/focusable.js +14 -0
- package/dist/granular/ui/hooks/focusable.js.map +1 -0
- package/dist/granular/ui/hooks/useAutoFocus.js +23 -0
- package/dist/granular/ui/hooks/useAutoFocus.js.map +1 -0
- package/dist/granular/ui/hooks/useCollapsible.js +37 -0
- package/dist/granular/ui/hooks/useCollapsible.js.map +1 -0
- package/dist/granular/ui/hooks/useFocusRestore.js +20 -0
- package/dist/granular/ui/hooks/useFocusRestore.js.map +1 -0
- package/dist/granular/ui/hooks/useFocusTrap.js +31 -0
- package/dist/granular/ui/hooks/useFocusTrap.js.map +1 -0
- package/dist/granular/ui/hooks/useScrollSpy.js +23 -0
- package/dist/granular/ui/hooks/useScrollSpy.js.map +1 -0
- package/dist/granular/ui/layouts/Container/Container.js +73 -0
- package/dist/granular/ui/layouts/Container/Container.js.map +1 -0
- package/dist/granular/ui/layouts/Stack/Stack.js +79 -0
- package/dist/granular/ui/layouts/Stack/Stack.js.map +1 -0
- package/dist/granular/ui/primitives/Avatar/Avatar.js +122 -0
- package/dist/granular/ui/primitives/Avatar/Avatar.js.map +1 -0
- package/dist/granular/ui/primitives/Avatar/AvatarGroup.js +97 -0
- package/dist/granular/ui/primitives/Avatar/AvatarGroup.js.map +1 -0
- package/dist/granular/ui/primitives/Badge/Badge.js +212 -0
- package/dist/granular/ui/primitives/Badge/Badge.js.map +1 -0
- package/dist/granular/ui/primitives/Button/Button.js +288 -0
- package/dist/granular/ui/primitives/Button/Button.js.map +1 -0
- package/dist/granular/ui/primitives/Checkbox/Checkbox.js +129 -0
- package/dist/granular/ui/primitives/Checkbox/Checkbox.js.map +1 -0
- package/dist/granular/ui/primitives/Chip/Chip.js +206 -0
- package/dist/granular/ui/primitives/Chip/Chip.js.map +1 -0
- package/dist/granular/ui/primitives/Collapsible/Collapsible.js +115 -0
- package/dist/granular/ui/primitives/Collapsible/Collapsible.js.map +1 -0
- package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js +54 -0
- package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js.map +1 -0
- package/dist/granular/ui/primitives/Info/Info.js +57 -0
- package/dist/granular/ui/primitives/Info/Info.js.map +1 -0
- package/dist/granular/ui/primitives/Input/Input.js +351 -0
- package/dist/granular/ui/primitives/Input/Input.js.map +1 -0
- package/dist/granular/ui/primitives/Label/Label.js +61 -0
- package/dist/granular/ui/primitives/Label/Label.js.map +1 -0
- package/dist/granular/ui/primitives/NavLink/NavLink.js +229 -0
- package/dist/granular/ui/primitives/NavLink/NavLink.js.map +1 -0
- package/dist/granular/ui/primitives/NavLink/hooks/useNavLink.js +15 -0
- package/dist/granular/ui/primitives/NavLink/hooks/useNavLink.js.map +1 -0
- package/dist/granular/ui/primitives/Progress/Progress.js +182 -0
- package/dist/granular/ui/primitives/Progress/Progress.js.map +1 -0
- package/dist/granular/ui/primitives/Radio/Radio.js +118 -0
- package/dist/granular/ui/primitives/Radio/Radio.js.map +1 -0
- package/dist/granular/ui/primitives/Select/Select.js +210 -0
- package/dist/granular/ui/primitives/Select/Select.js.map +1 -0
- package/dist/granular/ui/primitives/Separator/Separator.js +69 -0
- package/dist/granular/ui/primitives/Separator/Separator.js.map +1 -0
- package/dist/granular/ui/primitives/Skeleton/Skeleton.js +87 -0
- package/dist/granular/ui/primitives/Skeleton/Skeleton.js.map +1 -0
- package/dist/granular/ui/primitives/Slider/Slider.js +291 -0
- package/dist/granular/ui/primitives/Slider/Slider.js.map +1 -0
- package/dist/granular/ui/primitives/Spinner/Spinner.js +95 -0
- package/dist/granular/ui/primitives/Spinner/Spinner.js.map +1 -0
- package/dist/granular/ui/primitives/Switch/Switch.js +212 -0
- package/dist/granular/ui/primitives/Switch/Switch.js.map +1 -0
- package/dist/granular/ui/primitives/Text/Text.js +118 -0
- package/dist/granular/ui/primitives/Text/Text.js.map +1 -0
- package/dist/granular/ui/primitives/Textarea/Textarea.js +129 -0
- package/dist/granular/ui/primitives/Textarea/Textarea.js.map +1 -0
- package/dist/granular/ui/primitives/Tooltip/Tooltip.js +227 -0
- package/dist/granular/ui/primitives/Tooltip/Tooltip.js.map +1 -0
- package/dist/granular/ui/providers/AppProvider.js +50 -0
- package/dist/granular/ui/providers/AppProvider.js.map +1 -0
- package/dist/granular/ui/providers/ConfigProvider.js +95 -0
- package/dist/granular/ui/providers/ConfigProvider.js.map +1 -0
- package/dist/granular/ui/providers/DialogContext.js +20 -0
- package/dist/granular/ui/providers/DialogContext.js.map +1 -0
- package/dist/granular/ui/providers/DialogProvider.js +32 -0
- package/dist/granular/ui/providers/DialogProvider.js.map +1 -0
- package/dist/granular/ui/providers/ThemeProvider.js +56 -0
- package/dist/granular/ui/providers/ThemeProvider.js.map +1 -0
- package/dist/granular/ui/providers/ToastContext.js +20 -0
- package/dist/granular/ui/providers/ToastContext.js.map +1 -0
- package/dist/granular/ui/providers/ToastProvider.js +47 -0
- package/dist/granular/ui/providers/ToastProvider.js.map +1 -0
- package/dist/granular/ui/providers/providers-bundle.js +23 -0
- package/dist/granular/ui/providers/providers-bundle.js.map +1 -0
- package/dist/granular/ui/tokens/animations.js +106 -0
- package/dist/granular/ui/tokens/animations.js.map +1 -0
- package/dist/granular/ui/tokens/borders.js +54 -0
- package/dist/granular/ui/tokens/borders.js.map +1 -0
- package/dist/granular/ui/tokens/breakpoints.js +43 -0
- package/dist/granular/ui/tokens/breakpoints.js.map +1 -0
- package/dist/granular/ui/tokens/colors/brand.js +67 -0
- package/dist/granular/ui/tokens/colors/brand.js.map +1 -0
- package/dist/granular/ui/tokens/colors/index.js +25 -0
- package/dist/granular/ui/tokens/colors/index.js.map +1 -0
- package/dist/granular/ui/tokens/colors/primitives.js +320 -0
- package/dist/granular/ui/tokens/colors/primitives.js.map +1 -0
- package/dist/granular/ui/tokens/colors/semantic.js +212 -0
- package/dist/granular/ui/tokens/colors/semantic.js.map +1 -0
- package/dist/granular/ui/tokens/colors/types.js +18 -0
- package/dist/granular/ui/tokens/colors/types.js.map +1 -0
- package/dist/granular/ui/tokens/colors/utils.js +131 -0
- package/dist/granular/ui/tokens/colors/utils.js.map +1 -0
- package/dist/granular/ui/tokens/opacity.js +59 -0
- package/dist/granular/ui/tokens/opacity.js.map +1 -0
- package/dist/granular/ui/tokens/radius.js +76 -0
- package/dist/granular/ui/tokens/radius.js.map +1 -0
- package/dist/granular/ui/tokens/shadows.js +63 -0
- package/dist/granular/ui/tokens/shadows.js.map +1 -0
- package/dist/granular/ui/tokens/sidebar.js +92 -0
- package/dist/granular/ui/tokens/sidebar.js.map +1 -0
- package/dist/granular/ui/tokens/spacing.js +143 -0
- package/dist/granular/ui/tokens/spacing.js.map +1 -0
- package/dist/granular/ui/tokens/switch.js +51 -0
- package/dist/granular/ui/tokens/switch.js.map +1 -0
- package/dist/granular/ui/tokens/typography.js +146 -0
- package/dist/granular/ui/tokens/typography.js.map +1 -0
- package/dist/granular/ui/tokens/z-index.js +79 -0
- package/dist/granular/ui/tokens/z-index.js.map +1 -0
- package/dist/granular/ui/utils/cn.js +10 -0
- package/dist/granular/ui/utils/cn.js.map +1 -0
- package/dist/granular/ui/utils/cva.js +14 -0
- package/dist/granular/ui/utils/cva.js.map +1 -0
- package/dist/granular/ui/utils/mergeRefs.js +11 -0
- package/dist/granular/ui/utils/mergeRefs.js.map +1 -0
- package/dist/granular/vite.svg +1 -0
- package/dist/index.cjs +37 -37
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1052 -1053
- package/dist/index.js.map +1 -1
- package/dist/server/index.cjs +23 -23
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.js +858 -1193
- package/dist/server/index.js.map +1 -1
- package/package.json +9 -2
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { createContext as o, useContext as e } from "react";
|
|
3
|
+
const n = o(void 0);
|
|
4
|
+
function r() {
|
|
5
|
+
const t = e(n);
|
|
6
|
+
if (t === void 0)
|
|
7
|
+
throw new Error("useTabsContext must be used within a Tabs component");
|
|
8
|
+
return t;
|
|
9
|
+
}
|
|
10
|
+
function u() {
|
|
11
|
+
return e(n);
|
|
12
|
+
}
|
|
13
|
+
export {
|
|
14
|
+
n as TabsContext,
|
|
15
|
+
r as useTabsContext,
|
|
16
|
+
u as useTabsContextOptional
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=TabsContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsContext.js","sources":["../../../../../src/ui/components/Tabs/TabsContext.tsx"],"sourcesContent":["\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useContext } from \"react\";\n\nexport interface TabsContextValue {\n value: string;\n onValueChange: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n activationMode?: \"automatic\" | \"manual\";\n}\n\nconst TabsContext = createContext<TabsContextValue | undefined>(undefined);\n\n/**\n * Hook to access Tabs context\n *\n * @throws Error if used outside of Tabs component\n */\nexport function useTabsContext(): TabsContextValue {\n const context = useContext(TabsContext);\n\n if (context === undefined) {\n throw new Error(\"useTabsContext must be used within a Tabs component\");\n }\n\n return context;\n}\n\n/**\n * Hook to access Tabs context (optional, returns undefined if not in Tabs)\n */\nexport function useTabsContextOptional(): TabsContextValue | undefined {\n return useContext(TabsContext);\n}\n\nexport { TabsContext };\n"],"names":["TabsContext","createContext","useTabsContext","context","useContext","useTabsContextOptional"],"mappings":";;AAYA,MAAMA,IAAcC,EAA4C,MAAS;AAOlE,SAASC,IAAmC;AACjD,QAAMC,IAAUC,EAAWJ,CAAW;AAEtC,MAAIG,MAAY;AACd,UAAM,IAAI,MAAM,qDAAqD;AAGvE,SAAOA;AACT;AAKO,SAASE,IAAuD;AACrE,SAAOD,EAAWJ,CAAW;AAC/B;"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var I = Object.defineProperty, z = Object.defineProperties;
|
|
3
|
+
var S = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var c = Object.getOwnPropertySymbols;
|
|
5
|
+
var h = Object.prototype.hasOwnProperty, w = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var y = (e, t, n) => t in e ? I(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n, k = (e, t) => {
|
|
7
|
+
for (var n in t || (t = {}))
|
|
8
|
+
h.call(t, n) && y(e, n, t[n]);
|
|
9
|
+
if (c)
|
|
10
|
+
for (var n of c(t))
|
|
11
|
+
w.call(t, n) && y(e, n, t[n]);
|
|
12
|
+
return e;
|
|
13
|
+
}, D = (e, t) => z(e, S(t));
|
|
14
|
+
var b = (e, t) => {
|
|
15
|
+
var n = {};
|
|
16
|
+
for (var r in e)
|
|
17
|
+
h.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
|
|
18
|
+
if (e != null && c)
|
|
19
|
+
for (var r of c(e))
|
|
20
|
+
t.indexOf(r) < 0 && w.call(e, r) && (n[r] = e[r]);
|
|
21
|
+
return n;
|
|
22
|
+
};
|
|
23
|
+
import { jsx as T } from "react/jsx-runtime";
|
|
24
|
+
import { useTabsContext as j } from "./TabsContext.js";
|
|
25
|
+
import { useRef as q, useEffect as H } from "react";
|
|
26
|
+
import { cn as u } from "../../utils/cn.js";
|
|
27
|
+
import { getSpacingClass as m } from "../../tokens/spacing.js";
|
|
28
|
+
import { getRadiusClass as K } from "../../tokens/radius.js";
|
|
29
|
+
function Q(N) {
|
|
30
|
+
var d = N, {
|
|
31
|
+
children: e,
|
|
32
|
+
className: t = "",
|
|
33
|
+
variant: n = "default",
|
|
34
|
+
orientation: r
|
|
35
|
+
} = d, A = b(d, [
|
|
36
|
+
"children",
|
|
37
|
+
"className",
|
|
38
|
+
"variant",
|
|
39
|
+
"orientation"
|
|
40
|
+
]);
|
|
41
|
+
var p;
|
|
42
|
+
const { orientation: C } = j(), f = (p = r != null ? r : C) != null ? p : "horizontal", g = q(null);
|
|
43
|
+
H(() => {
|
|
44
|
+
const a = g.current;
|
|
45
|
+
if (!a) return;
|
|
46
|
+
const x = (l) => {
|
|
47
|
+
var v;
|
|
48
|
+
const o = Array.from(
|
|
49
|
+
a.querySelectorAll(
|
|
50
|
+
'[role="tab"]:not([disabled])'
|
|
51
|
+
)
|
|
52
|
+
), i = o.findIndex(
|
|
53
|
+
(R) => R === document.activeElement
|
|
54
|
+
);
|
|
55
|
+
if (i === -1) return;
|
|
56
|
+
let s = i;
|
|
57
|
+
f === "horizontal" ? l.key === "ArrowRight" ? (l.preventDefault(), s = (i + 1) % o.length) : l.key === "ArrowLeft" && (l.preventDefault(), s = (i - 1 + o.length) % o.length) : l.key === "ArrowDown" ? (l.preventDefault(), s = (i + 1) % o.length) : l.key === "ArrowUp" && (l.preventDefault(), s = (i - 1 + o.length) % o.length), l.key === "Home" ? (l.preventDefault(), s = 0) : l.key === "End" && (l.preventDefault(), s = o.length - 1), s !== i && ((v = o[s]) == null || v.focus());
|
|
58
|
+
};
|
|
59
|
+
return a.addEventListener("keydown", x), () => a.removeEventListener("keydown", x);
|
|
60
|
+
}, [f]);
|
|
61
|
+
const E = n === "compact" && f === "vertical" ? "flex" : "inline-flex", L = f === "vertical" ? u("flex-col", m("xs", "gap")) : u("flex-row", m("xs", "gap"));
|
|
62
|
+
return /* @__PURE__ */ T(
|
|
63
|
+
"div",
|
|
64
|
+
D(k({
|
|
65
|
+
ref: g,
|
|
66
|
+
role: "tablist",
|
|
67
|
+
"aria-orientation": f,
|
|
68
|
+
className: u(
|
|
69
|
+
E,
|
|
70
|
+
L,
|
|
71
|
+
m("xs", "p"),
|
|
72
|
+
"bg-surface-muted",
|
|
73
|
+
K("md"),
|
|
74
|
+
t
|
|
75
|
+
)
|
|
76
|
+
}, A), {
|
|
77
|
+
children: e
|
|
78
|
+
})
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
Q as TabsList
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=TabsList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsList.js","sources":["../../../../../src/ui/components/Tabs/TabsList.tsx"],"sourcesContent":["\"use client\";\n\nimport { useTabsContext } from \"./TabsContext\";\nimport { useRef, useEffect, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\nimport { getRadiusClass, getSpacingClass } from \"../../tokens\";\n\nexport interface TabsListProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"orientation\"\n> {\n children: ReactNode;\n variant?: \"default\" | \"compact\";\n /**\n * Override orientation set on the `Tabs` provider. When omitted,\n * inherits from context (default \"horizontal\"). Controls keyboard\n * navigation axis (ArrowLeft/Right vs ArrowUp/Down), flex direction,\n * and `aria-orientation`.\n */\n orientation?: \"horizontal\" | \"vertical\";\n}\n\n/**\n * TabsList Component\n *\n * Container for tab triggers.\n * Manages keyboard navigation between tabs.\n * Must be used within a Tabs component.\n *\n * Orientation precedence: local `orientation` prop > Tabs context > \"horizontal\".\n */\nexport function TabsList({\n children,\n className = \"\",\n variant = \"default\",\n orientation: orientationProp,\n ...props\n}: TabsListProps) {\n const { orientation: contextOrientation } = useTabsContext();\n const orientation = orientationProp ?? contextOrientation ?? \"horizontal\";\n const listRef = useRef<HTMLDivElement>(null);\n\n // Handle keyboard navigation at list level\n useEffect(() => {\n const list = listRef.current;\n if (!list) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const triggers = Array.from(\n list.querySelectorAll<HTMLButtonElement>(\n '[role=\"tab\"]:not([disabled])',\n ),\n );\n const currentIndex = triggers.findIndex(\n (trigger) => trigger === document.activeElement,\n );\n\n if (currentIndex === -1) return;\n\n let nextIndex = currentIndex;\n\n if (orientation === \"horizontal\") {\n if (e.key === \"ArrowRight\") {\n e.preventDefault();\n nextIndex = (currentIndex + 1) % triggers.length;\n } else if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n nextIndex = (currentIndex - 1 + triggers.length) % triggers.length;\n }\n } else {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n nextIndex = (currentIndex + 1) % triggers.length;\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n nextIndex = (currentIndex - 1 + triggers.length) % triggers.length;\n }\n }\n\n if (e.key === \"Home\") {\n e.preventDefault();\n nextIndex = 0;\n } else if (e.key === \"End\") {\n e.preventDefault();\n nextIndex = triggers.length - 1;\n }\n\n if (nextIndex !== currentIndex) {\n triggers[nextIndex]?.focus();\n }\n };\n\n list.addEventListener(\"keydown\", handleKeyDown);\n return () => list.removeEventListener(\"keydown\", handleKeyDown);\n }, [orientation]);\n\n // Determine display class based on variant and orientation\n // For compact vertical, use 'flex' instead of 'inline-flex' to allow full width\n const displayClass =\n variant === \"compact\" && orientation === \"vertical\"\n ? \"flex\"\n : \"inline-flex\";\n\n const orientationClasses =\n orientation === \"vertical\"\n ? cn(\"flex-col\", getSpacingClass(\"xs\", \"gap\"))\n : cn(\"flex-row\", getSpacingClass(\"xs\", \"gap\"));\n\n return (\n <div\n ref={listRef}\n role=\"tablist\"\n aria-orientation={orientation}\n className={cn(\n displayClass,\n orientationClasses,\n getSpacingClass(\"xs\", \"p\"),\n \"bg-surface-muted\",\n getRadiusClass(\"md\"),\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n"],"names":["TabsList","_a","_b","children","className","variant","orientationProp","props","__objRest","contextOrientation","useTabsContext","orientation","listRef","useRef","useEffect","list","handleKeyDown","e","triggers","currentIndex","trigger","nextIndex","displayClass","orientationClasses","cn","getSpacingClass","jsx","__spreadProps","__spreadValues","getRadiusClass"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BO,SAASA,EAASC,GAMP;AANO,MAAAC,IAAAD,GACvB;AAAA,cAAAE;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,SAAAC,IAAU;AAAA,IACV,aAAaC;AAAA,MAJUJ,GAKpBK,IAAAC,EALoBN,GAKpB;AAAA,IAJH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;;AAGA,QAAM,EAAE,aAAaO,EAAA,IAAuBC,EAAA,GACtCC,KAAcV,IAAAK,KAAA,OAAAA,IAAmBG,MAAnB,OAAAR,IAAyC,cACvDW,IAAUC,EAAuB,IAAI;AAG3C,EAAAC,EAAU,MAAM;AACd,UAAMC,IAAOH,EAAQ;AACrB,QAAI,CAACG,EAAM;AAEX,UAAMC,IAAgB,CAACC,MAAqB;;AAC1C,YAAMC,IAAW,MAAM;AAAA,QACrBH,EAAK;AAAA,UACH;AAAA,QAAA;AAAA,MACF,GAEII,IAAeD,EAAS;AAAA,QAC5B,CAACE,MAAYA,MAAY,SAAS;AAAA,MAAA;AAGpC,UAAID,MAAiB,GAAI;AAEzB,UAAIE,IAAYF;AAEhB,MAAIR,MAAgB,eACdM,EAAE,QAAQ,gBACZA,EAAE,eAAA,GACFI,KAAaF,IAAe,KAAKD,EAAS,UACjCD,EAAE,QAAQ,gBACnBA,EAAE,eAAA,GACFI,KAAaF,IAAe,IAAID,EAAS,UAAUA,EAAS,UAG1DD,EAAE,QAAQ,eACZA,EAAE,eAAA,GACFI,KAAaF,IAAe,KAAKD,EAAS,UACjCD,EAAE,QAAQ,cACnBA,EAAE,eAAA,GACFI,KAAaF,IAAe,IAAID,EAAS,UAAUA,EAAS,SAI5DD,EAAE,QAAQ,UACZA,EAAE,eAAA,GACFI,IAAY,KACHJ,EAAE,QAAQ,UACnBA,EAAE,eAAA,GACFI,IAAYH,EAAS,SAAS,IAG5BG,MAAcF,OAChBlB,IAAAiB,EAASG,CAAS,MAAlB,QAAApB,EAAqB;AAAA,IAEzB;AAEA,WAAAc,EAAK,iBAAiB,WAAWC,CAAa,GACvC,MAAMD,EAAK,oBAAoB,WAAWC,CAAa;AAAA,EAChE,GAAG,CAACL,CAAW,CAAC;AAIhB,QAAMW,IACJjB,MAAY,aAAaM,MAAgB,aACrC,SACA,eAEAY,IACJZ,MAAgB,aACZa,EAAG,YAAYC,EAAgB,MAAM,KAAK,CAAC,IAC3CD,EAAG,YAAYC,EAAgB,MAAM,KAAK,CAAC;AAEjD,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAAC,EAAAC,EAAA;AAAA,MACC,KAAKhB;AAAA,MACL,MAAK;AAAA,MACL,oBAAkBD;AAAA,MAClB,WAAWa;AAAA,QACTF;AAAA,QACAC;AAAA,QACAE,EAAgB,MAAM,GAAG;AAAA,QACzB;AAAA,QACAI,EAAe,IAAI;AAAA,QACnBzB;AAAA,MAAA;AAAA,OAEEG,IAZL;AAAA,MAcE,UAAAJ;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as v } from "react/jsx-runtime";
|
|
3
|
+
import { useState as f, useCallback as p } from "react";
|
|
4
|
+
import { TabsContext as x } from "./TabsContext.js";
|
|
5
|
+
function j({
|
|
6
|
+
defaultValue: e,
|
|
7
|
+
value: r,
|
|
8
|
+
onValueChange: t,
|
|
9
|
+
orientation: i = "horizontal",
|
|
10
|
+
activationMode: c = "automatic",
|
|
11
|
+
children: l
|
|
12
|
+
}) {
|
|
13
|
+
const [n, u] = f(
|
|
14
|
+
e || ""
|
|
15
|
+
), o = r !== void 0, a = o ? r : n, m = p(
|
|
16
|
+
(s) => {
|
|
17
|
+
o || u(s), t == null || t(s);
|
|
18
|
+
},
|
|
19
|
+
[o, t]
|
|
20
|
+
), d = {
|
|
21
|
+
value: a,
|
|
22
|
+
onValueChange: m,
|
|
23
|
+
orientation: i,
|
|
24
|
+
activationMode: c
|
|
25
|
+
};
|
|
26
|
+
return /* @__PURE__ */ v(x.Provider, { value: d, children: l });
|
|
27
|
+
}
|
|
28
|
+
export {
|
|
29
|
+
j as TabsProvider
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=TabsProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsProvider.js","sources":["../../../../../src/ui/components/Tabs/TabsProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useCallback, type ReactNode } from \"react\";\nimport { TabsContext, type TabsContextValue } from \"./TabsContext\";\n\nexport interface TabsProviderProps {\n defaultValue?: string;\n value?: string;\n onValueChange?: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n activationMode?: \"automatic\" | \"manual\";\n children: ReactNode;\n}\n\n/**\n * TabsProvider Component\n *\n * Provides Tabs context to children.\n * Manages active tab state and handles controlled/uncontrolled modes.\n */\nexport function TabsProvider({\n defaultValue,\n value: controlledValue,\n onValueChange,\n orientation = \"horizontal\",\n activationMode = \"automatic\",\n children,\n}: TabsProviderProps) {\n const [uncontrolledValue, setUncontrolledValue] = useState<string>(\n defaultValue || \"\",\n );\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const handleValueChange = useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, onValueChange],\n );\n\n const contextValue: TabsContextValue = {\n value,\n onValueChange: handleValueChange,\n orientation,\n activationMode,\n };\n\n return (\n <TabsContext.Provider value={contextValue}>{children}</TabsContext.Provider>\n );\n}\n"],"names":["TabsProvider","defaultValue","controlledValue","onValueChange","orientation","activationMode","children","uncontrolledValue","setUncontrolledValue","useState","isControlled","value","handleValueChange","useCallback","newValue","contextValue","TabsContext"],"mappings":";;;;AAoBO,SAASA,EAAa;AAAA,EAC3B,cAAAC;AAAA,EACA,OAAOC;AAAA,EACP,eAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,gBAAAC,IAAiB;AAAA,EACjB,UAAAC;AACF,GAAsB;AACpB,QAAM,CAACC,GAAmBC,CAAoB,IAAIC;AAAA,IAChDR,KAAgB;AAAA,EAAA,GAGZS,IAAeR,MAAoB,QACnCS,IAAQD,IAAeR,IAAkBK,GAEzCK,IAAoBC;AAAA,IACxB,CAACC,MAAqB;AACpB,MAAKJ,KACHF,EAAqBM,CAAQ,GAE/BX,KAAA,QAAAA,EAAgBW;AAAA,IAClB;AAAA,IACA,CAACJ,GAAcP,CAAa;AAAA,EAAA,GAGxBY,IAAiC;AAAA,IACrC,OAAAJ;AAAA,IACA,eAAeC;AAAA,IACf,aAAAR;AAAA,IACA,gBAAAC;AAAA,EAAA;AAGF,2BACGW,EAAY,UAAZ,EAAqB,OAAOD,GAAe,UAAAT,GAAS;AAEzD;"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var S = Object.defineProperty, j = Object.defineProperties;
|
|
3
|
+
var C = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var s = Object.getOwnPropertySymbols;
|
|
5
|
+
var h = Object.prototype.hasOwnProperty, x = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var p = (t, o, r) => o in t ? S(t, o, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[o] = r, b = (t, o) => {
|
|
7
|
+
for (var r in o || (o = {}))
|
|
8
|
+
h.call(o, r) && p(t, r, o[r]);
|
|
9
|
+
if (s)
|
|
10
|
+
for (var r of s(o))
|
|
11
|
+
x.call(o, r) && p(t, r, o[r]);
|
|
12
|
+
return t;
|
|
13
|
+
}, k = (t, o) => j(t, C(o));
|
|
14
|
+
var A = (t, o) => {
|
|
15
|
+
var r = {};
|
|
16
|
+
for (var n in t)
|
|
17
|
+
h.call(t, n) && o.indexOf(n) < 0 && (r[n] = t[n]);
|
|
18
|
+
if (t != null && s)
|
|
19
|
+
for (var n of s(t))
|
|
20
|
+
o.indexOf(n) < 0 && x.call(t, n) && (r[n] = t[n]);
|
|
21
|
+
return r;
|
|
22
|
+
};
|
|
23
|
+
import { jsx as E } from "react/jsx-runtime";
|
|
24
|
+
import { useTabsContext as R } from "./TabsContext.js";
|
|
25
|
+
import { cn as g } from "../../utils/cn.js";
|
|
26
|
+
import { getRadiusClass as V } from "../../tokens/radius.js";
|
|
27
|
+
import { getTypographyWeight as $, getTypographySize as z } from "../../tokens/typography.js";
|
|
28
|
+
import { getSpacingClass as T } from "../../tokens/spacing.js";
|
|
29
|
+
function B(H) {
|
|
30
|
+
var l = H, {
|
|
31
|
+
value: t,
|
|
32
|
+
children: o,
|
|
33
|
+
disabled: r = !1,
|
|
34
|
+
className: n = "",
|
|
35
|
+
onClick: c,
|
|
36
|
+
onKeyDown: f
|
|
37
|
+
} = l, a = A(l, [
|
|
38
|
+
"value",
|
|
39
|
+
"children",
|
|
40
|
+
"disabled",
|
|
41
|
+
"className",
|
|
42
|
+
"onClick",
|
|
43
|
+
"onKeyDown"
|
|
44
|
+
]);
|
|
45
|
+
const {
|
|
46
|
+
value: w,
|
|
47
|
+
onValueChange: u,
|
|
48
|
+
orientation: I,
|
|
49
|
+
activationMode: m
|
|
50
|
+
} = R(), i = w === t, d = (e) => {
|
|
51
|
+
r || ((m === "automatic" || i) && u(t), c == null || c(e));
|
|
52
|
+
}, v = (e) => {
|
|
53
|
+
var y;
|
|
54
|
+
m === "automatic" && !r && !i && u(t), (y = a.onFocus) == null || y.call(a, e);
|
|
55
|
+
}, F = (e) => {
|
|
56
|
+
if (!r && !(e.key === "ArrowRight" || e.key === "ArrowLeft" || e.key === "ArrowDown" || e.key === "ArrowUp" || e.key === "Home" || e.key === "End")) {
|
|
57
|
+
if (m === "manual" && (e.key === "Enter" || e.key === " ")) {
|
|
58
|
+
e.preventDefault(), u(t);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
f == null || f(e);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
return /* @__PURE__ */ E(
|
|
65
|
+
"button",
|
|
66
|
+
k(b({
|
|
67
|
+
type: "button",
|
|
68
|
+
role: "tab",
|
|
69
|
+
"aria-selected": i,
|
|
70
|
+
"aria-controls": `tabpanel-${t}`,
|
|
71
|
+
id: `tab-${t}`,
|
|
72
|
+
tabIndex: r ? -1 : i ? 0 : -1,
|
|
73
|
+
disabled: r,
|
|
74
|
+
onClick: d,
|
|
75
|
+
onFocus: v,
|
|
76
|
+
onKeyDown: F,
|
|
77
|
+
className: g(
|
|
78
|
+
"inline-flex",
|
|
79
|
+
"items-center",
|
|
80
|
+
"justify-center",
|
|
81
|
+
T("sm", "px"),
|
|
82
|
+
T("xs", "py"),
|
|
83
|
+
z("bodySmall"),
|
|
84
|
+
$("label"),
|
|
85
|
+
"transition-colors",
|
|
86
|
+
"focus:outline-none",
|
|
87
|
+
"focus:ring-2",
|
|
88
|
+
"focus:ring-line-focus",
|
|
89
|
+
"focus:ring-offset-2",
|
|
90
|
+
V("sm"),
|
|
91
|
+
i ? g("bg-surface-brand-strong", "text-fg-inverse") : g("text-fg-secondary", "hover:bg-surface-active"),
|
|
92
|
+
r ? "opacity-50 cursor-not-allowed" : "cursor-pointer",
|
|
93
|
+
n
|
|
94
|
+
)
|
|
95
|
+
}, a), {
|
|
96
|
+
children: o
|
|
97
|
+
})
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
export {
|
|
101
|
+
B as TabsTrigger
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=TabsTrigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsTrigger.js","sources":["../../../../../src/ui/components/Tabs/TabsTrigger.tsx"],"sourcesContent":["\"use client\";\n\nimport { useTabsContext } from \"./TabsContext\";\nimport type { HTMLAttributes, ReactNode, KeyboardEvent } from \"react\";\nimport {\n getRadiusClass,\n getSpacingClass,\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens\";\nimport { cn } from \"../../utils\";\n\nexport interface TabsTriggerProps extends HTMLAttributes<HTMLButtonElement> {\n value: string;\n children: ReactNode;\n disabled?: boolean;\n}\n\n/**\n * TabsTrigger Component\n *\n * Individual tab trigger button.\n * Must be used within a TabsList component.\n */\nexport function TabsTrigger({\n value,\n children,\n disabled = false,\n className = \"\",\n onClick,\n onKeyDown,\n ...props\n}: TabsTriggerProps) {\n const {\n value: activeValue,\n onValueChange,\n orientation: _orientation,\n activationMode,\n } = useTabsContext();\n\n const isActive = activeValue === value;\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n if (activationMode === \"automatic\" || isActive) {\n onValueChange(value);\n }\n onClick?.(e);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLButtonElement>) => {\n // In automatic mode, activate tab on focus\n if (activationMode === \"automatic\" && !disabled && !isActive) {\n onValueChange(value);\n }\n props.onFocus?.(e);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n\n // Let parent handle arrow keys, Home, End\n if (\n e.key === \"ArrowRight\" ||\n e.key === \"ArrowLeft\" ||\n e.key === \"ArrowDown\" ||\n e.key === \"ArrowUp\" ||\n e.key === \"Home\" ||\n e.key === \"End\"\n ) {\n // These are handled by TabsList\n return;\n }\n\n // Handle Enter/Space for manual activation\n if (activationMode === \"manual\" && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n onValueChange(value);\n return;\n }\n\n onKeyDown?.(e);\n };\n\n return (\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`tabpanel-${value}`}\n id={`tab-${value}`}\n tabIndex={disabled ? -1 : isActive ? 0 : -1}\n disabled={disabled}\n onClick={handleClick}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n className={cn(\n \"inline-flex\",\n \"items-center\",\n \"justify-center\",\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-line-focus\",\n \"focus:ring-offset-2\",\n getRadiusClass(\"sm\"),\n isActive\n ? cn(\"bg-surface-brand-strong\", \"text-fg-inverse\")\n : cn(\"text-fg-secondary\", \"hover:bg-surface-active\"),\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n className,\n )}\n {...props}\n >\n {children}\n </button>\n );\n}\n"],"names":["TabsTrigger","_a","_b","value","children","disabled","className","onClick","onKeyDown","props","__objRest","activeValue","onValueChange","_orientation","activationMode","useTabsContext","isActive","handleClick","handleFocus","handleKeyDown","jsx","__spreadProps","__spreadValues","cn","getSpacingClass","getTypographySize","getTypographyWeight","getRadiusClass"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBO,SAASA,EAAYC,GAQP;AARO,MAAAC,IAAAD,GAC1B;AAAA,WAAAE;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,WAAAC,IAAY;AAAA,IACZ,SAAAC;AAAA,IACA,WAAAC;AAAA,MAN0BN,GAOvBO,IAAAC,EAPuBR,GAOvB;AAAA,IANH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM;AAAA,IACJ,OAAOS;AAAA,IACP,eAAAC;AAAA,IACA,aAAaC;AAAA,IACb,gBAAAC;AAAA,EAAA,IACEC,EAAA,GAEEC,IAAWL,MAAgBR,GAE3Bc,IAAc,CAAC,MAA2C;AAC9D,IAAIZ,OACAS,MAAmB,eAAeE,MACpCJ,EAAcT,CAAK,GAErBI,KAAA,QAAAA,EAAU;AAAA,EACZ,GAEMW,IAAc,CAAC,MAA2C;;AAE9D,IAAIJ,MAAmB,eAAe,CAACT,KAAY,CAACW,KAClDJ,EAAcT,CAAK,IAErBF,IAAAQ,EAAM,YAAN,QAAAR,EAAA,KAAAQ,GAAgB;AAAA,EAClB,GAEMU,IAAgB,CAAC,MAAwC;AAC7D,QAAI,CAAAd,KAIF,IAAE,QAAQ,gBACV,EAAE,QAAQ,eACV,EAAE,QAAQ,eACV,EAAE,QAAQ,aACV,EAAE,QAAQ,UACV,EAAE,QAAQ,QAOZ;AAAA,UAAIS,MAAmB,aAAa,EAAE,QAAQ,WAAW,EAAE,QAAQ,MAAM;AACvE,UAAE,eAAA,GACFF,EAAcT,CAAK;AACnB;AAAA,MACF;AAEA,MAAAK,KAAA,QAAAA,EAAY;AAAA;AAAA,EACd;AAEA,SACE,gBAAAY;AAAA,IAAC;AAAA,IAAAC,EAAAC,EAAA;AAAA,MACC,MAAK;AAAA,MACL,MAAK;AAAA,MACL,iBAAeN;AAAA,MACf,iBAAe,YAAYb,CAAK;AAAA,MAChC,IAAI,OAAOA,CAAK;AAAA,MAChB,UAAUE,IAAW,KAAKW,IAAW,IAAI;AAAA,MACzC,UAAAX;AAAA,MACA,SAASY;AAAA,MACT,SAASC;AAAA,MACT,WAAWC;AAAA,MACX,WAAWI;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACAC,EAAgB,MAAM,IAAI;AAAA,QAC1BA,EAAgB,MAAM,IAAI;AAAA,QAC1BC,EAAkB,WAAW;AAAA,QAC7BC,EAAoB,OAAO;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAC,EAAe,IAAI;AAAA,QACnBX,IACIO,EAAG,2BAA2B,iBAAiB,IAC/CA,EAAG,qBAAqB,yBAAyB;AAAA,QACrDlB,IAAW,kCAAkC;AAAA,QAC7CC;AAAA,MAAA;AAAA,OAEEG,IA/BL;AAAA,MAiCE,UAAAL;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as s, jsxs as v } from "react/jsx-runtime";
|
|
3
|
+
import { useState as x, useCallback as E, useEffect as O } from "react";
|
|
4
|
+
import { Clock as U } from "lucide-react";
|
|
5
|
+
import q from "../../primitives/Input/Input.js";
|
|
6
|
+
import F from "../Popover/Popover.js";
|
|
7
|
+
import { Button as o } from "../../primitives/Button/Button.js";
|
|
8
|
+
import { getSpacingClass as u } from "../../tokens/spacing.js";
|
|
9
|
+
function X({
|
|
10
|
+
value: A,
|
|
11
|
+
defaultValue: H,
|
|
12
|
+
format: r = "24h",
|
|
13
|
+
onChange: c,
|
|
14
|
+
disabled: l = !1,
|
|
15
|
+
label: I,
|
|
16
|
+
error: b = !1,
|
|
17
|
+
helperText: z,
|
|
18
|
+
className: y = ""
|
|
19
|
+
}) {
|
|
20
|
+
const [T, P] = x(H || ""), [i, S] = x(12), [m, N] = x(0), [a, $] = x("AM"), d = A !== void 0, h = d ? A : T, k = E(
|
|
21
|
+
(e) => {
|
|
22
|
+
if (!e) return { hours: 12, minutes: 0, amPm: "AM" };
|
|
23
|
+
if (r === "24h") {
|
|
24
|
+
const [t, n] = e.split(":").map(Number);
|
|
25
|
+
return { hours: t || 12, minutes: n || 0, amPm: "AM" };
|
|
26
|
+
} else {
|
|
27
|
+
const t = e.match(/(\d+):(\d+)\s*(AM|PM)/i);
|
|
28
|
+
return t ? {
|
|
29
|
+
hours: parseInt(t[1]),
|
|
30
|
+
minutes: parseInt(t[2]),
|
|
31
|
+
amPm: t[3].toUpperCase()
|
|
32
|
+
} : { hours: 12, minutes: 0, amPm: "AM" };
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
[r]
|
|
36
|
+
), p = (e, t, n) => {
|
|
37
|
+
if (r === "24h")
|
|
38
|
+
return `${String(e).padStart(2, "0")}:${String(t).padStart(2, "0")}`;
|
|
39
|
+
{
|
|
40
|
+
const M = n === "PM" && e !== 12 ? e + 12 : n === "AM" && e === 12 ? 0 : e;
|
|
41
|
+
return `${String(M === 0 ? 12 : M > 12 ? M - 12 : M).padStart(2, "0")}:${String(t).padStart(2, "0")} ${n || "AM"}`;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
O(() => {
|
|
45
|
+
if (h) {
|
|
46
|
+
const e = k(h);
|
|
47
|
+
S(e.hours), N(e.minutes), $(e.amPm);
|
|
48
|
+
}
|
|
49
|
+
}, [h, k]);
|
|
50
|
+
const f = (e) => {
|
|
51
|
+
const t = r === "24h" ? Math.max(0, Math.min(23, e)) : Math.max(1, Math.min(12, e));
|
|
52
|
+
S(t);
|
|
53
|
+
const n = p(
|
|
54
|
+
t,
|
|
55
|
+
m,
|
|
56
|
+
r === "12h" ? a : void 0
|
|
57
|
+
);
|
|
58
|
+
d || P(n), c == null || c(n);
|
|
59
|
+
}, w = (e) => {
|
|
60
|
+
const t = Math.max(0, Math.min(59, e));
|
|
61
|
+
N(t);
|
|
62
|
+
const n = p(
|
|
63
|
+
i,
|
|
64
|
+
t,
|
|
65
|
+
r === "12h" ? a : void 0
|
|
66
|
+
);
|
|
67
|
+
d || P(n), c == null || c(n);
|
|
68
|
+
}, g = () => {
|
|
69
|
+
const e = a === "AM" ? "PM" : "AM";
|
|
70
|
+
$(e);
|
|
71
|
+
const t = p(i, m, e);
|
|
72
|
+
d || P(t), c == null || c(t);
|
|
73
|
+
}, V = () => {
|
|
74
|
+
if (r === "24h")
|
|
75
|
+
f((i + 1) % 24);
|
|
76
|
+
else {
|
|
77
|
+
const e = i === 12 ? 1 : i + 1;
|
|
78
|
+
f(e);
|
|
79
|
+
}
|
|
80
|
+
}, j = () => {
|
|
81
|
+
if (r === "24h")
|
|
82
|
+
f(i === 0 ? 23 : i - 1);
|
|
83
|
+
else {
|
|
84
|
+
const e = i === 1 ? 12 : i - 1;
|
|
85
|
+
f(e);
|
|
86
|
+
}
|
|
87
|
+
}, B = () => {
|
|
88
|
+
w((m + 1) % 60);
|
|
89
|
+
}, D = () => {
|
|
90
|
+
w(m === 0 ? 59 : m - 1);
|
|
91
|
+
}, C = /* @__PURE__ */ s("div", { className: `${u("base", "p")} min-w-48`, children: /* @__PURE__ */ v(
|
|
92
|
+
"div",
|
|
93
|
+
{
|
|
94
|
+
className: `flex items-center justify-center ${u("base", "gap")}`,
|
|
95
|
+
children: [
|
|
96
|
+
/* @__PURE__ */ v(
|
|
97
|
+
"div",
|
|
98
|
+
{
|
|
99
|
+
className: `flex flex-col items-center ${u("sm", "gap")}`,
|
|
100
|
+
children: [
|
|
101
|
+
/* @__PURE__ */ s(
|
|
102
|
+
o,
|
|
103
|
+
{
|
|
104
|
+
variant: "ghost",
|
|
105
|
+
size: "sm",
|
|
106
|
+
onClick: V,
|
|
107
|
+
disabled: l,
|
|
108
|
+
"aria-label": "Increment hours",
|
|
109
|
+
children: "↑"
|
|
110
|
+
}
|
|
111
|
+
),
|
|
112
|
+
/* @__PURE__ */ s("div", { className: "text-2xl font-mono font-semibold w-12 text-center", children: String(i).padStart(2, "0") }),
|
|
113
|
+
/* @__PURE__ */ s(
|
|
114
|
+
o,
|
|
115
|
+
{
|
|
116
|
+
variant: "ghost",
|
|
117
|
+
size: "sm",
|
|
118
|
+
onClick: j,
|
|
119
|
+
disabled: l,
|
|
120
|
+
"aria-label": "Decrement hours",
|
|
121
|
+
children: "↓"
|
|
122
|
+
}
|
|
123
|
+
)
|
|
124
|
+
]
|
|
125
|
+
}
|
|
126
|
+
),
|
|
127
|
+
/* @__PURE__ */ s("div", { className: "text-2xl font-semibold", children: ":" }),
|
|
128
|
+
/* @__PURE__ */ v(
|
|
129
|
+
"div",
|
|
130
|
+
{
|
|
131
|
+
className: `flex flex-col items-center ${u("sm", "gap")}`,
|
|
132
|
+
children: [
|
|
133
|
+
/* @__PURE__ */ s(
|
|
134
|
+
o,
|
|
135
|
+
{
|
|
136
|
+
variant: "ghost",
|
|
137
|
+
size: "sm",
|
|
138
|
+
onClick: B,
|
|
139
|
+
disabled: l,
|
|
140
|
+
"aria-label": "Increment minutes",
|
|
141
|
+
children: "↑"
|
|
142
|
+
}
|
|
143
|
+
),
|
|
144
|
+
/* @__PURE__ */ s("div", { className: "text-2xl font-mono font-semibold w-12 text-center", children: String(m).padStart(2, "0") }),
|
|
145
|
+
/* @__PURE__ */ s(
|
|
146
|
+
o,
|
|
147
|
+
{
|
|
148
|
+
variant: "ghost",
|
|
149
|
+
size: "sm",
|
|
150
|
+
onClick: D,
|
|
151
|
+
disabled: l,
|
|
152
|
+
"aria-label": "Decrement minutes",
|
|
153
|
+
children: "↓"
|
|
154
|
+
}
|
|
155
|
+
)
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
),
|
|
159
|
+
r === "12h" && /* @__PURE__ */ v(
|
|
160
|
+
"div",
|
|
161
|
+
{
|
|
162
|
+
className: `flex flex-col ${u("sm", "gap")} ${u("sm", "ml")}`,
|
|
163
|
+
children: [
|
|
164
|
+
/* @__PURE__ */ s(
|
|
165
|
+
o,
|
|
166
|
+
{
|
|
167
|
+
variant: a === "AM" ? "primary" : "outline",
|
|
168
|
+
size: "sm",
|
|
169
|
+
onClick: () => g(),
|
|
170
|
+
disabled: l,
|
|
171
|
+
children: "AM"
|
|
172
|
+
}
|
|
173
|
+
),
|
|
174
|
+
/* @__PURE__ */ s(
|
|
175
|
+
o,
|
|
176
|
+
{
|
|
177
|
+
variant: a === "PM" ? "primary" : "outline",
|
|
178
|
+
size: "sm",
|
|
179
|
+
onClick: () => g(),
|
|
180
|
+
disabled: l,
|
|
181
|
+
children: "PM"
|
|
182
|
+
}
|
|
183
|
+
)
|
|
184
|
+
]
|
|
185
|
+
}
|
|
186
|
+
)
|
|
187
|
+
]
|
|
188
|
+
}
|
|
189
|
+
) });
|
|
190
|
+
return /* @__PURE__ */ s("div", { className: y, children: /* @__PURE__ */ s(
|
|
191
|
+
F,
|
|
192
|
+
{
|
|
193
|
+
trigger: /* @__PURE__ */ s(
|
|
194
|
+
q,
|
|
195
|
+
{
|
|
196
|
+
label: I,
|
|
197
|
+
value: h || p(i, m, r === "12h" ? a : void 0),
|
|
198
|
+
readOnly: !0,
|
|
199
|
+
disabled: l,
|
|
200
|
+
error: b,
|
|
201
|
+
helperText: z,
|
|
202
|
+
leftIcon: /* @__PURE__ */ s(U, { className: "h-4 w-4" }),
|
|
203
|
+
className: "cursor-pointer"
|
|
204
|
+
}
|
|
205
|
+
),
|
|
206
|
+
placement: "bottom-start",
|
|
207
|
+
showCloseButton: !0,
|
|
208
|
+
title: "Select Time",
|
|
209
|
+
children: C
|
|
210
|
+
}
|
|
211
|
+
) });
|
|
212
|
+
}
|
|
213
|
+
export {
|
|
214
|
+
X as default
|
|
215
|
+
};
|
|
216
|
+
//# sourceMappingURL=TimePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimePicker.js","sources":["../../../../../src/ui/components/TimePicker/TimePicker.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useEffect, useCallback } from \"react\";\nimport { Clock } from \"lucide-react\";\nimport Input from \"../../primitives/Input/Input\";\nimport Popover from \"../Popover/Popover\";\nimport Button from \"../../primitives/Button/Button\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport type TimeFormat = \"12h\" | \"24h\";\n\nexport interface TimePickerProps {\n value?: string; // Format: \"HH:mm\" for 24h or \"hh:mm AM/PM\" for 12h\n defaultValue?: string;\n format?: TimeFormat;\n onChange?: (value: string) => void;\n disabled?: boolean;\n label?: string;\n error?: boolean;\n helperText?: string;\n className?: string;\n}\n\n/**\n * TimePicker Component\n *\n * A time picker component for selecting time values.\n * Supports 12h and 24h formats.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <TimePicker\n * value=\"14:30\"\n * format=\"24h\"\n * onChange={(value) => console.log(value)}\n * />\n * ```\n */\nexport default function TimePicker({\n value: controlledValue,\n defaultValue,\n format = \"24h\",\n onChange,\n disabled = false,\n label,\n error = false,\n helperText,\n className = \"\",\n}: TimePickerProps) {\n const [internalValue, setInternalValue] = useState(defaultValue || \"\");\n const [hours, setHours] = useState(12);\n const [minutes, setMinutes] = useState(0);\n const [amPm, setAmPm] = useState<\"AM\" | \"PM\">(\"AM\");\n\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n\n // Parse time value\n const parseTime = useCallback(\n (timeStr: string) => {\n if (!timeStr) return { hours: 12, minutes: 0, amPm: \"AM\" as const };\n\n if (format === \"24h\") {\n const [h, m] = timeStr.split(\":\").map(Number);\n return { hours: h || 12, minutes: m || 0, amPm: \"AM\" as const };\n } else {\n const match = timeStr.match(/(\\d+):(\\d+)\\s*(AM|PM)/i);\n if (match) {\n return {\n hours: parseInt(match[1]),\n minutes: parseInt(match[2]),\n amPm: match[3].toUpperCase() as \"AM\" | \"PM\",\n };\n }\n return { hours: 12, minutes: 0, amPm: \"AM\" as const };\n }\n },\n [format],\n );\n\n // Format time value\n const formatTime = (h: number, m: number, ap?: \"AM\" | \"PM\"): string => {\n if (format === \"24h\") {\n return `${String(h).padStart(2, \"0\")}:${String(m).padStart(2, \"0\")}`;\n } else {\n const displayHours =\n ap === \"PM\" && h !== 12 ? h + 12 : ap === \"AM\" && h === 12 ? 0 : h;\n return `${String(displayHours === 0 ? 12 : displayHours > 12 ? displayHours - 12 : displayHours).padStart(2, \"0\")}:${String(m).padStart(2, \"0\")} ${ap || \"AM\"}`;\n }\n };\n\n // Initialize from value\n useEffect(() => {\n if (currentValue) {\n const parsed = parseTime(currentValue);\n setHours(parsed.hours);\n setMinutes(parsed.minutes);\n setAmPm(parsed.amPm);\n }\n }, [currentValue, parseTime]);\n\n const handleHoursChange = (newHours: number) => {\n const validHours =\n format === \"24h\"\n ? Math.max(0, Math.min(23, newHours))\n : Math.max(1, Math.min(12, newHours));\n\n setHours(validHours);\n const newValue = formatTime(\n validHours,\n minutes,\n format === \"12h\" ? amPm : undefined,\n );\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n const handleMinutesChange = (newMinutes: number) => {\n const validMinutes = Math.max(0, Math.min(59, newMinutes));\n setMinutes(validMinutes);\n const newValue = formatTime(\n hours,\n validMinutes,\n format === \"12h\" ? amPm : undefined,\n );\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n const handleAmPmToggle = () => {\n const newAmPm = amPm === \"AM\" ? \"PM\" : \"AM\";\n setAmPm(newAmPm);\n const newValue = formatTime(hours, minutes, newAmPm);\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n const incrementHours = () => {\n if (format === \"24h\") {\n handleHoursChange((hours + 1) % 24);\n } else {\n const newHours = hours === 12 ? 1 : hours + 1;\n handleHoursChange(newHours);\n }\n };\n\n const decrementHours = () => {\n if (format === \"24h\") {\n handleHoursChange(hours === 0 ? 23 : hours - 1);\n } else {\n const newHours = hours === 1 ? 12 : hours - 1;\n handleHoursChange(newHours);\n }\n };\n\n const incrementMinutes = () => {\n handleMinutesChange((minutes + 1) % 60);\n };\n\n const decrementMinutes = () => {\n handleMinutesChange(minutes === 0 ? 59 : minutes - 1);\n };\n\n const timePickerContent = (\n <div className={`${getSpacingClass(\"base\", \"p\")} min-w-48`}>\n <div\n className={`flex items-center justify-center ${getSpacingClass(\"base\", \"gap\")}`}\n >\n {/* Hours */}\n <div\n className={`flex flex-col items-center ${getSpacingClass(\"sm\", \"gap\")}`}\n >\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={incrementHours}\n disabled={disabled}\n aria-label=\"Increment hours\"\n >\n ↑\n </Button>\n <div className=\"text-2xl font-mono font-semibold w-12 text-center\">\n {String(hours).padStart(2, \"0\")}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={decrementHours}\n disabled={disabled}\n aria-label=\"Decrement hours\"\n >\n ↓\n </Button>\n </div>\n\n <div className=\"text-2xl font-semibold\">:</div>\n\n {/* Minutes */}\n <div\n className={`flex flex-col items-center ${getSpacingClass(\"sm\", \"gap\")}`}\n >\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={incrementMinutes}\n disabled={disabled}\n aria-label=\"Increment minutes\"\n >\n ↑\n </Button>\n <div className=\"text-2xl font-mono font-semibold w-12 text-center\">\n {String(minutes).padStart(2, \"0\")}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={decrementMinutes}\n disabled={disabled}\n aria-label=\"Decrement minutes\"\n >\n ↓\n </Button>\n </div>\n\n {/* AM/PM for 12h format */}\n {format === \"12h\" && (\n <div\n className={`flex flex-col ${getSpacingClass(\"sm\", \"gap\")} ${getSpacingClass(\"sm\", \"ml\")}`}\n >\n <Button\n variant={amPm === \"AM\" ? \"primary\" : \"outline\"}\n size=\"sm\"\n onClick={() => handleAmPmToggle()}\n disabled={disabled}\n >\n AM\n </Button>\n <Button\n variant={amPm === \"PM\" ? \"primary\" : \"outline\"}\n size=\"sm\"\n onClick={() => handleAmPmToggle()}\n disabled={disabled}\n >\n PM\n </Button>\n </div>\n )}\n </div>\n </div>\n );\n\n return (\n <div className={className}>\n <Popover\n trigger={\n <Input\n label={label}\n value={\n currentValue ||\n formatTime(hours, minutes, format === \"12h\" ? amPm : undefined)\n }\n readOnly\n disabled={disabled}\n error={error}\n helperText={helperText}\n leftIcon={<Clock className=\"h-4 w-4\" />}\n className=\"cursor-pointer\"\n />\n }\n placement=\"bottom-start\"\n showCloseButton\n title=\"Select Time\"\n >\n {timePickerContent}\n </Popover>\n </div>\n );\n}\n"],"names":["TimePicker","controlledValue","defaultValue","format","onChange","disabled","label","error","helperText","className","internalValue","setInternalValue","useState","hours","setHours","minutes","setMinutes","amPm","setAmPm","isControlled","currentValue","parseTime","useCallback","timeStr","h","m","match","formatTime","ap","displayHours","useEffect","parsed","handleHoursChange","newHours","validHours","newValue","handleMinutesChange","newMinutes","validMinutes","handleAmPmToggle","newAmPm","incrementHours","decrementHours","incrementMinutes","decrementMinutes","timePickerContent","getSpacingClass","jsxs","jsx","Button","Popover","Input","Clock"],"mappings":"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"}
|