@dnanpm/ui-components 0.1.0 → 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 +2 -2
- package/dist/components/Accordion/Accordion.cjs +9 -3
- package/dist/components/Accordion/Accordion.cjs.map +1 -1
- package/dist/components/Accordion/Accordion.d.ts +1 -1
- package/dist/components/Accordion/Accordion.d.ts.map +1 -1
- package/dist/components/Accordion/Accordion.js +10 -4
- package/dist/components/Accordion/Accordion.js.map +1 -1
- package/dist/components/Accordion/Accordion.types.d.ts +2 -2
- package/dist/components/Accordion/Accordion.types.d.ts.map +1 -1
- package/dist/components/AccordionItem/AccordionItem.cjs +43 -43
- package/dist/components/AccordionItem/AccordionItem.cjs.map +1 -1
- package/dist/components/AccordionItem/AccordionItem.css +19 -19
- package/dist/components/AccordionItem/AccordionItem.d.ts +1 -1
- package/dist/components/AccordionItem/AccordionItem.d.ts.map +1 -1
- package/dist/components/AccordionItem/AccordionItem.js +43 -43
- package/dist/components/AccordionItem/AccordionItem.js.map +1 -1
- package/dist/components/AccordionItem/AccordionItem.module.css.cjs +11 -11
- package/dist/components/AccordionItem/AccordionItem.module.css.js +11 -11
- package/dist/components/AccordionItem/AccordionItem.types.d.ts +2 -2
- package/dist/components/AccordionItem/AccordionItem.types.d.ts.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.cjs +4 -5
- package/dist/components/Breadcrumb/Breadcrumb.cjs.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.css +15 -14
- package/dist/components/Breadcrumb/Breadcrumb.d.ts +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.js +4 -5
- package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs +6 -6
- package/dist/components/Breadcrumb/Breadcrumb.module.css.js +6 -6
- package/dist/components/Breadcrumb/Breadcrumb.types.d.ts +1 -5
- package/dist/components/Breadcrumb/Breadcrumb.types.d.ts.map +1 -1
- 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 +3 -0
- package/dist/components/Button/Button.d.ts.map +1 -0
- 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 +84 -0
- package/dist/components/Button/Button.types.d.ts.map +1 -0
- package/dist/components/Button/index.d.ts +3 -0
- package/dist/components/Button/index.d.ts.map +1 -0
- 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 +2 -4
- package/dist/components/Label/Label.cjs.map +1 -1
- package/dist/components/Label/Label.css +15 -17
- package/dist/components/Label/Label.d.ts +1 -1
- package/dist/components/Label/Label.d.ts.map +1 -1
- package/dist/components/Label/Label.js +2 -4
- package/dist/components/Label/Label.js.map +1 -1
- package/dist/components/Label/Label.module.css.cjs +7 -7
- package/dist/components/Label/Label.module.css.js +7 -7
- package/dist/components/Label/Label.types.d.ts +1 -5
- package/dist/components/Label/Label.types.d.ts.map +1 -1
- package/dist/components/Notification/Notification.cjs +5 -6
- package/dist/components/Notification/Notification.cjs.map +1 -1
- package/dist/components/Notification/Notification.css +18 -19
- package/dist/components/Notification/Notification.d.ts +1 -1
- package/dist/components/Notification/Notification.d.ts.map +1 -1
- package/dist/components/Notification/Notification.js +5 -6
- 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/Notification/Notification.types.d.ts +1 -1
- package/dist/components/Notification/Notification.types.d.ts.map +1 -1
- 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/Spinner/index.d.ts.map +1 -0
- package/dist/index.cjs +6 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/styles/utils/elevation.css +7 -7
- package/dist/styles/utils/elevation.module.css.cjs +1 -1
- package/dist/styles/utils/elevation.module.css.js +1 -1
- package/dist/styles/utils/focus.css +34 -13
- package/dist/styles/utils/focus.module.css.cjs +3 -3
- package/dist/styles/utils/focus.module.css.js +3 -3
- package/dist/styles.css +330 -171
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumb.cjs","sources":["../../../src/components/Breadcrumb/Breadcrumb.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"Breadcrumb.cjs","sources":["../../../src/components/Breadcrumb/Breadcrumb.tsx"],"sourcesContent":["import { ChevronRight } from '@dnanpm/icons';\nimport { cn } from '../../utils/cn';\nimport focusStyles from '../../styles/utils/focus.module.css';\nimport textDecorationStyles from '../../styles/utils/text-decoration.module.css';\nimport styles from './Breadcrumb.module.css';\nimport type { BreadcrumbLinkProps, BreadcrumbProps } from './Breadcrumb.types';\n\nconst defaultRenderLink = (props: BreadcrumbLinkProps) => <a {...props} />;\n\nexport const Breadcrumb = ({\n items,\n lastItemAsLink = false,\n renderLink = defaultRenderLink,\n className,\n 'aria-label': ariaLabel = 'Murupolku',\n ref,\n ...props\n}: BreadcrumbProps) => {\n if (items.length === 0) {\n return null;\n }\n\n const lastIndex = items.length - 1;\n\n return (\n <nav\n ref={ref}\n aria-label={ariaLabel}\n className={cn(styles.breadcrumb, focusStyles.focusClipGuard, className)}\n {...props}\n >\n <ol className={styles.breadcrumb__list}>\n {items.map((item, index) => {\n const isLast = index === lastIndex;\n\n return (\n <li key={index} className={styles.breadcrumb__item}>\n {isLast ? (\n lastItemAsLink ? (\n renderLink({\n href: item.href,\n className: cn(\n focusStyles.focusable,\n textDecorationStyles.underlineLink,\n styles.breadcrumb__link,\n styles.breadcrumb__current,\n ),\n 'aria-current': 'page',\n children: item.label,\n })\n ) : (\n <span\n className={styles.breadcrumb__current}\n aria-current=\"page\"\n >\n {item.label}\n </span>\n )\n ) : (\n <>\n {renderLink({\n href: item.href,\n className: cn(\n focusStyles.focusable,\n textDecorationStyles.underlineLink,\n styles.breadcrumb__link,\n ),\n children: item.label,\n })}\n <ChevronRight\n className={styles.breadcrumb__separator}\n aria-hidden=\"true\"\n />\n </>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n"],"names":["jsx","cn","styles","focusStyles","textDecorationStyles","jsxs","Fragment","ChevronRight"],"mappings":";;;;;;;;AAOA,MAAM,oBAAoB,CAAC,UAA+BA,2BAAAA,IAAC,KAAA,EAAG,GAAG,OAAO;AAEjE,MAAM,aAAa,CAAC;AAAA,EACvB;AAAA,EACA,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb;AAAA,EACA,cAAc,YAAY;AAAA,EAC1B;AAAA,EACA,GAAG;AACP,MAAuB;AACnB,MAAI,MAAM,WAAW,GAAG;AACpB,WAAO;AAAA,EACX;AAEA,QAAM,YAAY,MAAM,SAAS;AAEjC,SACIA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA,cAAY;AAAA,MACZ,WAAWC,GAAAA,GAAGC,kBAAAA,QAAO,YAAYC,aAAAA,QAAY,gBAAgB,SAAS;AAAA,MACrE,GAAG;AAAA,MAEJ,UAAAH,2BAAAA,IAAC,QAAG,WAAWE,kBAAAA,QAAO,kBACjB,UAAA,MAAM,IAAI,CAAC,MAAM,UAAU;AACxB,cAAM,SAAS,UAAU;AAEzB,8CACK,MAAA,EAAe,WAAWA,kBAAAA,QAAO,kBAC7B,UAAA,SACG,iBACI,WAAW;AAAA,UACP,MAAM,KAAK;AAAA,UACX,WAAWD,GAAAA;AAAAA,YACPE,aAAAA,QAAY;AAAA,YACZC,sBAAAA,QAAqB;AAAA,YACrBF,kBAAAA,QAAO;AAAA,YACPA,0BAAO;AAAA,UAAA;AAAA,UAEX,gBAAgB;AAAA,UAChB,UAAU,KAAK;AAAA,QAAA,CAClB,IAEDF,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAWE,kBAAAA,QAAO;AAAA,YAClB,gBAAa;AAAA,YAEZ,UAAA,KAAK;AAAA,UAAA;AAAA,QAAA,IAIdG,2BAAAA,KAAAC,qBAAA,EACK,UAAA;AAAA,UAAA,WAAW;AAAA,YACR,MAAM,KAAK;AAAA,YACX,WAAWL,GAAAA;AAAAA,cACPE,aAAAA,QAAY;AAAA,cACZC,sBAAAA,QAAqB;AAAA,cACrBF,0BAAO;AAAA,YAAA;AAAA,YAEX,UAAU,KAAK;AAAA,UAAA,CAClB;AAAA,UACDF,2BAAAA;AAAAA,YAACO,MAAAA;AAAAA,YAAA;AAAA,cACG,WAAWL,kBAAAA,QAAO;AAAA,cAClB,eAAY;AAAA,YAAA;AAAA,UAAA;AAAA,QAChB,EAAA,CACJ,KArCC,KAuCT;AAAA,MAER,CAAC,EAAA,CACL;AAAA,IAAA;AAAA,EAAA;AAGZ;;"}
|
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
* Uses a container query (ch units) to switch between default and collapsed mode.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
.
|
|
10
|
+
._breadcrumb_b37v8_10 {
|
|
11
11
|
container-name: breadcrumb;
|
|
12
12
|
container-type: inline-size;
|
|
13
13
|
width: 100%;
|
|
14
14
|
overflow: hidden;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
.
|
|
17
|
+
._breadcrumb__list_b37v8_17 {
|
|
18
18
|
display: flex;
|
|
19
19
|
align-items: center;
|
|
20
20
|
gap: var(--spacing-ui-xxs);
|
|
@@ -23,14 +23,15 @@
|
|
|
23
23
|
list-style: none;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
.
|
|
26
|
+
._breadcrumb__item_b37v8_26 {
|
|
27
27
|
flex: 0 0 auto;
|
|
28
|
+
margin: 0;
|
|
29
|
+
padding: 0;
|
|
28
30
|
display: flex;
|
|
29
31
|
align-items: center;
|
|
30
32
|
gap: var(--spacing-ui-xxs);
|
|
31
|
-
font
|
|
32
|
-
|
|
33
|
-
line-height: 1.125rem;
|
|
33
|
+
font: var(--typography-label-md);
|
|
34
|
+
line-height: 1.125rem; /* intentional: absolute line-height for visual alignment */
|
|
34
35
|
|
|
35
36
|
&:last-child {
|
|
36
37
|
min-width: 0;
|
|
@@ -42,30 +43,30 @@
|
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
45
|
|
|
45
|
-
.
|
|
46
|
-
color: var(--
|
|
46
|
+
._breadcrumb__link_b37v8_46 {
|
|
47
|
+
color: var(--color-semantic-interactive-primary-default);
|
|
47
48
|
border-radius: var(--radius-semantic-sm);
|
|
48
49
|
}
|
|
49
50
|
|
|
50
|
-
.
|
|
51
|
-
color: var(--
|
|
51
|
+
._breadcrumb__link_b37v8_46:hover {
|
|
52
|
+
color: var(--color-semantic-interactive-primary-hover);
|
|
52
53
|
}
|
|
53
54
|
|
|
54
|
-
.
|
|
55
|
+
._breadcrumb__current_b37v8_55 {
|
|
55
56
|
overflow: hidden;
|
|
56
57
|
text-overflow: ellipsis;
|
|
57
58
|
}
|
|
58
59
|
|
|
59
|
-
.
|
|
60
|
+
._breadcrumb__separator_b37v8_60 {
|
|
60
61
|
flex: 0 0 auto;
|
|
61
62
|
width: 0.875rem;
|
|
62
63
|
height: 0.875rem;
|
|
63
|
-
color: var(--
|
|
64
|
+
color: var(--color-semantic-interactive-primary-default);
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
/* Collapsed mode: hide all items except the last two */
|
|
67
68
|
@container breadcrumb (max-width: 75ch) {
|
|
68
|
-
.
|
|
69
|
+
._breadcrumb__item_b37v8_26:not(:nth-last-child(-n + 2)) {
|
|
69
70
|
display: none;
|
|
70
71
|
}
|
|
71
72
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { BreadcrumbProps } from './Breadcrumb.types';
|
|
2
|
-
export declare const Breadcrumb:
|
|
2
|
+
export declare const Breadcrumb: ({ items, lastItemAsLink, renderLink, className, "aria-label": ariaLabel, ref, ...props }: BreadcrumbProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
3
3
|
//# sourceMappingURL=Breadcrumb.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumb.d.ts","sourceRoot":"","sources":["../../../src/components/Breadcrumb/Breadcrumb.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Breadcrumb.d.ts","sourceRoot":"","sources":["../../../src/components/Breadcrumb/Breadcrumb.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAuB,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI/E,eAAO,MAAM,UAAU,GAAI,0FAQxB,eAAe,mDAgEjB,CAAC"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef } from "react";
|
|
3
2
|
import { ChevronRight } from "@dnanpm/icons";
|
|
4
3
|
import focusStyles from "../../styles/utils/focus.module.css.js";
|
|
5
4
|
import textDecorationStyles from "../../styles/utils/text-decoration.module.css.js";
|
|
6
5
|
import styles from "./Breadcrumb.module.css.js";
|
|
7
6
|
import { cn } from "../../utils/cn/cn.js";
|
|
8
7
|
const defaultRenderLink = (props) => /* @__PURE__ */ jsx("a", { ...props });
|
|
9
|
-
const Breadcrumb =
|
|
8
|
+
const Breadcrumb = ({
|
|
10
9
|
items,
|
|
11
10
|
lastItemAsLink = false,
|
|
12
11
|
renderLink = defaultRenderLink,
|
|
13
12
|
className,
|
|
14
13
|
"aria-label": ariaLabel = "Murupolku",
|
|
14
|
+
ref,
|
|
15
15
|
...props
|
|
16
|
-
}
|
|
16
|
+
}) => {
|
|
17
17
|
if (items.length === 0) {
|
|
18
18
|
return null;
|
|
19
19
|
}
|
|
@@ -65,8 +65,7 @@ const Breadcrumb = forwardRef(function Breadcrumb2({
|
|
|
65
65
|
}) })
|
|
66
66
|
}
|
|
67
67
|
);
|
|
68
|
-
}
|
|
69
|
-
Breadcrumb.displayName = "Breadcrumb";
|
|
68
|
+
};
|
|
70
69
|
export {
|
|
71
70
|
Breadcrumb
|
|
72
71
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumb.js","sources":["../../../src/components/Breadcrumb/Breadcrumb.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"Breadcrumb.js","sources":["../../../src/components/Breadcrumb/Breadcrumb.tsx"],"sourcesContent":["import { ChevronRight } from '@dnanpm/icons';\nimport { cn } from '../../utils/cn';\nimport focusStyles from '../../styles/utils/focus.module.css';\nimport textDecorationStyles from '../../styles/utils/text-decoration.module.css';\nimport styles from './Breadcrumb.module.css';\nimport type { BreadcrumbLinkProps, BreadcrumbProps } from './Breadcrumb.types';\n\nconst defaultRenderLink = (props: BreadcrumbLinkProps) => <a {...props} />;\n\nexport const Breadcrumb = ({\n items,\n lastItemAsLink = false,\n renderLink = defaultRenderLink,\n className,\n 'aria-label': ariaLabel = 'Murupolku',\n ref,\n ...props\n}: BreadcrumbProps) => {\n if (items.length === 0) {\n return null;\n }\n\n const lastIndex = items.length - 1;\n\n return (\n <nav\n ref={ref}\n aria-label={ariaLabel}\n className={cn(styles.breadcrumb, focusStyles.focusClipGuard, className)}\n {...props}\n >\n <ol className={styles.breadcrumb__list}>\n {items.map((item, index) => {\n const isLast = index === lastIndex;\n\n return (\n <li key={index} className={styles.breadcrumb__item}>\n {isLast ? (\n lastItemAsLink ? (\n renderLink({\n href: item.href,\n className: cn(\n focusStyles.focusable,\n textDecorationStyles.underlineLink,\n styles.breadcrumb__link,\n styles.breadcrumb__current,\n ),\n 'aria-current': 'page',\n children: item.label,\n })\n ) : (\n <span\n className={styles.breadcrumb__current}\n aria-current=\"page\"\n >\n {item.label}\n </span>\n )\n ) : (\n <>\n {renderLink({\n href: item.href,\n className: cn(\n focusStyles.focusable,\n textDecorationStyles.underlineLink,\n styles.breadcrumb__link,\n ),\n children: item.label,\n })}\n <ChevronRight\n className={styles.breadcrumb__separator}\n aria-hidden=\"true\"\n />\n </>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n"],"names":[],"mappings":";;;;;;AAOA,MAAM,oBAAoB,CAAC,UAA+B,oBAAC,KAAA,EAAG,GAAG,OAAO;AAEjE,MAAM,aAAa,CAAC;AAAA,EACvB;AAAA,EACA,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb;AAAA,EACA,cAAc,YAAY;AAAA,EAC1B;AAAA,EACA,GAAG;AACP,MAAuB;AACnB,MAAI,MAAM,WAAW,GAAG;AACpB,WAAO;AAAA,EACX;AAEA,QAAM,YAAY,MAAM,SAAS;AAEjC,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA,cAAY;AAAA,MACZ,WAAW,GAAG,OAAO,YAAY,YAAY,gBAAgB,SAAS;AAAA,MACrE,GAAG;AAAA,MAEJ,UAAA,oBAAC,QAAG,WAAW,OAAO,kBACjB,UAAA,MAAM,IAAI,CAAC,MAAM,UAAU;AACxB,cAAM,SAAS,UAAU;AAEzB,mCACK,MAAA,EAAe,WAAW,OAAO,kBAC7B,UAAA,SACG,iBACI,WAAW;AAAA,UACP,MAAM,KAAK;AAAA,UACX,WAAW;AAAA,YACP,YAAY;AAAA,YACZ,qBAAqB;AAAA,YACrB,OAAO;AAAA,YACP,OAAO;AAAA,UAAA;AAAA,UAEX,gBAAgB;AAAA,UAChB,UAAU,KAAK;AAAA,QAAA,CAClB,IAED;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAW,OAAO;AAAA,YAClB,gBAAa;AAAA,YAEZ,UAAA,KAAK;AAAA,UAAA;AAAA,QAAA,IAId,qBAAA,UAAA,EACK,UAAA;AAAA,UAAA,WAAW;AAAA,YACR,MAAM,KAAK;AAAA,YACX,WAAW;AAAA,cACP,YAAY;AAAA,cACZ,qBAAqB;AAAA,cACrB,OAAO;AAAA,YAAA;AAAA,YAEX,UAAU,KAAK;AAAA,UAAA,CAClB;AAAA,UACD;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAW,OAAO;AAAA,cAClB,eAAY;AAAA,YAAA;AAAA,UAAA;AAAA,QAChB,EAAA,CACJ,KArCC,KAuCT;AAAA,MAER,CAAC,EAAA,CACL;AAAA,IAAA;AAAA,EAAA;AAGZ;"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
require('./Breadcrumb.css');
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
4
|
-
const breadcrumb = "
|
|
5
|
-
const breadcrumb__list = "
|
|
6
|
-
const breadcrumb__item = "
|
|
7
|
-
const breadcrumb__link = "
|
|
8
|
-
const breadcrumb__current = "
|
|
9
|
-
const breadcrumb__separator = "
|
|
4
|
+
const breadcrumb = "_breadcrumb_b37v8_10";
|
|
5
|
+
const breadcrumb__list = "_breadcrumb__list_b37v8_17";
|
|
6
|
+
const breadcrumb__item = "_breadcrumb__item_b37v8_26";
|
|
7
|
+
const breadcrumb__link = "_breadcrumb__link_b37v8_46";
|
|
8
|
+
const breadcrumb__current = "_breadcrumb__current_b37v8_55";
|
|
9
|
+
const breadcrumb__separator = "_breadcrumb__separator_b37v8_60";
|
|
10
10
|
const styles = {
|
|
11
11
|
breadcrumb,
|
|
12
12
|
breadcrumb__list,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import './Breadcrumb.css';
|
|
2
|
-
const breadcrumb = "
|
|
3
|
-
const breadcrumb__list = "
|
|
4
|
-
const breadcrumb__item = "
|
|
5
|
-
const breadcrumb__link = "
|
|
6
|
-
const breadcrumb__current = "
|
|
7
|
-
const breadcrumb__separator = "
|
|
2
|
+
const breadcrumb = "_breadcrumb_b37v8_10";
|
|
3
|
+
const breadcrumb__list = "_breadcrumb__list_b37v8_17";
|
|
4
|
+
const breadcrumb__item = "_breadcrumb__item_b37v8_26";
|
|
5
|
+
const breadcrumb__link = "_breadcrumb__link_b37v8_46";
|
|
6
|
+
const breadcrumb__current = "_breadcrumb__current_b37v8_55";
|
|
7
|
+
const breadcrumb__separator = "_breadcrumb__separator_b37v8_60";
|
|
8
8
|
const styles = {
|
|
9
9
|
breadcrumb,
|
|
10
10
|
breadcrumb__list,
|
|
@@ -13,7 +13,7 @@ export interface BreadcrumbLinkProps extends React.AnchorHTMLAttributes<HTMLAnch
|
|
|
13
13
|
readonly href: string;
|
|
14
14
|
readonly children: React.ReactNode;
|
|
15
15
|
}
|
|
16
|
-
export interface BreadcrumbProps extends Omit<React.
|
|
16
|
+
export interface BreadcrumbProps extends Omit<React.ComponentPropsWithRef<'nav'>, 'children'> {
|
|
17
17
|
/**
|
|
18
18
|
* Ordered list of breadcrumb items. The last item represents the current page.
|
|
19
19
|
*/
|
|
@@ -38,9 +38,5 @@ export interface BreadcrumbProps extends Omit<React.ComponentPropsWithoutRef<'na
|
|
|
38
38
|
* <Breadcrumb items={items} renderLink={({ href, ...props }) => <Link to={href} {...props} />} />
|
|
39
39
|
*/
|
|
40
40
|
readonly renderLink?: (props: BreadcrumbLinkProps) => React.ReactNode;
|
|
41
|
-
/**
|
|
42
|
-
* Custom className to apply to the nav element
|
|
43
|
-
*/
|
|
44
|
-
readonly className?: string;
|
|
45
41
|
}
|
|
46
42
|
//# sourceMappingURL=Breadcrumb.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumb.types.d.ts","sourceRoot":"","sources":["../../../src/components/Breadcrumb/Breadcrumb.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,cAAc;IAC3B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAoB,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;IACtF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"Breadcrumb.types.d.ts","sourceRoot":"","sources":["../../../src/components/Breadcrumb/Breadcrumb.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,cAAc;IAC3B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAoB,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;IACtF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACzF;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,KAAK,CAAC,SAAS,CAAC;CACzE"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const focus_module = require("../../styles/utils/focus.module.css.cjs");
|
|
5
|
+
const Button_module = require("./Button.module.css.cjs");
|
|
6
|
+
const cn = require("../../utils/cn/cn.cjs");
|
|
7
|
+
const Spinner = require("../Spinner/Spinner.cjs");
|
|
8
|
+
const Button = ({
|
|
9
|
+
variant = "primary",
|
|
10
|
+
fullWidth = false,
|
|
11
|
+
size = "normal",
|
|
12
|
+
loading = false,
|
|
13
|
+
className,
|
|
14
|
+
children,
|
|
15
|
+
ref,
|
|
16
|
+
...props
|
|
17
|
+
}) => {
|
|
18
|
+
const isDisabled = "disabled" in props && props.disabled;
|
|
19
|
+
const isAnchor = "href" in props && props.href != null;
|
|
20
|
+
const classes = cn.cn(
|
|
21
|
+
Button_module.default.button,
|
|
22
|
+
Button_module.default[`button--${variant}`],
|
|
23
|
+
{ [Button_module.default["button--full-width"]]: fullWidth },
|
|
24
|
+
Button_module.default[`button--${size}`],
|
|
25
|
+
focus_module.default.focusable,
|
|
26
|
+
{ [Button_module.default["button--disabled"]]: isDisabled },
|
|
27
|
+
{ [Button_module.default["button--loading"]]: loading },
|
|
28
|
+
className
|
|
29
|
+
);
|
|
30
|
+
const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
31
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: Button_module.default.button__content, children }),
|
|
32
|
+
loading && /* @__PURE__ */ jsxRuntime.jsx(
|
|
33
|
+
Spinner.Spinner,
|
|
34
|
+
{
|
|
35
|
+
size: size === "small" ? "xs" : "s",
|
|
36
|
+
color: "inherit",
|
|
37
|
+
"aria-hidden": "true",
|
|
38
|
+
"aria-label": void 0,
|
|
39
|
+
role: "presentation",
|
|
40
|
+
className: Button_module.default.button__spinner
|
|
41
|
+
}
|
|
42
|
+
)
|
|
43
|
+
] });
|
|
44
|
+
if (isAnchor) {
|
|
45
|
+
const { href, renderLink, ...anchorProps } = props;
|
|
46
|
+
const {
|
|
47
|
+
disabled: _disabled,
|
|
48
|
+
type: _type,
|
|
49
|
+
name: _name,
|
|
50
|
+
...safeAnchorProps
|
|
51
|
+
} = anchorProps;
|
|
52
|
+
const target = safeAnchorProps.target;
|
|
53
|
+
const rel = safeAnchorProps.rel;
|
|
54
|
+
const shouldHardenRel = target === "_blank";
|
|
55
|
+
const relTokens = new Set((rel ?? "").split(/\s+/).filter(Boolean));
|
|
56
|
+
if (shouldHardenRel) {
|
|
57
|
+
relTokens.add("noopener");
|
|
58
|
+
relTokens.add("noreferrer");
|
|
59
|
+
}
|
|
60
|
+
const hardenedRel = relTokens.size > 0 ? Array.from(relTokens).join(" ") : void 0;
|
|
61
|
+
const linkProps = {
|
|
62
|
+
...safeAnchorProps,
|
|
63
|
+
ref,
|
|
64
|
+
href,
|
|
65
|
+
rel: hardenedRel,
|
|
66
|
+
className: classes,
|
|
67
|
+
"aria-busy": loading || void 0,
|
|
68
|
+
"aria-disabled": loading || void 0,
|
|
69
|
+
tabIndex: loading ? -1 : void 0,
|
|
70
|
+
onClick: loading ? (e) => {
|
|
71
|
+
e.preventDefault();
|
|
72
|
+
e.stopPropagation();
|
|
73
|
+
} : safeAnchorProps.onClick,
|
|
74
|
+
children: content
|
|
75
|
+
};
|
|
76
|
+
if (renderLink) {
|
|
77
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: renderLink(linkProps) });
|
|
78
|
+
}
|
|
79
|
+
return /* @__PURE__ */ jsxRuntime.jsx("a", { ...linkProps });
|
|
80
|
+
}
|
|
81
|
+
const {
|
|
82
|
+
type = "button",
|
|
83
|
+
disabled,
|
|
84
|
+
href: _href,
|
|
85
|
+
target: _target,
|
|
86
|
+
rel: _rel,
|
|
87
|
+
renderLink: _renderLink,
|
|
88
|
+
...buttonProps
|
|
89
|
+
} = props;
|
|
90
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
91
|
+
"button",
|
|
92
|
+
{
|
|
93
|
+
ref,
|
|
94
|
+
type,
|
|
95
|
+
disabled: disabled || loading,
|
|
96
|
+
className: classes,
|
|
97
|
+
"aria-busy": loading || void 0,
|
|
98
|
+
...buttonProps,
|
|
99
|
+
children: content
|
|
100
|
+
}
|
|
101
|
+
);
|
|
102
|
+
};
|
|
103
|
+
exports.Button = Button;
|
|
104
|
+
//# sourceMappingURL=Button.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.cjs","sources":["../../../src/components/Button/Button.tsx"],"sourcesContent":["import type { AnchorHTMLAttributes, MouseEvent, ReactNode, Ref } from 'react';\nimport { cn } from '../../utils/cn';\nimport focusStyles from '../../styles/utils/focus.module.css';\nimport styles from './Button.module.css';\nimport { Spinner } from '../Spinner';\nimport type { ButtonProps } from './Button.types';\n\nexport const Button = ({\n variant = 'primary',\n fullWidth = false,\n size = 'normal',\n loading = false,\n className,\n children,\n ref,\n ...props\n}: ButtonProps) => {\n const isDisabled = 'disabled' in props && props.disabled;\n const isAnchor = 'href' in props && props.href != null;\n\n const classes = cn(\n styles.button,\n styles[`button--${variant}`],\n { [styles['button--full-width']]: fullWidth },\n styles[`button--${size}`],\n focusStyles.focusable,\n { [styles['button--disabled']]: isDisabled },\n { [styles['button--loading']]: loading },\n className,\n );\n\n const content = (\n <>\n <span className={styles.button__content}>{children}</span>\n {loading && (\n <Spinner\n size={size === 'small' ? 'xs' : 's'}\n color=\"inherit\"\n aria-hidden=\"true\"\n aria-label={undefined}\n role=\"presentation\"\n className={styles.button__spinner}\n />\n )}\n </>\n );\n\n if (isAnchor) {\n const { href, renderLink, ...anchorProps } = props as Omit<\n typeof props,\n 'variant' | 'size' | 'loading'\n > & {\n href: string;\n renderLink?: (\n props: AnchorHTMLAttributes<HTMLAnchorElement> & {\n href: string;\n children: ReactNode;\n },\n ) => ReactNode;\n };\n\n const {\n disabled: _disabled,\n type: _type,\n name: _name,\n ...safeAnchorProps\n } = anchorProps as typeof anchorProps & {\n disabled?: boolean;\n type?: 'button' | 'submit' | 'reset';\n name?: string;\n };\n\n const target = safeAnchorProps.target;\n const rel = safeAnchorProps.rel;\n const shouldHardenRel = target === '_blank';\n const relTokens = new Set((rel ?? '').split(/\\s+/).filter(Boolean));\n\n if (shouldHardenRel) {\n relTokens.add('noopener');\n relTokens.add('noreferrer');\n }\n\n const hardenedRel = relTokens.size > 0 ? Array.from(relTokens).join(' ') : undefined;\n\n const linkProps = {\n ...safeAnchorProps,\n ref: ref as Ref<HTMLAnchorElement>,\n href,\n rel: hardenedRel,\n className: classes,\n 'aria-busy': loading || undefined,\n 'aria-disabled': loading || undefined,\n tabIndex: loading ? -1 : undefined,\n onClick: loading\n ? (e: MouseEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n e.stopPropagation();\n }\n : safeAnchorProps.onClick,\n children: content,\n };\n\n if (renderLink) {\n return <>{renderLink(linkProps)}</>;\n }\n\n return <a {...linkProps} />;\n }\n\n const {\n type = 'button',\n disabled,\n href: _href,\n target: _target,\n rel: _rel,\n renderLink: _renderLink,\n ...buttonProps\n } = props as Omit<typeof props, 'variant' | 'size' | 'loading' | 'href'> & {\n type?: 'button' | 'submit' | 'reset';\n disabled?: boolean;\n href?: string;\n target?: string;\n rel?: string;\n renderLink?: unknown;\n };\n\n return (\n <button\n ref={ref as Ref<HTMLButtonElement>}\n type={type}\n disabled={disabled || loading}\n className={classes}\n aria-busy={loading || undefined}\n {...buttonProps}\n >\n {content}\n </button>\n );\n};\n"],"names":["cn","styles","focusStyles","jsxs","Fragment","jsx","Spinner"],"mappings":";;;;;;;AAOO,MAAM,SAAS,CAAC;AAAA,EACnB,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACP,MAAmB;AACf,QAAM,aAAa,cAAc,SAAS,MAAM;AAChD,QAAM,WAAW,UAAU,SAAS,MAAM,QAAQ;AAElD,QAAM,UAAUA,GAAAA;AAAAA,IACZC,cAAAA,QAAO;AAAA,IACPA,cAAAA,QAAO,WAAW,OAAO,EAAE;AAAA,IAC3B,EAAE,CAACA,cAAAA,QAAO,oBAAoB,CAAC,GAAG,UAAA;AAAA,IAClCA,cAAAA,QAAO,WAAW,IAAI,EAAE;AAAA,IACxBC,aAAAA,QAAY;AAAA,IACZ,EAAE,CAACD,cAAAA,QAAO,kBAAkB,CAAC,GAAG,WAAA;AAAA,IAChC,EAAE,CAACA,cAAAA,QAAO,iBAAiB,CAAC,GAAG,QAAA;AAAA,IAC/B;AAAA,EAAA;AAGJ,QAAM,UACFE,2BAAAA,KAAAC,WAAAA,UAAA,EACI,UAAA;AAAA,IAAAC,2BAAAA,IAAC,QAAA,EAAK,WAAWJ,cAAAA,QAAO,iBAAkB,UAAS;AAAA,IAClD,WACGI,2BAAAA;AAAAA,MAACC,QAAAA;AAAAA,MAAA;AAAA,QACG,MAAM,SAAS,UAAU,OAAO;AAAA,QAChC,OAAM;AAAA,QACN,eAAY;AAAA,QACZ,cAAY;AAAA,QACZ,MAAK;AAAA,QACL,WAAWL,cAAAA,QAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EACtB,GAER;AAGJ,MAAI,UAAU;AACV,UAAM,EAAE,MAAM,YAAY,GAAG,gBAAgB;AAa7C,UAAM;AAAA,MACF,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAM;AAAA,MACN,GAAG;AAAA,IAAA,IACH;AAMJ,UAAM,SAAS,gBAAgB;AAC/B,UAAM,MAAM,gBAAgB;AAC5B,UAAM,kBAAkB,WAAW;AACnC,UAAM,YAAY,IAAI,KAAK,OAAO,IAAI,MAAM,KAAK,EAAE,OAAO,OAAO,CAAC;AAElE,QAAI,iBAAiB;AACjB,gBAAU,IAAI,UAAU;AACxB,gBAAU,IAAI,YAAY;AAAA,IAC9B;AAEA,UAAM,cAAc,UAAU,OAAO,IAAI,MAAM,KAAK,SAAS,EAAE,KAAK,GAAG,IAAI;AAE3E,UAAM,YAAY;AAAA,MACd,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL,WAAW;AAAA,MACX,aAAa,WAAW;AAAA,MACxB,iBAAiB,WAAW;AAAA,MAC5B,UAAU,UAAU,KAAK;AAAA,MACzB,SAAS,UACH,CAAC,MAAqC;AAClC,UAAE,eAAA;AACF,UAAE,gBAAA;AAAA,MACN,IACA,gBAAgB;AAAA,MACtB,UAAU;AAAA,IAAA;AAGd,QAAI,YAAY;AACZ,aAAOI,2BAAAA,IAAAD,WAAAA,UAAA,EAAG,UAAA,WAAW,SAAS,GAAE;AAAA,IACpC;AAEA,WAAOC,+BAAC,KAAA,EAAG,GAAG,UAAA,CAAW;AAAA,EAC7B;AAEA,QAAM;AAAA,IACF,OAAO;AAAA,IACP;AAAA,IACA,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,GAAG;AAAA,EAAA,IACH;AASJ,SACIA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA;AAAA,MACA,UAAU,YAAY;AAAA,MACtB,WAAW;AAAA,MACX,aAAW,WAAW;AAAA,MACrB,GAAG;AAAA,MAEH,UAAA;AAAA,IAAA;AAAA,EAAA;AAGb;;"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
@layer dna-design-system {._button_188fd_1 {
|
|
2
|
+
display: inline-flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
justify-content: center;
|
|
5
|
+
gap: var(--spacing-ui-xxs);
|
|
6
|
+
max-width: 100%;
|
|
7
|
+
border: none;
|
|
8
|
+
border-radius: var(--radius-semantic-full);
|
|
9
|
+
text-decoration: none;
|
|
10
|
+
cursor: pointer;
|
|
11
|
+
position: relative;
|
|
12
|
+
transition:
|
|
13
|
+
color 0.2s ease-in-out,
|
|
14
|
+
background-color 0.2s ease-in-out,
|
|
15
|
+
border-color 0.2s ease-in-out;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
._button--full-width_188fd_18 {
|
|
19
|
+
width: 100%;
|
|
20
|
+
min-width: 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* ─── Sizes ─── */
|
|
24
|
+
|
|
25
|
+
._button--normal_188fd_25 {
|
|
26
|
+
font: var(--typography-label-lg-bold);
|
|
27
|
+
height: 40px;
|
|
28
|
+
min-width: 128px;
|
|
29
|
+
padding: var(--spacing-ui-xs) var(--spacing-ui-lg);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
._button--small_188fd_32 {
|
|
33
|
+
font: var(--typography-label-md-bold);
|
|
34
|
+
height: 32px;
|
|
35
|
+
min-width: 100px;
|
|
36
|
+
padding: var(--spacing-ui-xs) var(--spacing-ui-lg);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* ─── Primary variant ─── */
|
|
40
|
+
|
|
41
|
+
._button--primary_188fd_41 {
|
|
42
|
+
background-color: var(--color-semantic-interactive-primary-default);
|
|
43
|
+
color: var(--color-semantic-foreground-inverse);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
._button--primary_188fd_41:hover {
|
|
47
|
+
background-color: var(--color-semantic-interactive-primary-hover);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
._button--primary_188fd_41:active {
|
|
51
|
+
background-color: var(--color-semantic-interactive-primary-active);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
._button--primary_188fd_41:focus-visible {
|
|
55
|
+
background-color: var(--color-semantic-interactive-primary-focus);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* ─── Secondary variant ─── */
|
|
59
|
+
|
|
60
|
+
._button--secondary_188fd_60 {
|
|
61
|
+
background-color: transparent;
|
|
62
|
+
border: var(--borderwidth-semantic-sm) solid var(--color-semantic-interactive-secondary-default);
|
|
63
|
+
color: var(--color-semantic-foreground-secondary-strong);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
._button--secondary_188fd_60:hover {
|
|
67
|
+
background-color: var(--color-semantic-interactive-secondary-hover);
|
|
68
|
+
border-color: var(--color-semantic-interactive-secondary-hover);
|
|
69
|
+
color: var(--color-semantic-foreground-inverse);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
._button--secondary_188fd_60:active {
|
|
73
|
+
background-color: var(--color-semantic-interactive-secondary-active);
|
|
74
|
+
border-color: var(--color-semantic-interactive-secondary-active);
|
|
75
|
+
color: var(--color-semantic-foreground-inverse);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
._button--secondary_188fd_60:focus-visible {
|
|
79
|
+
background-color: var(--color-semantic-interactive-secondary-focus);
|
|
80
|
+
color: var(--color-semantic-foreground-inverse);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* ─── Tertiary variant ─── */
|
|
84
|
+
|
|
85
|
+
._button--tertiary_188fd_85 {
|
|
86
|
+
background-color: var(--color-semantic-interactive-neutral-default);
|
|
87
|
+
border: var(--borderwidth-semantic-sm) solid var(--color-semantic-border-neutral-mid);
|
|
88
|
+
color: var(--color-semantic-foreground-secondary-strong);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
._button--tertiary_188fd_85:hover {
|
|
92
|
+
background-color: var(--color-semantic-interactive-neutral-hover);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
._button--tertiary_188fd_85:active {
|
|
96
|
+
background-color: var(--color-semantic-interactive-neutral-active);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
._button--tertiary_188fd_85:focus-visible {
|
|
100
|
+
background-color: var(--color-semantic-interactive-neutral-focus);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* ─── Disabled state ─── */
|
|
104
|
+
|
|
105
|
+
._button--disabled_188fd_105 {
|
|
106
|
+
pointer-events: none;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
._button--primary_188fd_41._button--disabled_188fd_105 {
|
|
110
|
+
background-color: var(--color-semantic-interactive-primary-disabled);
|
|
111
|
+
color: var(--color-semantic-foreground-muted);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
._button--secondary_188fd_60._button--disabled_188fd_105 {
|
|
115
|
+
border-color: var(--color-semantic-interactive-secondary-disabled);
|
|
116
|
+
color: var(--color-semantic-foreground-muted);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
._button--tertiary_188fd_85._button--disabled_188fd_105 {
|
|
120
|
+
background-color: var(--color-semantic-interactive-neutral-disabled);
|
|
121
|
+
color: var(--color-semantic-foreground-muted);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* ─── Dark color scheme ─── */
|
|
125
|
+
/* Styles apply from [data-color-scheme="dark"] down to (but not into) [data-color-scheme="light"]. */
|
|
126
|
+
|
|
127
|
+
@scope ([data-color-scheme='dark']) to ([data-color-scheme='light']) {
|
|
128
|
+
._button--primary_188fd_41._button--disabled_188fd_105 {
|
|
129
|
+
color: var(--color-semantic-foreground-inverse-muted);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
._button--secondary_188fd_60 {
|
|
133
|
+
border-color: var(--color-semantic-interactive-inverse-default);
|
|
134
|
+
color: var(--color-semantic-foreground-inverse);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
._button--secondary_188fd_60:hover {
|
|
138
|
+
background-color: var(--color-semantic-interactive-inverse-hover);
|
|
139
|
+
border-color: var(--color-semantic-interactive-inverse-hover);
|
|
140
|
+
color: var(--color-semantic-foreground-secondary-strong);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
._button--secondary_188fd_60:active {
|
|
144
|
+
background-color: var(--color-semantic-interactive-inverse-active);
|
|
145
|
+
border-color: var(--color-semantic-interactive-inverse-active);
|
|
146
|
+
color: var(--color-semantic-foreground-secondary-strong);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
._button--secondary_188fd_60:focus-visible {
|
|
150
|
+
background-color: var(--color-semantic-interactive-inverse-focus);
|
|
151
|
+
color: var(--color-semantic-foreground-secondary-strong);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
._button--secondary_188fd_60._button--disabled_188fd_105 {
|
|
155
|
+
border-color: var(--color-semantic-interactive-inverse-disabled);
|
|
156
|
+
color: var(--color-semantic-foreground-inverse-muted);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
._button--tertiary_188fd_85._button--disabled_188fd_105 {
|
|
160
|
+
border-color: var(--color-semantic-interactive-neutral-disabled);
|
|
161
|
+
color: var(--color-semantic-foreground-inverse-muted);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/* ─── Loading state ─── */
|
|
166
|
+
|
|
167
|
+
._button--loading_188fd_167 {
|
|
168
|
+
pointer-events: none;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
._button__content_188fd_171 {
|
|
172
|
+
flex: 0 1 auto;
|
|
173
|
+
min-width: 0;
|
|
174
|
+
overflow: hidden;
|
|
175
|
+
text-overflow: ellipsis;
|
|
176
|
+
white-space: nowrap;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
._button__spinner_188fd_179 {
|
|
180
|
+
flex: 0 0 auto;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,eAAO,MAAM,MAAM,GAAI,2EASpB,WAAW,4CA0Hb,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { jsx, Fragment, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import focusStyles from "../../styles/utils/focus.module.css.js";
|
|
3
|
+
import styles from "./Button.module.css.js";
|
|
4
|
+
import { cn } from "../../utils/cn/cn.js";
|
|
5
|
+
import { Spinner } from "../Spinner/Spinner.js";
|
|
6
|
+
const Button = ({
|
|
7
|
+
variant = "primary",
|
|
8
|
+
fullWidth = false,
|
|
9
|
+
size = "normal",
|
|
10
|
+
loading = false,
|
|
11
|
+
className,
|
|
12
|
+
children,
|
|
13
|
+
ref,
|
|
14
|
+
...props
|
|
15
|
+
}) => {
|
|
16
|
+
const isDisabled = "disabled" in props && props.disabled;
|
|
17
|
+
const isAnchor = "href" in props && props.href != null;
|
|
18
|
+
const classes = cn(
|
|
19
|
+
styles.button,
|
|
20
|
+
styles[`button--${variant}`],
|
|
21
|
+
{ [styles["button--full-width"]]: fullWidth },
|
|
22
|
+
styles[`button--${size}`],
|
|
23
|
+
focusStyles.focusable,
|
|
24
|
+
{ [styles["button--disabled"]]: isDisabled },
|
|
25
|
+
{ [styles["button--loading"]]: loading },
|
|
26
|
+
className
|
|
27
|
+
);
|
|
28
|
+
const content = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
29
|
+
/* @__PURE__ */ jsx("span", { className: styles.button__content, children }),
|
|
30
|
+
loading && /* @__PURE__ */ jsx(
|
|
31
|
+
Spinner,
|
|
32
|
+
{
|
|
33
|
+
size: size === "small" ? "xs" : "s",
|
|
34
|
+
color: "inherit",
|
|
35
|
+
"aria-hidden": "true",
|
|
36
|
+
"aria-label": void 0,
|
|
37
|
+
role: "presentation",
|
|
38
|
+
className: styles.button__spinner
|
|
39
|
+
}
|
|
40
|
+
)
|
|
41
|
+
] });
|
|
42
|
+
if (isAnchor) {
|
|
43
|
+
const { href, renderLink, ...anchorProps } = props;
|
|
44
|
+
const {
|
|
45
|
+
disabled: _disabled,
|
|
46
|
+
type: _type,
|
|
47
|
+
name: _name,
|
|
48
|
+
...safeAnchorProps
|
|
49
|
+
} = anchorProps;
|
|
50
|
+
const target = safeAnchorProps.target;
|
|
51
|
+
const rel = safeAnchorProps.rel;
|
|
52
|
+
const shouldHardenRel = target === "_blank";
|
|
53
|
+
const relTokens = new Set((rel ?? "").split(/\s+/).filter(Boolean));
|
|
54
|
+
if (shouldHardenRel) {
|
|
55
|
+
relTokens.add("noopener");
|
|
56
|
+
relTokens.add("noreferrer");
|
|
57
|
+
}
|
|
58
|
+
const hardenedRel = relTokens.size > 0 ? Array.from(relTokens).join(" ") : void 0;
|
|
59
|
+
const linkProps = {
|
|
60
|
+
...safeAnchorProps,
|
|
61
|
+
ref,
|
|
62
|
+
href,
|
|
63
|
+
rel: hardenedRel,
|
|
64
|
+
className: classes,
|
|
65
|
+
"aria-busy": loading || void 0,
|
|
66
|
+
"aria-disabled": loading || void 0,
|
|
67
|
+
tabIndex: loading ? -1 : void 0,
|
|
68
|
+
onClick: loading ? (e) => {
|
|
69
|
+
e.preventDefault();
|
|
70
|
+
e.stopPropagation();
|
|
71
|
+
} : safeAnchorProps.onClick,
|
|
72
|
+
children: content
|
|
73
|
+
};
|
|
74
|
+
if (renderLink) {
|
|
75
|
+
return /* @__PURE__ */ jsx(Fragment, { children: renderLink(linkProps) });
|
|
76
|
+
}
|
|
77
|
+
return /* @__PURE__ */ jsx("a", { ...linkProps });
|
|
78
|
+
}
|
|
79
|
+
const {
|
|
80
|
+
type = "button",
|
|
81
|
+
disabled,
|
|
82
|
+
href: _href,
|
|
83
|
+
target: _target,
|
|
84
|
+
rel: _rel,
|
|
85
|
+
renderLink: _renderLink,
|
|
86
|
+
...buttonProps
|
|
87
|
+
} = props;
|
|
88
|
+
return /* @__PURE__ */ jsx(
|
|
89
|
+
"button",
|
|
90
|
+
{
|
|
91
|
+
ref,
|
|
92
|
+
type,
|
|
93
|
+
disabled: disabled || loading,
|
|
94
|
+
className: classes,
|
|
95
|
+
"aria-busy": loading || void 0,
|
|
96
|
+
...buttonProps,
|
|
97
|
+
children: content
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
};
|
|
101
|
+
export {
|
|
102
|
+
Button
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=Button.js.map
|