@donotdev/crud 0.0.3 → 0.0.5

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 (159) 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 +5 -0
  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/adapters/FunctionsAdapter.js +1 -1
  13. package/dist/adapters/index.js +1 -1
  14. package/dist/builtinFieldTypes.d.ts +5 -0
  15. package/dist/builtinFieldTypes.d.ts.map +1 -0
  16. package/dist/builtinFieldTypes.js +1 -0
  17. package/dist/components/ControlledFields.d.ts +42 -24
  18. package/dist/components/ControlledFields.d.ts.map +1 -1
  19. package/dist/components/ControlledFields.js +1 -1
  20. package/dist/components/CrudButton.js +1 -1
  21. package/dist/components/DisplayFieldRenderer.d.ts +36 -0
  22. package/dist/components/DisplayFieldRenderer.d.ts.map +1 -0
  23. package/dist/components/DisplayFieldRenderer.js +1 -0
  24. package/dist/components/EntityFormRenderer.d.ts +36 -8
  25. package/dist/components/EntityFormRenderer.d.ts.map +1 -1
  26. package/dist/components/EntityFormRenderer.js +5 -1
  27. package/dist/components/FormFieldRenderer.d.ts +3 -16
  28. package/dist/components/FormFieldRenderer.d.ts.map +1 -1
  29. package/dist/components/FormFieldRenderer.js +1 -1
  30. package/dist/components/FormLayout.js +1 -1
  31. package/dist/components/form/fields/AddressFieldComponent.d.ts +3 -1
  32. package/dist/components/form/fields/AddressFieldComponent.d.ts.map +1 -1
  33. package/dist/components/form/fields/AddressFieldComponent.js +1 -1
  34. package/dist/components/form/fields/AvatarFieldComponent.js +1 -1
  35. package/dist/components/form/fields/BadgeFieldComponent.js +1 -1
  36. package/dist/components/form/fields/ButtonFieldComponent.js +1 -1
  37. package/dist/components/form/fields/CheckboxFieldComponent.d.ts +2 -0
  38. package/dist/components/form/fields/CheckboxFieldComponent.d.ts.map +1 -1
  39. package/dist/components/form/fields/CheckboxFieldComponent.js +1 -1
  40. package/dist/components/form/fields/ComboboxComponent.d.ts +43 -0
  41. package/dist/components/form/fields/ComboboxComponent.d.ts.map +1 -0
  42. package/dist/components/form/fields/ComboboxComponent.js +1 -0
  43. package/dist/components/form/fields/CurrencyFieldComponent.d.ts +41 -0
  44. package/dist/components/form/fields/CurrencyFieldComponent.d.ts.map +1 -0
  45. package/dist/components/form/fields/CurrencyFieldComponent.js +1 -0
  46. package/dist/components/form/fields/DateFieldComponent.d.ts +2 -0
  47. package/dist/components/form/fields/DateFieldComponent.d.ts.map +1 -1
  48. package/dist/components/form/fields/DateFieldComponent.js +1 -1
  49. package/dist/components/form/fields/DropdownComponent.d.ts.map +1 -1
  50. package/dist/components/form/fields/DropdownComponent.js +1 -1
  51. package/dist/components/form/fields/FileFieldComponent.d.ts +2 -0
  52. package/dist/components/form/fields/FileFieldComponent.d.ts.map +1 -1
  53. package/dist/components/form/fields/FileFieldComponent.js +1 -1
  54. package/dist/components/form/fields/GeoPointFieldComponent.d.ts +2 -0
  55. package/dist/components/form/fields/GeoPointFieldComponent.d.ts.map +1 -1
  56. package/dist/components/form/fields/GeoPointFieldComponent.js +1 -1
  57. package/dist/components/form/fields/HiddenFieldComponent.js +1 -1
  58. package/dist/components/form/fields/ImageFieldComponent.d.ts +32 -17
  59. package/dist/components/form/fields/ImageFieldComponent.d.ts.map +1 -1
  60. package/dist/components/form/fields/ImageFieldComponent.js +1 -1
  61. package/dist/components/form/fields/MapFieldComponent.d.ts +2 -0
  62. package/dist/components/form/fields/MapFieldComponent.d.ts.map +1 -1
  63. package/dist/components/form/fields/MapFieldComponent.js +1 -1
  64. package/dist/components/form/fields/MultiDropdownComponent.d.ts +2 -2
  65. package/dist/components/form/fields/MultiDropdownComponent.d.ts.map +1 -1
  66. package/dist/components/form/fields/MultiDropdownComponent.js +1 -1
  67. package/dist/components/form/fields/MultiInputTextFieldComponent.d.ts +2 -0
  68. package/dist/components/form/fields/MultiInputTextFieldComponent.d.ts.map +1 -1
  69. package/dist/components/form/fields/MultiInputTextFieldComponent.js +1 -1
  70. package/dist/components/form/fields/NumberFieldComponent.d.ts.map +1 -1
  71. package/dist/components/form/fields/NumberFieldComponent.js +1 -1
  72. package/dist/components/form/fields/PasswordFieldComponent.d.ts.map +1 -1
  73. package/dist/components/form/fields/PasswordFieldComponent.js +1 -1
  74. package/dist/components/form/fields/PhoneNumberComponent.d.ts +31 -17
  75. package/dist/components/form/fields/PhoneNumberComponent.d.ts.map +1 -1
  76. package/dist/components/form/fields/PhoneNumberComponent.js +1 -1
  77. package/dist/components/form/fields/RadioFieldComponent.d.ts.map +1 -1
  78. package/dist/components/form/fields/RadioFieldComponent.js +1 -1
  79. package/dist/components/form/fields/RangeFieldComponent.d.ts.map +1 -1
  80. package/dist/components/form/fields/RangeFieldComponent.js +1 -1
  81. package/dist/components/form/fields/ReferenceFieldComponent.d.ts +7 -2
  82. package/dist/components/form/fields/ReferenceFieldComponent.d.ts.map +1 -1
  83. package/dist/components/form/fields/ReferenceFieldComponent.js +1 -1
  84. package/dist/components/form/fields/SwitchFieldComponent.d.ts +28 -0
  85. package/dist/components/form/fields/SwitchFieldComponent.d.ts.map +1 -0
  86. package/dist/components/form/fields/SwitchFieldComponent.js +1 -0
  87. package/dist/components/form/fields/TextAreaComponent.d.ts.map +1 -1
  88. package/dist/components/form/fields/TextAreaComponent.js +1 -1
  89. package/dist/components/form/fields/TextFieldComponent.d.ts.map +1 -1
  90. package/dist/components/form/fields/TextFieldComponent.js +1 -1
  91. package/dist/components/form/fields/TimestampFieldComponent.d.ts +2 -0
  92. package/dist/components/form/fields/TimestampFieldComponent.d.ts.map +1 -1
  93. package/dist/components/form/fields/TimestampFieldComponent.js +1 -1
  94. package/dist/components/form/fields/index.d.ts +7 -1
  95. package/dist/components/form/fields/index.d.ts.map +1 -1
  96. package/dist/components/form/fields/index.js +1 -1
  97. package/dist/components/form/internal/ImageViewerDialog.d.ts +25 -0
  98. package/dist/components/form/internal/ImageViewerDialog.d.ts.map +1 -0
  99. package/dist/components/form/internal/ImageViewerDialog.js +1 -0
  100. package/dist/components/index.d.ts +2 -0
  101. package/dist/components/index.d.ts.map +1 -1
  102. package/dist/components/index.js +1 -1
  103. package/dist/context/FormUploadContext.d.ts +36 -0
  104. package/dist/context/FormUploadContext.d.ts.map +1 -0
  105. package/dist/context/FormUploadContext.js +1 -0
  106. package/dist/context/index.d.ts +2 -0
  107. package/dist/context/index.d.ts.map +1 -0
  108. package/dist/context/index.js +1 -0
  109. package/dist/forms/hooks/index.d.ts +11 -0
  110. package/dist/forms/hooks/index.d.ts.map +1 -0
  111. package/dist/forms/hooks/index.js +1 -0
  112. package/dist/forms/hooks/useEntityField.d.ts +67 -0
  113. package/dist/forms/hooks/useEntityField.d.ts.map +1 -0
  114. package/dist/forms/hooks/useEntityField.js +1 -0
  115. package/dist/forms/hooks/useEntityForm.d.ts +89 -0
  116. package/dist/forms/hooks/useEntityForm.d.ts.map +1 -0
  117. package/dist/forms/hooks/useEntityForm.js +1 -0
  118. package/dist/forms/index.d.ts +37 -0
  119. package/dist/forms/index.d.ts.map +1 -0
  120. package/dist/forms/index.js +1 -0
  121. package/dist/forms/types.d.ts +185 -0
  122. package/dist/forms/types.d.ts.map +1 -0
  123. package/dist/forms/types.js +0 -0
  124. package/dist/forms/utils/createEntitySchema.d.ts +53 -0
  125. package/dist/forms/utils/createEntitySchema.d.ts.map +1 -0
  126. package/dist/forms/utils/createEntitySchema.js +1 -0
  127. package/dist/forms/utils/getFieldsForOperation.d.ts +87 -0
  128. package/dist/forms/utils/getFieldsForOperation.d.ts.map +1 -0
  129. package/dist/forms/utils/getFieldsForOperation.js +1 -0
  130. package/dist/forms/utils/index.d.ts +14 -0
  131. package/dist/forms/utils/index.d.ts.map +1 -0
  132. package/dist/forms/utils/index.js +1 -0
  133. package/dist/forms/utils/isFieldEditable.d.ts +43 -0
  134. package/dist/forms/utils/isFieldEditable.d.ts.map +1 -0
  135. package/dist/forms/utils/isFieldEditable.js +1 -0
  136. package/dist/forms/utils/normalizeToFieldConfig.d.ts +47 -0
  137. package/dist/forms/utils/normalizeToFieldConfig.d.ts.map +1 -0
  138. package/dist/forms/utils/normalizeToFieldConfig.js +1 -0
  139. package/dist/forms/utils/validateEntity.d.ts +77 -0
  140. package/dist/forms/utils/validateEntity.d.ts.map +1 -0
  141. package/dist/forms/utils/validateEntity.js +1 -0
  142. package/dist/index.d.ts +4 -1
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js +1 -1
  145. package/dist/tsconfig.tsbuildinfo +1 -1
  146. package/dist/useCrud.d.ts +67 -15
  147. package/dist/useCrud.d.ts.map +1 -1
  148. package/dist/useCrud.js +1 -1
  149. package/dist/utils/collections.js +1 -1
  150. package/dist/utils/imageProcessing.d.ts +49 -0
  151. package/dist/utils/imageProcessing.d.ts.map +1 -0
  152. package/dist/utils/imageProcessing.js +1 -0
  153. package/dist/utils/imageStorage.d.ts +35 -0
  154. package/dist/utils/imageStorage.d.ts.map +1 -0
  155. package/dist/utils/imageStorage.js +1 -0
  156. package/dist/utils/imageUtils.d.ts +86 -0
  157. package/dist/utils/imageUtils.d.ts.map +1 -0
  158. package/dist/utils/imageUtils.js +1 -0
  159. package/package.json +10 -7
