@donotdev/crud 0.0.27 → 0.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CrudService.js +2 -2
- package/dist/CrudStore.js +1 -1
- package/dist/FieldRegistry.d.ts +6 -5
- package/dist/FieldRegistry.d.ts.map +1 -1
- package/dist/FieldRegistry.js +1 -1
- package/dist/adapters/FunctionsAdapter.js +1 -1
- package/dist/components/CrudButton.js +1 -1
- package/dist/components/CrudCard.js +1 -1
- package/dist/components/DateFilter.js +1 -1
- package/dist/components/DisplayFieldRenderer.d.ts.map +1 -1
- package/dist/components/DisplayFieldRenderer.js +1 -1
- package/dist/components/DisplayThumbnail.js +1 -1
- package/dist/components/EntityFilters.js +1 -1
- package/dist/components/FormFieldRenderer.js +1 -1
- package/dist/components/FormLayout.js +1 -1
- package/dist/components/controlled/complex/ControlledAddressField.js +1 -1
- package/dist/components/controlled/complex/ControlledDateField.js +1 -1
- package/dist/components/controlled/complex/ControlledFieldArrayField.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/ControlledReferenceField.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.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.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.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.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.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.js +2 -2
- package/dist/components/form/internal/ImageViewerDialog.js +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.js +1 -1
- package/dist/fieldTypeRegistry.store.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.js +1 -1
- package/dist/forms/index.js +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.js +1 -1
- package/dist/hooks/useCrudFilters.js +1 -1
- package/dist/hooks/useEntityFavorites.js +1 -1
- package/dist/hooks/useFieldConditions.js +1 -1
- package/dist/hooks/useFileUpload.js +1 -1
- package/dist/hooks/useReferenceResolver.js +1 -1
- package/dist/hooks/useRelatedItems.js +1 -1
- package/dist/hooks/useUnsavedChangesWarning.js +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.js +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.js +1 -1
- package/dist/useBaseCrudList.js +1 -1
- package/dist/useCrud.js +1 -1
- package/dist/useCrudCardList.js +1 -1
- package/dist/useCrudList.js +1 -1
- package/dist/utils/clientListProcessing.js +1 -1
- package/dist/utils/collections.js +1 -1
- package/dist/utils/fileStorage.js +1 -1
- package/dist/utils/imageProcessing.js +1 -1
- package/dist/utils/imageStorage.js +1 -1
- package/dist/utils/imageUtils.js +1 -1
- package/dist/utils/matchesFilter.js +1 -1
- package/dist/utils/mergeWithOptimistic.js +1 -1
- package/dist/utils/sanitizeHtml.js +1 -1
- package/dist/utils/scopeUtils.js +1 -1
- package/dist/utils/uploadValidation.js +1 -1
- package/dist/workflows/WorkflowPersistence.js +1 -1
- package/dist/workflows/defineWorkflow.js +1 -1
- package/dist/workflows/index.js +1 -1
- package/dist/workflows/useEntityWorkflow.js +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as t}from"react/jsx-runtime";import{createContext as n,useContext as i}from"react";const e=n(void 0);function s({formId:o,children:r}){return t(e.Provider,{value:o,children:r})}function a(){return i(e)}export{s as UploadProvider,a as useUploadContext};
|
package/dist/contexts/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{UploadProvider as
|
|
1
|
+
import{UploadProvider as o,useUploadContext as a}from"./UploadContext";export{o as UploadProvider,a as useUploadContext};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{getFieldRegistry as
|
|
1
|
+
"use client";import{getFieldRegistry as i}from"./FieldRegistry";import{registerAllBuiltinFieldTypes as s}from"./registerBuiltinFieldTypes";import{setRegistrationInit as r,getMetadataRegistry as l}from"./fieldTypeRegistry.store";r(e=>{s(e,i())});import{getFieldTypeMetadata as o,getFilterType as p,getDisplayFormatter as g,isFilterable as y,getValueType as n,clearFieldTypeRegistry as F}from"./fieldTypeRegistry.store";function d(e){const{type:a,components:t}=e;t&&i().registerComponent(a,t.controlled,t.uncontrolled),l().set(a,e)}export{F as clearFieldTypeRegistry,g as getDisplayFormatter,o as getFieldTypeMetadata,p as getFilterType,n as getValueType,y as isFilterable,d as registerBuiltinFieldType};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{getFieldRegistry as
|
|
1
|
+
"use client";import{getFieldRegistry as a}from"./FieldRegistry";var r=null,i=!1,n=null;function l(t){n=t}function e(){return r||(r=new Map),i||(i=!0,n?.(r)),r}function s(t){return e().get(t)}function u(t){return a().getFilterType(t)||e().get(t)?.filterType}function g(t){return a().getDisplayFormatter(t)||e().get(t)?.displayFormatter}function o(t){return a().isFilterable(t)?!0:e().get(t)?.filterable??!1}function p(t){return e().get(t)?.valueType}function y(){e().clear()}export{y as clearFieldTypeRegistry,g as getDisplayFormatter,s as getFieldTypeMetadata,u as getFilterType,e as getMetadataRegistry,p as getValueType,o as isFilterable,l as setRegistrationInit};
|
|
@@ -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 r(e){return o(e)}export{r as useController};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useMemo as o,useCallback as p}from"react";import{useController as v}from"./useController";import{formatValue as h}from"../../components/DisplayFieldRenderer";import{isFieldEditable as
|
|
1
|
+
"use client";import{useMemo as o,useCallback as p}from"react";import{useController as v}from"./useController";import{formatValue as h}from"../../components/DisplayFieldRenderer";import{isFieldEditable as g}from"../utils";function D(a,i){const{entity:b,operation:r,viewerRole:n,fields:u}=a,l=b.fields[i],e=o(()=>l?{...l,name:l.name||i,label:l.label||i}:{name:i,type:"text",label:i,visibility:"user"},[i,l]),s=o(()=>u.some(d=>d.name===i),[u,i]),c=o(()=>!s||r==="edit"&&e.visibility==="technical"&&e.editable===void 0?!1:g(e.editable,n,r),[s,r,e.visibility,e.editable,n]),{field:m,fieldState:t}=v({name:i,control:a.control}),f=o(()=>({error:t.error?.message,touched:t.isTouched,isDirty:t.isDirty}),[t.error?.message,t.isTouched,t.isDirty]),y=p(d=>h(m.value,e,a.t,d),[m.value,e,a.t]);return{field:m,meta:f,config:e,isEditable:c,isVisible:s,display:y}}export{D as useEntityField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{valibotResolver as
|
|
1
|
+
"use client";import{valibotResolver as M}from"@hookform/resolvers/valibot";import{useMemo as d,useEffect as T,useRef as v,useCallback as w,createElement as se}from"react";import{useForm as oe}from"react-hook-form";import{toast as ie,ToastAction as ne}from"@donotdev/components";import{useLocalStorage as ue,BACKEND_GENERATED_FIELD_NAMES as ce,createSchemas as le}from"@donotdev/core";import{useFormStore as j,useFormStatus as de,useUploadProgress as fe}from"../../stores";import{useUploadStore as q}from"../../stores/UploadStore";import{checkForBlobUrls as z}from"../../utils/uploadValidation";import{getFieldsForOperation as me}from"../utils";import{buildInitialFromRecord as pe,buildSchemaDefaults as ge}from"../utils/buildInitialValues";const Se=i=>i;function G(i,E){const e={...i};for(const p of Object.keys(E)){const c=i[p],f=E[p];f!==null&&typeof f=="object"&&!Array.isArray(f)&&c!==null&&typeof c=="object"&&!Array.isArray(c)?e[p]=G(c,f):e[p]=f}return e}function be(i,E={}){const{formId:e,operation:p,defaultValues:c,viewerRole:f,mode:K="onBlur",t:Y}=E,g=Y??Se,U=f??"guest",n=p??(c?"edit":"create"),H=de(e??""),J=fe(e??""),V=d(()=>le(i),[i.name]),P=d(()=>M(V.create),[V.create]),C=d(()=>M(V.draft),[V.draft]),Q=d(()=>async(t,a,s)=>((t?.status??c?.status)==="draft"?C:P)(t,a,s),[P,C,c?.status]),F=d(()=>ge(i),[i]),$=c,u=d(()=>{if(n==="create")return F;if($)return pe(i,$)},[n,F,i,$]),o=oe({defaultValues:n==="create"?u:void 0,mode:K,resolver:Q,shouldUnregister:!1,shouldFocusError:!0}),D=v(o);T(()=>{D.current=o},[o]);const A=v(null);T(()=>{if(n==="edit"&&u){const t=u.id??null;t&&t!==A.current?(D.current.reset(u),A.current=t):!t&&A.current===null&&(D.current.reset(u),A.current="initialized")}},[n,u]);const k=c?.id,W=d(()=>{const t=`${i.name.toLowerCase()}-form-draft`;return n==="create"?t:k?`${t}-${k}`:`${t}-edit`},[i.name,n,k]),{value:b,setValue:x,removeValue:S}=ue(W,{defaultValue:null,syncAcrossTabs:!0}),y=v(!1);T(()=>{if(y.current)return;const t=a=>{const s=()=>{S(),a&&D.current.reset(a)};ie({toastType:"info",title:g("draft.restored",{defaultValue:"Draft restored"}),description:g("draft.restoredDescription",{defaultValue:"Your unsaved changes were recovered"}),action:se(ne,{altText:g("draft.discard",{defaultValue:"Discard"}),onClick:s},g("draft.discard",{defaultValue:"Discard"})),duration:8e3})};if(n==="create"&&!c){b&&(o.reset(b),t(F)),y.current=!0;return}if(n==="edit"&&u){if(b){const a=G(u,b);o.reset(a),t(u)}y.current=!0}},[n,c,b,o,u,S,g,F]);const O=v(!1),h=v(null);T(()=>{const t=o.watch(a=>{O.current||!y.current||(h.current&&clearTimeout(h.current),h.current=setTimeout(()=>{a&&Object.values(a).some(s=>s!=null&&s!=="")&&x(a)},3e3))});return()=>{t.unsubscribe(),h.current&&clearTimeout(h.current)}},[o,x]);const B=w(async()=>{if(!e)return!0;const t=q.getState(),a=j.getState();if(!t.hasPendingUploads(e))return!0;try{a.setUploading(e,0),await t.uploadAll(e),await new Promise(m=>setTimeout(m,50));let s=o.getValues(),r=z(s),l=0;const R=5;for(;r.length>0&&l<R;)l++,await new Promise(m=>setTimeout(m,100)),s=o.getValues(),r=z(s);if(r.length>0){const m=`Upload incomplete: files still pending at ${r.join(", ")}`;return a.setError(e,m),!1}return!0}catch(s){const r=s instanceof Error?s.message:"File upload failed";return j.getState().setError(e,r),!1}},[e,o]),L=w(t=>n!=="create"?t:Object.fromEntries(Object.entries(t).filter(([a])=>!ce.includes(a))),[n]),N=w(t=>{if(typeof window>"u")return;const a=Object.keys(t).find(r=>r!=="root"&&t[r]);if(!a)return;const s=document.querySelector(`input[name="${a}"][aria-invalid="true"], textarea[name="${a}"][aria-invalid="true"], select[name="${a}"][aria-invalid="true"]`);s&&(s.scrollIntoView({behavior:"smooth",block:"center"}),s.focus())},[]),_=o.handleSubmit,X=d(()=>((t,a)=>async s=>{s?.preventDefault?.();const r=e?j.getState():null;e&&r&&r.startSubmit(e),O.current=!0;try{if(!await B()){e&&r&&r.setError(e,"Upload failed");return}e&&r&&r.setValidating(e),await _(async(l,R)=>{e&&r&&r.setSubmitting(e);const m=L(l);try{await t(m,R),S(),e&&r&&r.setSuccess(e)}catch(I){const ae=I instanceof Error?I.message:"Submission failed";throw e&&r&&r.setError(e,ae),I}},l=>{e&&r&&r.setError(e,"Validation failed"),N(l),a?.(l)})(s)}catch{if(e&&r){const l=r.getStatus(e);l!=="error"&&l!=="idle"&&l!=="success"&&r.reset(e)}}finally{O.current=!1}}),[_,e,B,L,N,n,S]),Z=w(()=>{S(),o.reset(u),y.current=!1},[S,o,u]),ee=w(()=>{e&&(j.getState().cleanup(e),q.getState().cleanup(e))},[e]),te=d(()=>me(i,{operation:n,viewerRole:U,availableFields:void 0}),[i,n,U]),re=o.formState.isSubmitted||Object.keys(o.formState.touchedFields||{}).length>0;return{...o,handleSubmit:X,fields:te,operation:n,entity:i,t:g,viewerRole:U,formId:e,formStatus:e?H:"idle",uploadProgress:e?J:0,cleanup:ee,isDirty:o.formState.isDirty,hasUserInteracted:re,resetForm:Z,originalValues:u}}export{be 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};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function l(i,r){if(r in i)return i[r];const o=r.replace(/_([a-z])/g,(t,n)=>n.toUpperCase());if(o!==r&&o in i)return i[o]}function s(i,r){if(r in i)return!0;const o=r.replace(/_([a-z])/g,(t,n)=>n.toUpperCase());return o!==r&&o in i}function c(i,r){const o=r??{},t={...o};return Object.entries(i.fields).forEach(([n,e])=>{const p=l(t,n);p!==void 0&&!(n in t)&&(t[n]=p);const a=!s(o,n)||p===null||p===void 0;if(e.type==="switch"){if(p==null){const u=e.options?.fieldSpecific;t[n]=u?.uncheckedValue??!1}}else a&&(e.type==="price"?t[n]={amount:0,currency:"EUR",vatIncluded:!0,discountPercent:0}:e.type==="checkbox"||e.type==="boolean"?t[n]=!1:e.type==="text"||e.type==="textarea"||e.type==="email"||e.type==="url"||e.type==="tel"||e.type==="iban"||e.type==="password"||e.type==="color"?t[n]="":(e.type==="number"||e.type==="range"||e.type==="rating")&&(t[n]=void 0))}),t}function y(i){return c(i,{})}export{c as buildInitialFromRecord,y as buildSchemaDefaults};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isFieldVisible as
|
|
1
|
+
import{isFieldVisible as u}from"@donotdev/core";import{isFieldEditable as m}from"./isFieldEditable";function g(i,d){const{operation:e,viewerRole:r,availableFields:l}=d,n=r??"guest",f=i&&typeof i=="object"&&"fields"in i&&"name"in i?i.fields:i,b=Object.entries(f),s=[];for(const[a,p]of b){const t=p,o=t.visibility||"guest";if(!u(o,n)||e==="create"&&o==="technical"||e==="edit"&&l&&!l.includes(a))continue;let c=m(t.editable,n,e);e==="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 o}from"@donotdev/core";function s(e,i,r){return e===void 0||e===!0?!0:e===!1?!1:e==="admin"?t(i,o.ADMIN):e==="create-only"?r==="create":!0}export{s as isFieldEditable};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function i(e,r){if(typeof e=="string"&&e.includes(":")){const n=e.split(":"),t=n[1]??e,s=n[0];if(t.startsWith("status.")){const a=r(t);return a!==t&&a!==`${s}:${t}`?a:r(t,{ns:s})}return r(t,{ns:s})}return r(e)}function l(e,r,n){const t=r?.label||e;return i(t,n)}export{l as translateFieldLabel,i as translateLabel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as o from"valibot";import{createSchemas as
|
|
1
|
+
import*as o from"valibot";import{createSchemas as i}from"@donotdev/core";function m(t,r,c="create"){const e=i(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(p=>p.key).join(".")||"",message:a.message}))}}export{m as validateEntity};
|
package/dist/hooks/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useFileUpload as
|
|
1
|
+
import{useFileUpload as e}from"./useFileUpload";import{useUnsavedChangesWarning as s}from"./useUnsavedChangesWarning";import{useEntityFavorites as r}from"./useEntityFavorites";import{useCrudFilters as a}from"./useCrudFilters";import{useRelatedItems as o}from"./useRelatedItems";import{useFieldConditions as i}from"./useFieldConditions";import{useReferenceResolver as t}from"./useReferenceResolver";export{a as useCrudFilters,r as useEntityFavorites,i as useFieldConditions,e as useFileUpload,t as useReferenceResolver,o as useRelatedItems,s as useUnsavedChangesWarning};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useCallback as o}from"react";import{useCrudStore as s}from"../CrudStore";const
|
|
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:t,setValue:a,isLoaded:c}=p(d,{defaultValue:[]}),n=o(e=>t.includes(e),[t]),v=o(e=>{a(i=>i.includes(e)?i.filter(r=>r!==e):[...i,e])},[a]),f=o(e=>{a(i=>i.includes(e)?i:[...i,e])},[a]),F=o(e=>{a(i=>i.filter(r=>r!==e))},[a]),m=o(()=>{a([])},[a]),g=o(e=>t.includes(e.id),[t]);return{favorites:t,isFavorite:n,toggleFavorite:v,addFavorite:f,removeFavorite:F,clearFavorites:m,favoritesFilter:g,isLoaded:c}}export{y as useEntityFavorites};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useMemo as
|
|
1
|
+
"use client";import{useMemo as e}from"react";import{useWatch as c}from"react-hook-form";import{evaluateFieldConditions as f}from"@donotdev/core";function u(o,r){const t=c({control:r}),s=e(()=>o.some(n=>n.config.conditions),[o]);return e(()=>{if(!s)return{};const n={};for(const i of o)i.config.conditions&&(n[i.name]=f(i.config.conditions,t));return n},[o,t,s])}export{u as useFieldConditions};
|
|
@@ -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:$=10*1024*1024,accept:S=[],storagePath:V="uploads",uploadFn:y}){const h=G(),w=!!h,[d,c]=T([]),R=g(!1),E=g(null),x=g(a),L=g([]),F=g(!1),M=g(null);A(()=>{if(R.current){R.current=!1;return}const n=a?JSON.stringify((Array.isArray(a)?a:[a]).map(l=>l.fullUrl).filter(Boolean)):null;n!==E.current&&(E.current=n,x.current=a,q(()=>{if(a){const l=(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(l)}else c([])}))},[a]),A(()=>{L.current=d},[d]),A(()=>{F.current&&(F.current=!1,M.current?.(d,!0))},[d]),A(()=>()=>{L.current.forEach(n=>k(n.previewURL))},[]);const f=v((n,l=!1)=>{const t=(l?n.filter(i=>!i.error):n.filter(i=>i.uploaded&&!i.error)).map(i=>i.uploaded?i.uploaded:l&&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 b=v(async()=>{if(!y)return;let n=[];if(c(t=>(n=t.filter(r=>!r.uploaded&&!r.error),n.length===0?t:t.map(r=>n.some(e=>e.id===r.id)?{...r,progress:0}:r))),n.length===0)return;const l=await Promise.allSettled(n.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=l.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(b);j.current=b,A(()=>{if(!(!h||!s))return N.getState().registerUpload(h,s,async()=>{await j.current()},()=>L.current.some(n=>!n.uploaded&&!n.error)),()=>{N.getState().unregisterUpload(h,s)}},[h,s]);const O=v(async n=>{if(y){c(l=>l.map(t=>t.id===n.id?{...t,progress:0}:t));try{const l=await y(n.file,t=>{c(r=>r.map(e=>e.id===n.id?{...e,progress:t}:e))});c(t=>{const r=t.map(e=>e.id===n.id?{...e,uploaded:l,progress:100,error:null}:e);return f(r,!1),r})}catch(l){const t=l instanceof Error?l.message:"Upload failed";c(r=>r.map(e=>e.id===n.id?{...e,error:t,progress:null}:e))}}},[y,f]),z=v(n=>{c(l=>{const t=(u?U:1)-l.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}),l;const r=n.slice(0,t),e=[];for(const o of r){const m=K(o,S,$);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 l;const i=u?[...l,...e]:e;return w?F.current=!0:e.forEach(o=>O(o)),i})},[u,U,S,$,w,O,f]),B=v(n=>{c(l=>{const t=l.find(e=>e.id===n);t&&k(t.previewURL);const r=l.filter(e=>e.id!==n);return f(r,!1),r})},[f]),D=d.some(n=>!n.uploaded&&!n.error),I=d.some(n=>n.progress!==null&&n.progress<100),J=d.length>0?d.reduce((n,l)=>n+(l.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
|
-
"use client";import{useMemo as p}from"react";import{buildReferenceLabel as v}from"../components/controlled/select/ControlledReferenceField";import{useCrudList as c}from"../useCrudList";function
|
|
1
|
+
"use client";import{useMemo as p}from"react";import{buildReferenceLabel as v}from"../components/controlled/select/ControlledReferenceField";import{useCrudList as c}from"../useCrudList";function R(n){const o=new Map;for(const i of Object.values(n.fields)){const e=i.validation?.reference;if(typeof e=="string"&&!o.has(e)){const l=i.options?.fieldSpecific;o.set(e,{collection:e,labelFields:l?.labelFields,displayField:l?.displayField})}}return Array.from(o.values())}function M(n){const o=p(()=>R(n),[n]),i=o[0],e=o[1],l=o[2],s=o[3],{items:d}=c(i?.collection??"__disabled_0__",{enabled:!!i}),{items:a}=c(e?.collection??"__disabled_1__",{enabled:!!e}),{items:f}=c(l?.collection??"__disabled_2__",{enabled:!!l}),{items:r}=c(s?.collection??"__disabled_3__",{enabled:!!s}),F=[{info:i,items:d},{info:e,items:a},{info:l,items:f},{info:s,items:r}];return p(()=>{const _={};for(const{info:t,items:m}of F){if(!t||!m.length)continue;const b={};for(const y of m){const u=y;b[u.id]=v(u,t.labelFields,t.displayField)}_[t.collection]=b}return _},[i?.collection,d,e?.collection,a,l?.collection,f,s?.collection,r])}export{M as useReferenceResolver};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useMemo as
|
|
1
|
+
"use client";import{useMemo as h}from"react";function p(a,e,t,n,N={}){const{limit:m=3,tolerance:o=.2}=N,c=h(()=>{if(!e||!t||t.length===0||n.length===0)return[];const b=e.id;return t.filter(f=>f.id===b?!1:n.some(i=>{const r=a.fields[i];if(!r)return!1;const s=e[i],u=f[i];if(s==null||u==null)return!1;if(r.type==="number"||r.type==="range"||r.type==="year"){const l=Number(s),g=Number(u);if(isNaN(l)||isNaN(g))return!1;const d=Math.abs(l*o);return Math.abs(g-l)<=d}return String(s)===String(u)})).slice(0,m)},[e,t,n,a.fields,m,o]);return{items:c,hasItems:c.length>0}}export{p as useRelatedItems};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useEffect as
|
|
1
|
+
"use client";import{useEffect as t}from"react";import{isClient as a}from"@donotdev/core";function u({isDirty:n,enabled:r=!0,message:e="You have unsaved changes. Are you sure you want to leave?"}){t(()=>{if(!r||!n||!a())return;const o=s=>(s.preventDefault(),s.returnValue=e,e);return window.addEventListener("beforeunload",o),()=>{window.removeEventListener("beforeunload",o)}},[n,r,e])}export{u as useUnsavedChangesWarning};
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export*from"./useCrud";export*from"./useCrudList";export*from"./useCrudCardList";export*from"./components";export*from"./stores";import{FunctionsAdapter as
|
|
1
|
+
export*from"./useCrud";export*from"./useCrudList";export*from"./useCrudCardList";export*from"./components";export*from"./stores";import{FunctionsAdapter as e}from"./adapters/FunctionsAdapter";import{getCrudService as a}from"./CrudService";import{useCrudStore as s}from"./CrudStore";import{OPTIMISTIC_STATUSES as t,CRUD_OPERATION as r}from"./types";import{loadDeterministicRange as i,upsertDeterministic as l,appendToCollection as o}from"./utils/collections";import{getFieldRegistry as p,registerFieldType as d,isFieldTypeRegistered as n}from"./FieldRegistry";import{registerBuiltinFieldType as m,getFieldTypeMetadata as F,getFilterType as u,getDisplayFormatter as f,isFilterable as y,getValueType as g,clearFieldTypeRegistry as c}from"./fieldTypeRegistry";import{registerBuiltinFieldTypes as T}from"./builtinFieldTypes";import{useEntityForm as S,useEntityField as C,useController as R,isFieldEditable as b,getFieldsForOperation as U,validateEntity as v,translateFieldLabel as E,translateLabel as h}from"./forms";import{UploadProvider as k,useUploadContext as W}from"./contexts";import{useFileUpload as w,useUnsavedChangesWarning as I,useEntityFavorites as x,useRelatedItems as B,useCrudFilters as D,useFieldConditions as O,useReferenceResolver as P}from"./hooks";import{isStorageUrl as A,validatePicture as L,checkForBlobUrls as M,hasBlobUrls as V}from"./utils/uploadValidation";import{defineWorkflow as _,useEntityWorkflow as N,saveWorkflowState as j,loadWorkflowState as q,clearWorkflowState as z}from"./workflows";import{formatValue as H}from"./components/DisplayFieldRenderer";import{buildReferenceLabel as J}from"./components/controlled/select/ControlledReferenceField";import{matchesFilter as K}from"./utils/matchesFilter";import{applyFilters as Q,applySearch as X,applySort as Y,getSearchableFields as Z}from"./utils/clientListProcessing";export{r as CRUD_OPERATION,e as FunctionsAdapter,t as OPTIMISTIC_STATUSES,k as UploadProvider,o as appendToCollection,Q as applyFilters,X as applySearch,Y as applySort,J as buildReferenceLabel,M as checkForBlobUrls,c as clearFieldTypeRegistry,z as clearWorkflowState,_ as defineWorkflow,H as formatValue,a as getCrudService,f as getDisplayFormatter,p as getFieldRegistry,F as getFieldTypeMetadata,U as getFieldsForOperation,u as getFilterType,Z as getSearchableFields,g as getValueType,V as hasBlobUrls,b as isFieldEditable,n as isFieldTypeRegistered,y as isFilterable,A as isStorageUrl,i as loadDeterministicRange,q as loadWorkflowState,K as matchesFilter,m as registerBuiltinFieldType,T as registerBuiltinFieldTypes,d as registerFieldType,j as saveWorkflowState,E as translateFieldLabel,h as translateLabel,l as upsertDeterministic,R as useController,D as useCrudFilters,s as useCrudStore,x as useEntityFavorites,C as useEntityField,S as useEntityForm,N as useEntityWorkflow,O as useFieldConditions,w as useFileUpload,P as useReferenceResolver,B as useRelatedItems,I as useUnsavedChangesWarning,W as useUploadContext,v as validateEntity,L 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":"AAgFA,OAAO,KAAK,EACV,iBAAiB,EAElB,MAAM,2BAA2B,CAAC;AA0zBnC;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAChD,aAAa,EAAE;IACb,iBAAiB,EAAE,CACjB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,GAAG,EACf,YAAY,CAAC,EAAE,GAAG,KACf,IAAI,CAAC;CACX,GACA,IAAI,CAuuBN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as s,jsxs as y}from"react/jsx-runtime";import{Text as g,Stack as h,ImageGallery as L,Rating as I,CopyToClipboard as w}from"@donotdev/components";import{formatCurrency as S,maybeTranslate as $}from"@donotdev/core";import{ControlledCheckboxField as k,ControlledComboboxField as N,ControlledDateField as C,ControlledDropdownField as P,ControlledFileField as M,ControlledMultiFileField as R,ControlledDocumentField as _,ControlledMultiDocumentField as v,ControlledGeoPointField as B,ControlledImageField as E,ControlledMapField as O,ControlledMultiDropdownField as U,ControlledMultiInputField as H,ControlledNumberField as K,ControlledPasswordField as Y,ControlledPhoneField as G,ControlledRangeField as J,ControlledRatingField as W,ControlledDurationField as q,ControlledRadioField as Q,ControlledReferenceField as X,ControlledYearField as Z,ControlledTextField as b,ControlledTextareaField as ee,ControlledRichTextField as te,ControlledTimestampField as re,ControlledAddressField as ne,ControlledFieldArrayField as oe,ControlledSwitchField as le,ControlledMultiImageField as ie,ControlledGdprConsentField as ae,ControlledCurrencyField as ce,ControlledPriceField as se}from"./components/controlled";import{AvatarFieldComponent as pe,BadgeFieldComponent as de,ButtonFieldComponent as A,HiddenFieldComponent as fe,TextAreaComponent as ue,RichTextComponent as ye,TextFieldComponent as F}from"./components/form/fields";import{translateLabel as T}from"./forms/utils";import{sanitizeHtml as me}from"./utils/sanitizeHtml";function p(e){return e?s("span",{style:{color:"var(--muted-foreground)"},children:"\u2014"}):s(g,{variant:"muted",children:"\u2014"})}const c={timestamp:(e,i,t,r)=>{const n=r?.compact??!1;if(e==null||e==="")return p(n);try{return(e instanceof Date?e:new Date(e)).toLocaleString()}catch{return String(e)}},date:(e,i,t,r)=>{const n=r?.compact??!1;if(e==null||e==="")return p(n);try{return(e instanceof Date?e:new Date(e)).toLocaleDateString()}catch{return String(e)}},"datetime-local":(e,i,t,r)=>{const n=r?.compact??!1;if(e==null||e==="")return p(n);try{return(e instanceof Date?e:new Date(e)).toLocaleString()}catch{return String(e)}},time:(e,i,t,r)=>{const n=r?.compact??!1;if(e==null||e==="")return p(n);try{return(e instanceof Date?e:new Date(e)).toLocaleTimeString()}catch{return String(e)}},week:(e,i,t,r)=>{const n=r?.compact??!1;return e==null||e===""?p(n):String(e)},month:(e,i,t,r)=>{const n=r?.compact??!1;return e==null||e===""?p(n):String(e)},boolean:(e,i,t)=>e?"Yes":"No",checkbox:(e,i,t)=>e?"Yes":"No",switch:(e,i,t)=>{const r=i.options?.fieldSpecific;if(r){const n=r.uncheckedValue??!1,o=r.checkedValue??!0;if(e===o&&r.checkedLabel)return T(r.checkedLabel,t);if(e===n&&r.uncheckedLabel)return T(r.uncheckedLabel,t)}return e?"Yes":"No"},year:(e,i,t)=>String(e),number:(e,i,t)=>{if(e==null||e==="")return"\u2014";const r=i.options?.unit??"",n=$(t,i.options?.suffix);return[(typeof e=="number"?e.toLocaleString():String(e))+r,n].filter(Boolean).join(" ")},currency:(e,i,t)=>{if(e==null||isNaN(e))return"";const o=(i.options||{}).fieldSpecific?.currency||"EUR";return S(e,o)},price:(e,i,t,r)=>{const n=r?.compact??!1,o=r?.asString??!1,l=e!=null&&typeof e=="number"?{amount:e,currency:"EUR",vatIncluded:!0,discountPercent:0}:e;if(l==null||typeof l!="object")return p(n);const a=l.amount;if(a==null||isNaN(a))return p(n);const f=l.currency||"EUR",u=l.vatIncluded??!0,d=l.discountPercent??0,m=d>0?a*(1-d/100):a,x=u?` ${t("crud:price.vatIncluded",{defaultValue:"VAT Incl."})}`:"";if(d>0){const z=S(a,f),V=S(m,f),j=` ${t("crud:price.discountPercent",{percent:Math.round(d),defaultValue:"-{{percent}}%"})}`;return o?`${V}${x}${j}`:n?y(g,{variant:"success",weight:"bold",children:[V,x,j]}):y(h,{direction:"column",gap:"tight",align:"end",children:[s(g,{variant:"muted",style:{textDecoration:"line-through",fontSize:"var(--font-size-sm)"},children:z}),y(g,{variant:"success",weight:"bold",children:[V,x]})]})}return`${S(a,f)}${x}`},range:(e,i,t)=>typeof e=="number"?e.toLocaleString():String(e),rating:(e,i,t,r)=>{const n=r?.compact??!1;if(e==null)return p(n);const o=typeof e=="number"?e:parseFloat(e);if(isNaN(o))return p(n);const l=i.validation?.max??5;return s(I,{value:o,max:l,readonly:!0,"aria-label":`${o} out of ${l} stars`})},duration:(e,i,t,r)=>{const n=r?.compact??!1;if(e==null)return p(n);const o=typeof e=="number"?e:parseInt(String(e),10);if(Number.isNaN(o))return p(n);if(o===0)return t("crud:duration.zero",{defaultValue:"\u2014"});if(o<60)return t("crud:duration.minutes",{count:o,defaultValue:`${o} min`});const l=Math.floor(o/60),a=o%60;return t("crud:duration.hoursMinutes",{hours:l,minutes:a,defaultValue:a===0?`${l}h`:`${l}h ${a}min`})},gdprConsent:(e,i,t,r)=>{const n=r?.compact??!1;if(!e||typeof e!="object")return p(n);const o=e.gdprConsent===!0,l=e.gdprConsentDate,a=e.gdprConsentVersion,f=t("crud:gdprConsent.display.yes",{defaultValue:"Consented"}),u=t("crud:gdprConsent.display.no",{defaultValue:"Not consented"});if(!o)return u;const d=[f];if(l)try{const m=new Date(l);d.push(m.toLocaleDateString())}catch{d.push(l)}return a&&d.push(`v${a}`),d.join(" \xB7 ")},select:(e,i,t)=>{const r=i.validation?.options;if(Array.isArray(r)){const o=r.find(l=>l.value===e)?.label;return o?T(o,t):String(e)}return String(e)},radio:(e,i,t)=>{const r=i.validation?.options;if(Array.isArray(r)){const o=r.find(l=>l.value===e)?.label;return o?T(o,t):String(e)}return String(e)},combobox:(e,i,t)=>{const r=i.validation?.options;if(Array.isArray(r)){const o=r.find(l=>l.value===e)?.label;return o?T(o,t):String(e)}return String(e)},multiselect:(e,i,t)=>{if(Array.isArray(e)){const r=i.validation?.options;if(Array.isArray(r))return e.map(o=>{const a=r.find(f=>f.value===o)?.label;return a?T(a,t):o}).join(", ")}return String(e)},image:(e,i,t,r)=>{const n=r?.compact??!1;return e==null||e===""?p(n):typeof e=="string"?s("img",{src:e,alt:i.label||"",style:{width:n?"40px":void 0,height:n?"40px":void 0,maxWidth:n?void 0:"200px",maxHeight:n?void 0:"150px",objectFit:"cover",borderRadius:"var(--radius-sm)"}}):p(n)},images:(e,i,t,r)=>{const n=r?.compact??!1;if(!Array.isArray(e)||e.length===0)return p(n);const o=e[0],l=typeof o=="object"&&o.thumbUrl?o.thumbUrl:o;return n?y("div",{style:{display:"flex",alignItems:"center",gap:"var(--gap-xs)"},children:[s("img",{src:l,alt:"",style:{width:"40px",height:"40px",objectFit:"cover",borderRadius:"var(--radius-sm)"}}),e.length>1&&y("span",{style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:["+",e.length-1]})]}):s(L,{images:e,altPrefix:i.label||"Image"})},files:(e,i,t,r)=>{const n=r?.compact??!1;return!Array.isArray(e)||e.length===0?p(n):s(h,{gap:"tight",children:e.map((o,l)=>y("a",{href:o.url||o,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none",display:"flex",alignItems:"center",fontSize:"var(--font-size-sm)"},children:[o.filename||`File ${l+1}`,o.size&&y(g,{level:"caption",variant:"muted",style:{marginLeft:"var(--gap-sm)"},children:["(",Math.round(o.size/1024)," KB)"]})]},l))})},documents:(e,i,t,r)=>{const n=r?.compact??!1;return!Array.isArray(e)||e.length===0?p(n):s(h,{gap:"tight",children:e.map((o,l)=>y("a",{href:o.url||o,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none",display:"flex",alignItems:"center",fontSize:"var(--font-size-sm)"},children:[o.filename||`File ${l+1}`,o.size&&y(g,{level:"caption",variant:"muted",style:{marginLeft:"var(--gap-sm)"},children:["(",Math.round(o.size/1024)," KB)"]})]},l))})},file:(e,i,t,r)=>{const n=r?.compact??!1;if(!e)return p(n);const o=typeof e=="string"?e:e.url,l=typeof e=="string"?"View file":e.filename||"View file";return y("a",{href:o,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none"},children:[l,typeof e=="object"&&e.size&&y("span",{style:{color:"var(--muted-foreground)",marginLeft:"var(--gap-sm)"},children:["(",Math.round(e.size/1024)," KB)"]})]})},document:(e,i,t,r)=>{const n=r?.compact??!1;if(!e)return p(n);const o=typeof e=="string"?e:e.url,l=typeof e=="string"?"View file":e.filename||"View file";return y("a",{href:o,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none"},children:[l,typeof e=="object"&&e.size&&y("span",{style:{color:"var(--muted-foreground)",marginLeft:"var(--gap-sm)"},children:["(",Math.round(e.size/1024)," KB)"]})]})},reference:(e,i,t,r)=>{const n=r?.compact??!1;if(!e)return p(n);const o=i.validation?.reference;if(r?.referenceData&&typeof o=="string"){const l=r.referenceData[o]?.[String(e)];if(l)return l}if(typeof e=="object"&&e!==null){const l=e.displayName||e.name||e.id||String(e);return String(l)}return String(e)},geopoint:(e,i,t,r)=>{const n=r?.compact??!1;return e&&typeof e=="object"&&"lat"in e&&"lng"in e?`${e.lat.toFixed(6)}, ${e.lng.toFixed(6)}`:p(n)},address:(e,i,t)=>e&&typeof e=="object"&&"formatted_address"in e?e.formatted_address:String(e),map:(e,i,t,r)=>{const n=r?.compact??!1;if(e&&typeof e=="object"){const o=Object.entries(e);return o.length===0?p(n):y(h,{direction:"column",gap:"tight",children:[o.slice(0,5).map(([l,a])=>y(g,{style:{fontSize:"var(--font-size-sm)"},children:[y("strong",{children:[l,":"]})," ",String(a)]},l)),o.length>5&&y(g,{variant:"muted",children:["+",o.length-5," more"]})]})}return p(n)},array:(e,i,t,r)=>{const n=r?.compact??!1;return Array.isArray(e)?e.length===0?p(n):e.join(", "):p(n)},"field-array":(e,i,t,r)=>{const n=r?.compact??!1;if(!Array.isArray(e)||e.length===0)return p(n);const o=i.options?.fieldSpecific?.fields;return e.map(l=>{if(typeof l!="object"||l==null)return"";const a=l;return(o?o.map(u=>u.name):Object.keys(a)).map(u=>a[u]).filter(u=>u!=null&&u!=="").map(u=>typeof u=="object"?JSON.stringify(u):String(u)).join(" \xB7 ")}).filter(Boolean).join(", ")},password:()=>"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",email:(e,i,t)=>y(h,{direction:"row",gap:"tight",align:"center",children:[s("a",{href:`mailto:${e}`,style:{color:"var(--primary)",flex:1},onClick:r=>r.stopPropagation(),children:e}),s(w,{text:e,tooltipText:t("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:t("crud:actions.copyEmail",{defaultValue:"Copy email"}),onClick:r=>r.stopPropagation()})]}),tel:(e,i,t)=>y(h,{direction:"row",gap:"tight",align:"center",children:[s("a",{href:`tel:${e}`,style:{color:"var(--primary)",flex:1},onClick:r=>r.stopPropagation(),children:e}),s(w,{text:e,tooltipText:t("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:t("crud:actions.copyPhone",{defaultValue:"Copy phone"}),onClick:r=>r.stopPropagation()})]}),iban:(e,i,t,r)=>{const n=r?.compact??!1;return e?y(h,{direction:"row",gap:"tight",align:"center",children:[s(g,{style:{flex:1},children:e}),s(w,{text:e,tooltipText:t("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:t("crud:actions.copyIban",{defaultValue:"Copy IBAN"}),onClick:o=>o.stopPropagation()})]}):p(n)},url:(e,i,t)=>s("a",{href:e,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)"},children:e}),color:(e,i,t)=>y(h,{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(g,{children:e})]}),textarea:(e,i,t)=>String(e),text:(e,i,t)=>String(e),richtext:(e,i,t,r)=>{const n=r?.compact??!1;return e&&typeof e=="string"?n?e.replace(/<[^>]*>/g,"").trim()||s("span",{style:{color:"var(--muted-foreground)"},children:"\u2014"}):s("div",{dangerouslySetInnerHTML:{__html:me(e)},style:{padding:"var(--gap-sm)",fontSize:"var(--font-size-sm)",lineHeight:"1.6"}}):p(n)}};function ge(e){return e.type==="avatar"}function be(e){return e.type==="badge"}let D=!1;function we(e,i){if(D)return;D=!0;const t=r=>{const{type:n,components:o}=r;o&&i.registerComponent(n,o.controlled,o.uncontrolled),e.set(n,r)};t({type:"text",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.text,components:{controlled:b,uncontrolled:r=>{const{value:n,onChange:o,label:l,error:a,config:f}=r;return s(F,{label:l||"",value:typeof n=="string"?n:"",onChange:d=>{const m=d.target.value;o(m)},error:a,...f.options})}}}),t({type:"email",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.email,components:{controlled:b,uncontrolled:r=>{const{value:n,onChange:o,label:l,error:a,config:f}=r;return s(F,{label:l||"",value:typeof n=="string"?n:"",onChange:d=>{const m=d.target.value;o(m)},error:a,type:"email",...f.options})}}}),t({type:"url",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.url,components:{controlled:b,uncontrolled:r=>{const{value:n,onChange:o,label:l,error:a,config:f}=r;return s(F,{label:l||"",value:typeof n=="string"?n:"",onChange:d=>{const m=d.target.value;o(m)},error:a,type:"url",...f.options})}}}),t({type:"color",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.color,components:{controlled:b,uncontrolled:r=>{const{value:n,onChange:o,label:l,error:a,config:f}=r;return s(F,{label:l||"",value:typeof n=="string"?n:"",onChange:d=>{const m=d.target.value;o(m)},error:a,type:"color",...f.options})}}}),t({type:"textarea",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.textarea,components:{controlled:ee,uncontrolled:r=>{const{value:n,onChange:o,label:l,error:a,config:f}=r;return s(ue,{label:l||"",value:typeof n=="string"?n:"",onChange:d=>{const m=d.target.value;o(m)},error:a,...f.options})}}}),t({type:"richtext",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.richtext,components:{controlled:te,uncontrolled:r=>{const{value:n,onChange:o,label:l,error:a,config:f}=r;return s(ye,{label:l||"",value:typeof n=="string"?n:"",onChange:d=>{const m=d.target.value;o(m)},error:a,...f.options})}}}),t({type:"password",filterable:!1,filterType:"none",valueType:"string",displayFormatter:c.password,components:{controlled:Y}}),t({type:"tel",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.tel,components:{controlled:G}}),t({type:"iban",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.iban,components:{controlled:b,uncontrolled:r=>{const{value:n,onChange:o,label:l,error:a,config:f}=r;return s(F,{label:l||"",value:typeof n=="string"?n:"",onChange:d=>{const m=d.target.value.replace(/\s/g,"").toUpperCase();o(m)},error:a,...f.options})}}}),t({type:"number",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.number,components:{controlled:K}}),t({type:"currency",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.currency,components:{controlled:ce}}),t({type:"price",filterable:!0,filterType:"range",valueType:"object",displayFormatter:c.price,components:{controlled:se}}),t({type:"range",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.range,components:{controlled:J}}),t({type:"year",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.year,components:{controlled:Z}}),t({type:"rating",filterable:!0,filterType:"rating",valueType:"number",displayFormatter:c.rating,components:{controlled:W}}),t({type:"duration",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.duration,components:{controlled:q}}),t({type:"boolean",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.boolean,components:{controlled:k}}),t({type:"checkbox",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.checkbox,components:{controlled:k}}),t({type:"gdprConsent",filterable:!0,filterType:"select",valueType:"object",displayFormatter:c.gdprConsent,components:{controlled:ae}}),t({type:"switch",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.switch,components:{controlled:le}}),t({type:"date",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.date,components:{controlled:C}}),t({type:"datetime-local",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c["datetime-local"],components:{controlled:C}}),t({type:"time",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.time,components:{controlled:C}}),t({type:"week",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.week,components:{controlled:C}}),t({type:"month",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.month,components:{controlled:C}}),t({type:"timestamp",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.timestamp,components:{controlled:re}}),t({type:"file",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.file,components:{controlled:M}}),t({type:"files",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.files,components:{controlled:R}}),t({type:"document",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.document,components:{controlled:_}}),t({type:"documents",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.documents,components:{controlled:v}}),t({type:"image",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.image,components:{controlled:E}}),t({type:"images",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.images,components:{controlled:ie}}),t({type:"geopoint",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.geopoint,components:{controlled:B}}),t({type:"address",filterable:!0,filterType:"address",valueType:"object",displayFormatter:c.address,components:{controlled:ne}}),t({type:"map",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.map,components:{controlled:O}}),t({type:"array",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.array,components:{controlled:H}}),t({type:"field-array",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c["field-array"],components:{controlled:oe}}),t({type:"select",filterable:!0,filterType:"select",valueType:"string",displayFormatter:c.select,components:{controlled:P}}),t({type:"combobox",filterable:!0,filterType:"select",valueType:"string",displayFormatter:c.combobox,components:{controlled:N}}),t({type:"multiselect",filterable:!0,filterType:"multiselect",valueType:"array",displayFormatter:c.multiselect,components:{controlled:U}}),t({type:"radio",filterable:!0,filterType:"select",valueType:"string",displayFormatter:c.radio,components:{controlled:Q}}),t({type:"reference",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.reference,components:{controlled:X}}),t({type:"hidden",filterable:!1,filterType:"none",valueType:"string",components:{controlled:b,uncontrolled:r=>{const{name:n,value:o}=r;return s(fe,{name:n,value:typeof o=="string"?o:""})}}}),t({type:"avatar",filterable:!1,filterType:"none",valueType:"string",components:{controlled:b,uncontrolled:r=>{const{value:n,onChange:o,error:l,config:a,t:f}=r;if(!ge(a))throw new Error("Invalid config type for avatar field");return s(pe,{config:a,value:typeof n=="string"?n:"",onChange:d=>{o(d)},error:!!l,helperText:l||void 0,t:f,...a.options})}}}),t({type:"badge",filterable:!1,filterType:"none",valueType:"string",components:{controlled:b,uncontrolled:r=>{const{value:n,onChange:o,error:l,config:a,t:f}=r;if(!be(a))throw new Error("Invalid config type for badge field");return s(de,{config:a,value:typeof n=="string"?n:"",onChange:d=>{o(d)},error:!!l,helperText:l||void 0,t:f,...a.options})}}}),t({type:"submit",filterable:!1,filterType:"none",valueType:"string",components:{controlled:b,uncontrolled:r=>{const{name:n,label:o,config:l}=r;return s(A,{label:o||n,type:"submit",onClick:()=>{},...l.options})}}}),t({type:"reset",filterable:!1,filterType:"none",valueType:"string",components:{controlled:b,uncontrolled:r=>{const{name:n,label:o,config:l}=r;return s(A,{label:o||n,type:"reset",onClick:()=>{},...l.options})}}})}export{we as registerAllBuiltinFieldTypes};
|
|
1
|
+
"use client";import{jsx as p,jsxs as f}from"react/jsx-runtime";import{Text as m,Stack as b,ImageGallery as V,Rating as L,CopyToClipboard as w}from"@donotdev/components";import{formatCurrency as F}from"@donotdev/core";import{ControlledCheckboxField as k,ControlledComboboxField as $,ControlledDateField as h,ControlledDropdownField as I,ControlledFileField as N,ControlledMultiFileField as M,ControlledDocumentField as P,ControlledMultiDocumentField as R,ControlledGeoPointField as B,ControlledImageField as _,ControlledMapField as E,ControlledMultiDropdownField as U,ControlledMultiInputField as H,ControlledNumberField as K,ControlledPasswordField as Y,ControlledPhoneField as G,ControlledRangeField as O,ControlledRatingField as J,ControlledDurationField as W,ControlledRadioField as q,ControlledReferenceField as Q,ControlledYearField as X,ControlledTextField as g,ControlledTextareaField as Z,ControlledRichTextField as ee,ControlledTimestampField as te,ControlledAddressField as re,ControlledFieldArrayField as oe,ControlledSwitchField as ne,ControlledMultiImageField as le,ControlledGdprConsentField as ae,ControlledCurrencyField as ie,ControlledPriceField as ce}from"./components/controlled";import{AvatarFieldComponent as se,BadgeFieldComponent as pe,ButtonFieldComponent as A,HiddenFieldComponent as de,TextAreaComponent as ue,RichTextComponent as ye,TextFieldComponent as T}from"./components/form/fields";import{translateLabel as v}from"./forms/utils";import{sanitizeHtml as fe}from"./utils/sanitizeHtml";function d(e){return e?p("span",{style:{color:"var(--muted-foreground)"},children:"\u2014"}):p(m,{variant:"muted",children:"\u2014"})}const i={timestamp:(e,a,r,o)=>{const t=o?.compact??!1;if(e==null||e==="")return d(t);try{return(e instanceof Date?e:new Date(e)).toLocaleString()}catch{return String(e)}},date:(e,a,r,o)=>{const t=o?.compact??!1;if(e==null||e==="")return d(t);try{return(e instanceof Date?e:new Date(e)).toLocaleDateString()}catch{return String(e)}},"datetime-local":(e,a,r,o)=>{const t=o?.compact??!1;if(e==null||e==="")return d(t);try{return(e instanceof Date?e:new Date(e)).toLocaleString()}catch{return String(e)}},time:(e,a,r,o)=>{const t=o?.compact??!1;if(e==null||e==="")return d(t);try{return(e instanceof Date?e:new Date(e)).toLocaleTimeString()}catch{return String(e)}},week:(e,a,r,o)=>{const t=o?.compact??!1;return e==null||e===""?d(t):String(e)},month:(e,a,r,o)=>{const t=o?.compact??!1;return e==null||e===""?d(t):String(e)},boolean:(e,a,r)=>e?"Yes":"No",checkbox:(e,a,r)=>e?"Yes":"No",switch:(e,a,r)=>{const o=a.options?.fieldSpecific;if(o){const t=o.uncheckedValue??!1,n=o.checkedValue??!0;if(e===n&&o.checkedLabel)return v(o.checkedLabel,r);if(e===t&&o.uncheckedLabel)return v(o.uncheckedLabel,r)}return e?"Yes":"No"},year:(e,a,r)=>String(e),number:e=>e==null||e===""?"\u2014":typeof e=="number"?e.toLocaleString():String(e),currency:(e,a,r)=>{if(e==null||isNaN(e))return"";const o=(a.options||{}).fieldSpecific?.currency||"EUR";return F(e,o)},price:(e,a,r,o)=>{const t=o?.compact??!1,n=o?.asString??!1,l=e!=null&&typeof e=="number"?{amount:e,currency:"EUR",vatIncluded:!0,discountPercent:0}:e;if(l==null||typeof l!="object")return d(t);const c=l.amount;if(c==null||isNaN(c))return d(t);const s=l.currency||"EUR",y=l.vatIncluded??!0,u=l.discountPercent??0,x=u>0?c*(1-u/100):c,C=y?` ${r("crud:price.vatIncluded",{defaultValue:"VAT Incl."})}`:"";if(u>0){const z=F(c,s),S=F(x,s),j=` ${r("crud:price.discountPercent",{percent:Math.round(u),defaultValue:"-{{percent}}%"})}`;return n?`${S}${C}${j}`:t?f(m,{variant:"success",weight:"bold",children:[S,C,j]}):f(b,{direction:"column",gap:"tight",align:"end",children:[p(m,{variant:"muted",style:{textDecoration:"line-through",fontSize:"var(--font-size-sm)"},children:z}),f(m,{variant:"success",weight:"bold",children:[S,C]})]})}return`${F(c,s)}${C}`},range:(e,a,r)=>typeof e=="number"?e.toLocaleString():String(e),rating:(e,a,r,o)=>{const t=o?.compact??!1;if(e==null)return d(t);const n=typeof e=="number"?e:parseFloat(e);if(isNaN(n))return d(t);const l=a.validation?.max??5;return p(L,{value:n,max:l,readonly:!0,"aria-label":`${n} out of ${l} stars`})},duration:(e,a,r,o)=>{const t=o?.compact??!1;if(e==null)return d(t);const n=typeof e=="number"?e:parseInt(String(e),10);if(Number.isNaN(n))return d(t);if(n===0)return r("crud:duration.zero",{defaultValue:"\u2014"});if(n<60)return r("crud:duration.minutes",{count:n,defaultValue:`${n} min`});const l=Math.floor(n/60),c=n%60;return r("crud:duration.hoursMinutes",{hours:l,minutes:c,defaultValue:c===0?`${l}h`:`${l}h ${c}min`})},gdprConsent:(e,a,r,o)=>{const t=o?.compact??!1;if(!e||typeof e!="object")return d(t);const n=e.gdprConsent===!0,l=e.gdprConsentDate,c=e.gdprConsentVersion,s=r("crud:gdprConsent.display.yes",{defaultValue:"Consented"}),y=r("crud:gdprConsent.display.no",{defaultValue:"Not consented"});if(!n)return y;const u=[s];if(l)try{const x=new Date(l);u.push(x.toLocaleDateString())}catch{u.push(l)}return c&&u.push(`v${c}`),u.join(" \xB7 ")},select:(e,a,r)=>{const o=a.validation?.options;if(Array.isArray(o)){const t=o.find(n=>n.value===e)?.label;return t?v(t,r):String(e)}return String(e)},radio:(e,a,r)=>{const o=a.validation?.options;if(Array.isArray(o)){const t=o.find(n=>n.value===e)?.label;return t?v(t,r):String(e)}return String(e)},combobox:(e,a,r)=>{const o=a.validation?.options;if(Array.isArray(o)){const t=o.find(n=>n.value===e)?.label;return t?v(t,r):String(e)}return String(e)},multiselect:(e,a,r)=>{if(Array.isArray(e)){const o=a.validation?.options;if(Array.isArray(o))return e.map(t=>{const n=o.find(l=>l.value===t)?.label;return n?v(n,r):t}).join(", ")}return String(e)},image:(e,a,r,o)=>{const t=o?.compact??!1;return e==null||e===""?d(t):typeof e=="string"?p("img",{src:e,alt:a.label||"",style:{width:t?"40px":void 0,height:t?"40px":void 0,maxWidth:t?void 0:"200px",maxHeight:t?void 0:"150px",objectFit:"cover",borderRadius:"var(--radius-sm)"}}):d(t)},images:(e,a,r,o)=>{const t=o?.compact??!1;if(!Array.isArray(e)||e.length===0)return d(t);const n=e[0],l=typeof n=="object"&&n.thumbUrl?n.thumbUrl:n;return t?f("div",{style:{display:"flex",alignItems:"center",gap:"var(--gap-xs)"},children:[p("img",{src:l,alt:"",style:{width:"40px",height:"40px",objectFit:"cover",borderRadius:"var(--radius-sm)"}}),e.length>1&&f("span",{style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:["+",e.length-1]})]}):p(V,{images:e,altPrefix:a.label||"Image"})},files:(e,a,r,o)=>{const t=o?.compact??!1;return!Array.isArray(e)||e.length===0?d(t):p(b,{gap:"tight",children:e.map((n,l)=>f("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 ${l+1}`,n.size&&f(m,{level:"caption",variant:"muted",style:{marginLeft:"var(--gap-sm)"},children:["(",Math.round(n.size/1024)," KB)"]})]},l))})},documents:(e,a,r,o)=>{const t=o?.compact??!1;return!Array.isArray(e)||e.length===0?d(t):p(b,{gap:"tight",children:e.map((n,l)=>f("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 ${l+1}`,n.size&&f(m,{level:"caption",variant:"muted",style:{marginLeft:"var(--gap-sm)"},children:["(",Math.round(n.size/1024)," KB)"]})]},l))})},file:(e,a,r,o)=>{const t=o?.compact??!1;if(!e)return d(t);const n=typeof e=="string"?e:e.url,l=typeof e=="string"?"View file":e.filename||"View file";return f("a",{href:n,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none"},children:[l,typeof e=="object"&&e.size&&f("span",{style:{color:"var(--muted-foreground)",marginLeft:"var(--gap-sm)"},children:["(",Math.round(e.size/1024)," KB)"]})]})},document:(e,a,r,o)=>{const t=o?.compact??!1;if(!e)return d(t);const n=typeof e=="string"?e:e.url,l=typeof e=="string"?"View file":e.filename||"View file";return f("a",{href:n,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none"},children:[l,typeof e=="object"&&e.size&&f("span",{style:{color:"var(--muted-foreground)",marginLeft:"var(--gap-sm)"},children:["(",Math.round(e.size/1024)," KB)"]})]})},reference:(e,a,r,o)=>{const t=o?.compact??!1;if(!e)return d(t);const n=a.validation?.reference;if(o?.referenceData&&typeof n=="string"){const l=o.referenceData[n]?.[String(e)];if(l)return l}if(typeof e=="object"&&e!==null){const l=e.displayName||e.name||e.id||String(e);return String(l)}return String(e)},geopoint:(e,a,r,o)=>{const t=o?.compact??!1;return e&&typeof e=="object"&&"lat"in e&&"lng"in e?`${e.lat.toFixed(6)}, ${e.lng.toFixed(6)}`:d(t)},address:(e,a,r)=>e&&typeof e=="object"&&"formatted_address"in e?e.formatted_address:String(e),map:(e,a,r,o)=>{const t=o?.compact??!1;if(e&&typeof e=="object"){const n=Object.entries(e);return n.length===0?d(t):f(b,{direction:"column",gap:"tight",children:[n.slice(0,5).map(([l,c])=>f(m,{style:{fontSize:"var(--font-size-sm)"},children:[f("strong",{children:[l,":"]})," ",String(c)]},l)),n.length>5&&f(m,{variant:"muted",children:["+",n.length-5," more"]})]})}return d(t)},array:(e,a,r,o)=>{const t=o?.compact??!1;return Array.isArray(e)?e.length===0?d(t):e.join(", "):d(t)},"field-array":(e,a,r,o)=>{const t=o?.compact??!1;if(!Array.isArray(e)||e.length===0)return d(t);const n=a.options?.fieldSpecific?.fields;return e.map(l=>{if(typeof l!="object"||l==null)return"";const c=l;return(n?n.map(s=>s.name):Object.keys(c)).map(s=>c[s]).filter(s=>s!=null&&s!=="").map(s=>typeof s=="object"?JSON.stringify(s):String(s)).join(" \xB7 ")}).filter(Boolean).join(", ")},password:()=>"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",email:(e,a,r)=>f(b,{direction:"row",gap:"tight",align:"center",children:[p("a",{href:`mailto:${e}`,style:{color:"var(--primary)",flex:1},onClick:o=>o.stopPropagation(),children:e}),p(w,{text:e,tooltipText:r("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:r("crud:actions.copyEmail",{defaultValue:"Copy email"}),onClick:o=>o.stopPropagation()})]}),tel:(e,a,r)=>f(b,{direction:"row",gap:"tight",align:"center",children:[p("a",{href:`tel:${e}`,style:{color:"var(--primary)",flex:1},onClick:o=>o.stopPropagation(),children:e}),p(w,{text:e,tooltipText:r("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:r("crud:actions.copyPhone",{defaultValue:"Copy phone"}),onClick:o=>o.stopPropagation()})]}),iban:(e,a,r,o)=>{const t=o?.compact??!1;return e?f(b,{direction:"row",gap:"tight",align:"center",children:[p(m,{style:{flex:1},children:e}),p(w,{text:e,tooltipText:r("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:r("crud:actions.copyIban",{defaultValue:"Copy IBAN"}),onClick:n=>n.stopPropagation()})]}):d(t)},url:(e,a,r)=>p("a",{href:e,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)"},children:e}),color:(e,a,r)=>f(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,a,r)=>String(e),text:(e,a,r)=>String(e),richtext:(e,a,r,o)=>{const t=o?.compact??!1;return e&&typeof e=="string"?t?e.replace(/<[^>]*>/g,"").trim()||p("span",{style:{color:"var(--muted-foreground)"},children:"\u2014"}):p("div",{dangerouslySetInnerHTML:{__html:fe(e)},style:{padding:"var(--gap-sm)",fontSize:"var(--font-size-sm)",lineHeight:"1.6"}}):d(t)}};function me(e){return e.type==="avatar"}function ge(e){return e.type==="badge"}let D=!1;function be(e,a){if(D)return;D=!0;const r=o=>{const{type:t,components:n}=o;n&&a.registerComponent(t,n.controlled,n.uncontrolled),e.set(t,o)};r({type:"text",filterable:!0,filterType:"text",valueType:"string",displayFormatter:i.text,components:{controlled:g,uncontrolled:o=>{const{value:t,onChange:n,label:l,error:c,config:s}=o;return p(T,{label:l||"",value:typeof t=="string"?t:"",onChange:y=>{const u=y.target.value;n(u)},error:c,...s.options})}}}),r({type:"email",filterable:!0,filterType:"text",valueType:"string",displayFormatter:i.email,components:{controlled:g,uncontrolled:o=>{const{value:t,onChange:n,label:l,error:c,config:s}=o;return p(T,{label:l||"",value:typeof t=="string"?t:"",onChange:y=>{const u=y.target.value;n(u)},error:c,type:"email",...s.options})}}}),r({type:"url",filterable:!0,filterType:"text",valueType:"string",displayFormatter:i.url,components:{controlled:g,uncontrolled:o=>{const{value:t,onChange:n,label:l,error:c,config:s}=o;return p(T,{label:l||"",value:typeof t=="string"?t:"",onChange:y=>{const u=y.target.value;n(u)},error:c,type:"url",...s.options})}}}),r({type:"color",filterable:!0,filterType:"text",valueType:"string",displayFormatter:i.color,components:{controlled:g,uncontrolled:o=>{const{value:t,onChange:n,label:l,error:c,config:s}=o;return p(T,{label:l||"",value:typeof t=="string"?t:"",onChange:y=>{const u=y.target.value;n(u)},error:c,type:"color",...s.options})}}}),r({type:"textarea",filterable:!0,filterType:"text",valueType:"string",displayFormatter:i.textarea,components:{controlled:Z,uncontrolled:o=>{const{value:t,onChange:n,label:l,error:c,config:s}=o;return p(ue,{label:l||"",value:typeof t=="string"?t:"",onChange:y=>{const u=y.target.value;n(u)},error:c,...s.options})}}}),r({type:"richtext",filterable:!0,filterType:"text",valueType:"string",displayFormatter:i.richtext,components:{controlled:ee,uncontrolled:o=>{const{value:t,onChange:n,label:l,error:c,config:s}=o;return p(ye,{label:l||"",value:typeof t=="string"?t:"",onChange:y=>{const u=y.target.value;n(u)},error:c,...s.options})}}}),r({type:"password",filterable:!1,filterType:"none",valueType:"string",displayFormatter:i.password,components:{controlled:Y}}),r({type:"tel",filterable:!0,filterType:"text",valueType:"string",displayFormatter:i.tel,components:{controlled:G}}),r({type:"iban",filterable:!0,filterType:"text",valueType:"string",displayFormatter:i.iban,components:{controlled:g,uncontrolled:o=>{const{value:t,onChange:n,label:l,error:c,config:s}=o;return p(T,{label:l||"",value:typeof t=="string"?t:"",onChange:y=>{const u=y.target.value.replace(/\s/g,"").toUpperCase();n(u)},error:c,...s.options})}}}),r({type:"number",filterable:!0,filterType:"range",valueType:"number",displayFormatter:i.number,components:{controlled:K}}),r({type:"currency",filterable:!0,filterType:"range",valueType:"number",displayFormatter:i.currency,components:{controlled:ie}}),r({type:"price",filterable:!0,filterType:"range",valueType:"object",displayFormatter:i.price,components:{controlled:ce}}),r({type:"range",filterable:!0,filterType:"range",valueType:"number",displayFormatter:i.range,components:{controlled:O}}),r({type:"year",filterable:!0,filterType:"range",valueType:"number",displayFormatter:i.year,components:{controlled:X}}),r({type:"rating",filterable:!0,filterType:"rating",valueType:"number",displayFormatter:i.rating,components:{controlled:J}}),r({type:"duration",filterable:!0,filterType:"range",valueType:"number",displayFormatter:i.duration,components:{controlled:W}}),r({type:"boolean",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:i.boolean,components:{controlled:k}}),r({type:"checkbox",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:i.checkbox,components:{controlled:k}}),r({type:"gdprConsent",filterable:!0,filterType:"select",valueType:"object",displayFormatter:i.gdprConsent,components:{controlled:ae}}),r({type:"switch",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:i.switch,components:{controlled:ne}}),r({type:"date",filterable:!0,filterType:"range",valueType:"date",displayFormatter:i.date,components:{controlled:h}}),r({type:"datetime-local",filterable:!0,filterType:"range",valueType:"date",displayFormatter:i["datetime-local"],components:{controlled:h}}),r({type:"time",filterable:!0,filterType:"range",valueType:"date",displayFormatter:i.time,components:{controlled:h}}),r({type:"week",filterable:!0,filterType:"range",valueType:"date",displayFormatter:i.week,components:{controlled:h}}),r({type:"month",filterable:!0,filterType:"range",valueType:"date",displayFormatter:i.month,components:{controlled:h}}),r({type:"timestamp",filterable:!0,filterType:"range",valueType:"date",displayFormatter:i.timestamp,components:{controlled:te}}),r({type:"file",filterable:!1,filterType:"none",valueType:"object",displayFormatter:i.file,components:{controlled:N}}),r({type:"files",filterable:!1,filterType:"none",valueType:"array",displayFormatter:i.files,components:{controlled:M}}),r({type:"document",filterable:!1,filterType:"none",valueType:"object",displayFormatter:i.document,components:{controlled:P}}),r({type:"documents",filterable:!1,filterType:"none",valueType:"array",displayFormatter:i.documents,components:{controlled:R}}),r({type:"image",filterable:!1,filterType:"none",valueType:"object",displayFormatter:i.image,components:{controlled:_}}),r({type:"images",filterable:!1,filterType:"none",valueType:"array",displayFormatter:i.images,components:{controlled:le}}),r({type:"geopoint",filterable:!1,filterType:"none",valueType:"object",displayFormatter:i.geopoint,components:{controlled:B}}),r({type:"address",filterable:!0,filterType:"address",valueType:"object",displayFormatter:i.address,components:{controlled:re}}),r({type:"map",filterable:!1,filterType:"none",valueType:"object",displayFormatter:i.map,components:{controlled:E}}),r({type:"array",filterable:!1,filterType:"none",valueType:"array",displayFormatter:i.array,components:{controlled:H}}),r({type:"field-array",filterable:!1,filterType:"none",valueType:"array",displayFormatter:i["field-array"],components:{controlled:oe}}),r({type:"select",filterable:!0,filterType:"select",valueType:"string",displayFormatter:i.select,components:{controlled:I}}),r({type:"combobox",filterable:!0,filterType:"select",valueType:"string",displayFormatter:i.combobox,components:{controlled:$}}),r({type:"multiselect",filterable:!0,filterType:"multiselect",valueType:"array",displayFormatter:i.multiselect,components:{controlled:U}}),r({type:"radio",filterable:!0,filterType:"select",valueType:"string",displayFormatter:i.radio,components:{controlled:q}}),r({type:"reference",filterable:!0,filterType:"text",valueType:"string",displayFormatter:i.reference,components:{controlled:Q}}),r({type:"hidden",filterable:!1,filterType:"none",valueType:"string",components:{controlled:g,uncontrolled:o=>{const{name:t,value:n}=o;return p(de,{name:t,value:typeof n=="string"?n:""})}}}),r({type:"avatar",filterable:!1,filterType:"none",valueType:"string",components:{controlled:g,uncontrolled:o=>{const{value:t,onChange:n,error:l,config:c,t:s}=o;if(!me(c))throw new Error("Invalid config type for avatar field");return p(se,{config:c,value:typeof t=="string"?t:"",onChange:y=>{n(y)},error:!!l,helperText:l||void 0,t:s,...c.options})}}}),r({type:"badge",filterable:!1,filterType:"none",valueType:"string",components:{controlled:g,uncontrolled:o=>{const{value:t,onChange:n,error:l,config:c,t:s}=o;if(!ge(c))throw new Error("Invalid config type for badge field");return p(pe,{config:c,value:typeof t=="string"?t:"",onChange:y=>{n(y)},error:!!l,helperText:l||void 0,t:s,...c.options})}}}),r({type:"submit",filterable:!1,filterType:"none",valueType:"string",components:{controlled:g,uncontrolled:o=>{const{name:t,label:n,config:l}=o;return p(A,{label:n||t,type:"submit",onClick:()=>{},...l.options})}}}),r({type:"reset",filterable:!1,filterType:"none",valueType:"string",components:{controlled:g,uncontrolled:o=>{const{name:t,label:n,config:l}=o;return p(A,{label:n||t,type:"reset",onClick:()=>{},...l.options})}}})}export{be as registerAllBuiltinFieldTypes};
|
package/dist/stores/FormStore.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{createDoNotDevStore as
|
|
1
|
+
"use client";import{createDoNotDevStore as f}from"@donotdev/core";const a={status:"idle",error:null,uploadProgress:0,isDirty:!1},i=f({name:"form-store",createStore:(t,o)=>{const m=new Map;return{forms:{},startSubmit:s=>{t(r=>{const e=r.forms[s]||a;return{forms:{...r.forms,[s]:{...e,status:"uploading",error:null,uploadProgress:0}}}})},setUploading:(s,r)=>{t(e=>{const u=e.forms[s]||a;return{forms:{...e.forms,[s]:{...u,status:"uploading",uploadProgress:Math.min(100,Math.max(0,r))}}}})},setValidating:s=>{t(r=>{const e=r.forms[s]||a;return{forms:{...r.forms,[s]:{...e,status:"validating",uploadProgress:100}}}})},setSubmitting:s=>{t(r=>{const e=r.forms[s]||a;return{forms:{...r.forms,[s]:{...e,status:"submitting"}}}})},setSuccess:s=>{t(u=>{const n=u.forms[s]||a;return{forms:{...u.forms,[s]:{...n,status:"success",error:null}}}});const r=m.get(s);r!==void 0&&clearTimeout(r);const e=setTimeout(()=>{m.delete(s),o().reset(s)},1500);m.set(s,e)},setError:(s,r)=>{t(e=>{const u=e.forms[s]||a;return{forms:{...e.forms,[s]:{...u,status:"error",error:r}}}})},reset:s=>{t(r=>({forms:{...r.forms,[s]:{...a}}}))},setIsDirty:(s,r)=>{t(e=>{const u=e.forms[s]||a;return{forms:{...e.forms,[s]:{...u,isDirty:r}}}})},hasDirtyForms:()=>{const s=o().forms;return Object.values(s).some(r=>r.isDirty)},getDirtyFormIds:()=>{const s=o().forms;return Object.entries(s).filter(([r,e])=>e.isDirty).map(([r])=>r)},cleanup:s=>{const r=m.get(s);r!==void 0&&(clearTimeout(r),m.delete(s)),t(e=>{const{[s]:u,...n}=e.forms;return{forms:n}})},getStatus:s=>o().forms[s]?.status??"idle",isLoading:s=>{const r=o().forms[s]?.status??"idle";return r==="uploading"||r==="validating"||r==="submitting"},getUploadProgress:s=>o().forms[s]?.uploadProgress??0,getError:s=>o().forms[s]?.error??null,getIsDirty:s=>o().forms[s]?.isDirty??!1}}}),l=t=>i(o=>o.forms[t]?.status??"idle"),c=t=>i(o=>{const m=o.forms[t]?.status??"idle";return m==="uploading"||m==="validating"||m==="submitting"}),g=t=>i(o=>o.forms[t]?.uploadProgress??0),d=t=>i(o=>o.forms[t]?.error??null),p=t=>i(o=>o.forms[t]?.isDirty??!1),D=()=>i(t=>Object.values(t.forms).some(o=>o.isDirty));export{d as useFormError,p as useFormIsDirty,c as useFormLoading,l as useFormStatus,i as useFormStore,D as useHasDirtyForms,g as useUploadProgress};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{createDoNotDevStore as
|
|
1
|
+
"use client";import{createDoNotDevStore as F}from"@donotdev/core";const m={status:"idle",progress:0,error:null},c=F({name:"upload-store",createStore:(u,n)=>({uploads:{},uploadFunctions:{},checkPendingFunctions:{},retryAttempts:{},maxRetries:3,retryDelay:1e3,registerUpload:(t,e,o,r)=>{u(s=>({uploadFunctions:{...s.uploadFunctions,[t]:{...s.uploadFunctions[t]||{},[e]:o}},checkPendingFunctions:{...s.checkPendingFunctions,[t]:{...s.checkPendingFunctions[t]||{},[e]:r||(()=>!1)}}}))},unregisterUpload:(t,e)=>{u(o=>{const r=o.uploadFunctions[t],s=o.checkPendingFunctions[t];if(!r)return o;const{[e]:l,...p}=r,{[e]:a,...i}=s||{},{[e]:g,...h}=o.retryAttempts[t]||{};return{uploadFunctions:{...o.uploadFunctions,[t]:p},checkPendingFunctions:{...o.checkPendingFunctions,[t]:i},retryAttempts:{...o.retryAttempts,[t]:h}}})},startUpload:(t,e)=>{u(o=>({uploads:{...o.uploads,[t]:{...o.uploads[t]||{},[e]:{status:"uploading",progress:0,error:null}}}}))},setProgress:(t,e,o)=>{u(r=>{const s=r.uploads[t]?.[e]||m;return{uploads:{...r.uploads,[t]:{...r.uploads[t]||{},[e]:{...s,progress:Math.min(100,Math.max(0,o))}}}}})},completeUpload:(t,e)=>{u(o=>{const r=o.uploads[t]?.[e]||m;return{uploads:{...o.uploads,[t]:{...o.uploads[t]||{},[e]:{...r,status:"complete",progress:100}}}}})},failUpload:(t,e,o)=>{u(r=>{const s=r.uploads[t]?.[e]||m;return{uploads:{...r.uploads,[t]:{...r.uploads[t]||{},[e]:{...s,status:"error",error:o}}}}})},resetUpload:(t,e)=>{u(o=>({uploads:{...o.uploads,[t]:{...o.uploads[t]||{},[e]:{...m}}}}))},resetForm:t=>{u(e=>({uploads:{...e.uploads,[t]:{}}}))},cleanup:t=>{u(e=>{const{[t]:o,...r}=e.uploads,{[t]:s,...l}=e.uploadFunctions,{[t]:p,...a}=e.checkPendingFunctions,{[t]:i,...g}=e.retryAttempts;return{uploads:r,uploadFunctions:l,checkPendingFunctions:a,retryAttempts:g}})},uploadAll:async t=>{const e=n().uploadFunctions[t];if(!e)return;const o=Object.entries(e);if(o.length===0)return;const r=async(s,l,p=1)=>{n().startUpload(t,s);try{await l(a=>{n().setProgress(t,s,a)}),n().completeUpload(t,s),u(a=>({retryAttempts:{...a.retryAttempts,[t]:{...a.retryAttempts[t]||{},[s]:0}}}))}catch(a){const i=a instanceof Error?a.message:"Upload failed",g=n().maxRetries;if((n().retryAttempts[t]?.[s]??0)<g){u(d=>({retryAttempts:{...d.retryAttempts,[t]:{...d.retryAttempts[t]||{},[s]:(d.retryAttempts[t]?.[s]??0)+1}}}));const h=n().retryDelay*Math.pow(2,p-1);return await new Promise(d=>setTimeout(d,h)),r(s,l,p+1)}else throw n().failUpload(t,s,i),a}};await Promise.all(o.map(async([s,l])=>{await r(s,l)}))},hasPendingUploads:t=>{const e=n(),o=e.uploadFunctions[t],r=e.checkPendingFunctions[t];return o?Object.entries(o).some(([s,l])=>{const p=r?.[s];return p?p():!0}):!1},getStatus:(t,e)=>n().uploads[t]?.[e]?.status??"idle",getProgress:(t,e)=>n().uploads[t]?.[e]?.progress??0,getTotalProgress:t=>{const e=n().uploads[t];if(!e)return 100;const o=Object.values(e);if(o.length===0)return 100;const r=o.reduce((s,l)=>s+l.progress,0);return Math.round(r/o.length)},isUploading:t=>{const e=n().uploads[t];return e?Object.values(e).some(o=>o.status==="uploading"):!1},getError:(t,e)=>n().uploads[t]?.[e]?.error??null})}),y=u=>c(n=>{const t=n.uploads[u];if(!t)return 100;const e=Object.values(t);if(e.length===0)return 100;const o=e.reduce((r,s)=>r+s.progress,0);return Math.round(o/e.length)}),P=u=>c(n=>{const t=n.uploads[u];return t?Object.values(t).some(e=>e.status==="uploading"):!1}),A=(u,n)=>c(t=>t.uploads[u]?.[n]?.progress??0),U=(u,n)=>c(t=>t.uploads[u]?.[n]?.status??"idle");export{A as useFieldProgress,U as useFieldUploadStatus,P as useIsUploading,y as useTotalProgress,c as useUploadStore};
|
package/dist/stores/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useFormStore as
|
|
1
|
+
import{useFormStore as s,useFormStatus as r,useFormLoading as a,useUploadProgress as o,useFormError as e,useFormIsDirty as u,useHasDirtyForms as t}from"./FormStore";import{useUploadStore as m,useTotalProgress as F,useIsUploading as d,useFieldProgress as i,useFieldUploadStatus as l}from"./UploadStore";export{i as useFieldProgress,l as useFieldUploadStatus,e as useFormError,u as useFormIsDirty,a as useFormLoading,r as useFormStatus,s as useFormStore,t as useHasDirtyForms,d as useIsUploading,F as useTotalProgress,o as useUploadProgress,m as useUploadStore};
|