analytica-frontend-lib 1.0.70 → 1.0.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/Accordation/index.d.mts +12 -0
  2. package/dist/Accordation/index.d.ts +12 -0
  3. package/dist/Accordation/index.js +1663 -0
  4. package/dist/Accordation/index.js.map +1 -0
  5. package/dist/Accordation/index.mjs +1654 -0
  6. package/dist/Accordation/index.mjs.map +1 -0
  7. package/dist/AlertDialog/index.d.mts +40 -0
  8. package/dist/AlertDialog/index.d.ts +40 -0
  9. package/dist/AlertDialog/index.js +233 -0
  10. package/dist/AlertDialog/index.js.map +1 -0
  11. package/dist/AlertDialog/index.mjs +212 -0
  12. package/dist/AlertDialog/index.mjs.map +1 -0
  13. package/dist/Alternative/index.d.mts +81 -0
  14. package/dist/Alternative/index.d.ts +81 -0
  15. package/dist/Alternative/index.js +745 -0
  16. package/dist/Alternative/index.js.map +1 -0
  17. package/dist/Alternative/index.mjs +728 -0
  18. package/dist/Alternative/index.mjs.map +1 -0
  19. package/dist/Badge/index.js +1 -1
  20. package/dist/Badge/index.js.map +1 -1
  21. package/dist/Badge/index.mjs +1 -1
  22. package/dist/Badge/index.mjs.map +1 -1
  23. package/dist/Card/index.js +1 -1
  24. package/dist/Card/index.js.map +1 -1
  25. package/dist/Card/index.mjs +1 -1
  26. package/dist/Card/index.mjs.map +1 -1
  27. package/dist/Radio/index.d.mts +120 -2
  28. package/dist/Radio/index.d.ts +120 -2
  29. package/dist/Radio/index.js +176 -3
  30. package/dist/Radio/index.js.map +1 -1
  31. package/dist/Radio/index.mjs +176 -4
  32. package/dist/Radio/index.mjs.map +1 -1
  33. package/dist/Skeleton/index.d.mts +10 -9
  34. package/dist/Skeleton/index.d.ts +10 -9
  35. package/dist/Skeleton/index.js.map +1 -1
  36. package/dist/Skeleton/index.mjs.map +1 -1
  37. package/dist/index.css +173 -83
  38. package/dist/index.css.map +1 -1
  39. package/dist/index.d.mts +4 -2
  40. package/dist/index.d.ts +4 -2
  41. package/dist/index.js +2361 -1916
  42. package/dist/index.js.map +1 -1
  43. package/dist/index.mjs +2412 -1962
  44. package/dist/index.mjs.map +1 -1
  45. package/dist/styles.css +173 -83
  46. package/dist/styles.css.map +1 -1
  47. package/package.json +4 -2
  48. package/dist/Tab/index.d.mts +0 -37
  49. package/dist/Tab/index.d.ts +0 -37
  50. package/dist/Tab/index.js +0 -182
  51. package/dist/Tab/index.js.map +0 -1
  52. package/dist/Tab/index.mjs +0 -161
  53. package/dist/Tab/index.mjs.map +0 -1
