@donotdev/crud 0.0.8 → 0.0.10
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/CrudService.d.ts +30 -60
- package/dist/CrudService.d.ts.map +1 -1
- package/dist/CrudService.js +1 -1
- package/dist/CrudStore.d.ts +1 -94
- package/dist/CrudStore.d.ts.map +1 -1
- package/dist/CrudStore.js +1 -1
- package/dist/FieldRegistry.js +1 -1
- package/dist/adapters/FirestoreAdapter.d.ts +3 -1
- package/dist/adapters/FirestoreAdapter.d.ts.map +1 -1
- package/dist/adapters/FirestoreAdapter.js +1 -1
- package/dist/adapters/FunctionsAdapter.d.ts +8 -1
- package/dist/adapters/FunctionsAdapter.d.ts.map +1 -1
- package/dist/adapters/FunctionsAdapter.js +1 -1
- package/dist/adapters/index.js +1 -1
- package/dist/builtinFieldTypes.d.ts +17 -4
- package/dist/builtinFieldTypes.d.ts.map +1 -1
- package/dist/builtinFieldTypes.js +1 -1
- package/dist/components/CrudButton.js +1 -1
- package/dist/components/DisplayFieldRenderer.d.ts +2 -0
- package/dist/components/DisplayFieldRenderer.d.ts.map +1 -1
- package/dist/components/DisplayFieldRenderer.js +1 -1
- package/dist/components/EntityDisplayRenderer.d.ts +3 -3
- package/dist/components/EntityDisplayRenderer.d.ts.map +1 -1
- package/dist/components/EntityDisplayRenderer.js +1 -1
- package/dist/components/EntityFilters.d.ts +61 -0
- package/dist/components/EntityFilters.d.ts.map +1 -0
- package/dist/components/EntityFilters.js +1 -0
- package/dist/components/EntityFormRenderer.d.ts +22 -1
- package/dist/components/EntityFormRenderer.d.ts.map +1 -1
- package/dist/components/EntityFormRenderer.js +1 -1
- package/dist/components/FormFieldRenderer.d.ts.map +1 -1
- package/dist/components/FormFieldRenderer.js +1 -1
- package/dist/components/FormLayout.js +1 -1
- package/dist/components/controlled/complex/ControlledAddressField.d.ts +3 -0
- package/dist/components/controlled/complex/ControlledAddressField.d.ts.map +1 -1
- package/dist/components/controlled/complex/ControlledAddressField.js +1 -1
- package/dist/components/controlled/complex/ControlledDateField.d.ts +3 -0
- package/dist/components/controlled/complex/ControlledDateField.d.ts.map +1 -1
- package/dist/components/controlled/complex/ControlledDateField.js +1 -1
- package/dist/components/controlled/complex/ControlledGeoPointField.d.ts +3 -0
- package/dist/components/controlled/complex/ControlledGeoPointField.d.ts.map +1 -1
- package/dist/components/controlled/complex/ControlledGeoPointField.js +1 -1
- package/dist/components/controlled/complex/ControlledMapField.d.ts +3 -0
- package/dist/components/controlled/complex/ControlledMapField.d.ts.map +1 -1
- package/dist/components/controlled/complex/ControlledMapField.js +1 -1
- package/dist/components/controlled/complex/ControlledMultiInputField.d.ts +3 -0
- package/dist/components/controlled/complex/ControlledMultiInputField.d.ts.map +1 -1
- package/dist/components/controlled/complex/ControlledMultiInputField.js +1 -1
- package/dist/components/controlled/complex/ControlledRichTextField.d.ts +3 -0
- package/dist/components/controlled/complex/ControlledRichTextField.d.ts.map +1 -1
- package/dist/components/controlled/complex/ControlledRichTextField.js +1 -1
- package/dist/components/controlled/complex/ControlledTimestampField.d.ts +3 -0
- package/dist/components/controlled/complex/ControlledTimestampField.d.ts.map +1 -1
- package/dist/components/controlled/complex/ControlledTimestampField.js +1 -1
- package/dist/components/controlled/complex/index.d.ts.map +1 -1
- package/dist/components/controlled/complex/index.js +1 -1
- package/dist/components/controlled/file/ControlledDocumentField.d.ts +3 -0
- package/dist/components/controlled/file/ControlledDocumentField.d.ts.map +1 -1
- package/dist/components/controlled/file/ControlledDocumentField.js +1 -1
- package/dist/components/controlled/file/ControlledFileField.d.ts +3 -0
- package/dist/components/controlled/file/ControlledFileField.d.ts.map +1 -1
- package/dist/components/controlled/file/ControlledFileField.js +1 -1
- package/dist/components/controlled/file/ControlledImageField.d.ts +3 -0
- package/dist/components/controlled/file/ControlledImageField.d.ts.map +1 -1
- package/dist/components/controlled/file/ControlledImageField.js +1 -1
- package/dist/components/controlled/file/ControlledMultiDocumentField.d.ts +3 -0
- package/dist/components/controlled/file/ControlledMultiDocumentField.d.ts.map +1 -1
- package/dist/components/controlled/file/ControlledMultiDocumentField.js +1 -1
- package/dist/components/controlled/file/ControlledMultiFileField.d.ts +3 -0
- package/dist/components/controlled/file/ControlledMultiFileField.d.ts.map +1 -1
- package/dist/components/controlled/file/ControlledMultiFileField.js +1 -1
- package/dist/components/controlled/file/ControlledMultiImageField.d.ts +3 -0
- package/dist/components/controlled/file/ControlledMultiImageField.d.ts.map +1 -1
- package/dist/components/controlled/file/ControlledMultiImageField.js +1 -1
- package/dist/components/controlled/file/index.d.ts.map +1 -1
- package/dist/components/controlled/file/index.js +1 -1
- package/dist/components/controlled/index.d.ts +4 -0
- package/dist/components/controlled/index.d.ts.map +1 -1
- package/dist/components/controlled/index.js +1 -1
- package/dist/components/controlled/input/ControlledCheckboxField.d.ts +3 -0
- package/dist/components/controlled/input/ControlledCheckboxField.d.ts.map +1 -1
- package/dist/components/controlled/input/ControlledCheckboxField.js +1 -1
- package/dist/components/controlled/input/ControlledCurrencyField.d.ts +8 -0
- package/dist/components/controlled/input/ControlledCurrencyField.d.ts.map +1 -0
- package/dist/components/controlled/input/ControlledCurrencyField.js +1 -0
- package/dist/components/controlled/input/ControlledGdprConsentField.d.ts +8 -0
- package/dist/components/controlled/input/ControlledGdprConsentField.d.ts.map +1 -0
- package/dist/components/controlled/input/ControlledGdprConsentField.js +1 -0
- package/dist/components/controlled/input/ControlledNumberField.d.ts +3 -0
- package/dist/components/controlled/input/ControlledNumberField.d.ts.map +1 -1
- package/dist/components/controlled/input/ControlledNumberField.js +1 -1
- package/dist/components/controlled/input/ControlledPasswordField.d.ts +3 -0
- package/dist/components/controlled/input/ControlledPasswordField.d.ts.map +1 -1
- package/dist/components/controlled/input/ControlledPasswordField.js +1 -1
- package/dist/components/controlled/input/ControlledPhoneField.d.ts +3 -0
- package/dist/components/controlled/input/ControlledPhoneField.d.ts.map +1 -1
- package/dist/components/controlled/input/ControlledPhoneField.js +1 -1
- package/dist/components/controlled/input/ControlledPriceField.d.ts +8 -0
- package/dist/components/controlled/input/ControlledPriceField.d.ts.map +1 -0
- package/dist/components/controlled/input/ControlledPriceField.js +1 -0
- package/dist/components/controlled/input/ControlledRangeField.d.ts +3 -0
- package/dist/components/controlled/input/ControlledRangeField.d.ts.map +1 -1
- package/dist/components/controlled/input/ControlledRangeField.js +1 -1
- package/dist/components/controlled/input/ControlledRatingField.d.ts +8 -0
- package/dist/components/controlled/input/ControlledRatingField.d.ts.map +1 -0
- package/dist/components/controlled/input/ControlledRatingField.js +1 -0
- package/dist/components/controlled/input/ControlledSwitchField.d.ts +3 -0
- package/dist/components/controlled/input/ControlledSwitchField.d.ts.map +1 -1
- package/dist/components/controlled/input/ControlledSwitchField.js +1 -1
- package/dist/components/controlled/input/ControlledTextField.d.ts +3 -0
- package/dist/components/controlled/input/ControlledTextField.d.ts.map +1 -1
- package/dist/components/controlled/input/ControlledTextField.js +1 -1
- package/dist/components/controlled/input/ControlledTextareaField.d.ts +3 -0
- package/dist/components/controlled/input/ControlledTextareaField.d.ts.map +1 -1
- package/dist/components/controlled/input/ControlledTextareaField.js +1 -1
- package/dist/components/controlled/input/index.d.ts +4 -0
- package/dist/components/controlled/input/index.d.ts.map +1 -1
- package/dist/components/controlled/input/index.js +1 -1
- package/dist/components/controlled/select/ControlledComboboxField.d.ts +4 -0
- package/dist/components/controlled/select/ControlledComboboxField.d.ts.map +1 -1
- package/dist/components/controlled/select/ControlledComboboxField.js +1 -1
- package/dist/components/controlled/select/ControlledDropdownField.d.ts +4 -0
- package/dist/components/controlled/select/ControlledDropdownField.d.ts.map +1 -1
- package/dist/components/controlled/select/ControlledDropdownField.js +1 -1
- package/dist/components/controlled/select/ControlledMultiDropdownField.d.ts +4 -0
- package/dist/components/controlled/select/ControlledMultiDropdownField.d.ts.map +1 -1
- package/dist/components/controlled/select/ControlledMultiDropdownField.js +1 -1
- package/dist/components/controlled/select/ControlledRadioField.d.ts +4 -0
- package/dist/components/controlled/select/ControlledRadioField.d.ts.map +1 -1
- package/dist/components/controlled/select/ControlledRadioField.js +1 -1
- package/dist/components/controlled/select/ControlledYearField.d.ts +9 -0
- package/dist/components/controlled/select/ControlledYearField.d.ts.map +1 -0
- package/dist/components/controlled/select/ControlledYearField.js +1 -0
- package/dist/components/controlled/select/index.d.ts +1 -0
- package/dist/components/controlled/select/index.d.ts.map +1 -1
- package/dist/components/controlled/select/index.js +1 -1
- package/dist/components/controlled/types.d.ts +6 -0
- package/dist/components/controlled/types.d.ts.map +1 -1
- package/dist/components/controlled/types.js +1 -1
- package/dist/components/fields/display/AvatarFieldDisplay.d.ts +23 -0
- package/dist/components/fields/display/AvatarFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/AvatarFieldDisplay.js +1 -0
- package/dist/components/fields/display/BadgeFieldDisplay.d.ts +21 -0
- package/dist/components/fields/display/BadgeFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/BadgeFieldDisplay.js +1 -0
- package/dist/components/fields/display/ButtonFieldDisplay.d.ts +29 -0
- package/dist/components/fields/display/ButtonFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/ButtonFieldDisplay.js +1 -0
- package/dist/components/fields/display/CheckboxFieldDisplay.d.ts +21 -0
- package/dist/components/fields/display/CheckboxFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/CheckboxFieldDisplay.js +1 -0
- package/dist/components/fields/display/DateFieldDisplay.d.ts +24 -0
- package/dist/components/fields/display/DateFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/DateFieldDisplay.js +1 -0
- package/dist/components/fields/display/DropdownDisplay.d.ts +21 -0
- package/dist/components/fields/display/DropdownDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/DropdownDisplay.js +1 -0
- package/dist/components/fields/display/FileFieldDisplay.d.ts +21 -0
- package/dist/components/fields/display/FileFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/FileFieldDisplay.js +1 -0
- package/dist/components/fields/display/GeoPointFieldDisplay.d.ts +25 -0
- package/dist/components/fields/display/GeoPointFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/GeoPointFieldDisplay.js +1 -0
- package/dist/components/fields/display/HiddenFieldDisplay.d.ts +30 -0
- package/dist/components/fields/display/HiddenFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/HiddenFieldDisplay.js +1 -0
- package/dist/components/fields/display/ImageFieldDisplay.d.ts +24 -0
- package/dist/components/fields/display/ImageFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/ImageFieldDisplay.js +1 -0
- package/dist/components/fields/display/LinkFieldDisplay.d.ts +22 -0
- package/dist/components/fields/display/LinkFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/LinkFieldDisplay.js +1 -0
- package/dist/components/fields/display/MapFieldDisplay.d.ts +25 -0
- package/dist/components/fields/display/MapFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/MapFieldDisplay.js +1 -0
- package/dist/components/fields/display/MultiDropdownDisplay.d.ts +22 -0
- package/dist/components/fields/display/MultiDropdownDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/MultiDropdownDisplay.js +1 -0
- package/dist/components/fields/display/MultiInputTextFieldDisplay.d.ts +22 -0
- package/dist/components/fields/display/MultiInputTextFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/MultiInputTextFieldDisplay.js +1 -0
- package/dist/components/fields/display/NumberFieldDisplay.d.ts +24 -0
- package/dist/components/fields/display/NumberFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/NumberFieldDisplay.js +1 -0
- package/dist/components/fields/display/PasswordFieldDisplay.d.ts +24 -0
- package/dist/components/fields/display/PasswordFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/PasswordFieldDisplay.js +1 -0
- package/dist/components/fields/display/PhoneNumberDisplay.d.ts +22 -0
- package/dist/components/fields/display/PhoneNumberDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/PhoneNumberDisplay.js +1 -0
- package/dist/components/fields/display/RadioFieldDisplay.d.ts +22 -0
- package/dist/components/fields/display/RadioFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/RadioFieldDisplay.js +1 -0
- package/dist/components/fields/display/RangeFieldDisplay.d.ts +22 -0
- package/dist/components/fields/display/RangeFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/RangeFieldDisplay.js +1 -0
- package/dist/components/fields/display/ReferenceFieldDisplay.d.ts +22 -0
- package/dist/components/fields/display/ReferenceFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/ReferenceFieldDisplay.js +1 -0
- package/dist/components/fields/display/RichTextDisplay.d.ts +25 -0
- package/dist/components/fields/display/RichTextDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/RichTextDisplay.js +61 -0
- package/dist/components/fields/display/TextAreaDisplay.d.ts +22 -0
- package/dist/components/fields/display/TextAreaDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/TextAreaDisplay.js +1 -0
- package/dist/components/fields/display/TextFieldDisplay.d.ts +42 -0
- package/dist/components/fields/display/TextFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/TextFieldDisplay.js +1 -0
- package/dist/components/fields/display/TimestampFieldDisplay.d.ts +22 -0
- package/dist/components/fields/display/TimestampFieldDisplay.d.ts.map +1 -0
- package/dist/components/fields/display/TimestampFieldDisplay.js +1 -0
- package/dist/components/fields/display/index.d.ts +32 -0
- package/dist/components/fields/display/index.d.ts.map +1 -0
- package/dist/components/fields/display/index.js +1 -0
- package/dist/components/form/fields/AddressFieldComponent.js +1 -1
- package/dist/components/form/fields/AvatarFieldComponent.js +1 -1
- package/dist/components/form/fields/BadgeFieldComponent.js +1 -1
- package/dist/components/form/fields/ButtonFieldComponent.js +1 -1
- package/dist/components/form/fields/CheckboxFieldComponent.d.ts +3 -3
- package/dist/components/form/fields/CheckboxFieldComponent.d.ts.map +1 -1
- package/dist/components/form/fields/CheckboxFieldComponent.js +1 -1
- package/dist/components/form/fields/ComboboxComponent.d.ts +6 -0
- package/dist/components/form/fields/ComboboxComponent.d.ts.map +1 -1
- package/dist/components/form/fields/ComboboxComponent.js +1 -1
- package/dist/components/form/fields/CurrencyFieldComponent.js +1 -1
- package/dist/components/form/fields/DateFieldComponent.js +1 -1
- package/dist/components/form/fields/DocumentFieldComponent.d.ts.map +1 -1
- package/dist/components/form/fields/DocumentFieldComponent.js +1 -1
- package/dist/components/form/fields/DropdownComponent.js +1 -1
- package/dist/components/form/fields/FileFieldComponent.d.ts.map +1 -1
- package/dist/components/form/fields/FileFieldComponent.js +1 -1
- package/dist/components/form/fields/GdprConsentFieldComponent.d.ts +26 -0
- package/dist/components/form/fields/GdprConsentFieldComponent.d.ts.map +1 -0
- package/dist/components/form/fields/GdprConsentFieldComponent.js +1 -0
- package/dist/components/form/fields/GeoPointFieldComponent.js +1 -1
- package/dist/components/form/fields/HiddenFieldComponent.js +1 -1
- package/dist/components/form/fields/ImageFieldComponent.d.ts +3 -2
- package/dist/components/form/fields/ImageFieldComponent.d.ts.map +1 -1
- package/dist/components/form/fields/ImageFieldComponent.js +1 -1
- package/dist/components/form/fields/MapFieldComponent.js +1 -1
- package/dist/components/form/fields/MultiDropdownComponent.js +1 -1
- package/dist/components/form/fields/MultiInputTextFieldComponent.js +1 -1
- package/dist/components/form/fields/NumberFieldComponent.js +1 -1
- package/dist/components/form/fields/PasswordFieldComponent.js +1 -1
- package/dist/components/form/fields/PhoneNumberComponent.d.ts.map +1 -1
- package/dist/components/form/fields/PhoneNumberComponent.js +1 -1
- package/dist/components/form/fields/PriceFieldComponent.d.ts +34 -0
- package/dist/components/form/fields/PriceFieldComponent.d.ts.map +1 -0
- package/dist/components/form/fields/PriceFieldComponent.js +1 -0
- package/dist/components/form/fields/RadioFieldComponent.js +1 -1
- package/dist/components/form/fields/RangeFieldComponent.js +1 -1
- package/dist/components/form/fields/RatingFieldComponent.d.ts +37 -0
- package/dist/components/form/fields/RatingFieldComponent.d.ts.map +1 -0
- package/dist/components/form/fields/RatingFieldComponent.js +1 -0
- package/dist/components/form/fields/ReferenceFieldComponent.js +1 -1
- package/dist/components/form/fields/RichTextComponent.d.ts +2 -21
- package/dist/components/form/fields/RichTextComponent.d.ts.map +1 -1
- package/dist/components/form/fields/RichTextComponent.js +1 -1
- package/dist/components/form/fields/SwitchFieldComponent.js +1 -1
- package/dist/components/form/fields/TextAreaComponent.d.ts.map +1 -1
- package/dist/components/form/fields/TextAreaComponent.js +1 -1
- package/dist/components/form/fields/TextFieldComponent.js +1 -1
- package/dist/components/form/fields/TimestampFieldComponent.js +1 -1
- package/dist/components/form/fields/index.d.ts +7 -1
- package/dist/components/form/fields/index.d.ts.map +1 -1
- package/dist/components/form/fields/index.js +1 -1
- package/dist/components/form/fields/internal/TiptapEditor.d.ts +1 -1
- package/dist/components/form/fields/internal/TiptapEditor.d.ts.map +1 -1
- package/dist/components/form/fields/internal/TiptapEditor.js +2 -2
- package/dist/components/form/fields/types.d.ts +33 -0
- package/dist/components/form/fields/types.d.ts.map +1 -0
- package/dist/components/form/fields/types.js +0 -0
- package/dist/components/form/internal/ImageViewerDialog.d.ts +2 -1
- package/dist/components/form/internal/ImageViewerDialog.d.ts.map +1 -1
- package/dist/components/form/internal/ImageViewerDialog.js +1 -1
- package/dist/components/index.d.ts +4 -8
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/contexts/UploadContext.d.ts.map +1 -1
- package/dist/contexts/UploadContext.js +1 -1
- package/dist/contexts/index.js +1 -1
- package/dist/fieldTypeRegistry.d.ts +92 -0
- package/dist/fieldTypeRegistry.d.ts.map +1 -0
- package/dist/fieldTypeRegistry.js +1 -0
- package/dist/forms/hooks/index.js +1 -1
- package/dist/forms/hooks/useController.js +1 -1
- package/dist/forms/hooks/useEntityField.js +1 -1
- package/dist/forms/hooks/useEntityForm.d.ts.map +1 -1
- package/dist/forms/hooks/useEntityForm.js +1 -1
- package/dist/forms/index.d.ts +2 -2
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +1 -1
- package/dist/forms/types.d.ts +15 -0
- package/dist/forms/types.d.ts.map +1 -1
- package/dist/forms/utils/getFieldsForOperation.js +1 -1
- package/dist/forms/utils/index.d.ts +0 -2
- package/dist/forms/utils/index.d.ts.map +1 -1
- package/dist/forms/utils/index.js +1 -1
- package/dist/forms/utils/isFieldEditable.js +1 -1
- package/dist/forms/utils/translateFieldLabel.js +1 -1
- package/dist/forms/utils/validateEntity.js +1 -1
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/useEntityFavorites.d.ts +53 -0
- package/dist/hooks/useEntityFavorites.d.ts.map +1 -0
- package/dist/hooks/useEntityFavorites.js +1 -0
- package/dist/hooks/useFileUpload.d.ts.map +1 -1
- package/dist/hooks/useFileUpload.js +1 -1
- package/dist/hooks/useFormNavigationGuard.d.ts +34 -0
- package/dist/hooks/useFormNavigationGuard.d.ts.map +1 -0
- package/dist/hooks/useFormNavigationGuard.js +1 -0
- package/dist/hooks/useRelatedItems.d.ts +37 -0
- package/dist/hooks/useRelatedItems.d.ts.map +1 -0
- package/dist/hooks/useRelatedItems.js +1 -0
- package/dist/hooks/useUnsavedChangesWarning.d.ts +51 -0
- package/dist/hooks/useUnsavedChangesWarning.d.ts.map +1 -0
- package/dist/hooks/useUnsavedChangesWarning.js +1 -0
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/registerBuiltinFieldTypes.d.ts +6 -0
- package/dist/registerBuiltinFieldTypes.d.ts.map +1 -0
- package/dist/registerBuiltinFieldTypes.js +1 -0
- package/dist/stores/FormStore.d.ts +17 -0
- package/dist/stores/FormStore.d.ts.map +1 -1
- package/dist/stores/FormStore.js +1 -1
- package/dist/stores/UploadStore.js +1 -1
- package/dist/stores/index.d.ts +1 -1
- package/dist/stores/index.d.ts.map +1 -1
- package/dist/stores/index.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +202 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +0 -0
- package/dist/useBaseCrudList.d.ts +53 -0
- package/dist/useBaseCrudList.d.ts.map +1 -0
- package/dist/useBaseCrudList.js +1 -0
- package/dist/useCrud.d.ts +4 -8
- package/dist/useCrud.d.ts.map +1 -1
- package/dist/useCrud.js +1 -1
- package/dist/useCrudCardList.d.ts +10 -4
- package/dist/useCrudCardList.d.ts.map +1 -1
- package/dist/useCrudCardList.js +1 -1
- package/dist/useCrudList.d.ts +19 -5
- package/dist/useCrudList.d.ts.map +1 -1
- package/dist/useCrudList.js +1 -1
- package/dist/utils/collections.js +1 -1
- package/dist/utils/fileStorage.js +1 -1
- package/dist/utils/imageProcessing.js +1 -1
- package/dist/utils/imageStorage.js +1 -1
- package/dist/utils/imageUtils.js +1 -1
- package/dist/utils/mergeWithOptimistic.d.ts +5 -6
- package/dist/utils/mergeWithOptimistic.d.ts.map +1 -1
- package/dist/utils/mergeWithOptimistic.js +1 -1
- package/dist/utils/scopeUtils.d.ts +38 -0
- package/dist/utils/scopeUtils.d.ts.map +1 -0
- package/dist/utils/scopeUtils.js +1 -0
- package/dist/utils/uploadValidation.d.ts.map +1 -1
- package/dist/utils/uploadValidation.js +1 -1
- package/package.json +24 -17
- package/dist/components/EntityCardList.d.ts +0 -27
- package/dist/components/EntityCardList.d.ts.map +0 -1
- package/dist/components/EntityCardList.js +0 -1
- package/dist/components/EntityList.d.ts +0 -24
- package/dist/components/EntityList.d.ts.map +0 -1
- package/dist/components/EntityList.js +0 -1
- package/dist/forms/utils/optionHelpers.d.ts +0 -54
- package/dist/forms/utils/optionHelpers.d.ts.map +0 -1
- package/dist/forms/utils/optionHelpers.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useState as
|
|
1
|
+
"use client";import{useState as J,useCallback as w,useEffect as A,useRef as v,startTransition as q}from"react";import{handleError as C}from"@donotdev/core";import{useUploadContext as G}from"../contexts/UploadContext";import{useUploadStore as N}from"../stores/UploadStore";let P=0;function W(s){if(s){const u=s.split("/").pop()?.split("?")[0];if(u)return`file-${u}`}P+=1;const a=typeof performance<"u"?performance.now():Date.now(),d=Math.random().toString(36).slice(2,11);return`file-${P}-${a}-${d}`}function H(s){return URL.createObjectURL(s)}function k(s){s.startsWith("blob:")&&URL.revokeObjectURL(s)}function K(s,a,d){return a.length>0&&!a.some(u=>{if(u.endsWith("/*")){const y=u.slice(0,-2);return s.type.startsWith(y)}return s.type===u})?{valid:!1,error:`File type ${s.type} not accepted`}:s.size>d?{valid:!1,error:`File exceeds ${(d/1048576).toFixed(0)}MB limit`}:{valid:!0}}function Q({name:s,value:a,onChange:d,multiple:u=!1,maxFiles:y=10,maxSize:$=10*1024*1024,accept:x=[],storagePath:V="uploads",uploadFn:g}){const h=G(),U=!!h,[f,c]=J([]),R=v(!1),E=v(null),F=v(a),L=v([]);A(()=>{if(R.current){R.current=!1;return}const e=a?JSON.stringify((Array.isArray(a)?a:[a]).map(n=>n.fullUrl).filter(Boolean)):null;e!==E.current&&(E.current=e,F.current=a,q(()=>{if(a){const n=(Array.isArray(a)?a:[a]).filter(i=>i.fullUrl).map((i,r)=>({id:`${W(i.fullUrl)}-existing-${r}`,file:new File([],"existing"),previewURL:i.thumbUrl||i.fullUrl,progress:100,uploaded:i,error:null}));c(n)}else c([])}))},[a]),A(()=>{L.current=f},[f]),A(()=>()=>{L.current.forEach(e=>k(e.previewURL))},[]);const p=w((e,n=!1)=>{const i=(n?e.filter(l=>!l.error):e.filter(l=>l.uploaded&&!l.error)).map(l=>l.uploaded?l.uploaded:n&&U?{fullUrl:l.previewURL,thumbUrl:l.previewURL}:null).filter(l=>l!==null);let r;u?r=i.length>0?i:null:r=i[0]||null;const t=F.current;(()=>{if(!r&&!t)return!1;if(!r||!t)return!0;if(u&&Array.isArray(r)&&Array.isArray(t)){if(r.length!==t.length)return!0;const l=r.map(m=>m.fullUrl).join(","),o=t.map(m=>m.fullUrl).join(",");return l!==o}return!u&&!Array.isArray(r)&&!Array.isArray(t)?r.fullUrl!==t.fullUrl:!0})()&&(R.current=!0,F.current=r,d(r))},[u,d,U]),b=w(async()=>{if(!g)return;let e=[];if(c(i=>(e=i.filter(r=>!r.uploaded&&!r.error),e.length===0?i:i.map(r=>e.some(t=>t.id===r.id)?{...r,progress:0}:r))),e.length===0)return;const n=await Promise.allSettled(e.map(async i=>{try{const r=await g(i.file,t=>{c(l=>l.map(o=>o.id===i.id?{...o,progress:t}:o))});return{id:i.id,picture:r,error:null}}catch(r){const t=r instanceof Error?r.message:"Upload failed";return{id:i.id,picture:null,error:t}}}));c(i=>{const r=i.map(t=>{const l=n.find(o=>o.status==="fulfilled"&&o.value.id===t.id);if(l&&l.status==="fulfilled"){const o=l.value;return{...t,uploaded:o.picture,progress:o.picture?100:null,error:o.error}}return t});return p(r,!1),r})},[g,p]),M=v(b);M.current=b;const S=N(e=>e.registerUpload),j=N(e=>e.unregisterUpload);A(()=>{if(!(!h||!s))return S(h,s,async()=>{await M.current()},()=>L.current.some(e=>!e.uploaded&&!e.error)),()=>{j(h,s)}},[h,s,S,j]);const O=w(async e=>{if(g){c(n=>n.map(i=>i.id===e.id?{...i,progress:0}:i));try{const n=await g(e.file,i=>{c(r=>r.map(t=>t.id===e.id?{...t,progress:i}:t))});c(i=>{const r=i.map(t=>t.id===e.id?{...t,uploaded:n,progress:100,error:null}:t);return p(r,!1),r})}catch(n){const i=n instanceof Error?n.message:"Upload failed";c(r=>r.map(t=>t.id===e.id?{...t,error:i,progress:null}:t))}}},[g,p]),B=w(e=>{c(n=>{const i=(u?y:1)-n.length;if(i<=0)return C(new Error("Maximum files reached"),{userMessage:u?`Maximum ${y} files allowed`:"Only one file allowed",severity:"warning",showNotification:!0}),n;const r=e.slice(0,i),t=[];for(const o of r){const m=K(o,x,$);if(!m.valid){C(new Error(m.error),{userMessage:m.error,severity:"warning",showNotification:!0});continue}t.push({id:W(),file:o,previewURL:H(o),progress:null,uploaded:null,error:null})}if(t.length===0)return n;const l=u?[...n,...t]:t;return U?setTimeout(()=>{p(l,!0)},0):t.forEach(o=>O(o)),l})},[u,y,x,$,U,O,p]),D=w(e=>{c(n=>{const i=n.find(t=>t.id===e);i&&k(i.previewURL);const r=n.filter(t=>t.id!==e);return p(r,!1),r})},[p]),T=f.some(e=>!e.uploaded&&!e.error),z=f.some(e=>e.progress!==null&&e.progress<100),I=f.length>0?f.reduce((e,n)=>e+(n.progress??0),0)/f.length:0;return{files:f,addFiles:B,removeFile:D,hasPending:T,isUploading:z,progress:I,formId:h,isDeferred:U}}export{Q as useFileUpload};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface UseFormNavigationGuardOptions {
|
|
2
|
+
/** Whether the guard is enabled (default: true) */
|
|
3
|
+
enabled?: boolean;
|
|
4
|
+
/** Custom message for navigation confirmation */
|
|
5
|
+
message?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Hook to block SPA navigation when forms are dirty.
|
|
9
|
+
* Uses FormStore as single source of truth.
|
|
10
|
+
*
|
|
11
|
+
* For React Router: Uses useBlocker
|
|
12
|
+
* For Next.js: Intercepts router.push calls
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* // In your app root/layout
|
|
17
|
+
* useFormNavigationGuard({
|
|
18
|
+
* message: 'You have unsaved changes. Are you sure you want to leave?',
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function useFormNavigationGuard({ enabled, message, }?: UseFormNavigationGuardOptions): void;
|
|
23
|
+
/**
|
|
24
|
+
* Check if navigation should be blocked and get confirmation.
|
|
25
|
+
* Used by router navigation hooks.
|
|
26
|
+
*
|
|
27
|
+
* NOTE: For safe access from @donotdev/ui, use checkFormNavigationSafe from useFormStoreSafe.
|
|
28
|
+
* This function is for direct use within CRUD package.
|
|
29
|
+
*
|
|
30
|
+
* @returns Promise<boolean> - true if navigation should proceed, false if blocked
|
|
31
|
+
*/
|
|
32
|
+
export declare function checkFormNavigation(message?: string): Promise<boolean>;
|
|
33
|
+
export default useFormNavigationGuard;
|
|
34
|
+
//# sourceMappingURL=useFormNavigationGuard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFormNavigationGuard.d.ts","sourceRoot":"","sources":["../../src/hooks/useFormNavigationGuard.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,6BAA6B;IAC5C,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,OAAc,EACd,OAAqE,GACtE,GAAE,6BAAkC,GAAG,IAAI,CAsB3C;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,SAA4C,GAClD,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";import{useEffect as i}from"react";import{isClient as n}from"@donotdev/core";import{useFormStore as s}from"../stores";function u({enabled:e=!0,message:o="You have unsaved changes. Are you sure you want to leave?"}={}){const r=s(a=>a.hasDirtyForms());i(()=>{if(!e||!r||!n())return;const a=t=>(t.preventDefault(),t.returnValue=o,o);return window.addEventListener("beforeunload",a),()=>{window.removeEventListener("beforeunload",a)}},[e,r,o])}async function m(e="You have unsaved changes. Discard them?"){return!n()||!s.getState().hasDirtyForms()?!0:window.confirm(e)}var d=u;export{m as checkFormNavigation,d as default,u as useFormNavigationGuard};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Entity } from '@donotdev/core';
|
|
2
|
+
export interface UseRelatedItemsOptions {
|
|
3
|
+
/** Maximum number of related items to return (default: 3) */
|
|
4
|
+
limit?: number;
|
|
5
|
+
/** Tolerance for numeric field matching as percentage (default: 0.2 = 20%) */
|
|
6
|
+
tolerance?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface UseRelatedItemsReturn<T> {
|
|
9
|
+
/** Array of related items */
|
|
10
|
+
items: T[];
|
|
11
|
+
/** Whether any related items were found */
|
|
12
|
+
hasItems: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* useRelatedItems - Finds related items based on matching field criteria
|
|
16
|
+
*
|
|
17
|
+
* Matching logic by field type:
|
|
18
|
+
* - String/select fields: exact match
|
|
19
|
+
* - Number fields: within ±tolerance% of current value
|
|
20
|
+
*
|
|
21
|
+
* Items are matched if they satisfy ANY of the specified fields (OR logic).
|
|
22
|
+
* Current item is automatically excluded.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* const { items: relatedCars } = useRelatedItems(
|
|
27
|
+
* carEntity,
|
|
28
|
+
* currentCar,
|
|
29
|
+
* allCars,
|
|
30
|
+
* ['make', 'price'],
|
|
31
|
+
* { limit: 3, tolerance: 0.2 }
|
|
32
|
+
* );
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function useRelatedItems<T extends Record<string, any>>(entity: Entity, currentItem: T | null | undefined, allItems: T[] | null | undefined, matchFields: string[], options?: UseRelatedItemsOptions): UseRelatedItemsReturn<T>;
|
|
36
|
+
export default useRelatedItems;
|
|
37
|
+
//# sourceMappingURL=useRelatedItems.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRelatedItems.d.ts","sourceRoot":"","sources":["../../src/hooks/useRelatedItems.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,6BAA6B;IAC7B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3D,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EACjC,QAAQ,EAAE,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,EAChC,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,GAAE,sBAA2B,GACnC,qBAAqB,CAAC,CAAC,CAAC,CAwD1B;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";import{useMemo as g}from"react";function h(u,e,t,s,N={}){const{limit:o=3,tolerance:m=.2}=N,c=g(()=>{if(!e||!t||t.length===0||s.length===0)return[];const p=e.id;return t.filter(f=>f.id===p?!1:s.some(n=>{const r=u.fields[n];if(!r)return!1;const i=e[n],a=f[n];if(i==null||a==null)return!1;if(r.type==="number"||r.type==="range"||r.type==="year"){const l=Number(i),d=Number(a);if(isNaN(l)||isNaN(d))return!1;const b=Math.abs(l*m);return Math.abs(d-l)<=b}return String(i)===String(a)})).slice(0,o)},[e,t,s,u.fields,o,m]);return{items:c,hasItems:c.length>0}}var y=h;export{y as default,h as useRelatedItems};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export interface UseUnsavedChangesWarningOptions {
|
|
2
|
+
/** Whether the form has unsaved changes */
|
|
3
|
+
isDirty: boolean;
|
|
4
|
+
/** Whether the warning is enabled (default: true) */
|
|
5
|
+
enabled?: boolean;
|
|
6
|
+
/** Custom message for beforeunload (browsers often ignore this) */
|
|
7
|
+
message?: string;
|
|
8
|
+
/** Callback when user tries to navigate away - return false to block, true to allow */
|
|
9
|
+
onBeforeNavigate?: () => boolean | Promise<boolean>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Hook to warn users about unsaved changes before leaving the page.
|
|
13
|
+
*
|
|
14
|
+
* Handles:
|
|
15
|
+
* - Browser refresh/close (beforeunload event)
|
|
16
|
+
* - Browser back/forward (beforeunload event)
|
|
17
|
+
*
|
|
18
|
+
* For SPA navigation (Next.js router), use the onBeforeNavigate callback
|
|
19
|
+
* with your router's navigation blocking mechanism.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```tsx
|
|
23
|
+
* const { isDirty } = useFormState();
|
|
24
|
+
*
|
|
25
|
+
* useUnsavedChangesWarning({
|
|
26
|
+
* isDirty,
|
|
27
|
+
* message: 'You have unsaved changes. Are you sure you want to leave?',
|
|
28
|
+
* });
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare function useUnsavedChangesWarning({ isDirty, enabled, message, onBeforeNavigate, }: UseUnsavedChangesWarningOptions): void;
|
|
32
|
+
/**
|
|
33
|
+
* Helper to confirm navigation with unsaved changes.
|
|
34
|
+
* Use this in your router's navigation guard.
|
|
35
|
+
*
|
|
36
|
+
* @example Next.js App Router:
|
|
37
|
+
* ```tsx
|
|
38
|
+
* // In your page/layout
|
|
39
|
+
* const confirmNavigation = useConfirmNavigation(isDirty);
|
|
40
|
+
*
|
|
41
|
+
* // In link click handler
|
|
42
|
+
* const handleNavigation = async (href: string) => {
|
|
43
|
+
* if (await confirmNavigation()) {
|
|
44
|
+
* router.push(href);
|
|
45
|
+
* }
|
|
46
|
+
* };
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare function useConfirmNavigation(isDirty: boolean, message?: string): () => Promise<boolean>;
|
|
50
|
+
export default useUnsavedChangesWarning;
|
|
51
|
+
//# sourceMappingURL=useUnsavedChangesWarning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUnsavedChangesWarning.d.ts","sourceRoot":"","sources":["../../src/hooks/useUnsavedChangesWarning.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,+BAA+B;IAC9C,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,gBAAgB,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACrD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,OAAO,EACP,OAAc,EACd,OAAqE,EACrE,gBAAgB,GACjB,EAAE,+BAA+B,GAAG,IAAI,CAuBxC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,SAA4C,GAClD,MAAM,OAAO,CAAC,OAAO,CAAC,CAWxB;AAED,eAAe,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";import{useEffect as u,useCallback as i}from"react";import{isClient as r}from"@donotdev/core";function t({isDirty:e,enabled:a=!0,message:n="You have unsaved changes. Are you sure you want to leave?",onBeforeNavigate:v}){u(()=>{if(!a||!e||!r())return;const s=o=>(o.preventDefault(),o.returnValue=n,n);return window.addEventListener("beforeunload",s),()=>{window.removeEventListener("beforeunload",s)}},[e,a,n])}function f(e,a="You have unsaved changes. Discard them?"){return i(async()=>e?r()?window.confirm(a):!1:!0,[e,a])}var d=t;export{d as default,f as useConfirmNavigation,t as useUnsavedChangesWarning};
|
package/dist/index.d.ts
CHANGED
|
@@ -11,16 +11,19 @@ export * from './useCrudList';
|
|
|
11
11
|
export * from './useCrudCardList';
|
|
12
12
|
export * from './components';
|
|
13
13
|
export * from './stores';
|
|
14
|
-
export { getCrudService
|
|
15
|
-
export
|
|
14
|
+
export { getCrudService } from './CrudService';
|
|
15
|
+
export type { QueryOptions } from './CrudService';
|
|
16
|
+
export { useCrudStore } from './CrudStore';
|
|
17
|
+
export type { CrudServiceInterface, CrudState, CrudActions, BackendType, OptimisticStatus, OptimisticMeta, CrudStoreApi, CacheOptions, MutationOptions, FilterState, CollectionUIState, } from './types';
|
|
16
18
|
export { loadDeterministicRange, upsertDeterministic, appendToCollection, } from './utils/collections';
|
|
17
19
|
export { getFieldRegistry, registerFieldType, isFieldTypeRegistered, type FieldTypeRegistration, type ControlledFieldProps, type UncontrolledFieldProps, } from './FieldRegistry';
|
|
20
|
+
export { registerBuiltinFieldType, getFieldTypeMetadata, getFilterType, getDisplayFormatter, isFilterable, getValueType, clearFieldTypeRegistry, type FieldTypeMetadata, type FilterType, type ValueType, type DisplayFormatter, type ComponentRegistration, } from './fieldTypeRegistry';
|
|
18
21
|
export { registerBuiltinFieldTypes } from './builtinFieldTypes';
|
|
19
|
-
export { useEntityForm, useEntityField, useController, isFieldEditable, getFieldsForOperation, validateEntity, translateFieldLabel, translateLabel,
|
|
20
|
-
export type { ViewerRole, RenderableField, GetFieldsForOperationOptions, EntityFieldsInput, SchemaOperation, ValidationIssue, ValidationResult,
|
|
22
|
+
export { useEntityForm, useEntityField, useController, isFieldEditable, getFieldsForOperation, validateEntity, translateFieldLabel, translateLabel, } from './forms';
|
|
23
|
+
export type { ViewerRole, RenderableField, GetFieldsForOperationOptions, EntityFieldsInput, SchemaOperation, ValidationIssue, ValidationResult, InferEntityData, InferEntityInput, InferEntityOutput, UseEntityFormOptions, EntityFormReturn, EntityFieldReturn, UseControllerProps, UseControllerReturn, ControllerRenderProps, ControllerFieldState, } from './forms';
|
|
21
24
|
export { UploadProvider, useUploadContext } from './contexts';
|
|
22
25
|
export type { UploadProviderProps } from './contexts';
|
|
23
|
-
export { useFileUpload } from './hooks';
|
|
24
|
-
export type { FileMetadata, UseFileUploadOptions } from './hooks';
|
|
26
|
+
export { useFileUpload, useUnsavedChangesWarning, useConfirmNavigation, useEntityFavorites, useRelatedItems, } from './hooks';
|
|
27
|
+
export type { FileMetadata, UseFileUploadOptions, UseEntityFavoritesOptions, UseEntityFavoritesReturn, UseRelatedItemsOptions, UseRelatedItemsReturn, } from './hooks';
|
|
25
28
|
export { isStorageUrl, validatePicture, checkForBlobUrls, hasBlobUrls, } from './utils/uploadValidation';
|
|
26
29
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAGH,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,cAAc,CAAC;AAG7B,cAAc,UAAU,CAAC;AAGzB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAGH,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,cAAc,CAAC;AAG7B,cAAc,UAAU,CAAC;AAGzB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,YAAY,EACV,oBAAoB,EACpB,SAAS,EACT,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,WAAW,EACX,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,GAC5B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,EAEL,aAAa,EACb,cAAc,EACd,aAAa,EAEb,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,cAAc,GACf,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,UAAU,EACV,eAAe,EACf,4BAA4B,EAC5B,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9D,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,YAAY,EACZ,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,WAAW,GACZ,MAAM,0BAA0B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export*from"./useCrud";export*from"./useCrudList";export*from"./useCrudCardList";export*from"./components";export*from"./stores";import{getCrudService as
|
|
1
|
+
export*from"./useCrud";export*from"./useCrudList";export*from"./useCrudCardList";export*from"./components";export*from"./stores";import{getCrudService as e}from"./CrudService";import{useCrudStore as s}from"./CrudStore";import{loadDeterministicRange as a,upsertDeterministic as t,appendToCollection as i}from"./utils/collections";import{getFieldRegistry as r,registerFieldType as l,isFieldTypeRegistered as o}from"./FieldRegistry";import{registerBuiltinFieldType as d,getFieldTypeMetadata as p,getFilterType as n,getDisplayFormatter as F,isFilterable as m,getValueType as g,clearFieldTypeRegistry as u}from"./fieldTypeRegistry";import{registerBuiltinFieldTypes as y}from"./builtinFieldTypes";import{useEntityForm as f,useEntityField as T,useController as c,isFieldEditable as v,getFieldsForOperation as C,validateEntity as U,translateFieldLabel as b,translateLabel as E}from"./forms";import{UploadProvider as R,useUploadContext as x}from"./contexts";import{useFileUpload as B,useUnsavedChangesWarning as h,useConfirmNavigation as S,useEntityFavorites as D,useRelatedItems as L}from"./hooks";import{isStorageUrl as P,validatePicture as k,checkForBlobUrls as I,hasBlobUrls as M}from"./utils/uploadValidation";export{R as UploadProvider,i as appendToCollection,I as checkForBlobUrls,u as clearFieldTypeRegistry,e as getCrudService,F as getDisplayFormatter,r as getFieldRegistry,p as getFieldTypeMetadata,C as getFieldsForOperation,n as getFilterType,g as getValueType,M as hasBlobUrls,v as isFieldEditable,o as isFieldTypeRegistered,m as isFilterable,P as isStorageUrl,a as loadDeterministicRange,d as registerBuiltinFieldType,y as registerBuiltinFieldTypes,l as registerFieldType,b as translateFieldLabel,E as translateLabel,t as upsertDeterministic,S as useConfirmNavigation,c as useController,s as useCrudStore,D as useEntityFavorites,T as useEntityField,f as useEntityForm,B as useFileUpload,L as useRelatedItems,h as useUnsavedChangesWarning,x as useUploadContext,U as validateEntity,k as validatePicture};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerBuiltinFieldTypes.d.ts","sourceRoot":"","sources":["../src/registerBuiltinFieldTypes.tsx"],"names":[],"mappings":"AAkuBA;;;GAGG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CAmqBnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";import{jsx as s,jsxs as u}from"react/jsx-runtime";import{Text as m,Stack as g,ImageGallery as I,Rating as $}from"@donotdev/components";import{formatCurrency as T}from"@donotdev/core";import{ControlledCheckboxField as w,ControlledComboboxField as M,ControlledDateField as b,ControlledDropdownField as R,ControlledFileField as N,ControlledMultiFileField as P,ControlledDocumentField as V,ControlledMultiDocumentField as _,ControlledGeoPointField as B,ControlledImageField as E,ControlledMapField as U,ControlledMultiDropdownField as H,ControlledMultiInputField as K,ControlledNumberField as Y,ControlledPasswordField as G,ControlledPhoneField as O,ControlledRangeField as W,ControlledRatingField as q,ControlledRadioField as J,ControlledYearField as Q,ControlledTextField as y,ControlledTextareaField as X,ControlledRichTextField as Z,ControlledTimestampField as ee,ControlledAddressField as te,ControlledSwitchField as re,ControlledMultiImageField as le,ControlledGdprConsentField as ne,ControlledCurrencyField as oe,ControlledPriceField as ae}from"./components/controlled";import{AvatarFieldComponent as ie,BadgeFieldComponent as ce,ButtonFieldComponent as k,HiddenFieldComponent as se,TextAreaComponent as pe,RichTextComponent as de,TextFieldComponent as F}from"./components/form/fields";import{registerBuiltinFieldType as a}from"./fieldTypeRegistry";import{translateLabel as f}from"./forms/utils";function p(e){return e?s("span",{style:{color:"var(--muted-foreground)"},children:"\u2014"}):s(m,{variant:"muted",children:"\u2014"})}const c={timestamp:(e,l,n,t)=>{const r=t?.compact??!1;if(e==null||e==="")return p(r);try{return(e instanceof Date?e:new Date(e)).toLocaleString()}catch{return String(e)}},date:(e,l,n,t)=>{const r=t?.compact??!1;if(e==null||e==="")return p(r);try{return(e instanceof Date?e:new Date(e)).toLocaleDateString()}catch{return String(e)}},"datetime-local":(e,l,n,t)=>{const r=t?.compact??!1;if(e==null||e==="")return p(r);try{return(e instanceof Date?e:new Date(e)).toLocaleString()}catch{return String(e)}},time:(e,l,n,t)=>{const r=t?.compact??!1;if(e==null||e==="")return p(r);try{return(e instanceof Date?e:new Date(e)).toLocaleTimeString()}catch{return String(e)}},week:(e,l,n,t)=>{const r=t?.compact??!1;return e==null||e===""?p(r):String(e)},month:(e,l,n,t)=>{const r=t?.compact??!1;return e==null||e===""?p(r):String(e)},boolean:(e,l,n)=>e?"Yes":"No",checkbox:(e,l,n)=>e?"Yes":"No",switch:(e,l,n)=>{const t=l.options?.fieldSpecific;if(t){const r=t.uncheckedValue??!1,o=t.checkedValue??!0;if(e===o&&t.checkedLabel)return f(t.checkedLabel,n);if(e===r&&t.uncheckedLabel)return f(t.uncheckedLabel,n)}return e?"Yes":"No"},year:(e,l,n)=>String(e),number:(e,l,n)=>typeof e=="number"?e.toLocaleString():String(e),currency:(e,l,n)=>{if(e==null||isNaN(e))return"";const t=(l.options||{}).fieldSpecific?.currency||"EUR";return T(e,t)},price:(e,l,n,t)=>{const r=t?.compact??!1,o=t?.asString??!1,i=e!=null&&typeof e=="number"?{amount:e,currency:"EUR",vatIncluded:!0,discountPercent:0}:e;if(i==null||typeof i!="object")return p(r);const d=i.amount;if(d==null||isNaN(d))return p(r);const C=i.currency||"EUR",z=i.vatIncluded??!0,v=i.discountPercent??0,D=v>0?d*(1-v/100):d,h=z?` ${n("crud:price.vatIncluded",{defaultValue:"VAT Incl."})}`:"";if(v>0){const L=T(d,C),x=T(D,C),S=` ${n("crud:price.discountPercent",{percent:Math.round(v),defaultValue:"-{{percent}}%"})}`;return o?`${x}${h}${S}`:r?u(m,{variant:"success",weight:"bold",children:[x,h,S]}):u(g,{direction:"column",gap:"tight",align:"end",children:[s(m,{variant:"muted",style:{textDecoration:"line-through",fontSize:"var(--font-size-sm)"},children:L}),u(m,{variant:"success",weight:"bold",children:[x,h]})]})}return`${T(d,C)}${h}`},range:(e,l,n)=>typeof e=="number"?e.toLocaleString():String(e),rating:(e,l,n,t)=>{const r=t?.compact??!1;if(e==null)return p(r);const o=typeof e=="number"?e:parseFloat(e);if(isNaN(o))return p(r);const i=l.validation?.max??5;return s($,{value:o,max:i,readonly:!0,"aria-label":`${o} out of ${i} stars`})},select:(e,l,n)=>{const t=l.validation?.options;if(Array.isArray(t)){const r=t.find(o=>o.value===e)?.label;return r?f(r,n):String(e)}return String(e)},radio:(e,l,n)=>{const t=l.validation?.options;if(Array.isArray(t)){const r=t.find(o=>o.value===e)?.label;return r?f(r,n):String(e)}return String(e)},combobox:(e,l,n)=>{const t=l.validation?.options;if(Array.isArray(t)){const r=t.find(o=>o.value===e)?.label;return r?f(r,n):String(e)}return String(e)},multiselect:(e,l,n)=>{if(Array.isArray(e)){const t=l.validation?.options;if(Array.isArray(t))return e.map(r=>{const o=t.find(i=>i.value===r)?.label;return o?f(o,n):r}).join(", ")}return String(e)},image:(e,l,n,t)=>{const r=t?.compact??!1;return e==null||e===""?p(r):typeof e=="string"?s("img",{src:e,alt:l.label||"",style:{width:r?"40px":void 0,height:r?"40px":void 0,maxWidth:r?void 0:"200px",maxHeight:r?void 0:"150px",objectFit:"cover",borderRadius:"var(--radius-sm)"}}):p(r)},images:(e,l,n,t)=>{const r=t?.compact??!1;if(!Array.isArray(e)||e.length===0)return p(r);const o=e[0],i=typeof o=="object"&&o.thumbUrl?o.thumbUrl:o;return r?u("div",{style:{display:"flex",alignItems:"center",gap:"var(--gap-xs)"},children:[s("img",{src:i,alt:"",style:{width:"40px",height:"40px",objectFit:"cover",borderRadius:"var(--radius-sm)"}}),e.length>1&&u("span",{style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:["+",e.length-1]})]}):s(I,{images:e,altPrefix:l.label||"Image"})},files:(e,l,n,t)=>{const r=t?.compact??!1;return!Array.isArray(e)||e.length===0?p(r):s(g,{gap:"tight",children:e.map((o,i)=>u("a",{href:o.url||o,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none",display:"flex",alignItems:"center",fontSize:"var(--font-size-sm)"},children:[o.filename||`File ${i+1}`,o.size&&u(m,{level:"caption",variant:"muted",style:{marginLeft:"var(--gap-sm)"},children:["(",Math.round(o.size/1024)," KB)"]})]},i))})},documents:(e,l,n,t)=>{const r=t?.compact??!1;return!Array.isArray(e)||e.length===0?p(r):s(g,{gap:"tight",children:e.map((o,i)=>u("a",{href:o.url||o,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none",display:"flex",alignItems:"center",fontSize:"var(--font-size-sm)"},children:[o.filename||`File ${i+1}`,o.size&&u(m,{level:"caption",variant:"muted",style:{marginLeft:"var(--gap-sm)"},children:["(",Math.round(o.size/1024)," KB)"]})]},i))})},file:(e,l,n,t)=>{const r=t?.compact??!1;if(!e)return p(r);const o=typeof e=="string"?e:e.url,i=typeof e=="string"?"View file":e.filename||"View file";return u("a",{href:o,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none"},children:[i,typeof e=="object"&&e.size&&u("span",{style:{color:"var(--muted-foreground)",marginLeft:"var(--gap-sm)"},children:["(",Math.round(e.size/1024)," KB)"]})]})},document:(e,l,n,t)=>{const r=t?.compact??!1;if(!e)return p(r);const o=typeof e=="string"?e:e.url,i=typeof e=="string"?"View file":e.filename||"View file";return u("a",{href:o,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none"},children:[i,typeof e=="object"&&e.size&&u("span",{style:{color:"var(--muted-foreground)",marginLeft:"var(--gap-sm)"},children:["(",Math.round(e.size/1024)," KB)"]})]})},reference:(e,l,n)=>String(e),geopoint:(e,l,n,t)=>{const r=t?.compact??!1;return e&&typeof e=="object"&&"lat"in e&&"lng"in e?`${e.lat.toFixed(6)}, ${e.lng.toFixed(6)}`:p(r)},address:(e,l,n)=>e&&typeof e=="object"&&"formatted_address"in e?e.formatted_address:String(e),map:(e,l,n,t)=>{const r=t?.compact??!1;if(e&&typeof e=="object"){const o=Object.entries(e);return o.length===0?p(r):u(g,{direction:"column",gap:"tight",children:[o.slice(0,5).map(([i,d])=>u(m,{style:{fontSize:"var(--font-size-sm)"},children:[u("strong",{children:[i,":"]})," ",String(d)]},i)),o.length>5&&u(m,{variant:"muted",children:["+",o.length-5," more"]})]})}return p(r)},array:(e,l,n,t)=>{const r=t?.compact??!1;return Array.isArray(e)?e.length===0?p(r):e.join(", "):p(r)},password:()=>"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",email:(e,l,n)=>s("a",{href:`mailto:${e}`,style:{color:"var(--primary)"},onClick:t=>t.stopPropagation(),children:e}),tel:(e,l,n)=>s("a",{href:`tel:${e}`,style:{color:"var(--primary)"},onClick:t=>t.stopPropagation(),children:e}),url:(e,l,n)=>s("a",{href:e,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)"},children:e}),color:(e,l,n)=>u(g,{direction:"row",gap:"tight",align:"center",children:[s("div",{style:{width:"20px",height:"20px",backgroundColor:e,borderRadius:"var(--radius-sm)",border:"1px solid var(--border)"}}),s(m,{children:e})]}),textarea:(e,l,n)=>String(e),text:(e,l,n)=>String(e),richtext:(e,l,n,t)=>{const r=t?.compact??!1;return e&&typeof e=="string"?r?e.replace(/<[^>]*>/g,"").trim()||s("span",{style:{color:"var(--muted-foreground)"},children:"\u2014"}):s("div",{dangerouslySetInnerHTML:{__html:e},style:{padding:"var(--gap-sm)",fontSize:"var(--font-size-sm)",lineHeight:"1.6"}}):p(r)}};function ue(e){return e.type==="avatar"}function ye(e){return e.type==="badge"}let A=!1;function j(){A||(A=!0,a({type:"text",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.text,components:{controlled:y,uncontrolled:e=>{const{value:l,onChange:n,label:t,error:r,config:o}=e;return s(F,{label:t||"",value:typeof l=="string"?l:"",onChange:i=>{const d=i.target.value;n(d)},error:r,...o.options})}}}),a({type:"email",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.email,components:{controlled:y,uncontrolled:e=>{const{value:l,onChange:n,label:t,error:r,config:o}=e;return s(F,{label:t||"",value:typeof l=="string"?l:"",onChange:i=>{const d=i.target.value;n(d)},error:r,type:"email",...o.options})}}}),a({type:"url",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.url,components:{controlled:y,uncontrolled:e=>{const{value:l,onChange:n,label:t,error:r,config:o}=e;return s(F,{label:t||"",value:typeof l=="string"?l:"",onChange:i=>{const d=i.target.value;n(d)},error:r,type:"url",...o.options})}}}),a({type:"color",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.color,components:{controlled:y,uncontrolled:e=>{const{value:l,onChange:n,label:t,error:r,config:o}=e;return s(F,{label:t||"",value:typeof l=="string"?l:"",onChange:i=>{const d=i.target.value;n(d)},error:r,type:"color",...o.options})}}}),a({type:"textarea",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.textarea,components:{controlled:X,uncontrolled:e=>{const{value:l,onChange:n,label:t,error:r,config:o}=e;return s(pe,{label:t||"",value:typeof l=="string"?l:"",onChange:i=>{const d=i.target.value;n(d)},error:r,...o.options})}}}),a({type:"richtext",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.richtext,components:{controlled:Z,uncontrolled:e=>{const{value:l,onChange:n,label:t,error:r,config:o}=e;return s(de,{label:t||"",value:typeof l=="string"?l:"",onChange:i=>{const d=i.target.value;n(d)},error:r,...o.options})}}}),a({type:"password",filterable:!1,filterType:"none",valueType:"string",displayFormatter:c.password,components:{controlled:G}}),a({type:"tel",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.tel,components:{controlled:O}}),a({type:"number",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.number,components:{controlled:Y}}),a({type:"currency",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.currency,components:{controlled:oe}}),a({type:"price",filterable:!0,filterType:"range",valueType:"object",displayFormatter:c.price,components:{controlled:ae}}),a({type:"range",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.range,components:{controlled:W}}),a({type:"year",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.year,components:{controlled:Q}}),a({type:"rating",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.rating,components:{controlled:q}}),a({type:"boolean",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.boolean,components:{controlled:w}}),a({type:"checkbox",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.checkbox,components:{controlled:w}}),a({type:"gdprConsent",filterable:!0,filterType:"select",valueType:"object",components:{controlled:ne}}),a({type:"switch",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.switch,components:{controlled:re}}),a({type:"date",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.date,components:{controlled:b}}),a({type:"datetime-local",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c["datetime-local"],components:{controlled:b}}),a({type:"time",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.time,components:{controlled:b}}),a({type:"week",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.week,components:{controlled:b}}),a({type:"month",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.month,components:{controlled:b}}),a({type:"timestamp",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.timestamp,components:{controlled:ee}}),a({type:"file",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.file,components:{controlled:N}}),a({type:"files",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.files,components:{controlled:P}}),a({type:"document",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.document,components:{controlled:V}}),a({type:"documents",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.documents,components:{controlled:_}}),a({type:"image",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.image,components:{controlled:E}}),a({type:"images",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.images,components:{controlled:le}}),a({type:"geopoint",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.geopoint,components:{controlled:B}}),a({type:"address",filterable:!0,filterType:"address",valueType:"object",displayFormatter:c.address,components:{controlled:te}}),a({type:"map",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.map,components:{controlled:U}}),a({type:"array",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.array,components:{controlled:K}}),a({type:"select",filterable:!0,filterType:"select",valueType:"string",displayFormatter:c.select,components:{controlled:R}}),a({type:"combobox",filterable:!0,filterType:"select",valueType:"string",displayFormatter:c.combobox,components:{controlled:M}}),a({type:"multiselect",filterable:!0,filterType:"multiselect",valueType:"array",displayFormatter:c.multiselect,components:{controlled:H}}),a({type:"radio",filterable:!0,filterType:"select",valueType:"string",displayFormatter:c.radio,components:{controlled:J}}),a({type:"reference",filterable:!0,filterType:"text",valueType:"string",components:{controlled:y}}),a({type:"hidden",filterable:!1,filterType:"none",valueType:"string",components:{controlled:y,uncontrolled:e=>{const{name:l,value:n}=e;return s(se,{name:l,value:typeof n=="string"?n:""})}}}),a({type:"avatar",filterable:!1,filterType:"none",valueType:"string",components:{controlled:y,uncontrolled:e=>{const{value:l,onChange:n,error:t,config:r,t:o}=e;if(!ue(r))throw new Error("Invalid config type for avatar field");return s(ie,{config:r,value:typeof l=="string"?l:"",onChange:i=>{n(i)},error:!!t,helperText:t||void 0,t:o,...r.options})}}}),a({type:"badge",filterable:!1,filterType:"none",valueType:"string",components:{controlled:y,uncontrolled:e=>{const{value:l,onChange:n,error:t,config:r,t:o}=e;if(!ye(r))throw new Error("Invalid config type for badge field");return s(ce,{config:r,value:typeof l=="string"?l:"",onChange:i=>{n(i)},error:!!t,helperText:t||void 0,t:o,...r.options})}}}),a({type:"submit",filterable:!1,filterType:"none",valueType:"string",components:{controlled:y,uncontrolled:e=>{const{name:l,label:n,config:t}=e;return s(k,{label:n||l,type:"submit",onClick:()=>{},...t.options})}}}),a({type:"reset",filterable:!1,filterType:"none",valueType:"string",components:{controlled:y,uncontrolled:e=>{const{name:l,label:n,config:t}=e;return s(k,{label:n||l,type:"reset",onClick:()=>{},...t.options})}}}))}j();export{j as registerAllBuiltinFieldTypes};
|
|
@@ -10,6 +10,7 @@ interface FormState {
|
|
|
10
10
|
status: FormStatus;
|
|
11
11
|
error: string | null;
|
|
12
12
|
uploadProgress: number;
|
|
13
|
+
isDirty: boolean;
|
|
13
14
|
}
|
|
14
15
|
/**
|
|
15
16
|
* Form store state interface
|
|
@@ -38,6 +39,12 @@ export interface FormStoreActions {
|
|
|
38
39
|
reset: (formId: string) => void;
|
|
39
40
|
/** Clean up form state (on unmount) */
|
|
40
41
|
cleanup: (formId: string) => void;
|
|
42
|
+
/** Set form dirty state */
|
|
43
|
+
setIsDirty: (formId: string, isDirty: boolean) => void;
|
|
44
|
+
/** Check if any form is dirty */
|
|
45
|
+
hasDirtyForms: () => boolean;
|
|
46
|
+
/** Get all dirty form IDs */
|
|
47
|
+
getDirtyFormIds: () => string[];
|
|
41
48
|
/** Get form status */
|
|
42
49
|
getStatus: (formId: string) => FormStatus;
|
|
43
50
|
/** Check if form is in any loading state */
|
|
@@ -46,6 +53,8 @@ export interface FormStoreActions {
|
|
|
46
53
|
getUploadProgress: (formId: string) => number;
|
|
47
54
|
/** Get error message */
|
|
48
55
|
getError: (formId: string) => string | null;
|
|
56
|
+
/** Check if form is dirty */
|
|
57
|
+
getIsDirty: (formId: string) => boolean;
|
|
49
58
|
}
|
|
50
59
|
/**
|
|
51
60
|
* Form store for managing form submission states
|
|
@@ -74,5 +83,13 @@ export declare const useUploadProgress: (formId: string) => number;
|
|
|
74
83
|
* Hook to get form error
|
|
75
84
|
*/
|
|
76
85
|
export declare const useFormError: (formId: string) => string | null;
|
|
86
|
+
/**
|
|
87
|
+
* Hook to check if form is dirty
|
|
88
|
+
*/
|
|
89
|
+
export declare const useFormIsDirty: (formId: string) => boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Hook to check if any form is dirty
|
|
92
|
+
*/
|
|
93
|
+
export declare const useHasDirtyForms: () => boolean;
|
|
77
94
|
export {};
|
|
78
95
|
//# sourceMappingURL=FormStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormStore.d.ts","sourceRoot":"","sources":["../../src/stores/FormStore.ts"],"names":[],"mappings":"AAkBA;;;GAGG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,SAAS,GACT,OAAO,CAAC;AAEZ;;GAEG;AACH,UAAU,SAAS;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"FormStore.d.ts","sourceRoot":"","sources":["../../src/stores/FormStore.ts"],"names":[],"mappings":"AAkBA;;;GAGG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,SAAS,GACT,OAAO,CAAC;AAEZ;;GAEG;AACH,UAAU,SAAS;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAE/B,8EAA8E;IAC9E,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,wCAAwC;IACxC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,2BAA2B;IAC3B,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qDAAqD;IACrD,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,wBAAwB;IACxB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,sBAAsB;IACtB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,+BAA+B;IAC/B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,uCAAuC;IACvC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAGlC,2BAA2B;IAC3B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvD,iCAAiC;IACjC,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,6BAA6B;IAC7B,eAAe,EAAE,MAAM,MAAM,EAAE,CAAC;IAGhC,sBAAsB;IACtB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,UAAU,CAAC;IAC1C,4CAA4C;IAC5C,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,0BAA0B;IAC1B,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,wBAAwB;IACxB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC5C,6BAA6B;IAC7B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CACzC;AASD;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,2IA6LvB,CAAC;AAMH;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,KAAG,UACiB,CAAC;AAEjE;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,OAQ5C,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,MACgB,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,KAAG,MAAM,GAAG,IACM,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,OACgB,CAAC;AAEjE;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAO,OACY,CAAC"}
|
package/dist/stores/FormStore.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{createDoNotDevStore as
|
|
1
|
+
"use client";import{createDoNotDevStore as i}from"@donotdev/core";const m={status:"idle",error:null,uploadProgress:0,isDirty:!1},a=i({name:"form-store",createStore:(t,e)=>({forms:{},startSubmit:s=>{t(r=>{const o=r.forms[s]||m;return{forms:{...r.forms,[s]:{...o,status:"uploading",error:null,uploadProgress:0}}}})},setUploading:(s,r)=>{t(o=>{const u=o.forms[s]||m;return{forms:{...o.forms,[s]:{...u,status:"uploading",uploadProgress:Math.min(100,Math.max(0,r))}}}})},setValidating:s=>{t(r=>{const o=r.forms[s]||m;return{forms:{...r.forms,[s]:{...o,status:"validating",uploadProgress:100}}}})},setSubmitting:s=>{t(r=>{const o=r.forms[s]||m;return{forms:{...r.forms,[s]:{...o,status:"submitting"}}}})},setSuccess:s=>{t(r=>{const o=r.forms[s]||m;return{forms:{...r.forms,[s]:{...o,status:"success",error:null}}}}),setTimeout(()=>{e().reset(s)},1500)},setError:(s,r)=>{t(o=>{const u=o.forms[s]||m;return{forms:{...o.forms,[s]:{...u,status:"error",error:r}}}})},reset:s=>{t(r=>({forms:{...r.forms,[s]:{...m}}}))},setIsDirty:(s,r)=>{t(o=>{const u=o.forms[s]||m;return{forms:{...o.forms,[s]:{...u,isDirty:r}}}})},hasDirtyForms:()=>{const s=e().forms;return Object.values(s).some(r=>r.isDirty)},getDirtyFormIds:()=>{const s=e().forms;return Object.entries(s).filter(([r,o])=>o.isDirty).map(([r])=>r)},cleanup:s=>{t(r=>{const{[s]:o,...u}=r.forms;return{forms:u}})},getStatus:s=>e().forms[s]?.status??"idle",isLoading:s=>{const r=e().forms[s]?.status??"idle";return r==="uploading"||r==="validating"||r==="submitting"},getUploadProgress:s=>e().forms[s]?.uploadProgress??0,getError:s=>e().forms[s]?.error??null,getIsDirty:s=>e().forms[s]?.isDirty??!1})}),n=t=>a(e=>e.forms[t]?.status??"idle"),f=t=>a(e=>{const s=e.forms[t]?.status??"idle";return s==="uploading"||s==="validating"||s==="submitting"}),l=t=>a(e=>e.forms[t]?.uploadProgress??0),g=t=>a(e=>e.forms[t]?.error??null),d=t=>a(e=>e.forms[t]?.isDirty??!1),c=()=>a(t=>t.hasDirtyForms());export{g as useFormError,d as useFormIsDirty,f as useFormLoading,n as useFormStatus,a as useFormStore,c as useHasDirtyForms,l as useUploadProgress};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{createDoNotDevStore as
|
|
1
|
+
"use client";import{createDoNotDevStore as y}from"@donotdev/core";const g={status:"idle",progress:0,error:null},d=y({name:"upload-store",createStore:(a,n)=>({uploads:{},uploadFunctions:{},checkPendingFunctions:{},retryAttempts:{},maxRetries:3,retryDelay:1e3,registerUpload:(t,e,o,r)=>{a(s=>({uploadFunctions:{...s.uploadFunctions,[t]:{...s.uploadFunctions[t]||{},[e]:o}},checkPendingFunctions:{...s.checkPendingFunctions,[t]:{...s.checkPendingFunctions[t]||{},[e]:r||(()=>!1)}}}))},unregisterUpload:(t,e)=>{a(o=>{const r=o.uploadFunctions[t],s=o.checkPendingFunctions[t];if(!r)return o;const{[e]:u,...p}=r,{[e]:l,...m}=s||{},{[e]:F,...c}=o.retryAttempts[t]||{};return{uploadFunctions:{...o.uploadFunctions,[t]:p},checkPendingFunctions:{...o.checkPendingFunctions,[t]:m},retryAttempts:{...o.retryAttempts,[t]:c}}})},startUpload:(t,e)=>{a(o=>({uploads:{...o.uploads,[t]:{...o.uploads[t]||{},[e]:{status:"uploading",progress:0,error:null}}}}))},setProgress:(t,e,o)=>{a(r=>{const s=r.uploads[t]?.[e]||g;return{uploads:{...r.uploads,[t]:{...r.uploads[t]||{},[e]:{...s,progress:Math.min(100,Math.max(0,o))}}}}})},completeUpload:(t,e)=>{a(o=>{const r=o.uploads[t]?.[e]||g;return{uploads:{...o.uploads,[t]:{...o.uploads[t]||{},[e]:{...r,status:"complete",progress:100}}}}})},failUpload:(t,e,o)=>{a(r=>{const s=r.uploads[t]?.[e]||g;return{uploads:{...r.uploads,[t]:{...r.uploads[t]||{},[e]:{...s,status:"error",error:o}}}}})},resetUpload:(t,e)=>{a(o=>({uploads:{...o.uploads,[t]:{...o.uploads[t]||{},[e]:{...g}}}}))},resetForm:t=>{a(e=>({uploads:{...e.uploads,[t]:{}}}))},cleanup:t=>{a(e=>{const{[t]:o,...r}=e.uploads,{[t]:s,...u}=e.uploadFunctions;return{uploads:r,uploadFunctions:u}})},uploadAll:async t=>{const e=n().uploadFunctions[t];if(!e)return;const o=Object.entries(e);if(o.length===0)return;const r=async(s,u,p=1)=>{n().startUpload(t,s);try{await u(l=>{n().setProgress(t,s,l)}),n().completeUpload(t,s),a(l=>({retryAttempts:{...l.retryAttempts,[t]:{...l.retryAttempts[t]||{},[s]:0}}}))}catch(l){const m=l instanceof Error?l.message:"Upload failed",F=n().maxRetries,c=n().retryAttempts[t]?.[s]||0;if(c<F){a(i=>({retryAttempts:{...i.retryAttempts,[t]:{...i.retryAttempts[t]||{},[s]:c+1}}}));const h=n().retryDelay*Math.pow(2,p-1);return await new Promise(i=>setTimeout(i,h)),r(s,u,p+1)}else throw n().failUpload(t,s,m),l}};await Promise.all(o.map(async([s,u])=>{await r(s,u)}))},hasPendingUploads:t=>{const e=n(),o=e.uploadFunctions[t],r=e.checkPendingFunctions[t];return o?Object.entries(o).some(([s,u])=>{const p=r?.[s];return p?p():!0}):!1},getStatus:(t,e)=>n().uploads[t]?.[e]?.status??"idle",getProgress:(t,e)=>n().uploads[t]?.[e]?.progress??0,getTotalProgress:t=>{const e=n().uploads[t];if(!e)return 100;const o=Object.values(e);if(o.length===0)return 100;const r=o.reduce((s,u)=>s+u.progress,0);return Math.round(r/o.length)},isUploading:t=>{const e=n().uploads[t];return e?Object.values(e).some(o=>o.status==="uploading"):!1},getError:(t,e)=>n().uploads[t]?.[e]?.error??null})}),P=a=>d(n=>{const t=n.uploads[a];if(!t)return 100;const e=Object.values(t);if(e.length===0)return 100;const o=e.reduce((r,s)=>r+s.progress,0);return Math.round(o/e.length)}),U=a=>d(n=>{const t=n.uploads[a];return t?Object.values(t).some(e=>e.status==="uploading"):!1}),f=(a,n)=>d(t=>t.uploads[a]?.[n]?.progress??0),A=(a,n)=>d(t=>t.uploads[a]?.[n]?.status??"idle");export{f as useFieldProgress,A as useFieldUploadStatus,U as useIsUploading,P as useTotalProgress,d as useUploadStore};
|
package/dist/stores/index.d.ts
CHANGED
|
@@ -6,6 +6,6 @@
|
|
|
6
6
|
* @since 0.0.1
|
|
7
7
|
* @author AMBROISE PARK Consulting
|
|
8
8
|
*/
|
|
9
|
-
export { useFormStore, useFormStatus, useFormLoading, useUploadProgress, useFormError, type FormStatus, type FormStoreState, type FormStoreActions, } from './FormStore';
|
|
9
|
+
export { useFormStore, useFormStatus, useFormLoading, useUploadProgress, useFormError, useFormIsDirty, useHasDirtyForms, type FormStatus, type FormStoreState, type FormStoreActions, } from './FormStore';
|
|
10
10
|
export { useUploadStore, useTotalProgress, useIsUploading, useFieldProgress, useFieldUploadStatus, type UploadStatus, type UploadFunction, type UploadStoreState, type UploadStoreActions, } from './UploadStore';
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAGH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAGH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAC"}
|
package/dist/stores/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useFormStore as
|
|
1
|
+
import{useFormStore as s,useFormStatus as a,useFormLoading as r,useUploadProgress as o,useFormError as e,useFormIsDirty as u,useHasDirtyForms as t}from"./FormStore";import{useUploadStore as m,useTotalProgress as F,useIsUploading as i,useFieldProgress as l,useFieldUploadStatus as d}from"./UploadStore";export{l as useFieldProgress,d as useFieldUploadStatus,e as useFormError,u as useFormIsDirty,r as useFormLoading,a as useFormStatus,s as useFormStore,t as useHasDirtyForms,i as useIsUploading,F as useTotalProgress,o as useUploadProgress,m as useUploadStore};
|