@sbkbs/ui 1.0.3 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Accordion/Accordion.js +56 -0
- package/dist/components/Accordion/Accordion.js.map +1 -0
- package/dist/components/Accordion/Accordion.stories.d.ts +7 -0
- package/dist/components/Alert/Alert.js +32 -0
- package/dist/components/Alert/Alert.js.map +1 -0
- package/dist/components/Alert/Alert.stories.d.ts +8 -0
- package/dist/components/Badge/Badge.js +35 -0
- package/dist/components/Badge/Badge.js.map +1 -0
- package/dist/components/Badge/Badge.stories.d.ts +8 -0
- package/dist/components/Breadcrumb/Breadcrumb.d.ts +10 -0
- package/dist/components/Breadcrumb/Breadcrumb.js +26 -0
- package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/components/Breadcrumb/Breadcrumb.stories.d.ts +8 -0
- package/dist/components/Button/Button.js +122 -0
- package/dist/components/Button/Button.js.map +1 -0
- package/dist/components/Card/Card.js +33 -0
- package/dist/components/Card/Card.js.map +1 -0
- package/dist/components/Card/Card.stories.d.ts +8 -0
- package/dist/components/Checkbox/Checkbox.d.ts +2 -2
- package/dist/components/Checkbox/Checkbox.js +36 -0
- package/dist/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/components/Checkbox/Checkbox.stories.d.ts +7 -0
- package/dist/components/Chip/Chip.js +19 -0
- package/dist/components/Chip/Chip.js.map +1 -0
- package/dist/components/Combobox/Combobox.d.ts +17 -0
- package/dist/components/Combobox/Combobox.js +143 -0
- package/dist/components/Combobox/Combobox.js.map +1 -0
- package/dist/components/Combobox/Combobox.stories.d.ts +9 -0
- package/dist/components/Divider/Divider.js +22 -0
- package/dist/components/Divider/Divider.js.map +1 -0
- package/dist/components/EmptyState/EmptyState.js +29 -0
- package/dist/components/EmptyState/EmptyState.js.map +1 -0
- package/dist/components/FileUpload/FileUpload.d.ts +13 -0
- package/dist/components/FileUpload/FileUpload.js +116 -0
- package/dist/components/FileUpload/FileUpload.js.map +1 -0
- package/dist/components/FileUpload/FileUpload.stories.d.ts +10 -0
- package/dist/components/Footer/Footer.js +54 -0
- package/dist/components/Footer/Footer.js.map +1 -0
- package/dist/components/Header/Header.js +114 -0
- package/dist/components/Header/Header.js.map +1 -0
- package/dist/components/Input/Input.d.ts +2 -2
- package/dist/components/Input/Input.js +78 -0
- package/dist/components/Input/Input.js.map +1 -0
- package/dist/components/Input/Input.stories.d.ts +9 -0
- package/dist/components/Layout/Layout.js +41 -0
- package/dist/components/Layout/Layout.js.map +1 -0
- package/dist/components/Modal/Modal.js +113 -0
- package/dist/components/Modal/Modal.js.map +1 -0
- package/dist/components/Modal/Modal.stories.d.ts +8 -0
- package/dist/components/Navigation/Navigation.js +26 -0
- package/dist/components/Navigation/Navigation.js.map +1 -0
- package/dist/components/NumberInput/NumberInput.d.ts +12 -0
- package/dist/components/NumberInput/NumberInput.js +135 -0
- package/dist/components/NumberInput/NumberInput.js.map +1 -0
- package/dist/components/NumberInput/NumberInput.stories.d.ts +8 -0
- package/dist/components/PageHeader/PageHeader.js +29 -0
- package/dist/components/PageHeader/PageHeader.js.map +1 -0
- package/dist/components/Pagination/Pagination.js +50 -0
- package/dist/components/Pagination/Pagination.js.map +1 -0
- package/dist/components/Pagination/Pagination.stories.d.ts +8 -0
- package/dist/components/Paragraph/Paragraph.js +41 -0
- package/dist/components/Paragraph/Paragraph.js.map +1 -0
- package/dist/components/Popover/Popover.js +57 -0
- package/dist/components/Popover/Popover.js.map +1 -0
- package/dist/components/Radio/Radio.d.ts +2 -2
- package/dist/components/Radio/Radio.js +36 -0
- package/dist/components/Radio/Radio.js.map +1 -0
- package/dist/components/Radio/Radio.stories.d.ts +7 -0
- package/dist/components/SectionHeader/SectionHeader.js +19 -0
- package/dist/components/SectionHeader/SectionHeader.js.map +1 -0
- package/dist/components/Select/Select.d.ts +2 -2
- package/dist/components/Select/Select.js +45 -0
- package/dist/components/Select/Select.js.map +1 -0
- package/dist/components/Select/Select.stories.d.ts +8 -0
- package/dist/components/Skeleton/Skeleton.js +25 -0
- package/dist/components/Skeleton/Skeleton.js.map +1 -0
- package/dist/components/Stepper/Stepper.d.ts +13 -0
- package/dist/components/Stepper/Stepper.js +97 -0
- package/dist/components/Stepper/Stepper.js.map +1 -0
- package/dist/components/Stepper/Stepper.stories.d.ts +8 -0
- package/dist/components/Subtitle/Subtitle.js +40 -0
- package/dist/components/Subtitle/Subtitle.js.map +1 -0
- package/dist/components/Switch/Switch.d.ts +2 -2
- package/dist/components/Switch/Switch.js +37 -0
- package/dist/components/Switch/Switch.js.map +1 -0
- package/dist/components/Switch/Switch.stories.d.ts +8 -0
- package/dist/components/Table/Table.js +17 -0
- package/dist/components/Table/Table.js.map +1 -0
- package/dist/components/Tabs/Tabs.js +62 -0
- package/dist/components/Tabs/Tabs.js.map +1 -0
- package/dist/components/Tabs/Tabs.stories.d.ts +8 -0
- package/dist/components/Tag/Tag.js +29 -0
- package/dist/components/Tag/Tag.js.map +1 -0
- package/dist/components/Textarea/Textarea.d.ts +2 -2
- package/dist/components/Textarea/Textarea.js +46 -0
- package/dist/components/Textarea/Textarea.js.map +1 -0
- package/dist/components/Textarea/Textarea.stories.d.ts +7 -0
- package/dist/components/Title/Title.js +47 -0
- package/dist/components/Title/Title.js.map +1 -0
- package/dist/components/Toast/Toast.js +110 -0
- package/dist/components/Toast/Toast.js.map +1 -0
- package/dist/components/Toast/Toast.stories.d.ts +8 -0
- package/dist/components/Tooltip/Tooltip.js +36 -0
- package/dist/components/Tooltip/Tooltip.js.map +1 -0
- package/dist/index.d.ts +10 -5
- package/dist/index.js +88 -0
- package/dist/index.js.map +1 -0
- package/dist/node_modules/clsx/dist/clsx.js +17 -0
- package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +2925 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/dist/oficios-ui.umd.cjs +1 -1
- package/dist/oficios-ui.umd.cjs.map +1 -1
- package/dist/theme/ThemeProvider.d.ts +1 -1
- package/dist/theme/ThemeProvider.js +22 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme.css +54 -64
- package/dist/ui.css +1 -0
- package/dist/utils/cn.d.ts +7 -1
- package/dist/utils/cn.js +7 -0
- package/dist/utils/cn.js.map +1 -0
- package/package.json +42 -9
- package/dist/oficios-ui.css +0 -1
- package/dist/oficios-ui.js +0 -1386
- package/dist/oficios-ui.js.map +0 -1
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx as l, jsxs as p } from "react/jsx-runtime";
|
|
2
|
+
import { useState as h, useRef as v } from "react";
|
|
3
|
+
import { cn as w } from "../../utils/cn.js";
|
|
4
|
+
const A = ({ items: g, defaultOpenId: b }) => {
|
|
5
|
+
const [x, y] = h(b ?? null), o = v(null);
|
|
6
|
+
return /* @__PURE__ */ l("div", { className: "grid gap-2", ref: o, children: g.map((t) => {
|
|
7
|
+
const n = x === t.id, d = `accordion-trigger-${t.id}`, i = `accordion-panel-${t.id}`;
|
|
8
|
+
return /* @__PURE__ */ p(
|
|
9
|
+
"div",
|
|
10
|
+
{
|
|
11
|
+
className: "overflow-hidden rounded-[var(--border-radius-md)] border border-[var(--border-color)]",
|
|
12
|
+
children: [
|
|
13
|
+
/* @__PURE__ */ p(
|
|
14
|
+
"button",
|
|
15
|
+
{
|
|
16
|
+
"aria-controls": i,
|
|
17
|
+
"aria-expanded": n,
|
|
18
|
+
className: "flex w-full items-center justify-between bg-[var(--bg-secondary)] px-4 py-3 text-left text-sm font-medium text-[var(--text-primary)] hover:bg-[var(--bg-hover)]",
|
|
19
|
+
id: d,
|
|
20
|
+
onKeyDown: (r) => {
|
|
21
|
+
var s, c, u, f;
|
|
22
|
+
if (!o.current)
|
|
23
|
+
return;
|
|
24
|
+
const e = Array.from(
|
|
25
|
+
o.current.querySelectorAll('[id^="accordion-trigger-"]')
|
|
26
|
+
), a = e.findIndex((m) => m.id === d);
|
|
27
|
+
a === -1 || e.length === 0 || (r.key === "ArrowDown" ? (r.preventDefault(), (s = e[(a + 1) % e.length]) == null || s.focus()) : r.key === "ArrowUp" ? (r.preventDefault(), (c = e[(a - 1 + e.length) % e.length]) == null || c.focus()) : r.key === "Home" ? (r.preventDefault(), (u = e[0]) == null || u.focus()) : r.key === "End" && (r.preventDefault(), (f = e[e.length - 1]) == null || f.focus()));
|
|
28
|
+
},
|
|
29
|
+
onClick: () => y((r) => r === t.id ? null : t.id),
|
|
30
|
+
type: "button",
|
|
31
|
+
children: [
|
|
32
|
+
t.title,
|
|
33
|
+
/* @__PURE__ */ l("span", { className: w("transition", n ? "rotate-180" : ""), children: "⌄" })
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
),
|
|
37
|
+
n && /* @__PURE__ */ l(
|
|
38
|
+
"div",
|
|
39
|
+
{
|
|
40
|
+
"aria-labelledby": d,
|
|
41
|
+
className: "bg-[var(--bg-tertiary)] px-4 py-3 text-sm text-[var(--text-secondary)]",
|
|
42
|
+
id: i,
|
|
43
|
+
role: "region",
|
|
44
|
+
children: t.content
|
|
45
|
+
}
|
|
46
|
+
)
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
t.id
|
|
50
|
+
);
|
|
51
|
+
}) });
|
|
52
|
+
};
|
|
53
|
+
export {
|
|
54
|
+
A as Accordion
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=Accordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.js","sources":["../../../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import type React from 'react';\nimport { useRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface AccordionItem {\n content: React.ReactNode;\n id: string;\n title: React.ReactNode;\n}\n\nexport interface AccordionProps {\n defaultOpenId?: string;\n items: AccordionItem[];\n}\n\nexport const Accordion: React.FC<AccordionProps> = ({ items, defaultOpenId }) => {\n const [openId, setOpenId] = useState<string | null>(defaultOpenId ?? null);\n const rootRef = useRef<HTMLDivElement | null>(null);\n\n return (\n <div className=\"grid gap-2\" ref={rootRef}>\n {items.map((item) => {\n const isOpen = openId === item.id;\n const triggerId = `accordion-trigger-${item.id}`;\n const panelId = `accordion-panel-${item.id}`;\n return (\n <div\n className=\"overflow-hidden rounded-[var(--border-radius-md)] border border-[var(--border-color)]\"\n key={item.id}\n >\n <button\n aria-controls={panelId}\n aria-expanded={isOpen}\n className=\"flex w-full items-center justify-between bg-[var(--bg-secondary)] px-4 py-3 text-left text-sm font-medium text-[var(--text-primary)] hover:bg-[var(--bg-hover)]\"\n id={triggerId}\n onKeyDown={(event) => {\n if (!rootRef.current) {\n return;\n }\n const buttons = Array.from(\n rootRef.current.querySelectorAll<HTMLButtonElement>('[id^=\"accordion-trigger-\"]'),\n );\n const currentIndex = buttons.findIndex((btn) => btn.id === triggerId);\n if (currentIndex === -1 || buttons.length === 0) {\n return;\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n buttons[(currentIndex + 1) % buttons.length]?.focus();\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n buttons[(currentIndex - 1 + buttons.length) % buttons.length]?.focus();\n } else if (event.key === 'Home') {\n event.preventDefault();\n buttons[0]?.focus();\n } else if (event.key === 'End') {\n event.preventDefault();\n buttons[buttons.length - 1]?.focus();\n }\n }}\n onClick={() => setOpenId((prev) => (prev === item.id ? null : item.id))}\n type=\"button\"\n >\n {item.title}\n <span className={cn('transition', isOpen ? 'rotate-180' : '')}>⌄</span>\n </button>\n {isOpen && (\n <div\n aria-labelledby={triggerId}\n className=\"bg-[var(--bg-tertiary)] px-4 py-3 text-sm text-[var(--text-secondary)]\"\n id={panelId}\n role=\"region\"\n >\n {item.content}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n"],"names":["Accordion","items","defaultOpenId","openId","setOpenId","useState","rootRef","useRef","jsx","item","isOpen","triggerId","panelId","jsxs","event","buttons","currentIndex","btn","_a","_b","_c","_d","prev","cn"],"mappings":";;;AAeO,MAAMA,IAAsC,CAAC,EAAE,OAAAC,GAAO,eAAAC,QAAoB;AAC/E,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAwBH,KAAiB,IAAI,GACnEI,IAAUC,EAA8B,IAAI;AAElD,SACE,gBAAAC,EAAC,SAAI,WAAU,cAAa,KAAKF,GAC9B,UAAAL,EAAM,IAAI,CAACQ,MAAS;AACnB,UAAMC,IAASP,MAAWM,EAAK,IACzBE,IAAY,qBAAqBF,EAAK,EAAE,IACxCG,IAAU,mBAAmBH,EAAK,EAAE;AAC1C,WACE,gBAAAI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QAGV,UAAA;AAAA,UAAA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,iBAAeD;AAAA,cACf,iBAAeF;AAAA,cACf,WAAU;AAAA,cACV,IAAIC;AAAA,cACJ,WAAW,CAACG,MAAU;;AACpB,oBAAI,CAACR,EAAQ;AACX;AAEF,sBAAMS,IAAU,MAAM;AAAA,kBACpBT,EAAQ,QAAQ,iBAAoC,4BAA4B;AAAA,gBAAA,GAE5EU,IAAeD,EAAQ,UAAU,CAACE,MAAQA,EAAI,OAAON,CAAS;AACpE,gBAAIK,MAAiB,MAAMD,EAAQ,WAAW,MAG1CD,EAAM,QAAQ,eAChBA,EAAM,eAAA,IACNI,IAAAH,GAASC,IAAe,KAAKD,EAAQ,MAAM,MAA3C,QAAAG,EAA8C,WACrCJ,EAAM,QAAQ,aACvBA,EAAM,eAAA,IACNK,IAAAJ,GAASC,IAAe,IAAID,EAAQ,UAAUA,EAAQ,MAAM,MAA5D,QAAAI,EAA+D,WACtDL,EAAM,QAAQ,UACvBA,EAAM,eAAA,IACNM,IAAAL,EAAQ,CAAC,MAAT,QAAAK,EAAY,WACHN,EAAM,QAAQ,UACvBA,EAAM,eAAA,IACNO,IAAAN,EAAQA,EAAQ,SAAS,CAAC,MAA1B,QAAAM,EAA6B;AAAA,cAEjC;AAAA,cACA,SAAS,MAAMjB,EAAU,CAACkB,MAAUA,MAASb,EAAK,KAAK,OAAOA,EAAK,EAAG;AAAA,cACtE,MAAK;AAAA,cAEJ,UAAA;AAAA,gBAAAA,EAAK;AAAA,gBACN,gBAAAD,EAAC,UAAK,WAAWe,EAAG,cAAcb,IAAS,eAAe,EAAE,GAAG,UAAA,IAAA,CAAC;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAEjEA,KACC,gBAAAF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,mBAAiBG;AAAA,cACjB,WAAU;AAAA,cACV,IAAIC;AAAA,cACJ,MAAK;AAAA,cAEJ,UAAAH,EAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QACR;AAAA,MAAA;AAAA,MA9CGA,EAAK;AAAA,IAAA;AAAA,EAkDhB,CAAC,EAAA,CACH;AAEJ;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { Accordion } from './Accordion';
|
|
3
|
+
declare const meta: Meta<typeof Accordion>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof Accordion>;
|
|
6
|
+
export declare const Playground: Story;
|
|
7
|
+
export declare const DefaultOpen: Story;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsxs as n, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { cn as d } from "../../utils/cn.js";
|
|
3
|
+
const l = ({
|
|
4
|
+
title: r,
|
|
5
|
+
tone: o = "info",
|
|
6
|
+
children: a,
|
|
7
|
+
className: t,
|
|
8
|
+
...s
|
|
9
|
+
}) => {
|
|
10
|
+
const c = {
|
|
11
|
+
info: "border-[var(--info-color)]/40 bg-[var(--info-color)]/10 text-[var(--text-primary)]",
|
|
12
|
+
success: "border-[var(--success-color)]/40 bg-[var(--success-color)]/10 text-[var(--text-primary)]",
|
|
13
|
+
warning: "border-[var(--warning-color)]/40 bg-[var(--warning-color)]/10 text-[var(--text-primary)]",
|
|
14
|
+
error: "border-[var(--md-error)]/40 bg-[var(--md-error)]/10 text-[var(--text-primary)]"
|
|
15
|
+
}[o];
|
|
16
|
+
return /* @__PURE__ */ n(
|
|
17
|
+
"div",
|
|
18
|
+
{
|
|
19
|
+
className: d("rounded-[var(--border-radius-md)] border p-4", c, t),
|
|
20
|
+
role: "alert",
|
|
21
|
+
...s,
|
|
22
|
+
children: [
|
|
23
|
+
r && /* @__PURE__ */ e("p", { className: "mb-1 text-sm font-semibold", children: r }),
|
|
24
|
+
/* @__PURE__ */ e("div", { className: "text-sm leading-relaxed", children: a })
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
};
|
|
29
|
+
export {
|
|
30
|
+
l as Alert
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=Alert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Alert.js","sources":["../../../src/components/Alert/Alert.tsx"],"sourcesContent":["import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n tone?: 'info' | 'success' | 'warning' | 'error';\n}\n\nexport const Alert: React.FC<AlertProps> = ({\n title,\n tone = 'info',\n children,\n className,\n ...props\n}) => {\n const toneClass = {\n info: 'border-[var(--info-color)]/40 bg-[var(--info-color)]/10 text-[var(--text-primary)]',\n success:\n 'border-[var(--success-color)]/40 bg-[var(--success-color)]/10 text-[var(--text-primary)]',\n warning:\n 'border-[var(--warning-color)]/40 bg-[var(--warning-color)]/10 text-[var(--text-primary)]',\n error: 'border-[var(--md-error)]/40 bg-[var(--md-error)]/10 text-[var(--text-primary)]',\n }[tone];\n\n return (\n <div\n className={cn('rounded-[var(--border-radius-md)] border p-4', toneClass, className)}\n role=\"alert\"\n {...props}\n >\n {title && <p className=\"mb-1 text-sm font-semibold\">{title}</p>}\n <div className=\"text-sm leading-relaxed\">{children}</div>\n </div>\n );\n};\n"],"names":["Alert","title","tone","children","className","props","toneClass","jsxs","cn","jsx"],"mappings":";;AAQO,MAAMA,IAA8B,CAAC;AAAA,EAC1C,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAY;AAAA,IAChB,MAAM;AAAA,IACN,SACE;AAAA,IACF,SACE;AAAA,IACF,OAAO;AAAA,EAAA,EACPJ,CAAI;AAEN,SACE,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAG,gDAAgDF,GAAWF,CAAS;AAAA,MAClF,MAAK;AAAA,MACJ,GAAGC;AAAA,MAEH,UAAA;AAAA,QAAAJ,KAAS,gBAAAQ,EAAC,KAAA,EAAE,WAAU,8BAA8B,UAAAR,GAAM;AAAA,QAC3D,gBAAAQ,EAAC,OAAA,EAAI,WAAU,2BAA2B,UAAAN,EAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGzD;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { Alert } from './Alert';
|
|
3
|
+
declare const meta: Meta<typeof Alert>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof Alert>;
|
|
6
|
+
export declare const Playground: Story;
|
|
7
|
+
export declare const AllTones: Story;
|
|
8
|
+
export declare const WithoutTitle: Story;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import { cn as i } from "../../utils/cn.js";
|
|
3
|
+
const l = ({
|
|
4
|
+
size: r = "md",
|
|
5
|
+
tone: e = "neutral",
|
|
6
|
+
className: t,
|
|
7
|
+
children: a,
|
|
8
|
+
...n
|
|
9
|
+
}) => {
|
|
10
|
+
const o = {
|
|
11
|
+
neutral: "bg-[var(--bg-tertiary)] text-[var(--text-secondary)]",
|
|
12
|
+
primary: "bg-[var(--md-primary)] text-[var(--md-on-primary)]",
|
|
13
|
+
success: "bg-[var(--success-color)] text-white",
|
|
14
|
+
warning: "bg-[var(--warning-color)] text-white",
|
|
15
|
+
error: "bg-[var(--md-error)] text-[var(--md-on-error)]",
|
|
16
|
+
info: "bg-[var(--info-color)] text-white"
|
|
17
|
+
}[e];
|
|
18
|
+
return /* @__PURE__ */ s(
|
|
19
|
+
"span",
|
|
20
|
+
{
|
|
21
|
+
className: i(
|
|
22
|
+
"inline-flex items-center rounded-full font-medium leading-none",
|
|
23
|
+
o,
|
|
24
|
+
r === "sm" ? "px-2 py-0.5 text-[0.6875rem]" : "px-2.5 py-1 text-xs",
|
|
25
|
+
t
|
|
26
|
+
),
|
|
27
|
+
...n,
|
|
28
|
+
children: a
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
};
|
|
32
|
+
export {
|
|
33
|
+
l as Badge
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=Badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Badge.js","sources":["../../../src/components/Badge/Badge.tsx"],"sourcesContent":["import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: 'sm' | 'md';\n tone?: 'neutral' | 'primary' | 'success' | 'warning' | 'error' | 'info';\n}\n\nexport const Badge: React.FC<BadgeProps> = ({\n size = 'md',\n tone = 'neutral',\n className,\n children,\n ...props\n}) => {\n const toneClass = {\n neutral: 'bg-[var(--bg-tertiary)] text-[var(--text-secondary)]',\n primary: 'bg-[var(--md-primary)] text-[var(--md-on-primary)]',\n success: 'bg-[var(--success-color)] text-white',\n warning: 'bg-[var(--warning-color)] text-white',\n error: 'bg-[var(--md-error)] text-[var(--md-on-error)]',\n info: 'bg-[var(--info-color)] text-white',\n }[tone];\n\n const sizeClass = size === 'sm' ? 'px-2 py-0.5 text-[0.6875rem]' : 'px-2.5 py-1 text-xs';\n\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-full font-medium leading-none',\n toneClass,\n sizeClass,\n className,\n )}\n {...props}\n >\n {children}\n </span>\n );\n};\n"],"names":["Badge","size","tone","className","children","props","toneClass","jsx","cn"],"mappings":";;AAQO,MAAMA,IAA8B,CAAC;AAAA,EAC1C,MAAAC,IAAO;AAAA,EACP,MAAAC,IAAO;AAAA,EACP,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAY;AAAA,IAChB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,EAAA,EACNJ,CAAI;AAIN,SACE,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAF;AAAA,QANYL,MAAS,OAAO,iCAAiC;AAAA,QAQ7DE;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,MAEH,UAAAD;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { Badge } from './Badge';
|
|
3
|
+
declare const meta: Meta<typeof Badge>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof Badge>;
|
|
6
|
+
export declare const Playground: Story;
|
|
7
|
+
export declare const AllTones: Story;
|
|
8
|
+
export declare const Sizes: Story;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface BreadcrumbItem {
|
|
3
|
+
href?: string;
|
|
4
|
+
label: React.ReactNode;
|
|
5
|
+
}
|
|
6
|
+
export interface BreadcrumbProps extends React.HTMLAttributes<HTMLElement> {
|
|
7
|
+
items: BreadcrumbItem[];
|
|
8
|
+
separator?: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export declare const Breadcrumb: React.FC<BreadcrumbProps>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as e, jsxs as i } from "react/jsx-runtime";
|
|
2
|
+
import { cn as o } from "../../utils/cn.js";
|
|
3
|
+
const m = ({
|
|
4
|
+
items: l,
|
|
5
|
+
separator: s = "/",
|
|
6
|
+
className: t,
|
|
7
|
+
...c
|
|
8
|
+
}) => /* @__PURE__ */ e("nav", { "aria-label": "Breadcrumb", className: o("flex items-center", t), ...c, children: /* @__PURE__ */ e("ol", { className: "flex flex-wrap items-center gap-1 text-sm", children: l.map((r, a) => {
|
|
9
|
+
const n = a === l.length - 1;
|
|
10
|
+
return /* @__PURE__ */ i("li", { className: "flex items-center gap-1", children: [
|
|
11
|
+
a > 0 && /* @__PURE__ */ e("span", { "aria-hidden": "true", className: "select-none text-[var(--text-muted)]", children: s }),
|
|
12
|
+
n ? /* @__PURE__ */ e("span", { "aria-current": "page", className: "font-medium text-[var(--text-primary)]", children: r.label }) : r.href ? /* @__PURE__ */ e(
|
|
13
|
+
"a",
|
|
14
|
+
{
|
|
15
|
+
className: "text-[var(--md-primary)] transition hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border-color-focus)]",
|
|
16
|
+
href: r.href,
|
|
17
|
+
children: r.label
|
|
18
|
+
}
|
|
19
|
+
) : /* @__PURE__ */ e("span", { className: "text-[var(--text-secondary)]", children: r.label })
|
|
20
|
+
] }, a);
|
|
21
|
+
}) }) });
|
|
22
|
+
m.displayName = "Breadcrumb";
|
|
23
|
+
export {
|
|
24
|
+
m as Breadcrumb
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=Breadcrumb.js.map
|
|
@@ -0,0 +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: React.FC<BreadcrumbProps> = ({\n items,\n separator = '/',\n className,\n ...props\n}) => {\n return (\n <nav aria-label=\"Breadcrumb\" className={cn('flex items-center', className)} {...props}>\n <ol className=\"flex flex-wrap items-center gap-1 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\">\n {index > 0 && (\n <span aria-hidden=\"true\" className=\"select-none text-[var(--text-muted)]\">\n {separator}\n </span>\n )}\n {isLast ? (\n <span aria-current=\"page\" className=\"font-medium text-[var(--text-primary)]\">\n {item.label}\n </span>\n ) : item.href ? (\n <a\n className=\"text-[var(--md-primary)] transition hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border-color-focus)]\"\n href={item.href}\n >\n {item.label}\n </a>\n ) : (\n <span className=\"text-[var(--text-secondary)]\">{item.label}</span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n\nBreadcrumb.displayName = 'Breadcrumb';\n"],"names":["Breadcrumb","items","separator","className","props","cn","jsx","item","index","isLast","jsxs"],"mappings":";;AAaO,MAAMA,IAAwC,CAAC;AAAA,EACpD,OAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,WAAAC;AAAA,EACA,GAAGC;AACL,wBAEK,OAAA,EAAI,cAAW,cAAa,WAAWC,EAAG,qBAAqBF,CAAS,GAAI,GAAGC,GAC9E,UAAA,gBAAAE,EAAC,QAAG,WAAU,6CACX,YAAM,IAAI,CAACC,GAAMC,MAAU;AAC1B,QAAMC,IAASD,MAAUP,EAAM,SAAS;AACxC,SACE,gBAAAS,EAAC,MAAA,EAAe,WAAU,2BACvB,UAAA;AAAA,IAAAF,IAAQ,KACP,gBAAAF,EAAC,QAAA,EAAK,eAAY,QAAO,WAAU,wCAChC,UAAAJ,EAAA,CACH;AAAA,IAEDO,IACC,gBAAAH,EAAC,QAAA,EAAK,gBAAa,QAAO,WAAU,0CACjC,UAAAC,EAAK,MAAA,CACR,IACEA,EAAK,OACP,gBAAAD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAMC,EAAK;AAAA,QAEV,UAAAA,EAAK;AAAA,MAAA;AAAA,IAAA,IAGR,gBAAAD,EAAC,QAAA,EAAK,WAAU,gCAAgC,YAAK,MAAA,CAAM;AAAA,EAAA,EAAA,GAlBtDE,CAoBT;AAEJ,CAAC,GACH,GACF;AAIJR,EAAW,cAAc;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { Breadcrumb } from './Breadcrumb';
|
|
3
|
+
declare const meta: Meta<typeof Breadcrumb>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof Breadcrumb>;
|
|
6
|
+
export declare const Playground: Story;
|
|
7
|
+
export declare const WithCustomSeparator: Story;
|
|
8
|
+
export declare const TwoLevels: Story;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { jsxs as h, jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import { cn as N } from "../../utils/cn.js";
|
|
3
|
+
const P = ({
|
|
4
|
+
variant: i = "primary",
|
|
5
|
+
size: t = "md",
|
|
6
|
+
compact: r = !1,
|
|
7
|
+
fullWidth: l = !1,
|
|
8
|
+
isLoading: o = !1,
|
|
9
|
+
leftIcon: d,
|
|
10
|
+
rightIcon: v,
|
|
11
|
+
children: c,
|
|
12
|
+
className: p = "",
|
|
13
|
+
disabled: w,
|
|
14
|
+
palette: e,
|
|
15
|
+
style: b,
|
|
16
|
+
...f
|
|
17
|
+
}) => {
|
|
18
|
+
const y = "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)]", x = "focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--md-primary)]", g = "disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-60", u = l ? "w-full" : "", z = e === "off-white" && i === "primary" ? "border-[var(--border-color)]" : "", C = {
|
|
19
|
+
xs: r ? "min-h-[1.75rem] min-w-[1.75rem] gap-1 px-2 py-1 text-[var(--font-size-xs)]" : "min-h-8 min-w-8 gap-1.5 px-3 py-1.5 text-[var(--font-size-xs)]",
|
|
20
|
+
sm: r ? "min-h-8 min-w-8 gap-[0.3125rem] px-2.5 py-1.5 text-[var(--font-size-sm)]" : "min-h-9 min-w-9 gap-[0.4375rem] px-3.5 py-2 text-[var(--font-size-sm)]",
|
|
21
|
+
md: r ? "min-h-[2.375rem] min-w-[2.375rem] gap-1.5 px-3 py-2 text-[var(--font-size-base)]" : "min-h-11 min-w-11 gap-2 px-4 py-2.5 text-[var(--font-size-base)]",
|
|
22
|
+
lg: r ? "min-h-[2.625rem] min-w-[2.625rem] gap-[0.4375rem] px-3.5 py-[0.5625rem] text-[var(--font-size-lg)]" : "min-h-12 min-w-12 gap-[0.5625rem] px-6 py-4 text-[var(--font-size-lg)]",
|
|
23
|
+
xl: r ? "min-h-12 min-w-12 gap-2 px-4 py-3 text-[var(--font-size-xl)]" : "min-h-14 min-w-14 gap-2.5 px-8 py-6 text-[var(--font-size-xl)]"
|
|
24
|
+
}, j = {
|
|
25
|
+
primary: "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)]",
|
|
26
|
+
secondary: "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)]",
|
|
27
|
+
success: "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)]",
|
|
28
|
+
error: "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)]",
|
|
29
|
+
warning: "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)]",
|
|
30
|
+
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)]",
|
|
31
|
+
neutral: "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)]",
|
|
32
|
+
ghost: "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)]"
|
|
33
|
+
}, m = {
|
|
34
|
+
xs: r ? "h-3 w-3" : "h-3.5 w-3.5",
|
|
35
|
+
sm: r ? "h-3.5 w-3.5" : "h-4 w-4",
|
|
36
|
+
md: "h-[1.125rem] w-[1.125rem]",
|
|
37
|
+
lg: "h-5 w-5",
|
|
38
|
+
xl: "h-5 w-5"
|
|
39
|
+
}, n = {
|
|
40
|
+
"verde-vibrante": {
|
|
41
|
+
primary: "var(--brand-verde-vibrante)",
|
|
42
|
+
hover: "var(--brand-verde-profundo)"
|
|
43
|
+
},
|
|
44
|
+
"verde-profundo": {
|
|
45
|
+
primary: "var(--brand-verde-profundo)",
|
|
46
|
+
hover: "var(--brand-grafite-azulado)"
|
|
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(
|
|
82
|
+
"button",
|
|
83
|
+
{
|
|
84
|
+
className: k,
|
|
85
|
+
disabled: w || o,
|
|
86
|
+
style: { ...s, ...b },
|
|
87
|
+
...f,
|
|
88
|
+
children: [
|
|
89
|
+
o && /* @__PURE__ */ a(
|
|
90
|
+
"span",
|
|
91
|
+
{
|
|
92
|
+
"aria-hidden": "true",
|
|
93
|
+
className: "absolute inline-flex h-[1em] w-[1em] animate-spin items-center justify-center",
|
|
94
|
+
children: /* @__PURE__ */ h("svg", { fill: "none", stroke: "currentColor", strokeWidth: "2", viewBox: "0 0 24 24", children: [
|
|
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
|
+
)
|
|
115
|
+
]
|
|
116
|
+
}
|
|
117
|
+
);
|
|
118
|
+
};
|
|
119
|
+
export {
|
|
120
|
+
P as Button
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +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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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as m } from "react/jsx-runtime";
|
|
2
|
+
const c = ({
|
|
3
|
+
variant: a = "default",
|
|
4
|
+
padding: r = "md",
|
|
5
|
+
hoverable: o = !1,
|
|
6
|
+
children: s,
|
|
7
|
+
className: d = "",
|
|
8
|
+
...e
|
|
9
|
+
}) => {
|
|
10
|
+
const n = "relative overflow-hidden rounded-[var(--border-radius-lg)] transition-[var(--transition-all)]", l = {
|
|
11
|
+
default: "bg-[var(--md-surface)] border border-[var(--md-outline-variant)] shadow-[var(--shadow-sm)]",
|
|
12
|
+
elevated: "bg-[var(--md-surface)] border border-[var(--md-outline-variant)] shadow-[var(--shadow-lg)]",
|
|
13
|
+
outlined: "bg-transparent border border-[var(--md-outline-variant)] shadow-none",
|
|
14
|
+
flat: "bg-[var(--md-surface)] border-0 shadow-none"
|
|
15
|
+
}, t = {
|
|
16
|
+
none: "p-0",
|
|
17
|
+
sm: "p-[var(--spacing-md)]",
|
|
18
|
+
md: "p-[var(--spacing-lg)]",
|
|
19
|
+
lg: "p-[var(--spacing-xl)]",
|
|
20
|
+
xl: "p-[var(--spacing-2xl)]"
|
|
21
|
+
}, i = o ? "hover:shadow-[var(--shadow-md)]" : "", v = [
|
|
22
|
+
n,
|
|
23
|
+
l[a],
|
|
24
|
+
t[r],
|
|
25
|
+
i,
|
|
26
|
+
d
|
|
27
|
+
].filter(Boolean).join(" ");
|
|
28
|
+
return /* @__PURE__ */ m("div", { className: v, ...e, children: s });
|
|
29
|
+
};
|
|
30
|
+
export {
|
|
31
|
+
c as Card
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=Card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Card.js","sources":["../../../src/components/Card/Card.tsx"],"sourcesContent":["import type React from 'react';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n hoverable?: boolean;\n padding?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n variant?: 'default' | 'elevated' | 'outlined' | 'flat';\n}\n\nexport const Card: React.FC<CardProps> = ({\n variant = 'default',\n padding = 'md',\n hoverable = false,\n children,\n className = '',\n ...props\n}) => {\n const baseClass =\n 'relative overflow-hidden rounded-[var(--border-radius-lg)] transition-[var(--transition-all)]';\n const variantClassMap: Record<NonNullable<CardProps['variant']>, string> = {\n default:\n 'bg-[var(--md-surface)] border border-[var(--md-outline-variant)] shadow-[var(--shadow-sm)]',\n elevated:\n 'bg-[var(--md-surface)] border border-[var(--md-outline-variant)] shadow-[var(--shadow-lg)]',\n outlined: 'bg-transparent border border-[var(--md-outline-variant)] shadow-none',\n flat: 'bg-[var(--md-surface)] border-0 shadow-none',\n };\n const paddingClassMap: Record<NonNullable<CardProps['padding']>, string> = {\n none: 'p-0',\n sm: 'p-[var(--spacing-md)]',\n md: 'p-[var(--spacing-lg)]',\n lg: 'p-[var(--spacing-xl)]',\n xl: 'p-[var(--spacing-2xl)]',\n };\n const hoverableClass = hoverable ? 'hover:shadow-[var(--shadow-md)]' : '';\n const combinedClass = [\n baseClass,\n variantClassMap[variant],\n paddingClassMap[padding],\n hoverableClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={combinedClass} {...props}>\n {children}\n </div>\n );\n};\n"],"names":["Card","variant","padding","hoverable","children","className","props","baseClass","variantClassMap","paddingClassMap","hoverableClass","combinedClass"],"mappings":";AASO,MAAMA,IAA4B,CAAC;AAAA,EACxC,SAAAC,IAAU;AAAA,EACV,SAAAC,IAAU;AAAA,EACV,WAAAC,IAAY;AAAA,EACZ,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAMC,IACJ,iGACIC,IAAqE;AAAA,IACzE,SACE;AAAA,IACF,UACE;AAAA,IACF,UAAU;AAAA,IACV,MAAM;AAAA,EAAA,GAEFC,IAAqE;AAAA,IACzE,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAEAC,IAAiBP,IAAY,oCAAoC,IACjEQ,IAAgB;AAAA,IACpBJ;AAAA,IACAC,EAAgBP,CAAO;AAAA,IACvBQ,EAAgBP,CAAO;AAAA,IACvBQ;AAAA,IACAL;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,2BACG,OAAA,EAAI,WAAWM,GAAgB,GAAGL,GAChC,UAAAF,GACH;AAEJ;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { Card } from './Card';
|
|
3
|
+
declare const meta: Meta<typeof Card>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof Card>;
|
|
6
|
+
export declare const Playground: Story;
|
|
7
|
+
export declare const Variants: Story;
|
|
8
|
+
export declare const Hoverable: Story;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from 'react';
|
|
2
2
|
export interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {
|
|
3
3
|
helperText?: string;
|
|
4
4
|
label?: string;
|
|
5
5
|
}
|
|
6
|
-
export declare const Checkbox: React.
|
|
6
|
+
export declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsxs as o, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import l from "react";
|
|
3
|
+
import { cn as m } from "../../utils/cn.js";
|
|
4
|
+
const d = l.forwardRef(
|
|
5
|
+
({ label: t, helperText: r, className: i, id: a, ...c }, n) => {
|
|
6
|
+
const s = a || `checkbox-${Math.random().toString(36).slice(2, 9)}`;
|
|
7
|
+
return /* @__PURE__ */ o(
|
|
8
|
+
"label",
|
|
9
|
+
{
|
|
10
|
+
className: m("inline-flex cursor-pointer items-start gap-2", i),
|
|
11
|
+
htmlFor: s,
|
|
12
|
+
children: [
|
|
13
|
+
/* @__PURE__ */ e(
|
|
14
|
+
"input",
|
|
15
|
+
{
|
|
16
|
+
ref: n,
|
|
17
|
+
className: "mt-0.5 h-4 w-4 rounded border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--md-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--border-color-focus)]",
|
|
18
|
+
id: s,
|
|
19
|
+
type: "checkbox",
|
|
20
|
+
...c
|
|
21
|
+
}
|
|
22
|
+
),
|
|
23
|
+
/* @__PURE__ */ o("span", { className: "grid gap-0.5", children: [
|
|
24
|
+
t && /* @__PURE__ */ e("span", { className: "text-sm text-[var(--text-primary)]", children: t }),
|
|
25
|
+
r && /* @__PURE__ */ e("span", { className: "text-xs text-[var(--text-muted)]", children: r })
|
|
26
|
+
] })
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
d.displayName = "Checkbox";
|
|
33
|
+
export {
|
|
34
|
+
d as Checkbox
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=Checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checkbox.js","sources":["../../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n helperText?: string;\n label?: string;\n}\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ label, helperText, className, id, ...props }, ref) => {\n const inputId = id || `checkbox-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <label\n className={cn('inline-flex cursor-pointer items-start gap-2', className)}\n htmlFor={inputId}\n >\n <input\n ref={ref}\n className=\"mt-0.5 h-4 w-4 rounded border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--md-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--border-color-focus)]\"\n id={inputId}\n type=\"checkbox\"\n {...props}\n />\n <span className=\"grid gap-0.5\">\n {label && <span className=\"text-sm text-[var(--text-primary)]\">{label}</span>}\n {helperText && <span className=\"text-xs text-[var(--text-muted)]\">{helperText}</span>}\n </span>\n </label>\n );\n },\n);\n\nCheckbox.displayName = 'Checkbox';\n"],"names":["Checkbox","React","label","helperText","className","id","props","ref","inputId","jsxs","cn","jsx"],"mappings":";;;AAQO,MAAMA,IAAWC,EAAM;AAAA,EAC5B,CAAC,EAAE,OAAAC,GAAO,YAAAC,GAAY,WAAAC,GAAW,IAAAC,GAAI,GAAGC,EAAA,GAASC,MAAQ;AACvD,UAAMC,IAAUH,KAAM,YAAY,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAExE,WACE,gBAAAI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWC,EAAG,gDAAgDN,CAAS;AAAA,QACvE,SAASI;AAAA,QAET,UAAA;AAAA,UAAA,gBAAAG;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAAJ;AAAA,cACA,WAAU;AAAA,cACV,IAAIC;AAAA,cACJ,MAAK;AAAA,cACJ,GAAGF;AAAA,YAAA;AAAA,UAAA;AAAA,UAEN,gBAAAG,EAAC,QAAA,EAAK,WAAU,gBACb,UAAA;AAAA,YAAAP,KAAS,gBAAAS,EAAC,QAAA,EAAK,WAAU,sCAAsC,UAAAT,GAAM;AAAA,YACrEC,KAAc,gBAAAQ,EAAC,QAAA,EAAK,WAAU,oCAAoC,UAAAR,EAAA,CAAW;AAAA,UAAA,EAAA,CAChF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAH,EAAS,cAAc;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { Checkbox } from './Checkbox';
|
|
3
|
+
declare const meta: Meta<typeof Checkbox>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof Checkbox>;
|
|
6
|
+
export declare const Playground: Story;
|
|
7
|
+
export declare const States: Story;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import { cn as n } from "../../utils/cn.js";
|
|
3
|
+
const b = ({ selected: r = !1, className: e, children: o, ...t }) => /* @__PURE__ */ a(
|
|
4
|
+
"button",
|
|
5
|
+
{
|
|
6
|
+
className: n(
|
|
7
|
+
"inline-flex items-center rounded-full border px-3 py-1.5 text-sm transition",
|
|
8
|
+
r ? "border-[var(--md-primary)] bg-[color:color-mix(in_srgb,var(--md-primary)_16%,transparent)] text-[var(--md-on-surface)]" : "border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]",
|
|
9
|
+
e
|
|
10
|
+
),
|
|
11
|
+
type: "button",
|
|
12
|
+
...t,
|
|
13
|
+
children: o
|
|
14
|
+
}
|
|
15
|
+
);
|
|
16
|
+
export {
|
|
17
|
+
b as Chip
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=Chip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Chip.js","sources":["../../../src/components/Chip/Chip.tsx"],"sourcesContent":["import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ChipProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n selected?: boolean;\n}\n\nexport const Chip: React.FC<ChipProps> = ({ selected = false, className, children, ...props }) => {\n return (\n <button\n className={cn(\n 'inline-flex items-center rounded-full border px-3 py-1.5 text-sm transition',\n selected\n ? 'border-[var(--md-primary)] bg-[color:color-mix(in_srgb,var(--md-primary)_16%,transparent)] text-[var(--md-on-surface)]'\n : 'border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]',\n className,\n )}\n type=\"button\"\n {...props}\n >\n {children}\n </button>\n );\n};\n"],"names":["Chip","selected","className","children","props","jsx","cn"],"mappings":";;AAOO,MAAMA,IAA4B,CAAC,EAAE,UAAAC,IAAW,IAAO,WAAAC,GAAW,UAAAC,GAAU,GAAGC,QAElF,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAL,IACI,2HACA;AAAA,MACJC;AAAA,IAAA;AAAA,IAEF,MAAK;AAAA,IACJ,GAAGE;AAAA,IAEH,UAAAD;AAAA,EAAA;AAAA;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface ComboboxOption {
|
|
3
|
+
label: string;
|
|
4
|
+
value: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ComboboxProps {
|
|
7
|
+
className?: string;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
error?: string;
|
|
10
|
+
helperText?: string;
|
|
11
|
+
label?: string;
|
|
12
|
+
onChange?: (value: string) => void;
|
|
13
|
+
options: ComboboxOption[];
|
|
14
|
+
placeholder?: string;
|
|
15
|
+
value?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare const Combobox: React.FC<ComboboxProps>;
|