@sbkbs/ui 1.0.6 → 2.0.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 +12 -6
- 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 -115
- 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 +25 -14
- package/dist/components/Header/Header.js +88 -148
- 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 +12 -6
- 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 +11 -3
- 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 +41 -53
- 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 +327 -294
- 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 -117
- 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
- package/dist/sbk-icon.png +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberInput.js","sources":["../../../src/components/NumberInput/NumberInput.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface NumberInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'size' | 'onChange'\n> {\n error?: string;\n helperText?: string;\n label?:
|
|
1
|
+
{"version":3,"file":"NumberInput.js","sources":["../../../src/components/NumberInput/NumberInput.tsx"],"sourcesContent":["import React, { useId } from 'react';\r\nimport { Minus, Plus } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\nimport { buttonReset, describedBy, focusRing, transitionColors } from '../../utils/styles';\r\nimport { Field } from '../Field/Field';\r\n\r\nexport interface NumberInputProps extends Omit<\r\n React.InputHTMLAttributes<HTMLInputElement>,\r\n 'type' | 'size' | 'onChange' | 'value' | 'defaultValue'\r\n> {\r\n defaultValue?: number;\r\n error?: string;\r\n helperText?: string;\r\n label?: React.ReactNode;\r\n max?: number;\r\n min?: number;\r\n onChange?: (value: number | null) => void;\r\n size?: 'sm' | 'md' | 'lg';\r\n step?: number;\r\n value?: number | null;\r\n}\r\n\r\nconst HEIGHT = { sm: 'min-h-8 text-sm', md: 'min-h-10 text-base', lg: 'min-h-12 text-lg' } as const;\r\nconst STEPPER = {\r\n sm: 'w-8 [&_svg]:size-3.5',\r\n md: 'w-10 [&_svg]:size-4',\r\n lg: 'w-12 [&_svg]:size-5',\r\n} as const;\r\n\r\nconst clamp = (n: number, min?: number, max?: number) =>\r\n Math.min(max ?? Number.POSITIVE_INFINITY, Math.max(min ?? Number.NEGATIVE_INFINITY, n));\r\n\r\n/** Campo numérico com botões de incremento. Controlado via `value` + `onChange`. */\r\nexport const NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\r\n (\r\n {\r\n label,\r\n error,\r\n helperText,\r\n size = 'md',\r\n min,\r\n max,\r\n step = 1,\r\n onChange,\r\n className,\r\n id,\r\n value,\r\n defaultValue,\r\n disabled,\r\n required,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const autoId = useId();\r\n const inputId = id ?? autoId;\r\n const current = value ?? defaultValue ?? 0;\r\n\r\n const stepBy = (dir: 1 | -1) => onChange?.(clamp(current + dir * step, min, max));\r\n\r\n const stepperClass = cn(\r\n 'flex shrink-0 cursor-pointer items-center justify-center bg-sbk-surface-sunken text-sbk-fg-muted hover:bg-sbk-surface-hover hover:text-sbk-fg disabled:cursor-not-allowed disabled:opacity-50',\r\n transitionColors,\r\n focusRing,\r\n STEPPER[size],\r\n );\r\n\r\n return (\r\n <Field error={error} helperText={helperText} id={inputId} label={label} required={required}>\r\n <div\r\n className={cn(\r\n 'inline-flex overflow-hidden rounded-sbk-sm border border-sbk-line-strong bg-sbk-surface',\r\n 'focus-within:border-sbk-primary',\r\n error && 'border-sbk-error',\r\n disabled && 'opacity-60',\r\n )}\r\n >\r\n <button\r\n aria-controls={inputId}\r\n aria-label=\"Diminuir\"\r\n className={cn(buttonReset, stepperClass, 'border-r border-sbk-line')}\r\n disabled={disabled || (min !== undefined && current <= min)}\r\n onClick={() => stepBy(-1)}\r\n tabIndex={-1}\r\n type=\"button\"\r\n >\r\n <Minus aria-hidden=\"true\" />\r\n </button>\r\n <input\r\n ref={ref}\r\n aria-describedby={describedBy(inputId, error, helperText)}\r\n aria-invalid={error ? true : undefined}\r\n className={cn(\r\n 'w-full min-w-0 bg-transparent px-3 text-center font-light text-sbk-fg outline-none [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none',\r\n HEIGHT[size],\r\n className,\r\n )}\r\n defaultValue={value === undefined ? defaultValue : undefined}\r\n disabled={disabled}\r\n id={inputId}\r\n inputMode=\"decimal\"\r\n max={max}\r\n min={min}\r\n onChange={(e) => onChange?.(e.target.value === '' ? null : Number(e.target.value))}\r\n required={required}\r\n step={step}\r\n type=\"number\"\r\n value={value === undefined ? undefined : (value ?? '')}\r\n {...props}\r\n />\r\n <button\r\n aria-controls={inputId}\r\n aria-label=\"Aumentar\"\r\n className={cn(buttonReset, stepperClass, 'border-l border-sbk-line')}\r\n disabled={disabled || (max !== undefined && current >= max)}\r\n onClick={() => stepBy(1)}\r\n tabIndex={-1}\r\n type=\"button\"\r\n >\r\n <Plus aria-hidden=\"true\" />\r\n </button>\r\n </div>\r\n </Field>\r\n );\r\n },\r\n);\r\n\r\nNumberInput.displayName = 'NumberInput';\r\n"],"names":["HEIGHT","STEPPER","clamp","n","min","max","NumberInput","React","label","error","helperText","size","step","onChange","className","id","value","defaultValue","disabled","required","props","ref","autoId","useId","inputId","current","stepBy","dir","stepperClass","cn","transitionColors","focusRing","Field","jsxs","jsx","buttonReset","Minus","describedBy","e","Plus"],"mappings":"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"}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
2
|
export interface PageHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
3
3
|
actions?: React.ReactNode;
|
|
4
|
+
/** Conteúdo acima do título (ex.: Breadcrumb). */
|
|
5
|
+
breadcrumb?: React.ReactNode;
|
|
4
6
|
subtitle?: React.ReactNode;
|
|
5
7
|
title: React.ReactNode;
|
|
8
|
+
/** `plain`: sem caixa. `card`: superfície com borda. `inverse`: bloco verde escuro (hero). */
|
|
9
|
+
variant?: 'plain' | 'card' | 'inverse';
|
|
6
10
|
}
|
|
7
|
-
export declare const PageHeader:
|
|
11
|
+
export declare const PageHeader: {
|
|
12
|
+
({ title, subtitle, actions, breadcrumb, variant, className, ...props }: PageHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
displayName: string;
|
|
14
|
+
};
|
|
@@ -1,29 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { cn as
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { jsxs as e, jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import { cn as d } from "../../utils/cn.js";
|
|
3
|
+
import { inverseScope as c } from "../../utils/styles.js";
|
|
4
|
+
const p = {
|
|
5
|
+
plain: "",
|
|
6
|
+
card: "rounded-sbk-md border border-sbk-line bg-sbk-surface p-5",
|
|
7
|
+
inverse: d("rounded-sbk-md p-6 md:p-8", c)
|
|
8
|
+
}, o = ({
|
|
9
|
+
title: i,
|
|
10
|
+
subtitle: s,
|
|
6
11
|
actions: a,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
a && /* @__PURE__ */ e("div", { className: "flex items-center gap-2", children: a })
|
|
23
|
-
] })
|
|
24
|
-
}
|
|
25
|
-
);
|
|
12
|
+
breadcrumb: m,
|
|
13
|
+
variant: t = "card",
|
|
14
|
+
className: l,
|
|
15
|
+
...n
|
|
16
|
+
}) => /* @__PURE__ */ e("header", { className: d("grid gap-3", p[t], l), ...n, children: [
|
|
17
|
+
m,
|
|
18
|
+
/* @__PURE__ */ e("div", { className: "flex flex-wrap items-start justify-between gap-4", children: [
|
|
19
|
+
/* @__PURE__ */ e("div", { className: "grid min-w-0 gap-1", children: [
|
|
20
|
+
/* @__PURE__ */ r("h1", { className: "m-0 text-2xl font-semibold leading-tight text-sbk-fg-heading md:text-[1.75rem]", children: i }),
|
|
21
|
+
s && /* @__PURE__ */ r("p", { className: "m-0 text-sm font-light text-sbk-fg-muted", children: s })
|
|
22
|
+
] }),
|
|
23
|
+
a && /* @__PURE__ */ r("div", { className: "flex shrink-0 flex-wrap items-center gap-2", children: a })
|
|
24
|
+
] })
|
|
25
|
+
] });
|
|
26
|
+
o.displayName = "PageHeader";
|
|
26
27
|
export {
|
|
27
|
-
|
|
28
|
+
o as PageHeader
|
|
28
29
|
};
|
|
29
30
|
//# sourceMappingURL=PageHeader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageHeader.js","sources":["../../../src/components/PageHeader/PageHeader.tsx"],"sourcesContent":["import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface PageHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n actions?: React.ReactNode;\n subtitle?: React.ReactNode;\n title: React.ReactNode;\n}\n\nexport const PageHeader
|
|
1
|
+
{"version":3,"file":"PageHeader.js","sources":["../../../src/components/PageHeader/PageHeader.tsx"],"sourcesContent":["import type React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { inverseScope } from '../../utils/styles';\r\n\r\nexport interface PageHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\r\n actions?: React.ReactNode;\r\n /** Conteúdo acima do título (ex.: Breadcrumb). */\r\n breadcrumb?: React.ReactNode;\r\n subtitle?: React.ReactNode;\r\n title: React.ReactNode;\r\n /** `plain`: sem caixa. `card`: superfície com borda. `inverse`: bloco verde escuro (hero). */\r\n variant?: 'plain' | 'card' | 'inverse';\r\n}\r\n\r\nconst VARIANT_CLASS = {\r\n plain: '',\r\n card: 'rounded-sbk-md border border-sbk-line bg-sbk-surface p-5',\r\n inverse: cn('rounded-sbk-md p-6 md:p-8', inverseScope),\r\n} as const;\r\n\r\nexport const PageHeader = ({\r\n title,\r\n subtitle,\r\n actions,\r\n breadcrumb,\r\n variant = 'card',\r\n className,\r\n ...props\r\n}: PageHeaderProps) => (\r\n <header className={cn('grid gap-3', VARIANT_CLASS[variant], className)} {...props}>\r\n {breadcrumb}\r\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\r\n <div className=\"grid min-w-0 gap-1\">\r\n <h1 className=\"m-0 text-2xl font-semibold leading-tight text-sbk-fg-heading md:text-[1.75rem]\">\r\n {title}\r\n </h1>\r\n {subtitle && <p className=\"m-0 text-sm font-light text-sbk-fg-muted\">{subtitle}</p>}\r\n </div>\r\n {actions && <div className=\"flex shrink-0 flex-wrap items-center gap-2\">{actions}</div>}\r\n </div>\r\n </header>\r\n);\r\n\r\nPageHeader.displayName = 'PageHeader';\r\n"],"names":["VARIANT_CLASS","cn","inverseScope","PageHeader","title","subtitle","actions","breadcrumb","variant","className","props","jsxs","jsx"],"mappings":";;;AAcA,MAAMA,IAAgB;AAAA,EACpB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAASC,EAAG,6BAA6BC,CAAY;AACvD,GAEaC,IAAa,CAAC;AAAA,EACzB,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,WAAAC;AAAA,EACA,GAAGC;AACL,MACE,gBAAAC,EAAC,UAAA,EAAO,WAAWV,EAAG,cAAcD,EAAcQ,CAAO,GAAGC,CAAS,GAAI,GAAGC,GACzE,UAAA;AAAA,EAAAH;AAAA,EACD,gBAAAI,EAAC,OAAA,EAAI,WAAU,oDACb,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,sBACb,UAAA;AAAA,MAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,kFACX,UAAAR,GACH;AAAA,MACCC,KAAY,gBAAAO,EAAC,KAAA,EAAE,WAAU,4CAA4C,UAAAP,EAAA,CAAS;AAAA,IAAA,GACjF;AAAA,IACCC,KAAW,gBAAAM,EAAC,OAAA,EAAI,WAAU,8CAA8C,UAAAN,EAAA,CAAQ;AAAA,EAAA,EAAA,CACnF;AAAA,EAAA,CACF;AAGFH,EAAW,cAAc;"}
|
|
@@ -1,7 +1,20 @@
|
|
|
1
|
-
import type React from 'react';
|
|
2
1
|
export interface PaginationProps {
|
|
2
|
+
className?: string;
|
|
3
3
|
currentPage: number;
|
|
4
4
|
onPageChange: (page: number) => void;
|
|
5
|
+
/** Páginas vizinhas exibidas ao redor da atual. Padrão: 1. */
|
|
6
|
+
siblingCount?: number;
|
|
7
|
+
/**
|
|
8
|
+
* `numbered`: lista de páginas com reticências.
|
|
9
|
+
* `simple`: apenas Anterior/Próxima com "Página X de Y" (para paginação sequencial).
|
|
10
|
+
*/
|
|
11
|
+
variant?: 'numbered' | 'simple';
|
|
5
12
|
totalPages: number;
|
|
6
13
|
}
|
|
7
|
-
|
|
14
|
+
type PageToken = number | 'ellipsis-start' | 'ellipsis-end';
|
|
15
|
+
export declare const getPageTokens: (current: number, total: number, siblings?: number) => PageToken[];
|
|
16
|
+
export declare const Pagination: {
|
|
17
|
+
({ currentPage, totalPages, onPageChange, siblingCount, variant, className, }: PaginationProps): import("react/jsx-runtime").JSX.Element | null;
|
|
18
|
+
displayName: string;
|
|
19
|
+
};
|
|
20
|
+
export {};
|
|
@@ -1,50 +1,84 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { jsxs as m, jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import { ChevronLeft as f, ChevronRight as u } from "lucide-react";
|
|
3
|
+
import { cn as a } from "../../utils/cn.js";
|
|
4
|
+
import { focusRing as h, transitionColors as x, buttonReset as p } from "../../utils/styles.js";
|
|
5
|
+
const y = (e, i, r = 1) => {
|
|
6
|
+
const d = r * 2 + 5;
|
|
7
|
+
if (i <= d) return Array.from({ length: i }, (s, c) => c + 1);
|
|
8
|
+
const o = Math.max(2, e - r), l = Math.min(i - 1, e + r), t = [1];
|
|
9
|
+
o > 2 && t.push("ellipsis-start");
|
|
10
|
+
for (let s = o; s <= l; s++) t.push(s);
|
|
11
|
+
return l < i - 1 && t.push("ellipsis-end"), t.push(i), t;
|
|
12
|
+
}, b = a(
|
|
13
|
+
"inline-flex min-h-9 min-w-9 cursor-pointer items-center justify-center gap-1 rounded-sbk-sm border px-2.5 text-sm disabled:cursor-not-allowed disabled:opacity-50",
|
|
14
|
+
x,
|
|
15
|
+
h
|
|
16
|
+
), N = ({
|
|
17
|
+
currentPage: e,
|
|
18
|
+
totalPages: i,
|
|
19
|
+
onPageChange: r,
|
|
20
|
+
siblingCount: d = 1,
|
|
21
|
+
variant: o = "numbered",
|
|
22
|
+
className: l
|
|
7
23
|
}) => {
|
|
8
|
-
if (
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
/* @__PURE__ */ a(
|
|
24
|
+
if (i <= 1) return null;
|
|
25
|
+
const t = "border-sbk-line bg-sbk-surface font-light text-sbk-fg hover:bg-sbk-surface-hover";
|
|
26
|
+
return /* @__PURE__ */ m("nav", { "aria-label": "Paginação", className: a("flex flex-wrap items-center gap-1", l), children: [
|
|
27
|
+
/* @__PURE__ */ m(
|
|
13
28
|
"button",
|
|
14
29
|
{
|
|
15
|
-
className:
|
|
16
|
-
disabled:
|
|
17
|
-
onClick: () => e
|
|
30
|
+
className: a(p, b, t),
|
|
31
|
+
disabled: e <= 1,
|
|
32
|
+
onClick: () => r(e - 1),
|
|
18
33
|
type: "button",
|
|
19
|
-
children:
|
|
34
|
+
children: [
|
|
35
|
+
/* @__PURE__ */ n(f, { "aria-hidden": "true", className: "size-4" }),
|
|
36
|
+
"Anterior"
|
|
37
|
+
]
|
|
20
38
|
}
|
|
21
39
|
),
|
|
22
|
-
|
|
23
|
-
"
|
|
24
|
-
{
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
o === "simple" ? /* @__PURE__ */ m("span", { "aria-live": "polite", className: "px-3 text-sm font-light text-sbk-fg-muted", children: [
|
|
41
|
+
"Página ",
|
|
42
|
+
/* @__PURE__ */ n("strong", { className: "font-semibold text-sbk-fg", children: e }),
|
|
43
|
+
" de",
|
|
44
|
+
" ",
|
|
45
|
+
i
|
|
46
|
+
] }) : y(e, i, d).map(
|
|
47
|
+
(s) => typeof s == "number" ? /* @__PURE__ */ n(
|
|
48
|
+
"button",
|
|
49
|
+
{
|
|
50
|
+
"aria-current": s === e ? "page" : void 0,
|
|
51
|
+
"aria-label": `Página ${s}`,
|
|
52
|
+
className: a(
|
|
53
|
+
p,
|
|
54
|
+
b,
|
|
55
|
+
s === e ? "border-sbk-primary bg-sbk-primary font-semibold text-sbk-on-primary" : t
|
|
56
|
+
),
|
|
57
|
+
onClick: () => r(s),
|
|
58
|
+
type: "button",
|
|
59
|
+
children: s
|
|
60
|
+
},
|
|
61
|
+
s
|
|
62
|
+
) : /* @__PURE__ */ n("span", { "aria-hidden": "true", className: "px-1 text-sm text-sbk-fg-muted", children: "…" }, s)
|
|
63
|
+
),
|
|
64
|
+
/* @__PURE__ */ m(
|
|
36
65
|
"button",
|
|
37
66
|
{
|
|
38
|
-
className:
|
|
39
|
-
disabled:
|
|
40
|
-
onClick: () => e
|
|
67
|
+
className: a(p, b, t),
|
|
68
|
+
disabled: e >= i,
|
|
69
|
+
onClick: () => r(e + 1),
|
|
41
70
|
type: "button",
|
|
42
|
-
children:
|
|
71
|
+
children: [
|
|
72
|
+
"Próxima",
|
|
73
|
+
/* @__PURE__ */ n(u, { "aria-hidden": "true", className: "size-4" })
|
|
74
|
+
]
|
|
43
75
|
}
|
|
44
76
|
)
|
|
45
77
|
] });
|
|
46
78
|
};
|
|
79
|
+
N.displayName = "Pagination";
|
|
47
80
|
export {
|
|
48
|
-
|
|
81
|
+
N as Pagination,
|
|
82
|
+
y as getPageTokens
|
|
49
83
|
};
|
|
50
84
|
//# sourceMappingURL=Pagination.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pagination.js","sources":["../../../src/components/Pagination/Pagination.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"Pagination.js","sources":["../../../src/components/Pagination/Pagination.tsx"],"sourcesContent":["import { ChevronLeft, ChevronRight } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\nimport { buttonReset, focusRing, transitionColors } from '../../utils/styles';\r\n\r\nexport interface PaginationProps {\r\n className?: string;\r\n currentPage: number;\r\n onPageChange: (page: number) => void;\r\n /** Páginas vizinhas exibidas ao redor da atual. Padrão: 1. */\r\n siblingCount?: number;\r\n /**\r\n * `numbered`: lista de páginas com reticências.\r\n * `simple`: apenas Anterior/Próxima com \"Página X de Y\" (para paginação sequencial).\r\n */\r\n variant?: 'numbered' | 'simple';\r\n totalPages: number;\r\n}\r\n\r\ntype PageToken = number | 'ellipsis-start' | 'ellipsis-end';\r\n\r\nexport const getPageTokens = (current: number, total: number, siblings = 1): PageToken[] => {\r\n const window = siblings * 2 + 5;\r\n if (total <= window) return Array.from({ length: total }, (_, i) => i + 1);\r\n const start = Math.max(2, current - siblings);\r\n const end = Math.min(total - 1, current + siblings);\r\n const tokens: PageToken[] = [1];\r\n if (start > 2) tokens.push('ellipsis-start');\r\n for (let p = start; p <= end; p++) tokens.push(p);\r\n if (end < total - 1) tokens.push('ellipsis-end');\r\n tokens.push(total);\r\n return tokens;\r\n};\r\n\r\nconst buttonBase = cn(\r\n 'inline-flex min-h-9 min-w-9 cursor-pointer items-center justify-center gap-1 rounded-sbk-sm border px-2.5 text-sm disabled:cursor-not-allowed disabled:opacity-50',\r\n transitionColors,\r\n focusRing,\r\n);\r\n\r\nexport const Pagination = ({\r\n currentPage,\r\n totalPages,\r\n onPageChange,\r\n siblingCount = 1,\r\n variant = 'numbered',\r\n className,\r\n}: PaginationProps) => {\r\n if (totalPages <= 1) return null;\r\n const idle = 'border-sbk-line bg-sbk-surface font-light text-sbk-fg hover:bg-sbk-surface-hover';\r\n\r\n return (\r\n <nav aria-label=\"Paginação\" className={cn('flex flex-wrap items-center gap-1', className)}>\r\n <button\r\n className={cn(buttonReset, buttonBase, idle)}\r\n disabled={currentPage <= 1}\r\n onClick={() => onPageChange(currentPage - 1)}\r\n type=\"button\"\r\n >\r\n <ChevronLeft aria-hidden=\"true\" className=\"size-4\" />\r\n Anterior\r\n </button>\r\n\r\n {variant === 'simple' ? (\r\n <span aria-live=\"polite\" className=\"px-3 text-sm font-light text-sbk-fg-muted\">\r\n Página <strong className=\"font-semibold text-sbk-fg\">{currentPage}</strong> de{' '}\r\n {totalPages}\r\n </span>\r\n ) : (\r\n getPageTokens(currentPage, totalPages, siblingCount).map((token) =>\r\n typeof token === 'number' ? (\r\n <button\r\n key={token}\r\n aria-current={token === currentPage ? 'page' : undefined}\r\n aria-label={`Página ${token}`}\r\n className={cn(\r\n buttonReset,\r\n buttonBase,\r\n token === currentPage\r\n ? 'border-sbk-primary bg-sbk-primary font-semibold text-sbk-on-primary'\r\n : idle,\r\n )}\r\n onClick={() => onPageChange(token)}\r\n type=\"button\"\r\n >\r\n {token}\r\n </button>\r\n ) : (\r\n <span key={token} aria-hidden=\"true\" className=\"px-1 text-sm text-sbk-fg-muted\">\r\n …\r\n </span>\r\n ),\r\n )\r\n )}\r\n\r\n <button\r\n className={cn(buttonReset, buttonBase, idle)}\r\n disabled={currentPage >= totalPages}\r\n onClick={() => onPageChange(currentPage + 1)}\r\n type=\"button\"\r\n >\r\n Próxima\r\n <ChevronRight aria-hidden=\"true\" className=\"size-4\" />\r\n </button>\r\n </nav>\r\n );\r\n};\r\n\r\nPagination.displayName = 'Pagination';\r\n"],"names":["getPageTokens","current","total","siblings","window","_","i","start","end","tokens","p","buttonBase","cn","transitionColors","focusRing","Pagination","currentPage","totalPages","onPageChange","siblingCount","variant","className","idle","jsxs","buttonReset","jsx","ChevronLeft","token","ChevronRight"],"mappings":";;;;AAoBO,MAAMA,IAAgB,CAACC,GAAiBC,GAAeC,IAAW,MAAmB;AAC1F,QAAMC,IAASD,IAAW,IAAI;AAC9B,MAAID,KAASE,EAAQ,QAAO,MAAM,KAAK,EAAE,QAAQF,EAAA,GAAS,CAACG,GAAGC,MAAMA,IAAI,CAAC;AACzE,QAAMC,IAAQ,KAAK,IAAI,GAAGN,IAAUE,CAAQ,GACtCK,IAAM,KAAK,IAAIN,IAAQ,GAAGD,IAAUE,CAAQ,GAC5CM,IAAsB,CAAC,CAAC;AAC9B,EAAIF,IAAQ,KAAGE,EAAO,KAAK,gBAAgB;AAC3C,WAASC,IAAIH,GAAOG,KAAKF,GAAKE,IAAK,CAAAD,EAAO,KAAKC,CAAC;AAChD,SAAIF,IAAMN,IAAQ,KAAGO,EAAO,KAAK,cAAc,GAC/CA,EAAO,KAAKP,CAAK,GACVO;AACT,GAEME,IAAaC;AAAA,EACjB;AAAA,EACAC;AAAA,EACAC;AACF,GAEaC,IAAa,CAAC;AAAA,EACzB,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,SAAAC,IAAU;AAAA,EACV,WAAAC;AACF,MAAuB;AACrB,MAAIJ,KAAc,EAAG,QAAO;AAC5B,QAAMK,IAAO;AAEb,SACE,gBAAAC,EAAC,SAAI,cAAW,aAAY,WAAWX,EAAG,qCAAqCS,CAAS,GACtF,UAAA;AAAA,IAAA,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWX,EAAGY,GAAab,GAAYW,CAAI;AAAA,QAC3C,UAAUN,KAAe;AAAA,QACzB,SAAS,MAAME,EAAaF,IAAc,CAAC;AAAA,QAC3C,MAAK;AAAA,QAEL,UAAA;AAAA,UAAA,gBAAAS,EAACC,GAAA,EAAY,eAAY,QAAO,WAAU,UAAS;AAAA,UAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAItDN,MAAY,WACX,gBAAAG,EAAC,UAAK,aAAU,UAAS,WAAU,6CAA4C,UAAA;AAAA,MAAA;AAAA,MACtE,gBAAAE,EAAC,UAAA,EAAO,WAAU,6BAA6B,UAAAT,GAAY;AAAA,MAAS;AAAA,MAAI;AAAA,MAC9EC;AAAA,IAAA,EAAA,CACH,IAEAjB,EAAcgB,GAAaC,GAAYE,CAAY,EAAE;AAAA,MAAI,CAACQ,MACxD,OAAOA,KAAU,WACf,gBAAAF;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,gBAAcE,MAAUX,IAAc,SAAS;AAAA,UAC/C,cAAY,UAAUW,CAAK;AAAA,UAC3B,WAAWf;AAAA,YACTY;AAAA,YACAb;AAAA,YACAgB,MAAUX,IACN,wEACAM;AAAA,UAAA;AAAA,UAEN,SAAS,MAAMJ,EAAaS,CAAK;AAAA,UACjC,MAAK;AAAA,UAEJ,UAAAA;AAAA,QAAA;AAAA,QAbIA;AAAA,MAAA,sBAgBN,QAAA,EAAiB,eAAY,QAAO,WAAU,kCAAiC,iBAArEA,CAEX;AAAA,IAAA;AAAA,IAKN,gBAAAJ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWX,EAAGY,GAAab,GAAYW,CAAI;AAAA,QAC3C,UAAUN,KAAeC;AAAA,QACzB,SAAS,MAAMC,EAAaF,IAAc,CAAC;AAAA,QAC3C,MAAK;AAAA,QACN,UAAA;AAAA,UAAA;AAAA,UAEC,gBAAAS,EAACG,GAAA,EAAa,eAAY,QAAO,WAAU,SAAA,CAAS;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACtD,GACF;AAEJ;AAEAb,EAAW,cAAc;"}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
|
+
import { type TextWeight } from '../Typography/weight';
|
|
2
3
|
export interface ParagraphProps extends React.HTMLAttributes<HTMLParagraphElement> {
|
|
3
4
|
align?: 'left' | 'center' | 'right' | 'justify';
|
|
4
5
|
as?: 'p' | 'span' | 'div';
|
|
5
6
|
children: React.ReactNode;
|
|
6
7
|
italic?: boolean;
|
|
8
|
+
/** Cor secundária (Chumbo Leve). */
|
|
7
9
|
muted?: boolean;
|
|
8
10
|
size?: 'xs' | 'sm' | 'md' | 'lg';
|
|
9
|
-
|
|
11
|
+
/** Padrão: light (brand book: corpo em Leve 300, não em Regular 400). */
|
|
12
|
+
weight?: TextWeight;
|
|
10
13
|
}
|
|
11
|
-
export declare const Paragraph:
|
|
14
|
+
export declare const Paragraph: {
|
|
15
|
+
({ as: Tag, size, weight, align, muted, italic, children, className, ...props }: ParagraphProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
displayName: string;
|
|
17
|
+
};
|
|
@@ -1,41 +1,44 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
|
|
1
|
+
import { jsx as g } from "react/jsx-runtime";
|
|
2
|
+
import { cn as f } from "../../utils/cn.js";
|
|
3
|
+
import { weightClass as n } from "../Typography/weight.js";
|
|
4
|
+
const o = {
|
|
5
|
+
xs: "text-xs leading-normal",
|
|
6
|
+
sm: "text-sm leading-normal",
|
|
7
|
+
md: "text-base leading-relaxed",
|
|
8
|
+
lg: "text-lg leading-relaxed"
|
|
9
|
+
}, d = {
|
|
10
|
+
left: "text-left",
|
|
11
|
+
center: "text-center",
|
|
12
|
+
right: "text-right",
|
|
13
|
+
justify: "text-justify"
|
|
14
|
+
}, p = ({
|
|
3
15
|
as: t = "p",
|
|
4
16
|
size: e = "md",
|
|
5
|
-
weight: a = "
|
|
6
|
-
align:
|
|
7
|
-
muted:
|
|
8
|
-
italic:
|
|
9
|
-
children:
|
|
10
|
-
className:
|
|
11
|
-
...
|
|
12
|
-
}) =>
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
g[e],
|
|
30
|
-
f[a],
|
|
31
|
-
h[i],
|
|
32
|
-
o ? "italic" : "not-italic",
|
|
33
|
-
n ? "text-[var(--text-muted)]" : "",
|
|
34
|
-
l
|
|
35
|
-
].filter(Boolean).join(" ");
|
|
36
|
-
return /* @__PURE__ */ v(m, { className: x, ...s, children: r });
|
|
37
|
-
};
|
|
17
|
+
weight: a = "light",
|
|
18
|
+
align: s = "left",
|
|
19
|
+
muted: l = !1,
|
|
20
|
+
italic: r = !1,
|
|
21
|
+
children: x,
|
|
22
|
+
className: i,
|
|
23
|
+
...m
|
|
24
|
+
}) => /* @__PURE__ */ g(
|
|
25
|
+
t,
|
|
26
|
+
{
|
|
27
|
+
className: f(
|
|
28
|
+
"m-0 font-sbk text-pretty",
|
|
29
|
+
o[e],
|
|
30
|
+
n(a),
|
|
31
|
+
d[s],
|
|
32
|
+
l ? "text-sbk-fg-muted" : "text-sbk-fg",
|
|
33
|
+
r && "italic",
|
|
34
|
+
i
|
|
35
|
+
),
|
|
36
|
+
...m,
|
|
37
|
+
children: x
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
p.displayName = "Paragraph";
|
|
38
41
|
export {
|
|
39
|
-
|
|
42
|
+
p as Paragraph
|
|
40
43
|
};
|
|
41
44
|
//# sourceMappingURL=Paragraph.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Paragraph.js","sources":["../../../src/components/Paragraph/Paragraph.tsx"],"sourcesContent":["import type React from 'react';\n\nexport interface ParagraphProps extends React.HTMLAttributes<HTMLParagraphElement> {\n align?: 'left' | 'center' | 'right' | 'justify';\n as?: 'p' | 'span' | 'div';\n children: React.ReactNode;\n italic?: boolean;\n muted?: boolean;\n size?: 'xs' | 'sm' | 'md' | 'lg';\n
|
|
1
|
+
{"version":3,"file":"Paragraph.js","sources":["../../../src/components/Paragraph/Paragraph.tsx"],"sourcesContent":["import type React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { type TextWeight, weightClass } from '../Typography/weight';\r\n\r\nexport interface ParagraphProps extends React.HTMLAttributes<HTMLParagraphElement> {\r\n align?: 'left' | 'center' | 'right' | 'justify';\r\n as?: 'p' | 'span' | 'div';\r\n children: React.ReactNode;\r\n italic?: boolean;\r\n /** Cor secundária (Chumbo Leve). */\r\n muted?: boolean;\r\n size?: 'xs' | 'sm' | 'md' | 'lg';\r\n /** Padrão: light (brand book: corpo em Leve 300, não em Regular 400). */\r\n weight?: TextWeight;\r\n}\r\n\r\nconst SIZE_CLASS = {\r\n xs: 'text-xs leading-normal',\r\n sm: 'text-sm leading-normal',\r\n md: 'text-base leading-relaxed',\r\n lg: 'text-lg leading-relaxed',\r\n} as const;\r\n\r\nconst ALIGN_CLASS = {\r\n left: 'text-left',\r\n center: 'text-center',\r\n right: 'text-right',\r\n justify: 'text-justify',\r\n} as const;\r\n\r\nexport const Paragraph = ({\r\n as: Tag = 'p',\r\n size = 'md',\r\n weight = 'light',\r\n align = 'left',\r\n muted = false,\r\n italic = false,\r\n children,\r\n className,\r\n ...props\r\n}: ParagraphProps) => (\r\n <Tag\r\n className={cn(\r\n 'm-0 font-sbk text-pretty',\r\n SIZE_CLASS[size],\r\n weightClass(weight),\r\n ALIGN_CLASS[align],\r\n muted ? 'text-sbk-fg-muted' : 'text-sbk-fg',\r\n italic && 'italic',\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </Tag>\r\n);\r\n\r\nParagraph.displayName = 'Paragraph';\r\n"],"names":["SIZE_CLASS","ALIGN_CLASS","Paragraph","Tag","size","weight","align","muted","italic","children","className","props","jsx","cn","weightClass"],"mappings":";;;AAgBA,MAAMA,IAAa;AAAA,EACjB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAc;AAAA,EAClB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AACX,GAEaC,IAAY,CAAC;AAAA,EACxB,IAAIC,IAAM;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,QAAAC,IAAS;AAAA,EACT,OAAAC,IAAQ;AAAA,EACR,OAAAC,IAAQ;AAAA,EACR,QAAAC,IAAS;AAAA,EACT,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,MACE,gBAAAC;AAAA,EAACT;AAAA,EAAA;AAAA,IACC,WAAWU;AAAA,MACT;AAAA,MACAb,EAAWI,CAAI;AAAA,MACfU,EAAYT,CAAM;AAAA,MAClBJ,EAAYK,CAAK;AAAA,MACjBC,IAAQ,sBAAsB;AAAA,MAC9BC,KAAU;AAAA,MACVE;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,IAEH,UAAAF;AAAA,EAAA;AACH;AAGFP,EAAU,cAAc;"}
|
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
2
|
export interface PopoverProps {
|
|
3
|
+
align?: 'start' | 'center' | 'end';
|
|
3
4
|
children: React.ReactNode;
|
|
5
|
+
/** Classe do botão gatilho. */
|
|
6
|
+
className?: string;
|
|
4
7
|
content: React.ReactNode;
|
|
5
8
|
defaultOpen?: boolean;
|
|
9
|
+
/** Controle externo do estado aberto. */
|
|
10
|
+
open?: boolean;
|
|
11
|
+
onOpenChange?: (open: boolean) => void;
|
|
12
|
+
variant?: 'default' | 'glass';
|
|
6
13
|
}
|
|
7
|
-
|
|
14
|
+
/** Painel flutuante não modal ancorado a um gatilho. Fecha com Esc e clique fora. */
|
|
15
|
+
export declare const Popover: {
|
|
16
|
+
({ children, content, defaultOpen, open: controlledOpen, onOpenChange, align, variant, className, }: PopoverProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
displayName: string;
|
|
18
|
+
};
|
|
@@ -1,57 +1,69 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as
|
|
3
|
-
import { cn as
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
import { jsxs as I, jsx as v } from "react/jsx-runtime";
|
|
2
|
+
import { useState as h, useRef as o, useId as j, useEffect as z } from "react";
|
|
3
|
+
import { cn as k } from "../../utils/cn.js";
|
|
4
|
+
import { buttonReset as P } from "../../utils/styles.js";
|
|
5
|
+
const S = { start: "left-0", center: "left-1/2 -translate-x-1/2", end: "right-0" }, q = ({
|
|
6
|
+
children: x,
|
|
7
|
+
content: g,
|
|
8
|
+
defaultOpen: w = !1,
|
|
9
|
+
open: c,
|
|
10
|
+
onOpenChange: r,
|
|
11
|
+
align: y = "center",
|
|
12
|
+
variant: E = "default",
|
|
13
|
+
className: R
|
|
14
|
+
}) => {
|
|
15
|
+
const [L, N] = h(w), e = c ?? L, d = o(null), l = o(null), u = o(null), f = j(), s = (t) => {
|
|
16
|
+
c === void 0 && N(t), r == null || r(t);
|
|
17
|
+
}, a = o(s);
|
|
18
|
+
return a.current = s, z(() => {
|
|
19
|
+
var p, b;
|
|
20
|
+
if (!e) return;
|
|
21
|
+
(b = (p = u.current) == null ? void 0 : p.querySelector(
|
|
16
22
|
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
|
|
17
|
-
);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
)) == null || b.focus();
|
|
24
|
+
const t = (i) => {
|
|
25
|
+
var n;
|
|
26
|
+
(n = d.current) != null && n.contains(i.target) || a.current(!1);
|
|
27
|
+
}, m = (i) => {
|
|
28
|
+
var n;
|
|
29
|
+
i.key === "Escape" && (a.current(!1), (n = l.current) == null || n.focus());
|
|
30
|
+
};
|
|
31
|
+
return document.addEventListener("mousedown", t), document.addEventListener("keydown", m), () => {
|
|
32
|
+
document.removeEventListener("mousedown", t), document.removeEventListener("keydown", m);
|
|
23
33
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
/* @__PURE__ */ u(
|
|
34
|
+
}, [e]), /* @__PURE__ */ I("div", { ref: d, className: "relative inline-flex", children: [
|
|
35
|
+
/* @__PURE__ */ v(
|
|
27
36
|
"button",
|
|
28
37
|
{
|
|
29
|
-
|
|
30
|
-
"aria-
|
|
38
|
+
ref: l,
|
|
39
|
+
"aria-controls": e ? f : void 0,
|
|
40
|
+
"aria-expanded": e,
|
|
31
41
|
"aria-haspopup": "dialog",
|
|
32
|
-
className: "inline-flex",
|
|
33
|
-
onClick: () =>
|
|
34
|
-
ref: c,
|
|
42
|
+
className: k(P, "inline-flex cursor-pointer", R),
|
|
43
|
+
onClick: () => s(!e),
|
|
35
44
|
type: "button",
|
|
36
|
-
children:
|
|
45
|
+
children: x
|
|
37
46
|
}
|
|
38
47
|
),
|
|
39
|
-
|
|
48
|
+
e && /* @__PURE__ */ v(
|
|
40
49
|
"div",
|
|
41
50
|
{
|
|
42
|
-
|
|
43
|
-
|
|
51
|
+
ref: u,
|
|
52
|
+
className: k(
|
|
53
|
+
"absolute top-full z-[var(--sbk-z-dropdown)] mt-2 w-max max-w-sm rounded-sbk-md p-4 text-sm font-light text-sbk-fg animate-sbk-fade-in",
|
|
54
|
+
E === "glass" ? "sbk-glass sbk-glass-strong" : "border border-sbk-line bg-sbk-surface shadow-sbk-md",
|
|
55
|
+
S[y]
|
|
44
56
|
),
|
|
45
|
-
id:
|
|
46
|
-
ref: o,
|
|
57
|
+
id: f,
|
|
47
58
|
role: "dialog",
|
|
48
59
|
tabIndex: -1,
|
|
49
|
-
children:
|
|
60
|
+
children: g
|
|
50
61
|
}
|
|
51
62
|
)
|
|
52
63
|
] });
|
|
53
64
|
};
|
|
65
|
+
q.displayName = "Popover";
|
|
54
66
|
export {
|
|
55
|
-
|
|
67
|
+
q as Popover
|
|
56
68
|
};
|
|
57
69
|
//# sourceMappingURL=Popover.js.map
|