@ahrowe/ui 0.35.0 → 0.37.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 +102 -72
- package/dist/cjs-types/common/accordion/accordion.d.ts +4 -0
- package/dist/cjs-types/common/accordion/accordion.types.d.ts +21 -0
- package/dist/cjs-types/common/accordion/index.d.ts +2 -0
- package/dist/cjs-types/common/actionButtons/actionButtons.d.ts +2 -0
- package/dist/cjs-types/common/actionButtons/actionButtons.types.d.ts +34 -0
- package/dist/cjs-types/common/actionButtons/index.d.ts +2 -0
- package/dist/cjs-types/common/actionIcon/actionIcon.d.ts +4 -0
- package/dist/cjs-types/common/actionIcon/actionIcon.types.d.ts +15 -0
- package/dist/cjs-types/common/actionIcon/index.d.ts +2 -0
- package/dist/cjs-types/common/alert/alert.d.ts +4 -0
- package/dist/cjs-types/common/alert/alert.types.d.ts +30 -0
- package/dist/cjs-types/common/alert/index.d.ts +2 -0
- package/dist/cjs-types/common/animatedIcon/animatedIcon.d.ts +3 -0
- package/dist/cjs-types/common/animatedIcon/animatedIcon.types.d.ts +25 -0
- package/dist/cjs-types/common/animatedIcon/index.d.ts +2 -0
- package/dist/cjs-types/common/animatedLogo/animatedLogo.d.ts +4 -0
- package/dist/cjs-types/common/animatedLogo/animatedLogo.types.d.ts +35 -0
- package/dist/cjs-types/common/animatedLogo/index.d.ts +2 -0
- package/dist/cjs-types/common/animatedText/animatedText.d.ts +4 -0
- package/dist/cjs-types/common/animatedText/animatedText.types.d.ts +65 -0
- package/dist/cjs-types/common/animatedText/index.d.ts +2 -0
- package/dist/cjs-types/common/avatar/avatar.d.ts +4 -0
- package/dist/cjs-types/common/avatar/avatar.types.d.ts +26 -0
- package/dist/cjs-types/common/avatar/avatarGroup.d.ts +4 -0
- package/dist/cjs-types/common/avatar/index.d.ts +3 -0
- package/dist/cjs-types/common/badge/badge.d.ts +4 -0
- package/dist/cjs-types/common/badge/badge.types.d.ts +31 -0
- package/dist/cjs-types/common/badge/index.d.ts +2 -0
- package/dist/cjs-types/common/bodyEnd/bodyEnd.d.ts +4 -0
- package/dist/cjs-types/common/bodyEnd/bodyEnd.types.d.ts +4 -0
- package/dist/cjs-types/common/bodyEnd/index.d.ts +2 -0
- package/dist/cjs-types/common/breadcrumb/breadcrumb.d.ts +4 -0
- package/dist/cjs-types/common/breadcrumb/breadcrumb.types.d.ts +33 -0
- package/dist/cjs-types/common/breadcrumb/index.d.ts +2 -0
- package/dist/cjs-types/common/button/button.d.ts +9 -0
- package/dist/cjs-types/common/button/button.types.d.ts +42 -0
- package/dist/cjs-types/common/button/index.d.ts +2 -0
- package/dist/cjs-types/common/buttonGroup/buttonGroup.d.ts +4 -0
- package/dist/cjs-types/common/buttonGroup/buttonGroup.types.d.ts +12 -0
- package/dist/cjs-types/common/buttonGroup/index.d.ts +2 -0
- package/dist/cjs-types/common/card/Card.d.ts +4 -0
- package/dist/cjs-types/common/card/CardActions.d.ts +4 -0
- package/dist/cjs-types/common/card/CardContent.d.ts +4 -0
- package/dist/cjs-types/common/card/CardHeader.d.ts +4 -0
- package/dist/cjs-types/common/card/CardMedia.d.ts +4 -0
- package/dist/cjs-types/common/card/card.types.d.ts +55 -0
- package/dist/cjs-types/common/card/index.d.ts +6 -0
- package/dist/cjs-types/common/carousel/carousel.d.ts +4 -0
- package/dist/cjs-types/common/carousel/carousel.types.d.ts +35 -0
- package/dist/cjs-types/common/carousel/index.d.ts +2 -0
- package/dist/cjs-types/common/checkbox/checkbox.d.ts +4 -0
- package/dist/cjs-types/common/checkbox/checkbox.types.d.ts +27 -0
- package/dist/cjs-types/common/checkbox/index.d.ts +2 -0
- package/dist/cjs-types/common/chip/chip.d.ts +4 -0
- package/dist/cjs-types/common/chip/chip.types.d.ts +35 -0
- package/dist/cjs-types/common/chip/chipContainer.d.ts +4 -0
- package/dist/cjs-types/common/chip/index.d.ts +3 -0
- package/dist/cjs-types/common/colorPicker/colorPicker.d.ts +4 -0
- package/dist/cjs-types/common/colorPicker/colorPicker.types.d.ts +25 -0
- package/dist/cjs-types/common/colorPicker/index.d.ts +2 -0
- package/dist/cjs-types/common/colorPicker/toHex.d.ts +11 -0
- package/dist/cjs-types/common/configProvider/configProvider.d.ts +13 -0
- package/dist/cjs-types/common/configProvider/configProvider.types.d.ts +133 -0
- package/dist/cjs-types/common/configProvider/index.d.ts +6 -0
- package/dist/cjs-types/common/configProvider/presentation.types.d.ts +14 -0
- package/dist/cjs-types/common/configProvider/useComponentDefaults.d.ts +17 -0
- package/dist/cjs-types/common/configProvider/useLabels.d.ts +22 -0
- package/dist/cjs-types/common/configProvider/usePresentationDefault.d.ts +8 -0
- package/dist/cjs-types/common/confirmModal/confirmModal.d.ts +4 -0
- package/dist/cjs-types/common/confirmModal/confirmModal.types.d.ts +24 -0
- package/dist/cjs-types/common/confirmModal/index.d.ts +2 -0
- package/dist/cjs-types/common/datePicker/components/datePickerMonth/datePickerMonth.d.ts +2 -0
- package/dist/cjs-types/common/datePicker/components/datePickerMonth/datePickerMonth.types.d.ts +23 -0
- package/dist/cjs-types/common/datePicker/components/datePickerMonth/index.d.ts +1 -0
- package/dist/cjs-types/common/datePicker/dateFunctions.d.ts +44 -0
- package/dist/cjs-types/common/datePicker/datePicker.d.ts +3 -0
- package/dist/cjs-types/common/datePicker/datePicker.types.d.ts +60 -0
- package/dist/cjs-types/common/datePicker/index.d.ts +2 -0
- package/dist/cjs-types/common/divider/divider.d.ts +4 -0
- package/dist/cjs-types/common/divider/divider.types.d.ts +21 -0
- package/dist/cjs-types/common/divider/index.d.ts +2 -0
- package/dist/cjs-types/common/drawer/drawer.d.ts +4 -0
- package/dist/cjs-types/common/drawer/drawer.types.d.ts +15 -0
- package/dist/cjs-types/common/drawer/index.d.ts +2 -0
- package/dist/cjs-types/common/dropZone/dropZone.d.ts +4 -0
- package/dist/cjs-types/common/dropZone/dropZone.types.d.ts +90 -0
- package/dist/cjs-types/common/dropZone/index.d.ts +2 -0
- package/dist/cjs-types/common/dropdown/dropdown.d.ts +4 -0
- package/dist/cjs-types/common/dropdown/dropdown.types.d.ts +47 -0
- package/dist/cjs-types/common/dropdown/index.d.ts +2 -0
- package/dist/cjs-types/common/emptyState/emptyState.d.ts +3 -0
- package/dist/cjs-types/common/emptyState/emptyState.types.d.ts +20 -0
- package/dist/cjs-types/common/emptyState/index.d.ts +2 -0
- package/dist/cjs-types/common/errorBoundary/errorBoundary.d.ts +14 -0
- package/dist/cjs-types/common/errorBoundary/errorBoundary.types.d.ts +57 -0
- package/dist/cjs-types/common/errorBoundary/index.d.ts +2 -0
- package/dist/cjs-types/common/fab/components/fabBase/fabBase.d.ts +3 -0
- package/dist/cjs-types/common/fab/components/fabBase/fabBase.types.d.ts +12 -0
- package/dist/cjs-types/common/fab/components/fabBase/index.d.ts +1 -0
- package/dist/cjs-types/common/fab/fab.d.ts +3 -0
- package/dist/cjs-types/common/fab/fab.types.d.ts +22 -0
- package/dist/cjs-types/common/fab/index.d.ts +2 -0
- package/dist/cjs-types/common/flip/flip.d.ts +3 -0
- package/dist/cjs-types/common/flip/flip.types.d.ts +44 -0
- package/dist/cjs-types/common/flip/index.d.ts +2 -0
- package/dist/cjs-types/common/floorPlan/floorPlan.faces.d.ts +33 -0
- package/dist/cjs-types/common/floorPlan/floorPlan.fixtures.d.ts +35 -0
- package/dist/cjs-types/common/floorPlan/floorPlan.geometry.d.ts +111 -0
- package/dist/cjs-types/common/floorPlan/floorPlan.graph.d.ts +184 -0
- package/dist/cjs-types/common/floorPlan/floorPlan.hit.d.ts +26 -0
- package/dist/cjs-types/common/floorPlan/floorPlan.json.d.ts +23 -0
- package/dist/cjs-types/common/floorPlan/floorPlan.mesh.d.ts +36 -0
- package/dist/cjs-types/common/floorPlan/floorPlan.path.d.ts +59 -0
- package/dist/cjs-types/common/floorPlan/floorPlan.plan.d.ts +98 -0
- package/dist/cjs-types/common/floorPlan/floorPlan.rooms.d.ts +47 -0
- package/dist/cjs-types/common/floorPlan/floorPlan.snap.d.ts +101 -0
- package/dist/cjs-types/common/floorPlan/floorPlan.triangulate.d.ts +11 -0
- package/dist/cjs-types/common/floorPlan/floorPlan.types.d.ts +276 -0
- package/dist/cjs-types/common/floorPlan/index.d.ts +30 -0
- package/dist/cjs-types/common/floorPlan/legacySvg.d.ts +27 -0
- package/dist/cjs-types/common/hooks/index.d.ts +13 -0
- package/dist/cjs-types/common/hooks/useAnchorTracking.d.ts +40 -0
- package/dist/cjs-types/common/hooks/useCoarsePointer.d.ts +3 -0
- package/dist/cjs-types/common/hooks/useFocusBoundary.d.ts +20 -0
- package/dist/cjs-types/common/hooks/useHotkeys.d.ts +45 -0
- package/dist/cjs-types/common/hooks/useMediaQuery.d.ts +9 -0
- package/dist/cjs-types/common/hooks/useOverlay.d.ts +26 -0
- package/dist/cjs-types/common/hooks/useScrollEdges.d.ts +18 -0
- package/dist/cjs-types/common/hooks/useSheet.d.ts +19 -0
- package/dist/cjs-types/common/hooks/useSwipeDismiss.d.ts +37 -0
- package/dist/cjs-types/common/hooks/useVisualViewportSize.d.ts +13 -0
- package/dist/cjs-types/common/iconPicker/iconPicker.d.ts +3 -0
- package/dist/cjs-types/common/iconPicker/iconPicker.types.d.ts +23 -0
- package/dist/cjs-types/common/iconPicker/index.d.ts +2 -0
- package/dist/cjs-types/common/idleManager/idleManager.d.ts +3 -0
- package/dist/cjs-types/common/idleManager/idleManager.types.d.ts +8 -0
- package/dist/cjs-types/common/idleManager/index.d.ts +2 -0
- package/dist/cjs-types/common/infiniteBlock/useInfiniteScroll.d.ts +5 -0
- package/dist/cjs-types/common/input/index.d.ts +2 -0
- package/dist/cjs-types/common/input/input.d.ts +4 -0
- package/dist/cjs-types/common/input/input.types.d.ts +84 -0
- package/dist/cjs-types/common/inputDropdown/index.d.ts +2 -0
- package/dist/cjs-types/common/inputDropdown/inputDropdown.d.ts +3 -0
- package/dist/cjs-types/common/inputDropdown/inputDropdown.types.d.ts +36 -0
- package/dist/cjs-types/common/interactableDiv/index.d.ts +2 -0
- package/dist/cjs-types/common/interactableDiv/interactableDiv.d.ts +8 -0
- package/dist/cjs-types/common/kanbanBoard/KanbanBoard.d.ts +3 -0
- package/dist/cjs-types/common/kanbanBoard/KanbanColumn.d.ts +45 -0
- package/dist/cjs-types/common/kanbanBoard/KanbanItem.d.ts +3 -0
- package/dist/cjs-types/common/kanbanBoard/index.d.ts +3 -0
- package/dist/cjs-types/common/kanbanBoard/kanbanBoard.types.d.ts +129 -0
- package/dist/cjs-types/common/kanbanBoard/kanbanBoard.utils.d.ts +60 -0
- package/dist/cjs-types/common/klipyPicker/components/gifPreview/gifPreview.d.ts +3 -0
- package/dist/cjs-types/common/klipyPicker/components/gifPreview/gifPreview.types.d.ts +7 -0
- package/dist/cjs-types/common/klipyPicker/components/gifPreview/index.d.ts +1 -0
- package/dist/cjs-types/common/klipyPicker/components/gifView/gifView.d.ts +3 -0
- package/dist/cjs-types/common/klipyPicker/components/gifView/gifView.types.d.ts +4 -0
- package/dist/cjs-types/common/klipyPicker/components/gifView/index.d.ts +1 -0
- package/dist/cjs-types/common/klipyPicker/index.d.ts +2 -0
- package/dist/cjs-types/common/klipyPicker/klipyPicker.d.ts +3 -0
- package/dist/cjs-types/common/klipyPicker/klipyPicker.types.d.ts +15 -0
- package/dist/cjs-types/common/loading/index.d.ts +1 -0
- package/dist/cjs-types/common/loading/spinnerLoading/index.d.ts +2 -0
- package/dist/cjs-types/common/loading/spinnerLoading/spinnerLoading.d.ts +6 -0
- package/dist/cjs-types/common/maskedInput/index.d.ts +2 -0
- package/dist/cjs-types/common/maskedInput/mask.d.ts +48 -0
- package/dist/cjs-types/common/maskedInput/maskedInput.d.ts +13 -0
- package/dist/cjs-types/common/maskedInput/maskedInput.types.d.ts +38 -0
- package/dist/cjs-types/common/menu/index.d.ts +3 -0
- package/dist/cjs-types/common/menu/menu.d.ts +14 -0
- package/dist/cjs-types/common/menu/menu.types.d.ts +61 -0
- package/dist/cjs-types/common/menu/menuHotkeys.d.ts +20 -0
- package/dist/cjs-types/common/modal/index.d.ts +2 -0
- package/dist/cjs-types/common/modal/modal.d.ts +3 -0
- package/dist/cjs-types/common/modal/modal.types.d.ts +31 -0
- package/dist/cjs-types/common/multiSelect/index.d.ts +2 -0
- package/dist/cjs-types/common/multiSelect/multiSelect.d.ts +4 -0
- package/dist/cjs-types/common/multiSelect/multiSelect.types.d.ts +69 -0
- package/dist/cjs-types/common/numberInput/index.d.ts +3 -0
- package/dist/cjs-types/common/numberInput/numberInput.d.ts +5 -0
- package/dist/cjs-types/common/numberInput/numberInput.types.d.ts +76 -0
- package/dist/cjs-types/common/numberInput/useStepRepeat.d.ts +17 -0
- package/dist/cjs-types/common/optionPicker/index.d.ts +2 -0
- package/dist/cjs-types/common/optionPicker/optionPicker.d.ts +4 -0
- package/dist/cjs-types/common/optionPicker/optionPicker.types.d.ts +16 -0
- package/dist/cjs-types/common/otpInput/index.d.ts +2 -0
- package/dist/cjs-types/common/otpInput/otpInput.d.ts +4 -0
- package/dist/cjs-types/common/otpInput/otpInput.types.d.ts +60 -0
- package/dist/cjs-types/common/overscroll/index.d.ts +2 -0
- package/dist/cjs-types/common/overscroll/overscroll.d.ts +2 -0
- package/dist/cjs-types/common/overscroll/overscroll.types.d.ts +14 -0
- package/dist/cjs-types/common/pagination/index.d.ts +2 -0
- package/dist/cjs-types/common/pagination/pagination.d.ts +4 -0
- package/dist/cjs-types/common/pagination/pagination.types.d.ts +45 -0
- package/dist/cjs-types/common/planCanvas/index.d.ts +2 -0
- package/dist/cjs-types/common/planCanvas/planCanvas.d.ts +7 -0
- package/dist/cjs-types/common/planCanvas/planCanvas.types.d.ts +64 -0
- package/dist/cjs-types/common/popover/index.d.ts +2 -0
- package/dist/cjs-types/common/popover/popover.d.ts +3 -0
- package/dist/cjs-types/common/popover/popover.types.d.ts +94 -0
- package/dist/cjs-types/common/popover/usePopoverPosition.d.ts +45 -0
- package/dist/cjs-types/common/progressBar/index.d.ts +2 -0
- package/dist/cjs-types/common/progressBar/progressBar.d.ts +5 -0
- package/dist/cjs-types/common/progressBar/progressBar.types.d.ts +18 -0
- package/dist/cjs-types/common/radioGroup/index.d.ts +2 -0
- package/dist/cjs-types/common/radioGroup/radioGroup.d.ts +4 -0
- package/dist/cjs-types/common/radioGroup/radioGroup.types.d.ts +45 -0
- package/dist/cjs-types/common/rating/index.d.ts +2 -0
- package/dist/cjs-types/common/rating/rating.d.ts +4 -0
- package/dist/cjs-types/common/rating/rating.types.d.ts +19 -0
- package/dist/cjs-types/common/revealLens/index.d.ts +2 -0
- package/dist/cjs-types/common/revealLens/revealLens.d.ts +4 -0
- package/dist/cjs-types/common/revealLens/revealLens.types.d.ts +24 -0
- package/dist/cjs-types/common/ripple/index.d.ts +2 -0
- package/dist/cjs-types/common/ripple/ripple.d.ts +5 -0
- package/dist/cjs-types/common/ripple/ripple.types.d.ts +16 -0
- package/dist/cjs-types/common/roomDrawer/index.d.ts +2 -0
- package/dist/cjs-types/common/roomDrawer/roomDrawer.d.ts +3 -0
- package/dist/cjs-types/common/roomDrawer/roomDrawer.types.d.ts +308 -0
- package/dist/cjs-types/common/roomDrawer/usePlanHistory.d.ts +24 -0
- package/dist/cjs-types/common/roomViewer/index.d.ts +2 -0
- package/dist/cjs-types/common/roomViewer/roomViewer.d.ts +10 -0
- package/dist/cjs-types/common/roomViewer/roomViewer.types.d.ts +91 -0
- package/dist/cjs-types/common/scrollFade/index.d.ts +2 -0
- package/dist/cjs-types/common/scrollFade/scrollFade.d.ts +4 -0
- package/dist/cjs-types/common/scrollFade/scrollFade.types.d.ts +20 -0
- package/dist/cjs-types/common/scrollbarProvider/index.d.ts +2 -0
- package/dist/cjs-types/common/scrollbarProvider/scrollbarProvider.d.ts +7 -0
- package/dist/cjs-types/common/searchInput/index.d.ts +2 -0
- package/dist/cjs-types/common/searchInput/searchInput.d.ts +3 -0
- package/dist/cjs-types/common/searchInput/searchInput.types.d.ts +28 -0
- package/dist/cjs-types/common/sectionHeader/index.d.ts +2 -0
- package/dist/cjs-types/common/sectionHeader/sectionHeader.d.ts +4 -0
- package/dist/cjs-types/common/sectionHeader/sectionHeader.types.d.ts +27 -0
- package/dist/cjs-types/common/sheetBackdrop/index.d.ts +2 -0
- package/dist/cjs-types/common/sheetBackdrop/sheetBackdrop.d.ts +16 -0
- package/dist/cjs-types/common/sheetBackdrop/sheetBackdrop.types.d.ts +7 -0
- package/dist/cjs-types/common/skeleton/index.d.ts +2 -0
- package/dist/cjs-types/common/skeleton/skeleton.d.ts +4 -0
- package/dist/cjs-types/common/skeleton/skeleton.types.d.ts +22 -0
- package/dist/cjs-types/common/slider/index.d.ts +2 -0
- package/dist/cjs-types/common/slider/slider.d.ts +3 -0
- package/dist/cjs-types/common/slider/slider.types.d.ts +68 -0
- package/dist/cjs-types/common/splitButton/index.d.ts +2 -0
- package/dist/cjs-types/common/splitButton/splitButton.d.ts +3 -0
- package/dist/cjs-types/common/splitButton/splitButton.types.d.ts +35 -0
- package/dist/cjs-types/common/stepper/index.d.ts +2 -0
- package/dist/cjs-types/common/stepper/stepper.d.ts +3 -0
- package/dist/cjs-types/common/stepper/stepper.types.d.ts +77 -0
- package/dist/cjs-types/common/sticky/index.d.ts +1 -0
- package/dist/cjs-types/common/sticky/sticky.d.ts +3 -0
- package/dist/cjs-types/common/sticky/sticky.types.d.ts +37 -0
- package/dist/cjs-types/common/sticky/stickyStack.d.ts +51 -0
- package/dist/cjs-types/common/switch/index.d.ts +2 -0
- package/dist/cjs-types/common/switch/switch.d.ts +4 -0
- package/dist/cjs-types/common/switch/switch.types.d.ts +21 -0
- package/dist/cjs-types/common/tabHeader/index.d.ts +2 -0
- package/dist/cjs-types/common/tabHeader/tabHeader.d.ts +4 -0
- package/dist/cjs-types/common/tabHeader/tabHeader.types.d.ts +20 -0
- package/dist/cjs-types/common/textarea/index.d.ts +2 -0
- package/dist/cjs-types/common/textarea/textarea.d.ts +3 -0
- package/dist/cjs-types/common/textarea/textarea.types.d.ts +2 -0
- package/dist/cjs-types/common/themeProvider/defaultTheme.d.ts +7 -0
- package/dist/cjs-types/common/themeProvider/index.d.ts +4 -0
- package/dist/cjs-types/common/themeProvider/lightTheme.d.ts +13 -0
- package/dist/cjs-types/common/themeProvider/theme.types.d.ts +272 -0
- package/dist/cjs-types/common/themeProvider/themeProvider.d.ts +38 -0
- package/dist/cjs-types/common/themeProvider/themeVariablesContext.d.ts +11 -0
- package/dist/cjs-types/common/themeProvider/useTheme.d.ts +4 -0
- package/dist/cjs-types/common/tilt/index.d.ts +4 -0
- package/dist/cjs-types/common/tilt/tilt.d.ts +3 -0
- package/dist/cjs-types/common/tilt/tilt.types.d.ts +40 -0
- package/dist/cjs-types/common/tilt/tiltMath.d.ts +24 -0
- package/dist/cjs-types/common/tiltGroup/index.d.ts +3 -0
- package/dist/cjs-types/common/tiltGroup/tiltGroup.d.ts +6 -0
- package/dist/cjs-types/common/tiltGroup/tiltGroup.types.d.ts +16 -0
- package/dist/cjs-types/common/timeInput/components/clockDial/clockDial.d.ts +3 -0
- package/dist/cjs-types/common/timeInput/components/clockDial/clockDial.types.d.ts +24 -0
- package/dist/cjs-types/common/timeInput/components/clockDial/index.d.ts +1 -0
- package/dist/cjs-types/common/timeInput/index.d.ts +1 -0
- package/dist/cjs-types/common/timeInput/timeFunctions.d.ts +36 -0
- package/dist/cjs-types/common/timeInput/timeInput.d.ts +3 -0
- package/dist/cjs-types/common/timeInput/timeInput.types.d.ts +44 -0
- package/dist/cjs-types/common/timeline/index.d.ts +2 -0
- package/dist/cjs-types/common/timeline/timeline.d.ts +3 -0
- package/dist/cjs-types/common/timeline/timeline.types.d.ts +51 -0
- package/dist/cjs-types/common/timer/index.d.ts +2 -0
- package/dist/cjs-types/common/timer/timer.chime.d.ts +1 -0
- package/dist/cjs-types/common/timer/timer.d.ts +3 -0
- package/dist/cjs-types/common/timer/timer.types.d.ts +110 -0
- package/dist/cjs-types/common/toast/index.d.ts +3 -0
- package/dist/cjs-types/common/toast/toast.d.ts +11 -0
- package/dist/cjs-types/common/toast/toast.types.d.ts +50 -0
- package/dist/cjs-types/common/toast/toastProvider.d.ts +8 -0
- package/dist/cjs-types/common/toast/toastService.d.ts +7 -0
- package/dist/cjs-types/common/tooltip/index.d.ts +2 -0
- package/dist/cjs-types/common/tooltip/tooltip.d.ts +3 -0
- package/dist/cjs-types/common/tooltip/tooltip.types.d.ts +17 -0
- package/dist/cjs-types/common/tree/flattenTree.d.ts +3 -0
- package/dist/cjs-types/common/tree/index.d.ts +3 -0
- package/dist/cjs-types/common/tree/tree.d.ts +4 -0
- package/dist/cjs-types/common/tree/tree.types.d.ts +67 -0
- package/dist/cjs-types/common/types/actions.types.d.ts +7 -0
- package/dist/cjs-types/common/types/baseProps.types.d.ts +29 -0
- package/dist/cjs-types/common/types/icon.types.d.ts +17 -0
- package/dist/cjs-types/common/types/slots.types.d.ts +4 -0
- package/dist/cjs-types/common/utils/activationKey.d.ts +9 -0
- package/dist/cjs-types/common/utils/interactiveTarget.d.ts +7 -0
- package/dist/cjs-types/common/utils/listNavigation.d.ts +49 -0
- package/dist/cjs-types/common/utils/mergeRefs.d.ts +12 -0
- package/dist/cjs-types/common/utils/renderIcon.d.ts +29 -0
- package/dist/cjs-types/common/utils/scrollAncestors.d.ts +12 -0
- package/dist/cjs-types/common/utils/visualViewport.d.ts +7 -0
- package/dist/cjs-types/common/virtualList/index.d.ts +2 -0
- package/dist/cjs-types/common/virtualList/scroller.d.ts +33 -0
- package/dist/cjs-types/common/virtualList/useColumnResize.d.ts +59 -0
- package/dist/cjs-types/common/virtualList/useColumns.d.ts +52 -0
- package/dist/cjs-types/common/virtualList/useHeaderNavigation.d.ts +22 -0
- package/dist/cjs-types/common/virtualList/useRowDrag.d.ts +63 -0
- package/dist/cjs-types/common/virtualList/useRowNavigation.d.ts +60 -0
- package/dist/cjs-types/common/virtualList/useSelection.d.ts +24 -0
- package/dist/cjs-types/common/virtualList/useSorting.d.ts +26 -0
- package/dist/cjs-types/common/virtualList/useVirtualWindow.d.ts +55 -0
- package/dist/cjs-types/common/virtualList/virtualList.d.ts +5 -0
- package/dist/cjs-types/common/virtualList/virtualList.types.d.ts +357 -0
- package/dist/cjs-types/common/virtualList/virtualList.utils.d.ts +126 -0
- package/dist/cjs-types/common/virtualList/virtualListHeader.d.ts +35 -0
- package/dist/cjs-types/common/virtualList/virtualRow.d.ts +62 -0
- package/dist/cjs-types/common/wizard/index.d.ts +1 -0
- package/dist/cjs-types/common/wizard/wizard.d.ts +3 -0
- package/dist/cjs-types/common/wizard/wizard.types.d.ts +12 -0
- package/dist/cjs-types/hooks/useWindowSize.d.ts +6 -0
- package/dist/cjs-types/index.d.ts +155 -0
- package/dist/cjs-types/package.json +3 -0
- package/dist/cjs-types/services/formValidation/FormValidatorGroupWithForm.d.ts +18 -0
- package/dist/cjs-types/services/formValidation/index.d.ts +5 -0
- package/dist/cjs-types/services/formValidation/useFormValidatorGroup.d.ts +10 -0
- package/dist/cjs-types/services/formValidation/validatableComponent.d.ts +36 -0
- package/dist/cjs-types/services/klipy.d.ts +36 -0
- package/dist/cjs-types/services/localization.d.ts +3 -0
- package/dist/esm/common/carousel/carousel.mjs +1 -1
- package/dist/esm/common/carousel/carousel.mjs.map +1 -1
- package/dist/esm/common/carousel/carousel.module.mjs.map +1 -1
- package/dist/esm/common/confirmModal/confirmModal.mjs +1 -1
- package/dist/esm/common/confirmModal/confirmModal.mjs.map +1 -1
- package/dist/esm/common/datePicker/datePicker.mjs +1 -1
- package/dist/esm/common/datePicker/datePicker.mjs.map +1 -1
- package/dist/esm/common/drawer/drawer.module.mjs.map +1 -1
- package/dist/esm/common/dropdown/dropdown.mjs +1 -1
- package/dist/esm/common/dropdown/dropdown.mjs.map +1 -1
- package/dist/esm/common/dropdown/dropdown.module.mjs +1 -1
- package/dist/esm/common/dropdown/dropdown.module.mjs.map +1 -1
- package/dist/esm/common/hooks/useHotkeys.mjs +2 -0
- package/dist/esm/common/hooks/useHotkeys.mjs.map +1 -0
- package/dist/esm/common/hooks/useScrollEdges.mjs +2 -0
- package/dist/esm/common/hooks/useScrollEdges.mjs.map +1 -0
- package/dist/esm/common/hooks/useSwipeDismiss.mjs +1 -1
- package/dist/esm/common/hooks/useSwipeDismiss.mjs.map +1 -1
- package/dist/esm/common/infiniteBlock/useInfiniteScroll.mjs +2 -0
- package/dist/esm/common/infiniteBlock/useInfiniteScroll.mjs.map +1 -0
- package/dist/esm/common/input/input.mjs +1 -1
- package/dist/esm/common/input/input.mjs.map +1 -1
- package/dist/esm/common/input/input.module.mjs +1 -1
- package/dist/esm/common/input/input.module.mjs.map +1 -1
- package/dist/esm/common/inputDropdown/inputDropdown.mjs +1 -1
- package/dist/esm/common/inputDropdown/inputDropdown.mjs.map +1 -1
- package/dist/esm/common/interactableDiv/interactableDiv.mjs +1 -1
- package/dist/esm/common/interactableDiv/interactableDiv.mjs.map +1 -1
- package/dist/esm/common/klipyPicker/components/gifPreview/gifPreview.module.mjs.map +1 -1
- package/dist/esm/common/klipyPicker/components/gifView/gifView.module.mjs.map +1 -1
- package/dist/esm/common/maskedInput/mask.mjs +2 -0
- package/dist/esm/common/maskedInput/mask.mjs.map +1 -0
- package/dist/esm/common/maskedInput/maskedInput.mjs +2 -0
- package/dist/esm/common/maskedInput/maskedInput.mjs.map +1 -0
- package/dist/esm/common/menu/menu.mjs +1 -1
- package/dist/esm/common/menu/menu.mjs.map +1 -1
- package/dist/esm/common/menu/menu.types.mjs.map +1 -1
- package/dist/esm/common/menu/menuHotkeys.mjs +2 -0
- package/dist/esm/common/menu/menuHotkeys.mjs.map +1 -0
- package/dist/esm/common/modal/modal.mjs +1 -1
- package/dist/esm/common/modal/modal.mjs.map +1 -1
- package/dist/esm/common/modal/modal.module.mjs +1 -1
- package/dist/esm/common/modal/modal.module.mjs.map +1 -1
- package/dist/esm/common/multiSelect/multiSelect.mjs +1 -1
- package/dist/esm/common/multiSelect/multiSelect.mjs.map +1 -1
- package/dist/esm/common/multiSelect/multiSelect.module.mjs +1 -1
- package/dist/esm/common/multiSelect/multiSelect.module.mjs.map +1 -1
- package/dist/esm/common/otpInput/otpInput.module.mjs.map +1 -1
- package/dist/esm/common/popover/usePopoverPosition.mjs +1 -1
- package/dist/esm/common/popover/usePopoverPosition.mjs.map +1 -1
- package/dist/esm/common/radioGroup/radioGroup.types.mjs.map +1 -1
- package/dist/esm/common/rating/rating.module.mjs.map +1 -1
- package/dist/esm/common/ripple/ripple.mjs +1 -1
- package/dist/esm/common/ripple/ripple.mjs.map +1 -1
- package/dist/esm/common/scrollFade/scrollFade.mjs +2 -0
- package/dist/esm/common/scrollFade/scrollFade.mjs.map +1 -0
- package/dist/esm/common/scrollFade/scrollFade.module.mjs +2 -0
- package/dist/esm/common/scrollFade/scrollFade.module.mjs.map +1 -0
- package/dist/esm/common/scrollFade/scrollFade.types.mjs +2 -0
- package/dist/esm/common/scrollFade/scrollFade.types.mjs.map +1 -0
- package/dist/esm/common/sticky/sticky.mjs +1 -1
- package/dist/esm/common/sticky/sticky.mjs.map +1 -1
- package/dist/esm/common/sticky/stickyStack.mjs +1 -1
- package/dist/esm/common/sticky/stickyStack.mjs.map +1 -1
- package/dist/esm/common/styles/scrollFade.module.mjs +2 -0
- package/dist/esm/common/styles/scrollFade.module.mjs.map +1 -0
- package/dist/esm/common/styles/sheet.module.mjs.map +1 -1
- package/dist/esm/common/timeInput/timeInput.mjs +1 -1
- package/dist/esm/common/timeInput/timeInput.mjs.map +1 -1
- package/dist/esm/common/utils/interactiveTarget.mjs +2 -0
- package/dist/esm/common/utils/interactiveTarget.mjs.map +1 -0
- package/dist/esm/common/utils/listNavigation.mjs +2 -0
- package/dist/esm/common/utils/listNavigation.mjs.map +1 -0
- package/dist/esm/common/utils/scrollAncestors.mjs +1 -1
- package/dist/esm/common/utils/scrollAncestors.mjs.map +1 -1
- package/dist/esm/common/virtualList/scroller.mjs +2 -0
- package/dist/esm/common/virtualList/scroller.mjs.map +1 -0
- package/dist/esm/common/virtualList/useRowDrag.mjs +1 -1
- package/dist/esm/common/virtualList/useRowDrag.mjs.map +1 -1
- package/dist/esm/common/virtualList/useRowNavigation.mjs +1 -1
- package/dist/esm/common/virtualList/useRowNavigation.mjs.map +1 -1
- package/dist/esm/common/virtualList/useVirtualWindow.mjs +1 -1
- package/dist/esm/common/virtualList/useVirtualWindow.mjs.map +1 -1
- package/dist/esm/common/virtualList/virtualList.mjs +1 -1
- package/dist/esm/common/virtualList/virtualList.mjs.map +1 -1
- package/dist/esm/common/virtualList/virtualList.module.mjs +1 -1
- package/dist/esm/common/virtualList/virtualList.module.mjs.map +1 -1
- package/dist/esm/common/wizard/wizard.module.mjs.map +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/og.png +0 -0
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/mcp.js +341 -56
- package/dist/og.png +0 -0
- package/dist/style.css +1 -1
- package/dist/types/common/accordion/accordion.d.ts +1 -1
- package/dist/types/common/accordion/accordion.types.d.ts +1 -1
- package/dist/types/common/accordion/index.d.ts +2 -2
- package/dist/types/common/actionButtons/actionButtons.d.ts +1 -1
- package/dist/types/common/actionButtons/actionButtons.types.d.ts +3 -3
- package/dist/types/common/actionButtons/index.d.ts +2 -2
- package/dist/types/common/actionIcon/actionIcon.d.ts +1 -1
- package/dist/types/common/actionIcon/actionIcon.types.d.ts +2 -2
- package/dist/types/common/actionIcon/index.d.ts +2 -2
- package/dist/types/common/alert/alert.d.ts +1 -1
- package/dist/types/common/alert/alert.types.d.ts +2 -2
- package/dist/types/common/alert/index.d.ts +2 -2
- package/dist/types/common/animatedIcon/animatedIcon.d.ts +1 -1
- package/dist/types/common/animatedIcon/animatedIcon.types.d.ts +1 -1
- package/dist/types/common/animatedIcon/index.d.ts +2 -2
- package/dist/types/common/animatedLogo/animatedLogo.d.ts +1 -1
- package/dist/types/common/animatedLogo/animatedLogo.types.d.ts +1 -1
- package/dist/types/common/animatedLogo/index.d.ts +2 -2
- package/dist/types/common/animatedText/animatedText.d.ts +1 -1
- package/dist/types/common/animatedText/animatedText.types.d.ts +1 -1
- package/dist/types/common/animatedText/index.d.ts +2 -2
- package/dist/types/common/avatar/avatar.d.ts +1 -1
- package/dist/types/common/avatar/avatar.types.d.ts +2 -2
- package/dist/types/common/avatar/avatarGroup.d.ts +1 -1
- package/dist/types/common/avatar/index.d.ts +3 -3
- package/dist/types/common/badge/badge.d.ts +1 -1
- package/dist/types/common/badge/badge.types.d.ts +1 -1
- package/dist/types/common/badge/index.d.ts +2 -2
- package/dist/types/common/bodyEnd/bodyEnd.d.ts +1 -1
- package/dist/types/common/bodyEnd/index.d.ts +2 -2
- package/dist/types/common/breadcrumb/breadcrumb.d.ts +1 -1
- package/dist/types/common/breadcrumb/breadcrumb.types.d.ts +2 -2
- package/dist/types/common/breadcrumb/index.d.ts +2 -2
- package/dist/types/common/button/button.d.ts +1 -1
- package/dist/types/common/button/button.types.d.ts +2 -2
- package/dist/types/common/button/index.d.ts +2 -2
- package/dist/types/common/buttonGroup/buttonGroup.d.ts +1 -1
- package/dist/types/common/buttonGroup/buttonGroup.types.d.ts +1 -1
- package/dist/types/common/buttonGroup/index.d.ts +2 -2
- package/dist/types/common/card/Card.d.ts +1 -1
- package/dist/types/common/card/CardActions.d.ts +1 -1
- package/dist/types/common/card/CardContent.d.ts +1 -1
- package/dist/types/common/card/CardHeader.d.ts +1 -1
- package/dist/types/common/card/CardMedia.d.ts +1 -1
- package/dist/types/common/card/card.types.d.ts +3 -3
- package/dist/types/common/card/index.d.ts +6 -6
- package/dist/types/common/carousel/carousel.d.ts +1 -1
- package/dist/types/common/carousel/carousel.types.d.ts +1 -1
- package/dist/types/common/carousel/index.d.ts +2 -2
- package/dist/types/common/checkbox/checkbox.d.ts +1 -1
- package/dist/types/common/checkbox/checkbox.types.d.ts +2 -2
- package/dist/types/common/checkbox/index.d.ts +2 -2
- package/dist/types/common/chip/chip.d.ts +1 -1
- package/dist/types/common/chip/chip.types.d.ts +1 -1
- package/dist/types/common/chip/chipContainer.d.ts +1 -1
- package/dist/types/common/chip/index.d.ts +3 -3
- package/dist/types/common/colorPicker/colorPicker.d.ts +1 -1
- package/dist/types/common/colorPicker/colorPicker.types.d.ts +1 -1
- package/dist/types/common/colorPicker/index.d.ts +2 -2
- package/dist/types/common/configProvider/configProvider.d.ts +2 -2
- package/dist/types/common/configProvider/configProvider.types.d.ts +44 -44
- package/dist/types/common/configProvider/index.d.ts +6 -6
- package/dist/types/common/configProvider/useComponentDefaults.d.ts +1 -1
- package/dist/types/common/configProvider/useLabels.d.ts +1 -1
- package/dist/types/common/configProvider/usePresentationDefault.d.ts +1 -1
- package/dist/types/common/confirmModal/confirmModal.d.ts +1 -1
- package/dist/types/common/confirmModal/confirmModal.types.d.ts +2 -2
- package/dist/types/common/confirmModal/index.d.ts +2 -2
- package/dist/types/common/datePicker/components/datePickerMonth/datePickerMonth.d.ts +1 -1
- package/dist/types/common/datePicker/components/datePickerMonth/index.d.ts +1 -1
- package/dist/types/common/datePicker/datePicker.d.ts +1 -1
- package/dist/types/common/datePicker/datePicker.types.d.ts +2 -2
- package/dist/types/common/datePicker/index.d.ts +2 -2
- package/dist/types/common/divider/divider.d.ts +1 -1
- package/dist/types/common/divider/divider.types.d.ts +1 -1
- package/dist/types/common/divider/index.d.ts +2 -2
- package/dist/types/common/drawer/drawer.d.ts +1 -1
- package/dist/types/common/drawer/drawer.types.d.ts +1 -1
- package/dist/types/common/drawer/index.d.ts +2 -2
- package/dist/types/common/dropZone/dropZone.d.ts +1 -1
- package/dist/types/common/dropZone/dropZone.types.d.ts +1 -1
- package/dist/types/common/dropZone/index.d.ts +2 -2
- package/dist/types/common/dropdown/dropdown.d.ts +1 -1
- package/dist/types/common/dropdown/dropdown.types.d.ts +3 -3
- package/dist/types/common/dropdown/index.d.ts +2 -2
- package/dist/types/common/emptyState/emptyState.d.ts +1 -1
- package/dist/types/common/emptyState/emptyState.types.d.ts +2 -2
- package/dist/types/common/emptyState/index.d.ts +2 -2
- package/dist/types/common/errorBoundary/errorBoundary.d.ts +1 -1
- package/dist/types/common/errorBoundary/errorBoundary.types.d.ts +1 -1
- package/dist/types/common/errorBoundary/index.d.ts +2 -2
- package/dist/types/common/fab/components/fabBase/fabBase.d.ts +1 -1
- package/dist/types/common/fab/components/fabBase/fabBase.types.d.ts +1 -1
- package/dist/types/common/fab/components/fabBase/index.d.ts +1 -1
- package/dist/types/common/fab/fab.d.ts +1 -1
- package/dist/types/common/fab/fab.types.d.ts +2 -2
- package/dist/types/common/fab/index.d.ts +2 -2
- package/dist/types/common/flip/flip.d.ts +1 -1
- package/dist/types/common/flip/flip.types.d.ts +1 -1
- package/dist/types/common/flip/index.d.ts +2 -2
- package/dist/types/common/floorPlan/floorPlan.faces.d.ts +2 -2
- package/dist/types/common/floorPlan/floorPlan.fixtures.d.ts +1 -1
- package/dist/types/common/floorPlan/floorPlan.geometry.d.ts +1 -1
- package/dist/types/common/floorPlan/floorPlan.graph.d.ts +1 -1
- package/dist/types/common/floorPlan/floorPlan.hit.d.ts +1 -1
- package/dist/types/common/floorPlan/floorPlan.json.d.ts +1 -1
- package/dist/types/common/floorPlan/floorPlan.mesh.d.ts +1 -1
- package/dist/types/common/floorPlan/floorPlan.path.d.ts +1 -1
- package/dist/types/common/floorPlan/floorPlan.plan.d.ts +1 -1
- package/dist/types/common/floorPlan/floorPlan.rooms.d.ts +1 -1
- package/dist/types/common/floorPlan/floorPlan.snap.d.ts +1 -1
- package/dist/types/common/floorPlan/floorPlan.triangulate.d.ts +1 -1
- package/dist/types/common/floorPlan/index.d.ts +22 -22
- package/dist/types/common/floorPlan/legacySvg.d.ts +2 -2
- package/dist/types/common/hooks/index.d.ts +13 -0
- package/dist/types/common/hooks/useHotkeys.d.ts +45 -0
- package/dist/types/common/hooks/useScrollEdges.d.ts +18 -0
- package/dist/types/common/hooks/useSheet.d.ts +1 -1
- package/dist/types/common/hooks/useSwipeDismiss.d.ts +6 -2
- package/dist/types/common/iconPicker/iconPicker.d.ts +1 -1
- package/dist/types/common/iconPicker/iconPicker.types.d.ts +2 -2
- package/dist/types/common/iconPicker/index.d.ts +2 -1
- package/dist/types/common/idleManager/idleManager.d.ts +1 -1
- package/dist/types/common/idleManager/index.d.ts +2 -1
- package/dist/types/common/infiniteBlock/useInfiniteScroll.d.ts +5 -0
- package/dist/types/common/input/index.d.ts +2 -2
- package/dist/types/common/input/input.d.ts +1 -1
- package/dist/types/common/input/input.types.d.ts +2 -2
- package/dist/types/common/inputDropdown/index.d.ts +2 -1
- package/dist/types/common/inputDropdown/inputDropdown.d.ts +1 -1
- package/dist/types/common/inputDropdown/inputDropdown.types.d.ts +2 -2
- package/dist/types/common/interactableDiv/index.d.ts +1 -1
- package/dist/types/common/interactableDiv/interactableDiv.d.ts +1 -1
- package/dist/types/common/kanbanBoard/KanbanBoard.d.ts +1 -1
- package/dist/types/common/kanbanBoard/KanbanColumn.d.ts +1 -1
- package/dist/types/common/kanbanBoard/KanbanItem.d.ts +1 -1
- package/dist/types/common/kanbanBoard/index.d.ts +3 -3
- package/dist/types/common/kanbanBoard/kanbanBoard.types.d.ts +1 -1
- package/dist/types/common/kanbanBoard/kanbanBoard.utils.d.ts +1 -1
- package/dist/types/common/klipyPicker/components/gifPreview/gifPreview.d.ts +1 -1
- package/dist/types/common/klipyPicker/components/gifPreview/gifPreview.types.d.ts +1 -1
- package/dist/types/common/klipyPicker/components/gifPreview/index.d.ts +1 -1
- package/dist/types/common/klipyPicker/components/gifView/gifView.d.ts +1 -1
- package/dist/types/common/klipyPicker/components/gifView/index.d.ts +1 -1
- package/dist/types/common/klipyPicker/index.d.ts +2 -2
- package/dist/types/common/klipyPicker/klipyPicker.d.ts +1 -1
- package/dist/types/common/klipyPicker/klipyPicker.types.d.ts +1 -1
- package/dist/types/common/loading/index.d.ts +1 -2
- package/dist/types/common/loading/spinnerLoading/index.d.ts +1 -1
- package/dist/types/common/maskedInput/index.d.ts +2 -0
- package/dist/types/common/maskedInput/mask.d.ts +48 -0
- package/dist/types/common/maskedInput/maskedInput.d.ts +13 -0
- package/dist/types/common/maskedInput/maskedInput.types.d.ts +38 -0
- package/dist/types/common/menu/index.d.ts +3 -2
- package/dist/types/common/menu/menu.d.ts +1 -1
- package/dist/types/common/menu/menu.types.d.ts +13 -7
- package/dist/types/common/menu/menuHotkeys.d.ts +20 -0
- package/dist/types/common/modal/index.d.ts +2 -2
- package/dist/types/common/modal/modal.d.ts +1 -1
- package/dist/types/common/modal/modal.types.d.ts +6 -3
- package/dist/types/common/multiSelect/index.d.ts +2 -2
- package/dist/types/common/multiSelect/multiSelect.d.ts +1 -1
- package/dist/types/common/multiSelect/multiSelect.types.d.ts +3 -3
- package/dist/types/common/numberInput/index.d.ts +2 -2
- package/dist/types/common/numberInput/numberInput.d.ts +2 -2
- package/dist/types/common/numberInput/numberInput.types.d.ts +2 -2
- package/dist/types/common/optionPicker/index.d.ts +2 -2
- package/dist/types/common/optionPicker/optionPicker.d.ts +1 -1
- package/dist/types/common/optionPicker/optionPicker.types.d.ts +1 -1
- package/dist/types/common/otpInput/index.d.ts +2 -2
- package/dist/types/common/otpInput/otpInput.d.ts +1 -1
- package/dist/types/common/otpInput/otpInput.types.d.ts +2 -2
- package/dist/types/common/overscroll/index.d.ts +2 -2
- package/dist/types/common/overscroll/overscroll.d.ts +1 -1
- package/dist/types/common/pagination/index.d.ts +2 -2
- package/dist/types/common/pagination/pagination.d.ts +1 -1
- package/dist/types/common/pagination/pagination.types.d.ts +2 -2
- package/dist/types/common/planCanvas/index.d.ts +2 -2
- package/dist/types/common/planCanvas/planCanvas.d.ts +1 -1
- package/dist/types/common/planCanvas/planCanvas.types.d.ts +2 -2
- package/dist/types/common/popover/index.d.ts +2 -2
- package/dist/types/common/popover/popover.d.ts +1 -1
- package/dist/types/common/popover/popover.types.d.ts +2 -2
- package/dist/types/common/popover/usePopoverPosition.d.ts +2 -1
- package/dist/types/common/progressBar/index.d.ts +2 -2
- package/dist/types/common/progressBar/progressBar.d.ts +1 -1
- package/dist/types/common/progressBar/progressBar.types.d.ts +1 -1
- package/dist/types/common/radioGroup/index.d.ts +2 -2
- package/dist/types/common/radioGroup/radioGroup.d.ts +1 -1
- package/dist/types/common/radioGroup/radioGroup.types.d.ts +3 -3
- package/dist/types/common/rating/index.d.ts +2 -2
- package/dist/types/common/rating/rating.d.ts +1 -1
- package/dist/types/common/rating/rating.types.d.ts +2 -2
- package/dist/types/common/revealLens/index.d.ts +2 -2
- package/dist/types/common/revealLens/revealLens.d.ts +1 -1
- package/dist/types/common/revealLens/revealLens.types.d.ts +1 -1
- package/dist/types/common/ripple/index.d.ts +2 -2
- package/dist/types/common/ripple/ripple.d.ts +1 -1
- package/dist/types/common/ripple/ripple.types.d.ts +1 -1
- package/dist/types/common/roomDrawer/index.d.ts +2 -2
- package/dist/types/common/roomDrawer/roomDrawer.d.ts +1 -1
- package/dist/types/common/roomDrawer/roomDrawer.types.d.ts +3 -3
- package/dist/types/common/roomDrawer/usePlanHistory.d.ts +2 -2
- package/dist/types/common/roomViewer/index.d.ts +2 -2
- package/dist/types/common/roomViewer/roomViewer.d.ts +1 -1
- package/dist/types/common/roomViewer/roomViewer.types.d.ts +3 -3
- package/dist/types/common/scrollFade/index.d.ts +2 -0
- package/dist/types/common/scrollFade/scrollFade.d.ts +4 -0
- package/dist/types/common/scrollFade/scrollFade.types.d.ts +20 -0
- package/dist/types/common/scrollbarProvider/index.d.ts +1 -1
- package/dist/types/common/searchInput/index.d.ts +2 -2
- package/dist/types/common/searchInput/searchInput.d.ts +1 -1
- package/dist/types/common/searchInput/searchInput.types.d.ts +1 -1
- package/dist/types/common/sectionHeader/index.d.ts +2 -2
- package/dist/types/common/sectionHeader/sectionHeader.d.ts +1 -1
- package/dist/types/common/sectionHeader/sectionHeader.types.d.ts +3 -3
- package/dist/types/common/sheetBackdrop/index.d.ts +2 -2
- package/dist/types/common/sheetBackdrop/sheetBackdrop.d.ts +1 -1
- package/dist/types/common/skeleton/index.d.ts +2 -2
- package/dist/types/common/skeleton/skeleton.d.ts +1 -1
- package/dist/types/common/skeleton/skeleton.types.d.ts +1 -1
- package/dist/types/common/slider/index.d.ts +2 -2
- package/dist/types/common/slider/slider.d.ts +1 -1
- package/dist/types/common/slider/slider.types.d.ts +2 -2
- package/dist/types/common/splitButton/index.d.ts +2 -2
- package/dist/types/common/splitButton/splitButton.d.ts +1 -1
- package/dist/types/common/splitButton/splitButton.types.d.ts +4 -4
- package/dist/types/common/stepper/index.d.ts +2 -2
- package/dist/types/common/stepper/stepper.d.ts +1 -1
- package/dist/types/common/stepper/stepper.types.d.ts +2 -2
- package/dist/types/common/sticky/index.d.ts +1 -1
- package/dist/types/common/sticky/sticky.d.ts +2 -2
- package/dist/types/common/sticky/sticky.types.d.ts +16 -1
- package/dist/types/common/sticky/stickyStack.d.ts +5 -0
- package/dist/types/common/switch/index.d.ts +2 -2
- package/dist/types/common/switch/switch.d.ts +1 -1
- package/dist/types/common/switch/switch.types.d.ts +2 -2
- package/dist/types/common/tabHeader/index.d.ts +2 -2
- package/dist/types/common/tabHeader/tabHeader.d.ts +1 -1
- package/dist/types/common/tabHeader/tabHeader.types.d.ts +2 -2
- package/dist/types/common/textarea/index.d.ts +2 -2
- package/dist/types/common/textarea/textarea.d.ts +1 -1
- package/dist/types/common/textarea/textarea.types.d.ts +1 -1
- package/dist/types/common/themeProvider/defaultTheme.d.ts +1 -1
- package/dist/types/common/themeProvider/index.d.ts +4 -4
- package/dist/types/common/themeProvider/lightTheme.d.ts +1 -1
- package/dist/types/common/themeProvider/theme.types.d.ts +28 -0
- package/dist/types/common/themeProvider/themeProvider.d.ts +1 -1
- package/dist/types/common/tilt/index.d.ts +4 -4
- package/dist/types/common/tilt/tilt.d.ts +1 -1
- package/dist/types/common/tilt/tilt.types.d.ts +2 -2
- package/dist/types/common/tiltGroup/index.d.ts +3 -3
- package/dist/types/common/tiltGroup/tiltGroup.d.ts +1 -1
- package/dist/types/common/tiltGroup/tiltGroup.types.d.ts +1 -1
- package/dist/types/common/timeInput/components/clockDial/clockDial.d.ts +1 -1
- package/dist/types/common/timeInput/components/clockDial/clockDial.types.d.ts +3 -3
- package/dist/types/common/timeInput/components/clockDial/index.d.ts +1 -1
- package/dist/types/common/timeInput/index.d.ts +1 -1
- package/dist/types/common/timeInput/timeInput.d.ts +1 -1
- package/dist/types/common/timeInput/timeInput.types.d.ts +2 -2
- package/dist/types/common/timeline/index.d.ts +2 -2
- package/dist/types/common/timeline/timeline.d.ts +1 -1
- package/dist/types/common/timeline/timeline.types.d.ts +2 -2
- package/dist/types/common/timer/index.d.ts +2 -2
- package/dist/types/common/timer/timer.d.ts +1 -1
- package/dist/types/common/timer/timer.types.d.ts +2 -2
- package/dist/types/common/toast/index.d.ts +3 -3
- package/dist/types/common/toast/toast.d.ts +1 -1
- package/dist/types/common/toast/toast.types.d.ts +1 -1
- package/dist/types/common/toast/toastProvider.d.ts +1 -1
- package/dist/types/common/toast/toastService.d.ts +1 -1
- package/dist/types/common/tooltip/index.d.ts +2 -2
- package/dist/types/common/tooltip/tooltip.d.ts +1 -1
- package/dist/types/common/tree/flattenTree.d.ts +1 -1
- package/dist/types/common/tree/index.d.ts +3 -3
- package/dist/types/common/tree/tree.d.ts +1 -1
- package/dist/types/common/tree/tree.types.d.ts +2 -2
- package/dist/types/common/types/actions.types.d.ts +1 -1
- package/dist/types/common/types/slots.types.d.ts +1 -1
- package/dist/types/common/utils/interactiveTarget.d.ts +7 -0
- package/dist/types/common/utils/listNavigation.d.ts +49 -0
- package/dist/types/common/utils/renderIcon.d.ts +1 -1
- package/dist/types/common/utils/scrollAncestors.d.ts +10 -0
- package/dist/types/common/virtualList/index.d.ts +2 -2
- package/dist/types/common/virtualList/scroller.d.ts +33 -0
- package/dist/types/common/virtualList/useColumnResize.d.ts +1 -1
- package/dist/types/common/virtualList/useColumns.d.ts +1 -1
- package/dist/types/common/virtualList/useRowDrag.d.ts +7 -2
- package/dist/types/common/virtualList/useRowNavigation.d.ts +12 -2
- package/dist/types/common/virtualList/useSorting.d.ts +1 -1
- package/dist/types/common/virtualList/useVirtualWindow.d.ts +22 -3
- package/dist/types/common/virtualList/virtualList.d.ts +3 -3
- package/dist/types/common/virtualList/virtualList.types.d.ts +44 -4
- package/dist/types/common/virtualList/virtualList.utils.d.ts +1 -1
- package/dist/types/common/virtualList/virtualListHeader.d.ts +4 -4
- package/dist/types/common/virtualList/virtualRow.d.ts +1 -1
- package/dist/types/common/wizard/index.d.ts +1 -1
- package/dist/types/common/wizard/wizard.d.ts +1 -1
- package/dist/types/common/wizard/wizard.types.d.ts +1 -1
- package/dist/types/index.d.ts +154 -153
- package/dist/types/services/formValidation/index.d.ts +3 -3
- package/dist/types/services/formValidation/useFormValidatorGroup.d.ts +1 -1
- package/docs/ActionIcon.md +2 -0
- package/docs/CLAUDE.md +124 -230
- package/docs/Card.md +1 -1
- package/docs/Divider.md +2 -0
- package/docs/Dropdown.md +20 -0
- package/docs/Hooks.md +232 -0
- package/docs/IdleManager.md +38 -8
- package/docs/InputDropdown.md +11 -0
- package/docs/InteractableDiv.md +7 -1
- package/docs/KlipyPicker.md +1 -1
- package/docs/Loading.md +57 -14
- package/docs/Menu.md +27 -3
- package/docs/Modal.md +34 -10
- package/docs/MultiSelect.md +2 -2
- package/docs/Pagination.md +1 -1
- package/docs/Popover.md +4 -0
- package/docs/RadioGroup.md +1 -1
- package/docs/Rating.md +2 -0
- package/docs/Ripple.md +3 -0
- package/docs/RoomViewer.md +3 -5
- package/docs/ScrollFade.md +77 -0
- package/docs/ScrollbarProvider.md +2 -0
- package/docs/Slider.md +1 -1
- package/docs/Sticky.md +22 -1
- package/docs/Timer.md +1 -1
- package/docs/VirtualList.md +44 -4
- package/docs/Wizard.md +1 -1
- package/package.json +33 -11
- package/dist/esm/common/infiniteBlock/infiniteBlock.mjs +0 -2
- package/dist/esm/common/infiniteBlock/infiniteBlock.mjs.map +0 -1
- package/dist/esm/common/infiniteBlock/infiniteBlock.module.mjs +0 -2
- package/dist/esm/common/infiniteBlock/infiniteBlock.module.mjs.map +0 -1
- package/dist/esm/common/loading/iconLoading/iconLoading.mjs +0 -2
- package/dist/esm/common/loading/iconLoading/iconLoading.mjs.map +0 -1
- package/dist/esm/common/loading/iconLoading/iconLoading.module.mjs +0 -2
- package/dist/esm/common/loading/iconLoading/iconLoading.module.mjs.map +0 -1
- package/dist/esm/common/loading/iconLoading/index.mjs +0 -2
- package/dist/esm/common/loading/iconLoading/index.mjs.map +0 -1
- package/dist/types/common/infiniteBlock/index.d.ts +0 -1
- package/dist/types/common/infiniteBlock/infiniteBlock.d.ts +0 -4
- package/dist/types/common/infiniteBlock/infiniteBlock.types.d.ts +0 -13
- package/dist/types/common/loading/iconLoading/iconLoading.d.ts +0 -5
- package/dist/types/common/loading/iconLoading/index.d.ts +0 -2
- package/docs/Icon.md +0 -27
- package/docs/InfiniteBlock.md +0 -23
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
export { default as Accordion } from './common/accordion/index.js';
|
|
2
|
+
export * from './common/accordion/index.js';
|
|
3
|
+
export * from './common/actionButtons/index.js';
|
|
4
|
+
export { default as ActionIcon } from './common/actionIcon/index.js';
|
|
5
|
+
export * from './common/actionIcon/index.js';
|
|
6
|
+
export { default as Alert } from './common/alert/index.js';
|
|
7
|
+
export * from './common/alert/index.js';
|
|
8
|
+
export { default as AnimatedLogo } from './common/animatedLogo/index.js';
|
|
9
|
+
export * from './common/animatedLogo/index.js';
|
|
10
|
+
export { default as AnimatedText } from './common/animatedText/index.js';
|
|
11
|
+
export * from './common/animatedText/index.js';
|
|
12
|
+
export { default as Avatar } from './common/avatar/index.js';
|
|
13
|
+
export * from './common/avatar/index.js';
|
|
14
|
+
export { default as Badge } from './common/badge/index.js';
|
|
15
|
+
export * from './common/badge/index.js';
|
|
16
|
+
export { default as BodyEnd } from './common/bodyEnd/index.js';
|
|
17
|
+
export * from './common/bodyEnd/index.js';
|
|
18
|
+
export { default as Breadcrumb } from './common/breadcrumb/index.js';
|
|
19
|
+
export * from './common/breadcrumb/index.js';
|
|
20
|
+
export { default as Button } from './common/button/index.js';
|
|
21
|
+
export * from './common/button/index.js';
|
|
22
|
+
export { default as ButtonGroup } from './common/buttonGroup/index.js';
|
|
23
|
+
export * from './common/buttonGroup/index.js';
|
|
24
|
+
export { default as Card } from './common/card/index.js';
|
|
25
|
+
export * from './common/card/index.js';
|
|
26
|
+
export { default as Carousel } from './common/carousel/index.js';
|
|
27
|
+
export * from './common/carousel/index.js';
|
|
28
|
+
export { default as Checkbox } from './common/checkbox/index.js';
|
|
29
|
+
export * from './common/checkbox/index.js';
|
|
30
|
+
export { default as Chip } from './common/chip/index.js';
|
|
31
|
+
export * from './common/chip/index.js';
|
|
32
|
+
export { default as ColorPicker } from './common/colorPicker/index.js';
|
|
33
|
+
export * from './common/colorPicker/index.js';
|
|
34
|
+
export { default as ConfigProvider } from './common/configProvider/index.js';
|
|
35
|
+
export * from './common/configProvider/index.js';
|
|
36
|
+
export { default as ConfirmModal } from './common/confirmModal/index.js';
|
|
37
|
+
export * from './common/confirmModal/index.js';
|
|
38
|
+
export { default as DatePicker } from './common/datePicker/index.js';
|
|
39
|
+
export * from './common/datePicker/index.js';
|
|
40
|
+
export { default as Divider } from './common/divider/index.js';
|
|
41
|
+
export * from './common/divider/index.js';
|
|
42
|
+
export { default as Drawer } from './common/drawer/index.js';
|
|
43
|
+
export * from './common/drawer/index.js';
|
|
44
|
+
export { default as DropZone } from './common/dropZone/index.js';
|
|
45
|
+
export * from './common/dropZone/index.js';
|
|
46
|
+
export { default as Dropdown } from './common/dropdown/index.js';
|
|
47
|
+
export * from './common/dropdown/index.js';
|
|
48
|
+
export { default as EmptyState } from './common/emptyState/index.js';
|
|
49
|
+
export * from './common/emptyState/index.js';
|
|
50
|
+
export { default as ErrorBoundary } from './common/errorBoundary/index.js';
|
|
51
|
+
export * from './common/errorBoundary/index.js';
|
|
52
|
+
export { default as Fab } from './common/fab/index.js';
|
|
53
|
+
export * from './common/fab/index.js';
|
|
54
|
+
export { default as Flip } from './common/flip/index.js';
|
|
55
|
+
export * from './common/flip/index.js';
|
|
56
|
+
export * from './common/floorPlan/index.js';
|
|
57
|
+
export { default as IconPicker } from './common/iconPicker/index.js';
|
|
58
|
+
export * from './common/iconPicker/index.js';
|
|
59
|
+
export { default as IdleManager } from './common/idleManager/index.js';
|
|
60
|
+
export * from './common/idleManager/index.js';
|
|
61
|
+
export { default as Input } from './common/input/index.js';
|
|
62
|
+
export * from './common/input/index.js';
|
|
63
|
+
export { default as InputDropdown } from './common/inputDropdown/index.js';
|
|
64
|
+
export * from './common/inputDropdown/index.js';
|
|
65
|
+
export { default as InteractableDiv } from './common/interactableDiv/index.js';
|
|
66
|
+
export * from './common/interactableDiv/index.js';
|
|
67
|
+
export { default as KanbanBoard } from './common/kanbanBoard/index.js';
|
|
68
|
+
export * from './common/kanbanBoard/index.js';
|
|
69
|
+
export { default as KlipyPicker } from './common/klipyPicker/index.js';
|
|
70
|
+
export * from './common/klipyPicker/index.js';
|
|
71
|
+
export * from './common/loading/index.js';
|
|
72
|
+
export { default as Menu } from './common/menu/index.js';
|
|
73
|
+
export * from './common/menu/index.js';
|
|
74
|
+
export { default as Modal } from './common/modal/index.js';
|
|
75
|
+
export * from './common/modal/index.js';
|
|
76
|
+
export { default as MultiSelect } from './common/multiSelect/index.js';
|
|
77
|
+
export * from './common/multiSelect/index.js';
|
|
78
|
+
export { default as NumberInput } from './common/numberInput/index.js';
|
|
79
|
+
export * from './common/numberInput/index.js';
|
|
80
|
+
export { default as OptionPicker } from './common/optionPicker/index.js';
|
|
81
|
+
export * from './common/optionPicker/index.js';
|
|
82
|
+
export { default as OtpInput } from './common/otpInput/index.js';
|
|
83
|
+
export * from './common/otpInput/index.js';
|
|
84
|
+
export { default as Overscroll } from './common/overscroll/index.js';
|
|
85
|
+
export * from './common/overscroll/index.js';
|
|
86
|
+
export { default as Pagination } from './common/pagination/index.js';
|
|
87
|
+
export * from './common/pagination/index.js';
|
|
88
|
+
export { default as Popover } from './common/popover/index.js';
|
|
89
|
+
export * from './common/popover/index.js';
|
|
90
|
+
export { default as ProgressBar } from './common/progressBar/index.js';
|
|
91
|
+
export * from './common/progressBar/index.js';
|
|
92
|
+
export { default as RadioGroup } from './common/radioGroup/index.js';
|
|
93
|
+
export * from './common/radioGroup/index.js';
|
|
94
|
+
export { default as Rating } from './common/rating/index.js';
|
|
95
|
+
export * from './common/rating/index.js';
|
|
96
|
+
export { default as RevealLens } from './common/revealLens/index.js';
|
|
97
|
+
export * from './common/revealLens/index.js';
|
|
98
|
+
export { default as Ripple } from './common/ripple/index.js';
|
|
99
|
+
export * from './common/ripple/index.js';
|
|
100
|
+
export { default as RoomDrawer } from './common/roomDrawer/index.js';
|
|
101
|
+
export * from './common/roomDrawer/index.js';
|
|
102
|
+
export { default as RoomViewer } from './common/roomViewer/index.js';
|
|
103
|
+
export * from './common/roomViewer/index.js';
|
|
104
|
+
export { default as ScrollFade } from './common/scrollFade/index.js';
|
|
105
|
+
export * from './common/scrollFade/index.js';
|
|
106
|
+
export { default as ScrollbarProvider } from './common/scrollbarProvider/index.js';
|
|
107
|
+
export * from './common/scrollbarProvider/index.js';
|
|
108
|
+
export { default as SearchInput } from './common/searchInput/index.js';
|
|
109
|
+
export * from './common/searchInput/index.js';
|
|
110
|
+
export { default as SectionHeader } from './common/sectionHeader/index.js';
|
|
111
|
+
export * from './common/sectionHeader/index.js';
|
|
112
|
+
export { default as Skeleton } from './common/skeleton/index.js';
|
|
113
|
+
export * from './common/skeleton/index.js';
|
|
114
|
+
export { default as Slider } from './common/slider/index.js';
|
|
115
|
+
export * from './common/slider/index.js';
|
|
116
|
+
export { default as SplitButton } from './common/splitButton/index.js';
|
|
117
|
+
export * from './common/splitButton/index.js';
|
|
118
|
+
export { default as Stepper } from './common/stepper/index.js';
|
|
119
|
+
export * from './common/stepper/index.js';
|
|
120
|
+
export { default as Sticky } from './common/sticky/index.js';
|
|
121
|
+
export * from './common/sticky/index.js';
|
|
122
|
+
export { default as Switch } from './common/switch/index.js';
|
|
123
|
+
export * from './common/switch/index.js';
|
|
124
|
+
export { default as TabHeader } from './common/tabHeader/index.js';
|
|
125
|
+
export * from './common/tabHeader/index.js';
|
|
126
|
+
export { default as Textarea } from './common/textarea/index.js';
|
|
127
|
+
export * from './common/textarea/index.js';
|
|
128
|
+
export { default as ThemeProvider } from './common/themeProvider/index.js';
|
|
129
|
+
export * from './common/themeProvider/index.js';
|
|
130
|
+
export { useTheme } from './common/themeProvider/useTheme.js';
|
|
131
|
+
export { default as Tilt } from './common/tilt/index.js';
|
|
132
|
+
export * from './common/tilt/index.js';
|
|
133
|
+
export { default as TiltGroup } from './common/tiltGroup/index.js';
|
|
134
|
+
export * from './common/tiltGroup/index.js';
|
|
135
|
+
export { default as TimeInput } from './common/timeInput/index.js';
|
|
136
|
+
export * from './common/timeInput/index.js';
|
|
137
|
+
export { default as Timeline } from './common/timeline/index.js';
|
|
138
|
+
export * from './common/timeline/index.js';
|
|
139
|
+
export { default as Timer } from './common/timer/index.js';
|
|
140
|
+
export * from './common/timer/index.js';
|
|
141
|
+
export { default as ToastProvider } from './common/toast/index.js';
|
|
142
|
+
export * from './common/toast/index.js';
|
|
143
|
+
export { default as Tooltip } from './common/tooltip/index.js';
|
|
144
|
+
export * from './common/tooltip/index.js';
|
|
145
|
+
export { default as Tree } from './common/tree/index.js';
|
|
146
|
+
export * from './common/tree/index.js';
|
|
147
|
+
export { default as VirtualList } from './common/virtualList/index.js';
|
|
148
|
+
export * from './common/virtualList/index.js';
|
|
149
|
+
export { default as Wizard } from './common/wizard/index.js';
|
|
150
|
+
export * from './common/wizard/index.js';
|
|
151
|
+
export * from './common/hooks/index.js';
|
|
152
|
+
export { FormValidator, FormValidatorGroup, Validators, ValidatableComponent, useFormValidator, useFormValidatorGroup, } from './services/formValidation/index.js';
|
|
153
|
+
export type { ValidationError, ValidatorFunction, ErrorParser, FormValidatorGroupOptions, InferGroupValues, MergedValues, } from './services/formValidation/index.js';
|
|
154
|
+
export { mapLocale, setLocale, getLocale } from './services/localization.js';
|
|
155
|
+
export { isNumber, isDate, isISODate, isEmail, isBic, isURL, hasEightPasswordChars, hasOnePasswordLetter, hasOnePasswordDigit, isPassword, } from '@ahrowe/form-validation';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { FormValidatorGroup, FormGroup, FormValidatorGroupOptions, InferGroupValues } from '@ahrowe/form-validation';
|
|
2
|
+
import { default as React } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* FormValidatorGroup with `this.Form` automatically attached.
|
|
5
|
+
* Kept in a .tsx file so formValidatorGroup.ts stays framework-agnostic.
|
|
6
|
+
*
|
|
7
|
+
* This is the class you should use everywhere — it is a drop-in replacement
|
|
8
|
+
* for FormValidatorGroup with one extra property: `this.Form`.
|
|
9
|
+
*
|
|
10
|
+
* Also injects the default toast-based onSubmitError so both hook and class-component
|
|
11
|
+
* consumers surface errors out of the box; pass options.onSubmitError to override.
|
|
12
|
+
*/
|
|
13
|
+
export default class FormValidatorGroupWithForm<TGroup extends FormGroup = FormGroup, TInitial = InferGroupValues<TGroup>> extends FormValidatorGroup<TGroup, TInitial> {
|
|
14
|
+
Form: React.FC<React.FormHTMLAttributes<HTMLFormElement>>;
|
|
15
|
+
constructor(groupDef: TGroup, component?: {
|
|
16
|
+
forceUpdate: () => void;
|
|
17
|
+
} | null, options?: FormValidatorGroupOptions<TGroup, TInitial>);
|
|
18
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as FormValidatorGroup } from './FormValidatorGroupWithForm.js';
|
|
2
|
+
export { default as ValidatableComponent } from './validatableComponent.js';
|
|
3
|
+
export { useFormValidatorGroup } from './useFormValidatorGroup.js';
|
|
4
|
+
export { FormValidator, Validators, useFormValidator } from '@ahrowe/form-validation';
|
|
5
|
+
export type { ValidationError, ValidatorFunction, ErrorParser, FormValidatorGroupOptions, InferGroupValues, MergedValues, } from '@ahrowe/form-validation';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FormGroup, FormValidatorGroupOptions, InferGroupValues } from '@ahrowe/form-validation';
|
|
2
|
+
import { default as FormValidatorGroupWithForm } from './FormValidatorGroupWithForm.js';
|
|
3
|
+
/**
|
|
4
|
+
* @ahrowe/ui's flavour of useFormValidatorGroup: the group it creates has
|
|
5
|
+
* `.Form` attached and defaults `onSubmitError` to an error toast (see
|
|
6
|
+
* FormValidatorGroupWithForm). Reuses the core package's reactive wiring
|
|
7
|
+
* (useFormValidatorGroupInstance) so this and the pure hook share one
|
|
8
|
+
* implementation of "subscribe a function component to a group".
|
|
9
|
+
*/
|
|
10
|
+
export declare function useFormValidatorGroup<TGroup extends FormGroup = FormGroup, TInitial = InferGroupValues<TGroup>>(groupDef: TGroup, { initialValues, onSubmit, onValidate, errorParser, onSubmitError }?: FormValidatorGroupOptions<TGroup, TInitial>): FormValidatorGroupWithForm<TGroup, TInitial>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { default as React, PureComponent } from 'react';
|
|
2
|
+
import { FormValidator } from '@ahrowe/form-validation';
|
|
3
|
+
export interface ValidatableComponentProps {
|
|
4
|
+
formValidator?: FormValidator | null;
|
|
5
|
+
onMouseEnter?: ((event: React.MouseEvent) => void) | null;
|
|
6
|
+
onMouseLeave?: ((event: React.MouseEvent) => void) | null;
|
|
7
|
+
onFocus?: ((event: React.FocusEvent) => void) | null;
|
|
8
|
+
onBlur?: ((event: React.FocusEvent) => void) | null;
|
|
9
|
+
onChange?: ((value: unknown) => void) | null;
|
|
10
|
+
errorMessage?: string;
|
|
11
|
+
isValid?: boolean;
|
|
12
|
+
isRequired?: boolean;
|
|
13
|
+
label?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ValidatableComponentState {
|
|
16
|
+
isFocused: boolean;
|
|
17
|
+
isHovered: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Base class that extends PureComponent with FormValidator integration.
|
|
21
|
+
* Manages hover/focus state and renders error tooltips.
|
|
22
|
+
*/
|
|
23
|
+
export default class ValidatableComponent<P extends ValidatableComponentProps = ValidatableComponentProps, S extends ValidatableComponentState = ValidatableComponentState> extends PureComponent<P, S> {
|
|
24
|
+
static defaultProps: Partial<ValidatableComponentProps>;
|
|
25
|
+
constructor(props: P);
|
|
26
|
+
componentDidMount(): void;
|
|
27
|
+
componentDidUpdate(prevProps: P): void;
|
|
28
|
+
onMouseEnter(event: React.MouseEvent): void;
|
|
29
|
+
onMouseLeave(event: React.MouseEvent): void;
|
|
30
|
+
onFocus(event: React.FocusEvent): void;
|
|
31
|
+
onBlur(event: React.FocusEvent): void;
|
|
32
|
+
hasError(): boolean;
|
|
33
|
+
isRequired(): boolean;
|
|
34
|
+
renderTooltip(): React.ReactNode;
|
|
35
|
+
onChange(newVal: unknown): void;
|
|
36
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface KlipyMediaFormat {
|
|
2
|
+
url: string;
|
|
3
|
+
dims: [number, number];
|
|
4
|
+
size: number;
|
|
5
|
+
}
|
|
6
|
+
export interface KlipyResult {
|
|
7
|
+
id: string;
|
|
8
|
+
title: string;
|
|
9
|
+
media_formats: {
|
|
10
|
+
gif: KlipyMediaFormat;
|
|
11
|
+
tinygif: KlipyMediaFormat;
|
|
12
|
+
mediumgif: KlipyMediaFormat;
|
|
13
|
+
mp4: KlipyMediaFormat;
|
|
14
|
+
tinymp4: KlipyMediaFormat;
|
|
15
|
+
};
|
|
16
|
+
tags: string[];
|
|
17
|
+
url: string;
|
|
18
|
+
}
|
|
19
|
+
interface SearchOptions {
|
|
20
|
+
limit?: number;
|
|
21
|
+
contentfilter?: 'off' | 'low' | 'medium' | 'high';
|
|
22
|
+
pos?: string;
|
|
23
|
+
}
|
|
24
|
+
export default class KlipyService {
|
|
25
|
+
private key;
|
|
26
|
+
constructor(key: string);
|
|
27
|
+
search(query: string, options?: SearchOptions): Promise<{
|
|
28
|
+
results: KlipyResult[];
|
|
29
|
+
next: string;
|
|
30
|
+
}>;
|
|
31
|
+
searchSuggestions(query: string): Promise<{
|
|
32
|
+
results: string[];
|
|
33
|
+
}>;
|
|
34
|
+
registerShare(query: string, id: string): void;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{useComponentDefaults as e}from"../configProvider/useComponentDefaults.mjs";import{useLabels as t}from"../configProvider/useLabels.mjs";import n from"../interactableDiv/index.mjs";import r from"../actionIcon/actionIcon.mjs";import i from"./carousel.module.mjs";import a,{useEffect as
|
|
1
|
+
"use client";import{useComponentDefaults as e}from"../configProvider/useComponentDefaults.mjs";import{useLabels as t}from"../configProvider/useLabels.mjs";import n from"../interactableDiv/index.mjs";import r from"../actionIcon/actionIcon.mjs";import i from"./carousel.module.mjs";import a from"../styles/scrollFade.module.mjs";import o,{useEffect as ee,useLayoutEffect as s,useRef as c,useState as l}from"react";import u from"classnames";import{faChevronLeft as te,faChevronRight as ne}from"@fortawesome/free-solid-svg-icons";import{Fragment as re,jsx as d,jsxs as f}from"react/jsx-runtime";var p=10,ie=.2,ae={previous:`Previous slide`,next:`Next slide`,slides:`Slides`,goToSlide:e=>`Go to slide ${e}`};function m(m){let{children:oe,currentIndex:_,defaultIndex:se=0,onChange:ce=()=>{},loop:le=!0,autoPlay:v=!1,autoPlayInterval:y=4e3,pauseOnHover:ue=!0,showArrows:de=!0,showDots:fe=!0,swipeable:pe=!0,lazyRender:me=!1,adaptiveHeight:b=!1,className:he,style:ge,classNames:x,styles:S,labels:_e,...C}=e(`Carousel`,m),w=t(`Carousel`,_e,ae),T=o.useId(),E=o.Children.toArray(oe),D=E.length,O=le&&D>1,k=+!!O,A=O?[E[D-1],...E,E[0]]:E,j=_!==void 0,[ve,ye]=l(()=>g(se,D,O)),M=g(j?_:ve,D,O),[N,P]=l(M+k),[be,F]=l(!0),I=c(M),[xe,L]=l(!1),[Se,R]=l(!1),[Ce,z]=l(!1),B=c(null),V=c(null),H=c(null),U=A.length>0?100/A.length:100;s(()=>{let e=I.current;if(I.current=M,e===M)return;let t=A.length-1,n=N;O&&N===0?n=D:O&&N===t&&(n=1);let r=O&&e===D-1&&M===0,i=O&&e===0&&M===D-1,a;a=r?n+1:i?n-1:M+k;let o=V.current;n!==N&&o&&(o.style.transition=`none`,o.style.transform=h(n,0,U),o.offsetWidth,o.style.transition=``),F(!0),P(a)},[M]);let[W,we]=l(()=>({min:M+k-1,max:M+k+1})),Te=Math.min(W.min,N-1),Ee=Math.max(W.max,N+1),[De,Oe]=l(void 0);s(()=>{if(!b)return;let e=V.current?.children[N];if(!e)return;let t=()=>Oe(e.offsetHeight);t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[b,N,D]),s(()=>{let e=H.current,t=e?.children[M];e&&t&&(e.scrollLeft=t.offsetLeft-(e.clientWidth-t.offsetWidth)/2)},[M,D]);function G(e){let t=g(e,D,O);j||ye(t),ce(t)}function K(){!O&&M>=D-1||G(M+1)}function q(){!O&&M<=0||G(M-1)}function ke(e){e.target===e.currentTarget&&(we({min:N-1,max:N+1}),O&&(N===0?(F(!1),P(D)):N===A.length-1&&(F(!1),P(1))))}let J=v&&ue,Y=xe||Se||Ce;ee(()=>{if(!v||D<=1||Y)return;let e=setInterval(K,y);return()=>clearInterval(e)},[v,y,Y,M,D]);let X=c(null);function Ae(e){!pe||D<=1||(X.current={startX:e.clientX,startY:e.clientY,width:B.current?.getBoundingClientRect().width||1,axisLocked:!1,active:!0,offsetPercent:0})}function je(e){let t=X.current;if(!t||!t.active)return;let n=e.clientX-t.startX,r=e.clientY-t.startY;if(!t.axisLocked){if(Math.abs(n)<p&&Math.abs(r)<p)return;if(Math.abs(r)>Math.abs(n)){t.active=!1;return}t.axisLocked=!0,e.currentTarget.setPointerCapture?.(e.pointerId),z(!0),F(!1)}t.offsetPercent=n/t.width*100,V.current&&(V.current.style.transform=h(N,t.offsetPercent,U))}function Me(){let e=X.current;if(X.current=null,!e||!e.axisLocked){z(!1);return}F(!0),z(!1),V.current&&(V.current.style.transition=``,V.current.style.transform=h(N,0,U)),Math.abs(e.offsetPercent)>=ie*100&&(e.offsetPercent<0?K():q())}function Ne(e){e.defaultPrevented||V.current?.contains(e.target)||(e.key===`ArrowLeft`?(e.preventDefault(),q()):e.key===`ArrowRight`&&(e.preventDefault(),K()))}function Pe(e){let t=null;if(e.key===`ArrowLeft`?t=M-1:e.key===`ArrowRight`?t=M+1:e.key===`Home`?t=0:e.key===`End`&&(t=D-1),t===null)return;e.preventDefault();let n=g(t,D,O);G(n),(H.current?.children[n])?.focus()}let Fe=fe&&D>1,Ie=e=>`${T}-dot-${e}`,Z=e=>`${T}-slide-${e}`,Le=C[`aria-label`]!==void 0||C[`aria-labelledby`]!==void 0;function Re(e){return Fe?{id:Z(e),role:`tabpanel`,"aria-labelledby":Ie(e)}:{id:Z(e),role:`group`,"aria-roledescription":`slide`,"aria-label":`${e+1} of ${D}`}}let Q=!O&&M<=0,$=!O&&M>=D-1,ze=h(N,0,U);return f(`div`,{...C,ref:B,role:Le?`region`:`group`,"aria-roledescription":`carousel`,className:u(i.carousel,b&&i.carouselAdaptive,x?.root,he),style:{height:b?De:void 0,...ge,...S?.root},onMouseEnter:J?()=>L(!0):void 0,onMouseLeave:J?()=>L(!1):void 0,onFocus:J?()=>R(!0):void 0,onBlur:J?()=>R(!1):void 0,onKeyDown:Ne,children:[d(`div`,{ref:V,className:u(i.carouselTrack,b&&i.carouselTrackAdaptive,x?.track),style:{width:`${A.length*100}%`,transform:ze,transition:be?void 0:`none`,...S?.track},"aria-live":v?`off`:`polite`,onTransitionEnd:ke,onPointerDown:Ae,onPointerMove:je,onPointerUp:Me,onPointerCancel:Me,children:A.map((e,t)=>{let n=O&&(t===0||t===A.length-1),r=t-k,a=!n&&r===M,o=!me||t>=Te&&t<=Ee;return d(`div`,{...n?{}:Re(r),className:u(i.carouselSlide,x?.slide),style:{width:`${100/A.length}%`,...S?.slide},inert:!a||void 0,children:o?e:null},`carousel-slide-${t}`)})}),de&&D>1&&f(re,{children:[d(r,{icon:te,title:w.previous,"aria-label":w.previous,"aria-disabled":Q||void 0,onClick:()=>!Q&&q(),className:u(i.carouselPrevButton,Q&&i.carouselButtonDisabled,x?.prevButton),style:S?.prevButton}),d(r,{icon:ne,title:w.next,"aria-label":w.next,"aria-disabled":$||void 0,onClick:()=>!$&&K(),className:u(i.carouselNextButton,$&&i.carouselButtonDisabled,x?.nextButton),style:S?.nextButton})]}),Fe&&d(`div`,{ref:H,role:`tablist`,"aria-label":w.slides,className:u(i.carouselDots,a.scrollFade,a.scrollFadeX,a.scrollFadeFadedStart,a.scrollFadeFadedEnd,x?.dots),style:S?.dots,onKeyDown:Pe,children:E.map((e,t)=>d(n,{id:Ie(t),role:`tab`,"aria-label":w.goToSlide(t+1),"aria-selected":t===M,"aria-controls":Z(t),tabIndex:t===M?0:-1,onClick:()=>G(t),className:u(i.carouselDot,t===M&&i.carouselDotActive,x?.dot),style:S?.dot},`carousel-dot-${t}`))})]})}function h(e,t,n){return`translateX(calc(${-e*n}% + ${n/100*t}%))`}function g(e,t,n){return t===0?0:n?(e%t+t)%t:Math.max(0,Math.min(t-1,e))}export{m as default};
|
|
2
2
|
//# sourceMappingURL=carousel.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carousel.mjs","names":[],"sources":["../../../../package/common/carousel/carousel.tsx"],"sourcesContent":["import React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport cx from 'classnames';\nimport { faChevronLeft, faChevronRight } from '@fortawesome/free-solid-svg-icons';\n\nimport ActionIcon from '../actionIcon';\nimport InteractableDiv from '../interactableDiv';\nimport { useComponentDefaults, useLabels } from '../configProvider';\nimport type { CarouselLabels, CarouselProps } from './carousel.types';\n\nimport styles from './carousel.module.pcss';\n\nconst AXIS_LOCK_THRESHOLD = 10;\nconst DRAG_COMMIT_RATIO = 0.2;\n\nconst DEFAULT_LABELS: Required<CarouselLabels> = {\n previous: 'Previous slide',\n next: 'Next slide',\n slides: 'Slides',\n goToSlide: (slide) => `Go to slide ${slide}`,\n};\n\nfunction Carousel(props: CarouselProps) {\n const {\n children,\n currentIndex,\n defaultIndex = 0,\n onChange = () => {},\n loop = true,\n autoPlay = false,\n autoPlayInterval = 4000,\n pauseOnHover = true,\n showArrows = true,\n showDots = true,\n swipeable = true,\n lazyRender = false,\n adaptiveHeight = false,\n className,\n style,\n classNames,\n styles: slotStyles,\n labels,\n ...rest\n } = useComponentDefaults('Carousel', props);\n const text = useLabels('Carousel', labels, DEFAULT_LABELS);\n\n const instanceId = React.useId();\n const slides = React.Children.toArray(children);\n const count = slides.length;\n const canLoop = loop && count > 1;\n const offset = canLoop ? 1 : 0;\n const extendedSlides = canLoop ? [slides[count - 1], ...slides, slides[0]] : slides;\n\n const isControlled = currentIndex !== undefined;\n const [internalIndex, setInternalIndex] = useState(() => clampIndex(defaultIndex, count, canLoop));\n const realIndex = clampIndex(isControlled ? currentIndex! : internalIndex, count, canLoop);\n\n const [displayIndex, setDisplayIndex] = useState(realIndex + offset);\n const [transitionEnabled, setTransitionEnabled] = useState(true);\n const prevRealIndexRef = useRef(realIndex);\n\n const [hovered, setHovered] = useState(false);\n const [focused, setFocused] = useState(false);\n const [dragging, setDragging] = useState(false);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const trackRef = useRef<HTMLDivElement>(null);\n const dotsRef = useRef<HTMLDivElement>(null);\n\n const slideWidthPercent = extendedSlides.length > 0 ? 100 / extendedSlides.length : 100;\n\n useLayoutEffect(() => {\n const prevReal = prevRealIndexRef.current;\n prevRealIndexRef.current = realIndex;\n if (prevReal === realIndex) return;\n\n // A wrap parks the track on a clone until transitionEnd swaps it back, so a change arriving\n // before that has to animate from the normalised position rather than the clone.\n const lastExtendedIndex = extendedSlides.length - 1;\n let fromIndex = displayIndex;\n if (canLoop && displayIndex === 0) fromIndex = count;\n else if (canLoop && displayIndex === lastExtendedIndex) fromIndex = 1;\n\n const forwardWrap = canLoop && prevReal === count - 1 && realIndex === 0;\n const backwardWrap = canLoop && prevReal === 0 && realIndex === count - 1;\n\n let target: number;\n if (forwardWrap) target = fromIndex + 1;\n else if (backwardWrap) target = fromIndex - 1;\n else target = realIndex + offset;\n\n // Written straight to the node: the normalised position has to reach style recalculation on its\n // own, or it and the animated position collapse into one jump with no transition.\n const track = trackRef.current;\n if (fromIndex !== displayIndex && track) {\n track.style.transition = 'none';\n track.style.transform = buildTrackTransform(fromIndex, 0, slideWidthPercent);\n void track.offsetWidth;\n track.style.transition = '';\n }\n\n setTransitionEnabled(true);\n setDisplayIndex(target);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [realIndex]);\n\n // The window of slides `lazyRender` keeps mounted, as of the last settled position. Slides are\n // rendered for the union of this and the current window, so the ones a multi-step jump slides\n // past stay mounted until the transform transition ends instead of blanking out mid-flight.\n const [settledMountRange, setSettledMountRange] = useState(() => ({\n min: realIndex + offset - 1,\n max: realIndex + offset + 1,\n }));\n const mountMin = Math.min(settledMountRange.min, displayIndex - 1);\n const mountMax = Math.max(settledMountRange.max, displayIndex + 1);\n\n const [contentHeight, setContentHeight] = useState<number | undefined>(undefined);\n\n useLayoutEffect(() => {\n if (!adaptiveHeight) return;\n const slideElement = trackRef.current?.children[displayIndex] as HTMLElement | undefined;\n if (!slideElement) return;\n\n const update = () => setContentHeight(slideElement.offsetHeight);\n update();\n\n const observer = new ResizeObserver(update);\n observer.observe(slideElement);\n return () => observer.disconnect();\n }, [adaptiveHeight, displayIndex, count]);\n\n // Keeps the selected dot in view. Written as `scrollLeft` because `scrollIntoView` is free to\n // scroll the page along with it.\n useLayoutEffect(() => {\n const strip = dotsRef.current;\n const dot = strip?.children[realIndex] as HTMLElement | undefined;\n if (!strip || !dot) return;\n strip.scrollLeft = dot.offsetLeft - (strip.clientWidth - dot.offsetWidth) / 2;\n }, [realIndex, count]);\n\n function goToIndex(nextIndex: number) {\n const clamped = clampIndex(nextIndex, count, canLoop);\n if (!isControlled) setInternalIndex(clamped);\n onChange(clamped);\n }\n\n function goNext() {\n if (!canLoop && realIndex >= count - 1) return;\n goToIndex(realIndex + 1);\n }\n\n function goPrev() {\n if (!canLoop && realIndex <= 0) return;\n goToIndex(realIndex - 1);\n }\n\n function handleTrackTransitionEnd(event: React.TransitionEvent<HTMLDivElement>) {\n if (event.target !== event.currentTarget) return;\n setSettledMountRange({ min: displayIndex - 1, max: displayIndex + 1 });\n\n if (!canLoop) return;\n if (displayIndex === 0) {\n setTransitionEnabled(false);\n setDisplayIndex(count);\n } else if (displayIndex === extendedSlides.length - 1) {\n setTransitionEnabled(false);\n setDisplayIndex(1);\n }\n }\n\n // Hover and focus only ever pause the timer, so without one they are not worth tracking.\n const tracksPointerPause = autoPlay && pauseOnHover;\n const isPaused = hovered || focused || dragging;\n useEffect(() => {\n if (!autoPlay || count <= 1 || isPaused) return;\n const timer = setInterval(goNext, autoPlayInterval);\n return () => clearInterval(timer);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [autoPlay, autoPlayInterval, isPaused, realIndex, count]);\n\n // A drag follows the pointer through the node, not through state: a render per move event would\n // rebuild every slide and dot for something only the track's transform sees.\n const dragRef = useRef<{\n startX: number;\n startY: number;\n width: number;\n axisLocked: boolean;\n active: boolean;\n offsetPercent: number;\n } | null>(null);\n\n function handlePointerDown(event: React.PointerEvent<HTMLDivElement>) {\n if (!swipeable || count <= 1) return;\n dragRef.current = {\n startX: event.clientX,\n startY: event.clientY,\n // Measured once: measuring per move would force a layout between the transform writes.\n width: containerRef.current?.getBoundingClientRect().width || 1,\n axisLocked: false,\n active: true,\n offsetPercent: 0,\n };\n }\n\n function handlePointerMove(event: React.PointerEvent<HTMLDivElement>) {\n const drag = dragRef.current;\n if (!drag || !drag.active) return;\n\n const deltaX = event.clientX - drag.startX;\n const deltaY = event.clientY - drag.startY;\n\n if (!drag.axisLocked) {\n if (Math.abs(deltaX) < AXIS_LOCK_THRESHOLD && Math.abs(deltaY) < AXIS_LOCK_THRESHOLD) return;\n if (Math.abs(deltaY) > Math.abs(deltaX)) {\n drag.active = false;\n return;\n }\n drag.axisLocked = true;\n // Never on pointerdown: a captured pointer sends its `click` to the capture target too, so\n // capturing earlier would swallow every click meant for a button inside a slide.\n event.currentTarget.setPointerCapture?.(event.pointerId);\n setDragging(true);\n setTransitionEnabled(false);\n }\n\n drag.offsetPercent = (deltaX / drag.width) * 100;\n if (trackRef.current) {\n trackRef.current.style.transform = buildTrackTransform(displayIndex, drag.offsetPercent, slideWidthPercent);\n }\n }\n\n function handlePointerUp() {\n const drag = dragRef.current;\n dragRef.current = null;\n if (!drag || !drag.axisLocked) {\n setDragging(false);\n return;\n }\n\n setTransitionEnabled(true);\n setDragging(false);\n\n // React never saw the dragged transform, so it has to be handed back by hand, and always: a\n // drag that changes no index would otherwise strand the track off-screen. One that does change\n // it overwrites this in the same tick, and still animates on from where the pointer left off.\n if (trackRef.current) {\n trackRef.current.style.transition = '';\n trackRef.current.style.transform = buildTrackTransform(displayIndex, 0, slideWidthPercent);\n }\n\n if (Math.abs(drag.offsetPercent) >= DRAG_COMMIT_RATIO * 100) {\n if (drag.offsetPercent < 0) goNext();\n else goPrev();\n }\n }\n\n // Arrow keys belong to the carousel's own controls, never to the slides: a text field or a\n // scrollable region in a slide has to keep its own. `defaultPrevented` leaves the dots to their\n // own handling below.\n function handleKeyDown(event: React.KeyboardEvent<HTMLDivElement>) {\n if (event.defaultPrevented || trackRef.current?.contains(event.target as Node)) return;\n\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n goPrev();\n } else if (event.key === 'ArrowRight') {\n event.preventDefault();\n goNext();\n }\n }\n\n function handleDotsKeyDown(event: React.KeyboardEvent<HTMLDivElement>) {\n let next: number | null = null;\n if (event.key === 'ArrowLeft') next = realIndex - 1;\n else if (event.key === 'ArrowRight') next = realIndex + 1;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = count - 1;\n if (next === null) return;\n\n event.preventDefault();\n const clamped = clampIndex(next, count, canLoop);\n goToIndex(clamped);\n // The selected dot is the one holding the tab stop, so focus has to travel with the selection.\n (dotsRef.current?.children[clamped] as HTMLElement | undefined)?.focus();\n }\n\n // The dots are the APG tablist over the slides. Without them the slides describe themselves as\n // plain slides rather than as panels.\n const hasTabs = showDots && count > 1;\n const dotId = (index: number) => `${instanceId}-dot-${index}`;\n const slideId = (index: number) => `${instanceId}-slide-${index}`;\n\n // An unnamed landmark is worse than none, so the carousel is only a region once it has a name.\n const isNamed = rest['aria-label'] !== undefined || rest['aria-labelledby'] !== undefined;\n\n function slideSemantics(index: number) {\n if (hasTabs) {\n return { id: slideId(index), role: 'tabpanel', 'aria-labelledby': dotId(index) };\n }\n return {\n id: slideId(index),\n role: 'group',\n 'aria-roledescription': 'slide',\n 'aria-label': `${index + 1} of ${count}`,\n };\n }\n\n const isPrevDisabled = !canLoop && realIndex <= 0;\n const isNextDisabled = !canLoop && realIndex >= count - 1;\n\n const trackTransform = buildTrackTransform(displayIndex, 0, slideWidthPercent);\n\n return (\n <div\n {...rest}\n ref={containerRef}\n role={isNamed ? 'region' : 'group'}\n aria-roledescription='carousel'\n className={cx(styles.carousel, adaptiveHeight && styles.carouselAdaptive, classNames?.root, className)}\n style={{ height: adaptiveHeight ? contentHeight : undefined, ...style, ...slotStyles?.root }}\n onMouseEnter={tracksPointerPause ? () => setHovered(true) : undefined}\n onMouseLeave={tracksPointerPause ? () => setHovered(false) : undefined}\n onFocus={tracksPointerPause ? () => setFocused(true) : undefined}\n onBlur={tracksPointerPause ? () => setFocused(false) : undefined}\n onKeyDown={handleKeyDown}\n >\n <div\n ref={trackRef}\n className={cx(styles.carouselTrack, adaptiveHeight && styles.carouselTrackAdaptive, classNames?.track)}\n style={{\n width: `${extendedSlides.length * 100}%`,\n transform: trackTransform,\n transition: transitionEnabled ? undefined : 'none',\n ...slotStyles?.track,\n }}\n aria-live={autoPlay ? 'off' : 'polite'}\n onTransitionEnd={handleTrackTransitionEnd}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n >\n {extendedSlides.map((slide, idx) => {\n const isClonePosition = canLoop && (idx === 0 || idx === extendedSlides.length - 1);\n const logicalIndex = idx - offset;\n const isActive = !isClonePosition && logicalIndex === realIndex;\n const isRendered = !lazyRender || (idx >= mountMin && idx <= mountMax);\n\n return (\n <div\n key={`carousel-slide-${idx}`}\n {...(isClonePosition ? {} : slideSemantics(logicalIndex))}\n className={cx(styles.carouselSlide, classNames?.slide)}\n style={{ width: `${100 / extendedSlides.length}%`, ...slotStyles?.slide }}\n inert={isActive ? undefined : true}\n >\n {isRendered ? slide : null}\n </div>\n );\n })}\n </div>\n\n {showArrows && count > 1 && (\n <>\n <ActionIcon\n icon={faChevronLeft}\n title={text.previous}\n aria-label={text.previous}\n aria-disabled={isPrevDisabled || undefined}\n onClick={() => !isPrevDisabled && goPrev()}\n className={cx(\n styles.carouselPrevButton,\n isPrevDisabled && styles.carouselButtonDisabled,\n classNames?.prevButton,\n )}\n style={slotStyles?.prevButton}\n />\n <ActionIcon\n icon={faChevronRight}\n title={text.next}\n aria-label={text.next}\n aria-disabled={isNextDisabled || undefined}\n onClick={() => !isNextDisabled && goNext()}\n className={cx(\n styles.carouselNextButton,\n isNextDisabled && styles.carouselButtonDisabled,\n classNames?.nextButton,\n )}\n style={slotStyles?.nextButton}\n />\n </>\n )}\n\n {hasTabs && (\n <div\n ref={dotsRef}\n role='tablist'\n aria-label={text.slides}\n className={cx(styles.carouselDots, classNames?.dots)}\n style={slotStyles?.dots}\n onKeyDown={handleDotsKeyDown}\n >\n {slides.map((_, index) => (\n <InteractableDiv\n key={`carousel-dot-${index}`}\n id={dotId(index)}\n role='tab'\n aria-label={text.goToSlide(index + 1)}\n aria-selected={index === realIndex}\n aria-controls={slideId(index)}\n // One tab stop for the whole set, arrow keys inside it.\n tabIndex={index === realIndex ? 0 : -1}\n onClick={() => goToIndex(index)}\n className={cx(styles.carouselDot, index === realIndex && styles.carouselDotActive, classNames?.dot)}\n style={slotStyles?.dot}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction buildTrackTransform(position: number, dragPercent: number, slideWidthPercent: number): string {\n return `translateX(calc(${-position * slideWidthPercent}% + ${dragPercent * (slideWidthPercent / 100)}%))`;\n}\n\nfunction clampIndex(index: number, count: number, canLoop: boolean): number {\n if (count === 0) return 0;\n if (canLoop) return ((index % count) + count) % count;\n return Math.max(0, Math.min(count - 1, index));\n}\n\nexport default Carousel;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"carousel.mjs","names":[],"sources":["../../../../package/common/carousel/carousel.tsx"],"sourcesContent":["import React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport cx from 'classnames';\nimport { faChevronLeft, faChevronRight } from '@fortawesome/free-solid-svg-icons';\n\nimport ActionIcon from '../actionIcon';\nimport InteractableDiv from '../interactableDiv';\nimport { useComponentDefaults, useLabels } from '../configProvider';\nimport type { CarouselLabels, CarouselProps } from './carousel.types';\n\nimport styles from './carousel.module.pcss';\nimport fadeStyles from 'components/common/styles/scrollFade.module.pcss';\n\nconst AXIS_LOCK_THRESHOLD = 10;\nconst DRAG_COMMIT_RATIO = 0.2;\n\nconst DEFAULT_LABELS: Required<CarouselLabels> = {\n previous: 'Previous slide',\n next: 'Next slide',\n slides: 'Slides',\n goToSlide: (slide) => `Go to slide ${slide}`,\n};\n\nfunction Carousel(props: CarouselProps) {\n const {\n children,\n currentIndex,\n defaultIndex = 0,\n onChange = () => {},\n loop = true,\n autoPlay = false,\n autoPlayInterval = 4000,\n pauseOnHover = true,\n showArrows = true,\n showDots = true,\n swipeable = true,\n lazyRender = false,\n adaptiveHeight = false,\n className,\n style,\n classNames,\n styles: slotStyles,\n labels,\n ...rest\n } = useComponentDefaults('Carousel', props);\n const text = useLabels('Carousel', labels, DEFAULT_LABELS);\n\n const instanceId = React.useId();\n const slides = React.Children.toArray(children);\n const count = slides.length;\n const canLoop = loop && count > 1;\n const offset = canLoop ? 1 : 0;\n const extendedSlides = canLoop ? [slides[count - 1], ...slides, slides[0]] : slides;\n\n const isControlled = currentIndex !== undefined;\n const [internalIndex, setInternalIndex] = useState(() => clampIndex(defaultIndex, count, canLoop));\n const realIndex = clampIndex(isControlled ? currentIndex! : internalIndex, count, canLoop);\n\n const [displayIndex, setDisplayIndex] = useState(realIndex + offset);\n const [transitionEnabled, setTransitionEnabled] = useState(true);\n const prevRealIndexRef = useRef(realIndex);\n\n const [hovered, setHovered] = useState(false);\n const [focused, setFocused] = useState(false);\n const [dragging, setDragging] = useState(false);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const trackRef = useRef<HTMLDivElement>(null);\n const dotsRef = useRef<HTMLDivElement>(null);\n\n const slideWidthPercent = extendedSlides.length > 0 ? 100 / extendedSlides.length : 100;\n\n useLayoutEffect(() => {\n const prevReal = prevRealIndexRef.current;\n prevRealIndexRef.current = realIndex;\n if (prevReal === realIndex) return;\n\n // A wrap parks the track on a clone until transitionEnd swaps it back, so a change arriving\n // before that has to animate from the normalised position rather than the clone.\n const lastExtendedIndex = extendedSlides.length - 1;\n let fromIndex = displayIndex;\n if (canLoop && displayIndex === 0) fromIndex = count;\n else if (canLoop && displayIndex === lastExtendedIndex) fromIndex = 1;\n\n const forwardWrap = canLoop && prevReal === count - 1 && realIndex === 0;\n const backwardWrap = canLoop && prevReal === 0 && realIndex === count - 1;\n\n let target: number;\n if (forwardWrap) target = fromIndex + 1;\n else if (backwardWrap) target = fromIndex - 1;\n else target = realIndex + offset;\n\n // Written straight to the node: the normalised position has to reach style recalculation on its\n // own, or it and the animated position collapse into one jump with no transition.\n const track = trackRef.current;\n if (fromIndex !== displayIndex && track) {\n track.style.transition = 'none';\n track.style.transform = buildTrackTransform(fromIndex, 0, slideWidthPercent);\n void track.offsetWidth;\n track.style.transition = '';\n }\n\n setTransitionEnabled(true);\n setDisplayIndex(target);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [realIndex]);\n\n // The window of slides `lazyRender` keeps mounted, as of the last settled position. Slides are\n // rendered for the union of this and the current window, so the ones a multi-step jump slides\n // past stay mounted until the transform transition ends instead of blanking out mid-flight.\n const [settledMountRange, setSettledMountRange] = useState(() => ({\n min: realIndex + offset - 1,\n max: realIndex + offset + 1,\n }));\n const mountMin = Math.min(settledMountRange.min, displayIndex - 1);\n const mountMax = Math.max(settledMountRange.max, displayIndex + 1);\n\n const [contentHeight, setContentHeight] = useState<number | undefined>(undefined);\n\n useLayoutEffect(() => {\n if (!adaptiveHeight) return;\n const slideElement = trackRef.current?.children[displayIndex] as HTMLElement | undefined;\n if (!slideElement) return;\n\n const update = () => setContentHeight(slideElement.offsetHeight);\n update();\n\n const observer = new ResizeObserver(update);\n observer.observe(slideElement);\n return () => observer.disconnect();\n }, [adaptiveHeight, displayIndex, count]);\n\n // Keeps the selected dot in view. Written as `scrollLeft` because `scrollIntoView` is free to\n // scroll the page along with it.\n useLayoutEffect(() => {\n const strip = dotsRef.current;\n const dot = strip?.children[realIndex] as HTMLElement | undefined;\n if (!strip || !dot) return;\n strip.scrollLeft = dot.offsetLeft - (strip.clientWidth - dot.offsetWidth) / 2;\n }, [realIndex, count]);\n\n function goToIndex(nextIndex: number) {\n const clamped = clampIndex(nextIndex, count, canLoop);\n if (!isControlled) setInternalIndex(clamped);\n onChange(clamped);\n }\n\n function goNext() {\n if (!canLoop && realIndex >= count - 1) return;\n goToIndex(realIndex + 1);\n }\n\n function goPrev() {\n if (!canLoop && realIndex <= 0) return;\n goToIndex(realIndex - 1);\n }\n\n function handleTrackTransitionEnd(event: React.TransitionEvent<HTMLDivElement>) {\n if (event.target !== event.currentTarget) return;\n setSettledMountRange({ min: displayIndex - 1, max: displayIndex + 1 });\n\n if (!canLoop) return;\n if (displayIndex === 0) {\n setTransitionEnabled(false);\n setDisplayIndex(count);\n } else if (displayIndex === extendedSlides.length - 1) {\n setTransitionEnabled(false);\n setDisplayIndex(1);\n }\n }\n\n // Hover and focus only ever pause the timer, so without one they are not worth tracking.\n const tracksPointerPause = autoPlay && pauseOnHover;\n const isPaused = hovered || focused || dragging;\n useEffect(() => {\n if (!autoPlay || count <= 1 || isPaused) return;\n const timer = setInterval(goNext, autoPlayInterval);\n return () => clearInterval(timer);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [autoPlay, autoPlayInterval, isPaused, realIndex, count]);\n\n // A drag follows the pointer through the node, not through state: a render per move event would\n // rebuild every slide and dot for something only the track's transform sees.\n const dragRef = useRef<{\n startX: number;\n startY: number;\n width: number;\n axisLocked: boolean;\n active: boolean;\n offsetPercent: number;\n } | null>(null);\n\n function handlePointerDown(event: React.PointerEvent<HTMLDivElement>) {\n if (!swipeable || count <= 1) return;\n dragRef.current = {\n startX: event.clientX,\n startY: event.clientY,\n // Measured once: measuring per move would force a layout between the transform writes.\n width: containerRef.current?.getBoundingClientRect().width || 1,\n axisLocked: false,\n active: true,\n offsetPercent: 0,\n };\n }\n\n function handlePointerMove(event: React.PointerEvent<HTMLDivElement>) {\n const drag = dragRef.current;\n if (!drag || !drag.active) return;\n\n const deltaX = event.clientX - drag.startX;\n const deltaY = event.clientY - drag.startY;\n\n if (!drag.axisLocked) {\n if (Math.abs(deltaX) < AXIS_LOCK_THRESHOLD && Math.abs(deltaY) < AXIS_LOCK_THRESHOLD) return;\n if (Math.abs(deltaY) > Math.abs(deltaX)) {\n drag.active = false;\n return;\n }\n drag.axisLocked = true;\n // Never on pointerdown: a captured pointer sends its `click` to the capture target too, so\n // capturing earlier would swallow every click meant for a button inside a slide.\n event.currentTarget.setPointerCapture?.(event.pointerId);\n setDragging(true);\n setTransitionEnabled(false);\n }\n\n drag.offsetPercent = (deltaX / drag.width) * 100;\n if (trackRef.current) {\n trackRef.current.style.transform = buildTrackTransform(displayIndex, drag.offsetPercent, slideWidthPercent);\n }\n }\n\n function handlePointerUp() {\n const drag = dragRef.current;\n dragRef.current = null;\n if (!drag || !drag.axisLocked) {\n setDragging(false);\n return;\n }\n\n setTransitionEnabled(true);\n setDragging(false);\n\n // React never saw the dragged transform, so it has to be handed back by hand, and always: a\n // drag that changes no index would otherwise strand the track off-screen. One that does change\n // it overwrites this in the same tick, and still animates on from where the pointer left off.\n if (trackRef.current) {\n trackRef.current.style.transition = '';\n trackRef.current.style.transform = buildTrackTransform(displayIndex, 0, slideWidthPercent);\n }\n\n if (Math.abs(drag.offsetPercent) >= DRAG_COMMIT_RATIO * 100) {\n if (drag.offsetPercent < 0) goNext();\n else goPrev();\n }\n }\n\n // Arrow keys belong to the carousel's own controls, never to the slides: a text field or a\n // scrollable region in a slide has to keep its own. `defaultPrevented` leaves the dots to their\n // own handling below.\n function handleKeyDown(event: React.KeyboardEvent<HTMLDivElement>) {\n if (event.defaultPrevented || trackRef.current?.contains(event.target as Node)) return;\n\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n goPrev();\n } else if (event.key === 'ArrowRight') {\n event.preventDefault();\n goNext();\n }\n }\n\n function handleDotsKeyDown(event: React.KeyboardEvent<HTMLDivElement>) {\n let next: number | null = null;\n if (event.key === 'ArrowLeft') next = realIndex - 1;\n else if (event.key === 'ArrowRight') next = realIndex + 1;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = count - 1;\n if (next === null) return;\n\n event.preventDefault();\n const clamped = clampIndex(next, count, canLoop);\n goToIndex(clamped);\n // The selected dot is the one holding the tab stop, so focus has to travel with the selection.\n (dotsRef.current?.children[clamped] as HTMLElement | undefined)?.focus();\n }\n\n // The dots are the APG tablist over the slides. Without them the slides describe themselves as\n // plain slides rather than as panels.\n const hasTabs = showDots && count > 1;\n const dotId = (index: number) => `${instanceId}-dot-${index}`;\n const slideId = (index: number) => `${instanceId}-slide-${index}`;\n\n // An unnamed landmark is worse than none, so the carousel is only a region once it has a name.\n const isNamed = rest['aria-label'] !== undefined || rest['aria-labelledby'] !== undefined;\n\n function slideSemantics(index: number) {\n if (hasTabs) {\n return { id: slideId(index), role: 'tabpanel', 'aria-labelledby': dotId(index) };\n }\n return {\n id: slideId(index),\n role: 'group',\n 'aria-roledescription': 'slide',\n 'aria-label': `${index + 1} of ${count}`,\n };\n }\n\n const isPrevDisabled = !canLoop && realIndex <= 0;\n const isNextDisabled = !canLoop && realIndex >= count - 1;\n\n const trackTransform = buildTrackTransform(displayIndex, 0, slideWidthPercent);\n\n return (\n <div\n {...rest}\n ref={containerRef}\n role={isNamed ? 'region' : 'group'}\n aria-roledescription='carousel'\n className={cx(styles.carousel, adaptiveHeight && styles.carouselAdaptive, classNames?.root, className)}\n style={{ height: adaptiveHeight ? contentHeight : undefined, ...style, ...slotStyles?.root }}\n onMouseEnter={tracksPointerPause ? () => setHovered(true) : undefined}\n onMouseLeave={tracksPointerPause ? () => setHovered(false) : undefined}\n onFocus={tracksPointerPause ? () => setFocused(true) : undefined}\n onBlur={tracksPointerPause ? () => setFocused(false) : undefined}\n onKeyDown={handleKeyDown}\n >\n <div\n ref={trackRef}\n className={cx(styles.carouselTrack, adaptiveHeight && styles.carouselTrackAdaptive, classNames?.track)}\n style={{\n width: `${extendedSlides.length * 100}%`,\n transform: trackTransform,\n transition: transitionEnabled ? undefined : 'none',\n ...slotStyles?.track,\n }}\n aria-live={autoPlay ? 'off' : 'polite'}\n onTransitionEnd={handleTrackTransitionEnd}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n >\n {extendedSlides.map((slide, idx) => {\n const isClonePosition = canLoop && (idx === 0 || idx === extendedSlides.length - 1);\n const logicalIndex = idx - offset;\n const isActive = !isClonePosition && logicalIndex === realIndex;\n const isRendered = !lazyRender || (idx >= mountMin && idx <= mountMax);\n\n return (\n <div\n key={`carousel-slide-${idx}`}\n {...(isClonePosition ? {} : slideSemantics(logicalIndex))}\n className={cx(styles.carouselSlide, classNames?.slide)}\n style={{ width: `${100 / extendedSlides.length}%`, ...slotStyles?.slide }}\n inert={isActive ? undefined : true}\n >\n {isRendered ? slide : null}\n </div>\n );\n })}\n </div>\n\n {showArrows && count > 1 && (\n <>\n <ActionIcon\n icon={faChevronLeft}\n title={text.previous}\n aria-label={text.previous}\n aria-disabled={isPrevDisabled || undefined}\n onClick={() => !isPrevDisabled && goPrev()}\n className={cx(\n styles.carouselPrevButton,\n isPrevDisabled && styles.carouselButtonDisabled,\n classNames?.prevButton,\n )}\n style={slotStyles?.prevButton}\n />\n <ActionIcon\n icon={faChevronRight}\n title={text.next}\n aria-label={text.next}\n aria-disabled={isNextDisabled || undefined}\n onClick={() => !isNextDisabled && goNext()}\n className={cx(\n styles.carouselNextButton,\n isNextDisabled && styles.carouselButtonDisabled,\n classNames?.nextButton,\n )}\n style={slotStyles?.nextButton}\n />\n </>\n )}\n\n {hasTabs && (\n <div\n ref={dotsRef}\n role='tablist'\n aria-label={text.slides}\n className={cx(\n styles.carouselDots,\n // Both ends always: the strip's own padding holds the outer dots clear of the fade\n // until there is something to scroll, so this needs no measuring.\n fadeStyles.scrollFade,\n fadeStyles.scrollFadeX,\n fadeStyles.scrollFadeFadedStart,\n fadeStyles.scrollFadeFadedEnd,\n classNames?.dots,\n )}\n style={slotStyles?.dots}\n onKeyDown={handleDotsKeyDown}\n >\n {slides.map((_, index) => (\n <InteractableDiv\n key={`carousel-dot-${index}`}\n id={dotId(index)}\n role='tab'\n aria-label={text.goToSlide(index + 1)}\n aria-selected={index === realIndex}\n aria-controls={slideId(index)}\n // One tab stop for the whole set, arrow keys inside it.\n tabIndex={index === realIndex ? 0 : -1}\n onClick={() => goToIndex(index)}\n className={cx(styles.carouselDot, index === realIndex && styles.carouselDotActive, classNames?.dot)}\n style={slotStyles?.dot}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction buildTrackTransform(position: number, dragPercent: number, slideWidthPercent: number): string {\n return `translateX(calc(${-position * slideWidthPercent}% + ${dragPercent * (slideWidthPercent / 100)}%))`;\n}\n\nfunction clampIndex(index: number, count: number, canLoop: boolean): number {\n if (count === 0) return 0;\n if (canLoop) return ((index % count) + count) % count;\n return Math.max(0, Math.min(count - 1, index));\n}\n\nexport default Carousel;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carousel.module.mjs","names":[],"sources":["../../../../package/common/carousel/carousel.module.pcss"],"sourcesContent":[".carousel {\n position: relative;\n overflow: hidden;\n border-radius: var(--default-border-radius);\n\n &-adaptive {\n transition: height 0.4s ease;\n }\n\n &-track {\n display: flex;\n align-items: stretch;\n transition: transform 0.4s ease;\n touch-action: pan-y;\n user-select: none;\n }\n\n &-trackAdaptive {\n align-items: flex-start;\n }\n\n &-slide {\n flex-shrink: 0;\n box-sizing: border-box;\n }\n\n &-prevButton,\n &-nextButton {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n z-index: 1;\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n background: var(--background-accent);\n color: var(--text-color);\n box-shadow: var(--card-shadow);\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition:\n opacity 0.15s,\n background 0.15s;\n\n &:hover {\n background: var(--background-accent-light);\n }\n\n &:focus-visible {\n outline: none;\n box-shadow:\n var(--card-shadow),\n 0 0 0 2px var(--primary-lighter);\n }\n }\n\n &-buttonDisabled {\n opacity: 0.35;\n pointer-events: none;\n }\n\n &-prevButton {\n left: 12px;\n }\n\n &-nextButton {\n right: 12px;\n }\n\n /* A scroll strip rather than a row that shrinks, so the dots keep their size at any slide count.\n The padding holds the outer dots clear of the fade until the strip has somewhere to scroll. */\n &-dots {\n position: absolute;\n bottom: 4px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 1;\n display: flex;\n box-sizing: border-box;\n width: max-content;\n max-width: 100%;\n padding-inline: 16px;\n overflow-x: auto;\n overscroll-behavior-x: contain;\n scroll-behavior: smooth;\n
|
|
1
|
+
{"version":3,"file":"carousel.module.mjs","names":[],"sources":["../../../../package/common/carousel/carousel.module.pcss"],"sourcesContent":[".carousel {\n position: relative;\n overflow: hidden;\n border-radius: var(--default-border-radius);\n\n &-adaptive {\n transition: height 0.4s ease;\n }\n\n &-track {\n display: flex;\n align-items: stretch;\n transition: transform 0.4s ease;\n touch-action: pan-y;\n user-select: none;\n }\n\n &-trackAdaptive {\n align-items: flex-start;\n }\n\n &-slide {\n flex-shrink: 0;\n box-sizing: border-box;\n }\n\n &-prevButton,\n &-nextButton {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n z-index: 1;\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n background: var(--background-accent);\n color: var(--text-color);\n box-shadow: var(--card-shadow);\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition:\n opacity 0.15s,\n background 0.15s;\n\n &:hover {\n background: var(--background-accent-light);\n }\n\n &:focus-visible {\n outline: none;\n box-shadow:\n var(--card-shadow),\n 0 0 0 2px var(--primary-lighter);\n }\n }\n\n &-buttonDisabled {\n opacity: 0.35;\n pointer-events: none;\n }\n\n &-prevButton {\n left: 12px;\n }\n\n &-nextButton {\n right: 12px;\n }\n\n /* A scroll strip rather than a row that shrinks, so the dots keep their size at any slide count.\n The padding holds the outer dots clear of the fade until the strip has somewhere to scroll. */\n &-dots {\n position: absolute;\n bottom: 4px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 1;\n display: flex;\n box-sizing: border-box;\n width: max-content;\n max-width: 100%;\n padding-inline: 16px;\n overflow-x: auto;\n overscroll-behavior-x: contain;\n scroll-behavior: smooth;\n\n /* Matches the strip's own `padding-inline`, so the first and last dot start out clear of the\n fade. The shared sheet's private length, not `--scroll-fade-length`, which would inherit. */\n --custom-scroll-fade-length: 16px;\n\n @media (prefers-reduced-motion: reduce) {\n scroll-behavior: auto;\n }\n }\n\n /* ScrollbarProvider reaches every scrollable element through `* { scrollbar-width: thin }`, which\n ties this on specificity and wins on order, so hiding the strip's scrollbar has to outweigh it. */\n & &-dots {\n scrollbar-width: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n /* The dot stays 8px, its padding carries the hit area out to the 24px minimum. */\n &-dot {\n box-sizing: content-box;\n\n /* The strip is width-capped, and shrinking would pull the content box, the only part\n `background-clip` paints, down to nothing. */\n flex-shrink: 0;\n width: 8px;\n height: 8px;\n padding: 8px;\n border-radius: 2000px;\n background: var(--background-accent);\n background-clip: content-box;\n opacity: 0.6;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition:\n opacity 0.15s,\n background 0.15s,\n width 0.15s;\n\n &:hover {\n opacity: 0.85;\n }\n\n &:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--primary-lighter);\n }\n\n &-active {\n background: var(--primary-color);\n background-clip: content-box;\n opacity: 1;\n width: 20px;\n }\n }\n}\n"],"mappings":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{useComponentDefaults as e}from"../configProvider/useComponentDefaults.mjs";import{useLabels as t}from"../configProvider/useLabels.mjs";import{ButtonStyleType as n}from"../button/button.types.mjs";import r from"../actionButtons/actionButtons.mjs";import i from"../modal/modal.mjs";import{useState as a}from"react";import{jsx as o,jsxs as s}from"react/jsx-runtime";var c={submit:`Confirm`,cancel:`Cancel`};function l(l){let{children:u=null,className:d=``,onClose:f=()=>{},onConfirm:p=()=>{},title:m=``,content:h=null,isOpen:g=void 0,labels:_,isDelete:v=!1,actionButtonsProps:y={},style:b,...x}=e(`ConfirmModal`,l),S=t(`ConfirmModal`,_,c),[C,w]=a(!1),[T,E]=a(!1);function D(e=!1){w(!1),f(e)}async function O(){E(!0);try{await p(),D(!0)}catch{}finally{E(!1)}}let k=
|
|
1
|
+
"use client";import{useComponentDefaults as e}from"../configProvider/useComponentDefaults.mjs";import{useLabels as t}from"../configProvider/useLabels.mjs";import{ButtonStyleType as n}from"../button/button.types.mjs";import r from"../actionButtons/actionButtons.mjs";import i from"../modal/modal.mjs";import{useState as a}from"react";import{jsx as o,jsxs as s}from"react/jsx-runtime";var c={submit:`Confirm`,cancel:`Cancel`};function l(l){let{children:u=null,className:d=``,onClose:f=()=>{},onConfirm:p=()=>{},title:m=``,content:h=null,isOpen:g=void 0,labels:_,isDelete:v=!1,actionButtonsProps:y={},style:b,...x}=e(`ConfirmModal`,l),S=t(`ConfirmModal`,_,c),[C,w]=a(!1),[T,E]=a(!1);function D(e=!1){w(!1),f(e)}async function O(){E(!0);try{await p(),D(!0)}catch{}finally{E(!1)}}let k=o(i,{title:m,isOpen:g===void 0?C:g,onClose:()=>D(),className:u?void 0:d,footer:o(r,{onClose:()=>D(),onSubmit:O,labels:{submit:S.submit,cancel:S.cancel},submitButtonStyle:v?n.Delete:void 0,isSubmitButtonLoading:T,noMargin:!0,...y}),children:h});return u?s(`div`,{...x,className:d,style:b,children:[o(`span`,{onClick:()=>w(!0),children:u}),k]}):k}export{l as default};
|
|
2
2
|
//# sourceMappingURL=confirmModal.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirmModal.mjs","names":[],"sources":["../../../../package/common/confirmModal/confirmModal.tsx"],"sourcesContent":["import { useState, type ReactElement } from 'react';\n\nimport Modal from '../modal';\nimport { ActionButtons } from '../actionButtons';\nimport { ButtonStyleType } from '../button';\nimport { useComponentDefaults, useLabels } from '../configProvider';\nimport type { ConfirmModalLabels, ConfirmModalProps } from './confirmModal.types';\n\nconst DEFAULT_LABELS: Required<ConfirmModalLabels> = {\n submit: 'Confirm',\n cancel: 'Cancel',\n};\n\nfunction ConfirmModal(props: ConfirmModalProps): ReactElement {\n const {\n children = null,\n className = '',\n onClose = () => {},\n onConfirm = () => {},\n title = '',\n content = null,\n isOpen: propIsOpen = undefined,\n labels,\n isDelete = false,\n actionButtonsProps = {},\n style,\n ...rest\n } = useComponentDefaults('ConfirmModal', props);\n const text = useLabels('ConfirmModal', labels, DEFAULT_LABELS);\n const [internalOpen, setInternalOpen] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n function handleClose(didSubmit = false) {\n setInternalOpen(false);\n onClose(didSubmit);\n }\n\n async function handleConfirm() {\n setIsSubmitting(true);\n try {\n await onConfirm();\n handleClose(true);\n } catch {\n // Nothing is awaiting this handler, so a rejection would surface as an unhandled one.\n // The dialog staying open is the signal that the action did not go through; reporting\n // the failure itself belongs to whoever wrote `onConfirm`.\n } finally {\n setIsSubmitting(false);\n }\n }\n\n const isOpen = propIsOpen === undefined ? internalOpen : propIsOpen;\n\n const modal = (\n <Modal
|
|
1
|
+
{"version":3,"file":"confirmModal.mjs","names":[],"sources":["../../../../package/common/confirmModal/confirmModal.tsx"],"sourcesContent":["import { useState, type ReactElement } from 'react';\n\nimport Modal from '../modal';\nimport { ActionButtons } from '../actionButtons';\nimport { ButtonStyleType } from '../button';\nimport { useComponentDefaults, useLabels } from '../configProvider';\nimport type { ConfirmModalLabels, ConfirmModalProps } from './confirmModal.types';\n\nconst DEFAULT_LABELS: Required<ConfirmModalLabels> = {\n submit: 'Confirm',\n cancel: 'Cancel',\n};\n\nfunction ConfirmModal(props: ConfirmModalProps): ReactElement {\n const {\n children = null,\n className = '',\n onClose = () => {},\n onConfirm = () => {},\n title = '',\n content = null,\n isOpen: propIsOpen = undefined,\n labels,\n isDelete = false,\n actionButtonsProps = {},\n style,\n ...rest\n } = useComponentDefaults('ConfirmModal', props);\n const text = useLabels('ConfirmModal', labels, DEFAULT_LABELS);\n const [internalOpen, setInternalOpen] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n function handleClose(didSubmit = false) {\n setInternalOpen(false);\n onClose(didSubmit);\n }\n\n async function handleConfirm() {\n setIsSubmitting(true);\n try {\n await onConfirm();\n handleClose(true);\n } catch {\n // Nothing is awaiting this handler, so a rejection would surface as an unhandled one.\n // The dialog staying open is the signal that the action did not go through; reporting\n // the failure itself belongs to whoever wrote `onConfirm`.\n } finally {\n setIsSubmitting(false);\n }\n }\n\n const isOpen = propIsOpen === undefined ? internalOpen : propIsOpen;\n\n const modal = (\n <Modal\n title={title}\n isOpen={isOpen}\n onClose={() => handleClose()}\n className={children ? undefined : className}\n footer={\n <ActionButtons\n onClose={() => handleClose()}\n onSubmit={handleConfirm}\n labels={{ submit: text.submit, cancel: text.cancel }}\n submitButtonStyle={isDelete ? ButtonStyleType.Delete : undefined}\n isSubmitButtonLoading={isSubmitting}\n // The footer slot already supplies the gap above the buttons.\n noMargin\n {...actionButtonsProps}\n />\n }\n >\n {content}\n </Modal>\n );\n\n if (!children) return modal;\n\n return (\n <div {...rest} className={className} style={style}>\n <span onClick={() => setInternalOpen(true)}>{children}</span>\n {modal}\n </div>\n );\n}\n\nexport default ConfirmModal;\n"],"mappings":"+XAQA,IAAM,EAA+C,CACnD,OAAQ,UACR,OAAQ,QACV,EAEA,SAAS,EAAa,EAAwC,CAC5D,GAAM,CACJ,WAAW,KACX,YAAY,GACZ,cAAgB,CAAC,EACjB,gBAAkB,CAAC,EACnB,QAAQ,GACR,UAAU,KACV,OAAQ,EAAa,IAAA,GACrB,SACA,WAAW,GACX,qBAAqB,CAAC,EACtB,QACA,GAAG,GACD,EAAqB,eAAgB,CAAK,EACxC,EAAO,EAAU,eAAgB,EAAQ,CAAc,EACvD,CAAC,EAAc,GAAmB,EAAS,EAAK,EAChD,CAAC,EAAc,GAAmB,EAAS,EAAK,EAEtD,SAAS,EAAY,EAAY,GAAO,CACtC,EAAgB,EAAK,EACrB,EAAQ,CAAS,CACnB,CAEA,eAAe,GAAgB,CAC7B,EAAgB,EAAI,EACpB,GAAI,CACF,MAAM,EAAU,EAChB,EAAY,EAAI,CAClB,MAAQ,CAIR,QAAU,CACR,EAAgB,EAAK,CACvB,CACF,CAIA,IAAM,EACJ,EAAC,EAAD,CACS,QACC,OALG,IAAe,IAAA,GAAY,EAAe,EAMrD,YAAe,EAAY,EAC3B,UAAW,EAAW,IAAA,GAAY,EAClC,OACE,EAAC,EAAD,CACE,YAAe,EAAY,EAC3B,SAAU,EACV,OAAQ,CAAE,OAAQ,EAAK,OAAQ,OAAQ,EAAK,MAAO,EACnD,kBAAmB,EAAW,EAAgB,OAAS,IAAA,GACvD,sBAAuB,EAEvB,SAAA,GACA,GAAI,CACL,CAAA,EAGF,SAAA,CACI,CAAA,EAKT,OAFK,EAGH,EAAC,MAAD,CAAK,GAAI,EAAiB,YAAkB,QAA5C,SAAA,CACE,EAAC,OAAD,CAAM,YAAe,EAAgB,EAAI,EAAI,UAAe,CAAA,EAC3D,CACE,IANe,CAQxB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{useComponentDefaults as e}from"../configProvider/useComponentDefaults.mjs";import t from"../button/button.mjs";import n from"../actionIcon/actionIcon.mjs";import{PopoverAlign as r,PopoverPlacement as i}from"../popover/popover.types.mjs";import ee from"../popover/popover.mjs";import te from"../tooltip/tooltip.mjs";import ne from"../input/input.mjs";import a from"../modal/modal.mjs";import{getLocale as o}from"../../services/localization.mjs";import{correctDateMaskValue as re,getDateFromDayMonthAndYear as ie,getDateString as s,getMonthName as ae,getMonthNames as oe}from"./dateFunctions.mjs";import se from"./components/datePickerMonth/datePickerMonth.mjs";import c from"../dropdown/dropdown.mjs";import l from"./datePicker.module.mjs";import{useEffect as
|
|
1
|
+
"use client";import{useComponentDefaults as e}from"../configProvider/useComponentDefaults.mjs";import t from"../button/button.mjs";import n from"../actionIcon/actionIcon.mjs";import{PopoverAlign as r,PopoverPlacement as i}from"../popover/popover.types.mjs";import ee from"../popover/popover.mjs";import te from"../tooltip/tooltip.mjs";import ne from"../input/input.mjs";import a from"../modal/modal.mjs";import{getLocale as o}from"../../services/localization.mjs";import{correctDateMaskValue as re,getDateFromDayMonthAndYear as ie,getDateString as s,getMonthName as ae,getMonthNames as oe}from"./dateFunctions.mjs";import se from"./components/datePickerMonth/datePickerMonth.mjs";import c from"../dropdown/dropdown.mjs";import ce from"../maskedInput/maskedInput.mjs";import l from"./datePicker.module.mjs";import{useEffect as le,useRef as u,useState as d}from"react";import f from"classnames";import{faChevronLeft as p,faChevronRight as m}from"@fortawesome/free-solid-svg-icons";import{Fragment as ue,jsx as h,jsxs as g}from"react/jsx-runtime";function _(_){let{className:de=``,selected:v,onSelect:fe=()=>null,formValidator:y=null,noInput:pe=!1,noHeader:me=!1,isModal:b=!1,isInline:x=!1,onChange:he=()=>null,minDate:S=null,maxDate:C=null,children:ge=null,showClearButton:_e=!1,label:ve=``,isValid:ye=!0,errorMessage:w=``,isRequired:T=!1,startDate:E,endDate:D,style:O,classNames:k,styles:A,...j}=e(`DatePicker`,_),M=()=>y?y.value:v,N=M()??new Date,[P,F]=d(N.getMonth()+1),[I,L]=d(N.getFullYear()),[R,z]=d(!1),[B,V]=d(()=>M()?s(N):``),[be,H]=d(!1),[xe,U]=d(!1),[,Se]=d(0),[Ce,we]=d(v),W=u(y);if(Ce!==v){we(v);let e=v??new Date;F(e.getMonth()+1),L(e.getFullYear()),V(v?s(v):``)}le(()=>{if(W.current=y,!y)return;let e=()=>{let e=y.value;e?(F(e.getMonth()+1),L(e.getFullYear()),V(s(e))):V(``),Se(e=>e+1)};return y.registerOnUpdateListener(e),()=>y.removeOnUpdateListener(e)},[y]);let Te=()=>y?y.touched&&y.hasError():!ye||!!w,Ee=()=>!!(T||y?.validators.find(e=>e.validatorId===`required`)),G=e=>{V(e?s(e):``),y&&y.set(e),he(e)},K=e=>{G(e),fe(e),z(!1)},q=e=>{F(t=>{let n=t+e;return n<1?(n=12,L(e=>e-1)):n>12&&(n=1,L(e=>e+1)),n})},J=e=>{if(e.match(/\d{2}\.\d{2}\.\d{4}/gi)){let[t,n,r]=e.split(`.`),i=ie(Number(t),Number(n),Number(r));if(i&&i.toString()!==`Invalid Date`&&(!C||i<=C)&&(!S||i>=S))return i}return null},De=({previousState:e,nextState:t})=>{if(t.value===e.value)return t;let n=re(t.value,e.value,t.selection??null),r=J(n.value);return r&&G(r),n},Y=()=>{let e=400,t=new Date().getFullYear()-200;return S&&(t=S.getFullYear()),C&&(e=C.getFullYear()-t+1),Array.from(Array(e).keys()).map(e=>({key:e+t,label:e+t}))},X=M(),Z=Te(),Oe=me?null:g(`div`,{className:f(l.datePickerHeader,k?.header),style:A?.header,children:[h(n,{icon:p,onClick:()=>q(-1)}),h(`div`,{className:l.datePickerHeaderMonthAndYearContainer,children:g(`div`,{className:l.datePickerHeaderMonthAndYear,children:[h(c,{plainStyle:!0,scrollToSelected:!0,onChange:e=>F(e),className:f(l.datePickerHeaderMonth,k?.monthDropdown),style:A?.monthDropdown,value:ae(o(`-`),I,P,1),items:oe().map((e,t)=>({key:t+1,label:e}))}),h(c,{plainStyle:!0,scrollToSelected:!0,useMatLabelStyle:!1,className:f(l.datePickerHeaderYear,k?.yearDropdown),style:A?.yearDropdown,onChange:e=>L(e),value:I,items:Y()})]})}),h(n,{icon:m,onClick:()=>q(1)})]}),Q=g(ue,{children:[Oe,h(se,{className:f(l.datePickerMonth,k?.calendar),style:A?.calendar,month:P,year:I,onSelect:K,selectionStart:E??X,selectionEnd:D??X,minDate:S,maxDate:C,onNavigateMonth:q}),_e&&h(t,{onClick:()=>K(null),className:k?.clearButton,style:A?.clearButton,children:`Clear`}),ge]}),$=pe?null:h(ne,{autoComplete:`off`,className:k?.input,style:A?.input,readOnly:b,classNames:b?{input:l.datePickerModalInput}:void 0,label:`${ve}${Ee()?` *`:``}`,value:B,onChange:e=>V(e),onClick:()=>z(!0),customInput:h(ce,{mask:`99.99.9999`,beforeMaskedStateChange:De}),onBlur:()=>{W.current&&(W.current.touched=!0),H(!1),G(J(B))},onFocus:()=>H(!0),onMouseEnter:()=>U(!0),onMouseLeave:()=>U(!1),isValid:!Z}),ke=x?Q:b?h(a,{hideHeader:!0,isOpen:R,onClose:()=>z(!1),children:Q}):h(ee,{isOpen:R,onOpenChange:e=>z(e),content:Q,placement:i.Bottom,align:r.Start,closeOnTriggerClick:!1,constrainWidth:!1,children:$});return g(`div`,{...j,className:f(l.datePicker,de,k?.root),style:{...O,...A?.root},children:[(b||x)&&$,ke,h(te,{variant:`error`,message:y?y.getCurrentErrorMessage():w||``,isVisible:Z&&(be||xe)})]})}export{_ as default};
|
|
2
2
|
//# sourceMappingURL=datePicker.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datePicker.mjs","names":[],"sources":["../../../../package/common/datePicker/datePicker.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\nimport cx from 'classnames';\nimport Input from '../input';\nimport { useComponentDefaults } from '../configProvider';\nimport DatePickerMonth from './components/datePickerMonth';\nimport { faChevronLeft, faChevronRight } from '@fortawesome/free-solid-svg-icons';\nimport { getLocale } from 'services/localization';\nimport ActionIcon from '../actionIcon';\nimport Modal from '../modal';\nimport Popover from '../popover';\nimport Dropdown from '../dropdown';\nimport { PopoverAlign, PopoverPlacement } from '../popover/popover.types';\nimport InputMask, { InputState, BeforeMaskedStateChangeStates } from '@mona-health/react-input-mask';\nimport {\n getDateFromDayMonthAndYear,\n getMonthName,\n getMonthNames,\n getDateString,\n correctDateMaskValue,\n} from './dateFunctions';\nimport Button from '../button';\nimport Tooltip from '../tooltip';\nimport type { DatePickerProps } from './datePicker.types';\n\nimport styles from './datePicker.module.pcss';\n\nexport default function DatePicker(props: DatePickerProps) {\n const {\n className = '',\n selected,\n onSelect = () => null,\n formValidator = null,\n noInput = false,\n noHeader = false,\n isModal = false,\n isInline = false,\n onChange = () => null,\n minDate = null,\n maxDate = null,\n children = null,\n showClearButton = false,\n label = '',\n isValid = true,\n errorMessage = '',\n isRequired = false,\n startDate,\n endDate,\n style,\n classNames,\n styles: slotStyles,\n ...rest\n } = useComponentDefaults('DatePicker', props);\n const getCurrValue = (): Date | undefined => (formValidator ? (formValidator.value as Date) : selected);\n\n const initialDate = getCurrValue() ?? new Date();\n\n const [currentMonth, setCurrentMonth] = useState(initialDate.getMonth() + 1);\n const [currentYear, setCurrentYear] = useState(initialDate.getFullYear());\n const [isPickerOpen, setIsPickerOpen] = useState(false);\n const [currentDateString, setCurrentDateString] = useState(() => (getCurrValue() ? getDateString(initialDate) : ''));\n const [isFocused, setIsFocused] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n const [, forceUpdate] = useState(0);\n const [prevSelected, setPrevSelected] = useState(selected);\n\n const fvRef = useRef(formValidator);\n\n // Sync navigation view when `selected` prop changes externally\n if (prevSelected !== selected) {\n setPrevSelected(selected);\n const d = selected ?? new Date();\n setCurrentMonth(d.getMonth() + 1);\n setCurrentYear(d.getFullYear());\n setCurrentDateString(selected ? getDateString(selected) : '');\n }\n\n // Subscribe to formValidator updates (external system → setState in callback)\n useEffect(() => {\n fvRef.current = formValidator;\n if (!formValidator) return;\n const listener = () => {\n const val = formValidator.value as Date | undefined;\n if (val) {\n setCurrentMonth(val.getMonth() + 1);\n setCurrentYear(val.getFullYear());\n setCurrentDateString(getDateString(val));\n } else {\n setCurrentDateString('');\n }\n forceUpdate((n: number) => n + 1);\n };\n formValidator.registerOnUpdateListener(listener);\n return () => formValidator.removeOnUpdateListener(listener);\n }, [formValidator]);\n\n const hasError = (): boolean => {\n return formValidator ? formValidator.touched && formValidator.hasError() : !isValid || !!errorMessage;\n };\n\n const computedIsRequired = (): boolean => {\n return !!(\n isRequired || formValidator?.validators.find((v) => (v as { validatorId?: string }).validatorId === 'required')\n );\n };\n\n const handleChange = (date: Date | null) => {\n setCurrentDateString(date ? getDateString(date) : '');\n if (formValidator) formValidator.set(date);\n onChange(date);\n };\n\n const handleSelect = (date: Date | null) => {\n handleChange(date);\n onSelect(date);\n setIsPickerOpen(false);\n };\n\n const changeMonth = (delta: number) => {\n setCurrentMonth((prev) => {\n let next = prev + delta;\n if (next < 1) {\n next = 12;\n setCurrentYear((y) => y - 1);\n } else if (next > 12) {\n next = 1;\n setCurrentYear((y) => y + 1);\n }\n return next;\n });\n };\n\n const tryParseDateString = (dateString: string): Date | null => {\n if (dateString.match(/\\d{2}\\.\\d{2}\\.\\d{4}/gi)) {\n const [day, month, year] = dateString.split('.');\n const parsedDate = getDateFromDayMonthAndYear(Number(day), Number(month), Number(year));\n if (parsedDate && parsedDate.toString() !== 'Invalid Date') {\n const isSmallerThanMaxDate = !maxDate || parsedDate <= maxDate;\n const isBiggerThanMinDate = !minDate || parsedDate >= minDate;\n if (isSmallerThanMaxDate && isBiggerThanMinDate) return parsedDate;\n }\n }\n return null;\n };\n\n const beforeMaskedStateChange = ({ previousState, nextState }: BeforeMaskedStateChangeStates): InputState => {\n // previousState is only supplied on user-driven change events; on mount/focus/blur\n // there is nothing to auto-correct, so the next state passes through unchanged.\n if (!previousState || nextState.value === previousState.value) return nextState;\n\n const corrected = correctDateMaskValue(nextState.value, previousState.value, nextState.selection ?? null);\n\n const parsedDate = tryParseDateString(corrected.value);\n if (parsedDate) handleChange(parsedDate);\n\n return corrected;\n };\n\n const getYearDropdownOptions = () => {\n let length = 400;\n let zeroOffset = new Date().getFullYear() - 200;\n if (minDate) zeroOffset = minDate.getFullYear();\n if (maxDate) length = maxDate.getFullYear() - zeroOffset + 1;\n return Array.from(Array(length).keys()).map((i) => ({ key: i + zeroOffset, label: i + zeroOffset }));\n };\n\n const currValue = getCurrValue();\n const hasErr = hasError();\n\n const header = noHeader ? null : (\n <div className={cx(styles.datePickerHeader, classNames?.header)} style={slotStyles?.header}>\n <ActionIcon icon={faChevronLeft} onClick={() => changeMonth(-1)} />\n <div className={styles.datePickerHeaderMonthAndYearContainer}>\n <div className={styles.datePickerHeaderMonthAndYear}>\n <Dropdown\n plainStyle\n scrollToSelected\n onChange={(v) => setCurrentMonth(v as number)}\n className={cx(styles.datePickerHeaderMonth, classNames?.monthDropdown)}\n style={slotStyles?.monthDropdown}\n value={getMonthName(getLocale('-'), currentYear, currentMonth, 1)}\n items={getMonthNames().map((month, index) => ({ key: index + 1, label: month }))}\n />\n <Dropdown\n plainStyle\n scrollToSelected\n useMatLabelStyle={false}\n className={cx(styles.datePickerHeaderYear, classNames?.yearDropdown)}\n style={slotStyles?.yearDropdown}\n onChange={(v) => setCurrentYear(v as number)}\n value={currentYear}\n items={getYearDropdownOptions()}\n />\n </div>\n </div>\n <ActionIcon icon={faChevronRight} onClick={() => changeMonth(1)} />\n </div>\n );\n\n const pickerContent = (\n <>\n {header}\n <DatePickerMonth\n className={cx(styles.datePickerMonth, classNames?.calendar)}\n style={slotStyles?.calendar}\n month={currentMonth}\n year={currentYear}\n onSelect={handleSelect}\n selectionStart={startDate ?? currValue}\n selectionEnd={endDate ?? currValue}\n minDate={minDate}\n maxDate={maxDate}\n onNavigateMonth={changeMonth}\n />\n {showClearButton && (\n <Button onClick={() => handleSelect(null)} className={classNames?.clearButton} style={slotStyles?.clearButton}>\n Clear\n </Button>\n )}\n {children}\n </>\n );\n\n const input = noInput ? null : (\n <Input\n autoComplete='off'\n className={classNames?.input}\n style={slotStyles?.input}\n readOnly={isModal}\n classNames={isModal ? { input: styles.datePickerModalInput } : undefined}\n label={`${label}${computedIsRequired() ? ' *' : ''}`}\n value={currentDateString}\n onChange={(v) => setCurrentDateString(v as string)}\n onClick={() => setIsPickerOpen(true)}\n customInput={\n <InputMask mask='99.99.9999' maskPlaceholder='_' beforeMaskedStateChange={beforeMaskedStateChange} />\n }\n onBlur={() => {\n if (fvRef.current) fvRef.current.touched = true;\n setIsFocused(false);\n handleChange(tryParseDateString(currentDateString));\n }}\n onFocus={() => setIsFocused(true)}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n isValid={!hasErr}\n />\n );\n\n const picker = (() => {\n if (isInline) return pickerContent;\n if (isModal) {\n return (\n <Modal hideHeader isOpen={isPickerOpen} onClose={() => setIsPickerOpen(false)}>\n {pickerContent}\n </Modal>\n );\n }\n return (\n <Popover\n isOpen={isPickerOpen}\n onOpenChange={(open: boolean) => setIsPickerOpen(open)}\n content={pickerContent}\n placement={PopoverPlacement.Bottom}\n align={PopoverAlign.Start}\n // A click to place the caret in the field must not take the panel away.\n // The focus stays there on its own: Popover only follows a keyboard open.\n closeOnTriggerClick={false}\n constrainWidth={false}\n >\n {input}\n </Popover>\n );\n })();\n\n return (\n <div\n {...rest}\n className={cx(styles.datePicker, className, classNames?.root)}\n style={{ ...style, ...slotStyles?.root }}\n >\n {(isModal || isInline) && input}\n {picker}\n <Tooltip\n variant='error'\n message={formValidator ? formValidator.getCurrentErrorMessage() : errorMessage || ''}\n isVisible={hasErr && (isFocused || isHovered)}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"datePicker.mjs","names":[],"sources":["../../../../package/common/datePicker/datePicker.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\nimport cx from 'classnames';\nimport Input from '../input';\nimport { useComponentDefaults } from '../configProvider';\nimport DatePickerMonth from './components/datePickerMonth';\nimport { faChevronLeft, faChevronRight } from '@fortawesome/free-solid-svg-icons';\nimport { getLocale } from 'services/localization';\nimport ActionIcon from '../actionIcon';\nimport Modal from '../modal';\nimport Popover from '../popover';\nimport Dropdown from '../dropdown';\nimport { PopoverAlign, PopoverPlacement } from '../popover/popover.types';\nimport MaskedInput from '../maskedInput';\nimport type { BeforeMaskedStateChangeStates, MaskState } from '../maskedInput';\nimport {\n getDateFromDayMonthAndYear,\n getMonthName,\n getMonthNames,\n getDateString,\n correctDateMaskValue,\n} from './dateFunctions';\nimport Button from '../button';\nimport Tooltip from '../tooltip';\nimport type { DatePickerProps } from './datePicker.types';\n\nimport styles from './datePicker.module.pcss';\n\nexport default function DatePicker(props: DatePickerProps) {\n const {\n className = '',\n selected,\n onSelect = () => null,\n formValidator = null,\n noInput = false,\n noHeader = false,\n isModal = false,\n isInline = false,\n onChange = () => null,\n minDate = null,\n maxDate = null,\n children = null,\n showClearButton = false,\n label = '',\n isValid = true,\n errorMessage = '',\n isRequired = false,\n startDate,\n endDate,\n style,\n classNames,\n styles: slotStyles,\n ...rest\n } = useComponentDefaults('DatePicker', props);\n const getCurrValue = (): Date | undefined => (formValidator ? (formValidator.value as Date) : selected);\n\n const initialDate = getCurrValue() ?? new Date();\n\n const [currentMonth, setCurrentMonth] = useState(initialDate.getMonth() + 1);\n const [currentYear, setCurrentYear] = useState(initialDate.getFullYear());\n const [isPickerOpen, setIsPickerOpen] = useState(false);\n const [currentDateString, setCurrentDateString] = useState(() => (getCurrValue() ? getDateString(initialDate) : ''));\n const [isFocused, setIsFocused] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n const [, forceUpdate] = useState(0);\n const [prevSelected, setPrevSelected] = useState(selected);\n\n const fvRef = useRef(formValidator);\n\n // Sync navigation view when `selected` prop changes externally\n if (prevSelected !== selected) {\n setPrevSelected(selected);\n const d = selected ?? new Date();\n setCurrentMonth(d.getMonth() + 1);\n setCurrentYear(d.getFullYear());\n setCurrentDateString(selected ? getDateString(selected) : '');\n }\n\n // Subscribe to formValidator updates (external system → setState in callback)\n useEffect(() => {\n fvRef.current = formValidator;\n if (!formValidator) return;\n const listener = () => {\n const val = formValidator.value as Date | undefined;\n if (val) {\n setCurrentMonth(val.getMonth() + 1);\n setCurrentYear(val.getFullYear());\n setCurrentDateString(getDateString(val));\n } else {\n setCurrentDateString('');\n }\n forceUpdate((n: number) => n + 1);\n };\n formValidator.registerOnUpdateListener(listener);\n return () => formValidator.removeOnUpdateListener(listener);\n }, [formValidator]);\n\n const hasError = (): boolean => {\n return formValidator ? formValidator.touched && formValidator.hasError() : !isValid || !!errorMessage;\n };\n\n const computedIsRequired = (): boolean => {\n return !!(\n isRequired || formValidator?.validators.find((v) => (v as { validatorId?: string }).validatorId === 'required')\n );\n };\n\n const handleChange = (date: Date | null) => {\n setCurrentDateString(date ? getDateString(date) : '');\n if (formValidator) formValidator.set(date);\n onChange(date);\n };\n\n const handleSelect = (date: Date | null) => {\n handleChange(date);\n onSelect(date);\n setIsPickerOpen(false);\n };\n\n const changeMonth = (delta: number) => {\n setCurrentMonth((prev) => {\n let next = prev + delta;\n if (next < 1) {\n next = 12;\n setCurrentYear((y) => y - 1);\n } else if (next > 12) {\n next = 1;\n setCurrentYear((y) => y + 1);\n }\n return next;\n });\n };\n\n const tryParseDateString = (dateString: string): Date | null => {\n if (dateString.match(/\\d{2}\\.\\d{2}\\.\\d{4}/gi)) {\n const [day, month, year] = dateString.split('.');\n const parsedDate = getDateFromDayMonthAndYear(Number(day), Number(month), Number(year));\n if (parsedDate && parsedDate.toString() !== 'Invalid Date') {\n const isSmallerThanMaxDate = !maxDate || parsedDate <= maxDate;\n const isBiggerThanMinDate = !minDate || parsedDate >= minDate;\n if (isSmallerThanMaxDate && isBiggerThanMinDate) return parsedDate;\n }\n }\n return null;\n };\n\n const beforeMaskedStateChange = ({ previousState, nextState }: BeforeMaskedStateChangeStates): MaskState => {\n // A change that moved nothing needs no correcting, and re-running the day/month padding on\n // an unchanged value would fight the caret the mask just placed.\n if (nextState.value === previousState.value) return nextState;\n\n const corrected = correctDateMaskValue(nextState.value, previousState.value, nextState.selection ?? null);\n\n const parsedDate = tryParseDateString(corrected.value);\n if (parsedDate) handleChange(parsedDate);\n\n return corrected;\n };\n\n const getYearDropdownOptions = () => {\n let length = 400;\n let zeroOffset = new Date().getFullYear() - 200;\n if (minDate) zeroOffset = minDate.getFullYear();\n if (maxDate) length = maxDate.getFullYear() - zeroOffset + 1;\n return Array.from(Array(length).keys()).map((i) => ({ key: i + zeroOffset, label: i + zeroOffset }));\n };\n\n const currValue = getCurrValue();\n const hasErr = hasError();\n\n const header = noHeader ? null : (\n <div className={cx(styles.datePickerHeader, classNames?.header)} style={slotStyles?.header}>\n <ActionIcon icon={faChevronLeft} onClick={() => changeMonth(-1)} />\n <div className={styles.datePickerHeaderMonthAndYearContainer}>\n <div className={styles.datePickerHeaderMonthAndYear}>\n <Dropdown\n plainStyle\n scrollToSelected\n onChange={(v) => setCurrentMonth(v as number)}\n className={cx(styles.datePickerHeaderMonth, classNames?.monthDropdown)}\n style={slotStyles?.monthDropdown}\n value={getMonthName(getLocale('-'), currentYear, currentMonth, 1)}\n items={getMonthNames().map((month, index) => ({ key: index + 1, label: month }))}\n />\n <Dropdown\n plainStyle\n scrollToSelected\n useMatLabelStyle={false}\n className={cx(styles.datePickerHeaderYear, classNames?.yearDropdown)}\n style={slotStyles?.yearDropdown}\n onChange={(v) => setCurrentYear(v as number)}\n value={currentYear}\n items={getYearDropdownOptions()}\n />\n </div>\n </div>\n <ActionIcon icon={faChevronRight} onClick={() => changeMonth(1)} />\n </div>\n );\n\n const pickerContent = (\n <>\n {header}\n <DatePickerMonth\n className={cx(styles.datePickerMonth, classNames?.calendar)}\n style={slotStyles?.calendar}\n month={currentMonth}\n year={currentYear}\n onSelect={handleSelect}\n selectionStart={startDate ?? currValue}\n selectionEnd={endDate ?? currValue}\n minDate={minDate}\n maxDate={maxDate}\n onNavigateMonth={changeMonth}\n />\n {showClearButton && (\n <Button onClick={() => handleSelect(null)} className={classNames?.clearButton} style={slotStyles?.clearButton}>\n Clear\n </Button>\n )}\n {children}\n </>\n );\n\n const input = noInput ? null : (\n <Input\n autoComplete='off'\n className={classNames?.input}\n style={slotStyles?.input}\n readOnly={isModal}\n classNames={isModal ? { input: styles.datePickerModalInput } : undefined}\n label={`${label}${computedIsRequired() ? ' *' : ''}`}\n value={currentDateString}\n onChange={(v) => setCurrentDateString(v as string)}\n onClick={() => setIsPickerOpen(true)}\n customInput={<MaskedInput mask='99.99.9999' beforeMaskedStateChange={beforeMaskedStateChange} />}\n onBlur={() => {\n if (fvRef.current) fvRef.current.touched = true;\n setIsFocused(false);\n handleChange(tryParseDateString(currentDateString));\n }}\n onFocus={() => setIsFocused(true)}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n isValid={!hasErr}\n />\n );\n\n const picker = (() => {\n if (isInline) return pickerContent;\n if (isModal) {\n return (\n <Modal hideHeader isOpen={isPickerOpen} onClose={() => setIsPickerOpen(false)}>\n {pickerContent}\n </Modal>\n );\n }\n return (\n <Popover\n isOpen={isPickerOpen}\n onOpenChange={(open: boolean) => setIsPickerOpen(open)}\n content={pickerContent}\n placement={PopoverPlacement.Bottom}\n align={PopoverAlign.Start}\n // A click to place the caret in the field must not take the panel away.\n // The focus stays there on its own: Popover only follows a keyboard open.\n closeOnTriggerClick={false}\n constrainWidth={false}\n >\n {input}\n </Popover>\n );\n })();\n\n return (\n <div\n {...rest}\n className={cx(styles.datePicker, className, classNames?.root)}\n style={{ ...style, ...slotStyles?.root }}\n >\n {(isModal || isInline) && input}\n {picker}\n <Tooltip\n variant='error'\n message={formValidator ? formValidator.getCurrentErrorMessage() : errorMessage || ''}\n isVisible={hasErr && (isFocused || isHovered)}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawer.module.mjs","names":[],"sources":["../../../../package/common/drawer/drawer.module.pcss"],"sourcesContent":[".drawer {\n height: 100%;\n overflow-x: hidden;\n width: var(--drawer-closed-width, 0);\n transition: width 0.3s ease;\n background: var(--background-accent);\n\n &-open {\n width: var(--drawer-opened-width, var(--drawer-content-width, max-content));\n }\n\n &-content {\n width: max-content;\n height: 100%;\n pointer-events: all;\n\n &-inner {\n height: 100%;\n }\n }\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"drawer.module.mjs","names":[],"sources":["../../../../package/common/drawer/drawer.module.pcss"],"sourcesContent":[".drawer {\n height: 100%;\n overflow-x: hidden;\n width: var(--drawer-closed-width, 0);\n transition: width 0.3s ease;\n background: var(--background-accent);\n\n &-open {\n width: var(--drawer-opened-width, var(--drawer-content-width, max-content));\n }\n\n &-content {\n width: max-content;\n height: 100%;\n pointer-events: all;\n\n &-inner {\n height: 100%;\n }\n }\n}\n\n/* Opening and closing then snaps to the new width instead of sliding to it. */\n@media (prefers-reduced-motion: reduce) {\n .drawer {\n transition: none;\n }\n}\n"],"mappings":""}
|