@infinityfx/fluid 1.4.25 → 1.4.26
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.
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{jsx as e,jsxs as r,Fragment as o}from"react/jsx-runtime";import{useRef as n,useState as i}from"react";import a from"./button.js";import t from"../../hooks/use-input-props.js";import{combineClasses as l,classes as c,combineRefs as s}from"../../core/utils.js";import{createStyles as d}from"../../core/style.js";import{Icon as p}from"../../core/icons.js";import"../feedback/progress-bar.js";import"../feedback/circular-progress.js";import f from"../feedback/spinner.js";import m from"../feedback/halo.js";import"../feedback/indicator.js";import"../feedback/skeleton.js";const g=d("drop-zone",{".zone":{overflow:"hidden",position:"relative",display:"grid",backgroundColor:"var(--f-clr-fg-100)",border:"dashed 1px var(--f-clr-fg-200)",borderRadius:"var(--f-radius-med)",transition:"background-color .25s, border-color .25s, color .25s",userSelect:"none",WebkitTapHighlightColor:"transparent"},'.zone[aria-disabled="false"]':{cursor:"pointer"},".zone.hovering":{backgroundColor:"var(--f-clr-primary-600)",borderColor:"var(--f-clr-primary-100)"},".zone.filled":{borderStyle:"solid"},".zone.error, .zone.rejected":{borderColor:"var(--f-clr-error-100)",color:"var(--f-clr-error-100)"},".zone.rejected":{backgroundColor:"var(--f-clr-error-400)"},".zone.disabled":{color:"var(--f-clr-grey-500)"},".container":{display:"flex",flexDirection:"column",gridArea:"1 / 1"},".preview":{position:"relative",display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"var(--f-clr-bg-100)",padding:"var(--f-spacing-med)",flexGrow:1},".footer":{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"var(--f-spacing-sml)",gap:"var(--f-spacing-sml)"},".text":{display:"flex",alignItems:"baseline",gap:"var(--f-spacing-xsm)"},".annotation":{paddingTop:"var(--f-spacing-xxs)",color:"var(--f-clr-grey-600)",fontSize:"var(--f-font-size-xsm)"},".icon":{paddingBottom:"var(--f-spacing-sml)"},".image":{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"cover",zIndex:1},".container.centered":{alignItems:"center",justifyContent:"center",textAlign:"center",padding:"var(--f-spacing-lrg)"},".input":{position:"absolute",opacity:0,pointerEvents:"none"}});function v(e,r){const o=r?r.split(","):[];return!o.length||o.some((r=>e.type.includes(r.trim().replace(/\/\*$/,""))))}function u({cc:d={},loading:u=!1,error:b,text:h="Drop files or click to browse",annotation:y,icon:x,previewImages:j=!1,
|
|
2
|
+
import{jsx as e,jsxs as r,Fragment as o}from"react/jsx-runtime";import{useRef as n,useState as i}from"react";import a from"./button.js";import t from"../../hooks/use-input-props.js";import{combineClasses as l,classes as c,combineRefs as s}from"../../core/utils.js";import{createStyles as d}from"../../core/style.js";import{Icon as p}from"../../core/icons.js";import"../feedback/progress-bar.js";import"../feedback/circular-progress.js";import f from"../feedback/spinner.js";import m from"../feedback/halo.js";import"../feedback/indicator.js";import"../feedback/skeleton.js";const g=d("drop-zone",{".zone":{overflow:"hidden",position:"relative",display:"grid",backgroundColor:"var(--f-clr-fg-100)",border:"dashed 1px var(--f-clr-fg-200)",borderRadius:"var(--f-radius-med)",transition:"background-color .25s, border-color .25s, color .25s",userSelect:"none",WebkitTapHighlightColor:"transparent"},'.zone[aria-disabled="false"]':{cursor:"pointer"},".zone.hovering":{backgroundColor:"var(--f-clr-primary-600)",borderColor:"var(--f-clr-primary-100)"},".zone.filled":{borderStyle:"solid"},".zone.error, .zone.rejected":{borderColor:"var(--f-clr-error-100)",color:"var(--f-clr-error-100)"},".zone.rejected":{backgroundColor:"var(--f-clr-error-400)"},".zone.disabled":{color:"var(--f-clr-grey-500)"},".container":{display:"flex",flexDirection:"column",gridArea:"1 / 1"},".preview":{position:"relative",display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"var(--f-clr-bg-100)",padding:"var(--f-spacing-med)",flexGrow:1},".footer":{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"var(--f-spacing-sml)",gap:"var(--f-spacing-sml)"},".text":{display:"flex",alignItems:"baseline",gap:"var(--f-spacing-xsm)"},".annotation":{paddingTop:"var(--f-spacing-xxs)",color:"var(--f-clr-grey-600)",fontSize:"var(--f-font-size-xsm)"},".icon":{paddingBottom:"var(--f-spacing-sml)"},".image":{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"cover",zIndex:1},".container.centered":{alignItems:"center",justifyContent:"center",textAlign:"center",padding:"var(--f-spacing-lrg)"},".input":{position:"absolute",opacity:0,pointerEvents:"none"}});function v(e,r){const o=r?r.split(","):[];return!o.length||o.some((r=>e.type.includes(r.trim().replace(/\/\*$/,""))))}function u({cc:d={},loading:u=!1,error:b,text:h="Drop files or click to browse",annotation:y,icon:x,previewImages:j=!1,fallbackPreviewImage:k,inputRef:C,...z}){const N=l(g,d),w=n(null),[D,I]=i(!1),[T,E]=i(!1),[L,O]=i(null),[R,B]=t(z);function F(e){if(!w.current)return;const r=new DataTransfer;e&&r.items.add(e),O(e),w.current.files=r.files,w.current.dispatchEvent(new Event("change",{bubbles:!0}))}const S=!!(j&&L&&v(L,"image/*")),$=z.disabled||z.readOnly||u,A=L||j&&k;return e(m,{color:"var(--f-clr-grey-300)",disabled:!!L||$,children:r("div",{...B,tabIndex:0,role:"button","aria-disabled":!!L||$,className:c(N.zone,D&&N.hovering,b&&N.error,T&&N.rejected,A&&N.filled,z.disabled&&N.disabled,z.className),onClick:e=>{z.onClick?.(e),L||$||!w.current||w.current.click()},onDragOver:e=>{z.onDragOver?.(e),e.preventDefault(),$||I(!0)},onDragLeave:e=>{z.onDragLeave?.(e),I(!1)},onDrop:e=>{if(z.onDrop?.(e),$)return;e.preventDefault(),I(!1);const r=e.dataTransfer.files[0];r&&!v(r,z.accept||"")?(E(!0),setTimeout((()=>E(!1)),250)):r&&F(r)},children:[u&&e("div",{className:c(N.container,N.centered),children:e(f,{})}),A&&!u&&e(o,{children:r("div",{className:N.container,children:[r("div",{className:N.preview,children:[e(p,{type:"file"}),(S||k)&&e("img",{src:L?URL.createObjectURL(L):k,className:N.image})]}),L&&r("div",{className:N.footer,children:[r("div",{children:[e("div",{className:N.text,children:L.name}),e("div",{className:N.annotation,children:(U=L.size,(U/=1024)<1e3?`${U.toFixed(1)} KB`:`${(U/1024).toFixed(1)} MB`)})]}),e(a,{compact:!0,variant:"minimal",disabled:$,onClick:()=>F(null),children:e(p,{type:"close"})})]})]})}),r("div",{style:A||u?{opacity:0,pointerEvents:"none"}:void 0,className:c(N.container,N.centered),children:[e("div",{className:N.icon,children:x||e(p,{type:"upload"})}),e("div",{className:N.text,children:h}),y&&e("div",{className:N.annotation,children:y})]}),e("input",{...R,ref:s(w,C),type:"file",disabled:z.disabled||u,"aria-invalid":!!b,className:N.input,onChange:e=>{z.onChange?.(e),O(e.target.files?.[0]||null)}})]})});var U}export{u as default};
|
|
3
3
|
//# sourceMappingURL=drop-zone.js.map
|
|
@@ -5,7 +5,7 @@ export type DropZoneSelectors = Selectors<'zone' | 'hovering' | 'filled' | 'erro
|
|
|
5
5
|
*
|
|
6
6
|
* @see {@link https://fluid.infinityfx.dev/docs/components/drop-zone}
|
|
7
7
|
*/
|
|
8
|
-
export default function DropZone({ cc, loading, error, text, annotation, icon, previewImages,
|
|
8
|
+
export default function DropZone({ cc, loading, error, text, annotation, icon, previewImages, fallbackPreviewImage, inputRef, ...props }: {
|
|
9
9
|
ref?: React.Ref<HTMLDivElement>;
|
|
10
10
|
cc?: DropZoneSelectors;
|
|
11
11
|
loading?: boolean;
|
|
@@ -20,11 +20,9 @@ export default function DropZone({ cc, loading, error, text, annotation, icon, p
|
|
|
20
20
|
*/
|
|
21
21
|
previewImages?: boolean;
|
|
22
22
|
/**
|
|
23
|
-
* Optional
|
|
24
|
-
*
|
|
25
|
-
* If not provided will default to the currently selected file.
|
|
23
|
+
* Optional fallback image to show as a preview when no file is selected.
|
|
26
24
|
*/
|
|
27
|
-
|
|
25
|
+
fallbackPreviewImage?: string;
|
|
28
26
|
inputRef?: React.Ref<HTMLInputElement>;
|
|
29
27
|
onChange?: React.ChangeEventHandler<HTMLInputElement>;
|
|
30
28
|
} & Omit<React.InputHTMLAttributes<HTMLDivElement>, 'defaultValue' | 'children' | 'onChange'>): import("react/jsx-runtime").JSX.Element;
|