@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
|
-
import{
|
|
1
|
+
import{hasProvider as w,getProvider as h,wrapCrudError as l,validateWithSchema as o}from"@donotdev/core";import{LIST_SCHEMA_TYPE as u}from"@donotdev/core";let c=null;class p{serverSideOnly=!0;async getCallable(){if(w("callable"))return h("callable");if(!c){const{FirebaseCallableProvider:t}=await import("@donotdev/firebase");c=new t}return c}async getCallableFn(t){const a=await this.getCallable();return async n=>({data:await a.call(t,n)})}async get(t,a,n){const i=`get_${t}`,s=await this.getCallableFn(i);try{const e=(await s({id:a})).data;return n?o(n,e,"FunctionsAdapter.get"):e}catch(e){throw l(e,"FunctionsAdapter","get",t,a)}}async set(t,a,n,i){const s=o(i,n,"FunctionsAdapter.set"),e=`update_${t}`,d=await this.getCallableFn(e);try{await d({id:a,payload:s})}catch(r){throw l(r,"FunctionsAdapter","set",t,a)}}async update(t,a,n){const i=`update_${t}`,s=await this.getCallableFn(i);try{await s({id:a,payload:n})}catch(e){throw l(e,"FunctionsAdapter","update",t,a)}}async delete(t,a){const n=`delete_${t}`,i=await this.getCallableFn(n);try{await i({id:a})}catch(s){throw l(s,"FunctionsAdapter","delete",t,a)}}async add(t,a,n){const i=o(n,a,"FunctionsAdapter.add"),s=`create_${t}`,e=await this.getCallableFn(s);try{const d=await e({payload:i});if(!d.data)throw l(new Error("Create function returned no data"),"FunctionsAdapter","add",t);return{id:d.data.id,data:d.data}}catch(d){throw l(d,"FunctionsAdapter","add",t)}}async query(t,a,n,i=u.LIST){const s=i===u.LIST_CARD?`listCard_${t}`:`list_${t}`,e={};a.where&&(e.where=a.where.map(r=>[r.field,r.operator,r.value])),a.orderBy&&(e.orderBy=a.orderBy.map(r=>[r.field,r.direction||"asc"])),a.limit&&(e.limit=a.limit),a.startAfter&&(e.startAfterId=a.startAfter);const d=await this.getCallableFn(s);try{const r=await d(e);if(!r.data)throw l(new Error("Query function returned no data"),"FunctionsAdapter","query",t);return{items:r.data.items,total:r.data.count,hasMore:r.data.hasMore,lastVisible:r.data.lastVisible}}catch(r){throw l(r,"FunctionsAdapter","query",t)}}subscribe(){return()=>{}}subscribeToCollection(){return()=>{}}}export{p as FunctionsAdapter};
|
package/dist/adapters/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAGH,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/adapters/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{FunctionsAdapter as t}from"./FunctionsAdapter";export{t as FunctionsAdapter};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as d}from"react/jsx-runtime";import{ActionButton as n}from"@donotdev/components";import{useCrudStore as a}from"../CrudStore";function c({requiresAuth:r=!0,user:e,disabled:t=!1,children:o,...i}){const s=a(u=>!!u.crudService);return d(n,{...i,disabled:t||!s||r&&!e,children:o})}var l=c;export{l as default};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CrudCardProps } from '@donotdev/core';
|
|
2
|
+
/**
|
|
3
|
+
* CrudCard — Presentational card from entity + item + field slots.
|
|
4
|
+
* No routing: use onClick for interaction. Parent wraps with Link if needed.
|
|
5
|
+
*/
|
|
6
|
+
export declare function CrudCard({ item, entity, onClick, titleFields: titleFieldsProp, subtitleFields: subtitleFieldsProp, contentFields: contentFieldsProp, footerFields: footerFieldsProp, showDelete, renderActions, elevated, className, }: Omit<CrudCardProps, 'detailHref'>): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default CrudCard;
|
|
8
|
+
//# sourceMappingURL=CrudCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CrudCard.d.ts","sourceRoot":"","sources":["../../src/components/CrudCard.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,aAAa,EAA2B,MAAM,gBAAgB,CAAC;AA4C7E;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,MAAM,EACN,OAAO,EACP,WAAW,EAAE,eAAe,EAC5B,cAAc,EAAE,kBAAkB,EAClC,aAAa,EAAE,iBAAiB,EAChC,YAAY,EAAE,gBAAgB,EAC9B,UAAkB,EAClB,aAAa,EACb,QAAe,EACf,SAAS,GACV,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,2CA+LnC;AAED,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as o,jsxs as T}from"react/jsx-runtime";import{useMemo as g}from"react";import{Trash2 as G}from"lucide-react";import{Card as H,Stack as j,Text as B,ActionButton as J}from"@donotdev/components";import{useTranslation as I,getListCardFieldNames as K}from"@donotdev/core";import{formatValue as h}from"./DisplayFieldRenderer";import{translateFieldLabel as O}from"../forms/utils/translateFieldLabel";import{DisplayThumbnail as N}from"./DisplayThumbnail";import{useCrud as Q}from"../useCrud";function d(e){return e==="image"||e==="images"}function U(e){return g(()=>{const t=e.listCardFields;if(t&&!Array.isArray(t)){const s=t;return{titleFields:s.title??[],subtitleFields:s.subtitle??[],contentFields:s.content??[],footerFields:s.footer??[]}}const c=K(e),f=c.filter(s=>!d(e.fields[s]?.type)),v=c.filter(s=>d(e.fields[s]?.type)),C=f.length>0?[f[0]]:[],b=[...f.slice(1,4),...v];return{titleFields:C,subtitleFields:[],contentFields:b,footerFields:[]}},[e])}function L({item:e,entity:t,onClick:c,titleFields:f,subtitleFields:v,contentFields:C,footerFields:b,showDelete:s=!1,renderActions:V,elevated:M=!0,className:P}){const{t:a}=I([t.namespace,"crud"]),{t:p}=I("crud"),F=U(t),x=f??F.titleFields,S=v??F.subtitleFields,A=C??F.contentFields,m=b??F.footerFields,D=g(()=>{if(!x?.length)return e.id??"";const r=x.filter(i=>typeof i=="string").filter(i=>!d(t.fields[i]?.type)).map(i=>{const n=t.fields[i],y=e[i],u=n?h(y,n,a,{compact:!0,asString:!0}):y;return typeof u=="string"?u:String(u??"")}).filter(Boolean),l=!Array.isArray(t.listCardFields)&&t.listCardFields?.titleSeparator!=null?t.listCardFields.titleSeparator:" ";return r.join(l)||String(e.id??"")},[e,t.fields,x,t.listCardFields,a]),R=g(()=>S?.length&&S.filter(r=>typeof r=="string").filter(r=>!d(t.fields[r]?.type)).map(r=>{const l=t.fields[r],i=e[r],n=l?h(i,l,a,{compact:!0,asString:!0}):i;return typeof n=="string"?n:String(n??"")}).filter(Boolean).join(" ")||void 0,[e,t.fields,S,a]),q=g(()=>{if(!A?.length)return null;const r=A.map(l=>{const i=t.fields[l];if(!i)return null;if(d(i.type)){const n=e[l];return n==null?null:o(N,{pictures:n,alt:String(D),aspectRatio:"16/9"},l)}return T("div",{children:[o(B,{level:"small",variant:"muted",children:O(l,i,a)}),o(B,{children:h(e[l],i,a,{compact:!0})})]},l)}).filter(Boolean);return r.length>0?o(j,{direction:"column",gap:"tight",children:r}):null},[e,t.fields,A,D,a]),z=g(()=>{if(!m?.length)return;if(m.some(l=>d(t.fields[l]?.type))){const l=m.map(i=>{const n=t.fields[i];if(!n)return null;if(d(n.type)){const u=e[i];return u==null?null:o(N,{pictures:u,alt:"",aspectRatio:"1"},i)}const y=h(e[i],n,a,{compact:!0});return o("span",{children:y},i)});return o(j,{direction:"row",gap:"tight",align:"center",children:l.filter(Boolean)})}const r=m.map(l=>{const i=t.fields[l];return i?h(e[l],i,a,{compact:!0}):e[l]});return o(B,{level:"small",children:r.join(" \xB7 ")})},[e,t.fields,m,a]),E=Q(t).delete,k=o(H,{title:String(D??""),subtitle:R,content:q??void 0,footer:z,clickable:!!c,onClick:c?()=>c(e.id):void 0,elevated:M,className:P}),w=V||s?T("div",{style:{position:"absolute",top:"var(--gap-sm)",right:"var(--gap-sm)",zIndex:10,display:"flex",alignItems:"flex-start",gap:"var(--gap-xs)"},onClick:r=>r.stopPropagation(),onMouseDown:r=>r.stopPropagation(),children:[V,s&&o(J,{action:async()=>{await E(e.id)},confirmText:p("delete.confirm",{defaultValue:"Are you sure you want to delete this item?"}),confirmTitle:p("delete.title",{defaultValue:"Delete Item"}),loadingText:p("delete.loading",{defaultValue:"Deleting..."}),variant:"destructive",icon:G,"aria-label":p("delete",{defaultValue:"Delete"}),children:p("delete",{defaultValue:"Delete"})})]}):null;return w?T("div",{style:{position:"relative",height:"100%"},children:[k,w]}):k}var W=L;export{L as CrudCard,W as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateFilter.d.ts","sourceRoot":"","sources":["../../src/components/DateFilter.tsx"],"names":[],"mappings":"AA2BA,MAAM,MAAM,eAAe,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAC9C,0EAA0E;IAC1E,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,yCAAyC;IACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,KAAK,IAAI,CAAC;IACvD,8CAA8C;IAC9C,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IACjE,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAa,GACd,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"DateFilter.d.ts","sourceRoot":"","sources":["../../src/components/DateFilter.tsx"],"names":[],"mappings":"AA2BA,MAAM,MAAM,eAAe,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAC9C,0EAA0E;IAC1E,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,yCAAyC;IACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,KAAK,IAAI,CAAC;IACvD,8CAA8C;IAC9C,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IACjE,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAa,GACd,EAAE,eAAe,2CA+RjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as a,jsxs as
|
|
1
|
+
"use client";import{jsx as a,jsxs as b,Fragment as ct}from"react/jsx-runtime";import{useState as k,useMemo as pt}from"react";import{X as Dt}from"lucide-react";import{Button as S,Calendar as St,FloatingLabel as ht,Sheet as T,Text as $t}from"@donotdev/components";import{formatDate as ft}from"@donotdev/core";function yt({label:h,fieldType:xt,value:l,onChange:$,tCrud:i,locale:j="en"}){const[w,s]=k(!1),[F,f]=k(null),E=pt(()=>l?typeof l=="object"&&l!==null&&"min"in l?{min:l.min||"",max:l.max||""}:{min:"",max:""}:{min:"",max:""},[l]),C=t=>{if(!t)return"";try{const n=new Date(t+"T00:00:00");return ft(n,j)}catch{return t}},N=()=>{const t=new Date;t.setHours(0,0,0,0);const n=t.getFullYear(),g=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0"),d=`${n}-${g}-${r}`,o=new Date(t);o.setDate(o.getDate()-1);const x=o.getFullYear(),y=String(o.getMonth()+1).padStart(2,"0"),B=String(o.getDate()).padStart(2,"0"),H=`${x}-${y}-${B}`,m=new Date(t);m.setDate(m.getDate()+1);const I=m.getFullYear(),L=String(m.getMonth()+1).padStart(2,"0"),W=String(m.getDate()).padStart(2,"0"),X=`${I}-${L}-${W}`,u=new Date(t);u.setDate(u.getDate()-7);const q=u.getFullYear(),A=String(u.getMonth()+1).padStart(2,"0"),G=String(u.getDate()).padStart(2,"0"),J=`${q}-${A}-${G}`,c=new Date(t);c.setDate(c.getDate()-30);const K=c.getFullYear(),P=String(c.getMonth()+1).padStart(2,"0"),Q=String(c.getDate()).padStart(2,"0"),R=`${K}-${P}-${Q}`,p=new Date(t);p.setDate(p.getDate()+7);const U=p.getFullYear(),Z=String(p.getMonth()+1).padStart(2,"0"),_=String(p.getDate()).padStart(2,"0"),tt=`${U}-${Z}-${_}`,D=new Date(t);D.setDate(D.getDate()+30);const et=D.getFullYear(),at=String(D.getMonth()+1).padStart(2,"0"),nt=String(D.getDate()).padStart(2,"0"),rt=`${et}-${at}-${nt}`,M=new Date(t.getFullYear(),t.getMonth(),1),lt=M.getFullYear(),it=String(M.getMonth()+1).padStart(2,"0"),st=String(M.getDate()).padStart(2,"0"),ot=`${lt}-${it}-${st}`,v=new Date(t.getFullYear(),t.getMonth()+1,0),gt=v.getFullYear(),dt=String(v.getMonth()+1).padStart(2,"0"),mt=String(v.getDate()).padStart(2,"0"),ut=`${gt}-${dt}-${mt}`;return{today:d,yesterday:H,tomorrow:X,last7Days:J,last30Days:R,next7Days:tt,next30Days:rt,thisMonthStart:ot,thisMonthEnd:ut}},e=E,O=N(),z=!!(e?.min||e?.max),Y=t=>{const n=t==="start",g=n?e?.min:e?.max;return a("div",{style:{padding:"var(--gap-md)"},children:b("div",{style:{display:"flex",flexDirection:"column",gap:"var(--gap-md)"},children:[a("div",{style:{display:"flex",flexWrap:"wrap",gap:"var(--gap-tight)"},children:(n?["today","yesterday","last7Days","last30Days","thisMonthStart"]:["today","tomorrow","next7Days","next30Days","thisMonthEnd"]).map(r=>{const d=O[r];return a(S,{variant:"outline",onClick:()=>{$({min:n?d:e?.min||"",max:n?e?.max||"":d}),s(!1)},children:i(`filter.${r}`,{defaultValue:r})},r)})}),a(St,{selected:g?new Date(g+"T00:00:00"):void 0,mode:"single",onSelect:r=>{if(!r)return;const d=r.getFullYear(),o=String(r.getMonth()+1).padStart(2,"0"),x=String(r.getDate()).padStart(2,"0"),y=`${d}-${o}-${x}`;$({min:n?y:e?.min||"",max:n?e?.max||"":y}),s(!1)},defaultMonth:g?new Date(g+"T00:00:00"):new Date}),a(S,{variant:"ghost",display:"compact",onClick:()=>{$({min:n?"":e?.min||"",max:n&&e?.max||""}),s(!1)},children:i("filter.clear",{defaultValue:"Clear"})})]})})},V=b(ct,{children:[a(T,{trigger:a(S,{variant:"outline",onClick:()=>{f("start"),s(!0)},style:{flex:1},children:e?.min?C(e.min):i("filter.min",{defaultValue:"Min"})}),title:`${h} - ${i("filter.min",{defaultValue:"Min"})}`,open:w&&F==="start",onOpenChange:t=>{s(t),t||f(null)},children:Y("start")}),a($t,{level:"small",variant:"muted",style:{display:"flex",alignItems:"center"},children:"\u2013"}),a(T,{trigger:a(S,{variant:"outline",onClick:()=>{f("end"),s(!0)},style:{flex:1},children:e?.max?C(e.max):i("filter.max",{defaultValue:"Max"})}),title:`${h} - ${i("filter.max",{defaultValue:"Max"})}`,open:w&&F==="end",onOpenChange:t=>{s(t),t||f(null)},children:Y("end")}),a(S,{variant:"ghost",display:"compact",icon:a(Dt,{size:16}),onClick:()=>{$(void 0)},disabled:!z,"aria-label":i("filter.clear",{defaultValue:"Clear"})})]});return h?a(ht,{label:h,className:"dndev-range-input",children:V}):a("div",{className:"dndev-range-input",children:V})}export{yt as DateFilter};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as t,jsxs as s}from"react/jsx-runtime";import{Text as a,Stack as
|
|
1
|
+
"use client";import{jsx as t,jsxs as s}from"react/jsx-runtime";import{Text as a,Stack as c}from"@donotdev/components";import{handleError as d}from"@donotdev/core";import{translateFieldLabel as u}from"../forms/utils";import{getDisplayFormatter as y}from"../fieldTypeRegistry";function m(r,e,o,n){const i=n?.compact??!1;if(r==null||r==="")return i?t("span",{style:{color:"var(--muted-foreground)"},children:"\u2014"}):t(a,{variant:"muted",children:"\u2014"});const l=y(e.type);if(l)try{return l(r,e,o,n)}catch(f){return d(f,{userMessage:`Error formatting field "${e.label||e.name}"`,context:{fieldType:e.type,fieldName:e.label||"unknown",operation:"display_format"},severity:"warning"}),i?t("span",{style:{color:"var(--muted-foreground)"},children:String(r)}):t(a,{variant:"muted",children:String(r)})}return d(new Error(`Display formatter not registered for field type: ${e.type}`),{userMessage:`Field type "${e.type}" is missing display formatter`,context:{fieldType:e.type,fieldName:e.label||"unknown",operation:"display_format",fix:"Add displayFormatter to registerBuiltinFieldType() in registerBuiltinFieldTypes.tsx"},severity:"warning"}),i?t("span",{style:{color:"var(--muted-foreground)"},children:String(r)}):t(a,{variant:"muted",children:String(r)})}function p({name:r,config:e,value:o,t:n}){const i=m(o,e,n,{compact:!1}),l=u(r,e,n);return s(c,{direction:"row",align:"baseline",style:{marginBottom:"var(--gap-sm)",padding:"var(--gap-sm)",minHeight:"38px",alignItems:"center"},children:[s(a,{variant:"muted",style:{fontSize:"var(--font-size-sm)",fontWeight:500,minWidth:"fit-content",flexShrink:0},children:[l,":"]}),t("div",{style:{flex:1,display:"flex",alignItems:"center"},children:typeof i=="string"?t(a,{children:i}):i})]})}var g=p;export{p as DisplayFieldRenderer,g as default,m as formatValue};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview DisplayThumbnail component
|
|
3
|
+
* @description Renders the thumbnail of the first picture (pictures[0]) for list cards and list views.
|
|
4
|
+
* Normalizes string (backend-optimized thumbUrl), single Picture, or Picture[].
|
|
5
|
+
*
|
|
6
|
+
* @version 0.0.1
|
|
7
|
+
* @since 0.0.1
|
|
8
|
+
* @author AMBROISE PARK Consulting
|
|
9
|
+
*/
|
|
10
|
+
import type { Picture } from '@donotdev/core';
|
|
11
|
+
export interface DisplayThumbnailProps {
|
|
12
|
+
/** Picture(s) from item — string (optimized thumbUrl), single Picture, or Picture[] */
|
|
13
|
+
pictures: Picture[] | Picture | string | null;
|
|
14
|
+
/** Alt text for the image */
|
|
15
|
+
alt?: string;
|
|
16
|
+
/** CSS aspect-ratio (e.g. '16/9', '4/3') */
|
|
17
|
+
aspectRatio?: string;
|
|
18
|
+
/** Optional className for the wrapper */
|
|
19
|
+
className?: string;
|
|
20
|
+
/** Optional inline style for the wrapper */
|
|
21
|
+
style?: React.CSSProperties;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* DisplayThumbnail - Renders thumbnail of first picture for list cards.
|
|
25
|
+
* Used by CrudCard and any list view that needs a single thumbnail.
|
|
26
|
+
*/
|
|
27
|
+
export declare function DisplayThumbnail({ pictures, alt, aspectRatio, className, style, }: DisplayThumbnailProps): React.ReactElement | null;
|
|
28
|
+
export default DisplayThumbnail;
|
|
29
|
+
//# sourceMappingURL=DisplayThumbnail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DisplayThumbnail.d.ts","sourceRoot":"","sources":["../../src/components/DisplayThumbnail.tsx"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,WAAW,qBAAqB;IACpC,uFAAuF;IACvF,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;IAC9C,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAmBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,GAAQ,EACR,WAAoB,EACpB,SAAS,EACT,KAAK,GACN,EAAE,qBAAqB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CA6BnD;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";import{jsx as i}from"react/jsx-runtime";function s(r){if(r==null)return null;if(typeof r=="string")return r||null;const l=Array.isArray(r)&&r.length>0?r[0]:r;if(!l||typeof l!="object")return null;const t=l.thumbUrl??l.fullUrl;return typeof t=="string"?t:null}function n({pictures:r,alt:l="",aspectRatio:t="16/9",className:a,style:o}){const e=s(r);return e?i("div",{className:a,style:{width:"100%",aspectRatio:t,borderRadius:"var(--radius-md)",overflow:"hidden",backgroundColor:"var(--muted)",position:"relative",...o},children:i("img",{src:e,alt:l,loading:"lazy",style:{width:"100%",height:"100%",objectFit:"cover"}})}):null}var u=n;export{n as DisplayThumbnail,u as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityFilters.d.ts","sourceRoot":"","sources":["../../src/components/EntityFilters.tsx"],"names":[],"mappings":"AAyDA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAS7C;;;;;;;;;;;;;;GAcG;AAEH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,GAAG,EAEd,WAAW,
|
|
1
|
+
{"version":3,"file":"EntityFilters.d.ts","sourceRoot":"","sources":["../../src/components/EntityFilters.tsx"],"names":[],"mappings":"AAyDA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAS7C;;;;;;;;;;;;;;GAcG;AAEH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,GAAG,EAEd,WAAW,EACP,MAAM,GACN;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,MAAM,EAAE,GACR;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/B;IACE,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC,GACD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EAErC,SAAS,EAAE,MAAM,GAChB,OAAO,CAiVT;AAED,MAAM,WAAW,kBAAkB,CACjC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IACrE,EAAE,EAAE,MAAM,CAAC;CACZ;IAED,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IAEf,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B,sFAAsF;IACtF,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAE/B,8GAA8G;IAC9G,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;CACZ;AAED;;;;;;;;;;;;;;;;;;GAkBG;AAEH,wBAAgB,aAAa,CAC3B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IACrE,EAAE,EAAE,MAAM,CAAC;CACZ,EACD,EACA,MAAM,EACN,IAAI,EAAE,QAAQ,EACd,cAAc,EACd,OAAkB,GACnB,EAAE,kBAAkB,CAAC,CAAC,CAAC,kDA2nBvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as F,jsxs as P}from"react/jsx-runtime";import{useMemo as z}from"react";import{FilterX as Y}from"lucide-react";import{Button as Z,Combobox as U,Grid as ee,RangeInput as te,Slider as ne,Stack as ie}from"@donotdev/components";import{DateFilter as re}from"./DateFilter";import{useTranslation as q,handleError as H}from"@donotdev/core";import{translateFieldLabel as ae,translateLabel as J}from"../forms/utils";import{getFilterType as I,isFilterable as le}from"../fieldTypeRegistry";import{useCrudFilters as oe}from"../hooks/useCrudFilters";import{useCrudCardList as se}from"../useCrudCardList";function K(e,l,s){if(!l)return!0;if(Array.isArray(l)){if(l.length===0)return!0;if(!(I(s)==="range"&&(s==="date"||s==="datetime-local"||s==="timestamp")))return l.some(o=>{if(typeof o=="object"&&"date"in o){const C=o.date;return(e instanceof Date?e.toISOString().split("T")[0]:new Date(e).toISOString().split("T")[0])===C}return String(e)===String(o)});const b=e instanceof Date?e.toISOString().split("T")[0]:new Date(e).toISOString().split("T")[0];return l.some(o=>typeof o=="string"?b===o:typeof o=="object"&&"date"in o?b===o.date:!1)}if(typeof l=="object"&&"date"in l&&!("min"in l)&&!Array.isArray(l)){if(!(I(s)==="range"&&(s==="date"||s==="datetime-local"||s==="timestamp")))return!1;const b=l.date;if(!b)return!0;if(e==null)return!1;const o=e instanceof Date?e.toISOString().split("T")[0]:new Date(e).toISOString().split("T")[0];if((s==="datetime-local"||s==="timestamp")&&l.time){const C=e instanceof Date?e.toISOString().slice(11,16):new Date(e).toISOString().slice(11,16);return o===b&&C===l.time}return o===b}if(typeof l=="object"&&"min"in l){const b=I(s);if(!b)return!0;const o=b==="range"&&(s==="date"||s==="datetime-local"||s==="timestamp"),C=b==="range"&&!o,j=s==="price",S=j&&e!=null&&typeof e=="object"?Number(e.amount):C&&e!=null?typeof e=="number"?e:Number(e):NaN;if(C||j){if(typeof l.min=="object"&&l.min!==null&&"date"in l.min)return!1;const f=l,d=typeof f.min=="string"&&f.min!=="",x=typeof f.max=="string"&&f.max!=="";return d&&!x?e==null||isNaN(S)?!1:S>=Number(f.min):!d&&x?e==null?!0:isNaN(S)?!1:S<=Number(f.max):d&&x?e==null||isNaN(S)?!1:S>=Number(f.min)&&S<=Number(f.max):!0}if(o){if(typeof l.min=="object"&&l.min!==null&&"date"in l.min&&!("min"in l.min)){const g=l,c=g.min,T=g.max,k=c?.date&&c.date!=="",N=T?.date&&T.date!=="";if(k&&!N){if(e==null)return!1;const w=e instanceof Date?e:new Date(e);if(isNaN(w.getTime()))return!1;const D=new Date(c.date+(c.time?`T${c.time}:00`:"T00:00:00"));return w>=D}if(!k&&N&&T){if(e==null)return!0;const w=e instanceof Date?e:new Date(e);if(isNaN(w.getTime()))return!1;const D=new Date(T.date+(T.time?`T${T.time}:00`:"T23:59:59"));return w<=D}if(k&&N&&T){if(e==null)return!1;const w=e instanceof Date?e:new Date(e);if(isNaN(w.getTime()))return!1;const D=new Date(c.date+(c.time?`T${c.time}:00`:"T00:00:00")),X=new Date(T.date+(T.time?`T${T.time}:00`:"T23:59:59"));return w>=D&&w<=X}return!0}const f=l,d=typeof f.min=="string"&&f.min!=="",x=typeof f.max=="string"&&f.max!=="";if(d&&!x){if(e==null)return!1;const g=e instanceof Date?e:new Date(e);return isNaN(g.getTime())?!1:g>=new Date(f.min)}if(!d&&x){if(e==null)return!0;const g=e instanceof Date?e:new Date(e);return isNaN(g.getTime())?!1:g<=new Date(f.max)}if(d&&x){if(e==null)return!1;const g=e instanceof Date?e:new Date(e);return isNaN(g.getTime())?!1:g>=new Date(f.min)&&g<=new Date(f.max)}return!0}}const A=I(s);if(!A)return!0;if(A==="address")return e==null?!1:typeof e=="object"&&"formatted_address"in e?String(e.formatted_address).toLowerCase().includes(String(l).toLowerCase()):!1;if(A==="multiselect"){if(!Array.isArray(e)||e.length===0)return!1;const b=String(l).toLowerCase();return e.some(o=>String(o).toLowerCase().includes(b))}return e==null?!1:String(e).toLowerCase().includes(String(l).toLowerCase())}function me({entity:e,data:l,fieldsToFilter:s,variant:A="inline"}){const b=A==="sidebar",{t:o,i18n:C}=q("crud"),{t:j}=q([e.namespace,"crud"]),S=C?.language||"en",{data:f}=se(e,{enabled:!l}),d=l??(f?.items||[]),{filters:x,setFilters:g}=oe({collection:e.collection}),c=z(()=>(s&&s.length>0?s:e.listFields||Object.keys(e.fields)).filter(a=>{const n=e.fields[a]?.type||"text";return le(n)}),[s,e.listFields,e.fields]),T=z(()=>{const a={};return c.forEach(n=>{const p=Object.fromEntries(Object.entries(x).filter(([i])=>i!==n));if(Object.keys(p).length===0){a[n]=d;return}a[n]=d.filter(i=>Object.entries(p).every(([h,O])=>{const L=i[h],E=e.fields[h]?.type||"text";return K(L,O,E)}))}),a},[d,x,e.fields,c]),k=z(()=>{const a={};return c.forEach(n=>{const p=e.fields[n];if(!p)return;const i=p.type||"text",h=I(i);if(!h){H(new Error(`Field type "${i}" not registered in field type registry`),{userMessage:`Field type "${i}" is missing from registry`,context:{fieldType:i,fieldName:n,operation:"minmax_computation",fix:"Add to registerBuiltinFieldTypes.ts or registerFieldType()"},severity:"warning"});return}const O=h==="range"&&(i==="date"||i==="datetime-local"||i==="timestamp"||i==="time"||i==="week"||i==="month"||i==="year"),L=h==="range"&&!O,E=i==="price";if(L||E){const m=d.map(r=>r[n]).filter(r=>r!=null&&r!=="").map(r=>E&&typeof r=="object"&&r!==null?Number(r.amount):typeof r=="number"?r:Number(r)).filter(r=>!isNaN(r));m.length>0&&(a[n]={min:Math.min(...m),max:Math.max(...m)})}else if(O){const m=d.map(r=>r[n]).filter(r=>r!=null&&r!=="").map(r=>r instanceof Date?r:new Date(r)).filter(r=>!isNaN(r.getTime()));if(m.length>0){const r=new Date(Math.min(...m.map(V=>V.getTime()))),_=new Date(Math.max(...m.map(V=>V.getTime()))),G=r.toISOString().split("T")[0],M=_.toISOString().split("T")[0];a[n]={min:G||"",max:M||""}}}}),a},[d,e.fields,c]),N=(a,n)=>{const p={...x};if(!n||n==="")delete p[a];else if(Array.isArray(n))p[a]=n;else if(typeof n=="object"&&"min"in n){const i=n.min&&n.min!=="",h=n.max&&n.max!=="";!i&&!h?delete p[a]:p[a]=n}else p[a]=n;g(p)},w=()=>{g({})},D=z(()=>c.length===0?null:c.map(a=>{const n=e.fields[a];if(!n)return null;const p=ae(a,n,j),i=n.type||"text",h=I(i);if(!h)return H(new Error(`Field type "${i}" not registered in field type registry`),{userMessage:`Field type "${i}" is missing from registry`,context:{fieldType:i,fieldName:a,operation:"filter_ui_render",fix:"Add to registerBuiltinFieldTypes.ts or registerFieldType()"},severity:"warning"}),null;const O=h==="range"&&(i==="date"||i==="datetime-local"||i==="timestamp"||i==="time"||i==="week"||i==="month"||i==="year"),L=h==="range"&&!O,E=h==="select",m=x[a],r=typeof m=="object"&&m!==null&&"min"in m?m:{min:"",max:""};if(L){const u=k[a],y=u?.min??0,t=u?.max??100,v=r.min?Number(r.min):y,B=r.max?Number(r.max):t;return P(ie,{gap:"tight",style:{gridColumn:"span 2"},children:[F(te,{type:"number",label:p,minPlaceholder:o("filter.min",{defaultValue:"Min"}),maxPlaceholder:o("filter.max",{defaultValue:"Max"}),minValue:r.min||"",maxValue:r.max||"",actualMin:y,actualMax:t,onChange:(R,W)=>{N(a,{min:R,max:W})},onClear:()=>N(a,void 0)}),F(ne,{value:[v,B],min:y,max:t,step:1,onValueChange:R=>{N(a,{min:String(R[0]),max:String(R[1])})}})]},a)}if(O){const u=i==="week"||i==="month"||i==="year"?i:"date",y=(()=>{if(m){if(typeof m=="object"&&"min"in m){const t=m;return{min:t.min&&t.min.split("T")[0]||"",max:t.max&&t.max.split("T")[0]||""}}if(typeof m=="string"){const t=m.split("T")[0]||"";return{min:t,max:t}}}})();return F("div",{style:{gridColumn:"span 2",gridRow:b?void 0:"span 1"},children:F(re,{label:p,fieldType:u,value:y,locale:S,onChange:t=>{if(!t){N(a,void 0);return}typeof t=="object"&&"min"in t&&N(a,{min:t.min||"",max:t.max||""})},tCrud:o})},a)}const _=E&&n.validation&&"options"in n.validation&&n.validation?Array.isArray(n.validation.options)?n.validation.options:typeof n.validation.options=="function"?n.validation.options():[]:[],G=T[a]||d,M=new Set,V=h==="address";G.forEach(u=>{const y=u[a];if(y!=null)if(V&&typeof y=="object"&&"formatted_address"in y){const t=y;t.formatted_address&&M.add(String(t.formatted_address))}else M.add(String(y))});const $=[{value:"all",label:o("filter.selectPlaceholder",{defaultValue:"All"})}];if(_.length>0){const u=[],y=[];_.forEach(t=>{const v=typeof t=="string"?t:t.value,B=typeof t=="string"?t:t.label;M.has(v)?u.push({value:v,label:B}):y.push({value:v,label:B})}),u.sort((t,v)=>t.label.localeCompare(v.label)),y.sort((t,v)=>t.label.localeCompare(v.label)),u.forEach(t=>{$.push({value:t.value,label:J(t.label,j),disabled:!1})}),y.forEach(t=>{$.push({value:t.value,label:J(t.label,j),disabled:!0})})}else Array.from(M).sort().slice(0,100).forEach(u=>{$.push({value:u,label:u})});return F("div",{style:{gridColumn:"span 2",gridRow:"span 1"},children:F(U,{label:p,value:typeof m=="string"?m:void 0,onValueChange:u=>{N(a,u==="all"||!u?"":String(u))},options:$,placeholder:o("filter.placeholder",{defaultValue:"Filter..."}),clearable:!0})},a)}),[c,e.fields,d,x,j,o,T]);if(!D||D.length===0)return null;const X=D.filter(Boolean),Q=Object.keys(x).length>0;return P(ee,{cols:A==="sidebar"?2:[2,4,6,8],children:[X,F(Z,{variant:"outline",icon:F(Y,{size:18}),onClick:w,disabled:!Q,style:{gridColumn:"1 / -1",gridRow:"span 1"},children:o("filter.clear",{defaultValue:"Clear Filters"})})]})}export{me as EntityFilters,K as matchesFilter};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as n}from"react/jsx-runtime";import{handleError as C}from"@donotdev/core";import{getFieldRegistry as F}from"../FieldRegistry";import{ControlledTextField as T}from"./controlled";import{TextFieldComponent as w}from"./form/fields";import"../builtinFieldTypes";const v=F();function h({name:r,config:e,t,...o}){const p=l=>i=>{try{l(i)}catch(a){C(a,{userMessage:`Error updating field ${e.label||r}`,context:{fieldName:r,fieldType:e.type},severity:"warning"})}},s="control"in o&&o.control,d=e.type==="submit"||e.type==="reset";if(s&&!d){const{control:l,errors:i}=o,a=e.options?.fieldSpecific?.placeholder,y={control:l,errors:i,fieldConfig:{...e,label:e.label||r},t,placeholder:a,onChange:p(()=>{})},u=v.getControlledComponent(e.type);return u?n(u,{...y}):(C(new Error(`Unregistered field type: ${e.type}`),{userMessage:t("errors.unsupportedFieldType",{type:e.type}),context:{fieldName:r,fieldType:e.type},severity:"warning"}),n(T,{...y,fieldConfig:{...e,type:"text"}}))}const b=s&&d?{name:r,config:e,t,value:void 0,onChange:()=>{},error:void 0}:o,{value:f,onChange:x,error:c}=b,m=p(x),g=v.getUncontrolledComponent(e.type);return g?n(g,{name:r,label:e.label||r,value:f,onChange:m,error:c,t,config:e,...e.options}):n(w,{label:e.label||r,value:f,onChange:m,error:c||void 0,...e.options})}var E=h;export{h as FormFieldRenderer,E as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormLayout.d.ts","sourceRoot":"","sources":["../../src/components/FormLayout.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAa,MAAM,OAAO,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAElE,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,WAAW;IACzD,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,QAAQ,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAC5C,iCAAiC;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,sCAAsC;IACtC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC9B,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACzC,yBAAyB;IACzB,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,QAAA,MAAM,UAAU,GAAI,CAAC,SAAS,WAAW,EAAE,mIAaxC,oBAAoB,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"FormLayout.d.ts","sourceRoot":"","sources":["../../src/components/FormLayout.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAa,MAAM,OAAO,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAElE,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,WAAW;IACzD,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,QAAQ,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAC5C,iCAAiC;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,sCAAsC;IACtC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC9B,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACzC,yBAAyB;IACzB,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,QAAA,MAAM,UAAU,GAAI,CAAC,SAAS,WAAW,EAAE,mIAaxC,oBAAoB,CAAC,CAAC,CAAC,4CAuGzB,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as d,jsxs as i,Fragment as N}from"react/jsx-runtime";import{useState as w}from"react";import{FormProvider as C}from"react-hook-form";import{Button as s,BUTTON_VARIANT as j,Spinner as k,cn as z,Stack as a,Grid as A}from"@donotdev/components";import{useTranslation as B}from"@donotdev/core";const F=({title:c,onSubmit:m,children:g,formMethods:f,loading:n=!1,submitText:u,cancelText:v,showCancel:p=!1,onCancel:h,variant:o="default",columns:b=1,description:l})=>{const{t:e}=B("dndev"),[r,t]=w(!1),y=u||e("form.submit","Submit"),x=v||e("form.cancel","Cancel"),S=async T=>{t(!0);try{await m(T)}finally{t(!1)}},L={1:"dndev-grid-cols-1",2:"dndev-grid-cols-1 dndev-md:grid-cols-2",3:"dndev-grid-cols-1 dndev-md:grid-cols-2 dndev-md:grid-cols-3",4:"dndev-grid-cols-1 dndev-md:grid-cols-2 dndev-md:grid-cols-4"};return d(C,{...f,children:d("form",{onSubmit:S,className:z("dndev-mx-auto",{default:"dndev-surface",card:"dndev-surface",minimal:""}[o]),style:o!=="minimal"?{padding:"var(--gap-lg)"}:void 0,role:"form","aria-labelledby":"form-title",noValidate:!0,children:i(a,{gap:"large",children:[i(a,{gap:"tight",children:[d("h2",{id:"form-title",style:{fontSize:"var(--font-size-2xl)",fontWeight:600,color:"var(--foreground)"},children:c}),l&&d("p",{style:{color:"var(--muted-foreground)"},children:l})]}),d(A,{cols:b,className:"dndev-w-full dndev-min-w-0",children:g}),i(a,{direction:"row",align:"center",justify:"end",style:{paddingTop:"var(--gap-md)",borderTop:"1px solid var(--border)"},children:[p&&d(s,{type:"button",variant:j.OUTLINE,onClick:h,disabled:n||r,children:x}),d(s,{type:"submit",disabled:n||r,style:{minWidth:"120px"},children:n||r?i(N,{children:[d(k,{className:"me-component-gap"}),r?e("form.submitting","Submitting..."):e("form.loading","Loading...")]}):y})]})]})})})};var I=F;export{I as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityFilters.test.d.ts","sourceRoot":"","sources":["../../../src/components/__tests__/EntityFilters.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as i}from"react/jsx-runtime";import{describe as d,it as r,expect as a,vi as t,beforeEach as c}from"vitest";import{render as n,screen as o}from"@testing-library/react";import{EntityFilters as s}from"../EntityFilters";import{defineEntity as u}from"@donotdev/core";t.mock("@donotdev/core",async()=>({...await t.importActual("@donotdev/core"),useTranslation:t.fn(()=>e=>e),handleError:t.fn()})),t.mock("@donotdev/components",()=>({Button:({children:e,...l})=>i("button",{...l,children:e}),Grid:({children:e})=>i("div",{children:e}),Combobox:({children:e})=>i("div",{children:e})})),t.mock("../hooks/useCrudFilters",()=>({useCrudFilters:t.fn(()=>({filters:{},setFilter:t.fn(),clearFilters:t.fn()}))})),d("EntityFilters",()=>{const e=u({name:"Product",collection:"products",fields:{title:{name:"title",label:"Title",type:"text",visibility:"user"},status:{name:"status",label:"Status",type:"select",visibility:"user",validation:{options:[{value:"active",label:"Active"},{value:"inactive",label:"Inactive"}]}}}});c(()=>{t.clearAllMocks()}),r("renders filters for entity fields",()=>{n(i(s,{entity:e})),a(o.getByRole("button",{name:/clear/i})).toBeDefined()}),r("renders with data prop",()=>{n(i(s,{entity:e,data:[{id:"1",title:"Product 1",status:"active"},{id:"2",title:"Product 2",status:"inactive"}]})),a(o.getByRole("button",{name:/clear/i})).toBeDefined()}),r("renders with sidebar variant",()=>{n(i(s,{entity:e,variant:"sidebar"})),a(o.getByRole("button",{name:/clear/i})).toBeDefined()})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormFieldRenderer.test.d.ts","sourceRoot":"","sources":["../../../src/components/__tests__/FormFieldRenderer.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as n}from"react/jsx-runtime";import{describe as d,it as i,expect as a,vi as e,beforeEach as f}from"vitest";import{render as l}from"@testing-library/react";import{FormFieldRenderer as s}from"../FormFieldRenderer";e.mock("react-hook-form",()=>({useFormContext:e.fn(()=>({register:e.fn(),control:{},formState:{errors:{}}})),Controller:({render:t})=>{const o={onChange:e.fn(),onBlur:e.fn(),value:"",name:"test-field"};return t({field:o})}})),e.mock("../FieldRegistry",()=>({getFieldRegistry:e.fn(()=>({getComponent:e.fn(()=>()=>n("div",{children:"Mock Field"}))}))})),d("FormFieldRenderer",()=>{const t={name:"title",label:"Title",type:"text",visibility:"user",validation:{required:!0}},o=e.fn(r=>r);f(()=>{e.clearAllMocks()}),i("renders field with correct props",()=>{const{container:r}=l(n(s,{name:"title",config:t,t:o,control:{},errors:{}}));a(r).toBeDefined()}),i("renders textarea field for textarea type",()=>{const r={...t,type:"textarea",name:"description",label:"Description"},{container:c}=l(n(s,{name:"description",config:r,t:o,control:{},errors:{}}));a(c).toBeDefined()}),i("handles uncontrolled mode",()=>{const{container:r}=l(n(s,{name:"title",config:t,t:o,value:"",onChange:e.fn()}));a(r).toBeDefined()})});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as n}from"react/jsx-runtime";import{Controller as p}from"react-hook-form";import{AddressFieldComponent as f}from"../../form/fields";import{convertValidationRules as u}from"../types";function C(a){const{control:s,errors:r,fieldConfig:t,t:d}=a,{name:e,label:c,validation:o}=t,l=(t.options||{}).fieldSpecific;return n(p,{name:e,control:s,rules:o?u(o):void 0,render:({field:i})=>n(f,{label:d(c),value:i.value??void 0,onChange:m=>i.onChange(m),error:!!r[e],helperText:r[e]?.message,required:o?.required,enableGoogleMaps:l?.enableGoogleMaps,extractDistrictCode:l?.extractDistrictCode})})}export{C as ControlledAddressField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as r}from"react/jsx-runtime";import{Controller as p}from"react-hook-form";import{DateFieldComponent as c}from"../../form/fields";import{convertValidationRules as C}from"../types";function h(a){const{control:n,errors:l,fieldConfig:i,t:m}=a,{name:e,label:d,validation:o,type:s}=i,u={date:"date","datetime-local":"datetime-local",month:"month",time:"time",week:"week"}[s]||"date";return r(p,{name:e,control:n,rules:o?C(o):void 0,render:({field:t})=>r(c,{...t,label:m(d),value:t.value??null,onChange:f=>t.onChange(f),error:!!l[e],helperText:l[e]?.message,required:o?.required,mode:u})})}export{h as ControlledDateField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as l}from"react/jsx-runtime";import{Controller as c}from"react-hook-form";import{GeoPointFieldComponent as f}from"../../form/fields";import{convertValidationRules as p}from"../types";function C(a){const{control:i,errors:t,fieldConfig:s,t:m}=a,{name:o,label:d,validation:n}=s;return l(c,{name:o,control:i,rules:n?p(n):void 0,render:({field:e})=>{const g=r=>{if("target"in r)try{const u=JSON.parse(r.target.value);e.onChange(u)}catch{e.onChange({lat:0,lng:0})}else e.onChange(r||{lat:0,lng:0})};return l(f,{label:m(d),value:e.value||{lat:0,lng:0},onChange:g,error:!!t[o],helperText:t[o]?.message,required:n?.required})}})}export{C as ControlledGeoPointField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as n}from"react/jsx-runtime";import{Controller as p}from"react-hook-form";import{MapFieldComponent as f}from"../../form/fields";import{convertValidationRules as g}from"../types";function C(l){const{control:i,errors:a,fieldConfig:s,t:m}=l,{name:r,label:d,validation:o}=s;return n(p,{name:r,control:i,rules:o?g(o):void 0,render:({field:e})=>{const u=t=>{if("target"in t)try{const c=JSON.parse(t.target.value);e.onChange(c)}catch{e.onChange({})}else e.onChange(t||{})};return n(f,{label:m(d),value:e.value||{},onChange:u,error:!!a[r],helperText:a[r]?.message,required:o?.required})}})}export{C as ControlledMapField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as n}from"react/jsx-runtime";import{Controller as p}from"react-hook-form";import{MultiInputTextFieldComponent as f}from"../../form/fields";import{convertValidationRules as C}from"../types";function v(t){const{control:l,errors:g,fieldConfig:i,t:s}=t,{name:u,label:m,validation:e,options:c={}}=i;return n(p,{name:u,control:l,rules:e?C(e):void 0,render:({field:r})=>{const d=a=>{if(Array.isArray(a))r.onChange(a);else try{const o=JSON.parse(a.target.value);r.onChange(Array.isArray(o)?o:[])}catch{r.onChange([])}};return n(f,{label:s(m),value:Array.isArray(r.value)?r.value:[],onChange:d,required:e?.required,className:c.className})}})}export{v as ControlledMultiInputField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as n}from"react/jsx-runtime";import{Controller as u}from"react-hook-form";import{RichTextComponent as f}from"../../form/fields";import{convertValidationRules as h}from"../types";function C(t){const{control:i,errors:r,fieldConfig:s,t:m,placeholder:c}=t,{name:e,label:d,validation:o,options:l={}}=s;return n(u,{name:e,control:i,rules:o?h(o):void 0,render:({field:a})=>n(f,{label:m(d),value:a.value??"",onChange:p=>a.onChange(p),error:r[e]?.message,helperText:r[e]?.message,required:o?.required,placeholder:c||l.placeholder,className:l.className})})}export{C as ControlledRichTextField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as n}from"react/jsx-runtime";import{Controller as u}from"react-hook-form";import{TimestampFieldComponent as p}from"../../form/fields";import{convertValidationRules as f}from"../types";function c(a){const{control:i,errors:l,fieldConfig:t,t:m}=a,{name:e,label:s,validation:r}=t;return n(u,{name:e,control:i,rules:r?f(r):void 0,render:({field:o})=>n(p,{...o,label:m(s),value:o.value??null,onChange:d=>o.onChange(d),error:!!l[e],helperText:l[e]?.message,required:r?.required})})}export{c as ControlledTimestampField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ControlledAddressField as
|
|
1
|
+
import{ControlledAddressField as o}from"./ControlledAddressField";import{ControlledDateField as l}from"./ControlledDateField";import{ControlledGeoPointField as e}from"./ControlledGeoPointField";import{ControlledMapField as t}from"./ControlledMapField";import{ControlledMultiInputField as d}from"./ControlledMultiInputField";import{ControlledRichTextField as r}from"./ControlledRichTextField";import{ControlledTimestampField as i}from"./ControlledTimestampField";export{o as ControlledAddressField,l as ControlledDateField,e as ControlledGeoPointField,t as ControlledMapField,d as ControlledMultiInputField,r as ControlledRichTextField,i as ControlledTimestampField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as a}from"react/jsx-runtime";import{Controller as
|
|
1
|
+
"use client";import{jsx as a}from"react/jsx-runtime";import{Controller as p}from"react-hook-form";import{DocumentFieldComponent as c}from"../../form/fields";import{convertValidationRules as f}from"../types";function g(i){const{control:m,errors:r,fieldConfig:l,t:s}=i,{name:e,label:u,validation:o}=l,n=l.options||{};return a(p,{name:e,control:m,rules:o?f(o):void 0,render:({field:t})=>a(c,{name:e,label:s(u),value:t.value??null,onChange:d=>t.onChange(d),error:!!r[e],helperText:r[e]?.message,required:o?.required,multiple:!1,maxFiles:1,maxSize:n.maxSize,storagePath:n.storagePath})})}export{g as ControlledDocumentField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as t}from"react/jsx-runtime";import{Controller as p}from"react-hook-form";import{FileFieldComponent as f}from"../../form/fields";import{convertValidationRules as c}from"../types";function g(i){const{control:m,errors:r,fieldConfig:l,t:s}=i,{name:e,label:u,validation:o}=l,a=l.options||{};return t(p,{name:e,control:m,rules:o?c(o):void 0,render:({field:n})=>t(f,{name:e,label:s(u),value:n.value??null,onChange:d=>n.onChange(d),error:!!r[e],helperText:r[e]?.message,required:o?.required,multiple:!1,maxFiles:1,maxSize:a.maxSize,storagePath:a.storagePath})})}export{g as ControlledFileField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as n}from"react/jsx-runtime";import{Controller as p}from"react-hook-form";import{ImageFieldComponent as f}from"../../form/fields";import{convertValidationRules as g}from"../types";function c(i){const{control:m,errors:r,fieldConfig:a,t:s}=i,{name:e,label:u,validation:o}=a,l=a.options||{};return n(p,{name:e,control:m,rules:o?g(o):void 0,render:({field:t})=>n(f,{name:e,label:s(u),value:t.value??null,onChange:d=>t.onChange(d),error:!!r[e],helperText:r[e]?.message,required:o?.required,multiple:!1,maxFiles:1,maxSize:l.maxSize,storagePath:l.storagePath})})}export{c as ControlledImageField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as n}from"react/jsx-runtime";import{Controller as c}from"react-hook-form";import{DocumentFieldComponent as f}from"../../form/fields";import{convertValidationRules as v}from"../types";function x(i){const{control:m,errors:l,fieldConfig:t,t:s}=i,{name:r,label:u,validation:o}=t,a=t.options||{};return n(c,{name:r,control:m,rules:o?v(o):void 0,render:({field:e})=>{const d=Array.isArray(e.value)?e.value:e.value?[e.value]:null;return n(f,{name:r,label:s(u),value:d,onChange:p=>e.onChange(p),error:!!l[r],helperText:l[r]?.message,required:o?.required,multiple:!0,maxFiles:a.maxFiles??10,maxSize:a.maxSize,storagePath:a.storagePath})}})}export{x as ControlledMultiDocumentField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as t}from"react/jsx-runtime";import{Controller as p}from"react-hook-form";import{FileFieldComponent as v}from"../../form/fields";import{convertValidationRules as c}from"../types";function x(n){const{control:s,errors:a,fieldConfig:i,t:m}=n,{name:r,label:u,validation:o}=i,l=i.options||{};return t(p,{name:r,control:s,rules:o?c(o):void 0,render:({field:e})=>{const d=Array.isArray(e.value)?e.value:e.value?[e.value]:null;return t(v,{name:r,label:m(u),value:d,onChange:f=>e.onChange(f),error:!!a[r],helperText:a[r]?.message,required:o?.required,multiple:!0,maxFiles:l.maxFiles??10,maxSize:l.maxSize,storagePath:l.storagePath})}})}export{x as ControlledMultiFileField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as t}from"react/jsx-runtime";import{Controller as p}from"react-hook-form";import{ImageFieldComponent as c}from"../../form/fields";import{convertValidationRules as g}from"../types";function v(n){const{control:m,errors:l,fieldConfig:i,t:s}=n,{name:r,label:u,validation:o}=i,a=i.options||{};return t(p,{name:r,control:m,rules:o?g(o):void 0,render:({field:e})=>{const d=Array.isArray(e.value)?e.value:e.value?[e.value]:null;return t(c,{name:r,label:s(u),value:d,onChange:f=>e.onChange(f),error:!!l[r],helperText:l[r]?.message,required:o?.required,multiple:!0,maxFiles:a.maxFiles??10,maxSize:a.maxSize,storagePath:a.fieldSpecific?.storagePath})}})}export{v as ControlledMultiImageField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ControlledDocumentField as l}from"./ControlledDocumentField";import{ControlledFileField as
|
|
1
|
+
import{ControlledDocumentField as l}from"./ControlledDocumentField";import{ControlledFileField as o}from"./ControlledFileField";import{ControlledImageField as e}from"./ControlledImageField";import{ControlledMultiDocumentField as t}from"./ControlledMultiDocumentField";import{ControlledMultiFileField as i}from"./ControlledMultiFileField";import{ControlledMultiImageField as r}from"./ControlledMultiImageField";export{l as ControlledDocumentField,o as ControlledFileField,e as ControlledImageField,t as ControlledMultiDocumentField,i as ControlledMultiFileField,r as ControlledMultiImageField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{convertValidationRules as
|
|
1
|
+
import{convertValidationRules as o,convertPatternToRegex as e}from"./types";export*from"./input";export*from"./select";export*from"./file";export*from"./complex";export{e as convertPatternToRegex,o as convertValidationRules};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as n}from"react/jsx-runtime";import{Controller as s}from"react-hook-form";import{CheckboxFieldComponent as f}from"../../form/fields";import{convertValidationRules as u}from"../types";function C(t){const{control:l,errors:p,fieldConfig:i,t:a}=t,{name:d,label:e,validation:o}=i,c=typeof e=="string"?a(e):e;return n(s,{name:d,control:l,rules:o?u(o):void 0,render:({field:r})=>n(f,{label:c,checked:!!r.value,onChange:m=>r.onChange(m.target.checked),required:o?.required})})}export{C as ControlledCheckboxField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as u}from"react/jsx-runtime";import{Controller as h}from"react-hook-form";import{CurrencyFieldComponent as v}from"../../form/fields";import{convertValidationRules as y}from"../types";function N(c){const{control:s,errors:n,fieldConfig:a,t:d,placeholder:m}=c,{name:o,label:p,validation:l}=a,t=(a.options||{}).fieldSpecific;return u(h,{name:o,control:s,rules:l?y(l):void 0,render:({field:e})=>{const f=g=>{const r=g.target.value;if(r==null||r===""){e.onChange(null);return}const i=typeof r=="number"?r/100:parseFloat(String(r))/100;isNaN(i)?e.onChange(null):e.onChange(i)},C=e.value!=null&&!isNaN(e.value)?Math.round(e.value*100):void 0;return u(v,{label:d(p),value:C,onChange:f,currency:t?.currency||"EUR",locale:t?.locale,error:!!n[o],helperText:n[o]?.message,required:l?.required,placeholder:m})}})}export{N as ControlledCurrencyField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as t}from"react/jsx-runtime";import{Controller as f}from"react-hook-form";import{DurationFieldComponent as u}from"../../form/fields";import{convertValidationRules as c}from"../types";function C(s){const{control:d,errors:i,fieldConfig:l,t:a}=s,{name:e,label:m,validation:o}=l,r=(l.options||{}).fieldSpecific;return t(f,{name:e,control:d,rules:o?c(o):void 0,render:({field:n})=>t(u,{label:a(m),value:n.value??0,onChange:p=>n.onChange(p),error:!!i[e],helperText:i[e]?.message,required:o?.required,disabled:n.disabled,min:r?.min??0,max:r?.max??480,step:r?.step??5,t:a})})}export{C as ControlledDurationField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as t}from"react/jsx-runtime";import{Controller as g}from"react-hook-form";import{GdprConsentFieldComponent as u}from"../../form/fields";import{convertValidationRules as h}from"../types";function v(i){const{control:a,errors:y,fieldConfig:l}=i,{name:s,validation:o,options:c={}}=l,r=c.fieldSpecific,d=r?.privacyPolicyPath||"/legal/privacy",p=r?.termsPath||"/legal/terms";return t(g,{name:s,control:a,rules:o?h(o):void 0,render:({field:n})=>{const e=n.value,m=typeof e=="object"&&e!==null?!!e.gdprConsent:!!e;return t(u,{checked:m,onChange:C=>{if(C.target.checked){const f=new Date().toISOString().split("T")[0];n.onChange({gdprConsent:!0,gdprConsentDate:new Date().toISOString(),gdprConsentVersion:f})}else n.onChange(!1)},required:o?.required,privacyPolicyPath:d,termsPath:p})}})}export{v as ControlledGdprConsentField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as m}from"react/jsx-runtime";import{Controller as g}from"react-hook-form";import{NumberFieldComponent as
|
|
1
|
+
"use client";import{jsx as m}from"react/jsx-runtime";import{Controller as g}from"react-hook-form";import{NumberFieldComponent as v}from"../../form/fields";import{convertValidationRules as C}from"../types";function h(u){const{control:c,errors:t,fieldConfig:l,t:d,placeholder:N}=u,{name:r,label:p,validation:e}=l,i=l.options||{},o=i.fieldSpecific;return m(g,{name:r,control:c,rules:e?C(e):void 0,render:({field:a})=>{const f=n=>{if(n.target.value===""||n.target.value===null){a.onChange(null);return}try{const s=parseFloat(n.target.value);isNaN(s)||a.onChange(s)}catch{a.onChange(0)}};return m(v,{...a,label:d(p),value:a.value??void 0,onChange:f,error:!!t[r],helperText:t[r]?.message,required:e?.required,min:e?.min,max:e?.max,step:o?.mask==="currency"?.01:o?.mask==="mileage"?1:void 0,mask:o?.mask||"number",className:i.className})}})}export{h as ControlledNumberField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as n}from"react/jsx-runtime";import{Controller as p}from"react-hook-form";import{PasswordFieldComponent as u}from"../../form/fields";import{convertValidationRules as f}from"../types";function h(s){const{control:t,errors:l,fieldConfig:i,t:d,placeholder:m}=s,{name:e,label:c,validation:o,options:a={}}=i;return n(p,{name:e,control:t,rules:o?f(o):void 0,render:({field:r})=>n(u,{...r,label:d(c),value:r.value??"",onChange:r.onChange,error:!!l[e],helperText:l[e]?.message,required:o?.required,placeholder:m||a.placeholder,className:a.className})})}export{h as ControlledPasswordField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as l}from"react/jsx-runtime";import{Controller as d}from"react-hook-form";import{PhoneNumberComponent as f}from"../../form/fields";import{convertValidationRules as p}from"../types";function c(t){const{control:a,errors:n,fieldConfig:i,t:s}=t,{name:e,label:m,validation:r}=i;return l(d,{name:e,control:a,rules:r?p(r):void 0,render:({field:o})=>l(f,{label:s(m),value:typeof o.value=="string"?o.value:"",onChange:u=>o.onChange(u.target.value||""),error:n[e]?.message,helperText:n[e]?.message,required:r?.required})})}export{c as ControlledPhoneField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as t}from"react/jsx-runtime";import{Controller as C}from"react-hook-form";import{PriceFieldComponent as v}from"../../form/fields";import{convertValidationRules as h}from"../types";function g(a){const{control:c,errors:i,fieldConfig:l,t:s,placeholder:d}=a,{name:e,label:u,validation:r}=l,o=(l.options||{}).fieldSpecific;return t(C,{name:e,control:c,rules:r?h(r):void 0,render:({field:n})=>{const p=n.value,f=m=>{n.onChange(m)};return t(v,{label:s(u),value:p??void 0,onChange:f,error:!!i[e],helperText:i[e]?.message,required:r?.required,placeholder:d,defaultCurrency:o?.defaultCurrency??"EUR",optionsTitle:o?.optionsTitle,currencies:o?.currencies})}})}export{g as ControlledPriceField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as a}from"react/jsx-runtime";import{Controller as
|
|
1
|
+
"use client";import{jsx as a}from"react/jsx-runtime";import{Controller as f}from"react-hook-form";import{RangeFieldComponent as c}from"../../form/fields";import{convertValidationRules as g}from"../types";function v(s){const{control:m,errors:l,fieldConfig:i,t:u}=s,{name:o,label:d,validation:e}=i,t=i.options||{},p=t.fieldSpecific;return a(f,{name:o,control:m,rules:e?g(e):void 0,render:({field:r})=>a(c,{label:u(d),value:r.value??void 0,onChange:n=>{typeof n=="number"?r.onChange(n):r.onChange(Number(n.target.value)||0)},error:!!l[o],helperText:l[o]?.message,required:e?.required,min:e?.min,max:e?.max,step:t.step,showValue:p?.showValue})})}export{v as ControlledRangeField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as a}from"react/jsx-runtime";import{Controller as u}from"react-hook-form";import{RatingFieldComponent as p}from"../../form/fields";import{convertValidationRules as c}from"../types";function g(t){const{control:s,errors:r,fieldConfig:l,t:m}=t,{name:o,label:d,validation:e}=l,n=(l.options||{}).fieldSpecific;return a(u,{name:o,control:s,rules:e?c(e):void 0,render:({field:i})=>a(p,{label:m(d),value:i.value??0,onChange:f=>{i.onChange(f)},error:!!r[o],helperText:r[o]?.message,required:e?.required,max:n?.max??e?.max??5,showValue:n?.showValue})})}export{g as ControlledRatingField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as d}from"react/jsx-runtime";import{Controller as v}from"react-hook-form";import{SwitchFieldComponent as x}from"../../form/fields";import"../types";function S(h){const{control:s,errors:m,fieldConfig:u,t:o,onChange:c}=h,{name:l,label:f,options:p={}}=u,e=p.fieldSpecific,k=e?.uncheckedValue??!1,r=e?.checkedValue??!0,t=e?.uncheckedLabel,a=e?.checkedLabel;return d(v,{name:l,control:s,render:({field:{value:b,onChange:C}})=>{const g=b===r,L=n=>{const i=n?r:k;C(i),c&&c(i)};return d(x,{label:o(f),checked:g,onChange:n=>L(n.target.checked),uncheckedLabel:t?o(t):void 0,checkedLabel:a?o(a):void 0,helperText:m[l]?.message})}})}export{S as ControlledSwitchField};
|