@g4rcez/components 1.1.1 → 1.2.0

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.
@@ -0,0 +1,3 @@
1
+ import { PropsWithChildren } from "react";
2
+ export declare const Heading: (props: PropsWithChildren) => import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=heading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heading.d.ts","sourceRoot":"","sources":["../../../../src/components/core/heading.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAG1C,eAAO,MAAM,OAAO,GAAI,OAAO,iBAAiB,4CAE/C,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Polymorph } from "./polymorph";
3
+ export const Heading = (props) => {
4
+ return _jsx(Polymorph, { as: "h2", children: props.children });
5
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../../src/components/floating/menu.tsx"],"names":[],"mappings":"AA0BA,OAAO,EAAoB,WAAW,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,KAA2E,MAAM,OAAO,CAAC;AA6BhG,MAAM,MAAM,SAAS,GAAG,OAAO,CAC3B;IACI,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,KAAK,CAAC,WAAW,CAAC;CACxC,GAAG,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CACzE,CAAC;AAkKF,KAAK,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;CAAE,CAAC;AAE1F,eAAO,MAAM,QAAQ,oKAmCpB,CAAC;AAEF,eAAO,MAAM,IAAI;WAnNF,OAAO;WACP,OAAO;YACN,OAAO;aACN,OAAO;cACN,OAAO;kBACH,OAAO;cACX,KAAK,CAAC,SAAS;uBACN,MAAM;uBACN,KAAK,CAAC,WAAW;;WAC1B,MAAM;;WATT,OAAO;WACP,OAAO;YACN,OAAO;aACN,OAAO;cACN,OAAO;kBACH,OAAO;cACX,KAAK,CAAC,SAAS;uBACN,MAAM;uBACN,KAAK,CAAC,WAAW;;WACN,KAAK,CAAC,YAAY;WAAS,MAAM;qDAmNrE,CAAC"}
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../../src/components/floating/menu.tsx"],"names":[],"mappings":"AA0BA,OAAO,EAAoB,WAAW,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,KAA2E,MAAM,OAAO,CAAC;AA6BhG,MAAM,MAAM,SAAS,GAAG,OAAO,CAC3B;IACI,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,KAAK,CAAC,WAAW,CAAC;CACxC,GAAG,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CACzE,CAAC;AA0KF,KAAK,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;CAAE,CAAC;AAE1F,eAAO,MAAM,QAAQ,oKAmCpB,CAAC;AAEF,eAAO,MAAM,IAAI;WA3NF,OAAO;WACP,OAAO;YACN,OAAO;aACN,OAAO;cACN,OAAO;kBACH,OAAO;cACX,KAAK,CAAC,SAAS;uBACN,MAAM;uBACN,KAAK,CAAC,WAAW;;WAC1B,MAAM;;WATT,OAAO;WACP,OAAO;YACN,OAAO;aACN,OAAO;cACN,OAAO;kBACH,OAAO;cACX,KAAK,CAAC,SAAS;uBACN,MAAM;uBACN,KAAK,CAAC,WAAW;;WACN,KAAK,CAAC,YAAY;WAAS,MAAM;qDA2NrE,CAAC"}
@@ -118,5 +118,5 @@ export const MenuItem = React.forwardRef(({ title, Right, disabled, children, ..
118
118
  });
119
119
  export const Menu = React.forwardRef((props, ref) => {
120
120
  const parentId = useFloatingParentNodeId();
121
- return parentId !== null ? (_jsx(MenuComponent, { ...props, isParent: false, ref: ref })) : (_jsx(FloatingTree, { children: _jsx(MenuComponent, { ...props, isParent: true, ref: ref }) }));
121
+ return parentId === null ? (_jsx(FloatingTree, { children: _jsx(MenuComponent, { ...props, isParent: true, ref: ref }) })) : (_jsx(MenuComponent, { ...props, isParent: false, ref: ref }));
122
122
  });
@@ -2,10 +2,10 @@ import React from "react";
2
2
  import { DropzoneProps } from "react-dropzone";
3
3
  import { Override } from "sidekicker";
4
4
  type Props = Override<React.ComponentProps<"input">, DropzoneProps> & {
5
- onDeleteFile?: (file: File) => void;
6
5
  files?: File[];
7
6
  idle?: React.ReactElement;
8
7
  onDrop?: (file: File[]) => void;
8
+ onDeleteFile?: (file: File) => void;
9
9
  };
10
10
  export declare const FileUpload: ({ idle, onDeleteFile, onDrop, ...props }: Props) => import("react/jsx-runtime").JSX.Element;
11
11
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"file-upload.d.ts","sourceRoot":"","sources":["../../../../src/components/form/file-upload.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAwC,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAe,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,KAAK,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,GAAG;IAClE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACpC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;CACnC,CAAC;AAmGF,eAAO,MAAM,UAAU,GAAI,0CAAwD,KAAK,4CAiBvF,CAAC"}
1
+ {"version":3,"file":"file-upload.d.ts","sourceRoot":"","sources":["../../../../src/components/form/file-upload.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAmE,MAAM,OAAO,CAAC;AACxF,OAAO,EAAE,aAAa,EAAe,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAatC,KAAK,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,GAAG;IAClE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;CACvC,CAAC;AA6HF,eAAO,MAAM,UAAU,GAAI,0CAAwD,KAAK,4CA8BvF,CAAC"}
@@ -1,57 +1,90 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { FileIcon, Trash2Icon, UploadIcon } from "lucide-react";
3
+ import { AudioLinesIcon, FileIcon, FileJsonIcon, FileTextIcon, FileVideo2, FolderIcon, FolderOpenIcon, SheetIcon, XIcon, } from "lucide-react";
4
4
  import prettyBytes from "pretty-bytes";
5
- import { Fragment, useEffect, useState } from "react";
5
+ import { createContext, Fragment, useContext, useEffect, useState } from "react";
6
6
  import { useDropzone } from "react-dropzone";
7
- import { Button } from "../core/button";
8
- const mime = {
9
- isImage: (file) => file.type.includes("image"),
7
+ import { useTranslations } from "../../hooks/use-translations";
8
+ import { Modal } from "../floating/modal";
9
+ const Context = createContext([null, () => { }]);
10
+ const useFileManager = () => useContext(Context);
11
+ const getMimeType = (file) => {
12
+ if (file.type.startsWith("image/"))
13
+ return "img";
14
+ if (file.type.startsWith("audio/"))
15
+ return "audio";
16
+ if (file.type.startsWith("video/"))
17
+ return "video";
18
+ return file.type;
10
19
  };
11
- const FileViewer = (props) => {
20
+ const extensionMap = {
21
+ csv: SheetIcon,
22
+ xls: SheetIcon,
23
+ mov: FileVideo2,
24
+ mp4: FileVideo2,
25
+ xlsx: SheetIcon,
26
+ pdf: FileTextIcon,
27
+ txt: FileTextIcon,
28
+ json: FileJsonIcon,
29
+ mp3: AudioLinesIcon,
30
+ };
31
+ const ItemViewer = (props) => {
32
+ const [, setManager] = useFileManager();
12
33
  const [info, setInfo] = useState({ url: "", type: "", size: "" });
13
34
  useEffect(() => {
14
- if (mime.isImage(props.file)) {
15
- const url = URL.createObjectURL(props.file);
16
- setInfo({ url, type: "img", size: prettyBytes(props.file.size) });
17
- return () => {
18
- URL.revokeObjectURL(url);
19
- };
20
- }
21
- setInfo({ url: "", type: props.file.type, size: prettyBytes(props.file.size) });
35
+ const file = props.file;
36
+ const url = URL.createObjectURL(file);
37
+ setInfo({ url, type: getMimeType(file), size: prettyBytes(file.size) });
38
+ return () => URL.revokeObjectURL(url);
22
39
  }, [props.file]);
23
- if (info.type === "img") {
24
- return (_jsxs("div", { className: "gap-jade-200 flex w-full flex-row items-center justify-between", children: [_jsxs("header", { className: "gap-jade-200 flex flex-row items-center", children: [_jsx("img", { src: info.url, className: "size-jade-500 rounded-jade-xsmall", alt: `Miniatura do arquivo ${props.file.name}` }), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { children: props.file.name }), _jsx("span", { children: info.size })] })] }), _jsx(Button, { className: "isolate", type: "button", theme: "raw", onClick: (e) => {
25
- e.stopPropagation();
26
- props.onDeleteFile?.(props.file);
27
- }, children: _jsx(Trash2Icon, {}) })] }));
28
- }
29
- return (_jsxs("div", { className: "gap-jade-200 flex w-full flex-row items-center justify-between", children: [_jsxs("header", { className: "flex flex-row items-center gap-4", children: [_jsx(FileIcon, { size: 48 }), _jsxs("div", { className: "flex flex-col items-start justify-start text-left", children: [_jsx("span", { children: props.file.name }), _jsx("span", { children: info.size })] })] }), _jsx(Button, { className: "isolate", type: "button", theme: "raw", onClick: (e) => {
30
- e.stopPropagation();
31
- props.onDeleteFile?.(props.file);
32
- }, children: _jsx(Trash2Icon, { className: "text-danger" }) })] }));
40
+ const onViewFile = (e) => {
41
+ e.stopPropagation();
42
+ e.preventDefault();
43
+ setManager({ ...info, file: props.file });
44
+ };
45
+ const onDeleteFile = (e) => {
46
+ e.preventDefault();
47
+ e.stopPropagation();
48
+ props.onDeleteFile?.(props.file);
49
+ };
50
+ const Icon = extensionMap[props.file.name.split(".").at(-1)] ?? FileIcon;
51
+ const Element = info.type === "img" ? (_jsx("img", { src: info.url, className: "block w-full", alt: props.file.name })) : (_jsx(Icon, { strokeWidth: 2, absoluteStrokeWidth: true, size: 48 }));
52
+ return (_jsxs("li", { className: "flex flex-row gap-4 justify-between items-center pb-6 w-full border-b border-card-border last:border-b-transparent", children: [_jsxs("header", { className: "flex flex-row gap-4 items-center", children: [_jsx("button", { type: "button", onClick: onViewFile, className: "flex justify-center items-center size-20", children: Element }), _jsxs("div", { className: "flex flex-col justify-start items-start text-left", children: [_jsx("span", { children: props.file.name }), _jsx("span", { className: "text-sm italic", children: info.size })] })] }), _jsx("button", { onClick: onDeleteFile, type: "button", className: "p-2 transition-colors duration-300 ease-linear hover:text-danger-hover", children: _jsx(XIcon, { size: 16 }) })] }));
33
53
  };
34
54
  const DefaultViewer = (props) => {
35
- return (_jsx("ul", { className: "space-y-jade-200 w-full", children: props.files.map((file) => {
36
- return _jsx(FileViewer, { onDeleteFile: props.onDeleteFile, file: file }, file.name);
55
+ return (_jsx("ul", { className: "space-y-8 w-full", children: props.files.map((file) => {
56
+ return _jsx(ItemViewer, { onDeleteFile: props.onDeleteFile, file: file }, file.name);
37
57
  }) }));
38
58
  };
59
+ const Idle = (props) => {
60
+ const t = useTranslations();
61
+ const Icon = props.dragging ? FolderOpenIcon : FolderIcon;
62
+ return (_jsxs("div", { className: "flex flex-col justify-center items-center", children: [_jsx("div", { className: "flex flex-col gap-2 justify-center items-center", children: _jsx(Icon, { className: "text-primary", size: 80 }) }), _jsxs("div", { className: "flex flex-col gap-1 items-center my-4", children: [_jsx("p", { children: t.uploadIdle }), _jsx("button", { className: "underline text-primary", type: "button", children: t.uploadIdleButton })] })] }));
63
+ };
39
64
  const InteractiveArea = (props) => {
40
- if (props.isDragActive) {
41
- return _jsx("p", { children: "Solte os arquivos selecionados" });
42
- }
65
+ if (props.isDragActive)
66
+ return _jsx(Idle, { files: props.files, dragging: true });
43
67
  if (props.files.length > 0) {
44
68
  return _jsx(DefaultViewer, { onDeleteFile: props.onDeleteFile, files: props.files });
45
69
  }
46
70
  return _jsx(Fragment, { children: props.idle });
47
71
  };
48
- const DefaultIdle = (_jsxs("div", { className: "flex flex-col items-center justify-center gap-4", children: [_jsx(UploadIcon, { size: 64 }), _jsxs("p", { children: ["You can drag your files or", " ", _jsx("button", { className: "text-primary underline", type: "button", children: "drag to here" })] })] }));
72
+ const DefaultIdle = _jsx(Idle, { dragging: false });
73
+ const FileViewer = (props) => {
74
+ const file = props.item.file;
75
+ const type = props.item.type;
76
+ return (_jsxs("div", { className: "flex flex-col gap-4", children: [_jsx("p", { className: "text-lg font-medium", children: props.item.file.name }), _jsx("p", { className: "text-base", children: props.item.size }), type === "img" ? (_jsx("img", { className: "container block w-80", src: props.item.url, alt: file.name })) : type === "video" ? (_jsx("video", { className: "container block w-80", src: props.item.url, controls: true, muted: true })) : type === "audio" ? _jsx("figure", { children: _jsx("audio", { controls: true, src: props.item.url }) }) : null] }));
77
+ };
49
78
  export const FileUpload = ({ idle = DefaultIdle, onDeleteFile, onDrop, ...props }) => {
79
+ const t = useTranslations();
80
+ const state = useState(null);
50
81
  const [files, setFiles] = useState([]);
82
+ const items = props.files ?? files;
83
+ const close = () => state[1](null);
51
84
  const drop = (x) => {
52
85
  onDrop?.(x);
53
- setFiles(x);
86
+ setFiles((prev) => prev.concat(x));
54
87
  };
55
88
  const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop: drop });
56
- return (_jsxs("div", { ...getRootProps(), "data-active": props.files?.length ? props.files.length > 0 : false, className: "flex flex-col items-center justify-center rounded-lg border-2 border-card-border p-6 text-foreground data-[active=true]:border-solid data-[active=false]:border-dashed data-[active=true]:bg-card-background", children: [_jsx("input", { ...getInputProps(props), name: props.name, id: props.name }), _jsx(InteractiveArea, { onDeleteFile: onDeleteFile, isDragActive: isDragActive, idle: idle, files: props.files ?? files })] }));
89
+ return (_jsxs(Context.Provider, { value: state, children: [_jsx(Modal, { overlayClickClose: true, title: t.uploadDialogTitle, ariaTitle: t.uploadDialogTitle, open: state[0] !== null, onChange: close, children: state[0] ? _jsx(FileViewer, { item: state[0] }) : null }), _jsxs("div", { ...getRootProps(), "data-active": items ? items.length > 0 : false, className: "flex flex-col border items-center justify-center rounded-lg border-card-border p-6 text-foreground data-[active=true]:border-solid data-[active=false]:border-dashed data-[active=true]:bg-card-background data-[active=true]:border-transparent", children: [_jsx("input", { ...getInputProps(props), name: props.name, id: props.name }), _jsx(InteractiveArea, { onDeleteFile: onDeleteFile, isDragActive: isDragActive, idle: idle, files: items })] })] }));
57
90
  };
@@ -56,6 +56,12 @@ export declare const defaultTranslations: {
56
56
  tableSortOrderInputTitle: string;
57
57
  tableSortTypeInputPlaceholder: string;
58
58
  tableSortTypeInputTitle: string;
59
+ uploadIdle: string;
60
+ uploadIdleButton: string;
61
+ uploadDragging: (props: {
62
+ n: number;
63
+ }) => string;
64
+ uploadDialogTitle: string;
59
65
  };
60
66
  export type Translations = typeof defaultTranslations;
61
67
  //# sourceMappingURL=default-translations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"default-translations.d.ts","sourceRoot":"","sources":["../../../src/config/default-translations.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAsCQ;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;;;;;;;;;;;;;CAkBxI,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,OAAO,mBAAmB,CAAC"}
1
+ {"version":3,"file":"default-translations.d.ts","sourceRoot":"","sources":["../../../src/config/default-translations.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAsCQ;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;;;;;;;;;;;;;;;4BAqB7G;QAAE,CAAC,EAAE,MAAM,CAAA;KAAE;;CAExC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,OAAO,mBAAmB,CAAC"}
@@ -51,4 +51,8 @@ export const defaultTranslations = {
51
51
  tableSortOrderInputTitle: "Order by",
52
52
  tableSortTypeInputPlaceholder: "Ascending",
53
53
  tableSortTypeInputTitle: "Sort type",
54
+ uploadIdle: "You can drag your files here",
55
+ uploadIdleButton: "Choose your files",
56
+ uploadDragging: (props) => `Dragging ${props.n} ${props.n > 0 ? "files" : "file"}`,
57
+ uploadDialogTitle: "Details of your file",
54
58
  };
@@ -55,5 +55,11 @@ export declare const useTranslations: () => {
55
55
  tableSortOrderInputTitle: string;
56
56
  tableSortTypeInputPlaceholder: string;
57
57
  tableSortTypeInputTitle: string;
58
+ uploadIdle: string;
59
+ uploadIdleButton: string;
60
+ uploadDragging: (props: {
61
+ n: number;
62
+ }) => string;
63
+ uploadDialogTitle: string;
58
64
  };
59
65
  //# sourceMappingURL=use-translations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-translations.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-translations.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAKs0C,CAAC;;;;;;;;;;;;;;;;CADl2C,CAAC"}
1
+ {"version":3,"file":"use-translations.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-translations.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAKs0C,CAAC;;;;;;;;;;;;;;;;;;;;;;CADl2C,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@g4rcez/components",
3
3
  "description": "Customizable react components.",
4
- "version": "1.1.1",
4
+ "version": "1.2.0",
5
5
  "sideEffects": false,
6
6
  "private": false,
7
7
  "packageManager": "pnpm@10.7.0",