@@ -1,27 +1,42 @@
1
- import { type ChangeEvent, type ComponentType } from 'react';
1
+ import { type ComponentType } from 'react';
2
+ import type { Picture } from '@donotdev/types';
3
+ import { type ImageMetadata } from '../../../utils/imageUtils';
2
4
  export interface ImageFieldComponentProps {
5
+ /** Field name (for upload registration) */
6
+ name?: string;
3
7
  /** Field label */
4
8
  label: string;
5
- /** Current image value */
6
- value?: File | null;
7
- /** Change handler - accepts both event and direct value */
8
- onChange: (file: File | null | ChangeEvent<HTMLInputElement>) => void;
9
+ /** Current value - Picture for single, Picture[] for multiple */
10
+ value?: Picture | Picture[] | null;
11
+ /** Change handler */
12
+ onChange: (value: Picture | Picture[] | null) => void;
9
13
  /** Error state */
10
14
  error?: boolean;
11
15
  /** Helper text */
12
16
  helperText?: string;
13
- /** Maximum file size in bytes */
14
- maxSize?: number;
15
- /** Whether multiple images are allowed */
17
+ /** Multiple images mode */
16
18
  multiple?: boolean;
19
+ /** Maximum number of images (multiple mode only) */
20
+ maxFiles?: number;
21
+ /** Maximum file size in bytes before processing (default: 10MB) */
22
+ maxSize?: number;
23
+ /** Firebase Storage path (default: 'uploads/images') */
24
+ storagePath?: string;
25
+ /** Entity ID for hash deduplication scope (same entity only) */
26
+ entityId?: string;
27
+ /** Whether the field is required */
28
+ required?: boolean;
29
+ /** Translation function */
30
+ t?: (key: string, options?: Record<string, any>) => string;
31
+ }
32
+ export interface ImageFieldComponentRef {
33
+ /** Trigger upload of all pending images */
34
+ upload: () => Promise<void>;
35
+ /** Get current images metadata */
36
+ getImages: () => ImageMetadata[];
17
37
  }
