@donotdev/crud 0.0.4 → 0.0.6

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.
Files changed (150) hide show
  1. package/dist/CrudService.d.ts +7 -3
  2. package/dist/CrudService.d.ts.map +1 -1
  3. package/dist/CrudService.js +1 -1
  4. package/dist/CrudStore.d.ts +6 -1
  5. package/dist/CrudStore.d.ts.map +1 -1
  6. package/dist/CrudStore.js +1 -1
  7. package/dist/FieldRegistry.d.ts +126 -0
  8. package/dist/FieldRegistry.d.ts.map +1 -0
  9. package/dist/FieldRegistry.js +1 -0
  10. package/dist/adapters/FirestoreAdapter.d.ts.map +1 -1
  11. package/dist/adapters/FirestoreAdapter.js +1 -1
  12. package/dist/builtinFieldTypes.d.ts +5 -0
  13. package/dist/builtinFieldTypes.d.ts.map +1 -0
  14. package/dist/builtinFieldTypes.js +1 -0
  15. package/dist/components/ControlledFields.d.ts +42 -24
  16. package/dist/components/ControlledFields.d.ts.map +1 -1
  17. package/dist/components/ControlledFields.js +1 -1
  18. package/dist/components/DisplayFieldRenderer.d.ts +36 -0
  19. package/dist/components/DisplayFieldRenderer.d.ts.map +1 -0
  20. package/dist/components/DisplayFieldRenderer.js +1 -0
  21. package/dist/components/EntityFormRenderer.d.ts +36 -8
  22. package/dist/components/EntityFormRenderer.d.ts.map +1 -1
  23. package/dist/components/EntityFormRenderer.js +5 -1
  24. package/dist/components/FormFieldRenderer.d.ts +3 -16
  25. package/dist/components/FormFieldRenderer.d.ts.map +1 -1
  26. package/dist/components/FormFieldRenderer.js +1 -1
  27. package/dist/components/form/fields/AddressFieldComponent.d.ts +3 -1
  28. package/dist/components/form/fields/AddressFieldComponent.d.ts.map +1 -1
  29. package/dist/components/form/fields/AddressFieldComponent.js +1 -1
  30. package/dist/components/form/fields/CheckboxFieldComponent.d.ts +2 -0
  31. package/dist/components/form/fields/CheckboxFieldComponent.d.ts.map +1 -1
  32. package/dist/components/form/fields/CheckboxFieldComponent.js +1 -1
  33. package/dist/components/form/fields/ComboboxComponent.d.ts +43 -0
  34. package/dist/components/form/fields/ComboboxComponent.d.ts.map +1 -0
  35. package/dist/components/form/fields/ComboboxComponent.js +1 -0
  36. package/dist/components/form/fields/CurrencyFieldComponent.d.ts +41 -0
  37. package/dist/components/form/fields/CurrencyFieldComponent.d.ts.map +1 -0
  38. package/dist/components/form/fields/CurrencyFieldComponent.js +1 -0
  39. package/dist/components/form/fields/DateFieldComponent.d.ts +2 -0
  40. package/dist/components/form/fields/DateFieldComponent.d.ts.map +1 -1
  41. package/dist/components/form/fields/DateFieldComponent.js +1 -1
  42. package/dist/components/form/fields/DropdownComponent.d.ts.map +1 -1
  43. package/dist/components/form/fields/DropdownComponent.js +1 -1
  44. package/dist/components/form/fields/FileFieldComponent.d.ts +2 -0
  45. package/dist/components/form/fields/FileFieldComponent.d.ts.map +1 -1
  46. package/dist/components/form/fields/FileFieldComponent.js +1 -1
  47. package/dist/components/form/fields/GeoPointFieldComponent.d.ts +2 -0
  48. package/dist/components/form/fields/GeoPointFieldComponent.d.ts.map +1 -1
  49. package/dist/components/form/fields/GeoPointFieldComponent.js +1 -1
  50. package/dist/components/form/fields/ImageFieldComponent.d.ts +32 -17
  51. package/dist/components/form/fields/ImageFieldComponent.d.ts.map +1 -1
  52. package/dist/components/form/fields/ImageFieldComponent.js +1 -1
  53. package/dist/components/form/fields/MapFieldComponent.d.ts +2 -0
  54. package/dist/components/form/fields/MapFieldComponent.d.ts.map +1 -1
  55. package/dist/components/form/fields/MapFieldComponent.js +1 -1
  56. package/dist/components/form/fields/MultiDropdownComponent.d.ts +2 -2
  57. package/dist/components/form/fields/MultiDropdownComponent.d.ts.map +1 -1
  58. package/dist/components/form/fields/MultiDropdownComponent.js +1 -1
  59. package/dist/components/form/fields/MultiInputTextFieldComponent.d.ts +2 -0
  60. package/dist/components/form/fields/MultiInputTextFieldComponent.d.ts.map +1 -1
  61. package/dist/components/form/fields/MultiInputTextFieldComponent.js +1 -1
  62. package/dist/components/form/fields/NumberFieldComponent.d.ts.map +1 -1
  63. package/dist/components/form/fields/NumberFieldComponent.js +1 -1
  64. package/dist/components/form/fields/PasswordFieldComponent.d.ts.map +1 -1
  65. package/dist/components/form/fields/PasswordFieldComponent.js +1 -1
  66. package/dist/components/form/fields/PhoneNumberComponent.d.ts +31 -17
  67. package/dist/components/form/fields/PhoneNumberComponent.d.ts.map +1 -1
  68. package/dist/components/form/fields/PhoneNumberComponent.js +1 -1
  69. package/dist/components/form/fields/RadioFieldComponent.d.ts.map +1 -1
  70. package/dist/components/form/fields/RadioFieldComponent.js +1 -1
  71. package/dist/components/form/fields/RangeFieldComponent.d.ts.map +1 -1
  72. package/dist/components/form/fields/RangeFieldComponent.js +1 -1
  73. package/dist/components/form/fields/ReferenceFieldComponent.d.ts +7 -2
  74. package/dist/components/form/fields/ReferenceFieldComponent.d.ts.map +1 -1
  75. package/dist/components/form/fields/ReferenceFieldComponent.js +1 -1
  76. package/dist/components/form/fields/SwitchFieldComponent.d.ts +28 -0
  77. package/dist/components/form/fields/SwitchFieldComponent.d.ts.map +1 -0
  78. package/dist/components/form/fields/SwitchFieldComponent.js +1 -0
  79. package/dist/components/form/fields/TextAreaComponent.d.ts.map +1 -1
  80. package/dist/components/form/fields/TextAreaComponent.js +1 -1
  81. package/dist/components/form/fields/TextFieldComponent.d.ts.map +1 -1
  82. package/dist/components/form/fields/TextFieldComponent.js +1 -1
  83. package/dist/components/form/fields/TimestampFieldComponent.d.ts +2 -0
  84. package/dist/components/form/fields/TimestampFieldComponent.d.ts.map +1 -1
  85. package/dist/components/form/fields/TimestampFieldComponent.js +1 -1
  86. package/dist/components/form/fields/index.d.ts +7 -1
  87. package/dist/components/form/fields/index.d.ts.map +1 -1
  88. package/dist/components/form/fields/index.js +1 -1
  89. package/dist/components/form/internal/ImageViewerDialog.d.ts +25 -0
  90. package/dist/components/form/internal/ImageViewerDialog.d.ts.map +1 -0
  91. package/dist/components/form/internal/ImageViewerDialog.js +1 -0
  92. package/dist/components/index.d.ts +2 -0
  93. package/dist/components/index.d.ts.map +1 -1
  94. package/dist/components/index.js +1 -1
  95. package/dist/context/FormUploadContext.d.ts +36 -0
  96. package/dist/context/FormUploadContext.d.ts.map +1 -0
  97. package/dist/context/FormUploadContext.js +1 -0
  98. package/dist/context/index.d.ts +2 -0
  99. package/dist/context/index.d.ts.map +1 -0
  100. package/dist/context/index.js +1 -0
  101. package/dist/forms/hooks/index.d.ts +11 -0
  102. package/dist/forms/hooks/index.d.ts.map +1 -0
  103. package/dist/forms/hooks/index.js +1 -0
  104. package/dist/forms/hooks/useEntityField.d.ts +67 -0
  105. package/dist/forms/hooks/useEntityField.d.ts.map +1 -0
  106. package/dist/forms/hooks/useEntityField.js +1 -0
  107. package/dist/forms/hooks/useEntityForm.d.ts +89 -0
  108. package/dist/forms/hooks/useEntityForm.d.ts.map +1 -0
  109. package/dist/forms/hooks/useEntityForm.js +1 -0
  110. package/dist/forms/index.d.ts +37 -0
  111. package/dist/forms/index.d.ts.map +1 -0
  112. package/dist/forms/index.js +1 -0
  113. package/dist/forms/types.d.ts +185 -0
  114. package/dist/forms/types.d.ts.map +1 -0
  115. package/dist/forms/types.js +0 -0
  116. package/dist/forms/utils/createEntitySchema.d.ts +53 -0
  117. package/dist/forms/utils/createEntitySchema.d.ts.map +1 -0
  118. package/dist/forms/utils/createEntitySchema.js +1 -0
  119. package/dist/forms/utils/getFieldsForOperation.d.ts +87 -0
  120. package/dist/forms/utils/getFieldsForOperation.d.ts.map +1 -0
  121. package/dist/forms/utils/getFieldsForOperation.js +1 -0
  122. package/dist/forms/utils/index.d.ts +14 -0
  123. package/dist/forms/utils/index.d.ts.map +1 -0
  124. package/dist/forms/utils/index.js +1 -0
  125. package/dist/forms/utils/isFieldEditable.d.ts +43 -0
  126. package/dist/forms/utils/isFieldEditable.d.ts.map +1 -0
  127. package/dist/forms/utils/isFieldEditable.js +1 -0
  128. package/dist/forms/utils/normalizeToFieldConfig.d.ts +47 -0
  129. package/dist/forms/utils/normalizeToFieldConfig.d.ts.map +1 -0
  130. package/dist/forms/utils/normalizeToFieldConfig.js +1 -0
  131. package/dist/forms/utils/validateEntity.d.ts +77 -0
  132. package/dist/forms/utils/validateEntity.d.ts.map +1 -0
  133. package/dist/forms/utils/validateEntity.js +1 -0
  134. package/dist/index.d.ts +4 -1
  135. package/dist/index.d.ts.map +1 -1
  136. package/dist/index.js +1 -1
  137. package/dist/tsconfig.tsbuildinfo +1 -1
  138. package/dist/useCrud.d.ts +67 -15
  139. package/dist/useCrud.d.ts.map +1 -1
  140. package/dist/useCrud.js +1 -1
  141. package/dist/utils/imageProcessing.d.ts +49 -0
  142. package/dist/utils/imageProcessing.d.ts.map +1 -0
  143. package/dist/utils/imageProcessing.js +1 -0
  144. package/dist/utils/imageStorage.d.ts +35 -0
  145. package/dist/utils/imageStorage.d.ts.map +1 -0
  146. package/dist/utils/imageStorage.js +1 -0
  147. package/dist/utils/imageUtils.d.ts +86 -0
  148. package/dist/utils/imageUtils.d.ts.map +1 -0
  149. package/dist/utils/imageUtils.js +1 -0
  150. package/package.json +10 -7
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as n}from"react/jsx-runtime";import{Image as z,X as D}from"lucide-react";import{useCallback as m,useState as p}from"react";import{Button as N,BUTTON_VARIANT as k,Input as x,Label as j,Stack as g}from"@donotdev/components";const I=({label:f,onChange:s,error:d,helperText:i,maxSize:o,multiple:y=!1})=>{const[c,l]=p(!1),[v,u]=p(null),a=m(e=>{if(!e){s({target:{value:"",files:null}}),u(null);return}if(!e.type.startsWith("image/")||o&&e.size>o)return;const t=new FileReader;t.onloadend=()=>{u(t.result)},t.readAsDataURL(e);const b={target:{value:e.name,files:[e]}};s(b)},[o,s]),h=m(e=>{e.preventDefault(),l(!1);const t=e.dataTransfer?.files[0]||null;a(t)},[a]);return n(g,{gap:"tight",children:[r(j,{style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500},children:f}),n("div",{className:"dndev-relative dndev-surface","data-variant":d?"destructive":"default",style:{border:"2px dashed",borderColor:c?"var(--primary)":d?"var(--destructive)":"var(--border)",borderRadius:"var(--radius-lg)",padding:"var(--gap-lg)",backgroundColor:c?"color-mix(in oklab, var(--primary) 5%, transparent)":void 0,transition:"border-color 0.2s, background-color 0.2s"},onDragOver:e=>{e.preventDefault(),l(!0)},onDragLeave:()=>l(!1),onDrop:h,children:[r(x,{type:"file",accept:"image/*",multiple:y,className:"dndev-absolute dndev-inset-0 dndev-w-full dndev-h-full dndev-pointer-events-auto",style:{opacity:0,cursor:"pointer"},onChange:e=>a(e.target.files?.[0]??null)}),v?n("div",{className:"dndev-relative dndev-aspect-video",children:[r("img",{src:v,alt:"Preview",className:"dndev-mx-auto dndev-h-full dndev-object-contain",style:{borderRadius:"var(--radius-lg)"}}),r(N,{variant:k.GHOST,onClick:()=>a(null),className:"dndev-absolute dndev-size-touch",style:{padding:0,top:"var(--gap-md)",insetInlineEnd:"var(--gap-md)"},children:r(D,{className:"dndev-size-md"})})]}):n(g,{align:"center",justify:"center",gap:"medium",children:[r(z,{className:"dndev-size-lg",style:{color:"var(--muted-foreground)"}}),r("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:"Drag & drop or click to upload"})]})]}),i&&r("p",{style:{fontSize:"var(--font-size-xs)",color:d?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:i})]})};var E=I;export{E as default};
1
+ "use client";import{jsxs as f,jsx as l,Fragment as Me}from"react/jsx-runtime";import{Upload as ze,X as ne,Loader2 as Ae,GripVertical as Fe,Undo2 as Te,Redo2 as Ce}from"lucide-react";import{useCallback as m,useState as y,useRef as k,useEffect as F,useImperativeHandle as xe,forwardRef as Ee}from"react";import{Button as ie,BUTTON_VARIANT as se,Text as b,Stack as I,Progress as Se}from"@donotdev/components";import{ImageViewerDialog as je}from"../internal/ImageViewerDialog";import{handleError as D,useTranslation as Oe}from"@donotdev/core";import{useFormUpload as $e}from"../../../context/FormUploadContext";import{processImage as We}from"../../../utils/imageProcessing";import{uploadImage as Be,deleteImage as He}from"../../../utils/imageStorage";import{generateFileHash as Ke,createPreviewURL as le,revokePreviewURL as G,rotateImage90 as _e,UndoRedoManager as Ve,findDuplicatesByHash as Ge,generateImageId as de}from"../../../utils/imageUtils";const ce=Ee(({name:T,label:L,value:P,onChange:j,error:O,helperText:X,multiple:d=!1,maxFiles:C=10,maxSize:N=10*1024*1024,storagePath:q="uploads/images",entityId:Xe,required:ue,t:pe},ge)=>{const{t:fe}=Oe("dndev"),o=pe||fe,x=$e(),[s,u]=y([]),[J,$]=y(!1),[M,Q]=y(null),[R,Y]=y(null),[Z,ee]=y(null),[me,re]=y(null),[ve,W]=y(!1),[he,B]=y(0),ae=k(null),z=k(null),h=k(new Ve),E=k(new Map),H=k(!1),v=m(e=>{const r=e.filter(a=>a.uploaded&&!a.error).map(a=>a.uploaded);j(d?r:r[0]||null)},[d,j]),ye=m((e,r)=>{u(a=>{const t=[...a];return t[e]&&(t[e]={...t[e],...r},setTimeout(()=>v(t),0)),t})},[v]);F(()=>{if(H.current){H.current=!1;return}if(P){const e=[];(Array.isArray(P)?P:[P]).forEach(a=>{a.fullUrl&&e.push({id:de(),file:new File([],"existing"),previewURL:a.thumbUrl||a.fullUrl,hash:"",rotation:0,uploadProgress:null,uploaded:a,error:null})}),u(e)}else u([])},[P]);const K=k(new Set);F(()=>{K.current.clear(),s.forEach(e=>{e.previewURL.startsWith("blob:")&&K.current.add(e.previewURL)})},[s]),F(()=>()=>{K.current.forEach(e=>{G(e)})},[]),xe(ge,()=>({upload:async()=>{await _()},getImages:()=>s}),[s]);const _=m(async()=>{const e=s.filter(t=>!t.uploaded&&!t.error&&t.uploadProgress===null);if(e.length===0)return;u(t=>t.map(i=>e.some(n=>n.id===i.id)?{...i,uploadProgress:0}:i));const r=e.map(async t=>{try{const{fullBlob:i,thumbBlob:n}=await We(t.file),p=await Be(i,n,t.file.name,{storagePath:q,onProgress:w=>{u(c=>c.map(g=>g.id===t.id?{...g,uploadProgress:w.progress}:g))}});return{id:t.id,picture:p,error:null}}catch(i){return D(i,{userMessage:o("image.upload.failed",{fileName:t.file.name}),severity:"error",context:{fileName:t.file.name,fileSize:t.file.size}}),{id:t.id,picture:null,error:"Upload failed"}}}),a=await Promise.all(r);u(t=>{const i=t.map(n=>{const p=a.find(w=>w.id===n.id);return p?{...n,uploaded:p.picture,uploadProgress:p.picture?100:null,error:p.error}:n});return setTimeout(()=>v(i),0),i})},[s,q,v]);F(()=>{if(!(!x||!T))return x.registerUpload(T,_),()=>{x.unregisterUpload(T)}},[x,T,_]);const A=m(async e=>{const a=(d?C:1)-s.length;if(a<=0){const c=d?o("image.errors.maxFiles",{max:C}):o("image.errors.singleOnly");D(new Error(c),{userMessage:c,severity:"warning",showNotification:!0});return}const t=e.slice(0,a),i=[],n=(N/(1024*1024)).toFixed(0);for(const c of t){if(!c.type.startsWith("image/")){const g=o("image.errors.notImage",{fileName:c.name});D(new Error(g),{userMessage:g,severity:"warning",showNotification:!0});continue}if(c.size>N){const g=o("image.errors.exceedsSize",{fileName:c.name,size:n});D(new Error(g),{userMessage:g,severity:"warning",showNotification:!0});continue}i.push(c)}if(i.length===0)return;const p=[],w=[];for(const c of i){const g=await Ke(c);if(Ge(s,g).length>0){w.push(c.name);continue}const Ne=le(c);p.push({id:de(),file:c,previewURL:Ne,hash:g,rotation:0,uploadProgress:null,uploaded:null,error:null})}w.length>0&&(ee(o("image.warnings.duplicates",{files:w.join(", ")})),setTimeout(()=>ee(null),5e3)),p.length!==0&&(h.current.push({type:"add",images:p}),u(c=>d?[...c,...p]:p))},[s,d,C,N,o]),be=e=>{const r=Array.from(e.target.files||[]);r.length>0&&A(r),z.current&&(z.current.value="")},we=m(e=>{e.preventDefault(),$(!1);const r=Array.from(e.dataTransfer.files);A(r)},[A]),V=m(e=>{const r=e.clipboardData?.items;if(!r)return;const a=[];for(let t=0;t<r.length;t++){const i=r[t];if(i&&i.type.startsWith("image/")){const n=i.getAsFile();n&&a.push(n)}}a.length>0&&A(a)},[A]);F(()=>{const e=ae.current;if(e)return e.addEventListener("paste",V),()=>e.removeEventListener("paste",V)},[V]);const S=m(async e=>{const r=s[e];if(r){h.current.push({type:"remove",indices:[e]});try{r.uploaded&&r.uploaded.fullUrl&&await He(r.uploaded),r.previewURL.startsWith("blob:")&&G(r.previewURL);const a=s.filter((t,i)=>i!==e);H.current=!0,u(a),setTimeout(()=>{v(a)},0)}catch(a){D(a,{userMessage:o("image.delete.failed"),severity:"error",showNotification:!0,context:{imageId:r.id}})}}},[s,v,o]),U=m(async e=>{const r=s[e];if(r)try{const a=await _e(r.file),t=le(a);r.previewURL.startsWith("blob:")&&G(r.previewURL),h.current.push({type:"rotate",index:e}),u(i=>{const n=[...i];return n[e]={...r,file:a,previewURL:t,rotation:(r.rotation+1)%4},n})}catch(a){D(a,{userMessage:o("image.rotate.failed"),severity:"error",showNotification:!0,context:{imageId:r.id,fileName:r.file.name}})}},[s,o]),Ie=e=>{d&&Y(e)},Re=(e,r)=>{d&&(e.preventDefault(),Q(r))},Ue=()=>{R!==null&&M!==null&&R!==M&&(h.current.push({type:"reorder",from:R,to:M}),u(e=>{const r=[...e],a=r[R];return a?(r.splice(R,1),r.splice(M,0,a),setTimeout(()=>v(r),0),r):e})),Y(null),Q(null)},ke=m(()=>{const e=h.current.undo();e&&(e.type==="add"?u(r=>{const a=new Set(e.images.map(i=>i.id)),t=r.filter(i=>!a.has(i.id));return setTimeout(()=>v(t),0),t}):e.type==="remove"||(e.type==="reorder"?u(r=>{const a=[...r],t=a[e.to];return t&&(a.splice(e.to,1),a.splice(e.from,0,t),setTimeout(()=>v(a),0)),a}):e.type==="rotate"&&(U(e.index),U(e.index),U(e.index))))},[v,U]),De=m(()=>{h.current.redo()},[]),Le=m((e,r)=>{switch(e.key){case"Delete":case"Backspace":e.preventDefault(),S(r);break;case"r":case"R":(e.ctrlKey||e.metaKey)&&(e.preventDefault(),U(r));break;case"ArrowLeft":if(d&&r>0){e.preventDefault();const a=s[r-1];a?.id&&E.current.get(a.id)?.focus()}break;case"ArrowRight":if(d&&r<s.length-1){e.preventDefault();const a=s[r+1];a?.id&&E.current.get(a.id)?.focus()}break}},[s,d,S,U]),Pe=d||s.length===0,qe=s.some(e=>!e.uploaded&&!e.error&&e.uploadProgress===null),te=h.current.canUndo(),oe=h.current.canRedo();return f(I,{gap:"tight",children:[f(I,{direction:"row",justify:"between",align:"center",children:[f(b,{level:"body",align:"start",children:[L,ue?"*":""]}),(te||oe)&&f(I,{direction:"row",children:[l(ie,{variant:se.GHOST,onClick:ke,disabled:!te,"aria-label":o("image.undo.ariaLabel"),title:o("image.undo.title"),children:l(Te,{className:"dndev-size-sm"})}),l(ie,{variant:se.GHOST,onClick:De,disabled:!oe,"aria-label":o("image.redo.ariaLabel"),title:o("image.redo.title"),children:l(Ce,{className:"dndev-size-sm"})})]})]}),Z&&l(b,{as:"div",role:"alert","aria-live":"polite",variant:"warning",level:"small",style:{padding:"var(--gap-sm)",borderRadius:"var(--radius-md)"},children:Z}),Pe&&f("div",{ref:ae,role:"button",tabIndex:0,"aria-label":o(d?"image.upload.ariaLabelMultiple":"image.upload.ariaLabelSingle"),"aria-describedby":`image-field-helper-${L}`,className:"dndev-surface","data-variant":O?"destructive":"default",style:{border:"var(--border-width) dashed",borderColor:J?"var(--primary)":O?"var(--destructive)":"var(--border)",borderRadius:"var(--radius-lg)",padding:"var(--gap-lg)",backgroundColor:J?"color-mix(in oklab, var(--primary) 5%, transparent)":"var(--surface)",transition:"border-color var(--dur-fast), background-color var(--dur-fast)",cursor:"pointer",outline:"none"},onDragOver:e=>{e.preventDefault(),$(!0)},onDragLeave:()=>$(!1),onDrop:we,onClick:()=>z.current?.click(),onKeyDown:e=>{(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),z.current?.click())},children:[l("input",{id:`image-field-${L}`,ref:z,type:"file",accept:"image/*",multiple:d,style:{display:"none"},onChange:be,"aria-label":o(d?"image.upload.selectAriaLabelMultiple":"image.upload.selectAriaLabelSingle")}),f(I,{align:"center",justify:"center",gap:"medium",children:[l(ze,{className:"dndev-size-lg",style:{color:"var(--muted-foreground)"},"aria-hidden":"true"}),f(b,{as:"p",variant:"muted",level:"small",align:"center",children:[o(d?"image.upload.dropzoneMultiple":"image.upload.dropzoneSingle"),l("br",{}),l(b,{as:"span",variant:"muted",level:"small",children:d?o("image.upload.maxFiles",{max:C,size:(N/(1024*1024)).toFixed(0)}):o("image.upload.maxSize",{size:(N/(1024*1024)).toFixed(0)})})]})]})]}),s.length>0&&l("div",{role:"list","aria-label":d?o("image.upload.uploadedMultiple",{count:s.length}):o("image.upload.uploadedSingle",{count:s.length}),style:{display:"flex",flexWrap:"wrap",gap:"var(--gap-md)"},children:s.map((e,r)=>{const a=e.uploadProgress!==null&&e.uploadProgress<100,t=e.uploaded!==null,i=!!e.previewURL;return l("div",{ref:n=>{n?E.current.set(e.id,n):E.current.delete(e.id)},role:"listitem",tabIndex:0,draggable:!a&&d,onDragStart:()=>Ie(r),onDragOver:n=>Re(n,r),onDragEnd:Ue,onKeyDown:n=>{(n.key==="Enter"||n.key===" ")&&(n.preventDefault(),B(r),W(!0)),Le(n,r)},onFocus:()=>re(r),onBlur:()=>re(null),onClick:()=>{B(r),W(!0)},"aria-label":`Image ${r+1}${e.uploaded?" (uploaded)":" (pending upload)"}`,style:{position:"relative",width:"calc(var(--touch-target) * 2.5)",height:"calc(var(--touch-target) * 2.5)",borderRadius:"var(--radius-md)",border:M===r?"var(--border-width) solid var(--primary)":me===r?"var(--border-width) solid var(--ring)":"calc(var(--border-width) / 2) solid var(--border)",overflow:"hidden",backgroundColor:"var(--surface)",cursor:a?"default":"pointer",opacity:R===r?"var(--opacity-muted)":"1",transition:"opacity var(--dur-fast), border-color var(--dur-fast)",outline:"none"},children:a?f(I,{align:"center",justify:"center",style:{width:"100%",height:"100%"},direction:"column",gap:"tight",children:[l(Ae,{className:"dndev-size-lg",style:{animation:"spin 1s linear infinite",color:"var(--primary)"},"aria-hidden":"true"}),l(Se,{value:e.uploadProgress||0,style:{width:"80%"},"aria-label":o("image.upload.progress",{progress:Math.round(e.uploadProgress||0)})}),f(b,{variant:"muted",level:"small",children:[Math.round(e.uploadProgress||0),"%"]})]}):e.error?f(I,{align:"center",justify:"center",style:{width:"100%",height:"100%",padding:"var(--gap-sm)"},direction:"column",children:[l(ne,{className:"dndev-size-md",style:{color:"var(--destructive)"},"aria-hidden":"true"}),l(b,{variant:"destructive",level:"small",align:"center",children:e.error})]}):f(Me,{children:[i&&l("img",{src:e.previewURL,alt:e.file.name||o("image.alt.upload",{index:r+1}),loading:"lazy",decoding:"async",fetchPriority:"low",style:{width:"100%",height:"100%",objectFit:"cover",transform:`rotate(${e.rotation*90}deg)`,aspectRatio:"1 / 1"},"aria-label":`${L} ${r+1}${d?` of ${s.length}`:""}${e.uploaded?" (uploaded)":" (pending upload)"}`}),d&&l("div",{style:{position:"absolute",top:"var(--gap-sm)",left:"var(--gap-sm)",opacity:"var(--opacity-strong)",cursor:"grab"},"aria-label":o("image.reorder.ariaLabel"),onClick:n=>n.stopPropagation(),children:l(Fe,{className:"dndev-size-sm",style:{color:"var(--background)"},"aria-hidden":"true"})}),l(I,{direction:"row",style:{position:"absolute",top:"var(--gap-sm)",right:"var(--gap-sm)"},children:l("button",{type:"button",onClick:n=>{n.stopPropagation(),S(r)},"aria-label":o("image.delete.ariaLabel",{index:r+1}),title:o("image.delete.title"),style:{padding:"var(--gap-sm)",minWidth:"auto",background:"color-mix(in oklab, var(--foreground) 50%, transparent)",border:"none",borderRadius:"var(--radius-sm)",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},children:l(ne,{className:"dndev-size-sm",style:{color:"var(--background)"},"aria-hidden":"true"})})}),!t&&l("div",{style:{position:"absolute",bottom:"var(--gap-sm)",left:"var(--gap-sm)",right:"var(--gap-sm)",padding:"var(--gap-sm)",background:"color-mix(in oklab, var(--foreground) 70%, transparent)",color:"var(--background)",textAlign:"center",borderRadius:"var(--radius-sm)"},children:l(b,{variant:"muted",level:"small",align:"center",children:o("image.upload.pending")})})]})},e.id)})}),X&&l(b,{as:"p",id:`image-field-helper-${L}`,variant:O?"destructive":"muted",level:"small",style:{marginTop:"var(--gap-sm)"},children:X}),s.length>0&&l(je,{images:s,selectedIndex:he,open:ve,onClose:()=>W(!1),onUpdate:ye,onDelete:S,onNavigate:e=>B(e),multiple:d})]})});ce.displayName="ImageFieldComponent";var dr=ce;export{dr as default};
@@ -10,6 +10,8 @@ export interface MapFieldComponentProps {
10
10
  error?: boolean;
11
11
  /** Helper text */
12
12
  helperText?: string;
13
+ /** Whether the field is required */
14
+ required?: boolean;
13
15
  }
14
16
  declare const MapFieldComponent: ComponentType<MapFieldComponentProps>;
15
17
  export default MapFieldComponent;
@@ -1 +1 @@
1
- {"version":3,"file":"MapFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/MapFieldComponent.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,EAAE,CACR,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC,gBAAgB,CAAC,KACvD,IAAI,CAAC;IACV,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,QAAA,MAAM,iBAAiB,EAAE,aAAa,CAAC,sBAAsB,CAgF5D,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"MapFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/MapFieldComponent.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,EAAE,CACR,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC,gBAAgB,CAAC,KACvD,IAAI,CAAC;IACV,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,QAAA,MAAM,iBAAiB,EAAE,aAAa,CAAC,sBAAsB,CAkF5D,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- import{jsx as t,jsxs as o}from"react/jsx-runtime";import{Label as v,Input as p,Stack as u}from"@donotdev/components";import{useTranslation as m}from"@donotdev/core";const f=({label:s,value:i={},onChange:a,error:e,helperText:r})=>{const{t:d}=m("dndev");return o(u,{gap:"tight",children:[t(v,{style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500},children:s}),o("div",{className:"dndev-surface","data-variant":e?"destructive":"default",style:{border:"1px solid",borderColor:e?"var(--destructive)":"var(--input)",borderRadius:"var(--radius-lg)",padding:"var(--gap-md)"},children:[t("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)",marginBottom:"var(--gap-md)"},children:"Map component placeholder"}),t(p,{type:"text",className:"dndev-w-full",placeholder:d("form.enterLocationData","Enter location data (JSON)"),value:JSON.stringify(i),onChange:l=>{try{const n=JSON.parse(l.target.value),c={target:{value:JSON.stringify(n)}};a(c)}catch{a({target:{value:"{}"}})}}})]}),r&&t("p",{style:{fontSize:"var(--font-size-xs)",color:e?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:r})]})};var x=f;export{x as default};
1
+ import{jsx as t,jsxs as n}from"react/jsx-runtime";import{Label as p,Input as u,Stack as m}from"@donotdev/components";import{useTranslation as f}from"@donotdev/core";const g=({label:s,value:i={},onChange:a,error:e,helperText:r,required:d})=>{const{t:l}=f("dndev");return n(m,{gap:"tight",children:[t(p,{required:d,style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500},children:s}),n("div",{className:"dndev-surface","data-variant":e?"destructive":"default",style:{border:"1px solid",borderColor:e?"var(--destructive)":"var(--input)",borderRadius:"var(--radius-lg)",padding:"var(--gap-md)"},children:[t("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)",marginBottom:"var(--gap-md)"},children:"Map component placeholder"}),t(u,{type:"text",className:"dndev-w-full",placeholder:l("form.enterLocationData","Enter location data (JSON)"),value:JSON.stringify(i),onChange:c=>{try{const o=JSON.parse(c.target.value),v={target:{value:JSON.stringify(o)}};a(v)}catch{a({target:{value:"{}"}})}}})]}),r&&t("p",{style:{fontSize:"var(--font-size-xs)",color:e?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:r})]})};var x=g;export{x as default};
@@ -1,4 +1,4 @@
1
- import type { ChangeEvent, ComponentType, FocusEvent } from 'react';
1
+ import type { ChangeEvent, ComponentType } from 'react';
2
2
  export interface MultiDropdownComponentProps {
3
3
  /** Label for the dropdown */
4
4
  label: string;
@@ -16,7 +16,7 @@ export interface MultiDropdownComponentProps {
16
16
  /** Change handler - accepts both event and direct value */
17
17
  onChange: (value: string[] | ChangeEvent<HTMLSelectElement>) => void;
18
18
  /** Blur handler */
19
- onBlur?: (event: FocusEvent<HTMLSelectElement>) => void;
19
+ onBlur?: () => void;
20
20
  /** Whether the field is required */
21
21
  required?: boolean;
22
22
  /** Additional CSS classes */
@@ -1 +1 @@
1
- {"version":3,"file":"MultiDropdownComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/MultiDropdownComponent.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEpE,MAAM,WAAW,2BAA2B;IAC1C,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,4BAA4B;IAC5B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/D,8BAA8B;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACrE,mBAAmB;IACnB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACxD,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,sBAAsB,EAAE,aAAa,CAAC,2BAA2B,CAiItE,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"MultiDropdownComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/MultiDropdownComponent.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,2BAA2B;IAC1C,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,4BAA4B;IAC5B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/D,8BAA8B;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACrE,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,sBAAsB,EAAE,aAAa,CAAC,2BAA2B,CA0HtE,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -1 +1 @@
1
- import{jsx as a,jsxs as i}from"react/jsx-runtime";import{X as S}from"lucide-react";import{Select as y,Badge as N,BADGE_VARIANT as b,Button as T,BUTTON_VARIANT as w,Label as A,Stack as m}from"@donotdev/components";import{useTranslation as B}from"@donotdev/core";const x=({label:g,value:r=[],options:l,error:p,helperText:c,onChange:d,onBlur:z,required:u,className:f,...O})=>{const{t:o}=B("dndev"),v=t=>{const e=r.includes(t)?r.filter(s=>s!==t):[...r,t],n={target:{value:JSON.stringify(e)}};d(n)},h=t=>{const e=r.filter(s=>s!==t),n={target:{value:JSON.stringify(e)}};d(n)};return i(m,{gap:"tight",className:f,children:[i(A,{style:{fontSize:"var(--font-size-sm)",fontWeight:500},children:[o(g),u&&a("span",{style:{color:"var(--destructive-foreground)",marginInlineStart:"var(--gap-sm)"},children:"*"})]}),r.length>0&&a(m,{direction:"row",wrap:"wrap",gap:"medium",style:{marginTop:"var(--gap-md)",marginBottom:"var(--gap-md)"},children:r.map((t,e)=>{const n=l.find(s=>String(s.value)===t)?.label||t;return i(N,{variant:b.SECONDARY,className:"dndev-gap-sm",children:[o(n),a(T,{type:"button",variant:w.GHOST,style:{padding:0,height:"auto"},onClick:()=>h(t),children:a(S,{className:"dndev-size-md"})})]},e)})}),a(y,{onValueChange:v,placeholder:o("actions.select","Select options..."),options:l.map(t=>{const e=String(t.value),n=r.includes(e);return{value:e,label:o(t.label),content:i("span",{style:{backgroundColor:n?"var(--accent)":void 0},children:[o(t.label),n&&" \u2713"]})}})}),c&&a("p",{style:{fontSize:"var(--font-size-xs)",color:p?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:c})]})};var k=x;export{k as default};
1
+ import{jsx as t,jsxs as c}from"react/jsx-runtime";import{useMemo as C,useId as z}from"react";import{X as E}from"lucide-react";import{Combobox as I,Badge as V,BADGE_VARIANT as j,Button as w,BUTTON_VARIANT as B,Stack as d}from"@donotdev/components";import{useTranslation as R}from"@donotdev/core";const T=({label:g,value:o=[],options:s,error:h,helperText:a,onChange:u,onBlur:f,required:v,className:y})=>{const{t:m}=R("dndev"),p=z(),b=C(()=>s.map(e=>({value:String(e.value),label:e.label})),[s]),N=e=>{const n=Array.isArray(e)?e:[e],r={target:{value:JSON.stringify(n)}};u(r)},S=e=>{e||f?.()},A=e=>{const n=o.filter(l=>l!==e),r={target:{value:JSON.stringify(n)}};u(r)},i=!!h,O=`${p}-error`,x=`${p}-helper`;return c(d,{gap:"tight",className:y,children:[o.length>0&&t(d,{direction:"row",wrap:"wrap",gap:"medium",children:o.map((e,n)=>{const r=s.find(l=>String(l.value)===e)?.label||e;return c(V,{variant:j.SECONDARY,className:"dndev-gap-sm",children:[r,t(w,{type:"button",variant:B.GHOST,style:{padding:0,height:"auto"},onClick:()=>A(e),children:t(E,{className:"dndev-size-md"})})]},n)})}),t(I,{label:g,value:o,onValueChange:N,onOpenChange:S,placeholder:m("actions.selectOptions","Select options..."),emptyMessage:m("messages.noResults","No results found"),options:b,multiple:!0,required:v,variant:i?"destructive":void 0}),i&&c(d,{id:O,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[t("span",{children:"\u26A0"}),a]}),a&&!i&&t("p",{id:x,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:a})]})};var $=T;export{$ as default};
@@ -16,6 +16,8 @@ export interface MultiInputTextFieldComponentProps {
16
16
  onChange: (value: string[] | ChangeEvent<HTMLInputElement>) => void;
17
17
  /** Optional classname for styling */
18
18
  className?: string;
19
+ /** Whether the field is required */
20
+ required?: boolean;
19
21
  }
20
22
  declare const MultiInputTextFieldComponent: ComponentType<MultiInputTextFieldComponentProps>;
21
23
  export default MultiInputTextFieldComponent;
@@ -1 +1 @@
1
- {"version":3,"file":"MultiInputTextFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/MultiInputTextFieldComponent.tsx"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,OAAO,EAAY,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAKvE,MAAM,WAAW,iCAAiC;IAChD,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,sEAAsE;IACtE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACpE,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,4BAA4B,EAAE,aAAa,CAC/C,iCAAiC,CAyFlC,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
1
+ {"version":3,"file":"MultiInputTextFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/MultiInputTextFieldComponent.tsx"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,OAAO,EAAY,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAKvE,MAAM,WAAW,iCAAiC;IAChD,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,sEAAsE;IACtE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACpE,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,QAAA,MAAM,4BAA4B,EAAE,aAAa,CAC/C,iCAAiC,CA0FlC,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as i}from"react/jsx-runtime";import{useState as v}from"react";import{Input as h,Button as y,Label as x,Stack as d}from"@donotdev/components";import{useTranslation as b}from"@donotdev/core";const S=({label:m,value:o=[],onChange:l,className:u})=>{const{t:s}=b("dndev"),[a,c]=v(""),p=()=>{if(a.trim()){const e=[...o,a.trim()],t={target:{value:JSON.stringify(e)}};l(t),c("")}},g=e=>{const t=o.filter((w,f)=>f!==e),n={target:{value:JSON.stringify(t)}};l(n)};return i(d,{gap:"medium",className:u,children:[r("div",{children:r(x,{style:{fontSize:"var(--font-size-sm)",fontWeight:500},children:m})}),i(d,{direction:"row",align:"center",gap:"medium",children:[r(h,{type:"text",value:a,onChange:e=>c(e.target.value),className:"dndev-flex-1",placeholder:s("form.typeAndPressAdd","Type and press Add...")}),r(y,{type:"button",onClick:p,disabled:!a.trim(),children:s("form.add","Add")})]}),r(d,{direction:"row",wrap:"wrap",gap:"medium",children:o.map((e,t)=>i("span",{className:"dndev-surface","data-variant":"muted",style:{display:"inline-flex",alignItems:"center",gap:"var(--gap-sm)",padding:"var(--gap-sm) var(--gap-md)",fontSize:"var(--font-size-sm)",fontWeight:500,borderRadius:"var(--radius-lg)"},children:[e,r("button",{type:"button",onClick:()=>g(t),style:{color:"var(--muted-foreground)",marginInlineStart:"var(--gap-sm)"},onMouseEnter:n=>{n.currentTarget.style.color="var(--foreground)"},onMouseLeave:n=>{n.currentTarget.style.color="var(--muted-foreground)"},"aria-label":`${s("form.remove","Remove")} ${e}`,children:"\xD7"})]},t))})]})};var z=S;export{z as default};
1
+ "use client";import{jsx as r,jsxs as i}from"react/jsx-runtime";import{useState as h}from"react";import{Input as y,Button as x,Label as b,Stack as d}from"@donotdev/components";import{useTranslation as S}from"@donotdev/core";const w=({label:u,value:o=[],onChange:l,className:c,required:p})=>{const{t:s}=S("dndev"),[a,m]=h(""),g=()=>{if(a.trim()){const e=[...o,a.trim()],t={target:{value:JSON.stringify(e)}};l(t),m("")}},f=e=>{const t=o.filter((A,v)=>v!==e),n={target:{value:JSON.stringify(t)}};l(n)};return i(d,{gap:"medium",className:c,children:[r("div",{children:r(b,{required:p,style:{fontSize:"var(--font-size-sm)",fontWeight:500},children:u})}),i(d,{direction:"row",align:"center",gap:"medium",children:[r(y,{type:"text",value:a,onChange:e=>m(e.target.value),className:"dndev-flex-1",placeholder:s("form.typeAndPressAdd","Type and press Add...")}),r(x,{type:"button",onClick:g,disabled:!a.trim(),children:s("form.add","Add")})]}),r(d,{direction:"row",wrap:"wrap",gap:"medium",children:o.map((e,t)=>i("span",{className:"dndev-surface","data-variant":"muted",style:{display:"inline-flex",alignItems:"center",gap:"var(--gap-sm)",padding:"var(--gap-sm) var(--gap-md)",fontSize:"var(--font-size-sm)",fontWeight:500,borderRadius:"var(--radius-lg)"},children:[e,r("button",{type:"button",onClick:()=>f(t),style:{color:"var(--muted-foreground)",marginInlineStart:"var(--gap-sm)"},onMouseEnter:n=>{n.currentTarget.style.color="var(--foreground)"},onMouseLeave:n=>{n.currentTarget.style.color="var(--muted-foreground)"},"aria-label":`${s("form.remove","Remove")} ${e}`,children:"\xD7"})]},t))})]})};var z=w;export{z as default};
@@ -1 +1 @@
1
- {"version":3,"file":"NumberFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/NumberFieldComponent.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,yBAAyB;IACxC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACzD,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,oBAAoB,EAAE,aAAa,CAAC,yBAAyB,CAoFlE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"NumberFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/NumberFieldComponent.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,yBAAyB;IACxC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACzD,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,oBAAoB,EAAE,aAAa,CAAC,yBAAyB,CAkElE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- import{jsx as a,jsxs as l}from"react/jsx-runtime";import{Input as y,Label as h,cn as x,Stack as S}from"@donotdev/components";const j=({label:u,value:r,onChange:n,error:o,helperText:s,min:c,max:f,step:m,disabled:e,required:i,className:g,...p})=>{const v=t=>{const d=parseFloat(t.target.value);isNaN(d)?n(t):n({...t,target:{...t.target,value:d.toString()}})};return l(S,{gap:"tight",children:[l(h,{style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500},children:[u,i&&a("span",{style:{color:"var(--destructive-foreground)",marginInlineStart:"var(--gap-sm)"},children:"*"})]}),a(y,{type:"number",value:r!==void 0?r.toString():"",onChange:v,min:c,max:f,step:m,disabled:e,required:i,className:x("dndev-w-full",g),"data-variant":o?"destructive":void 0,style:{opacity:e?"var(--opacity-muted)":void 0,cursor:e?"not-allowed":void 0},...p}),s&&a("p",{style:{fontSize:"var(--font-size-xs)",color:o?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:s})]})};var b=j;export{b as default};
1
+ import{jsx as i,jsxs as v}from"react/jsx-runtime";import{Input as x,cn as y,Stack as h}from"@donotdev/components";const j=({label:d,value:a,onChange:r,error:n,helperText:o,min:u,max:l,step:c,disabled:t,required:m,className:f,...p})=>{const g=e=>{const s=parseFloat(e.target.value);isNaN(s)?r(e):r({...e,target:{...e.target,value:s.toString()}})};return v(h,{gap:"tight",children:[i(x,{type:"number",label:d,value:a!==void 0?a.toString():"",onChange:g,min:u,max:l,step:c,disabled:t,required:m,className:y("dndev-w-full",f),"data-variant":n?"destructive":void 0,style:{opacity:t?"var(--opacity-muted)":void 0,cursor:t?"not-allowed":void 0},...p}),o&&i("p",{style:{fontSize:"var(--font-size-xs)",color:n?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:o})]})};var w=j;export{w as default};
@@ -1 +1 @@
1
- {"version":3,"file":"PasswordFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/PasswordFieldComponent.tsx"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AAEvE,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CACvD,cAAc,CAAC,OAAO,aAAa,CAAC,EACpC,OAAO,GAAG,UAAU,CACrB;IACC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CACR,KAAK,EAAE,WAAW,CAAC,gBAAgB,GAAG,mBAAmB,CAAC,KACvD,IAAI,CAAC;IACV,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,sBAAsB,EAAE,aAAa,CAAC,2BAA2B,CAoCtE,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"PasswordFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/PasswordFieldComponent.tsx"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AAEvE,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CACvD,cAAc,CAAC,OAAO,aAAa,CAAC,EACpC,OAAO,GAAG,UAAU,CACrB;IACC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CACR,KAAK,EAAE,WAAW,CAAC,gBAAgB,GAAG,mBAAmB,CAAC,KACvD,IAAI,CAAC;IACV,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,sBAAsB,EAAE,aAAa,CAAC,2BAA2B,CAqCtE,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as i}from"react/jsx-runtime";import{useId as l}from"react";import{PasswordInput as m,Stack as u}from"@donotdev/components";const c=({label:s,value:e,onChange:a,error:t,helperText:o,...n})=>{const d=l();return i(u,{gap:"tight",children:[r(m,{id:d,value:e??"",onChange:a,label:s,className:"dndev-w-full",...n}),o&&r("p",{style:{fontSize:"var(--font-size-xs)",color:t?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:o})]})};var j=c;export{j as default};
1
+ "use client";import{jsx as o,jsxs as i}from"react/jsx-runtime";import{useId as l}from"react";import{PasswordInput as u,Stack as m}from"@donotdev/components";const c=({label:s,value:a,onChange:t,error:n,helperText:r,...e})=>{const d=l();return i(m,{gap:"tight",children:[o(u,{id:d,value:a??"",onChange:t,label:s,className:"dndev-w-full",required:e.required,...e}),r&&o("p",{style:{fontSize:"var(--font-size-xs)",color:n?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:r})]})};var j=c;export{j as default};
@@ -1,28 +1,42 @@
1
- import { type ComponentType } from 'react';
2
- export interface PhoneNumber {
3
- label: string;
4
- value: string;
5
- }
1
+ /**
2
+ * @fileoverview Phone Number Component
3
+ * @description Single phone number input with country code selector and flag. Form field component for phone number inputs in CRUD forms.
4
+ *
5
+ * @version 0.0.1
6
+ * @since 0.0.1
7
+ * @author AMBROISE PARK Consulting
8
+ */
9
+ import { type ChangeEvent, type ComponentType } from 'react';
6
10
  export interface PhoneNumberComponentProps {
7
- /** Array of phone numbers */
8
- phoneNumbers: PhoneNumber[];
9
- /** Change handler for phone numbers */
10
- onPhoneNumberChange: (phoneNumbers: PhoneNumber[]) => void;
11
- /** Whether the field has an error */
12
- error?: boolean;
13
- /** Helper text to display */
11
+ /** Field label */
12
+ label: string;
13
+ /** Current phone number value (full number with country code) */
14
+ value?: string;
15
+ /** Change handler */
16
+ onChange: (event: ChangeEvent<HTMLInputElement>) => void;
17
+ /** Error message */
18
+ error?: string;
19
+ /** Helper text */
14
20
  helperText?: string;
15
- /** User type: owner or tenant */
16
- userType?: 'owner' | 'tenant';
21
+ /** Required field indicator */
22
+ required?: boolean;
23
+ /** Disabled state */
24
+ disabled?: boolean;
25
+ /** Default country code (e.g., 'FR' for +33) */
26
+ defaultCountry?: string;
27
+ /** Whether to show country flags */
28
+ showFlags?: boolean;
29
+ /** Preferred country codes to show at the top (e.g., ['FR', 'US', 'GB']) */
30
+ preferredCountries?: string[];
31
+ /** Custom list of country codes to show (if provided, only these countries are shown) */
32
+ countries?: string[];
17
33
  }
18
34
  /**
19
- * PhoneNumberComponent renders phone number fields with add/remove controls.
35
+ * PhoneNumberComponent renders a single phone number input with country code selector.
20
36
  *
21
37
  * @version 0.0.1
22
38
  * @since 0.0.1
23
39
  * @author AMBROISE PARK Consulting
24
- * @param props - PhoneNumberComponentProps
25
- * @returns JSX.Element
26
40
  */
27
41
  declare const PhoneNumberComponent: ComponentType<PhoneNumberComponentProps>;
28
42
  export default PhoneNumberComponent;
@@ -1 +1 @@
1
- {"version":3,"file":"PhoneNumberComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/PhoneNumberComponent.tsx"],"names":[],"mappings":"AAYA,OAAO,EAA6B,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAOtE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC,6BAA6B;IAC7B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,uCAAuC;IACvC,mBAAmB,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAC3D,qCAAqC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,oBAAoB,EAAE,aAAa,CAAC,yBAAyB,CA6GlE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"PhoneNumberComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/PhoneNumberComponent.tsx"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAaf,MAAM,WAAW,yBAAyB;IACxC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACzD,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,yFAAyF;IACzF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;GAMG;AACH,QAAA,MAAM,oBAAoB,EAAE,aAAa,CAAC,yBAAyB,CA+NlE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- import{jsx as i,jsxs as d}from"react/jsx-runtime";import{Plus as w,X as y}from"lucide-react";import{useMemo as T}from"react";import{Button as h,BUTTON_VARIANT as f,Stack as m}from"@donotdev/components";import{useTranslation as j}from"@donotdev/core";import p from"./TextFieldComponent";const A=({phoneNumbers:a,onPhoneNumberChange:o,error:c,helperText:u,userType:v})=>{const{t:r}=j("dndev"),b=T(()=>v==="tenant"?"+82":"+33",[v]);a.length===0&&o([{label:"",value:b}]);const g=()=>{o([...a,{label:"",value:"+33"}])},_=l=>{const e=[...a];e.splice(l,1),o(e)},C=(l,e)=>{try{const n=l.target.value,t=[...a],s=t[e]||{label:"",value:""};t[e]={label:s.label,value:n},o(t)}catch{}},P=(l,e)=>{try{const n=l.target.value,t=[...a],s=t[e]||{label:"",value:""};t[e]={label:n,value:s.value},o(t)}catch{}};return d(m,{gap:"medium",children:[d(m,{direction:"row",align:"center",gap:"medium",children:[i("h6",{style:{fontSize:"var(--font-size-lg)",fontWeight:600},children:r("phone_numbers.title")}),i(h,{type:"button",onClick:g,variant:f.PRIMARY,"aria-label":r("phone_numbers.add"),icon:w})]}),a.map((l,e)=>d(m,{direction:"row",align:"center",gap:"medium",children:[i(p,{label:r("phone_numbers.value"),value:l.value,onChange:n=>C(n,e),placeholder:b,error:c?u:void 0,helperText:c?void 0:u}),i(p,{label:r("phone_numbers.label"),value:l.label,onChange:n=>P(n,e),error:c?u:void 0,helperText:c?void 0:u}),i(h,{type:"button",onClick:()=>_(e),variant:f.DESTRUCTIVE,"aria-label":r("phone_numbers.remove"),icon:y})]},e))]})};var D=A;export{D as default};
1
+ "use client";import{jsx as t,jsxs as i}from"react/jsx-runtime";import{useState as B,useMemo as m,useEffect as L,useId as M}from"react";import{Input as W,FloatingLabel as k,Button as F,BUTTON_VARIANT as O,DropdownMenu as U,Stack as p}from"@donotdev/components";import{Flag as I,COUNTRIES as N}from"@donotdev/core";const _=({label:V,value:d="",onChange:R,error:x,helperText:g,required:w=!1,disabled:b=!1,defaultCountry:S="FR",showFlags:z=!0,preferredCountries:c,countries:h})=>{const a=M(),f=m(()=>h&&h.length>0?h.map(e=>N.find(n=>n.code===e)).filter(e=>e!==void 0):Array.from(N),[h]),l=m(()=>{if(!c||c.length===0)return f;const e=c.map(o=>f.find(y=>y.code===o)).filter(o=>o!==void 0),n=f.filter(o=>!c.includes(o.code));return[...e,...n]},[f,c]),s=m(()=>l.find(e=>e.code===S)||l[0]||N[0],[S,l]),{country:C,phoneNumber:T}=m(()=>{if(!d)return{country:s,phoneNumber:""};const e=l.find(n=>d.startsWith(n.dialCode));return e?{country:e,phoneNumber:d.slice(e.dialCode.length).trim()}:d.startsWith("+")?{country:s,phoneNumber:d}:{country:s,phoneNumber:d}},[d,s,l]),[r,E]=B(s);L(()=>{C.code!==r.code&&E(C)},[C,r.code]);const v=T,$=e=>{E(e);const o={target:{value:e.dialCode+(v?" "+v:"")}};R(o)},j=e=>{const n=e.target.value,y={target:{value:r.dialCode+(n?" "+n:"")}};R(y)},A=l.map(e=>({label:e.dialCode,onClick:()=>$(e),checked:e.code===r.code,children:z?i(p,{direction:"row",align:"center",gap:"tight",children:[t(I,{code:e.flagCode,title:e.name}),t("span",{children:e.dialCode}),t("span",{style:{color:"var(--muted-foreground)",fontSize:"var(--font-size-xs)"},children:e.name})]}):i("span",{children:[e.dialCode," ",e.name]})})),u=!!x;return i(p,{gap:"tight",children:[i("div",{className:"dndev-relative",children:[t(k,{htmlFor:a,disabled:b,required:w,children:V}),i("div",{style:{position:"relative",display:"flex",gap:"var(--gap-sm)"},children:[t(U,{trigger:t(F,{type:"button",variant:O.OUTLINE,disabled:b,style:{minWidth:"fit-content",padding:"0 var(--gap-md)",borderRight:"none",borderTopRightRadius:0,borderBottomRightRadius:0},"aria-label":`Country code: ${r.dialCode}`,children:i(p,{direction:"row",align:"center",gap:"tight",children:[z&&t(I,{code:r.flagCode,title:r.name}),t("span",{children:r.dialCode})]})}),items:A,contentWidth:"16rem"}),t(W,{id:a,type:"tel",inputMode:"tel",value:v,onChange:j,disabled:b,placeholder:"6 12 34 56 78","data-variant":u?"destructive":void 0,style:{flex:1,borderTopLeftRadius:0,borderBottomLeftRadius:0},"aria-describedby":u?`${a}-error`:g?`${a}-helper`:void 0,"aria-invalid":u})]})]}),u&&i(p,{id:`${a}-error`,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[t("span",{children:"\u26A0"}),x]}),g&&!u&&t("p",{id:`${a}-helper`,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:g})]})};var H=_;export{H as default};
@@ -1 +1 @@
1
- {"version":3,"file":"RadioFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/RadioFieldComponent.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,WAAW,EAGjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,wBAAwB;IACvC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAClE,8BAA8B;IAC9B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,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,QAAA,MAAM,mBAAmB,EAAE,aAAa,CAAC,wBAAwB,CAqDhE,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"RadioFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/RadioFieldComponent.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,WAAW,EAGjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,wBAAwB;IACvC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAClE,8BAA8B;IAC9B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,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,QAAA,MAAM,mBAAmB,EAAE,aAAa,CAAC,wBAAwB,CA4ChE,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- import{jsx as e,jsxs as n}from"react/jsx-runtime";import{RadioGroup as u,Label as v,Stack as f}from"@donotdev/components";const g=({label:o,value:r,onChange:a,options:s,error:i,helperText:t,required:l})=>{const d=c=>{a({target:{value:c}})};return n(f,{gap:"tight",children:[n(v,{style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500},children:[o,l&&e("span",{style:{color:"var(--destructive-foreground)",marginInlineStart:"var(--gap-sm)"},children:"*"})]}),e(u,{value:r,onValueChange:d,items:s}),t&&e("p",{style:{fontSize:"var(--font-size-xs)",color:i?"var(--destructive-foreground)":"var(--muted-foreground)"},children:t})]})};var y=g;export{y as default};
1
+ import{jsx as e,jsxs as c}from"react/jsx-runtime";import{RadioGroup as u,Label as f,Stack as h}from"@donotdev/components";const v=({label:o,value:n,onChange:r,options:s,error:a,helperText:t,required:i})=>{const d=l=>{r({target:{value:l}})};return c(h,{gap:"tight",children:[e(f,{required:i,style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500},children:o}),e(u,{value:n,onValueChange:d,items:s}),t&&e("p",{style:{fontSize:"var(--font-size-xs)",color:a?"var(--destructive-foreground)":"var(--muted-foreground)"},children:t})]})};var x=v;export{x as default};
@@ -1 +1 @@
1
- {"version":3,"file":"RangeFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/RangeFieldComponent.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,wBAAwB;IACvC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAClE,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,mBAAmB,EAAE,aAAa,CAAC,wBAAwB,CAoFhE,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"RangeFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/RangeFieldComponent.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,wBAAwB;IACvC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAClE,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,mBAAmB,EAAE,aAAa,CAAC,wBAAwB,CA2EhE,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- import{jsx as e,jsxs as o}from"react/jsx-runtime";import{Label as h,Slider as y,Stack as l}from"@donotdev/components";const S=({label:a,value:i=0,onChange:c,error:s,helperText:d,min:t=0,max:u=100,step:f=1,disabled:r,required:g,showValue:v=!0})=>{const m=n=>{const p={target:{value:n.toString()}};c(p)};return o(l,{gap:"tight",children:[o(l,{direction:"row",justify:"between",align:"center",children:[o(h,{style:{fontSize:"var(--font-size-sm)",fontWeight:500},children:[a,g&&e("span",{style:{color:"var(--destructive-foreground)",marginInlineStart:"var(--gap-sm)"},children:"*"})]}),v&&e("span",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:i})]}),e(y,{value:[i??t],onValueChange:([n])=>m(n??t),min:t,max:u,step:f,disabled:r,style:{borderColor:s?"var(--destructive)":void 0,opacity:r?"var(--opacity-muted)":void 0,cursor:r?"not-allowed":void 0},"aria-label":a}),d&&e("p",{style:{fontSize:"var(--font-size-xs)",color:s?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:d})]})};var C=S;export{C as default};
1
+ import{jsx as e,jsxs as d}from"react/jsx-runtime";import{Label as h,Slider as y,Stack as c}from"@donotdev/components";const x=({label:o,value:a=0,onChange:l,error:i,helperText:s,min:t=0,max:u=100,step:f=1,disabled:r,required:g,showValue:v=!0})=>{const m=n=>{const p={target:{value:n.toString()}};l(p)};return d(c,{gap:"tight",children:[d(c,{direction:"row",justify:"between",align:"center",children:[e(h,{required:g,style:{fontSize:"var(--font-size-sm)",fontWeight:500},children:o}),v&&e("span",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:a})]}),e(y,{value:[a??t],onValueChange:([n])=>m(n??t),min:t,max:u,step:f,disabled:r,style:{borderColor:i?"var(--destructive)":void 0,opacity:r?"var(--opacity-muted)":void 0,cursor:r?"not-allowed":void 0},"aria-label":o}),s&&e("p",{style:{fontSize:"var(--font-size-xs)",color:i?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:s})]})};var C=x;export{C as default};
@@ -18,15 +18,20 @@ export interface ReferenceFieldComponentProps {
18
18
  error?: boolean;
19
19
  /** Helper text */
20
20
  helperText?: string;
21
+ /** Whether the field is required */
22
+ required?: boolean;
23
+ /** Blur handler */
24
+ onBlur?: () => void;
21
25
  }
22
26
  /**
23
27
  * Reference field component for selecting related documents
24
- * Provides searchable dropdown with document selection
28
+ * Provides searchable dropdown with document selection.
29
+ * Input + Dropdown pattern: user types in input, dropdown appears below.
25
30
  *
26
31
  * @component
27
32
  * @param {ReferenceFieldComponentProps} props - Component props
28
33
  * @returns {JSX.Element} Reference selection field with search
29
34
  */
30
- declare const ReferenceFieldComponent: ({ label, value, onChange, collection, searchFields, displayField, error, helperText, }: ReferenceFieldComponentProps) => import("react/jsx-runtime").JSX.Element;
35
+ declare const ReferenceFieldComponent: ({ label, value, onChange, collection, searchFields, displayField, error, helperText, required, onBlur, }: ReferenceFieldComponentProps) => import("react/jsx-runtime").JSX.Element;
31
36
  export default ReferenceFieldComponent;
32
37
  //# sourceMappingURL=ReferenceFieldComponent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReferenceFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/ReferenceFieldComponent.tsx"],"names":[],"mappings":"AAuBA;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,QAAA,MAAM,uBAAuB,GAAI,wFAS9B,4BAA4B,4CA4H9B,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"ReferenceFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/ReferenceFieldComponent.tsx"],"names":[],"mappings":"AAiBA;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,uBAAuB,GAAI,0GAW9B,4BAA4B,4CA6H9B,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
@@ -1 +1 @@
1
- import{jsx as t,jsxs as l}from"react/jsx-runtime";import{useState as i,useEffect as z,useMemo as O}from"react";import{useCrud as _}from"../../../useCrud";import{Popover as m,Command as k,Button as I,Stack as L}from"@donotdev/components";import{useTranslation as M}from"@donotdev/core";import{Check as T,ChevronsUpDown as q}from"lucide-react";const A=({label:S,value:o,onChange:f,collection:p,searchFields:r=["name"],displayField:a="name",error:h,helperText:u})=>{const{t:c}=M(),[s,d]=i(!1),{query:g,get:v}=_(p),[y,b]=i([]),[B,x]=i(!1),[n,C]=i(null);z(()=>{o&&!n&&v(o).then(e=>{e&&C(e)})},[o,v,n]),z(()=>{if(!s)return;(async()=>{x(!0);try{const w=await g({limit:50});b(w)}catch{}finally{x(!1)}})()},[s,g,p]);const j=O(()=>y.map(e=>({label:e[a]||e.id,value:e.id,description:r[1]&&e[r[1]]?e[r[1]]:void 0,icon:t(T,{style:{width:"var(--size-icon-sm)",height:"var(--size-icon-sm)",opacity:o===e.id?1:0}}),onSelect:()=>{f(e.id),C(e),d(!1)}})),[y,a,r,o,f]);return l(L,{gap:"tight",children:[l(m,{open:s,onOpenChange:d,children:[t(m.Trigger,{asChild:!0,children:l(I,{variant:"outline",role:"combobox","aria-expanded":s,style:{width:"100%",justifyContent:"space-between",borderColor:h?"var(--destructive)":void 0},children:[t("span",{style:{flex:1,textAlign:"left"},children:n?n[a]||n.id:c("common.select_placeholder",{label:S})}),t(q,{style:{marginLeft:"var(--gap-sm)",width:"var(--size-icon-sm)",height:"var(--size-icon-sm)",opacity:.5,flexShrink:0}})]})}),t(m.Content,{style:{width:"var(--radix-popover-trigger-width)",padding:0},children:t(k,{placeholder:c("common.search_placeholder"),emptyMessage:c("common.no_results"),items:j,onClose:()=>d(!1)})})]}),u&&t("p",{style:{fontSize:"var(--font-size-xs)",color:h?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:u})]})};var H=A;export{H as default};
1
+ import{jsx as l,jsxs as I}from"react/jsx-runtime";import{useState as r,useEffect as S,useMemo as F,useId as N}from"react";import{useCrud as R}from"../../../useCrud";import{Combobox as w,Stack as j}from"@donotdev/components";import{useTranslation as D}from"@donotdev/core";const G=({label:s,value:t,onChange:O,collection:f,searchFields:u=["name"],displayField:m="name",error:z,helperText:i,required:_,onBlur:A})=>{const{t:p}=D("dndev"),h=N(),[g,$]=r(!1),{query:y,get:x}=R(f),[a,q]=r([]),[E,C]=r(!1),[b,v]=r(null);S(()=>{t&&!b&&x(t).then(e=>{e&&v(e)})},[t,x,b]),S(()=>{if(!g)return;(async()=>{C(!0);try{const o=await y({limit:50});q(o)}catch{}finally{C(!1)}})()},[g,y,f]);const L=F(()=>a.map(e=>{const o=e[m]||e.id,n=u.map(d=>e[d]).filter(Boolean).join(" ");return{value:e.id,label:o,description:n!==o?n:void 0}}),[a,m,u]),M=e=>{const o=Array.isArray(e)?e[0]||"":e;O(o);const n=a.find(d=>d.id===o);n&&v(n)},V=e=>{$(e),e||A?.()},c=!!z,k=`${h}-error`,B=`${h}-helper`;return I(j,{gap:"tight",children:[l(w,{label:s,value:t||"",onValueChange:M,onOpenChange:V,placeholder:p("common.select_placeholder",{label:s})||`Select ${s}`,emptyMessage:p("common.no_results")||"No results found",options:L,required:_,variant:c?"destructive":void 0,isLoading:E,clearable:!!t}),c&&I(j,{id:k,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[l("span",{children:"\u26A0"}),i]}),i&&!c&&l("p",{id:B,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:i})]})};var W=G;export{W as default};
@@ -0,0 +1,28 @@
1
+ import type { ChangeEvent, ComponentType } from 'react';
2
+ export interface SwitchFieldComponentProps {
3
+ /** Field label */
4
+ label: string;
5
+ /** Whether the toggle is checked */
6
+ checked?: boolean;
7
+ /** Change handler */
8
+ onChange?: (event: ChangeEvent<HTMLInputElement>) => void;
9
+ /** Label for unchecked state (e.g., "Manual") */
10
+ uncheckedLabel?: string;
11
+ /** Label for checked state (e.g., "Automatic") */
12
+ checkedLabel?: string;
13
+ /** Helper text */
14
+ helperText?: string;
15
+ }
16
+ /**
17
+ * SwitchFieldComponent renders a switch field for CRUD forms.
18
+ * Displays field label, delegates switch rendering to Switch component.
19
+ *
20
+ * @version 0.0.2
21
+ * @since 0.0.1
22
+ * @author AMBROISE PARK Consulting
23
+ * @param props - SwitchFieldComponentProps
24
+ * @returns JSX.Element
25
+ */
26
+ declare const SwitchFieldComponent: ComponentType<SwitchFieldComponentProps>;
27
+ export default SwitchFieldComponent;
28
+ //# sourceMappingURL=SwitchFieldComponent.d.ts.map
@@ -0,0 +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,CAyClE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1 @@
1
+ import{jsxs as e,jsx as n}from"react/jsx-runtime";import{Switch as m,Text as i,Stack as l}from"@donotdev/components";import{useTranslation as p}from"@donotdev/core";const f=({label:t,checked:c=!1,onChange:a,uncheckedLabel:d,checkedLabel:s,helperText:r})=>{const{t:g}=p("dndev"),o=h=>{a&&a({target:{checked:h}})};return e(l,{gap:"tight",children:[e(l,{direction:"row",align:"center",gap:"medium",style:{flexWrap:"wrap"},children:[e(i,{level:"body",align:"start",children:[t,":"]}),n(m,{checked:c,onCheckedChange:o,"aria-label":t,variant:"muted",uncheckedLabel:d,checkedLabel:s})]}),r&&n(i,{as:"p",variant:"muted",level:"small",children:r})]})};var v=f;export{v as default};
@@ -1 +1 @@
1
- {"version":3,"file":"TextAreaComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/TextAreaComponent.tsx"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,WAAW,EAKhB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,QAAQ,EAA6B,MAAM,sBAAsB,CAAC;AAE3E,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAClD,cAAc,CAAC,OAAO,QAAQ,CAAC,EAC/B,OAAO,GAAG,UAAU,CACrB;IACC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;IAC5D,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mCAAmC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,iBAAiB,EAAE,aAAa,CAAC,sBAAsB,CAiK5D,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"TextAreaComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/TextAreaComponent.tsx"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,WAAW,EAKhB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAEf,OAAO,EACL,QAAQ,EAKT,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAClD,cAAc,CAAC,OAAO,QAAQ,CAAC,EAC/B,OAAO,GAAG,UAAU,CACrB;IACC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;IAC5D,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mCAAmC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,iBAAiB,EAAE,aAAa,CAAC,sBAAsB,CA6I5D,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- "use client";import{jsx as o,jsxs as s}from"react/jsx-runtime";import{useState as A,useId as I,useRef as k,useEffect as B}from"react";import{Textarea as E,Label as _,Spinner as C,cn as p,Stack as m}from"@donotdev/components";const H=({label:y,value:a="",onChange:S,error:f,helperText:i,rows:x=3,loading:u=!1,maxLength:r,showCharCount:v=!1,autoResize:n=!1,required:$=!1,disabled:g=!1,className:b,...z})=>{const e=I(),[O,h]=A(!1),d=k(null),t=!!f,l=a.length,F=r&&l>r*.8,j=r&&l>r;B(()=>{if(n&&d.current){const c=d.current;c.style.height="auto",c.style.height=`${c.scrollHeight}px`}},[a,n]);const w=()=>h(!0),N=()=>h(!1);return s(m,{gap:"tight",children:[s(_,{htmlFor:e,style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500,color:t?"var(--destructive-foreground)":g?"var(--muted-foreground)":"var(--foreground)"},children:[y,$&&o("span",{style:{color:"var(--destructive-foreground)",marginInlineStart:"var(--gap-sm)"},children:"*"})]}),s("div",{className:"dndev-relative",children:[o(E,{ref:d,id:e,value:a,onChange:S,onFocus:w,onBlur:N,disabled:g||u,maxLength:r,rows:n?1:x,"aria-describedby":p(t&&`${e}-error`,i&&!t&&`${e}-helper`,v&&`${e}-count`),"aria-invalid":t,className:p("dndev-w-full",n&&"dndev-overflow-hidden",b),"data-variant":t?"destructive":void 0,style:{resize:"none"},...z}),u&&o("div",{className:"dndev-absolute",style:{right:"var(--gap-md)",top:"var(--gap-md)"},children:o(C,{"aria-label":"Loading"})})]}),v&&r&&s("div",{id:`${e}-count`,style:{fontSize:"var(--font-size-xs)",textAlign:"right",color:j?"var(--destructive-foreground)":F?"var(--warning)":"var(--muted-foreground)"},children:[l,"/",r]}),t&&s(m,{as:"p",id:`${e}-error`,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[o("span",{children:"\u26A0"}),f]}),i&&!t&&o("p",{id:`${e}-helper`,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:i})]})};var G=H;export{G as default};
1
+ "use client";import{jsx as s,jsxs as i}from"react/jsx-runtime";import{useState as A,useId as B,useRef as E,useEffect as I}from"react";import{Textarea as _,FloatingLabel as k,Spinner as q,cn as p,Stack as m}from"@donotdev/components";const C=({label:y,value:o="",onChange:x,error:u,helperText:a,rows:$=3,loading:d=!1,maxLength:r,showCharCount:v=!1,autoResize:n=!1,required:b=!1,disabled:h=!1,className:F,...S})=>{const e=B(),[H,g]=A(!1),l=E(null),t=!!u,c=o.length,j=r&&c>r*.8,w=r&&c>r;I(()=>{if(n&&l.current){const f=l.current;f.style.height="auto",f.style.height=`${f.scrollHeight}px`}},[o,n]);const N=()=>g(!0),z=()=>g(!1);return i(m,{gap:"tight",children:[i("div",{className:"dndev-relative",children:[s(k,{htmlFor:e,disabled:h||d,required:b,children:y}),s(_,{ref:l,id:e,value:o,onChange:x,onFocus:N,onBlur:z,disabled:h||d,maxLength:r,rows:n?1:$,"aria-describedby":p(t&&`${e}-error`,a&&!t&&`${e}-helper`,v&&`${e}-count`),"aria-invalid":t,className:p("dndev-w-full",n&&"dndev-overflow-hidden",F),"data-variant":t?"destructive":void 0,style:{resize:n?"none":void 0},...S}),d&&s("div",{className:"dndev-absolute",style:{right:"var(--gap-md)",top:"var(--gap-md)"},children:s(q,{"aria-label":"Loading"})})]}),v&&r&&i("div",{id:`${e}-count`,style:{fontSize:"var(--font-size-xs)",textAlign:"right",color:w?"var(--destructive-foreground)":j?"var(--warning)":"var(--muted-foreground)"},children:[c,"/",r]}),t&&i(m,{as:"p",id:`${e}-error`,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[s("span",{children:"\u26A0"}),u]}),a&&!t&&s("p",{id:`${e}-helper`,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:a})]})};var J=C;export{J as default};
@@ -1 +1 @@
1
- {"version":3,"file":"TextFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/TextFieldComponent.tsx"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,KAAK,EAA6B,MAAM,sBAAsB,CAAC;AAExE,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CACnD,cAAc,CAAC,OAAO,KAAK,CAAC,EAC5B,OAAO,GAAG,UAAU,CACrB;IACC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CACR,KAAK,EAAE,WAAW,CAAC,gBAAgB,GAAG,mBAAmB,CAAC,KACvD,IAAI,CAAC;IACV,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,QAAA,MAAM,kBAAkB,EAAE,aAAa,CAAC,uBAAuB,CA8F9D,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"TextFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/TextFieldComponent.tsx"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,KAAK,EAA6B,MAAM,sBAAsB,CAAC;AAExE,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CACnD,cAAc,CAAC,OAAO,KAAK,CAAC,EAC5B,OAAO,GAAG,UAAU,CACrB;IACC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CACR,KAAK,EAAE,WAAW,CAAC,gBAAgB,GAAG,mBAAmB,CAAC,KACvD,IAAI,CAAC;IACV,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,QAAA,MAAM,kBAAkB,EAAE,aAAa,CAAC,uBAAuB,CAkG9D,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- "use client";import{jsx as n,jsxs as s}from"react/jsx-runtime";import{useId as y}from"react";import{Input as S,cn as c,Stack as f}from"@donotdev/components";const j=({label:u,value:d="",onChange:v,error:a,helperText:t,type:p="text",loading:g=!1,maxLength:r,showCharCount:l=!1,required:x=!1,disabled:m=!1,className:z,...$})=>{const e=y(),i=!!a,o=d.length,b=r&&o>r*.8,h=r&&o>r;return s(f,{gap:"tight",children:[n(S,{id:e,type:p,value:d,onChange:v,label:u,disabled:m||g,maxLength:r,"aria-describedby":c(i&&`${e}-error`,t&&!i&&`${e}-helper`,l&&`${e}-count`),"aria-invalid":i,className:c("dndev-w-full",z),"data-variant":i?"destructive":void 0,...$}),l&&r&&s("div",{id:`${e}-count`,style:{fontSize:"var(--font-size-xs)",textAlign:"right",color:h?"var(--destructive-foreground)":b?"var(--warning)":"var(--muted-foreground)"},children:[o,"/",r]}),i&&s(f,{id:`${e}-error`,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[n("span",{children:"\u26A0"}),a]}),t&&!i&&n("p",{id:`${e}-helper`,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:t})]})};var k=j;export{k as default};
1
+ "use client";import{jsx as o,jsxs as s}from"react/jsx-runtime";import{useId as j}from"react";import{Input as x,cn as c,Stack as u}from"@donotdev/components";const _=({label:f,value:d="",onChange:v,error:a,helperText:t,type:p="text",loading:g=!1,maxLength:r,showCharCount:l=!1,required:h=!1,disabled:m=!1,className:z,...$})=>{const e=j(),i=!!a,n=d.length,b=r&&n>r*.8,y=r&&n>r,{children:w,...S}=$;return s(u,{gap:"tight",children:[o(x,{id:e,type:p,value:d,onChange:v,label:f,disabled:m||g,maxLength:r,required:h,"aria-describedby":c(i&&`${e}-error`,t&&!i&&`${e}-helper`,l&&`${e}-count`),"aria-invalid":i,className:c("dndev-w-full",z),"data-variant":i?"destructive":void 0,...S}),l&&r&&s("div",{id:`${e}-count`,style:{fontSize:"var(--font-size-xs)",textAlign:"right",color:y?"var(--destructive-foreground)":b?"var(--warning)":"var(--muted-foreground)"},children:[n,"/",r]}),i&&s(u,{id:`${e}-error`,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[o("span",{children:"\u26A0"}),a]}),t&&!i&&o("p",{id:`${e}-helper`,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:t})]})};var C=_;export{C as default};
@@ -12,6 +12,8 @@ export interface TimestampFieldComponentProps {
12
12
  helperText?: string;
13
13
  /** Mode for underlying date field (defaults to "datetime-local") */
14
14
  mode?: 'datetime-local' | 'date';
15
+ /** Whether the field is required */
16
+ required?: boolean;
15
17
  }
16
18
  declare const TimestampFieldComponent: ComponentType<TimestampFieldComponentProps>;
17
19
  export default TimestampFieldComponent;
@@ -1 +1 @@
1
- {"version":3,"file":"TimestampFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/TimestampFieldComponent.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,4BAA4B;IAC3C,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACpB,2DAA2D;IAC3D,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACtE,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC;CAClC;AAED,QAAA,MAAM,uBAAuB,EAAE,aAAa,CAAC,4BAA4B,CAqCxE,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"TimestampFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/TimestampFieldComponent.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,4BAA4B;IAC3C,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACpB,2DAA2D;IAC3D,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACtE,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC;IACjC,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,QAAA,MAAM,uBAAuB,EAAE,aAAa,CAAC,4BAA4B,CAuCxE,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
@@ -1 +1 @@
1
- import{jsx as m}from"react/jsx-runtime";import d from"./DateFieldComponent";const h=({label:o,value:e,onChange:t,error:a,helperText:r,mode:s="datetime-local"})=>{const l=e?new Date(e).toISOString():"";return m(d,{label:o,value:l,onChange:n=>{if(n){const c={target:{value:new Date(n).toISOString()}};t(c)}else t({target:{value:""}})},error:a,helperText:r,mode:s})};var v=h;export{v as default};
1
+ import{jsx as m}from"react/jsx-runtime";import h from"./DateFieldComponent";const p=({label:o,value:e,onChange:t,error:a,helperText:r,mode:s="datetime-local",required:l})=>{const i=e?new Date(e).toISOString():"";return m(h,{label:o,value:i,onChange:n=>{if(n){const d={target:{value:new Date(n).toISOString()}};t(d)}else t({target:{value:""}})},error:a,helperText:r,mode:s,required:l})};var f=p;export{f as default};
@@ -18,6 +18,8 @@ export { default as DateFieldComponent } from './DateFieldComponent';
18
18
  export type { DateFieldComponentProps } from './DateFieldComponent';
19
19
  export { default as CheckboxFieldComponent } from './CheckboxFieldComponent';
20
20
  export type { CheckboxFieldComponentProps } from './CheckboxFieldComponent';
21
+ export { default as ComboboxComponent } from './ComboboxComponent';
22
+ export type { ComboboxComponentProps } from './ComboboxComponent';
21
23
  export { default as DropdownComponent } from './DropdownComponent';
22
24
  export type { DropdownComponentProps } from './DropdownComponent';
23
25
  export { default as MultiDropdownComponent } from './MultiDropdownComponent';
@@ -28,12 +30,14 @@ export { default as ImageFieldComponent } from './ImageFieldComponent';
28
30
  export type { ImageFieldComponentProps } from './ImageFieldComponent';
29
31
  export { default as TextAreaComponent } from './TextAreaComponent';
30
32
  export type { TextAreaComponentProps } from './TextAreaComponent';
33
+ export { default as SwitchFieldComponent } from './SwitchFieldComponent';
34
+ export type { SwitchFieldComponentProps } from './SwitchFieldComponent';
31
35
  export { default as RadioFieldComponent } from './RadioFieldComponent';
32
36
  export type { RadioFieldComponentProps } from './RadioFieldComponent';
33
37
  export { default as RangeFieldComponent } from './RangeFieldComponent';
34
38
  export type { RangeFieldComponentProps } from './RangeFieldComponent';
35
39
  export { default as PhoneNumberComponent } from './PhoneNumberComponent';
36
- export type { PhoneNumberComponentProps, PhoneNumber, } from './PhoneNumberComponent';
40
+ export type { PhoneNumberComponentProps } from './PhoneNumberComponent';
37
41
  export { default as GeoPointFieldComponent } from './GeoPointFieldComponent';
38
42
  export type { GeoPointFieldComponentProps, GeoPoint, } from './GeoPointFieldComponent';
39
43
  export { default as MapFieldComponent } from './MapFieldComponent';
@@ -52,4 +56,6 @@ export { default as PasswordFieldComponent } from './PasswordFieldComponent';
52
56
  export type { PasswordFieldComponentProps } from './PasswordFieldComponent';
53
57
  export { default as AddressFieldComponent } from './AddressFieldComponent';
54
58
  export type { AddressFieldComponentProps } from './AddressFieldComponent';
59
+ export { default as CurrencyFieldComponent } from './CurrencyFieldComponent';
60
+ export type { CurrencyFieldComponentProps } from './CurrencyFieldComponent';
55
61
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{default as t}from"./AvatarFieldComponent";import{default as n}from"./BadgeFieldComponent";import{default as d}from"./TextFieldComponent";import{default as p}from"./NumberFieldComponent";import{default as l}from"./DateFieldComponent";import{default as s}from"./CheckboxFieldComponent";import{default as i}from"./DropdownComponent";import{default as F}from"./MultiDropdownComponent";import{default as b}from"./FileFieldComponent";import{default as w}from"./ImageFieldComponent";import{default as D}from"./TextAreaComponent";import{default as P}from"./RadioFieldComponent";import{default as c}from"./RangeFieldComponent";import{default as B}from"./PhoneNumberComponent";import{default as N}from"./GeoPointFieldComponent";import{default as v}from"./MapFieldComponent";import{default as H}from"./TimestampFieldComponent";import{default as q}from"./ReferenceFieldComponent";import{default as z}from"./MultiInputTextFieldComponent";import{default as J}from"./ButtonFieldComponent";import{default as L}from"./HiddenFieldComponent";import{default as Q}from"./PasswordFieldComponent";import{default as U}from"./AddressFieldComponent";export{U as AddressFieldComponent,t as AvatarFieldComponent,n as BadgeFieldComponent,J as ButtonFieldComponent,s as CheckboxFieldComponent,l as DateFieldComponent,i as DropdownComponent,b as FileFieldComponent,N as GeoPointFieldComponent,L as HiddenFieldComponent,w as ImageFieldComponent,v as MapFieldComponent,F as MultiDropdownComponent,z as MultiInputTextFieldComponent,p as NumberFieldComponent,Q as PasswordFieldComponent,B as PhoneNumberComponent,P as RadioFieldComponent,c as RangeFieldComponent,q as ReferenceFieldComponent,D as TextAreaComponent,d as TextFieldComponent,H as TimestampFieldComponent};
1
+ import{default as t}from"./AvatarFieldComponent";import{default as r}from"./BadgeFieldComponent";import{default as m}from"./TextFieldComponent";import{default as d}from"./NumberFieldComponent";import{default as l}from"./DateFieldComponent";import{default as s}from"./CheckboxFieldComponent";import{default as i}from"./ComboboxComponent";import{default as F}from"./DropdownComponent";import{default as c}from"./MultiDropdownComponent";import{default as T}from"./FileFieldComponent";import{default as h}from"./ImageFieldComponent";import{default as D}from"./TextAreaComponent";import{default as P}from"./SwitchFieldComponent";import{default as B}from"./RadioFieldComponent";import{default as N}from"./RangeFieldComponent";import{default as v}from"./PhoneNumberComponent";import{default as G}from"./GeoPointFieldComponent";import{default as S}from"./MapFieldComponent";import{default as q}from"./TimestampFieldComponent";import{default as E}from"./ReferenceFieldComponent";import{default as K}from"./MultiInputTextFieldComponent";import{default as O}from"./ButtonFieldComponent";import{default as U}from"./HiddenFieldComponent";import{default as W}from"./PasswordFieldComponent";import{default as Y}from"./AddressFieldComponent";import{default as _}from"./CurrencyFieldComponent";export{Y as AddressFieldComponent,t as AvatarFieldComponent,r as BadgeFieldComponent,O as ButtonFieldComponent,s as CheckboxFieldComponent,i as ComboboxComponent,_ as CurrencyFieldComponent,l as DateFieldComponent,F as DropdownComponent,T as FileFieldComponent,G as GeoPointFieldComponent,U as HiddenFieldComponent,h as ImageFieldComponent,S as MapFieldComponent,c as MultiDropdownComponent,K as MultiInputTextFieldComponent,d as NumberFieldComponent,W as PasswordFieldComponent,v as PhoneNumberComponent,B as RadioFieldComponent,N as RangeFieldComponent,E as ReferenceFieldComponent,P as SwitchFieldComponent,D as TextAreaComponent,m as TextFieldComponent,q as TimestampFieldComponent};
@@ -0,0 +1,25 @@
1
+ import { type ImageMetadata } from '../../../utils/imageUtils';
2
+ export interface ImageViewerDialogProps {
3
+ /** Array of images */
4
+ images: ImageMetadata[];
5
+ /** Selected image index */
6
+ selectedIndex: number;
7
+ /** Open state */
8
+ open: boolean;
9
+ /** Close callback */
10
+ onClose: () => void;
11
+ /** Update callback */
12
+ onUpdate: (index: number, updates: Partial<ImageMetadata>) => void;
13
+ /** Delete callback */
14
+ onDelete: (index: number) => void;
15
+ /** Navigate callback */
16
+ onNavigate: (index: number) => void;
17
+ /** Multiple mode */
18
+ multiple?: boolean;
19
+ }
20
+ /**
21
+ * ImageViewerDialog - Full-size image preview with edit controls (Crop, Rotate, Metadata)
22
+ */
23
+ export declare function ImageViewerDialog({ images, selectedIndex, open, onClose, onUpdate, onDelete, onNavigate, multiple, }: ImageViewerDialogProps): import("react/jsx-runtime").JSX.Element | null;
24
+ export default ImageViewerDialog;
25
+ //# sourceMappingURL=ImageViewerDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageViewerDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/form/internal/ImageViewerDialog.tsx"],"names":[],"mappings":"AAuCA,OAAO,EAAsC,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAEnG,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;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,aAAa,EACb,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAgB,GACjB,EAAE,sBAAsB,kDAoRxB;AAED,eAAe,iBAAiB,CAAC"}