@sbkbs/ui 1.0.6 → 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 +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 +296 -263
- 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';\nimport { Minus, Plus } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { buttonReset, describedBy, focusRing, transitionColors } from '../../utils/styles';\nimport { Field } from '../Field/Field';\n\nexport interface NumberInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'size' | 'onChange' | 'value' | 'defaultValue'\n> {\n defaultValue?: number;\n error?: string;\n helperText?: string;\n label?: React.ReactNode;\n max?: number;\n min?: number;\n onChange?: (value: number | null) => void;\n size?: 'sm' | 'md' | 'lg';\n step?: number;\n value?: number | null;\n}\n\nconst HEIGHT = { sm: 'min-h-8 text-sm', md: 'min-h-10 text-base', lg: 'min-h-12 text-lg' } as const;\nconst STEPPER = {\n sm: 'w-8 [&_svg]:size-3.5',\n md: 'w-10 [&_svg]:size-4',\n lg: 'w-12 [&_svg]:size-5',\n} as const;\n\nconst clamp = (n: number, min?: number, max?: number) =>\n Math.min(max ?? Number.POSITIVE_INFINITY, Math.max(min ?? Number.NEGATIVE_INFINITY, n));\n\n/** Campo numérico com botões de incremento. Controlado via `value` + `onChange`. */\nexport const NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n label,\n error,\n helperText,\n size = 'md',\n min,\n max,\n step = 1,\n onChange,\n className,\n id,\n value,\n defaultValue,\n disabled,\n required,\n ...props\n },\n ref,\n ) => {\n const autoId = useId();\n const inputId = id ?? autoId;\n const current = value ?? defaultValue ?? 0;\n\n const stepBy = (dir: 1 | -1) => onChange?.(clamp(current + dir * step, min, max));\n\n const stepperClass = cn(\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',\n transitionColors,\n focusRing,\n STEPPER[size],\n );\n\n return (\n <Field error={error} helperText={helperText} id={inputId} label={label} required={required}>\n <div\n className={cn(\n 'inline-flex overflow-hidden rounded-sbk-sm border border-sbk-line-strong bg-sbk-surface',\n 'focus-within:border-sbk-primary',\n error && 'border-sbk-error',\n disabled && 'opacity-60',\n )}\n >\n <button\n aria-controls={inputId}\n aria-label=\"Diminuir\"\n className={cn(buttonReset, stepperClass, 'border-r border-sbk-line')}\n disabled={disabled || (min !== undefined && current <= min)}\n onClick={() => stepBy(-1)}\n tabIndex={-1}\n type=\"button\"\n >\n <Minus aria-hidden=\"true\" />\n </button>\n <input\n ref={ref}\n aria-describedby={describedBy(inputId, error, helperText)}\n aria-invalid={error ? true : undefined}\n className={cn(\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',\n HEIGHT[size],\n className,\n )}\n defaultValue={value === undefined ? defaultValue : undefined}\n disabled={disabled}\n id={inputId}\n inputMode=\"decimal\"\n max={max}\n min={min}\n onChange={(e) => onChange?.(e.target.value === '' ? null : Number(e.target.value))}\n required={required}\n step={step}\n type=\"number\"\n value={value === undefined ? undefined : (value ?? '')}\n {...props}\n />\n <button\n aria-controls={inputId}\n aria-label=\"Aumentar\"\n className={cn(buttonReset, stepperClass, 'border-l border-sbk-line')}\n disabled={disabled || (max !== undefined && current >= max)}\n onClick={() => stepBy(1)}\n tabIndex={-1}\n type=\"button\"\n >\n <Plus aria-hidden=\"true\" />\n </button>\n </div>\n </Field>\n );\n },\n);\n\nNumberInput.displayName = 'NumberInput';\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":";;;;;;AAsBA,MAAMA,IAAS,EAAE,IAAI,mBAAmB,IAAI,sBAAsB,IAAI,mBAAA,GAChEC,IAAU;AAAA,EACd,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAQ,CAACC,GAAWC,GAAcC,MACtC,KAAK,IAAIA,KAAO,OAAO,mBAAmB,KAAK,IAAID,KAAO,OAAO,mBAAmBD,CAAC,CAAC,GAG3EG,IAAcC,EAAM;AAAA,EAC/B,CACE;AAAA,IACE,OAAAC;AAAA,IACA,OAAAC;AAAA,IACA,YAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,KAAAP;AAAA,IACA,KAAAC;AAAA,IACA,MAAAO,IAAO;AAAA,IACP,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,IAAAC;AAAA,IACA,OAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAASC,EAAA,GACTC,IAAUT,KAAMO,GAChBG,IAAUT,KAASC,KAAgB,GAEnCS,IAAS,CAACC,MAAgBd,KAAA,gBAAAA,EAAWX,EAAMuB,IAAUE,IAAMf,GAAMR,GAAKC,CAAG,IAEzEuB,IAAeC;AAAA,MACnB;AAAA,MACAC;AAAA,MACAC;AAAA,MACA9B,EAAQU,CAAI;AAAA,IAAA;AAGd,6BACGqB,GAAA,EAAM,OAAAvB,GAAc,YAAAC,GAAwB,IAAIc,GAAS,OAAAhB,GAAc,UAAAW,GACtE,UAAA,gBAAAc;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWJ;AAAA,UACT;AAAA,UACA;AAAA,UACApB,KAAS;AAAA,UACTS,KAAY;AAAA,QAAA;AAAA,QAGd,UAAA;AAAA,UAAA,gBAAAgB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,iBAAeV;AAAA,cACf,cAAW;AAAA,cACX,WAAWK,EAAGM,GAAaP,GAAc,0BAA0B;AAAA,cACnE,UAAUV,KAAad,MAAQ,UAAaqB,KAAWrB;AAAA,cACvD,SAAS,MAAMsB,EAAO,EAAE;AAAA,cACxB,UAAU;AAAA,cACV,MAAK;AAAA,cAEL,UAAA,gBAAAQ,EAACE,GAAA,EAAM,eAAY,OAAA,CAAO;AAAA,YAAA;AAAA,UAAA;AAAA,UAE5B,gBAAAF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAAb;AAAA,cACA,oBAAkBgB,EAAYb,GAASf,GAAOC,CAAU;AAAA,cACxD,gBAAcD,IAAQ,KAAO;AAAA,cAC7B,WAAWoB;AAAA,gBACT;AAAA,gBACA7B,EAAOW,CAAI;AAAA,gBACXG;AAAA,cAAA;AAAA,cAEF,cAAcE,MAAU,SAAYC,IAAe;AAAA,cACnD,UAAAC;AAAA,cACA,IAAIM;AAAA,cACJ,WAAU;AAAA,cACV,KAAAnB;AAAA,cACA,KAAAD;AAAA,cACA,UAAU,CAACkC,MAAMzB,KAAA,gBAAAA,EAAWyB,EAAE,OAAO,UAAU,KAAK,OAAO,OAAOA,EAAE,OAAO,KAAK;AAAA,cAChF,UAAAnB;AAAA,cACA,MAAAP;AAAA,cACA,MAAK;AAAA,cACL,OAAOI,MAAU,SAAY,SAAaA,KAAS;AAAA,cAClD,GAAGI;AAAA,YAAA;AAAA,UAAA;AAAA,UAEN,gBAAAc;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,iBAAeV;AAAA,cACf,cAAW;AAAA,cACX,WAAWK,EAAGM,GAAaP,GAAc,0BAA0B;AAAA,cACnE,UAAUV,KAAab,MAAQ,UAAaoB,KAAWpB;AAAA,cACvD,SAAS,MAAMqB,EAAO,CAAC;AAAA,cACvB,UAAU;AAAA,cACV,MAAK;AAAA,cAEL,UAAA,gBAAAQ,EAACK,GAAA,EAAK,eAAY,OAAA,CAAO;AAAA,YAAA;AAAA,UAAA;AAAA,QAC3B;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,EAEJ;AACF;AAEAjC,EAAY,cAAc;"}
|
|
@@ -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';\nimport { cn } from '../../utils/cn';\nimport { inverseScope } from '../../utils/styles';\n\nexport interface PageHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n actions?: React.ReactNode;\n /** Conteúdo acima do título (ex.: Breadcrumb). */\n breadcrumb?: React.ReactNode;\n subtitle?: React.ReactNode;\n title: React.ReactNode;\n /** `plain`: sem caixa. `card`: superfície com borda. `inverse`: bloco verde escuro (hero). */\n variant?: 'plain' | 'card' | 'inverse';\n}\n\nconst VARIANT_CLASS = {\n plain: '',\n card: 'rounded-sbk-md border border-sbk-line bg-sbk-surface p-5',\n inverse: cn('rounded-sbk-md p-6 md:p-8', inverseScope),\n} as const;\n\nexport const PageHeader = ({\n title,\n subtitle,\n actions,\n breadcrumb,\n variant = 'card',\n className,\n ...props\n}: PageHeaderProps) => (\n <header className={cn('grid gap-3', VARIANT_CLASS[variant], className)} {...props}>\n {breadcrumb}\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\n <div className=\"grid min-w-0 gap-1\">\n <h1 className=\"m-0 text-2xl font-semibold leading-tight text-sbk-fg-heading md:text-[1.75rem]\">\n {title}\n </h1>\n {subtitle && <p className=\"m-0 text-sm font-light text-sbk-fg-muted\">{subtitle}</p>}\n </div>\n {actions && <div className=\"flex shrink-0 flex-wrap items-center gap-2\">{actions}</div>}\n </div>\n </header>\n);\n\nPageHeader.displayName = 'PageHeader';\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';\nimport { cn } from '../../utils/cn';\nimport { buttonReset, focusRing, transitionColors } from '../../utils/styles';\n\nexport interface PaginationProps {\n className?: string;\n currentPage: number;\n onPageChange: (page: number) => void;\n /** Páginas vizinhas exibidas ao redor da atual. Padrão: 1. */\n siblingCount?: number;\n /**\n * `numbered`: lista de páginas com reticências.\n * `simple`: apenas Anterior/Próxima com \"Página X de Y\" (para paginação sequencial).\n */\n variant?: 'numbered' | 'simple';\n totalPages: number;\n}\n\ntype PageToken = number | 'ellipsis-start' | 'ellipsis-end';\n\nexport const getPageTokens = (current: number, total: number, siblings = 1): PageToken[] => {\n const window = siblings * 2 + 5;\n if (total <= window) return Array.from({ length: total }, (_, i) => i + 1);\n const start = Math.max(2, current - siblings);\n const end = Math.min(total - 1, current + siblings);\n const tokens: PageToken[] = [1];\n if (start > 2) tokens.push('ellipsis-start');\n for (let p = start; p <= end; p++) tokens.push(p);\n if (end < total - 1) tokens.push('ellipsis-end');\n tokens.push(total);\n return tokens;\n};\n\nconst buttonBase = cn(\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',\n transitionColors,\n focusRing,\n);\n\nexport const Pagination = ({\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n variant = 'numbered',\n className,\n}: PaginationProps) => {\n if (totalPages <= 1) return null;\n const idle = 'border-sbk-line bg-sbk-surface font-light text-sbk-fg hover:bg-sbk-surface-hover';\n\n return (\n <nav aria-label=\"Paginação\" className={cn('flex flex-wrap items-center gap-1', className)}>\n <button\n className={cn(buttonReset, buttonBase, idle)}\n disabled={currentPage <= 1}\n onClick={() => onPageChange(currentPage - 1)}\n type=\"button\"\n >\n <ChevronLeft aria-hidden=\"true\" className=\"size-4\" />\n Anterior\n </button>\n\n {variant === 'simple' ? (\n <span aria-live=\"polite\" className=\"px-3 text-sm font-light text-sbk-fg-muted\">\n Página <strong className=\"font-semibold text-sbk-fg\">{currentPage}</strong> de{' '}\n {totalPages}\n </span>\n ) : (\n getPageTokens(currentPage, totalPages, siblingCount).map((token) =>\n typeof token === 'number' ? (\n <button\n key={token}\n aria-current={token === currentPage ? 'page' : undefined}\n aria-label={`Página ${token}`}\n className={cn(\n buttonReset,\n buttonBase,\n token === currentPage\n ? 'border-sbk-primary bg-sbk-primary font-semibold text-sbk-on-primary'\n : idle,\n )}\n onClick={() => onPageChange(token)}\n type=\"button\"\n >\n {token}\n </button>\n ) : (\n <span key={token} aria-hidden=\"true\" className=\"px-1 text-sm text-sbk-fg-muted\">\n …\n </span>\n ),\n )\n )}\n\n <button\n className={cn(buttonReset, buttonBase, idle)}\n disabled={currentPage >= totalPages}\n onClick={() => onPageChange(currentPage + 1)}\n type=\"button\"\n >\n Próxima\n <ChevronRight aria-hidden=\"true\" className=\"size-4\" />\n </button>\n </nav>\n );\n};\n\nPagination.displayName = 'Pagination';\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';\nimport { cn } from '../../utils/cn';\nimport { type TextWeight, weightClass } from '../Typography/weight';\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 /** Cor secundária (Chumbo Leve). */\n muted?: boolean;\n size?: 'xs' | 'sm' | 'md' | 'lg';\n /** Padrão: light (brand book: corpo em Leve 300, não em Regular 400). */\n weight?: TextWeight;\n}\n\nconst SIZE_CLASS = {\n xs: 'text-xs leading-normal',\n sm: 'text-sm leading-normal',\n md: 'text-base leading-relaxed',\n lg: 'text-lg leading-relaxed',\n} as const;\n\nconst ALIGN_CLASS = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify',\n} as const;\n\nexport const Paragraph = ({\n as: Tag = 'p',\n size = 'md',\n weight = 'light',\n align = 'left',\n muted = false,\n italic = false,\n children,\n className,\n ...props\n}: ParagraphProps) => (\n <Tag\n className={cn(\n 'm-0 font-sbk text-pretty',\n SIZE_CLASS[size],\n weightClass(weight),\n ALIGN_CLASS[align],\n muted ? 'text-sbk-fg-muted' : 'text-sbk-fg',\n italic && 'italic',\n className,\n )}\n {...props}\n >\n {children}\n </Tag>\n);\n\nParagraph.displayName = 'Paragraph';\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
|