@facter/ds-core 1.0.0 → 1.1.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.
package/dist/index.d.mts CHANGED
@@ -18,7 +18,14 @@ declare const inputVariants: (props?: ({
18
18
  inputSize?: "default" | "sm" | "lg" | null | undefined;
19
19
  } & class_variance_authority_types.ClassProp) | undefined) => string;
20
20
  interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>, VariantProps<typeof inputVariants> {
21
+ label?: string;
21
22
  error?: boolean;
23
+ icon?: React.ComponentType<{
24
+ className?: string;
25
+ onClick?: () => void;
26
+ }>;
27
+ containerClassName?: string;
28
+ labelClassName?: string;
22
29
  }
23
30
  declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
24
31
 
@@ -33,15 +40,6 @@ declare namespace Badge {
33
40
  var displayName: string;
34
41
  }
35
42
 
36
- declare const spinnerVariants: (props?: ({
37
- size?: "default" | "sm" | "lg" | "xl" | null | undefined;
38
- variant?: "secondary" | "primary" | "white" | "muted" | null | undefined;
39
- } & class_variance_authority_types.ClassProp) | undefined) => string;
40
- interface SpinnerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'>, VariantProps<typeof spinnerVariants> {
41
- label?: string;
42
- }
43
- declare const Spinner: React.ForwardRefExoticComponent<SpinnerProps & React.RefAttributes<HTMLDivElement>>;
44
-
45
43
  declare const loaderVariants: (props?: ({
46
44
  variant?: "default" | "spinner" | "dots" | "pulse" | "bars" | null | undefined;
47
45
  scope?: "global" | "local" | null | undefined;
@@ -83,4 +81,4 @@ declare function GlobalLoaderController(): null;
83
81
  */
84
82
  declare function cn(...inputs: ClassValue[]): string;
85
83
 
86
- export { Badge, type BadgeProps, Button, type ButtonProps, GlobalLoaderController, Input, type InputProps, Loader, type LoaderProps, LoaderProvider, Spinner, type SpinnerProps, cn, loader, useLoader };
84
+ export { Badge, type BadgeProps, Button, type ButtonProps, GlobalLoaderController, Input, type InputProps, Loader, type LoaderProps, LoaderProvider, cn, loader, useLoader };
package/dist/index.d.ts CHANGED
@@ -18,7 +18,14 @@ declare const inputVariants: (props?: ({
18
18
  inputSize?: "default" | "sm" | "lg" | null | undefined;
19
19
  } & class_variance_authority_types.ClassProp) | undefined) => string;
20
20
  interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>, VariantProps<typeof inputVariants> {
21
+ label?: string;
21
22
  error?: boolean;
23
+ icon?: React.ComponentType<{
24
+ className?: string;
25
+ onClick?: () => void;
26
+ }>;
27
+ containerClassName?: string;
28
+ labelClassName?: string;
22
29
  }
23
30
  declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
24
31
 
@@ -33,15 +40,6 @@ declare namespace Badge {
33
40
  var displayName: string;
34
41
  }
35
42
 
36
- declare const spinnerVariants: (props?: ({
37
- size?: "default" | "sm" | "lg" | "xl" | null | undefined;
38
- variant?: "secondary" | "primary" | "white" | "muted" | null | undefined;
39
- } & class_variance_authority_types.ClassProp) | undefined) => string;
40
- interface SpinnerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'>, VariantProps<typeof spinnerVariants> {
41
- label?: string;
42
- }
43
- declare const Spinner: React.ForwardRefExoticComponent<SpinnerProps & React.RefAttributes<HTMLDivElement>>;
44
-
45
43
  declare const loaderVariants: (props?: ({
46
44
  variant?: "default" | "spinner" | "dots" | "pulse" | "bars" | null | undefined;
47
45
  scope?: "global" | "local" | null | undefined;
@@ -83,4 +81,4 @@ declare function GlobalLoaderController(): null;
83
81
  */
84
82
  declare function cn(...inputs: ClassValue[]): string;
85
83
 
86
- export { Badge, type BadgeProps, Button, type ButtonProps, GlobalLoaderController, Input, type InputProps, Loader, type LoaderProps, LoaderProvider, Spinner, type SpinnerProps, cn, loader, useLoader };
84
+ export { Badge, type BadgeProps, Button, type ButtonProps, GlobalLoaderController, Input, type InputProps, Loader, type LoaderProps, LoaderProvider, cn, loader, useLoader };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var React5 = require('react');
3
+ var React4 = require('react');
4
4
  var classVarianceAuthority = require('class-variance-authority');
5
5
  var clsx = require('clsx');
6
6
  var tailwindMerge = require('tailwind-merge');
@@ -25,7 +25,7 @@ function _interopNamespace(e) {
25
25
  return Object.freeze(n);
26
26
  }
27
27
 
28
- var React5__namespace = /*#__PURE__*/_interopNamespace(React5);
28
+ var React4__namespace = /*#__PURE__*/_interopNamespace(React4);
29
29
 
30
30
  // src/components/Button/Button.tsx
31
31
  function cn(...inputs) {
@@ -55,7 +55,7 @@ var buttonVariants = classVarianceAuthority.cva(
55
55
  }
56
56
  }
57
57
  );
58
- var Button = React5__namespace.forwardRef(
58
+ var Button = React4__namespace.forwardRef(
59
59
  ({ className, variant, size, ...props }, ref) => {
60
60
  return /* @__PURE__ */ jsxRuntime.jsx(
61
61
  "button",
@@ -69,17 +69,17 @@ var Button = React5__namespace.forwardRef(
69
69
  );
70
70
  Button.displayName = "Button";
71
71
  var inputVariants = classVarianceAuthority.cva(
72
- "flex w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-colors",
72
+ "w-full h-12 px-3 pt-4 pb-2 text-sm bg-background rounded-md border-2 transition-colors focus:outline-none focus:ring-0 disabled:cursor-not-allowed disabled:opacity-50",
73
73
  {
74
74
  variants: {
75
75
  variant: {
76
- default: "border-gray-300 focus-visible:ring-primary",
77
- error: "border-red-500 focus-visible:ring-red-500"
76
+ default: "border-border focus:border-primary",
77
+ error: "border-red-500 focus:border-red-600"
78
78
  },
79
79
  inputSize: {
80
- default: "h-10",
81
- sm: "h-9 text-xs",
82
- lg: "h-11"
80
+ default: "h-12",
81
+ sm: "h-10 pt-3 pb-1",
82
+ lg: "h-14 pt-5 pb-2"
83
83
  }
84
84
  },
85
85
  defaultVariants: {
@@ -88,23 +88,127 @@ var inputVariants = classVarianceAuthority.cva(
88
88
  }
89
89
  }
90
90
  );
91
- var Input = React5__namespace.forwardRef(
92
- ({ className, variant, inputSize, error, type = "text", ...props }, ref) => {
93
- return /* @__PURE__ */ jsxRuntime.jsx(
94
- "input",
95
- {
96
- type,
97
- className: cn(
98
- inputVariants({
99
- variant: error ? "error" : variant,
100
- inputSize,
91
+ var Input = React4__namespace.forwardRef(
92
+ ({
93
+ className,
94
+ variant,
95
+ inputSize,
96
+ error,
97
+ type = "text",
98
+ label,
99
+ icon: Icon,
100
+ required,
101
+ containerClassName,
102
+ labelClassName,
103
+ ...props
104
+ }, ref) => {
105
+ const inputRef = React4__namespace.useRef(null);
106
+ const [showPassword, setShowPassword] = React4__namespace.useState(false);
107
+ React4__namespace.useImperativeHandle(ref, () => inputRef.current, []);
108
+ const focusInput = React4__namespace.useCallback(() => {
109
+ inputRef.current?.focus();
110
+ }, []);
111
+ const togglePasswordVisibility = React4__namespace.useCallback(() => {
112
+ setShowPassword((prev) => !prev);
113
+ }, []);
114
+ const inputType = type === "password" ? showPassword ? "text" : "password" : type;
115
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative", containerClassName), children: [
116
+ Icon && /* @__PURE__ */ jsxRuntime.jsx(
117
+ Icon,
118
+ {
119
+ className: "absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground h-4 w-4 cursor-pointer z-10",
120
+ onClick: focusInput
121
+ }
122
+ ),
123
+ /* @__PURE__ */ jsxRuntime.jsx(
124
+ "input",
125
+ {
126
+ type: inputType,
127
+ className: cn(
128
+ inputVariants({
129
+ variant: error ? "error" : variant,
130
+ inputSize
131
+ }),
132
+ Icon && "pl-10",
133
+ type === "password" && "pr-11",
101
134
  className
102
- })
103
- ),
104
- ref,
105
- ...props
106
- }
107
- );
135
+ ),
136
+ ref: inputRef,
137
+ ...props
138
+ }
139
+ ),
140
+ label && /* @__PURE__ */ jsxRuntime.jsxs(
141
+ "label",
142
+ {
143
+ className: cn(
144
+ "absolute left-3 top-[-6px] text-xs font-medium bg-background px-1 cursor-pointer",
145
+ error ? "text-red-500" : "text-foreground",
146
+ Icon && "left-10",
147
+ labelClassName
148
+ ),
149
+ onClick: focusInput,
150
+ children: [
151
+ label,
152
+ required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-red-500 ml-0.5", children: "*" })
153
+ ]
154
+ }
155
+ ),
156
+ type === "password" && /* @__PURE__ */ jsxRuntime.jsx(
157
+ "button",
158
+ {
159
+ type: "button",
160
+ onClick: togglePasswordVisibility,
161
+ className: "absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors z-10",
162
+ "aria-label": showPassword ? "Ocultar senha" : "Mostrar senha",
163
+ children: showPassword ? /* @__PURE__ */ jsxRuntime.jsxs(
164
+ "svg",
165
+ {
166
+ className: "h-5 w-5",
167
+ fill: "none",
168
+ viewBox: "0 0 24 24",
169
+ stroke: "currentColor",
170
+ children: [
171
+ /* @__PURE__ */ jsxRuntime.jsx(
172
+ "path",
173
+ {
174
+ strokeLinecap: "round",
175
+ strokeLinejoin: "round",
176
+ strokeWidth: 2,
177
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
178
+ }
179
+ ),
180
+ /* @__PURE__ */ jsxRuntime.jsx(
181
+ "path",
182
+ {
183
+ strokeLinecap: "round",
184
+ strokeLinejoin: "round",
185
+ strokeWidth: 2,
186
+ d: "M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"
187
+ }
188
+ )
189
+ ]
190
+ }
191
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
192
+ "svg",
193
+ {
194
+ className: "h-5 w-5",
195
+ fill: "none",
196
+ viewBox: "0 0 24 24",
197
+ stroke: "currentColor",
198
+ children: /* @__PURE__ */ jsxRuntime.jsx(
199
+ "path",
200
+ {
201
+ strokeLinecap: "round",
202
+ strokeLinejoin: "round",
203
+ strokeWidth: 2,
204
+ d: "M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21"
205
+ }
206
+ )
207
+ }
208
+ )
209
+ }
210
+ )
211
+ ] });
108
212
  }
109
213
  );
110
214
  Input.displayName = "Input";
@@ -137,42 +241,6 @@ function Badge({ className, variant, size, ...props }) {
137
241
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(badgeVariants({ variant, size }), className), ...props });
138
242
  }
139
243
  Badge.displayName = "Badge";
140
- var spinnerVariants = classVarianceAuthority.cva("animate-spin rounded-full border-2 border-current border-t-transparent", {
141
- variants: {
142
- size: {
143
- sm: "h-4 w-4",
144
- default: "h-6 w-6",
145
- lg: "h-8 w-8",
146
- xl: "h-12 w-12"
147
- },
148
- variant: {
149
- primary: "text-primary",
150
- secondary: "text-secondary",
151
- white: "text-white",
152
- muted: "text-muted-foreground"
153
- }
154
- },
155
- defaultVariants: {
156
- size: "default",
157
- variant: "primary"
158
- }
159
- });
160
- var Spinner = React5__namespace.forwardRef(
161
- ({ className, size, variant, label = "Loading...", ...props }, ref) => {
162
- return /* @__PURE__ */ jsxRuntime.jsx(
163
- "div",
164
- {
165
- ref,
166
- role: "status",
167
- "aria-label": label,
168
- className: cn(spinnerVariants({ size, variant }), className),
169
- ...props,
170
- children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: label })
171
- }
172
- );
173
- }
174
- );
175
- Spinner.displayName = "Spinner";
176
244
  var loaderVariants = classVarianceAuthority.cva("flex items-center justify-center backdrop-blur-sm", {
177
245
  variants: {
178
246
  variant: {
@@ -270,7 +338,7 @@ function BarsLoader() {
270
338
  i
271
339
  )) });
272
340
  }
273
- var Loader = React5__namespace.forwardRef(
341
+ var Loader = React4__namespace.forwardRef(
274
342
  ({
275
343
  variant = "default",
276
344
  message,
@@ -320,21 +388,21 @@ var Loader = React5__namespace.forwardRef(
320
388
  }
321
389
  );
322
390
  Loader.displayName = "Loader";
323
- var LoaderContext = React5__namespace.createContext(
391
+ var LoaderContext = React4__namespace.createContext(
324
392
  void 0
325
393
  );
326
394
  function LoaderProvider({ children }) {
327
- const [isLoading, setIsLoading] = React5__namespace.useState(false);
328
- const [loaderOptions, setLoaderOptions] = React5__namespace.useState({});
329
- const show = React5__namespace.useCallback((options = {}) => {
395
+ const [isLoading, setIsLoading] = React4__namespace.useState(false);
396
+ const [loaderOptions, setLoaderOptions] = React4__namespace.useState({});
397
+ const show = React4__namespace.useCallback((options = {}) => {
330
398
  setLoaderOptions(options);
331
399
  setIsLoading(true);
332
400
  }, []);
333
- const hide = React5__namespace.useCallback(() => {
401
+ const hide = React4__namespace.useCallback(() => {
334
402
  setIsLoading(false);
335
403
  setTimeout(() => setLoaderOptions({}), 300);
336
404
  }, []);
337
- const value = React5__namespace.useMemo(
405
+ const value = React4__namespace.useMemo(
338
406
  () => ({ show, hide, isLoading }),
339
407
  [show, hide, isLoading]
340
408
  );
@@ -353,7 +421,7 @@ function LoaderProvider({ children }) {
353
421
  ] });
354
422
  }
355
423
  function useLoader() {
356
- const context = React5__namespace.useContext(LoaderContext);
424
+ const context = React4__namespace.useContext(LoaderContext);
357
425
  if (context === void 0) {
358
426
  throw new Error("useLoader must be used within a LoaderProvider");
359
427
  }
@@ -385,7 +453,7 @@ var loader = {
385
453
  };
386
454
  function GlobalLoaderController() {
387
455
  const loaderController = useLoader();
388
- React5__namespace.useEffect(() => {
456
+ React4__namespace.useEffect(() => {
389
457
  setGlobalLoader(loaderController);
390
458
  return () => {
391
459
  setGlobalLoader(null);
@@ -400,7 +468,6 @@ exports.GlobalLoaderController = GlobalLoaderController;
400
468
  exports.Input = Input;
401
469
  exports.Loader = Loader;
402
470
  exports.LoaderProvider = LoaderProvider;
403
- exports.Spinner = Spinner;
404
471
  exports.cn = cn;
405
472
  exports.loader = loader;
406
473
  exports.useLoader = useLoader;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/cn.ts","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/Badge/Badge.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Loader/Loader.tsx","../src/components/Loader/LoaderContext.tsx"],"names":["twMerge","clsx","cva","React","jsx","React2","React3","motion","React4","AnimatePresence","jsxs","React5"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from 'clsx'\r\nimport { twMerge } from 'tailwind-merge'\r\n\r\n/**\r\n * Merge Tailwind CSS classes\r\n * Combines clsx (conditional classes) with tailwind-merge (deduplicates classes)\r\n *\r\n * @example\r\n * cn('px-4 py-2', isActive && 'bg-primary', className)\r\n */\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst buttonVariants = cva(\r\n 'inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\r\n {\r\n variants: {\r\n variant: {\r\n default: 'bg-primary text-white hover:bg-primary/90',\r\n destructive: 'bg-red-600 text-white hover:bg-red-700',\r\n outline: 'border border-input hover:bg-accent hover:text-accent-foreground',\r\n ghost: 'hover:bg-accent hover:text-accent-foreground',\r\n link: 'text-primary underline-offset-4 hover:underline',\r\n },\r\n size: {\r\n default: 'h-10 px-4 py-2',\r\n sm: 'h-9 px-3',\r\n lg: 'h-11 px-8',\r\n icon: 'h-10 w-10',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n size: 'default',\r\n },\r\n }\r\n)\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean\r\n}\r\n\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className, variant, size, ...props }, ref) => {\r\n return (\r\n <button\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n ref={ref}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\n\r\nButton.displayName = 'Button'\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst inputVariants = cva(\r\n 'flex w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-colors',\r\n {\r\n variants: {\r\n variant: {\r\n default: 'border-gray-300 focus-visible:ring-primary',\r\n error: 'border-red-500 focus-visible:ring-red-500',\r\n },\r\n inputSize: {\r\n default: 'h-10',\r\n sm: 'h-9 text-xs',\r\n lg: 'h-11',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n inputSize: 'default',\r\n },\r\n }\r\n)\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\r\n VariantProps<typeof inputVariants> {\r\n error?: boolean\r\n}\r\n\r\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n ({ className, variant, inputSize, error, type = 'text', ...props }, ref) => {\r\n return (\r\n <input\r\n type={type}\r\n className={cn(\r\n inputVariants({\r\n variant: error ? 'error' : variant,\r\n inputSize,\r\n className,\r\n })\r\n )}\r\n ref={ref}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\n\r\nInput.displayName = 'Input'\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst badgeVariants = cva(\r\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\r\n {\r\n variants: {\r\n variant: {\r\n default:\r\n 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\r\n secondary:\r\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\r\n success:\r\n 'border-transparent bg-green-500 text-white hover:bg-green-600',\r\n warning:\r\n 'border-transparent bg-yellow-500 text-white hover:bg-yellow-600',\r\n error: 'border-transparent bg-red-500 text-white hover:bg-red-600',\r\n info: 'border-transparent bg-blue-500 text-white hover:bg-blue-600',\r\n outline: 'border-gray-300 text-foreground hover:bg-gray-100',\r\n },\r\n size: {\r\n default: 'px-2.5 py-0.5 text-xs',\r\n sm: 'px-2 py-0.5 text-[10px]',\r\n lg: 'px-3 py-1 text-sm',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n size: 'default',\r\n },\r\n }\r\n)\r\n\r\nexport interface BadgeProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof badgeVariants> {}\r\n\r\nexport function Badge({ className, variant, size, ...props }: BadgeProps) {\r\n return (\r\n <div className={cn(badgeVariants({ variant, size }), className)} {...props} />\r\n )\r\n}\r\n\r\nBadge.displayName = 'Badge'\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst spinnerVariants = cva('animate-spin rounded-full border-2 border-current border-t-transparent', {\r\n variants: {\r\n size: {\r\n sm: 'h-4 w-4',\r\n default: 'h-6 w-6',\r\n lg: 'h-8 w-8',\r\n xl: 'h-12 w-12',\r\n },\r\n variant: {\r\n primary: 'text-primary',\r\n secondary: 'text-secondary',\r\n white: 'text-white',\r\n muted: 'text-muted-foreground',\r\n },\r\n },\r\n defaultVariants: {\r\n size: 'default',\r\n variant: 'primary',\r\n },\r\n})\r\n\r\nexport interface SpinnerProps\r\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'>,\r\n VariantProps<typeof spinnerVariants> {\r\n label?: string\r\n}\r\n\r\nexport const Spinner = React.forwardRef<HTMLDivElement, SpinnerProps>(\r\n ({ className, size, variant, label = 'Loading...', ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"status\"\r\n aria-label={label}\r\n className={cn(spinnerVariants({ size, variant }), className)}\r\n {...props}\r\n >\r\n <span className=\"sr-only\">{label}</span>\r\n </div>\r\n )\r\n }\r\n)\r\n\r\nSpinner.displayName = 'Spinner'\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { motion, AnimatePresence } from 'framer-motion'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst loaderVariants = cva('flex items-center justify-center backdrop-blur-sm', {\r\n variants: {\r\n variant: {\r\n default: '',\r\n spinner: '',\r\n dots: '',\r\n pulse: '',\r\n bars: '',\r\n },\r\n scope: {\r\n global: 'fixed inset-0 z-[9999]',\r\n local: 'absolute inset-0 z-50',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n scope: 'global',\r\n },\r\n})\r\n\r\nexport interface LoaderProps extends VariantProps<typeof loaderVariants> {\r\n message?: string\r\n isTransparentBg?: boolean\r\n show?: boolean\r\n}\r\n\r\nconst containerVariants = {\r\n initial: { opacity: 0, scale: 0.9 },\r\n animate: { opacity: 1, scale: 1 },\r\n exit: { opacity: 0, scale: 0.9 },\r\n}\r\n\r\nfunction SpinnerLoader() {\r\n return (\r\n <motion.div\r\n className=\"h-12 w-12 rounded-full border-4 border-primary border-t-transparent\"\r\n animate={{ rotate: 360 }}\r\n transition={{ duration: 1, repeat: Infinity, ease: 'linear' }}\r\n />\r\n )\r\n}\r\n\r\nfunction DotsLoader() {\r\n return (\r\n <div className=\"flex space-x-2\">\r\n {[0, 1, 2].map((i) => (\r\n <motion.div\r\n key={i}\r\n className=\"h-3 w-3 rounded-full bg-primary\"\r\n initial={{ scale: 0 }}\r\n animate={{ scale: [0, 1, 0] }}\r\n transition={{\r\n duration: 1,\r\n repeat: Infinity,\r\n delay: i * 0.2,\r\n ease: 'easeInOut',\r\n }}\r\n />\r\n ))}\r\n </div>\r\n )\r\n}\r\n\r\nfunction PulseLoader() {\r\n return (\r\n <motion.div\r\n className=\"h-12 w-12 rounded-full bg-primary/20\"\r\n initial={{ scale: 0.8 }}\r\n animate={{ scale: 1, opacity: [1, 0.5, 1] }}\r\n transition={{\r\n duration: 1.5,\r\n repeat: Infinity,\r\n ease: 'easeInOut',\r\n }}\r\n >\r\n <motion.div\r\n className=\"h-full w-full rounded-full bg-primary/40\"\r\n initial={{ scale: 0.8 }}\r\n animate={{ scale: 1, opacity: [1, 0, 1] }}\r\n transition={{\r\n duration: 1.5,\r\n repeat: Infinity,\r\n ease: 'easeInOut',\r\n delay: 0.2,\r\n }}\r\n />\r\n </motion.div>\r\n )\r\n}\r\n\r\nfunction BarsLoader() {\r\n return (\r\n <div className=\"flex items-center space-x-1\">\r\n {[0, 1, 2, 3].map((i) => (\r\n <motion.div\r\n key={i}\r\n className=\"h-8 w-1 rounded-full bg-primary\"\r\n initial={{ scaleY: 0.3 }}\r\n animate={{ scaleY: [0.3, 1, 0.3] }}\r\n transition={{\r\n duration: 0.8,\r\n repeat: Infinity,\r\n delay: i * 0.1,\r\n ease: 'easeInOut',\r\n }}\r\n />\r\n ))}\r\n </div>\r\n )\r\n}\r\n\r\nexport const Loader = React.forwardRef<HTMLDivElement, LoaderProps>(\r\n (\r\n {\r\n variant = 'default',\r\n message,\r\n scope = 'global',\r\n isTransparentBg = true,\r\n show = true,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const loaderComponents = {\r\n default: <SpinnerLoader />,\r\n spinner: <SpinnerLoader />,\r\n dots: <DotsLoader />,\r\n pulse: <PulseLoader />,\r\n bars: <BarsLoader />,\r\n }\r\n\r\n if (!show) return null\r\n\r\n return (\r\n <AnimatePresence>\r\n <motion.div\r\n ref={ref}\r\n className={cn(\r\n loaderVariants({ variant, scope }),\r\n isTransparentBg ? 'bg-background/90' : 'bg-background'\r\n )}\r\n initial=\"initial\"\r\n animate=\"animate\"\r\n exit=\"exit\"\r\n variants={containerVariants}\r\n transition={{ duration: 0.2 }}\r\n {...props}\r\n >\r\n <div className=\"flex flex-col items-center gap-4\">\r\n {loaderComponents[variant || 'default']}\r\n {message && (\r\n <motion.p\r\n className=\"text-lg text-muted-foreground\"\r\n initial={{ opacity: 0, y: 10 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -10 }}\r\n transition={{ delay: 0.1 }}\r\n >\r\n {message}\r\n </motion.p>\r\n )}\r\n </div>\r\n </motion.div>\r\n </AnimatePresence>\r\n )\r\n }\r\n)\r\n\r\nLoader.displayName = 'Loader'\r\n","import * as React from 'react'\r\nimport { Loader, type LoaderProps } from './Loader'\r\n\r\ninterface LoaderContextValue {\r\n show: (options?: LoaderOptions) => void\r\n hide: () => void\r\n isLoading: boolean\r\n}\r\n\r\ninterface LoaderOptions {\r\n message?: string\r\n variant?: LoaderProps['variant']\r\n scope?: LoaderProps['scope']\r\n isTransparentBg?: boolean\r\n}\r\n\r\nconst LoaderContext = React.createContext<LoaderContextValue | undefined>(\r\n undefined\r\n)\r\n\r\nexport function LoaderProvider({ children }: { children: React.ReactNode }) {\r\n const [isLoading, setIsLoading] = React.useState(false)\r\n const [loaderOptions, setLoaderOptions] = React.useState<LoaderOptions>({})\r\n\r\n const show = React.useCallback((options: LoaderOptions = {}) => {\r\n setLoaderOptions(options)\r\n setIsLoading(true)\r\n }, [])\r\n\r\n const hide = React.useCallback(() => {\r\n setIsLoading(false)\r\n // Limpar opções após animação de saída\r\n setTimeout(() => setLoaderOptions({}), 300)\r\n }, [])\r\n\r\n const value = React.useMemo(\r\n () => ({ show, hide, isLoading }),\r\n [show, hide, isLoading]\r\n )\r\n\r\n return (\r\n <LoaderContext.Provider value={value}>\r\n {children}\r\n {isLoading && (\r\n <Loader\r\n variant={loaderOptions.variant}\r\n message={loaderOptions.message}\r\n scope={loaderOptions.scope}\r\n isTransparentBg={loaderOptions.isTransparentBg}\r\n show={isLoading}\r\n />\r\n )}\r\n </LoaderContext.Provider>\r\n )\r\n}\r\n\r\nexport function useLoader() {\r\n const context = React.useContext(LoaderContext)\r\n if (context === undefined) {\r\n throw new Error('useLoader must be used within a LoaderProvider')\r\n }\r\n return context\r\n}\r\n\r\n// Helper function para usar fora de componentes\r\nlet globalLoaderController: LoaderContextValue | null = null\r\n\r\nexport function setGlobalLoader(controller: LoaderContextValue) {\r\n globalLoaderController = controller\r\n}\r\n\r\nexport const loader = {\r\n show: (options?: LoaderOptions) => {\r\n if (globalLoaderController) {\r\n globalLoaderController.show(options)\r\n } else {\r\n console.warn(\r\n 'Loader: GlobalLoaderController not initialized. Wrap your app with LoaderProvider.'\r\n )\r\n }\r\n },\r\n hide: () => {\r\n if (globalLoaderController) {\r\n globalLoaderController.hide()\r\n } else {\r\n console.warn(\r\n 'Loader: GlobalLoaderController not initialized. Wrap your app with LoaderProvider.'\r\n )\r\n }\r\n },\r\n}\r\n\r\n// Component que registra o controller global\r\nexport function GlobalLoaderController() {\r\n const loaderController = useLoader()\r\n\r\n React.useEffect(() => {\r\n setGlobalLoader(loaderController)\r\n return () => {\r\n setGlobalLoader(null as any)\r\n }\r\n }, [loaderController])\r\n\r\n return null\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/utils/cn.ts","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/Badge/Badge.tsx","../src/components/Loader/Loader.tsx","../src/components/Loader/LoaderContext.tsx"],"names":["twMerge","clsx","cva","React","jsx","React2","jsxs","motion","React3","AnimatePresence","React4"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from 'clsx'\r\nimport { twMerge } from 'tailwind-merge'\r\n\r\n/**\r\n * Merge Tailwind CSS classes\r\n * Combines clsx (conditional classes) with tailwind-merge (deduplicates classes)\r\n *\r\n * @example\r\n * cn('px-4 py-2', isActive && 'bg-primary', className)\r\n */\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst buttonVariants = cva(\r\n 'inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\r\n {\r\n variants: {\r\n variant: {\r\n default: 'bg-primary text-white hover:bg-primary/90',\r\n destructive: 'bg-red-600 text-white hover:bg-red-700',\r\n outline: 'border border-input hover:bg-accent hover:text-accent-foreground',\r\n ghost: 'hover:bg-accent hover:text-accent-foreground',\r\n link: 'text-primary underline-offset-4 hover:underline',\r\n },\r\n size: {\r\n default: 'h-10 px-4 py-2',\r\n sm: 'h-9 px-3',\r\n lg: 'h-11 px-8',\r\n icon: 'h-10 w-10',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n size: 'default',\r\n },\r\n }\r\n)\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean\r\n}\r\n\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className, variant, size, ...props }, ref) => {\r\n return (\r\n <button\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n ref={ref}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\n\r\nButton.displayName = 'Button'\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst inputVariants = cva(\r\n 'w-full h-12 px-3 pt-4 pb-2 text-sm bg-background rounded-md border-2 transition-colors focus:outline-none focus:ring-0 disabled:cursor-not-allowed disabled:opacity-50',\r\n {\r\n variants: {\r\n variant: {\r\n default: 'border-border focus:border-primary',\r\n error: 'border-red-500 focus:border-red-600',\r\n },\r\n inputSize: {\r\n default: 'h-12',\r\n sm: 'h-10 pt-3 pb-1',\r\n lg: 'h-14 pt-5 pb-2',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n inputSize: 'default',\r\n },\r\n }\r\n)\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\r\n VariantProps<typeof inputVariants> {\r\n label?: string\r\n error?: boolean\r\n icon?: React.ComponentType<{ className?: string; onClick?: () => void }>\r\n containerClassName?: string\r\n labelClassName?: string\r\n}\r\n\r\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n (\r\n {\r\n className,\r\n variant,\r\n inputSize,\r\n error,\r\n type = 'text',\r\n label,\r\n icon: Icon,\r\n required,\r\n containerClassName,\r\n labelClassName,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const inputRef = React.useRef<HTMLInputElement | null>(null)\r\n const [showPassword, setShowPassword] = React.useState(false)\r\n\r\n React.useImperativeHandle(ref, () => inputRef.current!, [])\r\n\r\n const focusInput = React.useCallback(() => {\r\n inputRef.current?.focus()\r\n }, [])\r\n\r\n const togglePasswordVisibility = React.useCallback(() => {\r\n setShowPassword((prev) => !prev)\r\n }, [])\r\n\r\n const inputType = type === 'password' ? (showPassword ? 'text' : 'password') : type\r\n\r\n return (\r\n <div className={cn('relative', containerClassName)}>\r\n {/* Icon */}\r\n {Icon && (\r\n <Icon\r\n className=\"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground h-4 w-4 cursor-pointer z-10\"\r\n onClick={focusInput}\r\n />\r\n )}\r\n\r\n {/* Input */}\r\n <input\r\n type={inputType}\r\n className={cn(\r\n inputVariants({\r\n variant: error ? 'error' : variant,\r\n inputSize,\r\n }),\r\n Icon && 'pl-10',\r\n type === 'password' && 'pr-11',\r\n className\r\n )}\r\n ref={inputRef}\r\n {...props}\r\n />\r\n\r\n {/* Floating Label */}\r\n {label && (\r\n <label\r\n className={cn(\r\n 'absolute left-3 top-[-6px] text-xs font-medium bg-background px-1 cursor-pointer',\r\n error ? 'text-red-500' : 'text-foreground',\r\n Icon && 'left-10',\r\n labelClassName\r\n )}\r\n onClick={focusInput}\r\n >\r\n {label}\r\n {required && <span className=\"text-red-500 ml-0.5\">*</span>}\r\n </label>\r\n )}\r\n\r\n {/* Password Toggle */}\r\n {type === 'password' && (\r\n <button\r\n type=\"button\"\r\n onClick={togglePasswordVisibility}\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors z-10\"\r\n aria-label={showPassword ? 'Ocultar senha' : 'Mostrar senha'}\r\n >\r\n {showPassword ? (\r\n <svg\r\n className=\"h-5 w-5\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\r\n />\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\"\r\n />\r\n </svg>\r\n ) : (\r\n <svg\r\n className=\"h-5 w-5\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21\"\r\n />\r\n </svg>\r\n )}\r\n </button>\r\n )}\r\n </div>\r\n )\r\n }\r\n)\r\n\r\nInput.displayName = 'Input'\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst badgeVariants = cva(\r\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\r\n {\r\n variants: {\r\n variant: {\r\n default:\r\n 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\r\n secondary:\r\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\r\n success:\r\n 'border-transparent bg-green-500 text-white hover:bg-green-600',\r\n warning:\r\n 'border-transparent bg-yellow-500 text-white hover:bg-yellow-600',\r\n error: 'border-transparent bg-red-500 text-white hover:bg-red-600',\r\n info: 'border-transparent bg-blue-500 text-white hover:bg-blue-600',\r\n outline: 'border-gray-300 text-foreground hover:bg-gray-100',\r\n },\r\n size: {\r\n default: 'px-2.5 py-0.5 text-xs',\r\n sm: 'px-2 py-0.5 text-[10px]',\r\n lg: 'px-3 py-1 text-sm',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n size: 'default',\r\n },\r\n }\r\n)\r\n\r\nexport interface BadgeProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof badgeVariants> {}\r\n\r\nexport function Badge({ className, variant, size, ...props }: BadgeProps) {\r\n return (\r\n <div className={cn(badgeVariants({ variant, size }), className)} {...props} />\r\n )\r\n}\r\n\r\nBadge.displayName = 'Badge'\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { motion, AnimatePresence } from 'framer-motion'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst loaderVariants = cva('flex items-center justify-center backdrop-blur-sm', {\r\n variants: {\r\n variant: {\r\n default: '',\r\n spinner: '',\r\n dots: '',\r\n pulse: '',\r\n bars: '',\r\n },\r\n scope: {\r\n global: 'fixed inset-0 z-[9999]',\r\n local: 'absolute inset-0 z-50',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n scope: 'global',\r\n },\r\n})\r\n\r\nexport interface LoaderProps extends VariantProps<typeof loaderVariants> {\r\n message?: string\r\n isTransparentBg?: boolean\r\n show?: boolean\r\n}\r\n\r\nconst containerVariants = {\r\n initial: { opacity: 0, scale: 0.9 },\r\n animate: { opacity: 1, scale: 1 },\r\n exit: { opacity: 0, scale: 0.9 },\r\n}\r\n\r\nfunction SpinnerLoader() {\r\n return (\r\n <motion.div\r\n className=\"h-12 w-12 rounded-full border-4 border-primary border-t-transparent\"\r\n animate={{ rotate: 360 }}\r\n transition={{ duration: 1, repeat: Infinity, ease: 'linear' }}\r\n />\r\n )\r\n}\r\n\r\nfunction DotsLoader() {\r\n return (\r\n <div className=\"flex space-x-2\">\r\n {[0, 1, 2].map((i) => (\r\n <motion.div\r\n key={i}\r\n className=\"h-3 w-3 rounded-full bg-primary\"\r\n initial={{ scale: 0 }}\r\n animate={{ scale: [0, 1, 0] }}\r\n transition={{\r\n duration: 1,\r\n repeat: Infinity,\r\n delay: i * 0.2,\r\n ease: 'easeInOut',\r\n }}\r\n />\r\n ))}\r\n </div>\r\n )\r\n}\r\n\r\nfunction PulseLoader() {\r\n return (\r\n <motion.div\r\n className=\"h-12 w-12 rounded-full bg-primary/20\"\r\n initial={{ scale: 0.8 }}\r\n animate={{ scale: 1, opacity: [1, 0.5, 1] }}\r\n transition={{\r\n duration: 1.5,\r\n repeat: Infinity,\r\n ease: 'easeInOut',\r\n }}\r\n >\r\n <motion.div\r\n className=\"h-full w-full rounded-full bg-primary/40\"\r\n initial={{ scale: 0.8 }}\r\n animate={{ scale: 1, opacity: [1, 0, 1] }}\r\n transition={{\r\n duration: 1.5,\r\n repeat: Infinity,\r\n ease: 'easeInOut',\r\n delay: 0.2,\r\n }}\r\n />\r\n </motion.div>\r\n )\r\n}\r\n\r\nfunction BarsLoader() {\r\n return (\r\n <div className=\"flex items-center space-x-1\">\r\n {[0, 1, 2, 3].map((i) => (\r\n <motion.div\r\n key={i}\r\n className=\"h-8 w-1 rounded-full bg-primary\"\r\n initial={{ scaleY: 0.3 }}\r\n animate={{ scaleY: [0.3, 1, 0.3] }}\r\n transition={{\r\n duration: 0.8,\r\n repeat: Infinity,\r\n delay: i * 0.1,\r\n ease: 'easeInOut',\r\n }}\r\n />\r\n ))}\r\n </div>\r\n )\r\n}\r\n\r\nexport const Loader = React.forwardRef<HTMLDivElement, LoaderProps>(\r\n (\r\n {\r\n variant = 'default',\r\n message,\r\n scope = 'global',\r\n isTransparentBg = true,\r\n show = true,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const loaderComponents = {\r\n default: <SpinnerLoader />,\r\n spinner: <SpinnerLoader />,\r\n dots: <DotsLoader />,\r\n pulse: <PulseLoader />,\r\n bars: <BarsLoader />,\r\n }\r\n\r\n if (!show) return null\r\n\r\n return (\r\n <AnimatePresence>\r\n <motion.div\r\n ref={ref}\r\n className={cn(\r\n loaderVariants({ variant, scope }),\r\n isTransparentBg ? 'bg-background/90' : 'bg-background'\r\n )}\r\n initial=\"initial\"\r\n animate=\"animate\"\r\n exit=\"exit\"\r\n variants={containerVariants}\r\n transition={{ duration: 0.2 }}\r\n {...props}\r\n >\r\n <div className=\"flex flex-col items-center gap-4\">\r\n {loaderComponents[variant || 'default']}\r\n {message && (\r\n <motion.p\r\n className=\"text-lg text-muted-foreground\"\r\n initial={{ opacity: 0, y: 10 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -10 }}\r\n transition={{ delay: 0.1 }}\r\n >\r\n {message}\r\n </motion.p>\r\n )}\r\n </div>\r\n </motion.div>\r\n </AnimatePresence>\r\n )\r\n }\r\n)\r\n\r\nLoader.displayName = 'Loader'\r\n","import * as React from 'react'\r\nimport { Loader, type LoaderProps } from './Loader'\r\n\r\ninterface LoaderContextValue {\r\n show: (options?: LoaderOptions) => void\r\n hide: () => void\r\n isLoading: boolean\r\n}\r\n\r\ninterface LoaderOptions {\r\n message?: string\r\n variant?: LoaderProps['variant']\r\n scope?: LoaderProps['scope']\r\n isTransparentBg?: boolean\r\n}\r\n\r\nconst LoaderContext = React.createContext<LoaderContextValue | undefined>(\r\n undefined\r\n)\r\n\r\nexport function LoaderProvider({ children }: { children: React.ReactNode }) {\r\n const [isLoading, setIsLoading] = React.useState(false)\r\n const [loaderOptions, setLoaderOptions] = React.useState<LoaderOptions>({})\r\n\r\n const show = React.useCallback((options: LoaderOptions = {}) => {\r\n setLoaderOptions(options)\r\n setIsLoading(true)\r\n }, [])\r\n\r\n const hide = React.useCallback(() => {\r\n setIsLoading(false)\r\n // Limpar opções após animação de saída\r\n setTimeout(() => setLoaderOptions({}), 300)\r\n }, [])\r\n\r\n const value = React.useMemo(\r\n () => ({ show, hide, isLoading }),\r\n [show, hide, isLoading]\r\n )\r\n\r\n return (\r\n <LoaderContext.Provider value={value}>\r\n {children}\r\n {isLoading && (\r\n <Loader\r\n variant={loaderOptions.variant}\r\n message={loaderOptions.message}\r\n scope={loaderOptions.scope}\r\n isTransparentBg={loaderOptions.isTransparentBg}\r\n show={isLoading}\r\n />\r\n )}\r\n </LoaderContext.Provider>\r\n )\r\n}\r\n\r\nexport function useLoader() {\r\n const context = React.useContext(LoaderContext)\r\n if (context === undefined) {\r\n throw new Error('useLoader must be used within a LoaderProvider')\r\n }\r\n return context\r\n}\r\n\r\n// Helper function para usar fora de componentes\r\nlet globalLoaderController: LoaderContextValue | null = null\r\n\r\nexport function setGlobalLoader(controller: LoaderContextValue) {\r\n globalLoaderController = controller\r\n}\r\n\r\nexport const loader = {\r\n show: (options?: LoaderOptions) => {\r\n if (globalLoaderController) {\r\n globalLoaderController.show(options)\r\n } else {\r\n console.warn(\r\n 'Loader: GlobalLoaderController not initialized. Wrap your app with LoaderProvider.'\r\n )\r\n }\r\n },\r\n hide: () => {\r\n if (globalLoaderController) {\r\n globalLoaderController.hide()\r\n } else {\r\n console.warn(\r\n 'Loader: GlobalLoaderController not initialized. Wrap your app with LoaderProvider.'\r\n )\r\n }\r\n },\r\n}\r\n\r\n// Component que registra o controller global\r\nexport function GlobalLoaderController() {\r\n const loaderController = useLoader()\r\n\r\n React.useEffect(() => {\r\n setGlobalLoader(loaderController)\r\n return () => {\r\n setGlobalLoader(null as any)\r\n }\r\n }, [loaderController])\r\n\r\n return null\r\n}\r\n"]}
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import * as React5 from 'react';
1
+ import * as React4 from 'react';
2
2
  import { cva } from 'class-variance-authority';
3
3
  import { clsx } from 'clsx';
4
4
  import { twMerge } from 'tailwind-merge';
@@ -33,7 +33,7 @@ var buttonVariants = cva(
33
33
  }
34
34
  }
35
35
  );
36
- var Button = React5.forwardRef(
36
+ var Button = React4.forwardRef(
37
37
  ({ className, variant, size, ...props }, ref) => {
38
38
  return /* @__PURE__ */ jsx(
39
39
  "button",
@@ -47,17 +47,17 @@ var Button = React5.forwardRef(
47
47
  );
48
48
  Button.displayName = "Button";
49
49
  var inputVariants = cva(
50
- "flex w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-colors",
50
+ "w-full h-12 px-3 pt-4 pb-2 text-sm bg-background rounded-md border-2 transition-colors focus:outline-none focus:ring-0 disabled:cursor-not-allowed disabled:opacity-50",
51
51
  {
52
52
  variants: {
53
53
  variant: {
54
- default: "border-gray-300 focus-visible:ring-primary",
55
- error: "border-red-500 focus-visible:ring-red-500"
54
+ default: "border-border focus:border-primary",
55
+ error: "border-red-500 focus:border-red-600"
56
56
  },
57
57
  inputSize: {
58
- default: "h-10",
59
- sm: "h-9 text-xs",
60
- lg: "h-11"
58
+ default: "h-12",
59
+ sm: "h-10 pt-3 pb-1",
60
+ lg: "h-14 pt-5 pb-2"
61
61
  }
62
62
  },
63
63
  defaultVariants: {
@@ -66,23 +66,127 @@ var inputVariants = cva(
66
66
  }
67
67
  }
68
68
  );
69
- var Input = React5.forwardRef(
70
- ({ className, variant, inputSize, error, type = "text", ...props }, ref) => {
71
- return /* @__PURE__ */ jsx(
72
- "input",
73
- {
74
- type,
75
- className: cn(
76
- inputVariants({
77
- variant: error ? "error" : variant,
78
- inputSize,
69
+ var Input = React4.forwardRef(
70
+ ({
71
+ className,
72
+ variant,
73
+ inputSize,
74
+ error,
75
+ type = "text",
76
+ label,
77
+ icon: Icon,
78
+ required,
79
+ containerClassName,
80
+ labelClassName,
81
+ ...props
82
+ }, ref) => {
83
+ const inputRef = React4.useRef(null);
84
+ const [showPassword, setShowPassword] = React4.useState(false);
85
+ React4.useImperativeHandle(ref, () => inputRef.current, []);
86
+ const focusInput = React4.useCallback(() => {
87
+ inputRef.current?.focus();
88
+ }, []);
89
+ const togglePasswordVisibility = React4.useCallback(() => {
90
+ setShowPassword((prev) => !prev);
91
+ }, []);
92
+ const inputType = type === "password" ? showPassword ? "text" : "password" : type;
93
+ return /* @__PURE__ */ jsxs("div", { className: cn("relative", containerClassName), children: [
94
+ Icon && /* @__PURE__ */ jsx(
95
+ Icon,
96
+ {
97
+ className: "absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground h-4 w-4 cursor-pointer z-10",
98
+ onClick: focusInput
99
+ }
100
+ ),
101
+ /* @__PURE__ */ jsx(
102
+ "input",
103
+ {
104
+ type: inputType,
105
+ className: cn(
106
+ inputVariants({
107
+ variant: error ? "error" : variant,
108
+ inputSize
109
+ }),
110
+ Icon && "pl-10",
111
+ type === "password" && "pr-11",
79
112
  className
80
- })
81
- ),
82
- ref,
83
- ...props
84
- }
85
- );
113
+ ),
114
+ ref: inputRef,
115
+ ...props
116
+ }
117
+ ),
118
+ label && /* @__PURE__ */ jsxs(
119
+ "label",
120
+ {
121
+ className: cn(
122
+ "absolute left-3 top-[-6px] text-xs font-medium bg-background px-1 cursor-pointer",
123
+ error ? "text-red-500" : "text-foreground",
124
+ Icon && "left-10",
125
+ labelClassName
126
+ ),
127
+ onClick: focusInput,
128
+ children: [
129
+ label,
130
+ required && /* @__PURE__ */ jsx("span", { className: "text-red-500 ml-0.5", children: "*" })
131
+ ]
132
+ }
133
+ ),
134
+ type === "password" && /* @__PURE__ */ jsx(
135
+ "button",
136
+ {
137
+ type: "button",
138
+ onClick: togglePasswordVisibility,
139
+ className: "absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors z-10",
140
+ "aria-label": showPassword ? "Ocultar senha" : "Mostrar senha",
141
+ children: showPassword ? /* @__PURE__ */ jsxs(
142
+ "svg",
143
+ {
144
+ className: "h-5 w-5",
145
+ fill: "none",
146
+ viewBox: "0 0 24 24",
147
+ stroke: "currentColor",
148
+ children: [
149
+ /* @__PURE__ */ jsx(
150
+ "path",
151
+ {
152
+ strokeLinecap: "round",
153
+ strokeLinejoin: "round",
154
+ strokeWidth: 2,
155
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
156
+ }
157
+ ),
158
+ /* @__PURE__ */ jsx(
159
+ "path",
160
+ {
161
+ strokeLinecap: "round",
162
+ strokeLinejoin: "round",
163
+ strokeWidth: 2,
164
+ d: "M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"
165
+ }
166
+ )
167
+ ]
168
+ }
169
+ ) : /* @__PURE__ */ jsx(
170
+ "svg",
171
+ {
172
+ className: "h-5 w-5",
173
+ fill: "none",
174
+ viewBox: "0 0 24 24",
175
+ stroke: "currentColor",
176
+ children: /* @__PURE__ */ jsx(
177
+ "path",
178
+ {
179
+ strokeLinecap: "round",
180
+ strokeLinejoin: "round",
181
+ strokeWidth: 2,
182
+ d: "M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21"
183
+ }
184
+ )
185
+ }
186
+ )
187
+ }
188
+ )
189
+ ] });
86
190
  }
87
191
  );
88
192
  Input.displayName = "Input";
@@ -115,42 +219,6 @@ function Badge({ className, variant, size, ...props }) {
115
219
  return /* @__PURE__ */ jsx("div", { className: cn(badgeVariants({ variant, size }), className), ...props });
116
220
  }
117
221
  Badge.displayName = "Badge";
118
- var spinnerVariants = cva("animate-spin rounded-full border-2 border-current border-t-transparent", {
119
- variants: {
120
- size: {
121
- sm: "h-4 w-4",
122
- default: "h-6 w-6",
123
- lg: "h-8 w-8",
124
- xl: "h-12 w-12"
125
- },
126
- variant: {
127
- primary: "text-primary",
128
- secondary: "text-secondary",
129
- white: "text-white",
130
- muted: "text-muted-foreground"
131
- }
132
- },
133
- defaultVariants: {
134
- size: "default",
135
- variant: "primary"
136
- }
137
- });
138
- var Spinner = React5.forwardRef(
139
- ({ className, size, variant, label = "Loading...", ...props }, ref) => {
140
- return /* @__PURE__ */ jsx(
141
- "div",
142
- {
143
- ref,
144
- role: "status",
145
- "aria-label": label,
146
- className: cn(spinnerVariants({ size, variant }), className),
147
- ...props,
148
- children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: label })
149
- }
150
- );
151
- }
152
- );
153
- Spinner.displayName = "Spinner";
154
222
  var loaderVariants = cva("flex items-center justify-center backdrop-blur-sm", {
155
223
  variants: {
156
224
  variant: {
@@ -248,7 +316,7 @@ function BarsLoader() {
248
316
  i
249
317
  )) });
250
318
  }
251
- var Loader = React5.forwardRef(
319
+ var Loader = React4.forwardRef(
252
320
  ({
253
321
  variant = "default",
254
322
  message,
@@ -298,21 +366,21 @@ var Loader = React5.forwardRef(
298
366
  }
299
367
  );
300
368
  Loader.displayName = "Loader";
301
- var LoaderContext = React5.createContext(
369
+ var LoaderContext = React4.createContext(
302
370
  void 0
303
371
  );
304
372
  function LoaderProvider({ children }) {
305
- const [isLoading, setIsLoading] = React5.useState(false);
306
- const [loaderOptions, setLoaderOptions] = React5.useState({});
307
- const show = React5.useCallback((options = {}) => {
373
+ const [isLoading, setIsLoading] = React4.useState(false);
374
+ const [loaderOptions, setLoaderOptions] = React4.useState({});
375
+ const show = React4.useCallback((options = {}) => {
308
376
  setLoaderOptions(options);
309
377
  setIsLoading(true);
310
378
  }, []);
311
- const hide = React5.useCallback(() => {
379
+ const hide = React4.useCallback(() => {
312
380
  setIsLoading(false);
313
381
  setTimeout(() => setLoaderOptions({}), 300);
314
382
  }, []);
315
- const value = React5.useMemo(
383
+ const value = React4.useMemo(
316
384
  () => ({ show, hide, isLoading }),
317
385
  [show, hide, isLoading]
318
386
  );
@@ -331,7 +399,7 @@ function LoaderProvider({ children }) {
331
399
  ] });
332
400
  }
333
401
  function useLoader() {
334
- const context = React5.useContext(LoaderContext);
402
+ const context = React4.useContext(LoaderContext);
335
403
  if (context === void 0) {
336
404
  throw new Error("useLoader must be used within a LoaderProvider");
337
405
  }
@@ -363,7 +431,7 @@ var loader = {
363
431
  };
364
432
  function GlobalLoaderController() {
365
433
  const loaderController = useLoader();
366
- React5.useEffect(() => {
434
+ React4.useEffect(() => {
367
435
  setGlobalLoader(loaderController);
368
436
  return () => {
369
437
  setGlobalLoader(null);
@@ -372,6 +440,6 @@ function GlobalLoaderController() {
372
440
  return null;
373
441
  }
374
442
 
375
- export { Badge, Button, GlobalLoaderController, Input, Loader, LoaderProvider, Spinner, cn, loader, useLoader };
443
+ export { Badge, Button, GlobalLoaderController, Input, Loader, LoaderProvider, cn, loader, useLoader };
376
444
  //# sourceMappingURL=index.mjs.map
377
445
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/cn.ts","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/Badge/Badge.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Loader/Loader.tsx","../src/components/Loader/LoaderContext.tsx"],"names":["React","cva","React2","jsx","React3","React4","jsxs"],"mappings":"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","file":"index.mjs","sourcesContent":["import { type ClassValue, clsx } from 'clsx'\r\nimport { twMerge } from 'tailwind-merge'\r\n\r\n/**\r\n * Merge Tailwind CSS classes\r\n * Combines clsx (conditional classes) with tailwind-merge (deduplicates classes)\r\n *\r\n * @example\r\n * cn('px-4 py-2', isActive && 'bg-primary', className)\r\n */\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst buttonVariants = cva(\r\n 'inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\r\n {\r\n variants: {\r\n variant: {\r\n default: 'bg-primary text-white hover:bg-primary/90',\r\n destructive: 'bg-red-600 text-white hover:bg-red-700',\r\n outline: 'border border-input hover:bg-accent hover:text-accent-foreground',\r\n ghost: 'hover:bg-accent hover:text-accent-foreground',\r\n link: 'text-primary underline-offset-4 hover:underline',\r\n },\r\n size: {\r\n default: 'h-10 px-4 py-2',\r\n sm: 'h-9 px-3',\r\n lg: 'h-11 px-8',\r\n icon: 'h-10 w-10',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n size: 'default',\r\n },\r\n }\r\n)\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean\r\n}\r\n\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className, variant, size, ...props }, ref) => {\r\n return (\r\n <button\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n ref={ref}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\n\r\nButton.displayName = 'Button'\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst inputVariants = cva(\r\n 'flex w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-colors',\r\n {\r\n variants: {\r\n variant: {\r\n default: 'border-gray-300 focus-visible:ring-primary',\r\n error: 'border-red-500 focus-visible:ring-red-500',\r\n },\r\n inputSize: {\r\n default: 'h-10',\r\n sm: 'h-9 text-xs',\r\n lg: 'h-11',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n inputSize: 'default',\r\n },\r\n }\r\n)\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\r\n VariantProps<typeof inputVariants> {\r\n error?: boolean\r\n}\r\n\r\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n ({ className, variant, inputSize, error, type = 'text', ...props }, ref) => {\r\n return (\r\n <input\r\n type={type}\r\n className={cn(\r\n inputVariants({\r\n variant: error ? 'error' : variant,\r\n inputSize,\r\n className,\r\n })\r\n )}\r\n ref={ref}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\n\r\nInput.displayName = 'Input'\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst badgeVariants = cva(\r\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\r\n {\r\n variants: {\r\n variant: {\r\n default:\r\n 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\r\n secondary:\r\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\r\n success:\r\n 'border-transparent bg-green-500 text-white hover:bg-green-600',\r\n warning:\r\n 'border-transparent bg-yellow-500 text-white hover:bg-yellow-600',\r\n error: 'border-transparent bg-red-500 text-white hover:bg-red-600',\r\n info: 'border-transparent bg-blue-500 text-white hover:bg-blue-600',\r\n outline: 'border-gray-300 text-foreground hover:bg-gray-100',\r\n },\r\n size: {\r\n default: 'px-2.5 py-0.5 text-xs',\r\n sm: 'px-2 py-0.5 text-[10px]',\r\n lg: 'px-3 py-1 text-sm',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n size: 'default',\r\n },\r\n }\r\n)\r\n\r\nexport interface BadgeProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof badgeVariants> {}\r\n\r\nexport function Badge({ className, variant, size, ...props }: BadgeProps) {\r\n return (\r\n <div className={cn(badgeVariants({ variant, size }), className)} {...props} />\r\n )\r\n}\r\n\r\nBadge.displayName = 'Badge'\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst spinnerVariants = cva('animate-spin rounded-full border-2 border-current border-t-transparent', {\r\n variants: {\r\n size: {\r\n sm: 'h-4 w-4',\r\n default: 'h-6 w-6',\r\n lg: 'h-8 w-8',\r\n xl: 'h-12 w-12',\r\n },\r\n variant: {\r\n primary: 'text-primary',\r\n secondary: 'text-secondary',\r\n white: 'text-white',\r\n muted: 'text-muted-foreground',\r\n },\r\n },\r\n defaultVariants: {\r\n size: 'default',\r\n variant: 'primary',\r\n },\r\n})\r\n\r\nexport interface SpinnerProps\r\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'>,\r\n VariantProps<typeof spinnerVariants> {\r\n label?: string\r\n}\r\n\r\nexport const Spinner = React.forwardRef<HTMLDivElement, SpinnerProps>(\r\n ({ className, size, variant, label = 'Loading...', ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"status\"\r\n aria-label={label}\r\n className={cn(spinnerVariants({ size, variant }), className)}\r\n {...props}\r\n >\r\n <span className=\"sr-only\">{label}</span>\r\n </div>\r\n )\r\n }\r\n)\r\n\r\nSpinner.displayName = 'Spinner'\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { motion, AnimatePresence } from 'framer-motion'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst loaderVariants = cva('flex items-center justify-center backdrop-blur-sm', {\r\n variants: {\r\n variant: {\r\n default: '',\r\n spinner: '',\r\n dots: '',\r\n pulse: '',\r\n bars: '',\r\n },\r\n scope: {\r\n global: 'fixed inset-0 z-[9999]',\r\n local: 'absolute inset-0 z-50',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n scope: 'global',\r\n },\r\n})\r\n\r\nexport interface LoaderProps extends VariantProps<typeof loaderVariants> {\r\n message?: string\r\n isTransparentBg?: boolean\r\n show?: boolean\r\n}\r\n\r\nconst containerVariants = {\r\n initial: { opacity: 0, scale: 0.9 },\r\n animate: { opacity: 1, scale: 1 },\r\n exit: { opacity: 0, scale: 0.9 },\r\n}\r\n\r\nfunction SpinnerLoader() {\r\n return (\r\n <motion.div\r\n className=\"h-12 w-12 rounded-full border-4 border-primary border-t-transparent\"\r\n animate={{ rotate: 360 }}\r\n transition={{ duration: 1, repeat: Infinity, ease: 'linear' }}\r\n />\r\n )\r\n}\r\n\r\nfunction DotsLoader() {\r\n return (\r\n <div className=\"flex space-x-2\">\r\n {[0, 1, 2].map((i) => (\r\n <motion.div\r\n key={i}\r\n className=\"h-3 w-3 rounded-full bg-primary\"\r\n initial={{ scale: 0 }}\r\n animate={{ scale: [0, 1, 0] }}\r\n transition={{\r\n duration: 1,\r\n repeat: Infinity,\r\n delay: i * 0.2,\r\n ease: 'easeInOut',\r\n }}\r\n />\r\n ))}\r\n </div>\r\n )\r\n}\r\n\r\nfunction PulseLoader() {\r\n return (\r\n <motion.div\r\n className=\"h-12 w-12 rounded-full bg-primary/20\"\r\n initial={{ scale: 0.8 }}\r\n animate={{ scale: 1, opacity: [1, 0.5, 1] }}\r\n transition={{\r\n duration: 1.5,\r\n repeat: Infinity,\r\n ease: 'easeInOut',\r\n }}\r\n >\r\n <motion.div\r\n className=\"h-full w-full rounded-full bg-primary/40\"\r\n initial={{ scale: 0.8 }}\r\n animate={{ scale: 1, opacity: [1, 0, 1] }}\r\n transition={{\r\n duration: 1.5,\r\n repeat: Infinity,\r\n ease: 'easeInOut',\r\n delay: 0.2,\r\n }}\r\n />\r\n </motion.div>\r\n )\r\n}\r\n\r\nfunction BarsLoader() {\r\n return (\r\n <div className=\"flex items-center space-x-1\">\r\n {[0, 1, 2, 3].map((i) => (\r\n <motion.div\r\n key={i}\r\n className=\"h-8 w-1 rounded-full bg-primary\"\r\n initial={{ scaleY: 0.3 }}\r\n animate={{ scaleY: [0.3, 1, 0.3] }}\r\n transition={{\r\n duration: 0.8,\r\n repeat: Infinity,\r\n delay: i * 0.1,\r\n ease: 'easeInOut',\r\n }}\r\n />\r\n ))}\r\n </div>\r\n )\r\n}\r\n\r\nexport const Loader = React.forwardRef<HTMLDivElement, LoaderProps>(\r\n (\r\n {\r\n variant = 'default',\r\n message,\r\n scope = 'global',\r\n isTransparentBg = true,\r\n show = true,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const loaderComponents = {\r\n default: <SpinnerLoader />,\r\n spinner: <SpinnerLoader />,\r\n dots: <DotsLoader />,\r\n pulse: <PulseLoader />,\r\n bars: <BarsLoader />,\r\n }\r\n\r\n if (!show) return null\r\n\r\n return (\r\n <AnimatePresence>\r\n <motion.div\r\n ref={ref}\r\n className={cn(\r\n loaderVariants({ variant, scope }),\r\n isTransparentBg ? 'bg-background/90' : 'bg-background'\r\n )}\r\n initial=\"initial\"\r\n animate=\"animate\"\r\n exit=\"exit\"\r\n variants={containerVariants}\r\n transition={{ duration: 0.2 }}\r\n {...props}\r\n >\r\n <div className=\"flex flex-col items-center gap-4\">\r\n {loaderComponents[variant || 'default']}\r\n {message && (\r\n <motion.p\r\n className=\"text-lg text-muted-foreground\"\r\n initial={{ opacity: 0, y: 10 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -10 }}\r\n transition={{ delay: 0.1 }}\r\n >\r\n {message}\r\n </motion.p>\r\n )}\r\n </div>\r\n </motion.div>\r\n </AnimatePresence>\r\n )\r\n }\r\n)\r\n\r\nLoader.displayName = 'Loader'\r\n","import * as React from 'react'\r\nimport { Loader, type LoaderProps } from './Loader'\r\n\r\ninterface LoaderContextValue {\r\n show: (options?: LoaderOptions) => void\r\n hide: () => void\r\n isLoading: boolean\r\n}\r\n\r\ninterface LoaderOptions {\r\n message?: string\r\n variant?: LoaderProps['variant']\r\n scope?: LoaderProps['scope']\r\n isTransparentBg?: boolean\r\n}\r\n\r\nconst LoaderContext = React.createContext<LoaderContextValue | undefined>(\r\n undefined\r\n)\r\n\r\nexport function LoaderProvider({ children }: { children: React.ReactNode }) {\r\n const [isLoading, setIsLoading] = React.useState(false)\r\n const [loaderOptions, setLoaderOptions] = React.useState<LoaderOptions>({})\r\n\r\n const show = React.useCallback((options: LoaderOptions = {}) => {\r\n setLoaderOptions(options)\r\n setIsLoading(true)\r\n }, [])\r\n\r\n const hide = React.useCallback(() => {\r\n setIsLoading(false)\r\n // Limpar opções após animação de saída\r\n setTimeout(() => setLoaderOptions({}), 300)\r\n }, [])\r\n\r\n const value = React.useMemo(\r\n () => ({ show, hide, isLoading }),\r\n [show, hide, isLoading]\r\n )\r\n\r\n return (\r\n <LoaderContext.Provider value={value}>\r\n {children}\r\n {isLoading && (\r\n <Loader\r\n variant={loaderOptions.variant}\r\n message={loaderOptions.message}\r\n scope={loaderOptions.scope}\r\n isTransparentBg={loaderOptions.isTransparentBg}\r\n show={isLoading}\r\n />\r\n )}\r\n </LoaderContext.Provider>\r\n )\r\n}\r\n\r\nexport function useLoader() {\r\n const context = React.useContext(LoaderContext)\r\n if (context === undefined) {\r\n throw new Error('useLoader must be used within a LoaderProvider')\r\n }\r\n return context\r\n}\r\n\r\n// Helper function para usar fora de componentes\r\nlet globalLoaderController: LoaderContextValue | null = null\r\n\r\nexport function setGlobalLoader(controller: LoaderContextValue) {\r\n globalLoaderController = controller\r\n}\r\n\r\nexport const loader = {\r\n show: (options?: LoaderOptions) => {\r\n if (globalLoaderController) {\r\n globalLoaderController.show(options)\r\n } else {\r\n console.warn(\r\n 'Loader: GlobalLoaderController not initialized. Wrap your app with LoaderProvider.'\r\n )\r\n }\r\n },\r\n hide: () => {\r\n if (globalLoaderController) {\r\n globalLoaderController.hide()\r\n } else {\r\n console.warn(\r\n 'Loader: GlobalLoaderController not initialized. Wrap your app with LoaderProvider.'\r\n )\r\n }\r\n },\r\n}\r\n\r\n// Component que registra o controller global\r\nexport function GlobalLoaderController() {\r\n const loaderController = useLoader()\r\n\r\n React.useEffect(() => {\r\n setGlobalLoader(loaderController)\r\n return () => {\r\n setGlobalLoader(null as any)\r\n }\r\n }, [loaderController])\r\n\r\n return null\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/utils/cn.ts","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/Badge/Badge.tsx","../src/components/Loader/Loader.tsx","../src/components/Loader/LoaderContext.tsx"],"names":["React","cva","React2","jsx","React3","jsxs"],"mappings":"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","file":"index.mjs","sourcesContent":["import { type ClassValue, clsx } from 'clsx'\r\nimport { twMerge } from 'tailwind-merge'\r\n\r\n/**\r\n * Merge Tailwind CSS classes\r\n * Combines clsx (conditional classes) with tailwind-merge (deduplicates classes)\r\n *\r\n * @example\r\n * cn('px-4 py-2', isActive && 'bg-primary', className)\r\n */\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst buttonVariants = cva(\r\n 'inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\r\n {\r\n variants: {\r\n variant: {\r\n default: 'bg-primary text-white hover:bg-primary/90',\r\n destructive: 'bg-red-600 text-white hover:bg-red-700',\r\n outline: 'border border-input hover:bg-accent hover:text-accent-foreground',\r\n ghost: 'hover:bg-accent hover:text-accent-foreground',\r\n link: 'text-primary underline-offset-4 hover:underline',\r\n },\r\n size: {\r\n default: 'h-10 px-4 py-2',\r\n sm: 'h-9 px-3',\r\n lg: 'h-11 px-8',\r\n icon: 'h-10 w-10',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n size: 'default',\r\n },\r\n }\r\n)\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean\r\n}\r\n\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className, variant, size, ...props }, ref) => {\r\n return (\r\n <button\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n ref={ref}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\n\r\nButton.displayName = 'Button'\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst inputVariants = cva(\r\n 'w-full h-12 px-3 pt-4 pb-2 text-sm bg-background rounded-md border-2 transition-colors focus:outline-none focus:ring-0 disabled:cursor-not-allowed disabled:opacity-50',\r\n {\r\n variants: {\r\n variant: {\r\n default: 'border-border focus:border-primary',\r\n error: 'border-red-500 focus:border-red-600',\r\n },\r\n inputSize: {\r\n default: 'h-12',\r\n sm: 'h-10 pt-3 pb-1',\r\n lg: 'h-14 pt-5 pb-2',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n inputSize: 'default',\r\n },\r\n }\r\n)\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\r\n VariantProps<typeof inputVariants> {\r\n label?: string\r\n error?: boolean\r\n icon?: React.ComponentType<{ className?: string; onClick?: () => void }>\r\n containerClassName?: string\r\n labelClassName?: string\r\n}\r\n\r\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n (\r\n {\r\n className,\r\n variant,\r\n inputSize,\r\n error,\r\n type = 'text',\r\n label,\r\n icon: Icon,\r\n required,\r\n containerClassName,\r\n labelClassName,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const inputRef = React.useRef<HTMLInputElement | null>(null)\r\n const [showPassword, setShowPassword] = React.useState(false)\r\n\r\n React.useImperativeHandle(ref, () => inputRef.current!, [])\r\n\r\n const focusInput = React.useCallback(() => {\r\n inputRef.current?.focus()\r\n }, [])\r\n\r\n const togglePasswordVisibility = React.useCallback(() => {\r\n setShowPassword((prev) => !prev)\r\n }, [])\r\n\r\n const inputType = type === 'password' ? (showPassword ? 'text' : 'password') : type\r\n\r\n return (\r\n <div className={cn('relative', containerClassName)}>\r\n {/* Icon */}\r\n {Icon && (\r\n <Icon\r\n className=\"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground h-4 w-4 cursor-pointer z-10\"\r\n onClick={focusInput}\r\n />\r\n )}\r\n\r\n {/* Input */}\r\n <input\r\n type={inputType}\r\n className={cn(\r\n inputVariants({\r\n variant: error ? 'error' : variant,\r\n inputSize,\r\n }),\r\n Icon && 'pl-10',\r\n type === 'password' && 'pr-11',\r\n className\r\n )}\r\n ref={inputRef}\r\n {...props}\r\n />\r\n\r\n {/* Floating Label */}\r\n {label && (\r\n <label\r\n className={cn(\r\n 'absolute left-3 top-[-6px] text-xs font-medium bg-background px-1 cursor-pointer',\r\n error ? 'text-red-500' : 'text-foreground',\r\n Icon && 'left-10',\r\n labelClassName\r\n )}\r\n onClick={focusInput}\r\n >\r\n {label}\r\n {required && <span className=\"text-red-500 ml-0.5\">*</span>}\r\n </label>\r\n )}\r\n\r\n {/* Password Toggle */}\r\n {type === 'password' && (\r\n <button\r\n type=\"button\"\r\n onClick={togglePasswordVisibility}\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors z-10\"\r\n aria-label={showPassword ? 'Ocultar senha' : 'Mostrar senha'}\r\n >\r\n {showPassword ? (\r\n <svg\r\n className=\"h-5 w-5\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\r\n />\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\"\r\n />\r\n </svg>\r\n ) : (\r\n <svg\r\n className=\"h-5 w-5\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21\"\r\n />\r\n </svg>\r\n )}\r\n </button>\r\n )}\r\n </div>\r\n )\r\n }\r\n)\r\n\r\nInput.displayName = 'Input'\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst badgeVariants = cva(\r\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\r\n {\r\n variants: {\r\n variant: {\r\n default:\r\n 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\r\n secondary:\r\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\r\n success:\r\n 'border-transparent bg-green-500 text-white hover:bg-green-600',\r\n warning:\r\n 'border-transparent bg-yellow-500 text-white hover:bg-yellow-600',\r\n error: 'border-transparent bg-red-500 text-white hover:bg-red-600',\r\n info: 'border-transparent bg-blue-500 text-white hover:bg-blue-600',\r\n outline: 'border-gray-300 text-foreground hover:bg-gray-100',\r\n },\r\n size: {\r\n default: 'px-2.5 py-0.5 text-xs',\r\n sm: 'px-2 py-0.5 text-[10px]',\r\n lg: 'px-3 py-1 text-sm',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n size: 'default',\r\n },\r\n }\r\n)\r\n\r\nexport interface BadgeProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof badgeVariants> {}\r\n\r\nexport function Badge({ className, variant, size, ...props }: BadgeProps) {\r\n return (\r\n <div className={cn(badgeVariants({ variant, size }), className)} {...props} />\r\n )\r\n}\r\n\r\nBadge.displayName = 'Badge'\r\n","import * as React from 'react'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { motion, AnimatePresence } from 'framer-motion'\r\nimport { cn } from '../../utils/cn'\r\n\r\nconst loaderVariants = cva('flex items-center justify-center backdrop-blur-sm', {\r\n variants: {\r\n variant: {\r\n default: '',\r\n spinner: '',\r\n dots: '',\r\n pulse: '',\r\n bars: '',\r\n },\r\n scope: {\r\n global: 'fixed inset-0 z-[9999]',\r\n local: 'absolute inset-0 z-50',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n scope: 'global',\r\n },\r\n})\r\n\r\nexport interface LoaderProps extends VariantProps<typeof loaderVariants> {\r\n message?: string\r\n isTransparentBg?: boolean\r\n show?: boolean\r\n}\r\n\r\nconst containerVariants = {\r\n initial: { opacity: 0, scale: 0.9 },\r\n animate: { opacity: 1, scale: 1 },\r\n exit: { opacity: 0, scale: 0.9 },\r\n}\r\n\r\nfunction SpinnerLoader() {\r\n return (\r\n <motion.div\r\n className=\"h-12 w-12 rounded-full border-4 border-primary border-t-transparent\"\r\n animate={{ rotate: 360 }}\r\n transition={{ duration: 1, repeat: Infinity, ease: 'linear' }}\r\n />\r\n )\r\n}\r\n\r\nfunction DotsLoader() {\r\n return (\r\n <div className=\"flex space-x-2\">\r\n {[0, 1, 2].map((i) => (\r\n <motion.div\r\n key={i}\r\n className=\"h-3 w-3 rounded-full bg-primary\"\r\n initial={{ scale: 0 }}\r\n animate={{ scale: [0, 1, 0] }}\r\n transition={{\r\n duration: 1,\r\n repeat: Infinity,\r\n delay: i * 0.2,\r\n ease: 'easeInOut',\r\n }}\r\n />\r\n ))}\r\n </div>\r\n )\r\n}\r\n\r\nfunction PulseLoader() {\r\n return (\r\n <motion.div\r\n className=\"h-12 w-12 rounded-full bg-primary/20\"\r\n initial={{ scale: 0.8 }}\r\n animate={{ scale: 1, opacity: [1, 0.5, 1] }}\r\n transition={{\r\n duration: 1.5,\r\n repeat: Infinity,\r\n ease: 'easeInOut',\r\n }}\r\n >\r\n <motion.div\r\n className=\"h-full w-full rounded-full bg-primary/40\"\r\n initial={{ scale: 0.8 }}\r\n animate={{ scale: 1, opacity: [1, 0, 1] }}\r\n transition={{\r\n duration: 1.5,\r\n repeat: Infinity,\r\n ease: 'easeInOut',\r\n delay: 0.2,\r\n }}\r\n />\r\n </motion.div>\r\n )\r\n}\r\n\r\nfunction BarsLoader() {\r\n return (\r\n <div className=\"flex items-center space-x-1\">\r\n {[0, 1, 2, 3].map((i) => (\r\n <motion.div\r\n key={i}\r\n className=\"h-8 w-1 rounded-full bg-primary\"\r\n initial={{ scaleY: 0.3 }}\r\n animate={{ scaleY: [0.3, 1, 0.3] }}\r\n transition={{\r\n duration: 0.8,\r\n repeat: Infinity,\r\n delay: i * 0.1,\r\n ease: 'easeInOut',\r\n }}\r\n />\r\n ))}\r\n </div>\r\n )\r\n}\r\n\r\nexport const Loader = React.forwardRef<HTMLDivElement, LoaderProps>(\r\n (\r\n {\r\n variant = 'default',\r\n message,\r\n scope = 'global',\r\n isTransparentBg = true,\r\n show = true,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const loaderComponents = {\r\n default: <SpinnerLoader />,\r\n spinner: <SpinnerLoader />,\r\n dots: <DotsLoader />,\r\n pulse: <PulseLoader />,\r\n bars: <BarsLoader />,\r\n }\r\n\r\n if (!show) return null\r\n\r\n return (\r\n <AnimatePresence>\r\n <motion.div\r\n ref={ref}\r\n className={cn(\r\n loaderVariants({ variant, scope }),\r\n isTransparentBg ? 'bg-background/90' : 'bg-background'\r\n )}\r\n initial=\"initial\"\r\n animate=\"animate\"\r\n exit=\"exit\"\r\n variants={containerVariants}\r\n transition={{ duration: 0.2 }}\r\n {...props}\r\n >\r\n <div className=\"flex flex-col items-center gap-4\">\r\n {loaderComponents[variant || 'default']}\r\n {message && (\r\n <motion.p\r\n className=\"text-lg text-muted-foreground\"\r\n initial={{ opacity: 0, y: 10 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -10 }}\r\n transition={{ delay: 0.1 }}\r\n >\r\n {message}\r\n </motion.p>\r\n )}\r\n </div>\r\n </motion.div>\r\n </AnimatePresence>\r\n )\r\n }\r\n)\r\n\r\nLoader.displayName = 'Loader'\r\n","import * as React from 'react'\r\nimport { Loader, type LoaderProps } from './Loader'\r\n\r\ninterface LoaderContextValue {\r\n show: (options?: LoaderOptions) => void\r\n hide: () => void\r\n isLoading: boolean\r\n}\r\n\r\ninterface LoaderOptions {\r\n message?: string\r\n variant?: LoaderProps['variant']\r\n scope?: LoaderProps['scope']\r\n isTransparentBg?: boolean\r\n}\r\n\r\nconst LoaderContext = React.createContext<LoaderContextValue | undefined>(\r\n undefined\r\n)\r\n\r\nexport function LoaderProvider({ children }: { children: React.ReactNode }) {\r\n const [isLoading, setIsLoading] = React.useState(false)\r\n const [loaderOptions, setLoaderOptions] = React.useState<LoaderOptions>({})\r\n\r\n const show = React.useCallback((options: LoaderOptions = {}) => {\r\n setLoaderOptions(options)\r\n setIsLoading(true)\r\n }, [])\r\n\r\n const hide = React.useCallback(() => {\r\n setIsLoading(false)\r\n // Limpar opções após animação de saída\r\n setTimeout(() => setLoaderOptions({}), 300)\r\n }, [])\r\n\r\n const value = React.useMemo(\r\n () => ({ show, hide, isLoading }),\r\n [show, hide, isLoading]\r\n )\r\n\r\n return (\r\n <LoaderContext.Provider value={value}>\r\n {children}\r\n {isLoading && (\r\n <Loader\r\n variant={loaderOptions.variant}\r\n message={loaderOptions.message}\r\n scope={loaderOptions.scope}\r\n isTransparentBg={loaderOptions.isTransparentBg}\r\n show={isLoading}\r\n />\r\n )}\r\n </LoaderContext.Provider>\r\n )\r\n}\r\n\r\nexport function useLoader() {\r\n const context = React.useContext(LoaderContext)\r\n if (context === undefined) {\r\n throw new Error('useLoader must be used within a LoaderProvider')\r\n }\r\n return context\r\n}\r\n\r\n// Helper function para usar fora de componentes\r\nlet globalLoaderController: LoaderContextValue | null = null\r\n\r\nexport function setGlobalLoader(controller: LoaderContextValue) {\r\n globalLoaderController = controller\r\n}\r\n\r\nexport const loader = {\r\n show: (options?: LoaderOptions) => {\r\n if (globalLoaderController) {\r\n globalLoaderController.show(options)\r\n } else {\r\n console.warn(\r\n 'Loader: GlobalLoaderController not initialized. Wrap your app with LoaderProvider.'\r\n )\r\n }\r\n },\r\n hide: () => {\r\n if (globalLoaderController) {\r\n globalLoaderController.hide()\r\n } else {\r\n console.warn(\r\n 'Loader: GlobalLoaderController not initialized. Wrap your app with LoaderProvider.'\r\n )\r\n }\r\n },\r\n}\r\n\r\n// Component que registra o controller global\r\nexport function GlobalLoaderController() {\r\n const loaderController = useLoader()\r\n\r\n React.useEffect(() => {\r\n setGlobalLoader(loaderController)\r\n return () => {\r\n setGlobalLoader(null as any)\r\n }\r\n }, [loaderController])\r\n\r\n return null\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@facter/ds-core",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Facter Design System - Core components (Button, Input, Badge, Spinner, Loader)",
5
5
  "author": "Facter",
6
6
  "license": "MIT",
@@ -48,6 +48,11 @@
48
48
  "react": "^18.0.0",
49
49
  "react-dom": "^18.0.0"
50
50
  },
51
+ "peerDependenciesMeta": {
52
+ "react-icons": {
53
+ "optional": true
54
+ }
55
+ },
51
56
  "devDependencies": {
52
57
  "@testing-library/jest-dom": "^6.1.5",
53
58
  "@testing-library/react": "^14.1.2",