18
- /**
19
- * ImageFieldComponent renders an image upload field with preview
20
- *
21
- * @version 0.0.1
22
- * @since 0.0.1
23
- * @author AMBROISE PARK Consulting
24
- */
25
- declare const ImageFieldComponent: ComponentType<ImageFieldComponentProps>;
26
- export default ImageFieldComponent;
38
+ declare const _default: ComponentType<ImageFieldComponentProps & {
39
+ ref?: React.Ref<ImageFieldComponentRef>;
40
+ }>;
41
+ export default _default;
27
42
  //# sourceMappingURL=ImageFieldComponent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImageFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/ImageFieldComponent.tsx"],"names":[],"mappings":"AAaA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAWf,MAAM,WAAW,wBAAwB;IACvC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,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,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,QAAA,MAAM,mBAAmB,EAAE,aAAa,CAAC,wBAAwB,CAgKhE,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"ImageFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/ImageFieldComponent.tsx"],"names":[],"mappings":"AAwBA,OAAO,EAQL,KAAK,aAAa,EAGnB,MAAM,OAAO,CAAC;AAkBf,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAKL,KAAK,aAAa,EAInB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,wBAAwB;IACvC,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;IACnC,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2BAA2B;IAC3B,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC;CAC5D;AAED,MAAM,WAAW,sBAAsB;IACrC,2CAA2C;IAC3C,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,kCAAkC;IAClC,SAAS,EAAE,MAAM,aAAa,EAAE,CAAC;CAClC;wBA+8BqC,aAAa,CACjD,wBAAwB,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;CAAE,CACvE;AAFD,wBAEE"}
