@dnanpm/ui-components 0.8.0 → 0.10.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 +13 -0
- package/dist/components/Accordion/Accordion.css +9 -2
- package/dist/components/AccordionItem/AccordionItem.cjs +4 -4
- package/dist/components/AccordionItem/AccordionItem.cjs.map +1 -1
- package/dist/components/AccordionItem/AccordionItem.css +8 -2
- package/dist/components/AccordionItem/AccordionItem.d.ts.map +1 -1
- package/dist/components/AccordionItem/AccordionItem.js +2 -2
- package/dist/components/AccordionItem/AccordionItem.js.map +1 -1
- package/dist/components/Avatar/Avatar.cjs +83 -0
- package/dist/components/Avatar/Avatar.cjs.map +1 -0
- package/dist/components/Avatar/Avatar.css +188 -0
- package/dist/components/Avatar/Avatar.d.ts +3 -0
- package/dist/components/Avatar/Avatar.d.ts.map +1 -0
- package/dist/components/Avatar/Avatar.js +83 -0
- package/dist/components/Avatar/Avatar.js.map +1 -0
- package/dist/components/Avatar/Avatar.module.css.cjs +40 -0
- package/dist/components/Avatar/Avatar.module.css.cjs.map +1 -0
- package/dist/components/Avatar/Avatar.module.css.js +40 -0
- package/dist/components/Avatar/Avatar.module.css.js.map +1 -0
- package/dist/components/Avatar/Avatar.types.d.ts +66 -0
- package/dist/components/Avatar/Avatar.types.d.ts.map +1 -0
- package/dist/components/Avatar/Avatar.utils.cjs +17 -0
- package/dist/components/Avatar/Avatar.utils.cjs.map +1 -0
- package/dist/components/Avatar/Avatar.utils.d.ts +6 -0
- package/dist/components/Avatar/Avatar.utils.d.ts.map +1 -0
- package/dist/components/Avatar/Avatar.utils.js +17 -0
- package/dist/components/Avatar/Avatar.utils.js.map +1 -0
- package/dist/components/Avatar/index.d.ts +3 -0
- package/dist/components/Avatar/index.d.ts.map +1 -0
- package/dist/components/Breadcrumb/Breadcrumb.cjs +9 -12
- package/dist/components/Breadcrumb/Breadcrumb.cjs.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.css +20 -17
- package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.js +2 -5
- package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs +5 -8
- package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.module.css.js +5 -8
- package/dist/components/Breadcrumb/Breadcrumb.module.css.js.map +1 -1
- package/dist/components/Button/Button.cjs +29 -3
- package/dist/components/Button/Button.cjs.map +1 -1
- package/dist/components/Button/Button.css +76 -30
- 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 +28 -2
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Button/Button.module.css.cjs +19 -11
- package/dist/components/Button/Button.module.css.cjs.map +1 -1
- package/dist/components/Button/Button.module.css.js +19 -11
- package/dist/components/Button/Button.module.css.js.map +1 -1
- package/dist/components/Button/Button.types.d.ts +20 -3
- 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/ButtonCard/ButtonCard.cjs +19 -14
- package/dist/components/ButtonCard/ButtonCard.cjs.map +1 -1
- package/dist/components/ButtonCard/ButtonCard.css +62 -20
- package/dist/components/ButtonCard/ButtonCard.d.ts +2 -1
- package/dist/components/ButtonCard/ButtonCard.d.ts.map +1 -1
- package/dist/components/ButtonCard/ButtonCard.js +17 -12
- package/dist/components/ButtonCard/ButtonCard.js.map +1 -1
- package/dist/components/ButtonCard/ButtonCard.module.css.cjs +14 -12
- package/dist/components/ButtonCard/ButtonCard.module.css.cjs.map +1 -1
- package/dist/components/ButtonCard/ButtonCard.module.css.js +14 -12
- package/dist/components/ButtonCard/ButtonCard.module.css.js.map +1 -1
- package/dist/components/ButtonCard/ButtonCard.types.d.ts +3 -2
- package/dist/components/ButtonCard/ButtonCard.types.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.cjs +105 -0
- package/dist/components/Checkbox/Checkbox.cjs.map +1 -0
- package/dist/components/Checkbox/Checkbox.css +323 -0
- package/dist/components/Checkbox/Checkbox.d.ts +3 -0
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
- package/dist/components/Checkbox/Checkbox.js +105 -0
- package/dist/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/components/Checkbox/Checkbox.module.css.cjs +35 -0
- package/dist/components/Checkbox/Checkbox.module.css.cjs.map +1 -0
- package/dist/components/Checkbox/Checkbox.module.css.js +35 -0
- package/dist/components/Checkbox/Checkbox.module.css.js.map +1 -0
- package/dist/components/Checkbox/Checkbox.types.d.ts +47 -0
- package/dist/components/Checkbox/Checkbox.types.d.ts.map +1 -0
- package/dist/components/Checkbox/index.d.ts +3 -0
- package/dist/components/Checkbox/index.d.ts.map +1 -0
- package/dist/components/ContentCard/ContentCard.cjs +97 -0
- package/dist/components/ContentCard/ContentCard.cjs.map +1 -0
- package/dist/components/ContentCard/ContentCard.css +254 -0
- package/dist/components/ContentCard/ContentCard.d.ts +3 -0
- package/dist/components/ContentCard/ContentCard.d.ts.map +1 -0
- package/dist/components/ContentCard/ContentCard.js +97 -0
- package/dist/components/ContentCard/ContentCard.js.map +1 -0
- package/dist/components/ContentCard/ContentCard.module.css.cjs +24 -0
- package/dist/components/ContentCard/ContentCard.module.css.cjs.map +1 -0
- package/dist/components/ContentCard/ContentCard.module.css.js +25 -0
- package/dist/components/ContentCard/ContentCard.module.css.js.map +1 -0
- package/dist/components/ContentCard/ContentCard.types.d.ts +100 -0
- package/dist/components/ContentCard/ContentCard.types.d.ts.map +1 -0
- package/dist/components/ContentCard/index.d.ts +3 -0
- package/dist/components/ContentCard/index.d.ts.map +1 -0
- package/dist/components/Drawer/Drawer.cjs +15 -7
- package/dist/components/Drawer/Drawer.cjs.map +1 -1
- package/dist/components/Drawer/Drawer.css +47 -45
- package/dist/components/Drawer/Drawer.d.ts.map +1 -1
- package/dist/components/Drawer/Drawer.js +12 -4
- package/dist/components/Drawer/Drawer.js.map +1 -1
- package/dist/components/Drawer/Drawer.module.css.cjs +16 -16
- package/dist/components/Drawer/Drawer.module.css.js +16 -16
- package/dist/components/Footer/Footer.cjs +8 -9
- package/dist/components/Footer/Footer.cjs.map +1 -1
- package/dist/components/Footer/Footer.css +91 -84
- package/dist/components/Footer/Footer.d.ts.map +1 -1
- package/dist/components/Footer/Footer.js +1 -2
- package/dist/components/Footer/Footer.js.map +1 -1
- package/dist/components/Footer/Footer.module.css.cjs +39 -39
- package/dist/components/Footer/Footer.module.css.js +39 -39
- package/dist/components/FunctionButton/FunctionButton.cjs +2 -2
- package/dist/components/FunctionButton/FunctionButton.cjs.map +1 -1
- package/dist/components/FunctionButton/FunctionButton.css +5 -2
- package/dist/components/FunctionButton/FunctionButton.js +1 -1
- package/dist/components/FunctionButton/FunctionButton.js.map +1 -1
- package/dist/components/Hero/Hero.cjs +30 -29
- package/dist/components/Hero/Hero.cjs.map +1 -1
- package/dist/components/Hero/Hero.css +86 -74
- package/dist/components/Hero/Hero.d.ts +1 -1
- package/dist/components/Hero/Hero.d.ts.map +1 -1
- package/dist/components/Hero/Hero.js +30 -29
- package/dist/components/Hero/Hero.js.map +1 -1
- package/dist/components/Hero/Hero.module.css.cjs +20 -17
- package/dist/components/Hero/Hero.module.css.cjs.map +1 -1
- package/dist/components/Hero/Hero.module.css.js +20 -17
- package/dist/components/Hero/Hero.module.css.js.map +1 -1
- package/dist/components/Hero/Hero.types.d.ts +2 -6
- package/dist/components/Hero/Hero.types.d.ts.map +1 -1
- package/dist/components/IconButton/IconButton.cjs +3 -4
- package/dist/components/IconButton/IconButton.cjs.map +1 -1
- package/dist/components/IconButton/IconButton.css +5 -2
- package/dist/components/IconButton/IconButton.d.ts.map +1 -1
- package/dist/components/IconButton/IconButton.js +1 -2
- package/dist/components/IconButton/IconButton.js.map +1 -1
- package/dist/components/Label/Label.css +5 -2
- package/dist/components/MainNavigation/MainNavigation.cjs +556 -191
- package/dist/components/MainNavigation/MainNavigation.cjs.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.css +297 -170
- package/dist/components/MainNavigation/MainNavigation.d.ts +1 -1
- package/dist/components/MainNavigation/MainNavigation.d.ts.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.js +526 -161
- package/dist/components/MainNavigation/MainNavigation.js.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.module.css.cjs +80 -68
- package/dist/components/MainNavigation/MainNavigation.module.css.cjs.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.module.css.js +80 -68
- package/dist/components/MainNavigation/MainNavigation.module.css.js.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.types.d.ts +55 -21
- package/dist/components/MainNavigation/MainNavigation.types.d.ts.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.utils.cjs +28 -4
- package/dist/components/MainNavigation/MainNavigation.utils.cjs.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.utils.d.ts +11 -1
- package/dist/components/MainNavigation/MainNavigation.utils.d.ts.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.utils.js +28 -4
- package/dist/components/MainNavigation/MainNavigation.utils.js.map +1 -1
- package/dist/components/MainNavigation/index.d.ts +1 -1
- package/dist/components/MainNavigation/index.d.ts.map +1 -1
- package/dist/components/Modal/Modal.cjs +14 -6
- package/dist/components/Modal/Modal.cjs.map +1 -1
- package/dist/components/Modal/Modal.css +43 -40
- package/dist/components/Modal/Modal.d.ts.map +1 -1
- package/dist/components/Modal/Modal.js +12 -4
- package/dist/components/Modal/Modal.js.map +1 -1
- package/dist/components/Modal/Modal.module.css.cjs +18 -18
- package/dist/components/Modal/Modal.module.css.js +18 -18
- package/dist/components/Notification/Notification.cjs +3 -2
- package/dist/components/Notification/Notification.cjs.map +1 -1
- package/dist/components/Notification/Notification.css +20 -12
- package/dist/components/Notification/Notification.d.ts.map +1 -1
- package/dist/components/Notification/Notification.js +2 -1
- package/dist/components/Notification/Notification.js.map +1 -1
- package/dist/components/Notification/Notification.module.css.cjs +9 -9
- package/dist/components/Notification/Notification.module.css.js +9 -9
- package/dist/components/Pagination/Pagination.cjs +142 -0
- package/dist/components/Pagination/Pagination.cjs.map +1 -0
- package/dist/components/Pagination/Pagination.css +256 -0
- package/dist/components/Pagination/Pagination.d.ts +3 -0
- package/dist/components/Pagination/Pagination.d.ts.map +1 -0
- package/dist/components/Pagination/Pagination.js +142 -0
- package/dist/components/Pagination/Pagination.js.map +1 -0
- package/dist/components/Pagination/Pagination.module.css.cjs +34 -0
- package/dist/components/Pagination/Pagination.module.css.cjs.map +1 -0
- package/dist/components/Pagination/Pagination.module.css.js +34 -0
- package/dist/components/Pagination/Pagination.module.css.js.map +1 -0
- package/dist/components/Pagination/Pagination.types.d.ts +20 -0
- package/dist/components/Pagination/Pagination.types.d.ts.map +1 -0
- package/dist/components/Pagination/Pagination.utils.cjs +76 -0
- package/dist/components/Pagination/Pagination.utils.cjs.map +1 -0
- package/dist/components/Pagination/Pagination.utils.d.ts +21 -0
- package/dist/components/Pagination/Pagination.utils.d.ts.map +1 -0
- package/dist/components/Pagination/Pagination.utils.js +76 -0
- package/dist/components/Pagination/Pagination.utils.js.map +1 -0
- package/dist/components/Pagination/index.d.ts +3 -0
- package/dist/components/Pagination/index.d.ts.map +1 -0
- package/dist/components/Pictograph/Pictograph.css +9 -2
- package/dist/components/Pictograph/PictographItem.css +9 -2
- package/dist/components/Quote/Quote.css +5 -2
- package/dist/components/Spinner/Spinner.css +9 -2
- package/dist/design-tokens/dist/tokens.cjs +5 -0
- package/dist/design-tokens/dist/tokens.cjs.map +1 -0
- package/dist/design-tokens/dist/tokens.js +5 -0
- package/dist/design-tokens/dist/tokens.js.map +1 -0
- package/dist/index.cjs +8 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/styles/utilities.css +6 -0
- package/dist/styles/utils/elevation.css +34 -26
- package/dist/styles/utils/focus.css +63 -65
- package/dist/styles/utils/index.cjs +33 -0
- package/dist/styles/utils/index.cjs.map +1 -0
- package/dist/styles/utils/index.d.ts +20 -0
- package/dist/styles/utils/index.d.ts.map +1 -0
- package/dist/styles/utils/index.js +33 -0
- package/dist/styles/utils/index.js.map +1 -0
- package/dist/styles/utils/overlay.css +35 -28
- package/dist/styles/utils/text-decoration.css +19 -12
- package/dist/styles.css +46 -12
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/isRenderable/index.d.ts +2 -0
- package/dist/utils/isRenderable/index.d.ts.map +1 -0
- package/dist/utils/isRenderable/isRenderable.cjs +5 -0
- package/dist/utils/isRenderable/isRenderable.cjs.map +1 -0
- package/dist/utils/isRenderable/isRenderable.d.ts +4 -0
- package/dist/utils/isRenderable/isRenderable.d.ts.map +1 -0
- package/dist/utils/isRenderable/isRenderable.js +5 -0
- package/dist/utils/isRenderable/isRenderable.js.map +1 -0
- package/package.json +12 -4
- package/dist/styles/utils/elevation.module.css.cjs +0 -16
- package/dist/styles/utils/elevation.module.css.cjs.map +0 -1
- package/dist/styles/utils/elevation.module.css.js +0 -16
- package/dist/styles/utils/elevation.module.css.js.map +0 -1
- package/dist/styles/utils/focus.module.css.cjs +0 -16
- package/dist/styles/utils/focus.module.css.cjs.map +0 -1
- package/dist/styles/utils/focus.module.css.js +0 -16
- package/dist/styles/utils/focus.module.css.js.map +0 -1
- package/dist/styles/utils/overlay.module.css.cjs +0 -13
- package/dist/styles/utils/overlay.module.css.cjs.map +0 -1
- package/dist/styles/utils/overlay.module.css.js +0 -13
- package/dist/styles/utils/overlay.module.css.js.map +0 -1
- package/dist/styles/utils/text-decoration.module.css.cjs +0 -13
- package/dist/styles/utils/text-decoration.module.css.cjs.map +0 -1
- package/dist/styles/utils/text-decoration.module.css.js +0 -13
- package/dist/styles/utils/text-decoration.module.css.js.map +0 -1
package/README.md
CHANGED
|
@@ -49,6 +49,19 @@ Components are written as plain React function components with CSS Modules and B
|
|
|
49
49
|
|
|
50
50
|
Typography is applied through the font shorthand presets from `@dnanpm/design-tokens` — `font: var(--typography-body-md)` — rather than by setting `font-family` and friends individually. `@dnanpm/ui-components/styles.css` includes those presets, so no extra import is needed.
|
|
51
51
|
|
|
52
|
+
### Utility styles
|
|
53
|
+
|
|
54
|
+
Reusable utility styles for consumer-owned markup are available as global CSS classes. Import the aggregate stylesheet after the base styles:
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
import '@dnanpm/ui-components/styles.css';
|
|
58
|
+
import '@dnanpm/ui-components/utilities.css';
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
See the [Utility Styles documentation](https://designsystem.dna.fi/?path=/docs/ui-components-utility-styles--docs) for the available classes and examples.
|
|
62
|
+
|
|
63
|
+
Individual stylesheets can be imported when the aggregate is not needed, for example `@dnanpm/ui-components/utilities/elevation.css`. The utility class names and import paths are public API.
|
|
64
|
+
|
|
52
65
|
### Tree-shaking
|
|
53
66
|
|
|
54
67
|
This package uses selective exports to optimize bundle sizes. Import only what you need:
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
@layer dds-components
|
|
1
|
+
@layer dds-base, dds-components;
|
|
2
|
+
|
|
3
|
+
@layer dds-components { @layer fallback, components; }
|
|
4
|
+
|
|
5
|
+
@layer dds-components.components{/**
|
|
2
6
|
* Accordion Component Styles
|
|
3
7
|
*
|
|
4
8
|
* Layout wrapper that spaces AccordionItem children evenly.
|
|
@@ -16,4 +20,7 @@
|
|
|
16
20
|
._accordion--panel_18qm2_16 {
|
|
17
21
|
gap: 0;
|
|
18
22
|
}
|
|
19
|
-
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Do not edit directly, this file was auto-generated.
|
|
26
|
+
*/ }
|
|
@@ -3,8 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const icons = require("@dnanpm/icons");
|
|
5
5
|
const Accordion_utils = require("../Accordion/Accordion.utils.cjs");
|
|
6
|
-
const
|
|
7
|
-
const focus_module = require("../../styles/utils/focus.module.css.cjs");
|
|
6
|
+
const index = require("../../styles/utils/index.cjs");
|
|
8
7
|
const AccordionItem_module = require("./AccordionItem.module.css.cjs");
|
|
9
8
|
const cn = require("../../utils/cn/cn.cjs");
|
|
10
9
|
const AccordionItem = ({
|
|
@@ -28,13 +27,14 @@ const AccordionItem = ({
|
|
|
28
27
|
className: cn.cn(
|
|
29
28
|
AccordionItem_module["accordion-item"],
|
|
30
29
|
AccordionItem_module[`accordion-item--${variant}`],
|
|
31
|
-
variant === "box" &&
|
|
30
|
+
variant === "box" && index.elevationStyles.elevationLow,
|
|
32
31
|
className
|
|
33
32
|
),
|
|
34
33
|
...props,
|
|
34
|
+
...variant === "box" ? { "data-color-scheme": "light" } : {},
|
|
35
35
|
name: groupName ?? name,
|
|
36
36
|
children: [
|
|
37
|
-
/* @__PURE__ */ jsxRuntime.jsxs("summary", { className: cn.cn(AccordionItem_module["accordion-item__summary"],
|
|
37
|
+
/* @__PURE__ */ jsxRuntime.jsxs("summary", { className: cn.cn(AccordionItem_module["accordion-item__summary"], index.focusStyles.focusableInset), children: [
|
|
38
38
|
image && /* @__PURE__ */ jsxRuntime.jsx(
|
|
39
39
|
"span",
|
|
40
40
|
{
|
|
@@ -1 +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
|
|
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, focusStyles } from '../../styles/utils';\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 {...(variant === 'box' ? { 'data-color-scheme': 'light' } : {})}\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":";;;;;;;;AAOO,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,MAAAA,gBAAgB;AAAA,QACrC;AAAA,MAAA;AAAA,MAEH,GAAG;AAAA,MACH,GAAI,YAAY,QAAQ,EAAE,qBAAqB,QAAA,IAAY,CAAA;AAAA,MAC5D,MAAM,aAAa;AAAA,MAEnB,UAAA;AAAA,QAAAH,2BAAAA,KAAC,WAAA,EAAQ,WAAWC,MAAGC,qBAAO,yBAAyB,GAAGE,MAAAA,YAAY,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;;"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
@layer dds-components
|
|
1
|
+
@layer dds-base, dds-components;
|
|
2
|
+
|
|
3
|
+
@layer dds-components { @layer fallback, components; }
|
|
4
|
+
|
|
5
|
+
@layer dds-components.components{/**
|
|
2
6
|
* AccordionItem Component Styles
|
|
3
7
|
*
|
|
4
8
|
* Uses native <details> element for expand/collapse behavior.
|
|
@@ -125,4 +129,6 @@
|
|
|
125
129
|
block-size: calc-size(auto, size);
|
|
126
130
|
}
|
|
127
131
|
}
|
|
128
|
-
|
|
132
|
+
/**
|
|
133
|
+
* Do not edit directly, this file was auto-generated.
|
|
134
|
+
*/ }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccordionItem.d.ts","sourceRoot":"","sources":["../../../src/components/AccordionItem/AccordionItem.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AccordionItem.d.ts","sourceRoot":"","sources":["../../../src/components/AccordionItem/AccordionItem.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,eAAO,MAAM,aAAa,GAAI,6FAU3B,kBAAkB,4CAoCpB,CAAC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { ChevronDown } from "@dnanpm/icons";
|
|
3
3
|
import { useAccordionContext } from "../Accordion/Accordion.utils.js";
|
|
4
|
-
import elevationStyles from "../../styles/utils/
|
|
5
|
-
import focusStyles from "../../styles/utils/focus.module.css.js";
|
|
4
|
+
import { focusStyles, elevationStyles } from "../../styles/utils/index.js";
|
|
6
5
|
import styles from "./AccordionItem.module.css.js";
|
|
7
6
|
import { cn } from "../../utils/cn/cn.js";
|
|
8
7
|
const AccordionItem = ({
|
|
@@ -30,6 +29,7 @@ const AccordionItem = ({
|
|
|
30
29
|
className
|
|
31
30
|
),
|
|
32
31
|
...props,
|
|
32
|
+
...variant === "box" ? { "data-color-scheme": "light" } : {},
|
|
33
33
|
name: groupName ?? name,
|
|
34
34
|
children: [
|
|
35
35
|
/* @__PURE__ */ jsxs("summary", { className: cn(styles["accordion-item__summary"], focusStyles.focusableInset), children: [
|
|
@@ -1 +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
|
|
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, focusStyles } from '../../styles/utils';\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 {...(variant === 'box' ? { 'data-color-scheme': 'light' } : {})}\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":";;;;;;AAOO,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,MACH,GAAI,YAAY,QAAQ,EAAE,qBAAqB,QAAA,IAAY,CAAA;AAAA,MAC5D,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,83 @@
|
|
|
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 Avatar_module = require("./Avatar.module.css.cjs");
|
|
6
|
+
const Avatar_utils = require("./Avatar.utils.cjs");
|
|
7
|
+
const cn = require("../../utils/cn/cn.cjs");
|
|
8
|
+
const isRenderable = require("../../utils/isRenderable/isRenderable.cjs");
|
|
9
|
+
const fallbackMedia = {
|
|
10
|
+
variant: "icon",
|
|
11
|
+
content: /* @__PURE__ */ jsxRuntime.jsx(icons.UserFilled, { "aria-hidden": "true" })
|
|
12
|
+
};
|
|
13
|
+
const resolveMedia = (props) => {
|
|
14
|
+
switch (props.variant) {
|
|
15
|
+
case void 0:
|
|
16
|
+
case "letter":
|
|
17
|
+
case "two-letters": {
|
|
18
|
+
const variant = props.variant ?? "letter";
|
|
19
|
+
const initials = Avatar_utils.getInitials(props.name, variant === "two-letters" ? 2 : 1);
|
|
20
|
+
return initials === "" ? fallbackMedia : {
|
|
21
|
+
variant,
|
|
22
|
+
content: /* @__PURE__ */ jsxRuntime.jsx("span", { className: Avatar_module.default["avatar__initials"], children: initials })
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
case "person":
|
|
26
|
+
case "logo":
|
|
27
|
+
return isRenderable.isRenderable(props.image) ? { variant: props.variant, content: props.image } : fallbackMedia;
|
|
28
|
+
case "icon": {
|
|
29
|
+
const Icon = props.icon ?? icons.UserFilled;
|
|
30
|
+
return { variant: "icon", content: /* @__PURE__ */ jsxRuntime.jsx(Icon, { "aria-hidden": "true" }) };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
const Avatar = (props) => {
|
|
35
|
+
const {
|
|
36
|
+
size = "medium",
|
|
37
|
+
background = "sand-mid",
|
|
38
|
+
orientation = "horizontal",
|
|
39
|
+
showName = true,
|
|
40
|
+
name,
|
|
41
|
+
className,
|
|
42
|
+
ref,
|
|
43
|
+
variant: _variant,
|
|
44
|
+
image: _image,
|
|
45
|
+
icon: _icon,
|
|
46
|
+
...rest
|
|
47
|
+
} = props;
|
|
48
|
+
const media = resolveMedia(props);
|
|
49
|
+
const trimmedName = name.trim();
|
|
50
|
+
const hasName = trimmedName.length > 0;
|
|
51
|
+
const isNameExposed = !showName && hasName;
|
|
52
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
53
|
+
"span",
|
|
54
|
+
{
|
|
55
|
+
ref,
|
|
56
|
+
...rest,
|
|
57
|
+
className: cn.cn(
|
|
58
|
+
Avatar_module.default["avatar"],
|
|
59
|
+
Avatar_module.default[`avatar--${size}`],
|
|
60
|
+
Avatar_module.default[`avatar--${orientation}`],
|
|
61
|
+
className
|
|
62
|
+
),
|
|
63
|
+
children: [
|
|
64
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
65
|
+
"span",
|
|
66
|
+
{
|
|
67
|
+
className: cn.cn(
|
|
68
|
+
Avatar_module.default["avatar__media"],
|
|
69
|
+
Avatar_module.default[`avatar__media--${size}`],
|
|
70
|
+
Avatar_module.default[`avatar__media--${media.variant}`],
|
|
71
|
+
Avatar_module.default[`avatar__media--bg-${background}`]
|
|
72
|
+
),
|
|
73
|
+
...isNameExposed ? { role: "img", "aria-label": trimmedName } : { "aria-hidden": true },
|
|
74
|
+
children: media.content
|
|
75
|
+
}
|
|
76
|
+
),
|
|
77
|
+
showName && hasName && /* @__PURE__ */ jsxRuntime.jsx("span", { className: Avatar_module.default["avatar__label"], children: name })
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
);
|
|
81
|
+
};
|
|
82
|
+
exports.Avatar = Avatar;
|
|
83
|
+
//# sourceMappingURL=Avatar.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.cjs","sources":["../../../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import { UserFilled } from '@dnanpm/icons';\nimport { cn } from '../../utils/cn';\nimport { isRenderable } from '../../utils/isRenderable';\nimport styles from './Avatar.module.css';\nimport type { AvatarProps, ResolvedMedia } from './Avatar.types';\nimport { getInitials } from './Avatar.utils';\n\nconst fallbackMedia: ResolvedMedia = {\n variant: 'icon',\n content: <UserFilled aria-hidden=\"true\" />,\n};\n\n// Takes the whole props object so TypeScript can narrow the union on `variant`.\nconst resolveMedia = (props: AvatarProps): ResolvedMedia => {\n switch (props.variant) {\n case undefined:\n case 'letter':\n case 'two-letters': {\n const variant = props.variant ?? 'letter';\n const initials = getInitials(props.name, variant === 'two-letters' ? 2 : 1);\n\n return initials === ''\n ? fallbackMedia\n : {\n variant,\n content: <span className={styles['avatar__initials']}>{initials}</span>,\n };\n }\n case 'person':\n case 'logo':\n return isRenderable(props.image)\n ? { variant: props.variant, content: props.image }\n : fallbackMedia;\n case 'icon': {\n const Icon = props.icon ?? UserFilled;\n\n return { variant: 'icon', content: <Icon aria-hidden=\"true\" /> };\n }\n }\n};\n\nexport const Avatar = (props: AvatarProps) => {\n const {\n size = 'medium',\n background = 'sand-mid',\n orientation = 'horizontal',\n showName = true,\n name,\n className,\n ref,\n variant: _variant,\n image: _image,\n icon: _icon,\n ...rest\n } = props;\n\n const media = resolveMedia(props);\n const trimmedName = name.trim();\n const hasName = trimmedName.length > 0;\n // A visible name already names the avatar, so the circle stays hidden to avoid repeating it.\n const isNameExposed = !showName && hasName;\n\n return (\n <span\n ref={ref}\n {...rest}\n className={cn(\n styles['avatar'],\n styles[`avatar--${size}`],\n styles[`avatar--${orientation}`],\n className,\n )}\n >\n <span\n className={cn(\n styles['avatar__media'],\n styles[`avatar__media--${size}`],\n styles[`avatar__media--${media.variant}`],\n styles[`avatar__media--bg-${background}`],\n )}\n {...(isNameExposed\n ? { role: 'img', 'aria-label': trimmedName }\n : { 'aria-hidden': true })}\n >\n {media.content}\n </span>\n {showName && hasName && <span className={styles['avatar__label']}>{name}</span>}\n </span>\n );\n};\n"],"names":["jsx","UserFilled","getInitials","styles","isRenderable","jsxs","cn"],"mappings":";;;;;;;;AAOA,MAAM,gBAA+B;AAAA,EACjC,SAAS;AAAA,EACT,SAASA,2BAAAA,IAACC,MAAAA,YAAA,EAAW,eAAY,OAAA,CAAO;AAC5C;AAGA,MAAM,eAAe,CAAC,UAAsC;AACxD,UAAQ,MAAM,SAAA;AAAA,IACV,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK,eAAe;AAChB,YAAM,UAAU,MAAM,WAAW;AACjC,YAAM,WAAWC,aAAAA,YAAY,MAAM,MAAM,YAAY,gBAAgB,IAAI,CAAC;AAE1E,aAAO,aAAa,KACd,gBACA;AAAA,QACI;AAAA,QACA,SAASF,2BAAAA,IAAC,QAAA,EAAK,WAAWG,cAAAA,QAAO,kBAAkB,GAAI,UAAA,SAAA,CAAS;AAAA,MAAA;AAAA,IAE9E;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AACD,aAAOC,0BAAa,MAAM,KAAK,IACzB,EAAE,SAAS,MAAM,SAAS,SAAS,MAAM,MAAA,IACzC;AAAA,IACV,KAAK,QAAQ;AACT,YAAM,OAAO,MAAM,QAAQH,MAAAA;AAE3B,aAAO,EAAE,SAAS,QAAQ,wCAAU,MAAA,EAAK,eAAY,QAAO,EAAA;AAAA,IAChE;AAAA,EAAA;AAER;AAEO,MAAM,SAAS,CAAC,UAAuB;AAC1C,QAAM;AAAA,IACF,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,IACN,GAAG;AAAA,EAAA,IACH;AAEJ,QAAM,QAAQ,aAAa,KAAK;AAChC,QAAM,cAAc,KAAK,KAAA;AACzB,QAAM,UAAU,YAAY,SAAS;AAErC,QAAM,gBAAgB,CAAC,YAAY;AAEnC,SACII,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACC,GAAG;AAAA,MACJ,WAAWC,GAAAA;AAAAA,QACPH,cAAAA,QAAO,QAAQ;AAAA,QACfA,cAAAA,QAAO,WAAW,IAAI,EAAE;AAAA,QACxBA,cAAAA,QAAO,WAAW,WAAW,EAAE;AAAA,QAC/B;AAAA,MAAA;AAAA,MAGJ,UAAA;AAAA,QAAAH,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAWM,GAAAA;AAAAA,cACPH,cAAAA,QAAO,eAAe;AAAA,cACtBA,cAAAA,QAAO,kBAAkB,IAAI,EAAE;AAAA,cAC/BA,cAAAA,QAAO,kBAAkB,MAAM,OAAO,EAAE;AAAA,cACxCA,sBAAO,qBAAqB,UAAU,EAAE;AAAA,YAAA;AAAA,YAE3C,GAAI,gBACC,EAAE,MAAM,OAAO,cAAc,YAAA,IAC7B,EAAE,eAAe,KAAA;AAAA,YAEtB,UAAA,MAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QAEV,YAAY,WAAWH,2BAAAA,IAAC,QAAA,EAAK,WAAWG,cAAAA,QAAO,eAAe,GAAI,UAAA,KAAA,CAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGpF;;"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
@layer dds-base, dds-components;@layer dds-components { @layer fallback, components; }@layer dds-components.components{._avatar_1edxy_1 {
|
|
2
|
+
--_avatar-label-font: var(--typography-label-md);
|
|
3
|
+
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
gap: var(--spacing-space-8);
|
|
7
|
+
max-width: 100%;
|
|
8
|
+
min-width: 0;
|
|
9
|
+
vertical-align: middle;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
._avatar--vertical_1edxy_12 {
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
text-align: center;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* The label is a sibling of the circle, so the root carries the size for the label font. */
|
|
18
|
+
._avatar--medium_1edxy_18 {
|
|
19
|
+
--_avatar-label-font: var(--typography-label-lg);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
._avatar--large_1edxy_22 {
|
|
23
|
+
--_avatar-label-font: var(--typography-body-lg-medium);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* === Media (the circle) === */
|
|
27
|
+
|
|
28
|
+
._avatar__media_1edxy_28 {
|
|
29
|
+
--_avatar-size: 24px;
|
|
30
|
+
--_avatar-content-size: 12px;
|
|
31
|
+
--_avatar-initials-font: var(--typography-label-md);
|
|
32
|
+
--_avatar-border-color: var(--color-semantic-border-neutral-soft);
|
|
33
|
+
|
|
34
|
+
display: inline-flex;
|
|
35
|
+
flex-shrink: 0;
|
|
36
|
+
align-items: center;
|
|
37
|
+
justify-content: center;
|
|
38
|
+
width: var(--_avatar-size);
|
|
39
|
+
height: var(--_avatar-size);
|
|
40
|
+
overflow: hidden;
|
|
41
|
+
color: var(--color-semantic-foreground-muted);
|
|
42
|
+
border: var(--borderwidth-semantic-xs) solid var(--_avatar-border-color);
|
|
43
|
+
border-radius: var(--radius-semantic-full);
|
|
44
|
+
background-clip: padding-box;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* === Sizes (base holds the small values; every avatar also gets a size modifier) === */
|
|
48
|
+
|
|
49
|
+
._avatar__media--medium_1edxy_49 {
|
|
50
|
+
--_avatar-size: 48px;
|
|
51
|
+
--_avatar-content-size: 24px;
|
|
52
|
+
--_avatar-initials-font: var(--typography-label-lg);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
._avatar__media--large_1edxy_55 {
|
|
56
|
+
--_avatar-size: 64px;
|
|
57
|
+
--_avatar-content-size: 32px;
|
|
58
|
+
--_avatar-initials-font: var(--typography-body-lg-medium);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* 24 px has no room for two letters at the regular size. */
|
|
62
|
+
._avatar__media--small_1edxy_62._avatar__media--two-letters_1edxy_62 {
|
|
63
|
+
--_avatar-initials-font: var(--typography-label-sm);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* === Content === */
|
|
67
|
+
|
|
68
|
+
._avatar__initials_1edxy_68 {
|
|
69
|
+
font: var(--_avatar-initials-font);
|
|
70
|
+
white-space: nowrap;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
._avatar__media--person_1edxy_73 :where(img, picture, video, svg, canvas) {
|
|
74
|
+
display: block;
|
|
75
|
+
width: 100%;
|
|
76
|
+
height: 100%;
|
|
77
|
+
object-fit: cover;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
._avatar__media--logo_1edxy_80 :where(img, picture, video, svg, canvas),
|
|
81
|
+
._avatar__media--icon_1edxy_81 svg {
|
|
82
|
+
display: block;
|
|
83
|
+
width: var(--_avatar-content-size);
|
|
84
|
+
height: var(--_avatar-content-size);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
._avatar__media--logo_1edxy_80 :where(img, picture, video, svg, canvas) {
|
|
88
|
+
object-fit: contain;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* === Backgrounds (each sets a foreground colour that keeps 4.5:1 contrast) === */
|
|
92
|
+
|
|
93
|
+
._avatar__media--bg-white_1edxy_93 {
|
|
94
|
+
background-color: var(--color-semantic-surface-base);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
._avatar__media--bg-sand-soft_1edxy_97 {
|
|
98
|
+
background-color: var(--color-semantic-surface-neutral-soft);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
._avatar__media--bg-sand-mid_1edxy_101 {
|
|
102
|
+
background-color: var(--color-semantic-surface-neutral-mid);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
._avatar__media--bg-sand-strong_1edxy_105 {
|
|
106
|
+
background-color: var(--color-semantic-surface-neutral-strong);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
._avatar__media--bg-pink-soft_1edxy_109 {
|
|
110
|
+
background-color: var(--color-semantic-surface-primary-soft);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
._avatar__media--bg-pink-mid_1edxy_113 {
|
|
114
|
+
color: var(--color-semantic-foreground-default);
|
|
115
|
+
background-color: var(--color-semantic-surface-primary-mid);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
._avatar__media--bg-pink-strong_1edxy_118 {
|
|
119
|
+
--_avatar-border-color: var(--color-semantic-border-primary);
|
|
120
|
+
|
|
121
|
+
color: var(--color-semantic-foreground-inverse);
|
|
122
|
+
background-color: var(--color-semantic-surface-primary-strong);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
._avatar__media--bg-plum-soft_1edxy_125 {
|
|
126
|
+
--_avatar-border-color: var(--color-semantic-border-secondary);
|
|
127
|
+
|
|
128
|
+
color: var(--color-semantic-foreground-inverse);
|
|
129
|
+
background-color: var(--color-semantic-surface-secondary-soft);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
._avatar__media--bg-plum-mid_1edxy_132 {
|
|
133
|
+
--_avatar-border-color: var(--color-semantic-border-secondary);
|
|
134
|
+
|
|
135
|
+
color: var(--color-semantic-foreground-inverse);
|
|
136
|
+
background-color: var(--color-semantic-surface-secondary-mid);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
._avatar__media--bg-plum-strong_1edxy_139 {
|
|
140
|
+
--_avatar-border-color: var(--color-semantic-border-secondary);
|
|
141
|
+
|
|
142
|
+
color: var(--color-semantic-foreground-inverse);
|
|
143
|
+
background-color: var(--color-semantic-surface-secondary-strong);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
._avatar__media--bg-transparent_1edxy_146 {
|
|
147
|
+
background-color: transparent;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/* A photo covers the background, so it keeps the neutral border whatever the background. */
|
|
151
|
+
._avatar__media--person_1edxy_73 {
|
|
152
|
+
--_avatar-border-color: var(--color-semantic-border-neutral-soft);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/* === Label === */
|
|
156
|
+
|
|
157
|
+
._avatar__label_1edxy_157 {
|
|
158
|
+
min-width: 0;
|
|
159
|
+
color: var(--color-semantic-foreground-default);
|
|
160
|
+
font: var(--_avatar-label-font);
|
|
161
|
+
display: -webkit-box;
|
|
162
|
+
overflow: hidden;
|
|
163
|
+
overflow-wrap: anywhere;
|
|
164
|
+
-webkit-box-orient: vertical;
|
|
165
|
+
-webkit-line-clamp: 2;
|
|
166
|
+
line-clamp: 2;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/* Styles apply from [data-color-scheme="dark"] down to (but not into) [data-color-scheme="light"]. */
|
|
170
|
+
@scope ([data-color-scheme='dark']) to ([data-color-scheme='light']) {
|
|
171
|
+
._avatar__label_1edxy_157 {
|
|
172
|
+
color: var(--color-semantic-foreground-inverse);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
._avatar__media--bg-transparent_1edxy_146 {
|
|
176
|
+
color: var(--color-semantic-foreground-inverse);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* Background colours are removed in forced colors mode, so keep the circle outline visible. */
|
|
181
|
+
@media (forced-colors: active) {
|
|
182
|
+
._avatar__media_1edxy_28 {
|
|
183
|
+
border: var(--borderwidth-semantic-xs) solid CanvasText;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Do not edit directly, this file was auto-generated.
|
|
188
|
+
*/ }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,gBAAgB,CAAC;AAqCjE,eAAO,MAAM,MAAM,GAAI,OAAO,WAAW,4CAgDxC,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { UserFilled } from "@dnanpm/icons";
|
|
3
|
+
import styles from "./Avatar.module.css.js";
|
|
4
|
+
import { getInitials } from "./Avatar.utils.js";
|
|
5
|
+
import { cn } from "../../utils/cn/cn.js";
|
|
6
|
+
import { isRenderable } from "../../utils/isRenderable/isRenderable.js";
|
|
7
|
+
const fallbackMedia = {
|
|
8
|
+
variant: "icon",
|
|
9
|
+
content: /* @__PURE__ */ jsx(UserFilled, { "aria-hidden": "true" })
|
|
10
|
+
};
|
|
11
|
+
const resolveMedia = (props) => {
|
|
12
|
+
switch (props.variant) {
|
|
13
|
+
case void 0:
|
|
14
|
+
case "letter":
|
|
15
|
+
case "two-letters": {
|
|
16
|
+
const variant = props.variant ?? "letter";
|
|
17
|
+
const initials = getInitials(props.name, variant === "two-letters" ? 2 : 1);
|
|
18
|
+
return initials === "" ? fallbackMedia : {
|
|
19
|
+
variant,
|
|
20
|
+
content: /* @__PURE__ */ jsx("span", { className: styles["avatar__initials"], children: initials })
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
case "person":
|
|
24
|
+
case "logo":
|
|
25
|
+
return isRenderable(props.image) ? { variant: props.variant, content: props.image } : fallbackMedia;
|
|
26
|
+
case "icon": {
|
|
27
|
+
const Icon = props.icon ?? UserFilled;
|
|
28
|
+
return { variant: "icon", content: /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true" }) };
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const Avatar = (props) => {
|
|
33
|
+
const {
|
|
34
|
+
size = "medium",
|
|
35
|
+
background = "sand-mid",
|
|
36
|
+
orientation = "horizontal",
|
|
37
|
+
showName = true,
|
|
38
|
+
name,
|
|
39
|
+
className,
|
|
40
|
+
ref,
|
|
41
|
+
variant: _variant,
|
|
42
|
+
image: _image,
|
|
43
|
+
icon: _icon,
|
|
44
|
+
...rest
|
|
45
|
+
} = props;
|
|
46
|
+
const media = resolveMedia(props);
|
|
47
|
+
const trimmedName = name.trim();
|
|
48
|
+
const hasName = trimmedName.length > 0;
|
|
49
|
+
const isNameExposed = !showName && hasName;
|
|
50
|
+
return /* @__PURE__ */ jsxs(
|
|
51
|
+
"span",
|
|
52
|
+
{
|
|
53
|
+
ref,
|
|
54
|
+
...rest,
|
|
55
|
+
className: cn(
|
|
56
|
+
styles["avatar"],
|
|
57
|
+
styles[`avatar--${size}`],
|
|
58
|
+
styles[`avatar--${orientation}`],
|
|
59
|
+
className
|
|
60
|
+
),
|
|
61
|
+
children: [
|
|
62
|
+
/* @__PURE__ */ jsx(
|
|
63
|
+
"span",
|
|
64
|
+
{
|
|
65
|
+
className: cn(
|
|
66
|
+
styles["avatar__media"],
|
|
67
|
+
styles[`avatar__media--${size}`],
|
|
68
|
+
styles[`avatar__media--${media.variant}`],
|
|
69
|
+
styles[`avatar__media--bg-${background}`]
|
|
70
|
+
),
|
|
71
|
+
...isNameExposed ? { role: "img", "aria-label": trimmedName } : { "aria-hidden": true },
|
|
72
|
+
children: media.content
|
|
73
|
+
}
|
|
74
|
+
),
|
|
75
|
+
showName && hasName && /* @__PURE__ */ jsx("span", { className: styles["avatar__label"], children: name })
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
};
|
|
80
|
+
export {
|
|
81
|
+
Avatar
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=Avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.js","sources":["../../../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import { UserFilled } from '@dnanpm/icons';\nimport { cn } from '../../utils/cn';\nimport { isRenderable } from '../../utils/isRenderable';\nimport styles from './Avatar.module.css';\nimport type { AvatarProps, ResolvedMedia } from './Avatar.types';\nimport { getInitials } from './Avatar.utils';\n\nconst fallbackMedia: ResolvedMedia = {\n variant: 'icon',\n content: <UserFilled aria-hidden=\"true\" />,\n};\n\n// Takes the whole props object so TypeScript can narrow the union on `variant`.\nconst resolveMedia = (props: AvatarProps): ResolvedMedia => {\n switch (props.variant) {\n case undefined:\n case 'letter':\n case 'two-letters': {\n const variant = props.variant ?? 'letter';\n const initials = getInitials(props.name, variant === 'two-letters' ? 2 : 1);\n\n return initials === ''\n ? fallbackMedia\n : {\n variant,\n content: <span className={styles['avatar__initials']}>{initials}</span>,\n };\n }\n case 'person':\n case 'logo':\n return isRenderable(props.image)\n ? { variant: props.variant, content: props.image }\n : fallbackMedia;\n case 'icon': {\n const Icon = props.icon ?? UserFilled;\n\n return { variant: 'icon', content: <Icon aria-hidden=\"true\" /> };\n }\n }\n};\n\nexport const Avatar = (props: AvatarProps) => {\n const {\n size = 'medium',\n background = 'sand-mid',\n orientation = 'horizontal',\n showName = true,\n name,\n className,\n ref,\n variant: _variant,\n image: _image,\n icon: _icon,\n ...rest\n } = props;\n\n const media = resolveMedia(props);\n const trimmedName = name.trim();\n const hasName = trimmedName.length > 0;\n // A visible name already names the avatar, so the circle stays hidden to avoid repeating it.\n const isNameExposed = !showName && hasName;\n\n return (\n <span\n ref={ref}\n {...rest}\n className={cn(\n styles['avatar'],\n styles[`avatar--${size}`],\n styles[`avatar--${orientation}`],\n className,\n )}\n >\n <span\n className={cn(\n styles['avatar__media'],\n styles[`avatar__media--${size}`],\n styles[`avatar__media--${media.variant}`],\n styles[`avatar__media--bg-${background}`],\n )}\n {...(isNameExposed\n ? { role: 'img', 'aria-label': trimmedName }\n : { 'aria-hidden': true })}\n >\n {media.content}\n </span>\n {showName && hasName && <span className={styles['avatar__label']}>{name}</span>}\n </span>\n );\n};\n"],"names":[],"mappings":";;;;;;AAOA,MAAM,gBAA+B;AAAA,EACjC,SAAS;AAAA,EACT,SAAS,oBAAC,YAAA,EAAW,eAAY,OAAA,CAAO;AAC5C;AAGA,MAAM,eAAe,CAAC,UAAsC;AACxD,UAAQ,MAAM,SAAA;AAAA,IACV,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK,eAAe;AAChB,YAAM,UAAU,MAAM,WAAW;AACjC,YAAM,WAAW,YAAY,MAAM,MAAM,YAAY,gBAAgB,IAAI,CAAC;AAE1E,aAAO,aAAa,KACd,gBACA;AAAA,QACI;AAAA,QACA,SAAS,oBAAC,QAAA,EAAK,WAAW,OAAO,kBAAkB,GAAI,UAAA,SAAA,CAAS;AAAA,MAAA;AAAA,IAE9E;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AACD,aAAO,aAAa,MAAM,KAAK,IACzB,EAAE,SAAS,MAAM,SAAS,SAAS,MAAM,MAAA,IACzC;AAAA,IACV,KAAK,QAAQ;AACT,YAAM,OAAO,MAAM,QAAQ;AAE3B,aAAO,EAAE,SAAS,QAAQ,6BAAU,MAAA,EAAK,eAAY,QAAO,EAAA;AAAA,IAChE;AAAA,EAAA;AAER;AAEO,MAAM,SAAS,CAAC,UAAuB;AAC1C,QAAM;AAAA,IACF,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,IACN,GAAG;AAAA,EAAA,IACH;AAEJ,QAAM,QAAQ,aAAa,KAAK;AAChC,QAAM,cAAc,KAAK,KAAA;AACzB,QAAM,UAAU,YAAY,SAAS;AAErC,QAAM,gBAAgB,CAAC,YAAY;AAEnC,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACC,GAAG;AAAA,MACJ,WAAW;AAAA,QACP,OAAO,QAAQ;AAAA,QACf,OAAO,WAAW,IAAI,EAAE;AAAA,QACxB,OAAO,WAAW,WAAW,EAAE;AAAA,QAC/B;AAAA,MAAA;AAAA,MAGJ,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAW;AAAA,cACP,OAAO,eAAe;AAAA,cACtB,OAAO,kBAAkB,IAAI,EAAE;AAAA,cAC/B,OAAO,kBAAkB,MAAM,OAAO,EAAE;AAAA,cACxC,OAAO,qBAAqB,UAAU,EAAE;AAAA,YAAA;AAAA,YAE3C,GAAI,gBACC,EAAE,MAAM,OAAO,cAAc,YAAA,IAC7B,EAAE,eAAe,KAAA;AAAA,YAEtB,UAAA,MAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QAEV,YAAY,WAAW,oBAAC,QAAA,EAAK,WAAW,OAAO,eAAe,GAAI,UAAA,KAAA,CAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGpF;"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require('./Avatar.css');
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
4
|
+
const avatar = "_avatar_1edxy_1";
|
|
5
|
+
const avatar__media = "_avatar__media_1edxy_28";
|
|
6
|
+
const avatar__initials = "_avatar__initials_1edxy_68";
|
|
7
|
+
const avatar__label = "_avatar__label_1edxy_157";
|
|
8
|
+
const styles = {
|
|
9
|
+
avatar,
|
|
10
|
+
"avatar--vertical": "_avatar--vertical_1edxy_12",
|
|
11
|
+
"avatar--medium": "_avatar--medium_1edxy_18",
|
|
12
|
+
"avatar--large": "_avatar--large_1edxy_22",
|
|
13
|
+
avatar__media,
|
|
14
|
+
"avatar__media--medium": "_avatar__media--medium_1edxy_49",
|
|
15
|
+
"avatar__media--large": "_avatar__media--large_1edxy_55",
|
|
16
|
+
"avatar__media--small": "_avatar__media--small_1edxy_62",
|
|
17
|
+
"avatar__media--two-letters": "_avatar__media--two-letters_1edxy_62",
|
|
18
|
+
avatar__initials,
|
|
19
|
+
"avatar__media--person": "_avatar__media--person_1edxy_73",
|
|
20
|
+
"avatar__media--logo": "_avatar__media--logo_1edxy_80",
|
|
21
|
+
"avatar__media--icon": "_avatar__media--icon_1edxy_81",
|
|
22
|
+
"avatar__media--bg-white": "_avatar__media--bg-white_1edxy_93",
|
|
23
|
+
"avatar__media--bg-sand-soft": "_avatar__media--bg-sand-soft_1edxy_97",
|
|
24
|
+
"avatar__media--bg-sand-mid": "_avatar__media--bg-sand-mid_1edxy_101",
|
|
25
|
+
"avatar__media--bg-sand-strong": "_avatar__media--bg-sand-strong_1edxy_105",
|
|
26
|
+
"avatar__media--bg-pink-soft": "_avatar__media--bg-pink-soft_1edxy_109",
|
|
27
|
+
"avatar__media--bg-pink-mid": "_avatar__media--bg-pink-mid_1edxy_113",
|
|
28
|
+
"avatar__media--bg-pink-strong": "_avatar__media--bg-pink-strong_1edxy_118",
|
|
29
|
+
"avatar__media--bg-plum-soft": "_avatar__media--bg-plum-soft_1edxy_125",
|
|
30
|
+
"avatar__media--bg-plum-mid": "_avatar__media--bg-plum-mid_1edxy_132",
|
|
31
|
+
"avatar__media--bg-plum-strong": "_avatar__media--bg-plum-strong_1edxy_139",
|
|
32
|
+
"avatar__media--bg-transparent": "_avatar__media--bg-transparent_1edxy_146",
|
|
33
|
+
avatar__label
|
|
34
|
+
};
|
|
35
|
+
exports.avatar = avatar;
|
|
36
|
+
exports.avatar__initials = avatar__initials;
|
|
37
|
+
exports.avatar__label = avatar__label;
|
|
38
|
+
exports.avatar__media = avatar__media;
|
|
39
|
+
exports.default = styles;
|
|
40
|
+
//# sourceMappingURL=Avatar.module.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import './Avatar.css';
|
|
2
|
+
const avatar = "_avatar_1edxy_1";
|
|
3
|
+
const avatar__media = "_avatar__media_1edxy_28";
|
|
4
|
+
const avatar__initials = "_avatar__initials_1edxy_68";
|
|
5
|
+
const avatar__label = "_avatar__label_1edxy_157";
|
|
6
|
+
const styles = {
|
|
7
|
+
avatar,
|
|
8
|
+
"avatar--vertical": "_avatar--vertical_1edxy_12",
|
|
9
|
+
"avatar--medium": "_avatar--medium_1edxy_18",
|
|
10
|
+
"avatar--large": "_avatar--large_1edxy_22",
|
|
11
|
+
avatar__media,
|
|
12
|
+
"avatar__media--medium": "_avatar__media--medium_1edxy_49",
|
|
13
|
+
"avatar__media--large": "_avatar__media--large_1edxy_55",
|
|
14
|
+
"avatar__media--small": "_avatar__media--small_1edxy_62",
|
|
15
|
+
"avatar__media--two-letters": "_avatar__media--two-letters_1edxy_62",
|
|
16
|
+
avatar__initials,
|
|
17
|
+
"avatar__media--person": "_avatar__media--person_1edxy_73",
|
|
18
|
+
"avatar__media--logo": "_avatar__media--logo_1edxy_80",
|
|
19
|
+
"avatar__media--icon": "_avatar__media--icon_1edxy_81",
|
|
20
|
+
"avatar__media--bg-white": "_avatar__media--bg-white_1edxy_93",
|
|
21
|
+
"avatar__media--bg-sand-soft": "_avatar__media--bg-sand-soft_1edxy_97",
|
|
22
|
+
"avatar__media--bg-sand-mid": "_avatar__media--bg-sand-mid_1edxy_101",
|
|
23
|
+
"avatar__media--bg-sand-strong": "_avatar__media--bg-sand-strong_1edxy_105",
|
|
24
|
+
"avatar__media--bg-pink-soft": "_avatar__media--bg-pink-soft_1edxy_109",
|
|
25
|
+
"avatar__media--bg-pink-mid": "_avatar__media--bg-pink-mid_1edxy_113",
|
|
26
|
+
"avatar__media--bg-pink-strong": "_avatar__media--bg-pink-strong_1edxy_118",
|
|
27
|
+
"avatar__media--bg-plum-soft": "_avatar__media--bg-plum-soft_1edxy_125",
|
|
28
|
+
"avatar__media--bg-plum-mid": "_avatar__media--bg-plum-mid_1edxy_132",
|
|
29
|
+
"avatar__media--bg-plum-strong": "_avatar__media--bg-plum-strong_1edxy_139",
|
|
30
|
+
"avatar__media--bg-transparent": "_avatar__media--bg-transparent_1edxy_146",
|
|
31
|
+
avatar__label
|
|
32
|
+
};
|
|
33
|
+
export {
|
|
34
|
+
avatar,
|
|
35
|
+
avatar__initials,
|
|
36
|
+
avatar__label,
|
|
37
|
+
avatar__media,
|
|
38
|
+
styles as default
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=Avatar.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|