@donotdev/crud 0.0.14 → 0.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -19
- package/dist/CrudService.d.ts +84 -11
- package/dist/CrudService.d.ts.map +1 -1
- package/dist/CrudService.js +9 -1
- package/dist/CrudStore.d.ts.map +1 -1
- package/dist/CrudStore.js +1 -1
- package/dist/FieldRegistry.d.ts +43 -43
- package/dist/FieldRegistry.d.ts.map +1 -1
- package/dist/FieldRegistry.js +1 -1
- package/dist/adapters/FunctionsAdapter.d.ts +20 -26
- package/dist/adapters/FunctionsAdapter.d.ts.map +1 -1
- package/dist/adapters/FunctionsAdapter.js +1 -1
- package/dist/adapters/index.d.ts +0 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +1 -1
- package/dist/components/CrudButton.js +1 -1
- package/dist/components/CrudCard.d.ts +8 -0
- package/dist/components/CrudCard.d.ts.map +1 -0
- package/dist/components/CrudCard.js +1 -0
- package/dist/components/DateFilter.d.ts.map +1 -1
- package/dist/components/DateFilter.js +1 -1
- package/dist/components/DisplayFieldRenderer.js +1 -1
- package/dist/components/DisplayThumbnail.d.ts +29 -0
- package/dist/components/DisplayThumbnail.d.ts.map +1 -0
- package/dist/components/DisplayThumbnail.js +1 -0
- package/dist/components/EntityFilters.d.ts.map +1 -1
- package/dist/components/EntityFilters.js +1 -1
- package/dist/components/FormFieldRenderer.js +1 -1
- package/dist/components/FormLayout.d.ts.map +1 -1
- package/dist/components/FormLayout.js +1 -1
- package/dist/components/__tests__/EntityFilters.test.d.ts +2 -0
- package/dist/components/__tests__/EntityFilters.test.d.ts.map +1 -0
- package/dist/components/__tests__/EntityFilters.test.js +1 -0
- package/dist/components/__tests__/FormFieldRenderer.test.d.ts +2 -0
- package/dist/components/__tests__/FormFieldRenderer.test.d.ts.map +1 -0
- package/dist/components/__tests__/FormFieldRenderer.test.js +1 -0
- package/dist/components/controlled/complex/ControlledAddressField.js +1 -1
- package/dist/components/controlled/complex/ControlledDateField.js +1 -1
- package/dist/components/controlled/complex/ControlledGeoPointField.js +1 -1
- package/dist/components/controlled/complex/ControlledMapField.js +1 -1
- package/dist/components/controlled/complex/ControlledMultiInputField.js +1 -1
- package/dist/components/controlled/complex/ControlledRichTextField.js +1 -1
- package/dist/components/controlled/complex/ControlledTimestampField.js +1 -1
- package/dist/components/controlled/complex/index.js +1 -1
- package/dist/components/controlled/file/ControlledDocumentField.js +1 -1
- package/dist/components/controlled/file/ControlledFileField.js +1 -1
- package/dist/components/controlled/file/ControlledImageField.js +1 -1
- package/dist/components/controlled/file/ControlledMultiDocumentField.js +1 -1
- package/dist/components/controlled/file/ControlledMultiFileField.js +1 -1
- package/dist/components/controlled/file/ControlledMultiImageField.js +1 -1
- package/dist/components/controlled/file/index.js +1 -1
- package/dist/components/controlled/index.js +1 -1
- package/dist/components/controlled/input/ControlledCheckboxField.js +1 -1
- package/dist/components/controlled/input/ControlledCurrencyField.js +1 -1
- package/dist/components/controlled/input/ControlledDurationField.js +1 -1
- package/dist/components/controlled/input/ControlledGdprConsentField.js +1 -1
- package/dist/components/controlled/input/ControlledNumberField.js +1 -1
- package/dist/components/controlled/input/ControlledPasswordField.js +1 -1
- package/dist/components/controlled/input/ControlledPhoneField.js +1 -1
- package/dist/components/controlled/input/ControlledPriceField.js +1 -1
- package/dist/components/controlled/input/ControlledRangeField.js +1 -1
- package/dist/components/controlled/input/ControlledRatingField.js +1 -1
- package/dist/components/controlled/input/ControlledSwitchField.js +1 -1
- package/dist/components/controlled/input/ControlledTextField.js +1 -1
- package/dist/components/controlled/input/ControlledTextareaField.js +1 -1
- package/dist/components/controlled/input/index.js +1 -1
- package/dist/components/controlled/select/ControlledComboboxField.js +1 -1
- package/dist/components/controlled/select/ControlledDropdownField.js +1 -1
- package/dist/components/controlled/select/ControlledMultiDropdownField.js +1 -1
- package/dist/components/controlled/select/ControlledRadioField.js +1 -1
- package/dist/components/controlled/select/ControlledYearField.js +1 -1
- package/dist/components/controlled/select/index.js +1 -1
- package/dist/components/controlled/types.d.ts +19 -5
- package/dist/components/controlled/types.d.ts.map +1 -1
- package/dist/components/controlled/types.js +1 -1
- package/dist/components/fields/display/AvatarFieldDisplay.js +1 -1
- package/dist/components/fields/display/BadgeFieldDisplay.js +1 -1
- package/dist/components/fields/display/ButtonFieldDisplay.js +1 -1
- package/dist/components/fields/display/CheckboxFieldDisplay.js +1 -1
- package/dist/components/fields/display/DateFieldDisplay.js +1 -1
- package/dist/components/fields/display/DropdownDisplay.js +1 -1
- package/dist/components/fields/display/FileFieldDisplay.js +1 -1
- package/dist/components/fields/display/GeoPointFieldDisplay.js +1 -1
- package/dist/components/fields/display/HiddenFieldDisplay.js +1 -1
- package/dist/components/fields/display/ImageFieldDisplay.js +1 -1
- package/dist/components/fields/display/LinkFieldDisplay.js +1 -1
- package/dist/components/fields/display/MapFieldDisplay.js +1 -1
- package/dist/components/fields/display/MultiDropdownDisplay.js +1 -1
- package/dist/components/fields/display/MultiInputTextFieldDisplay.js +1 -1
- package/dist/components/fields/display/NumberFieldDisplay.js +1 -1
- package/dist/components/fields/display/PasswordFieldDisplay.js +1 -1
- package/dist/components/fields/display/PhoneNumberDisplay.js +1 -1
- package/dist/components/fields/display/RadioFieldDisplay.js +1 -1
- package/dist/components/fields/display/RangeFieldDisplay.js +1 -1
- package/dist/components/fields/display/ReferenceFieldDisplay.js +1 -1
- package/dist/components/fields/display/RichTextDisplay.d.ts.map +1 -1
- package/dist/components/fields/display/RichTextDisplay.js +2 -2
- package/dist/components/fields/display/TextAreaDisplay.js +1 -1
- package/dist/components/fields/display/TextFieldDisplay.js +1 -1
- package/dist/components/fields/display/TimestampFieldDisplay.js +1 -1
- package/dist/components/fields/display/index.js +1 -1
- package/dist/components/form/fields/AddressFieldComponent.d.ts.map +1 -1
- 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.js +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/DurationFieldComponent.js +1 -1
- package/dist/components/form/fields/FileFieldComponent.js +1 -1
- package/dist/components/form/fields/GdprConsentFieldComponent.js +1 -1
- package/dist/components/form/fields/GeoPointFieldComponent.js +1 -1
- package/dist/components/form/fields/HiddenFieldComponent.js +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.js +1 -1
- package/dist/components/form/fields/PriceFieldComponent.js +1 -1
- package/dist/components/form/fields/RadioFieldComponent.js +1 -1
- package/dist/components/form/fields/RangeFieldComponent.js +1 -1
- package/dist/components/form/fields/RatingFieldComponent.js +1 -1
- package/dist/components/form/fields/ReferenceFieldComponent.js +1 -1
- package/dist/components/form/fields/RichTextComponent.js +1 -1
- package/dist/components/form/fields/SwitchFieldComponent.d.ts.map +1 -1
- package/dist/components/form/fields/SwitchFieldComponent.js +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.js +1 -1
- package/dist/components/form/fields/internal/TiptapEditor.d.ts +4 -2
- 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/internal/ImageViewerDialog.d.ts.map +1 -1
- package/dist/components/form/internal/ImageViewerDialog.js +1 -1
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/contexts/UploadContext.js +1 -1
- package/dist/contexts/index.js +1 -1
- package/dist/fieldTypeRegistry.d.ts +3 -0
- package/dist/fieldTypeRegistry.d.ts.map +1 -1
- package/dist/fieldTypeRegistry.js +1 -1
- 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 +3 -2
- package/dist/forms/hooks/useEntityForm.d.ts.map +1 -1
- package/dist/forms/hooks/useEntityForm.js +1 -1
- package/dist/forms/index.js +1 -1
- package/dist/forms/types.d.ts +0 -8
- package/dist/forms/types.d.ts.map +1 -1
- package/dist/forms/utils/buildInitialValues.js +1 -1
- package/dist/forms/utils/getFieldsForOperation.js +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 +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/useCrudFilters.d.ts +0 -15
- package/dist/hooks/useCrudFilters.d.ts.map +1 -1
- package/dist/hooks/useCrudFilters.js +1 -1
- package/dist/hooks/useEntityFavorites.js +1 -1
- package/dist/hooks/useFileUpload.d.ts.map +1 -1
- package/dist/hooks/useFileUpload.js +1 -1
- package/dist/hooks/useFormNavigationGuard.d.ts.map +1 -1
- package/dist/hooks/useFormNavigationGuard.js +1 -1
- package/dist/hooks/useRelatedItems.d.ts +1 -2
- package/dist/hooks/useRelatedItems.d.ts.map +1 -1
- package/dist/hooks/useRelatedItems.js +1 -1
- package/dist/hooks/useUnsavedChangesWarning.d.ts +3 -24
- package/dist/hooks/useUnsavedChangesWarning.d.ts.map +1 -1
- package/dist/hooks/useUnsavedChangesWarning.js +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/registerBuiltinFieldTypes.d.ts.map +1 -1
- package/dist/registerBuiltinFieldTypes.js +1 -1
- package/dist/stores/FormStore.d.ts.map +1 -1
- package/dist/stores/FormStore.js +1 -1
- package/dist/stores/UploadStore.d.ts.map +1 -1
- package/dist/stores/UploadStore.js +1 -1
- package/dist/stores/index.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +22 -19
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/useBaseCrudList.d.ts +1 -4
- package/dist/useBaseCrudList.d.ts.map +1 -1
- package/dist/useBaseCrudList.js +1 -1
- package/dist/useCrud.d.ts +1 -2
- package/dist/useCrud.d.ts.map +1 -1
- package/dist/useCrud.js +1 -1
- package/dist/useCrudCardList.d.ts +1 -2
- package/dist/useCrudCardList.d.ts.map +1 -1
- package/dist/useCrudCardList.js +1 -1
- package/dist/useCrudList.d.ts +1 -1
- 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.d.ts +10 -5
- package/dist/utils/fileStorage.d.ts.map +1 -1
- package/dist/utils/fileStorage.js +1 -1
- package/dist/utils/imageProcessing.js +1 -1
- package/dist/utils/imageStorage.d.ts +9 -4
- package/dist/utils/imageStorage.d.ts.map +1 -1
- package/dist/utils/imageStorage.js +1 -1
- package/dist/utils/imageUtils.js +1 -1
- package/dist/utils/mergeWithOptimistic.d.ts.map +1 -1
- package/dist/utils/mergeWithOptimistic.js +1 -1
- package/dist/utils/sanitizeHtml.d.ts +6 -0
- package/dist/utils/sanitizeHtml.d.ts.map +1 -0
- package/dist/utils/sanitizeHtml.js +1 -0
- package/dist/utils/scopeUtils.d.ts +1 -2
- package/dist/utils/scopeUtils.d.ts.map +1 -1
- package/dist/utils/scopeUtils.js +1 -1
- package/dist/utils/uploadValidation.d.ts +5 -4
- package/dist/utils/uploadValidation.d.ts.map +1 -1
- package/dist/utils/uploadValidation.js +1 -1
- package/package.json +11 -8
- package/dist/adapters/FirestoreAdapter.d.ts +0 -65
- package/dist/adapters/FirestoreAdapter.d.ts.map +0 -1
- package/dist/adapters/FirestoreAdapter.js +0 -1
- package/dist/components/EntityDisplayRenderer.d.ts +0 -43
- package/dist/components/EntityDisplayRenderer.d.ts.map +0 -1
- package/dist/components/EntityDisplayRenderer.js +0 -1
- package/dist/components/EntityFormRenderer.d.ts +0 -86
- package/dist/components/EntityFormRenderer.d.ts.map +0 -1
- package/dist/components/EntityFormRenderer.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldTypeRegistry.d.ts","sourceRoot":"","sources":["../src/fieldTypeRegistry.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI7D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,OAAO,GACP,QAAQ,GACR,MAAM,GACN,SAAS,GACT,aAAa,CAAC;AAElB;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,QAAQ,GACR,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,gBAAgB,GAAG,CAC7B,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,WAAW,EACnB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,EACzD,OAAO,CAAC,EAAE,uBAAuB,KAC9B,MAAM,GAAG,YAAY,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,YAAY,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;CACtD;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uCAAuC;IACvC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,yBAAyB;IACzB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,oBAAoB;IACpB,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC;AAOD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAmB1E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GACX,iBAAiB,GAAG,SAAS,CAE/B;AAED
|
|
1
|
+
{"version":3,"file":"fieldTypeRegistry.d.ts","sourceRoot":"","sources":["../src/fieldTypeRegistry.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI7D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,OAAO,GACP,QAAQ,GACR,MAAM,GACN,SAAS,GACT,aAAa,CAAC;AAElB;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,QAAQ,GACR,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,gBAAgB,GAAG,CAC7B,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,WAAW,EACnB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,EACzD,OAAO,CAAC,EAAE,uBAAuB,KAC9B,MAAM,GAAG,YAAY,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,YAAY,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;CACtD;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uCAAuC;IACvC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,yBAAyB;IACzB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,oBAAoB;IACpB,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC;AAOD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAmB1E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GACX,iBAAiB,GAAG,SAAS,CAE/B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAIlE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GACX,gBAAgB,GAAG,SAAS,CAI9B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEhE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{getFieldRegistry as
|
|
1
|
+
"use client";import{getFieldRegistry as r}from"./FieldRegistry";const t=new Map;function l(e){const{type:i,components:n}=e;n&&r().registerComponent(i,n.controlled,n.uncontrolled),t.set(i,e)}function a(e){return t.get(e)}function o(e){return r().getFilterType(e)||t.get(e)?.filterType}function s(e){return r().getDisplayFormatter(e)||t.get(e)?.displayFormatter}function p(e){return r().isFilterable(e)?!0:t.get(e)?.filterable??!1}function u(e){return t.get(e)?.valueType}function c(){t.clear()}export{c as clearFieldTypeRegistry,s as getDisplayFormatter,a as getFieldTypeMetadata,o as getFilterType,u as getValueType,p as isFilterable,l as registerBuiltinFieldType};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useEntityForm as
|
|
1
|
+
import{useEntityForm as t}from"./useEntityForm";import{useEntityField as o}from"./useEntityField";import{useController as r}from"./useController";export{r as useController,o as useEntityField,t as useEntityForm};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useController as
|
|
1
|
+
"use client";import{useController as o}from"react-hook-form";function e(r){return o(r)}export{e as useController};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useMemo as s}from"react";import{useController as
|
|
1
|
+
"use client";import{useMemo as s}from"react";import{useController as y}from"./useController";import{isFieldEditable as p}from"../utils";function v(a,e){const{entity:m,operation:o,viewerRole:n,fields:d}=a,l=m.fields[e],i=s(()=>l?{...l,name:l.name||e,label:l.label||e}:{name:e,type:"text",label:e,visibility:"user"},[e,l]),r=s(()=>d.some(f=>f.name===e),[d,e]),b=s(()=>!r||o==="edit"&&i.visibility==="technical"&&i.editable===void 0?!1:p(i.editable,n,o),[r,o,i.visibility,i.editable,n]),{field:c,fieldState:t}=y({name:e,control:a.control}),u=s(()=>({error:t.error?.message,touched:t.isTouched,isDirty:t.isDirty}),[t.error?.message,t.isTouched,t.isDirty]);return{field:c,meta:u,config:i,isEditable:b,isVisible:r}}export{v as useEntityField};
|
|
@@ -4,8 +4,9 @@ import type { UseEntityFormOptions, EntityFormReturn } from '../types';
|
|
|
4
4
|
* Creates a type-safe form instance from an entity definition.
|
|
5
5
|
*
|
|
6
6
|
* Simple, predictable behavior:
|
|
7
|
-
* - Edit mode: defaultValues (DB object) is used as-is
|
|
8
|
-
* - Create mode: starts empty,
|
|
7
|
+
* - Edit mode: defaultValues (DB object) is used as-is, auto-save to localStorage
|
|
8
|
+
* - Create mode: starts empty, auto-save to localStorage
|
|
9
|
+
* - Draft restored on mount with dismissible toast
|
|
9
10
|
*
|
|
10
11
|
* When formId is provided:
|
|
11
12
|
* - Tracks form status (uploading/validating/submitting)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEntityForm.d.ts","sourceRoot":"","sources":["../../../src/forms/hooks/useEntityForm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useEntityForm.d.ts","sourceRoot":"","sources":["../../../src/forms/hooks/useEntityForm.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAW7C,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AAsClB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAC5C,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,oBAAoB,CAAC,CAAC,CAAM,GACpC,gBAAgB,CAAC,CAAC,CAAC,CAmgBrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{valibotResolver as
|
|
1
|
+
"use client";import{valibotResolver as W}from"@hookform/resolvers/valibot";import{useMemo as l,useEffect as P,useRef as d,useCallback as w,createElement as ce}from"react";import{useForm as le,useWatch as fe}from"react-hook-form";import{toast as de,ToastAction as me}from"@donotdev/components";import{useLocalStorage as pe,BACKEND_GENERATED_FIELD_NAMES as Se,createSchemas as ge}from"@donotdev/core";import{useFormStore as I,useFormStatus as he,useUploadProgress as be}from"../../stores";import{useUploadStore as q}from"../../stores/UploadStore";import{checkForBlobUrls as G}from"../../utils/uploadValidation";import{getFieldsForOperation as De}from"../utils";import{buildInitialFromRecord as Ve,buildSchemaDefaults as ve}from"../utils/buildInitialValues";const ye=a=>a;function H(a,F){const e={...a};for(const h of Object.keys(F)){const c=a[h],m=F[h];m!==null&&typeof m=="object"&&!Array.isArray(m)&&c!==null&&typeof c=="object"&&!Array.isArray(c)?e[h]=H(c,m):e[h]=m}return e}function je(a,F={}){const{formId:e,operation:h,defaultValues:c,viewerRole:m,mode:Y="onBlur",t:Q}=F,b=Q??ye,U=m??"guest",u=h??(c?"edit":"create"),X=he(e??""),Z=be(e??""),E=l(()=>ge(a),[a.name]),x=l(()=>W(E.create),[E.create]),B=l(()=>W(E.draft),[E.draft]),ee=l(()=>async(r,s,o)=>((r?.status??c?.status)==="draft"?B:x)(r,s,o),[x,B,c?.status]),R=l(()=>ve(a),[a]),j=c,i=l(()=>{if(u==="create")return R;if(j)return Ve(a,j)},[u,R,a,j]),n=le({defaultValues:u==="create"?i:void 0,mode:Y,resolver:ee,shouldUnregister:!1,shouldFocusError:!0}),T=d(n);P(()=>{T.current=n},[n]);const A=d(null);P(()=>{if(u==="edit"&&i){const r=i.id??null;r&&r!==A.current?(T.current.reset(i),A.current=r):!r&&A.current===null&&(T.current.reset(i),A.current="initialized")}},[u,i]);const k=c?.id,te=l(()=>{const r=`${a.name.toLowerCase()}-form-draft`;return u==="create"?r:k?`${r}-${k}`:`${r}-edit`},[a.name,u,k]),{value:V,setValue:C,removeValue:D}=pe(te,{defaultValue:null,syncAcrossTabs:!0}),v=d(!1);P(()=>{if(v.current)return;const r=s=>{const o=()=>{D(),s&&T.current.reset(s)};de({toastType:"info",title:b("draft.restored",{defaultValue:"Draft restored"}),description:b("draft.restoredDescription",{defaultValue:"Your unsaved changes were recovered"}),action:ce(me,{altText:b("draft.discard",{defaultValue:"Discard"}),onClick:o},b("draft.discard",{defaultValue:"Discard"})),duration:8e3})};if(u==="create"&&!c){V&&(n.reset(V),r(R)),v.current=!0;return}if(u==="edit"&&i){if(V){const s=H(i,V);n.reset(s),r(i)}v.current=!0}},[u,c,V,n,i,D,b,R]);const p=fe({control:n.control}),M=d(!1),y=d(null),O=d(void 0),$=d(!0),L=d(p);P(()=>{if($.current){$.current=!1,O.current=p?JSON.stringify(p):void 0;return}if(M.current||!v.current)return;const r=p?JSON.stringify(p):void 0;if(O.current!==r)return O.current=r,L.current=p,y.current&&clearTimeout(y.current),y.current=setTimeout(()=>{const s=L.current;if(!s)return;Object.values(s).some(t=>t!=null&&t!=="")&&C(s)},3e3),()=>{y.current&&clearTimeout(y.current)}},[p,C]);const J=w(async()=>{if(!e)return!0;const r=q.getState(),s=I.getState();if(!r.hasPendingUploads(e))return!0;try{s.setUploading(e,0),await r.uploadAll(e),await new Promise(g=>setTimeout(g,50));let o=n.getValues(),t=G(o),f=0;const S=5;for(;t.length>0&&f<S;)f++,await new Promise(g=>setTimeout(g,100)),o=n.getValues(),t=G(o);if(t.length>0){const g=`Upload incomplete: files still pending at ${t.join(", ")}`;return s.setError(e,g),!1}return!0}catch(o){const t=o instanceof Error?o.message:"File upload failed";return I.getState().setError(e,t),!1}},[e,n]),_=w(r=>u!=="create"?r:Object.fromEntries(Object.entries(r).filter(([s])=>!Se.includes(s))),[u]),z=w(r=>{if(typeof window>"u")return;const s=Object.keys(r).find(t=>t!=="root"&&r[t]);if(!s)return;const o=document.querySelector(`input[name="${s}"][aria-invalid="true"], textarea[name="${s}"][aria-invalid="true"], select[name="${s}"][aria-invalid="true"]`);o&&(o.scrollIntoView({behavior:"smooth",block:"center"}),o.focus())},[]),K=n.handleSubmit,re=l(()=>((r,s)=>async o=>{o?.preventDefault?.();const t=e?I.getState():null;e&&t&&t.startSubmit(e),M.current=!0;try{if(!await J()){e&&t&&t.setError(e,"Upload failed");return}e&&t&&t.setValidating(e),await K(async(S,g)=>{e&&t&&t.setSubmitting(e);const ue=_(S);try{await r(ue,g),D(),e&&t&&t.setSuccess(e)}catch(N){const ie=N instanceof Error?N.message:"Submission failed";throw e&&t&&t.setError(e,ie),N}},S=>{e&&t&&t.setError(e,"Validation failed"),z(S),s?.(S)})(o)}catch{if(e&&t){const f=t.getStatus(e);f!=="error"&&f!=="idle"&&f!=="success"&&t.reset(e)}}finally{M.current=!1}}),[K,e,J,_,z,u,D]),se=w(()=>{D(),n.reset(i),O.current=i?JSON.stringify(i):void 0,$.current=!0,v.current=!1},[D,n,i]),oe=w(()=>{e&&(I.getState().cleanup(e),q.getState().cleanup(e))},[e]),ne=l(()=>De(a,{operation:u,viewerRole:U,availableFields:void 0}),[a,u,U]),ae=n.formState.isSubmitted||Object.keys(n.formState.touchedFields||{}).length>0;return{...n,handleSubmit:re,fields:ne,operation:u,entity:a,t:b,viewerRole:U,formId:e,formStatus:e?X:"idle",uploadProgress:e?Z:0,cleanup:oe,isDirty:n.formState.isDirty,hasUserInteracted:ae,resetForm:se,originalValues:i}}export{je as useEntityForm};
|
package/dist/forms/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useEntityForm as
|
|
1
|
+
import{useEntityForm as a}from"./hooks/useEntityForm";import{useEntityField as t}from"./hooks/useEntityField";import{useController as e}from"./hooks/useController";import{isFieldEditable as s,getFieldsForOperation as i,validateEntity as l,translateFieldLabel as r,translateLabel as o}from"./utils";export{i as getFieldsForOperation,s as isFieldEditable,r as translateFieldLabel,o as translateLabel,e as useController,t as useEntityField,a as useEntityForm,l as validateEntity};
|
package/dist/forms/types.d.ts
CHANGED
|
@@ -111,14 +111,6 @@ export interface UseEntityFormOptions<E extends Entity> {
|
|
|
111
111
|
* If not provided, uses entity labels or generates from field names.
|
|
112
112
|
*/
|
|
113
113
|
t?: (key: string, options?: Record<string, unknown>) => string;
|
|
114
|
-
/**
|
|
115
|
-
* Enable auto-save to localStorage for crash recovery.
|
|
116
|
-
* Saves form state every 3 seconds (debounced) with multi-tab sync.
|
|
117
|
-
* Auto-generates key: `<entity-name>-form-draft`
|
|
118
|
-
* Auto-cleans up on successful submit.
|
|
119
|
-
* @default false
|
|
120
|
-
*/
|
|
121
|
-
autoSave?: boolean;
|
|
122
114
|
}
|
|
123
115
|
/**
|
|
124
116
|
* Return type for useEntityForm hook.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/forms/types.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,eAAe,EACf,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EACV,aAAa,EAUb,qBAAqB,EACrB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,MAAM,EACN,WAAW,EACX,SAAS,EACT,UAAU,EACV,QAAQ,EACR,eAAe,EACf,WAAW,EACX,eAAe,EACf,UAAU,GACX,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,MAAM,IAAI;KAC7C,CAAC,IAAI,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC,CAAA;KAAE,GAC9D,CAAC,SAAS,SAAS,GACjB,CAAC,SAAS,MAAM,gBAAgB,GAC9B,gBAAgB,CAAC,CAAC,CAAC,GACnB,OAAO,GACT,OAAO,GACT,OAAO;CACZ,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7E;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,MAAM;IACpD;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAE9B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,KAAK,CAAC;IAEhE;;;OAGG;IACH,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/forms/types.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,eAAe,EACf,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EACV,aAAa,EAUb,qBAAqB,EACrB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,MAAM,EACN,WAAW,EACX,SAAS,EACT,UAAU,EACV,QAAQ,EACR,eAAe,EACf,WAAW,EACX,eAAe,EACf,UAAU,GACX,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,MAAM,IAAI;KAC7C,CAAC,IAAI,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC,CAAA;KAAE,GAC9D,CAAC,SAAS,SAAS,GACjB,CAAC,SAAS,MAAM,gBAAgB,GAC9B,gBAAgB,CAAC,CAAC,CAAC,GACnB,OAAO,GACT,OAAO,GACT,OAAO;CACZ,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7E;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,MAAM;IACpD;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAE9B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,KAAK,CAAC;IAEhE;;;OAGG;IACH,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;CAEhE;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,aAAa,CACvE,eAAe,CAAC,CAAC,CAAC,CACnB;IACC;;;OAGG;IACH,MAAM,EAAE,eAAe,EAAE,CAAC;IAE1B;;OAEG;IACH,SAAS,EAAE,QAAQ,GAAG,MAAM,CAAC;IAE7B;;OAEG;IACH,MAAM,EAAE,CAAC,CAAC;IAEV;;OAEG;IACH,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IAE9D;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3B;;;OAGG;IACH,UAAU,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,SAAS,EAAE,MAAM,IAAI,CAAC;IAEtB;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;CAEzD;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB,CAChC,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,eAAe,CAAC,CAAC,CAAC;IAElC;;OAEG;IACH,KAAK,EAAE,qBAAqB,CAC1B,eAAe,CAAC,CAAC,CAAC,EAClB,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAC9B,CAAC;IAEF;;OAEG;IACH,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IAEF;;OAEG;IACH,MAAM,EAAE,WAAW,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function p(c,r){const o=r??{},e={...o};return Object.entries(c.fields).forEach(([n,t])=>{const i=e[n],l=!(n in o)||i===null||i===void 0;if(t.type==="switch"){if(i==null){const u=t.options?.fieldSpecific;e[n]=u?.uncheckedValue??!1}}else l&&(t.type==="price"?e[n]={amount:0,currency:"EUR",vatIncluded:!0,discountPercent:0}:t.type==="checkbox"||t.type==="boolean"?e[n]=!1:t.type==="text"||t.type==="textarea"||t.type==="email"||t.type==="url"||t.type==="tel"||t.type==="iban"||t.type==="password"||t.type==="color"?e[n]="":(t.type==="number"||t.type==="range"||t.type==="rating")&&(e[n]=void 0))}),e}function a(c){return p(c,{})}export{p as buildInitialFromRecord,a as buildSchemaDefaults};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isFieldVisible as
|
|
1
|
+
import{isFieldVisible as u}from"@donotdev/core";import{isFieldEditable as m}from"./isFieldEditable";function g(e,r){const{operation:i,viewerRole:d,availableFields:l}=r,n=d??"guest",f=e&&typeof e=="object"&&"fields"in e&&"name"in e?e.fields:e,b=Object.entries(f),s=[];for(const[a,p]of b){const t=p,o=t.visibility||"guest";if(!u(o,n)||i==="create"&&o==="technical"||i==="edit"&&l&&!l.includes(a))continue;let c=m(t.editable,n,i);i==="edit"&&o==="technical"&&t.editable===void 0&&(c=!1),s.push({name:a,config:t,editable:c})}return s}export{g as getFieldsForOperation};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isFieldEditable as
|
|
1
|
+
import{isFieldEditable as a}from"./isFieldEditable";import{getFieldsForOperation as t}from"./getFieldsForOperation";import{validateEntity as e}from"./validateEntity";import{translateFieldLabel as i,translateLabel as l}from"./translateFieldLabel";export{t as getFieldsForOperation,a as isFieldEditable,i as translateFieldLabel,l as translateLabel,e as validateEntity};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{hasRoleAccess as t,USER_ROLES as
|
|
1
|
+
import{hasRoleAccess as t,USER_ROLES as i}from"@donotdev/core";function r(a,o,s){return a===void 0||a===!0?!0:a===!1?!1:a==="admin"?t(o,i.ADMIN):a==="create-only"?s==="create":!0}export{r as isFieldEditable};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function r(n,s){if(typeof n=="string"&&n.includes(":")){const a=n.split(":"),t=a[1]??n,i=a[0];if(t.startsWith("status.")){const l=s(t);return l!==t&&l!==`${i}:${t}`?l:s(t,{ns:i})}return s(t,{ns:i})}return s(n)}function e(n,s,a){const t=s?.label||n;return r(t,a)}export{e as translateFieldLabel,r as translateLabel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as o from"valibot";import{createSchemas as p}from"@donotdev/core";function
|
|
1
|
+
import*as o from"valibot";import{createSchemas as p}from"@donotdev/core";function i(t,r,c="create"){const e=p(t),u={create:e.create,draft:e.draft,update:e.update,full:e.get}[c],s=o.safeParse(u,r);return s.success?{success:!0,data:s.output}:{success:!1,issues:s.issues.map(a=>({path:a.path?.map(m=>m.key).join(".")||"",message:a.message}))}}export{i as validateEntity};
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { useFileUpload } from './useFileUpload';
|
|
2
2
|
export type { FileMetadata, UseFileUploadOptions } from './useFileUpload';
|
|
3
|
-
export { useUnsavedChangesWarning
|
|
3
|
+
export { useUnsavedChangesWarning } from './useUnsavedChangesWarning';
|
|
4
4
|
export { useEntityFavorites } from './useEntityFavorites';
|
|
5
5
|
export type { UseEntityFavoritesOptions, UseEntityFavoritesReturn, } from './useEntityFavorites';
|
|
6
6
|
export { useCrudFilters } from './useCrudFilters';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EACV,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EACV,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EACV,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC"}
|
package/dist/hooks/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useFileUpload as o}from"./useFileUpload";import{useUnsavedChangesWarning as s
|
|
1
|
+
import{useFileUpload as o}from"./useFileUpload";import{useUnsavedChangesWarning as s}from"./useUnsavedChangesWarning";import{useEntityFavorites as m}from"./useEntityFavorites";import{useCrudFilters as u}from"./useCrudFilters";import{useRelatedItems as i}from"./useRelatedItems";export{u as useCrudFilters,m as useEntityFavorites,o as useFileUpload,i as useRelatedItems,s as useUnsavedChangesWarning};
|
|
@@ -13,20 +13,5 @@ export interface UseCrudFiltersReturn {
|
|
|
13
13
|
/** Toggle favorites-only filter */
|
|
14
14
|
setShowFavoritesOnly: (show: boolean) => void;
|
|
15
15
|
}
|
|
16
|
-
/**
|
|
17
|
-
* Hook for managing collection filters from CrudStore
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```typescript
|
|
21
|
-
* const { filters, setFilters } = useCrudFilters({ collection: 'cars' });
|
|
22
|
-
*
|
|
23
|
-
* <EntityFilters
|
|
24
|
-
* entity={carEntity}
|
|
25
|
-
* data={data}
|
|
26
|
-
* filters={filters}
|
|
27
|
-
* onFiltersChange={setFilters}
|
|
28
|
-
* />
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
16
|
export declare function useCrudFilters(options: UseCrudFiltersOptions): UseCrudFiltersReturn;
|
|
32
17
|
//# sourceMappingURL=useCrudFilters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCrudFilters.d.ts","sourceRoot":"","sources":["../../src/hooks/useCrudFilters.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,qBAAqB;IACrB,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mCAAmC;IACnC,oBAAoB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C;
|
|
1
|
+
{"version":3,"file":"useCrudFilters.d.ts","sourceRoot":"","sources":["../../src/hooks/useCrudFilters.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,qBAAqB;IACrB,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mCAAmC;IACnC,oBAAoB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C;AAoBD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,qBAAqB,GAC7B,oBAAoB,CAmCtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useCallback as o}from"react";import{useCrudStore as s}from"../CrudStore";function
|
|
1
|
+
import{useCallback as o}from"react";import{useCrudStore as s}from"../CrudStore";const c={};function u(r){const{collection:e}=r,i=s(t=>t.collections[e]?.ui?.filters??c),l=o(t=>{s.getState().setFilters(e,t)},[e]),n=s(t=>t.collections[e]?.ui?.showFavoritesOnly??!1),a=o(t=>{s.getState().setShowFavoritesOnly(e,t)},[e]);return{filters:i,setFilters:l,showFavoritesOnly:n,setShowFavoritesOnly:a}}export{u as useCrudFilters};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useCallback as
|
|
1
|
+
import{useCallback as o}from"react";import{useLocalStorage as p}from"@donotdev/core";function y(s={}){const{storageKey:l,collection:u="entities"}=s,d=l||`favorites-${u}`,{value:i,setValue:a,isLoaded:c}=p(d,{defaultValue:[]}),n=o(e=>i.includes(e),[i]),v=o(e=>{a(t=>t.includes(e)?t.filter(r=>r!==e):[...t,e])},[a]),f=o(e=>{a(t=>t.includes(e)?t:[...t,e])},[a]),F=o(e=>{a(t=>t.filter(r=>r!==e))},[a]),m=o(()=>{a([])},[a]),g=o(e=>i.includes(e.id),[i]);return{favorites:i,isFavorite:n,toggleFavorite:v,addFavorite:f,removeFavorite:F,clearFavorites:m,favoritesFilter:g,isLoaded:c}}export{y as useEntityFavorites};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFileUpload.d.ts","sourceRoot":"","sources":["../../src/hooks/useFileUpload.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAK9C,8CAA8C;AAC9C,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,6CAA6C;IAC7C,IAAI,EAAE,IAAI,CAAC;IACX,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,uCAAuC;IACvC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,qCAAqC;IACrC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C,oCAAoC;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,CACT,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,KACnC,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AA4DD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAgB,EAChB,QAAa,EACb,OAA0B,EAC1B,MAAW,EACX,WAAuB,EACvB,QAAQ,GACT,EAAE,oBAAoB;
|
|
1
|
+
{"version":3,"file":"useFileUpload.d.ts","sourceRoot":"","sources":["../../src/hooks/useFileUpload.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAK9C,8CAA8C;AAC9C,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,6CAA6C;IAC7C,IAAI,EAAE,IAAI,CAAC;IACX,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,uCAAuC;IACvC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,qCAAqC;IACrC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C,oCAAoC;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,CACT,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,KACnC,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AA4DD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAgB,EAChB,QAAa,EACb,OAA0B,EAC1B,MAAW,EACX,WAAuB,EACvB,QAAQ,GACT,EAAE,oBAAoB;IA+anB,yCAAyC;;IAEzC,4CAA4C;yBAvGjC,IAAI,EAAE;IAyGjB,0BAA0B;qBAhCrB,MAAM;IAkCX,2CAA2C;;IAE3C,oCAAoC;;IAEpC,6BAA6B;;IAE7B,qDAAqD;;IAErD,sFAAsF;;EAGzF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useState as
|
|
1
|
+
"use client";import{useState as T,useCallback as v,useEffect as A,useRef as g,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(),p=Math.random().toString(36).slice(2,11);return`file-${P}-${a}-${p}`}function H(s){return URL.createObjectURL(s)}function k(s){s.startsWith("blob:")&&URL.revokeObjectURL(s)}function K(s,a,p){return a.length>0&&!a.some(u=>{if(u.endsWith("/*")){const U=u.slice(0,-2);return s.type.startsWith(U)}return s.type===u})?{valid:!1,error:`File type ${s.type} not accepted`}:s.size>p?{valid:!1,error:`File exceeds ${(p/1048576).toFixed(0)}MB limit`}:{valid:!0}}function Q({name:s,value:a,onChange:p,multiple:u=!1,maxFiles:U=10,maxSize:E=10*1024*1024,accept:b=[],storagePath:V="uploads",uploadFn:y}){const h=G(),w=!!h,[d,c]=T([]),R=g(!1),$=g(null),x=g(a),L=g([]),F=g(!1),M=g(null);A(()=>{if(R.current){R.current=!1;return}const l=a?JSON.stringify((Array.isArray(a)?a:[a]).map(n=>n.fullUrl).filter(Boolean)):null;l!==$.current&&($.current=l,x.current=a,q(()=>{if(a){const n=(Array.isArray(a)?a:[a]).filter(t=>t.fullUrl).map((t,r)=>({id:`${W(t.fullUrl)}-existing-${r}`,file:new File([],"existing"),previewURL:t.thumbUrl||t.fullUrl,progress:100,uploaded:t,error:null}));c(n)}else c([])}))},[a]),A(()=>{L.current=d},[d]),A(()=>{F.current&&(F.current=!1,M.current?.(d,!0))},[d]),A(()=>()=>{L.current.forEach(l=>k(l.previewURL))},[]);const f=v((l,n=!1)=>{const t=(n?l.filter(i=>!i.error):l.filter(i=>i.uploaded&&!i.error)).map(i=>i.uploaded?i.uploaded:n&&w?{fullUrl:i.previewURL,thumbUrl:i.previewURL}:null).filter(i=>i!==null);let r;u?r=t.length>0?t:null:r=t[0]||null;const e=x.current;(()=>{if(!r&&!e)return!1;if(!r||!e)return!0;if(u&&Array.isArray(r)&&Array.isArray(e)){if(r.length!==e.length)return!0;const i=r.map(m=>m.fullUrl).join(","),o=e.map(m=>m.fullUrl).join(",");return i!==o}return!u&&!Array.isArray(r)&&!Array.isArray(e)?r.fullUrl!==e.fullUrl:!0})()&&(R.current=!0,x.current=r,p(r))},[u,p,w]);M.current=f;const S=v(async()=>{if(!y)return;let l=[];if(c(t=>(l=t.filter(r=>!r.uploaded&&!r.error),l.length===0?t:t.map(r=>l.some(e=>e.id===r.id)?{...r,progress:0}:r))),l.length===0)return;const n=await Promise.allSettled(l.map(async t=>{try{const r=await y(t.file,e=>{c(i=>i.map(o=>o.id===t.id?{...o,progress:e}:o))});return{id:t.id,picture:r,error:null}}catch(r){const e=r instanceof Error?r.message:"Upload failed";return{id:t.id,picture:null,error:e}}}));c(t=>{const r=t.map(e=>{const i=n.find(o=>o.status==="fulfilled"&&o.value.id===e.id);if(i&&i.status==="fulfilled"){const o=i.value;return{...e,uploaded:o.picture,progress:o.picture?100:null,error:o.error}}return e});return f(r,!1),r})},[y,f]),j=g(S);j.current=S,A(()=>{if(!(!h||!s))return N.getState().registerUpload(h,s,async()=>{await j.current()},()=>L.current.some(l=>!l.uploaded&&!l.error)),()=>{N.getState().unregisterUpload(h,s)}},[h,s]);const O=v(async l=>{if(y){c(n=>n.map(t=>t.id===l.id?{...t,progress:0}:t));try{const n=await y(l.file,t=>{c(r=>r.map(e=>e.id===l.id?{...e,progress:t}:e))});c(t=>{const r=t.map(e=>e.id===l.id?{...e,uploaded:n,progress:100,error:null}:e);return f(r,!1),r})}catch(n){const t=n instanceof Error?n.message:"Upload failed";c(r=>r.map(e=>e.id===l.id?{...e,error:t,progress:null}:e))}}},[y,f]),z=v(l=>{c(n=>{const t=(u?U:1)-n.length;if(t<=0)return C(new Error("Maximum files reached"),{userMessage:u?`Maximum ${U} files allowed`:"Only one file allowed",severity:"warning",showNotification:!0}),n;const r=l.slice(0,t),e=[];for(const o of r){const m=K(o,b,E);if(!m.valid){C(new Error(m.error),{userMessage:m.error,severity:"warning",showNotification:!0});continue}e.push({id:W(),file:o,previewURL:H(o),progress:null,uploaded:null,error:null})}if(e.length===0)return n;const i=u?[...n,...e]:e;return w?F.current=!0:e.forEach(o=>O(o)),i})},[u,U,b,E,w,O,f]),B=v(l=>{c(n=>{const t=n.find(e=>e.id===l);t&&k(t.previewURL);const r=n.filter(e=>e.id!==l);return f(r,!1),r})},[f]),D=d.some(l=>!l.uploaded&&!l.error),I=d.some(l=>l.progress!==null&&l.progress<100),J=d.length>0?d.reduce((l,n)=>l+(n.progress??0),0)/d.length:0;return{files:d,addFiles:z,removeFile:B,hasPending:D,isUploading:I,progress:J,formId:h,isDeferred:w}}export{Q as useFileUpload};
|
|
@@ -1 +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,
|
|
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,CA0B3C;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,SAA4C,GAClD,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useEffect as
|
|
1
|
+
"use client";import{useEffect as i}from"react";import{isClient as a}from"@donotdev/core";import{useFormStore as s}from"../stores";function u({enabled:e=!0,message:n="You have unsaved changes. Are you sure you want to leave?"}={}){const r=s(o=>Object.values(o.forms).some(t=>t.isDirty));i(()=>{if(!e||!r||!a())return;const o=t=>(t.preventDefault(),t.returnValue=n,n);return window.addEventListener("beforeunload",o),()=>{window.removeEventListener("beforeunload",o)}},[e,r,n])}async function m(e="You have unsaved changes. Discard them?"){return!a()||!s.getState().hasDirtyForms()?!0:window.confirm(e)}var c=u;export{m as checkFormNavigation,c as default,u as useFormNavigationGuard};
|
|
@@ -32,6 +32,5 @@ export interface UseRelatedItemsReturn<T> {
|
|
|
32
32
|
* );
|
|
33
33
|
* ```
|
|
34
34
|
*/
|
|
35
|
-
export declare function useRelatedItems<T extends Record<string,
|
|
36
|
-
export default useRelatedItems;
|
|
35
|
+
export declare function useRelatedItems<T extends Record<string, unknown>>(entity: Entity, currentItem: T | null | undefined, allItems: T[] | null | undefined, matchFields: string[], options?: UseRelatedItemsOptions): UseRelatedItemsReturn<T>;
|
|
37
36
|
//# sourceMappingURL=useRelatedItems.d.ts.map
|
|
@@ -1 +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,
|
|
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,OAAO,CAAC,EAC/D,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useMemo as
|
|
1
|
+
"use client";import{useMemo as p}from"react";function N(o,e,t,n,h={}){const{limit:a=3,tolerance:m=.2}=h,c=p(()=>{if(!e||!t||t.length===0||n.length===0)return[];const b=e.id;return t.filter(f=>f.id===b?!1:n.some(s=>{const r=o.fields[s];if(!r)return!1;const i=e[s],u=f[s];if(i==null||u==null)return!1;if(r.type==="number"||r.type==="range"||r.type==="year"){const l=Number(i),g=Number(u);if(isNaN(l)||isNaN(g))return!1;const d=Math.abs(l*m);return Math.abs(g-l)<=d}return String(i)===String(u)})).slice(0,a)},[e,t,n,o.fields,a,m]);return{items:c,hasItems:c.length>0}}export{N as useRelatedItems};
|
|
@@ -5,18 +5,15 @@ export interface UseUnsavedChangesWarningOptions {
|
|
|
5
5
|
enabled?: boolean;
|
|
6
6
|
/** Custom message for beforeunload (browsers often ignore this) */
|
|
7
7
|
message?: string;
|
|
8
|
-
/** Callback when user tries to navigate away - return false to block, true to allow */
|
|
9
|
-
onBeforeNavigate?: () => boolean | Promise<boolean>;
|
|
10
8
|
}
|
|
11
9
|
/**
|
|
12
|
-
* Hook to warn users about unsaved changes
|
|
10
|
+
* Hook to warn users about unsaved changes on browser close/refresh only.
|
|
13
11
|
*
|
|
14
12
|
* Handles:
|
|
15
13
|
* - Browser refresh/close (beforeunload event)
|
|
16
14
|
* - Browser back/forward (beforeunload event)
|
|
17
15
|
*
|
|
18
|
-
*
|
|
19
|
-
* with your router's navigation blocking mechanism.
|
|
16
|
+
* Does NOT block SPA navigation — auto-save handles that.
|
|
20
17
|
*
|
|
21
18
|
* @example
|
|
22
19
|
* ```tsx
|
|
@@ -28,24 +25,6 @@ export interface UseUnsavedChangesWarningOptions {
|
|
|
28
25
|
* });
|
|
29
26
|
* ```
|
|
30
27
|
*/
|
|
31
|
-
export declare function useUnsavedChangesWarning({ isDirty, enabled, message,
|
|
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>;
|
|
28
|
+
export declare function useUnsavedChangesWarning({ isDirty, enabled, message, }: UseUnsavedChangesWarningOptions): void;
|
|
50
29
|
export default useUnsavedChangesWarning;
|
|
51
30
|
//# sourceMappingURL=useUnsavedChangesWarning.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUnsavedChangesWarning.d.ts","sourceRoot":"","sources":["../../src/hooks/useUnsavedChangesWarning.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useUnsavedChangesWarning.d.ts","sourceRoot":"","sources":["../../src/hooks/useUnsavedChangesWarning.ts"],"names":[],"mappings":"AAqBA,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;CAClB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,OAAO,EACP,OAAc,EACd,OAAqE,GACtE,EAAE,+BAA+B,GAAG,IAAI,CAgBxC;AAED,eAAe,wBAAwB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useEffect as
|
|
1
|
+
"use client";import{useEffect as u}from"react";import{isClient as a}from"@donotdev/core";function f({isDirty:n,enabled:r=!0,message:e="You have unsaved changes. Are you sure you want to leave?"}){u(()=>{if(!r||!n||!a())return;const o=t=>(t.preventDefault(),t.returnValue=e,e);return window.addEventListener("beforeunload",o),()=>{window.removeEventListener("beforeunload",o)}},[n,r,e])}var l=f;export{l as default,f as useUnsavedChangesWarning};
|
package/dist/index.d.ts
CHANGED
|
@@ -11,10 +11,12 @@ export * from './useCrudList';
|
|
|
11
11
|
export * from './useCrudCardList';
|
|
12
12
|
export * from './components';
|
|
13
13
|
export * from './stores';
|
|
14
|
+
export { FunctionsAdapter } from './adapters/FunctionsAdapter';
|
|
15
|
+
export type { FunctionsQueryOptions } from './adapters/FunctionsAdapter';
|
|
14
16
|
export { getCrudService } from './CrudService';
|
|
15
|
-
export type { QueryOptions } from './CrudService';
|
|
16
17
|
export { useCrudStore } from './CrudStore';
|
|
17
|
-
export type { CrudServiceInterface, CrudState, CrudActions,
|
|
18
|
+
export type { CrudServiceInterface, CrudState, CrudActions, OptimisticStatus, OptimisticMeta, CrudOperation, CrudStoreApi, CacheOptions, MutationOptions, FilterState, CollectionUIState, } from './types';
|
|
19
|
+
export { OPTIMISTIC_STATUSES, CRUD_OPERATION } from './types';
|
|
18
20
|
export { loadDeterministicRange, upsertDeterministic, appendToCollection, } from './utils/collections';
|
|
19
21
|
export { getFieldRegistry, registerFieldType, isFieldTypeRegistered, type FieldTypeRegistration, type ControlledFieldProps, type UncontrolledFieldProps, } from './FieldRegistry';
|
|
20
22
|
export { registerBuiltinFieldType, getFieldTypeMetadata, getFilterType, getDisplayFormatter, isFilterable, getValueType, clearFieldTypeRegistry, type FieldTypeMetadata, type FilterType, type ValueType, type DisplayFormatter, type ComponentRegistration, } from './fieldTypeRegistry';
|
|
@@ -23,7 +25,7 @@ export { useEntityForm, useEntityField, useController, isFieldEditable, getField
|
|
|
23
25
|
export type { ViewerRole, RenderableField, GetFieldsForOperationOptions, EntityFieldsInput, SchemaOperation, ValidationIssue, ValidationResult, InferEntityData, InferEntityInput, InferEntityOutput, UseEntityFormOptions, EntityFormReturn, EntityFieldReturn, UseControllerProps, UseControllerReturn, ControllerRenderProps, ControllerFieldState, } from './forms';
|
|
24
26
|
export { UploadProvider, useUploadContext } from './contexts';
|
|
25
27
|
export type { UploadProviderProps } from './contexts';
|
|
26
|
-
export { useFileUpload, useUnsavedChangesWarning,
|
|
28
|
+
export { useFileUpload, useUnsavedChangesWarning, useEntityFavorites, useRelatedItems, useCrudFilters, } from './hooks';
|
|
27
29
|
export type { FileMetadata, UseFileUploadOptions, UseEntityFavoritesOptions, UseEntityFavoritesReturn, UseRelatedItemsOptions, UseRelatedItemsReturn, UseCrudFiltersOptions, UseCrudFiltersReturn, } from './hooks';
|
|
28
30
|
export { isStorageUrl, validatePicture, checkForBlobUrls, hasBlobUrls, } from './utils/uploadValidation';
|
|
29
31
|
//# 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;
|
|
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;AAIzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGzE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAI/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,YAAY,EACV,oBAAoB,EACpB,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,WAAW,EACX,iBAAiB,GAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9D,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,kBAAkB,EAClB,eAAe,EACf,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,YAAY,EACZ,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GACrB,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{
|
|
1
|
+
export*from"./useCrud";export*from"./useCrudList";export*from"./useCrudCardList";export*from"./components";export*from"./stores";import{FunctionsAdapter as a}from"./adapters/FunctionsAdapter";import{getCrudService as d}from"./CrudService";import{useCrudStore as n}from"./CrudStore";import{OPTIMISTIC_STATUSES as u,CRUD_OPERATION as x}from"./types";import{loadDeterministicRange as g,upsertDeterministic as y,appendToCollection as T}from"./utils/collections";import{getFieldRegistry as C,registerFieldType as U,isFieldTypeRegistered as E}from"./FieldRegistry";import{registerBuiltinFieldType as S,getFieldTypeMetadata as b,getFilterType as v,getDisplayFormatter as I,isFilterable as B,getValueType as D,clearFieldTypeRegistry as O}from"./fieldTypeRegistry";import{registerBuiltinFieldTypes as h}from"./builtinFieldTypes";import{useEntityForm as L,useEntityField as M,useController as _,isFieldEditable as k,getFieldsForOperation as N,validateEntity as V,translateFieldLabel as W,translateLabel as j}from"./forms";import{UploadProvider as w,useUploadContext as z}from"./contexts";import{useFileUpload as H,useUnsavedChangesWarning as J,useEntityFavorites as K,useRelatedItems as Q,useCrudFilters as X}from"./hooks";import{isStorageUrl as Z,validatePicture as $,checkForBlobUrls as ee,hasBlobUrls as re}from"./utils/uploadValidation";export{x as CRUD_OPERATION,a as FunctionsAdapter,u as OPTIMISTIC_STATUSES,w as UploadProvider,T as appendToCollection,ee as checkForBlobUrls,O as clearFieldTypeRegistry,d as getCrudService,I as getDisplayFormatter,C as getFieldRegistry,b as getFieldTypeMetadata,N as getFieldsForOperation,v as getFilterType,D as getValueType,re as hasBlobUrls,k as isFieldEditable,E as isFieldTypeRegistered,B as isFilterable,Z as isStorageUrl,g as loadDeterministicRange,S as registerBuiltinFieldType,h as registerBuiltinFieldTypes,U as registerFieldType,W as translateFieldLabel,j as translateLabel,y as upsertDeterministic,_ as useController,X as useCrudFilters,n as useCrudStore,K as useEntityFavorites,M as useEntityField,L as useEntityForm,H as useFileUpload,Q as useRelatedItems,J as useUnsavedChangesWarning,z as useUploadContext,V as validateEntity,$ as validatePicture};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerBuiltinFieldTypes.d.ts","sourceRoot":"","sources":["../src/registerBuiltinFieldTypes.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registerBuiltinFieldTypes.d.ts","sourceRoot":"","sources":["../src/registerBuiltinFieldTypes.tsx"],"names":[],"mappings":"AA43BA;;;GAGG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CA+sBnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as p,jsxs as u}from"react/jsx-runtime";import{Text as m,Stack as b,ImageGallery as I,Rating as $,CopyToClipboard as k}from"@donotdev/components";import{formatCurrency as x}from"@donotdev/core";import{ControlledCheckboxField as A,ControlledComboboxField as v,ControlledDateField as T,ControlledDropdownField as N,ControlledFileField as P,ControlledMultiFileField as M,ControlledDocumentField as _,ControlledMultiDocumentField as R,ControlledGeoPointField as B,ControlledImageField as E,ControlledMapField as U,ControlledMultiDropdownField as H,ControlledMultiInputField as K,ControlledNumberField as O,ControlledPasswordField as Y,ControlledPhoneField as G,ControlledRangeField as W,ControlledRatingField as q,ControlledDurationField as J,ControlledRadioField as Q,ControlledYearField as X,ControlledTextField as y,ControlledTextareaField as Z,ControlledRichTextField as ee,ControlledTimestampField as te,ControlledAddressField as re,ControlledSwitchField as ne,ControlledMultiImageField as oe,ControlledGdprConsentField as le,ControlledCurrencyField as ie,ControlledPriceField as ae}from"./components/controlled";import{AvatarFieldComponent as ce,BadgeFieldComponent as se,ButtonFieldComponent as D,HiddenFieldComponent as pe,TextAreaComponent as de,RichTextComponent as fe,TextFieldComponent as C}from"./components/form/fields";import{registerBuiltinFieldType as a}from"./fieldTypeRegistry";import{translateLabel as h}from"./forms/utils";function d(e){return e?p("span",{style:{color:"var(--muted-foreground)"},children:"\u2014"}):p(m,{variant:"muted",children:"\u2014"})}const c={timestamp:(e,l,o,t)=>{const r=t?.compact??!1;if(e==null||e==="")return d(r);try{return(e instanceof Date?e:new Date(e)).toLocaleString()}catch{return String(e)}},date:(e,l,o,t)=>{const r=t?.compact??!1;if(e==null||e==="")return d(r);try{return(e instanceof Date?e:new Date(e)).toLocaleDateString()}catch{return String(e)}},"datetime-local":(e,l,o,t)=>{const r=t?.compact??!1;if(e==null||e==="")return d(r);try{return(e instanceof Date?e:new Date(e)).toLocaleString()}catch{return String(e)}},time:(e,l,o,t)=>{const r=t?.compact??!1;if(e==null||e==="")return d(r);try{return(e instanceof Date?e:new Date(e)).toLocaleTimeString()}catch{return String(e)}},week:(e,l,o,t)=>{const r=t?.compact??!1;return e==null||e===""?d(r):String(e)},month:(e,l,o,t)=>{const r=t?.compact??!1;return e==null||e===""?d(r):String(e)},boolean:(e,l,o)=>e?"Yes":"No",checkbox:(e,l,o)=>e?"Yes":"No",switch:(e,l,o)=>{const t=l.options?.fieldSpecific;if(t){const r=t.uncheckedValue??!1,n=t.checkedValue??!0;if(e===n&&t.checkedLabel)return h(t.checkedLabel,o);if(e===r&&t.uncheckedLabel)return h(t.uncheckedLabel,o)}return e?"Yes":"No"},year:(e,l,o)=>String(e),number:(e,l,o)=>typeof e=="number"?e.toLocaleString():String(e),currency:(e,l,o)=>{if(e==null||isNaN(e))return"";const n=(l.options||{}).fieldSpecific?.currency||"EUR";return x(e,n)},price:(e,l,o,t)=>{const r=t?.compact??!1,n=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 d(r);const s=i.amount;if(s==null||isNaN(s))return d(r);const f=i.currency||"EUR",V=i.vatIncluded??!0,g=i.discountPercent??0,S=g>0?s*(1-g/100):s,F=V?` ${o("crud:price.vatIncluded",{defaultValue:"VAT Incl."})}`:"";if(g>0){const z=x(s,f),w=x(S,f),j=` ${o("crud:price.discountPercent",{percent:Math.round(g),defaultValue:"-{{percent}}%"})}`;return n?`${w}${F}${j}`:r?u(m,{variant:"success",weight:"bold",children:[w,F,j]}):u(b,{direction:"column",gap:"tight",align:"end",children:[p(m,{variant:"muted",style:{textDecoration:"line-through",fontSize:"var(--font-size-sm)"},children:z}),u(m,{variant:"success",weight:"bold",children:[w,F]})]})}return`${x(s,f)}${F}`},range:(e,l,o)=>typeof e=="number"?e.toLocaleString():String(e),rating:(e,l,o,t)=>{const r=t?.compact??!1;if(e==null)return d(r);const n=typeof e=="number"?e:parseFloat(e);if(isNaN(n))return d(r);const i=l.validation?.max??5;return p($,{value:n,max:i,readonly:!0,"aria-label":`${n} out of ${i} stars`})},duration:(e,l,o,t)=>{const r=t?.compact??!1;if(e==null)return d(r);const n=typeof e=="number"?e:parseInt(String(e),10);if(Number.isNaN(n))return d(r);if(n===0)return o("crud:duration.zero",{defaultValue:"\u2014"});if(n<60)return o("crud:duration.minutes",{count:n,defaultValue:`${n} min`});const i=Math.floor(n/60),s=n%60;return o("crud:duration.hoursMinutes",{hours:i,minutes:s,defaultValue:s===0?`${i}h`:`${i}h ${s}min`})},gdprConsent:(e,l,o,t)=>{const r=t?.compact??!1;if(!e||typeof e!="object")return d(r);const n=e.gdprConsent===!0,i=e.gdprConsentDate,s=e.gdprConsentVersion,f=o("crud:gdprConsent.display.yes",{defaultValue:"Consented"}),V=o("crud:gdprConsent.display.no",{defaultValue:"Not consented"});if(!n)return V;const g=[f];if(i)try{const S=new Date(i);g.push(S.toLocaleDateString())}catch{g.push(i)}return s&&g.push(`v${s}`),g.join(" \xB7 ")},select:(e,l,o)=>{const t=l.validation?.options;if(Array.isArray(t)){const n=t.find(i=>i.value===e)?.label;return n?h(n,o):String(e)}return String(e)},radio:(e,l,o)=>{const t=l.validation?.options;if(Array.isArray(t)){const n=t.find(i=>i.value===e)?.label;return n?h(n,o):String(e)}return String(e)},combobox:(e,l,o)=>{const t=l.validation?.options;if(Array.isArray(t)){const n=t.find(i=>i.value===e)?.label;return n?h(n,o):String(e)}return String(e)},multiselect:(e,l,o)=>{if(Array.isArray(e)){const t=l.validation?.options;if(Array.isArray(t))return e.map(n=>{const s=t.find(f=>f.value===n)?.label;return s?h(s,o):n}).join(", ")}return String(e)},image:(e,l,o,t)=>{const r=t?.compact??!1;return e==null||e===""?d(r):typeof e=="string"?p("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)"}}):d(r)},images:(e,l,o,t)=>{const r=t?.compact??!1;if(!Array.isArray(e)||e.length===0)return d(r);const n=e[0],i=typeof n=="object"&&n.thumbUrl?n.thumbUrl:n;return r?u("div",{style:{display:"flex",alignItems:"center",gap:"var(--gap-xs)"},children:[p("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]})]}):p(I,{images:e,altPrefix:l.label||"Image"})},files:(e,l,o,t)=>{const r=t?.compact??!1;return!Array.isArray(e)||e.length===0?d(r):p(b,{gap:"tight",children:e.map((n,i)=>u("a",{href:n.url||n,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none",display:"flex",alignItems:"center",fontSize:"var(--font-size-sm)"},children:[n.filename||`File ${i+1}`,n.size&&u(m,{level:"caption",variant:"muted",style:{marginLeft:"var(--gap-sm)"},children:["(",Math.round(n.size/1024)," KB)"]})]},i))})},documents:(e,l,o,t)=>{const r=t?.compact??!1;return!Array.isArray(e)||e.length===0?d(r):p(b,{gap:"tight",children:e.map((n,i)=>u("a",{href:n.url||n,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none",display:"flex",alignItems:"center",fontSize:"var(--font-size-sm)"},children:[n.filename||`File ${i+1}`,n.size&&u(m,{level:"caption",variant:"muted",style:{marginLeft:"var(--gap-sm)"},children:["(",Math.round(n.size/1024)," KB)"]})]},i))})},file:(e,l,o,t)=>{const r=t?.compact??!1;if(!e)return d(r);const n=typeof e=="string"?e:e.url,i=typeof e=="string"?"View file":e.filename||"View file";return u("a",{href:n,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,o,t)=>{const r=t?.compact??!1;if(!e)return d(r);const n=typeof e=="string"?e:e.url,i=typeof e=="string"?"View file":e.filename||"View file";return u("a",{href:n,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,o,t)=>{const r=t?.compact??!1;if(!e)return d(r);if(typeof e=="object"&&e!==null){const n=e.displayName||e.name||e.id||String(e);return String(n)}return String(e)},geopoint:(e,l,o,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)}`:d(r)},address:(e,l,o)=>e&&typeof e=="object"&&"formatted_address"in e?e.formatted_address:String(e),map:(e,l,o,t)=>{const r=t?.compact??!1;if(e&&typeof e=="object"){const n=Object.entries(e);return n.length===0?d(r):u(b,{direction:"column",gap:"tight",children:[n.slice(0,5).map(([i,s])=>u(m,{style:{fontSize:"var(--font-size-sm)"},children:[u("strong",{children:[i,":"]})," ",String(s)]},i)),n.length>5&&u(m,{variant:"muted",children:["+",n.length-5," more"]})]})}return d(r)},array:(e,l,o,t)=>{const r=t?.compact??!1;return Array.isArray(e)?e.length===0?d(r):e.join(", "):d(r)},password:()=>"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",email:(e,l,o)=>u(b,{direction:"row",gap:"tight",align:"center",children:[p("a",{href:`mailto:${e}`,style:{color:"var(--primary)",flex:1},onClick:t=>t.stopPropagation(),children:e}),p(k,{text:e,tooltipText:o("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:o("crud:actions.copyEmail",{defaultValue:"Copy email"}),onClick:t=>t.stopPropagation()})]}),tel:(e,l,o)=>u(b,{direction:"row",gap:"tight",align:"center",children:[p("a",{href:`tel:${e}`,style:{color:"var(--primary)",flex:1},onClick:t=>t.stopPropagation(),children:e}),p(k,{text:e,tooltipText:o("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:o("crud:actions.copyPhone",{defaultValue:"Copy phone"}),onClick:t=>t.stopPropagation()})]}),iban:(e,l,o,t)=>{const r=t?.compact??!1;return e?u(b,{direction:"row",gap:"tight",align:"center",children:[p(m,{style:{flex:1},children:e}),p(k,{text:e,tooltipText:o("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:o("crud:actions.copyIban",{defaultValue:"Copy IBAN"}),onClick:n=>n.stopPropagation()})]}):d(r)},url:(e,l,o)=>p("a",{href:e,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)"},children:e}),color:(e,l,o)=>u(b,{direction:"row",gap:"tight",align:"center",children:[p("div",{style:{width:"20px",height:"20px",backgroundColor:e,borderRadius:"var(--radius-sm)",border:"1px solid var(--border)"}}),p(m,{children:e})]}),textarea:(e,l,o)=>String(e),text:(e,l,o)=>String(e),richtext:(e,l,o,t)=>{const r=t?.compact??!1;return e&&typeof e=="string"?r?e.replace(/<[^>]*>/g,"").trim()||p("span",{style:{color:"var(--muted-foreground)"},children:"\u2014"}):p("div",{dangerouslySetInnerHTML:{__html:e},style:{padding:"var(--gap-sm)",fontSize:"var(--font-size-sm)",lineHeight:"1.6"}}):d(r)}};function ue(e){return e.type==="avatar"}function ye(e){return e.type==="badge"}let L=!1;function me(){L||(L=!0,a({type:"text",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.text,components:{controlled:y,uncontrolled:e=>{const{value:l,onChange:o,label:t,error:r,config:n}=e;return p(C,{label:t||"",value:typeof l=="string"?l:"",onChange:s=>{const f=s.target.value;o(f)},error:r,...n.options})}}}),a({type:"email",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.email,components:{controlled:y,uncontrolled:e=>{const{value:l,onChange:o,label:t,error:r,config:n}=e;return p(C,{label:t||"",value:typeof l=="string"?l:"",onChange:s=>{const f=s.target.value;o(f)},error:r,type:"email",...n.options})}}}),a({type:"url",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.url,components:{controlled:y,uncontrolled:e=>{const{value:l,onChange:o,label:t,error:r,config:n}=e;return p(C,{label:t||"",value:typeof l=="string"?l:"",onChange:s=>{const f=s.target.value;o(f)},error:r,type:"url",...n.options})}}}),a({type:"color",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.color,components:{controlled:y,uncontrolled:e=>{const{value:l,onChange:o,label:t,error:r,config:n}=e;return p(C,{label:t||"",value:typeof l=="string"?l:"",onChange:s=>{const f=s.target.value;o(f)},error:r,type:"color",...n.options})}}}),a({type:"textarea",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.textarea,components:{controlled:Z,uncontrolled:e=>{const{value:l,onChange:o,label:t,error:r,config:n}=e;return p(de,{label:t||"",value:typeof l=="string"?l:"",onChange:s=>{const f=s.target.value;o(f)},error:r,...n.options})}}}),a({type:"richtext",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.richtext,components:{controlled:ee,uncontrolled:e=>{const{value:l,onChange:o,label:t,error:r,config:n}=e;return p(fe,{label:t||"",value:typeof l=="string"?l:"",onChange:s=>{const f=s.target.value;o(f)},error:r,...n.options})}}}),a({type:"password",filterable:!1,filterType:"none",valueType:"string",displayFormatter:c.password,components:{controlled:Y}}),a({type:"tel",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.tel,components:{controlled:G}}),a({type:"iban",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.iban,components:{controlled:y,uncontrolled:e=>{const{value:l,onChange:o,label:t,error:r,config:n}=e;return p(C,{label:t||"",value:typeof l=="string"?l:"",onChange:s=>{const f=s.target.value.replace(/\s/g,"").toUpperCase();o(f)},error:r,...n.options})}}}),a({type:"number",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.number,components:{controlled:O}}),a({type:"currency",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.currency,components:{controlled:ie}}),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:X}}),a({type:"rating",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.rating,components:{controlled:q}}),a({type:"duration",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.duration,components:{controlled:J}}),a({type:"boolean",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.boolean,components:{controlled:A}}),a({type:"checkbox",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.checkbox,components:{controlled:A}}),a({type:"gdprConsent",filterable:!0,filterType:"select",valueType:"object",displayFormatter:c.gdprConsent,components:{controlled:le}}),a({type:"switch",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.switch,components:{controlled:ne}}),a({type:"date",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.date,components:{controlled:T}}),a({type:"datetime-local",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c["datetime-local"],components:{controlled:T}}),a({type:"time",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.time,components:{controlled:T}}),a({type:"week",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.week,components:{controlled:T}}),a({type:"month",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.month,components:{controlled:T}}),a({type:"timestamp",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.timestamp,components:{controlled:te}}),a({type:"file",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.file,components:{controlled:P}}),a({type:"files",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.files,components:{controlled:M}}),a({type:"document",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.document,components:{controlled:_}}),a({type:"documents",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.documents,components:{controlled:R}}),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:oe}}),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:re}}),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:N}}),a({type:"combobox",filterable:!0,filterType:"select",valueType:"string",displayFormatter:c.combobox,components:{controlled:v}}),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:Q}}),a({type:"reference",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.reference,components:{controlled:y}}),a({type:"hidden",filterable:!1,filterType:"none",valueType:"string",components:{controlled:y,uncontrolled:e=>{const{name:l,value:o}=e;return p(pe,{name:l,value:typeof o=="string"?o:""})}}}),a({type:"avatar",filterable:!1,filterType:"none",valueType:"string",components:{controlled:y,uncontrolled:e=>{const{value:l,onChange:o,error:t,config:r,t:n}=e;if(!ue(r))throw new Error("Invalid config type for avatar field");return p(ce,{config:r,value:typeof l=="string"?l:"",onChange:s=>{o(s)},error:!!t,helperText:t||void 0,t:n,...r.options})}}}),a({type:"badge",filterable:!1,filterType:"none",valueType:"string",components:{controlled:y,uncontrolled:e=>{const{value:l,onChange:o,error:t,config:r,t:n}=e;if(!ye(r))throw new Error("Invalid config type for badge field");return p(se,{config:r,value:typeof l=="string"?l:"",onChange:s=>{o(s)},error:!!t,helperText:t||void 0,t:n,...r.options})}}}),a({type:"submit",filterable:!1,filterType:"none",valueType:"string",components:{controlled:y,uncontrolled:e=>{const{name:l,label:o,config:t}=e;return p(D,{label:o||l,type:"submit",onClick:()=>{},...t.options})}}}),a({type:"reset",filterable:!1,filterType:"none",valueType:"string",components:{controlled:y,uncontrolled:e=>{const{name:l,label:o,config:t}=e;return p(D,{label:o||l,type:"reset",onClick:()=>{},...t.options})}}}))}me();export{me as registerAllBuiltinFieldTypes};
|
|
1
|
+
"use client";import{jsx as s,jsxs as u}from"react/jsx-runtime";import{Text as m,Stack as g,ImageGallery as $,Rating as I,CopyToClipboard as k}from"@donotdev/components";import{formatCurrency as F,maybeTranslate as N}from"@donotdev/core";import{ControlledCheckboxField as A,ControlledComboboxField as M,ControlledDateField as v,ControlledDropdownField as P,ControlledFileField as R,ControlledMultiFileField as B,ControlledDocumentField as _,ControlledMultiDocumentField as E,ControlledGeoPointField as U,ControlledImageField as H,ControlledMapField as K,ControlledMultiDropdownField as Y,ControlledMultiInputField as G,ControlledNumberField as O,ControlledPasswordField as W,ControlledPhoneField as q,ControlledRangeField as J,ControlledRatingField as Q,ControlledDurationField as X,ControlledRadioField as Z,ControlledYearField as ee,ControlledTextField as y,ControlledTextareaField as te,ControlledRichTextField as re,ControlledTimestampField as oe,ControlledAddressField as ne,ControlledSwitchField as le,ControlledMultiImageField as ae,ControlledGdprConsentField as ie,ControlledCurrencyField as ce,ControlledPriceField as se}from"./components/controlled";import{AvatarFieldComponent as pe,BadgeFieldComponent as de,ButtonFieldComponent as D,HiddenFieldComponent as ue,TextAreaComponent as ye,RichTextComponent as me,TextFieldComponent as T}from"./components/form/fields";import{registerBuiltinFieldType as i}from"./fieldTypeRegistry";import{translateLabel as b}from"./forms/utils";import{sanitizeHtml as fe}from"./utils/sanitizeHtml";function d(e){return e?s("span",{style:{color:"var(--muted-foreground)"},children:"\u2014"}):s(m,{variant:"muted",children:"\u2014"})}const c={timestamp:(e,n,o,t)=>{const r=t?.compact??!1;if(e==null||e==="")return d(r);try{return(e instanceof Date?e:new Date(e)).toLocaleString()}catch{return String(e)}},date:(e,n,o,t)=>{const r=t?.compact??!1;if(e==null||e==="")return d(r);try{return(e instanceof Date?e:new Date(e)).toLocaleDateString()}catch{return String(e)}},"datetime-local":(e,n,o,t)=>{const r=t?.compact??!1;if(e==null||e==="")return d(r);try{return(e instanceof Date?e:new Date(e)).toLocaleString()}catch{return String(e)}},time:(e,n,o,t)=>{const r=t?.compact??!1;if(e==null||e==="")return d(r);try{return(e instanceof Date?e:new Date(e)).toLocaleTimeString()}catch{return String(e)}},week:(e,n,o,t)=>{const r=t?.compact??!1;return e==null||e===""?d(r):String(e)},month:(e,n,o,t)=>{const r=t?.compact??!1;return e==null||e===""?d(r):String(e)},boolean:(e,n,o)=>e?"Yes":"No",checkbox:(e,n,o)=>e?"Yes":"No",switch:(e,n,o)=>{const t=n.options?.fieldSpecific;if(t){const r=t.uncheckedValue??!1,l=t.checkedValue??!0;if(e===l&&t.checkedLabel)return b(t.checkedLabel,o);if(e===r&&t.uncheckedLabel)return b(t.uncheckedLabel,o)}return e?"Yes":"No"},year:(e,n,o)=>String(e),number:(e,n,o)=>{if(e==null||e==="")return"\u2014";const t=n.options?.unit??"",r=N(o,n.options?.suffix);return[(typeof e=="number"?e.toLocaleString():String(e))+t,r].filter(Boolean).join(" ")},currency:(e,n,o)=>{if(e==null||isNaN(e))return"";const t=(n.options||{}).fieldSpecific?.currency||"EUR";return F(e,t)},price:(e,n,o,t)=>{const r=t?.compact??!1,l=t?.asString??!1,a=e!=null&&typeof e=="number"?{amount:e,currency:"EUR",vatIncluded:!0,discountPercent:0}:e;if(a==null||typeof a!="object")return d(r);const p=a.amount;if(p==null||isNaN(p))return d(r);const h=a.currency||"EUR",x=a.vatIncluded??!0,f=a.discountPercent??0,S=f>0?p*(1-f/100):p,C=x?` ${o("crud:price.vatIncluded",{defaultValue:"VAT Incl."})}`:"";if(f>0){const L=F(p,h),w=F(S,h),j=` ${o("crud:price.discountPercent",{percent:Math.round(f),defaultValue:"-{{percent}}%"})}`;return l?`${w}${C}${j}`:r?u(m,{variant:"success",weight:"bold",children:[w,C,j]}):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:[w,C]})]})}return`${F(p,h)}${C}`},range:(e,n,o)=>typeof e=="number"?e.toLocaleString():String(e),rating:(e,n,o,t)=>{const r=t?.compact??!1;if(e==null)return d(r);const l=typeof e=="number"?e:parseFloat(e);if(isNaN(l))return d(r);const a=n.validation?.max??5;return s(I,{value:l,max:a,readonly:!0,"aria-label":`${l} out of ${a} stars`})},duration:(e,n,o,t)=>{const r=t?.compact??!1;if(e==null)return d(r);const l=typeof e=="number"?e:parseInt(String(e),10);if(Number.isNaN(l))return d(r);if(l===0)return o("crud:duration.zero",{defaultValue:"\u2014"});if(l<60)return o("crud:duration.minutes",{count:l,defaultValue:`${l} min`});const a=Math.floor(l/60),p=l%60;return o("crud:duration.hoursMinutes",{hours:a,minutes:p,defaultValue:p===0?`${a}h`:`${a}h ${p}min`})},gdprConsent:(e,n,o,t)=>{const r=t?.compact??!1;if(!e||typeof e!="object")return d(r);const l=e.gdprConsent===!0,a=e.gdprConsentDate,p=e.gdprConsentVersion,h=o("crud:gdprConsent.display.yes",{defaultValue:"Consented"}),x=o("crud:gdprConsent.display.no",{defaultValue:"Not consented"});if(!l)return x;const f=[h];if(a)try{const S=new Date(a);f.push(S.toLocaleDateString())}catch{f.push(a)}return p&&f.push(`v${p}`),f.join(" \xB7 ")},select:(e,n,o)=>{const t=n.validation?.options;if(Array.isArray(t)){const r=t.find(l=>l.value===e)?.label;return r?b(r,o):String(e)}return String(e)},radio:(e,n,o)=>{const t=n.validation?.options;if(Array.isArray(t)){const r=t.find(l=>l.value===e)?.label;return r?b(r,o):String(e)}return String(e)},combobox:(e,n,o)=>{const t=n.validation?.options;if(Array.isArray(t)){const r=t.find(l=>l.value===e)?.label;return r?b(r,o):String(e)}return String(e)},multiselect:(e,n,o)=>{if(Array.isArray(e)){const t=n.validation?.options;if(Array.isArray(t))return e.map(r=>{const l=t.find(a=>a.value===r)?.label;return l?b(l,o):r}).join(", ")}return String(e)},image:(e,n,o,t)=>{const r=t?.compact??!1;return e==null||e===""?d(r):typeof e=="string"?s("img",{src:e,alt:n.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)"}}):d(r)},images:(e,n,o,t)=>{const r=t?.compact??!1;if(!Array.isArray(e)||e.length===0)return d(r);const l=e[0],a=typeof l=="object"&&l.thumbUrl?l.thumbUrl:l;return r?u("div",{style:{display:"flex",alignItems:"center",gap:"var(--gap-xs)"},children:[s("img",{src:a,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($,{images:e,altPrefix:n.label||"Image"})},files:(e,n,o,t)=>{const r=t?.compact??!1;return!Array.isArray(e)||e.length===0?d(r):s(g,{gap:"tight",children:e.map((l,a)=>u("a",{href:l.url||l,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none",display:"flex",alignItems:"center",fontSize:"var(--font-size-sm)"},children:[l.filename||`File ${a+1}`,l.size&&u(m,{level:"caption",variant:"muted",style:{marginLeft:"var(--gap-sm)"},children:["(",Math.round(l.size/1024)," KB)"]})]},a))})},documents:(e,n,o,t)=>{const r=t?.compact??!1;return!Array.isArray(e)||e.length===0?d(r):s(g,{gap:"tight",children:e.map((l,a)=>u("a",{href:l.url||l,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none",display:"flex",alignItems:"center",fontSize:"var(--font-size-sm)"},children:[l.filename||`File ${a+1}`,l.size&&u(m,{level:"caption",variant:"muted",style:{marginLeft:"var(--gap-sm)"},children:["(",Math.round(l.size/1024)," KB)"]})]},a))})},file:(e,n,o,t)=>{const r=t?.compact??!1;if(!e)return d(r);const l=typeof e=="string"?e:e.url,a=typeof e=="string"?"View file":e.filename||"View file";return u("a",{href:l,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none"},children:[a,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,n,o,t)=>{const r=t?.compact??!1;if(!e)return d(r);const l=typeof e=="string"?e:e.url,a=typeof e=="string"?"View file":e.filename||"View file";return u("a",{href:l,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none"},children:[a,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,n,o,t)=>{const r=t?.compact??!1;if(!e)return d(r);if(typeof e=="object"&&e!==null){const l=e.displayName||e.name||e.id||String(e);return String(l)}return String(e)},geopoint:(e,n,o,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)}`:d(r)},address:(e,n,o)=>e&&typeof e=="object"&&"formatted_address"in e?e.formatted_address:String(e),map:(e,n,o,t)=>{const r=t?.compact??!1;if(e&&typeof e=="object"){const l=Object.entries(e);return l.length===0?d(r):u(g,{direction:"column",gap:"tight",children:[l.slice(0,5).map(([a,p])=>u(m,{style:{fontSize:"var(--font-size-sm)"},children:[u("strong",{children:[a,":"]})," ",String(p)]},a)),l.length>5&&u(m,{variant:"muted",children:["+",l.length-5," more"]})]})}return d(r)},array:(e,n,o,t)=>{const r=t?.compact??!1;return Array.isArray(e)?e.length===0?d(r):e.join(", "):d(r)},password:()=>"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",email:(e,n,o)=>u(g,{direction:"row",gap:"tight",align:"center",children:[s("a",{href:`mailto:${e}`,style:{color:"var(--primary)",flex:1},onClick:t=>t.stopPropagation(),children:e}),s(k,{text:e,tooltipText:o("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:o("crud:actions.copyEmail",{defaultValue:"Copy email"}),onClick:t=>t.stopPropagation()})]}),tel:(e,n,o)=>u(g,{direction:"row",gap:"tight",align:"center",children:[s("a",{href:`tel:${e}`,style:{color:"var(--primary)",flex:1},onClick:t=>t.stopPropagation(),children:e}),s(k,{text:e,tooltipText:o("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:o("crud:actions.copyPhone",{defaultValue:"Copy phone"}),onClick:t=>t.stopPropagation()})]}),iban:(e,n,o,t)=>{const r=t?.compact??!1;return e?u(g,{direction:"row",gap:"tight",align:"center",children:[s(m,{style:{flex:1},children:e}),s(k,{text:e,tooltipText:o("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:o("crud:actions.copyIban",{defaultValue:"Copy IBAN"}),onClick:l=>l.stopPropagation()})]}):d(r)},url:(e,n,o)=>s("a",{href:e,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)"},children:e}),color:(e,n,o)=>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,n,o)=>String(e),text:(e,n,o)=>String(e),richtext:(e,n,o,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:fe(e)},style:{padding:"var(--gap-sm)",fontSize:"var(--font-size-sm)",lineHeight:"1.6"}}):d(r)}};function ge(e){return e.type==="avatar"}function be(e){return e.type==="badge"}let z=!1;function V(){z||(z=!0,i({type:"text",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.text,components:{controlled:y,uncontrolled:e=>{const{value:n,onChange:o,label:t,error:r,config:l}=e;return s(T,{label:t||"",value:typeof n=="string"?n:"",onChange:a=>{const p=a.target.value;o(p)},error:r,...l.options})}}}),i({type:"email",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.email,components:{controlled:y,uncontrolled:e=>{const{value:n,onChange:o,label:t,error:r,config:l}=e;return s(T,{label:t||"",value:typeof n=="string"?n:"",onChange:a=>{const p=a.target.value;o(p)},error:r,type:"email",...l.options})}}}),i({type:"url",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.url,components:{controlled:y,uncontrolled:e=>{const{value:n,onChange:o,label:t,error:r,config:l}=e;return s(T,{label:t||"",value:typeof n=="string"?n:"",onChange:a=>{const p=a.target.value;o(p)},error:r,type:"url",...l.options})}}}),i({type:"color",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.color,components:{controlled:y,uncontrolled:e=>{const{value:n,onChange:o,label:t,error:r,config:l}=e;return s(T,{label:t||"",value:typeof n=="string"?n:"",onChange:a=>{const p=a.target.value;o(p)},error:r,type:"color",...l.options})}}}),i({type:"textarea",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.textarea,components:{controlled:te,uncontrolled:e=>{const{value:n,onChange:o,label:t,error:r,config:l}=e;return s(ye,{label:t||"",value:typeof n=="string"?n:"",onChange:a=>{const p=a.target.value;o(p)},error:r,...l.options})}}}),i({type:"richtext",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.richtext,components:{controlled:re,uncontrolled:e=>{const{value:n,onChange:o,label:t,error:r,config:l}=e;return s(me,{label:t||"",value:typeof n=="string"?n:"",onChange:a=>{const p=a.target.value;o(p)},error:r,...l.options})}}}),i({type:"password",filterable:!1,filterType:"none",valueType:"string",displayFormatter:c.password,components:{controlled:W}}),i({type:"tel",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.tel,components:{controlled:q}}),i({type:"iban",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.iban,components:{controlled:y,uncontrolled:e=>{const{value:n,onChange:o,label:t,error:r,config:l}=e;return s(T,{label:t||"",value:typeof n=="string"?n:"",onChange:a=>{const p=a.target.value.replace(/\s/g,"").toUpperCase();o(p)},error:r,...l.options})}}}),i({type:"number",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.number,components:{controlled:O}}),i({type:"currency",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.currency,components:{controlled:ce}}),i({type:"price",filterable:!0,filterType:"range",valueType:"object",displayFormatter:c.price,components:{controlled:se}}),i({type:"range",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.range,components:{controlled:J}}),i({type:"year",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.year,components:{controlled:ee}}),i({type:"rating",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.rating,components:{controlled:Q}}),i({type:"duration",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.duration,components:{controlled:X}}),i({type:"boolean",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.boolean,components:{controlled:A}}),i({type:"checkbox",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.checkbox,components:{controlled:A}}),i({type:"gdprConsent",filterable:!0,filterType:"select",valueType:"object",displayFormatter:c.gdprConsent,components:{controlled:ie}}),i({type:"switch",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.switch,components:{controlled:le}}),i({type:"date",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.date,components:{controlled:v}}),i({type:"datetime-local",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c["datetime-local"],components:{controlled:v}}),i({type:"time",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.time,components:{controlled:v}}),i({type:"week",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.week,components:{controlled:v}}),i({type:"month",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.month,components:{controlled:v}}),i({type:"timestamp",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.timestamp,components:{controlled:oe}}),i({type:"file",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.file,components:{controlled:R}}),i({type:"files",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.files,components:{controlled:B}}),i({type:"document",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.document,components:{controlled:_}}),i({type:"documents",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.documents,components:{controlled:E}}),i({type:"image",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.image,components:{controlled:H}}),i({type:"images",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.images,components:{controlled:ae}}),i({type:"geopoint",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.geopoint,components:{controlled:U}}),i({type:"address",filterable:!0,filterType:"address",valueType:"object",displayFormatter:c.address,components:{controlled:ne}}),i({type:"map",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.map,components:{controlled:K}}),i({type:"array",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.array,components:{controlled:G}}),i({type:"select",filterable:!0,filterType:"select",valueType:"string",displayFormatter:c.select,components:{controlled:P}}),i({type:"combobox",filterable:!0,filterType:"select",valueType:"string",displayFormatter:c.combobox,components:{controlled:M}}),i({type:"multiselect",filterable:!0,filterType:"multiselect",valueType:"array",displayFormatter:c.multiselect,components:{controlled:Y}}),i({type:"radio",filterable:!0,filterType:"select",valueType:"string",displayFormatter:c.radio,components:{controlled:Z}}),i({type:"reference",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.reference,components:{controlled:y}}),i({type:"hidden",filterable:!1,filterType:"none",valueType:"string",components:{controlled:y,uncontrolled:e=>{const{name:n,value:o}=e;return s(ue,{name:n,value:typeof o=="string"?o:""})}}}),i({type:"avatar",filterable:!1,filterType:"none",valueType:"string",components:{controlled:y,uncontrolled:e=>{const{value:n,onChange:o,error:t,config:r,t:l}=e;if(!ge(r))throw new Error("Invalid config type for avatar field");return s(pe,{config:r,value:typeof n=="string"?n:"",onChange:a=>{o(a)},error:!!t,helperText:t||void 0,t:l,...r.options})}}}),i({type:"badge",filterable:!1,filterType:"none",valueType:"string",components:{controlled:y,uncontrolled:e=>{const{value:n,onChange:o,error:t,config:r,t:l}=e;if(!be(r))throw new Error("Invalid config type for badge field");return s(de,{config:r,value:typeof n=="string"?n:"",onChange:a=>{o(a)},error:!!t,helperText:t||void 0,t:l,...r.options})}}}),i({type:"submit",filterable:!1,filterType:"none",valueType:"string",components:{controlled:y,uncontrolled:e=>{const{name:n,label:o,config:t}=e;return s(D,{label:o||n,type:"submit",onClick:()=>{},...t.options})}}}),i({type:"reset",filterable:!1,filterType:"none",valueType:"string",components:{controlled:y,uncontrolled:e=>{const{name:n,label:o,config:t}=e;return s(D,{label:o||n,type:"reset",onClick:()=>{},...t.options})}}}))}V();export{V as registerAllBuiltinFieldTypes};
|