@sbkbs/ui 1.0.5 → 2.0.0-beta.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/CHANGELOG.md +57 -0
- package/MIGRATION.md +96 -0
- package/README.md +221 -115
- package/dist/assets/favicon/apple-touch-icon.png +0 -0
- package/dist/assets/favicon/favicon-96x96.png +0 -0
- package/dist/assets/favicon/favicon.ico +0 -0
- package/dist/assets/favicon/favicon.svg +1 -0
- package/dist/assets/favicon/site.webmanifest +21 -0
- package/dist/assets/favicon/web-app-manifest-192x192.png +0 -0
- package/dist/assets/favicon/web-app-manifest-512x512.png +0 -0
- package/dist/base.css +38 -0
- package/dist/components/Accordion/Accordion.d.ts +13 -1
- package/dist/components/Accordion/Accordion.js +100 -52
- package/dist/components/Accordion/Accordion.js.map +1 -1
- package/dist/components/Alert/Alert.d.ts +17 -4
- package/dist/components/Alert/Alert.js +64 -20
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/Avatar/Avatar.d.ts +17 -0
- package/dist/components/Avatar/Avatar.js +66 -0
- package/dist/components/Avatar/Avatar.js.map +1 -0
- package/dist/components/Badge/Badge.d.ts +11 -2
- package/dist/components/Badge/Badge.js +42 -30
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.d.ts +5 -2
- package/dist/components/Breadcrumb/Breadcrumb.js +23 -16
- package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/components/Button/Button.d.ts +10 -8
- package/dist/components/Button/Button.js +73 -114
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Card/Card.d.ts +33 -3
- package/dist/components/Card/Card.js +91 -30
- package/dist/components/Card/Card.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.d.ts +4 -1
- package/dist/components/Checkbox/Checkbox.js +32 -31
- package/dist/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/Chip/Chip.d.ts +7 -1
- package/dist/components/Chip/Chip.js +19 -9
- package/dist/components/Chip/Chip.js.map +1 -1
- package/dist/components/Combobox/Combobox.d.ts +10 -2
- package/dist/components/Combobox/Combobox.js +146 -133
- package/dist/components/Combobox/Combobox.js.map +1 -1
- package/dist/components/Divider/Divider.d.ts +7 -1
- package/dist/components/Divider/Divider.js +28 -12
- package/dist/components/Divider/Divider.js.map +1 -1
- package/dist/components/DropdownMenu/DropdownMenu.d.ts +33 -0
- package/dist/components/DropdownMenu/DropdownMenu.js +147 -0
- package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
- package/dist/components/EmptyState/EmptyState.d.ts +7 -1
- package/dist/components/EmptyState/EmptyState.js +28 -19
- package/dist/components/EmptyState/EmptyState.js.map +1 -1
- package/dist/components/Field/Field.d.ts +21 -0
- package/dist/components/Field/Field.js +35 -0
- package/dist/components/Field/Field.js.map +1 -0
- package/dist/components/FileUpload/FileUpload.d.ts +9 -2
- package/dist/components/FileUpload/FileUpload.js +128 -102
- package/dist/components/FileUpload/FileUpload.js.map +1 -1
- package/dist/components/Footer/Footer.d.ts +19 -6
- package/dist/components/Footer/Footer.js +47 -50
- package/dist/components/Footer/Footer.js.map +1 -1
- package/dist/components/GlassPanel/GlassPanel.d.ts +18 -0
- package/dist/components/GlassPanel/GlassPanel.js +39 -0
- package/dist/components/GlassPanel/GlassPanel.js.map +1 -0
- package/dist/components/Header/Header.d.ts +27 -10
- package/dist/components/Header/Header.js +98 -98
- package/dist/components/Header/Header.js.map +1 -1
- package/dist/components/Highlight/Highlight.d.ts +13 -0
- package/dist/components/Highlight/Highlight.js +18 -0
- package/dist/components/Highlight/Highlight.js.map +1 -0
- package/dist/components/Icon/Icon.d.ts +21 -0
- package/dist/components/Icon/Icon.js +31 -0
- package/dist/components/Icon/Icon.js.map +1 -0
- package/dist/components/IconButton/IconButton.d.ts +12 -0
- package/dist/components/IconButton/IconButton.js +49 -0
- package/dist/components/IconButton/IconButton.js.map +1 -0
- package/dist/components/Input/Input.d.ts +3 -2
- package/dist/components/Input/Input.js +51 -69
- package/dist/components/Input/Input.js.map +1 -1
- package/dist/components/Layout/Layout.d.ts +2 -0
- package/dist/components/Layout/Layout.js +24 -18
- package/dist/components/Layout/Layout.js.map +1 -1
- package/dist/components/Logo/Logo.d.ts +27 -0
- package/dist/components/Logo/Logo.js +107 -0
- package/dist/components/Logo/Logo.js.map +1 -0
- package/dist/components/MiniCard/MiniCard.d.ts +21 -0
- package/dist/components/MiniCard/MiniCard.js +90 -0
- package/dist/components/MiniCard/MiniCard.js.map +1 -0
- package/dist/components/Modal/Modal.d.ts +16 -3
- package/dist/components/Modal/Modal.js +124 -93
- package/dist/components/Modal/Modal.js.map +1 -1
- package/dist/components/Navigation/Navigation.d.ts +1 -0
- package/dist/components/Navigation/Navigation.js +14 -14
- package/dist/components/Navigation/Navigation.js.map +1 -1
- package/dist/components/NumberInput/NumberInput.d.ts +5 -2
- package/dist/components/NumberInput/NumberInput.js +98 -128
- package/dist/components/NumberInput/NumberInput.js.map +1 -1
- package/dist/components/PageHeader/PageHeader.d.ts +8 -1
- package/dist/components/PageHeader/PageHeader.js +26 -25
- package/dist/components/PageHeader/PageHeader.js.map +1 -1
- package/dist/components/Pagination/Pagination.d.ts +15 -2
- package/dist/components/Pagination/Pagination.js +68 -34
- package/dist/components/Pagination/Pagination.js.map +1 -1
- package/dist/components/Paragraph/Paragraph.d.ts +8 -2
- package/dist/components/Paragraph/Paragraph.js +39 -36
- package/dist/components/Paragraph/Paragraph.js.map +1 -1
- package/dist/components/Popover/Popover.d.ts +12 -1
- package/dist/components/Popover/Popover.js +49 -37
- package/dist/components/Popover/Popover.js.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.d.ts +18 -0
- package/dist/components/ProgressBar/ProgressBar.js +71 -0
- package/dist/components/ProgressBar/ProgressBar.js.map +1 -0
- package/dist/components/Radio/Radio.d.ts +2 -1
- package/dist/components/Radio/Radio.js +27 -31
- package/dist/components/Radio/Radio.js.map +1 -1
- package/dist/components/SectionHeader/SectionHeader.d.ts +6 -1
- package/dist/components/SectionHeader/SectionHeader.js +14 -12
- package/dist/components/SectionHeader/SectionHeader.js.map +1 -1
- package/dist/components/Select/Select.d.ts +6 -2
- package/dist/components/Select/Select.js +47 -35
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/SideNav/SideNav.d.ts +55 -0
- package/dist/components/SideNav/SideNav.js +141 -0
- package/dist/components/SideNav/SideNav.js.map +1 -0
- package/dist/components/Skeleton/Skeleton.d.ts +12 -1
- package/dist/components/Skeleton/Skeleton.js +33 -18
- package/dist/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/Spinner/Spinner.d.ts +15 -0
- package/dist/components/Spinner/Spinner.js +57 -0
- package/dist/components/Spinner/Spinner.js.map +1 -0
- package/dist/components/Stepper/Stepper.d.ts +1 -1
- package/dist/components/Stepper/Stepper.js +68 -55
- package/dist/components/Stepper/Stepper.js.map +1 -1
- package/dist/components/Subtitle/Subtitle.d.ts +9 -3
- package/dist/components/Subtitle/Subtitle.js +29 -35
- package/dist/components/Subtitle/Subtitle.js.map +1 -1
- package/dist/components/Switch/Switch.d.ts +2 -1
- package/dist/components/Switch/Switch.js +45 -33
- package/dist/components/Switch/Switch.js.map +1 -1
- package/dist/components/Table/Table.d.ts +19 -1
- package/dist/components/Table/Table.js +48 -11
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Tabs/Tabs.d.ts +16 -2
- package/dist/components/Tabs/Tabs.js +80 -44
- package/dist/components/Tabs/Tabs.js.map +1 -1
- package/dist/components/Tag/Tag.d.ts +8 -1
- package/dist/components/Tag/Tag.js +27 -12
- package/dist/components/Tag/Tag.js.map +1 -1
- package/dist/components/Textarea/Textarea.d.ts +3 -1
- package/dist/components/Textarea/Textarea.js +36 -40
- package/dist/components/Textarea/Textarea.js.map +1 -1
- package/dist/components/Title/Title.d.ts +9 -3
- package/dist/components/Title/Title.js +42 -42
- package/dist/components/Title/Title.js.map +1 -1
- package/dist/components/Toast/Toast.d.ts +39 -11
- package/dist/components/Toast/Toast.js +130 -76
- package/dist/components/Toast/Toast.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +12 -2
- package/dist/components/Tooltip/Tooltip.js +50 -32
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/Typography/weight.d.ts +9 -0
- package/dist/components/Typography/weight.js +5 -0
- package/dist/components/Typography/weight.js.map +1 -0
- package/dist/fonts.css +8 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +55 -43
- package/dist/index.js +118 -83
- package/dist/index.js.map +1 -1
- package/dist/reset.css +9 -0
- package/dist/styles.css +1 -0
- package/dist/tailwind.css +153 -0
- package/dist/theme/ThemeProvider.d.ts +21 -3
- package/dist/theme/ThemeProvider.js +57 -18
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/tokens.d.ts +43 -0
- package/dist/theme/tokens.js +39 -0
- package/dist/theme/tokens.js.map +1 -0
- package/dist/theme.css +296 -261
- package/dist/tokens.css +327 -0
- package/dist/utils/cn.d.ts +2 -2
- package/dist/utils/cn.js +19 -4
- package/dist/utils/cn.js.map +1 -1
- package/dist/utils/styles.d.ts +37 -0
- package/dist/utils/styles.js +35 -0
- package/dist/utils/styles.js.map +1 -0
- package/package.json +140 -114
- package/dist/components/Accordion/Accordion.stories.d.ts +0 -7
- package/dist/components/Alert/Alert.stories.d.ts +0 -8
- package/dist/components/Badge/Badge.stories.d.ts +0 -8
- package/dist/components/Breadcrumb/Breadcrumb.stories.d.ts +0 -8
- package/dist/components/Button/Button.stories.d.ts +0 -7
- package/dist/components/Card/Card.stories.d.ts +0 -8
- package/dist/components/Checkbox/Checkbox.stories.d.ts +0 -7
- package/dist/components/Combobox/Combobox.stories.d.ts +0 -9
- package/dist/components/Feedback/Feedback.stories.d.ts +0 -5
- package/dist/components/FileUpload/FileUpload.stories.d.ts +0 -10
- package/dist/components/Input/Input.stories.d.ts +0 -9
- package/dist/components/Modal/Modal.stories.d.ts +0 -8
- package/dist/components/NumberInput/NumberInput.stories.d.ts +0 -8
- package/dist/components/Pagination/Pagination.stories.d.ts +0 -8
- package/dist/components/Radio/Radio.stories.d.ts +0 -7
- package/dist/components/Select/Select.stories.d.ts +0 -8
- package/dist/components/Stepper/Stepper.stories.d.ts +0 -8
- package/dist/components/Switch/Switch.stories.d.ts +0 -8
- package/dist/components/Tabs/Tabs.stories.d.ts +0 -8
- package/dist/components/Textarea/Textarea.stories.d.ts +0 -7
- package/dist/components/Toast/Toast.stories.d.ts +0 -8
- package/dist/oficios-ui.css +0 -1
- package/dist/oficios-ui.umd.cjs +0 -2
- package/dist/oficios-ui.umd.cjs.map +0 -1
|
@@ -1,26 +1,33 @@
|
|
|
1
|
-
import { jsx as e, jsxs as
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import { jsx as e, jsxs as m } from "react/jsx-runtime";
|
|
2
|
+
import { ChevronRight as o } from "lucide-react";
|
|
3
|
+
import { cn as l } from "../../utils/cn.js";
|
|
4
|
+
import { focusRing as f } from "../../utils/styles.js";
|
|
5
|
+
const d = ({ items: s, separator: t, className: n, ...i }) => /* @__PURE__ */ e("nav", { "aria-label": "Breadcrumb", className: l("flex items-center", n), ...i, children: /* @__PURE__ */ e("ol", { className: "m-0 flex list-none flex-wrap items-center gap-1.5 p-0 text-sm", children: s.map((r, a) => {
|
|
6
|
+
const c = a === s.length - 1;
|
|
7
|
+
return /* @__PURE__ */ m("li", { className: "flex items-center gap-1.5", children: [
|
|
8
|
+
a > 0 && /* @__PURE__ */ e(
|
|
9
|
+
"span",
|
|
10
|
+
{
|
|
11
|
+
"aria-hidden": "true",
|
|
12
|
+
className: "inline-flex select-none text-sbk-fg-muted [&_svg]:size-3.5",
|
|
13
|
+
children: t ?? /* @__PURE__ */ e(o, {})
|
|
14
|
+
}
|
|
15
|
+
),
|
|
16
|
+
c ? /* @__PURE__ */ e("span", { "aria-current": "page", className: "font-semibold text-sbk-fg-heading", children: r.label }) : r.href ? /* @__PURE__ */ e(
|
|
13
17
|
"a",
|
|
14
18
|
{
|
|
15
|
-
className:
|
|
19
|
+
className: l(
|
|
20
|
+
"rounded-sbk-xs font-light text-sbk-fg-muted underline-offset-4 hover:text-sbk-primary hover:underline",
|
|
21
|
+
f
|
|
22
|
+
),
|
|
16
23
|
href: r.href,
|
|
17
24
|
children: r.label
|
|
18
25
|
}
|
|
19
|
-
) : /* @__PURE__ */ e("span", { className: "
|
|
26
|
+
) : /* @__PURE__ */ e("span", { className: "font-light text-sbk-fg-muted", children: r.label })
|
|
20
27
|
] }, a);
|
|
21
28
|
}) }) });
|
|
22
|
-
|
|
29
|
+
d.displayName = "Breadcrumb";
|
|
23
30
|
export {
|
|
24
|
-
|
|
31
|
+
d as Breadcrumb
|
|
25
32
|
};
|
|
26
33
|
//# sourceMappingURL=Breadcrumb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumb.js","sources":["../../../src/components/Breadcrumb/Breadcrumb.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface BreadcrumbItem {\n href?: string;\n label: React.ReactNode;\n}\n\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n separator?: React.ReactNode;\n}\n\nexport const Breadcrumb
|
|
1
|
+
{"version":3,"file":"Breadcrumb.js","sources":["../../../src/components/Breadcrumb/Breadcrumb.tsx"],"sourcesContent":["import type React from 'react';\nimport { ChevronRight } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { focusRing } from '../../utils/styles';\n\nexport interface BreadcrumbItem {\n href?: string;\n label: React.ReactNode;\n}\n\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n separator?: React.ReactNode;\n}\n\nexport const Breadcrumb = ({ items, separator, className, ...props }: BreadcrumbProps) => (\n <nav aria-label=\"Breadcrumb\" className={cn('flex items-center', className)} {...props}>\n <ol className=\"m-0 flex list-none flex-wrap items-center gap-1.5 p-0 text-sm\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n return (\n <li key={index} className=\"flex items-center gap-1.5\">\n {index > 0 && (\n <span\n aria-hidden=\"true\"\n className=\"inline-flex select-none text-sbk-fg-muted [&_svg]:size-3.5\"\n >\n {separator ?? <ChevronRight />}\n </span>\n )}\n {isLast ? (\n <span aria-current=\"page\" className=\"font-semibold text-sbk-fg-heading\">\n {item.label}\n </span>\n ) : item.href ? (\n <a\n className={cn(\n 'rounded-sbk-xs font-light text-sbk-fg-muted underline-offset-4 hover:text-sbk-primary hover:underline',\n focusRing,\n )}\n href={item.href}\n >\n {item.label}\n </a>\n ) : (\n <span className=\"font-light text-sbk-fg-muted\">{item.label}</span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n);\n\nBreadcrumb.displayName = 'Breadcrumb';\n"],"names":["Breadcrumb","items","separator","className","props","jsx","cn","item","index","isLast","jsxs","ChevronRight","focusRing"],"mappings":";;;;AAeO,MAAMA,IAAa,CAAC,EAAE,OAAAC,GAAO,WAAAC,GAAW,WAAAC,GAAW,GAAGC,EAAA,MAC3D,gBAAAC,EAAC,OAAA,EAAI,cAAW,cAAa,WAAWC,EAAG,qBAAqBH,CAAS,GAAI,GAAGC,GAC9E,UAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,iEACX,UAAAJ,EAAM,IAAI,CAACM,GAAMC,MAAU;AAC1B,QAAMC,IAASD,MAAUP,EAAM,SAAS;AACxC,SACE,gBAAAS,EAAC,MAAA,EAAe,WAAU,6BACvB,UAAA;AAAA,IAAAF,IAAQ,KACP,gBAAAH;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,eAAY;AAAA,QACZ,WAAU;AAAA,QAET,UAAAH,uBAAcS,GAAA,CAAA,CAAa;AAAA,MAAA;AAAA,IAAA;AAAA,IAG/BF,IACC,gBAAAJ,EAAC,QAAA,EAAK,gBAAa,QAAO,WAAU,qCACjC,UAAAE,EAAK,MAAA,CACR,IACEA,EAAK,OACP,gBAAAF;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWC;AAAA,UACT;AAAA,UACAM;AAAA,QAAA;AAAA,QAEF,MAAML,EAAK;AAAA,QAEV,UAAAA,EAAK;AAAA,MAAA;AAAA,IAAA,IAGR,gBAAAF,EAAC,QAAA,EAAK,WAAU,gCAAgC,YAAK,MAAA,CAAM;AAAA,EAAA,EAAA,GAxBtDG,CA0BT;AAEJ,CAAC,GACH,EAAA,CACF;AAGFR,EAAW,cAAc;"}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
export type
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'link' | 'inverse' | 'glass' | 'success' | 'error' | 'warning' | 'info' | 'neutral';
|
|
3
|
+
export type ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
4
4
|
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
5
5
|
children: React.ReactNode;
|
|
6
|
+
/** Reduz o padding horizontal (útil em toolbars e tabelas). */
|
|
6
7
|
compact?: boolean;
|
|
7
8
|
fullWidth?: boolean;
|
|
9
|
+
/** Mostra spinner, desabilita o botão e anuncia `aria-busy`. A largura é preservada. */
|
|
8
10
|
isLoading?: boolean;
|
|
11
|
+
/** Texto anunciado durante o carregamento. Padrão: "Carregando". */
|
|
12
|
+
loadingLabel?: string;
|
|
9
13
|
leftIcon?: React.ReactNode;
|
|
10
|
-
/** Paleta de cor do guia de marca (aplica-se ao primary). Ignorado em outros variants. */
|
|
11
|
-
palette?: ButtonPalette;
|
|
12
14
|
rightIcon?: React.ReactNode;
|
|
13
|
-
size?:
|
|
14
|
-
variant?:
|
|
15
|
+
size?: ButtonSize;
|
|
16
|
+
variant?: ButtonVariant;
|
|
15
17
|
}
|
|
16
|
-
export declare const Button: React.
|
|
18
|
+
export declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
@@ -1,122 +1,81 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
},
|
|
48
|
-
"grafite-azulado": {
|
|
49
|
-
primary: "var(--brand-grafite-azulado)",
|
|
50
|
-
hover: "var(--brand-cinza-escuro)"
|
|
51
|
-
},
|
|
52
|
-
"azul-acinzentado": {
|
|
53
|
-
primary: "var(--brand-azul-acinzentado)",
|
|
54
|
-
hover: "var(--brand-grafite-azulado)"
|
|
55
|
-
},
|
|
56
|
-
"cinza-medio": {
|
|
57
|
-
primary: "var(--brand-cinza-medio)",
|
|
58
|
-
hover: "var(--brand-cinza-escuro)"
|
|
59
|
-
},
|
|
60
|
-
"cinza-escuro": {
|
|
61
|
-
primary: "var(--brand-cinza-escuro)",
|
|
62
|
-
hover: "var(--brand-preto)"
|
|
63
|
-
},
|
|
64
|
-
"off-white": {
|
|
65
|
-
primary: "var(--brand-off-white)",
|
|
66
|
-
hover: "var(--brand-branco)",
|
|
67
|
-
onPrimary: "var(--brand-grafite-azulado)"
|
|
68
|
-
}
|
|
69
|
-
}, s = {};
|
|
70
|
-
e && i === "primary" && (s["--md-primary"] = n[e].primary, s["--primary-color-hover"] = n[e].hover, n[e].onPrimary && (s["--md-on-primary"] = n[e].onPrimary));
|
|
71
|
-
const k = N(
|
|
72
|
-
y,
|
|
73
|
-
x,
|
|
74
|
-
g,
|
|
75
|
-
C[t],
|
|
76
|
-
j[i],
|
|
77
|
-
z,
|
|
78
|
-
u,
|
|
79
|
-
p
|
|
80
|
-
);
|
|
81
|
-
return /* @__PURE__ */ h(
|
|
1
|
+
import { jsxs as a, jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import f from "react";
|
|
3
|
+
import { cn as o } from "../../utils/cn.js";
|
|
4
|
+
import { focusRing as h, transitionColors as u, buttonReset as v } from "../../utils/styles.js";
|
|
5
|
+
import { Spinner as y } from "../Spinner/Spinner.js";
|
|
6
|
+
const S = {
|
|
7
|
+
xs: "min-h-7 gap-1 px-2.5 text-xs",
|
|
8
|
+
sm: "min-h-8 gap-1.5 px-3 text-sm",
|
|
9
|
+
md: "min-h-10 gap-2 px-4 text-sm",
|
|
10
|
+
lg: "min-h-12 gap-2 px-5 text-base",
|
|
11
|
+
xl: "min-h-14 gap-2.5 px-7 text-lg"
|
|
12
|
+
}, w = {
|
|
13
|
+
xs: "px-1.5",
|
|
14
|
+
sm: "px-2",
|
|
15
|
+
md: "px-2.5",
|
|
16
|
+
lg: "px-3",
|
|
17
|
+
xl: "px-4"
|
|
18
|
+
}, C = {
|
|
19
|
+
primary: "bg-sbk-primary text-sbk-on-primary hover:bg-sbk-primary-hover",
|
|
20
|
+
secondary: "bg-sbk-secondary text-sbk-on-secondary hover:bg-sbk-secondary-hover",
|
|
21
|
+
outline: "border-sbk-primary bg-transparent text-sbk-primary hover:bg-sbk-primary-subtle dark:border-sbk-fg dark:text-sbk-fg",
|
|
22
|
+
ghost: "bg-transparent text-sbk-fg hover:bg-sbk-surface-hover",
|
|
23
|
+
link: "min-h-0 bg-transparent px-0 text-sbk-primary underline-offset-4 hover:underline dark:text-sbk-fg",
|
|
24
|
+
inverse: "bg-sbk-surface-inverse text-sbk-fg-inverse hover:opacity-90",
|
|
25
|
+
glass: "sbk-glass text-sbk-fg hover:sbk-glass-strong",
|
|
26
|
+
success: "bg-sbk-success text-sbk-on-state hover:opacity-90",
|
|
27
|
+
error: "bg-sbk-error text-sbk-on-state hover:opacity-90",
|
|
28
|
+
warning: "bg-sbk-warning text-sbk-on-state hover:opacity-90",
|
|
29
|
+
info: "bg-sbk-info text-sbk-on-state hover:opacity-90",
|
|
30
|
+
neutral: "border-sbk-line-strong bg-sbk-surface text-sbk-fg hover:bg-sbk-surface-hover"
|
|
31
|
+
}, N = f.forwardRef(
|
|
32
|
+
({
|
|
33
|
+
variant: i = "primary",
|
|
34
|
+
size: r = "md",
|
|
35
|
+
compact: b = !1,
|
|
36
|
+
fullWidth: l = !1,
|
|
37
|
+
isLoading: e = !1,
|
|
38
|
+
loadingLabel: p = "Carregando",
|
|
39
|
+
leftIcon: t,
|
|
40
|
+
rightIcon: n,
|
|
41
|
+
children: m,
|
|
42
|
+
className: x,
|
|
43
|
+
disabled: c,
|
|
44
|
+
type: g = "button",
|
|
45
|
+
...k
|
|
46
|
+
}, d) => /* @__PURE__ */ a(
|
|
82
47
|
"button",
|
|
83
48
|
{
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
49
|
+
ref: d,
|
|
50
|
+
"aria-busy": e || void 0,
|
|
51
|
+
className: o(
|
|
52
|
+
v,
|
|
53
|
+
"relative inline-flex select-none items-center justify-center whitespace-nowrap rounded-sbk-sm border border-transparent font-sbk font-semibold leading-none",
|
|
54
|
+
"cursor-pointer disabled:cursor-not-allowed disabled:opacity-50",
|
|
55
|
+
u,
|
|
56
|
+
h,
|
|
57
|
+
S[r],
|
|
58
|
+
b && w[r],
|
|
59
|
+
C[i],
|
|
60
|
+
l && "w-full",
|
|
61
|
+
x
|
|
62
|
+
),
|
|
63
|
+
disabled: c || e,
|
|
64
|
+
type: g,
|
|
65
|
+
...k,
|
|
88
66
|
children: [
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
{
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
/* @__PURE__ */ a("circle", { cx: "12", cy: "12", r: "10", strokeOpacity: "0.25" }),
|
|
96
|
-
/* @__PURE__ */ a("path", { d: "M12 2 A10 10 0 0 1 22 12", strokeLinecap: "round" })
|
|
97
|
-
] })
|
|
98
|
-
}
|
|
99
|
-
),
|
|
100
|
-
!o && d && /* @__PURE__ */ a(
|
|
101
|
-
"span",
|
|
102
|
-
{
|
|
103
|
-
className: `mr-1 inline-flex shrink-0 items-center justify-center leading-none ${m[t]}`,
|
|
104
|
-
children: d
|
|
105
|
-
}
|
|
106
|
-
),
|
|
107
|
-
!o && /* @__PURE__ */ a("span", { className: "btn__content inline-flex items-center justify-center", children: c }),
|
|
108
|
-
!o && v && /* @__PURE__ */ a(
|
|
109
|
-
"span",
|
|
110
|
-
{
|
|
111
|
-
className: `ml-1 inline-flex shrink-0 items-center justify-center leading-none ${m[t]}`,
|
|
112
|
-
children: v
|
|
113
|
-
}
|
|
114
|
-
)
|
|
67
|
+
e && /* @__PURE__ */ s("span", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ s(y, { label: p, size: "sm" }) }),
|
|
68
|
+
/* @__PURE__ */ a("span", { className: o("inline-flex items-center gap-[inherit]", e && "invisible"), children: [
|
|
69
|
+
t && /* @__PURE__ */ s("span", { "aria-hidden": "true", className: "inline-flex shrink-0 [&_svg]:size-[1.15em]", children: t }),
|
|
70
|
+
m,
|
|
71
|
+
n && /* @__PURE__ */ s("span", { "aria-hidden": "true", className: "inline-flex shrink-0 [&_svg]:size-[1.15em]", children: n })
|
|
72
|
+
] })
|
|
115
73
|
]
|
|
116
74
|
}
|
|
117
|
-
)
|
|
118
|
-
|
|
75
|
+
)
|
|
76
|
+
);
|
|
77
|
+
N.displayName = "Button";
|
|
119
78
|
export {
|
|
120
|
-
|
|
79
|
+
N as Button
|
|
121
80
|
};
|
|
122
81
|
//# sourceMappingURL=Button.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sources":["../../../src/components/Button/Button.tsx"],"sourcesContent":["import type React from 'react';\nimport type { CSSProperties } from 'react';\nimport { cn } from '../../utils/cn';\n\n/** Paletas do guia de marca (só afeta variant primary). Use para escolher o modelo de cor do botão. */\nexport type ButtonPalette =\n | 'verde-vibrante'\n | 'verde-profundo'\n | 'grafite-azulado'\n | 'azul-acinzentado'\n | 'cinza-medio'\n | 'cinza-escuro'\n | 'off-white';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n compact?: boolean;\n fullWidth?: boolean;\n isLoading?: boolean;\n leftIcon?: React.ReactNode;\n /** Paleta de cor do guia de marca (aplica-se ao primary). Ignorado em outros variants. */\n palette?: ButtonPalette;\n rightIcon?: React.ReactNode;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n variant?:\n | 'primary'\n | 'secondary'\n | 'success'\n | 'error'\n | 'warning'\n | 'info'\n | 'neutral'\n | 'ghost';\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n variant = 'primary',\n size = 'md',\n compact = false,\n fullWidth = false,\n isLoading = false,\n leftIcon,\n rightIcon,\n children,\n className = '',\n disabled,\n palette,\n style,\n ...props\n}) => {\n const baseClass =\n 'relative inline-flex select-none items-center justify-center overflow-hidden whitespace-nowrap rounded-[var(--border-radius-md)] border border-transparent font-semibold leading-none tracking-[0.01em] transition-[all_var(--transition-base)]';\n const focusClass =\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--md-primary)]';\n const disabledClass =\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-60';\n const fullWidthClass = fullWidth ? 'w-full' : '';\n const offWhiteBorderClass =\n palette === 'off-white' && variant === 'primary' ? 'border-[var(--border-color)]' : '';\n\n const sizeClassMap: Record<NonNullable<ButtonProps['size']>, string> = {\n xs: compact\n ? 'min-h-[1.75rem] min-w-[1.75rem] gap-1 px-2 py-1 text-[var(--font-size-xs)]'\n : 'min-h-8 min-w-8 gap-1.5 px-3 py-1.5 text-[var(--font-size-xs)]',\n sm: compact\n ? 'min-h-8 min-w-8 gap-[0.3125rem] px-2.5 py-1.5 text-[var(--font-size-sm)]'\n : 'min-h-9 min-w-9 gap-[0.4375rem] px-3.5 py-2 text-[var(--font-size-sm)]',\n md: compact\n ? 'min-h-[2.375rem] min-w-[2.375rem] gap-1.5 px-3 py-2 text-[var(--font-size-base)]'\n : 'min-h-11 min-w-11 gap-2 px-4 py-2.5 text-[var(--font-size-base)]',\n lg: compact\n ? 'min-h-[2.625rem] min-w-[2.625rem] gap-[0.4375rem] px-3.5 py-[0.5625rem] text-[var(--font-size-lg)]'\n : 'min-h-12 min-w-12 gap-[0.5625rem] px-6 py-4 text-[var(--font-size-lg)]',\n xl: compact\n ? 'min-h-12 min-w-12 gap-2 px-4 py-3 text-[var(--font-size-xl)]'\n : 'min-h-14 min-w-14 gap-2.5 px-8 py-6 text-[var(--font-size-xl)]',\n };\n\n const variantClassMap: Record<NonNullable<ButtonProps['variant']>, string> = {\n primary:\n 'bg-[var(--md-primary)] text-[var(--md-on-primary)] shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--primary-color-hover)] hover:shadow-[var(--shadow-md)]',\n secondary:\n 'bg-[var(--md-secondary)] text-[var(--md-on-secondary)] shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--secondary-color-light)] hover:shadow-[var(--shadow-md)]',\n success:\n 'bg-[var(--success-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--success-color-light)] hover:shadow-[var(--shadow-md)]',\n error:\n 'bg-[var(--md-error)] text-[var(--md-on-error)] shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--error-color-light)] hover:shadow-[var(--shadow-md)]',\n warning:\n 'bg-[var(--warning-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--warning-color-light)] hover:shadow-[var(--shadow-md)]',\n info: 'bg-[var(--info-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--info-color-light)] hover:shadow-[var(--shadow-md)]',\n neutral:\n 'bg-[var(--neutral-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--neutral-color-light)] hover:shadow-[var(--shadow-md)]',\n ghost:\n 'border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--md-on-surface)] shadow-[var(--shadow-xs)] hover:bg-[var(--bg-hover)] hover:text-[var(--md-primary)] hover:border-[var(--border-color-hover)]',\n };\n\n const iconSizeClassMap: Record<NonNullable<ButtonProps['size']>, string> = {\n xs: compact ? 'h-3 w-3' : 'h-3.5 w-3.5',\n sm: compact ? 'h-3.5 w-3.5' : 'h-4 w-4',\n md: 'h-[1.125rem] w-[1.125rem]',\n lg: 'h-5 w-5',\n xl: 'h-5 w-5',\n };\n\n const paletteVars: Record<ButtonPalette, { primary: string; hover: string; onPrimary?: string }> =\n {\n 'verde-vibrante': {\n primary: 'var(--brand-verde-vibrante)',\n hover: 'var(--brand-verde-profundo)',\n },\n 'verde-profundo': {\n primary: 'var(--brand-verde-profundo)',\n hover: 'var(--brand-grafite-azulado)',\n },\n 'grafite-azulado': {\n primary: 'var(--brand-grafite-azulado)',\n hover: 'var(--brand-cinza-escuro)',\n },\n 'azul-acinzentado': {\n primary: 'var(--brand-azul-acinzentado)',\n hover: 'var(--brand-grafite-azulado)',\n },\n 'cinza-medio': {\n primary: 'var(--brand-cinza-medio)',\n hover: 'var(--brand-cinza-escuro)',\n },\n 'cinza-escuro': {\n primary: 'var(--brand-cinza-escuro)',\n hover: 'var(--brand-preto)',\n },\n 'off-white': {\n primary: 'var(--brand-off-white)',\n hover: 'var(--brand-branco)',\n onPrimary: 'var(--brand-grafite-azulado)',\n },\n };\n\n type ButtonCssVars = CSSProperties & {\n '--md-primary'?: string;\n '--primary-color-hover'?: string;\n '--md-on-primary'?: string;\n };\n const paletteStyle: ButtonCssVars = {};\n if (palette && variant === 'primary') {\n paletteStyle['--md-primary'] = paletteVars[palette].primary;\n paletteStyle['--primary-color-hover'] = paletteVars[palette].hover;\n if (paletteVars[palette].onPrimary) {\n paletteStyle['--md-on-primary'] = paletteVars[palette].onPrimary;\n }\n }\n\n const combinedClass = cn(\n baseClass,\n focusClass,\n disabledClass,\n sizeClassMap[size],\n variantClassMap[variant],\n offWhiteBorderClass,\n fullWidthClass,\n className,\n );\n\n return (\n <button\n className={combinedClass}\n disabled={disabled || isLoading}\n style={{ ...paletteStyle, ...style }}\n {...props}\n >\n {isLoading && (\n <span\n aria-hidden=\"true\"\n className=\"absolute inline-flex h-[1em] w-[1em] animate-spin items-center justify-center\"\n >\n <svg fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" strokeOpacity=\"0.25\" />\n <path d=\"M12 2 A10 10 0 0 1 22 12\" strokeLinecap=\"round\" />\n </svg>\n </span>\n )}\n {!isLoading && leftIcon && (\n <span\n className={`mr-1 inline-flex shrink-0 items-center justify-center leading-none ${iconSizeClassMap[size]}`}\n >\n {leftIcon}\n </span>\n )}\n {!isLoading && (\n <span className=\"btn__content inline-flex items-center justify-center\">{children}</span>\n )}\n {!isLoading && rightIcon && (\n <span\n className={`ml-1 inline-flex shrink-0 items-center justify-center leading-none ${iconSizeClassMap[size]}`}\n >\n {rightIcon}\n </span>\n )}\n </button>\n );\n};\n"],"names":["Button","variant","size","compact","fullWidth","isLoading","leftIcon","rightIcon","children","className","disabled","palette","style","props","baseClass","focusClass","disabledClass","fullWidthClass","offWhiteBorderClass","sizeClassMap","variantClassMap","iconSizeClassMap","paletteVars","paletteStyle","combinedClass","cn","jsxs","jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Button.js","sources":["../../../src/components/Button/Button.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils/cn';\nimport { buttonReset, focusRing, transitionColors } from '../../utils/styles';\nimport { Spinner } from '../Spinner/Spinner';\n\nexport type ButtonVariant =\n | 'primary'\n | 'secondary'\n | 'outline'\n | 'ghost'\n | 'link'\n | 'inverse'\n | 'glass'\n | 'success'\n | 'error'\n | 'warning'\n | 'info'\n | 'neutral';\n\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n /** Reduz o padding horizontal (útil em toolbars e tabelas). */\n compact?: boolean;\n fullWidth?: boolean;\n /** Mostra spinner, desabilita o botão e anuncia `aria-busy`. A largura é preservada. */\n isLoading?: boolean;\n /** Texto anunciado durante o carregamento. Padrão: \"Carregando\". */\n loadingLabel?: string;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n size?: ButtonSize;\n variant?: ButtonVariant;\n}\n\nconst SIZE_CLASS: Record<ButtonSize, string> = {\n xs: 'min-h-7 gap-1 px-2.5 text-xs',\n sm: 'min-h-8 gap-1.5 px-3 text-sm',\n md: 'min-h-10 gap-2 px-4 text-sm',\n lg: 'min-h-12 gap-2 px-5 text-base',\n xl: 'min-h-14 gap-2.5 px-7 text-lg',\n};\n\nconst COMPACT_CLASS: Record<ButtonSize, string> = {\n xs: 'px-1.5',\n sm: 'px-2',\n md: 'px-2.5',\n lg: 'px-3',\n xl: 'px-4',\n};\n\nconst VARIANT_CLASS: Record<ButtonVariant, string> = {\n primary: 'bg-sbk-primary text-sbk-on-primary hover:bg-sbk-primary-hover',\n secondary: 'bg-sbk-secondary text-sbk-on-secondary hover:bg-sbk-secondary-hover',\n outline:\n 'border-sbk-primary bg-transparent text-sbk-primary hover:bg-sbk-primary-subtle dark:border-sbk-fg dark:text-sbk-fg',\n ghost: 'bg-transparent text-sbk-fg hover:bg-sbk-surface-hover',\n link: 'min-h-0 bg-transparent px-0 text-sbk-primary underline-offset-4 hover:underline dark:text-sbk-fg',\n inverse: 'bg-sbk-surface-inverse text-sbk-fg-inverse hover:opacity-90',\n glass: 'sbk-glass text-sbk-fg hover:sbk-glass-strong',\n success: 'bg-sbk-success text-sbk-on-state hover:opacity-90',\n error: 'bg-sbk-error text-sbk-on-state hover:opacity-90',\n warning: 'bg-sbk-warning text-sbk-on-state hover:opacity-90',\n info: 'bg-sbk-info text-sbk-on-state hover:opacity-90',\n neutral: 'border-sbk-line-strong bg-sbk-surface text-sbk-fg hover:bg-sbk-surface-hover',\n};\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n variant = 'primary',\n size = 'md',\n compact = false,\n fullWidth = false,\n isLoading = false,\n loadingLabel = 'Carregando',\n leftIcon,\n rightIcon,\n children,\n className,\n disabled,\n type = 'button',\n ...props\n },\n ref,\n ) => (\n <button\n ref={ref}\n aria-busy={isLoading || undefined}\n className={cn(\n buttonReset,\n 'relative inline-flex select-none items-center justify-center whitespace-nowrap rounded-sbk-sm border border-transparent font-sbk font-semibold leading-none',\n 'cursor-pointer disabled:cursor-not-allowed disabled:opacity-50',\n transitionColors,\n focusRing,\n SIZE_CLASS[size],\n compact && COMPACT_CLASS[size],\n VARIANT_CLASS[variant],\n fullWidth && 'w-full',\n className,\n )}\n disabled={disabled || isLoading}\n type={type}\n {...props}\n >\n {isLoading && (\n <span className=\"absolute inset-0 flex items-center justify-center\">\n <Spinner label={loadingLabel} size=\"sm\" />\n </span>\n )}\n <span className={cn('inline-flex items-center gap-[inherit]', isLoading && 'invisible')}>\n {leftIcon && (\n <span aria-hidden=\"true\" className=\"inline-flex shrink-0 [&_svg]:size-[1.15em]\">\n {leftIcon}\n </span>\n )}\n {children}\n {rightIcon && (\n <span aria-hidden=\"true\" className=\"inline-flex shrink-0 [&_svg]:size-[1.15em]\">\n {rightIcon}\n </span>\n )}\n </span>\n </button>\n ),\n);\n\nButton.displayName = 'Button';\n"],"names":["SIZE_CLASS","COMPACT_CLASS","VARIANT_CLASS","Button","React","variant","size","compact","fullWidth","isLoading","loadingLabel","leftIcon","rightIcon","children","className","disabled","type","props","ref","jsxs","cn","buttonReset","transitionColors","focusRing","jsx","Spinner"],"mappings":";;;;;AAoCA,MAAMA,IAAyC;AAAA,EAC7C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAA4C;AAAA,EAChD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAA+C;AAAA,EACnD,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SACE;AAAA,EACF,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AACX,GAEaC,IAASC,EAAM;AAAA,EAC1B,CACE;AAAA,IACE,SAAAC,IAAU;AAAA,IACV,MAAAC,IAAO;AAAA,IACP,SAAAC,IAAU;AAAA,IACV,WAAAC,IAAY;AAAA,IACZ,WAAAC,IAAY;AAAA,IACZ,cAAAC,IAAe;AAAA,IACf,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,GAAGC;AAAA,EAAA,GAELC,MAEA,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,aAAWT,KAAa;AAAA,MACxB,WAAWW;AAAA,QACTC;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,QACAC;AAAA,QACAvB,EAAWM,CAAI;AAAA,QACfC,KAAWN,EAAcK,CAAI;AAAA,QAC7BJ,EAAcG,CAAO;AAAA,QACrBG,KAAa;AAAA,QACbM;AAAA,MAAA;AAAA,MAEF,UAAUC,KAAYN;AAAA,MACtB,MAAAO;AAAA,MACC,GAAGC;AAAA,MAEH,UAAA;AAAA,QAAAR,KACC,gBAAAe,EAAC,QAAA,EAAK,WAAU,qDACd,UAAA,gBAAAA,EAACC,KAAQ,OAAOf,GAAc,MAAK,KAAA,CAAK,EAAA,CAC1C;AAAA,0BAED,QAAA,EAAK,WAAWU,EAAG,0CAA0CX,KAAa,WAAW,GACnF,UAAA;AAAA,UAAAE,uBACE,QAAA,EAAK,eAAY,QAAO,WAAU,8CAChC,UAAAA,GACH;AAAA,UAEDE;AAAA,UACAD,KACC,gBAAAY,EAAC,QAAA,EAAK,eAAY,QAAO,WAAU,8CAChC,UAAAZ,EAAA,CACH;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAT,EAAO,cAAc;"}
|
|
@@ -1,8 +1,38 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type CardVariant = 'default' | 'elevated' | 'outlined' | 'flat' | 'inverse' | 'glass';
|
|
2
3
|
export interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
4
|
children: React.ReactNode;
|
|
5
|
+
/** Realce de hover (borda e sombra). Para cards clicáveis, use um <a>/<button> dentro do card. */
|
|
4
6
|
hoverable?: boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Cards empilhados atrás do card principal, com opacidades de 90% a 60%
|
|
9
|
+
* (sistema de cards do brand book). Use com moderação, em destaques.
|
|
10
|
+
*/
|
|
11
|
+
layered?: boolean;
|
|
5
12
|
padding?: 'none' | 'sm' | 'md' | 'lg' | 'xl';
|
|
6
|
-
variant?:
|
|
13
|
+
variant?: CardVariant;
|
|
7
14
|
}
|
|
8
|
-
export declare const Card: React.
|
|
15
|
+
export declare const Card: React.ForwardRefExoticComponent<CardProps & React.RefAttributes<HTMLDivElement>>;
|
|
16
|
+
export declare const CardHeader: {
|
|
17
|
+
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
displayName: string;
|
|
19
|
+
};
|
|
20
|
+
export interface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {
|
|
21
|
+
as?: 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
|
|
22
|
+
}
|
|
23
|
+
export declare const CardTitle: {
|
|
24
|
+
({ as: Tag, className, ...props }: CardTitleProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
displayName: string;
|
|
26
|
+
};
|
|
27
|
+
export declare const CardDescription: {
|
|
28
|
+
({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
displayName: string;
|
|
30
|
+
};
|
|
31
|
+
export declare const CardContent: {
|
|
32
|
+
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
displayName: string;
|
|
34
|
+
};
|
|
35
|
+
export declare const CardFooter: {
|
|
36
|
+
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
|
|
37
|
+
displayName: string;
|
|
38
|
+
};
|
|
@@ -1,33 +1,94 @@
|
|
|
1
|
-
import { jsx as m } from "react/jsx-runtime";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
i,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
1
|
+
import { jsx as a, jsxs as m } from "react/jsx-runtime";
|
|
2
|
+
import c from "react";
|
|
3
|
+
import { cn as t } from "../../utils/cn.js";
|
|
4
|
+
import { transitionColors as p, inverseScope as f } from "../../utils/styles.js";
|
|
5
|
+
const g = {
|
|
6
|
+
default: "border border-sbk-line bg-sbk-surface text-sbk-fg",
|
|
7
|
+
elevated: "border border-sbk-line bg-sbk-surface text-sbk-fg shadow-sbk-sm",
|
|
8
|
+
outlined: "border border-sbk-line-strong bg-transparent text-sbk-fg",
|
|
9
|
+
flat: "border border-transparent bg-sbk-surface-sunken text-sbk-fg",
|
|
10
|
+
inverse: t("border border-transparent", f),
|
|
11
|
+
glass: "sbk-glass text-sbk-fg"
|
|
12
|
+
}, k = {
|
|
13
|
+
none: "p-0",
|
|
14
|
+
sm: "p-3",
|
|
15
|
+
md: "p-4",
|
|
16
|
+
lg: "p-6",
|
|
17
|
+
xl: "p-8"
|
|
18
|
+
}, u = c.forwardRef(
|
|
19
|
+
({
|
|
20
|
+
variant: e = "default",
|
|
21
|
+
padding: s = "md",
|
|
22
|
+
hoverable: r = !1,
|
|
23
|
+
layered: d = !1,
|
|
24
|
+
children: n,
|
|
25
|
+
className: i,
|
|
26
|
+
...l
|
|
27
|
+
}, b) => {
|
|
28
|
+
const o = /* @__PURE__ */ a(
|
|
29
|
+
"div",
|
|
30
|
+
{
|
|
31
|
+
ref: b,
|
|
32
|
+
className: t(
|
|
33
|
+
"relative overflow-hidden rounded-sbk-md",
|
|
34
|
+
g[e],
|
|
35
|
+
k[s],
|
|
36
|
+
r && t(
|
|
37
|
+
"hover:border-sbk-line-strong hover:shadow-sbk-md",
|
|
38
|
+
p,
|
|
39
|
+
"transition-shadow"
|
|
40
|
+
),
|
|
41
|
+
i
|
|
42
|
+
),
|
|
43
|
+
...l,
|
|
44
|
+
children: n
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
return d ? /* @__PURE__ */ m("div", { className: "relative isolate pb-4", children: [
|
|
48
|
+
/* @__PURE__ */ a(
|
|
49
|
+
"span",
|
|
50
|
+
{
|
|
51
|
+
"aria-hidden": "true",
|
|
52
|
+
className: "absolute inset-x-6 top-4 bottom-0 -z-20 rounded-sbk-md bg-sbk-verde-claro opacity-[var(--sbk-card-layer-opacity-3)]"
|
|
53
|
+
}
|
|
54
|
+
),
|
|
55
|
+
/* @__PURE__ */ a(
|
|
56
|
+
"span",
|
|
57
|
+
{
|
|
58
|
+
"aria-hidden": "true",
|
|
59
|
+
className: "absolute inset-x-3 top-2 bottom-2 -z-10 rounded-sbk-md bg-sbk-ciano opacity-[var(--sbk-card-layer-opacity-2)]"
|
|
60
|
+
}
|
|
61
|
+
),
|
|
62
|
+
o
|
|
63
|
+
] }) : o;
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
u.displayName = "Card";
|
|
67
|
+
const x = ({ className: e, ...s }) => /* @__PURE__ */ a("div", { className: t("mb-3 flex items-start justify-between gap-3", e), ...s });
|
|
68
|
+
x.displayName = "CardHeader";
|
|
69
|
+
const C = ({ as: e = "h3", className: s, ...r }) => /* @__PURE__ */ a(
|
|
70
|
+
e,
|
|
71
|
+
{
|
|
72
|
+
className: t("m-0 text-lg font-semibold leading-tight text-sbk-fg-heading", s),
|
|
73
|
+
...r
|
|
74
|
+
}
|
|
75
|
+
);
|
|
76
|
+
C.displayName = "CardTitle";
|
|
77
|
+
const N = ({
|
|
78
|
+
className: e,
|
|
79
|
+
...s
|
|
80
|
+
}) => /* @__PURE__ */ a("p", { className: t("m-0 text-sm font-light text-sbk-fg-muted", e), ...s });
|
|
81
|
+
N.displayName = "CardDescription";
|
|
82
|
+
const v = ({ className: e, ...s }) => /* @__PURE__ */ a("div", { className: t("font-light", e), ...s });
|
|
83
|
+
v.displayName = "CardContent";
|
|
84
|
+
const h = ({ className: e, ...s }) => /* @__PURE__ */ a("div", { className: t("mt-4 flex items-center justify-end gap-2", e), ...s });
|
|
85
|
+
h.displayName = "CardFooter";
|
|
30
86
|
export {
|
|
31
|
-
|
|
87
|
+
u as Card,
|
|
88
|
+
v as CardContent,
|
|
89
|
+
N as CardDescription,
|
|
90
|
+
h as CardFooter,
|
|
91
|
+
x as CardHeader,
|
|
92
|
+
C as CardTitle
|
|
32
93
|
};
|
|
33
94
|
//# sourceMappingURL=Card.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.js","sources":["../../../src/components/Card/Card.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"Card.js","sources":["../../../src/components/Card/Card.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils/cn';\nimport { inverseScope, transitionColors } from '../../utils/styles';\n\nexport type CardVariant = 'default' | 'elevated' | 'outlined' | 'flat' | 'inverse' | 'glass';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n /** Realce de hover (borda e sombra). Para cards clicáveis, use um <a>/<button> dentro do card. */\n hoverable?: boolean;\n /**\n * Cards empilhados atrás do card principal, com opacidades de 90% a 60%\n * (sistema de cards do brand book). Use com moderação, em destaques.\n */\n layered?: boolean;\n padding?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n variant?: CardVariant;\n}\n\nconst VARIANT_CLASS: Record<CardVariant, string> = {\n default: 'border border-sbk-line bg-sbk-surface text-sbk-fg',\n elevated: 'border border-sbk-line bg-sbk-surface text-sbk-fg shadow-sbk-sm',\n outlined: 'border border-sbk-line-strong bg-transparent text-sbk-fg',\n flat: 'border border-transparent bg-sbk-surface-sunken text-sbk-fg',\n inverse: cn('border border-transparent', inverseScope),\n glass: 'sbk-glass text-sbk-fg',\n};\n\nconst PADDING_CLASS: Record<NonNullable<CardProps['padding']>, string> = {\n none: 'p-0',\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-6',\n xl: 'p-8',\n};\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n {\n variant = 'default',\n padding = 'md',\n hoverable = false,\n layered = false,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const card = (\n <div\n ref={ref}\n className={cn(\n 'relative overflow-hidden rounded-sbk-md',\n VARIANT_CLASS[variant],\n PADDING_CLASS[padding],\n hoverable &&\n cn(\n 'hover:border-sbk-line-strong hover:shadow-sbk-md',\n transitionColors,\n 'transition-shadow',\n ),\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n\n if (!layered) return card;\n\n // Camadas atrás do card (sistema de cards do brand book, opacidades 75% e 60%).\n return (\n <div className=\"relative isolate pb-4\">\n <span\n aria-hidden=\"true\"\n className=\"absolute inset-x-6 top-4 bottom-0 -z-20 rounded-sbk-md bg-sbk-verde-claro opacity-[var(--sbk-card-layer-opacity-3)]\"\n />\n <span\n aria-hidden=\"true\"\n className=\"absolute inset-x-3 top-2 bottom-2 -z-10 rounded-sbk-md bg-sbk-ciano opacity-[var(--sbk-card-layer-opacity-2)]\"\n />\n {card}\n </div>\n );\n },\n);\nCard.displayName = 'Card';\n\nexport const CardHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('mb-3 flex items-start justify-between gap-3', className)} {...props} />\n);\nCardHeader.displayName = 'CardHeader';\n\nexport interface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n as?: 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n}\nexport const CardTitle = ({ as: Tag = 'h3', className, ...props }: CardTitleProps) => (\n <Tag\n className={cn('m-0 text-lg font-semibold leading-tight text-sbk-fg-heading', className)}\n {...props}\n />\n);\nCardTitle.displayName = 'CardTitle';\n\nexport const CardDescription = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLParagraphElement>) => (\n <p className={cn('m-0 text-sm font-light text-sbk-fg-muted', className)} {...props} />\n);\nCardDescription.displayName = 'CardDescription';\n\nexport const CardContent = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('font-light', className)} {...props} />\n);\nCardContent.displayName = 'CardContent';\n\nexport const CardFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('mt-4 flex items-center justify-end gap-2', className)} {...props} />\n);\nCardFooter.displayName = 'CardFooter';\n"],"names":["VARIANT_CLASS","cn","inverseScope","PADDING_CLASS","Card","React","variant","padding","hoverable","layered","children","className","props","ref","card","jsx","transitionColors","jsxs","CardHeader","CardTitle","Tag","CardDescription","CardContent","CardFooter"],"mappings":";;;;AAmBA,MAAMA,IAA6C;AAAA,EACjD,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,MAAM;AAAA,EACN,SAASC,EAAG,6BAA6BC,CAAY;AAAA,EACrD,OAAO;AACT,GAEMC,IAAmE;AAAA,EACvE,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEaC,IAAOC,EAAM;AAAA,EACxB,CACE;AAAA,IACE,SAAAC,IAAU;AAAA,IACV,SAAAC,IAAU;AAAA,IACV,WAAAC,IAAY;AAAA,IACZ,SAAAC,IAAU;AAAA,IACV,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IACJ,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAF;AAAA,QACA,WAAWZ;AAAA,UACT;AAAA,UACAD,EAAcM,CAAO;AAAA,UACrBH,EAAcI,CAAO;AAAA,UACrBC,KACEP;AAAA,YACE;AAAA,YACAe;AAAA,YACA;AAAA,UAAA;AAAA,UAEJL;AAAA,QAAA;AAAA,QAED,GAAGC;AAAA,QAEH,UAAAF;AAAA,MAAA;AAAA,IAAA;AAIL,WAAKD,IAIH,gBAAAQ,EAAC,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,MAAA,gBAAAF;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZ,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEXD;AAAA,IAAA,GACH,IAdmBA;AAAA,EAgBvB;AACF;AACAV,EAAK,cAAc;AAEZ,MAAMc,IAAa,CAAC,EAAE,WAAAP,GAAW,GAAGC,EAAA,MACzC,gBAAAG,EAAC,OAAA,EAAI,WAAWd,EAAG,+CAA+CU,CAAS,GAAI,GAAGC,EAAA,CAAO;AAE3FM,EAAW,cAAc;AAKlB,MAAMC,IAAY,CAAC,EAAE,IAAIC,IAAM,MAAM,WAAAT,GAAW,GAAGC,EAAA,MACxD,gBAAAG;AAAA,EAACK;AAAA,EAAA;AAAA,IACC,WAAWnB,EAAG,+DAA+DU,CAAS;AAAA,IACrF,GAAGC;AAAA,EAAA;AACN;AAEFO,EAAU,cAAc;AAEjB,MAAME,IAAkB,CAAC;AAAA,EAC9B,WAAAV;AAAA,EACA,GAAGC;AACL,MACE,gBAAAG,EAAC,OAAE,WAAWd,EAAG,4CAA4CU,CAAS,GAAI,GAAGC,EAAA,CAAO;AAEtFS,EAAgB,cAAc;AAEvB,MAAMC,IAAc,CAAC,EAAE,WAAAX,GAAW,GAAGC,EAAA,MAC1C,gBAAAG,EAAC,OAAA,EAAI,WAAWd,EAAG,cAAcU,CAAS,GAAI,GAAGC,EAAA,CAAO;AAE1DU,EAAY,cAAc;AAEnB,MAAMC,IAAa,CAAC,EAAE,WAAAZ,GAAW,GAAGC,EAAA,MACzC,gBAAAG,EAAC,OAAA,EAAI,WAAWd,EAAG,4CAA4CU,CAAS,GAAI,GAAGC,EAAA,CAAO;AAExFW,EAAW,cAAc;"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
export interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {
|
|
3
|
+
error?: string;
|
|
3
4
|
helperText?: string;
|
|
4
|
-
|
|
5
|
+
/** Estado intermediário (ex.: "selecionar todos" parcial). */
|
|
6
|
+
indeterminate?: boolean;
|
|
7
|
+
label?: React.ReactNode;
|
|
5
8
|
}
|
|
6
9
|
export declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLInputElement>>;
|