@@ -1 +1 @@
1
- "use client";import{jsx as a,jsxs as n}from"react/jsx-runtime";import{Image as z,X as x}from"lucide-react";import{useCallback as m,useState as p}from"react";import{Button as N,BUTTON_VARIANT as k,Input as D,Label as S,Stack as g}from"@donotdev/components";const T=({label:f,onChange:l,error:d,helperText:i,maxSize:s,multiple:h=!1})=>{const[v,o]=p(!1),[u,c]=p(null),t=m(e=>{if(!e){l({target:{value:"",files:null}}),c(null);return}if(!e.type.startsWith("image/")||s&&e.size>s)return;const r=new FileReader;r.onloadend=()=>{c(r.result)},r.readAsDataURL(e);const y={target:{value:e.name,files:[e]}};l(y)},[s,l]),b=m(e=>{e.preventDefault(),o(!1);const r=e.dataTransfer?.files[0]||null;t(r)},[t]);return n(g,{gap:"tight",children:[a(S,{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:v?"var(--primary)":d?"var(--destructive)":"var(--border)",borderRadius:"var(--radius-lg)",padding:"var(--gap-lg)",backgroundColor:v?"color-mix(in oklab, var(--primary) 5%, transparent)":void 0,transition:"border-color 0.2s, background-color 0.2s"},onDragOver:e=>{e.preventDefault(),o(!0)},onDragLeave:()=>o(!1),onDrop:b,children:[a(D,{type:"file",accept:"image/*",multiple:h,className:"dndev-absolute dndev-inset-0 dndev-w-full dndev-h-full dndev-pointer-events-auto",style:{opacity:0,cursor:"pointer"},onChange:e=>t(e.target.files?.[0]??null)}),u?n("div",{className:"dndev-relative dndev-aspect-video",children:[a("img",{src:u,alt:"Preview",className:"dndev-mx-auto dndev-h-full dndev-object-contain",style:{borderRadius:"var(--radius-lg)"}}),a(N,{variant:k.GHOST,onClick:()=>t(null),className:"dndev-absolute dndev-size-touch",style:{padding:0,top:"var(--gap-md)",insetInlineEnd:"var(--gap-md)"},children:a(x,{className:"dndev-size-md"})})]}):n(g,{align:"center",justify:"center",gap:"medium",children:[a(z,{className:"dndev-size-lg",style:{color:"var(--muted-foreground)"}}),a("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:"Drag & drop or click to upload"})]})]}),i&&a("p",{style:{fontSize:"var(--font-size-xs)",color:d?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:i})]})};var C=T;export{C 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 a,jsxs as o}from"react/jsx-runtime";import{Label as c,Input as p,Stack as u}from"@donotdev/components";import{useTranslation as f}from"@donotdev/core";const m=({label:n,value:s={},onChange:r,error:e,helperText:t})=>{const{t:d}=f("dndev");return o(u,{gap:"tight",children:[a(c,{style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500},children:n}),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:[a("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)",marginBottom:"var(--gap-md)"},children:"Map component placeholder"}),a(p,{type:"text",className:"dndev-w-full",placeholder:d("form.enterLocationData","Enter location data (JSON)"),value:JSON.stringify(s),onChange:l=>{try{const i=JSON.parse(l.target.value),v={target:{value:JSON.stringify(i)}};r(v)}catch{r({target:{value:"{}"}})}}})]}),t&&a("p",{style:{fontSize:"var(--font-size-xs)",color:e?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:t})]})};var g=m;export{g 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 t,jsxs as l}from"react/jsx-runtime";import{X as S}from"lucide-react";import{Select as N,Badge as y,BADGE_VARIANT as T,Button as b,BUTTON_VARIANT as A,Label as B,Stack as m}from"@donotdev/components";import{useTranslation as x}from"@donotdev/core";const z=({label:g,value:r=[],options:i,error:p,helperText:c,onChange:d,onBlur:C,required:u,className:v,...k})=>{const{t:o}=x("dndev"),f=e=>{const a=r.includes(e)?r.filter(s=>s!==e):[...r,e],n={target:{value:JSON.stringify(a)}};d(n)},h=e=>{const a=r.filter(s=>s!==e),n={target:{value:JSON.stringify(a)}};d(n)};return l(m,{gap:"tight",className:v,children:[l(B,{style:{fontSize:"var(--font-size-sm)",fontWeight:500},children:[o(g),u&&t("span",{style:{color:"var(--destructive-foreground)",marginInlineStart:"var(--gap-sm)"},children:"*"})]}),r.length>0&&t(m,{direction:"row",wrap:"wrap",gap:"medium",style:{marginTop:"var(--gap-md)",marginBottom:"var(--gap-md)"},children:r.map((e,a)=>{const n=i.find(s=>String(s.value)===e)?.label||e;return l(y,{variant:T.SECONDARY,className:"dndev-gap-sm",children:[o(n),t(b,{type:"button",variant:A.GHOST,style:{padding:0,height:"auto"},onClick:()=>h(e),children:t(S,{className:"dndev-size-md"})})]},a)})}),t(N,{onValueChange:f,placeholder:o("actions.select","Select options..."),options:i.map(e=>{const a=String(e.value),n=r.includes(a);return{value:a,label:o(e.label),content:l("span",{style:{backgroundColor:n?"var(--accent)":void 0},children:[o(e.label),n&&" \u2713"]})}})}),c&&t("p",{style:{fontSize:"var(--font-size-xs)",color:p?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:c})]})};var O=z;export{O 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 o}from"react/jsx-runtime";import{useState as f}from"react";import{Input as h,Button as y,Label as b,Stack as d}from"@donotdev/components";import{useTranslation as x}from"@donotdev/core";const S=({label:c,value:s=[],onChange:l,className:u})=>{const{t:i}=x("dndev"),[n,m]=f(""),g=()=>{if(n.trim()){const e=[...s,n.trim()],a={target:{value:JSON.stringify(e)}};l(a),m("")}},p=e=>{const a=s.filter((w,v)=>v!==e),t={target:{value:JSON.stringify(a)}};l(t)};return o(d,{gap:"medium",className:u,children:[r("div",{children:r(b,{style:{fontSize:"var(--font-size-sm)",fontWeight:500},children:c})}),o(d,{direction:"row",align:"center",gap:"medium",children:[r(h,{type:"text",value:n,onChange:e=>m(e.target.value),className:"dndev-flex-1",placeholder:i("form.typeAndPressAdd","Type and press Add...")}),r(y,{type:"button",onClick:g,disabled:!n.trim(),children:i("form.add","Add")})]}),r(d,{direction:"row",wrap:"wrap",gap:"medium",children:s.map((e,a)=>o("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:()=>p(a),style:{color:"var(--muted-foreground)",marginInlineStart:"var(--gap-sm)"},onMouseEnter:t=>{t.currentTarget.style.color="var(--foreground)"},onMouseLeave:t=>{t.currentTarget.style.color="var(--muted-foreground)"},"aria-label":`${i("form.remove","Remove")} ${e}`,children:"\xD7"})]},a))})]})};var N=S;export{N 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 r,jsxs as d}from"react/jsx-runtime";import{Input as h,Label as y,cn as x,Stack as b}from"@donotdev/components";const S=({label:v,value:t,onChange:o,error:s,helperText:i,min:c,max:u,step:m,disabled:e,required:n,className:p,...g})=>{const f=a=>{const l=parseFloat(a.target.value);isNaN(l)?o(a):o({...a,target:{...a.target,value:l.toString()}})};return d(b,{gap:"tight",children:[d(y,{style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500},children:[v,n&&r("span",{style:{color:"var(--destructive-foreground)",marginInlineStart:"var(--gap-sm)"},children:"*"})]}),r(h,{type:"number",value:t!==void 0?t.toString():"",onChange:f,min:c,max:u,step:m,disabled:e,required:n,className:x("dndev-w-full",p),"data-variant":s?"destructive":void 0,style:{opacity:e?"var(--opacity-muted)":void 0,cursor:e?"not-allowed":void 0},...g}),i&&r("p",{style:{fontSize:"var(--font-size-xs)",color:s?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:i})]})};var z=S;export{z 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 e,jsxs as d}from"react/jsx-runtime";import{useId as i}from"react";import{PasswordInput as u,Stack as m}from"@donotdev/components";const c=({label:a,value:s,onChange:o,error:t,helperText:r,...l})=>{const n=i();return d(m,{gap:"tight",children:[e(u,{id:n,value:s??"",onChange:o,label:a,className:"dndev-w-full",...l}),r&&e("p",{style:{fontSize:"var(--font-size-xs)",color:t?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:r})]})};var p=c;export{p 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 p}from"react/jsx-runtime";import{Plus as _,X as x}from"lucide-react";import{useMemo as A}from"react";import{Button as v,BUTTON_VARIANT as d,Stack as h}from"@donotdev/components";import{useTranslation as N}from"@donotdev/core";import g from"./TextFieldComponent";const P=({phoneNumbers:n,onPhoneNumberChange:t,error:s,helperText:m,userType:b})=>{const{t:o}=N("dndev"),c=A(()=>b==="tenant"?"+82":"+33",[b]);n.length===0&&t([{label:"",value:c}]);const f=()=>{t([...n,{label:"",value:"+33"}])},T=a=>{const e=[...n];e.splice(a,1),t(e)},y=(a,e)=>{try{const l=a.target.value,r=[...n],u=r[e]||{label:"",value:""};r[e]={label:u.label,value:l},t(r)}catch{}},C=(a,e)=>{try{const l=a.target.value,r=[...n],u=r[e]||{label:"",value:""};r[e]={label:l,value:u.value},t(r)}catch{}};return p(h,{gap:"medium",children:[p(h,{direction:"row",align:"center",gap:"medium",children:[i("h6",{style:{fontSize:"var(--font-size-lg)",fontWeight:600},children:o("phone_numbers.title")}),i(v,{type:"button",onClick:f,variant:d.PRIMARY,"aria-label":o("phone_numbers.add"),icon:_})]}),n.map((a,e)=>p(h,{direction:"row",align:"center",gap:"medium",children:[i(g,{label:o("phone_numbers.value"),value:a.value,onChange:l=>y(l,e),placeholder:c,error:s?m:void 0,helperText:s?void 0:m}),i(g,{label:o("phone_numbers.label"),value:a.label,onChange:l=>C(l,e),error:s?m:void 0,helperText:s?void 0:m}),i(v,{type:"button",onClick:()=>T(e),variant:d.DESTRUCTIVE,"aria-label":o("phone_numbers.remove"),icon:x})]},e))]})};var R=P;export{R 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 a}from"react/jsx-runtime";import{RadioGroup as v,Label as c,Stack as f}from"@donotdev/components";const g=({label:o,value:t,onChange:n,options:s,error:i,helperText:r,required:l})=>{const d=u=>{n({target:{value:u}})};return a(f,{gap:"tight",children:[a(c,{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(v,{value:t,onValueChange:d,items:s}),r&&e("p",{style:{fontSize:"var(--font-size-xs)",color:i?"var(--destructive-foreground)":"var(--muted-foreground)"},children:r})]})};var p=g;export{p 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 t}from"react/jsx-runtime";import{Label as h,Slider as y,Stack as d}from"@donotdev/components";const S=({label:n,value:i=0,onChange:c,error:s,helperText:l,min:r=0,max:v=100,step:u=1,disabled:o,required:m,showValue:g=!0})=>{const p=a=>{const f={target:{value:a.toString()}};c(f)};return t(d,{gap:"tight",children:[t(d,{direction:"row",justify:"between",align:"center",children:[t(h,{style:{fontSize:"var(--font-size-sm)",fontWeight:500},children:[n,m&&e("span",{style:{color:"var(--destructive-foreground)",marginInlineStart:"var(--gap-sm)"},children:"*"})]}),g&&e("span",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:i})]}),e(y,{value:[i??r],onValueChange:([a])=>p(a??r),min:r,max:v,step:u,disabled:o,style:{borderColor:s?"var(--destructive)":void 0,opacity:o?"var(--opacity-muted)":void 0,cursor:o?"not-allowed":void 0},"aria-label":n}),l&&e("p",{style:{fontSize:"var(--font-size-xs)",color:s?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:l})]})};var b=S;export{b 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,4CAyH9B,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 d}from"react/jsx-runtime";import{useState as s,useEffect as w,useMemo as T}from"react";import{useCrud as j}from"../../../useCrud";import{Popover as m,Command as k,Button as _,Stack as M}from"@donotdev/components";import{useTranslation as q}from"@donotdev/core";import{Check as A,ChevronsUpDown as B}from"lucide-react";const F=({label:b,value:r,onChange:p,collection:h,searchFields:i=["name"],displayField:n="name",error:v,helperText:g})=>{const{t:l}=q(),[a,c]=s(!1),{query:u,get:f}=j(h),[y,z]=s([]),[O,x]=s(!1),[o,C]=s(null);w(()=>{r&&!o&&f(r).then(e=>{e&&C(e)})},[r,f,o]),w(()=>{a&&(async()=>{x(!0);try{const e=await u({limit:50});z(e)}catch{}finally{x(!1)}})()},[a,u,h]);const S=T(()=>y.map(e=>({label:e[n]||e.id,value:e.id,description:i[1]&&e[i[1]]?e[i[1]]:void 0,icon:t(A,{style:{width:"var(--size-icon-sm)",height:"var(--size-icon-sm)",opacity:r===e.id?1:0}}),onSelect:()=>{p(e.id),C(e),c(!1)}})),[y,n,i,r,p]);return d(M,{gap:"tight",children:[d(m,{open:a,onOpenChange:c,children:[t(m.Trigger,{asChild:!0,children:d(_,{variant:"outline",role:"combobox","aria-expanded":a,style:{width:"100%",justifyContent:"space-between",borderColor:v?"var(--destructive)":void 0},children:[t("span",{style:{flex:1,textAlign:"left"},children:o?o[n]||o.id:l("common.select_placeholder",{label:b})}),t(B,{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:l("common.search_placeholder"),emptyMessage:l("common.no_results"),items:S,onClose:()=>c(!1)})})]}),g&&t("p",{style:{fontSize:"var(--font-size-xs)",color:v?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:g})]})};var L=F;export{L 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 t,jsxs as o}from"react/jsx-runtime";import{useState as j,useId as k,useRef as A,useEffect as F}from"react";import{Textarea as I,Label as B,Spinner as E,cn as m,Stack as p}from"@donotdev/components";const H=({label:x,value:n="",onChange:y,error:u,helperText:i,rows:z=3,loading:v=!1,maxLength:r,showCharCount:h=!1,autoResize:s=!1,required:b=!1,disabled:g=!1,className:w,...S})=>{const e=k(),[T,f]=j(!1),l=A(null),a=!!u,d=n.length,$=r&&d>r*.8,C=r&&d>r;F(()=>{if(s&&l.current){const c=l.current;c.style.height="auto",c.style.height=`${c.scrollHeight}px`}},[n,s]);const N=()=>f(!0),L=()=>f(!1);return o(p,{gap:"tight",children:[o(B,{htmlFor:e,style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500,color:a?"var(--destructive-foreground)":g?"var(--muted-foreground)":"var(--foreground)"},children:[x,b&&t("span",{style:{color:"var(--destructive-foreground)",marginInlineStart:"var(--gap-sm)"},children:"*"})]}),o("div",{className:"dndev-relative",children:[t(I,{ref:l,id:e,value:n,onChange:y,onFocus:N,onBlur:L,disabled:g||v,maxLength:r,rows:s?1:z,"aria-describedby":m(a&&`${e}-error`,i&&!a&&`${e}-helper`,h&&`${e}-count`),"aria-invalid":a,className:m("dndev-w-full",s&&"dndev-overflow-hidden",w),"data-variant":a?"destructive":void 0,style:{resize:"none"},...S}),v&&t("div",{className:"dndev-absolute",style:{right:"var(--gap-md)",top:"var(--gap-md)"},children:t(E,{"aria-label":"Loading"})})]}),h&&r&&o("div",{id:`${e}-count`,style:{fontSize:"var(--font-size-xs)",textAlign:"right",color:C?"var(--destructive-foreground)":$?"var(--warning)":"var(--muted-foreground)"},children:[d,"/",r]}),a&&o(p,{as:"p",id:`${e}-error`,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[t("span",{children:"\u26A0"}),u]}),i&&!a&&t("p",{id:`${e}-helper`,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:i})]})};var R=H;export{R 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 i,jsxs as n}from"react/jsx-runtime";import{useId as z}from"react";import{Input as $,cn as c,Stack as u}from"@donotdev/components";const S=({label:h,value:s="",onChange:v,error:d,helperText:a,type:g="text",loading:f=!1,maxLength:e,showCharCount:l=!1,required:C=!1,disabled:p=!1,className:m,...x})=>{const r=z(),t=!!d,o=s.length,b=e&&o>e*.8,y=e&&o>e;return n(u,{gap:"tight",children:[i($,{id:r,type:g,value:s,onChange:v,label:h,disabled:p||f,maxLength:e,"aria-describedby":c(t&&`${r}-error`,a&&!t&&`${r}-helper`,l&&`${r}-count`),"aria-invalid":t,className:c("dndev-w-full",m),"data-variant":t?"destructive":void 0,...x}),l&&e&&n("div",{id:`${r}-count`,style:{fontSize:"var(--font-size-xs)",textAlign:"right",color:y?"var(--destructive-foreground)":b?"var(--warning)":"var(--muted-foreground)"},children:[o,"/",e]}),t&&n(u,{id:`${r}-error`,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[i("span",{children:"\u26A0"}),d]}),a&&!t&&i("p",{id:`${r}-helper`,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:a})]})};var w=S;export{w 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 g}from"react/jsx-runtime";import i from"./DateFieldComponent";const u=({label:a,value:e,onChange:t,error:o,helperText:l,mode:n="datetime-local"})=>{const m=e?new Date(e).toISOString():"";return g(i,{label:a,value:m,onChange:r=>{if(r){const s={target:{value:new Date(r).toISOString()}};t(s)}else t({target:{value:""}})},error:o,helperText:l,mode:n})};var v=u;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