@tosui/react 0.1.0 → 0.1.2
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.d.ts.map +1 -1
- 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 +3320 -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 +353 -0
- package/package.json +8 -4
|
@@ -0,0 +1,57 @@
|
|
|
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 "./select.module.css.js";
|
|
6
|
+
const sizeConfig = {
|
|
7
|
+
sm: { h: 8, px: 2, fontSize: "sm", rounded: "sm" },
|
|
8
|
+
md: { h: 10, px: 3, fontSize: "md", rounded: "md" },
|
|
9
|
+
lg: { h: 12, px: 4, fontSize: "lg", rounded: "md" }
|
|
10
|
+
};
|
|
11
|
+
function Select({
|
|
12
|
+
as,
|
|
13
|
+
size = "md",
|
|
14
|
+
variant = "outline",
|
|
15
|
+
disabled = false,
|
|
16
|
+
isInvalid = false,
|
|
17
|
+
className,
|
|
18
|
+
...rest
|
|
19
|
+
}) {
|
|
20
|
+
const Component = as || "select";
|
|
21
|
+
const sizeProps = sizeConfig[size];
|
|
22
|
+
const variantStyles = variant === "outline" ? {
|
|
23
|
+
bg: "transparent",
|
|
24
|
+
border: "thin",
|
|
25
|
+
borderColor: "border"
|
|
26
|
+
} : {
|
|
27
|
+
bg: "surface",
|
|
28
|
+
border: "thin",
|
|
29
|
+
borderColor: "border-muted"
|
|
30
|
+
};
|
|
31
|
+
return (
|
|
32
|
+
// @ts-expect-error - Polymorphic component type forwarding
|
|
33
|
+
/* @__PURE__ */ jsx(
|
|
34
|
+
Box,
|
|
35
|
+
{
|
|
36
|
+
as: Component,
|
|
37
|
+
h: sizeProps.h,
|
|
38
|
+
px: sizeProps.px,
|
|
39
|
+
fontSize: sizeProps.fontSize,
|
|
40
|
+
rounded: sizeProps.rounded,
|
|
41
|
+
bg: variantStyles.bg,
|
|
42
|
+
border: variantStyles.border,
|
|
43
|
+
borderColor: variantStyles.borderColor,
|
|
44
|
+
w: "100%",
|
|
45
|
+
color: "foreground",
|
|
46
|
+
className: clsx(styles.select, isInvalid && styles.invalid, className),
|
|
47
|
+
disabled,
|
|
48
|
+
"aria-invalid": isInvalid || void 0,
|
|
49
|
+
...rest
|
|
50
|
+
}
|
|
51
|
+
)
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
export {
|
|
55
|
+
Select
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=Select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Select.js","sources":["../../../src/components/Select/Select.tsx"],"sourcesContent":["import { type ElementType } from \"react\";\nimport clsx from \"clsx\";\nimport { type Polymorphic } from \"@/types/Polymorphic\";\nimport { Box, type BoxOwnProps } from \"@/components/Box/Box\";\nimport styles from \"./select.module.css\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type SelectSize = \"sm\" | \"md\" | \"lg\";\nexport type SelectVariant = \"outline\" | \"filled\";\n\nexport type SelectOwnProps = Omit<\n BoxOwnProps,\n \"as\" | \"h\" | \"fontSize\" | \"rounded\" | \"border\" | \"borderColor\" | \"bg\"\n> & {\n /** Select size affecting height and font size */\n size?: SelectSize;\n /** Visual variant: outline (border) or filled (surface background) */\n variant?: SelectVariant;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Whether the select is in an invalid state */\n isInvalid?: boolean;\n};\n\nexport type SelectProps<T extends ElementType = \"select\"> = Polymorphic<\n T,\n SelectOwnProps\n>;\n\n// ============================================================================\n// Size configurations\n// ============================================================================\n\nconst sizeConfig = {\n sm: { h: 8, px: 2, fontSize: \"sm\", rounded: \"sm\" },\n md: { h: 10, px: 3, fontSize: \"md\", rounded: \"md\" },\n lg: { h: 12, px: 4, fontSize: \"lg\", rounded: \"md\" },\n} as const;\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Select - Dropdown select component\n *\n * A polymorphic select component that provides:\n * - Default element: <select>\n * - Sizes: sm, md (default), lg\n * - Variants: outline (default), filled\n * - Disabled and invalid states\n * - Custom dropdown arrow\n * - Focus ring styling\n */\nexport function Select<T extends ElementType = \"select\">({\n as,\n size = \"md\",\n variant = \"outline\",\n disabled = false,\n isInvalid = false,\n className,\n ...rest\n}: SelectProps<T>) {\n const Component = as || \"select\";\n const sizeProps = sizeConfig[size];\n\n // Variant-specific styling\n const variantStyles =\n variant === \"outline\"\n ? {\n bg: \"transparent\" as const,\n border: \"thin\" as const,\n borderColor: \"border\" as const,\n }\n : {\n bg: \"surface\" as const,\n border: \"thin\" as const,\n borderColor: \"border-muted\" as const,\n };\n\n return (\n // @ts-expect-error - Polymorphic component type forwarding\n <Box\n as={Component}\n // Size props\n h={sizeProps.h}\n px={sizeProps.px}\n fontSize={sizeProps.fontSize}\n rounded={sizeProps.rounded}\n // Variant props\n bg={variantStyles.bg}\n border={variantStyles.border}\n borderColor={variantStyles.borderColor}\n // Full width by default\n w=\"100%\"\n // Colors\n color=\"foreground\"\n // CSS module for states and custom arrow\n className={clsx(styles.select, isInvalid && styles.invalid, className)}\n // Native disabled\n disabled={disabled}\n aria-invalid={isInvalid || undefined}\n {...rest}\n />\n );\n}\n"],"names":[],"mappings":";;;;;AAoCA,MAAM,aAAa;AAAA,EACjB,IAAI,EAAE,GAAG,GAAG,IAAI,GAAG,UAAU,MAAM,SAAS,KAAA;AAAA,EAC5C,IAAI,EAAE,GAAG,IAAI,IAAI,GAAG,UAAU,MAAM,SAAS,KAAA;AAAA,EAC7C,IAAI,EAAE,GAAG,IAAI,IAAI,GAAG,UAAU,MAAM,SAAS,KAAA;AAC/C;AAiBO,SAAS,OAAyC;AAAA,EACvD;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,GAAmB;AACjB,QAAM,YAAY,MAAM;AACxB,QAAM,YAAY,WAAW,IAAI;AAGjC,QAAM,gBACJ,YAAY,YACR;AAAA,IACE,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,aAAa;AAAA,EAAA,IAEf;AAAA,IACE,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,aAAa;AAAA,EAAA;AAGrB;AAAA;AAAA,IAEE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,QAEJ,GAAG,UAAU;AAAA,QACb,IAAI,UAAU;AAAA,QACd,UAAU,UAAU;AAAA,QACpB,SAAS,UAAU;AAAA,QAEnB,IAAI,cAAc;AAAA,QAClB,QAAQ,cAAc;AAAA,QACtB,aAAa,cAAc;AAAA,QAE3B,GAAE;AAAA,QAEF,OAAM;AAAA,QAEN,WAAW,KAAK,OAAO,QAAQ,aAAa,OAAO,SAAS,SAAS;AAAA,QAErE;AAAA,QACA,gBAAc,aAAa;AAAA,QAC1B,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA;AAGV;"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
._select_1fgij_1 {
|
|
2
|
+
/* Remove default browser styling */
|
|
3
|
+
appearance: none;
|
|
4
|
+
-webkit-appearance: none;
|
|
5
|
+
-moz-appearance: none;
|
|
6
|
+
|
|
7
|
+
/* Custom dropdown arrow */
|
|
8
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M2.5 4.5L6 8L9.5 4.5' stroke='%236B7280' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
9
|
+
background-repeat: no-repeat;
|
|
10
|
+
background-position: right 0.75rem center;
|
|
11
|
+
background-size: 12px;
|
|
12
|
+
|
|
13
|
+
/* Extra right padding for arrow */
|
|
14
|
+
padding-right: 2.5rem;
|
|
15
|
+
|
|
16
|
+
/* Cursor */
|
|
17
|
+
cursor: pointer;
|
|
18
|
+
|
|
19
|
+
/* Transitions */
|
|
20
|
+
transition-duration: 150ms;
|
|
21
|
+
transition-property: border-color, background-color, box-shadow;
|
|
22
|
+
transition-timing-function: ease-in-out;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
._select_1fgij_1:focus-visible {
|
|
26
|
+
outline: none;
|
|
27
|
+
border-color: var(--t-color-primary-default);
|
|
28
|
+
box-shadow: 0 0 0 3px var(--t-color-primary-subtle);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
._select_1fgij_1:disabled {
|
|
32
|
+
cursor: not-allowed;
|
|
33
|
+
opacity: 0.5;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
._select_1fgij_1._invalid_1fgij_36 {
|
|
37
|
+
border-color: var(--t-color-error-default);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
._select_1fgij_1._invalid_1fgij_36:focus-visible {
|
|
41
|
+
border-color: var(--t-color-error-default);
|
|
42
|
+
box-shadow: 0 0 0 3px var(--t-color-error-subtle);
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
import clsx from "clsx";
|
|
4
|
+
import { Box } from "../Box/Box.js";
|
|
5
|
+
import styles from "./skeleton.module.css.js";
|
|
6
|
+
function Skeleton({
|
|
7
|
+
w,
|
|
8
|
+
h,
|
|
9
|
+
rounded = "md",
|
|
10
|
+
isLoaded = false,
|
|
11
|
+
children,
|
|
12
|
+
className
|
|
13
|
+
}) {
|
|
14
|
+
if (isLoaded) {
|
|
15
|
+
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
16
|
+
}
|
|
17
|
+
return /* @__PURE__ */ jsx(
|
|
18
|
+
Box,
|
|
19
|
+
{
|
|
20
|
+
display: "inline-block",
|
|
21
|
+
position: "relative",
|
|
22
|
+
overflow: "hidden",
|
|
23
|
+
rounded,
|
|
24
|
+
bg: "surface",
|
|
25
|
+
className: clsx(styles.skeleton, className),
|
|
26
|
+
style: {
|
|
27
|
+
"--skeleton-width": w,
|
|
28
|
+
"--skeleton-height": h
|
|
29
|
+
},
|
|
30
|
+
"aria-hidden": "true"
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
Skeleton
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=Skeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Skeleton.js","sources":["../../../src/components/Skeleton/Skeleton.tsx"],"sourcesContent":["import { type ReactNode, type CSSProperties } from \"react\";\nimport clsx from \"clsx\";\nimport { Box } from \"@/components/Box/Box\";\nimport type { RoundedValue } from \"@/components/Box/roundness/roundness\";\nimport styles from \"./skeleton.module.css\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type SkeletonProps = {\n /** Width (CSS value) */\n w?: string;\n /** Height (CSS value) */\n h?: string;\n /** Border radius */\n rounded?: RoundedValue;\n /** When true, shows children instead of skeleton */\n isLoaded?: boolean;\n /** Content to show when loaded */\n children?: ReactNode;\n /** Additional class name */\n className?: string;\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Skeleton - Loading placeholder\n *\n * A shimmer animation placeholder for content:\n * - Shows animated skeleton when loading\n * - Reveals children when isLoaded is true\n *\n * Features:\n * - Configurable width and height\n * - Rounded corners\n * - Shimmer animation\n */\nexport function Skeleton({\n w,\n h,\n rounded = \"md\",\n isLoaded = false,\n children,\n className,\n}: SkeletonProps) {\n if (isLoaded) {\n return <>{children}</>;\n }\n\n return (\n <Box\n display=\"inline-block\"\n position=\"relative\"\n overflow=\"hidden\"\n rounded={rounded}\n bg=\"surface\"\n className={clsx(styles.skeleton, className)}\n style={\n {\n \"--skeleton-width\": w,\n \"--skeleton-height\": h,\n } as CSSProperties\n }\n aria-hidden=\"true\"\n />\n );\n}\n"],"names":[],"mappings":";;;;;AAyCO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAAkB;AAChB,MAAI,UAAU;AACZ,2CAAU,UAAS;AAAA,EACrB;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,UAAS;AAAA,MACT,UAAS;AAAA,MACT;AAAA,MACA,IAAG;AAAA,MACH,WAAW,KAAK,OAAO,UAAU,SAAS;AAAA,MAC1C,OACE;AAAA,QACE,oBAAoB;AAAA,QACpB,qBAAqB;AAAA,MAAA;AAAA,MAGzB,eAAY;AAAA,IAAA;AAAA,EAAA;AAGlB;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
._skeleton_vtgbo_1 {
|
|
2
|
+
width: var(--skeleton-width, 100%);
|
|
3
|
+
height: var(--skeleton-height, 1em);
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
._skeleton_vtgbo_1::after {
|
|
7
|
+
content: "";
|
|
8
|
+
position: absolute;
|
|
9
|
+
inset: 0;
|
|
10
|
+
background: linear-gradient(
|
|
11
|
+
90deg,
|
|
12
|
+
transparent 0%,
|
|
13
|
+
var(--t-skeleton-shimmer) 50%,
|
|
14
|
+
transparent 100%
|
|
15
|
+
);
|
|
16
|
+
animation: _shimmer_vtgbo_1 1.5s infinite;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@keyframes _shimmer_vtgbo_1 {
|
|
20
|
+
0% {
|
|
21
|
+
transform: translateX(-100%);
|
|
22
|
+
}
|
|
23
|
+
100% {
|
|
24
|
+
transform: translateX(100%);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
import { Box } from "../Box/Box.js";
|
|
4
|
+
function Spacer({
|
|
5
|
+
as,
|
|
6
|
+
...rest
|
|
7
|
+
}) {
|
|
8
|
+
return (
|
|
9
|
+
// @ts-expect-error - Polymorphic component type forwarding
|
|
10
|
+
/* @__PURE__ */ jsx(Box, { as: as || "div", flex: 1, ...rest })
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
export {
|
|
14
|
+
Spacer
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=Spacer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spacer.js","sources":["../../../src/components/Spacer/Spacer.tsx"],"sourcesContent":["import { type ElementType } from \"react\";\nimport { type Polymorphic } from \"@/types/Polymorphic\";\nimport { Box, type BoxOwnProps } from \"@/components/Box/Box\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type SpacerOwnProps = Omit<BoxOwnProps, \"flex\">;\n\nexport type SpacerProps<T extends ElementType = \"div\"> = Polymorphic<\n T,\n SpacerOwnProps\n>;\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Spacer - Flexible space filler for flex layouts\n *\n * A polymorphic spacer component that fills available flex space:\n * - Default element: <div>\n * - Always has flex: 1 to fill available space\n * - Use to push items apart in flex containers (e.g., logo left, nav right)\n */\nexport function Spacer<T extends ElementType = \"div\">({\n as,\n ...rest\n}: SpacerProps<T>) {\n return (\n // @ts-expect-error - Polymorphic component type forwarding\n <Box as={as || \"div\"} flex={1} {...rest} />\n );\n}\n"],"names":[],"mappings":";;;AA2BO,SAAS,OAAsC;AAAA,EACpD;AAAA,EACA,GAAG;AACL,GAAmB;AACjB;AAAA;AAAA,IAEE,oBAAC,OAAI,IAAI,MAAM,OAAO,MAAM,GAAI,GAAG,KAAA,CAAM;AAAA;AAE7C;"}
|
|
@@ -0,0 +1,41 @@
|
|
|
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 "./spinner.module.css.js";
|
|
6
|
+
const sizeConfig = {
|
|
7
|
+
sm: { w: "1em", h: "1em", borderWidth: "2px" },
|
|
8
|
+
md: { w: "1.5em", h: "1.5em", borderWidth: "2px" },
|
|
9
|
+
lg: { w: "2em", h: "2em", borderWidth: "3px" }
|
|
10
|
+
};
|
|
11
|
+
function Spinner({
|
|
12
|
+
as,
|
|
13
|
+
size = "md",
|
|
14
|
+
className,
|
|
15
|
+
style,
|
|
16
|
+
...rest
|
|
17
|
+
}) {
|
|
18
|
+
const Component = as || "span";
|
|
19
|
+
const sizeProps = sizeConfig[size];
|
|
20
|
+
return (
|
|
21
|
+
// @ts-expect-error - Polymorphic component type forwarding
|
|
22
|
+
/* @__PURE__ */ jsx(
|
|
23
|
+
Box,
|
|
24
|
+
{
|
|
25
|
+
as: Component,
|
|
26
|
+
display: "inline-block",
|
|
27
|
+
w: sizeProps.w,
|
|
28
|
+
h: sizeProps.h,
|
|
29
|
+
style: { borderWidth: sizeProps.borderWidth, ...style },
|
|
30
|
+
className: clsx(styles.spinner, className),
|
|
31
|
+
role: "status",
|
|
32
|
+
"aria-label": "Loading",
|
|
33
|
+
...rest
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
export {
|
|
39
|
+
Spinner
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=Spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spinner.js","sources":["../../../src/components/Spinner/Spinner.tsx"],"sourcesContent":["import { type ElementType } from \"react\";\nimport clsx from \"clsx\";\nimport { type Polymorphic } from \"@/types/Polymorphic\";\nimport { Box, type BoxOwnProps } from \"@/components/Box/Box\";\nimport styles from \"./spinner.module.css\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type SpinnerSize = \"sm\" | \"md\" | \"lg\";\n\nexport type SpinnerOwnProps = Omit<BoxOwnProps, \"as\"> & {\n size?: SpinnerSize;\n};\n\nexport type SpinnerProps<T extends ElementType = \"span\"> = Polymorphic<\n T,\n SpinnerOwnProps\n>;\n\n// ============================================================================\n// Size configurations\n// ============================================================================\n\nconst sizeConfig = {\n sm: { w: \"1em\", h: \"1em\", borderWidth: \"2px\" },\n md: { w: \"1.5em\", h: \"1.5em\", borderWidth: \"2px\" },\n lg: { w: \"2em\", h: \"2em\", borderWidth: \"3px\" },\n} as const;\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Spinner - Loading indicator component\n *\n * A simple spinning indicator that inherits color from its parent.\n * Uses CSS animation for smooth performance.\n */\nexport function Spinner<T extends ElementType = \"span\">({\n as,\n size = \"md\",\n className,\n style,\n ...rest\n}: SpinnerProps<T>) {\n const Component = as || \"span\";\n const sizeProps = sizeConfig[size];\n\n return (\n // @ts-expect-error - Polymorphic component type forwarding\n <Box\n as={Component}\n display=\"inline-block\"\n w={sizeProps.w}\n h={sizeProps.h}\n style={{ borderWidth: sizeProps.borderWidth, ...style }}\n className={clsx(styles.spinner, className)}\n role=\"status\"\n aria-label=\"Loading\"\n {...rest}\n />\n );\n}\n"],"names":[],"mappings":";;;;;AAyBA,MAAM,aAAa;AAAA,EACjB,IAAI,EAAE,GAAG,OAAO,GAAG,OAAO,aAAa,MAAA;AAAA,EACvC,IAAI,EAAE,GAAG,SAAS,GAAG,SAAS,aAAa,MAAA;AAAA,EAC3C,IAAI,EAAE,GAAG,OAAO,GAAG,OAAO,aAAa,MAAA;AACzC;AAYO,SAAS,QAAwC;AAAA,EACtD;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAoB;AAClB,QAAM,YAAY,MAAM;AACxB,QAAM,YAAY,WAAW,IAAI;AAEjC;AAAA;AAAA,IAEE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,QACJ,SAAQ;AAAA,QACR,GAAG,UAAU;AAAA,QACb,GAAG,UAAU;AAAA,QACb,OAAO,EAAE,aAAa,UAAU,aAAa,GAAG,MAAA;AAAA,QAChD,WAAW,KAAK,OAAO,SAAS,SAAS;AAAA,QACzC,MAAK;AAAA,QACL,cAAW;AAAA,QACV,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA;AAGV;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
@keyframes _spin_1i3mx_10 {
|
|
2
|
+
from {
|
|
3
|
+
transform: rotate(0deg);
|
|
4
|
+
}
|
|
5
|
+
to {
|
|
6
|
+
transform: rotate(360deg);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
._spinner_1i3mx_10 {
|
|
11
|
+
animation-duration: 0.6s;
|
|
12
|
+
animation-iteration-count: infinite;
|
|
13
|
+
animation-name: _spin_1i3mx_10;
|
|
14
|
+
animation-timing-function: linear;
|
|
15
|
+
border-bottom-color: currentColor;
|
|
16
|
+
border-left-color: currentColor;
|
|
17
|
+
border-radius: 50%;
|
|
18
|
+
border-right-color: currentColor;
|
|
19
|
+
border-style: solid;
|
|
20
|
+
border-top-color: transparent;
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
import { Box } from "../Box/Box.js";
|
|
4
|
+
function Stack({
|
|
5
|
+
as,
|
|
6
|
+
direction = "column",
|
|
7
|
+
gap,
|
|
8
|
+
align,
|
|
9
|
+
justify,
|
|
10
|
+
wrap,
|
|
11
|
+
children,
|
|
12
|
+
...rest
|
|
13
|
+
}) {
|
|
14
|
+
return (
|
|
15
|
+
// @ts-expect-error - Polymorphic component type forwarding
|
|
16
|
+
/* @__PURE__ */ jsx(
|
|
17
|
+
Box,
|
|
18
|
+
{
|
|
19
|
+
as: as || "div",
|
|
20
|
+
display: "flex",
|
|
21
|
+
flexDirection: direction,
|
|
22
|
+
gap,
|
|
23
|
+
alignItems: align,
|
|
24
|
+
justifyContent: justify,
|
|
25
|
+
flexWrap: wrap ? "wrap" : void 0,
|
|
26
|
+
...rest,
|
|
27
|
+
children
|
|
28
|
+
}
|
|
29
|
+
)
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
Stack
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=Stack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Stack.js","sources":["../../../src/components/Stack/Stack.tsx"],"sourcesContent":["import { type ElementType } from \"react\";\nimport { type Polymorphic } from \"@/types/Polymorphic\";\nimport { Box, type BoxOwnProps } from \"@/components/Box/Box\";\nimport type {\n FlexDirectionValue,\n JustifyContentValue,\n AlignItemsValue,\n SpacingValue,\n} from \"@/components/Box/flexbox/flexbox\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type StackOwnProps = Omit<\n BoxOwnProps,\n \"display\" | \"flexDirection\" | \"justifyContent\" | \"alignItems\" | \"flexWrap\" | \"gap\"\n> & {\n /** Stack direction: row, column, row-reverse, column-reverse */\n direction?: FlexDirectionValue;\n /** Gap between children (0-32 spacing multiplier) */\n gap?: SpacingValue;\n /** Align items along the cross axis */\n align?: AlignItemsValue;\n /** Justify content along the main axis */\n justify?: JustifyContentValue;\n /** Enable flex wrapping */\n wrap?: boolean;\n};\n\nexport type StackProps<T extends ElementType = \"div\"> = Polymorphic<\n T,\n StackOwnProps\n>;\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Stack - Flex-based layout component\n *\n * A polymorphic flex container that provides:\n * - Default element: <div>\n * - Direction: column (default), row, row-reverse, column-reverse\n * - Gap: spacing multiplier (0-32)\n * - Align: cross-axis alignment\n * - Justify: main-axis alignment\n * - Wrap: enable flex wrapping\n */\nexport function Stack<T extends ElementType = \"div\">({\n as,\n direction = \"column\",\n gap,\n align,\n justify,\n wrap,\n children,\n ...rest\n}: StackProps<T>) {\n return (\n // @ts-expect-error - Polymorphic component type forwarding\n <Box\n as={as || \"div\"}\n display=\"flex\"\n flexDirection={direction}\n gap={gap}\n alignItems={align}\n justifyContent={justify}\n flexWrap={wrap ? \"wrap\" : undefined}\n {...rest}\n >\n {children}\n </Box>\n );\n}\n"],"names":[],"mappings":";;;AAkDO,SAAS,MAAqC;AAAA,EACnD;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAkB;AAChB;AAAA;AAAA,IAEE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAI,MAAM;AAAA,QACV,SAAQ;AAAA,QACR,eAAe;AAAA,QACf;AAAA,QACA,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,UAAU,OAAO,SAAS;AAAA,QACzB,GAAG;AAAA,QAEH;AAAA,MAAA;AAAA,IAAA;AAAA;AAGP;"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from "react";
|
|
3
|
+
import clsx from "clsx";
|
|
4
|
+
import { Box } from "../Box/Box.js";
|
|
5
|
+
import styles from "./switch.module.css.js";
|
|
6
|
+
const sizeConfig = {
|
|
7
|
+
sm: { trackWidth: 32, trackHeight: 18, thumb: 14, fontSize: "sm" },
|
|
8
|
+
md: { trackWidth: 40, trackHeight: 22, thumb: 18, fontSize: "md" },
|
|
9
|
+
lg: { trackWidth: 48, trackHeight: 26, thumb: 22, fontSize: "lg" }
|
|
10
|
+
};
|
|
11
|
+
const Switch = forwardRef(function Switch2({
|
|
12
|
+
size = "md",
|
|
13
|
+
disabled = false,
|
|
14
|
+
isChecked,
|
|
15
|
+
label,
|
|
16
|
+
className,
|
|
17
|
+
style,
|
|
18
|
+
...rest
|
|
19
|
+
}, ref) {
|
|
20
|
+
const sizeProps = sizeConfig[size];
|
|
21
|
+
return /* @__PURE__ */ jsxs(
|
|
22
|
+
Box,
|
|
23
|
+
{
|
|
24
|
+
as: "label",
|
|
25
|
+
display: "inline-flex",
|
|
26
|
+
alignItems: "center",
|
|
27
|
+
gap: 2,
|
|
28
|
+
cursor: disabled ? "not-allowed" : "pointer",
|
|
29
|
+
opacity: disabled ? "faint" : void 0,
|
|
30
|
+
className: clsx(styles.wrapper, className),
|
|
31
|
+
style,
|
|
32
|
+
children: [
|
|
33
|
+
/* @__PURE__ */ jsx(
|
|
34
|
+
"input",
|
|
35
|
+
{
|
|
36
|
+
type: "checkbox",
|
|
37
|
+
role: "switch",
|
|
38
|
+
ref,
|
|
39
|
+
checked: isChecked,
|
|
40
|
+
disabled,
|
|
41
|
+
className: styles.input,
|
|
42
|
+
...rest
|
|
43
|
+
}
|
|
44
|
+
),
|
|
45
|
+
/* @__PURE__ */ jsx(
|
|
46
|
+
Box,
|
|
47
|
+
{
|
|
48
|
+
as: "span",
|
|
49
|
+
display: "inline-flex",
|
|
50
|
+
alignItems: "center",
|
|
51
|
+
rounded: "full",
|
|
52
|
+
flexShrink: 0,
|
|
53
|
+
className: styles.track,
|
|
54
|
+
style: {
|
|
55
|
+
width: sizeProps.trackWidth,
|
|
56
|
+
height: sizeProps.trackHeight,
|
|
57
|
+
"--switch-thumb-size": `${sizeProps.thumb}px`,
|
|
58
|
+
"--switch-track-width": `${sizeProps.trackWidth}px`
|
|
59
|
+
},
|
|
60
|
+
children: /* @__PURE__ */ jsx(
|
|
61
|
+
Box,
|
|
62
|
+
{
|
|
63
|
+
as: "span",
|
|
64
|
+
rounded: "full",
|
|
65
|
+
bg: "background",
|
|
66
|
+
className: styles.thumb,
|
|
67
|
+
style: {
|
|
68
|
+
width: sizeProps.thumb,
|
|
69
|
+
height: sizeProps.thumb
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
),
|
|
75
|
+
label && /* @__PURE__ */ jsx(Box, { as: "span", fontSize: sizeProps.fontSize, color: "foreground", children: label })
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
export {
|
|
81
|
+
Switch
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=Switch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Switch.js","sources":["../../../src/components/Switch/Switch.tsx"],"sourcesContent":["import { type InputHTMLAttributes, forwardRef } from \"react\";\nimport clsx from \"clsx\";\nimport { Box } from \"@/components/Box/Box\";\nimport styles from \"./switch.module.css\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type SwitchSize = \"sm\" | \"md\" | \"lg\";\n\nexport type SwitchProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"type\"\n> & {\n /** Switch size affecting track and thumb dimensions */\n size?: SwitchSize;\n /** Whether the switch is disabled */\n disabled?: boolean;\n /** Controlled checked state */\n isChecked?: boolean;\n /** Optional label text displayed to the right */\n label?: string;\n};\n\n// ============================================================================\n// Size configurations\n// ============================================================================\n\nconst sizeConfig = {\n sm: { trackWidth: 32, trackHeight: 18, thumb: 14, fontSize: \"sm\" },\n md: { trackWidth: 40, trackHeight: 22, thumb: 18, fontSize: \"md\" },\n lg: { trackWidth: 48, trackHeight: 26, thumb: 22, fontSize: \"lg\" },\n} as const;\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Switch - Toggle switch component\n *\n * A styled switch component that provides:\n * - Sizes: sm, md (default), lg\n * - Sliding thumb animation\n * - Optional inline label\n * - Disabled state\n * - Focus ring styling\n */\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n {\n size = \"md\",\n disabled = false,\n isChecked,\n label,\n className,\n style,\n ...rest\n },\n ref\n) {\n const sizeProps = sizeConfig[size];\n\n return (\n <Box\n as=\"label\"\n display=\"inline-flex\"\n alignItems=\"center\"\n gap={2}\n cursor={disabled ? \"not-allowed\" : \"pointer\"}\n opacity={disabled ? \"faint\" : undefined}\n className={clsx(styles.wrapper, className)}\n style={style}\n >\n {/* Hidden native checkbox with switch role */}\n <input\n type=\"checkbox\"\n role=\"switch\"\n ref={ref}\n checked={isChecked}\n disabled={disabled}\n className={styles.input}\n {...rest}\n />\n\n {/* Custom track */}\n <Box\n as=\"span\"\n display=\"inline-flex\"\n alignItems=\"center\"\n rounded=\"full\"\n flexShrink={0}\n className={styles.track}\n style={\n {\n width: sizeProps.trackWidth,\n height: sizeProps.trackHeight,\n \"--switch-thumb-size\": `${sizeProps.thumb}px`,\n \"--switch-track-width\": `${sizeProps.trackWidth}px`,\n } as React.CSSProperties\n }\n >\n {/* Thumb */}\n <Box\n as=\"span\"\n rounded=\"full\"\n bg=\"background\"\n className={styles.thumb}\n style={{\n width: sizeProps.thumb,\n height: sizeProps.thumb,\n }}\n />\n </Box>\n\n {/* Optional label */}\n {label && (\n <Box as=\"span\" fontSize={sizeProps.fontSize} color=\"foreground\">\n {label}\n </Box>\n )}\n </Box>\n );\n});\n"],"names":["Switch"],"mappings":";;;;;AA6BA,MAAM,aAAa;AAAA,EACjB,IAAI,EAAE,YAAY,IAAI,aAAa,IAAI,OAAO,IAAI,UAAU,KAAA;AAAA,EAC5D,IAAI,EAAE,YAAY,IAAI,aAAa,IAAI,OAAO,IAAI,UAAU,KAAA;AAAA,EAC5D,IAAI,EAAE,YAAY,IAAI,aAAa,IAAI,OAAO,IAAI,UAAU,KAAA;AAC9D;AAgBO,MAAM,SAAS,WAA0C,SAASA,QACvE;AAAA,EACE,OAAO;AAAA,EACP,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GACA,KACA;AACA,QAAM,YAAY,WAAW,IAAI;AAEjC,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IAAG;AAAA,MACH,SAAQ;AAAA,MACR,YAAW;AAAA,MACX,KAAK;AAAA,MACL,QAAQ,WAAW,gBAAgB;AAAA,MACnC,SAAS,WAAW,UAAU;AAAA,MAC9B,WAAW,KAAK,OAAO,SAAS,SAAS;AAAA,MACzC;AAAA,MAGA,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,MAAK;AAAA,YACL;AAAA,YACA,SAAS;AAAA,YACT;AAAA,YACA,WAAW,OAAO;AAAA,YACjB,GAAG;AAAA,UAAA;AAAA,QAAA;AAAA,QAIN;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,SAAQ;AAAA,YACR,YAAW;AAAA,YACX,SAAQ;AAAA,YACR,YAAY;AAAA,YACZ,WAAW,OAAO;AAAA,YAClB,OACE;AAAA,cACE,OAAO,UAAU;AAAA,cACjB,QAAQ,UAAU;AAAA,cAClB,uBAAuB,GAAG,UAAU,KAAK;AAAA,cACzC,wBAAwB,GAAG,UAAU,UAAU;AAAA,YAAA;AAAA,YAKnD,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,IAAG;AAAA,gBACH,SAAQ;AAAA,gBACR,IAAG;AAAA,gBACH,WAAW,OAAO;AAAA,gBAClB,OAAO;AAAA,kBACL,OAAO,UAAU;AAAA,kBACjB,QAAQ,UAAU;AAAA,gBAAA;AAAA,cACpB;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,QAID,SACC,oBAAC,KAAA,EAAI,IAAG,QAAO,UAAU,UAAU,UAAU,OAAM,cAChD,UAAA,MAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* Hidden native checkbox */
|
|
2
|
+
._input_1kbg8_2 {
|
|
3
|
+
position: absolute;
|
|
4
|
+
opacity: 0;
|
|
5
|
+
width: 0;
|
|
6
|
+
height: 0;
|
|
7
|
+
margin: 0;
|
|
8
|
+
padding: 0;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/* Track (pill shape) */
|
|
12
|
+
._track_1kbg8_12 {
|
|
13
|
+
background-color: var(--t-color-border-muted);
|
|
14
|
+
transition-duration: 150ms;
|
|
15
|
+
transition-property: background-color, box-shadow;
|
|
16
|
+
transition-timing-function: ease-in-out;
|
|
17
|
+
padding: 2px;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* Thumb (sliding circle) */
|
|
21
|
+
._thumb_1kbg8_21 {
|
|
22
|
+
transition-duration: 150ms;
|
|
23
|
+
transition-property: transform;
|
|
24
|
+
transition-timing-function: ease-in-out;
|
|
25
|
+
transform: translateX(0);
|
|
26
|
+
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* Focus ring on track when input is focused */
|
|
30
|
+
._input_1kbg8_2:focus-visible ~ ._track_1kbg8_12 {
|
|
31
|
+
box-shadow: 0 0 0 3px var(--t-color-primary-subtle);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Checked state - track becomes primary color */
|
|
35
|
+
._input_1kbg8_2:checked ~ ._track_1kbg8_12 {
|
|
36
|
+
background-color: var(--t-color-primary-default);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* Checked state - thumb slides right */
|
|
40
|
+
._input_1kbg8_2:checked ~ ._track_1kbg8_12 ._thumb_1kbg8_21 {
|
|
41
|
+
/* Translate by: track width - thumb size - padding (2px each side = 4px) */
|
|
42
|
+
transform: translateX(calc(var(--switch-track-width) - var(--switch-thumb-size) - 4px));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* Disabled state (handled via opacity on wrapper) */
|
|
46
|
+
._input_1kbg8_2:disabled ~ ._track_1kbg8_12 {
|
|
47
|
+
cursor: not-allowed;
|
|
48
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const input = "_input_1kbg8_2";
|
|
2
|
+
const track = "_track_1kbg8_12";
|
|
3
|
+
const thumb = "_thumb_1kbg8_21";
|
|
4
|
+
const styles = {
|
|
5
|
+
input,
|
|
6
|
+
track,
|
|
7
|
+
thumb
|
|
8
|
+
};
|
|
9
|
+
export {
|
|
10
|
+
styles as default,
|
|
11
|
+
input,
|
|
12
|
+
thumb,
|
|
13
|
+
track
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=switch.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/Tabs.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/Tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAuC,MAAM,OAAO,CAAC;AA0B5E,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG;IACtB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,qBAAqB;IACrB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAMF;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,EACnB,YAAgB,EAChB,KAAK,EACL,QAAQ,EACR,OAAgB,EAChB,SAAS,EACT,QAAQ,GACT,EAAE,SAAS,2CAgBX;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,YAAY,2CAc5D;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,EAClB,KAAS,EACT,QAAgB,EAChB,SAAS,EACT,QAAQ,GACT,EAAE,QAAQ,2CA2BV;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,EAAE,KAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,aAAa,kDAUzE"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } 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 "./tabs.module.css.js";
|
|
7
|
+
const TabsContext = createContext(null);
|
|
8
|
+
function useTabsContext() {
|
|
9
|
+
const context = useContext(TabsContext);
|
|
10
|
+
if (!context) throw new Error("Tab components must be used within Tabs");
|
|
11
|
+
return context;
|
|
12
|
+
}
|
|
13
|
+
function Tabs({
|
|
14
|
+
defaultIndex = 0,
|
|
15
|
+
index,
|
|
16
|
+
onChange,
|
|
17
|
+
variant = "line",
|
|
18
|
+
className,
|
|
19
|
+
children
|
|
20
|
+
}) {
|
|
21
|
+
const [internalIndex, setInternalIndex] = useState(defaultIndex);
|
|
22
|
+
const activeIndex = index ?? internalIndex;
|
|
23
|
+
const setActiveIndex = (newIndex) => {
|
|
24
|
+
if (index === void 0) setInternalIndex(newIndex);
|
|
25
|
+
onChange?.(newIndex);
|
|
26
|
+
};
|
|
27
|
+
return /* @__PURE__ */ jsx(TabsContext.Provider, { value: { activeIndex, setActiveIndex }, children: /* @__PURE__ */ jsx(Box, { className: clsx(styles.tabs, styles[variant], className), children }) });
|
|
28
|
+
}
|
|
29
|
+
function TabList({ className, children }) {
|
|
30
|
+
return /* @__PURE__ */ jsx(
|
|
31
|
+
Box,
|
|
32
|
+
{
|
|
33
|
+
as: "div",
|
|
34
|
+
role: "tablist",
|
|
35
|
+
display: "flex",
|
|
36
|
+
gap: 0,
|
|
37
|
+
borderBottom: "thin",
|
|
38
|
+
borderColor: "border",
|
|
39
|
+
className: clsx(styles.tabList, className),
|
|
40
|
+
children
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
function Tab({
|
|
45
|
+
index = 0,
|
|
46
|
+
disabled = false,
|
|
47
|
+
className,
|
|
48
|
+
children
|
|
49
|
+
}) {
|
|
50
|
+
const { activeIndex, setActiveIndex } = useTabsContext();
|
|
51
|
+
const isActive = activeIndex === index;
|
|
52
|
+
return /* @__PURE__ */ jsx(
|
|
53
|
+
Box,
|
|
54
|
+
{
|
|
55
|
+
as: "button",
|
|
56
|
+
type: "button",
|
|
57
|
+
role: "tab",
|
|
58
|
+
"aria-selected": isActive,
|
|
59
|
+
"aria-disabled": disabled,
|
|
60
|
+
disabled,
|
|
61
|
+
onClick: () => !disabled && setActiveIndex(index),
|
|
62
|
+
py: 2,
|
|
63
|
+
px: 4,
|
|
64
|
+
fontSize: "sm",
|
|
65
|
+
fontWeight: isActive ? "medium" : "normal",
|
|
66
|
+
color: isActive ? "primary" : "foreground-muted",
|
|
67
|
+
bg: "transparent",
|
|
68
|
+
border: "none",
|
|
69
|
+
cursor: disabled ? "not-allowed" : "pointer",
|
|
70
|
+
opacity: disabled ? "faint" : void 0,
|
|
71
|
+
className: clsx(styles.tab, isActive && styles.active, className),
|
|
72
|
+
children
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
function TabPanel({ index = 0, className, children }) {
|
|
77
|
+
const { activeIndex } = useTabsContext();
|
|
78
|
+
if (activeIndex !== index) return null;
|
|
79
|
+
return /* @__PURE__ */ jsx(Box, { role: "tabpanel", p: 4, className: clsx(styles.tabPanel, className), children });
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
Tab,
|
|
83
|
+
TabList,
|
|
84
|
+
TabPanel,
|
|
85
|
+
Tabs
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=Tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.js","sources":["../../../src/components/Tabs/Tabs.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 \"./tabs.module.css\";\n\n// ============================================================================\n// Context\n// ============================================================================\n\ntype TabsContextValue = {\n activeIndex: number;\n setActiveIndex: (index: number) => void;\n};\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nfunction useTabsContext() {\n const context = useContext(TabsContext);\n if (!context) throw new Error(\"Tab components must be used within Tabs\");\n return context;\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type TabsVariant = \"line\" | \"enclosed\";\n\nexport type TabsProps = {\n /** Default active tab index */\n defaultIndex?: number;\n /** Controlled active index */\n index?: number;\n /** Callback when tab changes */\n onChange?: (index: number) => void;\n /** Visual variant */\n variant?: TabsVariant;\n /** Additional class name */\n className?: string;\n /** Tab components */\n children?: ReactNode;\n};\n\nexport type TabListProps = {\n /** Additional class name */\n className?: string;\n /** Tab buttons */\n children?: ReactNode;\n};\n\nexport type TabProps = {\n /** Tab index (set automatically or manually) */\n index?: number;\n /** Disabled state */\n disabled?: boolean;\n /** Additional class name */\n className?: string;\n /** Tab label */\n children?: ReactNode;\n};\n\nexport type TabPanelProps = {\n /** Panel index (set automatically or manually) */\n index?: number;\n /** Additional class name */\n className?: string;\n /** Panel content */\n children?: ReactNode;\n};\n\n// ============================================================================\n// Components\n// ============================================================================\n\n/**\n * Tabs - Tab container with state management\n *\n * Provides context for Tab and TabPanel components.\n * Supports controlled (index prop) and uncontrolled (defaultIndex) modes.\n */\nexport function Tabs({\n defaultIndex = 0,\n index,\n onChange,\n variant = \"line\",\n className,\n children,\n}: TabsProps) {\n const [internalIndex, setInternalIndex] = useState(defaultIndex);\n const activeIndex = index ?? internalIndex;\n\n const setActiveIndex = (newIndex: number) => {\n if (index === undefined) setInternalIndex(newIndex);\n onChange?.(newIndex);\n };\n\n return (\n <TabsContext.Provider value={{ activeIndex, setActiveIndex }}>\n <Box className={clsx(styles.tabs, styles[variant], className)}>\n {children}\n </Box>\n </TabsContext.Provider>\n );\n}\n\n/**\n * TabList - Horizontal container for Tab buttons\n */\nexport function TabList({ className, children }: TabListProps) {\n return (\n <Box\n as=\"div\"\n role=\"tablist\"\n display=\"flex\"\n gap={0}\n borderBottom=\"thin\"\n borderColor=\"border\"\n className={clsx(styles.tabList, className)}\n >\n {children}\n </Box>\n );\n}\n\n/**\n * Tab - Individual tab button\n */\nexport function Tab({\n index = 0,\n disabled = false,\n className,\n children,\n}: TabProps) {\n const { activeIndex, setActiveIndex } = useTabsContext();\n const isActive = activeIndex === index;\n\n return (\n <Box\n as=\"button\"\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-disabled={disabled}\n disabled={disabled}\n onClick={() => !disabled && setActiveIndex(index)}\n py={2}\n px={4}\n fontSize=\"sm\"\n fontWeight={isActive ? \"medium\" : \"normal\"}\n color={isActive ? \"primary\" : \"foreground-muted\"}\n bg=\"transparent\"\n border=\"none\"\n cursor={disabled ? \"not-allowed\" : \"pointer\"}\n opacity={disabled ? \"faint\" : undefined}\n className={clsx(styles.tab, isActive && styles.active, className)}\n >\n {children}\n </Box>\n );\n}\n\n/**\n * TabPanel - Content panel for a tab\n *\n * Only renders when its index matches the active tab.\n */\nexport function TabPanel({ index = 0, className, children }: TabPanelProps) {\n const { activeIndex } = useTabsContext();\n\n if (activeIndex !== index) return null;\n\n return (\n <Box role=\"tabpanel\" p={4} className={clsx(styles.tabPanel, className)}>\n {children}\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;AAgBA,MAAM,cAAc,cAAuC,IAAI;AAE/D,SAAS,iBAAiB;AACxB,QAAM,UAAU,WAAW,WAAW;AACtC,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,yCAAyC;AACvE,SAAO;AACT;AA4DO,SAAS,KAAK;AAAA,EACnB,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AACF,GAAc;AACZ,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,YAAY;AAC/D,QAAM,cAAc,SAAS;AAE7B,QAAM,iBAAiB,CAAC,aAAqB;AAC3C,QAAI,UAAU,OAAW,kBAAiB,QAAQ;AAClD,eAAW,QAAQ;AAAA,EACrB;AAEA,SACE,oBAAC,YAAY,UAAZ,EAAqB,OAAO,EAAE,aAAa,kBAC1C,UAAA,oBAAC,OAAI,WAAW,KAAK,OAAO,MAAM,OAAO,OAAO,GAAG,SAAS,GACzD,SAAA,CACH,GACF;AAEJ;AAKO,SAAS,QAAQ,EAAE,WAAW,YAA0B;AAC7D,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IAAG;AAAA,MACH,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,KAAK;AAAA,MACL,cAAa;AAAA,MACb,aAAY;AAAA,MACZ,WAAW,KAAK,OAAO,SAAS,SAAS;AAAA,MAExC;AAAA,IAAA;AAAA,EAAA;AAGP;AAKO,SAAS,IAAI;AAAA,EAClB,QAAQ;AAAA,EACR,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAAa;AACX,QAAM,EAAE,aAAa,eAAA,IAAmB,eAAA;AACxC,QAAM,WAAW,gBAAgB;AAEjC,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IAAG;AAAA,MACH,MAAK;AAAA,MACL,MAAK;AAAA,MACL,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf;AAAA,MACA,SAAS,MAAM,CAAC,YAAY,eAAe,KAAK;AAAA,MAChD,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,UAAS;AAAA,MACT,YAAY,WAAW,WAAW;AAAA,MAClC,OAAO,WAAW,YAAY;AAAA,MAC9B,IAAG;AAAA,MACH,QAAO;AAAA,MACP,QAAQ,WAAW,gBAAgB;AAAA,MACnC,SAAS,WAAW,UAAU;AAAA,MAC9B,WAAW,KAAK,OAAO,KAAK,YAAY,OAAO,QAAQ,SAAS;AAAA,MAE/D;AAAA,IAAA;AAAA,EAAA;AAGP;AAOO,SAAS,SAAS,EAAE,QAAQ,GAAG,WAAW,YAA2B;AAC1E,QAAM,EAAE,YAAA,IAAgB,eAAA;AAExB,MAAI,gBAAgB,MAAO,QAAO;AAElC,SACE,oBAAC,KAAA,EAAI,MAAK,YAAW,GAAG,GAAG,WAAW,KAAK,OAAO,UAAU,SAAS,GAClE,SAAA,CACH;AAEJ;"}
|