@xjur-ui/react 2.2.0 → 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/{chunk-DT44JTXB.js → chunk-4M3WR2KJ.js} +2 -2
- package/dist/{chunk-DT44JTXB.js.map → chunk-4M3WR2KJ.js.map} +1 -1
- package/dist/{chunk-7HG6Y3VV.js → chunk-BYXTOSM6.js} +2 -2
- package/dist/{chunk-7HG6Y3VV.js.map → chunk-BYXTOSM6.js.map} +1 -1
- package/dist/chunk-DTNZXDCY.js +2 -0
- package/dist/chunk-DTNZXDCY.js.map +1 -0
- package/dist/{chunk-4PTFZTVU.js → chunk-HLWHETF5.js} +2 -2
- package/dist/{chunk-4PTFZTVU.js.map → chunk-HLWHETF5.js.map} +1 -1
- package/dist/{chunk-G6NSC3FL.js → chunk-MTIWFWRN.js} +2 -2
- package/dist/{chunk-G6NSC3FL.js.map → chunk-MTIWFWRN.js.map} +1 -1
- package/dist/{chunk-ASZAHSU5.js → chunk-SLMHDBWO.js} +2 -2
- package/dist/{chunk-ASZAHSU5.js.map → chunk-SLMHDBWO.js.map} +1 -1
- package/dist/{chunk-3H75F4Y2.js → chunk-TQWBQ452.js} +2 -2
- package/dist/chunk-TQWBQ452.js.map +1 -0
- package/dist/{chunk-MQ7YTZBI.js → chunk-TTKENFBF.js} +2 -2
- package/dist/{chunk-MQ7YTZBI.js.map → chunk-TTKENFBF.js.map} +1 -1
- package/dist/components/accordion.d.ts +54 -0
- package/dist/components/accordion.js +2 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/badge.d.ts +1 -1
- package/dist/components/controls/date-picker.d.ts +1 -1
- package/dist/components/controls/date-picker.js +1 -1
- package/dist/components/controls/date-picker.js.map +1 -1
- package/dist/components/controls/input.js +1 -1
- package/dist/components/controls/rating.d.ts +137 -0
- package/dist/components/controls/rating.js +2 -0
- package/dist/components/controls/rating.js.map +1 -0
- package/dist/components/controls/rich-editor.js +1 -1
- package/dist/components/controls/select.d.ts +1 -3
- package/dist/components/controls/select.js +1 -1
- package/dist/components/controls/slider.d.ts +172 -0
- package/dist/components/controls/slider.js +2 -0
- package/dist/components/controls/slider.js.map +1 -0
- package/dist/components/custom/pessoa/index.js +1 -1
- package/dist/components/drag-and-drop/index.js +1 -1
- package/dist/components/full-calendar/calendar-cell.js +1 -1
- package/dist/components/full-calendar/calendar-day-view.js +1 -1
- package/dist/components/full-calendar/calendar-month-view.js +1 -1
- package/dist/components/full-calendar/calendar-toggle-view.js +1 -1
- package/dist/components/full-calendar/calendar-view-renderer.js +1 -1
- package/dist/components/full-calendar/calendar-week-view.js +1 -1
- package/dist/components/full-calendar/index.js +1 -1
- package/dist/components/horizontal-scroll.js +1 -1
- package/dist/components/horizontal-scroll.js.map +1 -1
- package/dist/components/selection-bar.d.ts +1 -1
- package/dist/components/status.d.ts +1 -1
- package/dist/components/steps/index.js +1 -1
- package/dist/components/table/index.js +1 -1
- package/dist/components/toast.d.ts +27 -0
- package/dist/components/toast.js +2 -0
- package/dist/components/toast.js.map +1 -0
- package/dist/components/typography.d.ts +1 -1
- package/dist/components/upload.js +1 -1
- package/dist/components/upload.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/package.json +19 -13
- package/dist/chunk-2JU3PFV2.js +0 -2
- package/dist/chunk-2JU3PFV2.js.map +0 -1
- package/dist/chunk-3H75F4Y2.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{a as
|
|
1
|
+
export{a as TableFooter}from'../../chunk-FUHASFGU.js';export{a as TableHead,b as TableHeadContent}from'../../chunk-AKR2BJRB.js';export{a as TableHeader}from'../../chunk-Q2BZSHS2.js';export{a as TableRow}from'../../chunk-EITO7GZX.js';export{a as TableSort}from'../../chunk-GVKH2BG2.js';export{a as Table}from'../../chunk-7HMMMRDA.js';export{a as TableBody}from'../../chunk-URDL5OKH.js';export{a as TableCell}from'../../chunk-V2FCP4FA.js';import'../../chunk-DVDHTP4C.js';//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
3
|
+
import React__default, { ComponentProps } from 'react';
|
|
4
|
+
import { ClassVariantProps } from '@xjur-ui/util';
|
|
5
|
+
import * as Toast from '@radix-ui/react-toast';
|
|
6
|
+
|
|
7
|
+
declare const toastVariants: (props?: ({
|
|
8
|
+
variant?: "error" | "info" | "warning" | "success" | "success-no-border" | "info-no-border" | "warning-no-border" | "error-no-border" | null | undefined;
|
|
9
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
10
|
+
interface ToastProps extends ComponentProps<typeof Toast.Root>, ClassVariantProps<typeof toastVariants> {
|
|
11
|
+
children?: React__default.ReactNode;
|
|
12
|
+
className?: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
dismissible?: boolean;
|
|
15
|
+
onDismiss?: () => void;
|
|
16
|
+
}
|
|
17
|
+
declare function ToastComponent({ children, className, description, dismissible, onDismiss, variant, ...props }: ToastProps): react_jsx_runtime.JSX.Element;
|
|
18
|
+
interface ToastProviderProps extends ComponentProps<typeof Toast.Provider> {
|
|
19
|
+
children: React__default.ReactNode;
|
|
20
|
+
}
|
|
21
|
+
declare function ToastProvider({ children, ...props }: ToastProviderProps): react_jsx_runtime.JSX.Element;
|
|
22
|
+
interface ToastViewportProps extends ComponentProps<typeof Toast.Viewport> {
|
|
23
|
+
className?: string;
|
|
24
|
+
}
|
|
25
|
+
declare function ToastViewport({ className, ...props }: ToastViewportProps): react_jsx_runtime.JSX.Element;
|
|
26
|
+
|
|
27
|
+
export { ToastComponent, type ToastProps, ToastProvider, type ToastProviderProps, ToastViewport, type ToastViewportProps };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {b as b$1}from'../chunk-DVDHTP4C.js';import {a}from'../chunk-EIG6CBTQ.js';import'react';import {cva,cx}from'@xjur-ui/util';import*as e from'@radix-ui/react-toast';import {jsxs,jsx}from'react/jsx-runtime';var w=cva(["group pointer-events-auto relative flex w-full items-center justify-between space-x-4 rounded-md p-4 shadow-lg transition-all","data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)]","data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none","data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out","data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full","data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full"],{variants:{variant:{success:"border-l-[4px] border-success-idle bg-success-alt-idle text-success-idle","success-no-border":"bg-success-alt-idle text-success-idle",info:"border-l-[4px] border-neutral-border bg-neutral-surface text-neutral-idle","info-no-border":"bg-neutral-surface text-neutral-idle",warning:"border-l-[4px] border-warning-idle bg-warning-alt-idle text-warning-idle","warning-no-border":"bg-warning-alt-idle text-warning-idle",error:"border-l-[4px] border-danger-idle bg-danger-alt-idle text-danger-idle","error-no-border":"bg-danger-alt-idle text-danger-idle"}},defaultVariants:{variant:"info"}}),b=cva(["flex-shrink-0"],{variants:{variant:{success:"text-success-idle","success-no-border":"text-success-idle",info:"text-neutral-idle","info-no-border":"text-neutral-idle",warning:"text-warning-idle","warning-no-border":"text-warning-idle",error:"text-danger-idle","error-no-border":"text-danger-idle"}},defaultVariants:{variant:"info"}}),v=cva(["absolute top-2 right-2 rounded-md py-2 opacity-100 transition-opacity focus:opacity-100 focus:ring-2 focus:outline-none"],{variants:{variant:{success:"text-success-idle hover:text-success-idle/80","success-no-border":"text-success-idle hover:text-success-idle/80",info:"text-neutral-idle hover:text-neutral-idle/80","info-no-border":"text-neutral-idle hover:text-neutral-idle/80",warning:"text-warning-idle hover:text-warning-idle/80","warning-no-border":"text-warning-idle hover:text-warning-idle/80",error:"text-danger-idle hover:text-danger-idle/80","error-no-border":"text-danger-idle hover:text-danger-idle/80"}},defaultVariants:{variant:"info"}}),p=cva(["h-4 w-4"],{variants:{variant:{success:"text-success-idle","success-no-border":"text-success-idle",info:"text-neutral-idle","info-no-border":"text-neutral-idle",warning:"text-warning-idle","warning-no-border":"text-warning-idle",error:"text-danger-idle","error-no-border":"text-danger-idle"}},defaultVariants:{variant:"info"}});function N({children:o,className:a$1,description:l,dismissible:x=true,onDismiss:u,variant:r="info",...m}){let f=()=>{switch(r){case "success":return "check";case "warning":return "warning";case "error":return "error";default:return "info"}},g=()=>{u?.();};return jsxs(e.Root,{className:cx(w({variant:r}),a$1),...m,children:[jsxs("div",{className:"flex items-center space-x-3 pl-4",children:[jsx(b$1,{className:cx(b({variant:r}),"text-lg"),name:f()}),jsxs("div",{className:"flex-1",children:[l&&jsx(e.Description,{asChild:true,className:p({variant:r}),children:jsx(a,{size:"sm",variant:"body",children:l})}),o]})]}),x&&jsxs(e.Close,{className:v({variant:r}),onClick:g,children:[jsx(b$1,{className:p({variant:r}),name:"close"}),jsx("span",{className:"sr-only",children:"Fechar"})]})]})}function C({children:o,...a}){return jsxs(e.Provider,{swipeDirection:"right",...a,children:[o,jsx(e.Viewport,{className:"fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:top-auto sm:right-0 sm:bottom-0 sm:flex-col md:max-w-[420px]"})]})}function R({className:o,...a}){return jsx(e.Viewport,{className:cx("fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:top-auto sm:right-0 sm:bottom-0 sm:flex-col md:max-w-[420px]",o),...a})}export{N as ToastComponent,C as ToastProvider,R as ToastViewport};//# sourceMappingURL=toast.js.map
|
|
2
|
+
//# sourceMappingURL=toast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/toast.tsx"],"names":["toastVariants","cva","toastIconVariants","toastCloseVariants","toastCloseIconVariants","ToastComponent","children","className","description","dismissible","onDismiss","variant","props","getIcon","handleDismiss","jsxs","cx","jsx","Icon","Typography","ToastProvider","ToastViewport"],"mappings":"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","file":"toast.js","sourcesContent":["import type { ComponentProps } from 'react'\nimport React from 'react'\nimport { cva, cx, type ClassVariantProps } from '@xjur-ui/util'\nimport * as Toast from '@radix-ui/react-toast'\nimport { Icon } from './icon'\nimport { Typography } from './typography'\n\nconst toastVariants = cva(\n [\n 'group pointer-events-auto relative flex w-full items-center justify-between space-x-4 rounded-md p-4 shadow-lg transition-all',\n 'data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)]',\n 'data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out',\n 'data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full',\n 'data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full'\n ],\n {\n variants: {\n variant: {\n success:\n 'border-l-[4px] border-success-idle bg-success-alt-idle text-success-idle',\n 'success-no-border': 'bg-success-alt-idle text-success-idle',\n info: 'border-l-[4px] border-neutral-border bg-neutral-surface text-neutral-idle',\n 'info-no-border': 'bg-neutral-surface text-neutral-idle',\n warning:\n 'border-l-[4px] border-warning-idle bg-warning-alt-idle text-warning-idle',\n 'warning-no-border': 'bg-warning-alt-idle text-warning-idle',\n error:\n 'border-l-[4px] border-danger-idle bg-danger-alt-idle text-danger-idle',\n 'error-no-border': 'bg-danger-alt-idle text-danger-idle'\n }\n },\n defaultVariants: {\n variant: 'info'\n }\n }\n)\n\nconst toastIconVariants = cva(['flex-shrink-0'], {\n variants: {\n variant: {\n success: 'text-success-idle',\n 'success-no-border': 'text-success-idle',\n info: 'text-neutral-idle',\n 'info-no-border': 'text-neutral-idle',\n warning: 'text-warning-idle',\n 'warning-no-border': 'text-warning-idle',\n error: 'text-danger-idle',\n 'error-no-border': 'text-danger-idle'\n }\n },\n defaultVariants: {\n variant: 'info'\n }\n})\n\nconst toastCloseVariants = cva(\n [\n 'absolute top-2 right-2 rounded-md py-2 opacity-100 transition-opacity focus:opacity-100 focus:ring-2 focus:outline-none'\n ],\n {\n variants: {\n variant: {\n success: 'text-success-idle hover:text-success-idle/80',\n 'success-no-border': 'text-success-idle hover:text-success-idle/80',\n info: 'text-neutral-idle hover:text-neutral-idle/80',\n 'info-no-border': 'text-neutral-idle hover:text-neutral-idle/80',\n warning: 'text-warning-idle hover:text-warning-idle/80',\n 'warning-no-border': 'text-warning-idle hover:text-warning-idle/80',\n error: 'text-danger-idle hover:text-danger-idle/80',\n 'error-no-border': 'text-danger-idle hover:text-danger-idle/80'\n }\n },\n defaultVariants: {\n variant: 'info'\n }\n }\n)\n\nconst toastCloseIconVariants = cva(['h-4 w-4'], {\n variants: {\n variant: {\n success: 'text-success-idle',\n 'success-no-border': 'text-success-idle',\n info: 'text-neutral-idle',\n 'info-no-border': 'text-neutral-idle',\n warning: 'text-warning-idle',\n 'warning-no-border': 'text-warning-idle',\n error: 'text-danger-idle',\n 'error-no-border': 'text-danger-idle'\n }\n },\n defaultVariants: {\n variant: 'info'\n }\n})\n\nexport interface ToastProps\n extends ComponentProps<typeof Toast.Root>,\n ClassVariantProps<typeof toastVariants> {\n children?: React.ReactNode\n className?: string\n description?: string\n dismissible?: boolean\n onDismiss?: () => void\n}\n\nexport function ToastComponent({\n children,\n className,\n description,\n dismissible = true,\n onDismiss,\n variant = 'info',\n ...props\n}: ToastProps) {\n const getIcon = () => {\n switch (variant) {\n case 'success':\n return 'check'\n case 'warning':\n return 'warning'\n case 'error':\n return 'error'\n default:\n return 'info'\n }\n }\n\n const handleDismiss = () => {\n onDismiss?.()\n }\n\n return (\n <Toast.Root\n className={cx(toastVariants({ variant }), className)}\n {...props}\n >\n <div className=\"flex items-center space-x-3 pl-4\">\n <Icon\n className={cx(toastIconVariants({ variant }), 'text-lg')}\n name={getIcon()}\n />\n <div className=\"flex-1\">\n {description && (\n <Toast.Description\n asChild={true}\n className={toastCloseIconVariants({ variant })}\n >\n <Typography size=\"sm\" variant=\"body\">\n {description}\n </Typography>\n </Toast.Description>\n )}\n {children}\n </div>\n </div>\n {dismissible && (\n <Toast.Close\n className={toastCloseVariants({ variant })}\n onClick={handleDismiss}\n >\n <Icon className={toastCloseIconVariants({ variant })} name=\"close\" />\n <span className=\"sr-only\">Fechar</span>\n </Toast.Close>\n )}\n </Toast.Root>\n )\n}\n\nexport interface ToastProviderProps\n extends ComponentProps<typeof Toast.Provider> {\n children: React.ReactNode\n}\n\nexport function ToastProvider({ children, ...props }: ToastProviderProps) {\n return (\n <Toast.Provider swipeDirection=\"right\" {...props}>\n {children}\n <Toast.Viewport className=\"fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:top-auto sm:right-0 sm:bottom-0 sm:flex-col md:max-w-[420px]\" />\n </Toast.Provider>\n )\n}\n\nexport interface ToastViewportProps\n extends ComponentProps<typeof Toast.Viewport> {\n className?: string\n}\n\nexport function ToastViewport({ className, ...props }: ToastViewportProps) {\n return (\n <Toast.Viewport\n className={cx(\n 'fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:top-auto sm:right-0 sm:bottom-0 sm:flex-col md:max-w-[420px]',\n className\n )}\n {...props}\n />\n )\n}\n"]}
|
|
@@ -7,7 +7,7 @@ import { ClassVariantProps } from '@xjur-ui/util';
|
|
|
7
7
|
declare const typographyVariants: (props?: ({
|
|
8
8
|
variant?: "label" | "body" | "title" | "headline" | null | undefined;
|
|
9
9
|
size?: "sm" | "md" | "lg" | "sm-2x" | "sm-1x" | null | undefined;
|
|
10
|
-
weight?: "bold" | "
|
|
10
|
+
weight?: "bold" | "normal" | "black" | "medium" | "thin" | "light" | "extraLight" | "semibold" | "extraBold" | null | undefined;
|
|
11
11
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
12
12
|
interface TypographyProps extends ComponentProps<'base'>, ClassVariantProps<typeof typographyVariants> {
|
|
13
13
|
asChild?: boolean;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {b as b$3,c as c$1,
|
|
1
|
+
import {a}from'../chunk-3L772WC6.js';import {b as b$3,c as c$1,g as g$1,k}from'../chunk-DTNZXDCY.js';import {b as b$2,c,g}from'../chunk-TQWBQ452.js';import'../chunk-PBR7SFWY.js';import'../chunk-JGPHBUVM.js';import'../chunk-2JQVYVAT.js';import'../chunk-CBFC4QME.js';import'../chunk-YOLTIAFT.js';import {b as b$1}from'../chunk-M6ZI7M3R.js';import {b}from'../chunk-DVDHTP4C.js';import'../chunk-EIG6CBTQ.js';import {createContext,useState,useRef,useCallback,useContext}from'react';import {cva,cx}from'@xjur-ui/util';import {jsx,jsxs}from'react/jsx-runtime';var q=createContext(null);function T(){let l=useContext(q);if(!l)throw new Error("Upload components must be used within UploadRoot");return l}function te({children:l,className:n,files:d,onFilesChange:c,accept:m,multiple:o=false,disabled:u=false,maxFiles:b=1,maxSize:x,acceptedFormats:f=[".jpeg",".png",".webp"],...v}){return jsx(q.Provider,{value:{files:d,onFilesChange:c,accept:m,multiple:o,disabled:u,maxFiles:b,maxSize:x,acceptedFormats:f},children:jsx("div",{className:cx("flex flex-col gap-4",n),...v,children:l})})}var ae=cva(["flex flex-col items-center justify-center","relative border-2 border-dashed border-border-layer-2 rounded-lg transition-all duration-200 ease-in-out cursor-pointer","hover:border-border-layer-2 hover:bg-transparent","focus-within:border-primary-idle focus-within:ring-2 focus-within:ring-primary-idle/20","data-[drag-over=true]:border-primary-idle data-[drag-over=true]:bg-primary-alt-idle/10"],{variants:{size:{large:"p-6 min-h-[200px] ",medium:"p-6 min-h-[160px]",small:"p-6 min-h-[130px]",oneLine:"p-4 min-h-[18px]"},showButton:{true:"",false:""},variant:{default:"bg-white",transparent:"bg-transparent",minimal:"bg-white",oneLineWhite:"bg-white",oneLineTransparent:"bg-transparent"}},compoundVariants:[{size:"large",showButton:true},{size:"medium",showButton:true},{size:"small",showButton:true},{variant:"oneLineWhite",showButton:false,className:"items-center flex flex-row justify-center"},{variant:"oneLineTransparent",showButton:false,className:"items-center flex flex-row justify-center"}],defaultVariants:{size:"large",variant:"default",showButton:true}});function re({className:l,size:n="large",showButton:d=true,variant:c="default",showAcceptedFormats:m=true,buttonText:o="Selecionar arquivo",description:u="Clique ou solte os arquivos para fazer o upload",icon:b="upload",...x}){let{onFilesChange:f,accept:v,multiple:r,disabled:a,maxFiles:t,maxSize:F,acceptedFormats:E}=T(),[W,P]=useState(false),w=useRef(null),[U,D]=useState(0),N=useCallback(i=>{let s=i;return t&&t>0&&(s=s.slice(0,t)),F&&(s=s.filter(p=>p.size<=F)),v&&(s=s.filter(p=>{let Q=`.${p.name.split(".").pop()?.toLowerCase()}`;return E?.some(L=>L.startsWith(".")?L===Q:p.type.includes(L))})),s.map(p=>({name:p.name,type:p.type,fileBinary:p,restrict:false}))},[t,F,v,E]),_=useCallback(i=>{i.preventDefault(),i.stopPropagation(),D(s=>s+1),P(true);},[]),K=useCallback(i=>{i.preventDefault(),i.stopPropagation(),D(s=>s-1),U<=1&&P(false);},[U]),$=useCallback(i=>{i.preventDefault(),i.stopPropagation();},[]),G=useCallback(i=>{if(i.preventDefault(),i.stopPropagation(),P(false),D(0),a)return;let s=Array.from(i.dataTransfer.files),p=N(s);p.length>0&&f?.(p);},[a,f,N]),J=useCallback(i=>{if(a)return;let s=Array.from(i.target.files||[]),p=N(s);p.length>0&&f?.(p);},[a,f,N]);return jsxs(M,{...x,"aria-disabled":a,"aria-label":u,className:cx(ae({size:n,showButton:d,variant:c}),l),"data-drag-over":W,fileInputRef:w,onDragEnter:_,onDragLeave:K,onDragOver:$,onDrop:G,children:[jsx("input",{accept:v,className:"hidden",disabled:a,multiple:r,ref:w,type:"file",onChange:J}),jsx(H,{buttonText:o,description:u,icon:b,showAcceptedFormats:m,showButton:d,variant:c||"default",onButtonClick:()=>{!a&&w.current&&w.current.click();}})]})}function ne({children:l,className:n,...d}){return jsx("h3",{className:cx("text-neutral-dark text-lg font-semibold",n),...d,children:l})}function H({description:l="Clique ou solte os arquivos para fazer o upload",icon:n="upload",showAcceptedFormats:d=true,buttonText:c="Selecionar arquivo",showButton:m=true,onButtonClick:o,variant:u="default",className:b$2,...x}){let{acceptedFormats:f}=T(),v=()=>d?jsxs("p",{className:"text-neutral-secondary mt-2 text-sm",children:["Formatos aceitos: ",f?.join(" ")]}):null;return u==="oneLineWhite"||u==="oneLineTransparent"?jsxs("div",{...x,className:cx("flex h-full items-center justify-center gap-4 text-center",b$2),children:[jsx(b,{className:"text-neutral-secondary text-4xl",name:n}),jsx("p",{className:"text-neutral-dark text-base font-medium",children:l}),v()]}):jsxs("div",{...x,className:cx("flex h-full w-full flex-col items-center gap-4 text-center",b$2),children:[jsxs("div",{className:"flex flex-col items-center",children:[jsx(b,{className:"text-neutral-secondary mb-3 text-4xl",name:n}),jsx("p",{className:"text-neutral-dark mb-2 text-base font-medium",children:l}),v()]}),m&&jsx("div",{children:jsx(b$1,{size:"md",variant:"primary",onClick:a=>{a.stopPropagation(),o?.();},children:c})})]})}function M({children:l,fileInputRef:n,...d}){let{disabled:c}=T(),m=useCallback(()=>{!c&&n?.current&&n.current.click();},[c,n]);return jsx("div",{role:"button",tabIndex:c?-1:0,onClick:m,onKeyDown:o=>{(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),m());},...d,children:l})}function oe({fileTypeOptions:l=[{value:"document",label:"Documento"},{value:"image",label:"Imagem"},{value:"video",label:"V\xEDdeo"},{value:"audio",label:"\xC1udio"},{value:"other",label:"Outro"}],onUpdateFile:n,onDeleteFile:d,className:c$2,...m}){let{files:o,onFilesChange:u}=T();if(!o||o.length===0)return null;let b$4=(r,a)=>{if(n)n(r,{description:a});else {let t=[...o];t[r]={...t[r],description:a},u?.(t);}},x=(r,a)=>{if(n)n(r,{fileType:a});else {let t=[...o];t[r]={...t[r],fileType:a},u?.(t);}},f=(r,a)=>{if(n)n(r,{restrict:a});else {let t=[...o];t[r]={...t[r],restrict:a},u?.(t);}},v=r=>{if(d)d(r);else {let a=o.filter((t,F)=>F!==r);u?.(a);}};return jsx("div",{className:cx("space-y-2",c$2),...m,children:jsxs("div",{className:"border-border-layer-2 p-4",children:[jsxs("div",{className:"border-border-layer-2 mb-3 flex w-full flex-row items-center justify-between gap-4 border-b pb-2",children:[jsx("div",{className:"w-full",children:jsx("span",{className:"text-sm font-medium text-gray-300",children:"Descri\xE7\xE3o"})}),jsx("div",{className:"w-full",children:jsx("span",{className:"text-sm font-medium text-gray-300",children:"Tipo"})}),jsx("div",{className:"flex justify-end",children:jsx("span",{className:"text-sm font-medium text-gray-300",children:"Restrito"})})]}),jsx("div",{className:"space-y-3",children:o.map((r,a$1)=>jsxs("div",{className:"flex flex-row items-center gap-4 py-3",children:[jsx("div",{className:"flex justify-start",children:jsx(b,{className:"text-neutral-secondary hover:text-neutral-dark cursor-grab",name:"drag_indicator"})}),jsx("div",{className:"w-full",children:jsx(b$2,{children:jsx(c,{children:jsx(g,{placeholder:"Nome do arquivo",value:r.description||r.name,onChange:t=>b$4(a$1,t.target.value)})})})}),jsx("div",{className:"w-full",children:jsxs(b$3,{children:[jsxs(c$1,{className:"flex justify-between",children:[jsx("span",{className:"text-neutral-dark",children:l.find(t=>t.value===r.fileType)?.label||"Tipo"}),jsx(b,{className:"text-neutral-secondary",name:"keyboard_arrow_down"})]}),jsx(g$1,{children:l.map(t=>jsx(k,{value:t.value,onSelect:()=>x(a$1,t.value),children:t.label},t.value))})]})}),jsx("div",{className:"flex justify-end",children:jsx(a,{checked:r.restrict||false,onCheckedChange:t=>f(a$1,t)})}),jsx("div",{className:"flex justify-end",children:jsx(b$1,{appearance:"ghost",size:"sm",variant:"destructive",onClick:()=>v(a$1),children:jsx(b,{name:"delete"})})})]},a$1))})]})})}var me={Root:te,Area:re,Title:ne,AreaContent:H,AreaTrigger:M,EditableList:oe};export{oe as EditableFilesList,me as Upload,re as UploadArea,H as UploadAreaContent,M as UploadAreaTrigger,te as UploadRoot,ne as UploadTitle,ae as uploadAreaVariants};//# sourceMappingURL=upload.js.map
|
|
2
2
|
//# sourceMappingURL=upload.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/upload.tsx"],"names":["UploadContext","createContext","useUploadContext","context","useContext","UploadRoot","children","className","files","onFilesChange","accept","multiple","disabled","maxFiles","maxSize","acceptedFormats","props","jsx","cx","uploadAreaVariants","cva","UploadArea","size","showButton","variant","showAcceptedFormats","buttonText","description","icon","isDragOver","setIsDragOver","useState","fileInputRef","useRef","dragCounter","setDragCounter","validateFiles","useCallback","validFiles","file","fileExtension","format","handleDragEnter","e","prev","handleDragLeave","handleDragOver","handleDrop","handleFileSelect","jsxs","UploadAreaTrigger","UploadAreaContent","UploadTitle","onButtonClick","formatAcceptedFormats","Icon","Button","handleClick","EditableFilesList","fileTypeOptions","onUpdateFile","onDeleteFile","handleDescriptionChange","index","updatedFiles","handleFileTypeChange","fileType","handleRestrictChange","restrict","handleDelete","_","i","InputRoot","InputContent","InputText","SelectRoot","SelectTrigger","option","SelectContent","SelectOption","Switch","checked","Upload"],"mappings":"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","file":"upload.js","sourcesContent":["import type { ComponentProps, DragEvent, ChangeEvent } from 'react'\nimport { useRef, useState, useCallback, createContext, useContext } from 'react'\nimport { cva, cx, type ClassVariantProps } from '@xjur-ui/util'\nimport { Icon, type IconType } from './icon'\nimport { Button } from './controls/button'\nimport { Switch } from './controls/switch'\nimport { InputRoot, InputContent, InputText } from './controls/input'\nimport {\n SelectRoot,\n SelectTrigger,\n SelectContent,\n SelectOption\n} from './controls/select'\n\nexport interface FileFormat {\n name: string\n type: string\n fileBinary: File\n restrict?: boolean\n description?: string\n fileType?: string\n}\n\nexport interface FileTypeOption {\n value: string\n label: string\n}\n\ninterface UploadContextValue {\n files: FileFormat[]\n onFilesChange?: (files: FileFormat[]) => void\n accept?: string\n multiple?: boolean\n disabled?: boolean\n maxFiles?: number\n maxSize?: number\n acceptedFormats?: string[]\n}\n\nconst UploadContext = createContext<UploadContextValue | null>(null)\n\nfunction useUploadContext() {\n const context = useContext(UploadContext)\n if (!context) {\n throw new Error('Upload components must be used within UploadRoot')\n }\n return context\n}\n\ninterface UploadRootProps extends ComponentProps<'div'> {\n files: FileFormat[]\n onFilesChange?: (files: FileFormat[]) => void\n accept?: string\n multiple?: boolean\n disabled?: boolean\n maxFiles?: number\n maxSize?: number\n acceptedFormats?: string[]\n}\n\nfunction UploadRoot({\n children,\n className,\n files,\n onFilesChange,\n accept,\n multiple = false,\n disabled = false,\n maxFiles = 1,\n maxSize,\n acceptedFormats = ['.jpeg', '.png', '.webp'],\n ...props\n}: UploadRootProps) {\n return (\n <UploadContext.Provider\n value={{\n files,\n onFilesChange,\n accept,\n multiple,\n disabled,\n maxFiles,\n maxSize,\n acceptedFormats\n }}\n >\n <div className={cx('flex flex-col gap-4', className)} {...props}>\n {children}\n </div>\n </UploadContext.Provider>\n )\n}\n\nconst uploadAreaVariants = cva(\n [\n 'flex flex-col items-center justify-center',\n 'relative border-2 border-dashed border-border-layer-2 rounded-lg transition-all duration-200 ease-in-out cursor-pointer',\n 'hover:border-border-layer-2 hover:bg-transparent',\n 'focus-within:border-primary-idle focus-within:ring-2 focus-within:ring-primary-idle/20',\n 'data-[drag-over=true]:border-primary-idle data-[drag-over=true]:bg-primary-alt-idle/10'\n ],\n {\n variants: {\n size: {\n large: 'p-6 min-h-[200px] ',\n medium: 'p-6 min-h-[160px]',\n small: 'p-6 min-h-[130px]',\n oneLine: 'p-4 min-h-[18px]'\n },\n showButton: {\n true: '',\n false: ''\n },\n variant: {\n default: 'bg-white',\n transparent: 'bg-transparent',\n minimal: 'bg-white',\n oneLineWhite: 'bg-white',\n oneLineTransparent: 'bg-transparent'\n }\n },\n compoundVariants: [\n {\n size: 'large',\n showButton: true\n },\n {\n size: 'medium',\n showButton: true\n },\n {\n size: 'small',\n showButton: true\n },\n {\n variant: 'oneLineWhite',\n showButton: false,\n className: 'items-center flex flex-row justify-center'\n },\n {\n variant: 'oneLineTransparent',\n showButton: false,\n className: 'items-center flex flex-row justify-center'\n }\n ],\n defaultVariants: {\n size: 'large',\n variant: 'default',\n showButton: true\n }\n }\n)\n\ninterface UploadAreaProps\n extends Omit<ComponentProps<'div'>, 'onChange'>,\n ClassVariantProps<typeof uploadAreaVariants> {\n showAcceptedFormats?: boolean\n buttonText?: string\n description?: string\n icon?: string\n showButton?: boolean\n}\n\nfunction UploadArea({\n className,\n size = 'large',\n showButton = true,\n variant = 'default',\n showAcceptedFormats = true,\n buttonText = 'Selecionar arquivo',\n description = 'Clique ou solte os arquivos para fazer o upload',\n icon = 'upload',\n ...props\n}: UploadAreaProps) {\n const {\n onFilesChange,\n accept,\n multiple,\n disabled,\n maxFiles,\n maxSize,\n acceptedFormats\n } = useUploadContext()\n const [isDragOver, setIsDragOver] = useState(false)\n const fileInputRef = useRef<HTMLInputElement>(null)\n const [dragCounter, setDragCounter] = useState(0)\n\n const validateFiles = useCallback(\n (files: File[]): FileFormat[] => {\n let validFiles = files\n\n if (maxFiles && maxFiles > 0) {\n validFiles = validFiles.slice(0, maxFiles)\n }\n\n if (maxSize) {\n validFiles = validFiles.filter(file => file.size <= maxSize)\n }\n\n if (accept) {\n validFiles = validFiles.filter(file => {\n const fileExtension = `.${file.name.split('.').pop()?.toLowerCase()}`\n return acceptedFormats?.some(format =>\n format.startsWith('.')\n ? format === fileExtension\n : file.type.includes(format)\n )\n })\n }\n\n return validFiles.map(file => ({\n name: file.name,\n type: file.type,\n fileBinary: file,\n restrict: false\n }))\n },\n [maxFiles, maxSize, accept, acceptedFormats]\n )\n\n const handleDragEnter = useCallback((e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setDragCounter(prev => prev + 1)\n setIsDragOver(true)\n }, [])\n\n const handleDragLeave = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setDragCounter(prev => prev - 1)\n if (dragCounter <= 1) {\n setIsDragOver(false)\n }\n },\n [dragCounter]\n )\n\n const handleDragOver = useCallback((e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n }, [])\n\n const handleDrop = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragOver(false)\n setDragCounter(0)\n\n if (disabled) return\n\n const files = Array.from(e.dataTransfer.files)\n const validFiles = validateFiles(files)\n\n if (validFiles.length > 0) {\n onFilesChange?.(validFiles)\n }\n },\n [disabled, onFilesChange, validateFiles]\n )\n\n const handleFileSelect = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (disabled) return\n\n const files = Array.from(e.target.files || [])\n const validFiles = validateFiles(files)\n\n if (validFiles.length > 0) {\n onFilesChange?.(validFiles)\n }\n },\n [disabled, onFilesChange, validateFiles]\n )\n\n return (\n <UploadAreaTrigger\n {...props}\n aria-disabled={disabled}\n aria-label={description}\n className={cx(\n uploadAreaVariants({ size, showButton, variant }),\n className\n )}\n data-drag-over={isDragOver}\n fileInputRef={fileInputRef}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <input\n accept={accept}\n className=\"hidden\"\n disabled={disabled}\n multiple={multiple}\n ref={fileInputRef}\n type=\"file\"\n onChange={handleFileSelect}\n />\n\n <UploadAreaContent\n buttonText={buttonText}\n description={description}\n icon={icon}\n showAcceptedFormats={showAcceptedFormats}\n showButton={showButton}\n variant={variant || 'default'}\n onButtonClick={() => {\n if (!disabled && fileInputRef.current) {\n fileInputRef.current.click()\n }\n }}\n />\n </UploadAreaTrigger>\n )\n}\n\nfunction UploadTitle({ children, className, ...props }: ComponentProps<'h3'>) {\n return (\n <h3\n className={cx('text-neutral-dark text-lg font-semibold', className)}\n {...props}\n >\n {children}\n </h3>\n )\n}\n\ninterface UploadAreaContentProps extends ComponentProps<'div'> {\n description?: string\n icon?: string\n showAcceptedFormats?: boolean\n buttonText?: string\n showButton?: boolean\n onButtonClick?: () => void\n variant?:\n | 'default'\n | 'transparent'\n | 'minimal'\n | 'oneLineWhite'\n | 'oneLineTransparent'\n}\n\nfunction UploadAreaContent({\n description = 'Clique ou solte os arquivos para fazer o upload',\n icon = 'upload',\n showAcceptedFormats = true,\n buttonText = 'Selecionar arquivo',\n showButton = true,\n onButtonClick,\n variant = 'default',\n className,\n ...props\n}: UploadAreaContentProps) {\n const { acceptedFormats } = useUploadContext()\n\n const formatAcceptedFormats = () => {\n if (!showAcceptedFormats) return null\n\n return (\n <p className=\"text-neutral-secondary mt-2 text-sm\">\n Formatos aceitos: {acceptedFormats?.join(' ')}\n </p>\n )\n }\n\n const isOneLineVariant =\n variant === 'oneLineWhite' || variant === 'oneLineTransparent'\n\n if (isOneLineVariant) {\n return (\n <div\n {...props}\n className={cx(\n 'flex h-full items-center justify-center gap-4 text-center',\n className\n )}\n >\n <Icon\n className=\"text-neutral-secondary text-4xl\"\n name={icon as IconType}\n />\n <p className=\"text-neutral-dark text-base font-medium\">{description}</p>\n {formatAcceptedFormats()}\n </div>\n )\n }\n\n return (\n <div\n {...props}\n className={cx(\n 'flex h-full w-full flex-col items-center gap-4 text-center',\n className\n )}\n >\n <div className=\"flex flex-col items-center\">\n <Icon\n className=\"text-neutral-secondary mb-3 text-4xl\"\n name={icon as IconType}\n />\n\n <p className=\"text-neutral-dark mb-2 text-base font-medium\">\n {description}\n </p>\n\n {formatAcceptedFormats()}\n </div>\n\n {showButton && (\n <div>\n <Button\n size=\"md\"\n variant=\"primary\"\n onClick={e => {\n e.stopPropagation()\n onButtonClick?.()\n }}\n >\n {buttonText}\n </Button>\n </div>\n )}\n </div>\n )\n}\n\ninterface UploadAreaTriggerProps extends ComponentProps<'div'> {\n fileInputRef?: React.RefObject<HTMLInputElement | null>\n}\n\nfunction UploadAreaTrigger({\n children,\n fileInputRef,\n ...props\n}: UploadAreaTriggerProps) {\n const { disabled } = useUploadContext()\n\n const handleClick = useCallback(() => {\n if (!disabled && fileInputRef?.current) {\n fileInputRef.current.click()\n }\n }, [disabled, fileInputRef])\n\n return (\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onClick={handleClick}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n {...props}\n >\n {children}\n </div>\n )\n}\n\ninterface EditableFilesListProps {\n fileTypeOptions?: FileTypeOption[]\n onUpdateFile?: (index: number, file: Partial<FileFormat>) => void\n onDeleteFile?: (index: number) => void\n onReorderFiles?: (fromIndex: number, toIndex: number) => void\n className?: string\n}\n\nfunction EditableFilesList({\n fileTypeOptions = [\n { value: 'document', label: 'Documento' },\n { value: 'image', label: 'Imagem' },\n { value: 'video', label: 'Vídeo' },\n { value: 'audio', label: 'Áudio' },\n { value: 'other', label: 'Outro' }\n ],\n onUpdateFile,\n onDeleteFile,\n className,\n ...props\n}: EditableFilesListProps) {\n const { files, onFilesChange } = useUploadContext()\n\n if (!files || files.length === 0) return null\n\n const handleDescriptionChange = (index: number, description: string) => {\n if (onUpdateFile) {\n onUpdateFile(index, { description })\n } else {\n const updatedFiles = [...files]\n updatedFiles[index] = { ...updatedFiles[index], description }\n onFilesChange?.(updatedFiles)\n }\n }\n\n const handleFileTypeChange = (index: number, fileType: string) => {\n if (onUpdateFile) {\n onUpdateFile(index, { fileType })\n } else {\n const updatedFiles = [...files]\n updatedFiles[index] = { ...updatedFiles[index], fileType }\n onFilesChange?.(updatedFiles)\n }\n }\n\n const handleRestrictChange = (index: number, restrict: boolean) => {\n if (onUpdateFile) {\n onUpdateFile(index, { restrict })\n } else {\n const updatedFiles = [...files]\n updatedFiles[index] = { ...updatedFiles[index], restrict }\n onFilesChange?.(updatedFiles)\n }\n }\n\n const handleDelete = (index: number) => {\n if (onDeleteFile) {\n onDeleteFile(index)\n } else {\n const updatedFiles = files.filter((_, i) => i !== index)\n onFilesChange?.(updatedFiles)\n }\n }\n\n return (\n <div className={cx('space-y-2', className)} {...props}>\n <div className=\"border-border-layer-2 p-4\">\n <div className=\"border-border-layer-2 mb-3 flex w-full flex-row items-center justify-between gap-4 border-b pb-2\">\n <div className=\"w-full\">\n <span className=\"text-sm font-medium text-gray-300\">Descrição</span>\n </div>\n <div className=\"w-full\">\n <span className=\"text-sm font-medium text-gray-300\">Tipo</span>\n </div>\n <div className=\"flex justify-end\">\n <span className=\"text-sm font-medium text-gray-300\">Restrito</span>\n </div>\n </div>\n\n <div className=\"space-y-3\">\n {files.map((file, index) => (\n <div className=\"flex flex-row items-center gap-4 py-3\" key={index}>\n <div className=\"flex justify-start\">\n <Icon\n className=\"text-neutral-secondary hover:text-neutral-dark cursor-grab\"\n name=\"drag_indicator\"\n />\n </div>\n\n <div className=\"w-full\">\n <InputRoot>\n <InputContent>\n <InputText\n placeholder=\"Nome do arquivo\"\n value={file.description || file.name}\n onChange={e =>\n handleDescriptionChange(index, e.target.value)\n }\n />\n </InputContent>\n </InputRoot>\n </div>\n\n <div className=\"w-full\">\n <SelectRoot>\n <SelectTrigger className=\"flex justify-between\">\n <span className=\"text-neutral-dark\">\n {fileTypeOptions.find(\n option => option.value === file.fileType\n )?.label || 'Tipo'}\n </span>\n <Icon\n className=\"text-neutral-secondary\"\n name=\"keyboard_arrow_down\"\n />\n </SelectTrigger>\n <SelectContent>\n {fileTypeOptions.map(option => (\n <SelectOption\n key={option.value}\n value={option.value}\n onSelect={() =>\n handleFileTypeChange(index, option.value)\n }\n >\n {option.label}\n </SelectOption>\n ))}\n </SelectContent>\n </SelectRoot>\n </div>\n\n <div className=\"flex justify-end\">\n <Switch\n checked={file.restrict || false}\n onCheckedChange={checked =>\n handleRestrictChange(index, checked)\n }\n />\n </div>\n\n <div className=\"flex justify-end\">\n <Button\n appearance=\"ghost\"\n size=\"sm\"\n variant=\"destructive\"\n onClick={() => handleDelete(index)}\n >\n <Icon name=\"delete\" />\n </Button>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n}\n\nexport const Upload = {\n Root: UploadRoot,\n Area: UploadArea,\n Title: UploadTitle,\n AreaContent: UploadAreaContent,\n AreaTrigger: UploadAreaTrigger,\n EditableList: EditableFilesList\n}\n\nexport { UploadRoot }\nexport { UploadArea }\nexport { UploadTitle }\nexport { UploadAreaContent }\nexport { UploadAreaTrigger }\nexport { EditableFilesList }\nexport { uploadAreaVariants }\nexport type {\n UploadRootProps,\n UploadAreaProps,\n UploadAreaContentProps,\n UploadAreaTriggerProps,\n EditableFilesListProps\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/upload.tsx"],"names":["UploadContext","createContext","useUploadContext","context","useContext","UploadRoot","children","className","files","onFilesChange","accept","multiple","disabled","maxFiles","maxSize","acceptedFormats","props","jsx","cx","uploadAreaVariants","cva","UploadArea","size","showButton","variant","showAcceptedFormats","buttonText","description","icon","isDragOver","setIsDragOver","useState","fileInputRef","useRef","dragCounter","setDragCounter","validateFiles","useCallback","validFiles","file","fileExtension","format","handleDragEnter","e","prev","handleDragLeave","handleDragOver","handleDrop","handleFileSelect","jsxs","UploadAreaTrigger","UploadAreaContent","UploadTitle","onButtonClick","formatAcceptedFormats","Icon","Button","handleClick","EditableFilesList","fileTypeOptions","onUpdateFile","onDeleteFile","handleDescriptionChange","index","updatedFiles","handleFileTypeChange","fileType","handleRestrictChange","restrict","handleDelete","_","i","InputRoot","InputContent","InputText","SelectRoot","SelectTrigger","option","SelectContent","SelectOption","Switch","checked","Upload"],"mappings":"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","file":"upload.js","sourcesContent":["import type { ComponentProps, DragEvent, ChangeEvent } from 'react'\nimport { useRef, useState, useCallback, createContext, useContext } from 'react'\nimport { cva, cx, type ClassVariantProps } from '@xjur-ui/util'\nimport { Icon, type IconType } from './icon'\nimport { Button } from './controls/button'\nimport { Switch } from './controls/switch'\nimport { InputRoot, InputContent, InputText } from './controls/input'\nimport {\n SelectRoot,\n SelectTrigger,\n SelectContent,\n SelectOption\n} from './controls/select'\n\nexport interface FileFormat {\n name: string\n type: string\n fileBinary: File\n restrict?: boolean\n description?: string\n fileType?: string\n}\n\nexport interface FileTypeOption {\n value: string\n label: string\n}\n\ninterface UploadContextValue {\n files: FileFormat[]\n onFilesChange?: (files: FileFormat[]) => void\n accept?: string\n multiple?: boolean\n disabled?: boolean\n maxFiles?: number\n maxSize?: number\n acceptedFormats?: string[]\n}\n\nconst UploadContext = createContext<UploadContextValue | null>(null)\n\nfunction useUploadContext() {\n const context = useContext(UploadContext)\n if (!context) {\n throw new Error('Upload components must be used within UploadRoot')\n }\n return context\n}\n\ninterface UploadRootProps extends ComponentProps<'div'> {\n files: FileFormat[]\n onFilesChange?: (files: FileFormat[]) => void\n accept?: string\n multiple?: boolean\n disabled?: boolean\n maxFiles?: number\n maxSize?: number\n acceptedFormats?: string[]\n}\n\nfunction UploadRoot({\n children,\n className,\n files,\n onFilesChange,\n accept,\n multiple = false,\n disabled = false,\n maxFiles = 1,\n maxSize,\n acceptedFormats = ['.jpeg', '.png', '.webp'],\n ...props\n}: UploadRootProps) {\n return (\n <UploadContext.Provider\n value={{\n files,\n onFilesChange,\n accept,\n multiple,\n disabled,\n maxFiles,\n maxSize,\n acceptedFormats\n }}\n >\n <div className={cx('flex flex-col gap-4', className)} {...props}>\n {children}\n </div>\n </UploadContext.Provider>\n )\n}\n\nconst uploadAreaVariants = cva(\n [\n 'flex flex-col items-center justify-center',\n 'relative border-2 border-dashed border-border-layer-2 rounded-lg transition-all duration-200 ease-in-out cursor-pointer',\n 'hover:border-border-layer-2 hover:bg-transparent',\n 'focus-within:border-primary-idle focus-within:ring-2 focus-within:ring-primary-idle/20',\n 'data-[drag-over=true]:border-primary-idle data-[drag-over=true]:bg-primary-alt-idle/10'\n ],\n {\n variants: {\n size: {\n large: 'p-6 min-h-[200px] ',\n medium: 'p-6 min-h-[160px]',\n small: 'p-6 min-h-[130px]',\n oneLine: 'p-4 min-h-[18px]'\n },\n showButton: {\n true: '',\n false: ''\n },\n variant: {\n default: 'bg-white',\n transparent: 'bg-transparent',\n minimal: 'bg-white',\n oneLineWhite: 'bg-white',\n oneLineTransparent: 'bg-transparent'\n }\n },\n compoundVariants: [\n {\n size: 'large',\n showButton: true\n },\n {\n size: 'medium',\n showButton: true\n },\n {\n size: 'small',\n showButton: true\n },\n {\n variant: 'oneLineWhite',\n showButton: false,\n className: 'items-center flex flex-row justify-center'\n },\n {\n variant: 'oneLineTransparent',\n showButton: false,\n className: 'items-center flex flex-row justify-center'\n }\n ],\n defaultVariants: {\n size: 'large',\n variant: 'default',\n showButton: true\n }\n }\n)\n\ninterface UploadAreaProps\n extends Omit<ComponentProps<'div'>, 'onChange'>,\n ClassVariantProps<typeof uploadAreaVariants> {\n showAcceptedFormats?: boolean\n buttonText?: string\n description?: string\n icon?: string\n showButton?: boolean\n}\n\nfunction UploadArea({\n className,\n size = 'large',\n showButton = true,\n variant = 'default',\n showAcceptedFormats = true,\n buttonText = 'Selecionar arquivo',\n description = 'Clique ou solte os arquivos para fazer o upload',\n icon = 'upload',\n ...props\n}: UploadAreaProps) {\n const {\n onFilesChange,\n accept,\n multiple,\n disabled,\n maxFiles,\n maxSize,\n acceptedFormats\n } = useUploadContext()\n const [isDragOver, setIsDragOver] = useState(false)\n const fileInputRef = useRef<HTMLInputElement>(null)\n const [dragCounter, setDragCounter] = useState(0)\n\n const validateFiles = useCallback(\n (files: File[]): FileFormat[] => {\n let validFiles = files\n\n if (maxFiles && maxFiles > 0) {\n validFiles = validFiles.slice(0, maxFiles)\n }\n\n if (maxSize) {\n validFiles = validFiles.filter(file => file.size <= maxSize)\n }\n\n if (accept) {\n validFiles = validFiles.filter(file => {\n const fileExtension = `.${file.name.split('.').pop()?.toLowerCase()}`\n return acceptedFormats?.some(format =>\n format.startsWith('.')\n ? format === fileExtension\n : file.type.includes(format)\n )\n })\n }\n\n return validFiles.map(file => ({\n name: file.name,\n type: file.type,\n fileBinary: file,\n restrict: false\n }))\n },\n [maxFiles, maxSize, accept, acceptedFormats]\n )\n\n const handleDragEnter = useCallback((e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setDragCounter(prev => prev + 1)\n setIsDragOver(true)\n }, [])\n\n const handleDragLeave = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setDragCounter(prev => prev - 1)\n if (dragCounter <= 1) {\n setIsDragOver(false)\n }\n },\n [dragCounter]\n )\n\n const handleDragOver = useCallback((e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n }, [])\n\n const handleDrop = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragOver(false)\n setDragCounter(0)\n\n if (disabled) return\n\n const files = Array.from(e.dataTransfer.files)\n const validFiles = validateFiles(files)\n\n if (validFiles.length > 0) {\n onFilesChange?.(validFiles)\n }\n },\n [disabled, onFilesChange, validateFiles]\n )\n\n const handleFileSelect = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (disabled) return\n\n const files = Array.from(e.target.files || [])\n const validFiles = validateFiles(files)\n\n if (validFiles.length > 0) {\n onFilesChange?.(validFiles)\n }\n },\n [disabled, onFilesChange, validateFiles]\n )\n\n return (\n <UploadAreaTrigger\n {...props}\n aria-disabled={disabled}\n aria-label={description}\n className={cx(\n uploadAreaVariants({ size, showButton, variant }),\n className\n )}\n data-drag-over={isDragOver}\n fileInputRef={fileInputRef}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <input\n accept={accept}\n className=\"hidden\"\n disabled={disabled}\n multiple={multiple}\n ref={fileInputRef}\n type=\"file\"\n onChange={handleFileSelect}\n />\n\n <UploadAreaContent\n buttonText={buttonText}\n description={description}\n icon={icon}\n showAcceptedFormats={showAcceptedFormats}\n showButton={showButton}\n variant={variant || 'default'}\n onButtonClick={() => {\n if (!disabled && fileInputRef.current) {\n fileInputRef.current.click()\n }\n }}\n />\n </UploadAreaTrigger>\n )\n}\n\nfunction UploadTitle({ children, className, ...props }: ComponentProps<'h3'>) {\n return (\n <h3\n className={cx('text-neutral-dark text-lg font-semibold', className)}\n {...props}\n >\n {children}\n </h3>\n )\n}\n\ninterface UploadAreaContentProps extends ComponentProps<'div'> {\n description?: string\n icon?: string\n showAcceptedFormats?: boolean\n buttonText?: string\n showButton?: boolean\n onButtonClick?: () => void\n variant?:\n | 'default'\n | 'transparent'\n | 'minimal'\n | 'oneLineWhite'\n | 'oneLineTransparent'\n}\n\nfunction UploadAreaContent({\n description = 'Clique ou solte os arquivos para fazer o upload',\n icon = 'upload',\n showAcceptedFormats = true,\n buttonText = 'Selecionar arquivo',\n showButton = true,\n onButtonClick,\n variant = 'default',\n className,\n ...props\n}: UploadAreaContentProps) {\n const { acceptedFormats } = useUploadContext()\n\n const formatAcceptedFormats = () => {\n if (!showAcceptedFormats) return null\n\n return (\n <p className=\"text-neutral-secondary mt-2 text-sm\">\n Formatos aceitos: {acceptedFormats?.join(' ')}\n </p>\n )\n }\n\n const isOneLineVariant =\n variant === 'oneLineWhite' || variant === 'oneLineTransparent'\n\n if (isOneLineVariant) {\n return (\n <div\n {...props}\n className={cx(\n 'flex h-full items-center justify-center gap-4 text-center',\n className\n )}\n >\n <Icon\n className=\"text-neutral-secondary text-4xl\"\n name={icon as IconType}\n />\n <p className=\"text-neutral-dark text-base font-medium\">{description}</p>\n {formatAcceptedFormats()}\n </div>\n )\n }\n\n return (\n <div\n {...props}\n className={cx(\n 'flex h-full w-full flex-col items-center gap-4 text-center',\n className\n )}\n >\n <div className=\"flex flex-col items-center\">\n <Icon\n className=\"text-neutral-secondary mb-3 text-4xl\"\n name={icon as IconType}\n />\n\n <p className=\"text-neutral-dark mb-2 text-base font-medium\">\n {description}\n </p>\n\n {formatAcceptedFormats()}\n </div>\n\n {showButton && (\n <div>\n <Button\n size=\"md\"\n variant=\"primary\"\n onClick={e => {\n e.stopPropagation()\n onButtonClick?.()\n }}\n >\n {buttonText}\n </Button>\n </div>\n )}\n </div>\n )\n}\n\ninterface UploadAreaTriggerProps extends ComponentProps<'div'> {\n fileInputRef?: React.RefObject<HTMLInputElement | null>\n}\n\nfunction UploadAreaTrigger({\n children,\n fileInputRef,\n ...props\n}: UploadAreaTriggerProps) {\n const { disabled } = useUploadContext()\n\n const handleClick = useCallback(() => {\n if (!disabled && fileInputRef?.current) {\n fileInputRef.current.click()\n }\n }, [disabled, fileInputRef])\n\n return (\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onClick={handleClick}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n {...props}\n >\n {children}\n </div>\n )\n}\n\ninterface EditableFilesListProps {\n fileTypeOptions?: FileTypeOption[]\n onUpdateFile?: (index: number, file: Partial<FileFormat>) => void\n onDeleteFile?: (index: number) => void\n onReorderFiles?: (fromIndex: number, toIndex: number) => void\n className?: string\n}\n\nfunction EditableFilesList({\n fileTypeOptions = [\n { value: 'document', label: 'Documento' },\n { value: 'image', label: 'Imagem' },\n { value: 'video', label: 'Vídeo' },\n { value: 'audio', label: 'Áudio' },\n { value: 'other', label: 'Outro' }\n ],\n onUpdateFile,\n onDeleteFile,\n className,\n ...props\n}: EditableFilesListProps) {\n const { files, onFilesChange } = useUploadContext()\n\n if (!files || files.length === 0) return null\n\n const handleDescriptionChange = (index: number, description: string) => {\n if (onUpdateFile) {\n onUpdateFile(index, { description })\n } else {\n const updatedFiles = [...files]\n updatedFiles[index] = { ...updatedFiles[index], description }\n onFilesChange?.(updatedFiles)\n }\n }\n\n const handleFileTypeChange = (index: number, fileType: string) => {\n if (onUpdateFile) {\n onUpdateFile(index, { fileType })\n } else {\n const updatedFiles = [...files]\n updatedFiles[index] = { ...updatedFiles[index], fileType }\n onFilesChange?.(updatedFiles)\n }\n }\n\n const handleRestrictChange = (index: number, restrict: boolean) => {\n if (onUpdateFile) {\n onUpdateFile(index, { restrict })\n } else {\n const updatedFiles = [...files]\n updatedFiles[index] = { ...updatedFiles[index], restrict }\n onFilesChange?.(updatedFiles)\n }\n }\n\n const handleDelete = (index: number) => {\n if (onDeleteFile) {\n onDeleteFile(index)\n } else {\n const updatedFiles = files.filter((_, i) => i !== index)\n onFilesChange?.(updatedFiles)\n }\n }\n\n return (\n <div className={cx('space-y-2', className)} {...props}>\n <div className=\"border-border-layer-2 p-4\">\n <div className=\"border-border-layer-2 mb-3 flex w-full flex-row items-center justify-between gap-4 border-b pb-2\">\n <div className=\"w-full\">\n <span className=\"text-sm font-medium text-gray-300\">Descrição</span>\n </div>\n <div className=\"w-full\">\n <span className=\"text-sm font-medium text-gray-300\">Tipo</span>\n </div>\n <div className=\"flex justify-end\">\n <span className=\"text-sm font-medium text-gray-300\">Restrito</span>\n </div>\n </div>\n\n <div className=\"space-y-3\">\n {files.map((file, index) => (\n <div className=\"flex flex-row items-center gap-4 py-3\" key={index}>\n <div className=\"flex justify-start\">\n <Icon\n className=\"text-neutral-secondary hover:text-neutral-dark cursor-grab\"\n name=\"drag_indicator\"\n />\n </div>\n\n <div className=\"w-full\">\n <InputRoot>\n <InputContent>\n <InputText\n placeholder=\"Nome do arquivo\"\n value={file.description || file.name}\n onChange={e =>\n handleDescriptionChange(index, e.target.value)\n }\n />\n </InputContent>\n </InputRoot>\n </div>\n\n <div className=\"w-full\">\n <SelectRoot>\n <SelectTrigger className=\"flex justify-between\">\n <span className=\"text-neutral-dark\">\n {fileTypeOptions.find(\n option => option.value === file.fileType\n )?.label || 'Tipo'}\n </span>\n <Icon\n className=\"text-neutral-secondary\"\n name=\"keyboard_arrow_down\"\n />\n </SelectTrigger>\n <SelectContent>\n {fileTypeOptions.map(option => (\n <SelectOption\n key={option.value}\n value={option.value}\n onSelect={() =>\n handleFileTypeChange(index, option.value)\n }\n >\n {option.label}\n </SelectOption>\n ))}\n </SelectContent>\n </SelectRoot>\n </div>\n\n <div className=\"flex justify-end\">\n <Switch\n checked={file.restrict || false}\n onCheckedChange={checked =>\n handleRestrictChange(index, checked)\n }\n />\n </div>\n\n <div className=\"flex justify-end\">\n <Button\n appearance=\"ghost\"\n size=\"sm\"\n variant=\"destructive\"\n onClick={() => handleDelete(index)}\n >\n <Icon name=\"delete\" />\n </Button>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n}\n\nexport const Upload = {\n Root: UploadRoot,\n Area: UploadArea,\n Title: UploadTitle,\n AreaContent: UploadAreaContent,\n AreaTrigger: UploadAreaTrigger,\n EditableList: EditableFilesList\n}\n\nexport { UploadRoot }\nexport { UploadArea }\nexport { UploadTitle }\nexport { UploadAreaContent }\nexport { UploadAreaTrigger }\nexport { EditableFilesList }\nexport { uploadAreaVariants }\nexport type {\n UploadRootProps,\n UploadAreaProps,\n UploadAreaContentProps,\n UploadAreaTriggerProps,\n EditableFilesListProps\n}\n"]}
|