@tosui/react 0.1.1 → 0.1.3
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.d.ts.map +1 -1
- package/dist/components/Accordion/Accordion.js +109 -0
- package/dist/components/Accordion/Accordion.js.map +1 -0
- package/dist/components/Accordion/accordion.module.css +36 -0
- package/dist/components/Accordion/accordion.module.css.js +27 -0
- package/dist/components/Accordion/accordion.module.css.js.map +1 -0
- package/dist/components/Alert/Alert.js +109 -0
- package/dist/components/Alert/Alert.js.map +1 -0
- package/dist/components/Alert/alert.module.css +27 -0
- package/dist/components/Alert/alert.module.css.js +24 -0
- package/dist/components/Alert/alert.module.css.js.map +1 -0
- package/dist/components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/components/Avatar/Avatar.js +72 -0
- package/dist/components/Avatar/Avatar.js.map +1 -0
- package/dist/components/Avatar/avatar.module.css +14 -0
- package/dist/components/Avatar/avatar.module.css.js +15 -0
- package/dist/components/Avatar/avatar.module.css.js.map +1 -0
- package/dist/components/Badge/Badge.js +66 -0
- package/dist/components/Badge/Badge.js.map +1 -0
- package/dist/components/Badge/badge.module.css +3 -0
- package/dist/components/Badge/badge.module.css.js +9 -0
- package/dist/components/Badge/badge.module.css.js.map +1 -0
- package/dist/components/Box/Box.js +217 -0
- package/dist/components/Box/Box.js.map +1 -0
- package/dist/components/Box/borders/borders.js +91 -0
- package/dist/components/Box/borders/borders.js.map +1 -0
- package/dist/components/Box/borders/borders.module.css +49 -0
- package/dist/components/Box/borders/borders.module.css.js +46 -0
- package/dist/components/Box/borders/borders.module.css.js.map +1 -0
- package/dist/components/Box/colors/colors.js +45 -0
- package/dist/components/Box/colors/colors.js.map +1 -0
- package/dist/components/Box/colors/colors.module.css +113 -0
- package/dist/components/Box/colors/colors.module.css.js +114 -0
- package/dist/components/Box/colors/colors.module.css.js.map +1 -0
- package/dist/components/Box/display/display.js +52 -0
- package/dist/components/Box/display/display.js.map +1 -0
- package/dist/components/Box/display/display.module.css +375 -0
- package/dist/components/Box/display/display.module.css.js +318 -0
- package/dist/components/Box/display/display.module.css.js.map +1 -0
- package/dist/components/Box/flexbox/flexbox.js +139 -0
- package/dist/components/Box/flexbox/flexbox.js.map +1 -0
- package/dist/components/Box/flexbox/flexbox.module.css +65 -0
- package/dist/components/Box/flexbox/flexbox.module.css.js +62 -0
- package/dist/components/Box/flexbox/flexbox.module.css.js.map +1 -0
- package/dist/components/Box/grid/grid.js +49 -0
- package/dist/components/Box/grid/grid.js.map +1 -0
- package/dist/components/Box/grid/grid.module.css +19 -0
- package/dist/components/Box/grid/grid.module.css.js +20 -0
- package/dist/components/Box/grid/grid.module.css.js.map +1 -0
- package/dist/components/Box/inset/inset.js +96 -0
- package/dist/components/Box/inset/inset.js.map +1 -0
- package/dist/components/Box/inset/inset.module.css +187 -0
- package/dist/components/Box/inset/inset.module.css.js +174 -0
- package/dist/components/Box/inset/inset.module.css.js.map +1 -0
- package/dist/components/Box/interactions/interactions.js +45 -0
- package/dist/components/Box/interactions/interactions.js.map +1 -0
- package/dist/components/Box/interactions/interactions.module.css +43 -0
- package/dist/components/Box/interactions/interactions.module.css.js +44 -0
- package/dist/components/Box/interactions/interactions.module.css.js.map +1 -0
- package/dist/components/Box/margin/margin.js +96 -0
- package/dist/components/Box/margin/margin.js.map +1 -0
- package/dist/components/Box/margin/margin.module.css +187 -0
- package/dist/components/Box/margin/margin.module.css.js +174 -0
- package/dist/components/Box/margin/margin.module.css.js.map +1 -0
- package/dist/components/Box/opacity/opacity.js +52 -0
- package/dist/components/Box/opacity/opacity.js.map +1 -0
- package/dist/components/Box/opacity/opacity.module.css +51 -0
- package/dist/components/Box/opacity/opacity.module.css.js +174 -0
- package/dist/components/Box/opacity/opacity.module.css.js.map +1 -0
- package/dist/components/Box/overflow/overflow.js +69 -0
- package/dist/components/Box/overflow/overflow.js.map +1 -0
- package/dist/components/Box/overflow/overflow.module.css +155 -0
- package/dist/components/Box/overflow/overflow.module.css.js +510 -0
- package/dist/components/Box/overflow/overflow.module.css.js.map +1 -0
- package/dist/components/Box/padding/padding.js +96 -0
- package/dist/components/Box/padding/padding.js.map +1 -0
- package/dist/components/Box/padding/padding.module.css +187 -0
- package/dist/components/Box/padding/padding.module.css.js +174 -0
- package/dist/components/Box/padding/padding.module.css.js.map +1 -0
- package/dist/components/Box/position/position.js +52 -0
- package/dist/components/Box/position/position.js.map +1 -0
- package/dist/components/Box/position/position.module.css +234 -0
- package/dist/components/Box/position/position.module.css.js +214 -0
- package/dist/components/Box/position/position.module.css.js.map +1 -0
- package/dist/components/Box/reset/reset.js +6 -0
- package/dist/components/Box/reset/reset.js.map +1 -0
- package/dist/components/Box/reset/reset.module.css +23 -0
- package/dist/components/Box/reset/reset.module.css.js +9 -0
- package/dist/components/Box/reset/reset.module.css.js.map +1 -0
- package/dist/components/Box/roundness/roundness.js +92 -0
- package/dist/components/Box/roundness/roundness.js.map +1 -0
- package/dist/components/Box/roundness/roundness.module.css +47 -0
- package/dist/components/Box/roundness/roundness.module.css.js +46 -0
- package/dist/components/Box/roundness/roundness.module.css.js.map +1 -0
- package/dist/components/Box/shadows/shadows.js +52 -0
- package/dist/components/Box/shadows/shadows.js.map +1 -0
- package/dist/components/Box/shadows/shadows.module.css +51 -0
- package/dist/components/Box/shadows/shadows.module.css.js +174 -0
- package/dist/components/Box/shadows/shadows.module.css.js.map +1 -0
- package/dist/components/Box/shared/constants.js +21 -0
- package/dist/components/Box/shared/constants.js.map +1 -0
- package/dist/components/Box/shared/spacing.js +10 -0
- package/dist/components/Box/shared/spacing.js.map +1 -0
- package/dist/components/Box/sizing/sizing.js +75 -0
- package/dist/components/Box/sizing/sizing.js.map +1 -0
- package/dist/components/Box/sizing/sizing.module.css +281 -0
- package/dist/components/Box/sizing/sizing.module.css.js +258 -0
- package/dist/components/Box/sizing/sizing.module.css.js.map +1 -0
- package/dist/components/Box/text/text.js +45 -0
- package/dist/components/Box/text/text.js.map +1 -0
- package/dist/components/Box/text/text.module.css +29 -0
- package/dist/components/Box/text/text.module.css.js +30 -0
- package/dist/components/Box/text/text.module.css.js.map +1 -0
- package/dist/components/Box/typography/typography.js +27 -0
- package/dist/components/Box/typography/typography.js.map +1 -0
- package/dist/components/Box/typography/typography.module.css +26 -0
- package/dist/components/Box/typography/typography.module.css.js +25 -0
- package/dist/components/Box/typography/typography.module.css.js.map +1 -0
- package/dist/components/Box/zIndex/zIndex.js +52 -0
- package/dist/components/Box/zIndex/zIndex.js.map +1 -0
- package/dist/components/Box/zIndex/zIndex.module.css +90 -0
- package/dist/components/Box/zIndex/zIndex.module.css.js +300 -0
- package/dist/components/Box/zIndex/zIndex.module.css.js.map +1 -0
- package/dist/components/Breadcrumb/Breadcrumb.js +78 -0
- package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/components/Breadcrumb/breadcrumb.module.css +25 -0
- package/dist/components/Breadcrumb/breadcrumb.module.css.js +21 -0
- package/dist/components/Breadcrumb/breadcrumb.module.css.js.map +1 -0
- package/dist/components/Button/Button.js +129 -0
- package/dist/components/Button/Button.js.map +1 -0
- package/dist/components/Button/button.module.css +17 -0
- package/dist/components/Button/button.module.css.js +18 -0
- package/dist/components/Button/button.module.css.js.map +1 -0
- package/dist/components/Card/Card.js +60 -0
- package/dist/components/Card/Card.js.map +1 -0
- package/dist/components/Card/card.module.css +16 -0
- package/dist/components/Card/card.module.css.js +18 -0
- package/dist/components/Card/card.module.css.js.map +1 -0
- package/dist/components/Checkbox/Checkbox.js +74 -0
- package/dist/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/components/Checkbox/checkbox.module.css +65 -0
- package/dist/components/Checkbox/checkbox.module.css.js +15 -0
- package/dist/components/Checkbox/checkbox.module.css.js.map +1 -0
- package/dist/components/Code/Code.js +32 -0
- package/dist/components/Code/Code.js.map +1 -0
- package/dist/components/Container/Container.js +44 -0
- package/dist/components/Container/Container.js.map +1 -0
- package/dist/components/Divider/Divider.js +48 -0
- package/dist/components/Divider/Divider.js.map +1 -0
- package/dist/components/Flex/Flex.js +48 -0
- package/dist/components/Flex/Flex.js.map +1 -0
- package/dist/components/FormField/FormField.js +52 -0
- package/dist/components/FormField/FormField.js.map +1 -0
- package/dist/components/Grid/Grid.js +41 -0
- package/dist/components/Grid/Grid.js.map +1 -0
- package/dist/components/HStack/HStack.js +17 -0
- package/dist/components/HStack/HStack.js.map +1 -0
- package/dist/components/Heading/Heading.js +42 -0
- package/dist/components/Heading/Heading.js.map +1 -0
- package/dist/components/IconButton/IconButton.js +93 -0
- package/dist/components/IconButton/IconButton.js.map +1 -0
- package/dist/components/IconButton/iconbutton.module.css +18 -0
- package/dist/components/IconButton/iconbutton.module.css.js +18 -0
- package/dist/components/IconButton/iconbutton.module.css.js.map +1 -0
- package/dist/components/Image/Image.d.ts.map +1 -1
- package/dist/components/Image/Image.js +101 -0
- package/dist/components/Image/Image.js.map +1 -0
- package/dist/components/Image/image.module.css +44 -0
- package/dist/components/Image/image.module.css.js +36 -0
- package/dist/components/Image/image.module.css.js.map +1 -0
- package/dist/components/Input/Input.js +57 -0
- package/dist/components/Input/Input.js.map +1 -0
- package/dist/components/Input/input.module.css +29 -0
- package/dist/components/Input/input.module.css.js +12 -0
- package/dist/components/Input/input.module.css.js.map +1 -0
- package/dist/components/Label/Label.js +36 -0
- package/dist/components/Label/Label.js.map +1 -0
- package/dist/components/Link/Link.js +38 -0
- package/dist/components/Link/Link.js.map +1 -0
- package/dist/components/Link/link.module.css +28 -0
- package/dist/components/Link/link.module.css.js +16 -0
- package/dist/components/Link/link.module.css.js.map +1 -0
- package/dist/components/List/List.js +51 -0
- package/dist/components/List/List.js.map +1 -0
- package/dist/components/List/list.module.css +45 -0
- package/dist/components/List/list.module.css.js +24 -0
- package/dist/components/List/list.module.css.js.map +1 -0
- package/dist/components/Menu/Menu.d.ts.map +1 -1
- package/dist/components/Menu/Menu.js +143 -0
- package/dist/components/Menu/Menu.js.map +1 -0
- package/dist/components/Menu/menu.module.css +24 -0
- package/dist/components/Menu/menu.module.css.js +18 -0
- package/dist/components/Menu/menu.module.css.js.map +1 -0
- package/dist/components/Modal/Modal.d.ts.map +1 -1
- package/dist/components/Modal/Modal.js +130 -0
- package/dist/components/Modal/Modal.js.map +1 -0
- package/dist/components/Modal/modal.module.css +26 -0
- package/dist/components/Modal/modal.module.css.js +21 -0
- package/dist/components/Modal/modal.module.css.js.map +1 -0
- package/dist/components/Pagination/Pagination.js +125 -0
- package/dist/components/Pagination/Pagination.js.map +1 -0
- package/dist/components/Pagination/pagination.module.css +3 -0
- package/dist/components/Pagination/pagination.module.css.js +9 -0
- package/dist/components/Pagination/pagination.module.css.js.map +1 -0
- package/dist/components/Popover/Popover.d.ts.map +1 -1
- package/dist/components/Popover/Popover.js +144 -0
- package/dist/components/Popover/Popover.js.map +1 -0
- package/dist/components/Popover/popover.module.css +11 -0
- package/dist/components/Popover/popover.module.css.js +15 -0
- package/dist/components/Popover/popover.module.css.js.map +1 -0
- package/dist/components/Progress/Progress.js +54 -0
- package/dist/components/Progress/Progress.js.map +1 -0
- package/dist/components/Progress/progress.module.css +24 -0
- package/dist/components/Progress/progress.module.css.js +15 -0
- package/dist/components/Progress/progress.module.css.js.map +1 -0
- package/dist/components/Radio/Radio.js +70 -0
- package/dist/components/Radio/Radio.js.map +1 -0
- package/dist/components/Radio/radio.module.css +48 -0
- package/dist/components/Radio/radio.module.css.js +12 -0
- package/dist/components/Radio/radio.module.css.js.map +1 -0
- package/dist/components/Select/Select.js +57 -0
- package/dist/components/Select/Select.js.map +1 -0
- package/dist/components/Select/select.module.css +43 -0
- package/dist/components/Select/select.module.css.js +12 -0
- package/dist/components/Select/select.module.css.js.map +1 -0
- package/dist/components/Skeleton/Skeleton.js +37 -0
- package/dist/components/Skeleton/Skeleton.js.map +1 -0
- package/dist/components/Skeleton/skeleton.module.css +26 -0
- package/dist/components/Skeleton/skeleton.module.css.js +9 -0
- package/dist/components/Skeleton/skeleton.module.css.js.map +1 -0
- package/dist/components/Spacer/Spacer.js +16 -0
- package/dist/components/Spacer/Spacer.js.map +1 -0
- package/dist/components/Spinner/Spinner.js +41 -0
- package/dist/components/Spinner/Spinner.js.map +1 -0
- package/dist/components/Spinner/spinner.module.css +21 -0
- package/dist/components/Spinner/spinner.module.css.js +9 -0
- package/dist/components/Spinner/spinner.module.css.js.map +1 -0
- package/dist/components/Stack/Stack.js +35 -0
- package/dist/components/Stack/Stack.js.map +1 -0
- package/dist/components/Switch/Switch.js +83 -0
- package/dist/components/Switch/Switch.js.map +1 -0
- package/dist/components/Switch/switch.module.css +48 -0
- package/dist/components/Switch/switch.module.css.js +15 -0
- package/dist/components/Switch/switch.module.css.js.map +1 -0
- package/dist/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/components/Tabs/Tabs.js +87 -0
- package/dist/components/Tabs/Tabs.js.map +1 -0
- package/dist/components/Tabs/tabs.module.css +55 -0
- package/dist/components/Tabs/tabs.module.css.js +27 -0
- package/dist/components/Tabs/tabs.module.css.js.map +1 -0
- package/dist/components/Text/Text.js +40 -0
- package/dist/components/Text/Text.js.map +1 -0
- package/dist/components/Text/text.module.css +9 -0
- package/dist/components/Text/text.module.css.js +12 -0
- package/dist/components/Text/text.module.css.js.map +1 -0
- package/dist/components/Textarea/Textarea.js +70 -0
- package/dist/components/Textarea/Textarea.js.map +1 -0
- package/dist/components/Textarea/textarea.module.css +46 -0
- package/dist/components/Textarea/textarea.module.css.js +24 -0
- package/dist/components/Textarea/textarea.module.css.js.map +1 -0
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/Tooltip/Tooltip.js +135 -0
- package/dist/components/Tooltip/Tooltip.js.map +1 -0
- package/dist/components/Tooltip/tooltip.module.css +4 -0
- package/dist/components/Tooltip/tooltip.module.css.js +9 -0
- package/dist/components/Tooltip/tooltip.module.css.js.map +1 -0
- package/dist/components/VStack/VStack.js +17 -0
- package/dist/components/VStack/VStack.js.map +1 -0
- package/dist/fonts.css +23 -1
- package/dist/index.css +3317 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +99 -5521
- package/dist/index.js.map +1 -1
- package/dist/styles/styles.css +350 -0
- package/package.json +8 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../src/components/Accordion/Accordion.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../src/components/Accordion/Accordion.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAuC,MAAM,OAAO,CAAC;AA4B5E,MAAM,MAAM,cAAc,GAAG;IAC3B,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,oCAAoC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAMF;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EACxB,YAAY,EACZ,aAAqB,EACrB,SAAS,EACT,QAAQ,GACT,EAAE,cAAc,2CAgChB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,QAAgB,EAChB,SAAS,EACT,QAAQ,GACT,EAAE,kBAAkB,2CAkDpB"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useState, useContext } from "react";
|
|
4
|
+
import clsx from "clsx";
|
|
5
|
+
import { Box } from "../Box/Box.js";
|
|
6
|
+
import styles from "./accordion.module.css.js";
|
|
7
|
+
const AccordionContext = createContext(null);
|
|
8
|
+
function useAccordionContext() {
|
|
9
|
+
const context = useContext(AccordionContext);
|
|
10
|
+
if (!context)
|
|
11
|
+
throw new Error("AccordionItem must be used within Accordion");
|
|
12
|
+
return context;
|
|
13
|
+
}
|
|
14
|
+
function Accordion({
|
|
15
|
+
defaultIndex,
|
|
16
|
+
allowMultiple = false,
|
|
17
|
+
className,
|
|
18
|
+
children
|
|
19
|
+
}) {
|
|
20
|
+
const [expandedIndex, setExpandedIndex] = useState(defaultIndex ?? (allowMultiple ? [] : null));
|
|
21
|
+
const toggleIndex = (index) => {
|
|
22
|
+
if (allowMultiple) {
|
|
23
|
+
const current = expandedIndex || [];
|
|
24
|
+
const newExpanded = current.includes(index) ? current.filter((i) => i !== index) : [...current, index];
|
|
25
|
+
setExpandedIndex(newExpanded);
|
|
26
|
+
} else {
|
|
27
|
+
setExpandedIndex(expandedIndex === index ? null : index);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
return /* @__PURE__ */ jsx(
|
|
31
|
+
AccordionContext.Provider,
|
|
32
|
+
{
|
|
33
|
+
value: { expandedIndex, toggleIndex, allowMultiple },
|
|
34
|
+
children: /* @__PURE__ */ jsx(
|
|
35
|
+
Box,
|
|
36
|
+
{
|
|
37
|
+
border: "thin",
|
|
38
|
+
borderColor: "border",
|
|
39
|
+
rounded: "md",
|
|
40
|
+
overflow: "hidden",
|
|
41
|
+
className: clsx(styles.accordion, className),
|
|
42
|
+
children
|
|
43
|
+
}
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
function AccordionItem({
|
|
49
|
+
index,
|
|
50
|
+
title,
|
|
51
|
+
disabled = false,
|
|
52
|
+
className,
|
|
53
|
+
children
|
|
54
|
+
}) {
|
|
55
|
+
const { expandedIndex, toggleIndex, allowMultiple } = useAccordionContext();
|
|
56
|
+
const isExpanded = allowMultiple ? (expandedIndex || []).includes(index) : expandedIndex === index;
|
|
57
|
+
return /* @__PURE__ */ jsxs(
|
|
58
|
+
Box,
|
|
59
|
+
{
|
|
60
|
+
className: clsx(
|
|
61
|
+
styles.item,
|
|
62
|
+
isExpanded && styles.expanded,
|
|
63
|
+
disabled && styles.disabled,
|
|
64
|
+
className
|
|
65
|
+
),
|
|
66
|
+
children: [
|
|
67
|
+
/* @__PURE__ */ jsxs(
|
|
68
|
+
Box,
|
|
69
|
+
{
|
|
70
|
+
as: "button",
|
|
71
|
+
type: "button",
|
|
72
|
+
display: "flex",
|
|
73
|
+
alignItems: "center",
|
|
74
|
+
justifyContent: "space-between",
|
|
75
|
+
w: "100%",
|
|
76
|
+
p: 4,
|
|
77
|
+
bg: "transparent",
|
|
78
|
+
border: "none",
|
|
79
|
+
borderBottom: isExpanded ? "thin" : "none",
|
|
80
|
+
borderColor: "border",
|
|
81
|
+
cursor: disabled ? "not-allowed" : "pointer",
|
|
82
|
+
opacity: disabled ? "faint" : void 0,
|
|
83
|
+
onClick: () => !disabled && toggleIndex(index),
|
|
84
|
+
"aria-expanded": isExpanded,
|
|
85
|
+
"aria-disabled": disabled,
|
|
86
|
+
className: styles.button,
|
|
87
|
+
children: [
|
|
88
|
+
/* @__PURE__ */ jsx(Box, { fontWeight: "medium", children: title }),
|
|
89
|
+
/* @__PURE__ */ jsx(
|
|
90
|
+
Box,
|
|
91
|
+
{
|
|
92
|
+
as: "span",
|
|
93
|
+
className: clsx(styles.icon, isExpanded && styles.rotated),
|
|
94
|
+
children: "▾"
|
|
95
|
+
}
|
|
96
|
+
)
|
|
97
|
+
]
|
|
98
|
+
}
|
|
99
|
+
),
|
|
100
|
+
isExpanded && /* @__PURE__ */ jsx(Box, { p: 4, className: styles.content, children })
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
export {
|
|
106
|
+
Accordion,
|
|
107
|
+
AccordionItem
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=Accordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.js","sources":["../../../src/components/Accordion/Accordion.tsx"],"sourcesContent":["\"use client\";\n\nimport { type ReactNode, createContext, useContext, useState } from \"react\";\nimport clsx from \"clsx\";\nimport { Box } from \"@/components/Box/Box\";\nimport styles from \"./accordion.module.css\";\n\n// ============================================================================\n// Context\n// ============================================================================\n\ntype AccordionContextValue = {\n expandedIndex: number | number[] | null;\n toggleIndex: (index: number) => void;\n allowMultiple: boolean;\n};\n\nconst AccordionContext = createContext<AccordionContextValue | null>(null);\n\nfunction useAccordionContext() {\n const context = useContext(AccordionContext);\n if (!context)\n throw new Error(\"AccordionItem must be used within Accordion\");\n return context;\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type AccordionProps = {\n /** Default expanded index(es) */\n defaultIndex?: number | number[];\n /** Allow multiple items expanded */\n allowMultiple?: boolean;\n /** Additional class name */\n className?: string;\n /** Accordion items */\n children?: ReactNode;\n};\n\nexport type AccordionItemProps = {\n /** Item index (set manually) */\n index: number;\n /** Item title */\n title: ReactNode;\n /** Whether disabled */\n disabled?: boolean;\n /** Additional class name */\n className?: string;\n /** Item content */\n children?: ReactNode;\n};\n\n// ============================================================================\n// Components\n// ============================================================================\n\n/**\n * Accordion - Collapsible sections container\n *\n * An accordion component that:\n * - Supports single or multiple expanded items\n * - Uses context for state management\n * - Animated expand/collapse\n */\nexport function Accordion({\n defaultIndex,\n allowMultiple = false,\n className,\n children,\n}: AccordionProps) {\n const [expandedIndex, setExpandedIndex] = useState<\n number | number[] | null\n >(defaultIndex ?? (allowMultiple ? [] : null));\n\n const toggleIndex = (index: number) => {\n if (allowMultiple) {\n const current = (expandedIndex as number[]) || [];\n const newExpanded = current.includes(index)\n ? current.filter((i) => i !== index)\n : [...current, index];\n setExpandedIndex(newExpanded);\n } else {\n setExpandedIndex(expandedIndex === index ? null : index);\n }\n };\n\n return (\n <AccordionContext.Provider\n value={{ expandedIndex, toggleIndex, allowMultiple }}\n >\n <Box\n border=\"thin\"\n borderColor=\"border\"\n rounded=\"md\"\n overflow=\"hidden\"\n className={clsx(styles.accordion, className)}\n >\n {children}\n </Box>\n </AccordionContext.Provider>\n );\n}\n\n/**\n * AccordionItem - Individual collapsible section\n */\nexport function AccordionItem({\n index,\n title,\n disabled = false,\n className,\n children,\n}: AccordionItemProps) {\n const { expandedIndex, toggleIndex, allowMultiple } = useAccordionContext();\n\n const isExpanded = allowMultiple\n ? ((expandedIndex as number[]) || []).includes(index)\n : expandedIndex === index;\n\n return (\n <Box\n className={clsx(\n styles.item,\n isExpanded && styles.expanded,\n disabled && styles.disabled,\n className\n )}\n >\n <Box\n as=\"button\"\n type=\"button\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n w=\"100%\"\n p={4}\n bg=\"transparent\"\n border=\"none\"\n borderBottom={isExpanded ? \"thin\" : \"none\"}\n borderColor=\"border\"\n cursor={disabled ? \"not-allowed\" : \"pointer\"}\n opacity={disabled ? \"faint\" : undefined}\n onClick={() => !disabled && toggleIndex(index)}\n aria-expanded={isExpanded}\n aria-disabled={disabled}\n className={styles.button}\n >\n <Box fontWeight=\"medium\">{title}</Box>\n <Box\n as=\"span\"\n className={clsx(styles.icon, isExpanded && styles.rotated)}\n >\n ▾\n </Box>\n </Box>\n {isExpanded && (\n <Box p={4} className={styles.content}>\n {children}\n </Box>\n )}\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;AAiBA,MAAM,mBAAmB,cAA4C,IAAI;AAEzE,SAAS,sBAAsB;AAC7B,QAAM,UAAU,WAAW,gBAAgB;AAC3C,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,6CAA6C;AAC/D,SAAO;AACT;AA0CO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AACF,GAAmB;AACjB,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAExC,iBAAiB,gBAAgB,KAAK,KAAK;AAE7C,QAAM,cAAc,CAAC,UAAkB;AACrC,QAAI,eAAe;AACjB,YAAM,UAAW,iBAA8B,CAAA;AAC/C,YAAM,cAAc,QAAQ,SAAS,KAAK,IACtC,QAAQ,OAAO,CAAC,MAAM,MAAM,KAAK,IACjC,CAAC,GAAG,SAAS,KAAK;AACtB,uBAAiB,WAAW;AAAA,IAC9B,OAAO;AACL,uBAAiB,kBAAkB,QAAQ,OAAO,KAAK;AAAA,IACzD;AAAA,EACF;AAEA,SACE;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,OAAO,EAAE,eAAe,aAAa,cAAA;AAAA,MAErC,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,QAAO;AAAA,UACP,aAAY;AAAA,UACZ,SAAQ;AAAA,UACR,UAAS;AAAA,UACT,WAAW,KAAK,OAAO,WAAW,SAAS;AAAA,UAE1C;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN;AAKO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAAuB;AACrB,QAAM,EAAE,eAAe,aAAa,cAAA,IAAkB,oBAAA;AAEtD,QAAM,aAAa,iBACb,iBAA8B,CAAA,GAAI,SAAS,KAAK,IAClD,kBAAkB;AAEtB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT,OAAO;AAAA,QACP,cAAc,OAAO;AAAA,QACrB,YAAY,OAAO;AAAA,QACnB;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,YAAW;AAAA,YACX,gBAAe;AAAA,YACf,GAAE;AAAA,YACF,GAAG;AAAA,YACH,IAAG;AAAA,YACH,QAAO;AAAA,YACP,cAAc,aAAa,SAAS;AAAA,YACpC,aAAY;AAAA,YACZ,QAAQ,WAAW,gBAAgB;AAAA,YACnC,SAAS,WAAW,UAAU;AAAA,YAC9B,SAAS,MAAM,CAAC,YAAY,YAAY,KAAK;AAAA,YAC7C,iBAAe;AAAA,YACf,iBAAe;AAAA,YACf,WAAW,OAAO;AAAA,YAElB,UAAA;AAAA,cAAA,oBAAC,KAAA,EAAI,YAAW,UAAU,UAAA,OAAM;AAAA,cAChC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,IAAG;AAAA,kBACH,WAAW,KAAK,OAAO,MAAM,cAAc,OAAO,OAAO;AAAA,kBAC1D,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAED;AAAA,UAAA;AAAA,QAAA;AAAA,QAED,kCACE,KAAA,EAAI,GAAG,GAAG,WAAW,OAAO,SAC1B,SAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
._accordion_173dk_1 {
|
|
2
|
+
/* Container */
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
._item_173dk_5 {
|
|
6
|
+
border-bottom: 1px solid var(--t-color-border);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
._item_173dk_5:last-child {
|
|
10
|
+
border-bottom: none;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
._button_173dk_13 {
|
|
14
|
+
transition: background-color 0.15s ease;
|
|
15
|
+
text-align: left;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
._button_173dk_13:hover:not(:disabled) {
|
|
19
|
+
background-color: var(--t-color-surface-hover, rgba(0, 0, 0, 0.02));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
._icon_173dk_22 {
|
|
23
|
+
transition: transform 0.2s ease;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
._rotated_173dk_26 {
|
|
27
|
+
transform: rotate(180deg);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
._content_173dk_30 {
|
|
31
|
+
/* Content panel */
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
._disabled_173dk_34 {
|
|
35
|
+
opacity: 0.5;
|
|
36
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const accordion = "_accordion_173dk_1";
|
|
2
|
+
const item = "_item_173dk_5";
|
|
3
|
+
const button = "_button_173dk_13";
|
|
4
|
+
const icon = "_icon_173dk_22";
|
|
5
|
+
const rotated = "_rotated_173dk_26";
|
|
6
|
+
const content = "_content_173dk_30";
|
|
7
|
+
const disabled = "_disabled_173dk_34";
|
|
8
|
+
const styles = {
|
|
9
|
+
accordion,
|
|
10
|
+
item,
|
|
11
|
+
button,
|
|
12
|
+
icon,
|
|
13
|
+
rotated,
|
|
14
|
+
content,
|
|
15
|
+
disabled
|
|
16
|
+
};
|
|
17
|
+
export {
|
|
18
|
+
accordion,
|
|
19
|
+
button,
|
|
20
|
+
content,
|
|
21
|
+
styles as default,
|
|
22
|
+
disabled,
|
|
23
|
+
icon,
|
|
24
|
+
item,
|
|
25
|
+
rotated
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=accordion.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accordion.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
import clsx from "clsx";
|
|
4
|
+
import { Box } from "../Box/Box.js";
|
|
5
|
+
import { HStack } from "../HStack/HStack.js";
|
|
6
|
+
import { VStack } from "../VStack/VStack.js";
|
|
7
|
+
import styles from "./alert.module.css.js";
|
|
8
|
+
const defaultIcons = {
|
|
9
|
+
success: /* @__PURE__ */ jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx(
|
|
10
|
+
"path",
|
|
11
|
+
{
|
|
12
|
+
fillRule: "evenodd",
|
|
13
|
+
d: "M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",
|
|
14
|
+
clipRule: "evenodd"
|
|
15
|
+
}
|
|
16
|
+
) }),
|
|
17
|
+
warning: /* @__PURE__ */ jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx(
|
|
18
|
+
"path",
|
|
19
|
+
{
|
|
20
|
+
fillRule: "evenodd",
|
|
21
|
+
d: "M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z",
|
|
22
|
+
clipRule: "evenodd"
|
|
23
|
+
}
|
|
24
|
+
) }),
|
|
25
|
+
error: /* @__PURE__ */ jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx(
|
|
26
|
+
"path",
|
|
27
|
+
{
|
|
28
|
+
fillRule: "evenodd",
|
|
29
|
+
d: "M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z",
|
|
30
|
+
clipRule: "evenodd"
|
|
31
|
+
}
|
|
32
|
+
) }),
|
|
33
|
+
info: /* @__PURE__ */ jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx(
|
|
34
|
+
"path",
|
|
35
|
+
{
|
|
36
|
+
fillRule: "evenodd",
|
|
37
|
+
d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z",
|
|
38
|
+
clipRule: "evenodd"
|
|
39
|
+
}
|
|
40
|
+
) })
|
|
41
|
+
};
|
|
42
|
+
const CloseIcon = /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "currentColor", children: /* @__PURE__ */ jsx(
|
|
43
|
+
"path",
|
|
44
|
+
{
|
|
45
|
+
fillRule: "evenodd",
|
|
46
|
+
d: "M4.293 4.293a1 1 0 011.414 0L8 6.586l2.293-2.293a1 1 0 111.414 1.414L9.414 8l2.293 2.293a1 1 0 01-1.414 1.414L8 9.414l-2.293 2.293a1 1 0 01-1.414-1.414L6.586 8 4.293 5.707a1 1 0 010-1.414z",
|
|
47
|
+
clipRule: "evenodd"
|
|
48
|
+
}
|
|
49
|
+
) });
|
|
50
|
+
function Alert({
|
|
51
|
+
status = "info",
|
|
52
|
+
title,
|
|
53
|
+
children,
|
|
54
|
+
icon,
|
|
55
|
+
onClose,
|
|
56
|
+
className
|
|
57
|
+
}) {
|
|
58
|
+
const displayIcon = icon ?? defaultIcons[status];
|
|
59
|
+
return /* @__PURE__ */ jsx(
|
|
60
|
+
Box,
|
|
61
|
+
{
|
|
62
|
+
role: "alert",
|
|
63
|
+
p: 4,
|
|
64
|
+
rounded: "md",
|
|
65
|
+
bg: `${status}-subtle`,
|
|
66
|
+
className: clsx(styles.alert, styles[status], className),
|
|
67
|
+
children: /* @__PURE__ */ jsxs(HStack, { gap: 3, align: "start", children: [
|
|
68
|
+
/* @__PURE__ */ jsx(
|
|
69
|
+
Box,
|
|
70
|
+
{
|
|
71
|
+
as: "span",
|
|
72
|
+
display: "inline-flex",
|
|
73
|
+
alignItems: "center",
|
|
74
|
+
flexShrink: 0,
|
|
75
|
+
color: status,
|
|
76
|
+
"aria-hidden": "true",
|
|
77
|
+
children: displayIcon
|
|
78
|
+
}
|
|
79
|
+
),
|
|
80
|
+
/* @__PURE__ */ jsxs(VStack, { gap: 1, flexGrow: 1, children: [
|
|
81
|
+
title && /* @__PURE__ */ jsx(Box, { as: "span", fontWeight: "semibold", color: "foreground", children: title }),
|
|
82
|
+
children && /* @__PURE__ */ jsx(Box, { as: "span", color: "foreground-muted", fontSize: "sm", children })
|
|
83
|
+
] }),
|
|
84
|
+
onClose && /* @__PURE__ */ jsx(
|
|
85
|
+
Box,
|
|
86
|
+
{
|
|
87
|
+
as: "button",
|
|
88
|
+
display: "inline-flex",
|
|
89
|
+
alignItems: "center",
|
|
90
|
+
justifyContent: "center",
|
|
91
|
+
p: 1,
|
|
92
|
+
rounded: "sm",
|
|
93
|
+
bg: "transparent",
|
|
94
|
+
color: "foreground-muted",
|
|
95
|
+
cursor: "pointer",
|
|
96
|
+
className: styles.closeButton,
|
|
97
|
+
onClick: onClose,
|
|
98
|
+
"aria-label": "Dismiss",
|
|
99
|
+
children: CloseIcon
|
|
100
|
+
}
|
|
101
|
+
)
|
|
102
|
+
] })
|
|
103
|
+
}
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
export {
|
|
107
|
+
Alert
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=Alert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Alert.js","sources":["../../../src/components/Alert/Alert.tsx"],"sourcesContent":["import { type ReactNode } from \"react\";\nimport clsx from \"clsx\";\nimport { Box } from \"@/components/Box/Box\";\nimport { HStack } from \"@/components/HStack/HStack\";\nimport { VStack } from \"@/components/VStack/VStack\";\nimport styles from \"./alert.module.css\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type AlertStatus = \"success\" | \"warning\" | \"error\" | \"info\";\n\nexport type AlertProps = {\n /** Status determines colors and default icon */\n status?: AlertStatus;\n /** Optional title displayed above description */\n title?: ReactNode;\n /** Description content */\n children?: ReactNode;\n /** Custom icon (overrides default per-status icon) */\n icon?: ReactNode;\n /** Callback when close button is clicked (omit to hide close button) */\n onClose?: () => void;\n /** Additional class name */\n className?: string;\n};\n\n// ============================================================================\n// Default icons per status (simple SVG)\n// ============================================================================\n\nconst defaultIcons: Record<AlertStatus, ReactNode> = {\n success: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n warning: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n error: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n info: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n};\n\n// ============================================================================\n// Close button icon\n// ============================================================================\n\nconst CloseIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M4.293 4.293a1 1 0 011.414 0L8 6.586l2.293-2.293a1 1 0 111.414 1.414L9.414 8l2.293 2.293a1 1 0 01-1.414 1.414L8 9.414l-2.293 2.293a1 1 0 01-1.414-1.414L6.586 8 4.293 5.707a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Alert - Status notification banner\n *\n * A contextual feedback component that provides:\n * - Four status variants: success, warning, error, info\n * - Optional title and description\n * - Default icons per status (customizable)\n * - Optional close button\n * - Accessible with role=\"alert\"\n */\nexport function Alert({\n status = \"info\",\n title,\n children,\n icon,\n onClose,\n className,\n}: AlertProps) {\n const displayIcon = icon ?? defaultIcons[status];\n\n return (\n <Box\n role=\"alert\"\n p={4}\n rounded=\"md\"\n bg={`${status}-subtle` as any}\n className={clsx(styles.alert, styles[status], className)}\n >\n <HStack gap={3} align=\"start\">\n {/* Icon */}\n <Box\n as=\"span\"\n display=\"inline-flex\"\n alignItems=\"center\"\n flexShrink={0}\n color={status as any}\n aria-hidden=\"true\"\n >\n {displayIcon}\n </Box>\n\n {/* Content */}\n <VStack gap={1} flexGrow={1}>\n {title && (\n <Box as=\"span\" fontWeight=\"semibold\" color=\"foreground\">\n {title}\n </Box>\n )}\n {children && (\n <Box as=\"span\" color=\"foreground-muted\" fontSize=\"sm\">\n {children}\n </Box>\n )}\n </VStack>\n\n {/* Close button */}\n {onClose && (\n <Box\n as=\"button\"\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n p={1}\n rounded=\"sm\"\n bg=\"transparent\"\n color=\"foreground-muted\"\n cursor=\"pointer\"\n className={styles.closeButton}\n onClick={onClose}\n aria-label=\"Dismiss\"\n >\n {CloseIcon}\n </Box>\n )}\n </HStack>\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAgCA,MAAM,eAA+C;AAAA,EACnD,SACE,oBAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,gBACnD,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,UAAS;AAAA,MACT,GAAE;AAAA,MACF,UAAS;AAAA,IAAA;AAAA,EAAA,GAEb;AAAA,EAEF,SACE,oBAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,gBACnD,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,UAAS;AAAA,MACT,GAAE;AAAA,MACF,UAAS;AAAA,IAAA;AAAA,EAAA,GAEb;AAAA,EAEF,OACE,oBAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,gBACnD,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,UAAS;AAAA,MACT,GAAE;AAAA,MACF,UAAS;AAAA,IAAA;AAAA,EAAA,GAEb;AAAA,EAEF,MACE,oBAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,gBACnD,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,UAAS;AAAA,MACT,GAAE;AAAA,MACF,UAAS;AAAA,IAAA;AAAA,EAAA,EACX,CACF;AAEJ;AAMA,MAAM,YACJ,oBAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,gBACnD,UAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,UAAS;AAAA,IACT,GAAE;AAAA,IACF,UAAS;AAAA,EAAA;AACX,GACF;AAiBK,SAAS,MAAM;AAAA,EACpB,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAe;AACb,QAAM,cAAc,QAAQ,aAAa,MAAM;AAE/C,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,GAAG;AAAA,MACH,SAAQ;AAAA,MACR,IAAI,GAAG,MAAM;AAAA,MACb,WAAW,KAAK,OAAO,OAAO,OAAO,MAAM,GAAG,SAAS;AAAA,MAEvD,UAAA,qBAAC,QAAA,EAAO,KAAK,GAAG,OAAM,SAEpB,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,SAAQ;AAAA,YACR,YAAW;AAAA,YACX,YAAY;AAAA,YACZ,OAAO;AAAA,YACP,eAAY;AAAA,YAEX,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAIH,qBAAC,QAAA,EAAO,KAAK,GAAG,UAAU,GACvB,UAAA;AAAA,UAAA,SACC,oBAAC,OAAI,IAAG,QAAO,YAAW,YAAW,OAAM,cACxC,UAAA,MAAA,CACH;AAAA,UAED,gCACE,KAAA,EAAI,IAAG,QAAO,OAAM,oBAAmB,UAAS,MAC9C,SAAA,CACH;AAAA,QAAA,GAEJ;AAAA,QAGC,WACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,SAAQ;AAAA,YACR,YAAW;AAAA,YACX,gBAAe;AAAA,YACf,GAAG;AAAA,YACH,SAAQ;AAAA,YACR,IAAG;AAAA,YACH,OAAM;AAAA,YACN,QAAO;AAAA,YACP,WAAW,OAAO;AAAA,YAClB,SAAS;AAAA,YACT,cAAW;AAAA,YAEV,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACH,EAAA,CAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
._alert_1ulex_1 {
|
|
2
|
+
border-left: 4px solid;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
._success_1ulex_5 {
|
|
6
|
+
border-left-color: var(--t-color-success-default);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
._warning_1ulex_9 {
|
|
10
|
+
border-left-color: var(--t-color-warning-default);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
._error_1ulex_13 {
|
|
14
|
+
border-left-color: var(--t-color-error-default);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
._info_1ulex_17 {
|
|
18
|
+
border-left-color: var(--t-color-info-default);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
._closeButton_1ulex_21 {
|
|
22
|
+
transition: background-color 150ms ease-in-out;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
._closeButton_1ulex_21:hover {
|
|
26
|
+
background-color: var(--t-color-border-muted);
|
|
27
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const alert = "_alert_1ulex_1";
|
|
2
|
+
const success = "_success_1ulex_5";
|
|
3
|
+
const warning = "_warning_1ulex_9";
|
|
4
|
+
const error = "_error_1ulex_13";
|
|
5
|
+
const info = "_info_1ulex_17";
|
|
6
|
+
const closeButton = "_closeButton_1ulex_21";
|
|
7
|
+
const styles = {
|
|
8
|
+
alert,
|
|
9
|
+
success,
|
|
10
|
+
warning,
|
|
11
|
+
error,
|
|
12
|
+
info,
|
|
13
|
+
closeButton
|
|
14
|
+
};
|
|
15
|
+
export {
|
|
16
|
+
alert,
|
|
17
|
+
closeButton,
|
|
18
|
+
styles as default,
|
|
19
|
+
error,
|
|
20
|
+
info,
|
|
21
|
+
success,
|
|
22
|
+
warning
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=alert.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":"AAWA,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG;IACxB,uBAAuB;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,yBAAyB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA4BF;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,CAAC,EACrB,GAAG,EACH,IAAI,EACJ,IAAW,EACX,OAAgB,EAChB,GAAG,EACH,SAAS,GACV,EAAE,WAAW,2CA4Cb"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import clsx from "clsx";
|
|
5
|
+
import { Box } from "../Box/Box.js";
|
|
6
|
+
import styles from "./avatar.module.css.js";
|
|
7
|
+
const sizeConfig = {
|
|
8
|
+
sm: { dimension: "32px", fontSize: "xs" },
|
|
9
|
+
md: { dimension: "40px", fontSize: "sm" },
|
|
10
|
+
lg: { dimension: "48px", fontSize: "md" },
|
|
11
|
+
xl: { dimension: "64px", fontSize: "lg" }
|
|
12
|
+
};
|
|
13
|
+
function getInitials(name) {
|
|
14
|
+
const words = name.trim().split(/\s+/);
|
|
15
|
+
if (words.length === 0) return "";
|
|
16
|
+
if (words.length === 1) return words[0].charAt(0).toUpperCase();
|
|
17
|
+
return (words[0].charAt(0) + words[words.length - 1].charAt(0)).toUpperCase();
|
|
18
|
+
}
|
|
19
|
+
function Avatar({
|
|
20
|
+
src,
|
|
21
|
+
name,
|
|
22
|
+
size = "md",
|
|
23
|
+
rounded = "full",
|
|
24
|
+
alt,
|
|
25
|
+
className
|
|
26
|
+
}) {
|
|
27
|
+
const [hasError, setHasError] = useState(false);
|
|
28
|
+
const sizeProps = sizeConfig[size];
|
|
29
|
+
const showImage = src && !hasError;
|
|
30
|
+
const initials = name ? getInitials(name) : "";
|
|
31
|
+
return /* @__PURE__ */ jsx(
|
|
32
|
+
Box,
|
|
33
|
+
{
|
|
34
|
+
display: "inline-flex",
|
|
35
|
+
alignItems: "center",
|
|
36
|
+
justifyContent: "center",
|
|
37
|
+
flexShrink: 0,
|
|
38
|
+
overflow: "hidden",
|
|
39
|
+
rounded,
|
|
40
|
+
bg: "primary-subtle",
|
|
41
|
+
color: "primary",
|
|
42
|
+
fontWeight: "medium",
|
|
43
|
+
fontSize: sizeProps.fontSize,
|
|
44
|
+
className: clsx(styles.avatar, className),
|
|
45
|
+
style: {
|
|
46
|
+
width: sizeProps.dimension,
|
|
47
|
+
height: sizeProps.dimension
|
|
48
|
+
},
|
|
49
|
+
children: showImage ? /* @__PURE__ */ jsx(
|
|
50
|
+
"img",
|
|
51
|
+
{
|
|
52
|
+
src,
|
|
53
|
+
alt: alt || name || "Avatar",
|
|
54
|
+
className: styles.image,
|
|
55
|
+
onError: () => setHasError(true)
|
|
56
|
+
}
|
|
57
|
+
) : initials ? /* @__PURE__ */ jsx("span", { children: initials }) : /* @__PURE__ */ jsx(
|
|
58
|
+
"svg",
|
|
59
|
+
{
|
|
60
|
+
viewBox: "0 0 24 24",
|
|
61
|
+
fill: "currentColor",
|
|
62
|
+
className: styles.placeholder,
|
|
63
|
+
children: /* @__PURE__ */ jsx("path", { d: "M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z" })
|
|
64
|
+
}
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
export {
|
|
70
|
+
Avatar
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=Avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.js","sources":["../../../src/components/Avatar/Avatar.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\nimport clsx from \"clsx\";\nimport { Box } from \"@/components/Box/Box\";\nimport styles from \"./avatar.module.css\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type AvatarSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport type AvatarProps = {\n /** Image source URL */\n src?: string;\n /** Name for generating initials fallback */\n name?: string;\n /** Size variant */\n size?: AvatarSize;\n /** Border radius */\n rounded?: \"full\" | \"md\";\n /** Alt text for image */\n alt?: string;\n /** Additional class name */\n className?: string;\n};\n\n// ============================================================================\n// Size configurations\n// ============================================================================\n\nconst sizeConfig = {\n sm: { dimension: \"32px\", fontSize: \"xs\" },\n md: { dimension: \"40px\", fontSize: \"sm\" },\n lg: { dimension: \"48px\", fontSize: \"md\" },\n xl: { dimension: \"64px\", fontSize: \"lg\" },\n} as const;\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction getInitials(name: string): string {\n const words = name.trim().split(/\\s+/);\n if (words.length === 0) return \"\";\n if (words.length === 1) return words[0].charAt(0).toUpperCase();\n return (words[0].charAt(0) + words[words.length - 1].charAt(0)).toUpperCase();\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Avatar - User/entity display\n *\n * A circular or rounded avatar component:\n * - Shows image when src is provided\n * - Falls back to initials from name\n * - Falls back to generic placeholder if neither\n *\n * Features:\n * - 4 sizes: sm (32px), md (40px), lg (48px), xl (64px)\n * - 2 rounded variants: full (circle), md (rounded corners)\n * - Graceful image loading with error fallback\n */\nexport function Avatar({\n src,\n name,\n size = \"md\",\n rounded = \"full\",\n alt,\n className,\n}: AvatarProps) {\n const [hasError, setHasError] = useState(false);\n const sizeProps = sizeConfig[size];\n const showImage = src && !hasError;\n const initials = name ? getInitials(name) : \"\";\n\n return (\n <Box\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n overflow=\"hidden\"\n rounded={rounded}\n bg=\"primary-subtle\"\n color=\"primary\"\n fontWeight=\"medium\"\n fontSize={sizeProps.fontSize}\n className={clsx(styles.avatar, className)}\n style={{\n width: sizeProps.dimension,\n height: sizeProps.dimension,\n }}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt || name || \"Avatar\"}\n className={styles.image}\n onError={() => setHasError(true)}\n />\n ) : initials ? (\n <span>{initials}</span>\n ) : (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={styles.placeholder}\n >\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n </svg>\n )}\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;AAgCA,MAAM,aAAa;AAAA,EACjB,IAAI,EAAE,WAAW,QAAQ,UAAU,KAAA;AAAA,EACnC,IAAI,EAAE,WAAW,QAAQ,UAAU,KAAA;AAAA,EACnC,IAAI,EAAE,WAAW,QAAQ,UAAU,KAAA;AAAA,EACnC,IAAI,EAAE,WAAW,QAAQ,UAAU,KAAA;AACrC;AAMA,SAAS,YAAY,MAAsB;AACzC,QAAM,QAAQ,KAAK,KAAA,EAAO,MAAM,KAAK;AACrC,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,MAAI,MAAM,WAAW,EAAG,QAAO,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,YAAA;AAClD,UAAQ,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,MAAM,MAAM,SAAS,CAAC,EAAE,OAAO,CAAC,GAAG,YAAA;AAClE;AAmBO,SAAS,OAAO;AAAA,EACrB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AAAA,EACA;AACF,GAAgB;AACd,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,YAAY,WAAW,IAAI;AACjC,QAAM,YAAY,OAAO,CAAC;AAC1B,QAAM,WAAW,OAAO,YAAY,IAAI,IAAI;AAE5C,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,YAAW;AAAA,MACX,gBAAe;AAAA,MACf,YAAY;AAAA,MACZ,UAAS;AAAA,MACT;AAAA,MACA,IAAG;AAAA,MACH,OAAM;AAAA,MACN,YAAW;AAAA,MACX,UAAU,UAAU;AAAA,MACpB,WAAW,KAAK,OAAO,QAAQ,SAAS;AAAA,MACxC,OAAO;AAAA,QACL,OAAO,UAAU;AAAA,QACjB,QAAQ,UAAU;AAAA,MAAA;AAAA,MAGnB,UAAA,YACC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,KAAK,OAAO,QAAQ;AAAA,UACpB,WAAW,OAAO;AAAA,UAClB,SAAS,MAAM,YAAY,IAAI;AAAA,QAAA;AAAA,MAAA,IAE/B,WACF,oBAAC,QAAA,EAAM,oBAAS,IAEhB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,WAAW,OAAO;AAAA,UAElB,UAAA,oBAAC,QAAA,EAAK,GAAE,gHAAA,CAAgH;AAAA,QAAA;AAAA,MAAA;AAAA,IAC1H;AAAA,EAAA;AAIR;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const avatar = "_avatar_1suzu_1";
|
|
2
|
+
const image = "_image_1suzu_5";
|
|
3
|
+
const placeholder = "_placeholder_1suzu_11";
|
|
4
|
+
const styles = {
|
|
5
|
+
avatar,
|
|
6
|
+
image,
|
|
7
|
+
placeholder
|
|
8
|
+
};
|
|
9
|
+
export {
|
|
10
|
+
avatar,
|
|
11
|
+
styles as default,
|
|
12
|
+
image,
|
|
13
|
+
placeholder
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=avatar.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
import clsx from "clsx";
|
|
4
|
+
import { Box } from "../Box/Box.js";
|
|
5
|
+
import styles from "./badge.module.css.js";
|
|
6
|
+
const sizeConfig = {
|
|
7
|
+
sm: { fontSize: "xs", px: 1.5, py: 0.5 },
|
|
8
|
+
md: { fontSize: "sm", px: 2, py: 0.5 }
|
|
9
|
+
};
|
|
10
|
+
function getColorConfig(variant, colorScheme) {
|
|
11
|
+
if (colorScheme === "gray") {
|
|
12
|
+
if (variant === "solid") {
|
|
13
|
+
return {
|
|
14
|
+
bg: "foreground",
|
|
15
|
+
color: "foreground-inverted"
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
bg: "surface",
|
|
20
|
+
color: "foreground-muted"
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
if (variant === "solid") {
|
|
24
|
+
return {
|
|
25
|
+
bg: `${colorScheme}-default`,
|
|
26
|
+
color: "foreground-inverted"
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
bg: `${colorScheme}-subtle`,
|
|
31
|
+
color: colorScheme
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function Badge({
|
|
35
|
+
colorScheme = "gray",
|
|
36
|
+
variant = "subtle",
|
|
37
|
+
size = "md",
|
|
38
|
+
children,
|
|
39
|
+
className
|
|
40
|
+
}) {
|
|
41
|
+
const colorConfig = getColorConfig(variant, colorScheme);
|
|
42
|
+
const sizeProps = sizeConfig[size];
|
|
43
|
+
return /* @__PURE__ */ jsx(
|
|
44
|
+
Box,
|
|
45
|
+
{
|
|
46
|
+
as: "span",
|
|
47
|
+
display: "inline-flex",
|
|
48
|
+
alignItems: "center",
|
|
49
|
+
justifyContent: "center",
|
|
50
|
+
px: sizeProps.px,
|
|
51
|
+
py: sizeProps.py,
|
|
52
|
+
fontSize: sizeProps.fontSize,
|
|
53
|
+
fontWeight: "medium",
|
|
54
|
+
lineHeight: "tight",
|
|
55
|
+
rounded: "full",
|
|
56
|
+
bg: colorConfig.bg,
|
|
57
|
+
color: colorConfig.color,
|
|
58
|
+
className: clsx(styles.badge, className),
|
|
59
|
+
children
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
Badge
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=Badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Badge.js","sources":["../../../src/components/Badge/Badge.tsx"],"sourcesContent":["import { type ReactNode } from \"react\";\nimport clsx from \"clsx\";\nimport { Box } from \"@/components/Box/Box\";\nimport styles from \"./badge.module.css\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type BadgeColorScheme =\n | \"primary\"\n | \"accent\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\"\n | \"gray\";\n\nexport type BadgeVariant = \"solid\" | \"subtle\";\nexport type BadgeSize = \"sm\" | \"md\";\n\nexport type BadgeProps = {\n /** Color scheme */\n colorScheme?: BadgeColorScheme;\n /** Visual variant */\n variant?: BadgeVariant;\n /** Size */\n size?: BadgeSize;\n /** Badge content */\n children?: ReactNode;\n /** Additional class name */\n className?: string;\n};\n\n// ============================================================================\n// Size configurations\n// ============================================================================\n\nconst sizeConfig = {\n sm: { fontSize: \"xs\", px: 1.5, py: 0.5 },\n md: { fontSize: \"sm\", px: 2, py: 0.5 },\n} as const;\n\n// ============================================================================\n// Color configurations\n// ============================================================================\n\ntype ColorConfig = {\n bg: string;\n color: string;\n};\n\nfunction getColorConfig(\n variant: BadgeVariant,\n colorScheme: BadgeColorScheme\n): ColorConfig {\n // Handle \"gray\" colorScheme specially since it uses different token names\n if (colorScheme === \"gray\") {\n if (variant === \"solid\") {\n return {\n bg: \"foreground\",\n color: \"foreground-inverted\",\n };\n }\n return {\n bg: \"surface\",\n color: \"foreground-muted\",\n };\n }\n\n if (variant === \"solid\") {\n return {\n bg: `${colorScheme}-default`,\n color: \"foreground-inverted\",\n };\n }\n\n return {\n bg: `${colorScheme}-subtle`,\n color: colorScheme,\n };\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Badge - Small status indicator\n *\n * A compact label component for displaying:\n * - Counts and numbers\n * - Status indicators\n * - Categories and tags\n *\n * Features:\n * - 7 color schemes: primary, accent, success, warning, error, info, gray\n * - 2 variants: solid (bold) and subtle (muted)\n * - 2 sizes: sm and md\n * - Pill shape (fully rounded)\n */\nexport function Badge({\n colorScheme = \"gray\",\n variant = \"subtle\",\n size = \"md\",\n children,\n className,\n}: BadgeProps) {\n const colorConfig = getColorConfig(variant, colorScheme);\n const sizeProps = sizeConfig[size];\n\n return (\n <Box\n as=\"span\"\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n px={sizeProps.px}\n py={sizeProps.py}\n fontSize={sizeProps.fontSize}\n fontWeight=\"medium\"\n lineHeight=\"tight\"\n rounded=\"full\"\n bg={colorConfig.bg as any}\n color={colorConfig.color as any}\n className={clsx(styles.badge, className)}\n >\n {children}\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;AAsCA,MAAM,aAAa;AAAA,EACjB,IAAI,EAAE,UAAU,MAAM,IAAI,KAAK,IAAI,IAAA;AAAA,EACnC,IAAI,EAAE,UAAU,MAAM,IAAI,GAAG,IAAI,IAAA;AACnC;AAWA,SAAS,eACP,SACA,aACa;AAEb,MAAI,gBAAgB,QAAQ;AAC1B,QAAI,YAAY,SAAS;AACvB,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,OAAO;AAAA,MAAA;AAAA,IAEX;AACA,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO;AAAA,IAAA;AAAA,EAEX;AAEA,MAAI,YAAY,SAAS;AACvB,WAAO;AAAA,MACL,IAAI,GAAG,WAAW;AAAA,MAClB,OAAO;AAAA,IAAA;AAAA,EAEX;AAEA,SAAO;AAAA,IACL,IAAI,GAAG,WAAW;AAAA,IAClB,OAAO;AAAA,EAAA;AAEX;AAoBO,SAAS,MAAM;AAAA,EACpB,cAAc;AAAA,EACd,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA;AACF,GAAe;AACb,QAAM,cAAc,eAAe,SAAS,WAAW;AACvD,QAAM,YAAY,WAAW,IAAI;AAEjC,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IAAG;AAAA,MACH,SAAQ;AAAA,MACR,YAAW;AAAA,MACX,gBAAe;AAAA,MACf,IAAI,UAAU;AAAA,MACd,IAAI,UAAU;AAAA,MACd,UAAU,UAAU;AAAA,MACpB,YAAW;AAAA,MACX,YAAW;AAAA,MACX,SAAQ;AAAA,MACR,IAAI,YAAY;AAAA,MAChB,OAAO,YAAY;AAAA,MACnB,WAAW,KAAK,OAAO,OAAO,SAAS;AAAA,MAEtC;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|