@donotdev/crud 0.0.14 → 0.0.15
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 +40 -13
- 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/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/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/FormLayout.d.ts.map +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/file/ControlledMultiImageField.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/form/fields/AddressFieldComponent.d.ts.map +1 -1
- package/dist/components/form/fields/AddressFieldComponent.js +1 -1
- package/dist/components/form/fields/SwitchFieldComponent.d.ts.map +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/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/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/useEntityForm.d.ts.map +1 -1
- package/dist/forms/hooks/useEntityForm.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/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/index.d.ts +4 -2
- 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/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/fileStorage.d.ts +10 -5
- package/dist/utils/fileStorage.d.ts.map +1 -1
- package/dist/utils/fileStorage.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/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 +12 -6
- 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
|
@@ -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 i,jsxs as A}from"react/jsx-runtime";import{useMemo as F}from"react";import{Trash2 as G}from"lucide-react";import{Card as H,Stack as R,Text as B,ActionButton as J}from"@donotdev/components";import{useTranslation as k,getListCardFieldNames as K}from"@donotdev/core";import{formatValue as v}from"./DisplayFieldRenderer";import{translateFieldLabel as O}from"../forms/utils/translateFieldLabel";import{DisplayThumbnail as y}from"./DisplayThumbnail";import{useCrud as Q}from"../useCrud";function u(t){return t==="image"||t==="images"}function U(t){return F(()=>{const e=t.listCardFields;if(e&&!Array.isArray(e)){const o=e;return{titleFields:o.title??[],subtitleFields:o.subtitle??[],contentFields:o.content??[],footerFields:o.footer??[]}}const f=K(t),g=f.filter(o=>!u(t.fields[o]?.type)),x=f.filter(o=>u(t.fields[o]?.type)),S=g.length>0?[g[0]]:[],C=[...g.slice(1,4),...x];return{titleFields:S,subtitleFields:[],contentFields:C,footerFields:[]}},[t])}function W({item:t,entity:e,onClick:f,titleFields:g,subtitleFields:x,contentFields:S,footerFields:C,showDelete:o=!1,renderActions:D,elevated:M=!0,className:P}){const{t:n}=k([e.namespace,"crud"]),{t:m}=k("crud"),b=U(e),T=g??b.titleFields,I=x??b.subtitleFields,j=S??b.contentFields,h=C??b.footerFields,V=F(()=>{if(!T?.length)return t.id??"";const c=T.filter(l=>typeof l=="string").filter(l=>!u(e.fields[l]?.type)).map(l=>{const s=e.fields[l],a=t[l],p=s?v(a,s,n,{compact:!0,asString:!0}):a;return typeof p=="string"?p:String(p??"")}).filter(Boolean),r=!Array.isArray(e.listCardFields)&&e.listCardFields?.titleSeparator!=null?e.listCardFields.titleSeparator:" ";return c.join(r)||String(t.id??"")},[t,e.fields,T,e.listCardFields,n]),_=F(()=>I?.length&&I.filter(r=>typeof r=="string").filter(r=>!u(e.fields[r]?.type)).map(r=>{const l=e.fields[r],s=t[r],a=l?v(s,l,n,{compact:!0,asString:!0}):s;return typeof a=="string"?a:String(a??"")}).filter(Boolean).join(" ")||void 0,[t,e.fields,I,n]),z=F(()=>{if(!j?.length)return null;const c=j.map(r=>{const l=e.fields[r];if(!l)return null;if(u(l.type)){const s=t[r];return s==null?null:i(y,{pictures:s,alt:String(V),aspectRatio:"16/9"},r)}return A("div",{children:[i(B,{level:"small",variant:"muted",children:O(r,l,n)}),i(B,{children:v(t[r],l,n,{compact:!0})})]},r)}).filter(Boolean);return c.length>0?i(R,{direction:"column",gap:"tight",children:c}):null},[t,e.fields,j,V,n]),q=F(()=>{if(!h?.length)return;if(h.some(r=>u(e.fields[r]?.type))){const r=h.map(l=>{const s=e.fields[l];if(!s)return null;if(u(s.type)){const p=t[l];return p==null?null:i(y,{pictures:p,alt:"",aspectRatio:"1"},l)}const a=v(t[l],s,n,{compact:!0});return i("span",{children:a},l)});return i(R,{direction:"row",gap:"tight",align:"center",children:r.filter(Boolean)})}const c=h.map(r=>{const l=e.fields[r];return l?v(t[r],l,n,{compact:!0}):t[r]});return i(B,{level:"small",children:c.join(" \xB7 ")})},[t,e.fields,h,n]),E=Q(e).delete,w=i(H,{title:String(V??""),subtitle:_,content:z??void 0,footer:q,clickable:!!f,onClick:f?()=>f(t.id):void 0,elevated:M,className:P}),L=D||o?A("div",{style:{position:"absolute",top:"var(--gap-sm)",right:"var(--gap-sm)",zIndex:10,display:"flex",alignItems:"flex-start",gap:"var(--gap-xs)"},onClick:d=>d.stopPropagation(),onMouseDown:d=>d.stopPropagation(),children:[D,o&&i(J,{action:async()=>{await E(t.id)},confirmText:m("delete.confirm",{defaultValue:"Are you sure you want to delete this item?"}),confirmTitle:m("delete.title",{defaultValue:"Delete Item"}),loadingText:m("delete.loading",{defaultValue:"Deleting..."}),variant:"destructive",icon:G,"aria-label":m("delete",{defaultValue:"Delete"}),children:m("delete",{defaultValue:"Delete"})})]}):null;return L?A("div",{style:{position:"relative",height:"100%"},children:[w,L]}):w}var st=W;export{W as CrudCard,st 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"}
|
|
@@ -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 e}from"react/jsx-runtime";function u(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 a({pictures:r,alt:l="",aspectRatio:t="16/9",className:o,style:i}){const n=u(r);return n?e("div",{className:o,style:{width:"100%",aspectRatio:t,borderRadius:"var(--radius-md)",overflow:"hidden",backgroundColor:"var(--muted)",position:"relative",...i},children:e("img",{src:n,alt:l,loading:"lazy",style:{width:"100%",height:"100%",objectFit:"cover"}})}):null}var d=a;export{a as DisplayThumbnail,d 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 E,jsxs as H}from"react/jsx-runtime";import{useMemo as G}from"react";import{FilterX as Z}from"lucide-react";import{Button as V,Combobox as tt,Grid as nt,RangeInput as et,Slider as rt,Stack as it}from"@donotdev/components";import{DateFilter as st}from"./DateFilter";import{useTranslation as J,handleError as K}from"@donotdev/core";import{translateFieldLabel as ot,translateLabel as Q}from"../forms/utils";import{getFilterType as _,isFilterable as at}from"../fieldTypeRegistry";import{useCrudFilters as ct}from"../hooks/useCrudFilters";import{useCrudCardList as lt}from"../useCrudCardList";function dt(t,s,c){if(!s)return!0;if(Array.isArray(s)){if(s.length===0)return!0;if(!(_(c)==="range"&&(c==="date"||c==="datetime-local"||c==="timestamp")))return s.some(l=>{if(typeof l=="object"&&"date"in l){const D=l.date;return(t instanceof Date?t.toISOString().split("T")[0]:new Date(t).toISOString().split("T")[0])===D}return String(t)===String(l)});const w=t instanceof Date?t.toISOString().split("T")[0]:new Date(t).toISOString().split("T")[0];return s.some(l=>typeof l=="string"?w===l:typeof l=="object"&&"date"in l?w===l.date:!1)}if(typeof s=="object"&&"date"in s&&!("min"in s)&&!Array.isArray(s)){if(!(_(c)==="range"&&(c==="date"||c==="datetime-local"||c==="timestamp")))return!1;const w=s.date;if(!w)return!0;if(t==null)return!1;const l=t instanceof Date?t.toISOString().split("T")[0]:new Date(t).toISOString().split("T")[0];if((c==="datetime-local"||c==="timestamp")&&s.time){const D=t instanceof Date?t.toISOString().slice(11,16):new Date(t).toISOString().slice(11,16);return l===w&&D===s.time}return l===w}if(typeof s=="object"&&"min"in s){const C=_(c);if(!C)return!0;const h=C==="range"&&(c==="date"||c==="datetime-local"||c==="timestamp"),w=C==="range"&&!h,l=c==="price",D=l&&t!=null&&typeof t=="object"?Number(t.amount):w&&t!=null?typeof t=="number"?t:Number(t):NaN;if(w||l){if(typeof s.min=="object"&&s.min!==null&&"date"in s.min)return!1;const d=s,u=typeof d.min=="string"&&d.min!=="",x=typeof d.max=="string"&&d.max!=="";return u&&!x?t==null||isNaN(D)?!1:D>=Number(d.min):!u&&x?t==null?!0:isNaN(D)?!1:D<=Number(d.max):u&&x?t==null||isNaN(D)?!1:D>=Number(d.min)&&D<=Number(d.max):!0}if(h){if(typeof s.min=="object"&&s.min!==null&&"date"in s.min&&!("min"in s.min)){const b=s,p=b.min,S=b.max,I=p?.date&&p.date!=="",T=S?.date&&S.date!=="";if(I&&!T){if(t==null)return!1;const F=t instanceof Date?t:new Date(t);if(isNaN(F.getTime()))return!1;const j=new Date(p.date+(p.time?`T${p.time}:00`:"T00:00:00"));return F>=j}if(!I&&T&&S){if(t==null)return!0;const F=t instanceof Date?t:new Date(t);if(isNaN(F.getTime()))return!1;const j=new Date(S.date+(S.time?`T${S.time}:00`:"T23:59:59"));return F<=j}if(I&&T&&S){if(t==null)return!1;const F=t instanceof Date?t:new Date(t);if(isNaN(F.getTime()))return!1;const j=new Date(p.date+(p.time?`T${p.time}:00`:"T00:00:00")),X=new Date(S.date+(S.time?`T${S.time}:00`:"T23:59:59"));return F>=j&&F<=X}return!0}const d=s,u=typeof d.min=="string"&&d.min!=="",x=typeof d.max=="string"&&d.max!=="";if(u&&!x){if(t==null)return!1;const b=t instanceof Date?t:new Date(t);return isNaN(b.getTime())?!1:b>=new Date(d.min)}if(!u&&x){if(t==null)return!0;const b=t instanceof Date?t:new Date(t);return isNaN(b.getTime())?!1:b<=new Date(d.max)}if(u&&x){if(t==null)return!1;const b=t instanceof Date?t:new Date(t);return isNaN(b.getTime())?!1:b>=new Date(d.min)&&b<=new Date(d.max)}return!0}}const N=_(c);if(!N)return!0;if(N==="address")return t==null?!1:typeof t=="object"&&"formatted_address"in t?String(t.formatted_address).toLowerCase().includes(String(s).toLowerCase()):!1;if(N==="multiselect"){if(!Array.isArray(t)||t.length===0)return!1;const C=String(s).toLowerCase();return t.some(h=>String(h).toLowerCase().includes(C))}return t==null?!1:String(t).toLowerCase().includes(String(s).toLowerCase())}function Mt({entity:t,data:s,fieldsToFilter:c,variant:N="inline"}){const C=N==="sidebar",{t:h,i18n:w}=J("crud"),{t:l}=J([t.namespace,"crud"]),D=w?.language||"en",{data:d}=lt(t,{enabled:!s}),u=s??(d?.items||[]),{filters:x,setFilters:b}=ct({collection:t.collection}),p=G(()=>(c&&c.length>0?c:t.listFields||Object.keys(t.fields)).filter(e=>{const r=t.fields[e]?.type||"text";return at(r)}),[c,t.listFields,t.fields]),S=G(()=>{const i={};return p.forEach(e=>{const f=Object.fromEntries(Object.entries(x).filter(([r])=>r!==e));if(Object.keys(f).length===0){i[e]=u;return}i[e]=u.filter(r=>Object.entries(f).every(([y,A])=>{const L=r[y],a=t.fields[y]?.type||"text";return dt(L,A,a)}))}),i},[u,x,t.fields,p]),I=G(()=>{const i={};return p.forEach(e=>{const f=t.fields[e];if(!f)return;const r=f.type||"text",y=_(r);if(!y){K(new Error(`Field type "${r}" not registered in field type registry`),{userMessage:`Field type "${r}" is missing from registry`,context:{fieldType:r,fieldName:e,operation:"minmax_computation",fix:"Add to registerBuiltinFieldTypes.ts or registerFieldType()"},severity:"warning"});return}const A=y==="range"&&(r==="date"||r==="datetime-local"||r==="timestamp"||r==="time"||r==="week"||r==="month"||r==="year"),L=y==="range"&&!A,k=r==="price";if(L||k){const a=u.map(o=>o[e]).filter(o=>o!=null&&o!=="").map(o=>k&&typeof o=="object"&&o!==null?Number(o.amount):typeof o=="number"?o:Number(o)).filter(o=>!isNaN(o));a.length>0&&(i[e]={min:Math.min(...a),max:Math.max(...a)})}else if(A){const a=u.map(o=>o[e]).filter(o=>o!=null&&o!=="").map(o=>o instanceof Date?o:new Date(o)).filter(o=>!isNaN(o.getTime()));if(a.length>0){const o=new Date(Math.min(...a.map(R=>R.getTime()))),O=new Date(Math.max(...a.map(R=>R.getTime()))),q=o.toISOString().split("T")[0],P=O.toISOString().split("T")[0];i[e]={min:q||"",max:P||""}}}}),i},[u,t.fields,p]),T=(i,e)=>{const f={...x};if(!e||e==="")delete f[i];else if(Array.isArray(e))f[i]=e;else if(typeof e=="object"&&"min"in e){const r=e.min&&e.min!=="",y=e.max&&e.max!=="";!r&&!y?delete f[i]:f[i]=e}else f[i]=e;b(f)},F=()=>{b({})},j=G(()=>p.length===0?null:p.map(i=>{const e=t.fields[i];if(!e)return null;const f=ot(i,e,l),r=e.type||"text",y=_(r);if(!y)return K(new Error(`Field type "${r}" not registered in field type registry`),{userMessage:`Field type "${r}" is missing from registry`,context:{fieldType:r,fieldName:i,operation:"filter_ui_render",fix:"Add to registerBuiltinFieldTypes.ts or registerFieldType()"},severity:"warning"}),null;const A=y==="range"&&(r==="date"||r==="datetime-local"||r==="timestamp"||r==="time"||r==="week"||r==="month"||r==="year"),L=y==="range"&&!A,k=y==="select",a=x[i],O=typeof a=="object"&&a!==null&&"min"in a?a:{min:"",max:""};if(L){const m=I[i],g=m?.min??0,n=m?.max??100,M=O.min?Number(O.min):g,z=O.max?Number(O.max):n;return H(it,{gap:"tight",style:{gridColumn:"span 2"},children:[E(et,{type:"number",label:f,minPlaceholder:h("filter.min",{defaultValue:"Min"}),maxPlaceholder:h("filter.max",{defaultValue:"Max"}),minValue:O.min||"",maxValue:O.max||"",actualMin:g,actualMax:n,onChange:($,Y)=>{T(i,{min:$,max:Y})},onClear:()=>T(i,void 0)}),E(rt,{value:[M,z],min:g,max:n,step:1,onValueChange:$=>{T(i,{min:String($[0]),max:String($[1])})}})]},i)}if(A){const m=r==="week"||r==="month"||r==="year"?r:"date",g=(()=>{if(a){if(typeof a=="object"&&"min"in a){const n=a;return{min:n.min&&n.min.split("T")[0]||"",max:n.max&&n.max.split("T")[0]||""}}if(typeof a=="string"){const n=a.split("T")[0]||"";return{min:n,max:n}}}})();return E("div",{style:{gridColumn:"span 2",gridRow:C?void 0:"span 1"},children:E(st,{label:f,fieldType:m,value:g,locale:D,onChange:n=>{if(!n){T(i,void 0);return}typeof n=="object"&&"min"in n&&T(i,{min:n.min||"",max:n.max||""})},tCrud:h})},i)}const P=k&&e.validation&&"options"in e.validation&&e.validation?Array.isArray(e.validation.options)?e.validation.options:typeof e.validation.options=="function"?e.validation.options():[]:[],R=S[i]||u,v=new Set,W=y==="address";R.forEach(m=>{const g=m[i];if(g!=null)if(W&&typeof g=="object"&&"formatted_address"in g){const n=g;n.formatted_address&&v.add(String(n.formatted_address))}else v.add(String(g))});const B=[{value:"all",label:h("filter.selectPlaceholder",{defaultValue:"All"})}];if(P.length>0){const m=[],g=[];P.forEach(n=>{const M=typeof n=="string"?n:n.value,z=typeof n=="string"?n:n.label;v.has(M)?m.push({value:M,label:z}):g.push({value:M,label:z})}),m.sort((n,M)=>n.label.localeCompare(M.label)),g.sort((n,M)=>n.label.localeCompare(M.label)),m.forEach(n=>{B.push({value:n.value,label:Q(n.label,l),disabled:!1})}),g.forEach(n=>{B.push({value:n.value,label:Q(n.label,l),disabled:!0})})}else Array.from(v).sort().slice(0,100).forEach(m=>{B.push({value:m,label:m})});return E("div",{style:{gridColumn:"span 2",gridRow:"span 1"},children:E(tt,{label:f,value:typeof a=="string"?a:void 0,onValueChange:m=>{T(i,m==="all"||!m?"":String(m))},options:B,placeholder:h("filter.placeholder",{defaultValue:"Filter..."}),clearable:!0})},i)}),[p,t.fields,u,x,l,h,S]);if(!j||j.length===0)return null;const X=j.filter(Boolean),U=Object.keys(x).length>0;return H(nt,{cols:N==="sidebar"?2:[2,4,6,8],children:[X,E(V,{variant:"outline",icon:E(Z,{size:18}),onClick:F,disabled:!U,style:{gridColumn:"1 / -1",gridRow:"span 1"},children:h("filter.clear",{defaultValue:"Clear Filters"})})]})}export{Mt as EntityFilters,dt as matchesFilter};
|
|
@@ -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"}
|
|
@@ -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 c,it as r,expect as n,vi as e,beforeEach as d}from"vitest";import{render as a,screen as l}from"@testing-library/react";import{EntityFilters as s}from"../EntityFilters";import{defineEntity as u}from"@donotdev/core";e.mock("@donotdev/core",async()=>({...await e.importActual("@donotdev/core"),useTranslation:e.fn(()=>o=>o),handleError:e.fn()})),e.mock("@donotdev/components",()=>({Button:({children:t,...o})=>i("button",{...o,children:t}),Grid:({children:t})=>i("div",{children:t}),Combobox:({children:t})=>i("div",{children:t})})),e.mock("../hooks/useCrudFilters",()=>({useCrudFilters:e.fn(()=>({filters:{},setFilter:e.fn(),clearFilters:e.fn()}))})),c("EntityFilters",()=>{const t=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"}]}}}});d(()=>{e.clearAllMocks()}),r("renders filters for entity fields",()=>{a(i(s,{entity:t})),n(l.getByRole("button",{name:/clear/i})).toBeDefined()}),r("renders with data prop",()=>{a(i(s,{entity:t,data:[{id:"1",title:"Product 1",status:"active"},{id:"2",title:"Product 2",status:"inactive"}]})),n(l.getByRole("button",{name:/clear/i})).toBeDefined()}),r("renders with sidebar variant",()=>{a(i(s,{entity:t,variant:"sidebar"})),n(l.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 s,it as i,expect as c,vi as e,beforeEach as f}from"vitest";import{render as l}from"@testing-library/react";import{FormFieldRenderer as a}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"}))}))})),s("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(a,{name:"title",config:t,t:o,control:{},errors:{}}));c(r).toBeDefined()}),i("renders textarea field for textarea type",()=>{const r={...t,type:"textarea",name:"description",label:"Description"},{container:d}=l(n(a,{name:"description",config:r,t:o,control:{},errors:{}}));c(d).toBeDefined()}),i("handles uncontrolled mode",()=>{const{container:r}=l(n(a,{name:"title",config:t,t:o,value:"",onChange:e.fn()}));c(r).toBeDefined()})});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as l}from"react/jsx-runtime";import{Controller as
|
|
1
|
+
"use client";import{jsx as l}from"react/jsx-runtime";import{Controller as d}from"react-hook-form";import{ImageFieldComponent as g}from"../../form/fields";import{convertValidationRules as x}from"../types";function F(i){const{control:m,errors:n,fieldConfig:t,t:s}=i,{name:r,label:u,validation:o}=t,a=t.options||{};return l(d,{name:r,control:m,rules:o?x(o):void 0,render:({field:e})=>{const c=Array.isArray(e.value)?e.value:e.value?[e.value]:null;return l(g,{name:r,label:s(u),value:c,onChange:p=>e.onChange(p),error:!!n[r],helperText:n[r]?.message,required:o?.required,multiple:!0,maxFiles:a.maxFiles??10,maxSize:a.maxSize,storagePath:a.fieldSpecific?.storagePath})}})}export{F as ControlledMultiImageField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichTextDisplay.d.ts","sourceRoot":"","sources":["../../../../src/components/fields/display/RichTextDisplay.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"RichTextDisplay.d.ts","sourceRoot":"","sources":["../../../../src/components/fields/display/RichTextDisplay.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IAChC,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC;IAC1D,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,oBAAoB,CAkG/D,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsx as e,jsxs as i}from"react/jsx-runtime";import{Text as t}from"@donotdev/components";const
|
|
1
|
+
import{jsx as e,jsxs as i}from"react/jsx-runtime";import{Text as t}from"@donotdev/components";import{sanitizeHtml as s}from"../../../utils/sanitizeHtml";const a=({config:n,value:r,t:m,className:o})=>!r||r.trim()===""?e(t,{as:"span",variant:"muted",className:o,children:"-"}):i("div",{className:o,style:{padding:"var(--gap-md)",backgroundColor:"var(--muted)",borderRadius:"var(--radius-md)",border:"1px solid var(--border)",minHeight:"38px"},children:[e("div",{dangerouslySetInnerHTML:{__html:s(r)},style:{outline:"none",fontSize:"var(--font-size-base)",lineHeight:"1.6"},className:"prose prose-sm max-w-none"}),e("style",{children:`
|
|
2
2
|
/* Match Tiptap ProseMirror styling */
|
|
3
3
|
.prose p {
|
|
4
4
|
margin: 0.5em 0;
|
|
@@ -58,4 +58,4 @@ import{jsx as e,jsxs as i}from"react/jsx-runtime";import{Text as t}from"@donotde
|
|
|
58
58
|
.prose a:hover {
|
|
59
59
|
color: var(--primary-hover);
|
|
60
60
|
}
|
|
61
|
-
`})]});var
|
|
61
|
+
`})]});var f=a;export{a as RichTextDisplay,f as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddressFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/AddressFieldComponent.tsx"],"names":[],"mappings":"AAiBA;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,KAAK,CAAC,EAAE;QACN,iBAAiB,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2DAA2D;IAC3D,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,qBAAqB,GAAI,iGAS5B,0BAA0B,
|
|
1
|
+
{"version":3,"file":"AddressFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/AddressFieldComponent.tsx"],"names":[],"mappings":"AAiBA;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,KAAK,CAAC,EAAE;QACN,iBAAiB,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2DAA2D;IAC3D,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,qBAAqB,GAAI,iGAS5B,0BAA0B,4CA6S5B,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as r,jsxs as
|
|
1
|
+
import{jsx as r,jsxs as p}from"react/jsx-runtime";import{MapPin as D}from"lucide-react";import{useState as S,useEffect as w,useRef as b,useMemo as F}from"react";import{Combobox as M,Stack as L}from"@donotdev/components";import{useTranslation as W,getPlatformEnvVar as Y}from"@donotdev/core";const $=({label:C,value:i,onChange:P,enableGoogleMaps:j=!1,extractDistrictCode:O,error:l,helperText:d,required:x})=>{const{t:n}=W("dndev"),[a,u]=S(i?.formatted_address||""),[f,g]=S([]),[I,m]=S(!1),v=b(null),_=b(null),c=b(null),h=Y("GOOGLE_MAPS_API_KEY")||"",s=j&&!!h,V=F(()=>f.map(e=>({value:e.place_id,label:e.description,description:e.structured_formatting?.secondary_text,content:p("div",{style:{display:"flex",alignItems:"center",gap:"var(--gap-sm)"},children:[r(D,{style:{width:"var(--size-icon-sm)",height:"var(--size-icon-sm)"}}),p("div",{children:[r("div",{children:e.description}),e.structured_formatting?.secondary_text&&r("div",{style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:e.structured_formatting.secondary_text})]})]})})),[f]),K=e=>{_.current&&(m(!0),_.current.getDetails({placeId:e,fields:["formatted_address","geometry","address_components"]},(t,y)=>{if(m(!1),y===window.google?.maps?.places?.PlacesServiceStatus.OK&&t){const o=t.formatted_address||"",k=t.geometry?.location?.lat(),q=t.geometry?.location?.lng(),A={formatted_address:o,latitude:k,longitude:q};if(O&&t.address_components){const E=t.address_components.find(U=>U.types.includes("postal_code"))?.long_name||"",T=E.startsWith("92")?92:parseInt(E.slice(-2),10)||null;A.district_code=T}u(o),P(A)}}))};w(()=>{i?.formatted_address&&u(i.formatted_address)},[i]),w(()=>{if(!s)return;let e=null;const t=()=>{window.google?.maps?.places&&(v.current=new window.google.maps.places.AutocompleteService,_.current=new window.google.maps.places.PlacesService(document.createElement("div")))};return(()=>{if(window.google?.maps?.places){t();return}if(document.querySelector("#google-maps-script")){e=setInterval(()=>{window.google?.maps?.places&&(clearInterval(e),e=null,t())},100);return}const o=document.createElement("script");o.id="google-maps-script",o.src=`https://maps.googleapis.com/maps/api/js?key=${h}&libraries=places`,o.async=!0,o.defer=!0,o.onload=()=>t(),document.head.appendChild(o)})(),()=>{e!==null&&(clearInterval(e),e=null)}},[s,h]),w(()=>{if(!s||!a||!v.current){g([]);return}return c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{m(!0),v.current.getPlacePredictions({input:a,types:["geocode","establishment"]},(e,t)=>{m(!1),t===window.google?.maps?.places?.PlacesServiceStatus.OK&&e?g(e):g([])})},300),()=>{c.current&&clearTimeout(c.current)}},[s,a]);const R=e=>{u(e),P({formatted_address:e})},z=e=>{const t=Array.isArray(e)?e[0]||"":e;if(!s){R(t);return}f.some(o=>o.place_id===t)&&K(t)},G=e=>{s&&u(e)};return s?p(L,{gap:"tight",children:[r(M,{label:C,value:a,onValueChange:z,onSearchChange:G,placeholder:n("common.address_placeholder"),emptyMessage:n(I?"common.loading":"common.no_results"),options:V,required:x,variant:l?"destructive":void 0,isLoading:I,creatable:!0,createLabel:n("actions.use","Use")}),d&&r("p",{style:{fontSize:"var(--font-size-xs)",color:l?"var(--destructive-foreground)":"var(--muted-foreground)"},children:d})]}):p(L,{gap:"tight",children:[r(M,{label:C,value:a,onValueChange:z,placeholder:n("common.address_placeholder"),options:[],required:x,variant:l?"destructive":void 0,creatable:!0,createLabel:n("actions.use","Use")}),d&&r("p",{style:{fontSize:"var(--font-size-xs)",color:l?"var(--destructive-foreground)":"var(--muted-foreground)"},children:d})]})};var Z=$;export{Z as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwitchFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/SwitchFieldComponent.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,yBAAyB;IACxC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC1D,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,QAAA,MAAM,oBAAoB,EAAE,aAAa,CAAC,yBAAyB,
|
|
1
|
+
{"version":3,"file":"SwitchFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/SwitchFieldComponent.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,yBAAyB;IACxC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC1D,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,QAAA,MAAM,oBAAoB,EAAE,aAAa,CAAC,yBAAyB,CAyClE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -2,9 +2,11 @@ import type { RichTextComponentProps } from '../types';
|
|
|
2
2
|
import type { ComponentType } from 'react';
|
|
3
3
|
/**
|
|
4
4
|
* TiptapEditor - WYSIWYG editor component
|
|
5
|
-
* Uses dynamic imports to gracefully handle missing Tiptap packages
|
|
5
|
+
* Uses dynamic imports to gracefully handle missing Tiptap packages.
|
|
6
|
+
* Delegates to TiptapEditorInner once modules are loaded so that
|
|
7
|
+
* useEditor (a React hook) is called at the top level of a component.
|
|
6
8
|
*
|
|
7
|
-
* @version 0.0.
|
|
9
|
+
* @version 0.0.2
|
|
8
10
|
* @since 0.0.1
|
|
9
11
|
* @author AMBROISE PARK Consulting
|
|
10
12
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TiptapEditor.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/fields/internal/TiptapEditor.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"TiptapEditor.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/fields/internal/TiptapEditor.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,OAAO,CAAC;AAsKxD;;;;;;;;;GASG;AACH,QAAA,MAAM,YAAY,EAAE,aAAa,CAAC,sBAAsB,CAuDvD,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as i,jsxs as u}from"react/jsx-runtime";import{useEffect as f,useState as m}from"react";import{Stack as b}from"@donotdev/components";const x=({label:n,value:e="",onChange:d,error:r,helperText:a,required:c,disabled:t,placeholder:s,className:l,modules:p})=>{const{useEditor:g,EditorContent:h,StarterKit:v,Placeholder:M}=p,o=g({extensions:[v.configure({heading:{levels:[1,2,3]}}),M.configure({placeholder:s||"Start typing..."})],content:e,editable:!t,onUpdate:({editor:P})=>{const y={target:{value:P.getHTML()}};d(y)}});return f(()=>{o&&e!==o.getHTML()&&o.commands.setContent(e||"")},[e,o]),o?u(b,{gap:"tight",children:[u("label",{style:{fontSize:"var(--font-size-sm)",fontWeight:500,color:r?"var(--destructive-foreground)":"var(--foreground)"},children:[n,c&&i("span",{style:{color:"var(--destructive)"},children:" *"})]}),i("div",{className:l,"data-variant":r?"destructive":void 0,style:{border:"var(--border-hairline) solid",borderColor:r?"var(--destructive)":"var(--line-2)",borderRadius:"var(--radius-interactive)",padding:"var(--gap-md)",minHeight:"200px",backgroundColor:t?"var(--muted)":"transparent",opacity:t?"var(--opacity-muted)":void 0},children:i(h,{editor:o})}),a&&i("p",{style:{fontSize:"var(--font-size-xs)",color:r?"var(--destructive-foreground)":"var(--muted-foreground)"},children:a}),i("style",{children:`
|
|
2
2
|
.ProseMirror {
|
|
3
3
|
outline: none;
|
|
4
4
|
min-height: 150px;
|
|
@@ -49,4 +49,4 @@
|
|
|
49
49
|
margin: 0.5em 0;
|
|
50
50
|
color: var(--muted-foreground);
|
|
51
51
|
}
|
|
52
|
-
`})]})};var
|
|
52
|
+
`})]}):null},E=n=>{const[e,d]=m(null),[r,a]=m(!1);return f(()=>{if(e||r)return;(async()=>{try{const[{useEditor:t,EditorContent:s},l,p]=await Promise.all([import("@tiptap/react"),import("@tiptap/starter-kit"),import("@tiptap/extension-placeholder")]);d({useEditor:t,EditorContent:s,StarterKit:l.default,Placeholder:p.default})}catch(t){t instanceof Error&&(t.message.includes("Cannot find module '@tiptap")||t.message.includes("Failed to fetch dynamically imported module")),a(!0)}})()},[e,r]),r||!e?null:i(x,{...n,modules:e})};var C=E;export{C as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageViewerDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/form/internal/ImageViewerDialog.tsx"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/D,MAAM,WAAW,sBAAsB;IACrC,sBAAsB;IACtB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,2BAA2B;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,qBAAqB;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,sBAAsB;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;IACnE,sBAAsB;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,wBAAwB;IACxB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,oBAAoB;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAYD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,aAAa,EACb,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAgB,GACjB,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"ImageViewerDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/form/internal/ImageViewerDialog.tsx"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/D,MAAM,WAAW,sBAAsB;IACrC,sBAAsB;IACtB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,2BAA2B;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,qBAAqB;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,sBAAsB;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;IACnE,sBAAsB;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,wBAAwB;IACxB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,oBAAoB;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAYD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,aAAa,EACb,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAgB,GACjB,EAAE,sBAAsB,kDAoexB;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -17,4 +17,6 @@ export * from './form';
|
|
|
17
17
|
export { EntityFilters, matchesFilter } from './EntityFilters';
|
|
18
18
|
export type { EntityFiltersProps } from './EntityFilters';
|
|
19
19
|
export * from './fields/display';
|
|
20
|
+
export { DisplayThumbnail } from './DisplayThumbnail';
|
|
21
|
+
export { CrudCard } from './CrudCard';
|
|
20
22
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC3E,YAAY,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC3E,YAAY,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/components/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as
|
|
1
|
+
import{default as e}from"./CrudButton";import{FormFieldRenderer as m}from"./FormFieldRenderer";import{DisplayFieldRenderer as a,formatValue as p}from"./DisplayFieldRenderer";import{default as x}from"./FormLayout";export*from"./controlled";export*from"./form";import{EntityFilters as s,matchesFilter as F}from"./EntityFilters";export*from"./fields/display";import{DisplayThumbnail as C}from"./DisplayThumbnail";import{CrudCard as D}from"./CrudCard";export{e as CrudButton,D as CrudCard,a as DisplayFieldRenderer,C as DisplayThumbnail,s as EntityFilters,m as FormFieldRenderer,x as FormLayout,p as formatValue,F as matchesFilter};
|
|
@@ -71,14 +71,17 @@ export declare function registerBuiltinFieldType(metadata: FieldTypeMetadata): v
|
|
|
71
71
|
export declare function getFieldTypeMetadata(type: string): FieldTypeMetadata | undefined;
|
|
72
72
|
/**
|
|
73
73
|
* Get filter type for a field type
|
|
74
|
+
* Custom types (registerFieldType with filterType) are checked first via FieldRegistry.
|
|
74
75
|
*/
|
|
75
76
|
export declare function getFilterType(type: string): FilterType | undefined;
|
|
76
77
|
/**
|
|
77
78
|
* Get display formatter for a field type
|
|
79
|
+
* Custom types (registerFieldType with displayFormatter) are checked first via FieldRegistry.
|
|
78
80
|
*/
|
|
79
81
|
export declare function getDisplayFormatter(type: string): DisplayFormatter | undefined;
|
|
80
82
|
/**
|
|
81
83
|
* Check if a field type is filterable
|
|
84
|
+
* Custom types (registerFieldType with filterable) are checked first via FieldRegistry.
|
|
82
85
|
*/
|
|
83
86
|
export declare function isFilterable(type: string): boolean;
|
|
84
87
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldTypeRegistry.d.ts","sourceRoot":"","sources":["../src/fieldTypeRegistry.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI7D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,OAAO,GACP,QAAQ,GACR,MAAM,GACN,SAAS,GACT,aAAa,CAAC;AAElB;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,QAAQ,GACR,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,gBAAgB,GAAG,CAC7B,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,WAAW,EACnB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,EACzD,OAAO,CAAC,EAAE,uBAAuB,KAC9B,MAAM,GAAG,YAAY,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,YAAY,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;CACtD;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uCAAuC;IACvC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,yBAAyB;IACzB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,oBAAoB;IACpB,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC;AAOD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAmB1E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GACX,iBAAiB,GAAG,SAAS,CAE/B;AAED
|
|
1
|
+
{"version":3,"file":"fieldTypeRegistry.d.ts","sourceRoot":"","sources":["../src/fieldTypeRegistry.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI7D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,OAAO,GACP,QAAQ,GACR,MAAM,GACN,SAAS,GACT,aAAa,CAAC;AAElB;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,QAAQ,GACR,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,gBAAgB,GAAG,CAC7B,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,WAAW,EACnB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,EACzD,OAAO,CAAC,EAAE,uBAAuB,KAC9B,MAAM,GAAG,YAAY,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,YAAY,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;CACtD;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uCAAuC;IACvC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,yBAAyB;IACzB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,oBAAoB;IACpB,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC;AAOD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAmB1E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GACX,iBAAiB,GAAG,SAAS,CAE/B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAIlE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GACX,gBAAgB,GAAG,SAAS,CAI9B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEhE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{getFieldRegistry as i}from"./FieldRegistry";const
|
|
1
|
+
"use client";import{getFieldRegistry as i}from"./FieldRegistry";const r=new Map;function s(e){const{type:t,components:n}=e;n&&i().registerComponent(t,n.controlled,n.uncontrolled),r.set(t,e)}function u(e){return r.get(e)}function c(e){const t=i().getFilterType(e);return t||r.get(e)?.filterType}function p(e){const t=i().getDisplayFormatter(e);return t||r.get(e)?.displayFormatter}function g(e){return i().isFilterable(e)?!0:r.get(e)?.filterable??!1}function a(e){return r.get(e)?.valueType}function f(){r.clear()}export{f as clearFieldTypeRegistry,p as getDisplayFormatter,u as getFieldTypeMetadata,c as getFilterType,a as getValueType,g as isFilterable,s as registerBuiltinFieldType};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEntityForm.d.ts","sourceRoot":"","sources":["../../../src/forms/hooks/useEntityForm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useEntityForm.d.ts","sourceRoot":"","sources":["../../../src/forms/hooks/useEntityForm.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAW7C,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AAKlB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAC5C,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,oBAAoB,CAAC,CAAC,CAAM,GACpC,gBAAgB,CAAC,CAAC,CAAC,CAqdrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{valibotResolver as
|
|
1
|
+
"use client";import{valibotResolver as J}from"@hookform/resolvers/valibot";import{useMemo as c,useEffect as E,useRef as f,useCallback as h}from"react";import{useForm as ie,useWatch as ce}from"react-hook-form";import{useLocalStorage as le,BACKEND_GENERATED_FIELD_NAMES as fe,createSchemas as de}from"@donotdev/core";import{useFormStore as y,useFormStatus as me,useUploadProgress as pe}from"../../stores";import{useUploadStore as _}from"../../stores/UploadStore";import{checkForBlobUrls as z}from"../../utils/uploadValidation";import{getFieldsForOperation as Se}from"../utils";import{buildInitialFromRecord as ge,buildSchemaDefaults as he}from"../utils/buildInitialValues";const be=u=>u;function Oe(u,K={}){const{formId:e,operation:W,defaultValues:S,viewerRole:q,mode:G="onBlur",t:H,autoSave:l=!1}=K,P=q??"guest",s=W??(S?"edit":"create"),Q=me(e??""),X=pe(e??""),b=c(()=>de(u),[u.name]),j=c(()=>J(b.create),[b.create]),k=c(()=>J(b.draft),[b.draft]),Y=c(()=>async(r,o,a)=>((r?.status??S?.status)==="draft"?k:j)(r,o,a),[j,k,S?.status]),A=c(()=>he(u),[u]),O=S,i=c(()=>{if(s==="create")return A;if(O)return ge(u,O)},[s,A,u,O]),n=ie({defaultValues:s==="create"?i:void 0,mode:G,resolver:Y,shouldUnregister:!1,shouldFocusError:!0}),T=f(n);E(()=>{T.current=n},[n]);const v=f(null);E(()=>{if(s==="edit"&&i){const r=i.id??null;r&&r!==v.current?(T.current.reset(i),v.current=r):!r&&v.current===null&&(T.current.reset(i),v.current="initialized")}},[s,i]);const Z=c(()=>`${u.name.toLowerCase()}-form-draft`,[u.name]),{value:I,setValue:N,removeValue:F}=le(Z,{defaultValue:null,syncAcrossTabs:!0}),V=f(!1);E(()=>{!l||s!=="create"||S||V.current||(I&&n.reset(I),V.current=!0)},[l,s,S,I,n]);const d=ce({control:n.control}),w=f(!1),g=f(null),D=f(void 0),U=f(!0),$=f(d);E(()=>{if(U.current){U.current=!1,D.current=d?JSON.stringify(d):void 0;return}if(!l||s!=="create"||w.current||!V.current)return;const r=d?JSON.stringify(d):void 0;if(D.current!==r)return D.current=r,$.current=d,g.current&&clearTimeout(g.current),g.current=setTimeout(()=>{const o=$.current;if(!o)return;Object.values(o).some(t=>t!=null&&t!=="")&&N(o)},3e3),()=>{g.current&&clearTimeout(g.current)}},[d,l,s,N]);const B=h(async()=>{if(!e)return!0;const r=_.getState(),o=y.getState();if(!r.hasPendingUploads(e))return!0;try{o.setUploading(e,0),await r.uploadAll(e),await new Promise(p=>setTimeout(p,50));let a=n.getValues(),t=z(a),R=0;const m=5;for(;t.length>0&&R<m;)R++,await new Promise(p=>setTimeout(p,100)),a=n.getValues(),t=z(a);if(t.length>0){const p=`Upload incomplete: files still pending at ${t.join(", ")}`;return o.setError(e,p),!1}return!0}catch(a){const t=a instanceof Error?a.message:"File upload failed";return y.getState().setError(e,t),!1}},[e,n]),L=h(r=>s!=="create"?r:Object.fromEntries(Object.entries(r).filter(([o])=>!fe.includes(o))),[s]),x=h(r=>{if(typeof window>"u")return;const o=Object.keys(r).find(t=>t!=="root"&&r[t]);if(!o)return;const a=document.querySelector(`input[name="${o}"][aria-invalid="true"], textarea[name="${o}"][aria-invalid="true"], select[name="${o}"][aria-invalid="true"]`);a&&(a.scrollIntoView({behavior:"smooth",block:"center"}),a.focus())},[]),C=n.handleSubmit,ee=c(()=>((r,o)=>async a=>{a?.preventDefault?.();const t=e?y.getState():null;e&&t&&t.startSubmit(e),w.current=!0;try{if(!await B()){w.current=!1;return}e&&t&&t.setValidating(e),await C(async(m,p)=>{e&&t&&t.setSubmitting(e);const ae=L(m);try{await r(ae,p),l&&s==="create"&&F(),e&&t&&t.setSuccess(e)}catch(M){const ue=M instanceof Error?M.message:"Submission failed";throw e&&t&&t.setError(e,ue),M}},m=>{e&&t&&t.setError(e,"Validation failed"),x(m),o?.(m)})(a)}finally{w.current=!1}}),[C,e,B,L,x,l,s,F]),te=h(()=>{l&&s==="create"&&F(),n.reset(i),D.current=i?JSON.stringify(i):void 0,U.current=!0,V.current=!1},[l,s,F,n,i]),re=h(()=>{e&&(y.getState().cleanup(e),_.getState().cleanup(e))},[e]),se=c(()=>Se(u,{operation:s,viewerRole:P,availableFields:void 0}),[u,s,P]),oe=H??be,ne=n.formState.isSubmitted||Object.keys(n.formState.touchedFields||{}).length>0;return{...n,handleSubmit:ee,fields:se,operation:s,entity:u,t:oe,viewerRole:P,formId:e,formStatus:e?Q:"idle",uploadProgress:e?X:0,cleanup:re,isDirty:n.formState.isDirty,hasUserInteracted:ne,resetForm:te,originalValues:i}}export{Oe as useEntityForm};
|
|
@@ -13,20 +13,5 @@ export interface UseCrudFiltersReturn {
|
|
|
13
13
|
/** Toggle favorites-only filter */
|
|
14
14
|
setShowFavoritesOnly: (show: boolean) => void;
|
|
15
15
|
}
|
|
16
|
-
/**
|
|
17
|
-
* Hook for managing collection filters from CrudStore
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```typescript
|
|
21
|
-
* const { filters, setFilters } = useCrudFilters({ collection: 'cars' });
|
|
22
|
-
*
|
|
23
|
-
* <EntityFilters
|
|
24
|
-
* entity={carEntity}
|
|
25
|
-
* data={data}
|
|
26
|
-
* filters={filters}
|
|
27
|
-
* onFiltersChange={setFilters}
|
|
28
|
-
* />
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
16
|
export declare function useCrudFilters(options: UseCrudFiltersOptions): UseCrudFiltersReturn;
|
|
32
17
|
//# sourceMappingURL=useCrudFilters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCrudFilters.d.ts","sourceRoot":"","sources":["../../src/hooks/useCrudFilters.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,qBAAqB;IACrB,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mCAAmC;IACnC,oBAAoB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C;
|
|
1
|
+
{"version":3,"file":"useCrudFilters.d.ts","sourceRoot":"","sources":["../../src/hooks/useCrudFilters.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,qBAAqB;IACrB,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mCAAmC;IACnC,oBAAoB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C;AAoBD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,qBAAqB,GAC7B,oBAAoB,CAmCtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useCallback as o}from"react";import{useCrudStore as s}from"../CrudStore";function f(r){const{collection:e}=r,l=
|
|
1
|
+
import{useCallback as o}from"react";import{useCrudStore as s}from"../CrudStore";const a={};function f(r){const{collection:e}=r,l=s(t=>t.collections[e]?.ui?.filters??a),i=o(t=>{s.getState().setFilters(e,t)},[e]),n=s(t=>t.collections[e]?.ui?.showFavoritesOnly??!1),c=o(t=>{s.getState().setShowFavoritesOnly(e,t)},[e]);return{filters:l,setFilters:i,showFavoritesOnly:n,setShowFavoritesOnly:c}}export{f as useCrudFilters};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFileUpload.d.ts","sourceRoot":"","sources":["../../src/hooks/useFileUpload.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAK9C,8CAA8C;AAC9C,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,6CAA6C;IAC7C,IAAI,EAAE,IAAI,CAAC;IACX,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,uCAAuC;IACvC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,qCAAqC;IACrC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C,oCAAoC;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,CACT,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,KACnC,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AA4DD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAgB,EAChB,QAAa,EACb,OAA0B,EAC1B,MAAW,EACX,WAAuB,EACvB,QAAQ,GACT,EAAE,oBAAoB;
|
|
1
|
+
{"version":3,"file":"useFileUpload.d.ts","sourceRoot":"","sources":["../../src/hooks/useFileUpload.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAK9C,8CAA8C;AAC9C,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,6CAA6C;IAC7C,IAAI,EAAE,IAAI,CAAC;IACX,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,uCAAuC;IACvC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,qCAAqC;IACrC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C,oCAAoC;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,CACT,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,KACnC,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AA4DD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAgB,EAChB,QAAa,EACb,OAA0B,EAC1B,MAAW,EACX,WAAuB,EACvB,QAAQ,GACT,EAAE,oBAAoB;IAkbnB,yCAAyC;;IAEzC,4CAA4C;yBAvGjC,IAAI,EAAE;IAyGjB,0BAA0B;qBAhCrB,MAAM;IAkCX,2CAA2C;;IAE3C,oCAAoC;;IAEpC,6BAA6B;;IAE7B,qDAAqD;;IAErD,sFAAsF;;EAGzF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useState as
|
|
1
|
+
"use client";import{useState as K,useCallback as A,useEffect as L,useRef as U,startTransition as Q}from"react";import{handleError as D}from"@donotdev/core";import{useUploadContext as X}from"../contexts/UploadContext";import{useUploadStore as M}from"../stores/UploadStore";let T=0;function V(l){if(l){const a=l.split("/").pop()?.split("?")[0];if(a)return`file-${a}`}T+=1;const u=typeof performance<"u"?performance.now():Date.now(),g=Math.random().toString(36).slice(2,11);return`file-${T}-${u}-${g}`}function Y(l){return URL.createObjectURL(l)}function O(l){l.startsWith("blob:")&&URL.revokeObjectURL(l)}function Z(l,u,g){return u.length>0&&!u.some(m=>{if(m.endsWith("/*")){const E=m.slice(0,-2);return l.type.startsWith(E)}return l.type===m})?{valid:!1,error:`File type ${l.type} not accepted`}:l.size>g?{valid:!1,error:`File exceeds ${(g/1048576).toFixed(0)}MB limit`}:{valid:!0}}function nr({name:l,value:u,onChange:g,multiple:a=!1,maxFiles:m=10,maxSize:E=10*1024*1024,accept:P=[],storagePath:_="uploads",uploadFn:h}){const w=X(),y=!!w,[f,d]=K([]),v=U(!1),C=U(null),F=U(u),$=U([]),b=U(!1),S=U(null);L(()=>{if(v.current){v.current=!1;return}const e=u?JSON.stringify((Array.isArray(u)?u:[u]).map(s=>s.fullUrl).filter(Boolean)):null;e!==C.current&&(C.current=e,F.current=u,Q(()=>{if(u){const n=(Array.isArray(u)?u:[u]).filter(t=>t.fullUrl).map((t,r)=>({id:`${V(t.fullUrl)}-existing-${r}`,file:new File([],"existing"),previewURL:t.thumbUrl||t.fullUrl,progress:100,uploaded:t,error:null}));d(n)}else d([])}))},[u]),L(()=>{$.current=f},[f]),L(()=>{b.current&&(b.current=!1,S.current?.(f,!0))},[f]),L(()=>()=>{$.current.forEach(e=>O(e.previewURL))},[]);const p=A((e,s=!1)=>{const t=(s?e.filter(i=>!i.error):e.filter(i=>i.uploaded&&!i.error)).map(i=>i.uploaded?i.uploaded:s&&y?{fullUrl:i.previewURL,thumbUrl:i.previewURL}:null).filter(i=>i!==null);let r;a?r=t.length>0?t:null:r=t[0]||null;const o=F.current;(()=>{if(!r&&!o)return!1;if(!r||!o)return!0;if(a&&Array.isArray(r)&&Array.isArray(o)){if(r.length!==o.length)return!0;const i=r.map(x=>x.fullUrl).join(","),R=o.map(x=>x.fullUrl).join(",");return i!==R}return!a&&!Array.isArray(r)&&!Array.isArray(o)?r.fullUrl!==o.fullUrl:!0})()&&(v.current=!0,F.current=r,g(r))},[a,g,y]);S.current=p;const I=A(async()=>{if(!h)return;let e=[];if(d(n=>(e=n.filter(t=>!t.uploaded&&!t.error),e.length===0?n:n.map(t=>e.some(r=>r.id===t.id)?{...t,progress:0}:t))),e.length===0)return;const s=await Promise.allSettled(e.map(async n=>{try{const t=await h(n.file,r=>{d(o=>o.map(c=>c.id===n.id?{...c,progress:r}:c))});return{id:n.id,picture:t,error:null}}catch(t){const r=t instanceof Error?t.message:"Upload failed";return{id:n.id,picture:null,error:r}}}));d(n=>{const t=n.map(r=>{const o=s.find(c=>c.status==="fulfilled"&&c.value.id===r.id);if(o&&o.status==="fulfilled"){const c=o.value;return{...r,uploaded:c.picture,progress:c.picture?100:null,error:c.error}}return r});return p(t,!1),t})},[h,p]),N=U(I);N.current=I;const j=M(e=>e.registerUpload),k=M(e=>e.unregisterUpload);L(()=>{if(!(!w||!l))return j(w,l,async()=>{await N.current()},()=>$.current.some(e=>!e.uploaded&&!e.error)),()=>{k(w,l)}},[w,l,j,k]);const B=A(async e=>{if(h){d(s=>s.map(n=>n.id===e.id?{...n,progress:0}:n));try{const s=await h(e.file,n=>{d(t=>t.map(r=>r.id===e.id?{...r,progress:n}:r))});d(n=>{const t=n.map(r=>r.id===e.id?{...r,uploaded:s,progress:100,error:null}:r);return p(t,!1),t})}catch(s){const n=s instanceof Error?s.message:"Upload failed";d(t=>t.map(r=>r.id===e.id?{...r,error:n,progress:null}:r))}}},[h,p]),W=A(e=>{d(s=>{const t=(a?m:1)-s.length;if(t<=0)return D(new Error("Maximum files reached"),{userMessage:a?`Maximum ${m} files allowed`:"Only one file allowed",severity:"warning",showNotification:!0}),s;const r=e.slice(0,t),o=[];for(const i of r){const R=Z(i,P,E);if(!R.valid){D(new Error(R.error),{userMessage:R.error,severity:"warning",showNotification:!0});continue}o.push({id:V(),file:i,previewURL:Y(i),progress:null,uploaded:null,error:null})}if(o.length===0)return s;const c=a?[...s,...o]:o;return y?b.current=!0:o.forEach(i=>B(i)),c})},[a,m,P,E,y,B,p]),J=A(e=>{d(s=>{const n=s.find(r=>r.id===e);n&&O(n.previewURL);const t=s.filter(r=>r.id!==e);return p(t,!1),t})},[p]),q=f.some(e=>!e.uploaded&&!e.error),G=f.some(e=>e.progress!==null&&e.progress<100),H=f.length>0?f.reduce((e,s)=>e+(s.progress??0),0)/f.length:0;return{files:f,addFiles:W,removeFile:J,hasPending:q,isUploading:G,progress:H,formId:w,isDeferred:y}}export{nr as useFileUpload};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFormNavigationGuard.d.ts","sourceRoot":"","sources":["../../src/hooks/useFormNavigationGuard.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,6BAA6B;IAC5C,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,OAAc,EACd,OAAqE,GACtE,GAAE,6BAAkC,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"useFormNavigationGuard.d.ts","sourceRoot":"","sources":["../../src/hooks/useFormNavigationGuard.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,6BAA6B;IAC5C,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,OAAc,EACd,OAAqE,GACtE,GAAE,6BAAkC,GAAG,IAAI,CA0B3C;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,SAA4C,GAClD,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useEffect as a}from"react";import{isClient as u}from"@donotdev/core";import{useFormStore as i}from"../stores";function s({enabled:r=!0,message:e="You have unsaved changes. Are you sure you want to leave?"}={}){const
|
|
1
|
+
"use client";import{useEffect as a}from"react";import{isClient as u}from"@donotdev/core";import{useFormStore as i}from"../stores";function s({enabled:r=!0,message:e="You have unsaved changes. Are you sure you want to leave?"}={}){const n=i(t=>Object.values(t.forms).some(o=>o.isDirty));a(()=>{if(!r||!n||!u())return;const t=o=>(o.preventDefault(),o.returnValue=e,e);return window.addEventListener("beforeunload",t),()=>{window.removeEventListener("beforeunload",t)}},[r,n,e])}async function d(r="You have unsaved changes. Discard them?"){return!u()||!i.getState().hasDirtyForms()?!0:window.confirm(r)}var h=s;export{d as checkFormNavigation,h as default,s as useFormNavigationGuard};
|
|
@@ -32,6 +32,5 @@ export interface UseRelatedItemsReturn<T> {
|
|
|
32
32
|
* );
|
|
33
33
|
* ```
|
|
34
34
|
*/
|
|
35
|
-
export declare function useRelatedItems<T extends Record<string,
|
|
36
|
-
export default useRelatedItems;
|
|
35
|
+
export declare function useRelatedItems<T extends Record<string, unknown>>(entity: Entity, currentItem: T | null | undefined, allItems: T[] | null | undefined, matchFields: string[], options?: UseRelatedItemsOptions): UseRelatedItemsReturn<T>;
|
|
37
36
|
//# sourceMappingURL=useRelatedItems.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRelatedItems.d.ts","sourceRoot":"","sources":["../../src/hooks/useRelatedItems.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,6BAA6B;IAC7B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"useRelatedItems.d.ts","sourceRoot":"","sources":["../../src/hooks/useRelatedItems.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,6BAA6B;IAC7B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EACjC,QAAQ,EAAE,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,EAChC,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,GAAE,sBAA2B,GACnC,qBAAqB,CAAC,CAAC,CAAC,CAwD1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useMemo as
|
|
1
|
+
"use client";import{useMemo as N}from"react";function y(f,e,n,t,p={}){const{limit:l=3,tolerance:a=.2}=p,c=N(()=>{if(!e||!n||n.length===0||t.length===0)return[];const h=e.id;return n.filter(g=>g.id===h?!1:t.some(s=>{const r=f.fields[s];if(!r)return!1;const u=e[s],i=g[s];if(u==null||i==null)return!1;if(r.type==="number"||r.type==="range"||r.type==="year"){const o=Number(u),b=Number(i);if(isNaN(o)||isNaN(b))return!1;const m=Math.abs(o*a);return Math.abs(b-o)<=m}return String(u)===String(i)})).slice(0,l)},[e,n,t,f.fields,l,a]);return{items:c,hasItems:c.length>0}}export{y as useRelatedItems};
|
package/dist/index.d.ts
CHANGED
|
@@ -11,10 +11,12 @@ export * from './useCrudList';
|
|
|
11
11
|
export * from './useCrudCardList';
|
|
12
12
|
export * from './components';
|
|
13
13
|
export * from './stores';
|
|
14
|
+
export { FunctionsAdapter } from './adapters/FunctionsAdapter';
|
|
15
|
+
export type { FunctionsQueryOptions } from './adapters/FunctionsAdapter';
|
|
14
16
|
export { getCrudService } from './CrudService';
|
|
15
|
-
export type { QueryOptions } from './CrudService';
|
|
16
17
|
export { useCrudStore } from './CrudStore';
|
|
17
|
-
export type { CrudServiceInterface, CrudState, CrudActions,
|
|
18
|
+
export type { CrudServiceInterface, CrudState, CrudActions, OptimisticStatus, OptimisticMeta, CrudOperation, CrudStoreApi, CacheOptions, MutationOptions, FilterState, CollectionUIState, } from './types';
|
|
19
|
+
export { OPTIMISTIC_STATUSES, CRUD_OPERATION } from './types';
|
|
18
20
|
export { loadDeterministicRange, upsertDeterministic, appendToCollection, } from './utils/collections';
|
|
19
21
|
export { getFieldRegistry, registerFieldType, isFieldTypeRegistered, type FieldTypeRegistration, type ControlledFieldProps, type UncontrolledFieldProps, } from './FieldRegistry';
|
|
20
22
|
export { registerBuiltinFieldType, getFieldTypeMetadata, getFilterType, getDisplayFormatter, isFilterable, getValueType, clearFieldTypeRegistry, type FieldTypeMetadata, type FilterType, type ValueType, type DisplayFormatter, type ComponentRegistration, } from './fieldTypeRegistry';
|