@fabio.caffarello/react-design-system 3.8.0 → 3.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/granular/index.js +447 -0
- package/dist/granular/index.js.map +1 -0
- package/dist/granular/ui/components/Accordion/Accordion.js +105 -0
- package/dist/granular/ui/components/Accordion/Accordion.js.map +1 -0
- package/dist/granular/ui/components/Autocomplete/Autocomplete.js +133 -0
- package/dist/granular/ui/components/Autocomplete/Autocomplete.js.map +1 -0
- package/dist/granular/ui/components/Autocomplete/AutocompleteList.js +119 -0
- package/dist/granular/ui/components/Autocomplete/AutocompleteList.js.map +1 -0
- package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js +42 -0
- package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js.map +1 -0
- package/dist/granular/ui/components/Breadcrumb/Breadcrumb.js +100 -0
- package/dist/granular/ui/components/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/granular/ui/components/Card/Card.js +113 -0
- package/dist/granular/ui/components/Card/Card.js.map +1 -0
- package/dist/granular/ui/components/Card/CardActions.js +51 -0
- package/dist/granular/ui/components/Card/CardActions.js.map +1 -0
- package/dist/granular/ui/components/Card/CardBody.js +32 -0
- package/dist/granular/ui/components/Card/CardBody.js.map +1 -0
- package/dist/granular/ui/components/Card/CardHeader.js +47 -0
- package/dist/granular/ui/components/Card/CardHeader.js.map +1 -0
- package/dist/granular/ui/components/Card/CardSubtitle.js +38 -0
- package/dist/granular/ui/components/Card/CardSubtitle.js.map +1 -0
- package/dist/granular/ui/components/Card/CardTitle.js +61 -0
- package/dist/granular/ui/components/Card/CardTitle.js.map +1 -0
- package/dist/granular/ui/components/ColorPicker/ColorPicker.js +250 -0
- package/dist/granular/ui/components/ColorPicker/ColorPicker.js.map +1 -0
- package/dist/granular/ui/components/CommandPalette/CommandPalette.js +274 -0
- package/dist/granular/ui/components/CommandPalette/CommandPalette.js.map +1 -0
- package/dist/granular/ui/components/DashboardLayout/DashboardLayout.js +37 -0
- package/dist/granular/ui/components/DashboardLayout/DashboardLayout.js.map +1 -0
- package/dist/granular/ui/components/DataGrid/DataGrid.js +155 -0
- package/dist/granular/ui/components/DataGrid/DataGrid.js.map +1 -0
- package/dist/granular/ui/components/DataTablePattern/DataTablePattern.js +113 -0
- package/dist/granular/ui/components/DataTablePattern/DataTablePattern.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePicker.js +126 -0
- package/dist/granular/ui/components/DatePicker/DatePicker.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js +294 -0
- package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePickerContext.js +16 -0
- package/dist/granular/ui/components/DatePicker/DatePickerContext.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePickerInput.js +119 -0
- package/dist/granular/ui/components/DatePicker/DatePickerInput.js.map +1 -0
- package/dist/granular/ui/components/DatePicker/DatePickerProvider.js +47 -0
- package/dist/granular/ui/components/DatePicker/DatePickerProvider.js.map +1 -0
- package/dist/granular/ui/components/Dialog/AlertDialog.js +48 -0
- package/dist/granular/ui/components/Dialog/AlertDialog.js.map +1 -0
- package/dist/granular/ui/components/Dialog/Dialog.js +36 -0
- package/dist/granular/ui/components/Dialog/Dialog.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogClose.js +34 -0
- package/dist/granular/ui/components/Dialog/DialogClose.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogContent.js +114 -0
- package/dist/granular/ui/components/Dialog/DialogContent.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogDescription.js +51 -0
- package/dist/granular/ui/components/Dialog/DialogDescription.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogFooter.js +45 -0
- package/dist/granular/ui/components/Dialog/DialogFooter.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogHeader.js +45 -0
- package/dist/granular/ui/components/Dialog/DialogHeader.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogTitle.js +53 -0
- package/dist/granular/ui/components/Dialog/DialogTitle.js.map +1 -0
- package/dist/granular/ui/components/Dialog/DialogTrigger.js +28 -0
- package/dist/granular/ui/components/Dialog/DialogTrigger.js.map +1 -0
- package/dist/granular/ui/components/Drawer/Drawer.js +47 -0
- package/dist/granular/ui/components/Drawer/Drawer.js.map +1 -0
- package/dist/granular/ui/components/Drawer/DrawerContent.js +140 -0
- package/dist/granular/ui/components/Drawer/DrawerContent.js.map +1 -0
- package/dist/granular/ui/components/Drawer/DrawerContext.js +21 -0
- package/dist/granular/ui/components/Drawer/DrawerContext.js.map +1 -0
- package/dist/granular/ui/components/Drawer/DrawerFooter.js +53 -0
- package/dist/granular/ui/components/Drawer/DrawerFooter.js.map +1 -0
- package/dist/granular/ui/components/Drawer/DrawerHeader.js +50 -0
- package/dist/granular/ui/components/Drawer/DrawerHeader.js.map +1 -0
- package/dist/granular/ui/components/Dropdown/Dropdown.js +243 -0
- package/dist/granular/ui/components/Dropdown/Dropdown.js.map +1 -0
- package/dist/granular/ui/components/EmptyState/EmptyState.js +102 -0
- package/dist/granular/ui/components/EmptyState/EmptyState.js.map +1 -0
- package/dist/granular/ui/components/FileUpload/FileUpload.js +342 -0
- package/dist/granular/ui/components/FileUpload/FileUpload.js.map +1 -0
- package/dist/granular/ui/components/FilterChips/FilterChips.js +67 -0
- package/dist/granular/ui/components/FilterChips/FilterChips.js.map +1 -0
- package/dist/granular/ui/components/Form/Form.js +184 -0
- package/dist/granular/ui/components/Form/Form.js.map +1 -0
- package/dist/granular/ui/components/Form/FormContext.js +19 -0
- package/dist/granular/ui/components/Form/FormContext.js.map +1 -0
- package/dist/granular/ui/components/Form/FormField.js +66 -0
- package/dist/granular/ui/components/Form/FormField.js.map +1 -0
- package/dist/granular/ui/components/Form/FormProvider.js +17 -0
- package/dist/granular/ui/components/Form/FormProvider.js.map +1 -0
- package/dist/granular/ui/components/Form/useFormFieldArray.js +29 -0
- package/dist/granular/ui/components/Form/useFormFieldArray.js.map +1 -0
- package/dist/granular/ui/components/FormWizardPattern/FormWizardPattern.js +121 -0
- package/dist/granular/ui/components/FormWizardPattern/FormWizardPattern.js.map +1 -0
- package/dist/granular/ui/components/Header/Header.js +98 -0
- package/dist/granular/ui/components/Header/Header.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderActions.js +21 -0
- package/dist/granular/ui/components/Header/components/HeaderActions.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderHamburger.js +31 -0
- package/dist/granular/ui/components/Header/components/HeaderHamburger.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderLogo.js +50 -0
- package/dist/granular/ui/components/Header/components/HeaderLogo.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js +38 -0
- package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js.map +1 -0
- package/dist/granular/ui/components/Header/components/HeaderNavigation.js +27 -0
- package/dist/granular/ui/components/Header/components/HeaderNavigation.js.map +1 -0
- package/dist/granular/ui/components/Header/contexts/HeaderContext.js +49 -0
- package/dist/granular/ui/components/Header/contexts/HeaderContext.js.map +1 -0
- package/dist/granular/ui/components/LoginBox/LoginBox.js +84 -0
- package/dist/granular/ui/components/LoginBox/LoginBox.js.map +1 -0
- package/dist/granular/ui/components/Menu/Menu.js +45 -0
- package/dist/granular/ui/components/Menu/Menu.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuContent.js +94 -0
- package/dist/granular/ui/components/Menu/MenuContent.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuContext.js +21 -0
- package/dist/granular/ui/components/Menu/MenuContext.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuItem.js +93 -0
- package/dist/granular/ui/components/Menu/MenuItem.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuSeparator.js +46 -0
- package/dist/granular/ui/components/Menu/MenuSeparator.js.map +1 -0
- package/dist/granular/ui/components/Menu/MenuTrigger.js +71 -0
- package/dist/granular/ui/components/Menu/MenuTrigger.js.map +1 -0
- package/dist/granular/ui/components/Modal/Modal.js +171 -0
- package/dist/granular/ui/components/Modal/Modal.js.map +1 -0
- package/dist/granular/ui/components/MultiSelect/MultiSelect.js +193 -0
- package/dist/granular/ui/components/MultiSelect/MultiSelect.js.map +1 -0
- package/dist/granular/ui/components/Navigation/Navigation.js +141 -0
- package/dist/granular/ui/components/Navigation/Navigation.js.map +1 -0
- package/dist/granular/ui/components/PageHeader/PageHeader.js +95 -0
- package/dist/granular/ui/components/PageHeader/PageHeader.js.map +1 -0
- package/dist/granular/ui/components/Pagination/Pagination.js +156 -0
- package/dist/granular/ui/components/Pagination/Pagination.js.map +1 -0
- package/dist/granular/ui/components/Popover/Popover.js +171 -0
- package/dist/granular/ui/components/Popover/Popover.js.map +1 -0
- package/dist/granular/ui/components/Rating/Rating.js +110 -0
- package/dist/granular/ui/components/Rating/Rating.js.map +1 -0
- package/dist/granular/ui/components/SearchAndFilterPattern/SearchAndFilterPattern.js +120 -0
- package/dist/granular/ui/components/SearchAndFilterPattern/SearchAndFilterPattern.js.map +1 -0
- package/dist/granular/ui/components/SearchInput/SearchInput.js +103 -0
- package/dist/granular/ui/components/SearchInput/SearchInput.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/SideNavbar.js +143 -0
- package/dist/granular/ui/components/SideNavbar/SideNavbar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/Navbar.js +173 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/Navbar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js +87 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js +242 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarSeparator.js +66 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarSeparator.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarToggle.js +108 -0
- package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarToggle.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarBackdrop.js +63 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarBackdrop.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js +113 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarRoot.js +150 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarRoot.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarToggle.js +197 -0
- package/dist/granular/ui/components/SideNavbar/components/SideNavbarToggle.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/Sidebar.js +108 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/Sidebar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarContent.js +71 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarContent.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarFooter.js +64 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarFooter.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarGroup.js +141 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarGroup.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarHeader.js +90 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarHeader.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlot.js +12 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlot.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlotContent.js +13 -0
- package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlotContent.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/NavbarContext.js +20 -0
- package/dist/granular/ui/components/SideNavbar/contexts/NavbarContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarConfigContext.js +37 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarConfigContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarStateContext.js +20 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarStateContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarThemeContext.js +28 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarThemeContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarToggleContext.js +19 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarToggleContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SidebarContext.js +20 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SidebarContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SidebarSlotContext.js +22 -0
- package/dist/granular/ui/components/SideNavbar/contexts/SidebarSlotContext.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useFocusManagement.js +43 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useFocusManagement.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useGroupState.js +59 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useGroupState.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useKeyboardShortcut.js +34 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useKeyboardShortcut.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useResize.js +58 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useResize.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useResponsiveSidebar.js +35 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useResponsiveSidebar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbar.js +21 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbar.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarContent.js +19 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarContent.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarNavigation.js +21 -0
- package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarNavigation.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarConfigProvider.js +61 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarConfigProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarProvider.js +82 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js +165 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarThemeProvider.js +34 -0
- package/dist/granular/ui/components/SideNavbar/providers/SideNavbarThemeProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/providers/SidebarSlotProvider.js +28 -0
- package/dist/granular/ui/components/SideNavbar/providers/SidebarSlotProvider.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/utils/parseKeyboardShortcut.js +60 -0
- package/dist/granular/ui/components/SideNavbar/utils/parseKeyboardShortcut.js.map +1 -0
- package/dist/granular/ui/components/SideNavbar/utils/parseWidth.js +19 -0
- package/dist/granular/ui/components/SideNavbar/utils/parseWidth.js.map +1 -0
- package/dist/granular/ui/components/Stat/Stat.js +84 -0
- package/dist/granular/ui/components/Stat/Stat.js.map +1 -0
- package/dist/granular/ui/components/Stat/StatGroup.js +61 -0
- package/dist/granular/ui/components/Stat/StatGroup.js.map +1 -0
- package/dist/granular/ui/components/Stepper/Stepper.js +248 -0
- package/dist/granular/ui/components/Stepper/Stepper.js.map +1 -0
- package/dist/granular/ui/components/Table/Table.js +162 -0
- package/dist/granular/ui/components/Table/Table.js.map +1 -0
- package/dist/granular/ui/components/Table/TableActions/TableActions.js +67 -0
- package/dist/granular/ui/components/Table/TableActions/TableActions.js.map +1 -0
- package/dist/granular/ui/components/Table/TableActions.js +44 -0
- package/dist/granular/ui/components/Table/TableActions.js.map +1 -0
- package/dist/granular/ui/components/Table/TableBody.js +134 -0
- package/dist/granular/ui/components/Table/TableBody.js.map +1 -0
- package/dist/granular/ui/components/Table/TableCell.js +40 -0
- package/dist/granular/ui/components/Table/TableCell.js.map +1 -0
- package/dist/granular/ui/components/Table/TableContext.js +19 -0
- package/dist/granular/ui/components/Table/TableContext.js.map +1 -0
- package/dist/granular/ui/components/Table/TableEmptyState.js +62 -0
- package/dist/granular/ui/components/Table/TableEmptyState.js.map +1 -0
- package/dist/granular/ui/components/Table/TableFilters/TableFilters.js +189 -0
- package/dist/granular/ui/components/Table/TableFilters/TableFilters.js.map +1 -0
- package/dist/granular/ui/components/Table/TableFilters.js +48 -0
- package/dist/granular/ui/components/Table/TableFilters.js.map +1 -0
- package/dist/granular/ui/components/Table/TableHeader.js +45 -0
- package/dist/granular/ui/components/Table/TableHeader.js.map +1 -0
- package/dist/granular/ui/components/Table/TableHeaderCell.js +117 -0
- package/dist/granular/ui/components/Table/TableHeaderCell.js.map +1 -0
- package/dist/granular/ui/components/Table/TableHeaderRow.js +89 -0
- package/dist/granular/ui/components/Table/TableHeaderRow.js.map +1 -0
- package/dist/granular/ui/components/Table/TablePagination/TablePagination.js +216 -0
- package/dist/granular/ui/components/Table/TablePagination/TablePagination.js.map +1 -0
- package/dist/granular/ui/components/Table/TablePagination.js +56 -0
- package/dist/granular/ui/components/Table/TablePagination.js.map +1 -0
- package/dist/granular/ui/components/Table/TableProvider.js +244 -0
- package/dist/granular/ui/components/Table/TableProvider.js.map +1 -0
- package/dist/granular/ui/components/Table/TableRow.js +95 -0
- package/dist/granular/ui/components/Table/TableRow.js.map +1 -0
- package/dist/granular/ui/components/Table/useColumnResizing.js +71 -0
- package/dist/granular/ui/components/Table/useColumnResizing.js.map +1 -0
- package/dist/granular/ui/components/Table/useVirtualScrolling.js +50 -0
- package/dist/granular/ui/components/Table/useVirtualScrolling.js.map +1 -0
- package/dist/granular/ui/components/Tabs/Tabs.js +39 -0
- package/dist/granular/ui/components/Tabs/Tabs.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsContent.js +59 -0
- package/dist/granular/ui/components/Tabs/TabsContent.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsContext.js +18 -0
- package/dist/granular/ui/components/Tabs/TabsContext.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsList.js +84 -0
- package/dist/granular/ui/components/Tabs/TabsList.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsProvider.js +31 -0
- package/dist/granular/ui/components/Tabs/TabsProvider.js.map +1 -0
- package/dist/granular/ui/components/Tabs/TabsTrigger.js +103 -0
- package/dist/granular/ui/components/Tabs/TabsTrigger.js.map +1 -0
- package/dist/granular/ui/components/TimePicker/TimePicker.js +216 -0
- package/dist/granular/ui/components/TimePicker/TimePicker.js.map +1 -0
- package/dist/granular/ui/components/Timeline/Timeline.js +152 -0
- package/dist/granular/ui/components/Timeline/Timeline.js.map +1 -0
- package/dist/granular/ui/components/Toast/Toast.js +159 -0
- package/dist/granular/ui/components/Toast/Toast.js.map +1 -0
- package/dist/granular/ui/components/Toast/ToastContainer.js +41 -0
- package/dist/granular/ui/components/Toast/ToastContainer.js.map +1 -0
- package/dist/granular/ui/components/Toast/useToast.js +64 -0
- package/dist/granular/ui/components/Toast/useToast.js.map +1 -0
- package/dist/granular/ui/hooks/createGenericContext.js +27 -0
- package/dist/granular/ui/hooks/createGenericContext.js.map +1 -0
- package/dist/granular/ui/hooks/focusable.js +14 -0
- package/dist/granular/ui/hooks/focusable.js.map +1 -0
- package/dist/granular/ui/hooks/useAutoFocus.js +23 -0
- package/dist/granular/ui/hooks/useAutoFocus.js.map +1 -0
- package/dist/granular/ui/hooks/useCollapsible.js +37 -0
- package/dist/granular/ui/hooks/useCollapsible.js.map +1 -0
- package/dist/granular/ui/hooks/useFocusRestore.js +20 -0
- package/dist/granular/ui/hooks/useFocusRestore.js.map +1 -0
- package/dist/granular/ui/hooks/useFocusTrap.js +31 -0
- package/dist/granular/ui/hooks/useFocusTrap.js.map +1 -0
- package/dist/granular/ui/hooks/useScrollSpy.js +23 -0
- package/dist/granular/ui/hooks/useScrollSpy.js.map +1 -0
- package/dist/granular/ui/layouts/Container/Container.js +73 -0
- package/dist/granular/ui/layouts/Container/Container.js.map +1 -0
- package/dist/granular/ui/layouts/Stack/Stack.js +79 -0
- package/dist/granular/ui/layouts/Stack/Stack.js.map +1 -0
- package/dist/granular/ui/primitives/Avatar/Avatar.js +122 -0
- package/dist/granular/ui/primitives/Avatar/Avatar.js.map +1 -0
- package/dist/granular/ui/primitives/Avatar/AvatarGroup.js +97 -0
- package/dist/granular/ui/primitives/Avatar/AvatarGroup.js.map +1 -0
- package/dist/granular/ui/primitives/Badge/Badge.js +212 -0
- package/dist/granular/ui/primitives/Badge/Badge.js.map +1 -0
- package/dist/granular/ui/primitives/Button/Button.js +288 -0
- package/dist/granular/ui/primitives/Button/Button.js.map +1 -0
- package/dist/granular/ui/primitives/Checkbox/Checkbox.js +129 -0
- package/dist/granular/ui/primitives/Checkbox/Checkbox.js.map +1 -0
- package/dist/granular/ui/primitives/Chip/Chip.js +206 -0
- package/dist/granular/ui/primitives/Chip/Chip.js.map +1 -0
- package/dist/granular/ui/primitives/Collapsible/Collapsible.js +115 -0
- package/dist/granular/ui/primitives/Collapsible/Collapsible.js.map +1 -0
- package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js +54 -0
- package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js.map +1 -0
- package/dist/granular/ui/primitives/Info/Info.js +57 -0
- package/dist/granular/ui/primitives/Info/Info.js.map +1 -0
- package/dist/granular/ui/primitives/Input/Input.js +351 -0
- package/dist/granular/ui/primitives/Input/Input.js.map +1 -0
- package/dist/granular/ui/primitives/Label/Label.js +61 -0
- package/dist/granular/ui/primitives/Label/Label.js.map +1 -0
- package/dist/granular/ui/primitives/NavLink/NavLink.js +229 -0
- package/dist/granular/ui/primitives/NavLink/NavLink.js.map +1 -0
- package/dist/granular/ui/primitives/NavLink/hooks/useNavLink.js +15 -0
- package/dist/granular/ui/primitives/NavLink/hooks/useNavLink.js.map +1 -0
- package/dist/granular/ui/primitives/Progress/Progress.js +182 -0
- package/dist/granular/ui/primitives/Progress/Progress.js.map +1 -0
- package/dist/granular/ui/primitives/Radio/Radio.js +118 -0
- package/dist/granular/ui/primitives/Radio/Radio.js.map +1 -0
- package/dist/granular/ui/primitives/Select/Select.js +210 -0
- package/dist/granular/ui/primitives/Select/Select.js.map +1 -0
- package/dist/granular/ui/primitives/Separator/Separator.js +69 -0
- package/dist/granular/ui/primitives/Separator/Separator.js.map +1 -0
- package/dist/granular/ui/primitives/Skeleton/Skeleton.js +87 -0
- package/dist/granular/ui/primitives/Skeleton/Skeleton.js.map +1 -0
- package/dist/granular/ui/primitives/Slider/Slider.js +291 -0
- package/dist/granular/ui/primitives/Slider/Slider.js.map +1 -0
- package/dist/granular/ui/primitives/Spinner/Spinner.js +95 -0
- package/dist/granular/ui/primitives/Spinner/Spinner.js.map +1 -0
- package/dist/granular/ui/primitives/Switch/Switch.js +212 -0
- package/dist/granular/ui/primitives/Switch/Switch.js.map +1 -0
- package/dist/granular/ui/primitives/Text/Text.js +118 -0
- package/dist/granular/ui/primitives/Text/Text.js.map +1 -0
- package/dist/granular/ui/primitives/Textarea/Textarea.js +129 -0
- package/dist/granular/ui/primitives/Textarea/Textarea.js.map +1 -0
- package/dist/granular/ui/primitives/Tooltip/Tooltip.js +227 -0
- package/dist/granular/ui/primitives/Tooltip/Tooltip.js.map +1 -0
- package/dist/granular/ui/providers/AppProvider.js +50 -0
- package/dist/granular/ui/providers/AppProvider.js.map +1 -0
- package/dist/granular/ui/providers/ConfigProvider.js +95 -0
- package/dist/granular/ui/providers/ConfigProvider.js.map +1 -0
- package/dist/granular/ui/providers/DialogContext.js +20 -0
- package/dist/granular/ui/providers/DialogContext.js.map +1 -0
- package/dist/granular/ui/providers/DialogProvider.js +32 -0
- package/dist/granular/ui/providers/DialogProvider.js.map +1 -0
- package/dist/granular/ui/providers/ThemeProvider.js +56 -0
- package/dist/granular/ui/providers/ThemeProvider.js.map +1 -0
- package/dist/granular/ui/providers/ToastContext.js +20 -0
- package/dist/granular/ui/providers/ToastContext.js.map +1 -0
- package/dist/granular/ui/providers/ToastProvider.js +47 -0
- package/dist/granular/ui/providers/ToastProvider.js.map +1 -0
- package/dist/granular/ui/providers/providers-bundle.js +23 -0
- package/dist/granular/ui/providers/providers-bundle.js.map +1 -0
- package/dist/granular/ui/tokens/animations.js +106 -0
- package/dist/granular/ui/tokens/animations.js.map +1 -0
- package/dist/granular/ui/tokens/borders.js +54 -0
- package/dist/granular/ui/tokens/borders.js.map +1 -0
- package/dist/granular/ui/tokens/breakpoints.js +43 -0
- package/dist/granular/ui/tokens/breakpoints.js.map +1 -0
- package/dist/granular/ui/tokens/colors/brand.js +67 -0
- package/dist/granular/ui/tokens/colors/brand.js.map +1 -0
- package/dist/granular/ui/tokens/colors/index.js +25 -0
- package/dist/granular/ui/tokens/colors/index.js.map +1 -0
- package/dist/granular/ui/tokens/colors/primitives.js +320 -0
- package/dist/granular/ui/tokens/colors/primitives.js.map +1 -0
- package/dist/granular/ui/tokens/colors/semantic.js +212 -0
- package/dist/granular/ui/tokens/colors/semantic.js.map +1 -0
- package/dist/granular/ui/tokens/colors/types.js +18 -0
- package/dist/granular/ui/tokens/colors/types.js.map +1 -0
- package/dist/granular/ui/tokens/colors/utils.js +131 -0
- package/dist/granular/ui/tokens/colors/utils.js.map +1 -0
- package/dist/granular/ui/tokens/opacity.js +59 -0
- package/dist/granular/ui/tokens/opacity.js.map +1 -0
- package/dist/granular/ui/tokens/radius.js +76 -0
- package/dist/granular/ui/tokens/radius.js.map +1 -0
- package/dist/granular/ui/tokens/shadows.js +63 -0
- package/dist/granular/ui/tokens/shadows.js.map +1 -0
- package/dist/granular/ui/tokens/sidebar.js +92 -0
- package/dist/granular/ui/tokens/sidebar.js.map +1 -0
- package/dist/granular/ui/tokens/spacing.js +143 -0
- package/dist/granular/ui/tokens/spacing.js.map +1 -0
- package/dist/granular/ui/tokens/switch.js +51 -0
- package/dist/granular/ui/tokens/switch.js.map +1 -0
- package/dist/granular/ui/tokens/typography.js +146 -0
- package/dist/granular/ui/tokens/typography.js.map +1 -0
- package/dist/granular/ui/tokens/z-index.js +79 -0
- package/dist/granular/ui/tokens/z-index.js.map +1 -0
- package/dist/granular/ui/utils/cn.js +10 -0
- package/dist/granular/ui/utils/cn.js.map +1 -0
- package/dist/granular/ui/utils/cva.js +14 -0
- package/dist/granular/ui/utils/cva.js.map +1 -0
- package/dist/granular/ui/utils/mergeRefs.js +11 -0
- package/dist/granular/ui/utils/mergeRefs.js.map +1 -0
- package/dist/granular/vite.svg +1 -0
- package/dist/index.cjs +46 -46
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1172 -1135
- package/dist/index.js.map +1 -1
- package/dist/react-design-system.css +1 -1
- package/dist/server/index.cjs +23 -23
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.js +882 -1179
- package/dist/server/index.js.map +1 -1
- package/dist/ui/components/FilterChips/FilterChips.d.ts +83 -0
- package/dist/ui/components/FilterChips/index.d.ts +2 -0
- package/dist/ui/components/index.d.ts +2 -0
- package/dist/ui/server.d.ts +2 -0
- package/package.json +9 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"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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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var h = Object.defineProperty, u = Object.defineProperties;
|
|
3
|
+
var v = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var x = Object.getOwnPropertySymbols;
|
|
5
|
+
var N = Object.prototype.hasOwnProperty, $ = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var p = (t, r, c) => r in t ? h(t, r, { enumerable: !0, configurable: !0, writable: !0, value: c }) : t[r] = c, m = (t, r) => {
|
|
7
|
+
for (var c in r || (r = {}))
|
|
8
|
+
N.call(r, c) && p(t, c, r[c]);
|
|
9
|
+
if (x)
|
|
10
|
+
for (var c of x(r))
|
|
11
|
+
$.call(r, c) && p(t, c, r[c]);
|
|
12
|
+
return t;
|
|
13
|
+
}, f = (t, r) => u(t, v(r));
|
|
14
|
+
import { jsx as s, jsxs as i } from "react/jsx-runtime";
|
|
15
|
+
import { CheckCircle2 as b } from "lucide-react";
|
|
16
|
+
import { getSpacingClass as l } from "../../tokens/spacing.js";
|
|
17
|
+
import { getRadiusClass as g } from "../../tokens/radius.js";
|
|
18
|
+
function q({
|
|
19
|
+
items: t,
|
|
20
|
+
orientation: r = "vertical",
|
|
21
|
+
className: c = ""
|
|
22
|
+
}) {
|
|
23
|
+
return r === "horizontal" ? /* @__PURE__ */ s("div", { className: `flex items-start ${c}`, children: t.map((e, n) => {
|
|
24
|
+
const a = e.status || (n === 0 ? "active" : n < t.findIndex((o) => o.status === "active") ? "completed" : "default"), d = n === t.length - 1;
|
|
25
|
+
return /* @__PURE__ */ s("div", { className: "flex items-start flex-1", children: /* @__PURE__ */ i("div", { className: "flex flex-col items-center flex-1", children: [
|
|
26
|
+
/* @__PURE__ */ s(
|
|
27
|
+
"div",
|
|
28
|
+
f(m({}, a === "default" ? { "data-marker": "pending" } : {}), {
|
|
29
|
+
className: `
|
|
30
|
+
flex
|
|
31
|
+
items-center
|
|
32
|
+
justify-center
|
|
33
|
+
w-10
|
|
34
|
+
h-10
|
|
35
|
+
${g("full")}
|
|
36
|
+
border-2
|
|
37
|
+
${a === "completed" ? "bg-success border-success text-fg-inverse" : a === "active" ? "bg-surface-brand-strong border-line-brand text-fg-inverse" : a === "error" ? "bg-error border-error text-fg-inverse" : "bg-surface-base border-line-emphasis text-fg-quaternary"}
|
|
38
|
+
`,
|
|
39
|
+
children: e.icon || (a === "completed" ? /* @__PURE__ */ s(b, { className: "h-4 w-4" }) : n + 1)
|
|
40
|
+
})
|
|
41
|
+
),
|
|
42
|
+
!d && /* @__PURE__ */ s(
|
|
43
|
+
"div",
|
|
44
|
+
{
|
|
45
|
+
className: `
|
|
46
|
+
w-full
|
|
47
|
+
h-0.5
|
|
48
|
+
${l("sm", "mt")}
|
|
49
|
+
${a === "completed" ? "bg-success" : "bg-line-emphasis"}
|
|
50
|
+
`
|
|
51
|
+
}
|
|
52
|
+
),
|
|
53
|
+
/* @__PURE__ */ i(
|
|
54
|
+
"div",
|
|
55
|
+
{
|
|
56
|
+
className: `${l("base", "mt")} text-center ${l("base", "px")}`,
|
|
57
|
+
children: [
|
|
58
|
+
e.timestamp && /* @__PURE__ */ s(
|
|
59
|
+
"p",
|
|
60
|
+
{
|
|
61
|
+
className: `text-xs text-fg-tertiary ${l("xs", "mb")}`,
|
|
62
|
+
children: e.timestamp
|
|
63
|
+
}
|
|
64
|
+
),
|
|
65
|
+
/* @__PURE__ */ s("h3", { className: "text-sm font-semibold text-fg-primary", children: e.title }),
|
|
66
|
+
e.description && /* @__PURE__ */ s(
|
|
67
|
+
"p",
|
|
68
|
+
{
|
|
69
|
+
className: `text-xs text-fg-secondary ${l("xs", "mt")}`,
|
|
70
|
+
children: e.description
|
|
71
|
+
}
|
|
72
|
+
),
|
|
73
|
+
e.content && /* @__PURE__ */ s("div", { className: l("sm", "mt"), children: e.content })
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
)
|
|
77
|
+
] }) }, e.id);
|
|
78
|
+
}) }) : /* @__PURE__ */ s("div", { className: `${l("none", "space-y")} ${c}`, children: t.map((e, n) => {
|
|
79
|
+
const a = e.status || (n === 0 ? "active" : n < t.findIndex((o) => o.status === "active") ? "completed" : "default"), d = n === t.length - 1;
|
|
80
|
+
return /* @__PURE__ */ i(
|
|
81
|
+
"div",
|
|
82
|
+
{
|
|
83
|
+
className: `flex items-start ${l("base", "gap")}`,
|
|
84
|
+
children: [
|
|
85
|
+
/* @__PURE__ */ i("div", { className: "flex flex-col items-center", children: [
|
|
86
|
+
/* @__PURE__ */ s(
|
|
87
|
+
"div",
|
|
88
|
+
f(m({}, a === "default" ? { "data-marker": "pending" } : {}), {
|
|
89
|
+
className: `
|
|
90
|
+
flex
|
|
91
|
+
items-center
|
|
92
|
+
justify-center
|
|
93
|
+
w-10
|
|
94
|
+
h-10
|
|
95
|
+
${g("full")}
|
|
96
|
+
border-2
|
|
97
|
+
${a === "completed" ? "bg-success border-success text-fg-inverse" : a === "active" ? "bg-surface-brand-strong border-line-brand text-fg-inverse" : a === "error" ? "bg-error border-error text-fg-inverse" : "bg-surface-base border-line-emphasis text-fg-quaternary"}
|
|
98
|
+
`,
|
|
99
|
+
children: e.icon || (a === "completed" ? /* @__PURE__ */ s(b, { className: "h-4 w-4" }) : n + 1)
|
|
100
|
+
})
|
|
101
|
+
),
|
|
102
|
+
!d && /* @__PURE__ */ s(
|
|
103
|
+
"div",
|
|
104
|
+
{
|
|
105
|
+
className: `
|
|
106
|
+
w-0.5
|
|
107
|
+
flex-1
|
|
108
|
+
min-h-16
|
|
109
|
+
${l("sm", "mt")}
|
|
110
|
+
${a === "completed" ? "bg-success" : "bg-line-emphasis"}
|
|
111
|
+
`
|
|
112
|
+
}
|
|
113
|
+
)
|
|
114
|
+
] }),
|
|
115
|
+
/* @__PURE__ */ i("div", { className: `flex-1 ${l("xl", "pb")}`, children: [
|
|
116
|
+
e.timestamp && /* @__PURE__ */ s(
|
|
117
|
+
"p",
|
|
118
|
+
{
|
|
119
|
+
className: `text-xs text-fg-tertiary ${l("xs", "mb")}`,
|
|
120
|
+
children: e.timestamp
|
|
121
|
+
}
|
|
122
|
+
),
|
|
123
|
+
/* @__PURE__ */ s(
|
|
124
|
+
"h3",
|
|
125
|
+
{
|
|
126
|
+
className: `
|
|
127
|
+
text-base
|
|
128
|
+
font-semibold
|
|
129
|
+
${a === "active" ? "text-fg-brand-emphasis" : "text-fg-primary"}
|
|
130
|
+
`,
|
|
131
|
+
children: e.title
|
|
132
|
+
}
|
|
133
|
+
),
|
|
134
|
+
e.description && /* @__PURE__ */ s(
|
|
135
|
+
"p",
|
|
136
|
+
{
|
|
137
|
+
className: `text-sm text-fg-secondary ${l("xs", "mt")}`,
|
|
138
|
+
children: e.description
|
|
139
|
+
}
|
|
140
|
+
),
|
|
141
|
+
e.content && /* @__PURE__ */ s("div", { className: l("md", "mt"), children: e.content })
|
|
142
|
+
] })
|
|
143
|
+
]
|
|
144
|
+
},
|
|
145
|
+
e.id
|
|
146
|
+
);
|
|
147
|
+
}) });
|
|
148
|
+
}
|
|
149
|
+
export {
|
|
150
|
+
q as default
|
|
151
|
+
};
|
|
152
|
+
//# sourceMappingURL=Timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Timeline.js","sources":["../../../../../src/ui/components/Timeline/Timeline.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { CheckCircle2 } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getRadiusClass } from \"../../tokens/radius\";\n\nexport type TimelineOrientation = \"horizontal\" | \"vertical\";\n\nexport interface TimelineItem {\n id: string;\n title: string;\n description?: string;\n content?: ReactNode;\n timestamp?: string;\n icon?: ReactNode;\n status?: \"default\" | \"active\" | \"completed\" | \"error\";\n}\n\nexport interface TimelineProps {\n items: TimelineItem[];\n orientation?: TimelineOrientation;\n className?: string;\n}\n\n/**\n * Timeline Component\n *\n * A timeline component for displaying events in chronological order.\n * Supports horizontal and vertical orientations.\n * Follows Atomic Design principles as an Organism component.\n *\n * @example\n * ```tsx\n * <Timeline\n * items={[\n * { id: '1', title: 'Event 1', description: 'Description 1', timestamp: '2024-01-01' },\n * { id: '2', title: 'Event 2', description: 'Description 2', timestamp: '2024-01-02' },\n * ]}\n * />\n * ```\n */\nexport default function Timeline({\n items,\n orientation = \"vertical\",\n className = \"\",\n}: TimelineProps) {\n if (orientation === \"horizontal\") {\n return (\n <div className={`flex items-start ${className}`}>\n {items.map((item, index) => {\n const status =\n item.status ||\n (index === 0\n ? \"active\"\n : index < items.findIndex((i) => i.status === \"active\")\n ? \"completed\"\n : \"default\");\n const isLast = index === items.length - 1;\n\n return (\n <div key={item.id} className=\"flex items-start flex-1\">\n <div className=\"flex flex-col items-center flex-1\">\n {/* Icon/Indicator */}\n <div\n // data-marker=\"pending\" — see .claude/rules/colors.md\n // \"fg-quaternary: AA-by-construction exception\".\n {...(status === \"default\"\n ? { \"data-marker\": \"pending\" }\n : {})}\n className={`\n flex\n items-center\n justify-center\n w-10\n h-10\n ${getRadiusClass(\"full\")}\n border-2\n ${\n status === \"completed\"\n ? \"bg-success border-success text-fg-inverse\"\n : status === \"active\"\n ? \"bg-surface-brand-strong border-line-brand text-fg-inverse\"\n : status === \"error\"\n ? \"bg-error border-error text-fg-inverse\"\n : \"bg-surface-base border-line-emphasis text-fg-quaternary\"\n }\n `}\n >\n {item.icon ||\n (status === \"completed\" ? (\n <CheckCircle2 className=\"h-4 w-4\" />\n ) : (\n index + 1\n ))}\n </div>\n\n {/* Connector Line */}\n {!isLast && (\n <div\n className={`\n w-full\n h-0.5\n ${getSpacingClass(\"sm\", \"mt\")}\n ${status === \"completed\" ? \"bg-success\" : \"bg-line-emphasis\"}\n `}\n />\n )}\n\n {/* Content */}\n <div\n className={`${getSpacingClass(\"base\", \"mt\")} text-center ${getSpacingClass(\"base\", \"px\")}`}\n >\n {item.timestamp && (\n <p\n className={`text-xs text-fg-tertiary ${getSpacingClass(\"xs\", \"mb\")}`}\n >\n {item.timestamp}\n </p>\n )}\n <h3 className=\"text-sm font-semibold text-fg-primary\">\n {item.title}\n </h3>\n {item.description && (\n <p\n className={`text-xs text-fg-secondary ${getSpacingClass(\"xs\", \"mt\")}`}\n >\n {item.description}\n </p>\n )}\n {item.content && (\n <div className={getSpacingClass(\"sm\", \"mt\")}>\n {item.content}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n\n // Vertical orientation\n return (\n <div className={`${getSpacingClass(\"none\", \"space-y\")} ${className}`}>\n {items.map((item, index) => {\n const status =\n item.status ||\n (index === 0\n ? \"active\"\n : index < items.findIndex((i) => i.status === \"active\")\n ? \"completed\"\n : \"default\");\n const isLast = index === items.length - 1;\n\n return (\n <div\n key={item.id}\n className={`flex items-start ${getSpacingClass(\"base\", \"gap\")}`}\n >\n {/* Timeline Line & Icon */}\n <div className=\"flex flex-col items-center\">\n <div\n // data-marker=\"pending\" — see .claude/rules/colors.md\n // \"fg-quaternary: AA-by-construction exception\".\n {...(status === \"default\" ? { \"data-marker\": \"pending\" } : {})}\n className={`\n flex\n items-center\n justify-center\n w-10\n h-10\n ${getRadiusClass(\"full\")}\n border-2\n ${\n status === \"completed\"\n ? \"bg-success border-success text-fg-inverse\"\n : status === \"active\"\n ? \"bg-surface-brand-strong border-line-brand text-fg-inverse\"\n : status === \"error\"\n ? \"bg-error border-error text-fg-inverse\"\n : \"bg-surface-base border-line-emphasis text-fg-quaternary\"\n }\n `}\n >\n {item.icon ||\n (status === \"completed\" ? (\n <CheckCircle2 className=\"h-4 w-4\" />\n ) : (\n index + 1\n ))}\n </div>\n {!isLast && (\n <div\n className={`\n w-0.5\n flex-1\n min-h-16\n ${getSpacingClass(\"sm\", \"mt\")}\n ${status === \"completed\" ? \"bg-success\" : \"bg-line-emphasis\"}\n `}\n />\n )}\n </div>\n\n {/* Content */}\n <div className={`flex-1 ${getSpacingClass(\"xl\", \"pb\")}`}>\n {item.timestamp && (\n <p\n className={`text-xs text-fg-tertiary ${getSpacingClass(\"xs\", \"mb\")}`}\n >\n {item.timestamp}\n </p>\n )}\n <h3\n className={`\n text-base\n font-semibold\n ${status === \"active\" ? \"text-fg-brand-emphasis\" : \"text-fg-primary\"}\n `}\n >\n {item.title}\n </h3>\n {item.description && (\n <p\n className={`text-sm text-fg-secondary ${getSpacingClass(\"xs\", \"mt\")}`}\n >\n {item.description}\n </p>\n )}\n {item.content && (\n <div className={getSpacingClass(\"md\", \"mt\")}>\n {item.content}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n"],"names":["Timeline","items","orientation","className","jsx","item","index","status","i","isLast","jsxs","__spreadProps","__spreadValues","getRadiusClass","CheckCircle2","getSpacingClass"],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var E = Object.defineProperty, S = Object.defineProperties;
|
|
3
|
+
var j = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var n = Object.getOwnPropertySymbols;
|
|
5
|
+
var g = Object.prototype.hasOwnProperty, p = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var u = (e, t, r) => t in e ? E(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r, x = (e, t) => {
|
|
7
|
+
for (var r in t || (t = {}))
|
|
8
|
+
g.call(t, r) && u(e, r, t[r]);
|
|
9
|
+
if (n)
|
|
10
|
+
for (var r of n(t))
|
|
11
|
+
p.call(t, r) && u(e, r, t[r]);
|
|
12
|
+
return e;
|
|
13
|
+
}, h = (e, t) => S(e, j(t));
|
|
14
|
+
var v = (e, t) => {
|
|
15
|
+
var r = {};
|
|
16
|
+
for (var i in e)
|
|
17
|
+
g.call(e, i) && t.indexOf(i) < 0 && (r[i] = e[i]);
|
|
18
|
+
if (e != null && n)
|
|
19
|
+
for (var i of n(e))
|
|
20
|
+
t.indexOf(i) < 0 && p.call(e, i) && (r[i] = e[i]);
|
|
21
|
+
return r;
|
|
22
|
+
};
|
|
23
|
+
import { jsx as s, jsxs as b } from "react/jsx-runtime";
|
|
24
|
+
import { useState as C, useEffect as $ } from "react";
|
|
25
|
+
import { Info as z, AlertTriangle as A, AlertCircle as B, CheckCircle2 as V, X as O } from "lucide-react";
|
|
26
|
+
import { getSpacingClass as o } from "../../tokens/spacing.js";
|
|
27
|
+
import { Button as w } from "../../primitives/Button/Button.js";
|
|
28
|
+
import { getRadiusClass as R } from "../../tokens/radius.js";
|
|
29
|
+
import { getShadowClass as X } from "../../tokens/shadows.js";
|
|
30
|
+
import { getZIndexClass as Z } from "../../tokens/z-index.js";
|
|
31
|
+
const q = {
|
|
32
|
+
success: V,
|
|
33
|
+
error: B,
|
|
34
|
+
warning: A,
|
|
35
|
+
info: z
|
|
36
|
+
}, D = {
|
|
37
|
+
success: "border-success",
|
|
38
|
+
error: "border-error",
|
|
39
|
+
warning: "border-warning",
|
|
40
|
+
info: "border-info"
|
|
41
|
+
}, F = {
|
|
42
|
+
success: "text-fg-success",
|
|
43
|
+
error: "text-fg-error",
|
|
44
|
+
warning: "text-fg-warning",
|
|
45
|
+
info: "text-fg-info"
|
|
46
|
+
};
|
|
47
|
+
function Y(G) {
|
|
48
|
+
var l = G, {
|
|
49
|
+
toast: e,
|
|
50
|
+
onDismiss: t,
|
|
51
|
+
position: r = "top-right",
|
|
52
|
+
className: i = "",
|
|
53
|
+
style: y
|
|
54
|
+
} = l, N = v(l, [
|
|
55
|
+
"toast",
|
|
56
|
+
"onDismiss",
|
|
57
|
+
"position",
|
|
58
|
+
"className",
|
|
59
|
+
"style"
|
|
60
|
+
]);
|
|
61
|
+
const [T, c] = C(!1), [m, d] = C(!1), k = q[e.variant];
|
|
62
|
+
$(() => {
|
|
63
|
+
if (e.duration === void 0) return;
|
|
64
|
+
c(!0);
|
|
65
|
+
const a = setTimeout(() => {
|
|
66
|
+
d(!0), setTimeout(() => {
|
|
67
|
+
t(e.id);
|
|
68
|
+
}, 300);
|
|
69
|
+
}, e.duration);
|
|
70
|
+
return () => clearTimeout(a);
|
|
71
|
+
}, [e.duration, e.id, t]), $(() => {
|
|
72
|
+
const a = setTimeout(() => c(!0), 10);
|
|
73
|
+
return () => clearTimeout(a);
|
|
74
|
+
}, []);
|
|
75
|
+
const I = {
|
|
76
|
+
"top-right": "top-4 right-4",
|
|
77
|
+
"top-left": "top-4 left-4",
|
|
78
|
+
"bottom-right": "bottom-4 right-4",
|
|
79
|
+
"bottom-left": "bottom-4 left-4",
|
|
80
|
+
"top-center": "top-4 left-1/2 -translate-x-1/2",
|
|
81
|
+
"bottom-center": "bottom-4 left-1/2 -translate-x-1/2"
|
|
82
|
+
}, f = () => {
|
|
83
|
+
d(!0), setTimeout(() => {
|
|
84
|
+
t(e.id);
|
|
85
|
+
}, 300);
|
|
86
|
+
};
|
|
87
|
+
return /* @__PURE__ */ s(
|
|
88
|
+
"div",
|
|
89
|
+
h(x({
|
|
90
|
+
className: `
|
|
91
|
+
fixed ${I[r]} ${Z("toast")}
|
|
92
|
+
w-full max-w-sm
|
|
93
|
+
transition-all duration-300 ease-in-out
|
|
94
|
+
${T && !m ? "opacity-100 translate-y-0" : "opacity-0 -translate-y-2"}
|
|
95
|
+
${m ? "opacity-0 translate-y-2" : ""}
|
|
96
|
+
${i}
|
|
97
|
+
`,
|
|
98
|
+
style: y,
|
|
99
|
+
role: "alert",
|
|
100
|
+
"aria-live": e.variant === "error" ? "assertive" : "polite",
|
|
101
|
+
"aria-atomic": "true"
|
|
102
|
+
}, N), {
|
|
103
|
+
children: /* @__PURE__ */ b(
|
|
104
|
+
"div",
|
|
105
|
+
{
|
|
106
|
+
className: `
|
|
107
|
+
flex items-start ${o("md", "gap")}
|
|
108
|
+
${o("base", "p")}
|
|
109
|
+
bg-surface-overlay
|
|
110
|
+
${R("lg")}
|
|
111
|
+
${X("lg")}
|
|
112
|
+
border
|
|
113
|
+
${D[e.variant]}
|
|
114
|
+
`,
|
|
115
|
+
children: [
|
|
116
|
+
/* @__PURE__ */ s("div", { className: `flex-shrink-0 ${F[e.variant]}`, children: /* @__PURE__ */ s(k, { className: "h-5 w-5", "aria-hidden": "true" }) }),
|
|
117
|
+
/* @__PURE__ */ b("div", { className: "flex-1 min-w-0", children: [
|
|
118
|
+
/* @__PURE__ */ s("div", { className: "font-medium text-fg-primary", children: e.title }),
|
|
119
|
+
e.description && /* @__PURE__ */ s(
|
|
120
|
+
"div",
|
|
121
|
+
{
|
|
122
|
+
className: `${o("xs", "mt")} text-sm text-fg-secondary`,
|
|
123
|
+
children: e.description
|
|
124
|
+
}
|
|
125
|
+
),
|
|
126
|
+
e.action && /* @__PURE__ */ s("div", { className: o("md", "mt"), children: /* @__PURE__ */ s(
|
|
127
|
+
w,
|
|
128
|
+
{
|
|
129
|
+
variant: "outline",
|
|
130
|
+
size: "sm",
|
|
131
|
+
onClick: () => {
|
|
132
|
+
var a;
|
|
133
|
+
(a = e.action) == null || a.onClick(), f();
|
|
134
|
+
},
|
|
135
|
+
children: e.action.label
|
|
136
|
+
}
|
|
137
|
+
) })
|
|
138
|
+
] }),
|
|
139
|
+
/* @__PURE__ */ s(
|
|
140
|
+
w,
|
|
141
|
+
{
|
|
142
|
+
variant: "iconOnly",
|
|
143
|
+
size: "sm",
|
|
144
|
+
onClick: f,
|
|
145
|
+
className: "flex-shrink-0",
|
|
146
|
+
"aria-label": "Dismiss notification",
|
|
147
|
+
children: /* @__PURE__ */ s(O, { className: "h-4 w-4" })
|
|
148
|
+
}
|
|
149
|
+
)
|
|
150
|
+
]
|
|
151
|
+
}
|
|
152
|
+
)
|
|
153
|
+
})
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
export {
|
|
157
|
+
Y as Toast
|
|
158
|
+
};
|
|
159
|
+
//# sourceMappingURL=Toast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toast.js","sources":["../../../../../src/ui/components/Toast/Toast.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState, type HTMLAttributes } from \"react\";\nimport {\n X,\n CheckCircle2,\n AlertCircle,\n AlertTriangle,\n Info,\n} from \"lucide-react\";\nimport { type Toast as ToastType } from \"../../providers/ToastContext\";\nimport { getRadiusClass, getShadowClass, getZIndexClass } from \"../../tokens\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport Button from \"../../primitives/Button/Button\";\n\nexport interface ToastProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"title\"\n> {\n toast: ToastType;\n onDismiss: (id: string) => void;\n position?:\n | \"top-right\"\n | \"top-left\"\n | \"bottom-right\"\n | \"bottom-left\"\n | \"top-center\"\n | \"bottom-center\";\n}\n\nconst variantIcons = {\n success: CheckCircle2,\n error: AlertCircle,\n warning: AlertTriangle,\n info: Info,\n};\n\nconst variantBorderClass = {\n success: \"border-success\",\n error: \"border-error\",\n warning: \"border-warning\",\n info: \"border-info\",\n} as const;\n\nconst variantTextClass = {\n success: \"text-fg-success\",\n error: \"text-fg-error\",\n warning: \"text-fg-warning\",\n info: \"text-fg-info\",\n} as const;\n\nexport function Toast({\n toast,\n onDismiss,\n position = \"top-right\",\n className = \"\",\n style,\n ...props\n}: ToastProps) {\n const [isVisible, setIsVisible] = useState(false);\n const [isExiting, setIsExiting] = useState(false);\n const Icon = variantIcons[toast.variant];\n\n // Auto-dismiss\n useEffect(() => {\n if (toast.duration === undefined) return;\n\n setIsVisible(true);\n\n const timer = setTimeout(() => {\n setIsExiting(true);\n setTimeout(() => {\n onDismiss(toast.id);\n }, 300); // Animation duration\n }, toast.duration);\n\n return () => clearTimeout(timer);\n }, [toast.duration, toast.id, onDismiss]);\n\n // Show animation\n useEffect(() => {\n const timer = setTimeout(() => setIsVisible(true), 10);\n return () => clearTimeout(timer);\n }, []);\n\n const positionClasses = {\n \"top-right\": \"top-4 right-4\",\n \"top-left\": \"top-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n \"top-center\": \"top-4 left-1/2 -translate-x-1/2\",\n \"bottom-center\": \"bottom-4 left-1/2 -translate-x-1/2\",\n };\n\n const handleDismiss = () => {\n setIsExiting(true);\n setTimeout(() => {\n onDismiss(toast.id);\n }, 300);\n };\n\n return (\n <div\n className={`\n fixed ${positionClasses[position]} ${getZIndexClass(\"toast\")}\n w-full max-w-sm\n transition-all duration-300 ease-in-out\n ${isVisible && !isExiting ? \"opacity-100 translate-y-0\" : \"opacity-0 -translate-y-2\"}\n ${isExiting ? \"opacity-0 translate-y-2\" : \"\"}\n ${className}\n `}\n style={style}\n role=\"alert\"\n aria-live={toast.variant === \"error\" ? \"assertive\" : \"polite\"}\n aria-atomic=\"true\"\n {...props}\n >\n <div\n className={`\n flex items-start ${getSpacingClass(\"md\", \"gap\")}\n ${getSpacingClass(\"base\", \"p\")}\n bg-surface-overlay\n ${getRadiusClass(\"lg\")}\n ${getShadowClass(\"lg\")}\n border\n ${variantBorderClass[toast.variant]}\n `}\n >\n {/* Icon */}\n <div className={`flex-shrink-0 ${variantTextClass[toast.variant]}`}>\n <Icon className=\"h-5 w-5\" aria-hidden=\"true\" />\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-fg-primary\">{toast.title}</div>\n {toast.description && (\n <div\n className={`${getSpacingClass(\"xs\", \"mt\")} text-sm text-fg-secondary`}\n >\n {toast.description}\n </div>\n )}\n {toast.action && (\n <div className={getSpacingClass(\"md\", \"mt\")}>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n toast.action?.onClick();\n handleDismiss();\n }}\n >\n {toast.action.label}\n </Button>\n </div>\n )}\n </div>\n\n {/* Close Button */}\n <Button\n variant=\"iconOnly\"\n size=\"sm\"\n onClick={handleDismiss}\n className=\"flex-shrink-0\"\n aria-label=\"Dismiss notification\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n );\n}\n"],"names":["variantIcons","CheckCircle2","AlertCircle","AlertTriangle","Info","variantBorderClass","variantTextClass","Toast","_a","_b","toast","onDismiss","position","className","style","props","__objRest","isVisible","setIsVisible","useState","isExiting","setIsExiting","Icon","useEffect","timer","positionClasses","handleDismiss","jsx","__spreadProps","__spreadValues","getZIndexClass","jsxs","getSpacingClass","getRadiusClass","getShadowClass","Button","X"],"mappings":"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"}
|