@dnanpm/ui-components 0.0.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -42
- package/dist/components/Accordion/Accordion.cjs +32 -0
- package/dist/components/Accordion/Accordion.cjs.map +1 -0
- package/dist/components/Accordion/Accordion.css +19 -0
- package/dist/components/Accordion/Accordion.d.ts +3 -0
- package/dist/components/Accordion/Accordion.d.ts.map +1 -0
- package/dist/components/Accordion/Accordion.js +32 -0
- package/dist/components/Accordion/Accordion.js.map +1 -0
- package/dist/components/Accordion/Accordion.module.css.cjs +12 -0
- package/dist/components/Accordion/Accordion.module.css.cjs.map +1 -0
- package/dist/components/Accordion/Accordion.module.css.js +12 -0
- package/dist/components/Accordion/Accordion.module.css.js.map +1 -0
- package/dist/components/Accordion/Accordion.types.d.ts +21 -0
- package/dist/components/Accordion/Accordion.types.d.ts.map +1 -0
- package/dist/components/Accordion/Accordion.utils.cjs +8 -0
- package/dist/components/Accordion/Accordion.utils.cjs.map +1 -0
- package/dist/components/Accordion/Accordion.utils.d.ts +8 -0
- package/dist/components/Accordion/Accordion.utils.d.ts.map +1 -0
- package/dist/components/Accordion/Accordion.utils.js +8 -0
- package/dist/components/Accordion/Accordion.utils.js.map +1 -0
- package/dist/components/Accordion/index.d.ts +3 -0
- package/dist/components/Accordion/index.d.ts.map +1 -0
- package/dist/components/AccordionItem/AccordionItem.cjs +57 -0
- package/dist/components/AccordionItem/AccordionItem.cjs.map +1 -0
- package/dist/components/AccordionItem/AccordionItem.css +128 -0
- package/dist/components/AccordionItem/AccordionItem.d.ts +3 -0
- package/dist/components/AccordionItem/AccordionItem.d.ts.map +1 -0
- package/dist/components/AccordionItem/AccordionItem.js +57 -0
- package/dist/components/AccordionItem/AccordionItem.js.map +1 -0
- package/dist/components/AccordionItem/AccordionItem.module.css.cjs +17 -0
- package/dist/components/AccordionItem/AccordionItem.module.css.cjs.map +1 -0
- package/dist/components/AccordionItem/AccordionItem.module.css.js +18 -0
- package/dist/components/AccordionItem/AccordionItem.module.css.js.map +1 -0
- package/dist/components/AccordionItem/AccordionItem.types.d.ts +32 -0
- package/dist/components/AccordionItem/AccordionItem.types.d.ts.map +1 -0
- package/dist/components/AccordionItem/index.d.ts +3 -0
- package/dist/components/AccordionItem/index.d.ts.map +1 -0
- package/dist/components/Breadcrumb/Breadcrumb.cjs +72 -0
- package/dist/components/Breadcrumb/Breadcrumb.cjs.map +1 -0
- package/dist/components/Breadcrumb/Breadcrumb.css +73 -0
- package/dist/components/Breadcrumb/Breadcrumb.d.ts +3 -0
- package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +1 -0
- package/dist/components/Breadcrumb/Breadcrumb.js +72 -0
- package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs +25 -0
- package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs.map +1 -0
- package/dist/components/Breadcrumb/Breadcrumb.module.css.js +25 -0
- package/dist/components/Breadcrumb/Breadcrumb.module.css.js.map +1 -0
- package/dist/components/Breadcrumb/Breadcrumb.types.d.ts +42 -0
- package/dist/components/Breadcrumb/Breadcrumb.types.d.ts.map +1 -0
- package/dist/components/Breadcrumb/index.d.ts +3 -0
- package/dist/components/Breadcrumb/index.d.ts.map +1 -0
- package/dist/components/Button/Button.cjs +104 -0
- package/dist/components/Button/Button.cjs.map +1 -0
- package/dist/components/Button/Button.css +182 -0
- package/dist/components/Button/Button.d.ts +1 -1
- package/dist/components/Button/Button.d.ts.map +1 -1
- package/dist/components/Button/Button.js +104 -0
- package/dist/components/Button/Button.js.map +1 -0
- package/dist/components/Button/Button.module.css.cjs +24 -0
- package/dist/components/Button/Button.module.css.cjs.map +1 -0
- package/dist/components/Button/Button.module.css.js +24 -0
- package/dist/components/Button/Button.module.css.js.map +1 -0
- package/dist/components/Button/Button.types.d.ts +68 -35
- package/dist/components/Button/Button.types.d.ts.map +1 -1
- package/dist/components/Button/index.d.ts +1 -1
- package/dist/components/Button/index.d.ts.map +1 -1
- package/dist/components/ColorScheme/ColorScheme.cjs +9 -0
- package/dist/components/ColorScheme/ColorScheme.cjs.map +1 -0
- package/dist/components/ColorScheme/ColorScheme.d.ts +3 -0
- package/dist/components/ColorScheme/ColorScheme.d.ts.map +1 -0
- package/dist/components/ColorScheme/ColorScheme.js +9 -0
- package/dist/components/ColorScheme/ColorScheme.js.map +1 -0
- package/dist/components/ColorScheme/ColorScheme.types.d.ts +10 -0
- package/dist/components/ColorScheme/ColorScheme.types.d.ts.map +1 -0
- package/dist/components/ColorScheme/index.d.ts +3 -0
- package/dist/components/ColorScheme/index.d.ts.map +1 -0
- package/dist/components/Label/Label.cjs +18 -0
- package/dist/components/Label/Label.cjs.map +1 -0
- package/dist/components/Label/Label.css +38 -0
- package/dist/components/Label/Label.d.ts +3 -0
- package/dist/components/Label/Label.d.ts.map +1 -0
- package/dist/components/Label/Label.js +18 -0
- package/dist/components/Label/Label.js.map +1 -0
- package/dist/components/Label/Label.module.css.cjs +16 -0
- package/dist/components/Label/Label.module.css.cjs.map +1 -0
- package/dist/components/Label/Label.module.css.js +16 -0
- package/dist/components/Label/Label.module.css.js.map +1 -0
- package/dist/components/Label/Label.types.d.ts +24 -0
- package/dist/components/Label/Label.types.d.ts.map +1 -0
- package/dist/components/Label/index.d.ts +3 -0
- package/dist/components/Label/index.d.ts.map +1 -0
- package/dist/components/Notification/Notification.cjs +57 -0
- package/dist/components/Notification/Notification.cjs.map +1 -0
- package/dist/components/Notification/Notification.css +90 -0
- package/dist/components/Notification/Notification.d.ts +3 -0
- package/dist/components/Notification/Notification.d.ts.map +1 -0
- package/dist/components/Notification/Notification.js +57 -0
- package/dist/components/Notification/Notification.js.map +1 -0
- package/dist/components/Notification/Notification.module.css.cjs +24 -0
- package/dist/components/Notification/Notification.module.css.cjs.map +1 -0
- package/dist/components/Notification/Notification.module.css.js +24 -0
- package/dist/components/Notification/Notification.module.css.js.map +1 -0
- package/dist/components/Notification/Notification.types.d.ts +40 -0
- package/dist/components/Notification/Notification.types.d.ts.map +1 -0
- package/dist/components/Notification/index.d.ts +3 -0
- package/dist/components/Notification/index.d.ts.map +1 -0
- package/dist/components/Spinner/Spinner.cjs +62 -0
- package/dist/components/Spinner/Spinner.cjs.map +1 -0
- package/dist/components/Spinner/Spinner.css +116 -0
- package/dist/components/Spinner/Spinner.d.ts +3 -0
- package/dist/components/Spinner/Spinner.d.ts.map +1 -0
- package/dist/components/Spinner/Spinner.js +62 -0
- package/dist/components/Spinner/Spinner.js.map +1 -0
- package/dist/components/Spinner/Spinner.module.css.cjs +26 -0
- package/dist/components/Spinner/Spinner.module.css.cjs.map +1 -0
- package/dist/components/Spinner/Spinner.module.css.js +26 -0
- package/dist/components/Spinner/Spinner.module.css.js.map +1 -0
- package/dist/components/Spinner/Spinner.types.d.ts +41 -0
- package/dist/components/Spinner/Spinner.types.d.ts.map +1 -0
- package/dist/components/Spinner/index.d.ts +3 -0
- package/dist/components/{Tooltip → Spinner}/index.d.ts.map +1 -1
- package/dist/font-definitions.css +61 -0
- package/dist/index.cjs +19 -10027
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +15 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -10008
- package/dist/index.js.map +1 -1
- package/dist/styles/utils/elevation.css +28 -0
- package/dist/styles/utils/elevation.module.css.cjs +10 -0
- package/dist/styles/utils/elevation.module.css.cjs.map +1 -0
- package/dist/styles/utils/elevation.module.css.js +10 -0
- package/dist/styles/utils/elevation.module.css.js.map +1 -0
- package/dist/styles/utils/focus.css +80 -0
- package/dist/styles/utils/focus.module.css.cjs +16 -0
- package/dist/styles/utils/focus.module.css.cjs.map +1 -0
- package/dist/styles/utils/focus.module.css.js +16 -0
- package/dist/styles/utils/focus.module.css.js.map +1 -0
- package/dist/styles/utils/text-decoration.css +7 -0
- package/dist/styles/utils/text-decoration.module.css.cjs +10 -0
- package/dist/styles/utils/text-decoration.module.css.cjs.map +1 -0
- package/dist/styles/utils/text-decoration.module.css.js +10 -0
- package/dist/styles/utils/text-decoration.module.css.js.map +1 -0
- package/dist/styles.css +327 -466
- package/dist/utils/cn/cn.cjs +8 -0
- package/dist/utils/cn/cn.cjs.map +1 -0
- package/dist/utils/cn/cn.js +8 -0
- package/dist/utils/cn/cn.js.map +1 -0
- package/package.json +11 -9
- package/dist/components/Box/Box.d.ts +0 -2
- package/dist/components/Box/Box.d.ts.map +0 -1
- package/dist/components/Box/Box.types.d.ts +0 -24
- package/dist/components/Box/Box.types.d.ts.map +0 -1
- package/dist/components/Box/index.d.ts +0 -3
- package/dist/components/Box/index.d.ts.map +0 -1
- package/dist/components/Dialog/Dialog.d.ts +0 -3
- package/dist/components/Dialog/Dialog.d.ts.map +0 -1
- package/dist/components/Dialog/Dialog.types.d.ts +0 -45
- package/dist/components/Dialog/Dialog.types.d.ts.map +0 -1
- package/dist/components/Dialog/index.d.ts +0 -3
- package/dist/components/Dialog/index.d.ts.map +0 -1
- package/dist/components/Tooltip/Tooltip.d.ts +0 -3
- package/dist/components/Tooltip/Tooltip.d.ts.map +0 -1
- package/dist/components/Tooltip/Tooltip.types.d.ts +0 -39
- package/dist/components/Tooltip/Tooltip.types.d.ts.map +0 -1
- package/dist/components/Tooltip/index.d.ts +0 -3
- package/dist/components/index.d.ts +0 -5
- package/dist/components/index.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ React component library for the DNA Design System. Built with TypeScript, CSS Mo
|
|
|
17
17
|
- Themed with design tokens from `@dnanpm/design-tokens`
|
|
18
18
|
- Supports server-side rendering and tree-shaking
|
|
19
19
|
- Comprehensive documentation and examples
|
|
20
|
-
-
|
|
20
|
+
- One-line CSS setup via `styles.css`
|
|
21
21
|
- Selective exports for optimal bundle sizes
|
|
22
22
|
|
|
23
23
|
## Installation
|
|
@@ -29,54 +29,23 @@ pnpm add @dnanpm/ui-components @dnanpm/design-tokens
|
|
|
29
29
|
## Usage
|
|
30
30
|
|
|
31
31
|
```tsx
|
|
32
|
-
import {
|
|
32
|
+
import { Breadcrumb } from '@dnanpm/ui-components';
|
|
33
33
|
import '@dnanpm/ui-components/styles.css';
|
|
34
34
|
|
|
35
|
+
const items = [
|
|
36
|
+
{ label: 'Home', href: '/' },
|
|
37
|
+
{ label: 'Products', href: '/products' },
|
|
38
|
+
{ label: 'Mobile Plans', href: '/products/mobile' },
|
|
39
|
+
];
|
|
40
|
+
|
|
35
41
|
function App() {
|
|
36
|
-
return
|
|
37
|
-
<div>
|
|
38
|
-
<Button variant="primary">Primary Button</Button>
|
|
39
|
-
<Button variant="secondary" size="small">
|
|
40
|
-
Small Secondary
|
|
41
|
-
</Button>
|
|
42
|
-
<Button loading>Processing...</Button>
|
|
43
|
-
|
|
44
|
-
<Box elevation="high">
|
|
45
|
-
<h2>Elevated Content</h2>
|
|
46
|
-
</Box>
|
|
47
|
-
|
|
48
|
-
<Tooltip content="Additional context lives behind the same DNA API.">
|
|
49
|
-
<Button aria-label="Show more information" variant="secondary">
|
|
50
|
-
Hover me
|
|
51
|
-
</Button>
|
|
52
|
-
</Tooltip>
|
|
53
|
-
|
|
54
|
-
<Dialog
|
|
55
|
-
trigger={<Button>Open dialog</Button>}
|
|
56
|
-
title="Project details"
|
|
57
|
-
description="Implementation stays internal to the design system."
|
|
58
|
-
footer={<Button>Done</Button>}
|
|
59
|
-
>
|
|
60
|
-
<p>
|
|
61
|
-
Consumers use the same component contract regardless of what powers it
|
|
62
|
-
underneath.
|
|
63
|
-
</p>
|
|
64
|
-
</Dialog>
|
|
65
|
-
</div>
|
|
66
|
-
);
|
|
42
|
+
return <Breadcrumb items={items} />;
|
|
67
43
|
}
|
|
68
44
|
```
|
|
69
45
|
|
|
70
46
|
## Implementation Model
|
|
71
47
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
- `Plain React` components, written entirely in-house.
|
|
75
|
-
- `Base UI` components, where the public DNA API is built on top of a headless library primitive directly in the component file.
|
|
76
|
-
|
|
77
|
-
Consumers should not need to know which path a component uses. Public names, props, and behavior belong to DNA; implementation choices stay internal.
|
|
78
|
-
|
|
79
|
-
Design tokens are available as CSS custom properties: `var(--colors-primitive-pink-500)`, `var(--spacing-ui-md)`, etc.
|
|
48
|
+
Components are written as plain React function components with CSS Modules and BEM naming. Design tokens are available as CSS custom properties: `var(--color-semantic-foreground-default)`, `var(--spacing-ui-md)`, etc.
|
|
80
49
|
|
|
81
50
|
### Tree-shaking
|
|
82
51
|
|
|
@@ -84,7 +53,7 @@ This package uses selective exports to optimize bundle sizes. Import only what y
|
|
|
84
53
|
|
|
85
54
|
```tsx
|
|
86
55
|
// ✅ Good: Named imports (tree-shakeable)
|
|
87
|
-
import {
|
|
56
|
+
import { Breadcrumb } from '@dnanpm/ui-components';
|
|
88
57
|
|
|
89
58
|
// ❌ Avoid: Wildcard imports (larger bundle)
|
|
90
59
|
import * as UI from '@dnanpm/ui-components';
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const Accordion_utils = require("./Accordion.utils.cjs");
|
|
6
|
+
const Accordion_module = require("./Accordion.module.css.cjs");
|
|
7
|
+
const cn = require("../../utils/cn/cn.cjs");
|
|
8
|
+
const Accordion = ({
|
|
9
|
+
variant = "box",
|
|
10
|
+
autoCollapsible = false,
|
|
11
|
+
children,
|
|
12
|
+
className,
|
|
13
|
+
ref,
|
|
14
|
+
...props
|
|
15
|
+
}) => {
|
|
16
|
+
const groupName = react.useId();
|
|
17
|
+
const contextValue = react.useMemo(
|
|
18
|
+
() => ({ variant, groupName: autoCollapsible ? groupName : void 0 }),
|
|
19
|
+
[variant, autoCollapsible, groupName]
|
|
20
|
+
);
|
|
21
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Accordion_utils.AccordionContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
22
|
+
"div",
|
|
23
|
+
{
|
|
24
|
+
ref,
|
|
25
|
+
className: cn.cn(Accordion_module.default.accordion, Accordion_module.default[`accordion--${variant}`], className),
|
|
26
|
+
...props,
|
|
27
|
+
children
|
|
28
|
+
}
|
|
29
|
+
) });
|
|
30
|
+
};
|
|
31
|
+
exports.Accordion = Accordion;
|
|
32
|
+
//# sourceMappingURL=Accordion.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.cjs","sources":["../../../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import { useId, useMemo } from 'react';\nimport { cn } from '../../utils/cn';\nimport { AccordionContext } from './Accordion.utils';\nimport styles from './Accordion.module.css';\nimport type { AccordionProps } from './Accordion.types';\n\nexport const Accordion = ({\n variant = 'box',\n autoCollapsible = false,\n children,\n className,\n ref,\n ...props\n}: AccordionProps) => {\n const groupName = useId();\n const contextValue = useMemo(\n () => ({ variant, groupName: autoCollapsible ? groupName : undefined }),\n [variant, autoCollapsible, groupName],\n );\n\n return (\n <AccordionContext.Provider value={contextValue}>\n <div\n ref={ref}\n className={cn(styles.accordion, styles[`accordion--${variant}`], className)}\n {...props}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n );\n};\n"],"names":["useId","useMemo","jsx","AccordionContext","cn","styles"],"mappings":";;;;;;;AAMO,MAAM,YAAY,CAAC;AAAA,EACtB,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACP,MAAsB;AAClB,QAAM,YAAYA,MAAAA,MAAA;AAClB,QAAM,eAAeC,MAAAA;AAAAA,IACjB,OAAO,EAAE,SAAS,WAAW,kBAAkB,YAAY,OAAA;AAAA,IAC3D,CAAC,SAAS,iBAAiB,SAAS;AAAA,EAAA;AAGxC,SACIC,2BAAAA,IAACC,gBAAAA,iBAAiB,UAAjB,EAA0B,OAAO,cAC9B,UAAAD,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA,WAAWE,GAAAA,GAAGC,iBAAAA,QAAO,WAAWA,iBAAAA,QAAO,cAAc,OAAO,EAAE,GAAG,SAAS;AAAA,MACzE,GAAG;AAAA,MAEH;AAAA,IAAA;AAAA,EAAA,GAET;AAER;;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
@layer dna-design-system {/**
|
|
2
|
+
* Accordion Component Styles
|
|
3
|
+
*
|
|
4
|
+
* Layout wrapper that spaces AccordionItem children evenly.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
._accordion_oi7d7_7 {
|
|
8
|
+
display: flex;
|
|
9
|
+
flex-direction: column;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
._accordion--box_oi7d7_12 {
|
|
13
|
+
gap: var(--spacing-ui-md);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
._accordion--panel_oi7d7_16 {
|
|
17
|
+
gap: 0;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../src/components/Accordion/Accordion.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,eAAO,MAAM,SAAS,GAAI,kEAOvB,cAAc,4CAkBhB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useId, useMemo } from "react";
|
|
3
|
+
import { AccordionContext } from "./Accordion.utils.js";
|
|
4
|
+
import styles from "./Accordion.module.css.js";
|
|
5
|
+
import { cn } from "../../utils/cn/cn.js";
|
|
6
|
+
const Accordion = ({
|
|
7
|
+
variant = "box",
|
|
8
|
+
autoCollapsible = false,
|
|
9
|
+
children,
|
|
10
|
+
className,
|
|
11
|
+
ref,
|
|
12
|
+
...props
|
|
13
|
+
}) => {
|
|
14
|
+
const groupName = useId();
|
|
15
|
+
const contextValue = useMemo(
|
|
16
|
+
() => ({ variant, groupName: autoCollapsible ? groupName : void 0 }),
|
|
17
|
+
[variant, autoCollapsible, groupName]
|
|
18
|
+
);
|
|
19
|
+
return /* @__PURE__ */ jsx(AccordionContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
|
|
20
|
+
"div",
|
|
21
|
+
{
|
|
22
|
+
ref,
|
|
23
|
+
className: cn(styles.accordion, styles[`accordion--${variant}`], className),
|
|
24
|
+
...props,
|
|
25
|
+
children
|
|
26
|
+
}
|
|
27
|
+
) });
|
|
28
|
+
};
|
|
29
|
+
export {
|
|
30
|
+
Accordion
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=Accordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.js","sources":["../../../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import { useId, useMemo } from 'react';\nimport { cn } from '../../utils/cn';\nimport { AccordionContext } from './Accordion.utils';\nimport styles from './Accordion.module.css';\nimport type { AccordionProps } from './Accordion.types';\n\nexport const Accordion = ({\n variant = 'box',\n autoCollapsible = false,\n children,\n className,\n ref,\n ...props\n}: AccordionProps) => {\n const groupName = useId();\n const contextValue = useMemo(\n () => ({ variant, groupName: autoCollapsible ? groupName : undefined }),\n [variant, autoCollapsible, groupName],\n );\n\n return (\n <AccordionContext.Provider value={contextValue}>\n <div\n ref={ref}\n className={cn(styles.accordion, styles[`accordion--${variant}`], className)}\n {...props}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n );\n};\n"],"names":[],"mappings":";;;;;AAMO,MAAM,YAAY,CAAC;AAAA,EACtB,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACP,MAAsB;AAClB,QAAM,YAAY,MAAA;AAClB,QAAM,eAAe;AAAA,IACjB,OAAO,EAAE,SAAS,WAAW,kBAAkB,YAAY,OAAA;AAAA,IAC3D,CAAC,SAAS,iBAAiB,SAAS;AAAA,EAAA;AAGxC,SACI,oBAAC,iBAAiB,UAAjB,EAA0B,OAAO,cAC9B,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA,WAAW,GAAG,OAAO,WAAW,OAAO,cAAc,OAAO,EAAE,GAAG,SAAS;AAAA,MACzE,GAAG;AAAA,MAEH;AAAA,IAAA;AAAA,EAAA,GAET;AAER;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require('./Accordion.css');
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
4
|
+
const accordion = "_accordion_oi7d7_7";
|
|
5
|
+
const styles = {
|
|
6
|
+
accordion,
|
|
7
|
+
"accordion--box": "_accordion--box_oi7d7_12",
|
|
8
|
+
"accordion--panel": "_accordion--panel_oi7d7_16"
|
|
9
|
+
};
|
|
10
|
+
exports.accordion = accordion;
|
|
11
|
+
exports.default = styles;
|
|
12
|
+
//# sourceMappingURL=Accordion.module.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import './Accordion.css';
|
|
2
|
+
const accordion = "_accordion_oi7d7_7";
|
|
3
|
+
const styles = {
|
|
4
|
+
accordion,
|
|
5
|
+
"accordion--box": "_accordion--box_oi7d7_12",
|
|
6
|
+
"accordion--panel": "_accordion--panel_oi7d7_16"
|
|
7
|
+
};
|
|
8
|
+
export {
|
|
9
|
+
accordion,
|
|
10
|
+
styles as default
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=Accordion.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ComponentPropsWithRef, ReactNode } from 'react';
|
|
2
|
+
export interface AccordionProps extends ComponentPropsWithRef<'div'> {
|
|
3
|
+
/**
|
|
4
|
+
* Visual style variant that controls spacing between items.
|
|
5
|
+
* - `box`: 16px gap between items
|
|
6
|
+
* - `panel`: no gap between items (items stack flush)
|
|
7
|
+
* @default 'box'
|
|
8
|
+
*/
|
|
9
|
+
readonly variant?: 'box' | 'panel';
|
|
10
|
+
/**
|
|
11
|
+
* When true, only one AccordionItem can be open at a time.
|
|
12
|
+
* Uses the native `<details>` `name` attribute to create an exclusive group.
|
|
13
|
+
* @default false
|
|
14
|
+
*/
|
|
15
|
+
readonly autoCollapsible?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* AccordionItem elements to render within the accordion group.
|
|
18
|
+
*/
|
|
19
|
+
readonly children: ReactNode;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=Accordion.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.types.d.ts","sourceRoot":"","sources":["../../../src/components/Accordion/Accordion.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D,MAAM,WAAW,cAAe,SAAQ,qBAAqB,CAAC,KAAK,CAAC;IAChE;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;CAChC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const react = require("react");
|
|
4
|
+
const AccordionContext = react.createContext({ variant: "box" });
|
|
5
|
+
const useAccordionContext = () => react.useContext(AccordionContext);
|
|
6
|
+
exports.AccordionContext = AccordionContext;
|
|
7
|
+
exports.useAccordionContext = useAccordionContext;
|
|
8
|
+
//# sourceMappingURL=Accordion.utils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.utils.cjs","sources":["../../../src/components/Accordion/Accordion.utils.ts"],"sourcesContent":["import { createContext, useContext } from 'react';\n\ninterface AccordionContextValue {\n variant: 'box' | 'panel';\n groupName?: string;\n}\n\nexport const AccordionContext = createContext<AccordionContextValue>({ variant: 'box' });\n\nexport const useAccordionContext = () => useContext(AccordionContext);\n"],"names":["createContext","useContext"],"mappings":";;;AAOO,MAAM,mBAAmBA,MAAAA,cAAqC,EAAE,SAAS,OAAO;AAEhF,MAAM,sBAAsB,MAAMC,MAAAA,WAAW,gBAAgB;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface AccordionContextValue {
|
|
2
|
+
variant: 'box' | 'panel';
|
|
3
|
+
groupName?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare const AccordionContext: import('react').Context<AccordionContextValue>;
|
|
6
|
+
export declare const useAccordionContext: () => AccordionContextValue;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=Accordion.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.utils.d.ts","sourceRoot":"","sources":["../../../src/components/Accordion/Accordion.utils.ts"],"names":[],"mappings":"AAEA,UAAU,qBAAqB;IAC3B,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,gBAAgB,gDAA2D,CAAC;AAEzF,eAAO,MAAM,mBAAmB,6BAAqC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
const AccordionContext = createContext({ variant: "box" });
|
|
3
|
+
const useAccordionContext = () => useContext(AccordionContext);
|
|
4
|
+
export {
|
|
5
|
+
AccordionContext,
|
|
6
|
+
useAccordionContext
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=Accordion.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.utils.js","sources":["../../../src/components/Accordion/Accordion.utils.ts"],"sourcesContent":["import { createContext, useContext } from 'react';\n\ninterface AccordionContextValue {\n variant: 'box' | 'panel';\n groupName?: string;\n}\n\nexport const AccordionContext = createContext<AccordionContextValue>({ variant: 'box' });\n\nexport const useAccordionContext = () => useContext(AccordionContext);\n"],"names":[],"mappings":";AAOO,MAAM,mBAAmB,cAAqC,EAAE,SAAS,OAAO;AAEhF,MAAM,sBAAsB,MAAM,WAAW,gBAAgB;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Accordion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const icons = require("@dnanpm/icons");
|
|
5
|
+
const Accordion_utils = require("../Accordion/Accordion.utils.cjs");
|
|
6
|
+
const elevation_module = require("../../styles/utils/elevation.module.css.cjs");
|
|
7
|
+
const focus_module = require("../../styles/utils/focus.module.css.cjs");
|
|
8
|
+
const AccordionItem_module = require("./AccordionItem.module.css.cjs");
|
|
9
|
+
const cn = require("../../utils/cn/cn.cjs");
|
|
10
|
+
const AccordionItem = ({
|
|
11
|
+
label,
|
|
12
|
+
variant: variantProp,
|
|
13
|
+
image,
|
|
14
|
+
imageSize,
|
|
15
|
+
children,
|
|
16
|
+
className,
|
|
17
|
+
name,
|
|
18
|
+
ref,
|
|
19
|
+
...props
|
|
20
|
+
}) => {
|
|
21
|
+
const { variant: contextVariant, groupName } = Accordion_utils.useAccordionContext();
|
|
22
|
+
const variant = variantProp ?? contextVariant;
|
|
23
|
+
const resolvedImageSize = image ? imageSize ?? "md" : void 0;
|
|
24
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
25
|
+
"details",
|
|
26
|
+
{
|
|
27
|
+
ref,
|
|
28
|
+
className: cn.cn(
|
|
29
|
+
AccordionItem_module["accordion-item"],
|
|
30
|
+
AccordionItem_module[`accordion-item--${variant}`],
|
|
31
|
+
variant === "box" && elevation_module.default.elevationLow,
|
|
32
|
+
className
|
|
33
|
+
),
|
|
34
|
+
...props,
|
|
35
|
+
name: groupName ?? name,
|
|
36
|
+
children: [
|
|
37
|
+
/* @__PURE__ */ jsxRuntime.jsxs("summary", { className: cn.cn(AccordionItem_module["accordion-item__summary"], focus_module.default.focusableInset), children: [
|
|
38
|
+
image && /* @__PURE__ */ jsxRuntime.jsx(
|
|
39
|
+
"span",
|
|
40
|
+
{
|
|
41
|
+
className: cn.cn(
|
|
42
|
+
AccordionItem_module["accordion-item__image"],
|
|
43
|
+
resolvedImageSize && AccordionItem_module[`accordion-item__image--${resolvedImageSize}`]
|
|
44
|
+
),
|
|
45
|
+
children: image
|
|
46
|
+
}
|
|
47
|
+
),
|
|
48
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: AccordionItem_module["accordion-item__label"], children: label }),
|
|
49
|
+
/* @__PURE__ */ jsxRuntime.jsx(icons.ChevronDown, { className: AccordionItem_module["accordion-item__chevron"], "aria-hidden": "true" })
|
|
50
|
+
] }),
|
|
51
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: AccordionItem_module["accordion-item__content"], children })
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
};
|
|
56
|
+
exports.AccordionItem = AccordionItem;
|
|
57
|
+
//# sourceMappingURL=AccordionItem.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionItem.cjs","sources":["../../../src/components/AccordionItem/AccordionItem.tsx"],"sourcesContent":["import { ChevronDown } from '@dnanpm/icons';\nimport { cn } from '../../utils/cn';\nimport { useAccordionContext } from '../Accordion/Accordion.utils';\nimport elevationStyles from '../../styles/utils/elevation.module.css';\nimport focusStyles from '../../styles/utils/focus.module.css';\nimport styles from './AccordionItem.module.css';\nimport type { AccordionItemProps } from './AccordionItem.types';\n\nexport const AccordionItem = ({\n label,\n variant: variantProp,\n image,\n imageSize,\n children,\n className,\n name,\n ref,\n ...props\n}: AccordionItemProps) => {\n const { variant: contextVariant, groupName } = useAccordionContext();\n const variant = variantProp ?? contextVariant;\n const resolvedImageSize = image ? (imageSize ?? 'md') : undefined;\n\n return (\n <details\n ref={ref}\n className={cn(\n styles['accordion-item'],\n styles[`accordion-item--${variant}`],\n variant === 'box' && elevationStyles.elevationLow,\n className,\n )}\n {...props}\n name={groupName ?? name}\n >\n <summary className={cn(styles['accordion-item__summary'], focusStyles.focusableInset)}>\n {image && (\n <span\n className={cn(\n styles['accordion-item__image'],\n resolvedImageSize &&\n styles[`accordion-item__image--${resolvedImageSize}`],\n )}\n >\n {image}\n </span>\n )}\n <span className={styles['accordion-item__label']}>{label}</span>\n <ChevronDown className={styles['accordion-item__chevron']} aria-hidden=\"true\" />\n </summary>\n <div className={styles['accordion-item__content']}>{children}</div>\n </details>\n );\n};\n"],"names":["useAccordionContext","jsxs","cn","styles","elevationStyles","focusStyles","jsx","ChevronDown"],"mappings":";;;;;;;;;AAQO,MAAM,gBAAgB,CAAC;AAAA,EAC1B;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACP,MAA0B;AACtB,QAAM,EAAE,SAAS,gBAAgB,UAAA,IAAcA,gBAAAA,oBAAA;AAC/C,QAAM,UAAU,eAAe;AAC/B,QAAM,oBAAoB,QAAS,aAAa,OAAQ;AAExD,SACIC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA,WAAWC,GAAAA;AAAAA,QACPC,qBAAO,gBAAgB;AAAA,QACvBA,qBAAO,mBAAmB,OAAO,EAAE;AAAA,QACnC,YAAY,SAASC,iBAAAA,QAAgB;AAAA,QACrC;AAAA,MAAA;AAAA,MAEH,GAAG;AAAA,MACJ,MAAM,aAAa;AAAA,MAEnB,UAAA;AAAA,QAAAH,2BAAAA,KAAC,WAAA,EAAQ,WAAWC,MAAGC,qBAAO,yBAAyB,GAAGE,aAAAA,QAAY,cAAc,GAC/E,UAAA;AAAA,UAAA,SACGC,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAWJ,GAAAA;AAAAA,gBACPC,qBAAO,uBAAuB;AAAA,gBAC9B,qBACIA,qBAAO,0BAA0B,iBAAiB,EAAE;AAAA,cAAA;AAAA,cAG3D,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,yCAGR,QAAA,EAAK,WAAWA,qBAAO,uBAAuB,GAAI,UAAA,OAAM;AAAA,yCACxDI,MAAAA,aAAA,EAAY,WAAWJ,qBAAO,yBAAyB,GAAG,eAAY,OAAA,CAAO;AAAA,QAAA,GAClF;AAAA,uCACC,OAAA,EAAI,WAAWA,qBAAO,yBAAyB,GAAI,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGzE;;"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
@layer dna-design-system {/**
|
|
2
|
+
* AccordionItem Component Styles
|
|
3
|
+
*
|
|
4
|
+
* Uses native <details> element for expand/collapse behavior.
|
|
5
|
+
* Two variants: box (elevated card) and panel (flat bordered).
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/* === Box variant === */
|
|
9
|
+
|
|
10
|
+
._accordion-item--box_8bxcn_10 {
|
|
11
|
+
background: var(--color-semantic-surface-base);
|
|
12
|
+
color: var(--color-semantic-foreground-default);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* === Panel variant === */
|
|
16
|
+
/* Inherits text color from parent context intentionally */
|
|
17
|
+
|
|
18
|
+
._accordion-item--panel_8bxcn_18 {
|
|
19
|
+
border-bottom: var(--borderwidth-semantic-xs) solid var(--color-semantic-border-neutral-mid);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* === Summary (clickable header) === */
|
|
23
|
+
|
|
24
|
+
._accordion-item__summary_8bxcn_24 {
|
|
25
|
+
display: flex;
|
|
26
|
+
align-items: center;
|
|
27
|
+
gap: var(--spacing-ui-lg);
|
|
28
|
+
padding: var(--spacing-ui-md) var(--spacing-ui-lg);
|
|
29
|
+
cursor: pointer;
|
|
30
|
+
list-style: none;
|
|
31
|
+
user-select: none;
|
|
32
|
+
border-radius: var(--radius-semantic-md);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* Remove default marker in all browsers */
|
|
36
|
+
._accordion-item__summary_8bxcn_24::-webkit-details-marker,
|
|
37
|
+
._accordion-item__summary_8bxcn_24::marker {
|
|
38
|
+
display: none;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* === Image === */
|
|
42
|
+
|
|
43
|
+
._accordion-item__image_8bxcn_43 {
|
|
44
|
+
display: flex;
|
|
45
|
+
align-items: center;
|
|
46
|
+
justify-content: center;
|
|
47
|
+
flex: 0 0 auto;
|
|
48
|
+
overflow: hidden;
|
|
49
|
+
|
|
50
|
+
& > img,
|
|
51
|
+
& > svg {
|
|
52
|
+
max-width: 100%;
|
|
53
|
+
max-height: 100%;
|
|
54
|
+
display: block;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* === Image size variants === */
|
|
59
|
+
|
|
60
|
+
._accordion-item__image--sm_8bxcn_60 {
|
|
61
|
+
width: 1.5rem;
|
|
62
|
+
height: 1.5rem;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
._accordion-item__image--md_8bxcn_65 {
|
|
66
|
+
width: 2.5rem;
|
|
67
|
+
height: 2.5rem;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
._accordion-item__image--lg_8bxcn_70 {
|
|
71
|
+
width: 5rem;
|
|
72
|
+
height: 5rem;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* === Label === */
|
|
76
|
+
|
|
77
|
+
._accordion-item__label_8bxcn_77 {
|
|
78
|
+
flex: 1 1 auto;
|
|
79
|
+
min-width: 0;
|
|
80
|
+
font-weight: var(--typography-font-weight-bold);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* === Chevron icon === */
|
|
84
|
+
|
|
85
|
+
._accordion-item__chevron_8bxcn_85 {
|
|
86
|
+
flex: 0 0 auto;
|
|
87
|
+
width: 1.5rem;
|
|
88
|
+
height: 1.5rem;
|
|
89
|
+
transition: transform 0.2s ease-in-out;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
._accordion-item_8bxcn_10[open] > ._accordion-item__summary_8bxcn_24 ._accordion-item__chevron_8bxcn_85 {
|
|
93
|
+
transform: rotate(180deg);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* === Content area === */
|
|
97
|
+
|
|
98
|
+
._accordion-item__content_8bxcn_98 {
|
|
99
|
+
padding: 0 var(--spacing-ui-lg) var(--spacing-ui-lg);
|
|
100
|
+
|
|
101
|
+
& > *:last-child {
|
|
102
|
+
margin-bottom: 0;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/* === Animation === */
|
|
107
|
+
._accordion-item_8bxcn_10::details-content {
|
|
108
|
+
display: block;
|
|
109
|
+
block-size: 0;
|
|
110
|
+
opacity: 0;
|
|
111
|
+
overflow: hidden;
|
|
112
|
+
@supports (interpolate-size: allow-keywords) {
|
|
113
|
+
transition-property: block-size, content-visibility, opacity;
|
|
114
|
+
transition-duration: 0.2s;
|
|
115
|
+
transition-timing-function: ease-in-out;
|
|
116
|
+
transition-behavior: allow-discrete;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
._accordion-item_8bxcn_10[open]::details-content {
|
|
120
|
+
/* Fallback for browsers that don't support calc-size() function */
|
|
121
|
+
block-size: auto;
|
|
122
|
+
opacity: 1;
|
|
123
|
+
@supports (interpolate-size: allow-keywords) {
|
|
124
|
+
/* calc-size() function allows transition to height: auto; */
|
|
125
|
+
block-size: calc-size(auto, size);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { AccordionItemProps } from './AccordionItem.types';
|
|
2
|
+
export declare const AccordionItem: ({ label, variant: variantProp, image, imageSize, children, className, name, ref, ...props }: AccordionItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
//# sourceMappingURL=AccordionItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionItem.d.ts","sourceRoot":"","sources":["../../../src/components/AccordionItem/AccordionItem.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,eAAO,MAAM,aAAa,GAAI,6FAU3B,kBAAkB,4CAmCpB,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { ChevronDown } from "@dnanpm/icons";
|
|
3
|
+
import { useAccordionContext } from "../Accordion/Accordion.utils.js";
|
|
4
|
+
import elevationStyles from "../../styles/utils/elevation.module.css.js";
|
|
5
|
+
import focusStyles from "../../styles/utils/focus.module.css.js";
|
|
6
|
+
import styles from "./AccordionItem.module.css.js";
|
|
7
|
+
import { cn } from "../../utils/cn/cn.js";
|
|
8
|
+
const AccordionItem = ({
|
|
9
|
+
label,
|
|
10
|
+
variant: variantProp,
|
|
11
|
+
image,
|
|
12
|
+
imageSize,
|
|
13
|
+
children,
|
|
14
|
+
className,
|
|
15
|
+
name,
|
|
16
|
+
ref,
|
|
17
|
+
...props
|
|
18
|
+
}) => {
|
|
19
|
+
const { variant: contextVariant, groupName } = useAccordionContext();
|
|
20
|
+
const variant = variantProp ?? contextVariant;
|
|
21
|
+
const resolvedImageSize = image ? imageSize ?? "md" : void 0;
|
|
22
|
+
return /* @__PURE__ */ jsxs(
|
|
23
|
+
"details",
|
|
24
|
+
{
|
|
25
|
+
ref,
|
|
26
|
+
className: cn(
|
|
27
|
+
styles["accordion-item"],
|
|
28
|
+
styles[`accordion-item--${variant}`],
|
|
29
|
+
variant === "box" && elevationStyles.elevationLow,
|
|
30
|
+
className
|
|
31
|
+
),
|
|
32
|
+
...props,
|
|
33
|
+
name: groupName ?? name,
|
|
34
|
+
children: [
|
|
35
|
+
/* @__PURE__ */ jsxs("summary", { className: cn(styles["accordion-item__summary"], focusStyles.focusableInset), children: [
|
|
36
|
+
image && /* @__PURE__ */ jsx(
|
|
37
|
+
"span",
|
|
38
|
+
{
|
|
39
|
+
className: cn(
|
|
40
|
+
styles["accordion-item__image"],
|
|
41
|
+
resolvedImageSize && styles[`accordion-item__image--${resolvedImageSize}`]
|
|
42
|
+
),
|
|
43
|
+
children: image
|
|
44
|
+
}
|
|
45
|
+
),
|
|
46
|
+
/* @__PURE__ */ jsx("span", { className: styles["accordion-item__label"], children: label }),
|
|
47
|
+
/* @__PURE__ */ jsx(ChevronDown, { className: styles["accordion-item__chevron"], "aria-hidden": "true" })
|
|
48
|
+
] }),
|
|
49
|
+
/* @__PURE__ */ jsx("div", { className: styles["accordion-item__content"], children })
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
};
|
|
54
|
+
export {
|
|
55
|
+
AccordionItem
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=AccordionItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionItem.js","sources":["../../../src/components/AccordionItem/AccordionItem.tsx"],"sourcesContent":["import { ChevronDown } from '@dnanpm/icons';\nimport { cn } from '../../utils/cn';\nimport { useAccordionContext } from '../Accordion/Accordion.utils';\nimport elevationStyles from '../../styles/utils/elevation.module.css';\nimport focusStyles from '../../styles/utils/focus.module.css';\nimport styles from './AccordionItem.module.css';\nimport type { AccordionItemProps } from './AccordionItem.types';\n\nexport const AccordionItem = ({\n label,\n variant: variantProp,\n image,\n imageSize,\n children,\n className,\n name,\n ref,\n ...props\n}: AccordionItemProps) => {\n const { variant: contextVariant, groupName } = useAccordionContext();\n const variant = variantProp ?? contextVariant;\n const resolvedImageSize = image ? (imageSize ?? 'md') : undefined;\n\n return (\n <details\n ref={ref}\n className={cn(\n styles['accordion-item'],\n styles[`accordion-item--${variant}`],\n variant === 'box' && elevationStyles.elevationLow,\n className,\n )}\n {...props}\n name={groupName ?? name}\n >\n <summary className={cn(styles['accordion-item__summary'], focusStyles.focusableInset)}>\n {image && (\n <span\n className={cn(\n styles['accordion-item__image'],\n resolvedImageSize &&\n styles[`accordion-item__image--${resolvedImageSize}`],\n )}\n >\n {image}\n </span>\n )}\n <span className={styles['accordion-item__label']}>{label}</span>\n <ChevronDown className={styles['accordion-item__chevron']} aria-hidden=\"true\" />\n </summary>\n <div className={styles['accordion-item__content']}>{children}</div>\n </details>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAQO,MAAM,gBAAgB,CAAC;AAAA,EAC1B;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACP,MAA0B;AACtB,QAAM,EAAE,SAAS,gBAAgB,UAAA,IAAc,oBAAA;AAC/C,QAAM,UAAU,eAAe;AAC/B,QAAM,oBAAoB,QAAS,aAAa,OAAQ;AAExD,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA,WAAW;AAAA,QACP,OAAO,gBAAgB;AAAA,QACvB,OAAO,mBAAmB,OAAO,EAAE;AAAA,QACnC,YAAY,SAAS,gBAAgB;AAAA,QACrC;AAAA,MAAA;AAAA,MAEH,GAAG;AAAA,MACJ,MAAM,aAAa;AAAA,MAEnB,UAAA;AAAA,QAAA,qBAAC,WAAA,EAAQ,WAAW,GAAG,OAAO,yBAAyB,GAAG,YAAY,cAAc,GAC/E,UAAA;AAAA,UAAA,SACG;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAW;AAAA,gBACP,OAAO,uBAAuB;AAAA,gBAC9B,qBACI,OAAO,0BAA0B,iBAAiB,EAAE;AAAA,cAAA;AAAA,cAG3D,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,8BAGR,QAAA,EAAK,WAAW,OAAO,uBAAuB,GAAI,UAAA,OAAM;AAAA,8BACxD,aAAA,EAAY,WAAW,OAAO,yBAAyB,GAAG,eAAY,OAAA,CAAO;AAAA,QAAA,GAClF;AAAA,4BACC,OAAA,EAAI,WAAW,OAAO,yBAAyB,GAAI,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGzE;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require('./AccordionItem.css');
|
|
2
|
+
"use strict";
|
|
3
|
+
const styles = {
|
|
4
|
+
"accordion-item--box": "_accordion-item--box_8bxcn_10",
|
|
5
|
+
"accordion-item--panel": "_accordion-item--panel_8bxcn_18",
|
|
6
|
+
"accordion-item__summary": "_accordion-item__summary_8bxcn_24",
|
|
7
|
+
"accordion-item__image": "_accordion-item__image_8bxcn_43",
|
|
8
|
+
"accordion-item__image--sm": "_accordion-item__image--sm_8bxcn_60",
|
|
9
|
+
"accordion-item__image--md": "_accordion-item__image--md_8bxcn_65",
|
|
10
|
+
"accordion-item__image--lg": "_accordion-item__image--lg_8bxcn_70",
|
|
11
|
+
"accordion-item__label": "_accordion-item__label_8bxcn_77",
|
|
12
|
+
"accordion-item__chevron": "_accordion-item__chevron_8bxcn_85",
|
|
13
|
+
"accordion-item": "_accordion-item_8bxcn_10",
|
|
14
|
+
"accordion-item__content": "_accordion-item__content_8bxcn_98"
|
|
15
|
+
};
|
|
16
|
+
module.exports = styles;
|
|
17
|
+
//# sourceMappingURL=AccordionItem.module.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionItem.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import './AccordionItem.css';
|
|
2
|
+
const styles = {
|
|
3
|
+
"accordion-item--box": "_accordion-item--box_8bxcn_10",
|
|
4
|
+
"accordion-item--panel": "_accordion-item--panel_8bxcn_18",
|
|
5
|
+
"accordion-item__summary": "_accordion-item__summary_8bxcn_24",
|
|
6
|
+
"accordion-item__image": "_accordion-item__image_8bxcn_43",
|
|
7
|
+
"accordion-item__image--sm": "_accordion-item__image--sm_8bxcn_60",
|
|
8
|
+
"accordion-item__image--md": "_accordion-item__image--md_8bxcn_65",
|
|
9
|
+
"accordion-item__image--lg": "_accordion-item__image--lg_8bxcn_70",
|
|
10
|
+
"accordion-item__label": "_accordion-item__label_8bxcn_77",
|
|
11
|
+
"accordion-item__chevron": "_accordion-item__chevron_8bxcn_85",
|
|
12
|
+
"accordion-item": "_accordion-item_8bxcn_10",
|
|
13
|
+
"accordion-item__content": "_accordion-item__content_8bxcn_98"
|
|
14
|
+
};
|
|
15
|
+
export {
|
|
16
|
+
styles as default
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=AccordionItem.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionItem.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ComponentPropsWithRef, ReactNode } from 'react';
|
|
2
|
+
export type ImageSize = 'sm' | 'md' | 'lg';
|
|
3
|
+
export interface AccordionItemProps extends ComponentPropsWithRef<'details'> {
|
|
4
|
+
/**
|
|
5
|
+
* The visible label text displayed in the summary row.
|
|
6
|
+
*/
|
|
7
|
+
readonly label: string;
|
|
8
|
+
/**
|
|
9
|
+
* Visual style variant.
|
|
10
|
+
* - `box`: elevated card with rounded corners and full border
|
|
11
|
+
* - `panel`: flat style with bottom border only
|
|
12
|
+
* @default 'box'
|
|
13
|
+
*/
|
|
14
|
+
readonly variant?: 'box' | 'panel';
|
|
15
|
+
/**
|
|
16
|
+
* Optional image or icon element rendered before the label in the summary row.
|
|
17
|
+
*/
|
|
18
|
+
readonly image?: ReactNode;
|
|
19
|
+
/**
|
|
20
|
+
* Size of the square image area in the summary row.
|
|
21
|
+
* Defaults to `md` when `image` is provided and `imageSize` is not set.
|
|
22
|
+
* - `sm`: 24×24 px
|
|
23
|
+
* - `md`: 40×40 px
|
|
24
|
+
* - `lg`: 80×80 px
|
|
25
|
+
*/
|
|
26
|
+
readonly imageSize?: ImageSize;
|
|
27
|
+
/**
|
|
28
|
+
* The expandable content area. Can contain any React elements.
|
|
29
|
+
*/
|
|
30
|
+
readonly children: ReactNode;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=AccordionItem.types.d.ts.map
|