@@ -0,0 +1,212 @@
1
+ // src/components/AlertDialog/AlertDialog.tsx
2
+ import {
3
+ forwardRef,
4
+ useState,
5
+ useEffect
6
+ } from "react";
7
+
8
+ // src/components/Button/Button.tsx
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ var VARIANT_ACTION_CLASSES = {
11
+ solid: {
12
+ primary: "bg-primary-950 text-text border border-primary-950 hover:bg-primary-800 hover:border-primary-800 focus-visible:outline-none focus-visible:bg-primary-950 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:bg-primary-700 active:border-primary-700 disabled:bg-primary-500 disabled:border-primary-500 disabled:opacity-40 disabled:cursor-not-allowed",
13
+ positive: "bg-success-500 text-text border border-success-500 hover:bg-success-600 hover:border-success-600 focus-visible:outline-none focus-visible:bg-success-500 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:bg-success-700 active:border-success-700 disabled:bg-success-500 disabled:border-success-500 disabled:opacity-40 disabled:cursor-not-allowed",
14
+ negative: "bg-error-500 text-text border border-error-500 hover:bg-error-600 hover:border-error-600 focus-visible:outline-none focus-visible:bg-error-500 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:bg-error-700 active:border-error-700 disabled:bg-error-500 disabled:border-error-500 disabled:opacity-40 disabled:cursor-not-allowed"
15
+ },
16
+ outline: {
17
+ primary: "bg-transparent text-primary-950 border border-primary-950 hover:bg-background-50 hover:text-primary-400 hover:border-primary-400 focus-visible:border-0 focus-visible:outline-none focus-visible:text-primary-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-primary-700 active:border-primary-700 disabled:opacity-40 disabled:cursor-not-allowed",
18
+ positive: "bg-transparent text-success-500 border border-success-300 hover:bg-background-50 hover:text-success-400 hover:border-success-400 focus-visible:border-0 focus-visible:outline-none focus-visible:text-success-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-success-700 active:border-success-700 disabled:opacity-40 disabled:cursor-not-allowed",
19
+ negative: "bg-transparent text-error-500 border border-error-300 hover:bg-background-50 hover:text-error-400 hover:border-error-400 focus-visible:border-0 focus-visible:outline-none focus-visible:text-error-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-error-700 active:border-error-700 disabled:opacity-40 disabled:cursor-not-allowed"
20
+ },
21
+ link: {
22
+ primary: "bg-transparent text-primary-950 hover:text-primary-400 focus-visible:outline-none focus-visible:text-primary-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-primary-700 disabled:opacity-40 disabled:cursor-not-allowed",
23
+ positive: "bg-transparent text-success-500 hover:text-success-400 focus-visible:outline-none focus-visible:text-success-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-success-700 disabled:opacity-40 disabled:cursor-not-allowed",
24
+ negative: "bg-transparent text-error-500 hover:text-error-400 focus-visible:outline-none focus-visible:text-error-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-error-700 disabled:opacity-40 disabled:cursor-not-allowed"
25
+ }
26
+ };
27
+ var SIZE_CLASSES = {
28
+ "extra-small": "text-xs px-3.5 py-2",
29
+ small: "text-sm px-4 py-2.5",
30
+ medium: "text-md px-5 py-2.5",
31
+ large: "text-lg px-6 py-3",
32
+ "extra-large": "text-lg px-7 py-3.5"
33
+ };
34
+ var Button = ({
35
+ children,
36
+ iconLeft,
37
+ iconRight,
38
+ size = "medium",
39
+ variant = "solid",
40
+ action = "primary",
41
+ className = "",
42
+ disabled,
43
+ type = "button",
44
+ ...props
45
+ }) => {
46
+ const sizeClasses = SIZE_CLASSES[size];
47
+ const variantClasses = VARIANT_ACTION_CLASSES[variant][action];
48
+ const baseClasses = "inline-flex items-center justify-center rounded-full cursor-pointer font-medium";
49
+ return /* @__PURE__ */ jsxs(
50
+ "button",
51
+ {
52
+ className: `${baseClasses} ${variantClasses} ${sizeClasses} ${className}`,
53
+ disabled,
54
+ type,
55
+ ...props,
56
+ children: [
57
+ iconLeft && /* @__PURE__ */ jsx("span", { className: "mr-2 flex items-center", children: iconLeft }),
58
+ children,
59
+ iconRight && /* @__PURE__ */ jsx("span", { className: "ml-2 flex items-center", children: iconRight })
60
+ ]
61
+ }
62
+ );
63
+ };
64
+ var Button_default = Button;
65
+
66
+ // src/components/AlertDialog/AlertDialog.tsx
67
+ import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
68
+ var SIZE_CLASSES2 = {
69
+ "extra-small": "w-screen max-w-[324px]",
70
+ small: "w-screen max-w-[378px]",
71
+ medium: "w-screen max-w-[459px]",
72
+ large: "w-screen max-w-[578px]",
73
+ "extra-large": "w-screen max-w-[912px]"
74
+ };
75
+ var AlertDialog = forwardRef(
76
+ ({
77
+ trigger,
78
+ description,
79
+ cancelButtonLabel = "Cancelar",
80
+ submitButtonLabel = "Deletar",
81
+ title,
82
+ isOpen: controlledIsOpen,
83
+ onOpen,
84
+ onClose,
85
+ closeOnBackdropClick = true,
86
+ closeOnEscape = true,
87
+ className = "",
88
+ onSubmit,
89
+ submitValue,
90
+ onCancel,
91
+ cancelValue,
92
+ size = "medium",
93
+ ...props
94
+ }, ref) => {
95
+ const [internalIsOpen, setInternalIsOpen] = useState(false);
96
+ const isOpen = controlledIsOpen ?? internalIsOpen;
97
+ const setIsOpen = (open) => {
98
+ if (controlledIsOpen === void 0) {
99
+ setInternalIsOpen(open);
100
+ }
101
+ if (open && onOpen) onOpen();
102
+ if (!open && onClose) onClose();
103
+ };
104
+ useEffect(() => {
105
+ if (!isOpen || !closeOnEscape) return;
106
+ const handleEscape = (event) => {
107
+ if (event.key === "Escape") {
108
+ setIsOpen(false);
109
+ }
110
+ };
111
+ document.addEventListener("keydown", handleEscape);
112
+ return () => document.removeEventListener("keydown", handleEscape);
113
+ }, [isOpen, closeOnEscape]);
114
+ useEffect(() => {
115
+ if (isOpen) {
116
+ document.body.style.overflow = "hidden";
117
+ } else {
118
+ document.body.style.overflow = "unset";
119
+ }
120
+ return () => {
121
+ document.body.style.overflow = "unset";
122
+ };
123
+ }, [isOpen]);
124
+ const handleBackdropClick = (event) => {
125
+ if (event.target === event.currentTarget && closeOnBackdropClick) {
126
+ setIsOpen(false);
127
+ }
128
+ };
129
+ const handleBackdropKeyDown = (event) => {
130
+ if (event.key === "Escape" && closeOnEscape) {
131
+ setIsOpen(false);
132
+ }
133
+ };
134
+ const handleTriggerClick = () => {
135
+ setIsOpen(true);
136
+ };
137
+ const handleSubmit = () => {
138
+ setIsOpen(false);
139
+ onSubmit?.(submitValue);
140
+ };
141
+ const handleCancel = () => {
142
+ setIsOpen(false);
143
+ onCancel?.(cancelValue);
144
+ };
145
+ const sizeClasses = SIZE_CLASSES2[size];
146
+ return /* @__PURE__ */ jsxs2(Fragment, { children: [
147
+ /* @__PURE__ */ jsx2(
148
+ "button",
149
+ {
150
+ onClick: handleTriggerClick,
151
+ "aria-label": "Open dialog",
152
+ type: "button",
153
+ className: "border-none bg-transparent p-0 cursor-pointer",
154
+ children: trigger
155
+ }
156
+ ),
157
+ isOpen && /* @__PURE__ */ jsx2(
158
+ "div",
159
+ {
160
+ className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",
161
+ onClick: handleBackdropClick,
162
+ onKeyDown: handleBackdropKeyDown,
163
+ "data-testid": "alert-dialog-overlay",
164
+ children: /* @__PURE__ */ jsxs2(
165
+ "div",
166
+ {
167
+ ref,
168
+ className: `bg-background border border-border-100 rounded-lg shadow-lg p-6 m-3 ${sizeClasses} ${className}`,
169
+ ...props,
170
+ children: [
171
+ /* @__PURE__ */ jsx2(
172
+ "h2",
173
+ {
174
+ id: "alert-dialog-title",
175
+ className: "pb-3 text-xl font-semibold",
176
+ children: title
177
+ }
178
+ ),
179
+ /* @__PURE__ */ jsx2(
180
+ "p",
181
+ {
182
+ id: "alert-dialog-description",
183
+ className: "text-text-700 text-sm",
184
+ children: description
185
+ }
186
+ ),
187
+ /* @__PURE__ */ jsxs2("div", { className: "flex flex-row items-center justify-end pt-4 gap-3", children: [
188
+ /* @__PURE__ */ jsx2(Button_default, { variant: "outline", size: "small", onClick: handleCancel, children: cancelButtonLabel }),
189
+ /* @__PURE__ */ jsx2(
190
+ Button_default,
191
+ {
192
+ variant: "solid",
193
+ size: "small",
194
+ action: "negative",
195
+ onClick: handleSubmit,
196
+ children: submitButtonLabel
197
+ }
198
+ )
199
+ ] })
200
+ ]
201
+ }
202
+ )
203
+ }
204
+ )
205
+ ] });
206
+ }
207
+ );
208
+ AlertDialog.displayName = "AlertDialog";
209
+ export {
210
+ AlertDialog
211
+ };
212
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/AlertDialog/AlertDialog.tsx","../../src/components/Button/Button.tsx"],"sourcesContent":["import {\n forwardRef,\n HTMLAttributes,\n ReactNode,\n useState,\n useEffect,\n MouseEvent,\n KeyboardEvent,\n} from 'react';\nimport Button from '../Button/Button';\n\n/**\n * Lookup table for size classes\n */\nconst SIZE_CLASSES = {\n 'extra-small': 'w-screen max-w-[324px]',\n small: 'w-screen max-w-[378px]',\n medium: 'w-screen max-w-[459px]',\n large: 'w-screen max-w-[578px]',\n 'extra-large': 'w-screen max-w-[912px]',\n} as const;\n\ninterface AlertDialogProps extends HTMLAttributes<HTMLDivElement> {\n /** Trigger element that opens the alert dialog */\n trigger: ReactNode;\n /** Title of the alert dialog */\n title: string;\n /** Whether the alert dialog is open (controlled mode) */\n isOpen?: boolean;\n /** Function called when the alert dialog should be opened (controlled mode) */\n onOpen?: () => void;\n /** Function called when the alert dialog should be closed (controlled mode) */\n onClose?: () => void;\n /** Whether clicking the backdrop should close the alert dialog */\n closeOnBackdropClick?: boolean;\n /** Whether pressing Escape should close the alert dialog */\n closeOnEscape?: boolean;\n /** Additional CSS classes for the alert dialog content */\n className?: string;\n /** Function called when submit button is clicked */\n onSubmit?: (value?: unknown) => void;\n /** Value to pass to onSubmit function */\n submitValue?: unknown;\n /** Function called when cancel button is clicked */\n onCancel?: (value?: unknown) => void;\n /** Value to pass to onCancel function */\n cancelValue?: unknown;\n /** Description of the alert dialog */\n description: string;\n /** Label of the cancel button */\n cancelButtonLabel?: string;\n /** Label of the submit button */\n submitButtonLabel?: string;\n /** Size of the alert dialog */\n size?: 'extra-small' | 'small' | 'medium' | 'large' | 'extra-large';\n}\n\nconst AlertDialog = forwardRef<HTMLDivElement, AlertDialogProps>(\n (\n {\n trigger,\n description,\n cancelButtonLabel = 'Cancelar',\n submitButtonLabel = 'Deletar',\n title,\n isOpen: controlledIsOpen,\n onOpen,\n onClose,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n className = '',\n onSubmit,\n submitValue,\n onCancel,\n cancelValue,\n size = 'medium',\n ...props\n },\n ref\n ) => {\n // Internal state for uncontrolled mode\n const [internalIsOpen, setInternalIsOpen] = useState(false);\n\n // Use controlled or uncontrolled state\n const isOpen = controlledIsOpen ?? internalIsOpen;\n const setIsOpen = (open: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(open);\n }\n if (open && onOpen) onOpen();\n if (!open && onClose) onClose();\n };\n\n // Handle escape key\n useEffect(() => {\n if (!isOpen || !closeOnEscape) return;\n\n const handleEscape = (event: globalThis.KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen, closeOnEscape]);\n\n // Prevent body scroll when modal is open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = 'unset';\n }\n\n return () => {\n document.body.style.overflow = 'unset';\n };\n }, [isOpen]);\n\n const handleBackdropClick = (event: MouseEvent<HTMLDivElement>) => {\n if (event.target === event.currentTarget && closeOnBackdropClick) {\n setIsOpen(false);\n }\n };\n\n const handleBackdropKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Escape' && closeOnEscape) {\n setIsOpen(false);\n }\n };\n\n const handleTriggerClick = () => {\n setIsOpen(true);\n };\n\n const handleSubmit = () => {\n setIsOpen(false);\n onSubmit?.(submitValue);\n };\n\n const handleCancel = () => {\n setIsOpen(false);\n onCancel?.(cancelValue);\n };\n\n const sizeClasses = SIZE_CLASSES[size];\n\n return (\n <>\n {/* Trigger */}\n <button\n onClick={handleTriggerClick}\n aria-label=\"Open dialog\"\n type=\"button\"\n className=\"border-none bg-transparent p-0 cursor-pointer\"\n >\n {trigger}\n </button>\n\n {/* Alert Dialog Overlay */}\n {isOpen && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm\"\n onClick={handleBackdropClick}\n onKeyDown={handleBackdropKeyDown}\n data-testid=\"alert-dialog-overlay\"\n >\n {/* Alert Dialog Content */}\n <div\n ref={ref}\n className={`bg-background border border-border-100 rounded-lg shadow-lg p-6 m-3 ${sizeClasses} ${className}`}\n {...props}\n >\n <h2\n id=\"alert-dialog-title\"\n className=\"pb-3 text-xl font-semibold\"\n >\n {title}\n </h2>\n <p\n id=\"alert-dialog-description\"\n className=\"text-text-700 text-sm\"\n >\n {description}\n </p>\n\n <div className=\"flex flex-row items-center justify-end pt-4 gap-3\">\n <Button variant=\"outline\" size=\"small\" onClick={handleCancel}>\n {cancelButtonLabel}\n </Button>\n\n <Button\n variant=\"solid\"\n size=\"small\"\n action=\"negative\"\n onClick={handleSubmit}\n >\n {submitButtonLabel}\n </Button>\n </div>\n </div>\n </div>\n )}\n </>\n );\n }\n);\n\nAlertDialog.displayName = 'AlertDialog';\n\nexport { AlertDialog };\n","import { ButtonHTMLAttributes, ReactNode } from 'react';\n\n/**\n * Lookup table for variant and action class combinations\n */\nconst VARIANT_ACTION_CLASSES = {\n solid: {\n primary:\n 'bg-primary-950 text-text border border-primary-950 hover:bg-primary-800 hover:border-primary-800 focus-visible:outline-none focus-visible:bg-primary-950 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:bg-primary-700 active:border-primary-700 disabled:bg-primary-500 disabled:border-primary-500 disabled:opacity-40 disabled:cursor-not-allowed',\n positive:\n 'bg-success-500 text-text border border-success-500 hover:bg-success-600 hover:border-success-600 focus-visible:outline-none focus-visible:bg-success-500 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:bg-success-700 active:border-success-700 disabled:bg-success-500 disabled:border-success-500 disabled:opacity-40 disabled:cursor-not-allowed',\n negative:\n 'bg-error-500 text-text border border-error-500 hover:bg-error-600 hover:border-error-600 focus-visible:outline-none focus-visible:bg-error-500 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:bg-error-700 active:border-error-700 disabled:bg-error-500 disabled:border-error-500 disabled:opacity-40 disabled:cursor-not-allowed',\n },\n outline: {\n primary:\n 'bg-transparent text-primary-950 border border-primary-950 hover:bg-background-50 hover:text-primary-400 hover:border-primary-400 focus-visible:border-0 focus-visible:outline-none focus-visible:text-primary-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-primary-700 active:border-primary-700 disabled:opacity-40 disabled:cursor-not-allowed',\n positive:\n 'bg-transparent text-success-500 border border-success-300 hover:bg-background-50 hover:text-success-400 hover:border-success-400 focus-visible:border-0 focus-visible:outline-none focus-visible:text-success-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-success-700 active:border-success-700 disabled:opacity-40 disabled:cursor-not-allowed',\n negative:\n 'bg-transparent text-error-500 border border-error-300 hover:bg-background-50 hover:text-error-400 hover:border-error-400 focus-visible:border-0 focus-visible:outline-none focus-visible:text-error-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-error-700 active:border-error-700 disabled:opacity-40 disabled:cursor-not-allowed',\n },\n link: {\n primary:\n 'bg-transparent text-primary-950 hover:text-primary-400 focus-visible:outline-none focus-visible:text-primary-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-primary-700 disabled:opacity-40 disabled:cursor-not-allowed',\n positive:\n 'bg-transparent text-success-500 hover:text-success-400 focus-visible:outline-none focus-visible:text-success-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-success-700 disabled:opacity-40 disabled:cursor-not-allowed',\n negative:\n 'bg-transparent text-error-500 hover:text-error-400 focus-visible:outline-none focus-visible:text-error-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-error-700 disabled:opacity-40 disabled:cursor-not-allowed',\n },\n} as const;\n\n/**\n * Lookup table for size classes\n */\nconst SIZE_CLASSES = {\n 'extra-small': 'text-xs px-3.5 py-2',\n small: 'text-sm px-4 py-2.5',\n medium: 'text-md px-5 py-2.5',\n large: 'text-lg px-6 py-3',\n 'extra-large': 'text-lg px-7 py-3.5',\n} as const;\n\n/**\n * Button component props interface\n */\ntype ButtonProps = {\n /** Content to be displayed inside the button */\n children: ReactNode;\n /** Ícone à esquerda do texto */\n iconLeft?: ReactNode;\n /** Ícone à direita do texto */\n iconRight?: ReactNode;\n /** Size of the button */\n size?: 'extra-small' | 'small' | 'medium' | 'large' | 'extra-large';\n /** Visual variant of the button */\n variant?: 'solid' | 'outline' | 'link';\n /** Action type of the button */\n action?: 'primary' | 'positive' | 'negative';\n /** Additional CSS classes to apply */\n className?: string;\n} & ButtonHTMLAttributes<HTMLButtonElement>;\n\n/**\n * Button component for Analytica Ensino platforms\n *\n * A flexible button component with multiple variants, sizes and actions.\n *\n * @param children - The content to display inside the button\n * @param size - The size variant (extra-small, small, medium, large, extra-large)\n * @param variant - The visual style variant (solid, outline, link)\n * @param action - The action type (primary, positive, negative)\n * @param className - Additional CSS classes\n * @param props - All other standard button HTML attributes\n * @returns A styled button element\n *\n * @example\n * ```tsx\n * <Button variant=\"solid\" action=\"primary\" size=\"medium\" onClick={() => console.log('clicked')}>\n * Click me\n * </Button>\n * ```\n */\nconst Button = ({\n children,\n iconLeft,\n iconRight,\n size = 'medium',\n variant = 'solid',\n action = 'primary',\n className = '',\n disabled,\n type = 'button',\n ...props\n}: ButtonProps) => {\n // Get classes from lookup tables\n const sizeClasses = SIZE_CLASSES[size];\n const variantClasses = VARIANT_ACTION_CLASSES[variant][action];\n\n const baseClasses =\n 'inline-flex items-center justify-center rounded-full cursor-pointer font-medium';\n\n return (\n <button\n className={`${baseClasses} ${variantClasses} ${sizeClasses} ${className}`}\n disabled={disabled}\n type={type}\n {...props}\n >\n {iconLeft && <span className=\"mr-2 flex items-center\">{iconLeft}</span>}\n {children}\n {iconRight && <span className=\"ml-2 flex items-center\">{iconRight}</span>}\n </button>\n );\n};\n\nexport default Button;\n"],"mappings":"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","names":["jsx","jsxs","SIZE_CLASSES"]}
@@ -0,0 +1,81 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes } from 'react';
3
+ import * as react_jsx_runtime from 'react/jsx-runtime';
4
+
5
+ /**
6
+ * Interface para definir uma alternativa
7
+ */
8
+ interface Alternative {
9
+ value: string;
10
+ label: string;
11
+ status?: 'correct' | 'incorrect' | 'neutral';
12
+ disabled?: boolean;
13
+ description?: string;
14
+ }
15
+ /**
16
+ * Props do componente AlternativesList
17
+ */
18
+ interface AlternativesListProps {
19
+ /** Lista de alternativas */
20
+ alternatives: Alternative[];
21
+ /** Nome do grupo de radio */
22
+ name?: string;
23
+ /** Valor selecionado por padrão */
24
+ defaultValue?: string;
25
+ /** Valor controlado */
26
+ value?: string;
27
+ /** Callback quando uma alternativa é selecionada */
28
+ onValueChange?: (value: string) => void;
29
+ /** Se o componente está desabilitado */
30
+ disabled?: boolean;
31
+ /** Layout das alternativas */
32
+ layout?: 'default' | 'compact' | 'detailed';
33
+ /** Classes CSS adicionais */
34
+ className?: string;
35
+ /** Modo de exibição: interativo (com radios funcionais) ou readonly (apenas visual) */
36
+ mode?: 'interactive' | 'readonly';
37
+ /** Valor selecionado pelo usuário (apenas para modo readonly) */
38
+ selectedValue?: string;
39
+ }
40
+ /**
41
+ * Componente reutilizável para exibir lista de alternativas com RadioGroup
42
+ *
43
+ * Suporta dois modos:
44
+ * - `interactive`: Permite interação com radios (padrão)
45
+ * - `readonly`: Apenas exibição visual dos estados
46
+ *
47
+ * @example
48
+ * ```tsx
49
+ * // Modo interativo (padrão)
50
+ * <AlternativesList
51
+ * mode="interactive"
52
+ * alternatives={[
53
+ * { value: "a", label: "Alternativa A", status: "correct" },
54
+ * { value: "b", label: "Alternativa B", status: "incorrect" },
55
+ * { value: "c", label: "Alternativa C" }
56
+ * ]}
57
+ * defaultValue="a"
58
+ * onValueChange={(value) => console.log(value)}
59
+ * />
60
+ *
61
+ * // Modo readonly - mostra seleção do usuário
62
+ * <AlternativesList
63
+ * mode="readonly"
64
+ * selectedValue="b" // O que o usuário selecionou
65
+ * alternatives={[
66
+ * { value: "a", label: "Resposta A", status: "correct" }, // Mostra como correta
67
+ * { value: "b", label: "Resposta B" }, // Mostra radio selecionado + badge incorreto
68
+ * { value: "c", label: "Resposta C" }
69
+ * ]}
70
+ * />
71
+ * ```
72
+ */
73
+ declare const AlternativesList: ({ alternatives, name, defaultValue, value, onValueChange, disabled, layout, className, mode, selectedValue, }: AlternativesListProps) => react_jsx_runtime.JSX.Element;
74
+ interface HeaderAlternativeProps extends HTMLAttributes<HTMLDivElement> {
75
+ title: string;
76
+ subTitle: string;
77
+ content: string;
78
+ }
79
+ declare const HeaderAlternative: react.ForwardRefExoticComponent<HeaderAlternativeProps & react.RefAttributes<HTMLDivElement>>;
80
+
81
+ export { type Alternative, AlternativesList, type AlternativesListProps, HeaderAlternative };
@@ -0,0 +1,81 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes } from 'react';
3
+ import * as react_jsx_runtime from 'react/jsx-runtime';
4
+
5
+ /**
6
+ * Interface para definir uma alternativa
7
+ */
8
+ interface Alternative {
9
+ value: string;
10
+ label: string;
11
+ status?: 'correct' | 'incorrect' | 'neutral';
12
+ disabled?: boolean;
13
+ description?: string;
14
+ }
15
+ /**
16
+ * Props do componente AlternativesList
17
+ */
18
+ interface AlternativesListProps {
19
+ /** Lista de alternativas */
20
+ alternatives: Alternative[];
21
+ /** Nome do grupo de radio */
22
+ name?: string;
23
+ /** Valor selecionado por padrão */
24
+ defaultValue?: string;
25
+ /** Valor controlado */
26
+ value?: string;
27
+ /** Callback quando uma alternativa é selecionada */
28
+ onValueChange?: (value: string) => void;
29
+ /** Se o componente está desabilitado */
30
+ disabled?: boolean;
31
+ /** Layout das alternativas */
32
+ layout?: 'default' | 'compact' | 'detailed';
33
+ /** Classes CSS adicionais */
34
+ className?: string;
35
+ /** Modo de exibição: interativo (com radios funcionais) ou readonly (apenas visual) */
36
+ mode?: 'interactive' | 'readonly';
37
+ /** Valor selecionado pelo usuário (apenas para modo readonly) */
38
+ selectedValue?: string;
39
+ }
40
+ /**
41
+ * Componente reutilizável para exibir lista de alternativas com RadioGroup
42
+ *
43
+ * Suporta dois modos:
44
+ * - `interactive`: Permite interação com radios (padrão)
45
+ * - `readonly`: Apenas exibição visual dos estados
46
+ *
47
+ * @example
48
+ * ```tsx
49
+ * // Modo interativo (padrão)
50
+ * <AlternativesList
51
+ * mode="interactive"
52
+ * alternatives={[
53
+ * { value: "a", label: "Alternativa A", status: "correct" },
54
+ * { value: "b", label: "Alternativa B", status: "incorrect" },
55
+ * { value: "c", label: "Alternativa C" }
56
+ * ]}
57
+ * defaultValue="a"
58
+ * onValueChange={(value) => console.log(value)}
59
+ * />
60
+ *
61
+ * // Modo readonly - mostra seleção do usuário
62
+ * <AlternativesList
63
+ * mode="readonly"
64
+ * selectedValue="b" // O que o usuário selecionou
65
+ * alternatives={[
66
+ * { value: "a", label: "Resposta A", status: "correct" }, // Mostra como correta
67
+ * { value: "b", label: "Resposta B" }, // Mostra radio selecionado + badge incorreto
68
+ * { value: "c", label: "Resposta C" }
69
+ * ]}
70
+ * />
71
+ * ```
72
+ */
73
+ declare const AlternativesList: ({ alternatives, name, defaultValue, value, onValueChange, disabled, layout, className, mode, selectedValue, }: AlternativesListProps) => react_jsx_runtime.JSX.Element;
74
+ interface HeaderAlternativeProps extends HTMLAttributes<HTMLDivElement> {
75
+ title: string;
76
+ subTitle: string;
77
+ content: string;
78
+ }
79
+ declare const HeaderAlternative: react.ForwardRefExoticComponent<HeaderAlternativeProps & react.RefAttributes<HTMLDivElement>>;
80
+
81
+ export { type Alternative, AlternativesList, type AlternativesListProps, HeaderAlternative };