@ahrowe/ui 0.4.0 → 0.4.2
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/dist/esm/common/accordion/accordion.mjs +2 -0
- package/dist/esm/common/accordion/accordion.mjs.map +1 -0
- package/dist/esm/common/accordion/accordion.module.mjs +2 -0
- package/dist/esm/common/accordion/accordion.module.mjs.map +1 -0
- package/dist/esm/common/accordion/accordion.plain.module.mjs +2 -0
- package/dist/esm/common/accordion/accordion.plain.module.mjs.map +1 -0
- package/dist/esm/common/accordion/accordion.primary.module.mjs +2 -0
- package/dist/esm/common/accordion/accordion.primary.module.mjs.map +1 -0
- package/dist/esm/common/accordion/accordion.types.mjs +2 -0
- package/dist/esm/common/accordion/accordion.types.mjs.map +1 -0
- package/dist/esm/common/actionButtons/actionButtons.mjs +2 -0
- package/dist/esm/common/actionButtons/actionButtons.mjs.map +1 -0
- package/dist/esm/common/actionButtons/actionButtons.module.mjs +2 -0
- package/dist/esm/common/actionButtons/actionButtons.module.mjs.map +1 -0
- package/dist/esm/common/actionIcon/actionIcon.mjs +2 -0
- package/dist/esm/common/actionIcon/actionIcon.mjs.map +1 -0
- package/dist/esm/common/actionIcon/actionIcon.module.mjs +2 -0
- package/dist/esm/common/actionIcon/actionIcon.module.mjs.map +1 -0
- package/dist/esm/common/avatar/avatar.mjs +2 -0
- package/dist/esm/common/avatar/avatar.mjs.map +1 -0
- package/dist/esm/common/avatar/avatar.module.mjs +2 -0
- package/dist/esm/common/avatar/avatar.module.mjs.map +1 -0
- package/dist/esm/common/avatar/avatarGroup.mjs +2 -0
- package/dist/esm/common/avatar/avatarGroup.mjs.map +1 -0
- package/dist/esm/common/badge/badge.mjs +2 -0
- package/dist/esm/common/badge/badge.mjs.map +1 -0
- package/dist/esm/common/badge/badge.module.mjs +2 -0
- package/dist/esm/common/badge/badge.module.mjs.map +1 -0
- package/dist/esm/common/badge/badge.types.mjs +2 -0
- package/dist/esm/common/badge/badge.types.mjs.map +1 -0
- package/dist/esm/common/bodyEnd/bodyEnd.mjs +2 -0
- package/dist/esm/common/bodyEnd/bodyEnd.mjs.map +1 -0
- package/dist/esm/common/button/button.mjs +2 -0
- package/dist/esm/common/button/button.mjs.map +1 -0
- package/dist/esm/common/button/button.module.mjs +2 -0
- package/dist/esm/common/button/button.module.mjs.map +1 -0
- package/dist/esm/common/button/button.types.mjs +2 -0
- package/dist/esm/common/button/button.types.mjs.map +1 -0
- package/dist/esm/common/card/Card.mjs +2 -0
- package/dist/esm/common/card/Card.mjs.map +1 -0
- package/dist/esm/common/card/CardActions.mjs +2 -0
- package/dist/esm/common/card/CardActions.mjs.map +1 -0
- package/dist/esm/common/card/CardContent.mjs +2 -0
- package/dist/esm/common/card/CardContent.mjs.map +1 -0
- package/dist/esm/common/card/CardHeader.mjs +2 -0
- package/dist/esm/common/card/CardHeader.mjs.map +1 -0
- package/dist/esm/common/card/CardMedia.mjs +2 -0
- package/dist/esm/common/card/CardMedia.mjs.map +1 -0
- package/dist/esm/common/card/card.module.mjs +2 -0
- package/dist/esm/common/card/card.module.mjs.map +1 -0
- package/dist/esm/common/card/card.types.mjs +2 -0
- package/dist/esm/common/card/card.types.mjs.map +1 -0
- package/dist/esm/common/checkbox/checkbox.mjs +2 -0
- package/dist/esm/common/checkbox/checkbox.mjs.map +1 -0
- package/dist/esm/common/checkbox/checkbox.module.mjs +2 -0
- package/dist/esm/common/checkbox/checkbox.module.mjs.map +1 -0
- package/dist/esm/common/chip/chip.mjs +2 -0
- package/dist/esm/common/chip/chip.mjs.map +1 -0
- package/dist/esm/common/chip/chip.module.mjs +2 -0
- package/dist/esm/common/chip/chip.module.mjs.map +1 -0
- package/dist/esm/common/chip/chip.types.mjs +2 -0
- package/dist/esm/common/chip/chip.types.mjs.map +1 -0
- package/dist/esm/common/chip/chipContainer.mjs +2 -0
- package/dist/esm/common/chip/chipContainer.mjs.map +1 -0
- package/dist/esm/common/colorPicker/colorPicker.mjs +2 -0
- package/dist/esm/common/colorPicker/colorPicker.mjs.map +1 -0
- package/dist/esm/common/colorPicker/colorPicker.module.mjs +2 -0
- package/dist/esm/common/colorPicker/colorPicker.module.mjs.map +1 -0
- package/dist/esm/common/confirmModal/confirmModal.mjs +2 -0
- package/dist/esm/common/confirmModal/confirmModal.mjs.map +1 -0
- package/dist/esm/common/datePicker/components/datePickerMonth/datePickerMonth.mjs +2 -0
- package/dist/esm/common/datePicker/components/datePickerMonth/datePickerMonth.mjs.map +1 -0
- package/dist/esm/common/datePicker/components/datePickerMonth/datePickerMonth.module.mjs +2 -0
- package/dist/esm/common/datePicker/components/datePickerMonth/datePickerMonth.module.mjs.map +1 -0
- package/dist/esm/common/datePicker/dateFunctions.mjs +2 -0
- package/dist/esm/common/datePicker/dateFunctions.mjs.map +1 -0
- package/dist/esm/common/datePicker/datePicker.mjs +2 -0
- package/dist/esm/common/datePicker/datePicker.mjs.map +1 -0
- package/dist/esm/common/datePicker/datePicker.module.mjs +2 -0
- package/dist/esm/common/datePicker/datePicker.module.mjs.map +1 -0
- package/dist/esm/common/drawer/drawer.mjs +2 -0
- package/dist/esm/common/drawer/drawer.mjs.map +1 -0
- package/dist/esm/common/drawer/drawer.module.mjs +2 -0
- package/dist/esm/common/drawer/drawer.module.mjs.map +1 -0
- package/dist/esm/common/dropZone/dropZone.mjs +2 -0
- package/dist/esm/common/dropZone/dropZone.mjs.map +1 -0
- package/dist/esm/common/dropZone/dropZone.module.mjs +2 -0
- package/dist/esm/common/dropZone/dropZone.module.mjs.map +1 -0
- package/dist/esm/common/dropZone/dropZone.types.mjs +2 -0
- package/dist/esm/common/dropZone/dropZone.types.mjs.map +1 -0
- package/dist/esm/common/dropdown/dropdown.mjs +2 -0
- package/dist/esm/common/dropdown/dropdown.mjs.map +1 -0
- package/dist/esm/common/dropdown/dropdown.module.mjs +2 -0
- package/dist/esm/common/dropdown/dropdown.module.mjs.map +1 -0
- package/dist/esm/common/emptyState/emptyState.mjs +2 -0
- package/dist/esm/common/emptyState/emptyState.mjs.map +1 -0
- package/dist/esm/common/emptyState/emptyState.module.mjs +2 -0
- package/dist/esm/common/emptyState/emptyState.module.mjs.map +1 -0
- package/dist/esm/common/fab/components/fabBase/fabBase.mjs +2 -0
- package/dist/esm/common/fab/components/fabBase/fabBase.mjs.map +1 -0
- package/dist/esm/common/fab/components/fabBase/fabBase.module.mjs +2 -0
- package/dist/esm/common/fab/components/fabBase/fabBase.module.mjs.map +1 -0
- package/dist/esm/common/fab/fab.mjs +2 -0
- package/dist/esm/common/fab/fab.mjs.map +1 -0
- package/dist/esm/common/fab/fab.module.mjs +2 -0
- package/dist/esm/common/fab/fab.module.mjs.map +1 -0
- package/dist/esm/common/floatingMenu/floatingMenu.mjs +2 -0
- package/dist/esm/common/floatingMenu/floatingMenu.mjs.map +1 -0
- package/dist/esm/common/floatingMenu/floatingMenu.module.mjs +2 -0
- package/dist/esm/common/floatingMenu/floatingMenu.module.mjs.map +1 -0
- package/dist/esm/common/floatingMenu/floatingMenu.types.mjs +2 -0
- package/dist/esm/common/floatingMenu/floatingMenu.types.mjs.map +1 -0
- package/dist/esm/common/floatingMenu/useFloatingPosition.mjs +2 -0
- package/dist/esm/common/floatingMenu/useFloatingPosition.mjs.map +1 -0
- package/dist/esm/common/iconPicker/iconPicker.mjs +2 -0
- package/dist/esm/common/iconPicker/iconPicker.mjs.map +1 -0
- package/dist/esm/common/iconPicker/iconPicker.module.mjs +2 -0
- package/dist/esm/common/iconPicker/iconPicker.module.mjs.map +1 -0
- package/dist/esm/common/idleManager/idleManager.mjs +2 -0
- package/dist/esm/common/idleManager/idleManager.mjs.map +1 -0
- package/dist/esm/common/infiniteBlock/infiniteBlock.mjs +2 -0
- package/dist/esm/common/infiniteBlock/infiniteBlock.mjs.map +1 -0
- package/dist/esm/common/infiniteBlock/infiniteBlock.module.mjs +2 -0
- package/dist/esm/common/infiniteBlock/infiniteBlock.module.mjs.map +1 -0
- package/dist/esm/common/input/input.mjs +2 -0
- package/dist/esm/common/input/input.mjs.map +1 -0
- package/dist/esm/common/input/input.module.mjs +2 -0
- package/dist/esm/common/input/input.module.mjs.map +1 -0
- package/dist/esm/common/input/input.types.mjs +2 -0
- package/dist/esm/common/input/input.types.mjs.map +1 -0
- package/dist/esm/common/inputDropdown/inputDropdown.mjs +2 -0
- package/dist/esm/common/inputDropdown/inputDropdown.mjs.map +1 -0
- package/dist/esm/common/inputDropdown/inputDropdown.module.mjs +2 -0
- package/dist/esm/common/inputDropdown/inputDropdown.module.mjs.map +1 -0
- package/dist/esm/common/interactableDiv/index.mjs +2 -0
- package/dist/esm/common/interactableDiv/index.mjs.map +1 -0
- package/dist/esm/common/interactableDiv/interactableDiv.mjs +2 -0
- package/dist/esm/common/interactableDiv/interactableDiv.mjs.map +1 -0
- package/dist/esm/common/interactableDiv/interactableDiv.module.mjs +2 -0
- package/dist/esm/common/interactableDiv/interactableDiv.module.mjs.map +1 -0
- package/dist/esm/common/kanbanBoard/KanbanBoard.mjs +2 -0
- package/dist/esm/common/kanbanBoard/KanbanBoard.mjs.map +1 -0
- package/dist/esm/common/kanbanBoard/KanbanColumn.mjs +2 -0
- package/dist/esm/common/kanbanBoard/KanbanColumn.mjs.map +1 -0
- package/dist/esm/common/kanbanBoard/KanbanItem.mjs +2 -0
- package/dist/esm/common/kanbanBoard/KanbanItem.mjs.map +1 -0
- package/dist/esm/common/kanbanBoard/kanbanBoard.module.mjs +2 -0
- package/dist/esm/common/kanbanBoard/kanbanBoard.module.mjs.map +1 -0
- package/dist/esm/common/klipyPicker/components/gifPreview/gifPreview.mjs +2 -0
- package/dist/esm/common/klipyPicker/components/gifPreview/gifPreview.mjs.map +1 -0
- package/dist/esm/common/klipyPicker/components/gifPreview/gifPreview.module.mjs +2 -0
- package/dist/esm/common/klipyPicker/components/gifPreview/gifPreview.module.mjs.map +1 -0
- package/dist/esm/common/klipyPicker/components/gifView/gifView.mjs +2 -0
- package/dist/esm/common/klipyPicker/components/gifView/gifView.mjs.map +1 -0
- package/dist/esm/common/klipyPicker/components/gifView/gifView.module.mjs +2 -0
- package/dist/esm/common/klipyPicker/components/gifView/gifView.module.mjs.map +1 -0
- package/dist/esm/common/klipyPicker/klipyPicker.mjs +2 -0
- package/dist/esm/common/klipyPicker/klipyPicker.mjs.map +1 -0
- package/dist/esm/common/klipyPicker/klipyPicker.module.mjs +2 -0
- package/dist/esm/common/klipyPicker/klipyPicker.module.mjs.map +1 -0
- package/dist/esm/common/loading/iconLoading/iconLoading.mjs +2 -0
- package/dist/esm/common/loading/iconLoading/iconLoading.mjs.map +1 -0
- package/dist/esm/common/loading/iconLoading/iconLoading.module.mjs +2 -0
- package/dist/esm/common/loading/iconLoading/iconLoading.module.mjs.map +1 -0
- package/dist/esm/common/loading/iconLoading/index.mjs +2 -0
- package/dist/esm/common/loading/iconLoading/index.mjs.map +1 -0
- package/dist/esm/common/loading/spinnerLoading/index.mjs +2 -0
- package/dist/esm/common/loading/spinnerLoading/index.mjs.map +1 -0
- package/dist/esm/common/loading/spinnerLoading/spinnerLoading.mjs +2 -0
- package/dist/esm/common/loading/spinnerLoading/spinnerLoading.mjs.map +1 -0
- package/dist/esm/common/loading/spinnerLoading/spinnerLoading.module.mjs +2 -0
- package/dist/esm/common/loading/spinnerLoading/spinnerLoading.module.mjs.map +1 -0
- package/dist/esm/common/modal/modal.mjs +2 -0
- package/dist/esm/common/modal/modal.mjs.map +1 -0
- package/dist/esm/common/modal/modal.module.mjs +2 -0
- package/dist/esm/common/modal/modal.module.mjs.map +1 -0
- package/dist/esm/common/numberInput/index.mjs +2 -0
- package/dist/esm/common/numberInput/index.mjs.map +1 -0
- package/dist/esm/common/numberInput/numberInput.mjs +2 -0
- package/dist/esm/common/numberInput/numberInput.mjs.map +1 -0
- package/dist/esm/common/numberInput/numberInput.module.mjs +2 -0
- package/dist/esm/common/numberInput/numberInput.module.mjs.map +1 -0
- package/dist/esm/common/optionPicker/optionPicker.mjs +2 -0
- package/dist/esm/common/optionPicker/optionPicker.mjs.map +1 -0
- package/dist/esm/common/optionPicker/optionPicker.module.mjs +2 -0
- package/dist/esm/common/optionPicker/optionPicker.module.mjs.map +1 -0
- package/dist/esm/common/overscroll/overscroll.mjs +2 -0
- package/dist/esm/common/overscroll/overscroll.mjs.map +1 -0
- package/dist/esm/common/overscroll/overscroll.module.mjs +2 -0
- package/dist/esm/common/overscroll/overscroll.module.mjs.map +1 -0
- package/dist/esm/common/progressBar/progressBar.mjs +2 -0
- package/dist/esm/common/progressBar/progressBar.mjs.map +1 -0
- package/dist/esm/common/progressBar/progressBar.module.mjs +2 -0
- package/dist/esm/common/progressBar/progressBar.module.mjs.map +1 -0
- package/dist/esm/common/ripple/ripple.mjs +2 -0
- package/dist/esm/common/ripple/ripple.mjs.map +1 -0
- package/dist/esm/common/ripple/ripple.module.mjs +2 -0
- package/dist/esm/common/ripple/ripple.module.mjs.map +1 -0
- package/dist/esm/common/roomDrawer/roomDrawer.mjs +2 -0
- package/dist/esm/common/roomDrawer/roomDrawer.mjs.map +1 -0
- package/dist/esm/common/roomDrawer/roomDrawer.module.mjs +2 -0
- package/dist/esm/common/roomDrawer/roomDrawer.module.mjs.map +1 -0
- package/dist/esm/common/roomDrawer/roomDrawer.utils.mjs +6 -0
- package/dist/esm/common/roomDrawer/roomDrawer.utils.mjs.map +1 -0
- package/dist/esm/common/roomViewer/roomViewer.mjs +2 -0
- package/dist/esm/common/roomViewer/roomViewer.mjs.map +1 -0
- package/dist/esm/common/roomViewer/roomViewer.module.mjs +2 -0
- package/dist/esm/common/roomViewer/roomViewer.module.mjs.map +1 -0
- package/dist/esm/common/scrollbarProvider/index.mjs +2 -0
- package/dist/esm/common/scrollbarProvider/index.mjs.map +1 -0
- package/dist/esm/common/scrollbarProvider/scrollbarProvider.mjs +2 -0
- package/dist/esm/common/scrollbarProvider/scrollbarProvider.mjs.map +1 -0
- package/dist/esm/common/scrollbarProvider/scrollbarProvider.module.mjs +2 -0
- package/dist/esm/common/scrollbarProvider/scrollbarProvider.module.mjs.map +1 -0
- package/dist/esm/common/searchInput/searchInput.mjs +2 -0
- package/dist/esm/common/searchInput/searchInput.mjs.map +1 -0
- package/dist/esm/common/searchInput/searchInput.module.mjs +2 -0
- package/dist/esm/common/searchInput/searchInput.module.mjs.map +1 -0
- package/dist/esm/common/skeleton/skeleton.mjs +2 -0
- package/dist/esm/common/skeleton/skeleton.mjs.map +1 -0
- package/dist/esm/common/skeleton/skeleton.module.mjs +2 -0
- package/dist/esm/common/skeleton/skeleton.module.mjs.map +1 -0
- package/dist/esm/common/skeleton/skeleton.types.mjs +2 -0
- package/dist/esm/common/skeleton/skeleton.types.mjs.map +1 -0
- package/dist/esm/common/stepper/stepper.mjs +2 -0
- package/dist/esm/common/stepper/stepper.mjs.map +1 -0
- package/dist/esm/common/stepper/stepper.module.mjs +2 -0
- package/dist/esm/common/stepper/stepper.module.mjs.map +1 -0
- package/dist/esm/common/sticky/sticky.mjs +2 -0
- package/dist/esm/common/sticky/sticky.mjs.map +1 -0
- package/dist/esm/common/sticky/sticky.module.mjs +2 -0
- package/dist/esm/common/sticky/sticky.module.mjs.map +1 -0
- package/dist/esm/common/switch/switch.mjs +2 -0
- package/dist/esm/common/switch/switch.mjs.map +1 -0
- package/dist/esm/common/switch/switch.module.mjs +2 -0
- package/dist/esm/common/switch/switch.module.mjs.map +1 -0
- package/dist/esm/common/tabHeader/tabHeader.mjs +2 -0
- package/dist/esm/common/tabHeader/tabHeader.mjs.map +1 -0
- package/dist/esm/common/tabHeader/tabHeader.module.mjs +2 -0
- package/dist/esm/common/tabHeader/tabHeader.module.mjs.map +1 -0
- package/dist/esm/common/textarea/textarea.mjs +2 -0
- package/dist/esm/common/textarea/textarea.mjs.map +1 -0
- package/dist/esm/common/themeProvider/defaultTheme.mjs +2 -0
- package/dist/esm/common/themeProvider/defaultTheme.mjs.map +1 -0
- package/dist/esm/common/themeProvider/theme.module.mjs +2 -0
- package/dist/esm/common/themeProvider/theme.module.mjs.map +1 -0
- package/dist/esm/common/themeProvider/themeProvider.mjs +2 -0
- package/dist/esm/common/themeProvider/themeProvider.mjs.map +1 -0
- package/dist/esm/common/themeProvider/useTheme.mjs +2 -0
- package/dist/esm/common/themeProvider/useTheme.mjs.map +1 -0
- package/dist/esm/common/timeInput/components/clockDial/clockDial.mjs +2 -0
- package/dist/esm/common/timeInput/components/clockDial/clockDial.mjs.map +1 -0
- package/dist/esm/common/timeInput/components/clockDial/clockDial.module.mjs +2 -0
- package/dist/esm/common/timeInput/components/clockDial/clockDial.module.mjs.map +1 -0
- package/dist/esm/common/timeInput/timeFunctions.mjs +2 -0
- package/dist/esm/common/timeInput/timeFunctions.mjs.map +1 -0
- package/dist/esm/common/timeInput/timeInput.mjs +2 -0
- package/dist/esm/common/timeInput/timeInput.mjs.map +1 -0
- package/dist/esm/common/timeInput/timeInput.module.mjs +2 -0
- package/dist/esm/common/timeInput/timeInput.module.mjs.map +1 -0
- package/dist/esm/common/toast/toast.mjs +2 -0
- package/dist/esm/common/toast/toast.mjs.map +1 -0
- package/dist/esm/common/toast/toast.module.mjs +2 -0
- package/dist/esm/common/toast/toast.module.mjs.map +1 -0
- package/dist/esm/common/toast/toastProvider.mjs +2 -0
- package/dist/esm/common/toast/toastProvider.mjs.map +1 -0
- package/dist/esm/common/toast/toastService.mjs +2 -0
- package/dist/esm/common/toast/toastService.mjs.map +1 -0
- package/dist/esm/common/tooltip/tooltip.mjs +2 -0
- package/dist/esm/common/tooltip/tooltip.mjs.map +1 -0
- package/dist/esm/common/tooltip/tooltip.module.mjs +2 -0
- package/dist/esm/common/tooltip/tooltip.module.mjs.map +1 -0
- package/dist/esm/common/virtualList/useColumns.mjs +2 -0
- package/dist/esm/common/virtualList/useColumns.mjs.map +1 -0
- package/dist/esm/common/virtualList/useRowDrag.mjs +2 -0
- package/dist/esm/common/virtualList/useRowDrag.mjs.map +1 -0
- package/dist/esm/common/virtualList/useSelection.mjs +2 -0
- package/dist/esm/common/virtualList/useSelection.mjs.map +1 -0
- package/dist/esm/common/virtualList/useVirtualWindow.mjs +2 -0
- package/dist/esm/common/virtualList/useVirtualWindow.mjs.map +1 -0
- package/dist/esm/common/virtualList/virtualList.mjs +2 -0
- package/dist/esm/common/virtualList/virtualList.mjs.map +1 -0
- package/dist/esm/common/virtualList/virtualList.module.mjs +2 -0
- package/dist/esm/common/virtualList/virtualList.module.mjs.map +1 -0
- package/dist/esm/common/virtualList/virtualList.utils.mjs +2 -0
- package/dist/esm/common/virtualList/virtualList.utils.mjs.map +1 -0
- package/dist/esm/common/virtualList/virtualRow.mjs +2 -0
- package/dist/esm/common/virtualList/virtualRow.mjs.map +1 -0
- package/dist/esm/common/wizard/wizard.mjs +2 -0
- package/dist/esm/common/wizard/wizard.mjs.map +1 -0
- package/dist/esm/common/wizard/wizard.module.mjs +2 -0
- package/dist/esm/common/wizard/wizard.module.mjs.map +1 -0
- package/dist/esm/hooks/useWindowSize.mjs +2 -0
- package/dist/esm/hooks/useWindowSize.mjs.map +1 -0
- package/dist/esm/index.mjs +1 -0
- package/dist/esm/services/formValidation/FormValidatorGroupForm.mjs +2 -0
- package/dist/esm/services/formValidation/FormValidatorGroupForm.mjs.map +1 -0
- package/dist/esm/services/formValidation/FormValidatorGroupWithForm.mjs +2 -0
- package/dist/esm/services/formValidation/FormValidatorGroupWithForm.mjs.map +1 -0
- package/dist/esm/services/formValidation/formValidator.mjs +2 -0
- package/dist/esm/services/formValidation/formValidator.mjs.map +1 -0
- package/dist/esm/services/formValidation/formValidatorGroup.mjs +2 -0
- package/dist/esm/services/formValidation/formValidatorGroup.mjs.map +1 -0
- package/dist/esm/services/formValidation/useFormValidator.mjs +2 -0
- package/dist/esm/services/formValidation/useFormValidator.mjs.map +1 -0
- package/dist/esm/services/formValidation/useFormValidatorGroup.mjs +2 -0
- package/dist/esm/services/formValidation/useFormValidatorGroup.mjs.map +1 -0
- package/dist/esm/services/formValidation/validatableComponent.mjs +2 -0
- package/dist/esm/services/formValidation/validatableComponent.mjs.map +1 -0
- package/dist/esm/services/formValidation/validators.mjs +2 -0
- package/dist/esm/services/formValidation/validators.mjs.map +1 -0
- package/dist/esm/services/klipy.mjs +2 -0
- package/dist/esm/services/klipy.mjs.map +1 -0
- package/dist/esm/services/localization.mjs +2 -0
- package/dist/esm/services/localization.mjs.map +1 -0
- package/dist/esm/services/regexp.mjs +2 -0
- package/dist/esm/services/regexp.mjs.map +1 -0
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/style.css +1 -1
- package/docs/ThemeProvider.md +2 -0
- package/package.json +4 -3
- package/dist/index.mjs +0 -6894
- package/dist/index.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtualList.module.mjs","names":[],"sources":["../../../../package/common/virtualList/virtualList.module.pcss"],"sourcesContent":[".virtualList {\n overflow-y: auto;\n box-sizing: border-box;\n color: var(--text-color);\n font-family: var(--default-font);\n /* Disable the browser's own scroll anchoring — the component does its own\n scroll-position correction when row heights change, and the two fighting\n each other causes the thumb to desync while dragging. */\n overflow-anchor: none;\n /* Reserve the scrollbar gutter so rows don't re-wrap (and re-measure) when the\n vertical scrollbar appears/disappears as content grows. */\n scrollbar-gutter: stable;\n /* Establish a stacking context so every z-index inside the list (sticky\n header, toggle popover, drag clone) stays scoped to this component and\n can't paint over outside content like a modal. */\n isolation: isolate;\n\n &-drag-clone {\n box-sizing: border-box;\n contain: layout paint style;\n cursor: grabbing;\n /* It tracks the finger via transform — never animate that. */\n transition: none;\n }\n\n &-header {\n display: grid;\n position: sticky;\n top: 0;\n /* Above focused rows (z-index 1) so a focused row scrolled under the header\n never paints over it; the drag clone (z-index 3) still floats above both. */\n z-index: 2;\n background: var(--background-accent);\n border-bottom: 1px solid var(--border-color);\n box-sizing: border-box;\n\n &-cell {\n padding: 8px 12px;\n font-weight: 600;\n font-size: 13px;\n color: var(--text-dark);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n box-sizing: border-box;\n }\n\n &-toggle {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px 8px;\n color: var(--text-dark);\n display: flex;\n align-items: center;\n border-radius: var(--default-border-radius);\n transition: background 0.15s;\n\n &:hover {\n background: var(--background-accent-light);\n color: var(--text-color);\n }\n }\n }\n\n &-toggle {\n &-wrapper {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n padding: 0 4px;\n }\n\n &-popover {\n position: absolute;\n top: calc(100% + 4px);\n right: 0;\n background: var(--background-accent);\n border: 1px solid var(--border-color);\n border-radius: var(--default-border-radius);\n box-shadow: var(--card-shadow);\n min-width: 160px;\n padding: 4px 0;\n }\n\n &-item {\n padding: 4px 12px;\n white-space: nowrap;\n transition: background 0.1s;\n font-size: 14px;\n\n &:hover {\n background: var(--background-accent-light);\n }\n }\n }\n\n /* Count badge on the column-toggle cog: how many columns the user has hidden.\n Positioned at the cog's upper-right corner; non-interactive. */\n &-column-chip {\n position: absolute;\n top: 0;\n right: 0;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--primary-color);\n color: var(--text-on-primary);\n font-size: 10px;\n font-weight: 600;\n line-height: 1;\n border-radius: 8px;\n pointer-events: none;\n }\n\n &-select-cell {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 4px;\n box-sizing: border-box;\n }\n\n &-body {\n position: relative;\n box-sizing: border-box;\n }\n\n &-row {\n border-bottom: 1px solid var(--border-color);\n box-sizing: border-box;\n cursor: pointer;\n transition: background 0.1s;\n /* Isolate each row's layout/style so measuring or restyling one row can't force\n the whole list to re-layout — keeps fast scrolling smooth. */\n contain: layout style;\n\n &-no-divider {\n border-bottom: none;\n }\n\n &:hover {\n background: var(--background-accent-light);\n }\n\n /* Opt out of the hover highlight (e.g. when each row is a Card that handles\n its own hover). Declared before the `-selected` rule below, so a selected\n row's highlight still wins on hover. */\n &-no-hover:hover {\n background: transparent;\n }\n\n &-selected {\n background: var(--primary-lighter);\n\n &:hover {\n background: var(--primary-lighter);\n }\n }\n\n &-draggable {\n cursor: grab;\n /* Stop the mobile long-press from selecting text or showing the callout. */\n user-select: none;\n -webkit-touch-callout: none;\n\n &:active {\n cursor: grabbing;\n }\n }\n\n &-dragging {\n opacity: 0.4;\n }\n\n /* Tree-reorder `inside` drop: the dragged node becomes a child of this row,\n so highlight the whole row instead of drawing a between-rows line. */\n &-drop-inside {\n background: var(--primary-lighter);\n box-shadow: inset 0 0 0 2px var(--primary-color);\n }\n }\n\n /* Tree-reorder `before`/`after` drop line. Positioned inside the (relatively\n positioned absolute) row; `left` is set inline to the target's indent so it\n starts where the dropped content will. */\n &-drop-line {\n position: absolute;\n right: 0;\n height: 2px;\n background: var(--primary-color);\n pointer-events: none;\n z-index: 1;\n\n /* A small knob at the line's start, the usual tree drop-indicator look. */\n &::before {\n content: '';\n position: absolute;\n left: 0;\n top: 50%;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--primary-color);\n transform: translate(-50%, -50%);\n }\n\n &-before { top: -1px; }\n &-after { bottom: -1px; }\n }\n\n /* While a row is being dragged, suppress hover backgrounds so the pointer\n moving across rows doesn't light up the wrong one, and stop text selection.\n `touch-action: none` stops the touch drag from also scrolling the list\n (only active once the long-press has armed the drag). */\n &-reordering {\n touch-action: none;\n\n .virtualList-row {\n user-select: none;\n\n &:hover {\n background: transparent;\n }\n\n &.virtualList-row-selected:hover {\n background: var(--primary-lighter);\n }\n\n &.virtualList-row-dragging {\n background: transparent;\n }\n }\n }\n\n &-cell {\n padding: 8px 12px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: 14px;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n min-width: 0;\n\n /* `fit` columns are content-sized — keep their cells on a single line so the\n content can't wrap, and so the width measurement reads the true intrinsic\n width. (Other cells are free to wrap for variable-height rows.) */\n &[data-fit-key] {\n white-space: nowrap;\n }\n }\n\n &-loading {\n &-full {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n }\n\n &-indicator {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 8px 0;\n }\n }\n\n &-spinner {\n width: 32px;\n height: 32px;\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e,t,n,r=0){let i=e.length,a=Array(i+1);a[0]=0;for(let o=0;o<i;o++){let s=o<i-1?r:0;a[o+1]=a[o]+(t.get(e[o])??n)+s}return{offsets:a,totalHeight:a[i]}}function t(e,t,n){if(n<=0)return 0;let r=0,i=n-1;for(;r<i;){let n=r+i>>1;e[n+1]<=t?r=n+1:i=n}return r}function n(e,n,r,i,a){if(a===0)return{startIndex:0,endIndex:-1};let o=t(e,n,a),s=o;for(;s<a&&e[s]<n+r;)s++;return{startIndex:Math.max(0,o-i),endIndex:Math.min(a-1,s+i-1)}}function r(e,t,n,r,i){if(e===-1||e===t)return null;let a=r+i/2;return(t>e?n>=a:n<=a)?t:null}function i(e,t,n,r){if(n<=0)return`before`;let i=(e-t)/n;return r?i<1/3?`before`:i>2/3?`after`:`inside`:i<.5?`before`:`after`}function a(e,t){let n=t[e],r=e+1;for(;r<t.length&&t[r]>n;)r++;return r-1}function o(e,t){return e.length===0?`1fr`:e.map(e=>{switch(e.width.type){case`fixed`:return`${e.width.px}px`;case`flex`:return`${e.width.weight??1}fr`;case`fit`:{let n=t?.[e.key];return n==null?`fit-content(100%)`:`${n}px`}}}).join(` `)}var s=`ahroweui:virtuallist:columns:`;function c(e){if(!e||typeof window>`u`)return null;try{let t=window.localStorage.getItem(s+e);if(!t)return null;let n=JSON.parse(t);if(n&&Array.isArray(n.visible)&&Array.isArray(n.known))return{visible:n.visible.filter(e=>typeof e==`string`),known:n.known.filter(e=>typeof e==`string`)}}catch{}return null}function l(e,t){return t&&t.known.includes(e.key)?t.visible.includes(e.key):!e.defaultHidden}export{s as COLUMN_STORAGE_PREFIX,o as buildColumnTemplate,e as buildOffsets,t as findStartIndex,n as getVisibleRange,l as isColumnInitiallyVisible,a as lastDescendantIndex,c as loadPersistedColumns,r as resolveReorderTarget,i as resolveTreeDropTarget};
|
|
2
|
+
//# sourceMappingURL=virtualList.utils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtualList.utils.mjs","names":[],"sources":["../../../../package/common/virtualList/virtualList.utils.ts"],"sourcesContent":["import type { ColumnWidthSpec, VirtualListColumn } from './virtualList.types';\n\n// ─── Layout / windowing math ──────────────────────────────────────────────────\n\nexport function buildOffsets(\n keys: (string | number)[],\n heightsMap: Map<string | number, number>,\n estimatedRowHeight: number,\n rowGap = 0,\n): { offsets: number[]; totalHeight: number } {\n const itemCount = keys.length;\n const offsets = new Array<number>(itemCount + 1);\n offsets[0] = 0;\n for (let i = 0; i < itemCount; i++) {\n const gap = i < itemCount - 1 ? rowGap : 0;\n // Heights are cached by item key, not index, so a measured row keeps its\n // height across reorders/filters instead of inheriting its neighbour's.\n offsets[i + 1] = offsets[i] + (heightsMap.get(keys[i]) ?? estimatedRowHeight) + gap;\n }\n return { offsets, totalHeight: offsets[itemCount] };\n}\n\n/** Index of the row that sits at `scrollTop` — i.e. the first row whose bottom edge is below it. */\nexport function findStartIndex(offsets: number[], scrollTop: number, itemCount: number): number {\n if (itemCount <= 0) return 0;\n let lo = 0;\n let hi = itemCount - 1;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (offsets[mid + 1] <= scrollTop) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\nexport function getVisibleRange(\n offsets: number[],\n scrollTop: number,\n containerHeight: number,\n overscan: number,\n itemCount: number,\n): { startIndex: number; endIndex: number } {\n if (itemCount === 0) return { startIndex: 0, endIndex: -1 };\n\n const lo = findStartIndex(offsets, scrollTop, itemCount);\n\n let end = lo;\n while (end < itemCount && offsets[end] < scrollTop + containerHeight) end++;\n\n return {\n startIndex: Math.max(0, lo - overscan),\n endIndex: Math.min(itemCount - 1, end + overscan - 1),\n };\n}\n\n// ─── Reorder / tree-drop math ─────────────────────────────────────────────────\n\n/**\n * Decides where a dragged row should move to, applying midpoint hysteresis: a\n * move only happens once the pointer has crossed the centre of the row it is\n * over (downwards when moving down, upwards when moving up). Returns the target\n * index, or null if no move should occur. Pure for easy unit testing.\n */\nexport function resolveReorderTarget(\n fromIndex: number,\n overIndex: number,\n pointerY: number,\n rowTop: number,\n rowHeight: number,\n): number | null {\n if (fromIndex === -1 || fromIndex === overIndex) return null;\n const midpoint = rowTop + rowHeight / 2;\n const movingDown = overIndex > fromIndex;\n if (movingDown ? pointerY >= midpoint : pointerY <= midpoint) return overIndex;\n return null;\n}\n\n/**\n * Decides where a tree-reorder drop should land relative to the row under the\n * pointer. Group rows expose three zones (top third → `before`, middle →\n * `inside`, bottom third → `after`); leaf rows split in half (`before`/`after`)\n * since they can't receive children. Pure for easy unit testing.\n */\nexport function resolveTreeDropTarget(\n pointerY: number,\n rowTop: number,\n rowHeight: number,\n isGroup: boolean,\n): 'before' | 'inside' | 'after' {\n if (rowHeight <= 0) return 'before';\n const rel = (pointerY - rowTop) / rowHeight;\n if (isGroup) {\n if (rel < 1 / 3) return 'before';\n if (rel > 2 / 3) return 'after';\n return 'inside';\n }\n return rel < 0.5 ? 'before' : 'after';\n}\n\n/**\n * Index of the last descendant of the node at `index` in a depth-tagged flat\n * list (a contiguous run of following rows with a greater depth). Returns\n * `index` itself when the node has no children. A drop is forbidden anywhere in\n * `[index, lastDescendantIndex]` — that's the node and its own subtree.\n */\nexport function lastDescendantIndex(index: number, depths: number[]): number {\n const d = depths[index];\n let i = index + 1;\n while (i < depths.length && depths[i] > d) i++;\n return i - 1;\n}\n\n// ─── Column template ──────────────────────────────────────────────────────────\n\nexport function buildColumnTemplate(\n columns: { key: string; width: ColumnWidthSpec }[],\n fitWidths?: Record<string, number>,\n): string {\n if (columns.length === 0) return '1fr';\n return columns\n .map((col) => {\n switch (col.width.type) {\n case 'fixed': return `${col.width.px}px`;\n case 'flex': return `${col.width.weight ?? 1}fr`;\n // A `fit` track is content-sized, so it resolves independently in each\n // grid (the header and every row are separate grids) and would drift\n // out of alignment. Once we've measured the column's natural width\n // across all those grids, pin it to that exact px so every grid uses an\n // identical track. Until then, fall back to content-sizing.\n case 'fit': {\n const w = fitWidths?.[col.key];\n return w != null ? `${w}px` : 'fit-content(100%)';\n }\n }\n })\n .join(' ');\n}\n\n// ─── Column-visibility persistence ────────────────────────────────────────────\n\nexport const COLUMN_STORAGE_PREFIX = 'ahroweui:virtuallist:columns:';\n\n// We persist both the visible keys and the full set of columns that existed at\n// save time. That lets us tell \"the user hid this column\" from \"this column\n// didn't exist yet\" when columns are added later — the former stays hidden, the\n// latter falls back to its defaultHidden value.\nexport interface PersistedColumns {\n visible: string[];\n known: string[];\n}\n\nexport function loadPersistedColumns(persistKey: string | undefined): PersistedColumns | null {\n if (!persistKey || typeof window === 'undefined') return null;\n try {\n const raw = window.localStorage.getItem(COLUMN_STORAGE_PREFIX + persistKey);\n if (!raw) return null;\n const parsed = JSON.parse(raw);\n if (parsed && Array.isArray(parsed.visible) && Array.isArray(parsed.known)) {\n return {\n visible: parsed.visible.filter((k: unknown): k is string => typeof k === 'string'),\n known: parsed.known.filter((k: unknown): k is string => typeof k === 'string'),\n };\n }\n } catch {\n // Corrupt/unavailable storage — fall back to defaults.\n }\n return null;\n}\n\n/** Whether a column should start visible, honouring saved settings then `defaultHidden`. */\nexport function isColumnInitiallyVisible<T>(col: VirtualListColumn<T>, persisted: PersistedColumns | null): boolean {\n if (persisted && persisted.known.includes(col.key)) return persisted.visible.includes(col.key);\n return !col.defaultHidden;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"./virtualList.module.mjs";import{useLayoutEffect as t,useRef as n}from"react";import r from"classnames";import{jsx as i,jsxs as a}from"react/jsx-runtime";function o({index:o,top:s,padding:c,columnTemplate:l,isSelected:u,showDivider:d,hover:f,onClick:p,observer:m,ariaRowIndex:h,ariaPosInSet:g,ariaSetSize:_,rowRole:v,reorderable:y,draggable:b,isDragging:x,reserveToggleGutter:S,onMouseDown:C,onDragStart:w,onDragOver:T,onDragEnd:E,onDrop:D,onTouchStart:O,dropPosition:k,dropIndentPx:A,dropIndicatorClassName:j,dropIndicatorStyle:M,rowClassName:N,rowStyle:P,children:F}){let I=n(null);return t(()=>{let e=I.current;if(!(!e||!m))return m.observe(e),()=>m.unobserve(e)},[m]),a(`div`,{ref:I,"data-index":o,className:r(e.virtualListRow,u&&e.virtualListRowSelected,!d&&e.virtualListRowNoDivider,!f&&e.virtualListRowNoHover,y&&e.virtualListRowDraggable,x&&e.virtualListRowDragging,k===`inside`&&e.virtualListRowDropInside,N),style:{position:`absolute`,top:0,left:0,right:0,transform:`translateY(${s}px)`,...c==null?{}:{padding:c},...l?{display:`grid`,gridTemplateColumns:l}:{},...S?{paddingRight:32}:{},...P},onClick:p,draggable:b,onMouseDown:C,onDragStart:w,onDragOver:T,onDragEnd:E,onDrop:D??(b?e=>e.preventDefault():void 0),onTouchStart:O,onContextMenu:b?e=>e.preventDefault():void 0,"aria-selected":u,"aria-rowindex":h,"aria-posinset":g,"aria-setsize":_,role:v,children:[(k===`before`||k===`after`)&&i(`div`,{"data-drop-line":k,"aria-hidden":!0,className:r(e.virtualListDropLine,k===`before`?e.virtualListDropLineBefore:e.virtualListDropLineAfter,j),style:{left:A??0,...M}}),F]})}export{o as default};
|
|
2
|
+
//# sourceMappingURL=virtualRow.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtualRow.mjs","names":[],"sources":["../../../../package/common/virtualList/virtualRow.tsx"],"sourcesContent":["import React, { useRef, useLayoutEffect } from 'react';\nimport cx from 'classnames';\n\nimport styles from './virtualList.module.pcss';\nimport type { TreeDropPosition } from './virtualList.types';\n\nexport interface VirtualRowProps {\n index: number;\n top: number;\n /** Padding applied to the row (already normalised to a CSS string). */\n padding?: string;\n columnTemplate: string | undefined;\n isSelected: boolean;\n showDivider: boolean;\n hover: boolean;\n onClick: () => void;\n observer: ResizeObserver | null;\n ariaRowIndex?: number;\n ariaPosInSet?: number;\n ariaSetSize?: number;\n rowRole: 'row' | 'listitem';\n reorderable?: boolean;\n draggable?: boolean;\n isDragging?: boolean;\n reserveToggleGutter?: boolean;\n onMouseDown?: (e: React.MouseEvent<HTMLDivElement>) => void;\n onDragStart?: (e: React.DragEvent<HTMLDivElement>) => void;\n onDragOver?: (e: React.DragEvent<HTMLDivElement>) => void;\n onDragEnd?: () => void;\n onDrop?: (e: React.DragEvent<HTMLDivElement>) => void;\n onTouchStart?: (e: React.TouchEvent<HTMLDivElement>) => void;\n dropPosition?: TreeDropPosition;\n dropIndentPx?: number;\n dropIndicatorClassName?: string;\n dropIndicatorStyle?: React.CSSProperties;\n rowClassName?: string;\n rowStyle?: React.CSSProperties;\n children: React.ReactNode;\n}\n\n/**\n * A single virtualized row: absolutely positioned at its `top`, optionally a\n * grid (table mode), registering itself with the shared ResizeObserver and\n * carrying all the drag / drop-indicator wiring the parent assigns it.\n */\nfunction VirtualRow({\n index,\n top,\n padding,\n columnTemplate,\n isSelected,\n showDivider,\n hover,\n onClick,\n observer,\n ariaRowIndex,\n ariaPosInSet,\n ariaSetSize,\n rowRole,\n reorderable,\n draggable,\n isDragging,\n reserveToggleGutter,\n onMouseDown,\n onDragStart,\n onDragOver,\n onDragEnd,\n onDrop,\n onTouchStart,\n dropPosition,\n dropIndentPx,\n dropIndicatorClassName,\n dropIndicatorStyle,\n rowClassName,\n rowStyle,\n children,\n}: VirtualRowProps) {\n const ref = useRef<HTMLDivElement>(null);\n\n // A single observer is shared across all rows (created by the parent); each\n // row just registers/unregisters its element. The parent reads the row index\n // back from the `data-index` attribute when the observer fires.\n useLayoutEffect(() => {\n const el = ref.current;\n if (!el || !observer) return;\n observer.observe(el);\n return () => observer.unobserve(el);\n }, [observer]);\n\n return (\n <div\n ref={ref}\n data-index={index}\n className={cx(\n styles.virtualListRow,\n isSelected && styles.virtualListRowSelected,\n !showDivider && styles.virtualListRowNoDivider,\n !hover && styles.virtualListRowNoHover,\n reorderable && styles.virtualListRowDraggable,\n isDragging && styles.virtualListRowDragging,\n dropPosition === 'inside' && styles.virtualListRowDropInside,\n rowClassName,\n )}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n transform: `translateY(${top}px)`,\n ...(padding != null ? { padding } : {}),\n ...(columnTemplate ? { display: 'grid', gridTemplateColumns: columnTemplate } : {}),\n // Match the header's reserved gutter for the column-toggle cog so row\n // cells line up with their header cells instead of drifting under it.\n // Applied after `padding` so the alignment gutter always wins on the right.\n ...(reserveToggleGutter ? { paddingRight: 32 } : {}),\n ...rowStyle,\n }}\n onClick={onClick}\n draggable={draggable}\n onMouseDown={onMouseDown}\n onDragStart={onDragStart}\n onDragOver={onDragOver}\n onDragEnd={onDragEnd}\n onDrop={onDrop ?? (draggable ? (e) => e.preventDefault() : undefined)}\n onTouchStart={onTouchStart}\n onContextMenu={draggable ? (e) => e.preventDefault() : undefined}\n aria-selected={isSelected}\n aria-rowindex={ariaRowIndex}\n aria-posinset={ariaPosInSet}\n aria-setsize={ariaSetSize}\n role={rowRole}\n >\n {(dropPosition === 'before' || dropPosition === 'after') && (\n <div\n data-drop-line={dropPosition}\n aria-hidden\n className={cx(\n styles.virtualListDropLine,\n dropPosition === 'before' ? styles.virtualListDropLineBefore : styles.virtualListDropLineAfter,\n dropIndicatorClassName,\n )}\n style={{ left: dropIndentPx ?? 0, ...dropIndicatorStyle }}\n />\n )}\n {children}\n </div>\n );\n}\n\nexport default VirtualRow;\n"],"mappings":"wKA6CA,SAAS,EAAW,CAClB,QACA,MACA,UACA,iBACA,aACA,cACA,QACA,UACA,WACA,eACA,eACA,cACA,UACA,cACA,YACA,aACA,sBACA,cACA,cACA,aACA,YACA,SACA,eACA,eACA,eACA,yBACA,qBACA,eACA,WACA,YACkB,CAClB,IAAM,EAAM,EAAuB,IAAI,EAYvC,OAPA,MAAsB,CACpB,IAAM,EAAK,EAAI,QACX,MAAC,GAAM,CAAC,GAEZ,OADA,EAAS,QAAQ,CAAE,MACN,EAAS,UAAU,CAAE,CACpC,EAAG,CAAC,CAAQ,CAAC,EAGX,EAAC,MAAD,CACO,MACL,aAAY,EACZ,UAAW,EACT,EAAO,eACP,GAAc,EAAO,uBACrB,CAAC,GAAe,EAAO,wBACvB,CAAC,GAAS,EAAO,sBACjB,GAAe,EAAO,wBACtB,GAAc,EAAO,uBACrB,IAAiB,UAAY,EAAO,yBACpC,CACF,EACA,MAAO,CACL,SAAU,WACV,IAAK,EACL,KAAM,EACN,MAAO,EACP,UAAW,cAAc,EAAI,KAC7B,GAAI,GAAW,KAAqB,CAAC,EAAf,CAAE,SAAQ,EAChC,GAAI,EAAiB,CAAE,QAAS,OAAQ,oBAAqB,CAAe,EAAI,CAAC,EAIjF,GAAI,EAAsB,CAAE,aAAc,EAAG,EAAI,CAAC,EAClD,GAAG,CACL,EACS,UACE,YACE,cACA,cACD,aACD,YACX,OAAQ,IAAW,EAAa,GAAM,EAAE,eAAe,EAAI,IAAA,IAC7C,eACd,cAAe,EAAa,GAAM,EAAE,eAAe,EAAI,IAAA,GACvD,gBAAe,EACf,gBAAe,EACf,gBAAe,EACf,eAAc,EACd,KAAM,WAxCR,EA0CI,IAAiB,UAAY,IAAiB,UAC9C,EAAC,MAAD,CACE,iBAAgB,EAChB,cAAA,GACA,UAAW,EACT,EAAO,oBACP,IAAiB,SAAW,EAAO,0BAA4B,EAAO,yBACtE,CACF,EACA,MAAO,CAAE,KAAM,GAAgB,EAAG,GAAG,CAAmB,CACzD,CAAA,EAEF,CACE,GAET"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"./wizard.module.mjs";import{useEffect as t,useRef as n,useState as r}from"react";import i from"classnames";import{jsx as a}from"react/jsx-runtime";function o({currentStep:o=0,stepCount:s=0,renderStep:c=()=>null,className:l,style:u,classNames:d,styles:f,...p}){let[m,h]=r(void 0),[g,_]=r(!1),[v,y]=r(o),b=n([]),x=n(null);o!==v&&(y(o),_(!0)),t(()=>{if(!g)return;let e=setTimeout(()=>_(!1),400);return()=>clearTimeout(e)},[g]),t(()=>{x.current?.disconnect();let e=b.current[o];if(e)return h(e.clientHeight),x.current=new ResizeObserver(()=>{h(e.clientHeight)}),x.current.observe(e),()=>x.current?.disconnect()},[o,s]);let S={...m===void 0?{}:{height:`${m}px`},...f?.root,...u};return a(`div`,{...p,className:i(e.wizard,d?.root,l),style:S,children:a(`div`,{className:i(e.wizardContentContainer,d?.container),style:{width:`${s*100}%`,marginLeft:`-${o*100}%`,...f?.container},children:Array.from({length:s},(t,n)=>a(`div`,{ref:e=>{b.current[n]=e},className:i(e.wizardContent,d?.step),style:{width:`${100/s}%`,marginLeft:`${100/s*n}%`,...f?.step},children:a(`div`,{className:i({[e.wizardContentOutOfFrame]:o!==n&&!g},d?.stepContent),style:f?.stepContent,inert:o===n?void 0:!0,children:c(n)})},`wizardStep${n}`))})})}export{o as default};
|
|
2
|
+
//# sourceMappingURL=wizard.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard.mjs","names":[],"sources":["../../../../package/common/wizard/wizard.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport cx from 'classnames';\nimport styles from './wizard.module.pcss';\nimport type { WizardProps } from './wizard.types';\n\nexport default function Wizard({\n currentStep = 0,\n stepCount = 0,\n renderStep = () => null,\n className,\n style,\n classNames,\n styles: slotStyles,\n ...rest\n}: WizardProps) {\n const [height, setHeight] = useState<number | undefined>(undefined);\n const [showOtherContent, setShowOtherContent] = useState(false);\n const [prevStep, setPrevStep] = useState(currentStep);\n const stepRefs = useRef<(HTMLDivElement | null)[]>([]);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n\n // When currentStep changes, briefly show off-screen steps so they animate out.\n if (currentStep !== prevStep) {\n setPrevStep(currentStep);\n setShowOtherContent(true);\n }\n\n useEffect(() => {\n if (!showOtherContent) return;\n const id = setTimeout(() => setShowOtherContent(false), 400);\n return () => clearTimeout(id);\n }, [showOtherContent]);\n\n // Track the height of the active step via ResizeObserver.\n useEffect(() => {\n resizeObserverRef.current?.disconnect();\n const el = stepRefs.current[currentStep];\n if (!el) return;\n setHeight(el.clientHeight);\n resizeObserverRef.current = new ResizeObserver(() => {\n setHeight(el.clientHeight);\n });\n resizeObserverRef.current.observe(el);\n return () => resizeObserverRef.current?.disconnect();\n }, [currentStep, stepCount]);\n\n const rootStyle: React.CSSProperties = {\n ...(height !== undefined ? { height: `${height}px` } : {}),\n ...slotStyles?.root,\n ...style,\n };\n\n return (\n <div\n {...rest}\n className={cx(styles.wizard, classNames?.root, className)}\n style={rootStyle}\n >\n <div\n className={cx(styles.wizardContentContainer, classNames?.container)}\n style={{\n width: `${stepCount * 100}%`,\n marginLeft: `-${currentStep * 100}%`,\n ...slotStyles?.container,\n }}\n >\n {Array.from({ length: stepCount }, (_, index) => (\n <div\n key={`wizardStep${index}`}\n ref={(ref) => { stepRefs.current[index] = ref; }}\n className={cx(styles.wizardContent, classNames?.step)}\n style={{\n width: `${100 / stepCount}%`,\n marginLeft: `${(100 / stepCount) * index}%`,\n ...slotStyles?.step,\n }}\n >\n <div\n className={cx(\n { [styles.wizardContentOutOfFrame]: currentStep !== index && !showOtherContent },\n classNames?.stepContent\n )}\n style={slotStyles?.stepContent}\n inert={currentStep !== index ? true : undefined}\n >\n {renderStep(index)}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":"iKAKA,SAAwB,EAAO,CAC7B,cAAc,EACd,YAAY,EACZ,iBAAmB,KACnB,YACA,QACA,aACA,OAAQ,EACR,GAAG,GACW,CACd,GAAM,CAAC,EAAQ,GAAa,EAA6B,IAAA,EAAS,EAC5D,CAAC,EAAkB,GAAuB,EAAS,EAAK,EACxD,CAAC,EAAU,GAAe,EAAS,CAAW,EAC9C,EAAW,EAAkC,CAAC,CAAC,EAC/C,EAAoB,EAA8B,IAAI,EAGxD,IAAgB,IAClB,EAAY,CAAW,EACvB,EAAoB,EAAI,GAG1B,MAAgB,CACd,GAAI,CAAC,EAAkB,OACvB,IAAM,EAAK,eAAiB,EAAoB,EAAK,EAAG,GAAG,EAC3D,UAAa,aAAa,CAAE,CAC9B,EAAG,CAAC,CAAgB,CAAC,EAGrB,MAAgB,CACd,EAAkB,SAAS,WAAW,EACtC,IAAM,EAAK,EAAS,QAAQ,GACvB,KAML,OALA,EAAU,EAAG,YAAY,EACzB,EAAkB,QAAU,IAAI,mBAAqB,CACnD,EAAU,EAAG,YAAY,CAC3B,CAAC,EACD,EAAkB,QAAQ,QAAQ,CAAE,MACvB,EAAkB,SAAS,WAAW,CACrD,EAAG,CAAC,EAAa,CAAS,CAAC,EAE3B,IAAM,EAAiC,CACrC,GAAI,IAAW,IAAA,GAAwC,CAAC,EAA7B,CAAE,OAAQ,GAAG,EAAO,GAAI,EACnD,GAAG,GAAY,KACf,GAAG,CACL,EAEA,OACE,EAAC,MAAD,CACE,GAAI,EACJ,UAAW,EAAG,EAAO,OAAQ,GAAY,KAAM,CAAS,EACxD,MAAO,WAEP,EAAC,MAAD,CACE,UAAW,EAAG,EAAO,uBAAwB,GAAY,SAAS,EAClE,MAAO,CACL,MAAO,GAAG,EAAY,IAAI,GAC1B,WAAY,IAAI,EAAc,IAAI,GAClC,GAAG,GAAY,SACjB,WAEC,MAAM,KAAK,CAAE,OAAQ,CAAU,GAAI,EAAG,IACrC,EAAC,MAAD,CAEE,IAAM,GAAQ,CAAE,EAAS,QAAQ,GAAS,CAAK,EAC/C,UAAW,EAAG,EAAO,cAAe,GAAY,IAAI,EACpD,MAAO,CACL,MAAO,GAAG,IAAM,EAAU,GAC1B,WAAY,GAAI,IAAM,EAAa,EAAM,GACzC,GAAG,GAAY,IACjB,WAEA,EAAC,MAAD,CACE,UAAW,EACT,EAAG,EAAO,yBAA0B,IAAgB,GAAS,CAAC,CAAiB,EAC/E,GAAY,WACd,EACA,MAAO,GAAY,YACnB,MAAO,IAAgB,EAAe,IAAA,GAAP,YAE9B,EAAW,CAAK,CACd,CAAA,CACF,EAnBE,aAAa,GAmBf,CACN,CACE,CAAA,CACF,CAAA,CAET"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e={wizard:`wizard_uRBAN`,"wizard-content":`wizard-content_lcl4C`,wizardContent:`wizard-content_lcl4C`,"wizard-content-outOfFrame":`wizard-content-outOfFrame_Eks4Y`,wizardContentOutOfFrame:`wizard-content-outOfFrame_Eks4Y`,"wizard-content-container":`wizard-content-container_yxbCJ`,wizardContentContainer:`wizard-content-container_yxbCJ`};export{e as default};
|
|
2
|
+
//# sourceMappingURL=wizard.module.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard.module.mjs","names":[],"sources":["../../../../package/common/wizard/wizard.module.pcss"],"sourcesContent":[".wizard {\n height: 100%;\n width: 100%;\n position: relative;\n overflow: hidden;\n transition: all 0.2s;\n padding: 1px;\n\n &-content {\n position: absolute;\n height: fit-content;\n\n &-outOfFrame {\n * {\n user-select: none;\n pointer-events: none;\n visibility: hidden;\n display: none;\n }\n }\n\n &-container {\n display: flex;\n transition: all 0.6s;\n position: relative;\n }\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useEffect as e,useState as t}from"react";var n=768;function r(){let[r,i]=t(()=>({width:window.innerWidth,height:window.innerHeight,isMobileSize:window.innerWidth<n}));return e(()=>{function e(){i({width:window.innerWidth,height:window.innerHeight,isMobileSize:window.innerWidth<n})}return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]),r}export{r as default};
|
|
2
|
+
//# sourceMappingURL=useWindowSize.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWindowSize.mjs","names":[],"sources":["../../../package/hooks/useWindowSize.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport interface WindowSize {\n width: number;\n height: number;\n isMobileSize: boolean;\n}\n\nexport default function useWindowSize(): WindowSize {\n const [size, setSize] = useState<WindowSize>(() => ({\n width: window.innerWidth,\n height: window.innerHeight,\n isMobileSize: window.innerWidth < MOBILE_BREAKPOINT,\n }));\n\n useEffect(() => {\n function onResize() {\n setSize({\n width: window.innerWidth,\n height: window.innerHeight,\n isMobileSize: window.innerWidth < MOBILE_BREAKPOINT,\n });\n }\n window.addEventListener('resize', onResize);\n return () => window.removeEventListener('resize', onResize);\n }, []);\n\n return size;\n}\n"],"mappings":"gDAEA,IAAM,EAAoB,IAQ1B,SAAwB,GAA4B,CAClD,GAAM,CAAC,EAAM,GAAW,OAA4B,CAClD,MAAO,OAAO,WACd,OAAQ,OAAO,YACf,aAAc,OAAO,WAAa,CACpC,EAAE,EAcF,OAZA,MAAgB,CACd,SAAS,GAAW,CAClB,EAAQ,CACN,MAAO,OAAO,WACd,OAAQ,OAAO,YACf,aAAc,OAAO,WAAa,CACpC,CAAC,CACH,CAEA,OADA,OAAO,iBAAiB,SAAU,CAAQ,MAC7B,OAAO,oBAAoB,SAAU,CAAQ,CAC5D,EAAG,CAAC,CAAC,EAEE,CACT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{AccordionStyleType as e}from"./common/accordion/accordion.types.mjs";import t from"./common/accordion/accordion.mjs";import n from"./common/loading/spinnerLoading/index.mjs";import{ButtonSize as r,ButtonStyleType as i,ButtonType as a}from"./common/button/button.types.mjs";import o from"./common/ripple/ripple.mjs";import s from"./common/button/button.mjs";import c from"./common/actionButtons/actionButtons.mjs";import l from"./common/interactableDiv/index.mjs";import u from"./common/actionIcon/actionIcon.mjs";import{BadgePosition as d,BadgeStyleType as f}from"./common/badge/badge.types.mjs";import p from"./common/badge/badge.mjs";import m from"./common/avatar/avatar.mjs";import h from"./common/avatar/avatarGroup.mjs";import g from"./common/bodyEnd/bodyEnd.mjs";import{CardStyleType as _}from"./common/card/card.types.mjs";import v from"./common/card/Card.mjs";import y from"./common/card/CardHeader.mjs";import b from"./common/card/CardMedia.mjs";import x from"./common/card/CardContent.mjs";import S from"./common/card/CardActions.mjs";import C from"./common/checkbox/checkbox.mjs";import{ChipStyleType as w}from"./common/chip/chip.types.mjs";import T from"./common/chip/chip.mjs";import E from"./common/chip/chipContainer.mjs";import{Align as D}from"./common/floatingMenu/floatingMenu.types.mjs";import O from"./common/floatingMenu/floatingMenu.mjs";import k from"./common/tooltip/tooltip.mjs";import{InputType as A}from"./common/input/input.types.mjs";import j from"./common/input/input.mjs";import M from"./common/colorPicker/colorPicker.mjs";import N from"./common/modal/modal.mjs";import P from"./common/confirmModal/confirmModal.mjs";import{getLocale as F,mapLocale as I,setLocale as L}from"./services/localization.mjs";import R from"./common/infiniteBlock/infiniteBlock.mjs";import z from"./common/dropdown/dropdown.mjs";import B from"./common/datePicker/datePicker.mjs";import V from"./common/drawer/drawer.mjs";import{DropZoneReturnType as H,DropZoneStatus as U}from"./common/dropZone/dropZone.types.mjs";import W from"./common/dropZone/dropZone.mjs";import G from"./common/emptyState/emptyState.mjs";import K from"./common/fab/fab.mjs";import q from"./common/iconPicker/iconPicker.mjs";import J from"./common/idleManager/idleManager.mjs";import Y from"./common/inputDropdown/inputDropdown.mjs";import X from"./common/kanbanBoard/KanbanColumn.mjs";import Z from"./common/kanbanBoard/KanbanBoard.mjs";import Q from"./common/searchInput/searchInput.mjs";import $ from"./common/klipyPicker/klipyPicker.mjs";import ee from"./common/loading/iconLoading/index.mjs";import te from"./common/numberInput/index.mjs";import ne from"./common/optionPicker/optionPicker.mjs";import re from"./common/overscroll/overscroll.mjs";import ie from"./common/progressBar/progressBar.mjs";import ae from"./common/roomDrawer/roomDrawer.mjs";import oe from"./common/roomViewer/roomViewer.mjs";import se from"./common/scrollbarProvider/index.mjs";import{SkeletonAnimation as ce,SkeletonVariant as le}from"./common/skeleton/skeleton.types.mjs";import ue from"./common/skeleton/skeleton.mjs";import de from"./common/stepper/stepper.mjs";import fe from"./common/sticky/sticky.mjs";import pe from"./common/switch/switch.mjs";import me from"./common/tabHeader/tabHeader.mjs";import he from"./common/textarea/textarea.mjs";import{defaultTheme as ge}from"./common/themeProvider/defaultTheme.mjs";import _e from"./common/themeProvider/themeProvider.mjs";import{useTheme as ve}from"./common/themeProvider/useTheme.mjs";import ye from"./common/timeInput/timeInput.mjs";import{showToast as be}from"./common/toast/toastService.mjs";import xe from"./common/toast/toastProvider.mjs";import Se from"./common/virtualList/virtualList.mjs";import Ce from"./common/wizard/wizard.mjs";import we from"./services/formValidation/FormValidatorGroupWithForm.mjs";import Te from"./services/formValidation/formValidator.mjs";import{hasEightPasswordChars as Ee,hasOnePasswordDigit as De,hasOnePasswordLetter as Oe,isBic as ke,isDate as Ae,isEmail as je,isISODate as Me,isNumber as Ne,isPassword as Pe,isURL as Fe}from"./services/regexp.mjs";import Ie from"./services/formValidation/validators.mjs";import Le from"./services/formValidation/validatableComponent.mjs";import{useFormValidator as Re}from"./services/formValidation/useFormValidator.mjs";import{useFormValidatorGroup as ze}from"./services/formValidation/useFormValidatorGroup.mjs";export{t as Accordion,e as AccordionStyleType,c as ActionButtons,u as ActionIcon,D as Align,m as Avatar,h as AvatarGroup,p as Badge,d as BadgePosition,f as BadgeStyleType,g as BodyEnd,s as Button,r as ButtonSize,i as ButtonStyleType,a as ButtonType,v as Card,S as CardActions,x as CardContent,y as CardHeader,b as CardMedia,_ as CardStyleType,C as Checkbox,T as Chip,E as ChipContainer,w as ChipStyleType,M as ColorPicker,P as ConfirmModal,B as DatePicker,V as Drawer,W as DropZone,H as DropZoneReturnType,U as DropZoneStatus,z as Dropdown,G as EmptyState,K as Fab,O as FloatingMenu,Te as FormValidator,we as FormValidatorGroup,ee as IconLoading,q as IconPicker,J as IdleManager,R as InfiniteBlock,j as Input,Y as InputDropdown,A as InputType,l as InteractableDiv,Z as KanbanBoard,X as KanbanColumn,$ as KlipyPicker,N as Modal,te as NumberInput,ne as OptionPicker,re as Overscroll,ie as ProgressBar,o as Ripple,ae as RoomDrawer,oe as RoomViewer,se as ScrollbarProvider,Q as SearchInput,ue as Skeleton,ce as SkeletonAnimation,le as SkeletonVariant,n as SpinnerLoading,de as Stepper,fe as Sticky,pe as Switch,me as TabHeader,he as Textarea,_e as ThemeProvider,ye as TimeInput,xe as ToastProvider,k as Tooltip,Le as ValidatableComponent,Ie as Validators,Se as VirtualList,Ce as Wizard,ge as defaultTheme,F as getLocale,Ee as hasEightPasswordChars,De as hasOnePasswordDigit,Oe as hasOnePasswordLetter,ke as isBic,Ae as isDate,je as isEmail,Me as isISODate,Ne as isNumber,Pe as isPassword,Fe as isURL,I as mapLocale,L as setLocale,be as showToast,Re as useFormValidator,ze as useFormValidatorGroup,ve as useTheme};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormValidatorGroupForm.mjs","names":[],"sources":["../../../../package/services/formValidation/FormValidatorGroupForm.tsx"],"sourcesContent":["import React from 'react';\nimport type FormValidatorGroup from './formValidatorGroup';\n\n/**\n * Creates the Form component for a FormValidatorGroup instance.\n * Kept in a separate .tsx file so formValidatorGroup.ts stays framework-agnostic.\n */\nexport function createFormComponent(group: Pick<FormValidatorGroup, 'submit'>): React.FC<React.FormHTMLAttributes<HTMLFormElement>> {\n return function Form({ children, ...rest }) {\n return (\n <form onSubmit={group.submit} noValidate {...rest}>\n {children}\n </form>\n );\n };\n}\n"],"mappings":"sDAOA,SAAgB,EAAoB,EAAgG,CAClI,OAAO,SAAc,CAAE,WAAU,GAAG,GAAQ,CAC1C,OACE,EAAC,OAAD,CAAM,SAAU,EAAM,OAAQ,WAAA,GAAW,GAAI,EAC1C,UACG,CAAA,CAEV,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{showToast as e}from"../../common/toast/toastService.mjs";import t from"./formValidatorGroup.mjs";import{createFormComponent as n}from"./FormValidatorGroupForm.mjs";var r=t=>{e(t[0].message,{type:`error`})},i=class extends t{constructor(e,t=null,i){super(e,t,{...i,onSubmitError:i?.onSubmitError??r}),this.Form=n(this)}};export{i as default};
|
|
2
|
+
//# sourceMappingURL=FormValidatorGroupWithForm.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormValidatorGroupWithForm.mjs","names":[],"sources":["../../../../package/services/formValidation/FormValidatorGroupWithForm.tsx"],"sourcesContent":["import { showToast } from 'components/common/toast';\nimport FormValidatorGroup from './formValidatorGroup';\nimport { createFormComponent } from './FormValidatorGroupForm';\nimport type { FormGroup, FormValidatorGroupOptions, InferGroupValues } from './formValidatorGroup';\nimport type { ValidationError } from './types';\nimport type React from 'react';\n\n/** Default onSubmitError: surface the first error as an error toast. Callers can override via options.onSubmitError. */\nconst defaultOnSubmitError = (errors: ValidationError[]): void => {\n showToast(errors[0].message, { type: 'error' });\n};\n\n/**\n * FormValidatorGroup with `this.Form` automatically attached.\n * Kept in a .tsx file so formValidatorGroup.ts stays framework-agnostic.\n *\n * This is the class you should use everywhere — it is a drop-in replacement\n * for FormValidatorGroup with one extra property: `this.Form`.\n *\n * Also injects the default toast-based onSubmitError so both hook and class-component\n * consumers surface errors out of the box; pass options.onSubmitError to override.\n */\nexport default class FormValidatorGroupWithForm<\n TGroup extends FormGroup = FormGroup,\n TInitial = InferGroupValues<TGroup>\n> extends FormValidatorGroup<TGroup, TInitial> {\n Form: React.FC<React.FormHTMLAttributes<HTMLFormElement>>;\n\n constructor(\n groupDef: TGroup,\n component: { forceUpdate: () => void } | null = null,\n options?: FormValidatorGroupOptions<TGroup, TInitial>\n ) {\n super(groupDef, component, { ...options, onSubmitError: options?.onSubmitError ?? defaultOnSubmitError });\n this.Form = createFormComponent(this);\n }\n}\n"],"mappings":"2KAQA,IAAM,EAAwB,GAAoC,CAChE,EAAU,EAAO,GAAG,QAAS,CAAE,KAAM,OAAQ,CAAC,CAChD,EAYqB,EAArB,cAGU,CAAqC,CAG7C,YACE,EACA,EAAgD,KAChD,EACA,CACA,MAAM,EAAU,EAAW,CAAE,GAAG,EAAS,cAAe,GAAS,eAAiB,CAAqB,CAAC,EACxG,KAAK,KAAO,EAAoB,IAAI,CACtC,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=class{#e;#t;#n;#r;#i;constructor(e,t){this.addError=e=>{this.#r.push(e),this.onUpdate()},this.removeErrors=e=>{this.#r=this.#r.filter(t=>!e.includes(t.id)),this.onUpdate()},this.clearErrors=()=>{this.#r=[],this.onUpdate()},this.hasError=e=>!e&&this.errors.length>0?!0:!!this.errors.find(t=>t.id===e),this.getCurrentErrorMessage=()=>this.errors.length===0?null:this.errors[0].message,this.validate=()=>{this.clearErrors(),this.validators.forEach(e=>{let t=e(this.value,this.label);t&&this.addError(t)})},this.onUpdate=()=>{this.onUpdateCallbacks.forEach(e=>e(this))},this.registerOnUpdateListener=e=>{this.onUpdateCallbacks.push(e)},this.removeOnUpdateListener=e=>{this.onUpdateCallbacks.splice(this.onUpdateCallbacks.indexOf(e),1)},this.set=(e,t=!0)=>(this.value=e,t&&!this.dirty&&(this.dirty=!0),this.validate(),this),this.#e=e,this.validators=t??[],this.#t=!1,this.#n=!1,this.#r=[],this.#i=``,this.onUpdateCallbacks=[],this.validate()}get touched(){return this.#t}set touched(e){this.#t=e,this.onUpdate()}get label(){return this.#i}set label(e){this.#i=e}get dirty(){return this.#n}set dirty(e){this.#n=e,this.onUpdate()}get value(){return this.#e}set value(e){this.#e=e,this.onUpdate()}get errors(){return this.#r}};e.prototype.toString=function(){return`${this.value}`};export{e as default};
|
|
2
|
+
//# sourceMappingURL=formValidator.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formValidator.mjs","names":["#errors","#value","#touched","#dirty","#label"],"sources":["../../../../package/services/formValidation/formValidator.ts"],"sourcesContent":["import type { ValidatorFunction, ValidationError, UpdateListener } from './types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport default class FormValidator<T = any> {\n #value: T;\n #touched: boolean;\n #dirty: boolean;\n #errors: ValidationError[];\n #label: string;\n\n validators: ValidatorFunction[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onUpdateCallbacks: Array<(validator: FormValidator<any>) => void>;\n\n /**\n * Create a FormValidator to use standalone or inside a FormValidatorGroup.\n * @param initialValue - Default value of the field\n * @param validators - Array of validator functions\n */\n constructor(initialValue: T, validators?: ValidatorFunction[]) {\n this.#value = initialValue;\n this.validators = validators ?? [];\n this.#touched = false;\n this.#dirty = false;\n this.#errors = [];\n this.#label = '';\n this.onUpdateCallbacks = [];\n this.validate();\n }\n\n /** Whether the user has entered and left the field. */\n get touched(): boolean { return this.#touched; }\n set touched(value: boolean) { this.#touched = value; this.onUpdate(); }\n\n get label(): string { return this.#label; }\n set label(value: string) { this.#label = value; }\n\n /** Whether the user has changed the value since initialisation. */\n get dirty(): boolean { return this.#dirty; }\n set dirty(value: boolean) { this.#dirty = value; this.onUpdate(); }\n\n get value(): T { return this.#value; }\n /** Sets value without validation (use `set()` for validated updates). */\n set value(val: T) { this.#value = val; this.onUpdate(); }\n\n get errors(): ValidationError[] { return this.#errors; }\n\n addError = (error: ValidationError): void => {\n this.#errors.push(error);\n this.onUpdate();\n };\n\n removeErrors = (errorIds: string[]): void => {\n this.#errors = this.#errors.filter((error) => !errorIds.includes(error.id));\n this.onUpdate();\n };\n\n clearErrors = (): void => {\n this.#errors = [];\n this.onUpdate();\n };\n\n hasError = (error?: string): boolean => {\n if (!error && this.errors.length > 0) return true;\n return !!(this.errors.find((err) => err.id === error));\n };\n\n getCurrentErrorMessage = (): string | null => {\n if (this.errors.length === 0) return null;\n return this.errors[0].message;\n };\n\n validate = (): void => {\n this.clearErrors();\n this.validators.forEach((validator) => {\n const res = validator(this.value, this.label);\n if (res) this.addError(res);\n });\n };\n\n onUpdate = (): void => {\n this.onUpdateCallbacks.forEach((cb) => cb(this));\n };\n\n registerOnUpdateListener = (callback: UpdateListener): void => {\n this.onUpdateCallbacks.push(callback);\n };\n\n removeOnUpdateListener = (callback: UpdateListener): void => {\n this.onUpdateCallbacks.splice(this.onUpdateCallbacks.indexOf(callback), 1);\n };\n\n /**\n * Sets the field value with optional dirty tracking and re-validates.\n * @param newValue - New field value\n * @param wasUser - Whether the change was user-initiated (marks field dirty). Defaults to true.\n */\n set = (newValue: T, wasUser: boolean = true): this => {\n this.value = newValue;\n if (wasUser && !this.dirty) this.dirty = true;\n this.validate();\n return this;\n };\n}\n\nFormValidator.prototype.toString = function getValidatorValue() {\n return `${this.value}`;\n};\n"],"mappings":"AAGA,IAAqB,EAArB,KAA4C,CAC1C,GACA,GACA,GACA,GACA,GAWA,YAAY,EAAiB,EAAkC,eA4BnD,GAAiC,CAC3C,KAAKA,GAAQ,KAAK,CAAK,EACvB,KAAK,SAAS,CAChB,oBAEgB,GAA6B,CAC3C,KAAKA,GAAU,KAAKA,GAAQ,OAAQ,GAAU,CAAC,EAAS,SAAS,EAAM,EAAE,CAAC,EAC1E,KAAK,SAAS,CAChB,uBAE0B,CACxB,KAAKA,GAAU,CAAC,EAChB,KAAK,SAAS,CAChB,gBAEY,GACN,CAAC,GAAS,KAAK,OAAO,OAAS,EAAU,GACtC,CAAC,CAAE,KAAK,OAAO,KAAM,GAAQ,EAAI,KAAO,CAAK,kCAIhD,KAAK,OAAO,SAAW,EAAU,KAC9B,KAAK,OAAO,GAAG,0BAGD,CACrB,KAAK,YAAY,EACjB,KAAK,WAAW,QAAS,GAAc,CACrC,IAAM,EAAM,EAAU,KAAK,MAAO,KAAK,KAAK,EACxC,GAAK,KAAK,SAAS,CAAG,CAC5B,CAAC,CACH,oBAEuB,CACrB,KAAK,kBAAkB,QAAS,GAAO,EAAG,IAAI,CAAC,CACjD,gCAE4B,GAAmC,CAC7D,KAAK,kBAAkB,KAAK,CAAQ,CACtC,8BAE0B,GAAmC,CAC3D,KAAK,kBAAkB,OAAO,KAAK,kBAAkB,QAAQ,CAAQ,EAAG,CAAC,CAC3E,YAOO,EAAa,EAAmB,MACrC,KAAK,MAAQ,EACT,GAAW,CAAC,KAAK,QAAO,KAAK,MAAQ,IACzC,KAAK,SAAS,EACP,MAjFP,KAAKC,GAAS,EACd,KAAK,WAAa,GAAc,CAAC,EACjC,KAAKC,GAAW,GAChB,KAAKC,GAAS,GACd,KAAKH,GAAU,CAAC,EAChB,KAAKI,GAAS,GACd,KAAK,kBAAoB,CAAC,EAC1B,KAAK,SAAS,CAChB,CAGA,IAAI,SAAmB,CAAE,OAAO,KAAKF,EAAU,CAC/C,IAAI,QAAQ,EAAgB,CAAE,KAAKA,GAAW,EAAO,KAAK,SAAS,CAAG,CAEtE,IAAI,OAAgB,CAAE,OAAO,KAAKE,EAAQ,CAC1C,IAAI,MAAM,EAAe,CAAE,KAAKA,GAAS,CAAO,CAGhD,IAAI,OAAiB,CAAE,OAAO,KAAKD,EAAQ,CAC3C,IAAI,MAAM,EAAgB,CAAE,KAAKA,GAAS,EAAO,KAAK,SAAS,CAAG,CAElE,IAAI,OAAW,CAAE,OAAO,KAAKF,EAAQ,CAErC,IAAI,MAAM,EAAQ,CAAE,KAAKA,GAAS,EAAK,KAAK,SAAS,CAAG,CAExD,IAAI,QAA4B,CAAE,OAAO,KAAKD,EAAS,CA0DzD,EAEA,EAAc,UAAU,SAAW,UAA6B,CAC9D,MAAO,GAAG,KAAK,OACjB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){let t=e;return t?.errors&&Array.isArray(t.errors)?t.errors.flatMap(e=>Object.entries(e).map(([e,t])=>({id:e,message:t}))):[]}var t=class{#e;#t;#n;#r;#i;constructor(t,n=null,{initialValues:r,onSubmit:i=()=>void 0,onValidate:a=()=>void 0,errorParser:o=e,onSubmitError:s=()=>void 0}={}){this.#t=!1,this.#i=[],this.getFormError=()=>{let e=Object.keys(this.group);for(let t=0;t<e.length;t+=1){let n=e[t];if(this.group[n].errors.length>0)return this.group[n].errors[0]}return null},this.set=(e,t)=>(this.group[e].set(t),this),this.reset=(e={})=>{this.submitCount=0;let t=Object.keys(e);Object.keys(this.group).forEach(n=>{this.group[n].set(t.includes(n)?e[n]:this.#r[n],!1)}),this.resetDirtyAndTouched(),this.onReset&&this.onReset(this,this.#r,this.#e)},this.resetDirtyAndTouched=()=>{Object.keys(this.group).forEach(e=>{this.group[e].dirty=!1,this.group[e].touched=!1})},this.parseError=(e,t=!1)=>{let n=this.errorParser(e);n.length>0?(n.forEach(({id:e,message:t})=>{this.group[e]&&this.group[e].addError({id:e,message:t})}),t&&this.onSubmitError(n)):this.onSubmitError([{id:`generic`,message:`An error occurred`}])},this.#a=()=>{this.component&&this.component.forceUpdate(),this.#i.forEach(e=>e())},this.registerOnUpdateListener=e=>{this.#i.push(e)},this.removeOnUpdateListener=e=>{this.#i.splice(this.#i.indexOf(e),1)},this.setSubmitting=e=>{this.#t!==e&&(this.#t=e,this.#a())},this.submit=async e=>{e&&(e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()),this.setSubmitting(!0);let t=null;this.submitCount===0?t=await Promise.resolve(this.validate()):this.onValidateCallback&&(t=await Promise.resolve(this.onValidateCallback(this)));let n=this.getFormError()||t;if(n){this.setSubmitting(!1),this.submitCount>-1&&this.onSubmitError([n]),this.submitCount+=1,this.#a();return}try{await this.onSubmitCallback(this.getValues(),this),this.resetDirtyAndTouched()}catch(e){this.parseError(e,!0)}this.setSubmitting(!1),this.#a(),this.submitCount+=1},this.getValues=()=>{let e={};return Object.keys(this.group).forEach(t=>{e[t]=this.group[t].value}),{...this.#e,...e}},this.validate=()=>{if(Object.keys(this.group).forEach(e=>{this.group[e].validate(),this.group[e].touched=!0}),this.onValidateCallback)return this.onValidateCallback(this)},this.setValidator=(e,t)=>(this.group[e]=t,this),this.group=t,this.#e=r??{},this.#r={},this.submitCount=0,this.onDebounce=()=>{},this.onReset=()=>{},Object.keys(this.group).forEach(e=>{let t=this.group[e],n=this.#e;n[e]!==void 0&&t.set(n[e],!1),this.#r[e]=t.value,this.group[e].registerOnUpdateListener(()=>{this.#a(),this.submitCount=0,this.#n&&clearTimeout(this.#n),this.#n=setTimeout(()=>this.onDebounce(this.getValues()),500)})}),this.component=n,this.onSubmitCallback=i,this.onValidateCallback=a,this.errorParser=o,this.onSubmitError=s,this.setSubmitting(!1)}get isSubmitting(){return this.#t}get wasTouched(){return Object.keys(this.group).some(e=>this.group[e].touched)}get isDirty(){return Object.keys(this.group).some(e=>this.group[e].dirty)}get hasErrors(){return Object.keys(this.group).some(e=>this.group[e].errors.length>0)}get initialValues(){return{...this.#e}}#a};export{t as default};
|
|
2
|
+
//# sourceMappingURL=formValidatorGroup.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formValidatorGroup.mjs","names":["#valuesAfterCreation","#initialValues","#updateListeners","#isSubmitting","#notifyListeners","#debounceTimer"],"sources":["../../../../package/services/formValidation/formValidatorGroup.ts"],"sourcesContent":["// import polyglot from 'services/localization';\n\nimport type FormValidator from './formValidator';\nimport type { ValidationError, ErrorParser, UpdateListener } from './types';\n\n/** @internal */\nfunction defaultErrorParser(err: unknown): ValidationError[] {\n const e = err as { errors?: Record<string, string>[] };\n if (e?.errors && Array.isArray(e.errors)) {\n return e.errors.flatMap((errorObj) =>\n Object.entries(errorObj).map(([id, message]) => ({ id, message }))\n );\n }\n return [];\n}\n\nexport type FormGroup = Record<string, FormValidator<any>>; // eslint-disable-line @typescript-eslint/no-explicit-any\nexport type FormValues = Record<string, unknown>;\n\nexport type InferGroupValues<TGroup extends FormGroup> = {\n [K in keyof TGroup]: TGroup[K] extends FormValidator<infer V> ? V : never;\n};\n\n/**\n * The submitted result type: TInitial with all group-field keys replaced by\n * their typed validator values.\n */\nexport type MergedValues<TInitial, TGroup extends FormGroup> =\n Omit<TInitial, keyof TGroup & string> & InferGroupValues<TGroup>;\n\nexport interface FormValidatorGroupOptions<\n TGroup extends FormGroup = FormGroup,\n TInitial = InferGroupValues<TGroup>\n> {\n initialValues?: TInitial;\n onSubmit?: (\n values: MergedValues<TInitial, TGroup>,\n group: FormValidatorGroup<TGroup, TInitial>\n ) => Promise<void> | void;\n onValidate?: (group: FormValidatorGroup<TGroup, TInitial>) => ValidationError | null | void;\n errorParser?: ErrorParser;\n onSubmitError?: (errors: ValidationError[]) => void;\n}\n\ninterface ComponentLike {\n forceUpdate: () => void;\n}\n\nexport default class FormValidatorGroup<\n TGroup extends FormGroup = FormGroup,\n TInitial = InferGroupValues<TGroup>\n> {\n #initialValues: TInitial;\n #isSubmitting: boolean = false;\n #debounceTimer: ReturnType<typeof setTimeout> | undefined;\n #valuesAfterCreation: FormValues;\n #updateListeners: UpdateListener[] = [];\n\n group: TGroup;\n component: ComponentLike | null;\n onSubmitCallback: (values: MergedValues<TInitial, TGroup>, group: FormValidatorGroup<TGroup, TInitial>) => Promise<void> | void;\n onValidateCallback: (group: FormValidatorGroup<TGroup, TInitial>) => ValidationError | null | void;\n errorParser: ErrorParser;\n onSubmitError: (errors: ValidationError[]) => void;\n submitCount: number;\n onDebounce: (values: MergedValues<TInitial, TGroup>) => void;\n onReset: (group: FormValidatorGroup<TGroup, TInitial>, valuesAfterCreation: FormValues, initialValues: TInitial) => void;\n\n /**\n * @param formValidatorGroup - Map of field name → FormValidator\n * @param component - Class component instance for forceUpdate (pass null when using hooks)\n * @param options - initialValues, onSubmit, onValidate, errorParser\n */\n constructor(\n formValidatorGroup: TGroup,\n component: ComponentLike | null = null,\n {\n initialValues,\n onSubmit = () => undefined,\n onValidate = () => undefined,\n errorParser = defaultErrorParser,\n onSubmitError = () => undefined,\n }: FormValidatorGroupOptions<TGroup, TInitial> = {}\n ) {\n this.group = formValidatorGroup;\n this.#initialValues = (initialValues ?? {}) as TInitial;\n this.#valuesAfterCreation = {};\n this.submitCount = 0;\n this.onDebounce = () => {};\n this.onReset = () => {};\n\n Object.keys(this.group).forEach((validatorKey) => {\n const currentValidator = this.group[validatorKey];\n const iv = this.#initialValues as FormValues;\n if (iv[validatorKey] !== undefined) {\n currentValidator.set(iv[validatorKey], false);\n }\n this.#valuesAfterCreation[validatorKey] = currentValidator.value;\n this.group[validatorKey].registerOnUpdateListener(() => {\n this.#notifyListeners();\n this.submitCount = 0;\n if (this.#debounceTimer) clearTimeout(this.#debounceTimer);\n this.#debounceTimer = setTimeout(() => this.onDebounce(this.getValues()), 500);\n });\n });\n\n this.component = component;\n this.onSubmitCallback = onSubmit as typeof this.onSubmitCallback;\n this.onValidateCallback = onValidate as typeof this.onValidateCallback;\n this.errorParser = errorParser;\n this.onSubmitError = onSubmitError;\n this.setSubmitting(false);\n }\n\n get isSubmitting(): boolean { return this.#isSubmitting; }\n\n get wasTouched(): boolean {\n return Object.keys(this.group).some((key) => this.group[key].touched);\n }\n\n get isDirty(): boolean {\n return Object.keys(this.group).some((key) => this.group[key].dirty);\n }\n\n get hasErrors(): boolean {\n return Object.keys(this.group).some((key) => this.group[key].errors.length > 0);\n }\n\n get initialValues(): TInitial {\n return { ...this.#initialValues } as TInitial;\n }\n\n getFormError = (): ValidationError | null => {\n const groupKeys = Object.keys(this.group);\n for (let i = 0; i < groupKeys.length; i += 1) {\n const key = groupKeys[i];\n if (this.group[key].errors.length > 0) return this.group[key].errors[0];\n }\n return null;\n };\n\n set = (validatorName: keyof TGroup & string, value: unknown): this => {\n this.group[validatorName].set(value);\n return this;\n };\n\n reset = (toOverride: FormValues = {}): void => {\n this.submitCount = 0;\n const toOverrideKeys = Object.keys(toOverride);\n Object.keys(this.group).forEach((validatorKey) => {\n this.group[validatorKey].set(\n toOverrideKeys.includes(validatorKey)\n ? toOverride[validatorKey]\n : this.#valuesAfterCreation[validatorKey],\n false\n );\n });\n this.resetDirtyAndTouched();\n if (this.onReset) this.onReset(this, this.#valuesAfterCreation, this.#initialValues);\n };\n\n resetDirtyAndTouched = (): void => {\n Object.keys(this.group).forEach((key) => {\n this.group[key].dirty = false;\n this.group[key].touched = false;\n });\n };\n\n /**\n * Parses an API error and pushes field-level errors into the matching validators.\n * When field errors are found and isInternal is set, surfaces the first field message.\n * When the error shape isn't recognised (no field errors), always surfaces a generic message.\n */\n parseError = (err: unknown, isInternal: boolean = false): void => {\n const fieldErrors = this.errorParser(err);\n if (fieldErrors.length > 0) {\n fieldErrors.forEach(({ id, message }) => {\n if (this.group[id]) this.group[id].addError({ id, message });\n });\n if (isInternal) {\n this.onSubmitError(fieldErrors);\n }\n } else {\n this.onSubmitError([{ id: 'generic', message: 'An error occurred' }]);\n }\n };\n\n #notifyListeners = (): void => {\n if (this.component) this.component.forceUpdate();\n this.#updateListeners.forEach((cb) => cb());\n };\n\n registerOnUpdateListener = (callback: UpdateListener): void => {\n this.#updateListeners.push(callback);\n };\n\n removeOnUpdateListener = (callback: UpdateListener): void => {\n this.#updateListeners.splice(this.#updateListeners.indexOf(callback), 1);\n };\n\n setSubmitting = (isSubmitting: boolean): void => {\n if (this.#isSubmitting !== isSubmitting) {\n this.#isSubmitting = isSubmitting;\n this.#notifyListeners();\n }\n };\n\n submit = async (event?: Event | React.SyntheticEvent | null): Promise<void> => {\n if (event) {\n if ((event as Event).preventDefault) (event as Event).preventDefault();\n if ((event as Event).stopPropagation) (event as Event).stopPropagation();\n }\n this.setSubmitting(true);\n\n let customError: ValidationError | null | void = null;\n if (this.submitCount === 0) {\n customError = await Promise.resolve(this.validate());\n } else if (this.onValidateCallback) {\n customError = await Promise.resolve(this.onValidateCallback(this));\n }\n const currentError = this.getFormError() || customError;\n\n if (currentError) {\n this.setSubmitting(false);\n if (this.submitCount > -1) {\n this.onSubmitError([currentError]);\n }\n this.submitCount += 1;\n this.#notifyListeners();\n return;\n }\n\n try {\n await this.onSubmitCallback(this.getValues(), this);\n this.resetDirtyAndTouched();\n } catch (err) {\n this.parseError(err, true);\n }\n this.setSubmitting(false);\n this.#notifyListeners();\n this.submitCount += 1;\n };\n\n getValues = (): MergedValues<TInitial, TGroup> => {\n const retObj: FormValues = {};\n Object.keys(this.group).forEach((key) => {\n retObj[key] = this.group[key].value;\n });\n return { ...this.#initialValues, ...retObj } as MergedValues<TInitial, TGroup>;\n };\n\n validate = (): ValidationError | null | void => {\n Object.keys(this.group).forEach((validator) => {\n this.group[validator].validate();\n this.group[validator].touched = true;\n });\n if (this.onValidateCallback) return this.onValidateCallback(this);\n };\n\n setValidator = <K extends keyof TGroup & string>(validatorName: K, validator: TGroup[K]): this => {\n this.group[validatorName] = validator;\n return this;\n };\n}\n\n// Needed for the submit method's event type\nimport type React from 'react';\n"],"mappings":"AAMA,SAAS,EAAmB,EAAiC,CAC3D,IAAM,EAAI,EAMV,OALI,GAAG,QAAU,MAAM,QAAQ,EAAE,MAAM,EAC9B,EAAE,OAAO,QAAS,GACvB,OAAO,QAAQ,CAAQ,EAAE,KAAK,CAAC,EAAI,MAAc,CAAE,KAAI,SAAQ,EAAE,CACnE,EAEK,CAAC,CACV,CAkCA,IAAqB,EAArB,KAGE,CACA,GACA,GACA,GACA,GACA,GAiBA,YACE,EACA,EAAkC,KAClC,CACE,gBACA,eAAiB,IAAA,GACjB,iBAAmB,IAAA,GACnB,cAAc,EACd,oBAAsB,IAAA,IACyB,CAAC,EAClD,SA9BuB,WAGY,CAAC,wBA4EO,CAC3C,IAAM,EAAY,OAAO,KAAK,KAAK,KAAK,EACxC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAU,OAAQ,GAAK,EAAG,CAC5C,IAAM,EAAM,EAAU,GACtB,GAAI,KAAK,MAAM,GAAK,OAAO,OAAS,EAAG,OAAO,KAAK,MAAM,GAAK,OAAO,EACvE,CACA,OAAO,IACT,YAEO,EAAsC,KAC3C,KAAK,MAAM,GAAe,IAAI,CAAK,EAC5B,kBAGA,EAAyB,CAAC,IAAY,CAC7C,KAAK,YAAc,EACnB,IAAM,EAAiB,OAAO,KAAK,CAAU,EAC7C,OAAO,KAAK,KAAK,KAAK,EAAE,QAAS,GAAiB,CAChD,KAAK,MAAM,GAAc,IACvB,EAAe,SAAS,CAAY,EAChC,EAAW,GACX,KAAKA,GAAqB,GAC9B,EACF,CACF,CAAC,EACD,KAAK,qBAAqB,EACtB,KAAK,SAAS,KAAK,QAAQ,KAAM,KAAKA,GAAsB,KAAKC,EAAc,CACrF,gCAEmC,CACjC,OAAO,KAAK,KAAK,KAAK,EAAE,QAAS,GAAQ,CACvC,KAAK,MAAM,GAAK,MAAQ,GACxB,KAAK,MAAM,GAAK,QAAU,EAC5B,CAAC,CACH,mBAOc,EAAc,EAAsB,KAAgB,CAChE,IAAM,EAAc,KAAK,YAAY,CAAG,EACpC,EAAY,OAAS,GACvB,EAAY,SAAS,CAAE,KAAI,aAAc,CACnC,KAAK,MAAM,IAAK,KAAK,MAAM,GAAI,SAAS,CAAE,KAAI,SAAQ,CAAC,CAC7D,CAAC,EACG,GACF,KAAK,cAAc,CAAW,GAGhC,KAAK,cAAc,CAAC,CAAE,GAAI,UAAW,QAAS,mBAAoB,CAAC,CAAC,CAExE,cAE+B,CACzB,KAAK,WAAW,KAAK,UAAU,YAAY,EAC/C,KAAKC,GAAiB,QAAS,GAAO,EAAG,CAAC,CAC5C,gCAE4B,GAAmC,CAC7D,KAAKA,GAAiB,KAAK,CAAQ,CACrC,8BAE0B,GAAmC,CAC3D,KAAKA,GAAiB,OAAO,KAAKA,GAAiB,QAAQ,CAAQ,EAAG,CAAC,CACzE,qBAEiB,GAAgC,CAC3C,KAAKC,KAAkB,IACzB,KAAKA,GAAgB,EACrB,KAAKC,GAAiB,EAE1B,cAES,KAAO,IAA+D,CACzE,IACG,EAAgB,gBAAgB,EAAiB,eAAe,EAChE,EAAgB,iBAAiB,EAAiB,gBAAgB,GAEzE,KAAK,cAAc,EAAI,EAEvB,IAAI,EAA6C,KAC7C,KAAK,cAAgB,EACvB,EAAc,MAAM,QAAQ,QAAQ,KAAK,SAAS,CAAC,EAC1C,KAAK,qBACd,EAAc,MAAM,QAAQ,QAAQ,KAAK,mBAAmB,IAAI,CAAC,GAEnE,IAAM,EAAe,KAAK,aAAa,GAAK,EAE5C,GAAI,EAAc,CAChB,KAAK,cAAc,EAAK,EACpB,KAAK,YAAc,IACrB,KAAK,cAAc,CAAC,CAAY,CAAC,EAEnC,KAAK,aAAe,EACpB,KAAKA,GAAiB,EACtB,MACF,CAEA,GAAI,CACF,MAAM,KAAK,iBAAiB,KAAK,UAAU,EAAG,IAAI,EAClD,KAAK,qBAAqB,CAC5B,OAAS,EAAK,CACZ,KAAK,WAAW,EAAK,EAAI,CAC3B,CACA,KAAK,cAAc,EAAK,EACxB,KAAKA,GAAiB,EACtB,KAAK,aAAe,CACtB,qBAEkD,CAChD,IAAM,EAAqB,CAAC,EAI5B,OAHA,OAAO,KAAK,KAAK,KAAK,EAAE,QAAS,GAAQ,CACvC,EAAO,GAAO,KAAK,MAAM,GAAK,KAChC,CAAC,EACM,CAAE,GAAG,KAAKH,GAAgB,GAAG,CAAO,CAC7C,oBAEgD,CAK9C,GAJA,OAAO,KAAK,KAAK,KAAK,EAAE,QAAS,GAAc,CAC7C,KAAK,MAAM,GAAW,SAAS,EAC/B,KAAK,MAAM,GAAW,QAAU,EAClC,CAAC,EACG,KAAK,mBAAoB,OAAO,KAAK,mBAAmB,IAAI,CAClE,qBAEiD,EAAkB,KACjE,KAAK,MAAM,GAAiB,EACrB,MAjLP,KAAK,MAAQ,EACb,KAAKA,GAAkB,GAAiB,CAAC,EACzC,KAAKD,GAAuB,CAAC,EAC7B,KAAK,YAAc,EACnB,KAAK,eAAmB,CAAC,EACzB,KAAK,YAAgB,CAAC,EAEtB,OAAO,KAAK,KAAK,KAAK,EAAE,QAAS,GAAiB,CAChD,IAAM,EAAmB,KAAK,MAAM,GAC9B,EAAK,KAAKC,GACZ,EAAG,KAAkB,IAAA,IACvB,EAAiB,IAAI,EAAG,GAAe,EAAK,EAE9C,KAAKD,GAAqB,GAAgB,EAAiB,MAC3D,KAAK,MAAM,GAAc,6BAA+B,CACtD,KAAKI,GAAiB,EACtB,KAAK,YAAc,EACf,KAAKC,IAAgB,aAAa,KAAKA,EAAc,EACzD,KAAKA,GAAiB,eAAiB,KAAK,WAAW,KAAK,UAAU,CAAC,EAAG,GAAG,CAC/E,CAAC,CACH,CAAC,EAED,KAAK,UAAY,EACjB,KAAK,iBAAmB,EACxB,KAAK,mBAAqB,EAC1B,KAAK,YAAc,EACnB,KAAK,cAAgB,EACrB,KAAK,cAAc,EAAK,CAC1B,CAEA,IAAI,cAAwB,CAAE,OAAO,KAAKF,EAAe,CAEzD,IAAI,YAAsB,CACxB,OAAO,OAAO,KAAK,KAAK,KAAK,EAAE,KAAM,GAAQ,KAAK,MAAM,GAAK,OAAO,CACtE,CAEA,IAAI,SAAmB,CACrB,OAAO,OAAO,KAAK,KAAK,KAAK,EAAE,KAAM,GAAQ,KAAK,MAAM,GAAK,KAAK,CACpE,CAEA,IAAI,WAAqB,CACvB,OAAO,OAAO,KAAK,KAAK,KAAK,EAAE,KAAM,GAAQ,KAAK,MAAM,GAAK,OAAO,OAAS,CAAC,CAChF,CAEA,IAAI,eAA0B,CAC5B,MAAO,CAAE,GAAG,KAAKF,EAAe,CAClC,CAyDA,EA4EF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFormValidator.mjs","names":[],"sources":["../../../../package/services/formValidation/useFormValidator.ts"],"sourcesContent":["import { useEffect, useReducer } from 'react';\nimport type FormValidator from './formValidator';\n\n/**\n * Subscribes a function component to a FormValidator instance.\n * Triggers a re-render whenever value, errors, touched, or dirty changes.\n *\n * @param formValidator - The FormValidator instance to subscribe to (or null)\n * @returns The same formValidator for convenience\n */\nexport function useFormValidator<T extends FormValidator | null>(formValidator: T): T {\n const [, rerender] = useReducer((n: number) => n + 1, 0);\n\n useEffect(() => {\n if (!formValidator) return;\n formValidator.registerOnUpdateListener(rerender);\n return () => formValidator.removeOnUpdateListener(rerender);\n }, [formValidator]);\n\n return formValidator;\n}\n"],"mappings":"kDAUA,SAAgB,EAAiD,EAAqB,CACpF,GAAM,EAAG,GAAY,EAAY,GAAc,EAAI,EAAG,CAAC,EAQvD,OANA,MAAgB,CACT,KAEL,OADA,EAAc,yBAAyB,CAAQ,MAClC,EAAc,uBAAuB,CAAQ,CAC5D,EAAG,CAAC,CAAa,CAAC,EAEX,CACT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"./FormValidatorGroupWithForm.mjs";import{useEffect as t,useReducer as n,useRef as r}from"react";function i(i,{initialValues:a,onSubmit:o,onValidate:s,errorParser:c,onSubmitError:l}={}){let[,u]=n(e=>e+1,0),d=r(null);d.current||=new e(i,null,{initialValues:a,errorParser:c,onSubmitError:l});let f=d.current,p=r(o),m=r(s);return p.current=o,m.current=s,t(()=>(o!==void 0&&(f.onSubmitCallback=(...e)=>p.current?.(...e)),s!==void 0&&(f.onValidateCallback=(...e)=>m.current?.(...e)),f.registerOnUpdateListener(u),()=>f.removeOnUpdateListener(u)),[]),f}export{i as useFormValidatorGroup};
|
|
2
|
+
//# sourceMappingURL=useFormValidatorGroup.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFormValidatorGroup.mjs","names":[],"sources":["../../../../package/services/formValidation/useFormValidatorGroup.ts"],"sourcesContent":["import { useEffect, useReducer, useRef } from 'react';\nimport FormValidatorGroup from './FormValidatorGroupWithForm';\nimport type { FormGroup, FormValidatorGroupOptions, InferGroupValues } from './formValidatorGroup';\n\n/**\n * Creates and subscribes a function component to a FormValidatorGroup.\n * Triggers a re-render whenever any field, submit state, or validation state changes.\n *\n * The group is created once on mount from the provided field map.\n * onSubmit / onValidate are kept fresh via refs — they always reflect the latest\n * closure without needing to be listed in effect dependencies.\n *\n * onSubmitError defaults to showing the message as an error toast (provided by FormValidatorGroupWithForm);\n * pass options.onSubmitError to override.\n *\n * @param groupDef - Map of field name → FormValidator instance\n * @param options - initialValues, onSubmit, onValidate, errorParser, onSubmitError\n *\n * @example\n * const form = useFormValidatorGroup(\n * { name: new FormValidator('', [Validators.required('Required')]) },\n * {\n * initialValues: { name: 'Jane' },\n * onSubmit: async (values) => save(values),\n * },\n * );\n */\nexport function useFormValidatorGroup<\nTGroup extends FormGroup = FormGroup,\nTInitial = InferGroupValues<TGroup>\n>(\n groupDef: TGroup,\n { initialValues, onSubmit, onValidate, errorParser, onSubmitError }: FormValidatorGroupOptions<TGroup, TInitial> = {}\n): FormValidatorGroup<TGroup, TInitial> {\n const [, rerender] = useReducer((n: number) => n + 1, 0);\n\n const groupRef = useRef<FormValidatorGroup<TGroup, TInitial> | null>(null);\n if (!groupRef.current) {\n groupRef.current = new FormValidatorGroup(groupDef, null, {\n initialValues,\n errorParser,\n onSubmitError,\n });\n }\n const group = groupRef.current;\n\n const onSubmitRef = useRef(onSubmit);\n const onValidateRef = useRef(onValidate);\n onSubmitRef.current = onSubmit;\n onValidateRef.current = onValidate;\n\n useEffect(() => {\n if (onSubmit !== undefined) {\n group.onSubmitCallback = (...args) => onSubmitRef.current?.(...args);\n }\n if (onValidate !== undefined) {\n group.onValidateCallback = (...args) => onValidateRef.current?.(...args);\n }\n group.registerOnUpdateListener(rerender);\n return () => group.removeOnUpdateListener(rerender);\n }, []);\n\n return group;\n}\n"],"mappings":"8GA2BA,SAAgB,EAId,EACA,CAAE,gBAAe,WAAU,aAAY,cAAa,iBAA+D,CAAC,EAC9E,CACtC,GAAM,EAAG,GAAY,EAAY,GAAc,EAAI,EAAG,CAAC,EAEjD,EAAW,EAAoD,IAAI,EACzE,AACE,EAAS,UAAU,IAAI,EAAmB,EAAU,KAAM,CACxD,gBACA,cACA,eACF,CAAC,EAEH,IAAM,EAAQ,EAAS,QAEjB,EAAc,EAAO,CAAQ,EAC7B,EAAgB,EAAO,CAAU,EAevC,MAdA,GAAY,QAAU,EACtB,EAAc,QAAU,EAExB,OACM,IAAa,IAAA,KACf,EAAM,kBAAoB,GAAG,IAAS,EAAY,UAAU,GAAG,CAAI,GAEjE,IAAe,IAAA,KACjB,EAAM,oBAAsB,GAAG,IAAS,EAAc,UAAU,GAAG,CAAI,GAEzE,EAAM,yBAAyB,CAAQ,MAC1B,EAAM,uBAAuB,CAAQ,GACjD,CAAC,CAAC,EAEE,CACT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"../../common/tooltip/tooltip.mjs";import{PureComponent as t}from"react";import{jsx as n}from"react/jsx-runtime";var r=class extends t{static{this.defaultProps={formValidator:null,onMouseEnter:null,onMouseLeave:null,onFocus:null,onBlur:null,onChange:null,errorMessage:``,isValid:!1,isRequired:!1,label:``}}constructor(e){super(e);let{formValidator:t}=e;t&&(t.label=e.label??``,t.validate(),t.registerOnUpdateListener(()=>{this.forceUpdate()})),this.state={isFocused:!1,isHovered:!1},this.onMouseEnter=this.onMouseEnter.bind(this),this.onMouseLeave=this.onMouseLeave.bind(this),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),this.hasError=this.hasError.bind(this),this.renderTooltip=this.renderTooltip.bind(this),this.onChange=this.onChange.bind(this)}componentDidMount(){setTimeout(()=>this.setState({isFocused:!1,isHovered:!1}),1)}componentDidUpdate(e){let{formValidator:t}=this.props;e.formValidator&&t&&e.formValidator!==t&&t.registerOnUpdateListener(()=>{this.forceUpdate()})}onMouseEnter(e){let{onMouseEnter:t}=this.props;this.setState({isHovered:!0}),t&&t(e)}onMouseLeave(e){let{onMouseLeave:t}=this.props;this.setState({isHovered:!1}),t&&t(e)}onFocus(e){let{onFocus:t}=this.props;this.setState({isFocused:!0}),t&&t(e)}onBlur(e){let{formValidator:t,onBlur:n}=this.props;t&&(t.touched=!0),this.setState({isFocused:!1}),n&&n(e)}hasError(){let{errorMessage:e,isValid:t,formValidator:n}=this.props;return n?n.touched&&n.hasError():!t||!!e}isRequired(){let{isRequired:e,formValidator:t}=this.props;return!!(e||t&&t.validators.find(e=>e.validatorId===`required`))}renderTooltip(){let{errorMessage:t,formValidator:r}=this.props,{isHovered:i,isFocused:a}=this.state;return n(e,{variant:`error`,message:r?r.getCurrentErrorMessage():t||``,isVisible:this.hasError()&&(a||i)})}onChange(e){let{onChange:t,formValidator:n}=this.props;if(n){let t=e;e&&e.target&&(t=e.target.value),n.set(t)}t&&t(e)}};export{r as default};
|
|
2
|
+
//# sourceMappingURL=validatableComponent.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validatableComponent.mjs","names":[],"sources":["../../../../package/services/formValidation/validatableComponent.tsx"],"sourcesContent":["/* eslint-disable react/no-unused-state */\nimport React, { PureComponent } from 'react';\nimport FormValidator from 'services/formValidation/formValidator';\nimport Tooltip from 'components/common/tooltip';\n\nexport interface ValidatableComponentProps {\n formValidator?: FormValidator | null;\n onMouseEnter?: ((event: React.MouseEvent) => void) | null;\n onMouseLeave?: ((event: React.MouseEvent) => void) | null;\n onFocus?: ((event: React.FocusEvent) => void) | null;\n onBlur?: ((event: React.FocusEvent) => void) | null;\n onChange?: ((value: unknown) => void) | null;\n errorMessage?: string;\n isValid?: boolean;\n isRequired?: boolean;\n label?: string;\n}\n\nexport interface ValidatableComponentState {\n isFocused: boolean;\n isHovered: boolean;\n}\n\n/**\n * Base class that extends PureComponent with FormValidator integration.\n * Manages hover/focus state and renders error tooltips.\n */\nexport default class ValidatableComponent<\n P extends ValidatableComponentProps = ValidatableComponentProps,\n S extends ValidatableComponentState = ValidatableComponentState,\n> extends PureComponent<P, S> {\n static defaultProps: Partial<ValidatableComponentProps> = {\n formValidator: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onFocus: null,\n onBlur: null,\n onChange: null,\n errorMessage: '',\n isValid: false,\n isRequired: false,\n label: '',\n };\n\n constructor(props: P) {\n super(props);\n const { formValidator } = props;\n\n if (formValidator) {\n formValidator.label = props.label ?? '';\n formValidator.validate();\n formValidator.registerOnUpdateListener(() => { this.forceUpdate(); });\n }\n\n this.state = { isFocused: false, isHovered: false } as S;\n\n this.onMouseEnter = this.onMouseEnter.bind(this);\n this.onMouseLeave = this.onMouseLeave.bind(this);\n this.onFocus = this.onFocus.bind(this);\n this.onBlur = this.onBlur.bind(this);\n this.hasError = this.hasError.bind(this);\n this.renderTooltip = this.renderTooltip.bind(this);\n this.onChange = this.onChange.bind(this);\n }\n\n componentDidMount(): void {\n setTimeout(() => this.setState({ isFocused: false, isHovered: false } as S), 1);\n }\n\n componentDidUpdate(prevProps: P): void {\n const { formValidator } = this.props;\n if (prevProps.formValidator && formValidator && prevProps.formValidator !== formValidator) {\n formValidator.registerOnUpdateListener(() => { this.forceUpdate(); });\n }\n }\n\n onMouseEnter(event: React.MouseEvent): void {\n const { onMouseEnter } = this.props;\n this.setState({ isHovered: true } as unknown as S);\n if (onMouseEnter) onMouseEnter(event);\n }\n\n onMouseLeave(event: React.MouseEvent): void {\n const { onMouseLeave } = this.props;\n this.setState({ isHovered: false } as unknown as S);\n if (onMouseLeave) onMouseLeave(event);\n }\n\n onFocus(event: React.FocusEvent): void {\n const { onFocus } = this.props;\n this.setState({ isFocused: true } as unknown as S);\n if (onFocus) onFocus(event);\n }\n\n onBlur(event: React.FocusEvent): void {\n const { formValidator, onBlur } = this.props;\n if (formValidator) formValidator.touched = true;\n this.setState({ isFocused: false } as unknown as S);\n if (onBlur) onBlur(event);\n }\n\n hasError(): boolean {\n const { errorMessage, isValid, formValidator } = this.props;\n return formValidator\n ? (formValidator.touched && formValidator.hasError())\n : (!isValid || !!errorMessage);\n }\n\n isRequired(): boolean {\n const { isRequired, formValidator } = this.props;\n return !!(isRequired\n || (formValidator && formValidator.validators.find((v) => (v as { validatorId?: string }).validatorId === 'required')));\n }\n\n renderTooltip(): React.ReactNode {\n const { errorMessage, formValidator } = this.props;\n const { isHovered, isFocused } = this.state;\n return (\n <Tooltip\n variant=\"error\"\n message={formValidator ? formValidator.getCurrentErrorMessage() : (errorMessage || '')}\n isVisible={this.hasError() && (isFocused || isHovered)}\n />\n );\n }\n\n onChange(newVal: unknown): void {\n const { onChange, formValidator } = this.props;\n if (formValidator) {\n let extractedVal = newVal;\n if (newVal && (newVal as React.ChangeEvent<HTMLInputElement>).target) {\n extractedVal = (newVal as React.ChangeEvent<HTMLInputElement>).target.value;\n }\n formValidator.set(extractedVal);\n }\n if (onChange) onChange(newVal);\n }\n}\n"],"mappings":"8HA2BA,IAAqB,EAArB,cAGU,CAAoB,0BAC8B,CACxD,cAAe,KACf,aAAc,KACd,aAAc,KACd,QAAS,KACT,OAAQ,KACR,SAAU,KACV,aAAc,GACd,QAAS,GACT,WAAY,GACZ,MAAO,EACT,EAEA,YAAY,EAAU,CACpB,MAAM,CAAK,EACX,GAAM,CAAE,iBAAkB,EAEtB,IACF,EAAc,MAAQ,EAAM,OAAS,GACrC,EAAc,SAAS,EACvB,EAAc,6BAA+B,CAAE,KAAK,YAAY,CAAG,CAAC,GAGtE,KAAK,MAAQ,CAAE,UAAW,GAAO,UAAW,EAAM,EAElD,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EACnC,KAAK,SAAW,KAAK,SAAS,KAAK,IAAI,EACvC,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,SAAW,KAAK,SAAS,KAAK,IAAI,CACzC,CAEA,mBAA0B,CACxB,eAAiB,KAAK,SAAS,CAAE,UAAW,GAAO,UAAW,EAAM,CAAM,EAAG,CAAC,CAChF,CAEA,mBAAmB,EAAoB,CACrC,GAAM,CAAE,iBAAkB,KAAK,MAC3B,EAAU,eAAiB,GAAiB,EAAU,gBAAkB,GAC1E,EAAc,6BAA+B,CAAE,KAAK,YAAY,CAAG,CAAC,CAExE,CAEA,aAAa,EAA+B,CAC1C,GAAM,CAAE,gBAAiB,KAAK,MAC9B,KAAK,SAAS,CAAE,UAAW,EAAK,CAAiB,EAC7C,GAAc,EAAa,CAAK,CACtC,CAEA,aAAa,EAA+B,CAC1C,GAAM,CAAE,gBAAiB,KAAK,MAC9B,KAAK,SAAS,CAAE,UAAW,EAAM,CAAiB,EAC9C,GAAc,EAAa,CAAK,CACtC,CAEA,QAAQ,EAA+B,CACrC,GAAM,CAAE,WAAY,KAAK,MACzB,KAAK,SAAS,CAAE,UAAW,EAAK,CAAiB,EAC7C,GAAS,EAAQ,CAAK,CAC5B,CAEA,OAAO,EAA+B,CACpC,GAAM,CAAE,gBAAe,UAAW,KAAK,MACnC,IAAe,EAAc,QAAU,IAC3C,KAAK,SAAS,CAAE,UAAW,EAAM,CAAiB,EAC9C,GAAQ,EAAO,CAAK,CAC1B,CAEA,UAAoB,CAClB,GAAM,CAAE,eAAc,UAAS,iBAAkB,KAAK,MACtD,OAAO,EACF,EAAc,SAAW,EAAc,SAAS,EAChD,CAAC,GAAW,CAAC,CAAC,CACrB,CAEA,YAAsB,CACpB,GAAM,CAAE,aAAY,iBAAkB,KAAK,MAC3C,MAAO,CAAC,EAAE,GACJ,GAAiB,EAAc,WAAW,KAAM,GAAO,EAA+B,cAAgB,UAAU,EACxH,CAEA,eAAiC,CAC/B,GAAM,CAAE,eAAc,iBAAkB,KAAK,MACvC,CAAE,YAAW,aAAc,KAAK,MACtC,OACE,EAAC,EAAD,CACE,QAAQ,QACR,QAAS,EAAgB,EAAc,uBAAuB,EAAK,GAAgB,GACnF,UAAW,KAAK,SAAS,IAAM,GAAa,EAC7C,CAAA,CAEL,CAEA,SAAS,EAAuB,CAC9B,GAAM,CAAE,WAAU,iBAAkB,KAAK,MACzC,GAAI,EAAe,CACjB,IAAI,EAAe,EACf,GAAW,EAA+C,SAC5D,EAAgB,EAA+C,OAAO,OAExE,EAAc,IAAI,CAAY,CAChC,CACI,GAAU,EAAS,CAAM,CAC/B,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{isBic as e,isDate as t,isEmail as n,isISODate as r,isURL as i}from"../regexp.mjs";var a={t:(e,t)=>({"formValidators.minLength":`Must be at least ${t?.min} characters long`,"formValidators.maxLength":`Must be at most ${t?.max} characters long`,"formValidators.email":`Must be a valid email address`,"formValidators.required":`${t?.label||`Value`} is required`,"formValidators.value":`Value`,"formValidators.mustBeNumber":`Must be a number`,"formValidators.oneOf":`Must be one of the following values: ${t?.allowedValues}`,"formValidators.typeOf":`Must have type of ${t?.allowedTypes}`,"formValidators.multiEmail":`Must be a comma or semicolon separated list of valid email addresses`,"formValidators.date":`Must be a valid date`,"garages.errors.website":`Must be a valid URL`,"garages.errors.bic":`Must be a valid BIC`,"formValidators.minLetters":`Must contain at least ${t?.smart_count} letters`,"formValidators.minDigits":`Must contain at least ${t?.smart_count} digits`})[e]||e},o=class o{static{this.minLength=(e,t)=>n=>!n||n.length<e?{id:`minLength`,message:t||a.t(`formValidators.minLength`,{min:e})}:null}static{this.maxLength=(e,t)=>n=>n&&n.length>e?{id:`maxLength`,message:t||a.t(`formValidators.maxLength`,{max:e})}:null}static{this.email=e=>t=>t&&!n(t)?{id:`email`,message:e||a.t(`formValidators.email`)}:null}static{this.required=e=>{function t(t,n){return!t&&t!==0?{id:`required`,message:e||a.t(`formValidators.required`,{label:n||a.t(`formValidators.value`)})}:null}return t.validatorId=`required`,t}}static{this.mustBeNumber=e=>t=>t&&Number.isNaN(+t)?{id:`mustBeNumber`,message:e||a.t(`formValidators.mustBeNumber`)}:null}static{this.oneOf=(e,t)=>n=>n&&!e.includes(n)?{id:`oneOf`,message:t||a.t(`formValidators.oneOf`,{allowedValues:e})}:null}static{this.typeOf=(e,t)=>n=>{if(Array.isArray(e)){for(let t=0;t<e.length;t+=1)if(typeof n===e[t])return null}else if(typeof n===e)return null;return{id:`typeOf`,message:t||`Must have type of ${e}`}}}static{this.multiEmail=e=>t=>{if(t){let r=t.replace(/ /g,``).replace(/,/g,`;`).split(`;`);for(let t=0;t<r.length;t+=1)if(!n(r[t]))return{id:`multiEmail`,message:e||a.t(`formValidators.multiEmail`)}}return null}}static{this.date=e=>n=>n&&!t(n)&&!r(n)?{id:`date`,message:e||a.t(`formValidators.date`)}:null}static{this.dateObject=e=>t=>t&&!t.isValid?{id:`date`,message:e||a.t(`formValidators.date`)}:null}static{this.website=e=>t=>t&&!i(t)?{id:`website`,message:e||a.t(`garages.errors.website`)}:null}static{this.bic=t=>n=>n&&!e(n)?{id:`bic`,message:t||a.t(`garages.errors.bic`)}:null}static{this.minLetters=(e,t)=>n=>n&&n.replace(/[^a-zöäüA-ZÖÄÜß]/g,``).length<e?{id:`minLetters`,message:t||a.t(`formValidators.minLetters`,{smart_count:e})}:null}static{this.minDigits=(e,t)=>n=>n&&n.replace(/[\D]/g,``).length<e?{id:`minDigits`,message:t||a.t(`formValidators.minDigits`,{smart_count:e})}:null}static{this.password=e=>t=>{let n=o.minLength(8)(t)||o.minLetters(1)(t)||o.minDigits(1)(t);return n?e?{id:`password`,message:e}:n:null}}};export{o as default};
|
|
2
|
+
//# sourceMappingURL=validators.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.mjs","names":[],"sources":["../../../../package/services/formValidation/validators.ts"],"sourcesContent":["import { isEmail, isDate, isISODate, isURL, isBic } from 'services/regexp';\nimport type { ValidatorFunction, ValidationError } from './types';\n\nconst polyglot = {\n t: (key: string, options?: Record<string, unknown>): string => {\n const translations: Record<string, string> = {\n 'formValidators.minLength': `Must be at least ${options?.min} characters long`,\n 'formValidators.maxLength': `Must be at most ${options?.max} characters long`,\n 'formValidators.email': 'Must be a valid email address',\n 'formValidators.required': `${options?.label || 'Value'} is required`,\n 'formValidators.value': 'Value',\n 'formValidators.mustBeNumber': 'Must be a number',\n 'formValidators.oneOf': `Must be one of the following values: ${options?.allowedValues}`,\n 'formValidators.typeOf': `Must have type of ${options?.allowedTypes}`,\n 'formValidators.multiEmail': 'Must be a comma or semicolon separated list of valid email addresses',\n 'formValidators.date': 'Must be a valid date',\n 'garages.errors.website': 'Must be a valid URL',\n 'garages.errors.bic': 'Must be a valid BIC',\n 'formValidators.minLetters': `Must contain at least ${options?.smart_count} letters`,\n 'formValidators.minDigits': `Must contain at least ${options?.smart_count} digits`,\n };\n return translations[key] || key;\n },\n};\n\nexport default class Validators {\n static minLength = (min: number, errorMsg?: string): ValidatorFunction => (value) => {\n if (!value || (value as string).length < min) return { id: 'minLength', message: errorMsg || polyglot.t('formValidators.minLength', { min }) };\n return null;\n };\n\n static maxLength = (max: number, errorMsg?: string): ValidatorFunction => (value) => {\n if (value && (value as string).length > max) return { id: 'maxLength', message: errorMsg || polyglot.t('formValidators.maxLength', { max }) };\n return null;\n };\n\n static email = (errorMsg?: string): ValidatorFunction => (value) => {\n if (value && !isEmail(value as string)) return { id: 'email', message: errorMsg || polyglot.t('formValidators.email') };\n return null;\n };\n\n static required = (errorMsg?: string): ValidatorFunction & { validatorId: string } => {\n function required(value: unknown, label?: string): ValidationError | null {\n if (!value && value !== 0) return { id: 'required', message: errorMsg || polyglot.t('formValidators.required', { label: label || polyglot.t('formValidators.value') }) };\n return null;\n }\n required.validatorId = 'required';\n return required;\n };\n\n static mustBeNumber = (errorMsg?: string): ValidatorFunction => (value) => {\n if (value && Number.isNaN(+(value as string))) return { id: 'mustBeNumber', message: errorMsg || polyglot.t('formValidators.mustBeNumber') };\n return null;\n };\n\n static oneOf = (allowedValues: unknown[], errorMsg?: string): ValidatorFunction => (value) => {\n if (value && !allowedValues.includes(value)) return { id: 'oneOf', message: errorMsg || polyglot.t('formValidators.oneOf', { allowedValues }) };\n return null;\n };\n\n static typeOf = (allowedTypes: string | string[], errorMsg?: string): ValidatorFunction => (value) => {\n if (Array.isArray(allowedTypes)) {\n for (let i = 0; i < allowedTypes.length; i += 1) {\n if (typeof value === allowedTypes[i]) return null;\n }\n } else if (typeof value === allowedTypes) {\n return null;\n }\n return { id: 'typeOf', message: errorMsg || `Must have type of ${allowedTypes}` };\n };\n\n static multiEmail = (errorMessage?: string): ValidatorFunction => (value) => {\n if (value) {\n const emailParts = (value as string).replace(/ /g, '').replace(/,/g, ';').split(';');\n for (let i = 0; i < emailParts.length; i += 1) {\n if (!isEmail(emailParts[i])) {\n return { id: 'multiEmail', message: errorMessage || polyglot.t('formValidators.multiEmail') };\n }\n }\n }\n return null;\n };\n\n static date = (errorMessage?: string): ValidatorFunction => (value) => {\n if (value && (!isDate(value as string) && !isISODate(value as string))) return { id: 'date', message: errorMessage || polyglot.t('formValidators.date') };\n return null;\n };\n\n static dateObject = (errorMessage?: string): ValidatorFunction => (value) => {\n if (value && !(value as { isValid: boolean }).isValid) return { id: 'date', message: errorMessage || polyglot.t('formValidators.date') };\n return null;\n };\n\n static website = (errorMsg?: string): ValidatorFunction => (value) => {\n if (value && !isURL(value as string)) return { id: 'website', message: errorMsg || polyglot.t('garages.errors.website') };\n return null;\n };\n\n static bic = (errorMsg?: string): ValidatorFunction => (value) => {\n if (value && !isBic(value as string)) return { id: 'bic', message: errorMsg || polyglot.t('garages.errors.bic') };\n return null;\n };\n\n static minLetters = (min: number, errorMsg?: string): ValidatorFunction => (value) => {\n if (value && (value as string).replace(/[^a-zöäüA-ZÖÄÜß]/g, '').length < min) return { id: 'minLetters', message: errorMsg || polyglot.t('formValidators.minLetters', { smart_count: min }) };\n return null;\n };\n\n static minDigits = (min: number, errorMsg?: string): ValidatorFunction => (value) => {\n if (value && (value as string).replace(/[\\D]/g, '').length < min) return { id: 'minDigits', message: errorMsg || polyglot.t('formValidators.minDigits', { smart_count: min }) };\n return null;\n };\n\n static password = (errorMsg?: string): ValidatorFunction => (value) => {\n const result = Validators.minLength(8)(value)\n || Validators.minLetters(1)(value)\n || Validators.minDigits(1)(value);\n if (result) return errorMsg ? { id: 'password', message: errorMsg } : result;\n return null;\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=`https://api.klipy.com/v2`,t=class{constructor(e){this.key=e}async search(t,n={}){let r=new URLSearchParams({q:t,key:this.key});return n.limit!=null&&r.set(`limit`,String(n.limit)),n.contentfilter!=null&&r.set(`contentfilter`,n.contentfilter),n.pos!=null&&r.set(`pos`,n.pos),(await fetch(`${e}/search?${r}`)).json()}async searchSuggestions(t){let n=new URLSearchParams({q:t,key:this.key});return(await fetch(`${e}/search_suggestions?${n}`)).json()}registerShare(t,n){let r=new URLSearchParams({id:n,q:t,key:this.key});fetch(`${e}/registershare?${r}`).catch(()=>null)}};export{t as default};
|
|
2
|
+
//# sourceMappingURL=klipy.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"klipy.mjs","names":[],"sources":["../../../package/services/klipy.ts"],"sourcesContent":["const BASE_URL = 'https://api.klipy.com/v2';\n\nexport interface KlipyMediaFormat {\n url: string;\n dims: [number, number];\n size: number;\n}\n\nexport interface KlipyResult {\n id: string;\n title: string;\n media_formats: {\n gif: KlipyMediaFormat;\n tinygif: KlipyMediaFormat;\n mediumgif: KlipyMediaFormat;\n mp4: KlipyMediaFormat;\n tinymp4: KlipyMediaFormat;\n };\n tags: string[];\n url: string;\n}\n\ninterface SearchOptions {\n limit?: number;\n contentfilter?: 'off' | 'low' | 'medium' | 'high';\n pos?: string;\n}\n\nexport default class KlipyService {\n private key: string;\n\n constructor(key: string) {\n this.key = key;\n }\n\n async search(\n query: string,\n options: SearchOptions = {},\n ): Promise<{ results: KlipyResult[]; next: string }> {\n const params = new URLSearchParams({ q: query, key: this.key });\n if (options.limit != null) params.set('limit', String(options.limit));\n if (options.contentfilter != null) params.set('contentfilter', options.contentfilter);\n if (options.pos != null) params.set('pos', options.pos);\n\n const res = await fetch(`${BASE_URL}/search?${params}`);\n return res.json();\n }\n\n async searchSuggestions(query: string): Promise<{ results: string[] }> {\n const params = new URLSearchParams({ q: query, key: this.key });\n const res = await fetch(`${BASE_URL}/search_suggestions?${params}`);\n return res.json();\n }\n\n registerShare(query: string, id: string): void {\n const params = new URLSearchParams({ id, q: query, key: this.key });\n fetch(`${BASE_URL}/registershare?${params}`).catch(() => null);\n }\n}\n"],"mappings":"AAAA,IAAM,EAAW,2BA4BI,EAArB,KAAkC,CAGhC,YAAY,EAAa,CACvB,KAAK,IAAM,CACb,CAEA,MAAM,OACJ,EACA,EAAyB,CAAC,EACyB,CACnD,IAAM,EAAS,IAAI,gBAAgB,CAAE,EAAG,EAAO,IAAK,KAAK,GAAI,CAAC,EAM9D,OALI,EAAQ,OAAS,MAAM,EAAO,IAAI,QAAS,OAAO,EAAQ,KAAK,CAAC,EAChE,EAAQ,eAAiB,MAAM,EAAO,IAAI,gBAAiB,EAAQ,aAAa,EAChF,EAAQ,KAAO,MAAM,EAAO,IAAI,MAAO,EAAQ,GAAG,GAG/C,MADW,MAAM,GAAG,EAAS,UAAU,GAAQ,GAC3C,KAAK,CAClB,CAEA,MAAM,kBAAkB,EAA+C,CACrE,IAAM,EAAS,IAAI,gBAAgB,CAAE,EAAG,EAAO,IAAK,KAAK,GAAI,CAAC,EAE9D,OAAO,MADW,MAAM,GAAG,EAAS,sBAAsB,GAAQ,GACvD,KAAK,CAClB,CAEA,cAAc,EAAe,EAAkB,CAC7C,IAAM,EAAS,IAAI,gBAAgB,CAAE,KAAI,EAAG,EAAO,IAAK,KAAK,GAAI,CAAC,EAClE,MAAM,GAAG,EAAS,iBAAiB,GAAQ,EAAE,UAAY,IAAI,CAC/D,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=[`de_AT`,`de_CH`,`de_DE`,`en_US`,`en_GB`,`de`,`en`],t=`en_US`,n=()=>{let n=navigator.languages[0]?.replace(`-`,`_`)||t;return e.includes(n)?n===`en_GB`||n===`en`?`en_US`:n===`de`?`de_DE`:n:t},r=e=>{switch(e){case`en_US`:case`en_GB`:return`en`;case`de_DE`:case`de_CH`:case`de_AT`:return`de`;default:return`de`}},i=n();async function a(e){i=e}function o(e=`_`){return i.replace(`_`,e)}export{o as getLocale,r as mapLocale,a as setLocale};
|
|
2
|
+
//# sourceMappingURL=localization.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localization.mjs","names":[],"sources":["../../../package/services/localization.ts"],"sourcesContent":["// import { Settings } from 'luxon';\n// import Polyglot from 'node-polyglot';\n\nconst supportedLocales: string[] = ['de_AT', 'de_CH', 'de_DE', 'en_US', 'en_GB', 'de', 'en'];\n\nconst defaultLocale = 'en_US';\n\nconst getCurrentLocale = (): string => {\n const locale = navigator.languages[0]?.replace('-', '_') || defaultLocale;\n\n if (!supportedLocales.includes(locale)) return defaultLocale;\n\n if (locale === 'en_GB' || locale === 'en') return 'en_US'; // Change GB to US. Alternatively, add GB File\n if (locale === 'de') return 'de_DE';\n\n return locale;\n};\n\nexport const mapLocale = (locale: string): string => {\n switch (locale) {\n case 'en_US':\n case 'en_GB':\n return 'en';\n case 'de_DE':\n case 'de_CH':\n case 'de_AT':\n return 'de';\n default:\n return 'de';\n }\n};\n\n// const getPolyglot = async (locale: string): Promise<Polyglot> => {\n// let phrases: object = {};\n// let extendPhrases: object = {};\n// const { default: impPhrasesLocale } = await import(`../locales/${locale || defaultLocale}.json`);\n// if ((locale || '').startsWith('de')) {\n// const { default: impPhrases } = await import('locales/de_DE.json');\n// phrases = impPhrases;\n// extendPhrases = impPhrasesLocale;\n// } else {\n// phrases = impPhrasesLocale;\n// }\n// const shortLocale: string = mapLocale(locale);\n// Settings.defaultLocale = shortLocale;\n\n// const polyglot: Polyglot = new Polyglot({\n// phrases: JSON.parse(JSON.stringify(phrases)),\n// locale: shortLocale,\n// });\n\n// polyglot.extend(JSON.parse(JSON.stringify(extendPhrases)));\n// return polyglot;\n// };\n\nlet currentLocale: string = getCurrentLocale();\n// let polyglot: Polyglot = await getPolyglot(currentLocale);\n\n// export default polyglot;\n\nexport async function setLocale(locale: string): Promise<void> {\n currentLocale = locale;\n // polyglot = await getPolyglot(locale);\n}\n\nexport function getLocale(delimiter = '_'): string {\n return currentLocale.replace('_', delimiter);\n}\n"],"mappings":"AAGA,IAAM,EAA6B,CAAC,QAAS,QAAS,QAAS,QAAS,QAAS,KAAM,IAAI,EAErF,EAAgB,QAEhB,MAAiC,CACrC,IAAM,EAAS,UAAU,UAAU,IAAI,QAAQ,IAAK,GAAG,GAAK,EAO5D,OALK,EAAiB,SAAS,CAAM,EAEjC,IAAW,SAAW,IAAW,KAAa,QAC9C,IAAW,KAAa,QAErB,EALwC,CAMjD,EAEa,EAAa,GAA2B,CACnD,OAAQ,EAAR,CACE,IAAK,QACL,IAAK,QACH,MAAO,KACT,IAAK,QACL,IAAK,QACL,IAAK,QACH,MAAO,KACT,QACE,MAAO,IACX,CACF,EAyBI,EAAwB,EAAiB,EAK7C,eAAsB,EAAU,EAA+B,CAC7D,EAAgB,CAElB,CAEA,SAAgB,EAAU,EAAY,IAAa,CACjD,OAAO,EAAc,QAAQ,IAAK,CAAS,CAC7C"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){return/^[0-9]+$/.test(e)}function t(e){return/^[0-9]{2}.[0-9]{2}.[0-9]{4}$/.test(e)}function n(e){return/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$/.test(e)}function r(e){return/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-ZöäüÜÖÄß\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)}function i(e){return/^[A-Z]{6}[A-Z\d]{2}([A-Z\d]{3})?$/.test(e)}function a(e){return/[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,63}(\/[-a-zA-Z0-9@:%_+.~#?&//=]*)?$/.test(e)}function o(e){return/^[\w!@#$%^&*?±§~`'"/\\[\]{}\-,.();:><+=|öäüÖÄÜß €μ]{8,}$/.test(e)}function s(e){return/^(?=.*[a-zöäüA-ZÖÄÜß])/.test(e)}function c(e){return/^(?=.*\d)/.test(e)}function l(e){return o(e)&&s(e)&&c(e)}export{o as hasEightPasswordChars,c as hasOnePasswordDigit,s as hasOnePasswordLetter,i as isBic,t as isDate,r as isEmail,n as isISODate,e as isNumber,l as isPassword,a as isURL};
|
|
2
|
+
//# sourceMappingURL=regexp.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regexp.mjs","names":[],"sources":["../../../package/services/regexp.ts"],"sourcesContent":["export function isNumber(string: string): boolean {\n return /^[0-9]+$/.test(string);\n}\n\nexport function isDate(string: string): boolean {\n return /^[0-9]{2}.[0-9]{2}.[0-9]{4}$/.test(string);\n}\n\nexport function isISODate(string: string): boolean {\n return /^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$/.test(string);\n}\n\nexport function isEmail(string: string): boolean {\n return /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-ZöäüÜÖÄß\\-0-9]+\\.)+[a-zA-Z]{2,}))$/.test(string);\n}\n\nexport function isBic(string: string): boolean {\n return /^[A-Z]{6}[A-Z\\d]{2}([A-Z\\d]{3})?$/.test(string);\n}\n\nexport function isURL(string: string): boolean {\n return /[-a-zA-Z0-9@:%._+~#=]{2,256}\\.[a-z]{2,63}(\\/[-a-zA-Z0-9@:%_+.~#?&//=]*)?$/.test(string);\n}\n\nexport function hasEightPasswordChars(string: string): boolean {\n return /^[\\w!@#$%^&*?±§~`'\"/\\\\[\\]{}\\-,.();:><+=|öäüÖÄÜß €μ]{8,}$/.test(string);\n}\n\nexport function hasOnePasswordLetter(string: string): boolean {\n return /^(?=.*[a-zöäüA-ZÖÄÜß])/.test(string);\n}\n\nexport function hasOnePasswordDigit(string: string): boolean {\n return /^(?=.*\\d)/.test(string);\n}\n\nexport function isPassword(string: string): boolean {\n return hasEightPasswordChars(string) && hasOnePasswordLetter(string) && hasOnePasswordDigit(string);\n}\n"],"mappings":"AAAA,SAAgB,EAAS,EAAyB,CAChD,MAAO,WAAW,KAAK,CAAM,CAC/B,CAEA,SAAgB,EAAO,EAAyB,CAC9C,MAAO,+BAA+B,KAAK,CAAM,CACnD,CAEA,SAAgB,EAAU,EAAyB,CACjD,MAAO,oEAAoE,KAAK,CAAM,CACxF,CAEA,SAAgB,EAAQ,EAAyB,CAC/C,MAAO,+JAA+J,KAAK,CAAM,CACnL,CAEA,SAAgB,EAAM,EAAyB,CAC7C,MAAO,oCAAoC,KAAK,CAAM,CACxD,CAEA,SAAgB,EAAM,EAAyB,CAC7C,MAAO,4EAA4E,KAAK,CAAM,CAChG,CAEA,SAAgB,EAAsB,EAAyB,CAC7D,MAAO,2DAA2D,KAAK,CAAM,CAC/E,CAEA,SAAgB,EAAqB,EAAyB,CAC5D,MAAO,yBAAyB,KAAK,CAAM,CAC7C,CAEA,SAAgB,EAAoB,EAAyB,CAC3D,MAAO,YAAY,KAAK,CAAM,CAChC,CAEA,SAAgB,EAAW,EAAyB,CAClD,OAAO,EAAsB,CAAM,GAAK,EAAqB,CAAM,GAAK,EAAoB,CAAM,CACpG"}
|