@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,184 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var _ = Object.defineProperty, q = Object.defineProperties;
|
|
3
|
+
var A = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var g = Object.getOwnPropertySymbols;
|
|
5
|
+
var R = Object.prototype.hasOwnProperty, j = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var P = (r, o, e) => o in r ? _(r, o, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[o] = e, k = (r, o) => {
|
|
7
|
+
for (var e in o || (o = {}))
|
|
8
|
+
R.call(o, e) && P(r, e, o[e]);
|
|
9
|
+
if (g)
|
|
10
|
+
for (var e of g(o))
|
|
11
|
+
j.call(o, e) && P(r, e, o[e]);
|
|
12
|
+
return r;
|
|
13
|
+
}, F = (r, o) => q(r, A(o));
|
|
14
|
+
var h = (r, o) => {
|
|
15
|
+
var e = {};
|
|
16
|
+
for (var t in r)
|
|
17
|
+
R.call(r, t) && o.indexOf(t) < 0 && (e[t] = r[t]);
|
|
18
|
+
if (r != null && g)
|
|
19
|
+
for (var t of g(r))
|
|
20
|
+
o.indexOf(t) < 0 && j.call(r, t) && (e[t] = r[t]);
|
|
21
|
+
return e;
|
|
22
|
+
};
|
|
23
|
+
var z = (r, o, e) => new Promise((t, m) => {
|
|
24
|
+
var S = (s) => {
|
|
25
|
+
try {
|
|
26
|
+
f(e.next(s));
|
|
27
|
+
} catch (l) {
|
|
28
|
+
m(l);
|
|
29
|
+
}
|
|
30
|
+
}, a = (s) => {
|
|
31
|
+
try {
|
|
32
|
+
f(e.throw(s));
|
|
33
|
+
} catch (l) {
|
|
34
|
+
m(l);
|
|
35
|
+
}
|
|
36
|
+
}, f = (s) => s.done ? t(s.value) : Promise.resolve(s.value).then(S, a);
|
|
37
|
+
f((e = e.apply(r, o)).next());
|
|
38
|
+
});
|
|
39
|
+
import { jsx as c, jsxs as C } from "react/jsx-runtime";
|
|
40
|
+
import { FormProvider as B } from "./FormProvider.js";
|
|
41
|
+
import { cn as n } from "../../utils/cn.js";
|
|
42
|
+
import { getSpacingClass as b } from "../../tokens/spacing.js";
|
|
43
|
+
import { getRadiusClass as p } from "../../tokens/radius.js";
|
|
44
|
+
import { getTypographySizeFromFontSize as x } from "../../tokens/typography.js";
|
|
45
|
+
function X(f) {
|
|
46
|
+
var s = f, {
|
|
47
|
+
children: r,
|
|
48
|
+
onSubmit: o,
|
|
49
|
+
loading: e = !1,
|
|
50
|
+
error: t = null,
|
|
51
|
+
success: m = null,
|
|
52
|
+
className: S = ""
|
|
53
|
+
} = s, a = h(s, [
|
|
54
|
+
"children",
|
|
55
|
+
"onSubmit",
|
|
56
|
+
"loading",
|
|
57
|
+
"error",
|
|
58
|
+
"success",
|
|
59
|
+
"className"
|
|
60
|
+
]);
|
|
61
|
+
const l = n(
|
|
62
|
+
b("lg", "gap"),
|
|
63
|
+
"flex",
|
|
64
|
+
"flex-col",
|
|
65
|
+
S
|
|
66
|
+
);
|
|
67
|
+
if ("form" in a && a.form !== void 0) {
|
|
68
|
+
const N = a, {
|
|
69
|
+
form: i,
|
|
70
|
+
onSubmit: H,
|
|
71
|
+
onSubmitError: d
|
|
72
|
+
} = N, V = h(N, [
|
|
73
|
+
"form",
|
|
74
|
+
"onSubmit",
|
|
75
|
+
"onSubmitError"
|
|
76
|
+
]), w = i.handleSubmit(
|
|
77
|
+
(v) => z(null, null, function* () {
|
|
78
|
+
try {
|
|
79
|
+
yield H(v);
|
|
80
|
+
} catch (T) {
|
|
81
|
+
d == null || d(T);
|
|
82
|
+
}
|
|
83
|
+
}),
|
|
84
|
+
(v) => {
|
|
85
|
+
d == null || d(v);
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
return /* @__PURE__ */ c(B, { form: i, loading: e, children: /* @__PURE__ */ C(
|
|
89
|
+
"form",
|
|
90
|
+
F(k({
|
|
91
|
+
className: l,
|
|
92
|
+
onSubmit: w,
|
|
93
|
+
noValidate: !0
|
|
94
|
+
}, V), {
|
|
95
|
+
children: [
|
|
96
|
+
r,
|
|
97
|
+
t && /* @__PURE__ */ c(
|
|
98
|
+
"div",
|
|
99
|
+
{
|
|
100
|
+
role: "alert",
|
|
101
|
+
className: n(
|
|
102
|
+
b("md", "p"),
|
|
103
|
+
x("sm"),
|
|
104
|
+
"text-error-dark",
|
|
105
|
+
"bg-error-bg",
|
|
106
|
+
"border",
|
|
107
|
+
"border-error",
|
|
108
|
+
p("md")
|
|
109
|
+
),
|
|
110
|
+
children: t
|
|
111
|
+
}
|
|
112
|
+
),
|
|
113
|
+
m && /* @__PURE__ */ c(
|
|
114
|
+
"div",
|
|
115
|
+
{
|
|
116
|
+
role: "alert",
|
|
117
|
+
className: n(
|
|
118
|
+
b("md", "p"),
|
|
119
|
+
x("sm"),
|
|
120
|
+
"text-success-dark",
|
|
121
|
+
"bg-success-bg",
|
|
122
|
+
"border",
|
|
123
|
+
"border-success",
|
|
124
|
+
p("md")
|
|
125
|
+
),
|
|
126
|
+
children: m
|
|
127
|
+
}
|
|
128
|
+
)
|
|
129
|
+
]
|
|
130
|
+
})
|
|
131
|
+
) });
|
|
132
|
+
}
|
|
133
|
+
const u = a.onSubmit || o, y = a, { onSubmit: I } = y, D = h(y, ["onSubmit"]);
|
|
134
|
+
return /* @__PURE__ */ C(
|
|
135
|
+
"form",
|
|
136
|
+
F(k({
|
|
137
|
+
className: l,
|
|
138
|
+
onSubmit: (i) => {
|
|
139
|
+
i.preventDefault(), u && !e && (u == null || u(i));
|
|
140
|
+
},
|
|
141
|
+
noValidate: !0
|
|
142
|
+
}, D), {
|
|
143
|
+
children: [
|
|
144
|
+
r,
|
|
145
|
+
t && /* @__PURE__ */ c(
|
|
146
|
+
"div",
|
|
147
|
+
{
|
|
148
|
+
role: "alert",
|
|
149
|
+
className: n(
|
|
150
|
+
b("md", "p"),
|
|
151
|
+
x("sm"),
|
|
152
|
+
"text-error-dark",
|
|
153
|
+
"bg-error-bg",
|
|
154
|
+
"border",
|
|
155
|
+
"border-error",
|
|
156
|
+
p("md")
|
|
157
|
+
),
|
|
158
|
+
children: t
|
|
159
|
+
}
|
|
160
|
+
),
|
|
161
|
+
m && /* @__PURE__ */ c(
|
|
162
|
+
"div",
|
|
163
|
+
{
|
|
164
|
+
role: "alert",
|
|
165
|
+
className: n(
|
|
166
|
+
b("md", "p"),
|
|
167
|
+
x("sm"),
|
|
168
|
+
"text-success-dark",
|
|
169
|
+
"bg-success-bg",
|
|
170
|
+
"border",
|
|
171
|
+
"border-success",
|
|
172
|
+
p("md")
|
|
173
|
+
),
|
|
174
|
+
children: m
|
|
175
|
+
}
|
|
176
|
+
)
|
|
177
|
+
]
|
|
178
|
+
})
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
export {
|
|
182
|
+
X as default
|
|
183
|
+
};
|
|
184
|
+
//# sourceMappingURL=Form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Form.js","sources":["../../../../../src/ui/components/Form/Form.tsx"],"sourcesContent":["\"use client\";\n\nimport type { FormHTMLAttributes, ReactNode } from \"react\";\nimport { FormProvider } from \"./FormProvider\";\nimport type { FieldValues, UseFormReturn } from \"react-hook-form\";\nimport { cn } from \"../../utils\";\nimport {\n getSpacingClass,\n getRadiusClass,\n getTypographySizeFromFontSize,\n} from \"../../tokens\";\n\n// Simple Form Props\ninterface SimpleFormProps extends FormHTMLAttributes<HTMLFormElement> {\n children: ReactNode;\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n loading?: boolean;\n error?: string | null;\n success?: string | null;\n form?: never; // Cannot use form prop in simple mode\n}\n\n// React Hook Form Props\ninterface ReactHookFormProps<\n TFieldValues extends FieldValues = FieldValues,\n> extends Omit<FormHTMLAttributes<HTMLFormElement>, \"onSubmit\"> {\n children: ReactNode;\n form: UseFormReturn<TFieldValues>;\n onSubmit: (data: TFieldValues) => void | Promise<void>;\n loading?: boolean;\n error?: string | null;\n success?: string | null;\n onSubmitError?: (errors: unknown) => void;\n}\n\ntype FormProps<TFieldValues extends FieldValues = FieldValues> =\n | SimpleFormProps\n | ReactHookFormProps<TFieldValues>;\n\n/**\n * Form Component\n *\n * A flexible form component that supports both simple forms and react-hook-form integration.\n *\n * @example\n * ```tsx\n * // Simple form\n * <Form onSubmit={handleSubmit} loading={isSubmitting}>\n * <Input name=\"email\" />\n * <Button type=\"submit\">Submit</Button>\n * </Form>\n *\n * // With react-hook-form\n * const form = useForm({ resolver: zodResolver(schema) });\n * <Form form={form} onSubmit={handleSubmit}>\n * <FormField name=\"email\">\n * {({ register, error }) => (\n * <>\n * <Input {...register('email')} />\n * {error && <ErrorMessage>{error}</ErrorMessage>}\n * </>\n * )}\n * </FormField>\n * </Form>\n * ```\n */\nexport default function Form<TFieldValues extends FieldValues = FieldValues>({\n children,\n onSubmit,\n loading = false,\n error = null,\n success = null,\n className = \"\",\n ...props\n}: FormProps<TFieldValues>) {\n const classes = cn(\n getSpacingClass(\"lg\", \"gap\"),\n \"flex\",\n \"flex-col\",\n className,\n );\n\n // Check if using react-hook-form\n const isReactHookForm = \"form\" in props && props.form !== undefined;\n\n if (isReactHookForm) {\n const {\n form,\n onSubmit: onSubmitData,\n onSubmitError,\n ...formProps\n } = props as ReactHookFormProps<TFieldValues>;\n\n const handleSubmit = form.handleSubmit(\n async (data) => {\n try {\n await onSubmitData(data);\n } catch (err) {\n onSubmitError?.(err);\n }\n },\n (errors) => {\n onSubmitError?.(errors);\n },\n );\n\n return (\n <FormProvider form={form} loading={loading}>\n <form\n className={classes}\n onSubmit={handleSubmit}\n noValidate\n {...formProps}\n >\n {children}\n {error && (\n <div\n role=\"alert\"\n className={cn(\n getSpacingClass(\"md\", \"p\"),\n getTypographySizeFromFontSize(\"sm\"),\n \"text-error-dark\",\n \"bg-error-bg\",\n \"border\",\n \"border-error\",\n getRadiusClass(\"md\"),\n )}\n >\n {error}\n </div>\n )}\n {success && (\n <div\n role=\"alert\"\n className={cn(\n getSpacingClass(\"md\", \"p\"),\n getTypographySizeFromFontSize(\"sm\"),\n \"text-success-dark\",\n \"bg-success-bg\",\n \"border\",\n \"border-success\",\n getRadiusClass(\"md\"),\n )}\n >\n {success}\n </div>\n )}\n </form>\n </FormProvider>\n );\n }\n\n // Simple form mode\n // Use onSubmit from props or from direct prop\n const onSubmitSimple = (props as SimpleFormProps).onSubmit || onSubmit;\n const { onSubmit: _, ...simpleProps } = props as SimpleFormProps;\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n if (onSubmitSimple && !loading) {\n // Narrow the union: we're in the !isReactHookForm branch, so\n // onSubmit takes a FormEvent. TS sees the union member's intersected\n // parameter type and can't prove it; the cast names the branch.\n (onSubmitSimple as SimpleFormProps[\"onSubmit\"])?.(e);\n }\n };\n\n return (\n <form\n className={classes}\n onSubmit={handleSubmit}\n noValidate\n {...simpleProps}\n >\n {children}\n {error && (\n <div\n role=\"alert\"\n className={cn(\n getSpacingClass(\"md\", \"p\"),\n getTypographySizeFromFontSize(\"sm\"),\n \"text-error-dark\",\n \"bg-error-bg\",\n \"border\",\n \"border-error\",\n getRadiusClass(\"md\"),\n )}\n >\n {error}\n </div>\n )}\n {success && (\n <div\n role=\"alert\"\n className={cn(\n getSpacingClass(\"md\", \"p\"),\n getTypographySizeFromFontSize(\"sm\"),\n \"text-success-dark\",\n \"bg-success-bg\",\n \"border\",\n \"border-success\",\n getRadiusClass(\"md\"),\n )}\n >\n {success}\n </div>\n )}\n </form>\n );\n}\n"],"names":["Form","_a","_b","children","onSubmit","loading","error","success","className","props","__objRest","classes","cn","getSpacingClass","form","onSubmitData","onSubmitError","formProps","handleSubmit","data","__async","err","errors","jsx","FormProvider","jsxs","__spreadProps","__spreadValues","getTypographySizeFromFontSize","getRadiusClass","onSubmitSimple","_","simpleProps","e"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { createGenericContext as e } from "../../hooks/createGenericContext.js";
|
|
3
|
+
const t = e({
|
|
4
|
+
displayName: "FormContext",
|
|
5
|
+
errorMessage: "useFormContext must be used within a Form component with react-hook-form integration"
|
|
6
|
+
}), n = t.Context, r = t.Provider;
|
|
7
|
+
function i() {
|
|
8
|
+
return t.useContextRequired();
|
|
9
|
+
}
|
|
10
|
+
function m() {
|
|
11
|
+
return t.useContextOptional();
|
|
12
|
+
}
|
|
13
|
+
export {
|
|
14
|
+
n as FormContext,
|
|
15
|
+
r as FormContextProvider,
|
|
16
|
+
i as useFormContext,
|
|
17
|
+
m as useFormContextOptional
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=FormContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormContext.js","sources":["../../../../../src/ui/components/Form/FormContext.tsx"],"sourcesContent":["\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport type { FieldValues, UseFormReturn } from \"react-hook-form\";\nimport { createGenericContext } from \"../../hooks/createGenericContext\";\n\nexport interface FormContextValue<\n TFieldValues extends FieldValues = FieldValues,\n> {\n form?: UseFormReturn<TFieldValues>;\n loading?: boolean;\n}\n\nconst formContext = createGenericContext<FormContextValue>({\n displayName: \"FormContext\",\n errorMessage:\n \"useFormContext must be used within a Form component with react-hook-form integration\",\n});\n\n/**\n * Raw React Context object. Exposed so `useContextSelector(FormContext, …)`\n * keeps working. Prefer the typed hooks below for direct reads.\n */\nexport const FormContext = formContext.Context;\n\n/**\n * Internal Provider — consumed by `FormProvider.tsx` only. Not re-exported\n * from `Form/index.ts`; keeps the public surface unchanged.\n */\nexport const FormContextProvider = formContext.Provider;\n\n/**\n * Hook to access Form context.\n *\n * @throws Error if used outside of Form component with react-hook-form\n */\nexport function useFormContext<\n TFieldValues extends FieldValues = FieldValues,\n>(): FormContextValue<TFieldValues> {\n return formContext.useContextRequired<FormContextValue<TFieldValues>>();\n}\n\n/**\n * Hook to access Form context (optional, returns undefined if not in Form).\n */\nexport function useFormContextOptional<\n TFieldValues extends FieldValues = FieldValues,\n>(): FormContextValue<TFieldValues> | undefined {\n return formContext.useContextOptional<FormContextValue<TFieldValues>>();\n}\n"],"names":["formContext","createGenericContext","FormContext","FormContextProvider","useFormContext","useFormContextOptional"],"mappings":";;AAaA,MAAMA,IAAcC,EAAuC;AAAA,EACzD,aAAa;AAAA,EACb,cACE;AACJ,CAAC,GAMYC,IAAcF,EAAY,SAM1BG,IAAsBH,EAAY;AAOxC,SAASI,IAEoB;AAClC,SAAOJ,EAAY,mBAAA;AACrB;AAKO,SAASK,IAEgC;AAC9C,SAAOL,EAAY,mBAAA;AACrB;"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as u, jsx as g } from "react/jsx-runtime";
|
|
3
|
+
import { useFormContext as d } from "./FormContext.js";
|
|
4
|
+
import x from "../../primitives/Label/Label.js";
|
|
5
|
+
import { cn as c } from "../../utils/cn.js";
|
|
6
|
+
import { getTypographyWeightFromFontWeight as w, getTypographySizeFromFontSize as y } from "../../tokens/typography.js";
|
|
7
|
+
import C from "../../primitives/ErrorMessage/ErrorMessage.js";
|
|
8
|
+
import { getSpacingClass as S } from "../../tokens/spacing.js";
|
|
9
|
+
function N({
|
|
10
|
+
name: r,
|
|
11
|
+
label: e,
|
|
12
|
+
children: a,
|
|
13
|
+
rules: t,
|
|
14
|
+
className: f = ""
|
|
15
|
+
}) {
|
|
16
|
+
var n;
|
|
17
|
+
const { form: i } = d();
|
|
18
|
+
if (!i)
|
|
19
|
+
throw new Error(
|
|
20
|
+
"FormField must be used within a Form component with react-hook-form integration"
|
|
21
|
+
);
|
|
22
|
+
const {
|
|
23
|
+
register: m,
|
|
24
|
+
formState: { errors: p },
|
|
25
|
+
watch: l
|
|
26
|
+
} = i, s = m(r, t), o = (n = p[r]) == null ? void 0 : n.message, h = l(r);
|
|
27
|
+
return /* @__PURE__ */ u(
|
|
28
|
+
"div",
|
|
29
|
+
{
|
|
30
|
+
className: c(
|
|
31
|
+
"flex",
|
|
32
|
+
"flex-col",
|
|
33
|
+
S("sm", "gap"),
|
|
34
|
+
f
|
|
35
|
+
),
|
|
36
|
+
children: [
|
|
37
|
+
e && /* @__PURE__ */ g(
|
|
38
|
+
x,
|
|
39
|
+
{
|
|
40
|
+
htmlFor: r,
|
|
41
|
+
className: c(
|
|
42
|
+
"block",
|
|
43
|
+
y("sm"),
|
|
44
|
+
w("medium"),
|
|
45
|
+
"text-fg-primary"
|
|
46
|
+
),
|
|
47
|
+
children: e
|
|
48
|
+
}
|
|
49
|
+
),
|
|
50
|
+
a({
|
|
51
|
+
name: r,
|
|
52
|
+
register: (F) => m(F, t),
|
|
53
|
+
error: o,
|
|
54
|
+
value: h,
|
|
55
|
+
onChange: s.onChange,
|
|
56
|
+
onBlur: s.onBlur
|
|
57
|
+
}),
|
|
58
|
+
o && /* @__PURE__ */ g(C, { message: o })
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
N as FormField
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=FormField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormField.js","sources":["../../../../../src/ui/components/Form/FormField.tsx"],"sourcesContent":["\"use client\";\n\nimport { useFormContext } from \"./FormContext\";\nimport { ErrorMessage, Label } from \"../../primitives\";\nimport { cn } from \"../../utils\";\nimport {\n getSpacingClass,\n getTypographySizeFromFontSize,\n getTypographyWeightFromFontWeight,\n} from \"../../tokens\";\nimport type { FieldValues, Path, RegisterOptions } from \"react-hook-form\";\nimport type { ReactNode } from \"react\";\nimport type { UseFormReturn } from \"react-hook-form\";\n\nexport interface FormFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n> {\n name: Path<TFieldValues>;\n label?: string;\n children: (props: {\n name: string;\n register: (\n fieldName: Path<TFieldValues>,\n ) => ReturnType<UseFormReturn<TFieldValues>[\"register\"]>;\n error?: string;\n value?: unknown;\n onChange?: ReturnType<UseFormReturn<TFieldValues>[\"register\"]>[\"onChange\"];\n onBlur?: ReturnType<UseFormReturn<TFieldValues>[\"register\"]>[\"onBlur\"];\n }) => ReactNode;\n rules?: RegisterOptions<TFieldValues>;\n className?: string;\n}\n\n/**\n * FormField Component\n *\n * A wrapper component for form fields that integrates with react-hook-form.\n * Provides register, error, and validation state to children.\n *\n * @example\n * ```tsx\n * <FormField name=\"email\" label=\"Email\">\n * {({ register, error }) => (\n * <>\n * <Label htmlFor=\"email\">Email</Label>\n * <Input id=\"email\" {...register('email')} />\n * {error && <ErrorMessage>{error}</ErrorMessage>}\n * </>\n * )}\n * </FormField>\n * ```\n */\nexport function FormField<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n children,\n rules,\n className = \"\",\n}: FormFieldProps<TFieldValues>) {\n const { form } = useFormContext<TFieldValues>();\n\n if (!form) {\n throw new Error(\n \"FormField must be used within a Form component with react-hook-form integration\",\n );\n }\n\n const {\n register,\n formState: { errors },\n watch,\n } = form;\n\n const fieldRegister = register(name, rules);\n const error = errors[name]?.message as string | undefined;\n const value = watch(name);\n\n return (\n <div\n className={cn(\n \"flex\",\n \"flex-col\",\n getSpacingClass(\"sm\", \"gap\"),\n className,\n )}\n >\n {label && (\n <Label\n htmlFor={name}\n className={cn(\n \"block\",\n getTypographySizeFromFontSize(\"sm\"),\n getTypographyWeightFromFontWeight(\"medium\"),\n \"text-fg-primary\",\n )}\n >\n {label}\n </Label>\n )}\n {children({\n name,\n register: (fieldName: Path<TFieldValues>) => register(fieldName, rules),\n error,\n value,\n onChange: fieldRegister.onChange,\n onBlur: fieldRegister.onBlur,\n })}\n {error && <ErrorMessage message={error} />}\n </div>\n );\n}\n"],"names":["FormField","name","label","children","rules","className","form","useFormContext","register","errors","watch","fieldRegister","error","_a","value","jsxs","cn","getSpacingClass","jsx","Label","getTypographySizeFromFontSize","getTypographyWeightFromFontWeight","fieldName","ErrorMessage"],"mappings":";;;;;;;;AAoDO,SAASA,EAA0D;AAAA,EACxE,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC,IAAY;AACd,GAAiC;;AAC/B,QAAM,EAAE,MAAAC,EAAA,IAASC,EAAA;AAEjB,MAAI,CAACD;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,QAAM;AAAA,IACJ,UAAAE;AAAA,IACA,WAAW,EAAE,QAAAC,EAAA;AAAA,IACb,OAAAC;AAAA,EAAA,IACEJ,GAEEK,IAAgBH,EAASP,GAAMG,CAAK,GACpCQ,KAAQC,IAAAJ,EAAOR,CAAI,MAAX,gBAAAY,EAAc,SACtBC,IAAQJ,EAAMT,CAAI;AAExB,SACE,gBAAAc;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACA;AAAA,QACAC,EAAgB,MAAM,KAAK;AAAA,QAC3BZ;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAAH,KACC,gBAAAgB;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,SAASlB;AAAA,YACT,WAAWe;AAAA,cACT;AAAA,cACAI,EAA8B,IAAI;AAAA,cAClCC,EAAkC,QAAQ;AAAA,cAC1C;AAAA,YAAA;AAAA,YAGD,UAAAnB;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJC,EAAS;AAAA,UACR,MAAAF;AAAA,UACA,UAAU,CAACqB,MAAkCd,EAASc,GAAWlB,CAAK;AAAA,UACtE,OAAAQ;AAAA,UACA,OAAAE;AAAA,UACA,UAAUH,EAAc;AAAA,UACxB,QAAQA,EAAc;AAAA,QAAA,CACvB;AAAA,QACAC,KAAS,gBAAAM,EAACK,GAAA,EAAa,SAASX,EAAA,CAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG9C;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
+
import { FormContextProvider as n } from "./FormContext.js";
|
|
4
|
+
function c({
|
|
5
|
+
form: o,
|
|
6
|
+
loading: e = !1,
|
|
7
|
+
children: r
|
|
8
|
+
}) {
|
|
9
|
+
return /* @__PURE__ */ t(n, { value: {
|
|
10
|
+
form: o,
|
|
11
|
+
loading: e
|
|
12
|
+
}, children: r });
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
c as FormProvider
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=FormProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormProvider.js","sources":["../../../../../src/ui/components/Form/FormProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { FormContextProvider, type FormContextValue } from \"./FormContext\";\nimport type { ReactNode } from \"react\";\nimport type { FieldValues, UseFormReturn } from \"react-hook-form\";\n\nexport interface FormProviderProps<\n TFieldValues extends FieldValues = FieldValues,\n> {\n form?: UseFormReturn<TFieldValues>;\n loading?: boolean;\n children: ReactNode;\n}\n\n/**\n * FormProvider Component\n *\n * Provides react-hook-form context to form children.\n * Used internally by Form component when react-hook-form is integrated.\n */\nexport function FormProvider<TFieldValues extends FieldValues = FieldValues>({\n form,\n loading = false,\n children,\n}: FormProviderProps<TFieldValues>) {\n const contextValue: FormContextValue<TFieldValues> = {\n form,\n loading,\n };\n\n return (\n <FormContextProvider value={contextValue}>{children}</FormContextProvider>\n );\n}\n"],"names":["FormProvider","form","loading","children","jsx","FormContextProvider"],"mappings":";;;AAoBO,SAASA,EAA6D;AAAA,EAC3E,MAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,UAAAC;AACF,GAAoC;AAMlC,SACE,gBAAAC,EAACC,GAAA,EAAoB,OAN8B;AAAA,IACnD,MAAAJ;AAAA,IACA,SAAAC;AAAA,EAAA,GAI2C,UAAAC,EAAA,CAAS;AAExD;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var u = Object.defineProperty, s = Object.defineProperties;
|
|
3
|
+
var c = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var e = Object.getOwnPropertySymbols;
|
|
5
|
+
var F = Object.prototype.hasOwnProperty, a = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var n = (o, r, t) => r in o ? u(o, r, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[r] = t, i = (o, r) => {
|
|
7
|
+
for (var t in r || (r = {}))
|
|
8
|
+
F.call(r, t) && n(o, t, r[t]);
|
|
9
|
+
if (e)
|
|
10
|
+
for (var t of e(r))
|
|
11
|
+
a.call(r, t) && n(o, t, r[t]);
|
|
12
|
+
return o;
|
|
13
|
+
}, m = (o, r) => s(o, c(r));
|
|
14
|
+
import { useFormContext as f } from "./FormContext.js";
|
|
15
|
+
import { useFieldArray as l } from "react-hook-form";
|
|
16
|
+
function w(o) {
|
|
17
|
+
const { form: r } = f();
|
|
18
|
+
if (!r)
|
|
19
|
+
throw new Error(
|
|
20
|
+
"useFormFieldArray must be used within a Form component with react-hook-form integration"
|
|
21
|
+
);
|
|
22
|
+
return l(m(i({}, o), {
|
|
23
|
+
control: r.control
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
w as useFormFieldArray
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=useFormFieldArray.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFormFieldArray.js","sources":["../../../../../src/ui/components/Form/useFormFieldArray.ts"],"sourcesContent":["\"use client\";\n\nimport { useFormContext } from \"./FormContext\";\nimport { useFieldArray } from \"react-hook-form\";\nimport type {\n ArrayPath,\n FieldValues,\n UseFieldArrayProps,\n} from \"react-hook-form\";\n\n/**\n * Hook for managing field arrays in forms\n *\n * Wrapper around react-hook-form's useFieldArray that integrates with Form context.\n *\n * @example\n * ```tsx\n * const { fields, append, remove } = useFormFieldArray({\n * name: 'items',\n * });\n *\n * return (\n * <>\n * {fields.map((field, index) => (\n * <div key={field.id}>\n * <FormField name={`items.${index}.name`}>\n * {({ register }) => <Input {...register(`items.${index}.name`)} />}\n * </FormField>\n * <Button onClick={() => remove(index)}>Remove</Button>\n * </div>\n * ))}\n * <Button onClick={() => append({ name: '' })}>Add Item</Button>\n * </>\n * );\n * ```\n */\nexport function useFormFieldArray<\n TFieldValues extends FieldValues = FieldValues,\n TFieldArrayName extends ArrayPath<TFieldValues> = ArrayPath<TFieldValues>,\n>(props: Omit<UseFieldArrayProps<TFieldValues, TFieldArrayName>, \"control\">) {\n const { form } = useFormContext<TFieldValues>();\n\n if (!form) {\n throw new Error(\n \"useFormFieldArray must be used within a Form component with react-hook-form integration\",\n );\n }\n\n return useFieldArray<TFieldValues, TFieldArrayName>({\n ...props,\n control: form.control,\n });\n}\n"],"names":["useFormFieldArray","props","form","useFormContext","useFieldArray","__spreadProps","__spreadValues"],"mappings":";;;;;;;;;;;;;;;AAoCO,SAASA,EAGdC,GAA2E;AAC3E,QAAM,EAAE,MAAAC,EAAA,IAASC,EAAA;AAEjB,MAAI,CAACD;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,SAAOE,EAA6CC,EAAAC,EAAA,IAC/CL,IAD+C;AAAA,IAElD,SAASC,EAAK;AAAA,EAAA,EACf;AACH;"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var E = Object.defineProperty, F = Object.defineProperties;
|
|
3
|
+
var P = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var N = Object.getOwnPropertySymbols;
|
|
5
|
+
var V = Object.prototype.hasOwnProperty, W = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var v = (t, i, e) => i in t ? E(t, i, { enumerable: !0, configurable: !0, writable: !0, value: e }) : t[i] = e, p = (t, i) => {
|
|
7
|
+
for (var e in i || (i = {}))
|
|
8
|
+
V.call(i, e) && v(t, e, i[e]);
|
|
9
|
+
if (N)
|
|
10
|
+
for (var e of N(i))
|
|
11
|
+
W.call(i, e) && v(t, e, i[e]);
|
|
12
|
+
return t;
|
|
13
|
+
}, f = (t, i) => F(t, P(i));
|
|
14
|
+
var C = (t, i, e) => new Promise((S, r) => {
|
|
15
|
+
var c = (n) => {
|
|
16
|
+
try {
|
|
17
|
+
l(e.next(n));
|
|
18
|
+
} catch (s) {
|
|
19
|
+
r(s);
|
|
20
|
+
}
|
|
21
|
+
}, d = (n) => {
|
|
22
|
+
try {
|
|
23
|
+
l(e.throw(n));
|
|
24
|
+
} catch (s) {
|
|
25
|
+
r(s);
|
|
26
|
+
}
|
|
27
|
+
}, l = (n) => n.done ? S(n.value) : Promise.resolve(n.value).then(c, d);
|
|
28
|
+
l((e = e.apply(t, i)).next());
|
|
29
|
+
});
|
|
30
|
+
import { jsx as o, jsxs as h } from "react/jsx-runtime";
|
|
31
|
+
import { useState as b } from "react";
|
|
32
|
+
import { Container as _ } from "../../layouts/Container/Container.js";
|
|
33
|
+
import { Stack as $ } from "../../layouts/Stack/Stack.js";
|
|
34
|
+
import { getRadiusClass as z } from "../../tokens/radius.js";
|
|
35
|
+
import { getSpacingClass as u } from "../../tokens/spacing.js";
|
|
36
|
+
import B from "../Stepper/Stepper.js";
|
|
37
|
+
import { Button as k } from "../../primitives/Button/Button.js";
|
|
38
|
+
function K({
|
|
39
|
+
steps: t,
|
|
40
|
+
onComplete: i,
|
|
41
|
+
allowBackNavigation: e = !0,
|
|
42
|
+
showStepNumbers: S = !0
|
|
43
|
+
}) {
|
|
44
|
+
const [r, c] = b(0), [d, l] = b({}), [n, s] = b({}), w = () => C(null, null, function* () {
|
|
45
|
+
const a = t[r];
|
|
46
|
+
if (a.validate && !(yield a.validate())) {
|
|
47
|
+
s(f(p({}, n), { [r]: !0 }));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
s(f(p({}, n), { [r]: !1 })), a.onSubmit && (yield a.onSubmit(d)), r < t.length - 1 ? c(r + 1) : i && i(d);
|
|
51
|
+
}), y = () => {
|
|
52
|
+
r > 0 && e && (c(r - 1), s(f(p({}, n), { [r - 1]: !1 })));
|
|
53
|
+
}, j = (a) => {
|
|
54
|
+
e && a < r && c(a);
|
|
55
|
+
}, m = t[r], D = r === t.length - 1, x = n[r] === !0;
|
|
56
|
+
return /* @__PURE__ */ o(_, { maxWidth: "lg", paddingX: "base", paddingY: "lg", children: /* @__PURE__ */ h($, { spacing: "lg", children: [
|
|
57
|
+
/* @__PURE__ */ o(
|
|
58
|
+
B,
|
|
59
|
+
{
|
|
60
|
+
steps: t.map((a, g) => ({
|
|
61
|
+
id: a.id,
|
|
62
|
+
title: a.title,
|
|
63
|
+
content: a.content,
|
|
64
|
+
description: a.description,
|
|
65
|
+
status: g < r ? "completed" : g === r ? x ? "error" : "active" : "pending"
|
|
66
|
+
})),
|
|
67
|
+
currentStep: r,
|
|
68
|
+
onStepChange: j,
|
|
69
|
+
allowNavigation: e
|
|
70
|
+
}
|
|
71
|
+
),
|
|
72
|
+
/* @__PURE__ */ o(
|
|
73
|
+
"div",
|
|
74
|
+
{
|
|
75
|
+
className: `bg-surface-base ${z("lg")} border ${u("lg", "p")}`,
|
|
76
|
+
children: /* @__PURE__ */ h($, { spacing: "md", children: [
|
|
77
|
+
/* @__PURE__ */ h("div", { children: [
|
|
78
|
+
/* @__PURE__ */ o("h2", { className: "text-2xl font-semibold", children: m.title }),
|
|
79
|
+
m.description && /* @__PURE__ */ o(
|
|
80
|
+
"p",
|
|
81
|
+
{
|
|
82
|
+
className: `text-fg-secondary ${u("xs", "mt")}`,
|
|
83
|
+
children: m.description
|
|
84
|
+
}
|
|
85
|
+
)
|
|
86
|
+
] }),
|
|
87
|
+
x && /* @__PURE__ */ o(
|
|
88
|
+
"div",
|
|
89
|
+
{
|
|
90
|
+
className: `bg-error-bg border border-error-border rounded ${u("md", "p")}`,
|
|
91
|
+
children: /* @__PURE__ */ o("p", { className: "text-sm text-fg-error", children: "Please fix the errors before proceeding." })
|
|
92
|
+
}
|
|
93
|
+
),
|
|
94
|
+
/* @__PURE__ */ o("div", { className: "min-h-48", children: m.fields }),
|
|
95
|
+
/* @__PURE__ */ h(
|
|
96
|
+
"div",
|
|
97
|
+
{
|
|
98
|
+
className: `flex justify-between ${u("base", "pt")} border-t`,
|
|
99
|
+
children: [
|
|
100
|
+
/* @__PURE__ */ o(
|
|
101
|
+
k,
|
|
102
|
+
{
|
|
103
|
+
variant: "outline",
|
|
104
|
+
onClick: y,
|
|
105
|
+
disabled: r === 0,
|
|
106
|
+
children: "Back"
|
|
107
|
+
}
|
|
108
|
+
),
|
|
109
|
+
/* @__PURE__ */ o(k, { variant: "primary", onClick: w, children: D ? "Complete" : "Next" })
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
)
|
|
113
|
+
] })
|
|
114
|
+
}
|
|
115
|
+
)
|
|
116
|
+
] }) });
|
|
117
|
+
}
|
|
118
|
+
export {
|
|
119
|
+
K as FormWizardPattern
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=FormWizardPattern.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormWizardPattern.js","sources":["../../../../../src/ui/components/FormWizardPattern/FormWizardPattern.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { Stepper } from \"../../components\";\nimport { Container } from \"../../layouts/Container/Container\";\nimport { Stack } from \"../../layouts/Stack/Stack\";\nimport { Button } from \"../../primitives\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport type { StepperStep } from \"../../components\";\n\nexport interface FormWizardStep extends StepperStep {\n /**\n * Form fields for this step\n */\n fields: React.ReactNode;\n /**\n * Validation function for this step\n */\n validate?: () => boolean | Promise<boolean>;\n /**\n * Submit handler for this step\n */\n onSubmit?: (data: unknown) => void | Promise<void>;\n}\n\nexport interface FormWizardPatternProps {\n /**\n * Steps configuration\n */\n steps: FormWizardStep[];\n /**\n * Callback when wizard is completed\n */\n onComplete?: (data: Record<string, unknown>) => void;\n /**\n * Allow navigation to previous steps\n * @default true\n */\n allowBackNavigation?: boolean;\n /**\n * Show step numbers\n * @default true\n */\n showStepNumbers?: boolean;\n}\n\n/**\n * FormWizardPattern - A complete form wizard pattern combining Stepper and Form\n *\n * This pattern solves the common UX problem of multi-step forms with validation.\n * It combines Stepper for navigation and Form for data collection.\n *\n * @example\n * ```tsx\n * <FormWizardPattern\n * steps={steps}\n * onComplete={(data) => console.log(data)}\n * />\n * ```\n */\nexport function FormWizardPattern({\n steps,\n onComplete,\n allowBackNavigation = true,\n showStepNumbers: _showStepNumbers = true,\n}: FormWizardPatternProps) {\n const [currentStep, setCurrentStep] = useState(0);\n const [formData, _setFormData] = useState<Record<string, unknown>>({});\n const [errors, setErrors] = useState<Record<number, boolean>>({});\n\n const handleNext = async () => {\n const step = steps[currentStep];\n\n // Validate current step if validation function exists\n if (step.validate) {\n const isValid = await step.validate();\n if (!isValid) {\n setErrors({ ...errors, [currentStep]: true });\n return;\n }\n }\n\n // Clear error for current step\n setErrors({ ...errors, [currentStep]: false });\n\n // Submit current step if handler exists\n if (step.onSubmit) {\n await step.onSubmit(formData);\n }\n\n // Move to next step\n if (currentStep < steps.length - 1) {\n setCurrentStep(currentStep + 1);\n } else {\n // Wizard completed\n if (onComplete) {\n onComplete(formData);\n }\n }\n };\n\n const handleBack = () => {\n if (currentStep > 0 && allowBackNavigation) {\n setCurrentStep(currentStep - 1);\n // Clear error when going back\n setErrors({ ...errors, [currentStep - 1]: false });\n }\n };\n\n const handleStepClick = (stepIndex: number) => {\n if (allowBackNavigation && stepIndex < currentStep) {\n setCurrentStep(stepIndex);\n }\n };\n\n const currentStepData = steps[currentStep];\n const isLastStep = currentStep === steps.length - 1;\n const hasError = errors[currentStep] === true;\n\n return (\n <Container maxWidth=\"lg\" paddingX=\"base\" paddingY=\"lg\">\n <Stack spacing=\"lg\">\n {/* Stepper */}\n <Stepper\n steps={steps.map((step, index) => ({\n id: step.id,\n title: step.title,\n content: step.content,\n description: step.description,\n status:\n index < currentStep\n ? \"completed\"\n : index === currentStep\n ? hasError\n ? \"error\"\n : \"active\"\n : \"pending\",\n }))}\n currentStep={currentStep}\n onStepChange={handleStepClick}\n allowNavigation={allowBackNavigation}\n />\n\n {/* Form Content */}\n <div\n className={`bg-surface-base ${getRadiusClass(\"lg\")} border ${getSpacingClass(\"lg\", \"p\")}`}\n >\n <Stack spacing=\"md\">\n <div>\n <h2 className=\"text-2xl font-semibold\">\n {currentStepData.title}\n </h2>\n {currentStepData.description && (\n <p\n className={`text-fg-secondary ${getSpacingClass(\"xs\", \"mt\")}`}\n >\n {currentStepData.description}\n </p>\n )}\n </div>\n\n {hasError && (\n <div\n className={`bg-error-bg border border-error-border rounded ${getSpacingClass(\"md\", \"p\")}`}\n >\n <p className=\"text-sm text-fg-error\">\n Please fix the errors before proceeding.\n </p>\n </div>\n )}\n\n <div className=\"min-h-48\">{currentStepData.fields}</div>\n\n {/* Navigation Buttons */}\n <div\n className={`flex justify-between ${getSpacingClass(\"base\", \"pt\")} border-t`}\n >\n <Button\n variant=\"outline\"\n onClick={handleBack}\n disabled={currentStep === 0}\n >\n Back\n </Button>\n <Button variant=\"primary\" onClick={handleNext}>\n {isLastStep ? \"Complete\" : \"Next\"}\n </Button>\n </div>\n </Stack>\n </div>\n </Stack>\n </Container>\n );\n}\n"],"names":["FormWizardPattern","steps","onComplete","allowBackNavigation","_showStepNumbers","currentStep","setCurrentStep","useState","formData","_setFormData","errors","setErrors","handleNext","__async","step","__spreadProps","__spreadValues","handleBack","handleStepClick","stepIndex","currentStepData","isLastStep","hasError","jsx","Container","jsxs","Stack","Stepper","index","getRadiusClass","getSpacingClass","Button"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DO,SAASA,EAAkB;AAAA,EAChC,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,qBAAAC,IAAsB;AAAA,EACtB,iBAAiBC,IAAmB;AACtC,GAA2B;AACzB,QAAM,CAACC,GAAaC,CAAc,IAAIC,EAAS,CAAC,GAC1C,CAACC,GAAUC,CAAY,IAAIF,EAAkC,CAAA,CAAE,GAC/D,CAACG,GAAQC,CAAS,IAAIJ,EAAkC,CAAA,CAAE,GAE1DK,IAAa,MAAYC,EAAA;AAC7B,UAAMC,IAAOb,EAAMI,CAAW;AAG9B,QAAIS,EAAK,YAEH,EADY,MAAMA,EAAK,SAAA,IACb;AACZ,MAAAH,EAAUI,EAAAC,EAAA,IAAKN,IAAL,EAAa,CAACL,CAAW,GAAG,KAAM;AAC5C;AAAA,IACF;AAIF,IAAAM,EAAUI,EAAAC,EAAA,IAAKN,IAAL,EAAa,CAACL,CAAW,GAAG,KAAO,GAGzCS,EAAK,aACP,MAAMA,EAAK,SAASN,CAAQ,IAI1BH,IAAcJ,EAAM,SAAS,IAC/BK,EAAeD,IAAc,CAAC,IAG1BH,KACFA,EAAWM,CAAQ;AAAA,EAGzB,IAEMS,IAAa,MAAM;AACvB,IAAIZ,IAAc,KAAKF,MACrBG,EAAeD,IAAc,CAAC,GAE9BM,EAAUI,EAAAC,EAAA,IAAKN,IAAL,EAAa,CAACL,IAAc,CAAC,GAAG,KAAO;AAAA,EAErD,GAEMa,IAAkB,CAACC,MAAsB;AAC7C,IAAIhB,KAAuBgB,IAAYd,KACrCC,EAAea,CAAS;AAAA,EAE5B,GAEMC,IAAkBnB,EAAMI,CAAW,GACnCgB,IAAahB,MAAgBJ,EAAM,SAAS,GAC5CqB,IAAWZ,EAAOL,CAAW,MAAM;AAEzC,SACE,gBAAAkB,EAACC,GAAA,EAAU,UAAS,MAAK,UAAS,QAAO,UAAS,MAChD,UAAA,gBAAAC,EAACC,GAAA,EAAM,SAAQ,MAEb,UAAA;AAAA,IAAA,gBAAAH;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,OAAO1B,EAAM,IAAI,CAACa,GAAMc,OAAW;AAAA,UACjC,IAAId,EAAK;AAAA,UACT,OAAOA,EAAK;AAAA,UACZ,SAASA,EAAK;AAAA,UACd,aAAaA,EAAK;AAAA,UAClB,QACEc,IAAQvB,IACJ,cACAuB,MAAUvB,IACRiB,IACE,UACA,WACF;AAAA,QAAA,EACR;AAAA,QACF,aAAAjB;AAAA,QACA,cAAca;AAAA,QACd,iBAAiBf;AAAA,MAAA;AAAA,IAAA;AAAA,IAInB,gBAAAoB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,mBAAmBM,EAAe,IAAI,CAAC,WAAWC,EAAgB,MAAM,GAAG,CAAC;AAAA,QAEvF,UAAA,gBAAAL,EAACC,GAAA,EAAM,SAAQ,MACb,UAAA;AAAA,UAAA,gBAAAD,EAAC,OAAA,EACC,UAAA;AAAA,YAAA,gBAAAF,EAAC,MAAA,EAAG,WAAU,0BACX,UAAAH,EAAgB,OACnB;AAAA,YACCA,EAAgB,eACf,gBAAAG;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW,qBAAqBO,EAAgB,MAAM,IAAI,CAAC;AAAA,gBAE1D,UAAAV,EAAgB;AAAA,cAAA;AAAA,YAAA;AAAA,UACnB,GAEJ;AAAA,UAECE,KACC,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,kDAAkDO,EAAgB,MAAM,GAAG,CAAC;AAAA,cAEvF,UAAA,gBAAAP,EAAC,KAAA,EAAE,WAAU,yBAAwB,UAAA,2CAAA,CAErC;AAAA,YAAA;AAAA,UAAA;AAAA,UAIJ,gBAAAA,EAAC,OAAA,EAAI,WAAU,YAAY,YAAgB,QAAO;AAAA,UAGlD,gBAAAE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,wBAAwBK,EAAgB,QAAQ,IAAI,CAAC;AAAA,cAEhE,UAAA;AAAA,gBAAA,gBAAAP;AAAA,kBAACQ;AAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,SAASd;AAAA,oBACT,UAAUZ,MAAgB;AAAA,oBAC3B,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGD,gBAAAkB,EAACQ,KAAO,SAAQ,WAAU,SAASnB,GAChC,UAAAS,IAAa,aAAa,OAAA,CAC7B;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,EAAA,CACF,EAAA,CACF;AAEJ;"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var w = Object.defineProperty, x = Object.defineProperties;
|
|
3
|
+
var C = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var n = Object.getOwnPropertySymbols;
|
|
5
|
+
var b = Object.prototype.hasOwnProperty, g = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var p = (e, r, a) => r in e ? w(e, r, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[r] = a, d = (e, r) => {
|
|
7
|
+
for (var a in r || (r = {}))
|
|
8
|
+
b.call(r, a) && p(e, a, r[a]);
|
|
9
|
+
if (n)
|
|
10
|
+
for (var a of n(r))
|
|
11
|
+
g.call(r, a) && p(e, a, r[a]);
|
|
12
|
+
return e;
|
|
13
|
+
}, m = (e, r) => x(e, C(r));
|
|
14
|
+
var v = (e, r) => {
|
|
15
|
+
var a = {};
|
|
16
|
+
for (var o in e)
|
|
17
|
+
b.call(e, o) && r.indexOf(o) < 0 && (a[o] = e[o]);
|
|
18
|
+
if (e != null && n)
|
|
19
|
+
for (var o of n(e))
|
|
20
|
+
r.indexOf(o) < 0 && g.call(e, o) && (a[o] = e[o]);
|
|
21
|
+
return a;
|
|
22
|
+
};
|
|
23
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
24
|
+
import { HeaderProvider as h } from "./contexts/HeaderContext.js";
|
|
25
|
+
import { HeaderLogo as M } from "./components/HeaderLogo.js";
|
|
26
|
+
import { HeaderNavigation as N } from "./components/HeaderNavigation.js";
|
|
27
|
+
import { HeaderActions as j } from "./components/HeaderActions.js";
|
|
28
|
+
import { HeaderHamburger as k } from "./components/HeaderHamburger.js";
|
|
29
|
+
import { HeaderMobileMenu as y } from "./components/HeaderMobileMenu.js";
|
|
30
|
+
import { getShadowClass as A } from "../../tokens/shadows.js";
|
|
31
|
+
import { getSpacingClass as L } from "../../tokens/spacing.js";
|
|
32
|
+
import { getZIndexClass as S } from "../../tokens/z-index.js";
|
|
33
|
+
import { cn as s } from "../../utils/cn.js";
|
|
34
|
+
import { Container as V } from "../../layouts/Container/Container.js";
|
|
35
|
+
import { cva as $ } from "../../utils/cva.js";
|
|
36
|
+
const I = $(
|
|
37
|
+
// Base classes
|
|
38
|
+
s("w-full", "bg-surface-base", "transition-shadow", "transition-colors"),
|
|
39
|
+
{
|
|
40
|
+
variants: {
|
|
41
|
+
variant: {
|
|
42
|
+
default: "",
|
|
43
|
+
elevated: A("sm"),
|
|
44
|
+
bordered: s("border-b", "border-line-muted")
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
defaultVariants: {
|
|
48
|
+
variant: "default"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
function i(P) {
|
|
53
|
+
var c = P, {
|
|
54
|
+
children: e,
|
|
55
|
+
variant: r = "default",
|
|
56
|
+
sticky: a = !1,
|
|
57
|
+
maxWidth: o = "full",
|
|
58
|
+
bare: H = !1,
|
|
59
|
+
className: l
|
|
60
|
+
} = c, f = v(c, [
|
|
61
|
+
"children",
|
|
62
|
+
"variant",
|
|
63
|
+
"sticky",
|
|
64
|
+
"maxWidth",
|
|
65
|
+
"bare",
|
|
66
|
+
"className"
|
|
67
|
+
]);
|
|
68
|
+
const u = /* @__PURE__ */ t(
|
|
69
|
+
"div",
|
|
70
|
+
{
|
|
71
|
+
className: `flex items-center justify-between ${L("base", "gap")}`,
|
|
72
|
+
children: e
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
return H ? /* @__PURE__ */ t(h, { children: /* @__PURE__ */ t("div", m(d({ className: s(l) }, f), { children: u })) }) : /* @__PURE__ */ t(h, { children: /* @__PURE__ */ t(
|
|
76
|
+
"header",
|
|
77
|
+
m(d({
|
|
78
|
+
className: s(
|
|
79
|
+
I({ variant: r }),
|
|
80
|
+
a && `sticky top-0 ${S("sticky")}`,
|
|
81
|
+
a && "backdrop-blur-sm bg-surface-base/95",
|
|
82
|
+
l
|
|
83
|
+
)
|
|
84
|
+
}, f), {
|
|
85
|
+
children: /* @__PURE__ */ t(V, { maxWidth: o, paddingX: "base", paddingY: "sm", children: u })
|
|
86
|
+
})
|
|
87
|
+
) });
|
|
88
|
+
}
|
|
89
|
+
i.Logo = M;
|
|
90
|
+
i.Navigation = N;
|
|
91
|
+
i.Actions = j;
|
|
92
|
+
i.Hamburger = k;
|
|
93
|
+
i.MobileMenu = y;
|
|
94
|
+
export {
|
|
95
|
+
i as Header,
|
|
96
|
+
i as default
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=Header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.js","sources":["../../../../../src/ui/components/Header/Header.tsx"],"sourcesContent":["/**\n * Header Component\n *\n * Horizontal header component with logo, navigation, and actions slots.\n * Uses compound components pattern for maximum flexibility.\n *\n * @see EPIC-002: Header Component (Molecule)\n * @see RFC-003: Header Composition Pattern (APPROVED)\n * @see ADR-002: Header + SideNavbar Compatibility (ACCEPTED)\n */\n\n\"use client\";\n\nimport { HeaderProvider } from \"./contexts/HeaderContext\";\nimport { HeaderLogo } from \"./components/HeaderLogo\";\nimport { HeaderNavigation } from \"./components/HeaderNavigation\";\nimport { HeaderActions } from \"./components/HeaderActions\";\nimport { HeaderHamburger } from \"./components/HeaderHamburger\";\nimport { HeaderMobileMenu } from \"./components/HeaderMobileMenu\";\nimport { getShadowClass } from \"../../tokens/shadows\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\nimport type { HeaderProps } from \"./types\";\nimport { cn, cva } from \"../../utils\";\nimport { Container } from \"../../layouts\";\n\n/**\n * Header Variants using CVA\n * Type-safe variant system for Header component\n */\nconst headerVariants = cva(\n // Base classes\n cn(\"w-full\", \"bg-surface-base\", \"transition-shadow\", \"transition-colors\"),\n {\n variants: {\n variant: {\n default: \"\",\n elevated: getShadowClass(\"sm\"),\n bordered: cn(\"border-b\", \"border-line-muted\"),\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\n/**\n * Header Component\n *\n * Horizontal header with compound components pattern.\n *\n * @example\n * ```tsx\n * <Header>\n * <Header.Logo href=\"/\">MyApp</Header.Logo>\n * <Header.Navigation>\n * <NavLink href=\"/home\">Home</NavLink>\n * <NavLink href=\"/about\">About</NavLink>\n * </Header.Navigation>\n * <Header.Actions>\n * <Button>Sign In</Button>\n * </Header.Actions>\n * </Header>\n * ```\n */\nexport function Header({\n children,\n variant = \"default\",\n sticky = false,\n maxWidth = \"full\",\n bare = false,\n className,\n ...props\n}: HeaderProps) {\n const content = (\n <div\n className={`flex items-center justify-between ${getSpacingClass(\"base\", \"gap\")}`}\n >\n {/* Children are rendered here - compound components handle their own layout */}\n {children}\n </div>\n );\n\n // Bare mode: Just render content without header/Container wrapper\n // Useful when used inside DashboardLayout which provides the wrapper\n if (bare) {\n return (\n <HeaderProvider>\n <div className={cn(className)} {...props}>\n {content}\n </div>\n </HeaderProvider>\n );\n }\n\n // Normal mode: Create header element with Container\n return (\n <HeaderProvider>\n <header\n className={cn(\n headerVariants({ variant }),\n sticky && `sticky top-0 ${getZIndexClass(\"sticky\")}`,\n sticky && \"backdrop-blur-sm bg-surface-base/95\",\n className,\n )}\n {...props}\n >\n <Container maxWidth={maxWidth} paddingX=\"base\" paddingY=\"sm\">\n {content}\n </Container>\n </header>\n </HeaderProvider>\n );\n}\n\n// Compound Components\nHeader.Logo = HeaderLogo;\nHeader.Navigation = HeaderNavigation;\nHeader.Actions = HeaderActions;\nHeader.Hamburger = HeaderHamburger;\nHeader.MobileMenu = HeaderMobileMenu;\n\nexport default Header;\n"],"names":["headerVariants","cva","cn","getShadowClass","Header","_a","_b","children","variant","sticky","maxWidth","bare","className","props","__objRest","content","jsx","getSpacingClass","HeaderProvider","__spreadProps","__spreadValues","getZIndexClass","Container","HeaderLogo","HeaderNavigation","HeaderActions","HeaderHamburger","HeaderMobileMenu"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,MAAMA,IAAiBC;AAAA;AAAA,EAErBC,EAAG,UAAU,mBAAmB,qBAAqB,mBAAmB;AAAA,EACxE;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,UAAUC,EAAe,IAAI;AAAA,QAC7B,UAAUD,EAAG,YAAY,mBAAmB;AAAA,MAAA;AAAA,IAC9C;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ;AAqBO,SAASE,EAAOC,GAQP;AARO,MAAAC,IAAAD,GACrB;AAAA,cAAAE;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,QAAAC,IAAS;AAAA,IACT,UAAAC,IAAW;AAAA,IACX,MAAAC,IAAO;AAAA,IACP,WAAAC;AAAA,MANqBN,GAOlBO,IAAAC,EAPkBR,GAOlB;AAAA,IANH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAMS,IACJ,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,qCAAqCC,EAAgB,QAAQ,KAAK,CAAC;AAAA,MAG7E,UAAAV;AAAA,IAAA;AAAA,EAAA;AAML,SAAII,IAEA,gBAAAK,EAACE,GAAA,EACC,UAAA,gBAAAF,EAAC,OAAAG,EAAAC,EAAA,EAAI,WAAWlB,EAAGU,CAAS,KAAOC,IAAlC,EACE,UAAAE,EAAA,EACH,GACF,sBAMDG,GAAA,EACC,UAAA,gBAAAF;AAAA,IAAC;AAAA,IAAAG,EAAAC,EAAA;AAAA,MACC,WAAWlB;AAAA,QACTF,EAAe,EAAE,SAAAQ,GAAS;AAAA,QAC1BC,KAAU,gBAAgBY,EAAe,QAAQ,CAAC;AAAA,QAClDZ,KAAU;AAAA,QACVG;AAAA,MAAA;AAAA,OAEEC,IAPL;AAAA,MASC,4BAACS,GAAA,EAAU,UAAAZ,GAAoB,UAAS,QAAO,UAAS,MACrD,UAAAK,EAAA,CACH;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AAGAX,EAAO,OAAOmB;AACdnB,EAAO,aAAaoB;AACpBpB,EAAO,UAAUqB;AACjBrB,EAAO,YAAYsB;AACnBtB,EAAO,aAAauB;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
+
import { getSpacingClass as i } from "../../../tokens/spacing.js";
|
|
4
|
+
import { cn as s } from "../../../utils/cn.js";
|
|
5
|
+
function c({ children: e, className: r }) {
|
|
6
|
+
return /* @__PURE__ */ t(
|
|
7
|
+
"div",
|
|
8
|
+
{
|
|
9
|
+
className: s(
|
|
10
|
+
"flex-shrink-0 flex items-center",
|
|
11
|
+
i("sm", "gap"),
|
|
12
|
+
r
|
|
13
|
+
),
|
|
14
|
+
children: e
|
|
15
|
+
}
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
c as HeaderActions
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=HeaderActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeaderActions.js","sources":["../../../../../../src/ui/components/Header/components/HeaderActions.tsx"],"sourcesContent":["/**\n * HeaderActions Component\n *\n * Actions slot component for Header (typically buttons, user menu, etc.).\n *\n * @see EPIC-002: Header Component (Molecule)\n * @see RFC-003: Header Composition Pattern (APPROVED)\n */\n\n\"use client\";\n\nimport { type ReactNode } from \"react\";\nimport { cn } from \"../../../utils\";\nimport { getSpacingClass } from \"../../../tokens/spacing\";\n\nexport interface HeaderActionsProps {\n /**\n * Actions content (typically Button components)\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * HeaderActions Component\n *\n * Actions slot for Header. Typically contains Button components or user menu.\n *\n * @example\n * ```tsx\n * <Header.Actions>\n * <Button variant=\"outline\">Sign In</Button>\n * <Button variant=\"primary\">Sign Up</Button>\n * </Header.Actions>\n * ```\n */\nexport function HeaderActions({ children, className }: HeaderActionsProps) {\n return (\n <div\n className={cn(\n \"flex-shrink-0 flex items-center\",\n getSpacingClass(\"sm\", \"gap\"),\n className,\n )}\n >\n {children}\n </div>\n );\n}\n"],"names":["HeaderActions","children","className","jsx","cn","getSpacingClass"],"mappings":";;;;AAwCO,SAASA,EAAc,EAAE,UAAAC,GAAU,WAAAC,KAAiC;AACzE,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAC,EAAgB,MAAM,KAAK;AAAA,QAC3BH;AAAA,MAAA;AAAA,MAGD,UAAAD;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|